From cafebded8e39b55eb39987b2d75d64de828b2053 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 22:28:38 +0000 Subject: [PATCH] Array-Ausgabe wie in Java: Referenz statt Inhalt, Arrays.toString zeigt den Inhalt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit System.out.println(zahlen) gibt in der Simulation und in Programmieren jetzt wie echtes Java eine Referenz wie [I@… aus. Arrays.toString und Arrays.deepToString zeigen den Inhalt; Arrays braucht import java.util.Arrays (Code-Export ergänzt ihn). Lektion 15 erklärt das in de/en/pt. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ugz28VVb2pkKNmmHKgsfxu --- CHANGELOG.md | 1 + web/lessons/de/15-arrays.md | 2 + web/lessons/en/15-arrays.md | 2 + web/lessons/pt/15-arrays.md | 2 + web/package-lock.json | 4 +- web/package.json | 2 +- web/src/core/codeGenerator.ts | 12 +- web/src/core/javaParser.ts | 7 +- web/src/core/simulation.ts | 53 +- web/test/javaParser.test.ts | 7 + web/test/simulation.test.ts | 30 +- ...lowApp-DuhVJmuY.js => flowApp-BKLJ3XOW.js} | 4 +- .../{index-SkWXk0au.js => index-BYX3WeVz.js} | 2734 +++++++++-------- ...tApp-DHliduJI.js => objectApp-p1vYjL7N.js} | 8 +- ...Zip-Cfe6zcKe.js => projectZip-DniyC4he.js} | 2 +- ...obot3d-BOvRTAxq.js => robot3d-DG_g7sTv.js} | 2 +- website/app/index.html | 2 +- 17 files changed, 1488 insertions(+), 1386 deletions(-) rename website/app/assets/{flowApp-DuhVJmuY.js => flowApp-BKLJ3XOW.js} (99%) rename website/app/assets/{index-SkWXk0au.js => index-BYX3WeVz.js} (93%) rename website/app/assets/{objectApp-DHliduJI.js => objectApp-p1vYjL7N.js} (99%) rename website/app/assets/{projectZip-Cfe6zcKe.js => projectZip-DniyC4he.js} (99%) rename website/app/assets/{robot3d-BOvRTAxq.js => robot3d-DG_g7sTv.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fdbb9a8..f5a56749 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog. ### Changed +- **Web 0.14.21, array output like in Java:** `System.out.println(zahlen)` now prints a reference such as `[I@1e3779b1` in Simulation and Programmieren, as real Java does (`[D@`, `[Z@`, `[Ljava.lang.String;@`, `[[I@`; the same array keeps its id). `Arrays.toString(…)` and `Arrays.deepToString(…)` show the content; `Arrays` needs `import java.util.Arrays;` like javac, and the Java export adds it. The variable table still shows the content. Lesson 15 „Jetzt in Java“ explains reference and `Arrays.toString` (de/en/pt). - **Web 0.14.18, upper and lower case, exercises „Warum läuft das nicht?“:** lesson 4 gets the new step „Groß- und Kleinschreibung“ (case-sensitive: `zahl`, `Zahl` and `ZAHL` are three names) with a structure chart exercise (`zahl` and `Zahl` both declared, `ZAHL` used), a Kompetenz item and a quiz question; glossary entry case-sensitive. Lessons 4–17 and 19 each get a Java exercise „Warum läuft das nicht?“: the start code doesn't run (misspelled variable such as `Alter`/`Grenze`/`properson`, variable used before it is created or never created, `system.out`, `.Length`, `charat`), the student reads the error message, fixes it and clicks Check (de/en/pt). The Code area now reports wrong case in Java words (`system.out.println`, `System.Out`, `Println`, `math.sqrt`, `text.Length()`, `name.charat(0)`) with the right spelling, blocks Run like javac and offers the 💡 fix; the simulation says „Unbekannte Variable: Zahl. Java unterscheidet Groß- und Kleinschreibung: Meintest du zahl?“ when the name exists in another case (all 21 languages). - **Web 0.14.17, hint on a missing line break:** when a Java exercise's output is right except that lines run together (e.g. `System.out.print` twice instead of `println`), the check now says „Fast! Es fehlt nur ein Zeilenumbruch …“ and explains print vs. println, instead of only showing a mismatch. `\n` inside an output now starts a new line, so `System.out.print("…\n")` counts like `println` (de/en/pt; all exercises). - **Web 0.14.16, „Im Editor öffnen“ under the Java examples in lessons 4–19:** every runnable Java example in the lesson text of lessons 4–19 now has the button „Im Editor öffnen“ (like the Mia example in lesson 4), so students can run and change it in Programmieren. Not in lesson 18, whose examples are a method and its call on their own, and not in cloze texts or games (de/en/pt). diff --git a/web/lessons/de/15-arrays.md b/web/lessons/de/15-arrays.md index 031c65dc..0f26eacc 100644 --- a/web/lessons/de/15-arrays.md +++ b/web/lessons/de/15-arrays.md @@ -166,6 +166,8 @@ for (int i = 0; i < zahlen.length; i++) { - Ein leeres Array mit 5 Fächern legst du mit `new int[5]` an. - `zahlen[i]` ist das Fach mit dem Index `i`, `zahlen.length` die Länge. +Gibst du das ganze Array aus, also `System.out.println(zahlen);`, zeigt Java nicht die Zahlen. Du siehst nur einen Text wie `[I@1b6d3586`. Das ist die **Referenz**, also die Stelle, an der das Array im Speicher liegt. Den Inhalt zeigt erst `Arrays.toString(zahlen)`, das ergibt `[2, 4, 6, 8, 10]`. Dafür schreibst du ganz oben `import java.util.Arrays;`. + ::: übung l15-java-noten titel: Notensumme in Java code: java diff --git a/web/lessons/en/15-arrays.md b/web/lessons/en/15-arrays.md index 13c2df5c..00f22bd2 100644 --- a/web/lessons/en/15-arrays.md +++ b/web/lessons/en/15-arrays.md @@ -166,6 +166,8 @@ for (int i = 0; i < numbers.length; i++) { - You create an empty array with 5 slots with `new int[5]`. - `numbers[i]` is the slot with index `i`, `numbers.length` is the length. +If you output the whole array, that is `System.out.println(numbers);`, Java does not show the numbers. You only see a text like `[I@1b6d3586`. This is the **reference**, the place where the array is stored in memory. `Arrays.toString(numbers)` shows the content: `[2, 4, 6, 8, 10]`. For this you write `import java.util.Arrays;` at the very top. + ::: übung l15-java-noten titel: Sum of grades in Java code: java diff --git a/web/lessons/pt/15-arrays.md b/web/lessons/pt/15-arrays.md index 636369dc..5bd5d827 100644 --- a/web/lessons/pt/15-arrays.md +++ b/web/lessons/pt/15-arrays.md @@ -166,6 +166,8 @@ for (int i = 0; i < numeros.length; i++) { - Um array vazio com 5 posições cria-se com `new int[5]`. - `numeros[i]` é a posição com o índice `i`, `numeros.length` é o comprimento. +Se mostrares o array inteiro, ou seja `System.out.println(numeros);`, o Java não mostra os números. Só vês um texto como `[I@1b6d3586`. É a **referência**, o sítio onde o array está guardado na memória. O conteúdo só aparece com `Arrays.toString(numeros)`, que dá `[2, 4, 6, 8, 10]`. Para isso escreves `import java.util.Arrays;` logo no início. + ::: übung l15-java-noten titel: Soma das notas em Java code: java diff --git a/web/package-lock.json b/web/package-lock.json index ef0fab8b..af7f1303 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "visustruct-web", - "version": "0.14.20", + "version": "0.14.21", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "visustruct-web", - "version": "0.14.20", + "version": "0.14.21", "dependencies": { "@codemirror/autocomplete": "^6.20.4", "@codemirror/commands": "^6.11.1", diff --git a/web/package.json b/web/package.json index cce51186..c8890754 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "visustruct-web", "private": true, - "version": "0.14.20", + "version": "0.14.21", "type": "module", "scripts": { "dev": "vite", diff --git a/web/src/core/codeGenerator.ts b/web/src/core/codeGenerator.ts index 38b60594..a529c828 100644 --- a/web/src/core/codeGenerator.ts +++ b/web/src/core/codeGenerator.ts @@ -1095,27 +1095,31 @@ function documentContainsJavaInput(doc: VSDocument): boolean { return found } +const arraysImport = 'import java.util.Arrays;' + /** * Imports für Dateien: `Files`/`Path` aus `java.nio.file`, `File`, `PrintWriter`, `FileReader` und `BufferedReader` aus - * `java.io`, dazu `java.util.Scanner` für einen Scanner auf einer Datei. + * `java.io`, dazu `java.util.Scanner` für einen Scanner auf einer Datei und `java.util.Arrays` für `Arrays.toString(…)`. */ export function fileImports(doc: VSDocument): string[] { let nio = false let io = false let scanner = false + let arrays = false walkElements(doc.elements, (e) => { for (const l of e.textLines) { + if (/\bArrays\s*\./.test(l)) arrays = true if (/\bFiles\s*\./.test(l)) nio = true if (/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(l)) io = true if (/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(l)) scanner = true } }) - return [...(io ? ['import java.io.*;'] : []), ...(nio ? ['import java.nio.file.*;'] : []), ...(scanner ? ['import java.util.Scanner;'] : [])] + return [...(io ? ['import java.io.*;'] : []), ...(nio ? ['import java.nio.file.*;'] : []), ...(scanner ? ['import java.util.Scanner;'] : []), ...(arrays ? [arraysImport] : [])] } /** Arbeitet das Programm mit Dateien? Dann kann eine IOException kommen, und Java verlangt `throws` an der Methode. */ export function documentReadsFiles(doc: VSDocument): boolean { - return fileImports(doc).length > 0 + return fileImports(doc).some((i) => i !== arraysImport) } function documentContainsJavaMathRandom(doc: VSDocument): boolean { @@ -1804,7 +1808,7 @@ export function generateJavaClassFile( const scannerField = methods.length > 0 && (hasInput || methodInput) // `Files.readString` kann eine IOException werfen; Java verlangt dann `throws` an der Methode. const imports = [...new Set([document, ...methodDocs.map((m) => m.d)].flatMap(fileImports))] - const files = imports.length > 0 + const files = imports.some((i) => i !== arraysImport) if ((hasInput || methodInput) && !imports.includes('import java.util.Scanner;')) imports.push('import java.util.Scanner;') for (const line of imports) out += line + '\n' if (imports.length) out += '\n' diff --git a/web/src/core/javaParser.ts b/web/src/core/javaParser.ts index 1698a27e..c366fbce 100644 --- a/web/src/core/javaParser.ts +++ b/web/src/core/javaParser.ts @@ -227,14 +227,15 @@ class Parser { /** * Wie javac: `Scanner` ohne `import java.util.Scanner;` (oder `java.util.*`) ist ein Fehler, ebenso `Files` und `Path` ohne - * `java.nio.file` und `File`, `PrintWriter`, `FileReader`, `FileWriter`, `BufferedReader` ohne `java.io`. + * `java.nio.file`, `File`, `PrintWriter`, `FileReader`, `FileWriter`, `BufferedReader` ohne `java.io` und `Arrays` ohne + * `java.util.Arrays`. */ checkImports() { const io = ['File', 'PrintWriter', 'FileReader', 'FileWriter', 'BufferedReader', 'IOException', 'FileNotFoundException'].map((n) => [n, 'java.io']) - for (const [name, pkg] of [['Scanner', 'java.util'], ['Files', 'java.nio.file'], ['Path', 'java.nio.file'], ['Paths', 'java.nio.file'], ...io]) { + for (const [name, pkg] of [['Scanner', 'java.util'], ['Arrays', 'java.util'], ['Files', 'java.nio.file'], ['Path', 'java.nio.file'], ['Paths', 'java.nio.file'], ...io]) { const known = this.imports.some((i) => i === `import${pkg}.${name};` || i === `import${pkg}.*;`) // `Files.readString(…)`: nur als Klasse vor einem Punkt, damit eine Variable `path` o. Ä. nicht zählt. - const use = this.toks.find((t, k) => t.kind === 'id' && t.text === name && (pkg !== 'java.nio.file' || this.toks[k + 1]?.text === '.')) + const use = this.toks.find((t, k) => t.kind === 'id' && t.text === name && (name !== 'Arrays' && pkg !== 'java.nio.file' || this.toks[k + 1]?.text === '.')) if (!known && use) { this.problem('web_parse_missing_import', use, pkg === 'java.util' ? `import ${pkg}.${name};` : `import ${pkg}.*;`) return diff --git a/web/src/core/simulation.ts b/web/src/core/simulation.ts index 0e838941..f0d37bee 100644 --- a/web/src/core/simulation.ts +++ b/web/src/core/simulation.ts @@ -245,6 +245,38 @@ function elementDefault(type: SimValueType): number | string | boolean { return type === 'string' ? '' : type === 'boolean' ? false : 0 } +/** + * Was `System.out.println(zahlen)` in Java ausgibt: nicht den Inhalt, sondern Typ und Kennung der Referenz, + * z. B. `[I@1b6d3586`. Den Inhalt zeigt erst `Arrays.toString(zahlen)`. Die Kennung bleibt für dasselbe Array gleich. + */ +const arrayIds = new WeakMap() +let nextArrayId = 0 + +export function javaReference(v: SimValue): string { + const code = (t: SimValueType) => ({ int: 'I', double: 'D', boolean: 'Z', string: 'Ljava.lang.String;' })[t] + const prefix = + v.kind === 'grid' ? '[[' + code(v.elementType) + : v.kind === 'intArray' ? '[I' + : v.kind === 'doubleArray' ? '[D' + : v.kind === 'booleanArray' ? '[Z' + : v.kind === 'stringArray' ? '[Ljava.lang.String;' + : undefined + if (!prefix || !('value' in v)) return describeValue(v) + const key = v.value as object + let id = arrayIds.get(key) + if (!id) { + id = ((Math.imul(++nextArrayId, 0x9e3779b1) >>> 0) & 0x7fffffff).toString(16) + arrayIds.set(key, id) + } + return prefix + '@' + id +} + +/** Ein Fach wurde geändert und das Array dabei kopiert: Es ist in Java aber dasselbe Array, also dieselbe Kennung. */ +function keepArrayId(from: object, to: object): void { + const id = arrayIds.get(from) + if (id) arrayIds.set(to, id) +} + function isArrayValue(v: SimValue): boolean { return v.kind === 'intArray' || v.kind === 'doubleArray' || v.kind === 'stringArray' || v.kind === 'booleanArray' || v.kind === 'grid' } @@ -1938,7 +1970,10 @@ export class SimulationEngine { } } - /** `Integer.parseInt(…)`, `Double.parseDouble(…)`, `String.valueOf(…)`, `Files.readString(Path.of(…))`. */ + /** + * `Integer.parseInt(…)`, `Double.parseDouble(…)`, `String.valueOf(…)`, `Files.readString(Path.of(…))`, + * `Arrays.toString(…)` und `Arrays.deepToString(…)`. + */ private evaluateStaticCall(text: string, call: { target: string; method: string; args: string[] }): SimValue | undefined { const one = () => { if (call.args.length !== 1) throw invalid(text) @@ -1964,6 +1999,17 @@ export class SimulationEngine { } case 'String.valueOf': return { kind: 'string', value: this.evaluateOutputExpression(one()) } + case 'Arrays.toString': + case 'Arrays.deepToString': { + const array = this.state.variables.get(one().trim()) + if (!array || !isArrayValue(array)) throw invalid(text) + // `Arrays.toString` zeigt bei einem 2D-Array nur die Referenzen der Zeilen, `deepToString` alles. + if (array.kind === 'grid' && call.method === 'toString') { + const rows = array.value.map((row) => javaReference({ kind: `${array.elementType}Array`, value: row } as SimValue)) + return { kind: 'string', value: '[' + rows.join(', ') + ']' } + } + return { kind: 'string', value: describeValue(array) } + } case 'Files.readString': { const path = /^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(one().trim()) if (!path) throw invalid(text) @@ -2076,6 +2122,7 @@ export class SimulationEngine { if (raw === undefined || isArrayValue(value)) throw invalid(trimmed) const rows = old.value.map((row) => [...row]) rows[indices[0]][indices[1]] = raw as number | string | boolean + keepArrayId(old.value, rows) this.state.variables.set(access.arrayName, { ...old, value: rows }) return } @@ -2095,6 +2142,7 @@ export class SimulationEngine { } if (index >= (updated.value as unknown[]).length) throw invalid(trimmed) ;(updated.value as unknown[])[index] = value.value + keepArrayId(old.value, updated.value) this.state.variables.set(access.arrayName, updated) } @@ -2122,7 +2170,8 @@ export class SimulationEngine { else sum = sum.kind === 'int' && value.kind === 'int' ? int(sum.value + value.value) : dbl((sum as { value: number }).value + (value as { value: number }).value) continue } - text = (text ?? (sum ? describeValue(sum) : '')) + describeValue(value) + // Ein ganzes Array gibt Java nur als Referenz aus, z. B. `[I@1b6d3586`. + text = (text ?? (sum ? describeValue(sum) : '')) + javaReference(value) sum = undefined } return text ?? (sum ? describeValue(sum) : '') diff --git a/web/test/javaParser.test.ts b/web/test/javaParser.test.ts index 4fa87a5d..567b1251 100644 --- a/web/test/javaParser.test.ts +++ b/web/test/javaParser.test.ts @@ -214,6 +214,13 @@ describe('Java tippen → Struktogramm', () => { expect(ask(fach + 'note[i] = scanner.nextInt();').request?.prompt).toBe('note[i]:') }) + it('Arrays ohne import ist ein Fehler, wie bei javac', () => { + const keys = (src: string) => parse(src).problems.map((p) => p.key) + expect(keys('int[] a = {1, 2};\nSystem.out.println(Arrays.toString(a));')).toEqual(['web_parse_missing_import']) + expect(keys('import java.util.Arrays;\nint[] a = {1, 2};\nSystem.out.println(Arrays.toString(a));')).toEqual([]) + expect(keys('int[] a = {1, 2};\nSystem.out.println(a);')).toEqual([]) + }) + it('Aufruf eines Unterprogramms aus einem anderen Reiter', () => { expect(parse('int y = quadrat(4);', new Set(['quadrat'])).elements[0].type).toBe(ElementType.aufruf) expect(parse('int y = quadrat(4);').elements[0].type).toBe(ElementType.anweisung) diff --git a/web/test/simulation.test.ts b/web/test/simulation.test.ts index 2427423a..132976c5 100644 --- a/web/test/simulation.test.ts +++ b/web/test/simulation.test.ts @@ -173,6 +173,34 @@ describe('Simulation', () => { expect(engine.message).toBe('Simulation finished.') }) + it('gibt ein ganzes Array wie Java als Referenz aus, den Inhalt erst mit Arrays.toString', () => { + const state = runSimulation( + doc([ + stmt('int[] zahlenreihe = {1, 2, 3}'), + stmt('String[] namen = {"Ada", "Bob"}'), + stmt('double[][] t = new double[2][2]'), + stmt('output: zahlenreihe'), + stmt('zahlenreihe[0] = 9'), + stmt('output: "Reihe: " + zahlenreihe'), + stmt('output: namen'), + stmt('output: t'), + stmt('output: Arrays.toString(zahlenreihe)'), + stmt('output: Arrays.toString(namen)'), + stmt('output: Arrays.deepToString(t)'), + stmt('output: Arrays.toString(t)'), + ]), + ) + const [ref, refAgain, names, grid, ...rest] = state.outputLines + expect(ref).toMatch(/^\[I@[0-9a-f]+$/u) + expect(refAgain).toBe('Reihe: ' + ref) + expect(names).toMatch(/^\[Ljava\.lang\.String;@[0-9a-f]+$/u) + expect(grid).toMatch(/^\[\[D@[0-9a-f]+$/u) + expect(rest.slice(0, 3)).toEqual(['[9, 2, 3]', '[Ada, Bob]', '[[0.0, 0.0], [0.0, 0.0]]']) + expect(rest[3]).toMatch(/^\[\[D@[0-9a-f]+, \[D@[0-9a-f]+\]$/u) + // Die Variablentabelle zeigt weiter den Inhalt. + expect(state.variables.get('zahlenreihe')).toEqual({ kind: 'intArray', value: [9, 2, 3] }) + }) + it('Werte und Arrays', () => { const state = runSimulation( doc([ @@ -180,7 +208,7 @@ describe('Simulation', () => { stmt('int[] a = {3, 4, 5}'), stmt('a[1] = a[0] * 10'), stmt('String s = "x"'), - stmt('print: "len=" + a.length + " a=" + a + " d=" + d'), + stmt('print: "len=" + a.length + " a=" + Arrays.toString(a) + " d=" + d'), stmt('d += 1'), ]), ) diff --git a/website/app/assets/flowApp-DuhVJmuY.js b/website/app/assets/flowApp-BKLJ3XOW.js similarity index 99% rename from website/app/assets/flowApp-DuhVJmuY.js rename to website/app/assets/flowApp-BKLJ3XOW.js index cf38c5a1..8df12809 100644 --- a/website/app/assets/flowApp-DuhVJmuY.js +++ b/website/app/assets/flowApp-BKLJ3XOW.js @@ -1,4 +1,4 @@ -var dt=Object.defineProperty;var lt=(n,t,e)=>t in n?dt(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>lt(n,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,n as ut,f as ft,o as G,q as pt,u as gt,v as wt,x as vt,y as mt,l as xt}from"./index-SkWXk0au.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,yt=170;function bt(n,t,e){const i=[];for(const s of n.split(` +var dt=Object.defineProperty;var lt=(n,t,e)=>t in n?dt(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>lt(n,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,n as ut,f as ft,o as G,q as pt,u as gt,v as wt,x as vt,y as mt,l as xt}from"./index-BYX3WeVz.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,yt=170;function bt(n,t,e){const i=[];for(const s of n.split(` `)){let o="";for(const r of s.split(/\s+/).filter(Boolean)){const a=o?`${o} ${r}`:r;o&&e(a)>t?(i.push(o),o=r):o=a}i.push(o)}return i.length?i:[""]}const q=n=>Math.round(n/m)*m;function C(n,t){const e=bt(n.text,yt,t),i=Math.max(0,...e.map(t)),s=e.length*H;let o,r;if(n.shape==="verzweigung")o=Math.max(140,i*1.7+30),r=Math.max(80,s*1.8+24);else{const a=n.shape==="ein"?44:n.shape==="unterprogramm"?40:n.shape==="anweisung"?24:36;o=Math.max(n.shape==="start"||n.shape==="ende"?100:120,i+a),r=Math.max(40,s+18)}return{x:n.x,y:n.y,w:Math.ceil(o/m)*m,h:Math.ceil(r/m)*m,lines:e}}function V(n){return n==="ende"?[]:n==="verzweigung"?["ja","nein"]:["out"]}const D=n=>n!=="start";function P(n,t,e){var s;if(e==="out")return"bottom";const i=((s=n.yesRight)==null?void 0:s.includes(t.id))??!1;return e==="ja"===i?"right":"bottom"}function F(n,t){return t==="bottom"?[n.x,n.y+n.h/2]:[n.x+n.w/2,n.y]}const _t=n=>[n.x,n.y-n.h/2];function $t(n,t,e,i=0){const[s,o]=F(n,t),[r,a]=_t(e),d=m,u=Math.max(n.x+n.w/2,e.x+e.w/2)+d*(1.5+i);if(t==="bottom"){if(a>=o+d){if(s===r)return[[s,o],[r,a]];const l=o+d;return[[s,o],[s,l],[r,l],[r,a]]}return[[s,o],[s,o+d],[u,o+d],[u,a-d],[r,a-d],[r,a]]}const p=e.x-e.w/2;if(p>=s+d&&Math.abs(e.y-o)=o+d){if(r>=s+d)return[[s,o],[r,o],[r,a]];const l=s+d;return[[s,o],[l,o],[l,a-d],[r,a-d],[r,a]]}const f=Math.max(s+d,u);return[[s,o],[f,o],[f,a-d],[r,a-d],[r,a]]}function nt(n=""){return{title:n,nodes:[],edges:[]}}function it(n,t){const e=new Set([...n.nodes.map(s=>s.id),...n.edges.map(s=>s.id)]);let i=1;for(;e.has(`${t}${i}`);)i++;return`${t}${i}`}function O(n,t,e,i,s){const o=it(n,"n");return{doc:{...n,nodes:[...n.nodes,{id:o,shape:t,x:q(e),y:q(i),text:s}]},id:o}}function J(n,t,e,i){return{...n,nodes:n.nodes.map(s=>s.id===t?{...s,x:Math.max(m*4,q(e)),y:Math.max(m*2,q(i))}:s)}}function Lt(n,t,e){return{...n,nodes:n.nodes.map(i=>i.id===t?{...i,text:e}:i)}}function _(n,t,e,i){const s=n.nodes.find(a=>a.id===t),o=n.nodes.find(a=>a.id===i);if(!s||!o||t===i||!V(s.shape).includes(e)||!D(o.shape))return n;const r=n.edges.filter(a=>!(a.from===t&&a.port===e));return{...n,edges:[...r,{id:it(n,"e"),from:t,port:e,to:i}]}}function Et(n,t){return V(t.shape).find(e=>!n.edges.some(i=>i.from===t.id&&i.port===e))}function kt(n,t){var e;return{...n,nodes:n.nodes.filter(i=>i.id!==t),edges:n.edges.filter(i=>i.from!==t&&i.to!==t),yesRight:(e=n.yesRight)==null?void 0:e.filter(i=>i!==t)}}function St(n,t){return{...n,edges:n.edges.filter(e=>e.id!==t)}}function ot(n,t){const e=new Set(n.yesRight??[]);return e.has(t)?e.delete(t):e.add(t),{...n,yesRight:[...e]}}function b(n){return JSON.stringify({format:"visuflow",version:1,...n},null,2)}function W(n){let t;try{t=JSON.parse(n)}catch{return}if(!t||typeof t!="object")return;const e=t;if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return;const i=[];for(const o of e.nodes)!o||typeof o.id!="string"||!et.includes(o.shape)||!Number.isFinite(o.x)||!Number.isFinite(o.y)||i.some(r=>r.id===o.id)||i.push({id:o.id,shape:o.shape,x:o.x,y:o.y,text:typeof o.text=="string"?o.text:""});let s={title:typeof e.title=="string"?e.title:"",nodes:i,edges:[]};for(const o of e.edges)!o||typeof o.from!="string"||typeof o.to!="string"||typeof o.port!="string"||(s=_(s,o.from,o.port,o.to));return Array.isArray(e.yesRight)&&(s.yesRight=e.yesRight.filter(o=>typeof o=="string"&&i.some(r=>r.id===o))),s}const z="http://www.w3.org/2000/svg",X="visuflow.doc",Mt=100,Y=14,rt=`${Y}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,T="#1c1c1e",w=n=>n.replace(/[&<>"]/g,t=>({"&":"&","<":"<",">":">",'"':"""})[t]);function At(n){try{return localStorage.getItem(n)}catch{return null}}function Z(n,t){try{localStorage.setItem(n,t)}catch{}}function It(){const n=xt(),t=n==="pt-PT"?"pt":n==="de"?"de":"en";return`${/\/app\/(index\.html)?$/.test(location.pathname)?"../":"https://visustruct.org/"}${t}/index.html`}function j(n,t,e){const i=URL.createObjectURL(new Blob([t],{type:e})),s=document.createElement("a");s.href=i,s.download=n,s.click(),setTimeout(()=>URL.revokeObjectURL(i),1e3)}function v(n,t={}){const e=document.createElementNS(z,n);for(const[i,s]of Object.entries(t))e.setAttribute(i,String(s));return e}let N;function R(n){return N===void 0&&(N=document.createElement("canvas").getContext("2d")),N?(N.font=rt,N.measureText(n).width):n.length*Y*.55}const Ct=n=>h(`web_visuflow_shape_${n}`),B=n=>h(`web_visuflow_text_${n}`);function at(n,t){const e=t.x-t.w/2,i=t.x+t.w/2,s=t.y-t.h/2,o=t.y+t.h/2;return n==="verzweigung"?v("path",{d:`M${t.x} ${s} L${i} ${t.y} L${t.x} ${o} L${e} ${t.y} Z`}):n==="ein"?v("path",{d:`M${e+14} ${s} L${i} ${s} L${i-14} ${o} L${e} ${o} Z`}):n==="unterprogramm"?v("path",{d:`M${e} ${s} H${i} V${o} H${e} Z M${e+10} ${s} V${o} M${i-10} ${s} V${o}`}):v("rect",{x:e,y:s,width:t.w,height:t.h,rx:n==="anweisung"?2:t.h/2})}function Rt(n){const t=v("text",{"text-anchor":"middle","font-size":Y,fill:T});return n.lines.forEach((e,i)=>{const s=v("tspan",{x:n.x,y:n.y+5+(i-(n.lines.length-1)/2)*H});s.textContent=e,t.append(s)}),t}function Q(n){const t=v("svg",{viewBox:"0 0 64 36",width:64,height:36,"aria-hidden":"true"}),e=at(n,{x:32,y:18,w:n==="verzweigung"?54:56,h:n==="verzweigung"?32:26});return e.setAttribute("fill",st[n]),e.setAttribute("stroke",T),e.setAttribute("stroke-width","1.5"),t.append(e),t.outerHTML}function tt(){let n=nt(h("web_visuflow_example_title"));const t=[],e=(p,f,l,c)=>{const g=O(n,p,f,l,c);n=g.doc,t.push(g.id)};e("start",240,60,B("start")),e("anweisung",240,160,h("web_visuflow_example_water")),e("anweisung",240,260,h("web_visuflow_example_bag")),e("verzweigung",240,380,h("web_visuflow_example_hot")),e("anweisung",480,380,h("web_visuflow_example_wait")),e("anweisung",240,500,h("web_visuflow_example_drink")),e("ende",240,600,B("ende"));const[i,s,o,r,a,d,u]=t;return n=_(n,i,"out",s),n=_(n,s,"out",o),n=_(n,o,"out",r),n=ot(n,r),n=_(n,r,"ja",a),n=_(n,a,"out",r),n=_(n,r,"nein",d),n=_(n,d,"out",u),n}function Tt(){return O(nt(),"start",240,60,B("start")).doc}class Pt{constructor(t){y(this,"shell");y(this,"svg");y(this,"scroller");y(this,"status");y(this,"titleInput");y(this,"doc");y(this,"selection");y(this,"history",[]);y(this,"future",[]);y(this,"editor");y(this,"dragLine");document.documentElement.classList.add("visuflow-theme"),history.replaceState(history.state,"",`${location.pathname}?visuflow${location.hash}`),this.doc=W(At(X)??"")??tt(),this.shell=document.createElement("div"),this.shell.className="shell visuflow",t.replaceWith(this.shell),this.build(),this.render(),window.addEventListener("keydown",e=>this.onKey(e))}build(){const t=(l,c,g,x=c)=>``,e=et.map(l=>``).join("");this.shell.innerHTML=`
VisuFlow ${w(h("web_visuflow_subtitle"))} @@ -28,7 +28,7 @@ var dt=Object.defineProperty;var lt=(n,t,e)=>t in n?dt(n,t,{enumerable:!0,config ${ht()}
- ${w(h("web_about_version_fmt").replace("%@","0.14.20"))} + ${w(h("web_about_version_fmt").replace("%@","0.14.21"))}
diff --git a/website/app/assets/index-SkWXk0au.js b/website/app/assets/index-BYX3WeVz.js similarity index 93% rename from website/app/assets/index-SkWXk0au.js rename to website/app/assets/index-BYX3WeVz.js index df870e3b..2de7c675 100644 --- a/website/app/assets/index-SkWXk0au.js +++ b/website/app/assets/index-BYX3WeVz.js @@ -1,77 +1,77 @@ -var k2=Object.defineProperty;var S2=(i,e,t)=>e in i?k2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>S2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const T2="modulepreload",j2=function(i,e){return new URL(i,e).href},nu={},K=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=j2(m,n),m in nu)return;nu[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":T2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var T=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(T||{});function _2(i){return i===3||i===4||i===5||i===6}function C2(i){return i===1||i===2}function _e(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function A2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case T.forSchleife:return e.length<=1?e:[O2(e)];case T.verzweigung:return ea("if",e);case T.whileSchleife:return ea("while",e);case T.doUntilSchleife:return ea("while",P2(e));case T.fallauswahl:return ea("switch",e);default:return e}}function P2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function iu(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function ea(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function O2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const qd={[T.anweisung]:"Anweisung",[T.verzweigung]:"Bedingung",[T.fallauswahl]:"Fallauswahl",[T.forSchleife]:"for 0 < i < anzahl",[T.whileSchleife]:"while …",[T.doUntilSchleife]:"while …",[T.endlosschleife]:"endless",[T.aussprung]:"break",[T.aufruf]:"Aufruf()",[T.leerElement]:"ø"};function M2(i){Object.assign(qd,i)}function Nl(i){return A2(i)??[qd[i.type]]}class We extends Error{}const xn=i=>structuredClone(i);function nn(){return _e(T.anweisung,{textLines:["ø"]})}function Z2(){return{caption:"",elements:[nn()]}}function Jl(i){if(i.type===T.leerElement)return!0;if(i.type===T.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function kn(i,e){const t=vt(i,e);return t!==void 0&&Jl(t)}function Gi(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return Gi(Ud(i[t],a),s)}function Ud(i,e){if(_2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if(C2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Mt(i,e){const{list:t,index:n}=Gi(i.elements,e);return t[n]}function vt(i,e){try{return Mt(i,e)}catch{return}}function Mn(i,e,t){const n=xn(i),{list:a,index:s}=Gi(n.elements,e);return a[s]=xn(t),n}function H1(i,e,t){const n=xn(Mt(i,e));return n.textLines=t.length===0?[""]:t,Mn(i,e,n)}function xr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!kn(i,e):vt(i,e)!==void 0}function ki(i,e){const t=xn(i),{list:n,index:a}=Gi(t.elements,e);if(e.length===1&&n.length===1){if(Jl(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=nn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(nn()),t}function li(i,e,t,n){const a=xn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Gi(a.elements,r);s=Ud(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,xn(n)),a}function Yd(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1],e)}function fo(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1]+1,e)}function Fl(i,e){return i.lengthe[n]===t)}function Rl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Gl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function D2(i,e,t){if(Gl(e,t))return i;if(Fl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return Yd(a,n,Rl(t,e))}function B2(i,e,t){if(Gl(e,t))return i;if(Fl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return fo(a,n,Rl(t,e))}function L2(i,e,t){if(!kn(i,t))throw new We("Invalid element path.");if(Gl(e,t))return i;if(Fl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return Mn(a,Rl(t,e),n)}function W2(i,e){const t=xn(Mt(i,e)),n=t.cases;if(t.type!==T.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[nn()]}),{doc:Mn(i,e,t),path:[...e,s,0]}}function E2(i,e,t){const n=xn(Mt(i,e)),a=n.cases;if(n.type!==T.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Mn(i,e,n),path:[...e,s,0]}}function N2(i,e,t,n){const a=xn(Mt(i,e)),s=a.cases;if(a.type!==T.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,Mn(i,e,a)}function J2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=vt(e,a))==null?void 0:t.type)===T.fallauswahl)return a}}function F2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function br(i,e){if(e.elements.length!==0)return!i||!vt(e,i)?[0]:i}const $d=i=>i!==void 0&&/\s/.test(i);function ts(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function R2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function au(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function G2(i,e){const t=R2(e);switch(i){case"statement":return t;case"input":return au("input:",t);case"output":return au("output:",t)}}const Na=i=>$d(i[0])?i.slice(1):i;function H2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?Na(e.slice(6)):t.startsWith("output:")?Na(e.slice(7)):t.startsWith("print:")?Na(e.slice(6)):i}function su(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||$d(n[0])||n[0]==="("))return e;const a=Na(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function ru(i,e){if(i==="input:"||i==="output:")return H2(e);const t=su(i,e);if(i==="while"&&t===e){const n=su("until",e);if(n!==e)return n}return t}function V2(i,e){return e===""?`${i} `:`${i} ${e}`}function Xd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function ou(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function Q2(i){let e=Xd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Vs='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function q2(i,e){return`${e==="bold"?700:500} ${i}px ${Vs}`}const Kd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function U2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",Vs),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let vr;function eh(){return vr===void 0&&(vr=U2()??null),vr??void 0}function th(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function lu(i,e){const t=`${i}|${e}`;let n=uu.get(t);if(!n){const a=eh();if(n={ascent:i*.95,descent:i*.24},a){th(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}uu.set(t,n)}return n}const uu=new Map;function Y2(){const i=eh();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(th(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return Kd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=q2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const nh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function $2(i){return{...nh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const ta=i=>i===T.forSchleife||i===T.whileSchleife||i===T.doUntilSchleife||i===T.endlosschleife,na=i=>i===T.fallauswahl||i===T.verzweigung;function ia(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function it(i){return{...i,frame:{...i.frame}}}class ih{constructor(e=nh,t=Kd){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=it(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=it(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=it(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=it(e);return n.frame.width>0?na(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,ta(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=it(e);return na(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):ta(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=it(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===T.anweisung||s===T.leerElement||s===T.aufruf||s===T.aussprung||ta(s);let a;switch(t.element.type){case T.forSchleife:case T.whileSchleife:case T.endlosschleife:{const s=t.element.type===T.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case T.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=it(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===T.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case T.fallauswahl:a=40;break;case T.verzweigung:a=20;break;case T.forSchleife:case T.whileSchleife:case T.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===T.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return na(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===T.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===T.leerElement?76:e.type===T.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(na(e.type))return this.layoutMultiway(e,t,n,a);if(ta(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ia(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,v)=>b+v.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===T.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),z=Math.max(this.minWidth(e),r(w)+x),I=s(w)+v+b,k=Math.max(0,z-x),S=ia(a,e,{x:t,y:n,width:z,height:I},v);return S.topBandHeight=b,S.loopBodyLeadingInset=x,S.children=w.map(_=>{const M=it(_);return M.frame.x=t+x,M.frame.width=k,this.stretchDescendantsWidths(M,k)}),S}const l=20,u=this.headerHeight(e),m=e.type===T.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ia(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=it(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const v=t+c,w=this.layoutList(x.elements,v,n+s,[...a,b]),z=Math.max(0,...w.map(S=>S.frame.width));let I;e.type===T.verzweigung&&o===2?I=Math.max(z,(b===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const k=w.reduce((S,_)=>S+_.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:I,height:k}),m.push(w.map(S=>{const _=it(S);return _.frame.x=v,_.frame.width=I,this.stretchDescendantsWidths(_,I)})),c+=I}),e.type===T.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,v=t+x,w=v-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:v,width:x},c=x*2,m[0]=m[0].map(z=>{const I=it(z);return I.frame.x=b,I.frame.width=x,this.stretchDescendantsWidths(I,x)}),m[1]=m[1].map(z=>{const I=xo(z,w);return I.frame.width=x,this.stretchDescendantsWidths(I,x)})}if(m.length>0){const x=X2(m,n+s);m=x.columns.map(b=>b.map(v=>this.stretchLoopBodiesVertically(v)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const v=[],w=[];u.forEach((z,I)=>{const k=z.width*x;w.push(m[I].map(S=>{const _=it(S);return _.frame.x=b,_.frame.width=k,this.stretchDescendantsWidths(_,k)})),v.push({x:b,y:z.y,width:k,height:z.height}),b+=k}),u=v,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ia(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===T.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function ah(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i),n=a=>{const s=it(a);return s.frame.y+=e,ah(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function xo(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>xo(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>xo(n,e)),t}function X2(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=it(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),v=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=ah(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const K2=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function mu(i){const e=nn;switch(i){case"anweisung":return _e(T.anweisung);case"verzweigung":return _e(T.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return _e(T.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return _e(T.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return _e(T.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return _e(T.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return _e(T.endlosschleife,{loopBody:[e()]});case"aussprung":return _e(T.aussprung);case"aufruf":return _e(T.aufruf)}}function ns(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function bo(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class cu extends Error{}function Hl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new cu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new cu("Invalid XML: root element is not .");const n={caption:hu(t,"caption")??"",elements:yo(t)},a=hu(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ui(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ui(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function m1(i){const e=(n,a)=>a===void 0?"":` ${n}="${sh(a)}"`;let t=` -`;t+=" -`;for(const n of i.elements)t+=vo(n," ");return t+=` -`,t}function vo(i,e){let t=`${e} -`;for(const n of i.textLines)t+=`${e} ${e3(ns(n))} +var _2=Object.defineProperty;var C2=(i,e,t)=>e in i?_2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>C2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const A2="modulepreload",P2=function(i,e){return new URL(i,e).href},au={},K=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=P2(m,n),m in au)return;au[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":A2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var T=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(T||{});function O2(i){return i===3||i===4||i===5||i===6}function M2(i){return i===1||i===2}function _e(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function Z2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case T.forSchleife:return e.length<=1?e:[B2(e)];case T.verzweigung:return ea("if",e);case T.whileSchleife:return ea("while",e);case T.doUntilSchleife:return ea("while",D2(e));case T.fallauswahl:return ea("switch",e);default:return e}}function D2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function su(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function ea(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function B2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const Xd={[T.anweisung]:"Anweisung",[T.verzweigung]:"Bedingung",[T.fallauswahl]:"Fallauswahl",[T.forSchleife]:"for 0 < i < anzahl",[T.whileSchleife]:"while …",[T.doUntilSchleife]:"while …",[T.endlosschleife]:"endless",[T.aussprung]:"break",[T.aufruf]:"Aufruf()",[T.leerElement]:"ø"};function L2(i){Object.assign(Xd,i)}function Jl(i){return Z2(i)??[Xd[i.type]]}class We extends Error{}const xn=i=>structuredClone(i);function nn(){return _e(T.anweisung,{textLines:["ø"]})}function W2(){return{caption:"",elements:[nn()]}}function Fl(i){if(i.type===T.leerElement)return!0;if(i.type===T.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function kn(i,e){const t=vt(i,e);return t!==void 0&&Fl(t)}function Gi(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return Gi(Kd(i[t],a),s)}function Kd(i,e){if(O2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if(M2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Mt(i,e){const{list:t,index:n}=Gi(i.elements,e);return t[n]}function vt(i,e){try{return Mt(i,e)}catch{return}}function Mn(i,e,t){const n=xn(i),{list:a,index:s}=Gi(n.elements,e);return a[s]=xn(t),n}function H1(i,e,t){const n=xn(Mt(i,e));return n.textLines=t.length===0?[""]:t,Mn(i,e,n)}function vr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!kn(i,e):vt(i,e)!==void 0}function ki(i,e){const t=xn(i),{list:n,index:a}=Gi(t.elements,e);if(e.length===1&&n.length===1){if(Fl(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=nn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(nn()),t}function li(i,e,t,n){const a=xn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Gi(a.elements,r);s=Kd(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,xn(n)),a}function eh(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1],e)}function bo(i,e,t){if(t.length===0)throw new We("Invalid element path.");return li(i,t.slice(0,-1),t[t.length-1]+1,e)}function Rl(i,e){return i.lengthe[n]===t)}function Gl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Hl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function E2(i,e,t){if(Hl(e,t))return i;if(Rl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return eh(a,n,Gl(t,e))}function N2(i,e,t){if(Hl(e,t))return i;if(Rl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return bo(a,n,Gl(t,e))}function J2(i,e,t){if(!kn(i,t))throw new We("Invalid element path.");if(Hl(e,t))return i;if(Rl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ki(i,e);return Mn(a,Gl(t,e),n)}function F2(i,e){const t=xn(Mt(i,e)),n=t.cases;if(t.type!==T.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[nn()]}),{doc:Mn(i,e,t),path:[...e,s,0]}}function R2(i,e,t){const n=xn(Mt(i,e)),a=n.cases;if(n.type!==T.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Mn(i,e,n),path:[...e,s,0]}}function G2(i,e,t,n){const a=xn(Mt(i,e)),s=a.cases;if(a.type!==T.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,Mn(i,e,a)}function H2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=vt(e,a))==null?void 0:t.type)===T.fallauswahl)return a}}function V2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function yr(i,e){if(e.elements.length!==0)return!i||!vt(e,i)?[0]:i}const th=i=>i!==void 0&&/\s/.test(i);function ns(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function Q2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function ru(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function q2(i,e){const t=Q2(e);switch(i){case"statement":return t;case"input":return ru("input:",t);case"output":return ru("output:",t)}}const Na=i=>th(i[0])?i.slice(1):i;function U2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?Na(e.slice(6)):t.startsWith("output:")?Na(e.slice(7)):t.startsWith("print:")?Na(e.slice(6)):i}function ou(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||th(n[0])||n[0]==="("))return e;const a=Na(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function lu(i,e){if(i==="input:"||i==="output:")return U2(e);const t=ou(i,e);if(i==="while"&&t===e){const n=ou("until",e);if(n!==e)return n}return t}function Y2(i,e){return e===""?`${i} `:`${i} ${e}`}function nh(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function uu(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function $2(i){let e=nh(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const qs='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function X2(i,e){return`${e==="bold"?700:500} ${i}px ${qs}`}const ih=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function K2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",qs),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let wr;function ah(){return wr===void 0&&(wr=K2()??null),wr??void 0}function sh(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function mu(i,e){const t=`${i}|${e}`;let n=cu.get(t);if(!n){const a=ah();if(n={ascent:i*.95,descent:i*.24},a){sh(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}cu.set(t,n)}return n}const cu=new Map;function e3(){const i=ah();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(sh(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return ih;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=X2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const rh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function t3(i){return{...rh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const ta=i=>i===T.forSchleife||i===T.whileSchleife||i===T.doUntilSchleife||i===T.endlosschleife,na=i=>i===T.fallauswahl||i===T.verzweigung;function ia(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function it(i){return{...i,frame:{...i.frame}}}class oh{constructor(e=rh,t=ih){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=it(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=it(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=it(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=it(e);return n.frame.width>0?na(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,ta(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=it(e);return na(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):ta(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=it(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===T.anweisung||s===T.leerElement||s===T.aufruf||s===T.aussprung||ta(s);let a;switch(t.element.type){case T.forSchleife:case T.whileSchleife:case T.endlosschleife:{const s=t.element.type===T.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case T.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=it(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===T.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case T.fallauswahl:a=40;break;case T.verzweigung:a=20;break;case T.forSchleife:case T.whileSchleife:case T.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===T.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return na(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===T.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===T.leerElement?76:e.type===T.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(na(e.type))return this.layoutMultiway(e,t,n,a);if(ta(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ia(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,v)=>b+v.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===T.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),z=Math.max(this.minWidth(e),r(w)+x),I=s(w)+v+b,k=Math.max(0,z-x),S=ia(a,e,{x:t,y:n,width:z,height:I},v);return S.topBandHeight=b,S.loopBodyLeadingInset=x,S.children=w.map(_=>{const M=it(_);return M.frame.x=t+x,M.frame.width=k,this.stretchDescendantsWidths(M,k)}),S}const l=20,u=this.headerHeight(e),m=e.type===T.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ia(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=it(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const v=t+c,w=this.layoutList(x.elements,v,n+s,[...a,b]),z=Math.max(0,...w.map(S=>S.frame.width));let I;e.type===T.verzweigung&&o===2?I=Math.max(z,(b===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const k=w.reduce((S,_)=>S+_.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:I,height:k}),m.push(w.map(S=>{const _=it(S);return _.frame.x=v,_.frame.width=I,this.stretchDescendantsWidths(_,I)})),c+=I}),e.type===T.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,v=t+x,w=v-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:v,width:x},c=x*2,m[0]=m[0].map(z=>{const I=it(z);return I.frame.x=b,I.frame.width=x,this.stretchDescendantsWidths(I,x)}),m[1]=m[1].map(z=>{const I=vo(z,w);return I.frame.width=x,this.stretchDescendantsWidths(I,x)})}if(m.length>0){const x=n3(m,n+s);m=x.columns.map(b=>b.map(v=>this.stretchLoopBodiesVertically(v)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const v=[],w=[];u.forEach((z,I)=>{const k=z.width*x;w.push(m[I].map(S=>{const _=it(S);return _.frame.x=b,_.frame.width=k,this.stretchDescendantsWidths(_,k)})),v.push({x:b,y:z.y,width:k,height:z.height}),b+=k}),u=v,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ia(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===T.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function lh(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i),n=a=>{const s=it(a);return s.frame.y+=e,lh(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function vo(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>vo(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>vo(n,e)),t}function n3(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=it(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),v=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=lh(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const i3=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function du(i){const e=nn;switch(i){case"anweisung":return _e(T.anweisung);case"verzweigung":return _e(T.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return _e(T.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return _e(T.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return _e(T.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return _e(T.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return _e(T.endlosschleife,{loopBody:[e()]});case"aussprung":return _e(T.aussprung);case"aufruf":return _e(T.aufruf)}}function is(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function yo(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class hu extends Error{}function Vl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new hu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new hu("Invalid XML: root element is not .");const n={caption:pu(t,"caption")??"",elements:zo(t)},a=pu(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ui(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ui(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function m1(i){const e=(n,a)=>a===void 0?"":` ${n}="${uh(a)}"`;let t=` +`;t+=" +`;for(const n of i.elements)t+=wo(n," ");return t+=` +`,t}function wo(i,e){let t=`${e} +`;for(const n of i.textLines)t+=`${e} ${a3(is(n))} `;if(i.loopBody){t+=`${e} -`;for(const n of i.loopBody)t+=vo(n,e+" ");t+=`${e} -`}if(i.cases)for(const n of i.cases){t+=`${e} -`;for(const a of n.elements)t+=vo(a,e+" ");t+=`${e} +`;for(const n of i.loopBody)t+=wo(n,e+" ");t+=`${e} +`}if(i.cases)for(const n of i.cases){t+=`${e} +`;for(const a of n.elements)t+=wo(a,e+" ");t+=`${e} `}return t+=`${e} -`,t}function sh(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function e3(i){return i.replace(/&/g,"&").replace(//g,">")}function du(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ja(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function yo(i){const e=[];for(const t of Ja(i,"strelem")){const n=t3(t);n&&e.push(n)}return e}function t3(i){const e=ui(i,"typ");if(e===void 0||T[e]===void 0)return;const t={type:e,zoomX:ui(i,"zx")??0,zoomY:ui(i,"zy")??0,textLines:Ja(i,"text").map(o=>bo((o.textContent??"").trim()))},n=gu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=gu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ja(i,"schleifeninhalt")[0];if(s){const o=yo(s);o.length>0&&(t.loopBody=o)}const r=Ja(i,"fall").map(o=>({name:bo(o.getAttribute("fallname")??""),elements:yo(o)}));return r.length>0&&(t.cases=r),t}function hu(i,e){const t=i.getAttribute(e);return t===null?void 0:bo(t)}function ui(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function gu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const n3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function rh(i){switch(i){case T.forSchleife:case T.whileSchleife:case T.doUntilSchleife:case T.endlosschleife:return"loop";case T.verzweigung:case T.fallauswahl:return"if";default:return}}function Se(i,e={}){const t=document.createElementNS(n3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class oh{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Se("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Vs,"font-size":this.fontSize,class:"diagram"});s.append(Se("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Se("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Se("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Se("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Se("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=iu(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Se("text",{x:n,y:a+lu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=iu(t);if(r){const o=Se("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Se("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=lu(this.fontSize,s?"bold":"medium"),l=Se("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===T.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var _;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===T.verzweigung||l.type===T.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&wo(e.idPath,n),g=Nl(l),f=Se("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,v=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=rh(l.type)??(l.type===T.leerElement?r:"method"),I=Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const k=Ee.callSideBarInset;if(l.type===T.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===T.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const M=e.dividerX,O=this.roofMetrics(e,o,d,M),P=Math.max(g.length,1)*this.lineHeight,C=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[O.apex.x,O.apex.y],[u,o.y]]),l.type===T.fallauswahl&&this.line(f,[[o.x,O.roofBottom],[u,O.roofBottom]]);let B;C+P<=O.maxTextBottom?B=C:B=Math.max(o.y+2,O.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,U)=>{const ee=this.textWidth(E);let ge;if(l.type===T.verzweigung){const Ie=o.x+Ee.cellTextInsetX,fe=u-ee-Ee.cellTextInsetX;ge=Math.min(Math.max(M-ee/2,Ie),fe)}else ge=o.x+o.width/2-ee/2;this.drawKeywordLine(f,E,ge,B+U*this.lineHeight)})}else if(l.type!==T.doUntilSchleife)if(l.type===T.anweisung||l.type===T.aufruf||l.type===T.aussprung){const M=Ee.cellTextInsetX;let O=o.x+M,P=u-M;l.type===T.aufruf?(O=o.x+k+Ee.callTextInsetFromSideBar,P=u-k-Ee.callTextInsetFromSideBar):l.type===T.aussprung&&(O=o.x+k+M);const C=Math.max(0,P-O);let B=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,O+(C-this.textWidth(E))/2,B),B+=this.lineHeight}else{const M=Math.max(1,g.length)*this.lineHeight;let O=s===T.doUntilSchleife?o.y+o.height/2-M/2:o.y+Ee.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Ee.cellTextInsetX,O),O+=this.lineHeight}e.children.forEach((M,O)=>{const P=l.type===T.doUntilSchleife&&O===0?{top:!0,left:!0}:{};this.drawNode(M,t,n,P,l.type,z)});const S=Se("g");if(t.append(S),l.type===T.doUntilSchleife){const M=((_=e.children[0])==null?void 0:_.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(S,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const O=m-e.headerBandHeight;this.line(S,[[M,O],[u,O]]),this.line(S,[[M,o.y],[M,O]]);let P=O+this.metrics.doUntilFooterTopInset;for(const C of g)this.drawKeywordLine(S,C,o.x+Ee.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const M=this.roofMetrics(e,o,d,e.dividerX),O=M.apex;e.caseColumnFrames.forEach((C,B)=>{if(B>=e.caseColumnFrames.length-1)return;const E=C.x+C.width,U=i3(E,o,O),ee=Number.isFinite(U)?Math.min(Math.max(U,o.y),m):o.y;this.line(S,[[E,m],[E,ee]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const C=l.type===T.fallauswahl?M.roofBottom-6:o.y+d-8,B=Ee.branchLabelInsetX;if(l.type===T.verzweigung&&P.length===2){this.drawLabel(S,"true",o.x+B,C,!0,"bottom");const E=e.caseColumnFrames[1],U=this.measure("false",this.fontSize,"bold");this.drawLabel(S,"false",E.x+E.width-B-U,C,!0,"bottom")}else P.forEach((E,U)=>{const ee=e.caseColumnFrames[U],ge=["default","true","false"].includes(E.name.toLowerCase()),Ie=this.measure(E.name,this.fontSize,ge?"bold":"medium");this.drawLabel(S,E.name,ee.x+ee.width/2-Ie/2,C,ge,"bottom")})}}h&&S.append(Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function i3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function wo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function a3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function is(i){var e,t;return{...i,textLines:Nl(i),loopBody:(e=i.loopBody)==null?void 0:e.map(is),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(is)}))}}const s3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],lh=["de","en","pt-PT"],uh=s3.filter(i=>lh.includes(i.code)),pu=i=>lh.includes(i),r3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>K(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>K(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>K(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>K(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>K(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>K(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>K(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),mh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>K(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),o3=Object.assign({"../i18n/ar.strings":()=>K(()=>import("./ar-uZ_mV_Na.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>K(()=>import("./da-C8aaC9z5.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>K(()=>import("./de-Co2EVty-.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>K(()=>import("./el-BlQcOTEr.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>K(()=>import("./en-DCZQrvHo.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>K(()=>import("./es-DA9G5_P_.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>K(()=>import("./fr-yaOEtLAD.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>K(()=>import("./he-DhhDsw0I.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>K(()=>import("./it-C4u42T79.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>K(()=>import("./ja-WE8XI1hF.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>K(()=>import("./ko-BmWPgd-B.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>K(()=>import("./nb-C5ktjao7.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>K(()=>import("./nl-D84YMRy6.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>K(()=>import("./pl-DWX5XtXe.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>K(()=>import("./pt-PT-Dln8jTsC.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>K(()=>import("./ru-oTax2zks.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>K(()=>import("./sv-DEFroOFk.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>K(()=>import("./tr-Cmdsrvdm.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>K(()=>import("./uk-CRlpTSkg.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>K(()=>import("./zh-Hans-D9vdrX4y.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>K(()=>import("./zh-Hant-CetLy6Gl.js"),[],import.meta.url).then(i=>i.default)});function Fa(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function ch(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` -`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function zo(i){const e=i==="java"?Fa(mh,"/Java.strings"):Fa(r3,`/${i}.lproj/Localizable.strings`),t=Fa(o3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of ch(await a()))n.set(s,r);return n}let dh="en",hh=new Map,Kn=new Map;const as="appLanguageCode",Vl="visustruct.keywords";let Io=new Map,Ql=!1;const l3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function u3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(as)==="java";return i&&(localStorage.setItem(as,"en"),localStorage.setItem(Vl,"1")),i}catch{return!1}}function m3(){try{return localStorage.getItem(Vl)==="1"}catch{return!1}}async function gh(i,e=!0){if(i&&Io.size===0){Kn.size===0&&(Kn=await zo("en"));const t=Fa(mh,"/Java.strings");if(t)for(const[n,a]of ch(await t()))l3(n)&&a!==Kn.get(n)&&Io.set(n,a)}if(Ql=i,e)try{localStorage.setItem(Vl,i?"1":"0")}catch{}}function c3(){return Ql}function d3(){if(u3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&pu(i))return i;try{const e=localStorage.getItem(as);if(e&&pu(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=uh.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function ph(i,e=!0){if(Kn.size===0&&(Kn=await zo("en")),hh=i==="en"?Kn:await zo(i),dh=i,e)try{localStorage.setItem(as,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function r1(){return dh}function p(i,...e){const t=(Ql?Io.get(i):void 0)??hh.get(i)??Kn.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const ss=243,h3=244,fh=40,yr=4,g3=1;function ql(i){const e=i.length,t=ss+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([ss,t,e&255,e>>8,...i,n,h3])}function p3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return ql([fh,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function f3(i){if(i[0]!==fh||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:b3(t[1].trim())}:void 0}function x3(i){const e=[];for(;;){const t=i.indexOf(ss);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(ss+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.length/g,">")}function a3(i){return i.replace(/&/g,"&").replace(//g,">")}function gu(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ja(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function zo(i){const e=[];for(const t of Ja(i,"strelem")){const n=s3(t);n&&e.push(n)}return e}function s3(i){const e=ui(i,"typ");if(e===void 0||T[e]===void 0)return;const t={type:e,zoomX:ui(i,"zx")??0,zoomY:ui(i,"zy")??0,textLines:Ja(i,"text").map(o=>yo((o.textContent??"").trim()))},n=fu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=fu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ja(i,"schleifeninhalt")[0];if(s){const o=zo(s);o.length>0&&(t.loopBody=o)}const r=Ja(i,"fall").map(o=>({name:yo(o.getAttribute("fallname")??""),elements:zo(o)}));return r.length>0&&(t.cases=r),t}function pu(i,e){const t=i.getAttribute(e);return t===null?void 0:yo(t)}function ui(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function fu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const r3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function mh(i){switch(i){case T.forSchleife:case T.whileSchleife:case T.doUntilSchleife:case T.endlosschleife:return"loop";case T.verzweigung:case T.fallauswahl:return"if";default:return}}function Se(i,e={}){const t=document.createElementNS(r3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class ch{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Se("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":qs,"font-size":this.fontSize,class:"diagram"});s.append(Se("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Se("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Se("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Se("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Se("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=su(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Se("text",{x:n,y:a+mu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=su(t);if(r){const o=Se("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Se("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=mu(this.fontSize,s?"bold":"medium"),l=Se("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===T.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var _;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===T.verzweigung||l.type===T.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&Io(e.idPath,n),g=Jl(l),f=Se("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,v=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=mh(l.type)??(l.type===T.leerElement?r:"method"),I=Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const k=Ee.callSideBarInset;if(l.type===T.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===T.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const M=e.dividerX,O=this.roofMetrics(e,o,d,M),P=Math.max(g.length,1)*this.lineHeight,C=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[O.apex.x,O.apex.y],[u,o.y]]),l.type===T.fallauswahl&&this.line(f,[[o.x,O.roofBottom],[u,O.roofBottom]]);let B;C+P<=O.maxTextBottom?B=C:B=Math.max(o.y+2,O.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,U)=>{const ee=this.textWidth(E);let ge;if(l.type===T.verzweigung){const Ie=o.x+Ee.cellTextInsetX,fe=u-ee-Ee.cellTextInsetX;ge=Math.min(Math.max(M-ee/2,Ie),fe)}else ge=o.x+o.width/2-ee/2;this.drawKeywordLine(f,E,ge,B+U*this.lineHeight)})}else if(l.type!==T.doUntilSchleife)if(l.type===T.anweisung||l.type===T.aufruf||l.type===T.aussprung){const M=Ee.cellTextInsetX;let O=o.x+M,P=u-M;l.type===T.aufruf?(O=o.x+k+Ee.callTextInsetFromSideBar,P=u-k-Ee.callTextInsetFromSideBar):l.type===T.aussprung&&(O=o.x+k+M);const C=Math.max(0,P-O);let B=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,O+(C-this.textWidth(E))/2,B),B+=this.lineHeight}else{const M=Math.max(1,g.length)*this.lineHeight;let O=s===T.doUntilSchleife?o.y+o.height/2-M/2:o.y+Ee.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Ee.cellTextInsetX,O),O+=this.lineHeight}e.children.forEach((M,O)=>{const P=l.type===T.doUntilSchleife&&O===0?{top:!0,left:!0}:{};this.drawNode(M,t,n,P,l.type,z)});const S=Se("g");if(t.append(S),l.type===T.doUntilSchleife){const M=((_=e.children[0])==null?void 0:_.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(S,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const O=m-e.headerBandHeight;this.line(S,[[M,O],[u,O]]),this.line(S,[[M,o.y],[M,O]]);let P=O+this.metrics.doUntilFooterTopInset;for(const C of g)this.drawKeywordLine(S,C,o.x+Ee.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const M=this.roofMetrics(e,o,d,e.dividerX),O=M.apex;e.caseColumnFrames.forEach((C,B)=>{if(B>=e.caseColumnFrames.length-1)return;const E=C.x+C.width,U=o3(E,o,O),ee=Number.isFinite(U)?Math.min(Math.max(U,o.y),m):o.y;this.line(S,[[E,m],[E,ee]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const C=l.type===T.fallauswahl?M.roofBottom-6:o.y+d-8,B=Ee.branchLabelInsetX;if(l.type===T.verzweigung&&P.length===2){this.drawLabel(S,"true",o.x+B,C,!0,"bottom");const E=e.caseColumnFrames[1],U=this.measure("false",this.fontSize,"bold");this.drawLabel(S,"false",E.x+E.width-B-U,C,!0,"bottom")}else P.forEach((E,U)=>{const ee=e.caseColumnFrames[U],ge=["default","true","false"].includes(E.name.toLowerCase()),Ie=this.measure(E.name,this.fontSize,ge?"bold":"medium");this.drawLabel(S,E.name,ee.x+ee.width/2-Ie/2,C,ge,"bottom")})}}h&&S.append(Se("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function o3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function Io(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function l3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function as(i){var e,t;return{...i,textLines:Jl(i),loopBody:(e=i.loopBody)==null?void 0:e.map(as),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(as)}))}}const u3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],dh=["de","en","pt-PT"],hh=u3.filter(i=>dh.includes(i.code)),xu=i=>dh.includes(i),m3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>K(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>K(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>K(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>K(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>K(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>K(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>K(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),gh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>K(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),c3=Object.assign({"../i18n/ar.strings":()=>K(()=>import("./ar-uZ_mV_Na.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>K(()=>import("./da-C8aaC9z5.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>K(()=>import("./de-Co2EVty-.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>K(()=>import("./el-BlQcOTEr.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>K(()=>import("./en-DCZQrvHo.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>K(()=>import("./es-DA9G5_P_.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>K(()=>import("./fr-yaOEtLAD.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>K(()=>import("./he-DhhDsw0I.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>K(()=>import("./it-C4u42T79.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>K(()=>import("./ja-WE8XI1hF.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>K(()=>import("./ko-BmWPgd-B.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>K(()=>import("./nb-C5ktjao7.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>K(()=>import("./nl-D84YMRy6.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>K(()=>import("./pl-DWX5XtXe.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>K(()=>import("./pt-PT-Dln8jTsC.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>K(()=>import("./ru-oTax2zks.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>K(()=>import("./sv-DEFroOFk.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>K(()=>import("./tr-Cmdsrvdm.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>K(()=>import("./uk-CRlpTSkg.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>K(()=>import("./zh-Hans-D9vdrX4y.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>K(()=>import("./zh-Hant-CetLy6Gl.js"),[],import.meta.url).then(i=>i.default)});function Fa(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function ph(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` +`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function ko(i){const e=i==="java"?Fa(gh,"/Java.strings"):Fa(m3,`/${i}.lproj/Localizable.strings`),t=Fa(c3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of ph(await a()))n.set(s,r);return n}let fh="en",xh=new Map,Kn=new Map;const ss="appLanguageCode",Ql="visustruct.keywords";let So=new Map,ql=!1;const d3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function h3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(ss)==="java";return i&&(localStorage.setItem(ss,"en"),localStorage.setItem(Ql,"1")),i}catch{return!1}}function g3(){try{return localStorage.getItem(Ql)==="1"}catch{return!1}}async function bh(i,e=!0){if(i&&So.size===0){Kn.size===0&&(Kn=await ko("en"));const t=Fa(gh,"/Java.strings");if(t)for(const[n,a]of ph(await t()))d3(n)&&a!==Kn.get(n)&&So.set(n,a)}if(ql=i,e)try{localStorage.setItem(Ql,i?"1":"0")}catch{}}function p3(){return ql}function f3(){if(h3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&xu(i))return i;try{const e=localStorage.getItem(ss);if(e&&xu(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=hh.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function vh(i,e=!0){if(Kn.size===0&&(Kn=await ko("en")),xh=i==="en"?Kn:await ko(i),fh=i,e)try{localStorage.setItem(ss,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function r1(){return fh}function p(i,...e){const t=(ql?So.get(i):void 0)??xh.get(i)??Kn.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const rs=243,x3=244,yh=40,zr=4,b3=1;function Ul(i){const e=i.length,t=rs+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([rs,t,e&255,e>>8,...i,n,x3])}function v3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ul([yh,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function y3(i){if(i[0]!==yh||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:z3(t[1].trim())}:void 0}function w3(i){const e=[];for(;;){const t=i.indexOf(rs);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(rs+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.lengthArray.from({length:e},(t,n)=>i>>>8*n&255);function z3(i){let e=0;for(let t=0;t>>0;return mi(e,4)}const wr=(i,e)=>ql([1,0,xh,i,...mi(e.length,2),...e]);function I3(i,e=v3){const t=new TextEncoder().encode(i),n=(4-t.length%V1+V1)%V1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[wr(1,[0,...mi(a.length,4),...z3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,S3=i=>i.length===7||i.some((e,t)=>e===xh&&i[t+1]===240),bh=()=>typeof navigator>"u"?void 0:navigator.serial,zr=()=>bh()!==void 0,T3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Qs=(i,e=24)=>T3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),vh=Qs("VisuBot",32);class j3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=bh();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(vh))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",Qs("Bis bald!")])await this.send(r,yr,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,yr,3e4).then(()=>{})}ask(e){return this.send(e,g3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=I3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(ql(y3),k3),r();for(const l of w3)await this.send(l,yr,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,S3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(p3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of x3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=f3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const pe=new j3,yh=5,_3=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Si={forward:{args:1,defaults:[fu],python:([i])=>`mbot2.straight(${ke(i)})`,label:([i])=>`${ke(i)} cm vorwärts`},backward:{args:1,defaults:[fu],python:([i])=>`mbot2.straight(${ke(-i)})`,label:([i])=>`${ke(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(-i)})`,label:([i])=>`${ke(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(i)})`,label:([i])=>`${ke(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ke(i)}, ${ke(-e)})`,label:([i,e])=>`Räder links ${ke(i)} %, rechts ${ke(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ke(i)}, ${ke(e)}, ${ke(t)})`,label:([i,e,t])=>`LEDs (${ke(i)}, ${ke(e)}, ${ke(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(rs),valid:([i])=>_3(i),python:([i],e)=>`cyberpi.led.on(${rs[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ke(i)}, ${ke(e/1e3)})`,label:([i,e])=>`Ton ${ke(i)} Hz, ${ke(e)} ms`},pause:{args:1,label:([i])=>`${ke(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:C3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Qs(e),label:(i,e)=>`Bildschirm: ${e}`}},xu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let Ul="en";function A3(i){Ul=i==="de"?"de":"en"}const P3=()=>Ul;function wh(i){const e=i.trim().toLowerCase(),t=xu[e]??Object.values(xu).find(n=>n.de===e);return t?t[Ul]:e}const c1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),Ct={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:c1("a"),isButtonB:c1("b"),isJoystickUp:c1("up"),isJoystickDown:c1("down"),isJoystickLeft:c1("left"),isJoystickRight:c1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function O3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in Ct&&e.add(t[1]);return[...e]}function M3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:B3(n)}}function os(i,e){const t=Si[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function bu(i,e,t=""){var a;const n=Si[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function zh(i){return i.map(e=>[e.method,...e.args.map(ke),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function Z3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in Ct))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?wh(a):a):String(a)}):i}function B3(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function Ih(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=ii(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const kh=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],L3=i=>kh.includes(i),W3=100;function Sh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return i.similar?`Unknown variable: ${i.text}. Java is case-sensitive: did you mean ${i.similar}?`:`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Re extends Error{constructor(e){super(Sh(e)),this.notice=e}}const Ke=i=>new Re({kind:"unsupportedStatement",text:i}),R=i=>new Re({kind:"invalidExpression",text:i}),p1=(i,e)=>{const t=e&&[...e.keys()].find(n=>n!==i&&n.toLowerCase()===i.toLowerCase());return new Re(t?{kind:"unknownVariable",text:i,similar:t}:{kind:"unknownVariable",text:i})},E3=()=>new Re({kind:"divisionByZero"}),us=new Map;function N3(i,e){us.set(i,e)}const Th=()=>[...us];function vu(i){return i instanceof Re?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function J3(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function yu(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):J3(i)}function je(i){switch(i.kind){case"int":return String(i.value);case"double":return yu(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(yu).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+F3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function F3(i){return i.value.map(e=>"["+e.map(t=>je(ko(i.elementType,t))).join(", ")+"]")}function ko(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function wu(i){return i==="string"?"":i==="boolean"?!1:0}function So(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function R3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const kt=i=>({kind:"int",value:i}),St=i=>({kind:"double",value:i}),Yl=i=>i!==void 0&&/\s/u.test(i),ms=i=>new RegExp("\\p{L}","u").test(i),ai=i=>new RegExp("\\p{N}","u").test(i);function ci(i){const e=Array.from(i);return e.length===0||!(ms(e[0])||e[0]==="_")?!1:e.every(t=>ms(t)||ai(t)||t==="_")}function tn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function zu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function lt(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` -`)}function Iu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function $l(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function cs(i,e){const t=Array.from(i),n=Array.from(e),a=$l(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function G3(i){const e=Array.from(i),t=$l(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function qs(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(qs(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function aa(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||Yl(n[0])||n[0]==="("))continue;let a=n.trim();const s=jh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function f1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ci(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function V3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(qs(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:cs(s,",")}}function ku(i){return ci(i)||f1(i)!==void 0}function Ir(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw R(i);return e.push(t),e}function Q3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Su(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw R(i)}else if(!ai(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw R(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ms(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function e1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function ju(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function jo(i){const e=i.map(t=>e1(t).trim());return e.length===1&&e[0].includes(";")?ju(e[0].split(";").map(t=>t.trim())):ju(e)}const dt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function Yt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case T.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case T.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case T.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case T.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:jo(s.textLines)});break;case T.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case T.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case T.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case T.aussprung:a({path:o,text:l,kind:"jump"});break;case T.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function U3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Re({kind:"wholeNumberExpected"});return kt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Re({kind:"numberExpected"});return St(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Re({kind:"booleanExpected"})}}}function _u(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function Y3(i,e){for(let t=0;tt===e.path[n])}function It(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:tn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:tn(e[1]),name:e[2],params:t}}function _h(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(e)return{targetType:e[1]?tn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:cs(e[4],",")}}function ds(i){var t,n;const e=e1(i);return((t=It(e))==null?void 0:t.name)??((n=_h(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Ti{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",_u());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=Yt(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${je(n)}`}catch(n){this.state.inputErrorNotice=vu(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw Ke(e.text);const n=aa(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=Yt(t[s].elements,[...e.path,s],dt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw Ke(e.text);const n=aa(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=Y3(this.evaluateSwitchSelector(n),t)??t.length-1;const s=Yt(t[a].elements,[...e.path,a],dt(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=jo(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=jo(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...s,{...dt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(ds(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=_h(t),s=It(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Re({kind:"callArguments",text:(s==null?void 0:s.name)??ds(t)});if(this.callDepth>=W3)throw new Re({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?p1(g,this.state.variables):R(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw R(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=Yt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():je(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=e1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw R(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${je(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Re({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?St(a.value):r==="string"?{kind:"string",value:je(a)}:a;if(zu(o)!==r)throw R(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${je(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v),I=(r==null?void 0:r[1])==="print",k=I&&z.endsWith(` + pass`],mi=(i,e)=>Array.from({length:e},(t,n)=>i>>>8*n&255);function T3(i){let e=0;for(let t=0;t>>0;return mi(e,4)}const Ir=(i,e)=>Ul([1,0,wh,i,...mi(e.length,2),...e]);function j3(i,e=I3){const t=new TextEncoder().encode(i),n=(4-t.length%V1+V1)%V1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[Ir(1,[0,...mi(a.length,4),...T3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,C3=i=>i.length===7||i.some((e,t)=>e===wh&&i[t+1]===240),zh=()=>typeof navigator>"u"?void 0:navigator.serial,kr=()=>zh()!==void 0,A3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Us=(i,e=24)=>A3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Ih=Us("VisuBot",32);class P3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=zh();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Ih))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",Us("Bis bald!")])await this.send(r,zr,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,zr,3e4).then(()=>{})}ask(e){return this.send(e,b3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=j3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ul(k3),_3),r();for(const l of S3)await this.send(l,zr,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,C3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(v3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of w3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=y3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const pe=new P3,kh=5,O3=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Si={forward:{args:1,defaults:[bu],python:([i])=>`mbot2.straight(${ke(i)})`,label:([i])=>`${ke(i)} cm vorwärts`},backward:{args:1,defaults:[bu],python:([i])=>`mbot2.straight(${ke(-i)})`,label:([i])=>`${ke(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(-i)})`,label:([i])=>`${ke(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ke(i)})`,label:([i])=>`${ke(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ke(i)}, ${ke(-e)})`,label:([i,e])=>`Räder links ${ke(i)} %, rechts ${ke(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ke(i)}, ${ke(e)}, ${ke(t)})`,label:([i,e,t])=>`LEDs (${ke(i)}, ${ke(e)}, ${ke(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(os),valid:([i])=>O3(i),python:([i],e)=>`cyberpi.led.on(${os[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ke(i)}, ${ke(e/1e3)})`,label:([i,e])=>`Ton ${ke(i)} Hz, ${ke(e)} ms`},pause:{args:1,label:([i])=>`${ke(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:M3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Us(e),label:(i,e)=>`Bildschirm: ${e}`}},vu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let Yl="en";function Z3(i){Yl=i==="de"?"de":"en"}const D3=()=>Yl;function Sh(i){const e=i.trim().toLowerCase(),t=vu[e]??Object.values(vu).find(n=>n.de===e);return t?t[Yl]:e}const c1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),Ct={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:c1("a"),isButtonB:c1("b"),isJoystickUp:c1("up"),isJoystickDown:c1("down"),isJoystickLeft:c1("left"),isJoystickRight:c1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function B3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in Ct&&e.add(t[1]);return[...e]}function L3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:N3(n)}}function ls(i,e){const t=Si[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function yu(i,e,t=""){var a;const n=Si[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function Th(i){return i.map(e=>[e.method,...e.args.map(ke),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function W3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in Ct))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?Sh(a):a):String(a)}):i}function N3(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function jh(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=ii(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const _h=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],J3=i=>_h.includes(i),F3=100;function Ch(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return i.similar?`Unknown variable: ${i.text}. Java is case-sensitive: did you mean ${i.similar}?`:`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Re extends Error{constructor(e){super(Ch(e)),this.notice=e}}const Ke=i=>new Re({kind:"unsupportedStatement",text:i}),R=i=>new Re({kind:"invalidExpression",text:i}),p1=(i,e)=>{const t=e&&[...e.keys()].find(n=>n!==i&&n.toLowerCase()===i.toLowerCase());return new Re(t?{kind:"unknownVariable",text:i,similar:t}:{kind:"unknownVariable",text:i})},R3=()=>new Re({kind:"divisionByZero"}),ms=new Map;function G3(i,e){ms.set(i,e)}const Ah=()=>[...ms];function wu(i){return i instanceof Re?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function H3(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function zu(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):H3(i)}function je(i){switch(i.kind){case"int":return String(i.value);case"double":return zu(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(zu).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+V3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function V3(i){return i.value.map(e=>"["+e.map(t=>je(To(i.elementType,t))).join(", ")+"]")}function To(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function Iu(i){return i==="string"?"":i==="boolean"?!1:0}const cs=new WeakMap;let Q3=0;function ku(i){const e=s=>({int:"I",double:"D",boolean:"Z",string:"Ljava.lang.String;"})[s],t=i.kind==="grid"?"[["+e(i.elementType):i.kind==="intArray"?"[I":i.kind==="doubleArray"?"[D":i.kind==="booleanArray"?"[Z":i.kind==="stringArray"?"[Ljava.lang.String;":void 0;if(!t||!("value"in i))return je(i);const n=i.value;let a=cs.get(n);return a||(a=(Math.imul(++Q3,2654435761)>>>0&2147483647).toString(16),cs.set(n,a)),t+"@"+a}function Su(i,e){const t=cs.get(i);t&&cs.set(e,t)}function Ra(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function q3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const kt=i=>({kind:"int",value:i}),St=i=>({kind:"double",value:i}),$l=i=>i!==void 0&&/\s/u.test(i),ds=i=>new RegExp("\\p{L}","u").test(i),ai=i=>new RegExp("\\p{N}","u").test(i);function ci(i){const e=Array.from(i);return e.length===0||!(ds(e[0])||e[0]==="_")?!1:e.every(t=>ds(t)||ai(t)||t==="_")}function tn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function Tu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function lt(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` +`)}function ju(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function Xl(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function hs(i,e){const t=Array.from(i),n=Array.from(e),a=Xl(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function U3(i){const e=Array.from(i),t=Xl(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function Ys(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(Ys(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function aa(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||$l(n[0])||n[0]==="("))continue;let a=n.trim();const s=Ph(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function f1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ci(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function $3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(Ys(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:hs(s,",")}}function _u(i){return ci(i)||f1(i)!==void 0}function Sr(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw R(i);return e.push(t),e}function X3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Cu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw R(i)}else if(!ai(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw R(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ds(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function e1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Pu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function _o(i){const e=i.map(t=>e1(t).trim());return e.length===1&&e[0].includes(";")?Pu(e[0].split(";").map(t=>t.trim())):Pu(e)}const dt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function Yt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case T.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case T.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case T.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case T.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:_o(s.textLines)});break;case T.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case T.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case T.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case T.aussprung:a({path:o,text:l,kind:"jump"});break;case T.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function ex(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Re({kind:"wholeNumberExpected"});return kt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Re({kind:"numberExpected"});return St(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Re({kind:"booleanExpected"})}}}function Ou(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function tx(i,e){for(let t=0;tt===e.path[n])}function It(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:tn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:tn(e[1]),name:e[2],params:t}}function Oh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(e)return{targetType:e[1]?tn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:hs(e[4],",")}}function gs(i){var t,n;const e=e1(i);return((t=It(e))==null?void 0:t.name)??((n=Oh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Ti{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",Ou());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=Yt(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${je(n)}`}catch(n){this.state.inputErrorNotice=wu(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw Ke(e.text);const n=aa(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=Yt(t[s].elements,[...e.path,s],dt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw Ke(e.text);const n=aa(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=tx(this.evaluateSwitchSelector(n),t)??t.length-1;const s=Yt(t[a].elements,[...e.path,a],dt(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=_o(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=_o(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...s,{...dt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=aa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(gs(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=Oh(t),s=It(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Re({kind:"callArguments",text:(s==null?void 0:s.name)??gs(t)});if(this.callDepth>=F3)throw new Re({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?p1(g,this.state.variables):R(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw R(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=Yt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():je(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=e1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw R(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${je(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Re({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?St(a.value):r==="string"?{kind:"string",value:je(a)}:a;if(Tu(o)!==r)throw R(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${je(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v),I=(r==null?void 0:r[1])==="print",k=I&&z.endsWith(` `),[S,..._]=(k?z.slice(0,-1):z).split(` -`);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLines.push(..._),t.outputLineOpen=I&&!k,this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=M3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(e1(n).trim()),u=l?tn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,ko(u,wu(u)));t.lastTrace=v.map(w=>`${w} = ${je(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Ke(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${je(b)}`}executeMBotCommand(e,t,n){var r;if((r=Si[e])!=null&&r.text){const o=Si[e];if(t.length!==o.args+1)throw R(n);const l=os(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw R(n);const u=bu(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw R(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=os(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw R(n);const s=bu(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=e1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw R(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw Ke(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Re({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` -`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw R(t)}fileContent(e){const t=this.state.files.get(e)??us.get(e);if(t===void 0)throw new Re({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw R(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,kt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,St(l)),this.state.lastTrace=`${s} = ${je(r)} ${o} 1 -> ${je(St(l))}`;return}throw Ke(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!ci(r)||!l)throw Ke(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,kt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,St(c)),this.state.lastTrace=`${r} = ${je(l)} ${u} ${je(St(m))} -> ${je(St(c))}`;return}throw Ke(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(f1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&tn(t[0]))n=t[1],a=tn(t[0]);else if(t.length===3&&t[0]==="const"&&tn(t[1]))n=t[2],a=tn(t[1]);else throw Ke(e);if(!ku(n))throw Ke(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw Ke(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=tn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!ku(r))throw Ke(e);const m=lt(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=tn(s),o=n[1];if(!r||!ci(o))throw Ke(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>lt(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw Ke(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw R(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return lt(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=Q3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw R(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw Ke(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw R(o[1]);if(u<0)throw R(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(wu(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw R(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw R(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=f1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=V3(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Re({kind:"nullValue",text:t.target.trim()});const s=lt(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw R(e);const g=lt(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw R(h)},l=d=>{if(r[d]===void 0)throw R(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw R(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw R(e);return d};switch(t.method){case"length":return u(0),kt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw R(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw R(e);return t.args[0]},a=s=>{const r=lt(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw R(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Re({kind:"wholeNumberExpected"});return kt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Re({kind:"numberExpected"});return St(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw R(e);const r=lt(s[1]),o=us.get(r);if(o===void 0)throw new Re({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=f1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=qs(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?To(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw p1(e,this.state.variables);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw R(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw R(a);return ko(n.elementType,r[t[1]])}if(t.length!==1)throw R(a);const s=t[0];if(!So(n))throw R(e);if(s>=n.value.length)throw R(a);switch(n.kind){case"intArray":return kt(n.value[s]);case"doubleArray":return St(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw R(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return zu(n);const a=f1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw p1(a.arrayName,this.state.variables);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw R(a.arrayName)}throw Ke(e)}assignValue(e,t){const n=t.trim(),a=f1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw p1(a.arrayName,this.state.variables);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw R(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||So(e))throw R(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw R(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw R(n);if(o>=l.value.length)throw R(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Tu(t)&&Ir(t).every(s=>lt(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of Ir(this.withSensors(e))){const r=s.trim(),o=lt(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Tu(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?kt(n.value+l.value):St(n.value+l.value):n=l;continue}a=(a??(n?je(n):""))+je(l),n=void 0}return a??(n?je(n):"")}renderOutputExpression(e){return Ir(e).map(t=>{const n=t.trim();if(lt(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return je(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return kt(this.evaluateInt(e));case"double":return St(this.evaluateDouble(e));case"string":{const n=e.trim(),a=lt(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:je(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?kt(t):St(t)}parser(e){const t=this.withSensors(e);return new q3(Su(Iu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return D3(e,t=>this.robotSensors[t]??Ct[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=cs(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=cs(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=jh(t);if(r!==void 0)return this.evaluateBool(r);const o=H3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=G3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw R(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw R(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw R(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=lt(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw R(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Su(Iu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw p1(t.name,this.state.variables);return je(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Ch={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function hs(i,e,t={},n=[]){const a=Xl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; +`);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLines.push(..._),t.outputLineOpen=I&&!k,this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=L3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(e1(n).trim()),u=l?tn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,To(u,Iu(u)));t.lastTrace=v.map(w=>`${w} = ${je(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Ke(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${je(b)}`}executeMBotCommand(e,t,n){var r;if((r=Si[e])!=null&&r.text){const o=Si[e];if(t.length!==o.args+1)throw R(n);const l=ls(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw R(n);const u=yu(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw R(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=ls(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw R(n);const s=yu(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=e1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw R(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw Ke(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Re({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` +`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw R(t)}fileContent(e){const t=this.state.files.get(e)??ms.get(e);if(t===void 0)throw new Re({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw R(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,kt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,St(l)),this.state.lastTrace=`${s} = ${je(r)} ${o} 1 -> ${je(St(l))}`;return}throw Ke(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!ci(r)||!l)throw Ke(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,kt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,St(c)),this.state.lastTrace=`${r} = ${je(l)} ${u} ${je(St(m))} -> ${je(St(c))}`;return}throw Ke(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(f1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&tn(t[0]))n=t[1],a=tn(t[0]);else if(t.length===3&&t[0]==="const"&&tn(t[1]))n=t[2],a=tn(t[1]);else throw Ke(e);if(!_u(n))throw Ke(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw Ke(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=tn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!_u(r))throw Ke(e);const m=lt(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=tn(s),o=n[1];if(!r||!ci(o))throw Ke(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>lt(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw Ke(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw R(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return lt(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=X3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw R(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw Ke(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw R(o[1]);if(u<0)throw R(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(Iu(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw R(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw R(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=f1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=$3(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Re({kind:"nullValue",text:t.target.trim()});const s=lt(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw R(e);const g=lt(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw R(h)},l=d=>{if(r[d]===void 0)throw R(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw R(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw R(e);return d};switch(t.method){case"length":return u(0),kt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw R(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw R(e);return t.args[0]},a=s=>{const r=lt(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw R(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Re({kind:"wholeNumberExpected"});return kt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Re({kind:"numberExpected"});return St(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Arrays.toString":case"Arrays.deepToString":{const s=this.state.variables.get(n().trim());if(!s||!Ra(s))throw R(e);return s.kind==="grid"&&t.method==="toString"?{kind:"string",value:"["+s.value.map(o=>ku({kind:`${s.elementType}Array`,value:o})).join(", ")+"]"}:{kind:"string",value:je(s)}}case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw R(e);const r=lt(s[1]),o=ms.get(r);if(o===void 0)throw new Re({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=f1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=Ys(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?jo(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw p1(e,this.state.variables);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw R(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw R(a);return To(n.elementType,r[t[1]])}if(t.length!==1)throw R(a);const s=t[0];if(!Ra(n))throw R(e);if(s>=n.value.length)throw R(a);switch(n.kind){case"intArray":return kt(n.value[s]);case"doubleArray":return St(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw R(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return Tu(n);const a=f1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw p1(a.arrayName,this.state.variables);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw R(a.arrayName)}throw Ke(e)}assignValue(e,t){const n=t.trim(),a=f1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw p1(a.arrayName,this.state.variables);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw R(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||Ra(e))throw R(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,Su(r.value,m),this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw R(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw R(n);if(o>=l.value.length)throw R(n);l.value[o]=e.value,Su(r.value,l.value),this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Au(t)&&Sr(t).every(s=>lt(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of Sr(this.withSensors(e))){const r=s.trim(),o=lt(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Au(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?kt(n.value+l.value):St(n.value+l.value):n=l;continue}a=(a??(n?je(n):""))+ku(l),n=void 0}return a??(n?je(n):"")}renderOutputExpression(e){return Sr(e).map(t=>{const n=t.trim();if(lt(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return je(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return kt(this.evaluateInt(e));case"double":return St(this.evaluateDouble(e));case"string":{const n=e.trim(),a=lt(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:je(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?kt(t):St(t)}parser(e){const t=this.withSensors(e);return new K3(Cu(ju(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return E3(e,t=>this.robotSensors[t]??Ct[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=hs(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=hs(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=Ph(t);if(r!==void 0)return this.evaluateBool(r);const o=Y3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=U3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw R(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw R(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw R(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=lt(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw R(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Cu(ju(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw p1(t.name,this.state.variables);return je(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Mh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ps(i,e,t={},n=[]){const a=Kl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; -`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(Gh)&&(s+=`import random +`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(qh)&&(s+=`import random -`),e!=="java"&&(s+=Ao(r,e)),e==="java"&&fs(i)&&(s+=`// import java.util.Scanner; +`),e!=="java"&&(s+=Po(r,e)),e==="java"&&bs(i)&&(s+=`// import java.util.Scanner; `,s+=`Scanner scanner = new Scanner(System.in); `),i.pseudocode&&(s+=(e==="python"?"# ":"// ")+a.pseudocodeNote+` -`),e!=="java")for(const u of n){if(u===i)continue;const m=It(u.caption);m&&(s+=_o(u,m,e,t,0)+` -`)}const o=It(i.caption),l={out:""};if(o)l.out=_o(i,o,e,t,a.baseIndent);else for(const u of i.elements)Xs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=K3(e);return e==="javascript"?`"use strict"; +`),e!=="java")for(const u of n){if(u===i)continue;const m=It(u.caption);m&&(s+=Co(u,m,e,t,0)+` +`)}const o=It(i.caption),l={out:""};if(o)l.out=Co(i,o,e,t,a.baseIndent);else for(const u of i.elements)er(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=ax(e);return e==="javascript"?`"use strict"; -`+u:u}return qh(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Xl(i,e,t){const n={...Ch,...t,jsIntVariables:new Set,arrayElementTypes:lx(i),stringVariables:ox(i)};return e!=="java"&&(n.jsIntVariables=Cx(i)),n}const Cu=i=>i==="string"?"String":i===void 0?"void":i;function Ah(i){const e=i.params.map(t=>`${Cu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Cu(i.returnType)} ${i.name}(${e}) {`}function _o(i,e,t,n,a){const s=Xl(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)Xs(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=D(a+s.indentPerLevel)+(t==="python"?`pass +`+u:u}return Xh(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Kl(i,e,t){const n={...Mh,...t,jsIntVariables:new Set,arrayElementTypes:hx(i),stringVariables:dx(i)};return e!=="java"&&(n.jsIntVariables=Zx(i)),n}const Mu=i=>i==="string"?"String":i===void 0?"void":i;function Zh(i){const e=i.params.map(t=>`${Mu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Mu(i.returnType)} ${i.name}(${e}) {`}function Co(i,e,t,n,a){const s=Kl(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)er(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=D(a+s.indentPerLevel)+(t==="python"?`pass `:` -`)),t){case"java":return`${D(a)}${Ah(e)} +`)),t){case"java":return`${D(a)}${Zh(e)} ${o.out}${D(a)}} `;case"python":return`${D(a)}def ${e.name}(${r}): ${o.out}`;case"javascript":return`${D(a)}function ${e.name}(${r}) { ${o.out}${D(a)}} -`}}const D=i=>i>0?" ".repeat(i):"";function ve(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function K3(i,e){return i==="python"?"# empty element":"// empty element"}const Co=i=>i.trim()==="ø";function Ph(i,e){return D(i)+(e==="python"?`# empty element +`}}const D=i=>i>0?" ".repeat(i):"";function ve(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function ax(i,e){return i==="python"?"# empty element":"// empty element"}const Ao=i=>i.trim()==="ø";function Dh(i,e){return D(i)+(e==="python"?`# empty element `:`// empty element -`)}function ex(i){switch(i.type){case T.leerElement:return!0;case T.anweisung:case T.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Co(e));default:return!1}}function tx(i){return i.every(ex)}function Kl(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?D(t)+`""" +`)}function sx(i){switch(i.type){case T.leerElement:return!0;case T.anweisung:case T.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Ao(e));default:return!1}}function rx(i){return i.every(sx)}function e0(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?D(t)+`""" `+n.map(a=>D(t)+a+` `).join("")+D(t)+`""" `:n.length===1?D(t)+"/* "+n[0]+` */ `:D(t)+`/* `+n.map(a=>D(t)+" * "+a+` `).join("")+D(t)+` */ -`}const nx=i=>i==="java"||i==="javascript";function gs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Ra(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return ix(e.length===0?"true":e.join(" "))}function ix(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=Oh(t,e);if(n!==void 0)return n===""?"true":n}return e}function Oh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function Qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function ax(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const Us=i=>i.name.includes("[")&&i.name.includes("]");function e0(i){const e=i.trim();if(e==="")return;const t=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:ps(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ve(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=sx(e);if(a)return{type:ps(a[0]),name:a[1]}}function ps(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function sx(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function rx(i,e,t,n,a){const s=Qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return D(t)+"System.out.println("+s+`); +`}const ox=i=>i==="java"||i==="javascript";function fs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Ga(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return lx(e.length===0?"true":e.join(" "))}function lx(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=Bh(t,e);if(n!==void 0)return n===""?"true":n}return e}function Bh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function Qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function ux(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const $s=i=>i.name.includes("[")&&i.name.includes("]");function t0(i){const e=i.trim();if(e==="")return;const t=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:xs(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ve(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=mx(e);if(a)return{type:xs(a[0]),name:a[1]}}function xs(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function mx(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function cx(i,e,t,n,a){const s=Qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return D(t)+"System.out.println("+s+`); `;case"javascript":return D(t)+"console.log("+s+`); `;case"python":return D(t)+"print("+Zn(s,n,a)+`) `}}function ji(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(` -`,"\\n").replaceAll("\r","\\r")}function t0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=e0(n);if(a&&Us(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function ox(i){const e=new Set;return bn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=e0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Us(o)&&e.add(o.name);continue}const s=ve(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ve(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function lx(i){const e=new Map;return bn(i.elements,t=>{for(const n of t.textLines){const a=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],ps(a[1]))}}),e}function ux(i,e,t){const n=t0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=D(e)+'System.out.println("'+ji(a)+`"); -`,r=o=>Us(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+D(e)+`${r("int")} = scanner.nextInt(); +`,"\\n").replaceAll("\r","\\r")}function n0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=t0(n);if(a&&$s(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function dx(i){const e=new Set;return bn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=t0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!$s(o)&&e.add(o.name);continue}const s=ve(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ve(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function hx(i){const e=new Map;return bn(i.elements,t=>{for(const n of t.textLines){const a=ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ve(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],xs(a[1]))}}),e}function gx(i,e,t){const n=n0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=D(e)+'System.out.println("'+ji(a)+`"); +`,r=o=>$s(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+D(e)+`${r("int")} = scanner.nextInt(); `;case"double":return s+D(e)+`${r("double")} = scanner.nextDouble(); `;case"String":return s+D(e)+`${r("String")} = scanner.next(); `;case"boolean":return s+D(e)+`${r("boolean")} = scanner.nextBoolean(); -`;default:return}}function mx(i,e,t){const n=t0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":D(e)+'console.log("'+ji(n.name+": ")+`"); -`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${ji(u)}") ?? "${l}")`},o=Us(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+D(e)+`${o} = parseInt(${r("0")}, 10); +`;default:return}}function px(i,e,t){const n=n0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":D(e)+'console.log("'+ji(n.name+": ")+`"); +`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${ji(u)}") ?? "${l}")`},o=$s(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+D(e)+`${o} = parseInt(${r("0")}, 10); `;case"double":return s+D(e)+`${o} = Number(${r("0")}); `;case"String":return s+D(e)+`${o} = ${r("")}; `;case"boolean":return s+D(e)+`${o} = ${r("")}.trim().toLowerCase() === "true"; -`;default:return}}function cx(i,e,t){const n=t0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":D(e)+'print("'+ji(n.name+": ")+`") +`;default:return}}function fx(i,e,t){const n=n0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":D(e)+'print("'+ji(n.name+": ")+`") `,r=`input("${ji(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+D(e)+`${n.name} = int(${r}) `;case"double":return s+D(e)+`${n.name} = float(${r}) `;case"String":return s+D(e)+`${n.name} = ${r} `;case"boolean":return s+D(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr") -`;default:return}}const kr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,dx=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${kr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${kr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${kr}\s*\)?\s*\)$`),"PrintWriter"]];function Mh(i){const e=i.trim();for(const[t,n]of dx){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function hx(i,e,t,n,a){if(e==="java")return;const s=Qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&Mh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?D(t)+`${r[1]} = ${o.kind}(${o.name}) +`;default:return}}const Tr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,xx=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${Tr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${Tr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${Tr}\s*\)?\s*\)$`),"PrintWriter"]];function Lh(i){const e=i.trim();for(const[t,n]of xx){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function bx(i,e,t,n,a){if(e==="java")return;const s=Qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&Lh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?D(t)+`${r[1]} = ${o.kind}(${o.name}) `:D(t)+`${m?"let ":""}${r[1]} = new ${o.kind}(${o.name}); `}const l=/^([A-Za-z_]\w*)\.(println|print)\s*\(([\s\S]*)\)$/.exec(s);if(l&&l[1]!=="System"){const m=l[3].trim(),c=e==="python"&&m!==""?Zn(m,n,a):m;return D(t)+`${l[1]}.${l[2]}(${c})${e==="javascript"?";":""} `}const u=/^Files\.writeString\s*\(\s*(?:Path\.of|Paths\.get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,\s*([\s\S]+)\)$/.exec(s);if(u){const m=u[2].trim();return e==="python"?D(t)+`open(${u[1]}, "w", encoding="utf-8").write(${Zn(m,n,a)}) `:D(t)+`require("fs").writeFileSync(${u[1]}, ${m}); -`}}function gx(i){const e=new Set;for(const t of i)bn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&Mh(s[1]);r&&e.add(r.kind)}});return e}const px={Scanner:`class Scanner: +`}}function vx(i){const e=new Set;for(const t of i)bn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&Lh(s[1]);r&&e.add(r.kind)}});return e}const yx={Scanner:`class Scanner: def __init__(self, name): self.lines = open(name, encoding="utf-8").read().splitlines() def hasNextLine(self): @@ -96,7 +96,7 @@ ${o.out}${D(a)}} self.file.write(str(text)) def close(self): self.file.close() -`},fx={Scanner:`class Scanner { +`},wx={Scanner:`class Scanner { constructor(name) { this.lines = require("fs").readFileSync(name, "utf8").split(/\\r?\\n/); if (this.lines.at(-1) === "") this.lines.pop(); } hasNextLine() { return this.lines.length > 0; } nextLine() { return this.lines.shift(); } @@ -113,38 +113,38 @@ ${o.out}${D(a)}} print(text) { this.text += text; } close() { require("fs").writeFileSync(this.name, this.text); } } -`};function Ao(i,e){const t=gx(i);if(t.size===0)return"";const n=e==="python"?px:fx;return[...t].map(a=>n[a]).join(` +`};function Po(i,e){const t=vx(i);if(t.size===0)return"";const n=e==="python"?yx:wx;return[...t].map(a=>n[a]).join(` `)+` -`}function xx(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return D(t)+"System.out.print("+o+`); +`}function zx(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return D(t)+"System.out.print("+o+`); `;case"javascript":return D(t)+"process.stdout.write(String("+o+`)); `;case"python":return D(t)+"print("+(o===""?"":Zn(o,n,a)+", ")+`end="") -`}}const r=ax(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?D(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` +`}}const r=ux(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?D(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` `:void 0;switch(e){case"java":return D(t)+"System.out.println("+r+`); `;case"javascript":return D(t)+"console.log("+r+`); `;case"python":return D(t)+"print("+Zn(r,n,a)+`) -`}}function n0(i){const e=i.map(Qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function bx(i){const t=n0(i).split(";"),n=Zh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Zh(i){const e=ve(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function vx(i){const e=i.map(n=>Qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=Oh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Dh(i,e){let t=ve(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ve(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ve(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ve(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Po(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function yx(i,e){const t=vx(i);if(!t)return;const[n,a,s]=t,r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Be(r[2],e)}`,condition:a,increment:s},u=ve(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Dh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Be(r[2],e);let d=Be(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Po(d,1);else if(m<0&&h===">=")d=Po(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function Bh(i){const e=Qt(i).trim();if(e==="")return;const t=ve(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function wx(i,e,t,n){var o;const a=Bh(i);if(!a)return;const s=ps(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return D(t)+gs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` -`;case"javascript":return r?D(t)+gs(`const ${a.name} = ${r}`)+` +`}}function i0(i){const e=i.map(Qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function Ix(i){const t=i0(i).split(";"),n=Wh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Wh(i){const e=ve(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function kx(i){const e=i.map(n=>Qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=Bh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Eh(i,e){let t=ve(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ve(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ve(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ve(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Oo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function Sx(i,e){const t=kx(i);if(!t)return;const[n,a,s]=t,r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Be(r[2],e)}`,condition:a,increment:s},u=ve(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Eh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Be(r[2],e);let d=Be(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Oo(d,1);else if(m<0&&h===">=")d=Oo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function Nh(i){const e=Qt(i).trim();if(e==="")return;const t=ve(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function Tx(i,e,t,n){var o;const a=Nh(i);if(!a)return;const s=xs(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return D(t)+fs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` +`;case"javascript":return r?D(t)+fs(`const ${a.name} = ${r}`)+` `:D(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} -`;case"python":return r?D(t)+`${a.name} = ${$s(r,n)} # const ${s} +`;case"python":return r?D(t)+`${a.name} = ${Ks(r,n)} # const ${s} `:D(t)+`${a.name} = None # const ${s}, uninitialized -`}}function zx(i){const e=Qt(i).trim();if(e===""||Fh(e))return;const t=ve(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function Ys(i){const e=ve(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||Lh(t)))return t.startsWith("(")&&Oo(t,0)===t.length-1?t.slice(1,-1).trim():t}function Oo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Ix(i,e){if(i[e]==="("){const a=Oo(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Oo(i,n);if(s<0)return-1;n=s+1}else return n}}function Mo(i,e){return i0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Ix(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!Lh(u))continue;const m=Mo(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function $s(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Ys(t);return n!==void 0?`int(${$s(n,e)})`:Be(t,e)}function i0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return i0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Wh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Zn(i,e,t){const n=Wh(i),a=s=>a0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Be(i,e):n.map(s=>a(s)?s:`str(${Be(s,e)})`).join(" + ")}function Eh(i,e,t=new Set){const n=Qt(i).trim(),a=ve(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ve(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Be(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ve(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Be(s[2],e)}`;const r=ve(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Wh(u);m=Zn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!a0(u.trim())&&!t.has(u.trim())&&(m=`str(${Be(u,e)})`)}else l==="="&&Ys(u)===void 0&&u.trim()!=="null"?m=Zn(u,e,t):m=l==="="?$s(u,e):Be(u,e);return`${o} ${l} ${m}`}return Be(n,e)}const kx=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function Nh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function Jh(i){const e=ve(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function Fh(i){const e=ve(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function Sx(i){const e=ve(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const Au=i=>i.replaceAll("{","[").replaceAll("}","]");function Pu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Tx(i,e,t){const n=Sx(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Pu(i.elementType,e)}))`:Au(i.rhs):n?`[[${Pu(i.elementType,e)}] * ${Be(n[1],t)} for _ in range(${Be(n[0],t)})]`:Be(Au(i.rhs),t)}function Rh(i,e){const t=i.trim();if(e){const a=Jh(t);return a!==void 0?`new Array(${a})`:Nh(t)}const n=Ys(t);return n!==void 0?`Math.floor(${Rh(n,!1)})`:kx(t)}function jx(i,e,t){const n=i.trim();if(e){const a=Jh(n);return a!==void 0?`[None] * ${a}`:Be(Nh(n),t)}return $s(n,t)}function _x(i,e,t,n,a){if(e==="java")return;const s=Fh(i);if(s){const u=Tx(s,e,n);return e==="javascript"?D(t)+`let ${s.name} = ${u}; +`}}function jx(i){const e=Qt(i).trim();if(e===""||Vh(e))return;const t=ve(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function Xs(i){const e=ve(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||Jh(t)))return t.startsWith("(")&&Mo(t,0)===t.length-1?t.slice(1,-1).trim():t}function Mo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function _x(i,e){if(i[e]==="("){const a=Mo(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Mo(i,n);if(s<0)return-1;n=s+1}else return n}}function Zo(i,e){return a0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=_x(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!Jh(u))continue;const m=Zo(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function Ks(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Xs(t);return n!==void 0?`int(${Ks(n,e)})`:Be(t,e)}function a0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return a0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Fh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Zn(i,e,t){const n=Fh(i),a=s=>s0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Be(i,e):n.map(s=>a(s)?s:`str(${Be(s,e)})`).join(" + ")}function Rh(i,e,t=new Set){const n=Qt(i).trim(),a=ve(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ve(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Be(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ve(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Be(s[2],e)}`;const r=ve(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Fh(u);m=Zn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!s0(u.trim())&&!t.has(u.trim())&&(m=`str(${Be(u,e)})`)}else l==="="&&Xs(u)===void 0&&u.trim()!=="null"?m=Zn(u,e,t):m=l==="="?Ks(u,e):Be(u,e);return`${o} ${l} ${m}`}return Be(n,e)}const Cx=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function Gh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function Hh(i){const e=ve(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function Vh(i){const e=ve(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function Ax(i){const e=ve(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const Zu=i=>i.replaceAll("{","[").replaceAll("}","]");function Du(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Px(i,e,t){const n=Ax(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Du(i.elementType,e)}))`:Zu(i.rhs):n?`[[${Du(i.elementType,e)}] * ${Be(n[1],t)} for _ in range(${Be(n[0],t)})]`:Be(Zu(i.rhs),t)}function Qh(i,e){const t=i.trim();if(e){const a=Hh(t);return a!==void 0?`new Array(${a})`:Gh(t)}const n=Xs(t);return n!==void 0?`Math.floor(${Qh(n,!1)})`:Cx(t)}function Ox(i,e,t){const n=i.trim();if(e){const a=Hh(n);return a!==void 0?`[None] * ${a}`:Be(Gh(n),t)}return Ks(n,t)}function Mx(i,e,t,n,a){if(e==="java")return;const s=Vh(i);if(s){const u=Px(s,e,n);return e==="javascript"?D(t)+`let ${s.name} = ${u}; `:D(t)+`${s.name} = ${u} -`}const r=zx(i);if(!r)return;if(e==="javascript")return D(t)+gs(`let ${r.name} = ${Rh(r.rhs,r.isArray)}`)+` -`;const l=!r.isArray&&Ys(r.rhs)===void 0&&r.rhs.trim()!=="null"?Zn(r.rhs,n,a):jx(r.rhs,r.isArray,n);return D(t)+`${r.name} = ${l} -`}function bn(i,e){for(const t of i){e(t),t.loopBody&&bn(t.loopBody,e);for(const n of t.cases??[])bn(n.elements,e)}}function Cx(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return bn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=e0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=Bh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ve(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Zo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function fs(i){let e=!1;return bn(i.elements,t=>{t.type===T.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function s0(i){let e=!1,t=!1,n=!1;return bn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function Ax(i){return s0(i).length>0}function Gh(i){let e=!1;return bn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function sa(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||a0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function Q1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function Px(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=D(n)+(e==="python"?"pass":";")+` -`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Co(o));r.length>0&&(a.out+=Kl(r,e,n))}for(const r of s){if(r==="")continue;if(Co(r)){a.out+=t.live?o0(n,t.live):Ph(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?ux(r,n,l):void 0)??(e==="javascript"?mx(r,n,l):void 0)??(e==="python"?cx(r,n,l):void 0)??hx(r,e,n,o,u)??xx(r,e,n,o,u)??wx(r,e,n,o)??_x(r,e,n,o,u)??rx(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Zo(m,o):m;continue}let c=r;nx(e)?c=gs(e==="javascript"?Zo(r,o):r):e==="python"&&(c=Eh(r,o,u)),c!==""&&(a.out+=D(n)+c+` -`)}}function di(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=Kl(t,n,s)),o!==void 0&&l0(t)){r.out+=D(s)+i+t1(o)+e;return}const u=Ra(t),m=a.jsIntVariables??new Set,c=n==="python"?Be(u,m):n==="javascript"?Zo(u,m):u;r.out+=D(s)+i+c+e}function v1(i,e,t,n,a){const s=a.out.length;for(const o of i)Xs(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=o0(n,t.live)),e!=="python")return;a.out.slice(s).split(` +`}const r=jx(i);if(!r)return;if(e==="javascript")return D(t)+fs(`let ${r.name} = ${Qh(r.rhs,r.isArray)}`)+` +`;const l=!r.isArray&&Xs(r.rhs)===void 0&&r.rhs.trim()!=="null"?Zn(r.rhs,n,a):Ox(r.rhs,r.isArray,n);return D(t)+`${r.name} = ${l} +`}function bn(i,e){for(const t of i){e(t),t.loopBody&&bn(t.loopBody,e);for(const n of t.cases??[])bn(n.elements,e)}}function Zx(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return bn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=t0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=Nh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ve(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Do(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function bs(i){let e=!1;return bn(i.elements,t=>{t.type===T.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}const r0="import java.util.Arrays;";function o0(i){let e=!1,t=!1,n=!1,a=!1;return bn(i.elements,s=>{for(const r of s.textLines)/\bArrays\s*\./.test(r)&&(a=!0),/\bFiles\s*\./.test(r)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(r)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(r)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[],...a?[r0]:[]]}function Dx(i){return o0(i).some(e=>e!==r0)}function qh(i){let e=!1;return bn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function sa(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||s0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function Q1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function Bx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=D(n)+(e==="python"?"pass":";")+` +`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Ao(o));r.length>0&&(a.out+=e0(r,e,n))}for(const r of s){if(r==="")continue;if(Ao(r)){a.out+=t.live?u0(n,t.live):Dh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?gx(r,n,l):void 0)??(e==="javascript"?px(r,n,l):void 0)??(e==="python"?fx(r,n,l):void 0)??bx(r,e,n,o,u)??zx(r,e,n,o,u)??Tx(r,e,n,o)??Mx(r,e,n,o,u)??cx(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Do(m,o):m;continue}let c=r;ox(e)?c=fs(e==="javascript"?Do(r,o):r):e==="python"&&(c=Rh(r,o,u)),c!==""&&(a.out+=D(n)+c+` +`)}}function di(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=e0(t,n,s)),o!==void 0&&m0(t)){r.out+=D(s)+i+t1(o)+e;return}const u=Ga(t),m=a.jsIntVariables??new Set,c=n==="python"?Be(u,m):n==="javascript"?Do(u,m):u;r.out+=D(s)+i+c+e}function v1(i,e,t,n,a){const s=a.out.length;for(const o of i)er(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=u0(n,t.live)),e!=="python")return;a.out.slice(s).split(` `).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=D(n)+`pass -`)}function Ox(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===T.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Do(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&tx(r[1].elements),m=u?void 0:Ox(r[1].elements,t);if(o){di(s?"elif ":"if ",`: -`,i.textLines,e,t,n,a),v1(r[0].elements,e,t,l,a),m?Do(m,e,t,n,a,!0):u||(a.out+=D(n)+`else: +`)}function Lx(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===T.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Bo(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&rx(r[1].elements),m=u?void 0:Lx(r[1].elements,t);if(o){di(s?"elif ":"if ",`: +`,i.textLines,e,t,n,a),v1(r[0].elements,e,t,l,a),m?Bo(m,e,t,n,a,!0):u||(a.out+=D(n)+`else: `,v1(r[1].elements,e,t,l,a));return}if(di(s?"} else if (":"if (",`) { -`,i.textLines,e,t,n,a),v1(r[0].elements,e,t,l,a),m){const c=a.out.length;Do(m,e,t,n,a,!0),Vh(t,m,a,c)}else u||(a.out+=D(n)+`} else { +`,i.textLines,e,t,n,a),v1(r[0].elements,e,t,l,a),m){const c=a.out.length;Bo(m,e,t,n,a,!0),Yh(t,m,a,c)}else u||(a.out+=D(n)+`} else { `,v1(r[1].elements,e,t,l,a)),a.out+=D(n)+`} -`}function Xs(i,e,t,n,a){const s=a.out.length;Mx(i,e,t,n,a),Vh(t,i,a,s)}function Mx(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>v1(c,e,t,d,a),l=(c,d)=>di(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Kl(i.textLines,e,c))};switch(i.type){case T.leerElement:a.out+=t.live?o0(n,t.live):Ph(n,e);return;case T.anweisung:case T.aufruf:Px(i.textLines,e,t,n,a);return;case T.aussprung:{const c=Ra(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=D(n)+(c===""?`break +`}function er(i,e,t,n,a){const s=a.out.length;Wx(i,e,t,n,a),Yh(t,i,a,s)}function Wx(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>v1(c,e,t,d,a),l=(c,d)=>di(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=e0(i.textLines,e,c))};switch(i.type){case T.leerElement:a.out+=t.live?u0(n,t.live):Dh(n,e);return;case T.anweisung:case T.aufruf:Bx(i.textLines,e,t,n,a);return;case T.aussprung:{const c=Ga(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=D(n)+(c===""?`break `:`break # ${c} `):a.out+=D(n)+(c===""?`break; `:`break; // ${c} -`);return}case T.verzweigung:Do(i,e,t,n,a,!1);return;case T.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;di(d+" = ",` +`);return}case T.verzweigung:Bo(i,e,t,n,a,!1);return;case T.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;di(d+" = ",` `,i.textLines,e,t,n,a),c.forEach((h,g)=>{const f=g===c.length-1;f&&g===0?a.out+=D(n)+"if True:"+Q1(h.name,e)+` `:f?a.out+=D(n)+"else:"+Q1(h.name,e)+` `:a.out+=D(n)+(g===0?"if ":"elif ")+d+" == "+sa(h.name,e)+`: @@ -157,47 +157,47 @@ ${o.out}${D(a)}} `,o(d.elements,n+s*2)}else{const f=g?"default:"+Q1(d.name,e):"case "+sa(d.name,e)+":";a.out+=D(n+s)+f+` `,o(d.elements,n+s*2),a.out+=D(n+s*2)+`break; `}}),r||(a.out+=D(n)+`} -`);return}case T.forSchleife:if(e==="java"){u();const c=t.live?Hh(i.textLines,t.live.labels):n0(i.textLines);a.out+=D(n)+"for ("+c+`) { -`}else if(r){const c=t.jsIntVariables??new Set,d=yx(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=D(n)+d.rangeLine+` +`);return}case T.forSchleife:if(e==="java"){u();const c=t.live?Uh(i.textLines,t.live.labels):i0(i.textLines);a.out+=D(n)+"for ("+c+`) { +`}else if(r){const c=t.jsIntVariables??new Set,d=Sx(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=D(n)+d.rangeLine+` `;else if(d){u(),a.out+=D(n)+d.init+` `,a.out+=D(n)+"while "+Be(d.condition,c)+`: -`;for(const h of i.loopBody??[])Xs(h,e,t,n+s,a);a.out+=D(n+s)+Eh(d.increment,c)+` -`;return}else t.live?a.out+=D(n)+Dx(i.textLines,t.live.labels,c)+` +`;for(const h of i.loopBody??[])er(h,e,t,n+s,a);a.out+=D(n+s)+Rh(d.increment,c)+` +`;return}else t.live?a.out+=D(n)+Nx(i.textLines,t.live.labels,c)+` `:l("for ",`: -`)}else{u();const c=t.live?Zx(i.textLines,t.live.labels):bx(i.textLines);a.out+=D(n)+"for ("+c+`) { +`)}else{u();const c=t.live?Ex(i.textLines,t.live.labels):Ix(i.textLines);a.out+=D(n)+"for ("+c+`) { `}o(i.loopBody??[],n+s),r||(a.out+=D(n)+`} `);return;case T.whileSchleife:l(r?"while ":"while (",r?`: `:`) { `),o(i.loopBody??[],n+s),r||(a.out+=D(n)+`} -`);return;case T.doUntilSchleife:{const c=t.live&&l0(i.textLines)?t1(t.live.labels.condition):Ra(i.textLines);if(r){a.out+=D(n)+`while True: +`);return;case T.doUntilSchleife:{const c=t.live&&m0(i.textLines)?t1(t.live.labels.condition):Ga(i.textLines);if(r){a.out+=D(n)+`while True: `;const d=n+s;o(i.loopBody??[],d),u(d);const h=c.includes(Hi)?c:Be(c,t.jsIntVariables??new Set);a.out+=D(d)+"if not ("+h+`): `,a.out+=D(d+s)+`break `}else a.out+=D(n)+`do { `,o(i.loopBody??[],n+s),u(),a.out+=D(n)+"} while ("+c+`); -`;return}case T.endlosschleife:{const c=Ra(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=D(n)+(d?`while True: +`;return}case T.endlosschleife:{const c=Ga(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=D(n)+(d?`while True: `:`while True: # ${c} `):a.out+=D(n)+(d?`while (true) { `:`while (true) /* ${c} */ { `),o(i.loopBody??[],n+s),r||(a.out+=D(n)+`} -`);return}}}const Hi="",r0="",t1=i=>Hi+i+r0,o0=(i,e)=>D(i)+t1(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` -`,l0=i=>i.every(e=>e.trim()==="");function Hh(i,e){return l0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Qt(i[a]??"");return s===""?t1(n):s}).join("; "):n0(i)}function Zx(i,e){const t=Hh(i,e).split(";"),n=t[0].includes(Hi)?void 0:Zh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Dx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Qt(g)):[],r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ve(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Be(r[2],t):t1(e.start),u=ve(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=t1(e.end);u&&(o===void 0||u[1]===o)&&(m=Be(u[3],t),u[2]==="<="&&(m=Po(m,1)));const c=o===void 0?void 0:Dh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??t1(e.selector)} in range(${d.join(", ")}):`}function Bo(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Bo(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Bo(o.elements,[...s,l],t))}),t}function Vh(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` -`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function Qh(i,e,t){const n={target:e,labels:t,paths:Bo(i.elements),spans:[]},a=Xl(i,e,{includeEmptyElseBranch:!0,live:n}),s=It(i.caption);let r="";if(e==="java"){const u=s0(i);for(const m of u)r+=m+` -`;fs(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; +`);return}}}const Hi="",l0="",t1=i=>Hi+i+l0,u0=(i,e)=>D(i)+t1(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` +`,m0=i=>i.every(e=>e.trim()==="");function Uh(i,e){return m0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Qt(i[a]??"");return s===""?t1(n):s}).join("; "):i0(i)}function Ex(i,e){const t=Uh(i,e).split(";"),n=t[0].includes(Hi)?void 0:Wh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Nx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Qt(g)):[],r=ve(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ve(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Be(r[2],t):t1(e.start),u=ve(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=t1(e.end);u&&(o===void 0||u[1]===o)&&(m=Be(u[3],t),u[2]==="<="&&(m=Oo(m,1)));const c=o===void 0?void 0:Eh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??t1(e.selector)} in range(${d.join(", ")}):`}function Lo(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Lo(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Lo(o.elements,[...s,l],t))}),t}function Yh(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` +`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function $h(i,e,t){const n={target:e,labels:t,paths:Lo(i.elements),spans:[]},a=Kl(i,e,{includeEmptyElseBranch:!0,live:n}),s=It(i.caption);let r="";if(e==="java"){const u=o0(i);for(const m of u)r+=m+` +`;bs(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; `),r+=`Scanner scanner = new Scanner(System.in); `):u.length&&(r+=` -`),s&&(r+=Ah(s)+` +`),s&&(r+=Zh(s)+` `)}else{if(s)for(const m of s.params)m.dims||(m.type==="int"&&a.jsIntVariables.add(m.name),m.type==="string"&&a.stringVariables.add(m.name));const u=s==null?void 0:s.params.map(m=>m.name).join(", ");e==="javascript"?(r+=`"use strict"; -`,r+=Ao([i],"javascript"),s&&(r+=`function ${s.name}(${u}) { -`)):(Gh(i)&&(r+=`import random +`,r+=Po([i],"javascript"),s&&(r+=`function ${s.name}(${u}) { +`)):(qh(i)&&(r+=`import random -`),r+=Ao([i],"python"),s&&(r+=`def ${s.name}(${u}): +`),r+=Po([i],"python"),s&&(r+=`def ${s.name}(${u}): `))}const o={out:""};v1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} `);const l=r.split(` -`).length-1;return{text:qh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function qh(i,e){switch(e){case"javascript":return Wx(Mo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return Bx(Mo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return Jx(i)}}function Bx(i){for(let e=0;e<5;e++){const t=Uh(Lx(i),"python");if(t===i)break;i=t}return i}const Ou={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function Lx(i){return u0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Ou)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=Ex(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Ou[t]}(${n})`}})}function Wx(i){for(let e=0;e<5;e++){const t=Uh(u0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Uh(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function Ex(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function u0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const Fx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function Ks(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),Fx.has(t.toLowerCase())&&(t="_"+t),t)}function Mu(i,e,t={},n=[]){const a={...Ch,...t},s=Ks(e),r=[i,...n].filter((z,I,k)=>k.indexOf(z)===I).map(z=>({d:z,header:It(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>_o(z.d,z.header,"java",t,a.indentPerLevel)),l=It(i.caption),u=r.some(z=>fs(z.d)),m=hs(i,"java",a),c=a.indentPerLevel*2,d=fs(i),h=d?Rx(m):m,g=D(c),f=h.trim()===""?"":h.split(` +`).length-1;return{text:Xh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Xh(i,e){switch(e){case"javascript":return Rx(Zo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return Jx(Zo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return Vx(i)}}function Jx(i){for(let e=0;e<5;e++){const t=Kh(Fx(i),"python");if(t===i)break;i=t}return i}const Bu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function Fx(i){return c0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Bu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=Gx(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Bu[t]}(${n})`}})}function Rx(i){for(let e=0;e<5;e++){const t=Kh(c0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Kh(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function Gx(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function c0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const Qx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function tr(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),Qx.has(t.toLowerCase())&&(t="_"+t),t)}function Lu(i,e,t={},n=[]){const a={...Mh,...t},s=tr(e),r=[i,...n].filter((z,I,k)=>k.indexOf(z)===I).map(z=>({d:z,header:It(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>Co(z.d,z.header,"java",t,a.indentPerLevel)),l=It(i.caption),u=r.some(z=>bs(z.d)),m=ps(i,"java",a),c=a.indentPerLevel*2,d=bs(i),h=d?qx(m):m,g=D(c),f=h.trim()===""?"":h.split(` `).map(z=>z.trim()===""?g:g+z).join(` -`);let x="";const b=o.length>0&&(d||u),v=[...new Set([i,...r.map(z=>z.d)].flatMap(s0))],w=v.length>0;(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const z of v)x+=z+` +`);let x="";const b=o.length>0&&(d||u),v=[...new Set([i,...r.map(z=>z.d)].flatMap(o0))],w=v.some(z=>z!==r0);(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const z of v)x+=z+` `;v.length&&(x+=` `),x+=`public class ${s} { `,b&&(x+=D(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in); @@ -210,9 +210,9 @@ ${o.out}${D(a)}} `),x+=D(a.indentPerLevel)+`} `);for(const[z,I]of o.entries())x+=(z>0||!l?` `:"")+I;return x+=`} -`,x}function Rx(i){const e=i.split(` +`,x}function qx(i){const e=i.split(` `);let t=0;for(e[t]==="// import java.util.Scanner;"&&t++;t=e.length?"":e.slice(t).join(` -`)}const yn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function ra(i){try{return localStorage.getItem(i)}catch{return null}}function oa(i,e){try{localStorage.setItem(i,e)}catch{}}const Gx=()=>p("web_run_stopped_loop"),Yh=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Hx(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(Gx())}); })(); ${a}++) {`})}function Vx(i){return Hx(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const Qx=` +`)}const yn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function ra(i){try{return localStorage.getItem(i)}catch{return null}}function oa(i,e){try{localStorage.setItem(i,e)}catch{}}const Ux=()=>p("web_run_stopped_loop"),eg=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Yx(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(Ux())}); })(); ${a}++) {`})}function $x(i){return Yx(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const Xx=` let answer let lines = [] // Text von \`process.stdout.write\` ohne neue Zeile (wie \`System.out.print\`). @@ -244,7 +244,7 @@ const process = { stdout: { write: (text) => { } } } setInterval(flush, 50) const __visuStructPrompt = (label) => new Promise((resolve, reject) => { - answer = (value) => (value === null ? reject(new Error(${JSON.stringify(Yh())})) : resolve(value)) + answer = (value) => (value === null ? reject(new Error(${JSON.stringify(eg())})) : resolve(value)) send('prompt', String(label ?? '')) }) onmessage = async (e) => { @@ -257,7 +257,7 @@ onmessage = async (e) => { send('error', String(err)) } } -`,Sr=2e3;class qx{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=ra(yn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=ra(yn.javaMode)==="class"?"class":"snippet",this.comments=ra(yn.comments)==="true",this.emptyElse=ra(yn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Mu(e,this.classStem(),t,this.subprograms()):hs(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return ds(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=` +`,jr=2e3;class Kx{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=ra(yn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=ra(yn.javaMode)==="class"?"class":"snippet",this.comments=ra(yn.comments)==="true",this.emptyElse=ra(yn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Lu(e,this.classStem(),t,this.subprograms()):ps(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return gs(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`

${Ne(p("codegen_placeholder_title"))}

@@ -287,12 +287,12 @@ onmessage = async (e) => {

${Ne(p("codegen_generated_hint"))}

- `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,oa(yn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,oa(yn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,oa(yn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,oa(yn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Ks(this.classStem()),s=Mu(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=Vx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([Qx],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(Yh())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>Sr&&(this.droppedLines+=this.outputLines.length-Sr,this.outputLines.splice(0,this.outputLines.length-Sr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` + `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,oa(yn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,oa(yn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,oa(yn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,oa(yn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=tr(this.classStem()),s=Lu(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=$x(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([Xx],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(eg())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>jr&&(this.droppedLines+=this.outputLines.length-jr,this.outputLines.splice(0,this.outputLines.length-jr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` `:"";this.runOutput.textContent=t+this.outputLines.join(` `)+(this.outputLines.length?` -`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Me=(i,e=!1)=>``,se={newFile:Me(''),open:Me(''),save:Me(''),undo:Me(''),redo:Me(''),cut:Me(''),copy:Me(''),paste:Me(''),trash:Me(''),share:Me(''),book:Me(''),code:Me(''),play:Me('',!0),step:Me(''),indent:Me(''),stop:Me('',!0),folder:Me(''),newFolder:Me(''),diagram:Me(''),fileText:Me('')},Ux="visustruct.learn.progress",Tr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function Yx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(Tr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&Tr[i.view.lesson]?{...i.view,lesson:Tr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function $x(){try{localStorage.removeItem(Ux)}catch{}}const $h=()=>({lessons:{},exercises:{}});$x();let et=$h();const Lo=new Set;function la(){for(const i of Lo)i()}const Zu="visustruct-lernstand";function Xh(i,e){return i||e||void 0}function Xx(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:Xh(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Kx(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=Xx(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:Xh(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const xe={lesson(i){return et.lessons[i]??{step:0}},updateLesson(i,e){et.lessons[i]={...xe.lesson(i),...e},la()},exercise(i){return et.exercises[i]??{}},updateExercise(i,e){et.exercises[i]={...xe.exercise(i),...e},la()},resetExercise(i){delete et.exercises[i],la()},view(){return et.view},hasContent(){return Object.values(et.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(et.exercises).length>0},setView(i){et.view=i,la()},onChange(i){return Lo.add(i),()=>Lo.delete(i)},toFile(){return JSON.stringify({format:Zu,version:1,saved:new Date().toISOString(),lessons:et.lessons,exercises:et.exercises,view:et.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==Zu)return!1;const n=Yx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return et=e?{...Kx(et,n),view:n.view??et.view}:n,!0},clear(){et=$h()}};function Du(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Bu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function eb(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Bu(i.name)&&Bu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function tb(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function nb(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function ib(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Un=10;function ab(i){let e=i.replace(/\r/g,"").split(` -`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Un,r=e.length*Un,o=(m,c)=>({x:-s/2+(m+.5)*Un,y:r/2-(c+.5)*Un}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Lu?l.colors.push({at:g,color:Lu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Lu={r:"red",g:"green",b:"blue",y:"yellow"},q1=(i,e)=>Math.abs(i.x-e.x)<=Un/2&&Math.abs(i.y-e.y)<=Un/2,Wu=10,Eu=9,sb=300,d1=8,rb=[-3.6,-1.2,1.2,3.6],ob=2.5,lb=20,ub=12,m0=100,_i={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Nu=i=>i*Math.PI/180,h1=i=>({x:Math.sin(Nu(i)),y:Math.cos(Nu(i))}),ua=()=>Array.from({length:yh},()=>{}),Ju=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class xs{constructor(e=_i){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",ua());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=ua(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Un/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(this.setup.goals??[]).some(n=>q1(this.pose,n)||q1(t,n))||(this.setup.targets??[]).some(n=>q1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Fu(e.args[0]),Fu(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=ua().map(()=>Ju(e.args));return;case"ledOff":this.leds=ua();return;case"ledColor":this.leds[e.args[0]]=Ju(rs[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*lb);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*d1+t.x*a,y:this.pose.y+e.y*d1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>q1(r,l))||this.setup.lines.some(l=>cb(r,l)<=ob/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(n=(this.setup.colors??[]).find(a=>q1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=mb(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Ru(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function mb(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function cb(i,e){let t=1/0;for(let n=0;n+10&&o.tick(m0),s.robotSensors={...o.sensors(),...xb(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?ls(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:zh(m.robotActions.filter(d=>!pb.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:ls(s.state.robotActions),tooManySteps:!0}}function xb(i,e){const t=Math.floor(e/hb);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Kh(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` -`)}function ma(i,e){return i.length!==e.length?!1:i.every((t,n)=>Gu(t)===Gu(e[n]))}function bb(i,e){const t=n=>n.join("").replace(/\s+/g,"");return i.length>0&&i.length{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=fb(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ma(Kh((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ma(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ma(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ma(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function yb(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Wo(i){const e=[T.forSchleife,T.whileSchleife,T.doUntilSchleife,T.endlosschleife];let t=0;for(const n of i){const a=Math.max(Wo(n.loopBody??[]),...(n.cases??[]).map(s=>Wo(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Ci extends Error{}function wb(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();bs(o,zb(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Ci(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Ci(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function zb(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Ib(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Ci(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Ci(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function kb(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(bs(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(bs(i,e));return s!==t[t.length-1]&&t.push(s),t}function Sb(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function Tb(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=Sb(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:bs(o,l)}}function jb(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const _b=`--- +`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Me=(i,e=!1)=>``,se={newFile:Me(''),open:Me(''),save:Me(''),undo:Me(''),redo:Me(''),cut:Me(''),copy:Me(''),paste:Me(''),trash:Me(''),share:Me(''),book:Me(''),code:Me(''),play:Me('',!0),step:Me(''),indent:Me(''),stop:Me('',!0),folder:Me(''),newFolder:Me(''),diagram:Me(''),fileText:Me('')},eb="visustruct.learn.progress",_r={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function tb(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(_r))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&_r[i.view.lesson]?{...i.view,lesson:_r[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function nb(){try{localStorage.removeItem(eb)}catch{}}const tg=()=>({lessons:{},exercises:{}});nb();let et=tg();const Wo=new Set;function la(){for(const i of Wo)i()}const Wu="visustruct-lernstand";function ng(i,e){return i||e||void 0}function ib(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:ng(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function ab(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=ib(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:ng(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const xe={lesson(i){return et.lessons[i]??{step:0}},updateLesson(i,e){et.lessons[i]={...xe.lesson(i),...e},la()},exercise(i){return et.exercises[i]??{}},updateExercise(i,e){et.exercises[i]={...xe.exercise(i),...e},la()},resetExercise(i){delete et.exercises[i],la()},view(){return et.view},hasContent(){return Object.values(et.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(et.exercises).length>0},setView(i){et.view=i,la()},onChange(i){return Wo.add(i),()=>Wo.delete(i)},toFile(){return JSON.stringify({format:Wu,version:1,saved:new Date().toISOString(),lessons:et.lessons,exercises:et.exercises,view:et.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==Wu)return!1;const n=tb({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return et=e?{...ab(et,n),view:n.view??et.view}:n,!0},clear(){et=tg()}};function Eu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Nu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function sb(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Nu(i.name)&&Nu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function rb(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function ob(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function lb(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Un=10;function ub(i){let e=i.replace(/\r/g,"").split(` +`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Un,r=e.length*Un,o=(m,c)=>({x:-s/2+(m+.5)*Un,y:r/2-(c+.5)*Un}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Ju?l.colors.push({at:g,color:Ju[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Ju={r:"red",g:"green",b:"blue",y:"yellow"},q1=(i,e)=>Math.abs(i.x-e.x)<=Un/2&&Math.abs(i.y-e.y)<=Un/2,Fu=10,Ru=9,mb=300,d1=8,cb=[-3.6,-1.2,1.2,3.6],db=2.5,hb=20,gb=12,d0=100,_i={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Gu=i=>i*Math.PI/180,h1=i=>({x:Math.sin(Gu(i)),y:Math.cos(Gu(i))}),ua=()=>Array.from({length:kh},()=>{}),Hu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class vs{constructor(e=_i){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",ua());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=ua(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Un/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(this.setup.goals??[]).some(n=>q1(this.pose,n)||q1(t,n))||(this.setup.targets??[]).some(n=>q1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Vu(e.args[0]),Vu(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=ua().map(()=>Hu(e.args));return;case"ledOff":this.leds=ua();return;case"ledColor":this.leds[e.args[0]]=Hu(os[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*hb);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*d1+t.x*a,y:this.pose.y+e.y*d1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>q1(r,l))||this.setup.lines.some(l=>fb(r,l)<=db/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=h1(this.pose.heading),t={x:this.pose.x+e.x*d1,y:this.pose.y+e.y*d1};return(n=(this.setup.colors??[]).find(a=>q1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=pb(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Qu(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function pb(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function fb(i,e){let t=1/0;for(let n=0;n+10&&o.tick(d0),s.robotSensors={...o.sensors(),...zb(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?us(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:Th(m.robotActions.filter(d=>!yb.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:us(s.state.robotActions),tooManySteps:!0}}function zb(i,e){const t=Math.floor(e/bb);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function ig(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` +`)}function ma(i,e){return i.length!==e.length?!1:i.every((t,n)=>qu(t)===qu(e[n]))}function Ib(i,e){const t=n=>n.join("").replace(/\s+/g,"");return i.length>0&&i.length{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=wb(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ma(ig((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ma(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ma(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ma(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Sb(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Eo(i){const e=[T.forSchleife,T.whileSchleife,T.doUntilSchleife,T.endlosschleife];let t=0;for(const n of i){const a=Math.max(Eo(n.loopBody??[]),...(n.cases??[]).map(s=>Eo(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Ci extends Error{}function Tb(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();ys(o,jb(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Ci(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Ci(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function jb(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function _b(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Ci(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Ci(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function Cb(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(ys(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ys(i,e));return s!==t[t.length-1]&&t.push(s),t}function Ab(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function Pb(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=Ab(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:ys(o,l)}}function Ob(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Mb=`--- titel: Was ist ein Struktogramm? bereich: Erste Schritte kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. @@ -696,7 +696,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Ein Pfeil > Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. ::: -`,Cb=`--- +`,Zb=`--- titel: Der Editor bereich: Erste Schritte kurz: Elemente einfügen, Text eingeben, verschieben und löschen. @@ -882,7 +882,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] input: "Guten Tag" > Ohne Anführungszeichen wird Guten Tag als Name einer Variablen verstanden. ::: -`,Ab=`--- +`,Db=`--- titel: Speichern, Öffnen, Exportieren bereich: Erste Schritte kurz: Dateien sichern, deinen Workspace nutzen, mehrere Diagramme öffnen und als Bild oder PDF weitergeben. @@ -1044,7 +1044,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Direkt im Workspace ohne Unterordner > VisuStruct legt für jeden Tag automatisch einen Datumsordner an. So bleiben die Programme nach Stunden sortiert. ::: -`,Pb=`--- +`,Bb=`--- titel: Variablen und Datentypen bereich: Grundlagen kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und rechnen. @@ -1440,7 +1440,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Double preis = 2.5 > Kommazahlen schreibst du mit Punkt, und am Ende steht ein Semikolon. ::: -`,Ob=`--- +`,Lb=`--- titel: Sequenz bereich: Grundlagen kurz: Schritte nacheinander ausführen, auf die Reihenfolge achten und Werte tauschen. @@ -1693,7 +1693,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Mit einem Doppelpunkt : > Fehlt das Semikolon, zeigt VisuStruct unter dem Code einen Hinweis. ::: -`,Mb=`--- +`,Wb=`--- titel: Eingabe und Ausgabe bereich: Grundlagen kurz: Werte abfragen, Ergebnisse anzeigen und das EVA-Prinzip anwenden. @@ -2125,7 +2125,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Bei der nächsten Leerzeile > Darum kann ein Kommentar mit \`/*\` über mehrere Zeilen gehen. Ein Kommentar mit \`//\` endet dagegen am Zeilenende. ::: -`,Zb=`--- +`,Eb=`--- titel: Simulation und Schreibtischtest bereich: Grundlagen kurz: Ein Struktogramm Schritt für Schritt ausführen, von Hand nachrechnen und Fehler finden. @@ -2489,7 +2489,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] Logikfehler > Es gibt keine Meldung, das Ergebnis ist trotzdem falsch. So einen Fehler findest du nur mit deiner Erwartung und dem Schreibtischtest. ::: -`,Db=`--- +`,Nb=`--- titel: Verzweigung bereich: Grundlagen kurz: Mit einer Bedingung entscheiden, welcher von zwei Wegen ausgeführt wird. @@ -2857,7 +2857,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Hinter einem Semikolon > \`if (alter >= 18) { … }\`: Die runden Klammern gehören zur Bedingung, die geschweiften zum Zweig. ::: -`,Bb=`--- +`,Jb=`--- titel: Bedingungen verknüpfen bereich: Grundlagen kurz: Mehrere Bedingungen mit und, oder und nicht verbinden und Wertebereiche prüfen. @@ -3184,7 +3184,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] if (alter >= 12 || alter < 18) > Jeder Vergleich steht für sich, verbunden mit \`&&\`. ::: -`,Lb=`--- +`,Fb=`--- titel: Fallauswahl bereich: Grundlagen kurz: Je nach Wert einer Variablen einen von vielen Fällen ausführen. @@ -3513,7 +3513,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] default - [ ] case 0 ::: -`,Wb=`--- +`,Rb=`--- titel: While-Schleife bereich: Grundlagen kurz: Schritte wiederholen, solange eine Bedingung wahr ist. @@ -3872,7 +3872,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] while (zahl > 0); > Die Bedingung steht in runden Klammern, danach öffnet \`{\` den Rumpf. ::: -`,Eb=`--- +`,Gb=`--- titel: Do-while-Schleife bereich: Grundlagen kurz: Erst ausführen, dann prüfen: Schleifen mit mindestens einem Durchlauf. @@ -4150,7 +4150,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] } until (bedingung); > Nach der Bedingung kommt ein Semikolon. ::: -`,Nb=`--- +`,Hb=`--- titel: For-Schleife bereich: Grundlagen kurz: Mit Start, Bedingung und Schritt eine feste Anzahl von Durchläufen zählen. @@ -4477,7 +4477,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] i wird ausgegeben. > \`i++\` ist die Kurzform von \`i = i + 1\`. ::: -`,Jb=`--- +`,Vb=`--- titel: Verschachteln bereich: Grundlagen kurz: Verzweigungen in Schleifen und Schleifen in Schleifen kombinieren. @@ -4775,7 +4775,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] An den geschweiften Klammern und der Einrückung - [ ] An den Semikolons ::: -`,Fb=`--- +`,Qb=`--- titel: Arrays bereich: Grundlagen kurz: Viele Werte unter einem Namen speichern, mit dem Index darauf zugreifen und sie mit einer Schleife durchlaufen. @@ -4943,6 +4943,8 @@ for (int i = 0; i < zahlen.length; i++) { - Ein leeres Array mit 5 Fächern legst du mit \`new int[5]\` an. - \`zahlen[i]\` ist das Fach mit dem Index \`i\`, \`zahlen.length\` die Länge. +Gibst du das ganze Array aus, also \`System.out.println(zahlen);\`, zeigt Java nicht die Zahlen. Du siehst nur einen Text wie \`[I@1b6d3586\`. Das ist die **Referenz**, also die Stelle, an der das Array im Speicher liegt. Den Inhalt zeigt erst \`Arrays.toString(zahlen)\`, das ergibt \`[2, 4, 6, 8, 10]\`. Dafür schreibst du ganz oben \`import java.util.Arrays;\`. + ::: übung l15-java-noten titel: Notensumme in Java code: java @@ -5128,7 +5130,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] int zahlen = [1, 2, 3]; - [ ] array zahlen = (1, 2, 3); ::: -`,Rb=`--- +`,qb=`--- titel: Zweidimensionale Arrays bereich: Grundlagen kurz: Werte in Zeilen und Spalten speichern, wie die Sitze in einem Kinosaal, und mit zwei verschachtelten Schleifen durchlaufen. @@ -5445,7 +5447,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 5, die Zahl der Plätze - [ ] 15, alle Plätze zusammen ::: -`,Gb=`--- +`,Ub=`--- titel: Zeichenketten bereich: Grundlagen kurz: Mit Texten arbeiten, also einzelne Zeichen lesen, Teile herausschneiden, suchen, vergleichen und zerlegen. @@ -5971,7 +5973,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] eine Fehlermeldung > parseInt macht aus dem Text eine Zahl. Danach rechnet Java ganz normal. ::: -`,Hb=`--- +`,Yb=`--- titel: Aufruf und Aussprung bereich: Grundlagen kurz: Große Aufgaben in Unterprogramme zerlegen und Schleifen vorzeitig verlassen. @@ -6454,7 +6456,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] return > void heißt „leer“: Die Methode macht etwas, gibt aber keinen Wert zurück. ::: -`,Vb=`--- +`,$b=`--- titel: Suchen und Sortieren bereich: Grundlagen kurz: Mit Spielkarten verstehen, wie lineare und binäre Suche und Bubblesort arbeiten und warum manche Verfahren viel schneller sind. @@ -6805,7 +6807,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Eine While-Schleife kann keine Arrays durchlaufen. > Die Karte kann mehrmals vorkommen. Darum gehst du alle Karten bis zum Ende durch. ::: -`,Qb=`--- +`,Xb=`--- titel: Struktogramm und Code bereich: Vom Struktogramm zum Code kurz: Alle Elemente in Java auf einen Blick, Code erzeugen, im Bereich Code Java schreiben, ausführen und Fehler suchen. @@ -7277,7 +7279,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Zeile 3 wird als Nächstes ausgeführt. > Der Haltepunkt ist ein runder roter Punkt, die nächste Zeile ist gelb. Eine rote Zeilennummer zeigt einen Syntaxfehler oder einen Laufzeitfehler. ::: -`,qb=`--- +`,Kb=`--- titel: Python und JavaScript bereich: Vom Struktogramm zum Code kurz: Python- und JavaScript-Code aus dem Struktogramm erzeugen und JavaScript direkt im Browser ausführen. @@ -7517,7 +7519,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Es wird Summe: ausgegeben. > Mit str(summe) wird aus der Zahl ein Text. ::: -`,Ub=`--- +`,e4=`--- titel: Wenn das Programm abstürzt: try und catch bereich: Fehler abfangen kurz: Mit echtem Java Fehlermeldungen lesen und Abstürze mit try und catch abfangen. @@ -7810,7 +7812,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ArithmeticException -> Teilen durch 0 = NumberFormatException -> Text ist keine Zahl ::: -`,Yb=`--- +`,t4=`--- titel: Text einlesen und speichern bereich: Dateien kurz: Mit Scanner eine Textdatei Zeile für Zeile lesen und mit PrintWriter eine Datei speichern. @@ -8064,7 +8066,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = println(text) -> schreibt eine Zeile = close() -> schließt die Datei ::: -`,$b=`--- +`,n4=`--- titel: Zeile für Zeile mit BufferedReader bereich: Dateien kurz: Mit BufferedReader und readLine lesen, bis null kommt, und mit Files eine ganze Datei auf einmal lesen. @@ -8320,7 +8322,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Files.readString -> kleine Dateien auf einmal = Scanner -> Zahlen und Wörter lesen ::: -`,Xb=`--- +`,i4=`--- titel: Tabellen als CSV bereich: Dateien kurz: Eine Tabelle als CSV-Datei lesen, jede Zeile mit split zerlegen und mit den Zahlen rechnen. @@ -8544,7 +8546,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Datensatz -> eine Zeile mit Werten = Trennzeichen -> trennt die Spalten, meist ; ::: -`,Kb=`--- +`,a4=`--- titel: Daten als JSON bereich: Dateien kurz: JSON-Dateien verstehen, Werte mit indexOf und substring herausholen und selbst JSON schreiben. @@ -8769,7 +8771,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = [ ] -> eine Liste = : -> trennt Schlüssel und Wert ::: -`,e4=`--- +`,s4=`--- titel: Formate im Vergleich bereich: Dateien kurz: Dieselben Daten als txt, CSV und JSON vergleichen, das passende Format wählen und eine Datei in ein anderes Format umwandeln. @@ -8944,7 +8946,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = die Notenliste der Klasse -> CSV = ein Spielstand mit Listen -> JSON ::: -`,t4=`--- +`,r4=`--- titel: Dein erstes Fenster bereich: Fenster mit Swing kurz: Mit Java und Swing ein eigenes Fenster öffnen, Zeile für Zeile erklärt. @@ -9166,7 +9168,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Sie stehen in geschweiften Klammern. - [ ] Sie enden mit Window. ::: -`,n4=`--- +`,o4=`--- titel: Ein Knopf im Fenster bereich: Fenster mit Swing kurz: Einen Knopf ins Fenster legen und mit einem Layout ordentlich anordnen. @@ -9382,7 +9384,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Auf dem Knopf steht „Ich wurde geklickt“. > Was beim Klick passieren soll, lernst du in der nächsten Lektion. ::: -`,i4=`--- +`,l4=`--- titel: Der Knopf reagiert bereich: Fenster mit Swing kurz: Mit einem ActionListener festlegen, was beim Klick passiert. @@ -9724,7 +9726,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = setText -> Beschriftung ändern = setVisible(true) -> Fenster zeigen ::: -`,a4=`--- +`,u4=`--- titel: Zahl verdoppeln im Fenster bereich: Fenster mit Swing kurz: Beschriftung, Textfeld und Knopf mit einem GridLayout anordnen und mit dem Text im Textfeld rechnen. @@ -10005,7 +10007,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = JButton -> Knopf = GridLayout -> Anordnung im Gitter ::: -`,s4=`--- +`,m4=`--- titel: Klickzähler mit Reset bereich: Fenster mit Swing kurz: Zwei Knöpfe ändern dieselbe Zahl: eine Variable für die ganze Klasse anlegen. @@ -10237,7 +10239,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Es setzt das Fenster in die Mitte des Bildschirms. - [ ] Es macht die Schrift größer. ::: -`,r4=`--- +`,c4=`--- titel: Eine Ampel mit Farben bereich: Fenster mit Swing kurz: Hintergrundfarben setzen und mit einer Zustandsvariable eine Ampel weiterschalten. @@ -10513,7 +10515,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 3 > Nach phase++ ist sie 3, das ist größer als 2, also wird sie 0. ::: -`,o4=`--- +`,d4=`--- titel: Notenrechner im Fenster bereich: Fenster mit Swing kurz: Punkte eingeben, mit else if die Note bestimmen und falsche Eingaben abfangen. @@ -10789,7 +10791,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] punkte >= 0 || punkte <= 100 > Eine Zahl kann nicht gleichzeitig kleiner als 0 und größer als 100 sein, deshalb braucht es oder. ::: -`,l4=`--- +`,h4=`--- titel: Ein Taschenrechner bereich: Fenster mit Swing kurz: Zwei Spalten mit GridLayout, vier Rechenknöpfe und die Division durch 0 abfangen. @@ -11060,7 +11062,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Spalte für Spalte, erst ganz links von oben nach unten - [ ] Zufällig ::: -`,u4=`--- +`,g4=`--- titel: Zahlenraten bereich: Fenster mit Swing kurz: Ein Spiel mit Zufallszahl, Versuchszähler und einem Knopf, der sich am Ende abschaltet. @@ -11216,7 +11218,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] 7 > Jeder Tipp halbiert den Bereich, und 2 hoch 7 = 128 ist größer als 100. ::: -`,m4=`--- +`,p4=`--- titel: Viele Knöpfe, ein Zuhörer bereich: Fenster mit Swing kurz: Ein Zuhörer für viele Knöpfe, mit getActionCommand und getSource herausfinden, welcher Knopf geklickt wurde. @@ -11521,7 +11523,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ActionEvent -> das Ereignis e mit den Infos zum Klick = JPanel -> eine Fläche mit eigenem Layout ::: -`,c4=`--- +`,f4=`--- titel: Innere Klassen bereich: Fenster mit Swing kurz: Einen Zuhörer als benannte innere Klasse, als anonyme Klasse und als Lambda schreiben und wissen, wer was sehen darf. @@ -11753,7 +11755,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = new ActionListener() { … } -> anonyme Klasse = der Pfeil hinter e -> Lambda ::: -`,d4=`--- +`,x4=`--- titel: Zwei Reiter bereich: Fenster mit Swing kurz: Ein Fenster mit zwei Reitern bauen, Daten von einem Reiter zum anderen bringen und die Liste als Textdatei speichern. @@ -12034,7 +12036,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = JPanel -> die Fläche eines Reiters = JTextArea -> ein Textbereich mit mehreren Zeilen ::: -`,h4=`--- +`,b4=`--- titel: Model View Controller bereich: Fenster mit Swing kurz: Den Klickzähler in Model, View und Controller zerlegen und verstehen, wer mit wem redet. @@ -12449,7 +12451,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ZahlAnzeige mit aktualisieren(int wert) -> View = der Zuhörer am Knopf -> Controller ::: -`,g4=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim +`,v4=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim Hovern oder Antippen seine Erklärung. Steht er im Schritt fett, wird er gerade erklärt und deshalb nicht markiert. \`auch:\` nennt weitere Formen, die ebenfalls erkannt werden. Groß- und Kleinschreibung zählt. @@ -12696,7 +12698,7 @@ Befehle als Zahlen, die der Prozessor direkt ausführt. Jede Prozessorart hat ih ### JIT-Compiler auch: JIT Ein Teil der JVM, der oft benutzten Bytecode während des Ausführens („just in time“) in Maschinencode übersetzt. Dadurch wird Java schneller. -`,p4=`## Grundbausteine +`,y4=`## Grundbausteine ### Anweisung @@ -12865,7 +12867,7 @@ for (int i = 1; i <= 10; i++) { \`\`\` Gut für: die Aufgabenstellung, die Einteilung in Eingabe, Verarbeitung und Ausgabe, eine Erklärung, das Ende eines Blocks hinter \`}\`, die erwartete Ausgabe und Notizen fürs nächste Mal. -`,f4=`--- +`,w4=`--- titel: What is a structure chart? bereich: First steps kurz: Show and read algorithms as a series of clear steps. @@ -13262,7 +13264,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] An arrow > Everything between WHILE and END WHILE is indented and is repeated. ::: -`,x4=`--- +`,z4=`--- titel: The editor bereich: First steps kurz: Insert elements, type text, move and delete. @@ -13448,7 +13450,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] input: "Good morning" > Without quotation marks, Good morning is understood as the name of a variable. ::: -`,b4=`--- +`,I4=`--- titel: Save, open, export bereich: First steps kurz: Keep your files safe, use your workspace, open several diagrams and share them as an image or PDF. @@ -13610,7 +13612,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Directly in the workspace without a subfolder > VisuStruct automatically creates a date folder for each day. That keeps the programs sorted by lesson. ::: -`,v4=`--- +`,k4=`--- titel: Variables and data types bereich: Basics kurz: Store values, get to know the data types int, double, String and boolean, and calculate. @@ -14006,7 +14008,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Double price = 2.5 > Decimal numbers use a point, and the line ends with a semicolon. ::: -`,y4=`--- +`,S4=`--- titel: Sequence bereich: Basics kurz: Run steps one after another, watch the order and swap values. @@ -14259,7 +14261,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] With a colon : > If the semicolon is missing, VisuStruct shows a hint below the code. ::: -`,w4=`--- +`,T4=`--- titel: Input and output bereich: Basics kurz: Ask for values, show results and use the IPO model. @@ -14691,7 +14693,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] At the next empty line > That is why a comment with \`/*\` can span several lines. A comment with \`//\`, on the other hand, ends at the end of the line. ::: -`,z4=`--- +`,j4=`--- titel: Simulation and desk check bereich: Basics kurz: Run a structure chart step by step, work it out by hand and find mistakes. @@ -15055,7 +15057,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] Logic error > There is no message, but the result is still wrong. You only find an error like this with your expectation and a desk check. ::: -`,I4=`--- +`,_4=`--- titel: Branch bereich: Basics kurz: Use a condition to decide which of two paths runs. @@ -15423,7 +15425,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] After a semicolon > \`if (age >= 18) { … }\`: the round brackets belong to the condition, the curly ones to the branch. ::: -`,k4=`--- +`,C4=`--- titel: Combining conditions bereich: Basics kurz: Join several conditions with and, or and not, and check ranges of values. @@ -15750,7 +15752,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] if (age >= 12 || age < 18) > Each comparison stands on its own, joined with \`&&\`. ::: -`,S4=`--- +`,A4=`--- titel: Switch bereich: Basics kurz: Run one of many cases, depending on the value of a variable. @@ -16079,7 +16081,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] default - [ ] case 0 ::: -`,T4=`--- +`,P4=`--- titel: While loop bereich: Basics kurz: Repeat steps as long as a condition is true. @@ -16438,7 +16440,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] while (number > 0); > The condition is in round brackets, then \`{\` opens the body. ::: -`,j4=`--- +`,O4=`--- titel: Do-while loop bereich: Basics kurz: Run first, check afterwards: loops with at least one pass. @@ -16716,7 +16718,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] } until (condition); > A semicolon follows the condition. ::: -`,_4=`--- +`,M4=`--- titel: For loop bereich: Basics kurz: Count a fixed number of passes with Init, Condition and Step. @@ -17043,7 +17045,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] i is output. > \`i++\` is short for \`i = i + 1\`. ::: -`,C4=`--- +`,Z4=`--- titel: Nesting bereich: Basics kurz: Combine branches inside loops and loops inside loops. @@ -17341,7 +17343,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] By the curly brackets and the indentation - [ ] By the semicolons ::: -`,A4=`--- +`,D4=`--- titel: Arrays bereich: Basics kurz: Store many values under one name, reach them with the index and go through them with a loop. @@ -17509,6 +17511,8 @@ for (int i = 0; i < numbers.length; i++) { - You create an empty array with 5 slots with \`new int[5]\`. - \`numbers[i]\` is the slot with index \`i\`, \`numbers.length\` is the length. +If you output the whole array, that is \`System.out.println(numbers);\`, Java does not show the numbers. You only see a text like \`[I@1b6d3586\`. This is the **reference**, the place where the array is stored in memory. \`Arrays.toString(numbers)\` shows the content: \`[2, 4, 6, 8, 10]\`. For this you write \`import java.util.Arrays;\` at the very top. + ::: übung l15-java-noten titel: Sum of grades in Java code: java @@ -17694,7 +17698,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] int numbers = [1, 2, 3]; - [ ] array numbers = (1, 2, 3); ::: -`,P4=`--- +`,B4=`--- titel: Two-dimensional arrays bereich: Basics kurz: Store values in rows and columns, like the seats in a cinema, and go through them with two nested loops. @@ -18011,7 +18015,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 5, the number of seats - [ ] 15, all seats together ::: -`,O4=`--- +`,L4=`--- titel: Strings bereich: Basics kurz: Work with text: read single characters, cut out parts, search, compare and split. @@ -18535,7 +18539,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] an error message > parseInt turns the text into a number. After that Java calculates as usual. ::: -`,M4=`--- +`,W4=`--- titel: Call and break bereich: Basics kurz: Split big tasks into subprograms and leave loops early. @@ -19017,7 +19021,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] return > void means “empty”: the method does something but returns no value. ::: -`,Z4=`--- +`,E4=`--- titel: Searching and sorting bereich: Basics kurz: Use playing cards to understand how linear search, binary search and bubble sort work, and why some methods are much faster. @@ -19368,7 +19372,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] A while loop cannot go through arrays. > The card can appear several times. That is why you go through all cards to the end. ::: -`,D4=`--- +`,N4=`--- titel: Structure chart and code bereich: From structure chart to code kurz: All elements in Java at a glance, generate code, write Java in the Code area, run it and find mistakes. @@ -19840,7 +19844,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Line 3 runs next. > A breakpoint is a round red dot, and the next line is yellow. A red line number shows a syntax error or a runtime error. ::: -`,B4=`--- +`,J4=`--- titel: Python and JavaScript bereich: From structure chart to code kurz: Generate Python and JavaScript code from the structure chart and run JavaScript straight in the browser. @@ -20080,7 +20084,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Sum: is output. > str(sum) turns the number into text. ::: -`,L4=`--- +`,F4=`--- titel: When the program crashes: try and catch bereich: Catching errors kurz: Use real Java to read error messages and catch crashes with try and catch. @@ -20373,7 +20377,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = ArithmeticException -> dividing by 0 = NumberFormatException -> text is not a number ::: -`,W4=`--- +`,R4=`--- titel: Reading and saving text bereich: Files kurz: Read a text file line by line with Scanner and save a file with PrintWriter. @@ -20627,7 +20631,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = println(text) -> writes a line = close() -> closes the file ::: -`,E4=`--- +`,G4=`--- titel: Line by line with BufferedReader bereich: Files kurz: Read with BufferedReader and readLine until null comes, and read a whole file at once with Files. @@ -20883,7 +20887,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = Files.readString -> small files all at once = Scanner -> reading numbers and words ::: -`,N4=`--- +`,H4=`--- titel: Tables as CSV bereich: Files kurz: Read a table as a CSV file, split each line with split and calculate with the numbers. @@ -21107,7 +21111,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = record -> a line with values = separator -> separates the columns, often ; ::: -`,J4=`--- +`,V4=`--- titel: Data as JSON bereich: Files kurz: Understand JSON files, get values out with indexOf and substring, and write JSON yourself. @@ -21332,7 +21336,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = [ ] -> a list = : -> separates key and value ::: -`,F4=`--- +`,Q4=`--- titel: Comparing formats bereich: Files kurz: Compare the same data as txt, CSV and JSON, choose the right format and convert a file into another format. @@ -21507,7 +21511,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = the class grade list -> CSV = a game save with lists -> JSON ::: -`,R4=`--- +`,q4=`--- titel: Your first window bereich: Windows with Swing kurz: Open your own window with Java and Swing, explained line by line. @@ -21729,7 +21733,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] They are in curly brackets. - [ ] They end in Window. ::: -`,G4=`--- +`,U4=`--- titel: A button in the window bereich: Windows with Swing kurz: Put a button into the window and arrange it neatly with a layout. @@ -21945,7 +21949,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] The button says “I was clicked”. > What should happen on a click is what you learn in the next lesson. ::: -`,H4=`--- +`,Y4=`--- titel: The button reacts bereich: Windows with Swing kurz: Use an ActionListener to decide what happens on a click. @@ -22287,7 +22291,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = setText -> change the label = setVisible(true) -> show the window ::: -`,V4=`--- +`,$4=`--- titel: Doubling a number in a window bereich: Windows with Swing kurz: Arrange a label, a text field and a button with a GridLayout and calculate with the text in the text field. @@ -22568,7 +22572,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = JButton -> button = GridLayout -> arrangement in a grid ::: -`,Q4=`--- +`,X4=`--- titel: Click counter with reset bereich: Windows with Swing kurz: Two buttons change the same number: create a variable for the whole class. @@ -22800,7 +22804,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] It puts the window in the middle of the screen. - [ ] It makes the font bigger. ::: -`,q4=`--- +`,K4=`--- titel: A traffic light with colours bereich: Windows with Swing kurz: Set background colours and switch a traffic light on with a state variable. @@ -23076,7 +23080,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 3 > After phase++ it is 3, which is greater than 2, so it becomes 0. ::: -`,U4=`--- +`,ev=`--- titel: Grade calculator in a window bereich: Windows with Swing kurz: Enter points, work out the grade with else if and catch wrong input. @@ -23347,7 +23351,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] points >= 0 || points <= 100 > A number can't be smaller than 0 and bigger than 100 at the same time, so you need or. ::: -`,Y4=`--- +`,tv=`--- titel: A calculator bereich: Windows with Swing kurz: Two columns with GridLayout, four arithmetic buttons and catching division by 0. @@ -23618,7 +23622,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Column by column, starting top to bottom on the far left - [ ] Randomly ::: -`,$4=`--- +`,nv=`--- titel: Guess the number bereich: Windows with Swing kurz: A game with a random number, a counter for the guesses and a button that switches itself off at the end. @@ -23774,7 +23778,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] 7 > Each guess halves the range, and 2 to the power of 7 = 128 is bigger than 100. ::: -`,X4=`--- +`,iv=`--- titel: Many buttons, one listener bereich: Windows with Swing kurz: One listener for many buttons, and finding out with getActionCommand and getSource which button was clicked. @@ -24078,7 +24082,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = ActionEvent -> the event e with the information about the click = JPanel -> an area with its own layout ::: -`,K4=`--- +`,av=`--- titel: Inner classes bereich: Windows with Swing kurz: Write a listener as a named inner class, as an anonymous class and as a lambda, and know who can see what. @@ -24310,7 +24314,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = new ActionListener() { … } -> anonymous class = the arrow after e -> lambda ::: -`,ev=`--- +`,sv=`--- titel: Two tabs bereich: Windows with Swing kurz: Build a window with two tabs, bring data from one tab to the other and save the list as a text file. @@ -24591,7 +24595,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = JPanel -> the area of a tab = JTextArea -> a text area with several lines ::: -`,tv=`--- +`,rv=`--- titel: Model View Controller bereich: Windows with Swing kurz: Split the click counter into model, view and controller and understand who talks to whom. @@ -25006,7 +25010,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = NumberView with update(int value) -> view = the listener at the button -> controller ::: -`,nv=`Technical terms for the learning area. When a term appears in a step, it is marked there once and shows its explanation +`,ov=`Technical terms for the learning area. When a term appears in a step, it is marked there once and shows its explanation on hover or tap. If it is in bold in that step, it is being explained right there and is not marked. \`also:\` lists other forms that are recognised too. Upper and lower case matter. @@ -25260,7 +25264,7 @@ Instructions as numbers that the processor runs directly. Every kind of processo ### JIT compiler auch: JIT A part of the JVM that translates often-used bytecode into machine code while the program runs (“just in time”). This makes Java faster. -`,iv=`## Basics +`,lv=`## Basics ### Statement @@ -25429,7 +25433,7 @@ for (int i = 1; i <= 10; i++) { \`\`\` Good for: the task, dividing the code into input, process and output, an explanation, the end of a block after \`}\`, the expected output and notes for next time. -`,av=`--- +`,uv=`--- titel: O que é um estrutograma? bereich: Primeiros passos kurz: Mostrar e ler algoritmos como uma série de passos claros. @@ -25833,7 +25837,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Uma seta > Tudo o que está entre ENQUANTO e FIM ENQUANTO está recuado e é repetido. ::: -`,sv=`--- +`,mv=`--- titel: O editor bereich: Primeiros passos kurz: Inserir elementos, escrever texto, mover e eliminar. @@ -26019,7 +26023,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] input: "Bom dia" > Sem aspas, Bom dia é entendido como o nome de uma variável. ::: -`,rv=`--- +`,cv=`--- titel: Guardar, abrir, exportar bereich: Primeiros passos kurz: Guardar os teus ficheiros em segurança, usar o teu espaço de trabalho, abrir vários diagramas e partilhá-los como imagem ou PDF. @@ -26181,7 +26185,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Diretamente no espaço de trabalho, sem subpasta > O VisuStruct cria automaticamente uma pasta com a data de cada dia. Assim os programas ficam ordenados por aula. ::: -`,ov=`--- +`,dv=`--- titel: Variáveis e tipos de dados bereich: Fundamentos kurz: Guardar valores, conhecer os tipos de dados int, double, String e boolean, e fazer contas. @@ -26577,7 +26581,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Double preco = 2.5 > Os números decimais escrevem-se com ponto, e no fim há um ponto e vírgula. ::: -`,lv=`--- +`,hv=`--- titel: Sequência bereich: Fundamentos kurz: Executar passos um a seguir ao outro, prestar atenção à ordem e trocar valores. @@ -26830,7 +26834,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Com dois pontos : > Se faltar o ponto e vírgula, o VisuStruct mostra uma indicação por baixo do código. ::: -`,uv=`--- +`,gv=`--- titel: Entrada e saída bereich: Fundamentos kurz: Pedir valores, mostrar resultados e usar o modelo EPS. @@ -27262,7 +27266,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Na próxima linha vazia > Por isso um comentário com \`/*\` pode ocupar várias linhas. Já um comentário com \`//\` termina no fim da linha. ::: -`,mv=`--- +`,pv=`--- titel: Simulação e teste de secretária bereich: Fundamentos kurz: Executar um estrutograma passo a passo, segui-lo à mão e encontrar erros. @@ -27626,7 +27630,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] Erro de lógica > Não há mensagem, mas o resultado está errado. Um erro destes só se encontra com o que esperas e com o teste de secretária. ::: -`,cv=`--- +`,fv=`--- titel: Decisão bereich: Fundamentos kurz: Usar uma condição para decidir qual de dois ramos é executado. @@ -27994,7 +27998,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Depois de um ponto e vírgula > \`if (idade >= 18) { … }\`: os parênteses curvos pertencem à condição, as chavetas ao ramo. ::: -`,dv=`--- +`,xv=`--- titel: Combinar condições bereich: Fundamentos kurz: Juntar várias condições com e, ou e não, e verificar intervalos de valores. @@ -28321,7 +28325,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] if (idade >= 12 || idade < 18) > Cada comparação fica sozinha, ligada com \`&&\`. ::: -`,hv=`--- +`,bv=`--- titel: Seleção bereich: Fundamentos kurz: Executar um de vários casos, consoante o valor de uma variável. @@ -28650,7 +28654,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] default - [ ] case 0 ::: -`,gv=`--- +`,vv=`--- titel: Ciclo while bereich: Fundamentos kurz: Repetir passos enquanto uma condição for verdadeira. @@ -29009,7 +29013,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] while (numero > 0); > A condição fica entre parênteses curvos, depois \`{\` abre o corpo. ::: -`,pv=`--- +`,yv=`--- titel: Ciclo do-while bereich: Fundamentos kurz: Primeiro executar, depois verificar: ciclos com pelo menos uma iteração. @@ -29287,7 +29291,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] } until (condicao); > Depois da condição vem um ponto e vírgula. ::: -`,fv=`--- +`,wv=`--- titel: Ciclo for bereich: Fundamentos kurz: Contar um número fixo de iterações com Início, Condição e Passo. @@ -29614,7 +29618,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] i é mostrado. > \`i++\` é a forma curta de \`i = i + 1\`. ::: -`,xv=`--- +`,zv=`--- titel: Encaixar bereich: Fundamentos kurz: Combinar decisões dentro de ciclos e ciclos dentro de ciclos. @@ -29912,7 +29916,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] Pelas chavetas e pela indentação - [ ] Pelos pontos e vírgulas ::: -`,bv=`--- +`,Iv=`--- titel: Arrays bereich: Fundamentos kurz: Guardar muitos valores com um só nome, chegar a eles com o índice e percorrê-los com um ciclo. @@ -30080,6 +30084,8 @@ for (int i = 0; i < numeros.length; i++) { - Um array vazio com 5 posições cria-se com \`new int[5]\`. - \`numeros[i]\` é a posição com o índice \`i\`, \`numeros.length\` é o comprimento. +Se mostrares o array inteiro, ou seja \`System.out.println(numeros);\`, o Java não mostra os números. Só vês um texto como \`[I@1b6d3586\`. É a **referência**, o sítio onde o array está guardado na memória. O conteúdo só aparece com \`Arrays.toString(numeros)\`, que dá \`[2, 4, 6, 8, 10]\`. Para isso escreves \`import java.util.Arrays;\` logo no início. + ::: übung l15-java-noten titel: Soma das notas em Java code: java @@ -30265,7 +30271,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] int numeros = [1, 2, 3]; - [ ] array numeros = (1, 2, 3); ::: -`,vv=`--- +`,kv=`--- titel: Arrays bidimensionais bereich: Fundamentos kurz: Guardar valores em linhas e colunas, como os lugares de um cinema, e percorrê-los com dois ciclos encaixados. @@ -30582,7 +30588,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] 5, o número de lugares - [ ] 15, todos os lugares juntos ::: -`,yv=`--- +`,Sv=`--- titel: Strings bereich: Fundamentos kurz: Trabalhar com texto: ler caracteres, recortar partes, pesquisar, comparar e dividir. @@ -31108,7 +31114,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] uma mensagem de erro > parseInt transforma o texto num número. Depois o Java faz a conta normalmente. ::: -`,wv=`--- +`,Tv=`--- titel: Chamada e interrupção bereich: Fundamentos kurz: Dividir tarefas grandes em subprogramas e sair mais cedo dos ciclos. @@ -31590,7 +31596,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] return > void significa “vazio”: o método faz alguma coisa, mas não devolve nenhum valor. ::: -`,zv=`--- +`,jv=`--- titel: Pesquisar e ordenar bereich: Fundamentos kurz: Perceber com cartas de jogar como funcionam a pesquisa linear, a pesquisa binária e o bubble sort, e porque é que alguns métodos são muito mais rápidos. @@ -31941,7 +31947,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Um ciclo while não consegue percorrer arrays. > A carta pode aparecer várias vezes. Por isso percorres todas as cartas até ao fim. ::: -`,Iv=`--- +`,_v=`--- titel: Estrutograma e código bereich: Do estrutograma ao código kurz: Todos os elementos em Java num relance, gerar código, escrever Java na área Código, executá-lo e procurar erros. @@ -32413,7 +32419,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] A linha 3 é a próxima a ser executada. > Um ponto de paragem é um ponto vermelho redondo, e a próxima linha está a amarelo. Um número de linha vermelho mostra um erro de sintaxe ou de execução. ::: -`,kv=`--- +`,Cv=`--- titel: Python e JavaScript bereich: Do estrutograma ao código kurz: Gerar código Python e JavaScript a partir do estrutograma e executar JavaScript diretamente no navegador. @@ -32653,7 +32659,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] É mostrado Soma:. > str(soma) transforma o número em texto. ::: -`,Sv=`--- +`,Av=`--- titel: Quando o programa falha: try e catch bereich: Apanhar erros kurz: Ler mensagens de erro com Java verdadeiro e apanhar falhas com try e catch. @@ -32946,7 +32952,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = ArithmeticException -> divisão por 0 = NumberFormatException -> o texto não é um número ::: -`,Tv=`--- +`,Pv=`--- titel: Ler e guardar texto bereich: Ficheiros kurz: Ler um ficheiro de texto linha a linha com Scanner e guardar um ficheiro com PrintWriter. @@ -33200,7 +33206,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = println(texto) -> escreve uma linha = close() -> fecha o ficheiro ::: -`,jv=`--- +`,Ov=`--- titel: Linha a linha com BufferedReader bereich: Ficheiros kurz: Ler com BufferedReader e readLine até chegar null, e ler um ficheiro inteiro de uma vez com Files. @@ -33456,7 +33462,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = Files.readString -> ficheiros pequenos de uma vez = Scanner -> ler números e palavras ::: -`,_v=`--- +`,Mv=`--- titel: Tabelas em CSV bereich: Ficheiros kurz: Ler uma tabela num ficheiro CSV, dividir cada linha com split e fazer contas com os números. @@ -33680,7 +33686,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = registo -> uma linha com valores = separador -> separa as colunas, muitas vezes ; ::: -`,Cv=`--- +`,Zv=`--- titel: Dados em JSON bereich: Ficheiros kurz: Perceber ficheiros JSON, tirar valores com indexOf e substring e escrever JSON tu mesmo. @@ -33905,7 +33911,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = [ ] -> uma lista = : -> separa a chave do valor ::: -`,Av=`--- +`,Dv=`--- titel: Comparar formatos bereich: Ficheiros kurz: Comparar os mesmos dados em txt, CSV e JSON, escolher o formato certo e converter um ficheiro noutro formato. @@ -34080,7 +34086,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = a pauta de notas da turma -> CSV = um jogo guardado com listas -> JSON ::: -`,Pv=`--- +`,Bv=`--- titel: A tua primeira janela bereich: Janelas com Swing kurz: Abrir uma janela tua com Java e Swing, explicado linha a linha. @@ -34302,7 +34308,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Estão entre chavetas. - [ ] Terminam em Window. ::: -`,Ov=`--- +`,Lv=`--- titel: Um botão na janela bereich: Janelas com Swing kurz: Pôr um botão na janela e arrumá-lo bem com um layout. @@ -34518,7 +34524,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] No botão aparece “Fui clicado”. > O que deve acontecer com um clique aprendes na próxima lição. ::: -`,Mv=`--- +`,Wv=`--- titel: O botão reage bereich: Janelas com Swing kurz: Com um ActionListener decides o que acontece com um clique. @@ -34860,7 +34866,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = setText -> mudar o texto = setVisible(true) -> mostrar a janela ::: -`,Zv=`--- +`,Ev=`--- titel: Duplicar um número na janela bereich: Janelas com Swing kurz: Arrumar uma etiqueta, um campo de texto e um botão com um GridLayout e calcular com o texto do campo de texto. @@ -35141,7 +35147,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = JButton -> botão = GridLayout -> arrumação em grelha ::: -`,Dv=`--- +`,Nv=`--- titel: Contador de cliques com reset bereich: Janelas com Swing kurz: Dois botões alteram o mesmo número: criar uma variável para a classe toda. @@ -35373,7 +35379,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Põe a janela no meio do ecrã. - [ ] Aumenta a letra. ::: -`,Bv=`--- +`,Jv=`--- titel: Um semáforo com cores bereich: Janelas com Swing kurz: Definir cores de fundo e mudar um semáforo com uma variável de estado. @@ -35649,7 +35655,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] 3 > Depois de fase++ é 3, que é maior do que 2, por isso passa a 0. ::: -`,Lv=`--- +`,Fv=`--- titel: Calculadora de notas na janela bereich: Janelas com Swing kurz: Escrever a percentagem, determinar o nível com else if e apanhar entradas erradas. @@ -35920,7 +35926,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] percentagem >= 0 || percentagem <= 100 > Um número não pode ser ao mesmo tempo menor do que 0 e maior do que 100, por isso é preciso o ou. ::: -`,Wv=`--- +`,Rv=`--- titel: Uma calculadora bereich: Janelas com Swing kurz: Duas colunas com GridLayout, quatro botões de cálculo e apanhar a divisão por 0. @@ -36191,7 +36197,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Coluna a coluna, começando de cima para baixo na coluna da esquerda - [ ] Ao acaso ::: -`,Ev=`--- +`,Gv=`--- titel: Adivinha o número bereich: Janelas com Swing kurz: Um jogo com número aleatório, contagem de tentativas e um botão que se desliga no fim. @@ -36347,7 +36353,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] 7 > Cada palpite corta o intervalo a meio, e 2 elevado a 7 = 128 é maior do que 100. ::: -`,Nv=`--- +`,Hv=`--- titel: Muitos botões, um ouvinte bereich: Janelas com Swing kurz: Um ouvinte para muitos botões e descobrir com getActionCommand e getSource qual foi o botão clicado. @@ -36651,7 +36657,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = ActionEvent -> o evento e com a informação sobre o clique = JPanel -> uma área com o seu próprio layout ::: -`,Jv=`--- +`,Vv=`--- titel: Classes internas bereich: Janelas com Swing kurz: Escrever um ouvinte como classe interna com nome, como classe anónima e como lambda, e saber quem vê o quê. @@ -36883,7 +36889,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = new ActionListener() { … } -> classe anónima = a seta depois de e -> lambda ::: -`,Fv=`--- +`,Qv=`--- titel: Dois separadores bereich: Janelas com Swing kurz: Construir uma janela com dois separadores, levar dados de um separador para o outro e guardar a lista num ficheiro de texto. @@ -37164,7 +37170,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = JPanel -> a área de um separador = JTextArea -> uma área de texto com várias linhas ::: -`,Rv=`--- +`,qv=`--- titel: Model View Controller bereich: Janelas com Swing kurz: Dividir o contador de cliques em model, view e controller e perceber quem fala com quem. @@ -37579,7 +37585,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = VistaNumero com atualizar(int valor) -> view = o ouvinte do botão -> controller ::: -`,Gv=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua +`,Uv=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua explicação ao passar o rato ou ao tocar. Se estiver a negrito nesse passo, é explicado ali mesmo e não é marcado. \`auch:\` indica outras formas que também são reconhecidas. Maiúsculas e minúsculas contam. @@ -37837,7 +37843,7 @@ Instruções em forma de números que o processador executa diretamente. Cada ti ### compilador JIT auch: JIT Uma parte da JVM que, durante a execução (“just in time”), traduz o bytecode muito usado em código máquina. Assim o Java fica mais rápido. -`,Hv=`## Elementos básicos +`,Yv=`## Elementos básicos ### Instrução @@ -38006,7 +38012,7 @@ for (int i = 1; i <= 10; i++) { \`\`\` Serve para: a tarefa, dividir o código em entrada, processamento e saída, uma explicação, o fim de um bloco depois de \`}\`, a saída esperada e notas para a próxima vez. -`,Vv=`--- +`,$v=`--- titel: Alter im Unterprogramm nach: 18 stufe: 2 @@ -38027,7 +38033,7 @@ tipp: Öffne die Übung im Editor und baue dort das Hauptprogramm mit dem Aufruf lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,Qv=`--- +`,Xv=`--- titel: Ballwurf auswerten nach: 25 stufe: 2 @@ -38056,7 +38062,7 @@ tipp: Du brauchst vier Variablen vor der Schleife: die Anzahl, die Summe als \`d tipp: In der Schleife: \`String[] teile = zeile.split(";");\` und \`int weite = Integer.parseInt(teile[1]);\`. Ist \`weite > besteWeite\`, merkst du dir Weite und Namen. Zum Speichern: \`PrintWriter aus = new PrintWriter("sieger.txt");\`, \`aus.println(…)\` und \`aus.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,qv=`--- +`,Kv=`--- titel: Bestenliste nach: 19 stufe: 2 @@ -38090,7 +38096,7 @@ tipp: Lies jede Zahl erst in eine Variable ein und schreibe sie dann ins Array: tipp: Der Tausch braucht auch in Java eine Hilfsvariable: \`int hilf = punkte[i]; punkte[i] = punkte[i + 1]; punkte[i + 1] = hilf;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,Uv=`--- +`,ey=`--- titel: Binärzahl nach: 11 stufe: 3 @@ -38132,7 +38138,7 @@ tipp: Fang mit \`String binaer = "";\` an. Die Schleife läuft mit \`while (zahl tipp: Im Rumpf: \`int rest = zahl % 2;\`, dann \`binaer = rest + binaer;\` und \`zahl = zahl / 2;\`. Weil \`binaer\` ein String ist, hängt \`+\` den Rest vorne an. lösung: aufgabe-binaer-loesung.visustruct ::: -`,Yv=`--- +`,ty=`--- titel: Caesar-Verschlüsselung nach: 17 stufe: 3 @@ -38266,7 +38272,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Sicher ist Caesar leider nicht. Es gibt nur 25 Schlüssel, die kann man in ein paar Minuten alle ausprobieren. Noch schneller geht es mit einem Trick: Im Deutschen ist E der häufigste Buchstabe. Kommt im Geheimtext H am häufigsten vor, war der Schlüssel wohl 3. Im Internet gibt es übrigens ROT13, das ist Caesar mit dem Schlüssel 13. Zweimal ROT13 ergibt wieder den Klartext, weil 13 + 13 = 26. ::: -`,$v=`--- +`,ny=`--- titel: Collatz-Folge nach: 11 stufe: 2 @@ -38310,7 +38316,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen Mit dieser Aufgabe kann man reich werden! Der Mathematiker Paul Erdős setzte für einen Beweis 500 Dollar aus. 2021 legte die japanische Firma Bakuage noch einiges drauf: 120 Millionen Yen, damals umgerechnet rund eine Million Dollar, für einen Beweis oder ein Gegenbeispiel. Abgeholt hat das Geld bis heute niemand. Erfunden hat das Rätsel übrigens der deutsche Mathematiker Lothar Collatz im Jahr 1937. Ich rechne gleich mal los, für so viel Geld gibt es eine Menge Heu. ::: -`,Xv=`--- +`,iy=`--- titel: Einheitenrechner nach: 35 stufe: 2 @@ -38359,7 +38365,7 @@ Zusatz: Ein vierter Knopf **in Fuß** rechnet in die englische Einheit um. Ein F ::: ludwig Tick im [Zahnrad](#zeige-einstellungen) **Echtes Java (mit Swing)** an. Für „abc“ im Feld brauchst du in jedem Zuhörer ein try/catch mit \`NumberFormatException\`, wie beim Taschenrechner. ::: -`,Kv=`--- +`,ay=`--- titel: Fibonacci-Zahlen nach: 13 stufe: 2 @@ -38413,7 +38419,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] Die Reihenfolge ist egal > Andersherum hätten zahl1 und zahl2 danach denselben Wert. Wie beim Tauschen gilt: Erst retten, dann überschreiben. ::: -`,ey=`--- +`,sy=`--- titel: Gerade oder ungerade nach: 8 stufe: 1 @@ -38449,7 +38455,7 @@ tipp: Eine Zahl liest du mit \`int zahl = scanner.nextInt();\` ein. Vorher frags tipp: \`if (zahl % 2 == 0) { … } else { … }\`. Die Ausgabe ist \`System.out.println(zahl + " ist gerade");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,ty=`--- +`,ry=`--- titel: Mehrwertsteuer nach: 6 stufe: 1 @@ -38490,7 +38496,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Weil man Kommazahlen nur als Konstante speichern kann > Eine Konstante behält ihren Wert. Ändert sich der Steuersatz einmal, passt du nur die eine Zeile mit \`const\` an. ::: -`,ny=`--- +`,oy=`--- titel: Notendurchschnitt nach: 13 stufe: 2 @@ -38525,7 +38531,7 @@ tipp: \`for (int i = 0; i < anzahl; i++)\` liest genau so viele Noten ein, wie v tipp: Teile mit \`double schnitt = summe * 1.0 / anzahl;\`. Ohne \`* 1.0\` teilt Java zwei \`int\` ganzzahlig, und aus 1.5 wird 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,iy=`--- +`,ly=`--- titel: PIN prüfen nach: 12 stufe: 2 @@ -38565,7 +38571,7 @@ tipp: \`do { … } while (…);\` fragt mindestens einmal. Hinter \`while (…)\ tipp: Lege vorher \`int pin = 0;\` und \`int versuche = 0;\` an. In der Schleife: \`int eingabe = scanner.nextInt();\`, \`pin = eingabe;\` und \`versuche++;\`. Die Bedingung ist \`pin != 1234 && versuche < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,ay=`--- +`,uy=`--- titel: Schiffe versenken nach: 16 stufe: 2 @@ -38602,7 +38608,7 @@ tipp: Zwei \`for\`-Schleifen ineinander: außen die Reihe, innen die Spalte, bei tipp: \`if (meer[reihe][spalte]) { System.out.println(spalten[spalte] + (reihe + 1)); }\`. Die Klammer um \`reihe + 1\` sorgt dafür, dass Java erst rechnet. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,sy=`--- +`,my=`--- titel: Speisekarte nach: 10 stufe: 1 @@ -38638,7 +38644,7 @@ tipp: In Java ist das eine Fallauswahl mit \`switch (nummer) { … }\`. tipp: Jeder Fall sieht so aus: \`case 1 -> { System.out.println("…"); }\`. Für alle anderen Nummern gibt es \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,ry=`--- +`,cy=`--- titel: Summe bilden nach: 2 stufe: 1 @@ -38654,7 +38660,7 @@ tipp: Du brauchst drei Variablen: zwei für die Zahlen und eine für das Ergebni tipp: Eine Variable legst du mit einer Anweisung wie \`int zahl1 = 4\` fest. Für die Ausgabe schreibst du den Namen der Variablen ohne Anführungszeichen. lösung: aufgabe-summe-loesung.visustruct ::: -`,oy=`--- +`,dy=`--- titel: Tafeldienst auslosen nach: 15 stufe: 2 @@ -38691,7 +38697,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > Mit \`int nummer = (int) (Math.random() * 5) + 1\` kannst du die Losnummer auch vom Zufall ziehen lassen. Für die automatische Prüfung brauchen wir aber eine feste Eingabe. -`,ly=`--- +`,hy=`--- titel: Taschenrechner nach: 10 stufe: 2 @@ -38727,7 +38733,7 @@ tipp: Das Rechenzeichen ist ein Text. Du liest es mit \`String zeichen = scanner tipp: \`switch (zeichen) { case "+" -> { … } … default -> { … } }\`. Bei Texten stehen die Fälle in Anführungszeichen. lösung: aufgabe-rechner-loesung.visustruct ::: -`,uy=`--- +`,gy=`--- titel: Verleih-Menü nach: 18 stufe: 2 @@ -38762,7 +38768,7 @@ tipp: \`while (true) { … }\` läuft endlos, bis ein \`break;\` kommt. tipp: Nimm in Java hier \`if\`/\`else if\` statt \`switch\`: Ein \`break;\` in einem \`switch\` verlässt nur den \`switch\`, nicht die Schleife. \`if (wahl == 0) { System.out.println("Tschüss"); break; } else if (wahl == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,my=`--- +`,py=`--- titel: Vokabeltrainer nach: 27 stufe: 3 @@ -38797,7 +38803,7 @@ tipp: Überspringe die Kopfzeile. In der Schleife zerlegst du jede Zeile mit \`s tipp: Texte vergleichst du mit \`antwort.equals(teile[1])\`, nicht mit \`==\`. Zähle vor der Schleife mit \`int richtig = 0;\` und \`int anzahl = 0;\` mit. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,cy=`--- +`,fy=`--- titel: Volljährig? nach: 8 stufe: 1 @@ -38833,7 +38839,7 @@ tipp: Lies das Alter mit \`int alter = scanner.nextInt();\` ein. tipp: \`if (alter >= 18) { … } else { … }\`, in jedem Zweig ein \`System.out.println(…)\`. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,dy=`--- +`,xy=`--- titel: Würfeln mit MVC nach: 40 stufe: 3 @@ -38871,7 +38877,7 @@ Zusatz: Ein Knopf **Neues Spiel** setzt alles auf Anfang. Die Methode dafür geh ::: ludwig Denk an die Regel aus Lektion 40: Im Model steht kein einziges \`JLabel\`. Wenn du beim Würfeln die Schriftgröße änderst, gehört das in die View. ::: -`,hy=`--- +`,by=`--- titel: Zahl verdoppeln nach: 2 stufe: 1 @@ -38887,7 +38893,7 @@ tipp: Verdoppeln heißt: mal 2. Das Ergebnis speicherst du wieder in derselben V tipp: \`zahl = zahl * 2\` rechnet mit dem alten Wert und speichert das Ergebnis wieder in \`zahl\`. Text und Variable verbindest du mit \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,gy=`--- +`,vy=`--- titel: Age in a subprogram nach: 18 stufe: 2 @@ -38908,7 +38914,7 @@ tipp: Open the exercise in the editor and build the main program there with the lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,py=`--- +`,yy=`--- titel: Ball throw results nach: 25 stufe: 2 @@ -38937,7 +38943,7 @@ tipp: You need four variables before the loop: the count, the sum as a \`double\ tipp: In the loop: \`String[] parts = line.split(";");\` and \`int distance = Integer.parseInt(parts[1]);\`. If \`distance > bestDistance\`, remember the distance and the name. To save: \`PrintWriter out = new PrintWriter("winner.txt");\`, \`out.println(…)\` and \`out.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,fy=`--- +`,wy=`--- titel: Leaderboard nach: 19 stufe: 2 @@ -38971,7 +38977,7 @@ tipp: Read each number into a variable first and then put it into the array: \`i tipp: The swap needs a temporary variable in Java too: \`int temp = points[i]; points[i] = points[i + 1]; points[i + 1] = temp;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,xy=`--- +`,zy=`--- titel: Binary number nach: 11 stufe: 3 @@ -39013,7 +39019,7 @@ tipp: Start with \`String binary = "";\`. The loop runs with \`while (number > 0 tipp: In the body: \`int remainder = number % 2;\`, then \`binary = remainder + binary;\` and \`number = number / 2;\`. Because \`binary\` is a String, \`+\` puts the remainder at the front. lösung: aufgabe-binaer-loesung.visustruct ::: -`,by=`--- +`,Iy=`--- titel: Caesar cipher nach: 17 stufe: 3 @@ -39147,7 +39153,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Unfortunately, Caesar is not secure. There are only 25 keys, and you can try them all in a few minutes. It is even quicker with a trick: in English, E is the most common letter. If H is the most common letter in the secret text, the key was probably 3. On the internet there is also ROT13, which is Caesar with the key 13. Applying ROT13 twice gives you the plain text again, because 13 + 13 = 26. ::: -`,vy=`--- +`,ky=`--- titel: Collatz sequence nach: 11 stufe: 2 @@ -39191,7 +39197,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen This task could make you rich! The mathematician Paul Erdős offered 500 dollars for a proof. In 2021 the Japanese company Bakuage added quite a bit more: 120 million yen, about a million dollars at the time, for a proof or a counterexample. Nobody has collected the money yet. By the way, the puzzle was invented by the German mathematician Lothar Collatz in 1937. I am going to start calculating right now; that much money buys a lot of hay. ::: -`,yy=`--- +`,Sy=`--- titel: Unit converter nach: 35 stufe: 2 @@ -39240,7 +39246,7 @@ Extra: a fourth button **in feet** converts to the imperial unit. One foot is 0. ::: ludwig Tick **Real Java (with Swing)** in the [gear](#zeige-einstellungen). For "abc" in the field, every listener needs a try/catch with \`NumberFormatException\`, just like the calculator. ::: -`,wy=`--- +`,Ty=`--- titel: Fibonacci numbers nach: 13 stufe: 2 @@ -39294,7 +39300,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] The order does not matter > The other way round, number1 and number2 would have the same value afterwards. Just like swapping: first save, then overwrite. ::: -`,zy=`--- +`,jy=`--- titel: Even or odd nach: 8 stufe: 1 @@ -39330,7 +39336,7 @@ tipp: Read a number with \`int number = scanner.nextInt();\`. Ask with \`System. tipp: \`if (number % 2 == 0) { … } else { … }\`. The output is \`System.out.println(number + " is even");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,Iy=`--- +`,_y=`--- titel: Sales tax nach: 6 stufe: 1 @@ -39371,7 +39377,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Because decimal numbers can only be stored as constants > A constant keeps its value. If the tax rate ever changes, you only change the one line with \`const\`. ::: -`,ky=`--- +`,Cy=`--- titel: Grade average nach: 13 stufe: 2 @@ -39406,7 +39412,7 @@ tipp: \`for (int i = 0; i < count; i++)\` reads exactly as many grades as were g tipp: Divide with \`double average = sum * 1.0 / count;\`. Without \`* 1.0\`, Java divides two \`int\` values as whole numbers, and 1.5 becomes 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,Sy=`--- +`,Ay=`--- titel: Check the PIN nach: 12 stufe: 2 @@ -39446,7 +39452,7 @@ tipp: \`do { … } while (…);\` asks at least once. There is a semicolon after tipp: Create \`int pin = 0;\` and \`int attempts = 0;\` first. In the loop: \`int entered = scanner.nextInt();\`, \`pin = entered;\` and \`attempts++;\`. The condition is \`pin != 1234 && attempts < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,Ty=`--- +`,Py=`--- titel: Battleship nach: 16 stufe: 2 @@ -39483,7 +39489,7 @@ tipp: Two \`for\` loops inside each other: the row outside, the column inside, b tipp: \`if (sea[row][column]) { System.out.println(columns[column] + (row + 1)); }\`. The brackets around \`row + 1\` make Java calculate first. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,jy=`--- +`,Oy=`--- titel: Menu nach: 10 stufe: 1 @@ -39519,7 +39525,7 @@ tipp: In Java this is a switch: \`switch (pick) { … }\`. tipp: Every case looks like this: \`case 1 -> { System.out.println("…"); }\`. All other numbers go to \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,_y=`--- +`,My=`--- titel: Add up nach: 2 stufe: 1 @@ -39535,7 +39541,7 @@ tipp: You need three variables: two for the numbers and one for the result. tipp: You set a variable with a statement such as \`int number1 = 4\`. For the output you write the name of the variable without quotation marks. lösung: aufgabe-summe-loesung.visustruct ::: -`,Cy=`--- +`,Zy=`--- titel: Draw for board duty nach: 15 stufe: 2 @@ -39572,7 +39578,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > With \`int pick = (int) (Math.random() * 5) + 1\` you can also let chance draw the number. But for the automatic check we need a fixed input. -`,Ay=`--- +`,Dy=`--- titel: Calculator nach: 10 stufe: 2 @@ -39608,7 +39614,7 @@ tipp: The operator is a text. Read it with \`String operator = scanner.next();\` tipp: \`switch (operator) { case "+" -> { … } … default -> { … } }\`. With texts, the cases are in quotation marks. lösung: aufgabe-rechner-loesung.visustruct ::: -`,Py=`--- +`,By=`--- titel: Rental menu nach: 18 stufe: 2 @@ -39643,7 +39649,7 @@ tipp: \`while (true) { … }\` runs forever until a \`break;\` comes. tipp: In Java, use \`if\`/\`else if\` here instead of \`switch\`: a \`break;\` inside a \`switch\` only leaves the \`switch\`, not the loop. \`if (choice == 0) { System.out.println("Bye"); break; } else if (choice == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,Oy=`--- +`,Ly=`--- titel: Vocabulary trainer nach: 27 stufe: 3 @@ -39678,7 +39684,7 @@ tipp: Skip the header line. In the loop, split every line with \`split(";")\`: \ tipp: Compare texts with \`answer.equals(parts[1])\`, not with \`==\`. Count along with \`int right = 0;\` and \`int count = 0;\` before the loop. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,My=`--- +`,Wy=`--- titel: Adult? nach: 8 stufe: 1 @@ -39714,7 +39720,7 @@ tipp: Read the age with \`int age = scanner.nextInt();\`. tipp: \`if (age >= 18) { … } else { … }\`, with a \`System.out.println(…)\` in each branch. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,Zy=`--- +`,Ey=`--- titel: Rolling dice with MVC nach: 40 stufe: 3 @@ -39752,7 +39758,7 @@ Extra: a button **New game** resets everything. The method for that belongs in t ::: ludwig Remember the rule from lesson 40: there isn't a single \`JLabel\` in the model. If you change the font size when rolling, that belongs in the view. ::: -`,Dy=`--- +`,Ny=`--- titel: Double a number nach: 2 stufe: 1 @@ -39768,7 +39774,7 @@ tipp: Doubling means: times 2. You store the result in the same variable again. tipp: \`number = number * 2\` calculates with the old value and stores the result in \`number\` again. You join text and a variable with \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,By=`--- +`,Jy=`--- titel: Idade num subprograma nach: 18 stufe: 2 @@ -39789,7 +39795,7 @@ tipp: Abre o exercício no editor e constrói lá o programa principal com a cha lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,Ly=`--- +`,Fy=`--- titel: Avaliar o lançamento da bola nach: 25 stufe: 2 @@ -39818,7 +39824,7 @@ tipp: Precisas de quatro variáveis antes do ciclo: a contagem, a soma como \`do tipp: No ciclo: \`String[] partes = linha.split(";");\` e \`int distancia = Integer.parseInt(partes[1]);\`. Se \`distancia > melhorDistancia\`, guarda a distância e o nome. Para guardar: \`PrintWriter saida = new PrintWriter("vencedor.txt");\`, \`saida.println(…)\` e \`saida.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,Wy=`--- +`,Ry=`--- titel: Classificação nach: 19 stufe: 2 @@ -39852,7 +39858,7 @@ tipp: Lê cada número primeiro para uma variável e depois põe-no no array: \` tipp: A troca também precisa de uma variável auxiliar em Java: \`int aux = pontos[i]; pontos[i] = pontos[i + 1]; pontos[i + 1] = aux;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,Ey=`--- +`,Gy=`--- titel: Número binário nach: 11 stufe: 3 @@ -39894,7 +39900,7 @@ tipp: Começa com \`String binario = "";\`. O ciclo corre com \`while (numero > tipp: No corpo: \`int resto = numero % 2;\`, depois \`binario = resto + binario;\` e \`numero = numero / 2;\`. Como \`binario\` é uma String, o \`+\` põe o resto à frente. lösung: aufgabe-binaer-loesung.visustruct ::: -`,Ny=`--- +`,Hy=`--- titel: Cifra de César nach: 17 stufe: 3 @@ -40028,7 +40034,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Infelizmente, a cifra de César não é segura. Há apenas 25 chaves, e é possível experimentá-las todas em poucos minutos. Com um truque é ainda mais rápido: em português, as letras mais frequentes são o A e o E. Se no texto cifrado o H aparecer muitas vezes, a chave foi provavelmente 3. Na internet existe ainda o ROT13, que é a cifra de César com a chave 13. Aplicar ROT13 duas vezes devolve o texto simples, porque 13 + 13 = 26. ::: -`,Jy=`--- +`,Vy=`--- titel: Sequência de Collatz nach: 11 stufe: 2 @@ -40072,7 +40078,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen Esta tarefa pode tornar-te rico! O matemático Paul Erdős ofereceu 500 dólares por uma demonstração. Em 2021, a empresa japonesa Bakuage juntou bastante mais: 120 milhões de ienes, na altura cerca de um milhão de dólares, por uma demonstração ou um contraexemplo. Ainda ninguém foi buscar o dinheiro. Já agora, o enigma foi inventado pelo matemático alemão Lothar Collatz em 1937. Vou já começar a fazer contas; com tanto dinheiro compra-se muito feno. ::: -`,Fy=`--- +`,Qy=`--- titel: Conversor de unidades nach: 35 stufe: 2 @@ -40121,7 +40127,7 @@ Extra: um quarto botão **em pés** converte para a unidade inglesa. Um pé são ::: ludwig Marca **Java verdadeiro (com Swing)** na [roda dentada](#zeige-einstellungen). Para "abc" no campo, cada ouvinte precisa de um try/catch com \`NumberFormatException\`, tal como na calculadora. ::: -`,Ry=`--- +`,qy=`--- titel: Números de Fibonacci nach: 13 stufe: 2 @@ -40175,7 +40181,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] A ordem não importa > Ao contrário, numero1 e numero2 ficariam depois com o mesmo valor. Tal como na troca: primeiro guardar, depois substituir. ::: -`,Gy=`--- +`,Uy=`--- titel: Par ou ímpar nach: 8 stufe: 1 @@ -40211,7 +40217,7 @@ tipp: Lês um número com \`int numero = scanner.nextInt();\`. Antes disso pergu tipp: \`if (numero % 2 == 0) { … } else { … }\`. A saída é \`System.out.println(numero + " é par");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,Hy=`--- +`,Yy=`--- titel: IVA nach: 6 stufe: 1 @@ -40252,7 +40258,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Porque os números decimais só podem ser guardados como constantes > Uma constante mantém o seu valor. Se a taxa alguma vez mudar, só alteras a linha com \`const\`. ::: -`,Vy=`--- +`,$y=`--- titel: Média das notas nach: 13 stufe: 2 @@ -40287,7 +40293,7 @@ tipp: \`for (int i = 0; i < quantidade; i++)\` lê exatamente as notas que foram tipp: Divide com \`double media = soma * 1.0 / quantidade;\`. Sem \`* 1.0\`, o Java divide dois \`int\` como inteiros, e 1.5 passa a 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,Qy=`--- +`,Xy=`--- titel: Verificar o PIN nach: 12 stufe: 2 @@ -40327,7 +40333,7 @@ tipp: \`do { … } while (…);\` pergunta pelo menos uma vez. Depois do \`while tipp: Cria antes \`int pin = 0;\` e \`int tentativas = 0;\`. No ciclo: \`int entrada = scanner.nextInt();\`, \`pin = entrada;\` e \`tentativas++;\`. A condição é \`pin != 1234 && tentativas < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,qy=`--- +`,Ky=`--- titel: Batalha naval nach: 16 stufe: 2 @@ -40364,7 +40370,7 @@ tipp: Dois ciclos \`for\` um dentro do outro: fora a fila, dentro a coluna, ambo tipp: \`if (mar[fila][coluna]) { System.out.println(colunas[coluna] + (fila + 1)); }\`. Os parênteses à volta de \`fila + 1\` fazem o Java calcular primeiro. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,Uy=`--- +`,e9=`--- titel: Ementa nach: 10 stufe: 1 @@ -40400,7 +40406,7 @@ tipp: Em Java isto é uma seleção com \`switch (prato) { … }\`. tipp: Cada caso é assim: \`case 1 -> { System.out.println("…"); }\`. Para todos os outros números há \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,Yy=`--- +`,t9=`--- titel: Somar nach: 2 stufe: 1 @@ -40416,7 +40422,7 @@ tipp: Precisas de três variáveis: duas para os números e uma para o resultado tipp: Defines uma variável com uma instrução como \`int numero1 = 4\`. Na saída escreves o nome da variável sem aspas. lösung: aufgabe-summe-loesung.visustruct ::: -`,$y=`--- +`,n9=`--- titel: Sortear quem limpa o quadro nach: 15 stufe: 2 @@ -40453,7 +40459,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > Com \`int sorteado = (int) (Math.random() * 5) + 1\` também podes deixar o acaso sortear o número. Mas para a verificação automática precisamos de uma entrada fixa. -`,Xy=`--- +`,i9=`--- titel: Calculadora nach: 10 stufe: 2 @@ -40489,7 +40495,7 @@ tipp: O operador é um texto. Lês com \`String operador = scanner.next();\`. tipp: \`switch (operador) { case "+" -> { … } … default -> { … } }\`. Com textos, os casos ficam entre aspas. lösung: aufgabe-rechner-loesung.visustruct ::: -`,Ky=`--- +`,a9=`--- titel: Menu de aluguer nach: 18 stufe: 2 @@ -40524,7 +40530,7 @@ tipp: \`while (true) { … }\` corre sem fim até aparecer um \`break;\`. tipp: Em Java usa aqui \`if\`/\`else if\` em vez de \`switch\`: um \`break;\` dentro de um \`switch\` só sai do \`switch\`, não do ciclo. \`if (escolha == 0) { System.out.println("Adeus"); break; } else if (escolha == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,e9=`--- +`,s9=`--- titel: Treino de vocabulário nach: 27 stufe: 3 @@ -40559,7 +40565,7 @@ tipp: Salta a linha de cabeçalho. No ciclo, divide cada linha com \`split(";")\ tipp: Os textos comparam-se com \`resposta.equals(partes[1])\`, não com \`==\`. Conta com \`int certas = 0;\` e \`int contagem = 0;\` antes do ciclo. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,t9=`--- +`,r9=`--- titel: Maior de idade? nach: 8 stufe: 1 @@ -40595,7 +40601,7 @@ tipp: Lê a idade com \`int idade = scanner.nextInt();\`. tipp: \`if (idade >= 18) { … } else { … }\`, com um \`System.out.println(…)\` em cada ramo. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,n9=`--- +`,o9=`--- titel: Lançar o dado com MVC nach: 40 stufe: 3 @@ -40633,7 +40639,7 @@ Extra: um botão **Novo jogo** põe tudo no início. O método para isso pertenc ::: ludwig Lembra-te da regra da lição 40: no model não há um único \`JLabel\`. Se mudares o tamanho da letra ao lançar, isso pertence à view. ::: -`,i9=`--- +`,l9=`--- titel: Duplicar um número nach: 2 stufe: 1 @@ -40649,7 +40655,7 @@ tipp: Duplicar quer dizer: vezes 2. Guardas o resultado outra vez na mesma vari tipp: \`numero = numero * 2\` calcula com o valor antigo e volta a guardar o resultado em \`numero\`. Juntas texto e uma variável com \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,a9=`--- +`,u9=`--- titel: Der mBot2 bereich: VisuBot kurz: Lerne den Roboter kennen, den du gleich programmierst. @@ -40981,7 +40987,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann den echten mBot2 per USB-C verbinden und wieder trennen. → Den echten mBot2 verbinden - Ich kann prüfen, ob alle Sensoren und Aktoren funktionieren. → Den mBot2 testen ::: -`,s9=`--- +`,m9=`--- titel: Das Quadrat bereich: VisuBot kurz: Vom langen Struktogramm zur dreifach verschachtelten Schleife. @@ -41118,7 +41124,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann drei Schleifen ineinander schachteln. → Vier Quadrate - Ich kann mein Programm auf den mBot2 übertragen und ohne Kabel mit Taste A starten. → Ohne Kabel fahren ::: -`,r9='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Diese Kompetenzen erwerbe ich jetzt\n\n::: kompetenzen\n- eine Variable anlegen und benutzen\n- die Datentypen `int`, `double`, `String` und `boolean` unterscheiden\n- mit zwei Variablen ein Rechteck in Java fahren\n- mit `System.out.println` etwas ausgeben\n:::\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n→ Eine Variable für die Seite\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n→ Welche Datentypen gibt es?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n→ Jetzt ohne Roboter: Ausgabe\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\nSchätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt.\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kann die Datentypen `int`, `double`, `String` und `boolean` unterscheiden. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',o9=`--- +`,c9='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Diese Kompetenzen erwerbe ich jetzt\n\n::: kompetenzen\n- eine Variable anlegen und benutzen\n- die Datentypen `int`, `double`, `String` und `boolean` unterscheiden\n- mit zwei Variablen ein Rechteck in Java fahren\n- mit `System.out.println` etwas ausgeben\n:::\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n→ Eine Variable für die Seite\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n→ Welche Datentypen gibt es?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n→ Jetzt ohne Roboter: Ausgabe\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\nSchätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt.\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kann die Datentypen `int`, `double`, `String` und `boolean` unterscheiden. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',d9=`--- titel: Sensoren abfragen bereich: VisuBot kurz: Der mBot2 misst etwas, und dein Programm entscheidet. @@ -41199,7 +41205,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann den Unterschied zwischen Befehl und Sensor erklären. → Befehle und Sensoren - Ich kann einen Sensor in eine Bedingung einbauen. → Wand vorn? ::: -`,l9=`--- +`,h9=`--- titel: Bis zur Wand bereich: VisuBot kurz: Der mBot2 misst den Abstand und hält rechtzeitig an. @@ -41286,7 +41292,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann entscheiden, wann ich eine While-Schleife statt einer For-Schleife nehme. → Drei Welten, ein Programm - Ich kann mit dem Liniensensor ein Ziel finden. → Bis zum Ziel ::: -`,u9=`--- +`,g9=`--- titel: Der Ultraschallsensor bereich: VisuBot kurz: Abstand messen, Abstand halten und das Ganze in Java. @@ -41384,7 +41390,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann zwei Verzweigungen ineinander bauen. → Abstand halten im Struktogramm - Ich kann eine While-Schleife mit dem Abstand in Java schreiben. → Jetzt in Java ::: -`,m9=`--- +`,p9=`--- titel: Der Liniensensor bereich: VisuBot kurz: Dunkle Linien auf dem Boden erkennen und nicht vom Tisch fallen. @@ -41478,7 +41484,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann bis zu einer Linie fahren. → Am Rand umkehren im Struktogramm - Ich kann in Java mit einer Variable Schritte zählen. → Jetzt in Java: hin und zurück ::: -`,c9=`--- +`,f9=`--- titel: Farben erkennen bereich: VisuBot kurz: Der Quad-RGB-Sensor sagt, auf welcher Farbe der mBot2 steht. @@ -41568,7 +41574,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann mit \`!\` eine Bedingung umdrehen. → Fahre bis Rot im Struktogramm - Ich kann eine Verzweigung in eine Schleife schreiben. → Jetzt in Java: bei Grün piepen ::: -`,d9=`--- +`,x9=`--- titel: Fallauswahl mit Farben bereich: VisuBot kurz: Je nach Farbe oder Linie etwas anderes tun, mit einer Fallauswahl statt vieler Verzweigungen. @@ -41690,7 +41696,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine Fallauswahl mit Zahlen in Java schreiben. → Jetzt in Java: Linienmuster - Ich kann eine Zahl einlesen und je nach Wert etwas ausgeben. → Jetzt ohne Roboter: Noten in Worten ::: -`,h9=`--- +`,b9=`--- titel: Tasten und Joystick bereich: VisuBot kurz: Der mBot2 wartet auf dich und lässt sich fernsteuern. @@ -41779,7 +41785,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann auf eine Taste warten. → Warten auf Taste A im Struktogramm - Ich kann den mBot2 mit dem Joystick steuern. → Jetzt in Java: Fernsteuerung ::: -`,g9=`--- +`,v9=`--- titel: Der Lichtsensor bereich: VisuBot kurz: Hell oder dunkel? Der mBot2 wird zum Nachtlicht. @@ -41859,7 +41865,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann mit einer Verzweigung die LEDs schalten. → Nachtlicht im Struktogramm - Ich kann mehrere Befehle in einen Zweig schreiben. → Jetzt in Java: Nachtlicht mit Ton ::: -`,p9=`--- +`,y9=`--- titel: Das Mikrofon bereich: VisuBot kurz: Klatschen zum Losfahren und eine Lärmampel für das Klassenzimmer. @@ -41936,7 +41942,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann warten, bis etwas passiert. → Klatschen zum Losfahren im Struktogramm - Ich kann eine Lärmampel in Java schreiben. → Jetzt in Java: Lärmampel ::: -`,f9=`--- +`,w9=`--- titel: Der Lagesensor bereich: VisuBot kurz: Neigung messen und Schütteln erkennen. @@ -42022,7 +42028,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann zwei Bedingungen mit „oder“ verbinden. → Schräglage-Warnung im Struktogramm - Ich kann mehrere Bedingungen mit „und“ verbinden. → Jetzt in Java: Wasserwaage ::: -`,x9=`--- +`,z9=`--- titel: Die LEDs bereich: VisuBot kurz: Farben mischen, eine Ampel bauen und blinken lassen. @@ -42109,7 +42115,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Farben mit Pausen nacheinander zeigen. → Ampel im Struktogramm - Ich kann die LEDs in Java blinken lassen. → Jetzt in Java: Blaulicht ::: -`,b9=`--- +`,I9=`--- titel: Einzelne LEDs bereich: VisuBot kurz: Jede der fünf LEDs bekommt ihre eigene Farbe, bis zum Lauflicht. @@ -42196,7 +42202,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann einzelne LEDs in verschiedenen Farben leuchten lassen. → Drei Lichter im Struktogramm - Ich kann mit einer Schleife ein Lauflicht bauen. → Jetzt in Java: Lauflicht ::: -`,v9=`--- +`,k9=`--- titel: Der Lautsprecher bereich: VisuBot kurz: Töne, eine Tonleiter und eine Sirene. @@ -42300,7 +42306,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann in Java mit der Zählvariable rechnen. → Jetzt in Java: immer höher - Ich kann den mBot2 ein Gefühl zeigen lassen. → Gefühle zeigen ::: -`,y9=`--- +`,S9=`--- titel: Arrays und Melodien bereich: VisuBot kurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten. @@ -42399,7 +42405,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen - Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten ::: -`,w9=`--- +`,T9=`--- titel: Der Bildschirm bereich: VisuBot kurz: Text, Zahlen und Messwerte auf dem CyberPi anzeigen. @@ -42487,7 +42493,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Zahlen und Messwerte anzeigen. → Zahlen und Messwerte - Ich kann einen Countdown in Java schreiben. → Jetzt in Java: Countdown ::: -`,z9=`--- +`,j9=`--- titel: Zeichenketten bereich: VisuBot kurz: Mit Texten rechnen, Buchstaben herausholen und auf dem Bildschirm zeigen. @@ -42581,7 +42587,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Texte und Zahlen mit \`+\` verbinden. → Jetzt in Java: Text und Länge - Ich kann mit \`charAt(…)\` einzelne Zeichen holen. → Jetzt ohne Roboter: rückwärts lesen ::: -`,I9=`--- +`,_9=`--- titel: Motoren und Geschwindigkeit bereich: VisuBot kurz: Gas geben, lenken und einer Linie folgen. @@ -42683,7 +42689,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann fahren, bis ein Sensor etwas meldet. → Gas geben bis zur Wand im Struktogramm - Ich kann einen Linienfolger in Java schreiben. → Jetzt in Java: Linienfolger ::: -`,k9=`--- +`,C9=`--- titel: Stoppuhr und Akku bereich: VisuBot kurz: Zeit messen und den Akku im Blick behalten. @@ -42774,7 +42780,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine bestimmte Zeit lang fahren. → Zwei Sekunden fahren im Struktogramm - Ich kann den Akkustand anzeigen. → Jetzt in Java: Akku-Anzeige ::: -`,S9=`--- +`,A9=`--- titel: Eigene Methoden bereich: VisuBot kurz: Eigene Befehle mit Parametern und Rückgabewert schreiben und aufrufen. @@ -42876,7 +42882,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Methoden in Java erkennen. → Methoden in Java - Ich kann eine Methode mit Rückgabewert schreiben. → Jetzt ohne Roboter: Methode mit Rückgabe ::: -`,T9=`## 🤖 mBot2-Befehle +`,P9=`## 🤖 mBot2-Befehle Ein Befehl sagt dem mBot2, was er **tun** soll. Jeder Befehl beginnt mit \`mbot.\` und endet mit Klammern. In die Klammern schreibst du oft eine Zahl. @@ -43028,7 +43034,7 @@ Mit **🔌 mBot2** neben „Simulation starten“ verbindest du den echten Robot ### Ohne Kabel fahren Mit **⬆ Übertragen** speicherst du dein Programm fest auf dem mBot2. Danach Kabel ab, mBot2 an den Start und **Taste A** drücken: Er fährt dein Programm allein. Es bleibt gespeichert, bis du ein neues überträgst. Eingaben mit der Tastatur gehen am mBot2 nicht. -`,j9=`--- +`,O9=`--- titel: The mBot2 bereich: VisuBot kurz: Get to know the robot you are about to program. @@ -43360,7 +43366,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can connect the real mBot2 with USB-C and disconnect it again. → Connecting the real mBot2 - I can check that all sensors and actuators work. → Testing the mBot2 ::: -`,_9=`--- +`,M9=`--- titel: The square bereich: VisuBot kurz: From a long structure chart to a triple nested loop. @@ -43497,7 +43503,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can nest three loops. → Four squares - I can upload my program to the mBot2 and start it with button A without a cable. → Driving without a cable ::: -`,C9='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## Skills I will gain now\n\n::: kompetenzen\n- create and use a variable\n- tell the data types `int`, `double`, `String` and `boolean` apart\n- drive a rectangle in Java with two variables\n- print something with `System.out.println`\n:::\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n→ A variable for the side\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n→ Which data types are there?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n→ Now without the robot: output\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\nRate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right.\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I can tell the data types `int`, `double`, `String` and `boolean` apart. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',A9=`--- +`,Z9='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## Skills I will gain now\n\n::: kompetenzen\n- create and use a variable\n- tell the data types `int`, `double`, `String` and `boolean` apart\n- drive a rectangle in Java with two variables\n- print something with `System.out.println`\n:::\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n→ A variable for the side\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n→ Which data types are there?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n→ Now without the robot: output\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\nRate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right.\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I can tell the data types `int`, `double`, `String` and `boolean` apart. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',D9=`--- titel: Reading sensors bereich: VisuBot kurz: The mBot2 measures something, and your program decides. @@ -43578,7 +43584,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can explain the difference between a command and a sensor. → Commands and sensors - I can build a sensor into a condition. → Wall ahead? ::: -`,P9=`--- +`,B9=`--- titel: Up to the wall bereich: VisuBot kurz: The mBot2 measures the distance and stops in time. @@ -43665,7 +43671,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can decide when to use a while loop instead of a for loop. → Three worlds, one program - I can find a goal with the line sensor. → To the goal ::: -`,O9=`--- +`,L9=`--- titel: The ultrasonic sensor bereich: VisuBot kurz: Measure the distance, keep your distance, and do it all in Java. @@ -43763,7 +43769,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can put one branch inside another. → Keep your distance in the structure chart - I can write a while loop with the distance in Java. → Now in Java ::: -`,M9=`--- +`,W9=`--- titel: The line sensor bereich: VisuBot kurz: Detect dark lines on the floor and don't fall off the table. @@ -43857,7 +43863,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive up to a line. → Turn round at the edge in the structure chart - I can count steps with a variable in Java. → Now in Java: there and back ::: -`,Z9=`--- +`,E9=`--- titel: Recognising colours bereich: VisuBot kurz: The quad RGB sensor tells you which colour the mBot2 is standing on. @@ -43947,7 +43953,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can turn a condition round with \`!\`. → Drive to red in the structure chart - I can put a branch inside a loop. → Now in Java: beep on green ::: -`,D9=`--- +`,N9=`--- titel: Case selection with colours bereich: VisuBot kurz: Do something different for each colour or line, with one case selection instead of many branches. @@ -44069,7 +44075,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can write a case selection with numbers in Java. → Now in Java: line patterns - I can read a number and print something depending on its value. → Now without the robot: grades in words ::: -`,B9=`--- +`,J9=`--- titel: Buttons and joystick bereich: VisuBot kurz: The mBot2 waits for you and can be remote controlled. @@ -44158,7 +44164,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can wait for a button. → Waiting for button A in the structure chart - I can steer the mBot2 with the joystick. → Now in Java: remote control ::: -`,L9=`--- +`,F9=`--- titel: The light sensor bereich: VisuBot kurz: Bright or dark? The mBot2 becomes a night light. @@ -44238,7 +44244,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can switch the LEDs with a branch. → Night light in the structure chart - I can write several commands in one branch. → Now in Java: night light with sound ::: -`,W9=`--- +`,R9=`--- titel: The microphone bereich: VisuBot kurz: Clap to start, and a noise light for the classroom. @@ -44315,7 +44321,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can wait until something happens. → Clap to start in the structure chart - I can write a noise light in Java. → Now in Java: noise light ::: -`,E9=`--- +`,G9=`--- titel: The motion sensor bereich: VisuBot kurz: Measure tilt and detect shaking. @@ -44401,7 +44407,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can join two conditions with “or”. → Tilt warning in the structure chart - I can join several conditions with “and”. → Now in Java: spirit level ::: -`,N9=`--- +`,H9=`--- titel: The LEDs bereich: VisuBot kurz: Mix colours, build a traffic light and make it blink. @@ -44488,7 +44494,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can show colours one after the other with pauses. → Traffic light in the structure chart - I can make the LEDs blink in Java. → Now in Java: blue light ::: -`,J9=`--- +`,V9=`--- titel: Single LEDs bereich: VisuBot kurz: Each of the five LEDs gets its own colour, all the way to a running light. @@ -44575,7 +44581,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can make single LEDs light up in different colours. → Three lights in the structogram - I can build a running light with a loop. → Now in Java: running light ::: -`,F9=`--- +`,Q9=`--- titel: The speaker bereich: VisuBot kurz: Tones, a scale and a siren. @@ -44679,7 +44685,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can calculate with the counting variable in Java. → Now in Java: higher and higher - I can make the mBot2 show a feeling. → Showing feelings ::: -`,R9=`--- +`,q9=`--- titel: Arrays and melodies bereich: VisuBot kurz: Store many values in one array and work through them with a loop. @@ -44778,7 +44784,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can use an array of texts in Java. → Now in Java: rainbow - I can add up all values of an array. → Now without the robot: sum of the grades ::: -`,G9=`--- +`,U9=`--- titel: The screen bereich: VisuBot kurz: Show text, numbers and sensor values on the CyberPi. @@ -44866,7 +44872,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can show numbers and sensor values. → Numbers and sensor values - I can write a countdown in Java. → Now in Java: countdown ::: -`,H9=`--- +`,Y9=`--- titel: Strings bereich: VisuBot kurz: Work with texts, pick out letters and show them on the screen. @@ -44960,7 +44966,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can join texts and numbers with \`+\`. → Now in Java: text and length - I can get single characters with \`charAt(…)\`. → Now without the robot: read it backwards ::: -`,V9=`--- +`,$9=`--- titel: Motors and speed bereich: VisuBot kurz: Step on the gas, steer and follow a line. @@ -45062,7 +45068,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive until a sensor reports something. → Full speed to the wall in the structure chart - I can write a line follower in Java. → Now in Java: line follower ::: -`,Q9=`--- +`,X9=`--- titel: Stopwatch and battery bereich: VisuBot kurz: Measure time and keep an eye on the battery. @@ -45153,7 +45159,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive for a certain time. → Driving two seconds in the structure chart - I can show the battery level. → Now in Java: battery display ::: -`,q9=`--- +`,K9=`--- titel: Your own methods bereich: VisuBot kurz: Write and call your own commands with parameters and return values. @@ -45255,7 +45261,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can recognise methods in Java. → Methods in Java - I can write a method with a return value. → Now without the robot: a method with a return value ::: -`,U9=`## 🤖 mBot2 commands +`,ew=`## 🤖 mBot2 commands A command tells the mBot2 what to **do**. Every command starts with \`mbot.\` and ends with brackets. Often you write a number in the brackets. @@ -45407,7 +45413,7 @@ With **🔌 mBot2** next to "Start simulation" you connect the real robot with t ### Driving without a cable With **⬆ Upload** you save your program on the mBot2. Then unplug the cable, put the mBot2 at the start and press **button A**: it drives your program on its own. It stays saved until you upload a new one. Keyboard inputs do not work on the mBot2. -`,Y9=`--- +`,tw=`--- titel: Die Alarmanlage nach: 16 stufe: 2 @@ -45426,7 +45432,7 @@ tipp: Außen steht eine While-Schleife mit \`!mbot.isButtonB()\`. Darin eine Ver tipp: Die Bedingung der Verzweigung: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. Im Ja-Zweig \`mbot.setLed(255, 0, 0)\` und \`mbot.playTone(880, 200)\`, im Nein-Zweig \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,$9=`--- +`,nw=`--- titel: Labyrinth mit Ausgängen nach: 5 stufe: 3 @@ -45445,7 +45451,7 @@ tipp: In jedem Durchlauf dreht sich der mBot2 zuerst nach links und misst. Ist o tipp: Durch die Lücke sind es zwei Felder bis in den nächsten Gang. Danach soll er wieder nach rechts schauen. Ist oben eine Wand, dreht er sich zurück und fährt ein Feld weiter. lösung: vb-ausgang-loesung.visustruct ::: -`,X9=`--- +`,iw=`--- titel: Binär zählen nach: 15 stufe: 3 @@ -45470,7 +45476,7 @@ tipp: Ob LED 0 an ist, verrät der Rest beim Teilen durch 2: \`zahl % 2 == 1\`. tipp: In der Schleife stehen drei Verzweigungen und danach **kurz warten**. Im Ja-Zweig zum Beispiel \`mbot.led(0).setColor("grün")\`, im Nein-Zweig \`mbot.led(0).setColor("aus")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,K9=`--- +`,aw=`--- titel: Das Dreieck nach: 2 stufe: 1 @@ -45493,7 +45499,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen Die Idee, mit einem fahrenden Roboter Figuren zu zeichnen, ist über 50 Jahre alt: Ende der 1960er-Jahre entstand die Sprache **Logo**. Kinder steuerten damit eine „Schildkröte“, die mit einem Stift über das Papier fuhr. ::: -`,ew=`--- +`,sw=`--- titel: Rückwärts einparken nach: 16 stufe: 2 @@ -45513,7 +45519,7 @@ tipp: Zwei While-Schleifen hintereinander: erst \`!mbot.getColor().equals("blau" tipp: Am Ende: \`mbot.setLed(0, 255, 0)\` und \`mbot.showText("Geparkt!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,tw='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',nw=`--- +`,rw='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',ow=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -45530,7 +45536,7 @@ tipp: Die erste Schleife zählt \`i\` von 0 bis 4 hoch. Die zweite startet bei 3 tipp: In beiden Schleifen: \`mbot.led(i).setColor("rot")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("aus")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,iw=`--- +`,lw=`--- titel: Das Labyrinth nach: 5 stufe: 2 @@ -45555,7 +45561,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen Mit der Regel „Hand immer an der Wand“ findet man aus jedem Labyrinth, dessen Wände alle zusammenhängen. Schon die Griechen erzählten von Theseus, der sich im Labyrinth des Minotaurus mit einem Wollfaden half. ::: -`,aw='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',sw=`--- +`,uw='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',mw=`--- titel: Morsen nach: 15 stufe: 2 @@ -45572,7 +45578,7 @@ tipp: Drei For-Schleifen hintereinander, jede läuft dreimal. Dazwischen steht j tipp: In der ersten und dritten Schleife: \`mbot.led(2).setColor("weiß")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("aus")\`, \`mbot.pause(200)\`. In der mittleren wartet er nach dem Einschalten 600. lösung: vb-morsen-loesung.visustruct ::: -`,rw=`--- +`,cw=`--- titel: Der Nachtwächter nach: 18 stufe: 1 @@ -45590,7 +45596,7 @@ tipp: Eine While-Schleife mit \`mbot.getBrightness() < 20\`. Darin \`mbot.forwar tipp: Nach der Schleife steht \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,ow=`--- +`,dw=`--- titel: Slalom nach: 2 stufe: 2 @@ -45609,7 +45615,7 @@ tipp: Überlege zuerst, wie der mBot2 oben um einen einzigen Pylon herumfährt: tipp: Unten herum geht genauso, nur mit links und rechts vertauscht. „Oben herum, dann unten herum“ wiederholt sich zweimal. lösung: vb-slalom-loesung.visustruct ::: -`,lw=`--- +`,hw=`--- titel: Die Spirale nach: 2 stufe: 2 @@ -45628,7 +45634,7 @@ tipp: Lass die Zählvariable von 1 bis 8 laufen. Wie lang ist dann die Seite in tipp: In der Klammer von **fahre vor** steht eine Rechnung mit der Zählvariable. lösung: vb-spirale-loesung.visustruct ::: -`,uw=`--- +`,gw=`--- titel: Die Treppe nach: 2 stufe: 1 @@ -45645,7 +45651,7 @@ tipp: Schreib zuerst eine Stufe auf. Dann packst du sie in eine For-Schleife, di tipp: In der Schleife: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,mw=`--- +`,pw=`--- titel: Der Tunnelsucher nach: 5 stufe: 3 @@ -45666,7 +45672,7 @@ tipp: In jedem Durchlauf fährt der mBot2 ein Feld vor und schaut sich dann nach tipp: Hier passt eine Schleife, die erst fährt und danach prüft. Sie läuft weiter, solange links **oder** rechts mindestens 20 cm frei ist: \`links >= 20 || rechts >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,cw=`--- +`,fw=`--- titel: Kleeblatt im Wald nach: 5 stufe: 2 @@ -45685,7 +45691,7 @@ tipp: Wie bei „Fahre bis zum Ziel“ läuft außen eine Schleife, bis der Lini tipp: Um einen Baum herum: nach links drehen, ein Feld vor, nach rechts drehen, zwei Felder vor, nach rechts drehen, ein Feld vor, nach links drehen. lösung: vb-wald-loesung.visustruct ::: -`,dw=`--- +`,xw=`--- titel: The alarm system nach: 16 stufe: 2 @@ -45704,7 +45710,7 @@ tipp: On the outside is a while loop with \`!mbot.isButtonB()\`. Inside a branch tipp: The condition of the branch: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. In the yes branch \`mbot.setLed(255, 0, 0)\` and \`mbot.playTone(880, 200)\`, in the no branch \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,hw=`--- +`,bw=`--- titel: Maze with exits nach: 5 stufe: 3 @@ -45723,7 +45729,7 @@ tipp: In each pass the mBot2 first turns left and measures. If the way up is fre tipp: Through the gap it is two squares into the next corridor. Afterwards it should face right again. If there is a wall above, it turns back and drives one square further. lösung: vb-ausgang-loesung.visustruct ::: -`,gw=`--- +`,vw=`--- titel: Counting in binary nach: 15 stufe: 3 @@ -45748,7 +45754,7 @@ tipp: Whether LED 0 is on is given by the remainder when dividing by 2: \`number tipp: The loop contains three branches and then **wait a moment**. In the yes branch, for example, \`mbot.led(0).setColor("green")\`, in the no branch \`mbot.led(0).setColor("off")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,pw=`--- +`,yw=`--- titel: The triangle nach: 2 stufe: 1 @@ -45771,7 +45777,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen The idea of drawing shapes with a driving robot is more than 50 years old: the language **Logo** was created in the late 1960s. Children used it to steer a "turtle" that rolled across paper with a pen. ::: -`,fw=`--- +`,ww=`--- titel: Reverse parking nach: 16 stufe: 2 @@ -45791,7 +45797,7 @@ tipp: Two while loops one after the other: first \`!mbot.getColor().equals("blue tipp: At the end: \`mbot.setLed(0, 255, 0)\` and \`mbot.showText("Parked!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,xw='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',bw=`--- +`,zw='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',Iw=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -45808,7 +45814,7 @@ tipp: The first loop counts \`i\` up from 0 to 4. The second starts at 3 and cou tipp: In both loops: \`mbot.led(i).setColor("red")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("off")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,vw=`--- +`,kw=`--- titel: The maze nach: 5 stufe: 2 @@ -45833,7 +45839,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen With the rule "always keep one hand on the wall" you get out of any maze whose walls are all connected. The ancient Greeks already told of Theseus, who found his way through the Minotaur's labyrinth with a ball of thread. ::: -`,yw='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',ww=`--- +`,Sw='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',Tw=`--- titel: Morse code nach: 15 stufe: 2 @@ -45850,7 +45856,7 @@ tipp: Three for loops one after the other, each runs three times. Between them t tipp: In the first and third loop: \`mbot.led(2).setColor("white")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("off")\`, \`mbot.pause(200)\`. In the middle one it waits 600 after switching on. lösung: vb-morsen-loesung.visustruct ::: -`,zw=`--- +`,jw=`--- titel: The night watchman nach: 18 stufe: 1 @@ -45868,7 +45874,7 @@ tipp: A while loop with \`mbot.getBrightness() < 20\`. Inside \`mbot.forward(30) tipp: After the loop is \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,Iw=`--- +`,_w=`--- titel: Slalom nach: 2 stufe: 2 @@ -45887,7 +45893,7 @@ tipp: First think about how the mBot2 drives around a single cone on the top sid tipp: Around the bottom works the same way, only with left and right swapped. "Top, then bottom" repeats twice. lösung: vb-slalom-loesung.visustruct ::: -`,kw=`--- +`,Cw=`--- titel: The spiral nach: 2 stufe: 2 @@ -45906,7 +45912,7 @@ tipp: Let the counter variable run from 1 to 8. How long is the side in each pas tipp: The brackets of **drive forward** contain a calculation with the counter variable. lösung: vb-spirale-loesung.visustruct ::: -`,Sw=`--- +`,Aw=`--- titel: The staircase nach: 2 stufe: 1 @@ -45923,7 +45929,7 @@ tipp: Write down one step first. Then put it into a for loop that runs three tim tipp: Inside the loop: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,Tw=`--- +`,Pw=`--- titel: The tunnel finder nach: 5 stufe: 3 @@ -45944,7 +45950,7 @@ tipp: In each pass the mBot2 drives one square forward and then looks left and r tipp: A loop that drives first and checks afterwards fits here. It keeps going as long as at least 20 cm are free on the left **or** on the right: \`left >= 20 || right >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,jw=`--- +`,Ow=`--- titel: Clover in the forest nach: 5 stufe: 2 @@ -45963,7 +45969,7 @@ tipp: As in "Drive to the goal", a loop on the outside runs until the line senso tipp: Around a tree: turn left, one square forward, turn right, two squares forward, turn right, one square forward, turn left. lösung: vb-wald-loesung.visustruct ::: -`,_w=` +`,Mw=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;34; @@ -45975,7 +45981,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;117;102;32;87;105;101;100;101;114;115;101;104;101;110;34; -`,Cw=` +`,Zw=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -45994,7 +46000,7 @@ lösung: vb-wald-loesung.visustruct -`,Aw=` +`,Dw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -46075,7 +46081,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,Pw=` +`,Bw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -46084,7 +46090,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Ow=` +`,Lw=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -46149,7 +46155,7 @@ lösung: vb-wald-loesung.visustruct -`,Mw=` +`,Ww=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;71;97;110;122;101;32;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -46175,7 +46181,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;101;114; -`,Zw=` +`,Ew=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -46229,13 +46235,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,Dw=` +`,Nw=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,Bw=` +`,Jw=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;101;108;99;104;101;115;32;87;111;114;116;32;40;110;117;114;32;71;114;111;223;98;117;99;104;115;116;97;98;101;110;41;63;34; @@ -46266,7 +46272,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,Lw=` +`,Fw=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;103;101;104;101;105;109;32;34;87;101;108;99;104;101;114;32;71;101;104;101;105;109;116;101;120;116;63;34; @@ -46297,7 +46303,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;107;108;97;114;116;101;120;116; -`,Ww=` +`,Rw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -46333,7 +46339,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101; -`,Ew=` +`,Gw=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;78;111;116;101;110;63;34; @@ -46361,7 +46367,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;110;105;116;116; -`,Nw=` +`,Hw=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;90;97;104;108;101;110;63;34; @@ -46398,7 +46404,7 @@ lösung: vb-wald-loesung.visustruct -`,Jw=` +`,Vw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -46417,7 +46423,7 @@ lösung: vb-wald-loesung.visustruct -`,Fw=` +`,Qw=` 99;111;110;115;116;32;100;111;117;98;108;101;32;77;87;83;84;32;61;32;48;46;49;57; @@ -46438,7 +46444,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;114;117;116;116;111;112;114;101;105;115; -`,Rw=` +`,qw=` 105;110;116;32;112;105;110;32;61;32;48; @@ -46474,7 +46480,7 @@ lösung: vb-wald-loesung.visustruct -`,Gw=` +`,Uw=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -46510,7 +46516,7 @@ lösung: vb-wald-loesung.visustruct -`,Hw=` +`,Yw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;49;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -46554,7 +46560,7 @@ lösung: vb-wald-loesung.visustruct -`,Vw=` +`,$w=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -46608,7 +46614,7 @@ lösung: vb-wald-loesung.visustruct -`,Qw=` +`,Xw=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -46635,7 +46641,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;115;112;97;108;116;101;110;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,qw=` +`,Kw=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;109;101;114;32;34;87;101;108;99;104;101;115;32;71;101;114;105;99;104;116;63;32;40;49;44;32;50;32;111;100;101;114;32;51;41;34; @@ -46664,7 +46670,7 @@ lösung: vb-wald-loesung.visustruct -`,Uw=` +`,e5=` 105;110;116;32;122;97;104;108;49;32;61;32;52; @@ -46679,7 +46685,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,Yw=` +`,t5=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -46701,7 +46707,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;97;102;101;108;100;105;101;110;115;116;58;32;34;32;43;32;110;97;109;101;110;91;110;117;109;109;101;114;32;45;32;49;93; -`,$w=` +`,n5=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -46713,7 +46719,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;100;111;112;112;101;108;116;101;32;90;97;104;108;58;32;34;32;43;32;122;97;104;108; -`,Xw=` +`,i5=` -1; @@ -46760,7 +46766,7 @@ lösung: vb-wald-loesung.visustruct -`,Kw=` +`,a5=` @@ -46797,7 +46803,7 @@ lösung: vb-wald-loesung.visustruct -`,e5=` +`,s5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -46857,7 +46863,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;99;104;116;105;103;32;43;32;34;32;118;111;110;32;34;32;43;32;97;110;122;97;104;108;32;43;32;34;32;114;105;99;104;116;105;103;34; -`,t5=` +`,r5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -46866,7 +46872,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,n5=` +`,o5=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -46885,7 +46891,7 @@ lösung: vb-wald-loesung.visustruct -`,i5=` +`,l5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -46908,7 +46914,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,a5=` +`,u5=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -46926,7 +46932,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;104;97;116;32;105;110;32;77;97;116;104;101;32;101;105;110;101;32;34;32;43;32;109;97;116;104;101; -`,s5=` +`,m5=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;97;114;116;92;34;58;32;92;34;90;105;101;103;101;92;34;44;32;92;34;97;108;116;101;114;92;34;58;32;54;125;44;34; @@ -46944,7 +46950,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,r5=` +`,c5=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -46964,7 +46970,7 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,o5=` +`,d5=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;34; @@ -46976,7 +46982,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;111;100;98;121;101;34; -`,l5=` +`,h5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -46995,7 +47001,7 @@ lösung: vb-wald-loesung.visustruct -`,u5=` +`,g5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -47076,7 +47082,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,m5=` +`,p5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -47085,7 +47091,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,c5=` +`,f5=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -47150,7 +47156,7 @@ lösung: vb-wald-loesung.visustruct -`,d5=` +`,x5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;119;104;111;108;101;32;110;117;109;98;101;114;34; @@ -47176,7 +47182,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;121; -`,h5=` +`,b5=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -47230,13 +47236,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,g5=` +`,v5=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,p5=` +`,y5=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;87;104;105;99;104;32;119;111;114;100;32;40;99;97;112;105;116;97;108;32;108;101;116;116;101;114;115;32;111;110;108;121;41;63;34; @@ -47267,7 +47273,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,f5=` +`,w5=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;99;114;101;116;32;34;87;104;105;99;104;32;115;101;99;114;101;116;32;116;101;120;116;63;34; @@ -47298,7 +47304,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;108;97;105;110; -`,x5=` +`,z5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;115;116;97;114;116;32;110;117;109;98;101;114;34; @@ -47334,7 +47340,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115; -`,b5=` +`,I5=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;103;114;97;100;101;115;63;34; @@ -47362,7 +47368,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;118;101;114;97;103;101; -`,v5=` +`,k5=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;110;117;109;98;101;114;115;63;34; @@ -47399,7 +47405,7 @@ lösung: vb-wald-loesung.visustruct -`,y5=` +`,S5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -47418,7 +47424,7 @@ lösung: vb-wald-loesung.visustruct -`,w5=` +`,T5=` 99;111;110;115;116;32;100;111;117;98;108;101;32;86;65;84;32;61;32;48;46;49;57; @@ -47439,7 +47445,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;114;111;115;115;80;114;105;99;101; -`,z5=` +`,j5=` 105;110;116;32;112;105;110;32;61;32;48; @@ -47475,7 +47481,7 @@ lösung: vb-wald-loesung.visustruct -`,I5=` +`,_5=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -47511,7 +47517,7 @@ lösung: vb-wald-loesung.visustruct -`,k5=` +`,C5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;49;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -47555,7 +47561,7 @@ lösung: vb-wald-loesung.visustruct -`,S5=` +`,A5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -47609,7 +47615,7 @@ lösung: vb-wald-loesung.visustruct -`,T5=` +`,P5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -47636,7 +47642,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;109;110;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,j5=` +`,O5=` 105;110;112;117;116;58;32;105;110;116;32;112;105;99;107;32;34;87;104;105;99;104;32;100;105;115;104;63;32;40;49;44;32;50;32;111;114;32;51;41;34; @@ -47665,7 +47671,7 @@ lösung: vb-wald-loesung.visustruct -`,_5=` +`,M5=` 105;110;116;32;110;117;109;98;101;114;49;32;61;32;52; @@ -47680,7 +47686,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,C5=` +`,Z5=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -47702,7 +47708,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;111;97;114;100;32;100;117;116;121;58;32;34;32;43;32;110;97;109;101;115;91;112;105;99;107;32;45;32;49;93; -`,A5=` +`,D5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -47714,7 +47720,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;111;117;98;108;101;100;32;110;117;109;98;101;114;58;32;34;32;43;32;110;117;109;98;101;114; -`,P5=` +`,B5=` -1; @@ -47761,7 +47767,7 @@ lösung: vb-wald-loesung.visustruct -`,O5=` +`,L5=` @@ -47798,7 +47804,7 @@ lösung: vb-wald-loesung.visustruct -`,M5=` +`,W5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -47858,7 +47864,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;103;104;116;32;43;32;34;32;111;102;32;34;32;43;32;99;111;117;110;116;32;43;32;34;32;114;105;103;104;116;34; -`,Z5=` +`,E5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -47867,7 +47873,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,D5=` +`,N5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -47886,7 +47892,7 @@ lösung: vb-wald-loesung.visustruct -`,B5=` +`,J5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -47909,7 +47915,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,L5=` +`,F5=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -47927,7 +47933,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;103;111;116;32;97;32;34;32;43;32;109;97;116;104;115;32;43;32;34;32;105;110;32;109;97;116;104;115;34; -`,W5=` +`,R5=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;115;112;101;99;105;101;115;92;34;58;32;92;34;103;111;97;116;92;34;44;32;92;34;97;103;101;92;34;58;32;54;125;44;34; @@ -47945,7 +47951,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,E5=` +`,G5=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -47965,7 +47971,7 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,N5=` +`,H5=` 105;110;116;91;93;91;93;32;116;97;98;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -47997,7 +48003,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,J5=` +`,V5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48045,7 +48051,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;101;58;32;34;32;43;32;102;114;101;101; -`,F5=` +`,Q5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48060,7 +48066,7 @@ lösung: vb-wald-loesung.visustruct 115;101;97;116;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,R5=` +`,q5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48094,7 +48100,7 @@ lösung: vb-wald-loesung.visustruct -`,G5=` +`,U5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48112,7 +48118,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;115;101;97;116;32;34;83;101;97;116;34; -`,H5=` +`,Y5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48160,7 +48166,7 @@ lösung: vb-wald-loesung.visustruct -`,V5=` +`,$5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48184,7 +48190,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;111;119;32;49;44;32;115;101;97;116;32;50;32;115;111;108;100;63;32;34;32;43;32;115;101;97;116;115;91;49;93;91;50;93; -`,Q5=` +`,X5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -48199,7 +48205,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; -`,q5=` +`,K5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -48214,7 +48220,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; -`,U5=` +`,ez=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -48229,7 +48235,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,Y5=` +`,tz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -48244,7 +48250,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,$5=` +`,nz=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -48256,7 +48262,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;97;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34; -`,X5=` +`,iz=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -48268,7 +48274,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;65;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34;41; -`,K5=` +`,az=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -48286,7 +48292,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,ez=` +`,sz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -48301,7 +48307,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,tz=` +`,rz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;50; @@ -48316,7 +48322,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,nz=` +`,oz=` 111;117;116;112;117;116;58;32;110;117;109;98;101;114; @@ -48331,7 +48337,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;43;32;51; -`,iz=` +`,lz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -48355,7 +48361,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,az=` +`,uz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -48370,7 +48376,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,sz=` +`,mz=` 105;110;116;32;97;32;61;32;53; @@ -48394,7 +48400,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,rz=` +`,cz=` 105;110;116;32;97;103;101;32;61;32;49;52; @@ -48412,7 +48418,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,oz=` +`,dz=` 105;110;116;32;109;105;110;117;116;101;115;32;61;32;49;51;53; @@ -48427,7 +48433,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;117;114;115;32;43;32;34;32;104;111;117;114;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;109;105;110;117;116;101;115;34; -`,lz=` +`,hz=` 105;110;116;32;99;111;117;110;116;32;61;32;51; @@ -48442,7 +48448,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108;80;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,uz=` +`,gz=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -48457,7 +48463,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;101;102;116;58;32;34;32;43;32;99;114;101;100;105;116; -`,mz=` +`,pz=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -48472,7 +48478,7 @@ lösung: vb-wald-loesung.visustruct 99;114;101;100;105;116;32;61;32;99;114;101;100;105;116;32;45;32;112;114;105;99;101; -`,cz=` +`,fz=` 105;110;116;32;112;114;105;99;101;32;61;32;57; @@ -48487,7 +48493,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,dz=` +`,xz=` 105;110;116;32;115;108;105;99;101;115;32;61;32;56; @@ -48502,7 +48508,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;80;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; -`,hz=` +`,bz=` 105;110;116;32;115;108;105;99;101;115;32;61;32;56; @@ -48517,7 +48523,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;112;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; -`,gz=` +`,vz=` 105;110;116;32;108;101;110;103;116;104;32;61;32;55; @@ -48538,7 +48544,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;105;109;101;116;101;114;58;32;34;32;43;32;112;101;114;105;109;101;116;101;114; -`,pz=` +`,yz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -48553,7 +48559,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,fz=` +`,wz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -48562,7 +48568,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,xz=` +`,zz=` 105;110;116;32;108;101;110;103;116;104;32;61;32;53; @@ -48577,7 +48583,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,bz=` +`,Iz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;104;97;116;32;105;115;32;121;111;117;114;32;110;97;109;101;63;34; @@ -48586,7 +48592,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,vz=` +`,kz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48601,7 +48607,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,yz=` +`,Sz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48613,7 +48619,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,wz=` +`,Tz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48625,7 +48631,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;97;32;43;32;98; -`,zz=` +`,jz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48634,7 +48640,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;97;103;101;32;43;32;49;41; -`,Iz=` +`,_z=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48643,7 +48649,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;65;103;101;32;43;32;49;41; -`,kz=` +`,Cz=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;115;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48655,7 +48661,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;116;32;105;115;32;97;98;111;117;116;32;34;32;43;32;100;97;121;115;32;43;32;34;32;100;97;121;115;46;34; -`,Sz=` +`,Az=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48670,7 +48676,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;97;110;58;32;34;32;43;32;109;101;97;110; -`,Tz=` +`,Pz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48691,7 +48697,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;99;116;58;32;34;32;43;32;112;114;111;100;117;99;116; -`,jz=` +`,Oz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48710,7 +48716,7 @@ lösung: vb-wald-loesung.visustruct -`,_z=` +`,Mz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -48732,7 +48738,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,Cz=` +`,Zz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -48751,7 +48757,7 @@ lösung: vb-wald-loesung.visustruct -`,Az=` +`,Dz=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -48769,7 +48775,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,Pz=` +`,Bz=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -48787,7 +48793,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,Oz=` +`,Lz=` 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; @@ -48802,7 +48808,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,Mz=` +`,Wz=` 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; @@ -48817,7 +48823,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,Zz=` +`,Ez=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -48835,7 +48841,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,Dz=` +`,Nz=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -48853,7 +48859,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,Bz=` +`,Jz=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -48875,7 +48881,7 @@ lösung: vb-wald-loesung.visustruct -`,Lz=` +`,Fz=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;105;99;101;32;34;80;114;105;99;101;32;105;110;32;101;117;114;111;115;63;34; @@ -48897,7 +48903,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;32;112;97;121;58;32;34;32;43;32;112;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,Wz=` +`,Rz=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -48916,7 +48922,7 @@ lösung: vb-wald-loesung.visustruct -`,Ez=` +`,Gz=` 105;110;112;117;116;58;32;105;110;116;32;112;111;105;110;116;115;32;34;72;111;119;32;109;97;110;121;32;112;111;105;110;116;115;63;34; @@ -48935,7 +48941,7 @@ lösung: vb-wald-loesung.visustruct -`,Nz=` +`,Hz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48954,7 +48960,7 @@ lösung: vb-wald-loesung.visustruct -`,Jz=` +`,Vz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48973,7 +48979,7 @@ lösung: vb-wald-loesung.visustruct -`,Fz=` +`,Qz=` 105;110;116;32;97;103;101;32;61;32;49;53; @@ -48992,7 +48998,7 @@ lösung: vb-wald-loesung.visustruct -`,Rz=` +`,qz=` 105;110;116;32;97;103;101;32;61;32;49;53; @@ -49011,7 +49017,7 @@ lösung: vb-wald-loesung.visustruct -`,Gz=` +`,Uz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -49030,7 +49036,7 @@ lösung: vb-wald-loesung.visustruct -`,Hz=` +`,Yz=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -49049,7 +49055,7 @@ lösung: vb-wald-loesung.visustruct -`,Vz=` +`,$z=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;32;34;89;101;97;114;63;34; @@ -49068,7 +49074,7 @@ lösung: vb-wald-loesung.visustruct -`,Qz=` +`,Xz=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;68;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -49087,7 +49093,7 @@ lösung: vb-wald-loesung.visustruct -`,qz=` +`,Kz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;108;111;114;32;34;87;104;97;116;32;99;111;108;111;114;32;105;115;32;116;104;101;32;116;114;97;102;102;105;99;32;108;105;103;104;116;63;34; @@ -49116,7 +49122,7 @@ lösung: vb-wald-loesung.visustruct -`,Uz=` +`,e6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -49145,7 +49151,7 @@ lösung: vb-wald-loesung.visustruct -`,Yz=` +`,t6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -49164,7 +49170,7 @@ lösung: vb-wald-loesung.visustruct -`,$z=` +`,n6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -49183,7 +49189,7 @@ lösung: vb-wald-loesung.visustruct -`,Xz=` +`,i6=` 105;110;116;32;100;97;121;32;61;32;55; @@ -49202,7 +49208,7 @@ lösung: vb-wald-loesung.visustruct -`,Kz=` +`,a6=` 105;110;116;32;100;97;121;32;61;32;55; @@ -49221,7 +49227,7 @@ lösung: vb-wald-loesung.visustruct -`,e6=` +`,s6=` 105;110;112;117;116;58;32;105;110;116;32;104;111;117;114;32;34;87;104;97;116;32;116;105;109;101;32;105;115;32;105;116;32;40;106;117;115;116;32;116;104;101;32;104;111;117;114;41;63;34; @@ -49240,7 +49246,7 @@ lösung: vb-wald-loesung.visustruct -`,t6=` +`,r6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;87;104;105;99;104;32;103;114;97;100;101;63;34; @@ -49284,7 +49290,7 @@ lösung: vb-wald-loesung.visustruct -`,n6=` +`,o6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -49331,7 +49337,7 @@ lösung: vb-wald-loesung.visustruct -`,i6=` +`,l6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -49370,7 +49376,7 @@ lösung: vb-wald-loesung.visustruct -`,a6=` +`,u6=` 80;117;116;32;97;32;99;117;112;32;111;110;32;116;104;101;32;116;97;98;108;101; @@ -49400,7 +49406,7 @@ lösung: vb-wald-loesung.visustruct 68;114;105;110;107;32;116;104;101;32;116;101;97; -`,s6=` +`,m6=` 71;101;116;32;117;112; @@ -49415,7 +49421,7 @@ lösung: vb-wald-loesung.visustruct 72;97;118;101;32;98;114;101;97;107;102;97;115;116; -`,r6=` +`,c6=` 70;105;108;108;32;116;104;101;32;107;101;116;116;108;101;32;119;105;116;104;32;119;97;116;101;114; @@ -49436,7 +49442,7 @@ lösung: vb-wald-loesung.visustruct 84;97;107;101;32;111;117;116;32;116;104;101;32;116;101;97;32;98;97;103; -`,o6=` +`,d6=` 73;115;32;105;116;32;114;97;105;110;105;110;103;63; @@ -49455,7 +49461,7 @@ lösung: vb-wald-loesung.visustruct 76;101;97;118;101; -`,l6=` +`,h6=` 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; @@ -49469,7 +49475,7 @@ lösung: vb-wald-loesung.visustruct 67;108;101;97;114;32;116;104;101;32;112;108;97;116;101; -`,u6=` +`,g6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;117;110;116;32;117;112;32;116;111;63;34; @@ -49489,7 +49495,7 @@ lösung: vb-wald-loesung.visustruct -`,m6=` +`,p6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -49509,7 +49515,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,c6=` +`,f6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -49526,7 +49532,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,d6=` +`,x6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;99;116;111;114;105;97;108;32;111;102;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49552,7 +49558,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;99;116;111;114;105;97;108; -`,h6=` +`,b6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -49587,7 +49593,7 @@ lösung: vb-wald-loesung.visustruct -`,g6=` +`,v6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -49622,7 +49628,7 @@ lösung: vb-wald-loesung.visustruct -`,p6=` +`,y6=` 105;110;116;32;103;114;97;100;101;32;61;32;50; @@ -49646,7 +49652,7 @@ lösung: vb-wald-loesung.visustruct -`,f6=` +`,w6=` 105;110;116;32;103;114;97;100;101;32;61;32;50; @@ -49670,7 +49676,7 @@ lösung: vb-wald-loesung.visustruct -`,x6=` +`,z6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -49699,7 +49705,7 @@ lösung: vb-wald-loesung.visustruct -`,b6=` +`,I6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -49722,7 +49728,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;101;112;115; -`,v6=` +`,k6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -49739,7 +49745,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;110;107;32;121;111;117;33;34; -`,y6=` +`,S6=` 105;110;116;32;105;32;61;32;49;48; @@ -49756,7 +49762,7 @@ lösung: vb-wald-loesung.visustruct -`,w6=` +`,T6=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -49782,7 +49788,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,z6=` +`,j6=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -49808,7 +49814,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,I6=` +`,_6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;101;114;101;63;34; @@ -49828,7 +49834,7 @@ lösung: vb-wald-loesung.visustruct -`,k6=` +`,C6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -49848,7 +49854,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,S6=` +`,A6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -49868,7 +49874,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,T6=` +`,P6=` 105;110;116;32;103;114;97;100;101;32;61;32;48; @@ -49885,7 +49891,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;114;32;103;114;97;100;101;58;32;34;32;43;32;103;114;97;100;101; -`,j6=` +`,O6=` 105;110;116;32;115;117;109;32;61;32;48; @@ -49908,7 +49914,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,_6=` +`,M6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -49927,7 +49933,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,C6=` +`,Z6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -49946,7 +49952,7 @@ lösung: vb-wald-loesung.visustruct -`,A6=` +`,D6=` 105;110;116;32;105;32;61;32;49; @@ -49959,7 +49965,7 @@ lösung: vb-wald-loesung.visustruct -`,P6=` +`,B6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -49976,7 +49982,7 @@ lösung: vb-wald-loesung.visustruct -`,O6=` +`,L6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -49993,7 +49999,7 @@ lösung: vb-wald-loesung.visustruct -`,M6=` +`,W6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;49; @@ -50013,7 +50019,7 @@ lösung: vb-wald-loesung.visustruct -`,Z6=` +`,E6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;49; @@ -50033,7 +50039,7 @@ lösung: vb-wald-loesung.visustruct -`,D6=` +`,N6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -50050,7 +50056,7 @@ lösung: vb-wald-loesung.visustruct -`,B6=` +`,J6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -50072,7 +50078,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,L6=` +`,F6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;108;105;110;101;115;63;34; @@ -50101,7 +50107,7 @@ lösung: vb-wald-loesung.visustruct -`,W6=` +`,R6=` 105;110;116;32;99;111;117;110;116;32;61;32;48; @@ -50133,7 +50139,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,E6=` +`,G6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -50165,7 +50171,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,N6=` +`,H6=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -50181,7 +50187,7 @@ lösung: vb-wald-loesung.visustruct -`,J6=` +`,V6=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -50197,7 +50203,7 @@ lösung: vb-wald-loesung.visustruct -`,F6=` +`,Q6=` 105;110;116;32;104;101;105;103;104;116;32;61;32;48; @@ -50216,7 +50222,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; -`,R6=` +`,q6=` 105;110;116;32;115;116;101;112;32;61;32;49; @@ -50232,7 +50238,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; -`,G6=` +`,U6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -50248,7 +50254,7 @@ lösung: vb-wald-loesung.visustruct -`,H6=` +`,Y6=` 105;110;112;117;116;58;32;105;110;116;32;119;105;100;116;104;32;34;87;105;100;116;104;34; @@ -50280,7 +50286,7 @@ lösung: vb-wald-loesung.visustruct -`,V6=` +`,$6=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -50296,7 +50302,7 @@ lösung: vb-wald-loesung.visustruct -`,Q6=` +`,X6=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -50311,7 +50317,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;117;101;115;46;108;101;110;103;116;104; -`,q6=` +`,K6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -50343,7 +50349,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,U6=` +`,eI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -50375,7 +50381,7 @@ lösung: vb-wald-loesung.visustruct -`,Y6=` +`,tI=` 105;110;116;32;105;32;61;32;49; @@ -50398,7 +50404,7 @@ lösung: vb-wald-loesung.visustruct -`,$6=` +`,nI=` 105;110;116;32;105;32;61;32;49; @@ -50421,7 +50427,7 @@ lösung: vb-wald-loesung.visustruct -`,X6=` +`,iI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;115;116;101;112;115;63;34; @@ -50450,7 +50456,7 @@ lösung: vb-wald-loesung.visustruct -`,K6=` +`,aI=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -50469,7 +50475,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;114;115;116;32;110;97;109;101;58;32;34;32;43;32;110;97;109;101;115;91;48;93; -`,eI=` +`,sI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -50495,7 +50501,7 @@ lösung: vb-wald-loesung.visustruct -`,tI=` +`,rI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -50546,7 +50552,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,nI=` +`,oI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -50587,7 +50593,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,iI=` +`,lI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -50610,7 +50616,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,aI=` +`,uI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -50640,7 +50646,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,sI=` +`,mI=` 105;110;112;117;116;58;32;105;110;116;32;108;101;110;103;116;104;32;34;76;101;110;103;116;104;63;34; @@ -50655,13 +50661,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;114;101;97;58;32;34;32;43;32;102; -`,rI=` +`,cI=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,oI=` +`,dI=` 115;104;111;119;71;114;101;101;116;105;110;103;40;41; @@ -50673,7 +50679,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;82;101;115;117;108;116;40;41; -`,lI=` +`,hI=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -50705,7 +50711,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,uI=` +`,gI=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -50737,7 +50743,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,mI=` +`,pI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -50759,7 +50765,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,cI=` +`,fI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -50781,7 +50787,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,dI=` +`,xI=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -50803,7 +50809,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,hI=` +`,bI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -50815,7 +50821,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;101;32;115;113;117;97;114;101;32;105;115;32;34;32;43;32;113; -`,gI=` +`,vI=` 105;110;116;32;114;101;115;117;108;116;32;61;32;120;32;42;32;120; @@ -50824,7 +50830,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116; -`,pI=` +`,yI=` 115;104;111;119;84;105;116;108;101;40;41; @@ -50836,7 +50842,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101; -`,fI=` +`,wI=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;32;116;111;32;116;104;101;32;113;117;105;122;33;34; @@ -50845,7 +50851,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;32;103;101;116;32;116;104;114;101;101;32;113;117;101;115;116;105;111;110;115;46;34; -`,xI=` +`,zI=` 115;104;111;119;83;117;109;40;51;44;32;52;41; @@ -50857,7 +50863,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;83;117;109;40;120;44;32;120;32;43;32;49;41; -`,bI=` +`,II=` 105;110;116;32;115;117;109;32;61;32;97;32;43;32;98; @@ -50866,7 +50872,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109; -`,vI=` +`,kI=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -50889,7 +50895,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,yI=` +`,SI=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -50912,7 +50918,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;34; -`,wI=` +`,TI=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -50934,7 +50940,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,zI=` +`,jI=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -50956,7 +50962,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,II=` +`,_I=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -50965,7 +50971,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;112;111;105;110;116;115;91;49;93;91;48;93; -`,kI=` +`,CI=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -50974,7 +50980,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;80;111;105;110;116;115;91;49;93;91;48;93; -`,SI=` +`,AI=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -51003,7 +51009,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,TI=` +`,PI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -51026,7 +51032,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,jI=` +`,OI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -51048,7 +51054,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,_I=` +`,MI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -51070,7 +51076,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,CI=` +`,ZI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -51102,7 +51108,7 @@ lösung: vb-wald-loesung.visustruct -`,AI=` +`,DI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -51124,7 +51130,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;99;116;111;114;105;97;108; -`,PI=` +`,BI=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; @@ -51156,13 +51162,13 @@ lösung: vb-wald-loesung.visustruct -`,OI=` +`,LI=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; -`,MI=` +`,WI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -51174,7 +51180,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,ZI=` +`,EI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -51186,7 +51192,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,DI=` +`,NI=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -51195,7 +51201,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; -`,BI=` +`,JI=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -51204,7 +51210,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; -`,LI=` +`,FI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;105;110;112;117;116;32;34;80;97;115;115;119;111;114;100;63;34; @@ -51223,7 +51229,7 @@ lösung: vb-wald-loesung.visustruct -`,WI=` +`,RI=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -51252,7 +51258,7 @@ lösung: vb-wald-loesung.visustruct -`,EI=` +`,GI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;118;97;108;117;101;63;34; @@ -51272,7 +51278,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;34; -`,NI=` +`,HI=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -51305,7 +51311,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,JI=` +`,VI=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -51338,7 +51344,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,FI=` +`,QI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -51380,7 +51386,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;117;109; -`,RI=` +`,qI=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -51402,7 +51408,7 @@ lösung: vb-wald-loesung.visustruct -`,GI=` +`,UI=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -51418,7 +51424,7 @@ lösung: vb-wald-loesung.visustruct -`,HI=` +`,YI=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51457,7 +51463,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,VI=` +`,$I=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51496,7 +51502,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,QI=` +`,XI=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51531,7 +51537,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,qI=` +`,KI=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51566,7 +51572,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,UI=` +`,e7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51601,7 +51607,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,YI=` +`,t7=` 111;117;116;112;117;116;58;32;34;71;111;111;100;32;109;111;114;110;105;110;103;34; @@ -51610,13 +51616,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;100;97;121;32;119;101;32;108;101;97;114;110;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;46;34; -`,$I=` +`,n7=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;87;111;114;108;100;34; -`,XI=` +`,i7=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;34; @@ -51625,7 +51631,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;32;97;109;32;108;101;97;114;110;105;110;103;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;34; -`,KI=` +`,a7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -51666,7 +51672,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;108;105;110;101;115;32;115;97;118;101;100;34; -`,e7=` +`,s7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -51675,7 +51681,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;111;117;116;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;115;104;111;112;112;105;110;103;45;110;101;119;46;116;120;116;34;41; -`,t7=` +`,r7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -51701,13 +51707,13 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,n7=` +`,o7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; -`,i7=` +`,l7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -51746,7 +51752,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;111;120;58;32;34;32;43;32;99;111;117;110;116; -`,a7=` +`,u7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -51755,7 +51761,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,s7=` +`,m7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -51790,7 +51796,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;110;103;101;115;116;32;101;110;116;114;121;58;32;34;32;43;32;108;111;110;103;101;115;116; -`,r7=` +`,c7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -51799,7 +51805,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;101;115;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,o7=` +`,d7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -51853,7 +51859,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;32;103;114;97;100;101;32;105;110;32;69;110;103;108;105;115;104;58;32;34;32;43;32;98;101;115;116;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;71;114;97;100;101;32;43;32;34;41;34; -`,l7=` +`,h7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -51862,7 +51868,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,u7=` +`,g7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -51903,7 +51909,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;116;104;115;32;97;118;101;114;97;103;101;58;32;34;32;43;32;115;117;109;32;47;32;99;111;117;110;116; -`,m7=` +`,p7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -51912,7 +51918,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,c7=` +`,f7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -51951,7 +51957,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,d7=` +`,x7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -51960,7 +51966,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,h7=` +`,b7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -52010,7 +52016,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;105;101;115;32;115;97;118;101;100;34; -`,g7=` +`,v7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -52028,7 +52034,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,p7=` +`,y7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -52081,7 +52087,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;101;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;108;115;32;115;97;118;101;100;34; -`,f7=` +`,w7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -52102,7 +52108,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,x7=` +`,z7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -52146,7 +52152,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;115;101;110;116;101;110;99;101;115;32;115;97;118;101;100;34; -`,b7=` +`,I7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -52167,7 +52173,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,v7=` +`,k7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -52179,7 +52185,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,y7=` +`,S7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -52191,7 +52197,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;99;111;117;110;116;32;42;32;56;46;53; -`,w7=` +`,T7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -52215,7 +52221,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,z7=` +`,j7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -52236,7 +52242,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,I7=` +`,_7=` 105;110;116;32;97;32;61;32;51; @@ -52260,7 +52266,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,k7=` +`,C7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -52319,7 +52325,7 @@ lösung: vb-wald-loesung.visustruct -`,S7=` +`,A7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -52378,7 +52384,7 @@ lösung: vb-wald-loesung.visustruct -`,T7=` +`,P7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -52452,7 +52458,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,j7=` +`,O7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -52501,7 +52507,7 @@ lösung: vb-wald-loesung.visustruct -`,_7=` +`,M7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -52550,7 +52556,7 @@ lösung: vb-wald-loesung.visustruct -`,C7=` +`,Z7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -52608,7 +52614,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,A7=` +`,D7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -52627,7 +52633,7 @@ lösung: vb-wald-loesung.visustruct -`,P7=` +`,B7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -52646,7 +52652,7 @@ lösung: vb-wald-loesung.visustruct -`,O7=` +`,L7=` 105;110;116;32;105;32;61;32;48; @@ -52659,7 +52665,7 @@ lösung: vb-wald-loesung.visustruct -`,M7=` +`,W7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;53; @@ -52683,7 +52689,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;102;116;101;114;58;32;34;32;43;32;114;111;119;91;48;93;32;43;32;34;44;32;34;32;43;32;114;111;119;91;49;93; -`,Z7=` +`,E7=` 105;110;116;32;105;32;61;32;48; @@ -52696,7 +52702,7 @@ lösung: vb-wald-loesung.visustruct -`,D7=` +`,N7=` 120;32;61;32;120;32;42;32;50; @@ -52705,7 +52711,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;110;32;116;104;101;32;115;117;98;112;114;111;103;114;97;109;58;32;120;32;61;32;34;32;43;32;120; -`,B7=` +`,J7=` 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -52714,7 +52720,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,L7=` +`,F7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -52740,7 +52746,7 @@ lösung: vb-wald-loesung.visustruct -`,W7=` +`,R7=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -52767,7 +52773,7 @@ lösung: vb-wald-loesung.visustruct -`,E7=` +`,G7=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -52785,7 +52791,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,N7=` +`,H7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -52815,7 +52821,7 @@ lösung: vb-wald-loesung.visustruct -`,J7=` +`,V7=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;101;108;108;111;33;34;41; @@ -52827,7 +52833,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;32;97;109;32;86;105;115;117;66;111;116;34;41; -`,F7=` +`,Q7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -52879,7 +52885,7 @@ lösung: vb-wald-loesung.visustruct -`,R7=` +`,q7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -52890,7 +52896,7 @@ lösung: vb-wald-loesung.visustruct -`,G7=` +`,U7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -52901,7 +52907,7 @@ lösung: vb-wald-loesung.visustruct -`,H7=` +`,Y7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -52912,7 +52918,7 @@ lösung: vb-wald-loesung.visustruct -`,V7=` +`,$7=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;86;105;115;117;66;111;116;34; @@ -52931,7 +52937,7 @@ lösung: vb-wald-loesung.visustruct -`,Q7=` +`,X7=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;101;100;34;41; @@ -52943,7 +52949,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;101;101;110;34;41; -`,q7=` +`,K7=` 105;110;116;32;105;32;61;32;48; @@ -52959,7 +52965,7 @@ lösung: vb-wald-loesung.visustruct -`,U7=` +`,ek=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -52987,7 +52993,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;80;97;114;107;101;100;33;34;41; -`,Y7=` +`,tk=` 83;116;114;105;110;103;91;93;32;99;111;108;111;117;114;115;32;61;32;123;34;114;101;100;34;44;32;34;121;101;108;108;111;119;34;44;32;34;103;114;101;101;110;34;44;32;34;98;108;117;101;34;44;32;34;112;117;114;112;108;101;34;125; @@ -53003,7 +53009,7 @@ lösung: vb-wald-loesung.visustruct -`,$7=` +`,nk=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -53029,7 +53035,7 @@ lösung: vb-wald-loesung.visustruct -`,X7=` +`,ik=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -53046,7 +53052,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,K7=` +`,ak=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -53064,7 +53070,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,ek=` +`,sk=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -53100,7 +53106,7 @@ lösung: vb-wald-loesung.visustruct -`,tk=` +`,rk=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;66;97;116;116;101;114;121;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -53119,7 +53125,7 @@ lösung: vb-wald-loesung.visustruct -`,nk=` +`,ok=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -53143,7 +53149,7 @@ lösung: vb-wald-loesung.visustruct -`,ik=` +`,lk=` 105;110;116;32;105;32;61;32;48; @@ -53165,7 +53171,7 @@ lösung: vb-wald-loesung.visustruct -`,ak=` +`,uk=` 105;110;116;32;105;32;61;32;51; @@ -53184,7 +53190,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;111;33;34;41; -`,sk=` +`,mk=` 105;110;116;32;105;32;61;32;49; @@ -53197,7 +53203,7 @@ lösung: vb-wald-loesung.visustruct -`,rk=` +`,ck=` 105;110;116;32;105;32;61;32;48; @@ -53230,7 +53236,7 @@ lösung: vb-wald-loesung.visustruct -`,ok=` +`,dk=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -53246,7 +53252,7 @@ lösung: vb-wald-loesung.visustruct -`,lk=` +`,hk=` 105;110;116;32;105;32;61;32;48; @@ -53265,7 +53271,7 @@ lösung: vb-wald-loesung.visustruct -`,uk=` +`,gk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -53309,7 +53315,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,mk=` +`,pk=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -53328,7 +53334,7 @@ lösung: vb-wald-loesung.visustruct -`,ck=` +`,fk=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -53358,7 +53364,7 @@ lösung: vb-wald-loesung.visustruct -`,dk=` +`,xk=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -53386,7 +53392,7 @@ lösung: vb-wald-loesung.visustruct -`,hk=` +`,bk=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;101;108;108;111;32;99;108;97;115;115;34; @@ -53395,7 +53401,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,gk=` +`,vk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -53409,7 +53415,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,pk=` +`,yk=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -53425,7 +53431,7 @@ lösung: vb-wald-loesung.visustruct -`,fk=` +`,wk=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -53439,7 +53445,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,xk=` +`,zk=` 105;110;116;32;105;32;61;32;48; @@ -53474,7 +53480,7 @@ lösung: vb-wald-loesung.visustruct -`,bk=` +`,Ik=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -53508,7 +53514,7 @@ lösung: vb-wald-loesung.visustruct -`,vk=` +`,kk=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -53552,7 +53558,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,yk=` +`,Sk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -53578,7 +53584,7 @@ lösung: vb-wald-loesung.visustruct -`,wk=` +`,Tk=` 105;110;116;91;93;32;116;111;110;101;115;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -53594,7 +53600,7 @@ lösung: vb-wald-loesung.visustruct -`,zk=` +`,jk=` 105;110;116;32;105;32;61;32;48; @@ -53660,7 +53666,7 @@ lösung: vb-wald-loesung.visustruct -`,Ik=` +`,_k=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -53676,7 +53682,7 @@ lösung: vb-wald-loesung.visustruct -`,kk=` +`,Ck=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -53693,7 +53699,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,Sk=` +`,Ak=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101; @@ -53722,7 +53728,7 @@ lösung: vb-wald-loesung.visustruct -`,Tk=` +`,Pk=` 105;110;116;32;97;32;61;32;115;113;117;97;114;101;78;117;109;98;101;114;40;51;41; @@ -53737,13 +53743,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,jk=` +`,Ok=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,_k=` +`,Mk=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;76;117;100;119;105;103;34; @@ -53765,7 +53771,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,Ck=` +`,Zk=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -53780,7 +53786,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34; -`,Ak=` +`,Dk=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -53805,7 +53811,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;103;114;97;100;101;115;46;108;101;110;103;116;104; -`,Pk=` +`,Bk=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -53880,7 +53886,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,Ok=` +`,Lk=` 115;113;117;97;114;101;40;51;48;41; @@ -53889,7 +53895,7 @@ lösung: vb-wald-loesung.visustruct 115;113;117;97;114;101;40;53;48;41; -`,Mk=` +`,Wk=` 105;110;116;32;105;32;61;32;48; @@ -53944,7 +53950,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,Zk=` +`,Ek=` 105;110;116;32;105;32;61;32;48; @@ -53960,7 +53966,7 @@ lösung: vb-wald-loesung.visustruct -`,Dk=` +`,Nk=` 105;110;116;32;105;32;61;32;48; @@ -53983,7 +53989,7 @@ lösung: vb-wald-loesung.visustruct -`,Bk=` +`,Jk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -53997,7 +54003,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,Lk=` +`,Fk=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -54013,7 +54019,7 @@ lösung: vb-wald-loesung.visustruct -`,Wk=` +`,Rk=` 105;110;116;32;105;32;61;32;48; @@ -54065,7 +54071,7 @@ lösung: vb-wald-loesung.visustruct -`,Ek=` +`,Gk=` 105;110;116;32;105;32;61;32;49; @@ -54081,7 +54087,7 @@ lösung: vb-wald-loesung.visustruct -`,Nk=` +`,Hk=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -54095,7 +54101,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,Jk=` +`,Vk=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -54113,7 +54119,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,Fk=` +`,Qk=` 105;110;116;32;105;32;61;32;48; @@ -54135,7 +54141,7 @@ lösung: vb-wald-loesung.visustruct -`,Rk=` +`,qk=` 105;110;116;32;108;101;102;116;32;61;32;57;57; @@ -54167,7 +54173,7 @@ lösung: vb-wald-loesung.visustruct -`,Gk=` +`,Uk=` 105;110;116;32;115;105;100;101;32;61;32;51;48; @@ -54186,7 +54192,7 @@ lösung: vb-wald-loesung.visustruct -`,Hk=` +`,Yk=` 105;110;116;32;105;32;61;32;48; @@ -54219,7 +54225,7 @@ lösung: vb-wald-loesung.visustruct -`,Vk=` +`,$k=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -54258,7 +54264,7 @@ lösung: vb-wald-loesung.visustruct -`,Qk=` +`,Xk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -54274,7 +54280,7 @@ lösung: vb-wald-loesung.visustruct -`,qk=` +`,Kk=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -54294,7 +54300,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,Uk=` +`,e8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;78;97;109;101;32;34;70;105;114;115;116;32;110;97;109;101;34; @@ -54306,7 +54312,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,Yk=` +`,t8=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -54345,7 +54351,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,$k=` +`,n8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -54367,7 +54373,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,Xk=` +`,i8=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;76;117;100;119;105;103;59;98;105;108;108;121;32;103;111;97;116;59;55;34; @@ -54386,7 +54392,7 @@ lösung: vb-wald-loesung.visustruct -`,Kk=` +`,a8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;110;116;101;110;99;101;32;34;69;110;116;101;114;32;97;32;115;101;110;116;101;110;99;101;34; @@ -54398,7 +54404,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;114;100;115;58;32;34;32;43;32;119;111;114;100;115;46;108;101;110;103;116;104; -`,e8=` +`,s8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -54430,7 +54436,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;117;109;98;101;114;32;111;102;32;101;58;32;34;32;43;32;99;111;117;110;116; -`,t8=` +`,r8=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -54454,7 +54460,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;100;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,n8=` +`,o8=` 105;110;116;91;93;91;93;32;116;97;98;101;108;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -54486,7 +54492,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,i8=` +`,l8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -54534,7 +54540,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;105;58;32;34;32;43;32;102;114;101;105; -`,a8=` +`,u8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -54549,7 +54555,7 @@ lösung: vb-wald-loesung.visustruct 115;105;116;122;101;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,s8=` +`,m8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -54583,7 +54589,7 @@ lösung: vb-wald-loesung.visustruct -`,r8=` +`,c8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -54601,7 +54607,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;112;108;97;116;122;32;34;80;108;97;116;122;34; -`,o8=` +`,d8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -54649,7 +54655,7 @@ lösung: vb-wald-loesung.visustruct -`,l8=` +`,h8=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -54673,7 +54679,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;105;104;101;32;49;44;32;80;108;97;116;122;32;50;32;118;101;114;107;97;117;102;116;63;32;34;32;43;32;115;105;116;122;101;91;49;93;91;50;93; -`,u8=` +`,g8=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -54688,7 +54694,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; -`,m8=` +`,p8=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -54703,7 +54709,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; -`,c8=` +`,f8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -54718,7 +54724,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,d8=` +`,x8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -54733,7 +54739,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,h8=` +`,b8=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -54745,7 +54751,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;97;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34; -`,g8=` +`,v8=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -54757,7 +54763,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;65;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34;41; -`,p8=` +`,y8=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -54775,7 +54781,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,f8=` +`,w8=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -54790,7 +54796,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,x8=` +`,z8=` 105;110;116;32;122;97;104;108;32;61;32;50; @@ -54805,7 +54811,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,b8=` +`,I8=` 111;117;116;112;117;116;58;32;122;97;104;108; @@ -54820,7 +54826,7 @@ lösung: vb-wald-loesung.visustruct 122;97;104;108;32;61;32;122;97;104;108;32;43;32;51; -`,v8=` +`,k8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -54844,7 +54850,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,y8=` +`,S8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -54859,7 +54865,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,w8=` +`,T8=` 105;110;116;32;97;32;61;32;53; @@ -54883,7 +54889,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,z8=` +`,j8=` 105;110;116;32;97;108;116;101;114;32;61;32;49;52; @@ -54901,7 +54907,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,I8=` +`,_8=` 105;110;116;32;109;105;110;117;116;101;110;32;61;32;49;51;53; @@ -54916,7 +54922,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;117;110;100;101;110;32;43;32;34;32;83;116;117;110;100;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;77;105;110;117;116;101;110;34; -`,k8=` +`,C8=` 105;110;116;32;97;110;122;97;104;108;32;61;32;51; @@ -54931,7 +54937,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116;80;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,S8=` +`,A8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -54946,7 +54952,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;220;98;114;105;103;58;32;34;32;43;32;103;117;116;104;97;98;101;110; -`,T8=` +`,P8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -54961,7 +54967,7 @@ lösung: vb-wald-loesung.visustruct 103;117;116;104;97;98;101;110;32;61;32;103;117;116;104;97;98;101;110;32;45;32;112;114;101;105;115; -`,j8=` +`,O8=` 105;110;116;32;112;114;101;105;115;32;61;32;57; @@ -54976,7 +54982,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,_8=` +`,M8=` 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; @@ -54991,7 +54997,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;80;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; -`,C8=` +`,Z8=` 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; @@ -55006,7 +55012,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;112;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; -`,A8=` +`,D8=` 105;110;116;32;108;97;101;110;103;101;32;61;32;55; @@ -55027,7 +55033,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;85;109;102;97;110;103;58;32;34;32;43;32;117;109;102;97;110;103; -`,P8=` +`,B8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -55042,7 +55048,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,O8=` +`,L8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -55051,7 +55057,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,M8=` +`,W8=` 105;110;116;32;108;97;101;110;103;101;32;61;32;53; @@ -55066,7 +55072,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;108;97;101;99;104;101; -`,Z8=` +`,E8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;105;101;32;104;101;105;223;116;32;100;117;63;34; @@ -55075,7 +55081,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,D8=` +`,N8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -55090,7 +55096,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,B8=` +`,J8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -55102,7 +55108,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,L8=` +`,F8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -55114,7 +55120,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;97;32;43;32;98; -`,W8=` +`,R8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55123,7 +55129,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;97;108;116;101;114;32;43;32;49;41; -`,E8=` +`,G8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55132,7 +55138,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;65;108;116;101;114;32;43;32;49;41; -`,N8=` +`,H8=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;101;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55144,7 +55150,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;115;105;110;100;32;101;116;119;97;32;34;32;43;32;116;97;103;101;32;43;32;34;32;84;97;103;101;46;34; -`,J8=` +`,V8=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -55159,7 +55165,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108; -`,F8=` +`,Q8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -55180,7 +55186,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;107;116;58;32;34;32;43;32;112;114;111;100;117;107;116; -`,R8=` +`,q8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55199,7 +55205,7 @@ lösung: vb-wald-loesung.visustruct -`,G8=` +`,U8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -55221,7 +55227,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,H8=` +`,Y8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -55240,7 +55246,7 @@ lösung: vb-wald-loesung.visustruct -`,V8=` +`,$8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -55258,7 +55264,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,Q8=` +`,X8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -55276,7 +55282,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,q8=` +`,K8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; @@ -55291,7 +55297,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,U8=` +`,eS=` 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; @@ -55306,7 +55312,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,Y8=` +`,tS=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -55324,7 +55330,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,$8=` +`,nS=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -55342,7 +55348,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,X8=` +`,iS=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -55364,7 +55370,7 @@ lösung: vb-wald-loesung.visustruct -`,K8=` +`,aS=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;105;115;32;34;80;114;101;105;115;32;105;110;32;69;117;114;111;63;34; @@ -55386,7 +55392,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;90;117;32;122;97;104;108;101;110;58;32;34;32;43;32;112;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,eS=` +`,sS=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -55405,7 +55411,7 @@ lösung: vb-wald-loesung.visustruct -`,tS=` +`,rS=` 105;110;112;117;116;58;32;105;110;116;32;112;117;110;107;116;101;32;34;87;105;101;32;118;105;101;108;101;32;80;117;110;107;116;101;63;34; @@ -55424,7 +55430,7 @@ lösung: vb-wald-loesung.visustruct -`,nS=` +`,oS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55443,7 +55449,7 @@ lösung: vb-wald-loesung.visustruct -`,iS=` +`,lS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55462,7 +55468,7 @@ lösung: vb-wald-loesung.visustruct -`,aS=` +`,uS=` 105;110;116;32;97;108;116;101;114;32;61;32;49;53; @@ -55481,7 +55487,7 @@ lösung: vb-wald-loesung.visustruct -`,sS=` +`,mS=` 105;110;116;32;97;108;116;101;114;32;61;32;49;53; @@ -55500,7 +55506,7 @@ lösung: vb-wald-loesung.visustruct -`,rS=` +`,cS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -55519,7 +55525,7 @@ lösung: vb-wald-loesung.visustruct -`,oS=` +`,dS=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -55538,7 +55544,7 @@ lösung: vb-wald-loesung.visustruct -`,lS=` +`,hS=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;32;34;74;97;104;114;63;34; @@ -55557,7 +55563,7 @@ lösung: vb-wald-loesung.visustruct -`,uS=` +`,gS=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -55576,7 +55582,7 @@ lösung: vb-wald-loesung.visustruct -`,mS=` +`,pS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;97;114;98;101;32;34;87;101;108;99;104;101;32;70;97;114;98;101;32;104;97;116;32;100;105;101;32;65;109;112;101;108;63;34; @@ -55605,7 +55611,7 @@ lösung: vb-wald-loesung.visustruct -`,cS=` +`,fS=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -55634,7 +55640,7 @@ lösung: vb-wald-loesung.visustruct -`,dS=` +`,xS=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -55653,7 +55659,7 @@ lösung: vb-wald-loesung.visustruct -`,hS=` +`,bS=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -55672,7 +55678,7 @@ lösung: vb-wald-loesung.visustruct -`,gS=` +`,vS=` 105;110;116;32;116;97;103;32;61;32;55; @@ -55691,7 +55697,7 @@ lösung: vb-wald-loesung.visustruct -`,pS=` +`,yS=` 105;110;116;32;116;97;103;32;61;32;55; @@ -55710,7 +55716,7 @@ lösung: vb-wald-loesung.visustruct -`,fS=` +`,wS=` 105;110;112;117;116;58;32;105;110;116;32;115;116;117;110;100;101;32;34;87;105;101;32;115;112;228;116;32;105;115;116;32;101;115;32;40;110;117;114;32;100;105;101;32;83;116;117;110;100;101;41;63;34; @@ -55729,7 +55735,7 @@ lösung: vb-wald-loesung.visustruct -`,xS=` +`,zS=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;87;101;108;99;104;101;32;78;111;116;101;63;34; @@ -55773,7 +55779,7 @@ lösung: vb-wald-loesung.visustruct -`,bS=` +`,IS=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -55820,7 +55826,7 @@ lösung: vb-wald-loesung.visustruct -`,vS=` +`,kS=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -55859,7 +55865,7 @@ lösung: vb-wald-loesung.visustruct -`,yS=` +`,SS=` 84;97;115;115;101;32;97;117;102;32;100;101;110;32;84;105;115;99;104;32;115;116;101;108;108;101;110; @@ -55889,7 +55895,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;116;114;105;110;107;101;110; -`,wS=` +`,TS=` 65;117;102;115;116;101;104;101;110; @@ -55904,7 +55910,7 @@ lösung: vb-wald-loesung.visustruct 70;114;252;104;115;116;252;99;107;101;110; -`,zS=` +`,jS=` 87;97;115;115;101;114;32;105;110;32;100;101;110;32;87;97;115;115;101;114;107;111;99;104;101;114;32;102;252;108;108;101;110; @@ -55925,7 +55931,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;98;101;117;116;101;108;32;104;101;114;97;117;115;110;101;104;109;101;110; -`,IS=` +`,_S=` 82;101;103;110;101;116;32;101;115;63; @@ -55944,7 +55950,7 @@ lösung: vb-wald-loesung.visustruct 76;111;115;103;101;104;101;110; -`,kS=` +`,CS=` 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; @@ -55958,7 +55964,7 @@ lösung: vb-wald-loesung.visustruct 84;101;108;108;101;114;32;97;98;114;228;117;109;101;110; -`,SS=` +`,AS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;32;122;228;104;108;101;110;63;34; @@ -55978,7 +55984,7 @@ lösung: vb-wald-loesung.visustruct -`,TS=` +`,PS=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -55998,7 +56004,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,jS=` +`,OS=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -56015,7 +56021,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,_S=` +`,MS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;107;117;108;116;228;116;32;118;111;110;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -56041,7 +56047,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;107;117;108;116;97;101;116; -`,CS=` +`,ZS=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -56076,7 +56082,7 @@ lösung: vb-wald-loesung.visustruct -`,AS=` +`,DS=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -56111,7 +56117,7 @@ lösung: vb-wald-loesung.visustruct -`,PS=` +`,BS=` 105;110;116;32;110;111;116;101;32;61;32;50; @@ -56135,7 +56141,7 @@ lösung: vb-wald-loesung.visustruct -`,OS=` +`,LS=` 105;110;116;32;110;111;116;101;32;61;32;50; @@ -56159,7 +56165,7 @@ lösung: vb-wald-loesung.visustruct -`,MS=` +`,WS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -56188,7 +56194,7 @@ lösung: vb-wald-loesung.visustruct -`,ZS=` +`,ES=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;34; @@ -56211,7 +56217,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;114;105;116;116;101; -`,DS=` +`,NS=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -56228,7 +56234,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;110;107;101;33;34; -`,BS=` +`,JS=` 105;110;116;32;105;32;61;32;49;48; @@ -56245,7 +56251,7 @@ lösung: vb-wald-loesung.visustruct -`,LS=` +`,FS=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -56271,7 +56277,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,WS=` +`,RS=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -56297,7 +56303,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,ES=` +`,GS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -56317,7 +56323,7 @@ lösung: vb-wald-loesung.visustruct -`,NS=` +`,HS=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -56337,7 +56343,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,JS=` +`,VS=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -56357,7 +56363,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,FS=` +`,QS=` 105;110;116;32;110;111;116;101;32;61;32;48; @@ -56374,7 +56380,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;105;110;101;32;78;111;116;101;58;32;34;32;43;32;110;111;116;101; -`,RS=` +`,qS=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -56397,7 +56403,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,GS=` +`,US=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;122;97;104;108;34; @@ -56416,7 +56422,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,HS=` +`,YS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -56435,7 +56441,7 @@ lösung: vb-wald-loesung.visustruct -`,VS=` +`,$S=` 105;110;116;32;105;32;61;32;49; @@ -56448,7 +56454,7 @@ lösung: vb-wald-loesung.visustruct -`,QS=` +`,XS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -56465,7 +56471,7 @@ lösung: vb-wald-loesung.visustruct -`,qS=` +`,KS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -56482,7 +56488,7 @@ lösung: vb-wald-loesung.visustruct -`,US=` +`,eT=` 105;110;116;32;122;97;104;108;32;61;32;49; @@ -56502,7 +56508,7 @@ lösung: vb-wald-loesung.visustruct -`,YS=` +`,tT=` 105;110;116;32;122;97;104;108;32;61;32;49; @@ -56522,7 +56528,7 @@ lösung: vb-wald-loesung.visustruct -`,$S=` +`,nT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -56539,7 +56545,7 @@ lösung: vb-wald-loesung.visustruct -`,XS=` +`,iT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -56561,7 +56567,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,KS=` +`,aT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;90;101;105;108;101;110;63;34; @@ -56590,7 +56596,7 @@ lösung: vb-wald-loesung.visustruct -`,eT=` +`,sT=` 105;110;116;32;97;110;122;97;104;108;32;61;32;48; @@ -56622,7 +56628,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,tT=` +`,rT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -56654,7 +56660,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,nT=` +`,oT=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -56670,7 +56676,7 @@ lösung: vb-wald-loesung.visustruct -`,iT=` +`,lT=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -56686,7 +56692,7 @@ lösung: vb-wald-loesung.visustruct -`,aT=` +`,uT=` 105;110;116;32;104;111;101;104;101;32;61;32;48; @@ -56705,7 +56711,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; -`,sT=` +`,mT=` 105;110;116;32;115;116;117;102;101;32;61;32;49; @@ -56721,7 +56727,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; -`,rT=` +`,cT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -56737,7 +56743,7 @@ lösung: vb-wald-loesung.visustruct -`,oT=` +`,dT=` 105;110;112;117;116;58;32;105;110;116;32;98;114;101;105;116;101;32;34;66;114;101;105;116;101;34; @@ -56769,7 +56775,7 @@ lösung: vb-wald-loesung.visustruct -`,lT=` +`,hT=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -56785,7 +56791,7 @@ lösung: vb-wald-loesung.visustruct -`,uT=` +`,gT=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -56800,7 +56806,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;101;114;116;101;46;108;101;110;103;116;104; -`,mT=` +`,pT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -56832,7 +56838,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,cT=` +`,fT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -56864,7 +56870,7 @@ lösung: vb-wald-loesung.visustruct -`,dT=` +`,xT=` 105;110;116;32;105;32;61;32;49; @@ -56887,7 +56893,7 @@ lösung: vb-wald-loesung.visustruct -`,hT=` +`,bT=` 105;110;116;32;105;32;61;32;49; @@ -56910,7 +56916,7 @@ lösung: vb-wald-loesung.visustruct -`,gT=` +`,vT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;83;116;117;102;101;110;63;34; @@ -56939,7 +56945,7 @@ lösung: vb-wald-loesung.visustruct -`,pT=` +`,yT=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -56958,7 +56964,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;115;116;101;114;32;78;97;109;101;58;32;34;32;43;32;110;97;109;101;110;91;48;93; -`,fT=` +`,wT=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -56984,7 +56990,7 @@ lösung: vb-wald-loesung.visustruct -`,xT=` +`,zT=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -57035,7 +57041,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,bT=` +`,IT=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -57076,7 +57082,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,vT=` +`,kT=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -57099,7 +57105,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,yT=` +`,ST=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -57129,7 +57135,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,wT=` +`,TT=` 105;110;112;117;116;58;32;105;110;116;32;108;97;101;110;103;101;32;34;76;228;110;103;101;63;34; @@ -57144,13 +57150,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;108;228;99;104;101;58;32;34;32;43;32;102; -`,zT=` +`,jT=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,IT=` +`,_T=` 122;101;105;103;101;66;101;103;114;117;101;115;115;117;110;103;40;41; @@ -57162,7 +57168,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;69;114;103;101;98;110;105;115;40;41; -`,kT=` +`,CT=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -57194,7 +57200,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,ST=` +`,AT=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -57226,7 +57232,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,TT=` +`,PT=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -57248,7 +57254,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,jT=` +`,OT=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -57270,7 +57276,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,_T=` +`,MT=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -57292,7 +57298,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,CT=` +`,ZT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -57304,7 +57310,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;81;117;97;100;114;97;116;32;105;115;116;32;34;32;43;32;113; -`,AT=` +`,DT=` 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;120;32;42;32;120; @@ -57313,7 +57319,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;101;114;103;101;98;110;105;115; -`,PT=` +`,BT=` 122;101;105;103;101;84;105;116;101;108;40;41; @@ -57325,7 +57331,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101; -`,OT=` +`,LT=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;32;122;117;109;32;81;117;105;122;33;34; @@ -57334,7 +57340,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;117;32;98;101;107;111;109;109;115;116;32;100;114;101;105;32;70;114;97;103;101;110;46;34; -`,MT=` +`,WT=` 122;101;105;103;101;83;117;109;109;101;40;51;44;32;52;41; @@ -57346,7 +57352,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;83;117;109;109;101;40;120;44;32;120;32;43;32;49;41; -`,ZT=` +`,ET=` 105;110;116;32;115;117;109;109;101;32;61;32;97;32;43;32;98; @@ -57355,7 +57361,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109;109;101; -`,DT=` +`,NT=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -57378,7 +57384,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,BT=` +`,JT=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -57401,7 +57407,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;34; -`,LT=` +`,FT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -57423,7 +57429,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,WT=` +`,RT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -57445,7 +57451,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,ET=` +`,GT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -57454,7 +57460,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;112;117;110;107;116;101;91;49;93;91;48;93; -`,NT=` +`,HT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -57463,7 +57469,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;80;117;110;107;116;101;91;49;93;91;48;93; -`,JT=` +`,VT=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -57492,7 +57498,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,FT=` +`,QT=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -57515,7 +57521,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,RT=` +`,qT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -57537,7 +57543,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,GT=` +`,UT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -57559,7 +57565,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,HT=` +`,YT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -57591,7 +57597,7 @@ lösung: vb-wald-loesung.visustruct -`,VT=` +`,$T=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -57613,7 +57619,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;107;117;108;116;97;101;116; -`,QT=` +`,XT=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; @@ -57645,13 +57651,13 @@ lösung: vb-wald-loesung.visustruct -`,qT=` +`,KT=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; -`,UT=` +`,ej=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -57663,7 +57669,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,YT=` +`,tj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -57675,7 +57681,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,$T=` +`,nj=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -57684,7 +57690,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; -`,XT=` +`,ij=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -57693,7 +57699,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; -`,KT=` +`,aj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;105;110;103;97;98;101;32;34;80;97;115;115;119;111;114;116;63;34; @@ -57712,7 +57718,7 @@ lösung: vb-wald-loesung.visustruct -`,ej=` +`,sj=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -57741,7 +57747,7 @@ lösung: vb-wald-loesung.visustruct -`,tj=` +`,rj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;119;101;114;116;63;34; @@ -57761,7 +57767,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;101;34; -`,nj=` +`,oj=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -57794,7 +57800,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,ij=` +`,lj=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -57827,7 +57833,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,aj=` +`,uj=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -57869,7 +57875,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;115;117;109;109;101; -`,sj=` +`,mj=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -57891,7 +57897,7 @@ lösung: vb-wald-loesung.visustruct -`,rj=` +`,cj=` 105;110;112;117;116;58;32;105;110;116;32;103;114;101;110;122;101;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -57907,7 +57913,7 @@ lösung: vb-wald-loesung.visustruct -`,oj=` +`,dj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -57946,7 +57952,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,lj=` +`,hj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -57985,7 +57991,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,uj=` +`,gj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -58020,7 +58026,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,mj=` +`,pj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -58055,7 +58061,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,cj=` +`,fj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -58090,7 +58096,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,dj=` +`,xj=` 111;117;116;112;117;116;58;32;34;71;117;116;101;110;32;77;111;114;103;101;110;34; @@ -58099,13 +58105,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;117;116;101;32;108;101;114;110;101;110;32;119;105;114;32;83;116;114;117;107;116;111;103;114;97;109;109;101;46;34; -`,hj=` +`,bj=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;87;101;108;116;34; -`,gj=` +`,vj=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;34; @@ -58114,7 +58120,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;99;104;32;108;101;114;110;101;32;83;116;114;117;107;116;111;103;114;97;109;109;101;34; -`,pj=` +`,yj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -58134,7 +58140,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,fj=` +`,wj=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -58175,7 +58181,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;90;101;105;108;101;110;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,xj=` +`,zj=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -58184,7 +58190,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;97;117;115;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;101;105;110;107;97;117;102;45;110;101;117;46;116;120;116;34;41; -`,bj=` +`,Ij=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -58210,13 +58216,13 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,vj=` +`,kj=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; -`,yj=` +`,Sj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -58255,7 +58261,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;117;99;104;115;58;32;34;32;43;32;97;110;122;97;104;108; -`,wj=` +`,Tj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -58264,7 +58270,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,zj=` +`,jj=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -58299,7 +58305,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;228;110;103;115;116;101;114;32;69;105;110;116;114;97;103;58;32;34;32;43;32;108;97;101;110;103;115;116;101;114; -`,Ij=` +`,_j=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -58308,7 +58314,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;122;101;105;108;101;110;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,kj=` +`,Cj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -58362,7 +58368,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;101;32;78;111;116;101;32;105;110;32;69;110;103;108;105;115;99;104;58;32;34;32;43;32;98;101;115;116;101;114;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;101;78;111;116;101;32;43;32;34;41;34; -`,Sj=` +`,Aj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -58371,7 +58377,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Tj=` +`,Pj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -58412,7 +58418,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;110;105;116;116;32;77;97;116;104;101;58;32;34;32;43;32;115;117;109;109;101;32;47;32;97;110;122;97;104;108; -`,jj=` +`,Oj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -58421,7 +58427,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,_j=` +`,Mj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -58460,7 +58466,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,Cj=` +`,Zj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -58469,7 +58475,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Aj=` +`,Dj=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -58519,7 +58525,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;110;46;108;101;110;103;116;104;32;43;32;34;32;69;105;110;116;114;228;103;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Pj=` +`,Bj=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -58537,7 +58543,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,Oj=` +`,Lj=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -58590,7 +58596,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;122;101;105;108;101;110;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;84;105;101;114;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Mj=` +`,Wj=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -58611,7 +58617,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,Zj=` +`,Ej=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -58655,7 +58661,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;83;228;116;122;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Dj=` +`,Nj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -58676,7 +58682,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,Bj=` +`,Jj=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;34; @@ -58688,7 +58694,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;100;101;117;115;34; -`,Lj=` +`,Fj=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -58707,7 +58713,7 @@ lösung: vb-wald-loesung.visustruct -`,Wj=` +`,Rj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -58788,7 +58794,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,Ej=` +`,Gj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -58797,7 +58803,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,Nj=` +`,Hj=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -58862,7 +58868,7 @@ lösung: vb-wald-loesung.visustruct -`,Jj=` +`,Vj=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;116;101;105;114;111;34; @@ -58888,7 +58894,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;105;111; -`,Fj=` +`,Qj=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -58942,13 +58948,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,Rj=` +`,qj=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,Gj=` +`,Uj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;81;117;101;32;112;97;108;97;118;114;97;32;40;115;243;32;109;97;105;250;115;99;117;108;97;115;41;63;34; @@ -58979,7 +58985,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,Hj=` +`,Yj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;103;114;101;100;111;32;34;81;117;97;108;32;233;32;111;32;116;101;120;116;111;32;99;105;102;114;97;100;111;63;34; @@ -59010,7 +59016,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116;111; -`,Vj=` +`,$j=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -59046,7 +59052,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;115;115;111;115;58;32;34;32;43;32;112;97;115;115;111;115; -`,Qj=` +`,Xj=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;97;115;32;110;111;116;97;115;63;34; @@ -59074,7 +59080,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;101;100;105;97; -`,qj=` +`,Kj=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;110;250;109;101;114;111;115;63;34; @@ -59111,7 +59117,7 @@ lösung: vb-wald-loesung.visustruct -`,Uj=` +`,e_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -59130,7 +59136,7 @@ lösung: vb-wald-loesung.visustruct -`,Yj=` +`,t_=` 99;111;110;115;116;32;100;111;117;98;108;101;32;73;86;65;32;61;32;48;46;50;51; @@ -59151,7 +59157,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;114;101;99;111;67;111;109;73;118;97; -`,$j=` +`,n_=` 105;110;116;32;112;105;110;32;61;32;48; @@ -59187,7 +59193,7 @@ lösung: vb-wald-loesung.visustruct -`,Xj=` +`,i_=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -59223,7 +59229,7 @@ lösung: vb-wald-loesung.visustruct -`,Kj=` +`,a_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;49;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -59267,7 +59273,7 @@ lösung: vb-wald-loesung.visustruct -`,e_=` +`,s_=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -59321,7 +59327,7 @@ lösung: vb-wald-loesung.visustruct -`,t_=` +`,r_=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -59348,7 +59354,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;110;97;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,n_=` +`,o_=` 105;110;112;117;116;58;32;105;110;116;32;112;114;97;116;111;32;34;81;117;101;32;112;114;97;116;111;63;32;40;49;44;32;50;32;111;117;32;51;41;34; @@ -59377,7 +59383,7 @@ lösung: vb-wald-loesung.visustruct -`,i_=` +`,l_=` 105;110;116;32;110;117;109;101;114;111;49;32;61;32;52; @@ -59392,7 +59398,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,a_=` +`,u_=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -59414,7 +59420,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;109;112;97;32;111;32;113;117;97;100;114;111;58;32;34;32;43;32;110;111;109;101;115;91;115;111;114;116;101;97;100;111;32;45;32;49;93; -`,s_=` +`,m_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -59426,7 +59432,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;117;112;108;105;99;97;100;111;58;32;34;32;43;32;110;117;109;101;114;111; -`,r_=` +`,c_=` -1; @@ -59473,7 +59479,7 @@ lösung: vb-wald-loesung.visustruct -`,o_=` +`,d_=` @@ -59510,7 +59516,7 @@ lösung: vb-wald-loesung.visustruct -`,l_=` +`,h_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -59570,7 +59576,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;101;114;116;97;115;32;43;32;34;32;100;101;32;34;32;43;32;99;111;110;116;97;103;101;109;32;43;32;34;32;99;101;114;116;97;115;34; -`,u_=` +`,g_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -59579,7 +59585,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,m_=` +`,p_=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -59598,7 +59604,7 @@ lösung: vb-wald-loesung.visustruct -`,c_=` +`,f_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -59621,7 +59627,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,d_=` +`,x_=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -59639,7 +59645,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;109;97;116;101;109;97;116;105;99;97;32;43;32;34;32;97;32;77;97;116;101;109;225;116;105;99;97;34; -`,h_=` +`,b_=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;123;92;34;110;111;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;101;115;112;101;99;105;101;92;34;58;32;92;34;99;97;98;114;97;92;34;44;32;92;34;105;100;97;100;101;92;34;58;32;54;125;44;34; @@ -59657,7 +59663,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101; -`,g_=` +`,v_=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -59677,7 +59683,7 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,p_=` +`,y_=` 105;110;116;91;93;91;93;32;116;97;98;101;108;97;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -59709,7 +59715,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;97;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,f_=` +`,w_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -59757,7 +59763,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;118;114;101;115;58;32;34;32;43;32;108;105;118;114;101;115; -`,x_=` +`,z_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -59772,7 +59778,7 @@ lösung: vb-wald-loesung.visustruct 108;117;103;97;114;101;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,b_=` +`,I_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -59806,7 +59812,7 @@ lösung: vb-wald-loesung.visustruct -`,v_=` +`,k_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -59824,7 +59830,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;108;117;103;97;114;32;34;76;117;103;97;114;34; -`,y_=` +`,S_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -59872,7 +59878,7 @@ lösung: vb-wald-loesung.visustruct -`,w_=` +`,T_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -59896,7 +59902,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;108;97;32;49;44;32;108;117;103;97;114;32;50;32;118;101;110;100;105;100;111;63;32;34;32;43;32;108;117;103;97;114;101;115;91;49;93;91;50;93; -`,z_=` +`,j_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -59911,7 +59917,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; -`,I_=` +`,__=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -59926,7 +59932,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; -`,k_=` +`,C_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -59941,7 +59947,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,S_=` +`,A_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -59956,7 +59962,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,T_=` +`,P_=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -59968,7 +59974,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;105;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34; -`,j_=` +`,O_=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -59980,7 +59986,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;73;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34;41; -`,__=` +`,M_=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -59998,7 +60004,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,C_=` +`,Z_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -60013,7 +60019,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,A_=` +`,D_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;50; @@ -60028,7 +60034,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,P_=` +`,B_=` 111;117;116;112;117;116;58;32;110;117;109;101;114;111; @@ -60043,7 +60049,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;43;32;51; -`,O_=` +`,L_=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -60067,7 +60073,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,M_=` +`,W_=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -60082,7 +60088,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,Z_=` +`,E_=` 105;110;116;32;97;32;61;32;53; @@ -60106,7 +60112,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,D_=` +`,N_=` 105;110;116;32;105;100;97;100;101;32;61;32;49;52; @@ -60124,7 +60130,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,B_=` +`,J_=` 105;110;116;32;109;105;110;117;116;111;115;32;61;32;49;51;53; @@ -60139,7 +60145,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;114;97;115;32;43;32;34;32;104;111;114;97;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;109;105;110;117;116;111;115;34; -`,L_=` +`,F_=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;51; @@ -60154,7 +60160,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;112;114;101;99;111;84;111;116;97;108;32;43;32;34;32;101;117;114;111;115;34; -`,W_=` +`,R_=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -60169,7 +60175,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;116;97;58;32;34;32;43;32;115;97;108;100;111; -`,E_=` +`,G_=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -60184,7 +60190,7 @@ lösung: vb-wald-loesung.visustruct 115;97;108;100;111;32;61;32;115;97;108;100;111;32;45;32;112;114;101;99;111; -`,N_=` +`,H_=` 105;110;116;32;112;114;101;99;111;32;61;32;57; @@ -60199,7 +60205,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,J_=` +`,V_=` 105;110;116;32;102;97;116;105;97;115;32;61;32;56; @@ -60214,7 +60220,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;80;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; -`,F_=` +`,Q_=` 105;110;116;32;102;97;116;105;97;115;32;61;32;56; @@ -60229,7 +60235,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;112;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; -`,R_=` +`,q_=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;55; @@ -60250,7 +60256,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;237;109;101;116;114;111;58;32;34;32;43;32;112;101;114;105;109;101;116;114;111; -`,G_=` +`,U_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -60265,7 +60271,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,H_=` +`,Y_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -60274,7 +60280,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,V_=` +`,$_=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;53; @@ -60289,7 +60295,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,Q_=` +`,X_=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;67;111;109;111;32;116;101;32;99;104;97;109;97;115;63;34; @@ -60298,7 +60304,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101;32;43;32;34;33;34; -`,q_=` +`,K_=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -60313,7 +60319,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,U_=` +`,eC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -60325,7 +60331,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,Y_=` +`,tC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -60337,7 +60343,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;97;32;43;32;98; -`,$_=` +`,nC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -60346,7 +60352,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;105;100;97;100;101;32;43;32;49;41; -`,X_=` +`,iC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -60355,7 +60361,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;73;100;97;100;101;32;43;32;49;41; -`,K_=` +`,aC=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;115;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -60367,7 +60373,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;227;111;32;99;101;114;99;97;32;100;101;32;34;32;43;32;100;105;97;115;32;43;32;34;32;100;105;97;115;46;34; -`,eC=` +`,sC=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -60382,7 +60388,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;58;32;34;32;43;32;109;101;100;105;97; -`,tC=` +`,rC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -60403,7 +60409,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;116;111;58;32;34;32;43;32;112;114;111;100;117;116;111; -`,nC=` +`,oC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -60422,7 +60428,7 @@ lösung: vb-wald-loesung.visustruct -`,iC=` +`,lC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -60444,7 +60450,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,aC=` +`,uC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -60463,7 +60469,7 @@ lösung: vb-wald-loesung.visustruct -`,sC=` +`,mC=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -60481,7 +60487,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,rC=` +`,cC=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -60499,7 +60505,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,oC=` +`,dC=` 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; @@ -60514,7 +60520,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,lC=` +`,hC=` 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; @@ -60529,7 +60535,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,uC=` +`,gC=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -60547,7 +60553,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,mC=` +`,pC=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -60565,7 +60571,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,cC=` +`,fC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -60587,7 +60593,7 @@ lösung: vb-wald-loesung.visustruct -`,dC=` +`,xC=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;99;111;32;34;80;114;101;231;111;32;101;109;32;101;117;114;111;115;63;34; @@ -60609,7 +60615,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;112;97;103;97;114;58;32;34;32;43;32;112;114;101;99;111;32;43;32;34;32;101;117;114;111;115;34; -`,hC=` +`,bC=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -60628,7 +60634,7 @@ lösung: vb-wald-loesung.visustruct -`,gC=` +`,vC=` 105;110;112;117;116;58;32;105;110;116;32;112;111;110;116;111;115;32;34;81;117;97;110;116;111;115;32;112;111;110;116;111;115;63;34; @@ -60647,7 +60653,7 @@ lösung: vb-wald-loesung.visustruct -`,pC=` +`,yC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -60666,7 +60672,7 @@ lösung: vb-wald-loesung.visustruct -`,fC=` +`,wC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -60685,7 +60691,7 @@ lösung: vb-wald-loesung.visustruct -`,xC=` +`,zC=` 105;110;116;32;105;100;97;100;101;32;61;32;49;53; @@ -60704,7 +60710,7 @@ lösung: vb-wald-loesung.visustruct -`,bC=` +`,IC=` 105;110;116;32;105;100;97;100;101;32;61;32;49;53; @@ -60723,7 +60729,7 @@ lösung: vb-wald-loesung.visustruct -`,vC=` +`,kC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -60742,7 +60748,7 @@ lösung: vb-wald-loesung.visustruct -`,yC=` +`,SC=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -60761,7 +60767,7 @@ lösung: vb-wald-loesung.visustruct -`,wC=` +`,TC=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;32;34;65;110;111;63;34; @@ -60780,7 +60786,7 @@ lösung: vb-wald-loesung.visustruct -`,zC=` +`,jC=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;68;105;97;32;40;49;32;97;32;55;41;63;34; @@ -60799,7 +60805,7 @@ lösung: vb-wald-loesung.visustruct -`,IC=` +`,_C=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;114;32;34;68;101;32;113;117;101;32;99;111;114;32;101;115;116;225;32;111;32;115;101;109;225;102;111;114;111;63;34; @@ -60828,7 +60834,7 @@ lösung: vb-wald-loesung.visustruct -`,kC=` +`,CC=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -60857,7 +60863,7 @@ lösung: vb-wald-loesung.visustruct -`,SC=` +`,AC=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -60876,7 +60882,7 @@ lösung: vb-wald-loesung.visustruct -`,TC=` +`,PC=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -60895,7 +60901,7 @@ lösung: vb-wald-loesung.visustruct -`,jC=` +`,OC=` 105;110;116;32;100;105;97;32;61;32;55; @@ -60914,7 +60920,7 @@ lösung: vb-wald-loesung.visustruct -`,_C=` +`,MC=` 105;110;116;32;100;105;97;32;61;32;55; @@ -60933,7 +60939,7 @@ lösung: vb-wald-loesung.visustruct -`,CC=` +`,ZC=` 105;110;112;117;116;58;32;105;110;116;32;104;111;114;97;32;34;81;117;101;32;104;111;114;97;115;32;115;227;111;32;40;115;243;32;97;32;104;111;114;97;41;63;34; @@ -60952,7 +60958,7 @@ lösung: vb-wald-loesung.visustruct -`,AC=` +`,DC=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;81;117;101;32;110;111;116;97;63;34; @@ -60991,7 +60997,7 @@ lösung: vb-wald-loesung.visustruct -`,PC=` +`,BC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -61038,7 +61044,7 @@ lösung: vb-wald-loesung.visustruct -`,OC=` +`,LC=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -61077,7 +61083,7 @@ lösung: vb-wald-loesung.visustruct -`,MC=` +`,WC=` 80;244;114;32;117;109;97;32;99;104;225;118;101;110;97;32;110;97;32;109;101;115;97; @@ -61107,7 +61113,7 @@ lösung: vb-wald-loesung.visustruct 66;101;98;101;114;32;111;32;99;104;225; -`,ZC=` +`,EC=` 76;101;118;97;110;116;97;114; @@ -61122,7 +61128,7 @@ lösung: vb-wald-loesung.visustruct 84;111;109;97;114;32;111;32;112;101;113;117;101;110;111;45;97;108;109;111;231;111; -`,DC=` +`,NC=` 69;110;99;104;101;114;32;97;32;99;104;97;108;101;105;114;97;32;99;111;109;32;225;103;117;97; @@ -61143,7 +61149,7 @@ lösung: vb-wald-loesung.visustruct 84;105;114;97;114;32;97;32;115;97;113;117;101;116;97;32;100;101;32;99;104;225; -`,BC=` +`,JC=` 69;115;116;225;32;97;32;99;104;111;118;101;114;63; @@ -61162,7 +61168,7 @@ lösung: vb-wald-loesung.visustruct 83;97;105;114; -`,LC=` +`,FC=` 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; @@ -61176,7 +61182,7 @@ lösung: vb-wald-loesung.visustruct 76;101;118;97;110;116;97;114;32;111;32;112;114;97;116;111; -`,WC=` +`,RC=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;110;116;97;114;32;97;116;233;63;34; @@ -61196,7 +61202,7 @@ lösung: vb-wald-loesung.visustruct -`,EC=` +`,GC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -61216,7 +61222,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,NC=` +`,HC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -61233,7 +61239,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,JC=` +`,VC=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;116;111;114;105;97;108;32;100;101;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -61259,7 +61265,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;116;111;114;105;97;108; -`,FC=` +`,QC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -61294,7 +61300,7 @@ lösung: vb-wald-loesung.visustruct -`,RC=` +`,qC=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -61329,7 +61335,7 @@ lösung: vb-wald-loesung.visustruct -`,GC=` +`,UC=` 105;110;116;32;110;111;116;97;32;61;32;50; @@ -61353,7 +61359,7 @@ lösung: vb-wald-loesung.visustruct -`,HC=` +`,YC=` 105;110;116;32;110;111;116;97;32;61;32;50; @@ -61377,7 +61383,7 @@ lösung: vb-wald-loesung.visustruct -`,VC=` +`,$C=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -61406,7 +61412,7 @@ lösung: vb-wald-loesung.visustruct -`,QC=` +`,XC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -61429,7 +61435,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;115;115;111;115; -`,qC=` +`,KC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;48; @@ -61446,7 +61452,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;98;114;105;103;97;100;111;33;34; -`,UC=` +`,eA=` 105;110;116;32;105;32;61;32;49;48; @@ -61463,7 +61469,7 @@ lösung: vb-wald-loesung.visustruct -`,YC=` +`,tA=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -61489,7 +61495,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,$C=` +`,nA=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -61515,7 +61521,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,XC=` +`,iA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;111;110;100;101;63;34; @@ -61535,7 +61541,7 @@ lösung: vb-wald-loesung.visustruct -`,KC=` +`,aA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -61555,7 +61561,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,eA=` +`,sA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -61575,7 +61581,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,tA=` +`,rA=` 105;110;116;32;110;111;116;97;32;61;32;48; @@ -61592,7 +61598,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;116;117;97;32;110;111;116;97;58;32;34;32;43;32;110;111;116;97; -`,nA=` +`,oA=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -61615,7 +61621,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,iA=` +`,lA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -61634,7 +61640,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,aA=` +`,uA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -61653,7 +61659,7 @@ lösung: vb-wald-loesung.visustruct -`,sA=` +`,mA=` 105;110;116;32;105;32;61;32;49; @@ -61666,7 +61672,7 @@ lösung: vb-wald-loesung.visustruct -`,rA=` +`,cA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -61683,7 +61689,7 @@ lösung: vb-wald-loesung.visustruct -`,oA=` +`,dA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -61700,7 +61706,7 @@ lösung: vb-wald-loesung.visustruct -`,lA=` +`,hA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;49; @@ -61720,7 +61726,7 @@ lösung: vb-wald-loesung.visustruct -`,uA=` +`,gA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;49; @@ -61740,7 +61746,7 @@ lösung: vb-wald-loesung.visustruct -`,mA=` +`,pA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -61757,7 +61763,7 @@ lösung: vb-wald-loesung.visustruct -`,cA=` +`,fA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -61779,7 +61785,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,dA=` +`,xA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;97;115;32;108;105;110;104;97;115;63;34; @@ -61808,7 +61814,7 @@ lösung: vb-wald-loesung.visustruct -`,hA=` +`,bA=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;48; @@ -61840,7 +61846,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,gA=` +`,vA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -61872,7 +61878,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,pA=` +`,yA=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -61888,7 +61894,7 @@ lösung: vb-wald-loesung.visustruct -`,fA=` +`,wA=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -61904,7 +61910,7 @@ lösung: vb-wald-loesung.visustruct -`,xA=` +`,zA=` 105;110;116;32;97;108;116;117;114;97;32;61;32;48; @@ -61923,7 +61929,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; -`,bA=` +`,IA=` 105;110;116;32;100;101;103;114;97;117;32;61;32;49; @@ -61939,7 +61945,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; -`,vA=` +`,kA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -61955,7 +61961,7 @@ lösung: vb-wald-loesung.visustruct -`,yA=` +`,SA=` 105;110;112;117;116;58;32;105;110;116;32;108;97;114;103;117;114;97;32;34;76;97;114;103;117;114;97;34; @@ -61987,7 +61993,7 @@ lösung: vb-wald-loesung.visustruct -`,wA=` +`,TA=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -62003,7 +62009,7 @@ lösung: vb-wald-loesung.visustruct -`,zA=` +`,jA=` 105;110;116;91;93;32;118;97;108;111;114;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -62018,7 +62024,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;111;114;101;115;46;108;101;110;103;116;104; -`,IA=` +`,_A=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -62050,7 +62056,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,kA=` +`,CA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -62082,7 +62088,7 @@ lösung: vb-wald-loesung.visustruct -`,SA=` +`,AA=` 105;110;116;32;105;32;61;32;49; @@ -62105,7 +62111,7 @@ lösung: vb-wald-loesung.visustruct -`,TA=` +`,PA=` 105;110;116;32;105;32;61;32;49; @@ -62128,7 +62134,7 @@ lösung: vb-wald-loesung.visustruct -`,jA=` +`,OA=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;111;115;32;100;101;103;114;97;117;115;63;34; @@ -62157,7 +62163,7 @@ lösung: vb-wald-loesung.visustruct -`,_A=` +`,MA=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -62176,7 +62182,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;105;109;101;105;114;111;32;110;111;109;101;58;32;34;32;43;32;110;111;109;101;115;91;48;93; -`,CA=` +`,ZA=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -62202,7 +62208,7 @@ lösung: vb-wald-loesung.visustruct -`,AA=` +`,DA=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -62253,7 +62259,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,PA=` +`,BA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -62294,7 +62300,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,OA=` +`,LA=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -62317,7 +62323,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,MA=` +`,WA=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -62347,7 +62353,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,ZA=` +`,EA=` 105;110;112;117;116;58;32;105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;34;67;111;109;112;114;105;109;101;110;116;111;63;34; @@ -62362,7 +62368,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;193;114;101;97;58;32;34;32;43;32;102; -`,DA=` +`,NA=` 109;111;115;116;114;97;114;66;111;97;115;86;105;110;100;97;115;40;41; @@ -62374,7 +62380,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;82;101;115;117;108;116;97;100;111;40;41; -`,BA=` +`,JA=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -62406,7 +62412,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,LA=` +`,FA=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -62438,7 +62444,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,WA=` +`,RA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -62460,7 +62466,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,EA=` +`,GA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -62482,7 +62488,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,NA=` +`,HA=` 105;110;116;91;93;32;110;111;116;97;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -62504,7 +62510,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,JA=` +`,VA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -62516,7 +62522,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;32;113;117;97;100;114;97;100;111;32;233;32;34;32;43;32;113; -`,FA=` +`,QA=` 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;120;32;42;32;120; @@ -62525,7 +62531,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116;97;100;111; -`,RA=` +`,qA=` 109;111;115;116;114;97;114;84;105;116;117;108;111;40;41; @@ -62537,7 +62543,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101; -`,GA=` +`,UA=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;32;97;111;32;113;117;105;122;33;34; @@ -62546,7 +62552,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;97;105;115;32;116;101;114;32;116;114;234;115;32;112;101;114;103;117;110;116;97;115;46;34; -`,HA=` +`,YA=` 109;111;115;116;114;97;114;83;111;109;97;40;51;44;32;52;41; @@ -62558,7 +62564,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;83;111;109;97;40;120;44;32;120;32;43;32;49;41; -`,VA=` +`,$A=` 105;110;116;32;115;111;109;97;32;61;32;97;32;43;32;98; @@ -62567,7 +62573,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;111;109;97; -`,QA=` +`,XA=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -62590,7 +62596,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,qA=` +`,KA=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -62613,7 +62619,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;34; -`,UA=` +`,eP=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -62635,7 +62641,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,YA=` +`,tP=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -62657,7 +62663,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,$A=` +`,nP=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -62666,7 +62672,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;112;111;110;116;111;115;91;49;93;91;48;93; -`,XA=` +`,iP=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -62675,7 +62681,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;80;111;110;116;111;115;91;49;93;91;48;93; -`,KA=` +`,aP=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -62704,7 +62710,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,eP=` +`,sP=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -62727,7 +62733,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,tP=` +`,rP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -62749,7 +62755,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,nP=` +`,oP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -62771,7 +62777,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,iP=` +`,lP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -62803,7 +62809,7 @@ lösung: vb-wald-loesung.visustruct -`,aP=` +`,uP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -62825,7 +62831,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;116;111;114;105;97;108; -`,sP=` +`,mP=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; @@ -62857,13 +62863,13 @@ lösung: vb-wald-loesung.visustruct -`,rP=` +`,cP=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; -`,oP=` +`,dP=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -62875,7 +62881,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,lP=` +`,hP=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -62887,7 +62893,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,uP=` +`,gP=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -62896,7 +62902,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; -`,mP=` +`,pP=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -62905,7 +62911,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; -`,cP=` +`,fP=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;110;116;114;97;100;97;32;34;80;97;108;97;118;114;97;45;112;97;115;115;101;63;34; @@ -62924,7 +62930,7 @@ lösung: vb-wald-loesung.visustruct -`,dP=` +`,xP=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -62953,7 +62959,7 @@ lösung: vb-wald-loesung.visustruct -`,hP=` +`,bP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;63;34; @@ -62973,7 +62979,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;109;34; -`,gP=` +`,vP=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -63006,7 +63012,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,pP=` +`,yP=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -63039,7 +63045,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,fP=` +`,wP=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -63081,7 +63087,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;111;109;97; -`,xP=` +`,zP=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -63103,7 +63109,7 @@ lösung: vb-wald-loesung.visustruct -`,bP=` +`,IP=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;101;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -63119,7 +63125,7 @@ lösung: vb-wald-loesung.visustruct -`,vP=` +`,kP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -63158,7 +63164,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,yP=` +`,SP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -63197,7 +63203,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,wP=` +`,TP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -63232,7 +63238,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,zP=` +`,jP=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -63267,7 +63273,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,IP=` +`,_P=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -63302,7 +63308,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,kP=` +`,CP=` 111;117;116;112;117;116;58;32;34;66;111;109;32;100;105;97;34; @@ -63311,13 +63317,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;111;106;101;32;97;112;114;101;110;100;101;109;111;115;32;101;115;116;114;117;116;111;103;114;97;109;97;115;46;34; -`,SP=` +`,AP=` 111;117;116;112;117;116;58;32;34;79;108;225;32;77;117;110;100;111;34; -`,TP=` +`,PP=` 111;117;116;112;117;116;58;32;34;79;108;225;34; @@ -63326,7 +63332,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;115;116;111;117;32;97;32;97;112;114;101;110;100;101;114;32;101;115;116;114;117;116;111;103;114;97;109;97;115;34; -`,jP=` +`,OP=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -63367,7 +63373,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;108;105;110;104;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,_P=` +`,MP=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -63376,7 +63382,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;115;97;105;100;97;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;99;111;109;112;114;97;115;45;110;111;118;97;46;116;120;116;34;41; -`,CP=` +`,ZP=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -63402,13 +63408,13 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,AP=` +`,DP=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; -`,PP=` +`,BP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -63447,7 +63453,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;97;112;111;115;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,OP=` +`,LP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -63456,7 +63462,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,MP=` +`,WP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -63491,7 +63497,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;116;114;97;100;97;32;109;97;105;115;32;108;111;110;103;97;58;32;34;32;43;32;109;97;105;115;76;111;110;103;97; -`,ZP=` +`,EP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -63500,7 +63506,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;104;97;115;32;61;32;116;101;120;116;111;46;115;112;108;105;116;40;34;92;110;34;41; -`,DP=` +`,NP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -63554,7 +63560,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;108;104;111;114;32;110;111;116;97;32;97;32;73;110;103;108;234;115;58;32;34;32;43;32;109;101;108;104;111;114;78;111;109;101;32;43;32;34;32;40;34;32;43;32;109;101;108;104;111;114;78;111;116;97;32;43;32;34;41;34; -`,BP=` +`,JP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -63563,7 +63569,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,LP=` +`,FP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -63604,7 +63610,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;32;100;101;32;77;97;116;101;109;225;116;105;99;97;58;32;34;32;43;32;115;111;109;97;32;47;32;113;117;97;110;116;105;100;97;100;101; -`,WP=` +`,RP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -63613,7 +63619,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,EP=` +`,GP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -63652,7 +63658,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,NP=` +`,HP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -63661,7 +63667,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,JP=` +`,VP=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -63711,7 +63717,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;97;100;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,FP=` +`,QP=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -63729,7 +63735,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,RP=` +`,qP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -63782,7 +63788,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;104;97;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;105;115;32;103;117;97;114;100;97;100;111;115;34; -`,GP=` +`,UP=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -63803,7 +63809,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,HP=` +`,YP=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -63847,7 +63853,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;102;114;97;115;101;115;32;103;117;97;114;100;97;100;97;115;34; -`,VP=` +`,$P=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -63868,7 +63874,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,QP=` +`,XP=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -63880,7 +63886,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,qP=` +`,KP=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -63892,7 +63898,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;113;117;97;110;116;105;100;97;100;101;32;42;32;56;46;53; -`,UP=` +`,eO=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -63916,7 +63922,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,YP=` +`,tO=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -63937,7 +63943,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,$P=` +`,nO=` 105;110;116;32;97;32;61;32;51; @@ -63961,7 +63967,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,XP=` +`,iO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -64020,7 +64026,7 @@ lösung: vb-wald-loesung.visustruct -`,KP=` +`,aO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -64079,7 +64085,7 @@ lösung: vb-wald-loesung.visustruct -`,eO=` +`,sO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -64153,7 +64159,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,tO=` +`,rO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -64202,7 +64208,7 @@ lösung: vb-wald-loesung.visustruct -`,nO=` +`,oO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -64251,7 +64257,7 @@ lösung: vb-wald-loesung.visustruct -`,iO=` +`,lO=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -64309,7 +64315,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,aO=` +`,uO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -64328,7 +64334,7 @@ lösung: vb-wald-loesung.visustruct -`,sO=` +`,mO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -64347,7 +64353,7 @@ lösung: vb-wald-loesung.visustruct -`,rO=` +`,cO=` 105;110;116;32;105;32;61;32;48; @@ -64360,7 +64366,7 @@ lösung: vb-wald-loesung.visustruct -`,oO=` +`,dO=` 105;110;116;32;110;117;109;101;114;111;32;61;32;53; @@ -64384,7 +64390,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;112;111;105;115;58;32;34;32;43;32;102;105;108;97;91;48;93;32;43;32;34;44;32;34;32;43;32;102;105;108;97;91;49;93; -`,lO=` +`,hO=` 105;110;116;32;105;32;61;32;48; @@ -64397,7 +64403,7 @@ lösung: vb-wald-loesung.visustruct -`,uO=` +`,gO=` 120;32;61;32;120;32;42;32;50; @@ -64406,7 +64412,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;115;117;98;112;114;111;103;114;97;109;97;58;32;120;32;61;32;34;32;43;32;120; -`,mO=` +`,pO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;34; @@ -64418,7 +64424,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,cO=` +`,fO=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -64457,7 +64463,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,dO=` +`,xO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -64479,7 +64485,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;105;110;118;101;114;116;105;100;97; -`,hO=` +`,bO=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;76;117;100;119;105;103;59;98;111;100;101;59;55;34; @@ -64498,7 +64504,7 @@ lösung: vb-wald-loesung.visustruct -`,gO=` +`,vO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;114;97;115;101;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;102;114;97;115;101;34; @@ -64510,7 +64516,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;108;97;118;114;97;115;58;32;34;32;43;32;112;97;108;97;118;114;97;115;46;108;101;110;103;116;104; -`,pO=` +`,yO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -64542,7 +64548,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;101;32;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,fO=` +`,wO=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -64566,7 +64572,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;108;97;118;114;97;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,xO=` +`,zO=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -64578,7 +64584,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,bO=` +`,IO=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -64590,7 +64596,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;103;101;115;97;109;116;32;61;32;97;110;122;97;104;108;32;42;32;56;46;53; -`,vO=` +`,kO=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -64614,7 +64620,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,yO=` +`,SO=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -64635,7 +64641,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,wO=` +`,TO=` 105;110;116;32;97;32;61;32;51; @@ -64659,7 +64665,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,zO=` +`,jO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -64718,7 +64724,7 @@ lösung: vb-wald-loesung.visustruct -`,IO=` +`,_O=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -64777,7 +64783,7 @@ lösung: vb-wald-loesung.visustruct -`,kO=` +`,CO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -64851,7 +64857,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,SO=` +`,AO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -64900,7 +64906,7 @@ lösung: vb-wald-loesung.visustruct -`,TO=` +`,PO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -64949,7 +64955,7 @@ lösung: vb-wald-loesung.visustruct -`,jO=` +`,OO=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -65007,7 +65013,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,_O=` +`,MO=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -65026,7 +65032,7 @@ lösung: vb-wald-loesung.visustruct -`,CO=` +`,ZO=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -65045,7 +65051,7 @@ lösung: vb-wald-loesung.visustruct -`,AO=` +`,DO=` 105;110;116;32;105;32;61;32;48; @@ -65058,7 +65064,7 @@ lösung: vb-wald-loesung.visustruct -`,PO=` +`,BO=` 105;110;116;32;122;97;104;108;32;61;32;53; @@ -65082,7 +65088,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;97;99;104;104;101;114;58;32;34;32;43;32;114;101;105;104;101;91;48;93;32;43;32;34;44;32;34;32;43;32;114;101;105;104;101;91;49;93; -`,OO=` +`,LO=` 105;110;116;32;105;32;61;32;48; @@ -65095,7 +65101,7 @@ lösung: vb-wald-loesung.visustruct -`,MO=` +`,WO=` 120;32;61;32;120;32;42;32;50; @@ -65104,7 +65110,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;109;32;85;110;116;101;114;112;114;111;103;114;97;109;109;58;32;120;32;61;32;34;32;43;32;120; -`,ZO=` +`,EO=` 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -65113,7 +65119,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;98;115;116;97;110;100;58;32;34;32;43;32;97;98;115;116;97;110;100;32;43;32;34;32;99;109;34;41; -`,DO=` +`,NO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -65139,7 +65145,7 @@ lösung: vb-wald-loesung.visustruct -`,BO=` +`,JO=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -65166,7 +65172,7 @@ lösung: vb-wald-loesung.visustruct -`,LO=` +`,FO=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -65184,7 +65190,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,WO=` +`,RO=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -65214,7 +65220,7 @@ lösung: vb-wald-loesung.visustruct -`,EO=` +`,GO=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;97;108;108;111;33;34;41; @@ -65226,7 +65232,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;99;104;32;98;105;110;32;86;105;115;117;66;111;116;34;41; -`,NO=` +`,HO=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -65278,7 +65284,7 @@ lösung: vb-wald-loesung.visustruct -`,JO=` +`,VO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -65289,7 +65295,7 @@ lösung: vb-wald-loesung.visustruct -`,FO=` +`,QO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -65300,7 +65306,7 @@ lösung: vb-wald-loesung.visustruct -`,RO=` +`,qO=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -65311,7 +65317,7 @@ lösung: vb-wald-loesung.visustruct -`,GO=` +`,UO=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;86;105;115;117;66;111;116;34; @@ -65330,7 +65336,7 @@ lösung: vb-wald-loesung.visustruct -`,HO=` +`,YO=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;111;116;34;41; @@ -65342,7 +65348,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;252;110;34;41; -`,VO=` +`,$O=` 105;110;116;32;105;32;61;32;48; @@ -65358,7 +65364,7 @@ lösung: vb-wald-loesung.visustruct -`,QO=` +`,XO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -65386,7 +65392,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;112;97;114;107;116;33;34;41; -`,qO=` +`,KO=` 83;116;114;105;110;103;91;93;32;102;97;114;98;101;110;32;61;32;123;34;114;111;116;34;44;32;34;103;101;108;98;34;44;32;34;103;114;252;110;34;44;32;34;98;108;97;117;34;44;32;34;108;105;108;97;34;125; @@ -65402,7 +65408,7 @@ lösung: vb-wald-loesung.visustruct -`,UO=` +`,eM=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -65428,7 +65434,7 @@ lösung: vb-wald-loesung.visustruct -`,YO=` +`,tM=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -65445,7 +65451,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,$O=` +`,nM=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -65463,7 +65469,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,XO=` +`,iM=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -65499,7 +65505,7 @@ lösung: vb-wald-loesung.visustruct -`,KO=` +`,aM=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;107;107;117;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -65518,7 +65524,7 @@ lösung: vb-wald-loesung.visustruct -`,eM=` +`,sM=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -65542,7 +65548,7 @@ lösung: vb-wald-loesung.visustruct -`,tM=` +`,rM=` 105;110;116;32;105;32;61;32;48; @@ -65564,7 +65570,7 @@ lösung: vb-wald-loesung.visustruct -`,nM=` +`,oM=` 105;110;116;32;105;32;61;32;51; @@ -65583,7 +65589,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;111;115;33;34;41; -`,iM=` +`,lM=` 105;110;116;32;105;32;61;32;49; @@ -65596,7 +65602,7 @@ lösung: vb-wald-loesung.visustruct -`,aM=` +`,uM=` 105;110;116;32;105;32;61;32;48; @@ -65629,7 +65635,7 @@ lösung: vb-wald-loesung.visustruct -`,sM=` +`,mM=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -65645,7 +65651,7 @@ lösung: vb-wald-loesung.visustruct -`,rM=` +`,cM=` 105;110;116;32;105;32;61;32;48; @@ -65664,7 +65670,7 @@ lösung: vb-wald-loesung.visustruct -`,oM=` +`,dM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -65708,7 +65714,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,lM=` +`,hM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -65727,7 +65733,7 @@ lösung: vb-wald-loesung.visustruct -`,uM=` +`,gM=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -65757,7 +65763,7 @@ lösung: vb-wald-loesung.visustruct -`,mM=` +`,pM=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -65785,7 +65791,7 @@ lösung: vb-wald-loesung.visustruct -`,cM=` +`,fM=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;97;108;108;111;32;75;108;97;115;115;101;34; @@ -65794,7 +65800,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,dM=` +`,xM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -65808,7 +65814,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,hM=` +`,bM=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -65824,7 +65830,7 @@ lösung: vb-wald-loesung.visustruct -`,gM=` +`,vM=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -65838,7 +65844,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,pM=` +`,yM=` 105;110;116;32;105;32;61;32;48; @@ -65873,7 +65879,7 @@ lösung: vb-wald-loesung.visustruct -`,fM=` +`,wM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -65907,7 +65913,7 @@ lösung: vb-wald-loesung.visustruct -`,xM=` +`,zM=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -65951,7 +65957,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,bM=` +`,IM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -65977,7 +65983,7 @@ lösung: vb-wald-loesung.visustruct -`,vM=` +`,kM=` 105;110;116;91;93;32;116;111;101;110;101;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -65993,7 +65999,7 @@ lösung: vb-wald-loesung.visustruct -`,yM=` +`,SM=` 105;110;116;32;105;32;61;32;48; @@ -66059,7 +66065,7 @@ lösung: vb-wald-loesung.visustruct -`,wM=` +`,TM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -66075,7 +66081,7 @@ lösung: vb-wald-loesung.visustruct -`,zM=` +`,jM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -66092,7 +66098,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,IM=` +`,_M=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101; @@ -66121,7 +66127,7 @@ lösung: vb-wald-loesung.visustruct -`,kM=` +`,CM=` 105;110;116;32;97;32;61;32;113;117;97;100;114;97;116;122;97;104;108;40;51;41; @@ -66136,13 +66142,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,SM=` +`,AM=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,TM=` +`,PM=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;76;117;100;119;105;103;34; @@ -66164,7 +66170,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,jM=` +`,OM=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -66179,7 +66185,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;114;101;99;107;101;58;32;34;32;43;32;115;116;114;101;99;107;101;32;43;32;34;32;99;109;34; -`,_M=` +`,MM=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -66204,7 +66210,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;110;111;116;101;110;46;108;101;110;103;116;104; -`,CM=` +`,ZM=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -66279,7 +66285,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,AM=` +`,DM=` 113;117;97;100;114;97;116;40;51;48;41; @@ -66288,7 +66294,7 @@ lösung: vb-wald-loesung.visustruct 113;117;97;100;114;97;116;40;53;48;41; -`,PM=` +`,BM=` 105;110;116;32;105;32;61;32;48; @@ -66343,7 +66349,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,OM=` +`,LM=` 105;110;116;32;105;32;61;32;48; @@ -66359,7 +66365,7 @@ lösung: vb-wald-loesung.visustruct -`,MM=` +`,WM=` 105;110;116;32;105;32;61;32;48; @@ -66382,7 +66388,7 @@ lösung: vb-wald-loesung.visustruct -`,ZM=` +`,EM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -66396,7 +66402,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,DM=` +`,NM=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -66412,7 +66418,7 @@ lösung: vb-wald-loesung.visustruct -`,BM=` +`,JM=` 105;110;116;32;105;32;61;32;48; @@ -66464,7 +66470,7 @@ lösung: vb-wald-loesung.visustruct -`,LM=` +`,FM=` 105;110;116;32;105;32;61;32;49; @@ -66480,7 +66486,7 @@ lösung: vb-wald-loesung.visustruct -`,WM=` +`,RM=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -66494,7 +66500,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,EM=` +`,GM=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -66512,7 +66518,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,NM=` +`,HM=` 105;110;116;32;105;32;61;32;48; @@ -66534,7 +66540,7 @@ lösung: vb-wald-loesung.visustruct -`,JM=` +`,VM=` 105;110;116;32;108;105;110;107;115;32;61;32;57;57; @@ -66566,7 +66572,7 @@ lösung: vb-wald-loesung.visustruct -`,FM=` +`,QM=` 105;110;116;32;115;101;105;116;101;32;61;32;51;48; @@ -66585,7 +66591,7 @@ lösung: vb-wald-loesung.visustruct -`,RM=` +`,qM=` 105;110;116;32;105;32;61;32;48; @@ -66618,7 +66624,7 @@ lösung: vb-wald-loesung.visustruct -`,GM=` +`,UM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -66657,7 +66663,7 @@ lösung: vb-wald-loesung.visustruct -`,HM=` +`,YM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -66673,7 +66679,7 @@ lösung: vb-wald-loesung.visustruct -`,VM=` +`,$M=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -66693,7 +66699,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,QM=` +`,XM=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;34; @@ -66705,7 +66711,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,qM=` +`,KM=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;90;105;101;103;101;110;98;111;99;107;34; @@ -66744,7 +66750,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,UM=` +`,eZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -66766,7 +66772,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,YM=` +`,tZ=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;76;117;100;119;105;103;59;71;101;105;223;98;111;99;107;59;55;34; @@ -66785,7 +66791,7 @@ lösung: vb-wald-loesung.visustruct -`,$M=` +`,nZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;97;116;122;32;34;83;97;116;122;32;101;105;110;103;101;98;101;110;34; @@ -66797,7 +66803,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;246;114;116;101;114;58;32;34;32;43;32;119;111;101;114;116;101;114;46;108;101;110;103;116;104; -`,XM=` +`,iZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -66829,7 +66835,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;32;101;58;32;34;32;43;32;97;110;122;97;104;108; -`,KM=` +`,aZ=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;71;101;105;223;98;111;99;107;34; @@ -66853,14 +66859,14 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;116;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,eZ=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. +`,sZ=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. raster: 3 .......Z #####.## ........ ##.##### >....... -`,tZ=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. +`,rZ=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. raster: 3 ........Z ######.## @@ -66869,20 +66875,20 @@ raster: 3 ......... .######## >........ -`,nZ=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. +`,oZ=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. raster: 3 Z.... ###.. ..... ..### ^.... -`,iZ=`// Fahre bis Rot: kurzer Weg +`,lZ=`// Fahre bis Rot: kurzer Weg ..... ..r.. ..... ..... ..^.. -`,aZ=`// Fahre bis Rot: erst kommt ein grünes Feld +`,uZ=`// Fahre bis Rot: erst kommt ein grünes Feld ..... ..r.. ..... @@ -66891,21 +66897,21 @@ Z.... ..... ..... ..^.. -`,sZ=`// Bis Blau, bei Grün piepen +`,mZ=`// Bis Blau, bei Grün piepen ..... ..b.. ..... ..g.. ..... ..^.. -`,rZ=`// Bis Blau, ohne grünes Feld +`,cZ=`// Bis Blau, ohne grünes Feld ..... ..b.. ..... ..... ..... ..^.. -`,oZ=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. +`,dZ=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. ......... .....r... .....o... @@ -66916,7 +66922,7 @@ Z.... ......... ......... ..^...... -`,lZ=`// Hindernis ausweichen: zwei Klötze im Weg. +`,hZ=`// Hindernis ausweichen: zwei Klötze im Weg. ......... .......r. .......o. @@ -66931,7 +66937,7 @@ Z.... ......... ......... .^....... -`,uZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. +`,gZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. ........... .Z......... ........... @@ -66943,7 +66949,7 @@ Z.... ........... .........<. ........... -`,mZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. +`,pZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. ........... .........Z. ........... @@ -66955,7 +66961,7 @@ Z.... ........... .>......... ........... -`,cZ=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. +`,fZ=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. ######### ......... ......... @@ -66970,7 +66976,7 @@ Z.... ......... ..^...... linie: 2,12 2,8 4,5 4,0.6 -`,dZ=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. +`,xZ=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. ######### ......... ......... @@ -66985,7 +66991,7 @@ linie: 2,12 2,8 4,5 4,0.6 ......... ......^.. linie: 6,12 6,8 4,5 4,0.6 -`,hZ=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. +`,bZ=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. ......... .....r... .....o... @@ -66999,7 +67005,7 @@ linie: 6,12 6,8 4,5 4,0.6 ......... ..^...... linie: 2,11 2,8 5,4 5,1.5 -`,gZ=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. +`,vZ=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. ........... ...r....... ...o....... @@ -67015,7 +67021,7 @@ linie: 2,11 2,8 5,4 5,1.5 ........... .......^... linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 -`,pZ=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. +`,yZ=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. #....#### #....#### #....#### @@ -67028,7 +67034,7 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,fZ=`// Einparken: Die Lücke liegt weiter vorn. +`,wZ=`// Einparken: Die Lücke liegt weiter vorn. #....#### #..b....# #.....o.# @@ -67041,14 +67047,14 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,xZ=`// Bis zur Linie: der schwarze Rand ist nah +`,zZ=`// Bis zur Linie: der schwarze Rand ist nah ..... ===== ..... ..... ..^.. ..... -`,bZ=`// Bis zur Linie: der schwarze Rand ist weiter weg +`,IZ=`// Bis zur Linie: der schwarze Rand ist weiter weg ..... ===== ..... @@ -67058,17 +67064,17 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 ..... ..^.. ..... -`,vZ=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. +`,kZ=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. raster: 3 ......... >#.#.#.#Z ......... -`,yZ=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. +`,SZ=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. raster: 3 ..#..###. >....o... ....##### -`,wZ=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. +`,TZ=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. raster: 3 .#.#. .#o#. @@ -67076,12 +67082,12 @@ raster: 3 .#... ..... ..^.. -`,zZ=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. +`,jZ=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. raster: 3 .......... >..#.#..#Z .......... -`,IZ=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. +`,_Z=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. raster: 3 .Z. .#. @@ -67090,7 +67096,7 @@ raster: 3 ... ... .^. -`,kZ=`// Wand vorn? Vor dem mBot2 ist viel Platz. +`,CZ=`// Wand vorn? Vor dem mBot2 ist viel Platz. ##### ..... ..... @@ -67100,14 +67106,14 @@ raster: 3 ..... ..^.. ..... -`,SZ=`// Bis zur Wand: kurzer Weg +`,AZ=`// Bis zur Wand: kurzer Weg ##### ..... ..Z.. ..... ..... ..^.. -`,TZ=`// Bis zur Wand: langer Weg +`,PZ=`// Bis zur Wand: langer Weg ##### ..... ..Z.. @@ -67123,7 +67129,7 @@ raster: 3 ..... ..... ..^.. -`,jZ=`// Bis zur Wand: mittlerer Weg +`,OZ=`// Bis zur Wand: mittlerer Weg ##### ..... ..Z.. @@ -67134,26 +67140,26 @@ raster: 3 ..... ..... ..^.. -`,_Z=`// Wand vorn? Die Wand steht direkt vor dem mBot2. +`,MZ=`// Wand vorn? Die Wand steht direkt vor dem mBot2. ##### ..... ..^.. ..... -`,CZ=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? +`,ZZ=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? ..... ..... ..... ..o.. ..... ..^.. -`,AZ=`// Fahre bis zum Ziel: kurzer Weg, keine Wand +`,DZ=`// Fahre bis zum Ziel: kurzer Weg, keine Wand ..... ..Z.. ..... ..... ..^.. ..... -`,PZ=`// Fahre bis zum Ziel: langer Weg, keine Wand +`,BZ=`// Fahre bis zum Ziel: langer Weg, keine Wand ..... ..Z.. ..... @@ -67166,37 +67172,37 @@ raster: 3 ..... ..^.. ..... -`,OZ=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,MZ=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,ZZ=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,DZ=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,BZ=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,LZ=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,WZ=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,EZ=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,NZ=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,JZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",FZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",RZ=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,GZ=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,HZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",VZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",QZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",qZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",UZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",YZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",$Z="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",XZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",KZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",eD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",tD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",nD=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,iD=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,aD=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,sD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",rD=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,oD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",lD=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,uD=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,mD=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,cD=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,dD=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,hD=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,gD=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,pD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",fD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",xD=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,bD=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,vD=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,yD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",wD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",zD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",ID="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",kD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmhpbGY8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",SD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPnRlbXA8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",TD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmF1eDwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9Ijk3IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPC9nPgo8ZyBzdHJva2U9IiMxZjNhOGEiIHN0cm9rZS13aWR0aD0iMS42IiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiPgo8cGF0aCBkPSJNMTAwIDgzIFExOTAgODEgMzAwIDg0Ii8+CjxwYXRoIGQ9Ik0xNjIgNTYgUTE2MCAxNTAgMTYzIDE5NCIvPgo8cGF0aCBkPSJNMjI4IDU2IFEyMzAgMTUwIDIyNyAxOTQiLz4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMCAyMzIpIHJvdGF0ZSgtMzgpIj4KPHJlY3QgeD0iMCIgeT0iLTkiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIGZpbGw9IiNmNWMwMDAiIHN0cm9rZT0iIzhhNmQwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjAiIHkxPSItMyIgeDI9IjEyMCIgeTI9Ii0zIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIxMjAiIHkyPSIzIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8cmVjdCB4PSIxMjAiIHk9Ii05IiB3aWR0aD0iMTIiIGhlaWdodD0iMTgiIGZpbGw9IiNiOGI4YjgiIHN0cm9rZT0iIzc3NyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHJlY3QgeD0iMTMyIiB5PSItOSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE4IiByeD0iNSIgZmlsbD0iI2YwOGE5YSIgc3Ryb2tlPSIjYTI0YTU4IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNMCAtOSBMLTI2IDAgTDAgOSBaIiBmaWxsPSIjZTljOWEwIiBzdHJva2U9IiM4YTZkNGEiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxwYXRoIGQ9Ik0tMTcgLTMgTC0yNiAwIEwtMTcgMyBaIiBmaWxsPSIjMzMzIi8+CjwvZz4KPC9zdmc+Cg==",jD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",_D="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",CD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",AD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",PD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",OD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",MD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",ZD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",DD=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,BD=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,LD=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,WD=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,ED=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,ND="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",JD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",FD=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,RD=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,GD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",HD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",VD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",QD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",qD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",UD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",YD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",$D="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",XD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",KD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",tB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,nB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,iB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,aB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",rB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",lB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,uB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,mB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,cB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,dB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",hB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,gB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",pB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function fB(i){const e=[];for(const t of i.replace(/\r\n/g,` +`,LZ=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,WZ=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,EZ=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,NZ=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,JZ=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,FZ=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,RZ=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,GZ=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,HZ=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,VZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",QZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",qZ=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,UZ=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,YZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",$Z="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",XZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",KZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",eD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",tD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",nD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",iD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",aD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",sD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",rD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",oD=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,lD=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,uD=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,mD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",cD=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,dD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",hD=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,gD=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,pD=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,fD=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,xD=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,bD=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,vD=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,yD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",wD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",zD=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,ID=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,kD=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,SD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",TD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",jD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",_D="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",CD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmhpbGY8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",AD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPnRlbXA8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",PD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmF1eDwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9Ijk3IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPC9nPgo8ZyBzdHJva2U9IiMxZjNhOGEiIHN0cm9rZS13aWR0aD0iMS42IiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiPgo8cGF0aCBkPSJNMTAwIDgzIFExOTAgODEgMzAwIDg0Ii8+CjxwYXRoIGQ9Ik0xNjIgNTYgUTE2MCAxNTAgMTYzIDE5NCIvPgo8cGF0aCBkPSJNMjI4IDU2IFEyMzAgMTUwIDIyNyAxOTQiLz4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMCAyMzIpIHJvdGF0ZSgtMzgpIj4KPHJlY3QgeD0iMCIgeT0iLTkiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIGZpbGw9IiNmNWMwMDAiIHN0cm9rZT0iIzhhNmQwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjAiIHkxPSItMyIgeDI9IjEyMCIgeTI9Ii0zIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIxMjAiIHkyPSIzIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8cmVjdCB4PSIxMjAiIHk9Ii05IiB3aWR0aD0iMTIiIGhlaWdodD0iMTgiIGZpbGw9IiNiOGI4YjgiIHN0cm9rZT0iIzc3NyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHJlY3QgeD0iMTMyIiB5PSItOSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE4IiByeD0iNSIgZmlsbD0iI2YwOGE5YSIgc3Ryb2tlPSIjYTI0YTU4IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNMCAtOSBMLTI2IDAgTDAgOSBaIiBmaWxsPSIjZTljOWEwIiBzdHJva2U9IiM4YTZkNGEiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxwYXRoIGQ9Ik0tMTcgLTMgTC0yNiAwIEwtMTcgMyBaIiBmaWxsPSIjMzMzIi8+CjwvZz4KPC9zdmc+Cg==",OD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",MD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",ZD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",DD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",BD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",LD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",WD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",ED="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",ND=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,JD=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,FD=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,RD=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,GD=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,HD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",VD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",QD=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,qD=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,UD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",YD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",$D="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",XD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",KD="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",iB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",rB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,oB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,lB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,uB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,mB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",cB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,dB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",hB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,gB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,pB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,fB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,xB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",bB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,vB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",yB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function wB(i){const e=[];for(const t of i.replace(/\r\n/g,` `).split(` -`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const xB=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Hu(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class Eo extends Error{}function bB(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function vB(i,e,t){const n=h=>{throw new Eo(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` +`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const zB=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Uu(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class No extends Error{}function IB(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function kB(i,e,t){const n=h=>{throw new No(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` `:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten):\s*(.*)$/.exec(g);if(f){const[,v,w]=f;v==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?v==="frage"?c.question=w:v==="fehler"?c.wrongLine=Number(w):v==="besser"?c.fix=w:v==="klicks"?c.clicks=w.split(",").map(z=>z.trim()).filter(Boolean):v==="richtig"?c.rightText=w:n(`„${v}:“ gehört vor die erste Runde.`):v==="titel"?a=w:v==="intro"?s=w:v==="antworten"?o=w.split("|").map(z=>z.trim()):v==="frage"?r=w:v==="zeit"?l=Number(w):v==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${v}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` `),right:!!b[1]}):g.startsWith(">")?x.explanation+=(x.explanation?" ":"")+g.slice(1).trim():n(`Unbekannte Zeile im Spiel: „${g}“`)}return a||n("Das Spiel braucht eine Zeile „titel:“."),m.length||n("Das Spiel braucht mindestens eine „runde:“."),m.forEach((h,g)=>{if(h.code=h.code.replace(/\n+$/,""),i==="bombe"){const f=h.code.split(` -`),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>eg(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=tg(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);yB(f,h.clicks)}catch(f){if(f instanceof Eo)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function eg(i,e="",t=n=>{throw new Eo(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ga='"((?:[^"\\\\]|\\\\.)*)"';function tg(i){const e=i.split(` -`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:No(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:No(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function No(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return No(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return ag(i,e,n.name)}function ag(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])sg(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function yB(i,e){const t=ng(i);return e.map(n=>ig(i,t,n))}function sg(i,e,t,n){if(typeof i!="string"){for(const s of wB(i.condition,e,n)?i.then:i.otherwise)sg(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String(Yn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Yn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[Qu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=Qu(a[1],e),r=Number(Yn(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function wB(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String(Yn(n[2],e,t))===String(Yn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Yn(n[1],e,t)),s=Number(Yn(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function Qu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Yn(i,e,t){const n=i.match(new RegExp(`${Ga}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class zB extends Error{}const vs="___";function IB(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function kB(i,e){const t=_=>{throw new zB(`${e}: ${_}`)},n=(_,M)=>{const O=/^(\d+)\s+(\d+)$/.exec(_.trim());return!O||Number(O[1])<1||Number(O[2])<1?t(`${M}: „${_}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(O[1])-1,col:Number(O[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const _ of i){const M=_.trim();if(g&&(/^( {4}|\t)/.test(_)||M==="")){const P=_.replace(/^( {4}|\t)/,"");if(g==="station"){const C=c[c.length-1];C.code+=(C.code?` +`),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>ag(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=sg(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);SB(f,h.clicks)}catch(f){if(f instanceof No)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function ag(i,e="",t=n=>{throw new No(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ha='"((?:[^"\\\\]|\\\\.)*)"';function sg(i){const e=i.split(` +`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:Jo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Jo(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function Jo(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return Jo(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return lg(i,e,n.name)}function lg(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])ug(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function SB(i,e){const t=rg(i);return e.map(n=>og(i,t,n))}function ug(i,e,t,n){if(typeof i!="string"){for(const s of TB(i.condition,e,n)?i.then:i.otherwise)ug(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String(Yn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Yn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[$u(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=$u(a[1],e),r=Number(Yn(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function TB(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String(Yn(n[2],e,t))===String(Yn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Yn(n[1],e,t)),s=Number(Yn(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function $u(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Yn(i,e,t){const n=i.match(new RegExp(`${Ha}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class jB extends Error{}const ws="___";function _B(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function CB(i,e){const t=_=>{throw new jB(`${e}: ${_}`)},n=(_,M)=>{const O=/^(\d+)\s+(\d+)$/.exec(_.trim());return!O||Number(O[1])<1||Number(O[2])<1?t(`${M}: „${_}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(O[1])-1,col:Number(O[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const _ of i){const M=_.trim();if(g&&(/^( {4}|\t)/.test(_)||M==="")){const P=_.replace(/^( {4}|\t)/,"");if(g==="station"){const C=c[c.length-1];C.code+=(C.code?` `:"")+P}else u+=(u?` -`:"")+P;continue}if(g=void 0,!M)continue;const O=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(M);if(O){const[,P,C]=O;if(P==="station")c.push({name:C,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=C,f="crossword";else if(P==="tor")l=C,f="gate",g="gate";else if(P==="titel")a=C;else if(P==="intro")s=C;else if(P==="alphabet")r=C;else if(P==="ende")m=C;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=C.split(",").map(B=>n(B,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const B=c[c.length-1];P==="frage"?B.question=C:P==="tipp"?B.hint=C:P==="zahl"?B.answer=/^-?\d+$/.test(C)?Number(C):t(`Station „${B.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(B,n(C,`Station „${B.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(M);P||t(`Kreuzworträtsel: „${M}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&M.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+M.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${M}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(vs)||t(`Der Code bei „tor:“ braucht ${vs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(_=>_.row+(_.across?1:_.word.length))),b=Math.max(...d.map(_=>_.col+(_.across?_.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const _ of d)[..._.word].forEach((M,O)=>{const P=_.row+(_.across?0:O),C=_.col+(_.across?O:0);v[P][C]&&v[P][C]!==M&&t(`Kreuzworträtsel: ${_.word} passt in Zeile ${P+1}, Spalte ${C+1} nicht (dort steht ${v[P][C]}).`),v[P][C]=M});const w=[...new Set(d.map(_=>_.row*b+_.col))].sort((_,M)=>_-M),z=d.map(_=>({..._,number:w.indexOf(_.row*b+_.col)+1})),I=(_,M)=>{var O;return((O=v[_])==null?void 0:O[M])??""},k=h.map(({row:_,col:M})=>I(_,M)||t(`lösung: In Zeile ${_+1}, Spalte ${M+1} ist kein Feld.`)).join(""),S=c.map(_=>{_.code||t(`Station „${_.name}“: Code fehlt.`),_.question||t(`Station „${_.name}“: „frage:“ fehlt.`),_.answer===void 0&&t(`Station „${_.name}“: „zahl:“ fehlt.`),_.row===void 0&&t(`Station „${_.name}“: „feld:“ fehlt.`);const M=r.charAt(_.answer);M||t(`Station „${_.name}“: alphabet.charAt(${_.answer}) gibt es nicht.`);const O=I(_.row,_.col);return O!==M&&t(`Station „${_.name}“: alphabet.charAt(${_.answer}) ist ${M}, im Feld ${_.row+1} ${_.col+1} steht aber „${O}“.`),_.code=_.code.replace(/\n+$/,""),_});return{title:a,intro:s,alphabet:r,stations:S,crosswordText:o,rows:x,cols:b,words:z,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const SB=/\[\[(.+?)\]\]/g;function TB(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>jB(o.slice(r),e,t.title))}),!_B(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function jB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(SB)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function _B(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function CB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const qu={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function AB(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in qu){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:qu[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=BB(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:OB,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:MB,h:s},n.side!==void 0&&(e[n.side]={x:ZB,y:t+s/2,w:DB,h:40}),t+=s+Uu}),{boxes:e,height:t-Uu+10}}function rg(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));ln(B,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const B=c[c.length-1];P==="frage"?B.question=C:P==="tipp"?B.hint=C:P==="zahl"?B.answer=/^-?\d+$/.test(C)?Number(C):t(`Station „${B.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(B,n(C,`Station „${B.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(M);P||t(`Kreuzworträtsel: „${M}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&M.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+M.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${M}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(ws)||t(`Der Code bei „tor:“ braucht ${ws} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(_=>_.row+(_.across?1:_.word.length))),b=Math.max(...d.map(_=>_.col+(_.across?_.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const _ of d)[..._.word].forEach((M,O)=>{const P=_.row+(_.across?0:O),C=_.col+(_.across?O:0);v[P][C]&&v[P][C]!==M&&t(`Kreuzworträtsel: ${_.word} passt in Zeile ${P+1}, Spalte ${C+1} nicht (dort steht ${v[P][C]}).`),v[P][C]=M});const w=[...new Set(d.map(_=>_.row*b+_.col))].sort((_,M)=>_-M),z=d.map(_=>({..._,number:w.indexOf(_.row*b+_.col)+1})),I=(_,M)=>{var O;return((O=v[_])==null?void 0:O[M])??""},k=h.map(({row:_,col:M})=>I(_,M)||t(`lösung: In Zeile ${_+1}, Spalte ${M+1} ist kein Feld.`)).join(""),S=c.map(_=>{_.code||t(`Station „${_.name}“: Code fehlt.`),_.question||t(`Station „${_.name}“: „frage:“ fehlt.`),_.answer===void 0&&t(`Station „${_.name}“: „zahl:“ fehlt.`),_.row===void 0&&t(`Station „${_.name}“: „feld:“ fehlt.`);const M=r.charAt(_.answer);M||t(`Station „${_.name}“: alphabet.charAt(${_.answer}) gibt es nicht.`);const O=I(_.row,_.col);return O!==M&&t(`Station „${_.name}“: alphabet.charAt(${_.answer}) ist ${M}, im Feld ${_.row+1} ${_.col+1} steht aber „${O}“.`),_.code=_.code.replace(/\n+$/,""),_});return{title:a,intro:s,alphabet:r,stations:S,crosswordText:o,rows:x,cols:b,words:z,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const AB=/\[\[(.+?)\]\]/g;function PB(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>OB(o.slice(r),e,t.title))}),!MB(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function OB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(AB)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function MB(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function ZB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const Xu={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function DB(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in Xu){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:Xu[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=JB(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:LB,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:WB,h:s},n.side!==void 0&&(e[n.side]={x:EB,y:t+s/2,w:NB,h:40}),t+=s+Ku}),{boxes:e,height:t-Ku+10}}function mg(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));l|→)\s*/);if(t.length!==2)throw new ne(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function EB(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in Ct))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof Ct[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return ug({inputs:[],expected:[],sensors:t},e[2])}function ug(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=ls(Ih(t.join(", ")))),i}function NB(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(WB(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ne(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:ls(Ih(l))})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(ug({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ne(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ne(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:Z3(l)})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(EB(l))}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ne(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ne(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ne(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` +`).slice(t[0].length)}}function RB(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new ne(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function GB(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in Ct))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof Ct[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return hg({inputs:[],expected:[],sensors:t},e[2])}function hg(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=us(jh(t.join(", ")))),i}function HB(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(RB(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ne(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:us(jh(l))})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(hg({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ne(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ne(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:W3(l)})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(GB(l))}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ne(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ne(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ne(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` `+s.trim():n.hints[n.hints.length-1]+=` `+s.trim():s.trim()===""&&a==="task"&&(n.task+=` -`)}if(!n.title)throw new ne(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ne(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function JB(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ne(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ne(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ne(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ne(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ne(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function mg(i,e){const t=[],n=i.split(` +`)}if(!n.title)throw new ne(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ne(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function VB(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ne(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ne(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ne(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ne(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ne(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function gg(i,e){const t=[],n=i.split(` `);let a=[];const s=()=>{const r=a.join(` -`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ne(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ne(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ne(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:NB(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>FB(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:JB(l,e)});break;case"bild":if(!c)throw new ne(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ne(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/);t.push({kind:"graphic",file:d,...h?{labeled:h}:{},caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` -`).trim()});break;case"spiel":try{if(bB(c))t.push({kind:"roundGame",game:vB(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:kB(l,e)});else{if(c)throw new ne(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:wb(l,e)})}}catch(d){throw new ne(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:TB(l,e)})}catch(d){throw new ne(d.message)}break;case"pap":try{t.push({kind:"pap",pap:AB(l,e)})}catch(d){throw new ne(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` -`).trim(),tip:!0});break;case"caesar":{const d=c?Number(c):3;if(!Number.isInteger(d)||d<0||d>25)throw new ne(`${e}: „::: caesar“ braucht einen Schlüssel von 0 bis 25.`);t.push({kind:"caesar",key:d,text:l.join(" ").trim()});break}case"mbot2":{const d={kind:"robotModel",focus:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*(fokus|focus|ansicht|view|drehen|spin):\s*(.*)$/i.exec(h);if(!g)throw new ne(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=Yu(g[2],e):f==="ansicht"||f==="view"?d.view=g[2].trim().toLowerCase():d.spin=/^(ja|yes|true|sim)$/i.test(g[2].trim())}t.push(d);break}case"mbot2quiz":{const d={kind:"robotQuiz",tasks:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*-\s*(\w+)\s*:\s*(.+)$/.exec(h),f=/^\s*(fertig|done):\s*(.+)$/i.exec(h);if(g)d.tasks.push({part:Yu(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new ne(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new ne(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new ne(`${e}: „::: datei“ braucht einen Dateinamen wie brief.txt, liste.csv oder daten.json.`);for(;l.length&&l[0].trim()==="";)l.shift();for(;l.length&&l[l.length-1].trim()==="";)l.pop();t.push({kind:"textFile",name:c,content:l.join(` -`)});break}default:throw new ne(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function FB(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function RB(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ne(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ne(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ne(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function GB(i,e){var c;const{meta:t,body:n}=lg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ne(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:mg(l.lines.join(` +`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ne(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ne(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ne(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:HB(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>QB(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:VB(l,e)});break;case"bild":if(!c)throw new ne(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ne(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/);t.push({kind:"graphic",file:d,...h?{labeled:h}:{},caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` +`).trim()});break;case"spiel":try{if(IB(c))t.push({kind:"roundGame",game:kB(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:CB(l,e)});else{if(c)throw new ne(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:Tb(l,e)})}}catch(d){throw new ne(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:PB(l,e)})}catch(d){throw new ne(d.message)}break;case"pap":try{t.push({kind:"pap",pap:DB(l,e)})}catch(d){throw new ne(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` +`).trim(),tip:!0});break;case"caesar":{const d=c?Number(c):3;if(!Number.isInteger(d)||d<0||d>25)throw new ne(`${e}: „::: caesar“ braucht einen Schlüssel von 0 bis 25.`);t.push({kind:"caesar",key:d,text:l.join(" ").trim()});break}case"mbot2":{const d={kind:"robotModel",focus:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*(fokus|focus|ansicht|view|drehen|spin):\s*(.*)$/i.exec(h);if(!g)throw new ne(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=em(g[2],e):f==="ansicht"||f==="view"?d.view=g[2].trim().toLowerCase():d.spin=/^(ja|yes|true|sim)$/i.test(g[2].trim())}t.push(d);break}case"mbot2quiz":{const d={kind:"robotQuiz",tasks:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*-\s*(\w+)\s*:\s*(.+)$/.exec(h),f=/^\s*(fertig|done):\s*(.+)$/i.exec(h);if(g)d.tasks.push({part:em(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new ne(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new ne(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new ne(`${e}: „::: datei“ braucht einen Dateinamen wie brief.txt, liste.csv oder daten.json.`);for(;l.length&&l[0].trim()==="";)l.shift();for(;l.length&&l[l.length-1].trim()==="";)l.pop();t.push({kind:"textFile",name:c,content:l.join(` +`)});break}default:throw new ne(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function QB(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function qB(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ne(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ne(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ne(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function UB(i,e){var c;const{meta:t,body:n}=dg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ne(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:gg(l.lines.join(` `),e)})};for(const d of n.split(` -`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ne(`${e}: Keine Schritte (## Überschrift) gefunden.`);RB(r,e);const m=t.get("titel");if(!m)throw new ne(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function HB(i,e){const{meta:t,body:n}=lg(i,e),a=t.get("titel");if(!a)throw new ne(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:mg(n,e)}}function Yu(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!L3(n))throw new ne(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${kh.join(", ")}.`);return t}const VB=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":_b,"../../lessons/de/02-der-editor.md":Cb,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Ab,"../../lessons/de/04-variablen-und-datentypen.md":Pb,"../../lessons/de/05-sequenz.md":Ob,"../../lessons/de/06-eingabe-und-ausgabe.md":Mb,"../../lessons/de/07-simulation-und-schreibtischtest.md":Zb,"../../lessons/de/08-verzweigung.md":Db,"../../lessons/de/09-bedingungen-verknuepfen.md":Bb,"../../lessons/de/10-fallauswahl.md":Lb,"../../lessons/de/11-while-schleife.md":Wb,"../../lessons/de/12-do-while-schleife.md":Eb,"../../lessons/de/13-for-schleife.md":Nb,"../../lessons/de/14-verschachteln.md":Jb,"../../lessons/de/15-arrays.md":Fb,"../../lessons/de/16-zweidimensionale-arrays.md":Rb,"../../lessons/de/17-zeichenketten.md":Gb,"../../lessons/de/18-aufruf-und-aussprung.md":Hb,"../../lessons/de/19-suchen-und-sortieren.md":Vb,"../../lessons/de/20-java.md":Qb,"../../lessons/de/21-python-und-javascript.md":qb,"../../lessons/de/22-try-und-catch.md":Ub,"../../lessons/de/23-text-einlesen-und-speichern.md":Yb,"../../lessons/de/24-zeile-fuer-zeile.md":$b,"../../lessons/de/25-tabellen-als-csv.md":Xb,"../../lessons/de/26-json.md":Kb,"../../lessons/de/27-formate-im-vergleich.md":e4,"../../lessons/de/28-erstes-fenster.md":t4,"../../lessons/de/29-knopf-im-fenster.md":n4,"../../lessons/de/30-der-knopf-reagiert.md":i4,"../../lessons/de/31-zahl-verdoppeln.md":a4,"../../lessons/de/32-klickzaehler.md":s4,"../../lessons/de/33-ampel.md":r4,"../../lessons/de/34-notenrechner.md":o4,"../../lessons/de/35-taschenrechner.md":l4,"../../lessons/de/36-zahlenraten.md":u4,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":m4,"../../lessons/de/38-innere-klassen.md":c4,"../../lessons/de/39-zwei-reiter.md":d4,"../../lessons/de/40-model-view-controller.md":h4,"../../lessons/de/begriffe.md":g4,"../../lessons/de/nachschlagen.md":p4,"../../lessons/en/01-was-ist-ein-struktogramm.md":f4,"../../lessons/en/02-der-editor.md":x4,"../../lessons/en/03-speichern-oeffnen-exportieren.md":b4,"../../lessons/en/04-variablen-und-datentypen.md":v4,"../../lessons/en/05-sequenz.md":y4,"../../lessons/en/06-eingabe-und-ausgabe.md":w4,"../../lessons/en/07-simulation-und-schreibtischtest.md":z4,"../../lessons/en/08-verzweigung.md":I4,"../../lessons/en/09-bedingungen-verknuepfen.md":k4,"../../lessons/en/10-fallauswahl.md":S4,"../../lessons/en/11-while-schleife.md":T4,"../../lessons/en/12-do-while-schleife.md":j4,"../../lessons/en/13-for-schleife.md":_4,"../../lessons/en/14-verschachteln.md":C4,"../../lessons/en/15-arrays.md":A4,"../../lessons/en/16-zweidimensionale-arrays.md":P4,"../../lessons/en/17-zeichenketten.md":O4,"../../lessons/en/18-aufruf-und-aussprung.md":M4,"../../lessons/en/19-suchen-und-sortieren.md":Z4,"../../lessons/en/20-java.md":D4,"../../lessons/en/21-python-und-javascript.md":B4,"../../lessons/en/22-try-und-catch.md":L4,"../../lessons/en/23-text-einlesen-und-speichern.md":W4,"../../lessons/en/24-zeile-fuer-zeile.md":E4,"../../lessons/en/25-tabellen-als-csv.md":N4,"../../lessons/en/26-json.md":J4,"../../lessons/en/27-formate-im-vergleich.md":F4,"../../lessons/en/28-erstes-fenster.md":R4,"../../lessons/en/29-knopf-im-fenster.md":G4,"../../lessons/en/30-der-knopf-reagiert.md":H4,"../../lessons/en/31-zahl-verdoppeln.md":V4,"../../lessons/en/32-klickzaehler.md":Q4,"../../lessons/en/33-ampel.md":q4,"../../lessons/en/34-notenrechner.md":U4,"../../lessons/en/35-taschenrechner.md":Y4,"../../lessons/en/36-zahlenraten.md":$4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":X4,"../../lessons/en/38-innere-klassen.md":K4,"../../lessons/en/39-zwei-reiter.md":ev,"../../lessons/en/40-model-view-controller.md":tv,"../../lessons/en/begriffe.md":nv,"../../lessons/en/nachschlagen.md":iv,"../../lessons/pt/01-was-ist-ein-struktogramm.md":av,"../../lessons/pt/02-der-editor.md":sv,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":rv,"../../lessons/pt/04-variablen-und-datentypen.md":ov,"../../lessons/pt/05-sequenz.md":lv,"../../lessons/pt/06-eingabe-und-ausgabe.md":uv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":mv,"../../lessons/pt/08-verzweigung.md":cv,"../../lessons/pt/09-bedingungen-verknuepfen.md":dv,"../../lessons/pt/10-fallauswahl.md":hv,"../../lessons/pt/11-while-schleife.md":gv,"../../lessons/pt/12-do-while-schleife.md":pv,"../../lessons/pt/13-for-schleife.md":fv,"../../lessons/pt/14-verschachteln.md":xv,"../../lessons/pt/15-arrays.md":bv,"../../lessons/pt/16-zweidimensionale-arrays.md":vv,"../../lessons/pt/17-zeichenketten.md":yv,"../../lessons/pt/18-aufruf-und-aussprung.md":wv,"../../lessons/pt/19-suchen-und-sortieren.md":zv,"../../lessons/pt/20-java.md":Iv,"../../lessons/pt/21-python-und-javascript.md":kv,"../../lessons/pt/22-try-und-catch.md":Sv,"../../lessons/pt/23-text-einlesen-und-speichern.md":Tv,"../../lessons/pt/24-zeile-fuer-zeile.md":jv,"../../lessons/pt/25-tabellen-als-csv.md":_v,"../../lessons/pt/26-json.md":Cv,"../../lessons/pt/27-formate-im-vergleich.md":Av,"../../lessons/pt/28-erstes-fenster.md":Pv,"../../lessons/pt/29-knopf-im-fenster.md":Ov,"../../lessons/pt/30-der-knopf-reagiert.md":Mv,"../../lessons/pt/31-zahl-verdoppeln.md":Zv,"../../lessons/pt/32-klickzaehler.md":Dv,"../../lessons/pt/33-ampel.md":Bv,"../../lessons/pt/34-notenrechner.md":Lv,"../../lessons/pt/35-taschenrechner.md":Wv,"../../lessons/pt/36-zahlenraten.md":Ev,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":Nv,"../../lessons/pt/38-innere-klassen.md":Jv,"../../lessons/pt/39-zwei-reiter.md":Fv,"../../lessons/pt/40-model-view-controller.md":Rv,"../../lessons/pt/begriffe.md":Gv,"../../lessons/pt/nachschlagen.md":Hv}),QB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":Vv,"../../lessons/de/aufgaben/ballwurf.md":Qv,"../../lessons/de/aufgaben/bestenliste.md":qv,"../../lessons/de/aufgaben/binaerzahl.md":Uv,"../../lessons/de/aufgaben/caesar.md":Yv,"../../lessons/de/aufgaben/collatz.md":$v,"../../lessons/de/aufgaben/einheitenrechner.md":Xv,"../../lessons/de/aufgaben/fibonacci.md":Kv,"../../lessons/de/aufgaben/gerade-ungerade.md":ey,"../../lessons/de/aufgaben/mehrwertsteuer.md":ty,"../../lessons/de/aufgaben/notendurchschnitt.md":ny,"../../lessons/de/aufgaben/pin-pruefen.md":iy,"../../lessons/de/aufgaben/schiffe-versenken.md":ay,"../../lessons/de/aufgaben/speisekarte.md":sy,"../../lessons/de/aufgaben/summe-bilden.md":ry,"../../lessons/de/aufgaben/tafeldienst.md":oy,"../../lessons/de/aufgaben/taschenrechner.md":ly,"../../lessons/de/aufgaben/verleih-menue.md":uy,"../../lessons/de/aufgaben/vokabeltrainer.md":my,"../../lessons/de/aufgaben/volljaehrig.md":cy,"../../lessons/de/aufgaben/wuerfel-mvc.md":dy,"../../lessons/de/aufgaben/zahl-verdoppeln.md":hy,"../../lessons/en/aufgaben/alter-unterprogramm.md":gy,"../../lessons/en/aufgaben/ballwurf.md":py,"../../lessons/en/aufgaben/bestenliste.md":fy,"../../lessons/en/aufgaben/binaerzahl.md":xy,"../../lessons/en/aufgaben/caesar.md":by,"../../lessons/en/aufgaben/collatz.md":vy,"../../lessons/en/aufgaben/einheitenrechner.md":yy,"../../lessons/en/aufgaben/fibonacci.md":wy,"../../lessons/en/aufgaben/gerade-ungerade.md":zy,"../../lessons/en/aufgaben/mehrwertsteuer.md":Iy,"../../lessons/en/aufgaben/notendurchschnitt.md":ky,"../../lessons/en/aufgaben/pin-pruefen.md":Sy,"../../lessons/en/aufgaben/schiffe-versenken.md":Ty,"../../lessons/en/aufgaben/speisekarte.md":jy,"../../lessons/en/aufgaben/summe-bilden.md":_y,"../../lessons/en/aufgaben/tafeldienst.md":Cy,"../../lessons/en/aufgaben/taschenrechner.md":Ay,"../../lessons/en/aufgaben/verleih-menue.md":Py,"../../lessons/en/aufgaben/vokabeltrainer.md":Oy,"../../lessons/en/aufgaben/volljaehrig.md":My,"../../lessons/en/aufgaben/wuerfel-mvc.md":Zy,"../../lessons/en/aufgaben/zahl-verdoppeln.md":Dy,"../../lessons/pt/aufgaben/alter-unterprogramm.md":By,"../../lessons/pt/aufgaben/ballwurf.md":Ly,"../../lessons/pt/aufgaben/bestenliste.md":Wy,"../../lessons/pt/aufgaben/binaerzahl.md":Ey,"../../lessons/pt/aufgaben/caesar.md":Ny,"../../lessons/pt/aufgaben/collatz.md":Jy,"../../lessons/pt/aufgaben/einheitenrechner.md":Fy,"../../lessons/pt/aufgaben/fibonacci.md":Ry,"../../lessons/pt/aufgaben/gerade-ungerade.md":Gy,"../../lessons/pt/aufgaben/mehrwertsteuer.md":Hy,"../../lessons/pt/aufgaben/notendurchschnitt.md":Vy,"../../lessons/pt/aufgaben/pin-pruefen.md":Qy,"../../lessons/pt/aufgaben/schiffe-versenken.md":qy,"../../lessons/pt/aufgaben/speisekarte.md":Uy,"../../lessons/pt/aufgaben/summe-bilden.md":Yy,"../../lessons/pt/aufgaben/tafeldienst.md":$y,"../../lessons/pt/aufgaben/taschenrechner.md":Xy,"../../lessons/pt/aufgaben/verleih-menue.md":Ky,"../../lessons/pt/aufgaben/vokabeltrainer.md":e9,"../../lessons/pt/aufgaben/volljaehrig.md":t9,"../../lessons/pt/aufgaben/wuerfel-mvc.md":n9,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":i9}),$u=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":a9,"../../lessons/de/visubot/02-das-quadrat.md":s9,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":r9,"../../lessons/de/visubot/04-sensoren.md":o9,"../../lessons/de/visubot/05-bis-zur-wand.md":l9,"../../lessons/de/visubot/06-abstand.md":u9,"../../lessons/de/visubot/07-linie.md":m9,"../../lessons/de/visubot/08-farben.md":c9,"../../lessons/de/visubot/09-fallauswahl.md":d9,"../../lessons/de/visubot/10-tasten-joystick.md":h9,"../../lessons/de/visubot/11-licht.md":g9,"../../lessons/de/visubot/12-lautstaerke.md":p9,"../../lessons/de/visubot/13-neigung.md":f9,"../../lessons/de/visubot/14-leds.md":x9,"../../lessons/de/visubot/15-einzelne-leds.md":b9,"../../lessons/de/visubot/16-lautsprecher.md":v9,"../../lessons/de/visubot/17-arrays-melodie.md":y9,"../../lessons/de/visubot/18-bildschirm.md":w9,"../../lessons/de/visubot/19-zeichenketten.md":z9,"../../lessons/de/visubot/20-motoren.md":I9,"../../lessons/de/visubot/21-stoppuhr-akku.md":k9,"../../lessons/de/visubot/22-eigene-methoden.md":S9,"../../lessons/de/visubot/nachschlagen.md":T9,"../../lessons/en/visubot/01-der-mbot2.md":j9,"../../lessons/en/visubot/02-das-quadrat.md":_9,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":C9,"../../lessons/en/visubot/04-sensoren.md":A9,"../../lessons/en/visubot/05-bis-zur-wand.md":P9,"../../lessons/en/visubot/06-abstand.md":O9,"../../lessons/en/visubot/07-linie.md":M9,"../../lessons/en/visubot/08-farben.md":Z9,"../../lessons/en/visubot/09-fallauswahl.md":D9,"../../lessons/en/visubot/10-tasten-joystick.md":B9,"../../lessons/en/visubot/11-licht.md":L9,"../../lessons/en/visubot/12-lautstaerke.md":W9,"../../lessons/en/visubot/13-neigung.md":E9,"../../lessons/en/visubot/14-leds.md":N9,"../../lessons/en/visubot/15-einzelne-leds.md":J9,"../../lessons/en/visubot/16-lautsprecher.md":F9,"../../lessons/en/visubot/17-arrays-melodie.md":R9,"../../lessons/en/visubot/18-bildschirm.md":G9,"../../lessons/en/visubot/19-zeichenketten.md":H9,"../../lessons/en/visubot/20-motoren.md":V9,"../../lessons/en/visubot/21-stoppuhr-akku.md":Q9,"../../lessons/en/visubot/22-eigene-methoden.md":q9,"../../lessons/en/visubot/nachschlagen.md":U9}),qB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":Y9,"../../lessons/de/visubot/aufgaben/ausgang.md":$9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":X9,"../../lessons/de/visubot/aufgaben/dreieck.md":K9,"../../lessons/de/visubot/aufgaben/einparken.md":ew,"../../lessons/de/visubot/aufgaben/hindernis.md":tw,"../../lessons/de/visubot/aufgaben/knight-rider.md":nw,"../../lessons/de/visubot/aufgaben/labyrinth.md":iw,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":aw,"../../lessons/de/visubot/aufgaben/morsen.md":sw,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":rw,"../../lessons/de/visubot/aufgaben/slalom.md":ow,"../../lessons/de/visubot/aufgaben/spirale.md":lw,"../../lessons/de/visubot/aufgaben/treppe.md":uw,"../../lessons/de/visubot/aufgaben/tunnel.md":mw,"../../lessons/de/visubot/aufgaben/wald.md":cw,"../../lessons/en/visubot/aufgaben/alarmanlage.md":dw,"../../lessons/en/visubot/aufgaben/ausgang.md":hw,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":gw,"../../lessons/en/visubot/aufgaben/dreieck.md":pw,"../../lessons/en/visubot/aufgaben/einparken.md":fw,"../../lessons/en/visubot/aufgaben/hindernis.md":xw,"../../lessons/en/visubot/aufgaben/knight-rider.md":bw,"../../lessons/en/visubot/aufgaben/labyrinth.md":vw,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":yw,"../../lessons/en/visubot/aufgaben/morsen.md":ww,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":zw,"../../lessons/en/visubot/aufgaben/slalom.md":Iw,"../../lessons/en/visubot/aufgaben/spirale.md":kw,"../../lessons/en/visubot/aufgaben/treppe.md":Sw,"../../lessons/en/visubot/aufgaben/tunnel.md":Tw,"../../lessons/en/visubot/aufgaben/wald.md":jw}),UB=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":_w,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":Cw,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":Aw,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":Pw,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":Ow,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":Mw,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":Zw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":Dw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":Bw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":Lw,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":Ww,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":Ew,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":Nw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":Jw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":Fw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":Rw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":Gw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":Hw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":Vw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":Qw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":qw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":Uw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":Yw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":$w,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":Xw,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":Kw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":e5,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":t5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":n5,"../../lessons/diagramme/dt-buffered.visustruct":i5,"../../lessons/diagramme/dt-csv.visustruct":a5,"../../lessons/diagramme/dt-json.visustruct":s5,"../../lessons/diagramme/dt-lesen.visustruct":r5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":o5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":l5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":u5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":m5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":c5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":d5,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":h5,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":g5,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":p5,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":f5,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":x5,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":b5,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":v5,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":y5,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":w5,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":z5,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":I5,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":k5,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":S5,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":T5,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":j5,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":_5,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":C5,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":A5,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":P5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":O5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":M5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":Z5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":D5,"../../lessons/diagramme/en/dt-buffered.visustruct":B5,"../../lessons/diagramme/en/dt-csv.visustruct":L5,"../../lessons/diagramme/en/dt-json.visustruct":W5,"../../lessons/diagramme/en/dt-lesen.visustruct":E5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":N5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":J5,"../../lessons/diagramme/en/kino-frei-start.visustruct":F5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":R5,"../../lessons/diagramme/en/kino-karte-start.visustruct":G5,"../../lessons/diagramme/en/kino-saalplan.visustruct":H5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":V5,"../../lessons/diagramme/en/l04-gross-klein-loesung.visustruct":Q5,"../../lessons/diagramme/en/l04-gross-klein-start.visustruct":q5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":U5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":Y5,"../../lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct":$5,"../../lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct":X5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":K5,"../../lessons/diagramme/en/l04-rechnen.visustruct":ez,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":tz,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":nz,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":iz,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":az,"../../lessons/diagramme/en/l04-tauschen.visustruct":sz,"../../lessons/diagramme/en/l05-datentypen.visustruct":rz,"../../lessons/diagramme/en/l05-division.visustruct":oz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":lz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":uz,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":mz,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":cz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct":dz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct":hz,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":gz,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":pz,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":fz,"../../lessons/diagramme/en/l05-sequenz.visustruct":xz,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":bz,"../../lessons/diagramme/en/l06-eva.visustruct":vz,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":yz,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":wz,"../../lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct":zz,"../../lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct":Iz,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":kz,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":Sz,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":Tz,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":jz,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":_z,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":Cz,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":Az,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":Pz,"../../lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct":Oz,"../../lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct":Mz,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":Zz,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":Dz,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":Bz,"../../lessons/diagramme/en/l07-rabatt.visustruct":Lz,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":Wz,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Ez,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":Nz,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":Jz,"../../lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct":Fz,"../../lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct":Rz,"../../lessons/diagramme/en/l08-jugendticket.visustruct":Gz,"../../lessons/diagramme/en/l08-note.visustruct":Hz,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":Vz,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":Qz,"../../lessons/diagramme/en/l09-ampel.visustruct":qz,"../../lessons/diagramme/en/l09-automat.visustruct":Uz,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":Yz,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":$z,"../../lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct":Xz,"../../lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct":Kz,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":e6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":t6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":n6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":i6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":a6,"../../lessons/diagramme/en/l1-sequenz.visustruct":s6,"../../lessons/diagramme/en/l1-tee.visustruct":r6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":o6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":l6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":u6,"../../lessons/diagramme/en/l10-countdown.visustruct":m6,"../../lessons/diagramme/en/l10-endlos.visustruct":c6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":d6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":h6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":g6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct":p6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct":f6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":x6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":b6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":v6,"../../lessons/diagramme/en/l11-einmal.visustruct":y6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":w6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":z6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":I6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct":k6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct":S6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":T6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":j6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":_6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":C6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":A6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":P6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":O6,"../../lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct":M6,"../../lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct":Z6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":D6,"../../lessons/diagramme/en/l12-summe.visustruct":B6,"../../lessons/diagramme/en/l13-dreieck.visustruct":L6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":W6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":E6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":N6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":J6,"../../lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct":F6,"../../lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct":R6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":G6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":H6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":V6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":Q6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":q6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":U6,"../../lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct":Y6,"../../lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct":$6,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":X6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":K6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":eI,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":tI,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":nI,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":iI,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":aI,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":sI,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":rI,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":oI,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":lI,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":uI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct":mI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct":cI,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":dI,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":hI,"../../lessons/diagramme/en/l15-quadrat.visustruct":gI,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":pI,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":fI,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":xI,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":bI,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":vI,"../../lessons/diagramme/en/l16-countdown-start.visustruct":yI,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":wI,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":zI,"../../lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct":II,"../../lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct":kI,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":SI,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":TI,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":jI,"../../lessons/diagramme/en/l16-summe-start.visustruct":_I,"../../lessons/diagramme/en/l17-beispiel.visustruct":CI,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":AI,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":PI,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":OI,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":MI,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":ZI,"../../lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct":DI,"../../lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct":BI,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":LI,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":WI,"../../lessons/diagramme/en/l18-beispiel.visustruct":EI,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":NI,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":JI,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":FI,"../../lessons/diagramme/en/l18-js-loesung.visustruct":RI,"../../lessons/diagramme/en/l18-python-loesung.visustruct":GI,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":HI,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":VI,"../../lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct":QI,"../../lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct":qI,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":UI,"../../lessons/diagramme/en/l2-ausgabe.visustruct":YI,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":$I,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":XI,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":KI,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":e7,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":t7,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":n7,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":i7,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":a7,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":s7,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":r7,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":o7,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":l7,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":u7,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":m7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":c7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":d7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":h7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":g7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":p7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":f7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":x7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":b7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":v7,"../../lessons/diagramme/en/sim-kino-start.visustruct":y7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":w7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":z7,"../../lessons/diagramme/en/sim-tausch.visustruct":I7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":k7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":S7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":T7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":j7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":_7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":C7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":A7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":P7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":O7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":M7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":Z7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":D7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":ek,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":tk,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":nk,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":ik,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":ak,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":sk,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":rk,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":ok,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":lk,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":uk,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":mk,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":ck,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":dk,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":hk,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":gk,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":pk,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":fk,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":xk,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":bk,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":vk,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":yk,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":wk,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":zk,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":Ik,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":kk,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":Sk,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":Tk,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":jk,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":_k,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":Ck,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":Ak,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":Pk,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":Ok,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":Mk,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":Zk,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":Dk,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":Bk,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":Lk,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":Wk,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":Ek,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":Nk,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":Jk,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":Fk,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":Rk,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":Gk,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":Hk,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":Vk,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":Qk,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":qk,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":Uk,"../../lessons/diagramme/en/zk-mehr.visustruct":Yk,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":$k,"../../lessons/diagramme/en/zk-split.visustruct":Xk,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":Kk,"../../lessons/diagramme/en/zk-zaehlen.visustruct":e8,"../../lessons/diagramme/en/zk-zeichen.visustruct":t8,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":n8,"../../lessons/diagramme/kino-frei-loesung.visustruct":i8,"../../lessons/diagramme/kino-frei-start.visustruct":a8,"../../lessons/diagramme/kino-karte-loesung.visustruct":s8,"../../lessons/diagramme/kino-karte-start.visustruct":r8,"../../lessons/diagramme/kino-saalplan.visustruct":o8,"../../lessons/diagramme/kino-verkaufen.visustruct":l8,"../../lessons/diagramme/l04-gross-klein-loesung.visustruct":u8,"../../lessons/diagramme/l04-gross-klein-start.visustruct":m8,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":c8,"../../lessons/diagramme/l04-java-fehler-start.visustruct":d8,"../../lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct":h8,"../../lessons/diagramme/l04-java-laeuft-nicht-start.visustruct":g8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":p8,"../../lessons/diagramme/l04-rechnen.visustruct":f8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":x8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":b8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":v8,"../../lessons/diagramme/l04-tauschen-start.visustruct":y8,"../../lessons/diagramme/l04-tauschen.visustruct":w8,"../../lessons/diagramme/l05-datentypen.visustruct":z8,"../../lessons/diagramme/l05-division.visustruct":I8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":k8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":S8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":T8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":j8,"../../lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct":_8,"../../lessons/diagramme/l05-java-laeuft-nicht-start.visustruct":C8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":A8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":P8,"../../lessons/diagramme/l05-sekunden-start.visustruct":O8,"../../lessons/diagramme/l05-sequenz.visustruct":M8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":Z8,"../../lessons/diagramme/l06-eva.visustruct":D8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":B8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":L8,"../../lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct":W8,"../../lessons/diagramme/l06-java-laeuft-nicht-start.visustruct":E8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":N8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":J8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":F8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":R8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":G8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":H8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":V8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":Q8,"../../lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct":q8,"../../lessons/diagramme/l07-java-laeuft-nicht-start.visustruct":U8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":Y8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":$8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":X8,"../../lessons/diagramme/l07-rabatt.visustruct":K8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":eS,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":tS,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":nS,"../../lessons/diagramme/l08-java-fehler-start.visustruct":iS,"../../lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct":aS,"../../lessons/diagramme/l08-java-laeuft-nicht-start.visustruct":sS,"../../lessons/diagramme/l08-jugendticket.visustruct":rS,"../../lessons/diagramme/l08-note.visustruct":oS,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":lS,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":uS,"../../lessons/diagramme/l09-ampel.visustruct":mS,"../../lessons/diagramme/l09-automat.visustruct":cS,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":dS,"../../lessons/diagramme/l09-java-fehler-start.visustruct":hS,"../../lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct":gS,"../../lessons/diagramme/l09-java-laeuft-nicht-start.visustruct":pS,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":fS,"../../lessons/diagramme/l09-note-loesung.visustruct":xS,"../../lessons/diagramme/l09-rechner-loesung.visustruct":bS,"../../lessons/diagramme/l09-verschachtelt.visustruct":vS,"../../lessons/diagramme/l1-grundbausteine.visustruct":yS,"../../lessons/diagramme/l1-sequenz.visustruct":wS,"../../lessons/diagramme/l1-tee.visustruct":zS,"../../lessons/diagramme/l1-verzweigung.visustruct":IS,"../../lessons/diagramme/l1-wiederholung.visustruct":kS,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":SS,"../../lessons/diagramme/l10-countdown.visustruct":TS,"../../lessons/diagramme/l10-endlos.visustruct":jS,"../../lessons/diagramme/l10-fakultaet.visustruct":_S,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":CS,"../../lessons/diagramme/l10-java-fehler-start.visustruct":AS,"../../lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct":PS,"../../lessons/diagramme/l10-java-laeuft-nicht-start.visustruct":OS,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":MS,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":ZS,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":DS,"../../lessons/diagramme/l11-einmal.visustruct":BS,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":LS,"../../lessons/diagramme/l11-java-fehler-start.visustruct":WS,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":ES,"../../lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct":NS,"../../lessons/diagramme/l11-java-laeuft-nicht-start.visustruct":JS,"../../lessons/diagramme/l11-note-loesung.visustruct":FS,"../../lessons/diagramme/l11-summe-loesung.visustruct":RS,"../../lessons/diagramme/l12-countdown-loesung.visustruct":GS,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":HS,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":VS,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":QS,"../../lessons/diagramme/l12-java-fehler-start.visustruct":qS,"../../lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct":US,"../../lessons/diagramme/l12-java-laeuft-nicht-start.visustruct":YS,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":$S,"../../lessons/diagramme/l12-summe.visustruct":XS,"../../lessons/diagramme/l13-dreieck.visustruct":KS,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":eT,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":tT,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":nT,"../../lessons/diagramme/l13-java-fehler-start.visustruct":iT,"../../lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct":aT,"../../lessons/diagramme/l13-java-laeuft-nicht-start.visustruct":sT,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":rT,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":oT,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":lT,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":uT,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":mT,"../../lessons/diagramme/l14-java-fehler-start.visustruct":cT,"../../lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct":dT,"../../lessons/diagramme/l14-java-laeuft-nicht-start.visustruct":hT,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":gT,"../../lessons/diagramme/l14-namen-eingeben.visustruct":pT,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":fT,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":xT,"../../lessons/diagramme/l14-summe-maximum.visustruct":bT,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":vT,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":yT,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":wT,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":zT,"../../lessons/diagramme/l15-hauptprogramm.visustruct":IT,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":kT,"../../lessons/diagramme/l15-java-fehler-start.visustruct":ST,"../../lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct":TT,"../../lessons/diagramme/l15-java-laeuft-nicht-start.visustruct":jT,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":_T,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":CT,"../../lessons/diagramme/l15-quadrat.visustruct":AT,"../../lessons/diagramme/l15-titel-loesung.visustruct":PT,"../../lessons/diagramme/l15-unterprogramm.visustruct":OT,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":MT,"../../lessons/diagramme/l15-zeige-summe.visustruct":ZT,"../../lessons/diagramme/l16-countdown-loesung.visustruct":DT,"../../lessons/diagramme/l16-countdown-start.visustruct":BT,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":LT,"../../lessons/diagramme/l16-java-fehler-start.visustruct":WT,"../../lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct":ET,"../../lessons/diagramme/l16-java-laeuft-nicht-start.visustruct":NT,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":JT,"../../lessons/diagramme/l16-schreibtisch.visustruct":FT,"../../lessons/diagramme/l16-summe-loesung.visustruct":RT,"../../lessons/diagramme/l16-summe-start.visustruct":GT,"../../lessons/diagramme/l17-beispiel.visustruct":HT,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":VT,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":QT,"../../lessons/diagramme/l17-java-brief-start.visustruct":qT,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":UT,"../../lessons/diagramme/l17-java-fehler-start.visustruct":YT,"../../lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct":$T,"../../lessons/diagramme/l17-java-laeuft-nicht-start.visustruct":XT,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":KT,"../../lessons/diagramme/l17-ticket-loesung.visustruct":ej,"../../lessons/diagramme/l18-beispiel.visustruct":tj,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":nj,"../../lessons/diagramme/l18-java-fehler-start.visustruct":ij,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":aj,"../../lessons/diagramme/l18-js-loesung.visustruct":sj,"../../lessons/diagramme/l18-python-loesung.visustruct":rj,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":oj,"../../lessons/diagramme/l19-java-fehler-start.visustruct":lj,"../../lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct":uj,"../../lessons/diagramme/l19-java-laeuft-nicht-start.visustruct":mj,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":cj,"../../lessons/diagramme/l2-ausgabe.visustruct":dj,"../../lessons/diagramme/l2-hallo-loesung.visustruct":hj,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":gj,"../../lessons/diagramme/l20-countdown-loesung.visustruct":pj,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":fj,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":xj,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":bj,"../../lessons/diagramme/l23-java-nummern-start.visustruct":vj,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":yj,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":wj,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":zj,"../../lessons/diagramme/l24-java-laengster-start.visustruct":Ij,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":kj,"../../lessons/diagramme/l25-java-beste-start.visustruct":Sj,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":Tj,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":jj,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":_j,"../../lessons/diagramme/l26-java-namen-start.visustruct":Cj,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":Aj,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":Pj,"../../lessons/diagramme/l27-java-json-loesung.visustruct":Oj,"../../lessons/diagramme/l27-java-json-start.visustruct":Mj,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":Zj,"../../lessons/diagramme/l27-java-saetze-start.visustruct":Dj,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":Bj,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":Lj,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":Wj,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":Ej,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":Nj,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":Jj,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":Fj,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":Rj,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":Gj,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":Hj,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":Vj,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":Qj,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":qj,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":Uj,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":Yj,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":$j,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":Xj,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":Kj,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":m_,"../../lessons/diagramme/pt/dt-buffered.visustruct":c_,"../../lessons/diagramme/pt/dt-csv.visustruct":d_,"../../lessons/diagramme/pt/dt-json.visustruct":h_,"../../lessons/diagramme/pt/dt-lesen.visustruct":g_,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":p_,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":f_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":x_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":b_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":v_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":y_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":w_,"../../lessons/diagramme/pt/l04-gross-klein-loesung.visustruct":z_,"../../lessons/diagramme/pt/l04-gross-klein-start.visustruct":I_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":k_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":S_,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct":T_,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct":j_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":__,"../../lessons/diagramme/pt/l04-rechnen.visustruct":C_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":A_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":P_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":O_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":M_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":Z_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":D_,"../../lessons/diagramme/pt/l05-division.visustruct":B_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":L_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":W_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":E_,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":N_,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct":J_,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct":F_,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":R_,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":G_,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":H_,"../../lessons/diagramme/pt/l05-sequenz.visustruct":V_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":Q_,"../../lessons/diagramme/pt/l06-eva.visustruct":q_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":U_,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":Y_,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct":$_,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct":X_,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":K_,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":eC,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":tC,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":nC,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":iC,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":aC,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":sC,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":rC,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct":oC,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct":lC,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":uC,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":mC,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":cC,"../../lessons/diagramme/pt/l07-rabatt.visustruct":dC,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":hC,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":gC,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":pC,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":fC,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct":xC,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct":bC,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":vC,"../../lessons/diagramme/pt/l08-note.visustruct":yC,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":wC,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":zC,"../../lessons/diagramme/pt/l09-ampel.visustruct":IC,"../../lessons/diagramme/pt/l09-automat.visustruct":kC,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":SC,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":TC,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct":jC,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct":_C,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":CC,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":AC,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":PC,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":OC,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":MC,"../../lessons/diagramme/pt/l1-sequenz.visustruct":ZC,"../../lessons/diagramme/pt/l1-tee.visustruct":DC,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":BC,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":LC,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":WC,"../../lessons/diagramme/pt/l10-countdown.visustruct":EC,"../../lessons/diagramme/pt/l10-endlos.visustruct":NC,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":JC,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":FC,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":RC,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct":GC,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct":HC,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":VC,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":QC,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":qC,"../../lessons/diagramme/pt/l11-einmal.visustruct":UC,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":YC,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":$C,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":XC,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct":KC,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct":eA,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":tA,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":nA,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":iA,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":aA,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":sA,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":rA,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":oA,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct":lA,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct":uA,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":mA,"../../lessons/diagramme/pt/l12-summe.visustruct":cA,"../../lessons/diagramme/pt/l13-dreieck.visustruct":dA,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":hA,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":gA,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":pA,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":fA,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct":xA,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct":bA,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":vA,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":yA,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":wA,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":zA,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":IA,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":kA,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct":SA,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct":TA,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":jA,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":_A,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":CA,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":AA,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":PA,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":OA,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":MA,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":ZA,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":DA,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":BA,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":LA,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct":WA,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct":EA,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":NA,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":JA,"../../lessons/diagramme/pt/l15-quadrat.visustruct":FA,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":RA,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":GA,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":HA,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":VA,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":QA,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":qA,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":UA,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":YA,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct":$A,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct":XA,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":KA,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":eP,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":tP,"../../lessons/diagramme/pt/l16-summe-start.visustruct":nP,"../../lessons/diagramme/pt/l17-beispiel.visustruct":iP,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":aP,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":sP,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":rP,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":oP,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":lP,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct":uP,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct":mP,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":cP,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":dP,"../../lessons/diagramme/pt/l18-beispiel.visustruct":hP,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":gP,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":pP,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":fP,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":xP,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":bP,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":vP,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":yP,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct":wP,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct":zP,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":IP,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":kP,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":SP,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":TP,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":jP,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":_P,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":CP,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":AP,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":PP,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":OP,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":MP,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":ZP,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":DP,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":BP,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":LP,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":WP,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":EP,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":NP,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":JP,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":FP,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":RP,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":GP,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":HP,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":VP,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":QP,"../../lessons/diagramme/pt/sim-kino-start.visustruct":qP,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":UP,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":YP,"../../lessons/diagramme/pt/sim-tausch.visustruct":$P,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":XP,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":KP,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":eO,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":tO,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":nO,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":iO,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":aO,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":sO,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":rO,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":oO,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":lO,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":uO,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":mO,"../../lessons/diagramme/pt/zk-mehr.visustruct":cO,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":dO,"../../lessons/diagramme/pt/zk-split.visustruct":hO,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":gO,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":pO,"../../lessons/diagramme/pt/zk-zeichen.visustruct":fO,"../../lessons/diagramme/sim-kino-loesung.visustruct":xO,"../../lessons/diagramme/sim-kino-start.visustruct":bO,"../../lessons/diagramme/sim-tausch-loesung.visustruct":vO,"../../lessons/diagramme/sim-tausch-start.visustruct":yO,"../../lessons/diagramme/sim-tausch.visustruct":wO,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":zO,"../../lessons/diagramme/ss-absteigend-start.visustruct":IO,"../../lessons/diagramme/ss-binaere-suche.visustruct":kO,"../../lessons/diagramme/ss-bubblesort.visustruct":SO,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":TO,"../../lessons/diagramme/ss-lineare-suche.visustruct":jO,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":_O,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":CO,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":AO,"../../lessons/diagramme/uebergabe-haupt.visustruct":PO,"../../lessons/diagramme/uebergabe-leeren.visustruct":OO,"../../lessons/diagramme/uebergabe-verdopple.visustruct":MO,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":ZO,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":DO,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":BO,"../../lessons/diagramme/vb-ampel-loesung.visustruct":LO,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":WO,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":EO,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":NO,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":JO,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":FO,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":RO,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":GO,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":HO,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":VO,"../../lessons/diagramme/vb-einparken-loesung.visustruct":QO,"../../lessons/diagramme/vb-farben-loesung.visustruct":qO,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":UO,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":YO,"../../lessons/diagramme/vb-gerade-loesung.visustruct":$O,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":XO,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":KO,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":eM,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":tM,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":nM,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":iM,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":aM,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":sM,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":rM,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":oM,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":lM,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":uM,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":mM,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":cM,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":dM,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":hM,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":gM,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":pM,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":fM,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":xM,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":bM,"../../lessons/diagramme/vb-melodie-loesung.visustruct":vM,"../../lessons/diagramme/vb-morsen-loesung.visustruct":yM,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":wM,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":zM,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":IM,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":kM,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":SM,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":TM,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":jM,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":_M,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":CM,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":AM,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":PM,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":OM,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":MM,"../../lessons/diagramme/vb-rand-loesung.visustruct":ZM,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":DM,"../../lessons/diagramme/vb-slalom-loesung.visustruct":BM,"../../lessons/diagramme/vb-spirale-loesung.visustruct":LM,"../../lessons/diagramme/vb-start-a-loesung.visustruct":WM,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":EM,"../../lessons/diagramme/vb-treppe-loesung.visustruct":NM,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":JM,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":FM,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":RM,"../../lessons/diagramme/vb-wald-loesung.visustruct":GM,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":HM,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":VM,"../../lessons/diagramme/zk-initialen-loesung.visustruct":QM,"../../lessons/diagramme/zk-mehr.visustruct":qM,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":UM,"../../lessons/diagramme/zk-split.visustruct":YM,"../../lessons/diagramme/zk-woerter-loesung.visustruct":$M,"../../lessons/diagramme/zk-zaehlen.visustruct":XM,"../../lessons/diagramme/zk-zeichen.visustruct":KM}),YB=Object.assign({"../../lessons/welten/ausgang-1.txt":eZ,"../../lessons/welten/ausgang-2.txt":tZ,"../../lessons/welten/ecke.txt":nZ,"../../lessons/welten/farbe-1.txt":iZ,"../../lessons/welten/farbe-2.txt":aZ,"../../lessons/welten/farbe-3.txt":sZ,"../../lessons/welten/farbe-4.txt":rZ,"../../lessons/welten/hindernis-1.txt":oZ,"../../lessons/welten/hindernis-2.txt":lZ,"../../lessons/welten/labyrinth-1.txt":uZ,"../../lessons/welten/labyrinth-2.txt":mZ,"../../lessons/welten/linie-1.txt":cZ,"../../lessons/welten/linie-2.txt":dZ,"../../lessons/welten/linie-rot-1.txt":hZ,"../../lessons/welten/linie-rot-2.txt":gZ,"../../lessons/welten/parken-1.txt":pZ,"../../lessons/welten/parken-2.txt":fZ,"../../lessons/welten/rand-1.txt":xZ,"../../lessons/welten/rand-2.txt":bZ,"../../lessons/welten/slalom.txt":vZ,"../../lessons/welten/tunnel-1.txt":yZ,"../../lessons/welten/tunnel-2.txt":wZ,"../../lessons/welten/wald-1.txt":zZ,"../../lessons/welten/wald-2.txt":IZ,"../../lessons/welten/wand-frei.txt":kZ,"../../lessons/welten/wand-kurz.txt":SZ,"../../lessons/welten/wand-lang.txt":TZ,"../../lessons/welten/wand-mittel.txt":jZ,"../../lessons/welten/wand-nah.txt":_Z,"../../lessons/welten/zeit-1.txt":CZ,"../../lessons/welten/ziel-kurz.txt":AZ,"../../lessons/welten/ziel-lang.txt":PZ}),$B=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":OZ,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":MZ,"../../lessons/bilder/ben-shneiderman.jpg":ZZ,"../../lessons/bilder/caesar-ascii.svg":DZ,"../../lessons/bilder/caesar-scheibe.svg":BZ,"../../lessons/bilder/caesar-verschiebung.svg":LZ,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":WZ,"../../lessons/bilder/en/kino-saal.svg":EZ,"../../lessons/bilder/en/kino-schleifen.svg":NZ,"../../lessons/bilder/en/l01-pap.svg":JZ,"../../lessons/bilder/en/l02-einfuegen.svg":FZ,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":RZ,"../../lessons/bilder/en/l03-lochkarte.svg":GZ,"../../lessons/bilder/en/l04-camelcase.svg":HZ,"../../lessons/bilder/en/l04-variable.svg":VZ,"../../lessons/bilder/en/l04-zuweisung.svg":QZ,"../../lessons/bilder/en/l05-tauschen.svg":qZ,"../../lessons/bilder/en/l08-zahlenstrahl.svg":UZ,"../../lessons/bilder/en/l10-kopfgesteuert.svg":YZ,"../../lessons/bilder/en/l11-vergleich.svg":$Z,"../../lessons/bilder/en/l12-for-ablauf.svg":XZ,"../../lessons/bilder/en/l14-array.svg":KZ,"../../lessons/bilder/en/l20-cpp.svg":eD,"../../lessons/bilder/en/l20-jvm.svg":tD,"../../lessons/bilder/en/mvc-klick.svg":nD,"../../lessons/bilder/en/ss-binaere-suche.svg":iD,"../../lessons/bilder/en/ss-bubblesort.svg":aD,"../../lessons/bilder/en/ss-lineare-suche.svg":sD,"../../lessons/bilder/en/ss-vergleiche.svg":rD,"../../lessons/bilder/en/uebergabe.svg":oD,"../../lessons/bilder/en/zk-zeichen.svg":lD,"../../lessons/bilder/grace-hopper.jpg":uD,"../../lessons/bilder/hedy-lamarr.jpg":mD,"../../lessons/bilder/ike-nassi.jpg":cD,"../../lessons/bilder/katherine-johnson.jpg":dD,"../../lessons/bilder/kino-saal.svg":hD,"../../lessons/bilder/kino-schleifen.svg":gD,"../../lessons/bilder/l01-pap.svg":pD,"../../lessons/bilder/l02-einfuegen.svg":fD,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":xD,"../../lessons/bilder/l03-lochkarte.svg":bD,"../../lessons/bilder/l03-zuse-lochstreifen.svg":vD,"../../lessons/bilder/l04-camelcase.svg":yD,"../../lessons/bilder/l04-variable.svg":wD,"../../lessons/bilder/l04-zuweisung.svg":zD,"../../lessons/bilder/l05-tauschen.svg":ID,"../../lessons/bilder/l07-schreibtischtest-de.svg":kD,"../../lessons/bilder/l07-schreibtischtest-en.svg":SD,"../../lessons/bilder/l07-schreibtischtest-pt.svg":TD,"../../lessons/bilder/l08-zahlenstrahl.svg":jD,"../../lessons/bilder/l09-wahrheitstabelle.svg":_D,"../../lessons/bilder/l10-kopfgesteuert.svg":CD,"../../lessons/bilder/l11-vergleich.svg":AD,"../../lessons/bilder/l12-for-ablauf.svg":PD,"../../lessons/bilder/l14-array.svg":OD,"../../lessons/bilder/l20-cpp.svg":MD,"../../lessons/bilder/l20-jvm.svg":ZD,"../../lessons/bilder/margaret-hamilton.jpg":DD,"../../lessons/bilder/mvc-klick.svg":BD,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":LD,"../../lessons/bilder/pt/kino-saal.svg":WD,"../../lessons/bilder/pt/kino-schleifen.svg":ED,"../../lessons/bilder/pt/l01-pap.svg":ND,"../../lessons/bilder/pt/l02-einfuegen.svg":JD,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":FD,"../../lessons/bilder/pt/l03-lochkarte.svg":RD,"../../lessons/bilder/pt/l04-camelcase.svg":GD,"../../lessons/bilder/pt/l04-variable.svg":HD,"../../lessons/bilder/pt/l04-zuweisung.svg":VD,"../../lessons/bilder/pt/l05-tauschen.svg":QD,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":qD,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":UD,"../../lessons/bilder/pt/l11-vergleich.svg":YD,"../../lessons/bilder/pt/l12-for-ablauf.svg":$D,"../../lessons/bilder/pt/l14-array.svg":XD,"../../lessons/bilder/pt/l20-cpp.svg":KD,"../../lessons/bilder/pt/l20-jvm.svg":eB,"../../lessons/bilder/pt/mvc-klick.svg":tB,"../../lessons/bilder/pt/schiffe-versenken.svg":nB,"../../lessons/bilder/pt/ss-binaere-suche.svg":iB,"../../lessons/bilder/pt/ss-bubblesort.svg":aB,"../../lessons/bilder/pt/ss-lineare-suche.svg":sB,"../../lessons/bilder/pt/ss-vergleiche.svg":rB,"../../lessons/bilder/pt/uebergabe.svg":oB,"../../lessons/bilder/pt/zk-zeichen.svg":lB,"../../lessons/bilder/schiffe-versenken.svg":uB,"../../lessons/bilder/ss-binaere-suche.svg":mB,"../../lessons/bilder/ss-bubblesort.svg":cB,"../../lessons/bilder/ss-lineare-suche.svg":dB,"../../lessons/bilder/ss-vergleiche.svg":hB,"../../lessons/bilder/uebergabe.svg":gB,"../../lessons/bilder/zk-zeichen.svg":pB}),cg=i=>i.replace(/^.*\//,"");function U1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[cg(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Xu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let S1="en",Ot=[],An=[],Ha="",Va=[],ys="off";function Ku(i){i!==ys&&(ys=i,Ot=[],ws(S1))}function ws(i){var s,r,o;if(A3(i),i===S1&&Ot.length>0)return;S1=i;const e=U1(VB,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>GB(nm(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=HB(nm(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=U1(QB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ys==="on"){const l=U1($u,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=XB(tm(e),tm(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=U1(qB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);An=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),An=n(a,"aufgaben/");An.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Ot.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...An.flatMap(u=>u.blocks)])l.kind==="textFile"&&N3(l.name,l.content);if(Ha=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ys!=="off"){const l=(r=U1($u,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ha=`${Ha.trimEnd()} +`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ne(`${e}: Keine Schritte (## Überschrift) gefunden.`);qB(r,e);const m=t.get("titel");if(!m)throw new ne(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function YB(i,e){const{meta:t,body:n}=dg(i,e),a=t.get("titel");if(!a)throw new ne(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:gg(n,e)}}function em(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!J3(n))throw new ne(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${_h.join(", ")}.`);return t}const $B=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Mb,"../../lessons/de/02-der-editor.md":Zb,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Db,"../../lessons/de/04-variablen-und-datentypen.md":Bb,"../../lessons/de/05-sequenz.md":Lb,"../../lessons/de/06-eingabe-und-ausgabe.md":Wb,"../../lessons/de/07-simulation-und-schreibtischtest.md":Eb,"../../lessons/de/08-verzweigung.md":Nb,"../../lessons/de/09-bedingungen-verknuepfen.md":Jb,"../../lessons/de/10-fallauswahl.md":Fb,"../../lessons/de/11-while-schleife.md":Rb,"../../lessons/de/12-do-while-schleife.md":Gb,"../../lessons/de/13-for-schleife.md":Hb,"../../lessons/de/14-verschachteln.md":Vb,"../../lessons/de/15-arrays.md":Qb,"../../lessons/de/16-zweidimensionale-arrays.md":qb,"../../lessons/de/17-zeichenketten.md":Ub,"../../lessons/de/18-aufruf-und-aussprung.md":Yb,"../../lessons/de/19-suchen-und-sortieren.md":$b,"../../lessons/de/20-java.md":Xb,"../../lessons/de/21-python-und-javascript.md":Kb,"../../lessons/de/22-try-und-catch.md":e4,"../../lessons/de/23-text-einlesen-und-speichern.md":t4,"../../lessons/de/24-zeile-fuer-zeile.md":n4,"../../lessons/de/25-tabellen-als-csv.md":i4,"../../lessons/de/26-json.md":a4,"../../lessons/de/27-formate-im-vergleich.md":s4,"../../lessons/de/28-erstes-fenster.md":r4,"../../lessons/de/29-knopf-im-fenster.md":o4,"../../lessons/de/30-der-knopf-reagiert.md":l4,"../../lessons/de/31-zahl-verdoppeln.md":u4,"../../lessons/de/32-klickzaehler.md":m4,"../../lessons/de/33-ampel.md":c4,"../../lessons/de/34-notenrechner.md":d4,"../../lessons/de/35-taschenrechner.md":h4,"../../lessons/de/36-zahlenraten.md":g4,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":p4,"../../lessons/de/38-innere-klassen.md":f4,"../../lessons/de/39-zwei-reiter.md":x4,"../../lessons/de/40-model-view-controller.md":b4,"../../lessons/de/begriffe.md":v4,"../../lessons/de/nachschlagen.md":y4,"../../lessons/en/01-was-ist-ein-struktogramm.md":w4,"../../lessons/en/02-der-editor.md":z4,"../../lessons/en/03-speichern-oeffnen-exportieren.md":I4,"../../lessons/en/04-variablen-und-datentypen.md":k4,"../../lessons/en/05-sequenz.md":S4,"../../lessons/en/06-eingabe-und-ausgabe.md":T4,"../../lessons/en/07-simulation-und-schreibtischtest.md":j4,"../../lessons/en/08-verzweigung.md":_4,"../../lessons/en/09-bedingungen-verknuepfen.md":C4,"../../lessons/en/10-fallauswahl.md":A4,"../../lessons/en/11-while-schleife.md":P4,"../../lessons/en/12-do-while-schleife.md":O4,"../../lessons/en/13-for-schleife.md":M4,"../../lessons/en/14-verschachteln.md":Z4,"../../lessons/en/15-arrays.md":D4,"../../lessons/en/16-zweidimensionale-arrays.md":B4,"../../lessons/en/17-zeichenketten.md":L4,"../../lessons/en/18-aufruf-und-aussprung.md":W4,"../../lessons/en/19-suchen-und-sortieren.md":E4,"../../lessons/en/20-java.md":N4,"../../lessons/en/21-python-und-javascript.md":J4,"../../lessons/en/22-try-und-catch.md":F4,"../../lessons/en/23-text-einlesen-und-speichern.md":R4,"../../lessons/en/24-zeile-fuer-zeile.md":G4,"../../lessons/en/25-tabellen-als-csv.md":H4,"../../lessons/en/26-json.md":V4,"../../lessons/en/27-formate-im-vergleich.md":Q4,"../../lessons/en/28-erstes-fenster.md":q4,"../../lessons/en/29-knopf-im-fenster.md":U4,"../../lessons/en/30-der-knopf-reagiert.md":Y4,"../../lessons/en/31-zahl-verdoppeln.md":$4,"../../lessons/en/32-klickzaehler.md":X4,"../../lessons/en/33-ampel.md":K4,"../../lessons/en/34-notenrechner.md":ev,"../../lessons/en/35-taschenrechner.md":tv,"../../lessons/en/36-zahlenraten.md":nv,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":iv,"../../lessons/en/38-innere-klassen.md":av,"../../lessons/en/39-zwei-reiter.md":sv,"../../lessons/en/40-model-view-controller.md":rv,"../../lessons/en/begriffe.md":ov,"../../lessons/en/nachschlagen.md":lv,"../../lessons/pt/01-was-ist-ein-struktogramm.md":uv,"../../lessons/pt/02-der-editor.md":mv,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":cv,"../../lessons/pt/04-variablen-und-datentypen.md":dv,"../../lessons/pt/05-sequenz.md":hv,"../../lessons/pt/06-eingabe-und-ausgabe.md":gv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":pv,"../../lessons/pt/08-verzweigung.md":fv,"../../lessons/pt/09-bedingungen-verknuepfen.md":xv,"../../lessons/pt/10-fallauswahl.md":bv,"../../lessons/pt/11-while-schleife.md":vv,"../../lessons/pt/12-do-while-schleife.md":yv,"../../lessons/pt/13-for-schleife.md":wv,"../../lessons/pt/14-verschachteln.md":zv,"../../lessons/pt/15-arrays.md":Iv,"../../lessons/pt/16-zweidimensionale-arrays.md":kv,"../../lessons/pt/17-zeichenketten.md":Sv,"../../lessons/pt/18-aufruf-und-aussprung.md":Tv,"../../lessons/pt/19-suchen-und-sortieren.md":jv,"../../lessons/pt/20-java.md":_v,"../../lessons/pt/21-python-und-javascript.md":Cv,"../../lessons/pt/22-try-und-catch.md":Av,"../../lessons/pt/23-text-einlesen-und-speichern.md":Pv,"../../lessons/pt/24-zeile-fuer-zeile.md":Ov,"../../lessons/pt/25-tabellen-als-csv.md":Mv,"../../lessons/pt/26-json.md":Zv,"../../lessons/pt/27-formate-im-vergleich.md":Dv,"../../lessons/pt/28-erstes-fenster.md":Bv,"../../lessons/pt/29-knopf-im-fenster.md":Lv,"../../lessons/pt/30-der-knopf-reagiert.md":Wv,"../../lessons/pt/31-zahl-verdoppeln.md":Ev,"../../lessons/pt/32-klickzaehler.md":Nv,"../../lessons/pt/33-ampel.md":Jv,"../../lessons/pt/34-notenrechner.md":Fv,"../../lessons/pt/35-taschenrechner.md":Rv,"../../lessons/pt/36-zahlenraten.md":Gv,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":Hv,"../../lessons/pt/38-innere-klassen.md":Vv,"../../lessons/pt/39-zwei-reiter.md":Qv,"../../lessons/pt/40-model-view-controller.md":qv,"../../lessons/pt/begriffe.md":Uv,"../../lessons/pt/nachschlagen.md":Yv}),XB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":$v,"../../lessons/de/aufgaben/ballwurf.md":Xv,"../../lessons/de/aufgaben/bestenliste.md":Kv,"../../lessons/de/aufgaben/binaerzahl.md":ey,"../../lessons/de/aufgaben/caesar.md":ty,"../../lessons/de/aufgaben/collatz.md":ny,"../../lessons/de/aufgaben/einheitenrechner.md":iy,"../../lessons/de/aufgaben/fibonacci.md":ay,"../../lessons/de/aufgaben/gerade-ungerade.md":sy,"../../lessons/de/aufgaben/mehrwertsteuer.md":ry,"../../lessons/de/aufgaben/notendurchschnitt.md":oy,"../../lessons/de/aufgaben/pin-pruefen.md":ly,"../../lessons/de/aufgaben/schiffe-versenken.md":uy,"../../lessons/de/aufgaben/speisekarte.md":my,"../../lessons/de/aufgaben/summe-bilden.md":cy,"../../lessons/de/aufgaben/tafeldienst.md":dy,"../../lessons/de/aufgaben/taschenrechner.md":hy,"../../lessons/de/aufgaben/verleih-menue.md":gy,"../../lessons/de/aufgaben/vokabeltrainer.md":py,"../../lessons/de/aufgaben/volljaehrig.md":fy,"../../lessons/de/aufgaben/wuerfel-mvc.md":xy,"../../lessons/de/aufgaben/zahl-verdoppeln.md":by,"../../lessons/en/aufgaben/alter-unterprogramm.md":vy,"../../lessons/en/aufgaben/ballwurf.md":yy,"../../lessons/en/aufgaben/bestenliste.md":wy,"../../lessons/en/aufgaben/binaerzahl.md":zy,"../../lessons/en/aufgaben/caesar.md":Iy,"../../lessons/en/aufgaben/collatz.md":ky,"../../lessons/en/aufgaben/einheitenrechner.md":Sy,"../../lessons/en/aufgaben/fibonacci.md":Ty,"../../lessons/en/aufgaben/gerade-ungerade.md":jy,"../../lessons/en/aufgaben/mehrwertsteuer.md":_y,"../../lessons/en/aufgaben/notendurchschnitt.md":Cy,"../../lessons/en/aufgaben/pin-pruefen.md":Ay,"../../lessons/en/aufgaben/schiffe-versenken.md":Py,"../../lessons/en/aufgaben/speisekarte.md":Oy,"../../lessons/en/aufgaben/summe-bilden.md":My,"../../lessons/en/aufgaben/tafeldienst.md":Zy,"../../lessons/en/aufgaben/taschenrechner.md":Dy,"../../lessons/en/aufgaben/verleih-menue.md":By,"../../lessons/en/aufgaben/vokabeltrainer.md":Ly,"../../lessons/en/aufgaben/volljaehrig.md":Wy,"../../lessons/en/aufgaben/wuerfel-mvc.md":Ey,"../../lessons/en/aufgaben/zahl-verdoppeln.md":Ny,"../../lessons/pt/aufgaben/alter-unterprogramm.md":Jy,"../../lessons/pt/aufgaben/ballwurf.md":Fy,"../../lessons/pt/aufgaben/bestenliste.md":Ry,"../../lessons/pt/aufgaben/binaerzahl.md":Gy,"../../lessons/pt/aufgaben/caesar.md":Hy,"../../lessons/pt/aufgaben/collatz.md":Vy,"../../lessons/pt/aufgaben/einheitenrechner.md":Qy,"../../lessons/pt/aufgaben/fibonacci.md":qy,"../../lessons/pt/aufgaben/gerade-ungerade.md":Uy,"../../lessons/pt/aufgaben/mehrwertsteuer.md":Yy,"../../lessons/pt/aufgaben/notendurchschnitt.md":$y,"../../lessons/pt/aufgaben/pin-pruefen.md":Xy,"../../lessons/pt/aufgaben/schiffe-versenken.md":Ky,"../../lessons/pt/aufgaben/speisekarte.md":e9,"../../lessons/pt/aufgaben/summe-bilden.md":t9,"../../lessons/pt/aufgaben/tafeldienst.md":n9,"../../lessons/pt/aufgaben/taschenrechner.md":i9,"../../lessons/pt/aufgaben/verleih-menue.md":a9,"../../lessons/pt/aufgaben/vokabeltrainer.md":s9,"../../lessons/pt/aufgaben/volljaehrig.md":r9,"../../lessons/pt/aufgaben/wuerfel-mvc.md":o9,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":l9}),tm=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":u9,"../../lessons/de/visubot/02-das-quadrat.md":m9,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":c9,"../../lessons/de/visubot/04-sensoren.md":d9,"../../lessons/de/visubot/05-bis-zur-wand.md":h9,"../../lessons/de/visubot/06-abstand.md":g9,"../../lessons/de/visubot/07-linie.md":p9,"../../lessons/de/visubot/08-farben.md":f9,"../../lessons/de/visubot/09-fallauswahl.md":x9,"../../lessons/de/visubot/10-tasten-joystick.md":b9,"../../lessons/de/visubot/11-licht.md":v9,"../../lessons/de/visubot/12-lautstaerke.md":y9,"../../lessons/de/visubot/13-neigung.md":w9,"../../lessons/de/visubot/14-leds.md":z9,"../../lessons/de/visubot/15-einzelne-leds.md":I9,"../../lessons/de/visubot/16-lautsprecher.md":k9,"../../lessons/de/visubot/17-arrays-melodie.md":S9,"../../lessons/de/visubot/18-bildschirm.md":T9,"../../lessons/de/visubot/19-zeichenketten.md":j9,"../../lessons/de/visubot/20-motoren.md":_9,"../../lessons/de/visubot/21-stoppuhr-akku.md":C9,"../../lessons/de/visubot/22-eigene-methoden.md":A9,"../../lessons/de/visubot/nachschlagen.md":P9,"../../lessons/en/visubot/01-der-mbot2.md":O9,"../../lessons/en/visubot/02-das-quadrat.md":M9,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Z9,"../../lessons/en/visubot/04-sensoren.md":D9,"../../lessons/en/visubot/05-bis-zur-wand.md":B9,"../../lessons/en/visubot/06-abstand.md":L9,"../../lessons/en/visubot/07-linie.md":W9,"../../lessons/en/visubot/08-farben.md":E9,"../../lessons/en/visubot/09-fallauswahl.md":N9,"../../lessons/en/visubot/10-tasten-joystick.md":J9,"../../lessons/en/visubot/11-licht.md":F9,"../../lessons/en/visubot/12-lautstaerke.md":R9,"../../lessons/en/visubot/13-neigung.md":G9,"../../lessons/en/visubot/14-leds.md":H9,"../../lessons/en/visubot/15-einzelne-leds.md":V9,"../../lessons/en/visubot/16-lautsprecher.md":Q9,"../../lessons/en/visubot/17-arrays-melodie.md":q9,"../../lessons/en/visubot/18-bildschirm.md":U9,"../../lessons/en/visubot/19-zeichenketten.md":Y9,"../../lessons/en/visubot/20-motoren.md":$9,"../../lessons/en/visubot/21-stoppuhr-akku.md":X9,"../../lessons/en/visubot/22-eigene-methoden.md":K9,"../../lessons/en/visubot/nachschlagen.md":ew}),KB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":tw,"../../lessons/de/visubot/aufgaben/ausgang.md":nw,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":iw,"../../lessons/de/visubot/aufgaben/dreieck.md":aw,"../../lessons/de/visubot/aufgaben/einparken.md":sw,"../../lessons/de/visubot/aufgaben/hindernis.md":rw,"../../lessons/de/visubot/aufgaben/knight-rider.md":ow,"../../lessons/de/visubot/aufgaben/labyrinth.md":lw,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":uw,"../../lessons/de/visubot/aufgaben/morsen.md":mw,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":cw,"../../lessons/de/visubot/aufgaben/slalom.md":dw,"../../lessons/de/visubot/aufgaben/spirale.md":hw,"../../lessons/de/visubot/aufgaben/treppe.md":gw,"../../lessons/de/visubot/aufgaben/tunnel.md":pw,"../../lessons/de/visubot/aufgaben/wald.md":fw,"../../lessons/en/visubot/aufgaben/alarmanlage.md":xw,"../../lessons/en/visubot/aufgaben/ausgang.md":bw,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":vw,"../../lessons/en/visubot/aufgaben/dreieck.md":yw,"../../lessons/en/visubot/aufgaben/einparken.md":ww,"../../lessons/en/visubot/aufgaben/hindernis.md":zw,"../../lessons/en/visubot/aufgaben/knight-rider.md":Iw,"../../lessons/en/visubot/aufgaben/labyrinth.md":kw,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":Sw,"../../lessons/en/visubot/aufgaben/morsen.md":Tw,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":jw,"../../lessons/en/visubot/aufgaben/slalom.md":_w,"../../lessons/en/visubot/aufgaben/spirale.md":Cw,"../../lessons/en/visubot/aufgaben/treppe.md":Aw,"../../lessons/en/visubot/aufgaben/tunnel.md":Pw,"../../lessons/en/visubot/aufgaben/wald.md":Ow}),eL=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":Mw,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":Zw,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":Dw,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":Bw,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":Lw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":Ww,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":Ew,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":Nw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":Jw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":Fw,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":Rw,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":Gw,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":Hw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":Vw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":Qw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":qw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":Uw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":Yw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":$w,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":Xw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":Kw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":e5,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":t5,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":n5,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":i5,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":a5,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":s5,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":r5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":o5,"../../lessons/diagramme/dt-buffered.visustruct":l5,"../../lessons/diagramme/dt-csv.visustruct":u5,"../../lessons/diagramme/dt-json.visustruct":m5,"../../lessons/diagramme/dt-lesen.visustruct":c5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":d5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":h5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":g5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":p5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":f5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":x5,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":b5,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":v5,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":y5,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":w5,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":z5,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":I5,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":k5,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":S5,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":T5,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":j5,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":_5,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":C5,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":A5,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":P5,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":O5,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":M5,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":Z5,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":D5,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":B5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":L5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":W5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":E5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":N5,"../../lessons/diagramme/en/dt-buffered.visustruct":J5,"../../lessons/diagramme/en/dt-csv.visustruct":F5,"../../lessons/diagramme/en/dt-json.visustruct":R5,"../../lessons/diagramme/en/dt-lesen.visustruct":G5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":H5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":V5,"../../lessons/diagramme/en/kino-frei-start.visustruct":Q5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":q5,"../../lessons/diagramme/en/kino-karte-start.visustruct":U5,"../../lessons/diagramme/en/kino-saalplan.visustruct":Y5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":$5,"../../lessons/diagramme/en/l04-gross-klein-loesung.visustruct":X5,"../../lessons/diagramme/en/l04-gross-klein-start.visustruct":K5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":ez,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":tz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct":nz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct":iz,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":az,"../../lessons/diagramme/en/l04-rechnen.visustruct":sz,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":rz,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":oz,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":lz,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":uz,"../../lessons/diagramme/en/l04-tauschen.visustruct":mz,"../../lessons/diagramme/en/l05-datentypen.visustruct":cz,"../../lessons/diagramme/en/l05-division.visustruct":dz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":hz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":gz,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":pz,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":fz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct":xz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct":bz,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":vz,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":yz,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":wz,"../../lessons/diagramme/en/l05-sequenz.visustruct":zz,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":Iz,"../../lessons/diagramme/en/l06-eva.visustruct":kz,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":Sz,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":Tz,"../../lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct":jz,"../../lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct":_z,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":Cz,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":Az,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":Pz,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":Oz,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":Mz,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":Zz,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":Dz,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":Bz,"../../lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct":Lz,"../../lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct":Wz,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":Ez,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":Nz,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":Jz,"../../lessons/diagramme/en/l07-rabatt.visustruct":Fz,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":Rz,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Gz,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":Hz,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":Vz,"../../lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct":Qz,"../../lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct":qz,"../../lessons/diagramme/en/l08-jugendticket.visustruct":Uz,"../../lessons/diagramme/en/l08-note.visustruct":Yz,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":$z,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":Xz,"../../lessons/diagramme/en/l09-ampel.visustruct":Kz,"../../lessons/diagramme/en/l09-automat.visustruct":e6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":t6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":n6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct":i6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct":a6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":s6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":r6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":o6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":l6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":u6,"../../lessons/diagramme/en/l1-sequenz.visustruct":m6,"../../lessons/diagramme/en/l1-tee.visustruct":c6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":d6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":h6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":g6,"../../lessons/diagramme/en/l10-countdown.visustruct":p6,"../../lessons/diagramme/en/l10-endlos.visustruct":f6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":x6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":b6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":v6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct":y6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct":w6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":z6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":I6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":k6,"../../lessons/diagramme/en/l11-einmal.visustruct":S6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":T6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":j6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":_6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct":C6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct":A6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":P6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":O6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":M6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":Z6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":D6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":B6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":L6,"../../lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct":W6,"../../lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct":E6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":N6,"../../lessons/diagramme/en/l12-summe.visustruct":J6,"../../lessons/diagramme/en/l13-dreieck.visustruct":F6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":R6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":G6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":H6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":V6,"../../lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct":Q6,"../../lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct":q6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":U6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":Y6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":$6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":X6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":eI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct":tI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct":nI,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":iI,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":aI,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":sI,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":rI,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":oI,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":lI,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":uI,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":mI,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":cI,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":dI,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":hI,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":gI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct":pI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct":fI,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":xI,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":bI,"../../lessons/diagramme/en/l15-quadrat.visustruct":vI,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":yI,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":wI,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":zI,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":II,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":kI,"../../lessons/diagramme/en/l16-countdown-start.visustruct":SI,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":TI,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":jI,"../../lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct":_I,"../../lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct":CI,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":AI,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":PI,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":OI,"../../lessons/diagramme/en/l16-summe-start.visustruct":MI,"../../lessons/diagramme/en/l17-beispiel.visustruct":ZI,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":DI,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":BI,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":LI,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":WI,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":EI,"../../lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct":NI,"../../lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct":JI,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":FI,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":RI,"../../lessons/diagramme/en/l18-beispiel.visustruct":GI,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":HI,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":VI,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":QI,"../../lessons/diagramme/en/l18-js-loesung.visustruct":qI,"../../lessons/diagramme/en/l18-python-loesung.visustruct":UI,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":YI,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":$I,"../../lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct":XI,"../../lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct":KI,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":e7,"../../lessons/diagramme/en/l2-ausgabe.visustruct":t7,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":n7,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":i7,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":a7,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":s7,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":r7,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":o7,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":l7,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":u7,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":m7,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":c7,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":d7,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":h7,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":g7,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":p7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":f7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":x7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":b7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":v7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":y7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":w7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":z7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":I7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":k7,"../../lessons/diagramme/en/sim-kino-start.visustruct":S7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":T7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":j7,"../../lessons/diagramme/en/sim-tausch.visustruct":_7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":C7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":A7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":P7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":O7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":M7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":Z7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":D7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":B7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":L7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":W7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":E7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":N7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":ek,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":tk,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":nk,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":ik,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":ak,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":sk,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":rk,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":ok,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":lk,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":uk,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":mk,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":ck,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":dk,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":hk,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":gk,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":pk,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":fk,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":xk,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":bk,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":vk,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":yk,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":wk,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":zk,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":Ik,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":kk,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":Sk,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":Tk,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":jk,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":_k,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":Ck,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":Ak,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":Pk,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":Ok,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":Mk,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":Zk,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":Dk,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":Bk,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":Lk,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":Wk,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":Ek,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":Nk,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":Jk,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":Fk,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":Rk,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":Gk,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":Hk,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":Vk,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":Qk,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":qk,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":Uk,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":Yk,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":$k,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":Xk,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":Kk,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":e8,"../../lessons/diagramme/en/zk-mehr.visustruct":t8,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":n8,"../../lessons/diagramme/en/zk-split.visustruct":i8,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":a8,"../../lessons/diagramme/en/zk-zaehlen.visustruct":s8,"../../lessons/diagramme/en/zk-zeichen.visustruct":r8,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":o8,"../../lessons/diagramme/kino-frei-loesung.visustruct":l8,"../../lessons/diagramme/kino-frei-start.visustruct":u8,"../../lessons/diagramme/kino-karte-loesung.visustruct":m8,"../../lessons/diagramme/kino-karte-start.visustruct":c8,"../../lessons/diagramme/kino-saalplan.visustruct":d8,"../../lessons/diagramme/kino-verkaufen.visustruct":h8,"../../lessons/diagramme/l04-gross-klein-loesung.visustruct":g8,"../../lessons/diagramme/l04-gross-klein-start.visustruct":p8,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":f8,"../../lessons/diagramme/l04-java-fehler-start.visustruct":x8,"../../lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct":b8,"../../lessons/diagramme/l04-java-laeuft-nicht-start.visustruct":v8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":y8,"../../lessons/diagramme/l04-rechnen.visustruct":w8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":z8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":I8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":k8,"../../lessons/diagramme/l04-tauschen-start.visustruct":S8,"../../lessons/diagramme/l04-tauschen.visustruct":T8,"../../lessons/diagramme/l05-datentypen.visustruct":j8,"../../lessons/diagramme/l05-division.visustruct":_8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":C8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":A8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":P8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":O8,"../../lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct":M8,"../../lessons/diagramme/l05-java-laeuft-nicht-start.visustruct":Z8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":D8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":B8,"../../lessons/diagramme/l05-sekunden-start.visustruct":L8,"../../lessons/diagramme/l05-sequenz.visustruct":W8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":E8,"../../lessons/diagramme/l06-eva.visustruct":N8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":J8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":F8,"../../lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct":R8,"../../lessons/diagramme/l06-java-laeuft-nicht-start.visustruct":G8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":H8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":V8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":Q8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":q8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":U8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":Y8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":$8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":X8,"../../lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct":K8,"../../lessons/diagramme/l07-java-laeuft-nicht-start.visustruct":eS,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":tS,"../../lessons/diagramme/l07-java-pizza-start.visustruct":nS,"../../lessons/diagramme/l07-maximum-loesung.visustruct":iS,"../../lessons/diagramme/l07-rabatt.visustruct":aS,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":sS,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":rS,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":oS,"../../lessons/diagramme/l08-java-fehler-start.visustruct":lS,"../../lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct":uS,"../../lessons/diagramme/l08-java-laeuft-nicht-start.visustruct":mS,"../../lessons/diagramme/l08-jugendticket.visustruct":cS,"../../lessons/diagramme/l08-note.visustruct":dS,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":hS,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":gS,"../../lessons/diagramme/l09-ampel.visustruct":pS,"../../lessons/diagramme/l09-automat.visustruct":fS,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":xS,"../../lessons/diagramme/l09-java-fehler-start.visustruct":bS,"../../lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct":vS,"../../lessons/diagramme/l09-java-laeuft-nicht-start.visustruct":yS,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":wS,"../../lessons/diagramme/l09-note-loesung.visustruct":zS,"../../lessons/diagramme/l09-rechner-loesung.visustruct":IS,"../../lessons/diagramme/l09-verschachtelt.visustruct":kS,"../../lessons/diagramme/l1-grundbausteine.visustruct":SS,"../../lessons/diagramme/l1-sequenz.visustruct":TS,"../../lessons/diagramme/l1-tee.visustruct":jS,"../../lessons/diagramme/l1-verzweigung.visustruct":_S,"../../lessons/diagramme/l1-wiederholung.visustruct":CS,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":AS,"../../lessons/diagramme/l10-countdown.visustruct":PS,"../../lessons/diagramme/l10-endlos.visustruct":OS,"../../lessons/diagramme/l10-fakultaet.visustruct":MS,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":ZS,"../../lessons/diagramme/l10-java-fehler-start.visustruct":DS,"../../lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct":BS,"../../lessons/diagramme/l10-java-laeuft-nicht-start.visustruct":LS,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":WS,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":ES,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":NS,"../../lessons/diagramme/l11-einmal.visustruct":JS,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":FS,"../../lessons/diagramme/l11-java-fehler-start.visustruct":RS,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":GS,"../../lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct":HS,"../../lessons/diagramme/l11-java-laeuft-nicht-start.visustruct":VS,"../../lessons/diagramme/l11-note-loesung.visustruct":QS,"../../lessons/diagramme/l11-summe-loesung.visustruct":qS,"../../lessons/diagramme/l12-countdown-loesung.visustruct":US,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":YS,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":$S,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":XS,"../../lessons/diagramme/l12-java-fehler-start.visustruct":KS,"../../lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct":eT,"../../lessons/diagramme/l12-java-laeuft-nicht-start.visustruct":tT,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":nT,"../../lessons/diagramme/l12-summe.visustruct":iT,"../../lessons/diagramme/l13-dreieck.visustruct":aT,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":sT,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":rT,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":oT,"../../lessons/diagramme/l13-java-fehler-start.visustruct":lT,"../../lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct":uT,"../../lessons/diagramme/l13-java-laeuft-nicht-start.visustruct":mT,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":cT,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":dT,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":hT,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":gT,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":pT,"../../lessons/diagramme/l14-java-fehler-start.visustruct":fT,"../../lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct":xT,"../../lessons/diagramme/l14-java-laeuft-nicht-start.visustruct":bT,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":vT,"../../lessons/diagramme/l14-namen-eingeben.visustruct":yT,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":wT,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":zT,"../../lessons/diagramme/l14-summe-maximum.visustruct":IT,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":kT,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":ST,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":TT,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":jT,"../../lessons/diagramme/l15-hauptprogramm.visustruct":_T,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":CT,"../../lessons/diagramme/l15-java-fehler-start.visustruct":AT,"../../lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct":PT,"../../lessons/diagramme/l15-java-laeuft-nicht-start.visustruct":OT,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":MT,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":ZT,"../../lessons/diagramme/l15-quadrat.visustruct":DT,"../../lessons/diagramme/l15-titel-loesung.visustruct":BT,"../../lessons/diagramme/l15-unterprogramm.visustruct":LT,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":WT,"../../lessons/diagramme/l15-zeige-summe.visustruct":ET,"../../lessons/diagramme/l16-countdown-loesung.visustruct":NT,"../../lessons/diagramme/l16-countdown-start.visustruct":JT,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":FT,"../../lessons/diagramme/l16-java-fehler-start.visustruct":RT,"../../lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct":GT,"../../lessons/diagramme/l16-java-laeuft-nicht-start.visustruct":HT,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":VT,"../../lessons/diagramme/l16-schreibtisch.visustruct":QT,"../../lessons/diagramme/l16-summe-loesung.visustruct":qT,"../../lessons/diagramme/l16-summe-start.visustruct":UT,"../../lessons/diagramme/l17-beispiel.visustruct":YT,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":$T,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":XT,"../../lessons/diagramme/l17-java-brief-start.visustruct":KT,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":ej,"../../lessons/diagramme/l17-java-fehler-start.visustruct":tj,"../../lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct":nj,"../../lessons/diagramme/l17-java-laeuft-nicht-start.visustruct":ij,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":aj,"../../lessons/diagramme/l17-ticket-loesung.visustruct":sj,"../../lessons/diagramme/l18-beispiel.visustruct":rj,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":oj,"../../lessons/diagramme/l18-java-fehler-start.visustruct":lj,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":uj,"../../lessons/diagramme/l18-js-loesung.visustruct":mj,"../../lessons/diagramme/l18-python-loesung.visustruct":cj,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":dj,"../../lessons/diagramme/l19-java-fehler-start.visustruct":hj,"../../lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct":gj,"../../lessons/diagramme/l19-java-laeuft-nicht-start.visustruct":pj,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":fj,"../../lessons/diagramme/l2-ausgabe.visustruct":xj,"../../lessons/diagramme/l2-hallo-loesung.visustruct":bj,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":vj,"../../lessons/diagramme/l20-countdown-loesung.visustruct":yj,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":wj,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":zj,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":Ij,"../../lessons/diagramme/l23-java-nummern-start.visustruct":kj,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":Sj,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":Tj,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":jj,"../../lessons/diagramme/l24-java-laengster-start.visustruct":_j,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":Cj,"../../lessons/diagramme/l25-java-beste-start.visustruct":Aj,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":Pj,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":Oj,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":Mj,"../../lessons/diagramme/l26-java-namen-start.visustruct":Zj,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":Dj,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":Bj,"../../lessons/diagramme/l27-java-json-loesung.visustruct":Lj,"../../lessons/diagramme/l27-java-json-start.visustruct":Wj,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":Ej,"../../lessons/diagramme/l27-java-saetze-start.visustruct":Nj,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":Jj,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":Fj,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":Rj,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":Gj,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":Hj,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":Vj,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":Qj,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":qj,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":Uj,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":Yj,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":$j,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":Xj,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":Kj,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":m_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":c_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":d_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":h_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":g_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":p_,"../../lessons/diagramme/pt/dt-buffered.visustruct":f_,"../../lessons/diagramme/pt/dt-csv.visustruct":x_,"../../lessons/diagramme/pt/dt-json.visustruct":b_,"../../lessons/diagramme/pt/dt-lesen.visustruct":v_,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":y_,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":w_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":z_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":I_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":k_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":S_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":T_,"../../lessons/diagramme/pt/l04-gross-klein-loesung.visustruct":j_,"../../lessons/diagramme/pt/l04-gross-klein-start.visustruct":__,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":C_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":A_,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct":P_,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct":O_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":M_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":Z_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":D_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":B_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":L_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":W_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":E_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":N_,"../../lessons/diagramme/pt/l05-division.visustruct":J_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":F_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":R_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":G_,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":H_,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct":V_,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct":Q_,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":q_,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":U_,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":Y_,"../../lessons/diagramme/pt/l05-sequenz.visustruct":$_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":X_,"../../lessons/diagramme/pt/l06-eva.visustruct":K_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":eC,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":tC,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct":nC,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct":iC,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":aC,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":sC,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":rC,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":oC,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":lC,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":uC,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":mC,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":cC,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct":dC,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct":hC,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":gC,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":pC,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":fC,"../../lessons/diagramme/pt/l07-rabatt.visustruct":xC,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":bC,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":vC,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":yC,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":wC,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct":zC,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct":IC,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":kC,"../../lessons/diagramme/pt/l08-note.visustruct":SC,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":TC,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":jC,"../../lessons/diagramme/pt/l09-ampel.visustruct":_C,"../../lessons/diagramme/pt/l09-automat.visustruct":CC,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":AC,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":PC,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct":OC,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct":MC,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":ZC,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":DC,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":BC,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":LC,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":WC,"../../lessons/diagramme/pt/l1-sequenz.visustruct":EC,"../../lessons/diagramme/pt/l1-tee.visustruct":NC,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":JC,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":FC,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":RC,"../../lessons/diagramme/pt/l10-countdown.visustruct":GC,"../../lessons/diagramme/pt/l10-endlos.visustruct":HC,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":VC,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":QC,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":qC,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct":UC,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct":YC,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":$C,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":XC,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":KC,"../../lessons/diagramme/pt/l11-einmal.visustruct":eA,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":tA,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":nA,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":iA,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct":aA,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct":sA,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":rA,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":oA,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":lA,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":uA,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":mA,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":cA,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":dA,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct":hA,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct":gA,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":pA,"../../lessons/diagramme/pt/l12-summe.visustruct":fA,"../../lessons/diagramme/pt/l13-dreieck.visustruct":xA,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":bA,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":vA,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":yA,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":wA,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct":zA,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct":IA,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":kA,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":SA,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":TA,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":jA,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":_A,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":CA,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct":AA,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct":PA,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":OA,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":MA,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":ZA,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":DA,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":BA,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":LA,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":WA,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":EA,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":NA,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":JA,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":FA,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct":RA,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct":GA,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":HA,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":VA,"../../lessons/diagramme/pt/l15-quadrat.visustruct":QA,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":qA,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":UA,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":YA,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":$A,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":XA,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":KA,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":eP,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":tP,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct":nP,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct":iP,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":aP,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":sP,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":rP,"../../lessons/diagramme/pt/l16-summe-start.visustruct":oP,"../../lessons/diagramme/pt/l17-beispiel.visustruct":lP,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":uP,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":mP,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":cP,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":dP,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":hP,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct":gP,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct":pP,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":fP,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":xP,"../../lessons/diagramme/pt/l18-beispiel.visustruct":bP,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":vP,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":yP,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":wP,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":zP,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":IP,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":kP,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":SP,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct":TP,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct":jP,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":_P,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":CP,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":AP,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":PP,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":OP,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":MP,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":ZP,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":DP,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":BP,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":LP,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":WP,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":EP,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":NP,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":JP,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":FP,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":RP,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":GP,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":HP,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":VP,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":QP,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":qP,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":UP,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":YP,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":$P,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":XP,"../../lessons/diagramme/pt/sim-kino-start.visustruct":KP,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":eO,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":tO,"../../lessons/diagramme/pt/sim-tausch.visustruct":nO,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":iO,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":aO,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":sO,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":rO,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":oO,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":lO,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":uO,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":mO,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":cO,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":dO,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":hO,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":gO,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":pO,"../../lessons/diagramme/pt/zk-mehr.visustruct":fO,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":xO,"../../lessons/diagramme/pt/zk-split.visustruct":bO,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":vO,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":yO,"../../lessons/diagramme/pt/zk-zeichen.visustruct":wO,"../../lessons/diagramme/sim-kino-loesung.visustruct":zO,"../../lessons/diagramme/sim-kino-start.visustruct":IO,"../../lessons/diagramme/sim-tausch-loesung.visustruct":kO,"../../lessons/diagramme/sim-tausch-start.visustruct":SO,"../../lessons/diagramme/sim-tausch.visustruct":TO,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":jO,"../../lessons/diagramme/ss-absteigend-start.visustruct":_O,"../../lessons/diagramme/ss-binaere-suche.visustruct":CO,"../../lessons/diagramme/ss-bubblesort.visustruct":AO,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":PO,"../../lessons/diagramme/ss-lineare-suche.visustruct":OO,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":MO,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":ZO,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":DO,"../../lessons/diagramme/uebergabe-haupt.visustruct":BO,"../../lessons/diagramme/uebergabe-leeren.visustruct":LO,"../../lessons/diagramme/uebergabe-verdopple.visustruct":WO,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":EO,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":NO,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":JO,"../../lessons/diagramme/vb-ampel-loesung.visustruct":FO,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":RO,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":GO,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":HO,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":VO,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":QO,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":qO,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":UO,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":YO,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":$O,"../../lessons/diagramme/vb-einparken-loesung.visustruct":XO,"../../lessons/diagramme/vb-farben-loesung.visustruct":KO,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":eM,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":tM,"../../lessons/diagramme/vb-gerade-loesung.visustruct":nM,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":iM,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":aM,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":sM,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":rM,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":oM,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":lM,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":uM,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":mM,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":cM,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":dM,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":hM,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":gM,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":pM,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":fM,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":xM,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":bM,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":vM,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":yM,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":wM,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":zM,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":IM,"../../lessons/diagramme/vb-melodie-loesung.visustruct":kM,"../../lessons/diagramme/vb-morsen-loesung.visustruct":SM,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":TM,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":jM,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":_M,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":CM,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":AM,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":PM,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":OM,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":MM,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":ZM,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":DM,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":BM,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":LM,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":WM,"../../lessons/diagramme/vb-rand-loesung.visustruct":EM,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":NM,"../../lessons/diagramme/vb-slalom-loesung.visustruct":JM,"../../lessons/diagramme/vb-spirale-loesung.visustruct":FM,"../../lessons/diagramme/vb-start-a-loesung.visustruct":RM,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":GM,"../../lessons/diagramme/vb-treppe-loesung.visustruct":HM,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":VM,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":QM,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":qM,"../../lessons/diagramme/vb-wald-loesung.visustruct":UM,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":YM,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":$M,"../../lessons/diagramme/zk-initialen-loesung.visustruct":XM,"../../lessons/diagramme/zk-mehr.visustruct":KM,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":eZ,"../../lessons/diagramme/zk-split.visustruct":tZ,"../../lessons/diagramme/zk-woerter-loesung.visustruct":nZ,"../../lessons/diagramme/zk-zaehlen.visustruct":iZ,"../../lessons/diagramme/zk-zeichen.visustruct":aZ}),tL=Object.assign({"../../lessons/welten/ausgang-1.txt":sZ,"../../lessons/welten/ausgang-2.txt":rZ,"../../lessons/welten/ecke.txt":oZ,"../../lessons/welten/farbe-1.txt":lZ,"../../lessons/welten/farbe-2.txt":uZ,"../../lessons/welten/farbe-3.txt":mZ,"../../lessons/welten/farbe-4.txt":cZ,"../../lessons/welten/hindernis-1.txt":dZ,"../../lessons/welten/hindernis-2.txt":hZ,"../../lessons/welten/labyrinth-1.txt":gZ,"../../lessons/welten/labyrinth-2.txt":pZ,"../../lessons/welten/linie-1.txt":fZ,"../../lessons/welten/linie-2.txt":xZ,"../../lessons/welten/linie-rot-1.txt":bZ,"../../lessons/welten/linie-rot-2.txt":vZ,"../../lessons/welten/parken-1.txt":yZ,"../../lessons/welten/parken-2.txt":wZ,"../../lessons/welten/rand-1.txt":zZ,"../../lessons/welten/rand-2.txt":IZ,"../../lessons/welten/slalom.txt":kZ,"../../lessons/welten/tunnel-1.txt":SZ,"../../lessons/welten/tunnel-2.txt":TZ,"../../lessons/welten/wald-1.txt":jZ,"../../lessons/welten/wald-2.txt":_Z,"../../lessons/welten/wand-frei.txt":CZ,"../../lessons/welten/wand-kurz.txt":AZ,"../../lessons/welten/wand-lang.txt":PZ,"../../lessons/welten/wand-mittel.txt":OZ,"../../lessons/welten/wand-nah.txt":MZ,"../../lessons/welten/zeit-1.txt":ZZ,"../../lessons/welten/ziel-kurz.txt":DZ,"../../lessons/welten/ziel-lang.txt":BZ}),nL=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":LZ,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":WZ,"../../lessons/bilder/ben-shneiderman.jpg":EZ,"../../lessons/bilder/caesar-ascii.svg":NZ,"../../lessons/bilder/caesar-scheibe.svg":JZ,"../../lessons/bilder/caesar-verschiebung.svg":FZ,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":RZ,"../../lessons/bilder/en/kino-saal.svg":GZ,"../../lessons/bilder/en/kino-schleifen.svg":HZ,"../../lessons/bilder/en/l01-pap.svg":VZ,"../../lessons/bilder/en/l02-einfuegen.svg":QZ,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":qZ,"../../lessons/bilder/en/l03-lochkarte.svg":UZ,"../../lessons/bilder/en/l04-camelcase.svg":YZ,"../../lessons/bilder/en/l04-variable.svg":$Z,"../../lessons/bilder/en/l04-zuweisung.svg":XZ,"../../lessons/bilder/en/l05-tauschen.svg":KZ,"../../lessons/bilder/en/l08-zahlenstrahl.svg":eD,"../../lessons/bilder/en/l10-kopfgesteuert.svg":tD,"../../lessons/bilder/en/l11-vergleich.svg":nD,"../../lessons/bilder/en/l12-for-ablauf.svg":iD,"../../lessons/bilder/en/l14-array.svg":aD,"../../lessons/bilder/en/l20-cpp.svg":sD,"../../lessons/bilder/en/l20-jvm.svg":rD,"../../lessons/bilder/en/mvc-klick.svg":oD,"../../lessons/bilder/en/ss-binaere-suche.svg":lD,"../../lessons/bilder/en/ss-bubblesort.svg":uD,"../../lessons/bilder/en/ss-lineare-suche.svg":mD,"../../lessons/bilder/en/ss-vergleiche.svg":cD,"../../lessons/bilder/en/uebergabe.svg":dD,"../../lessons/bilder/en/zk-zeichen.svg":hD,"../../lessons/bilder/grace-hopper.jpg":gD,"../../lessons/bilder/hedy-lamarr.jpg":pD,"../../lessons/bilder/ike-nassi.jpg":fD,"../../lessons/bilder/katherine-johnson.jpg":xD,"../../lessons/bilder/kino-saal.svg":bD,"../../lessons/bilder/kino-schleifen.svg":vD,"../../lessons/bilder/l01-pap.svg":yD,"../../lessons/bilder/l02-einfuegen.svg":wD,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":zD,"../../lessons/bilder/l03-lochkarte.svg":ID,"../../lessons/bilder/l03-zuse-lochstreifen.svg":kD,"../../lessons/bilder/l04-camelcase.svg":SD,"../../lessons/bilder/l04-variable.svg":TD,"../../lessons/bilder/l04-zuweisung.svg":jD,"../../lessons/bilder/l05-tauschen.svg":_D,"../../lessons/bilder/l07-schreibtischtest-de.svg":CD,"../../lessons/bilder/l07-schreibtischtest-en.svg":AD,"../../lessons/bilder/l07-schreibtischtest-pt.svg":PD,"../../lessons/bilder/l08-zahlenstrahl.svg":OD,"../../lessons/bilder/l09-wahrheitstabelle.svg":MD,"../../lessons/bilder/l10-kopfgesteuert.svg":ZD,"../../lessons/bilder/l11-vergleich.svg":DD,"../../lessons/bilder/l12-for-ablauf.svg":BD,"../../lessons/bilder/l14-array.svg":LD,"../../lessons/bilder/l20-cpp.svg":WD,"../../lessons/bilder/l20-jvm.svg":ED,"../../lessons/bilder/margaret-hamilton.jpg":ND,"../../lessons/bilder/mvc-klick.svg":JD,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":FD,"../../lessons/bilder/pt/kino-saal.svg":RD,"../../lessons/bilder/pt/kino-schleifen.svg":GD,"../../lessons/bilder/pt/l01-pap.svg":HD,"../../lessons/bilder/pt/l02-einfuegen.svg":VD,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":QD,"../../lessons/bilder/pt/l03-lochkarte.svg":qD,"../../lessons/bilder/pt/l04-camelcase.svg":UD,"../../lessons/bilder/pt/l04-variable.svg":YD,"../../lessons/bilder/pt/l04-zuweisung.svg":$D,"../../lessons/bilder/pt/l05-tauschen.svg":XD,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":KD,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":eB,"../../lessons/bilder/pt/l11-vergleich.svg":tB,"../../lessons/bilder/pt/l12-for-ablauf.svg":nB,"../../lessons/bilder/pt/l14-array.svg":iB,"../../lessons/bilder/pt/l20-cpp.svg":aB,"../../lessons/bilder/pt/l20-jvm.svg":sB,"../../lessons/bilder/pt/mvc-klick.svg":rB,"../../lessons/bilder/pt/schiffe-versenken.svg":oB,"../../lessons/bilder/pt/ss-binaere-suche.svg":lB,"../../lessons/bilder/pt/ss-bubblesort.svg":uB,"../../lessons/bilder/pt/ss-lineare-suche.svg":mB,"../../lessons/bilder/pt/ss-vergleiche.svg":cB,"../../lessons/bilder/pt/uebergabe.svg":dB,"../../lessons/bilder/pt/zk-zeichen.svg":hB,"../../lessons/bilder/schiffe-versenken.svg":gB,"../../lessons/bilder/ss-binaere-suche.svg":pB,"../../lessons/bilder/ss-bubblesort.svg":fB,"../../lessons/bilder/ss-lineare-suche.svg":xB,"../../lessons/bilder/ss-vergleiche.svg":bB,"../../lessons/bilder/uebergabe.svg":vB,"../../lessons/bilder/zk-zeichen.svg":yB}),pg=i=>i.replace(/^.*\//,"");function U1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[pg(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function nm(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let S1="en",Ot=[],An=[],Va="",Qa=[],zs="off";function im(i){i!==zs&&(zs=i,Ot=[],Is(S1))}function Is(i){var s,r,o;if(Z3(i),i===S1&&Ot.length>0)return;S1=i;const e=U1($B,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>UB(rm(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=YB(rm(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=U1(XB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(zs==="on"){const l=U1(tm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=iL(sm(e),sm(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=U1(KB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);An=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),An=n(a,"aufgaben/");An.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Ot.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...An.flatMap(u=>u.blocks)])l.kind==="textFile"&&G3(l.name,l.content);if(Va=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",zs!=="off"){const l=(r=U1(tm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Va=`${Va.trimEnd()} -${l}`)}Va=fB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const em={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},tm=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function XB(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(em[o])?em[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function nm(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}ws("en");function dg(i,e){return S1==="de"?i.get(e)??i.get(`en/${e}`):(S1==="en"?void 0:i.get(`${S1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const hg=(i,e)=>i.slice(i.indexOf(e)+e.length),KB=new Map(Object.entries(UB).map(([i,e])=>[hg(i,"/diagramme/"),e]));function si(i){const e=dg(KB,i);return e===void 0?void 0:Hl(e)}const eL=new Map(Object.entries($B).map(([i,e])=>[hg(i,"/bilder/"),e]));function jr(i){return dg(eL,i)}const tL=new Map(Object.entries(YB).map(([i,e])=>[cg(i).replace(/\.txt$/,""),e])),im=new Map;function Qa(i){const e=tL.get(i);if(e===void 0)return;let t=im.get(i);return t||im.set(i,t=ab(e)),t}const gg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Pe(i){const e=[];let t=gg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function jn(i){const e=[],t=i.replace(/\r\n/g,` +${l}`)}Qa=wB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const am={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},sm=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function iL(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(am[o])?am[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function rm(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}Is("en");function fg(i,e){return S1==="de"?i.get(e)??i.get(`en/${e}`):(S1==="en"?void 0:i.get(`${S1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const xg=(i,e)=>i.slice(i.indexOf(e)+e.length),aL=new Map(Object.entries(eL).map(([i,e])=>[xg(i,"/diagramme/"),e]));function si(i){const e=fg(aL,i);return e===void 0?void 0:Vl(e)}const sL=new Map(Object.entries(nL).map(([i,e])=>[xg(i,"/bilder/"),e]));function Cr(i){return fg(sL,i)}const rL=new Map(Object.entries(tL).map(([i,e])=>[pg(i).replace(/\.txt$/,""),e])),om=new Map;function qa(i){const e=rL.get(i);if(e===void 0)return;let t=om.get(i);return t||om.set(i,t=ub(e)),t}const bg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Pe(i){const e=[];let t=bg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function jn(i){const e=[],t=i.replace(/\r\n/g,` `).split(` -`);let n=0;for(;n${gg(c.join(` +`);let n=0;for(;n${bg(c.join(` `))}`);continue}const s=/^(#{2,4})\s+(.*)$/.exec(a);if(s){const o=s[1].length;e.push(`${Pe(s[2])}`),n++;continue}if(/^\s*([-*]|\d+\.)\s+/.test(a)){const o=/^\s*\d+\./.test(a),l=[];for(;n${Pe(u)}`)}e.push(o?`
    ${l.join("")}
`:`
    ${l.join("")}
`);continue}if(a.startsWith("|")&&/^\|?[\s:|-]*-{3,}[\s:|-]*$/.test(t[n+1]??"")){const o=m=>m.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(c=>Pe(c.trim())),l=o(a);n+=2;const u=[];for(;n${l.map(m=>``).join("")}${u.map(m=>`${m.map(c=>``).join("")}`).join("")}
${m}
${c}
`);continue}if(a.startsWith(">")){const o=[];for(;n");)o.push(t[n++].replace(/^>\s?/,""));e.push(``);continue}const r=[];for(;n|\||\s*([-*]|\d+\.)\s+)/.test(t[n]);)r.push(t[n++].trim());e.push(`

${Pe(r.join(" "))}

`)}return e.join(` -`)}const ca=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Jo="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",c0="visustruct.learn.teacher";let d0=!1;function am(){if(d0)return!0;try{return localStorage.getItem(c0)===Jo}catch{return!1}}async function nL(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function iL(i){let e=!1;try{e=await nL(i.trim())===Jo}catch{return!1}if(e){d0=!0;try{localStorage.setItem(c0,Jo)}catch{}}return e}function aL(){d0=!1;try{localStorage.removeItem(c0)}catch{}}function pg(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` +`)}const ca=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Fo="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",h0="visustruct.learn.teacher";let g0=!1;function lm(){if(g0)return!0;try{return localStorage.getItem(h0)===Fo}catch{return!1}}async function oL(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function lL(i){let e=!1;try{e=await oL(i.trim())===Fo}catch{return!1}if(e){g0=!0;try{localStorage.setItem(h0,Fo)}catch{}}return e}function uL(){g0=!1;try{localStorage.removeItem(h0)}catch{}}function vg(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` `).forEach((l,u)=>{const m=document.createElement("span");m.className="ln",m.textContent=String(u+1),r.append(m,l+` -`)}),n.append(a,r),n}function fg(i){return[...i].map(([e,t])=>pg(e,t,!0))}function n1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return i.similar?p("web_sim_unknown_variable_case_fmt",i.text,i.similar):p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Ze=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),sm=["0.2","0.5","1.0","1.5","2.0"],sL=i=>Number(i).toLocaleString(r1()==="java"?"en":r1(),{minimumFractionDigits:1}),_r="visustruct.simulation.stepDelay",rm="visustruct.simulation.highlightMode";function Cr(i){try{return localStorage.getItem(i)}catch{return null}}function om(i,e){try{localStorage.setItem(i,e)}catch{}}class rL{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",sm.includes(Cr(_r)??"")?Cr(_r):"0.5");y(this,"highlightMode",Cr(rm)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Ti(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,O3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Ti(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=` +`)}),n.append(a,r),n}function yg(i){return[...i].map(([e,t])=>vg(e,t,!0))}function n1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return i.similar?p("web_sim_unknown_variable_case_fmt",i.text,i.similar):p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Ze=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),um=["0.2","0.5","1.0","1.5","2.0"],mL=i=>Number(i).toLocaleString(r1()==="java"?"en":r1(),{minimumFractionDigits:1}),Ar="visustruct.simulation.stepDelay",mm="visustruct.simulation.highlightMode";function Pr(i){try{return localStorage.getItem(i)}catch{return null}}function cm(i,e){try{localStorage.setItem(i,e)}catch{}}class cL{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",um.includes(Pr(Ar)??"")?Pr(Ar):"0.5");y(this,"highlightMode",Pr(mm)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Ti(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,B3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Ti(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=`

${Ze(p("simulation_controls"))}

@@ -67212,7 +67218,7 @@ ${l}`)}Va=fB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const

@@ -67221,22 +67227,22 @@ ${l}`)}Va=fB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const

${Ze(p("simulation_trace"))}

${Ze(p("simulation_variables"))}

${Ze(p("simulation_output"))}

- `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,om(rm,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,om(_r,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Ze(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(xg(u)):m.textContent=je(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Ze(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...fg(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Ze(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?n1(r):"",o.hidden=!r}}function xg(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const y1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Hn=360/y1.length,oL="http://www.w3.org/2000/svg";function Fe(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function bt(i,e={},t){const n=document.createElementNS(oL,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function lL(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function lm(i,e){const t=bt("g",{class:e}),n=y1.map((a,s)=>{const r=bt("g",{transform:`rotate(${s*Hn})`});return r.append(bt("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function uL(i,e){let t=i,n=!1,a=-t*Hn;const s=Fe("section",{class:"learn-game learn-caesar"});s.append(Fe("div",{class:"learn-game-head"},Fe("strong",{},p("web_learn_caesar_title")))),s.append(Fe("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=bt("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(bt("circle",{r:196,class:"outer-disc"})),r.append(bt("path",{d:mL(196,92,Hn/2),class:"window"}));const o=lm(168,"outer-letters");r.append(o.group);for(let C=0;C{o.cells.forEach((B,E)=>B.classList.toggle("marked",E===C)),u.cells.forEach((B,E)=>B.classList.toggle("marked",C!==void 0&&E===(C+t)%26))},S=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),z.textContent=lL(v.value,n?-t:t)||" ";const C=Array.from(v.value.toUpperCase()).reverse().find(E=>y1.includes(E));if(C===void 0)return k();const B=y1.indexOf(C);k(n?(B-t+26)%26:B)},_=C=>{t=(C%26+26)%26,a=-t*Hn,S()};c.addEventListener("click",()=>_(t-1)),d.addEventListener("click",()=>_(t+1)),f.addEventListener("click",()=>{var C;n&&(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!1,S()}),x.addEventListener("click",()=>{var C;n||(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!0,S()}),v.addEventListener("input",S),o.cells.forEach((C,B)=>C.addEventListener("click",()=>k(B)));let M;const O=C=>{const B=r.getBoundingClientRect();return Math.atan2(C.clientY-(B.top+B.height/2),C.clientX-(B.left+B.width/2))*180/Math.PI};l.addEventListener("pointerdown",C=>{const B=C;M=O(B)-a,l.classList.add("dragging"),r.setPointerCapture(B.pointerId),B.preventDefault()}),r.addEventListener("pointermove",C=>{if(M===void 0)return;a=O(C)-M,l.setAttribute("transform",`rotate(${a})`);const B=Math.round(-a/Hn);if((B%26+26)%26!==t){t=(B%26+26)%26;const E=a;S(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{M!==void 0&&(M=void 0,l.classList.remove("dragging"),_(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),S(),s}function mL(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const h0=i=>p(`web_visubot_part_${i}`),bg=new WeakMap;function vg(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=h0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=K(async()=>{const{Robot3D:c}=await import("./robot3d-BOvRTAxq.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return bg.set(a,m),m}function cL(i,e,t=!1){return vg(i,e,t).box}function dL(i){const e=i.querySelector(".visubot-model"),t=e&&bg.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(h0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function hL(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=jn(`**${t+1}/${i.length}** ${i[t].question}`)},r=vg([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",h0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(v=>{window.clearTimeout(v),window.clearInterval(v)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const v=Y("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,z=Y("div",{class:"learn-bomb-fuse"},Y("span",{})),I=Y("span",{class:"learn-bomb-time"}),k=Y("div",{class:"learn-bomb","aria-live":"polite"},Y("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),I,z),S=Y("div",{class:"learn-game-feedback",role:"status"}),_=v.code.split(` -`).map((E,U)=>{const ee=Y("button",{class:"ln",type:"button"},E||" ");return ee.disabled=!E.trim(),ee.addEventListener("click",()=>C(U+1===v.wrongLine?"right":"wrong",ee)),ee}),M=Y("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},..._),O=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-O>1e3)return m();const E=Math.max(0,w-(Date.now()-O)/1e3);I.textContent=p("web_game_time_fmt",Math.ceil(E)),z.firstChild.style.width=`${E/w*100}%`,k.classList.toggle("hurry",E<=5),E<=0&&C("time")},C=(E,U)=>{m(),_.forEach((Ie,fe)=>{Ie.disabled=!0,fe+1===v.wrongLine&&Ie.classList.add("right")}),U&&E==="wrong"&&U.classList.add("wrong");const ee=E==="right";ee&&l++,c(),k.classList.add(ee?"defused":"boom"),k.firstChild.textContent=ee?"✂️":"💥",S.className=`learn-game-feedback ${ee?"right":"wrong"}`;const ge=d();S.replaceChildren(Y("p",{},p(ee?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Rn("div",{class:"learn-game-explain"},v.explanation),Y("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,Y("code",{},v.fix.trim())),ge),ge.focus({preventScroll:!0})};s.replaceChildren(k,Rn("p",{class:"learn-game-question"},v.question),M,S),P();const B=window.setInterval(P,200);u.push(B)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(mm(v.code).element),w.push(Rn("p",{class:"learn-game-question"},v.question),Y("p",{class:"learn-order-hint"},p("web_game_order_hint")));const z=Y("div",{class:"learn-game-options learn-order"}),I=Y("div",{class:"learn-game-feedback",role:"status"});let k=0;const S=pL(v.options.length).map(M=>{const O=Y("span",{class:"learn-order-badge","aria-hidden":"true"}),P=Y("span",{});P.innerHTML=Pe(v.options[M].text);const C=Y("button",{},O,P);return C.addEventListener("click",()=>{if(M!==k)return C.classList.add("wrong"),_(!1);C.classList.add("right"),O.textContent=String(++k),C.disabled=!0,k===v.options.length&&_(!0)}),z.append(C),{k:M,b:C,badge:O}}),_=M=>{for(const{k:P,b:C,badge:B}of[...S].sort((E,U)=>E.k-U.k))C.disabled=!0,B.textContent=String(P+1),z.append(C);M&&l++,c(),I.className=`learn-game-feedback ${M?"right":"wrong"}`;const O=d();I.replaceChildren(Y("p",{},p(M?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation),O),O.focus({preventScroll:!0})};s.replaceChildren(...w,z,I)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=mm(v.code),z=[];let I;i.kind==="zuhoerer"?(I=fL(tg(v.code),w),z.push(Y("div",{class:"learn-swing-row"},w.element,I.element)),v.clicks.length&&z.push(Y("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((O,P)=>[...P?[" → "]:[],Y("code",{},O)])))):v.code.trim()&&z.push(w.element),z.push(Rn("p",{class:"learn-game-question"},v.question));const k=Y("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),S=Y("div",{class:"learn-game-feedback",role:"status"}),_=v.options.map(O=>{const P=Y("button",{});return i.kind==="layout"?P.append(bL(O.text)):O.text.includes(` -`)?P.append(xL(O.text)):P.innerHTML=Pe(O.text),P.addEventListener("click",()=>M(O.right,P)),k.append(P),P}),M=(O,P)=>{_.forEach((B,E)=>{B.disabled=!0,v.options[E].right&&B.classList.add("right")}),O||P.classList.add("wrong"),O&&l++,c(),S.className=`learn-game-feedback ${O?"right":"wrong"}`;const C=d();S.replaceChildren(Y("p",{},p(O?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation)),S.append(C),I&&(u=I.replay(v.clicks,()=>C.before(Y("p",{class:"learn-swing-try"},p("web_game_try"))))),C.focus({preventScroll:!0})};s.replaceChildren(...z,k,S)},x=()=>{m(),a.textContent="";const v=Y("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(Y("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),Y("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},b=Y("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Rn("p",{},i.intro),b),t}function pL(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function mm(i){const e=i.split(` -`).map(n=>Y("div",{class:"ln"},n||" "));return{element:Y("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function fL(i,e){const t=ng(i),n=Y("div",{class:"learn-swing-window",dir:"ltr"});n.append(Y("div",{class:"learn-swing-title"},i.title||" "));const a=Y("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=Y("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=Y("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=Y("p",{class:"learn-swing-event",role:"status"}),l=Y("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} -`).join(""))},m=c=>u(ig(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*um));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(ag(i,t,g.name)))}),d()},(c.length+.3)*um)),h}}}function xL(i){return Y("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function bL(i){const e=eg(i),t=Y("div",{class:"learn-layout-window",dir:"ltr"},Y("div",{class:"learn-layout-title"})),n=Y("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>Y("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function H(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function In(i,e,t){const n=H(i,e);return n.innerHTML=Pe(t),n}function cm(i){return H("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` -`).map(e=>H("div",{class:"ln"},e||" ")))}function vL(i,e){const t=H("section",{class:"learn-game learn-rescue"}),n=H("div",{class:"learn-game-head"});n.append(H("img",{src:e,alt:"",width:"40",height:"40"}),H("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>H("span",{class:"learn-rescue-dot"})),r=H("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=H("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",H("span",{class:"learn-rescue-zora"},"🐐"),H("span",{class:"learn-rescue-fox"},"🦊")),l=H("span",{class:"learn-rescue-free"},"🐐"),u=H("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=H("p",{class:"learn-game-status"}),c=H("div",{class:"learn-game-stage"}),d=yL(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((I,k)=>I.classList.toggle("done",k{const I=[...i.alphabet].map((k,S)=>H("span",{class:"learn-rescue-letter"},H("b",{},k),H("small",{},String(S))));return{element:H("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...I),cells:I}},x=I=>{const k=i.stations[I];m.textContent=p("web_learn_rescue_station_fmt",I+1,a,k.name);const S=f(),_=H("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),M=H("button",{class:"primary"},p("web_learn_check")),O=H("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const C=_.value.trim();if(!/^-?\d+$/.test(C)){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_not_number")));return}if(Number(C)!==k.answer){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_wrong")),...k.hint?[In("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),_.select();return}_.disabled=M.disabled=!0;const B=i.alphabet.charAt(k.answer);S.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,B),h++,g();const E=I+1===a,U=H("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));U.addEventListener("click",()=>E?b():x(I+1)),O.className="learn-game-feedback right",O.replaceChildren(H("p",{},p("web_game_right")),H("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,H("span",{"aria-hidden":"true"}," → "),H("code",{},`'${B}'`)),In("div",{class:"learn-game-explain"},k.explanation),H("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),U),U.focus({preventScroll:!0})};M.addEventListener("click",P),_.addEventListener("keydown",C=>{C.key==="Enter"&&P()}),c.replaceChildren(cm(k.code),In("p",{class:"learn-game-question"},k.question),H("div",{class:"learn-rescue-answer"},_,M),O,H("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),cm(`String alphabet = "${i.alphabet}";`),S.element,d.element),_.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const I=H("div",{class:"learn-game-feedback",role:"status"}),k=H("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){I.className="learn-game-feedback wrong",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const S=H("button",{class:"primary"},p("web_learn_rescue_to_gate"));S.addEventListener("click",v),I.className="learn-game-feedback right",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_done")),S),S.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(In("p",{},i.crosswordText),d.element,k,I),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const I=H("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` -`).map(O=>{const P=O.indexOf(vs);return P<0?H("div",{class:"ln"},O||" "):H("div",{class:"ln"},O.slice(0,P),I,O.slice(P+vs.length))}),S=H("button",{class:"primary"},p("web_learn_rescue_open")),_=H("div",{class:"learn-game-feedback",role:"status"}),M=()=>{const O=I.value.trim();if(O!==i.keyword){const C=O.toUpperCase()===i.keyword.toUpperCase();_.className="learn-game-feedback wrong",_.replaceChildren(H("p",{},p(C?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=S.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=H("button",{},p("web_game_again"));P.addEventListener("click",w),_.className="learn-game-feedback right",_.replaceChildren(H("p",{},p("web_learn_rescue_freed")),In("div",{class:"learn-game-explain"},i.end),P)};S.addEventListener("click",M),I.addEventListener("keydown",O=>{O.key==="Enter"&&M()}),c.replaceChildren(In("p",{},i.gateText),H("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),S,_),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},z=H("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(In("p",{},i.intro),z),t}function yL(i){const e=IB(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=H("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var v;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(v=a.get(b))==null||v.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(H("span",{class:"learn-cw-empty"}));const v=`${f} ${b}`,w=H("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const S=o(f,b);S.some(_=>_.across===r)||(r=S[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",S=>{if(S.key==="Backspace"&&!w.value)l(f,b,-1);else if(S.key==="ArrowRight"||S.key==="ArrowLeft")r=!0,l(f,b,S.key==="ArrowRight"?1:-1);else if(S.key==="ArrowDown"||S.key==="ArrowUp")r=!1,l(f,b,S.key==="ArrowDown"?1:-1);else return;S.preventDefault()}),a.set(v,w);const z=t.get(v),I=H("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),k=n.get(v);k&&I.append(H("small",{class:"learn-cw-number"},String(k))),z!==void 0&&I.append(H("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=H("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,v)=>b.number-v.number)){const b=In("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var v;r=x.across,(v=a.get(`${x.row} ${x.col}`))==null||v.focus()}),f.append(b)}return H("div",{},H("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>H("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=H("div",{class:"learn-cw"},H("div",{class:"learn-cw-board"},s,H("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,H("span",{class:"mono",dir:"ltr"},...m))),H("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,v]=f.split(" ").map(Number),w=x.value!==e[b][v];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function Tt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function dm(i,e,t){const n=Tt(i,e);return n.innerHTML=Pe(t),n}function wL(i){const e=Tt("section",{class:"learn-cloze"});e.append(Tt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(dm("p",{},i.task)),e.append(Tt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=Tt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=Tt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=Tt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` -`),c.append(h)}e.append(c)}const n=Tt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?dm("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=Tt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=Tt("button",{},p("web_learn_cloze_solution")),o=Tt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=Tt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=CB(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=wt("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function da(i,e){return wt("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function hm(i,e,t,n){const a=wt("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function kL(i,e){const t=rg(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=wt("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=p0(i,o);return l.setAttribute("fill",g0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,yg(e,{...o,w:t.length>1?124:a},i)),r}function SL(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function TL(){const i=Qe("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=wt("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=p0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",g0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(Qe("dt",{},s),Qe("dd",{},p(n)))}return i}function jL(i){const e=Qe("section",{class:"learn-pap"});if(e.append(Qe("strong",{class:"learn-pap-title"},i.title)),i.task){const F=Qe("p");F.innerHTML=Pe(i.task),e.append(F)}e.append(Qe("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=LB(i),a=t.filter(Boolean),s=Math.min(...a.map(F=>F.x-F.w/2))-4,r=i.nodes.some(F=>F.shape==="raute"),o=Math.max(...a.map(F=>F.x+F.w/2),r?Math.max(...a.map(F=>F.x))+85+40:0)+4,l=wt("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++IL}`;l.innerHTML=``;const m=wt("g",{stroke:"#1c1c1e","stroke-width":2}),c=wt("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=F=>t[F].y-t[F].h/2,f=F=>t[F].y+t[F].h/2,x=i.nodes.map((F,A)=>A).filter(F=>!i.nodes[F].isSide);x.forEach((F,A)=>{const N=i.nodes[F],q=t[F],$=x[A+1];if($!==void 0&&(m.append(da([[q.x,f(F)],[q.x,g($)-2]],u)),N.shape==="raute"&&c.append(hm(N.sideExit==="nein"?d:h,q.x+6,f(F)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const ue=q.x+q.w/2;if(c.append(hm(N.sideExit==="ja"?d:h,ue+5,q.y-6,N.sideExit==="ja")),N.backTo!==void 0){const X=g(N.backTo)-14;m.append(da([[ue,q.y],[ue+22,q.y],[ue+22,X],[q.x,X]],u))}else if(N.side!==void 0){const X=t[N.side],me=g(F)-14;m.append(da([[ue,q.y],[X.x-X.w/2-2,q.y]],u)),m.append(da([[X.x,X.y-X.h/2],[X.x,me],[q.x,me]],u))}}),l.append(m,c);const b=i.nodes.map(()=>{}),v=[],w=[];let z;const I=Qe("p",{class:"learn-pap-status",role:"status"}),k=i.explanation?Qe("p",{class:"learn-explanation"}):void 0;k&&(k.innerHTML=Pe(i.explanation),k.hidden=!0);let S=!1;const _=()=>{v.forEach(F=>F.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},M=F=>{const A=v[F];A.replaceChildren();const N=i.nodes[F],q=b[F],$=p0(N.shape,t[F]);if($.setAttribute("class","learn-pap-shape"),q===void 0)$.setAttribute("fill","#f7f7f9"),$.setAttribute("stroke-dasharray","6 4"),A.append($),A.setAttribute("aria-label",p("web_learn_pap_empty"));else{const ue=i.nodes[q];$.setAttribute("fill",g0[ue.shape]),A.append($,yg(ue.text,t[F],N.shape)),A.setAttribute("aria-label",ue.text)}},O=()=>{i.nodes.forEach((F,A)=>M(A)),w.forEach((F,A)=>{F.hidden=b.includes(A),F.classList.toggle("selected",z===A)})},P=(F,A)=>{if(S)return;const N=b.indexOf(A);N>=0&&(b[N]=void 0),b[F]=A,z=void 0,_(),O()};i.nodes.forEach((F,A)=>{const N=wt("g",{class:"learn-pap-slot","data-slot":A,tabindex:0,role:"button"}),q=()=>{S||(z!==void 0?P(A,z):b[A]!==void 0&&(b[A]=void 0,_(),O()))};N.addEventListener("click",q),N.addEventListener("keydown",$=>{$.key!=="Enter"&&$.key!==" "||($.preventDefault(),q())}),v.push(N),l.append(N)});const C=Qe("div",{class:"learn-pap-tray"});let B=!1;for(const F of SL(i.nodes.length)){const A=i.nodes[F],N=Qe("button",{class:"learn-pap-card",type:"button","aria-label":A.text},kL(A.shape,A.text));w[F]=N,N.addEventListener("click",()=>{B||S||(z=z===F?void 0:F,O())}),N.addEventListener("pointerdown",q=>{if(S)return;B=!1;let $;const ue=le=>{var Te;!$&&Math.hypot(le.clientX-q.clientX,le.clientY-q.clientY)<6||($||(B=!0,$=N.cloneNode(!0),$.classList.add("learn-pap-ghost"),document.body.append($),N.classList.add("dragging")),$.style.left=`${le.clientX}px`,$.style.top=`${le.clientY}px`,v.forEach(Je=>Je.classList.remove("over")),(Te=X(le))==null||Te.classList.add("over"))},X=le=>{var Je;$&&($.style.display="none");const Te=(Je=document.elementFromPoint(le.clientX,le.clientY))==null?void 0:Je.closest("[data-slot]");return $&&($.style.display=""),Te&&v.includes(Te)?Te:void 0},me=le=>{if(N.removeEventListener("pointermove",ue),N.removeEventListener("pointerup",me),N.removeEventListener("pointercancel",me),v.forEach(Je=>Je.classList.remove("over")),N.classList.remove("dragging"),!$)return;const Te=le.type==="pointerup"?X(le):void 0;$.remove(),Te&&P(Number(Te.getAttribute("data-slot")),F),setTimeout(()=>B=!1)};N.setPointerCapture(q.pointerId),N.addEventListener("pointermove",ue),N.addEventListener("pointerup",me),N.addEventListener("pointercancel",me)}),C.append(N)}const E=Qe("button",{class:"learn-pap-check"},p("web_learn_check")),U=Qe("button",{},p("web_learn_cloze_solution")),ee=Qe("button",{},p("web_learn_cloze_again"));U.hidden=!0,ee.hidden=!0;const ge=()=>{S=!0,E.hidden=!0,U.hidden=!0,ee.hidden=!1,C.hidden=!0,fe.classList.add("done"),k&&(k.hidden=!1)};E.addEventListener("click",()=>{const F=b.filter(q=>q===void 0).length;let A=0;b.forEach((q,$)=>{const ue=q!==void 0&&PB(i,$,q);v[$].classList.toggle("right",ue),v[$].classList.toggle("wrong",q!==void 0&&!ue),ue&&A++});const N=A===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):F?p("web_learn_pap_missing_fmt",F):p("web_learn_pap_score_fmt",A,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?ge():F||(U.hidden=!1)}),U.addEventListener("click",()=>{i.nodes.forEach((F,A)=>b[A]=A),z=void 0,O(),_(),v.forEach(F=>F.classList.add("shown")),ge()}),ee.addEventListener("click",()=>{i.nodes.forEach((F,A)=>b[A]=void 0),S=!1,z=void 0,v.forEach(F=>F.classList.remove("shown")),_(),O(),E.hidden=!1,ee.hidden=!0,C.hidden=!1,fe.classList.remove("done"),k&&(k.hidden=!0)}),O();const Ie=Qe("div",{class:"learn-pap-left"});Ie.append(l),i.legend&&Ie.append(TL());const fe=Qe("div",{class:"learn-pap-work"},Ie,C);return e.append(fe,Qe("div",{class:"learn-pap-actions"},E,U,ee),I),k&&e.append(k),e}const _L="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function gm(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=Hu(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Vu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(_L)||l.push(u)}for(let u of l)for(;;){const m=Hu(a),c=m==null?void 0:m.exec(u.data),d=c?Vu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function CL(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const wg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},zg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),Ig=new Set(["ausfuehren","konsole","einzelschritt"]);function er(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function pm(i){return i==="elemente"?["editor","palette"]:zg.has(i)?["editor"]:i==="codelive"||Ig.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function AL(i){return er(i,new Set(["elemente"]))}function PL(i){return er(i,new Set(["dateien"]))}function OL(i){return er(i,zg)}function ML(i){return er(i,Ig)}function fm(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in wg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function ZL(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(wg[h.dataset.target??""]??":not(*)")].find(x=>x.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(pm(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=pm(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const _t='',DL=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function j(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function tt(i,e,t){const n=j(i,e);return n.innerHTML=t,n}const BL=i=>p(`element_${T[i]}`);function LL(i){return{caption:i,elements:[_e(T.anweisung,{textLines:["ø"]})]}}function xm(i){const e=i.start?si(i.start):void 0;return e?{...e,caption:e.caption||i.title}:LL(i.title)}class WL{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=j("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=CL(this.element),this.pointers=ZL(this.element,t=>this.host.reveal(t)),ws(Xu(r1())),this.restore()}restore(){const e=xe.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=An.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),ws(Xu(r1()));const e=j("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=j("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=tt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},_t);t.addEventListener("click",()=>this.host.collapse());const n=j("div",{class:"learn-head"},e,t);if(this.body=j("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=An.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=Va.map(r=>`- **${r.term}:** ${r.text}`).join(` -`),s=tt("div",{class:"learn-text learn-reference"},jn(`${Ha} + `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,cm(mm,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,cm(Ar,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Ze(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(wg(u)):m.textContent=je(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Ze(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...yg(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Ze(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?n1(r):"",o.hidden=!r}}function wg(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const y1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Hn=360/y1.length,dL="http://www.w3.org/2000/svg";function Fe(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function bt(i,e={},t){const n=document.createElementNS(dL,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function hL(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function dm(i,e){const t=bt("g",{class:e}),n=y1.map((a,s)=>{const r=bt("g",{transform:`rotate(${s*Hn})`});return r.append(bt("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function gL(i,e){let t=i,n=!1,a=-t*Hn;const s=Fe("section",{class:"learn-game learn-caesar"});s.append(Fe("div",{class:"learn-game-head"},Fe("strong",{},p("web_learn_caesar_title")))),s.append(Fe("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=bt("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(bt("circle",{r:196,class:"outer-disc"})),r.append(bt("path",{d:pL(196,92,Hn/2),class:"window"}));const o=dm(168,"outer-letters");r.append(o.group);for(let C=0;C{o.cells.forEach((B,E)=>B.classList.toggle("marked",E===C)),u.cells.forEach((B,E)=>B.classList.toggle("marked",C!==void 0&&E===(C+t)%26))},S=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),z.textContent=hL(v.value,n?-t:t)||" ";const C=Array.from(v.value.toUpperCase()).reverse().find(E=>y1.includes(E));if(C===void 0)return k();const B=y1.indexOf(C);k(n?(B-t+26)%26:B)},_=C=>{t=(C%26+26)%26,a=-t*Hn,S()};c.addEventListener("click",()=>_(t-1)),d.addEventListener("click",()=>_(t+1)),f.addEventListener("click",()=>{var C;n&&(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!1,S()}),x.addEventListener("click",()=>{var C;n||(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!0,S()}),v.addEventListener("input",S),o.cells.forEach((C,B)=>C.addEventListener("click",()=>k(B)));let M;const O=C=>{const B=r.getBoundingClientRect();return Math.atan2(C.clientY-(B.top+B.height/2),C.clientX-(B.left+B.width/2))*180/Math.PI};l.addEventListener("pointerdown",C=>{const B=C;M=O(B)-a,l.classList.add("dragging"),r.setPointerCapture(B.pointerId),B.preventDefault()}),r.addEventListener("pointermove",C=>{if(M===void 0)return;a=O(C)-M,l.setAttribute("transform",`rotate(${a})`);const B=Math.round(-a/Hn);if((B%26+26)%26!==t){t=(B%26+26)%26;const E=a;S(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{M!==void 0&&(M=void 0,l.classList.remove("dragging"),_(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),S(),s}function pL(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const p0=i=>p(`web_visubot_part_${i}`),zg=new WeakMap;function Ig(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=p0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=K(async()=>{const{Robot3D:c}=await import("./robot3d-DG_g7sTv.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return zg.set(a,m),m}function fL(i,e,t=!1){return Ig(i,e,t).box}function xL(i){const e=i.querySelector(".visubot-model"),t=e&&zg.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(p0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function bL(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=jn(`**${t+1}/${i.length}** ${i[t].question}`)},r=Ig([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",p0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(v=>{window.clearTimeout(v),window.clearInterval(v)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const v=Y("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,z=Y("div",{class:"learn-bomb-fuse"},Y("span",{})),I=Y("span",{class:"learn-bomb-time"}),k=Y("div",{class:"learn-bomb","aria-live":"polite"},Y("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),I,z),S=Y("div",{class:"learn-game-feedback",role:"status"}),_=v.code.split(` +`).map((E,U)=>{const ee=Y("button",{class:"ln",type:"button"},E||" ");return ee.disabled=!E.trim(),ee.addEventListener("click",()=>C(U+1===v.wrongLine?"right":"wrong",ee)),ee}),M=Y("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},..._),O=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-O>1e3)return m();const E=Math.max(0,w-(Date.now()-O)/1e3);I.textContent=p("web_game_time_fmt",Math.ceil(E)),z.firstChild.style.width=`${E/w*100}%`,k.classList.toggle("hurry",E<=5),E<=0&&C("time")},C=(E,U)=>{m(),_.forEach((Ie,fe)=>{Ie.disabled=!0,fe+1===v.wrongLine&&Ie.classList.add("right")}),U&&E==="wrong"&&U.classList.add("wrong");const ee=E==="right";ee&&l++,c(),k.classList.add(ee?"defused":"boom"),k.firstChild.textContent=ee?"✂️":"💥",S.className=`learn-game-feedback ${ee?"right":"wrong"}`;const ge=d();S.replaceChildren(Y("p",{},p(ee?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Rn("div",{class:"learn-game-explain"},v.explanation),Y("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,Y("code",{},v.fix.trim())),ge),ge.focus({preventScroll:!0})};s.replaceChildren(k,Rn("p",{class:"learn-game-question"},v.question),M,S),P();const B=window.setInterval(P,200);u.push(B)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(gm(v.code).element),w.push(Rn("p",{class:"learn-game-question"},v.question),Y("p",{class:"learn-order-hint"},p("web_game_order_hint")));const z=Y("div",{class:"learn-game-options learn-order"}),I=Y("div",{class:"learn-game-feedback",role:"status"});let k=0;const S=yL(v.options.length).map(M=>{const O=Y("span",{class:"learn-order-badge","aria-hidden":"true"}),P=Y("span",{});P.innerHTML=Pe(v.options[M].text);const C=Y("button",{},O,P);return C.addEventListener("click",()=>{if(M!==k)return C.classList.add("wrong"),_(!1);C.classList.add("right"),O.textContent=String(++k),C.disabled=!0,k===v.options.length&&_(!0)}),z.append(C),{k:M,b:C,badge:O}}),_=M=>{for(const{k:P,b:C,badge:B}of[...S].sort((E,U)=>E.k-U.k))C.disabled=!0,B.textContent=String(P+1),z.append(C);M&&l++,c(),I.className=`learn-game-feedback ${M?"right":"wrong"}`;const O=d();I.replaceChildren(Y("p",{},p(M?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation),O),O.focus({preventScroll:!0})};s.replaceChildren(...w,z,I)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=gm(v.code),z=[];let I;i.kind==="zuhoerer"?(I=wL(sg(v.code),w),z.push(Y("div",{class:"learn-swing-row"},w.element,I.element)),v.clicks.length&&z.push(Y("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((O,P)=>[...P?[" → "]:[],Y("code",{},O)])))):v.code.trim()&&z.push(w.element),z.push(Rn("p",{class:"learn-game-question"},v.question));const k=Y("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),S=Y("div",{class:"learn-game-feedback",role:"status"}),_=v.options.map(O=>{const P=Y("button",{});return i.kind==="layout"?P.append(IL(O.text)):O.text.includes(` +`)?P.append(zL(O.text)):P.innerHTML=Pe(O.text),P.addEventListener("click",()=>M(O.right,P)),k.append(P),P}),M=(O,P)=>{_.forEach((B,E)=>{B.disabled=!0,v.options[E].right&&B.classList.add("right")}),O||P.classList.add("wrong"),O&&l++,c(),S.className=`learn-game-feedback ${O?"right":"wrong"}`;const C=d();S.replaceChildren(Y("p",{},p(O?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation)),S.append(C),I&&(u=I.replay(v.clicks,()=>C.before(Y("p",{class:"learn-swing-try"},p("web_game_try"))))),C.focus({preventScroll:!0})};s.replaceChildren(...z,k,S)},x=()=>{m(),a.textContent="";const v=Y("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(Y("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),Y("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},b=Y("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Rn("p",{},i.intro),b),t}function yL(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function gm(i){const e=i.split(` +`).map(n=>Y("div",{class:"ln"},n||" "));return{element:Y("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function wL(i,e){const t=rg(i),n=Y("div",{class:"learn-swing-window",dir:"ltr"});n.append(Y("div",{class:"learn-swing-title"},i.title||" "));const a=Y("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=Y("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=Y("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=Y("p",{class:"learn-swing-event",role:"status"}),l=Y("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} +`).join(""))},m=c=>u(og(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*hm));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(lg(i,t,g.name)))}),d()},(c.length+.3)*hm)),h}}}function zL(i){return Y("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function IL(i){const e=ag(i),t=Y("div",{class:"learn-layout-window",dir:"ltr"},Y("div",{class:"learn-layout-title"})),n=Y("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>Y("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function H(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function In(i,e,t){const n=H(i,e);return n.innerHTML=Pe(t),n}function pm(i){return H("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` +`).map(e=>H("div",{class:"ln"},e||" ")))}function kL(i,e){const t=H("section",{class:"learn-game learn-rescue"}),n=H("div",{class:"learn-game-head"});n.append(H("img",{src:e,alt:"",width:"40",height:"40"}),H("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>H("span",{class:"learn-rescue-dot"})),r=H("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=H("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",H("span",{class:"learn-rescue-zora"},"🐐"),H("span",{class:"learn-rescue-fox"},"🦊")),l=H("span",{class:"learn-rescue-free"},"🐐"),u=H("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=H("p",{class:"learn-game-status"}),c=H("div",{class:"learn-game-stage"}),d=SL(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((I,k)=>I.classList.toggle("done",k{const I=[...i.alphabet].map((k,S)=>H("span",{class:"learn-rescue-letter"},H("b",{},k),H("small",{},String(S))));return{element:H("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...I),cells:I}},x=I=>{const k=i.stations[I];m.textContent=p("web_learn_rescue_station_fmt",I+1,a,k.name);const S=f(),_=H("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),M=H("button",{class:"primary"},p("web_learn_check")),O=H("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const C=_.value.trim();if(!/^-?\d+$/.test(C)){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_not_number")));return}if(Number(C)!==k.answer){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_wrong")),...k.hint?[In("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),_.select();return}_.disabled=M.disabled=!0;const B=i.alphabet.charAt(k.answer);S.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,B),h++,g();const E=I+1===a,U=H("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));U.addEventListener("click",()=>E?b():x(I+1)),O.className="learn-game-feedback right",O.replaceChildren(H("p",{},p("web_game_right")),H("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,H("span",{"aria-hidden":"true"}," → "),H("code",{},`'${B}'`)),In("div",{class:"learn-game-explain"},k.explanation),H("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),U),U.focus({preventScroll:!0})};M.addEventListener("click",P),_.addEventListener("keydown",C=>{C.key==="Enter"&&P()}),c.replaceChildren(pm(k.code),In("p",{class:"learn-game-question"},k.question),H("div",{class:"learn-rescue-answer"},_,M),O,H("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),pm(`String alphabet = "${i.alphabet}";`),S.element,d.element),_.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const I=H("div",{class:"learn-game-feedback",role:"status"}),k=H("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){I.className="learn-game-feedback wrong",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const S=H("button",{class:"primary"},p("web_learn_rescue_to_gate"));S.addEventListener("click",v),I.className="learn-game-feedback right",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_done")),S),S.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(In("p",{},i.crosswordText),d.element,k,I),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const I=H("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` +`).map(O=>{const P=O.indexOf(ws);return P<0?H("div",{class:"ln"},O||" "):H("div",{class:"ln"},O.slice(0,P),I,O.slice(P+ws.length))}),S=H("button",{class:"primary"},p("web_learn_rescue_open")),_=H("div",{class:"learn-game-feedback",role:"status"}),M=()=>{const O=I.value.trim();if(O!==i.keyword){const C=O.toUpperCase()===i.keyword.toUpperCase();_.className="learn-game-feedback wrong",_.replaceChildren(H("p",{},p(C?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=S.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=H("button",{},p("web_game_again"));P.addEventListener("click",w),_.className="learn-game-feedback right",_.replaceChildren(H("p",{},p("web_learn_rescue_freed")),In("div",{class:"learn-game-explain"},i.end),P)};S.addEventListener("click",M),I.addEventListener("keydown",O=>{O.key==="Enter"&&M()}),c.replaceChildren(In("p",{},i.gateText),H("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),S,_),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},z=H("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(In("p",{},i.intro),z),t}function SL(i){const e=_B(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=H("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var v;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(v=a.get(b))==null||v.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(H("span",{class:"learn-cw-empty"}));const v=`${f} ${b}`,w=H("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const S=o(f,b);S.some(_=>_.across===r)||(r=S[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",S=>{if(S.key==="Backspace"&&!w.value)l(f,b,-1);else if(S.key==="ArrowRight"||S.key==="ArrowLeft")r=!0,l(f,b,S.key==="ArrowRight"?1:-1);else if(S.key==="ArrowDown"||S.key==="ArrowUp")r=!1,l(f,b,S.key==="ArrowDown"?1:-1);else return;S.preventDefault()}),a.set(v,w);const z=t.get(v),I=H("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),k=n.get(v);k&&I.append(H("small",{class:"learn-cw-number"},String(k))),z!==void 0&&I.append(H("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=H("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,v)=>b.number-v.number)){const b=In("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var v;r=x.across,(v=a.get(`${x.row} ${x.col}`))==null||v.focus()}),f.append(b)}return H("div",{},H("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>H("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=H("div",{class:"learn-cw"},H("div",{class:"learn-cw-board"},s,H("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,H("span",{class:"mono",dir:"ltr"},...m))),H("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,v]=f.split(" ").map(Number),w=x.value!==e[b][v];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function Tt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function fm(i,e,t){const n=Tt(i,e);return n.innerHTML=Pe(t),n}function TL(i){const e=Tt("section",{class:"learn-cloze"});e.append(Tt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(fm("p",{},i.task)),e.append(Tt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=Tt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=Tt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=Tt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` +`),c.append(h)}e.append(c)}const n=Tt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?fm("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=Tt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=Tt("button",{},p("web_learn_cloze_solution")),o=Tt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=Tt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=ZB(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=wt("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function da(i,e){return wt("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function xm(i,e,t,n){const a=wt("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function CL(i,e){const t=mg(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=wt("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=x0(i,o);return l.setAttribute("fill",f0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,kg(e,{...o,w:t.length>1?124:a},i)),r}function AL(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function PL(){const i=Qe("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=wt("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=x0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",f0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(Qe("dt",{},s),Qe("dd",{},p(n)))}return i}function OL(i){const e=Qe("section",{class:"learn-pap"});if(e.append(Qe("strong",{class:"learn-pap-title"},i.title)),i.task){const F=Qe("p");F.innerHTML=Pe(i.task),e.append(F)}e.append(Qe("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=FB(i),a=t.filter(Boolean),s=Math.min(...a.map(F=>F.x-F.w/2))-4,r=i.nodes.some(F=>F.shape==="raute"),o=Math.max(...a.map(F=>F.x+F.w/2),r?Math.max(...a.map(F=>F.x))+85+40:0)+4,l=wt("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++_L}`;l.innerHTML=``;const m=wt("g",{stroke:"#1c1c1e","stroke-width":2}),c=wt("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=F=>t[F].y-t[F].h/2,f=F=>t[F].y+t[F].h/2,x=i.nodes.map((F,A)=>A).filter(F=>!i.nodes[F].isSide);x.forEach((F,A)=>{const N=i.nodes[F],q=t[F],$=x[A+1];if($!==void 0&&(m.append(da([[q.x,f(F)],[q.x,g($)-2]],u)),N.shape==="raute"&&c.append(xm(N.sideExit==="nein"?d:h,q.x+6,f(F)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const ue=q.x+q.w/2;if(c.append(xm(N.sideExit==="ja"?d:h,ue+5,q.y-6,N.sideExit==="ja")),N.backTo!==void 0){const X=g(N.backTo)-14;m.append(da([[ue,q.y],[ue+22,q.y],[ue+22,X],[q.x,X]],u))}else if(N.side!==void 0){const X=t[N.side],me=g(F)-14;m.append(da([[ue,q.y],[X.x-X.w/2-2,q.y]],u)),m.append(da([[X.x,X.y-X.h/2],[X.x,me],[q.x,me]],u))}}),l.append(m,c);const b=i.nodes.map(()=>{}),v=[],w=[];let z;const I=Qe("p",{class:"learn-pap-status",role:"status"}),k=i.explanation?Qe("p",{class:"learn-explanation"}):void 0;k&&(k.innerHTML=Pe(i.explanation),k.hidden=!0);let S=!1;const _=()=>{v.forEach(F=>F.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},M=F=>{const A=v[F];A.replaceChildren();const N=i.nodes[F],q=b[F],$=x0(N.shape,t[F]);if($.setAttribute("class","learn-pap-shape"),q===void 0)$.setAttribute("fill","#f7f7f9"),$.setAttribute("stroke-dasharray","6 4"),A.append($),A.setAttribute("aria-label",p("web_learn_pap_empty"));else{const ue=i.nodes[q];$.setAttribute("fill",f0[ue.shape]),A.append($,kg(ue.text,t[F],N.shape)),A.setAttribute("aria-label",ue.text)}},O=()=>{i.nodes.forEach((F,A)=>M(A)),w.forEach((F,A)=>{F.hidden=b.includes(A),F.classList.toggle("selected",z===A)})},P=(F,A)=>{if(S)return;const N=b.indexOf(A);N>=0&&(b[N]=void 0),b[F]=A,z=void 0,_(),O()};i.nodes.forEach((F,A)=>{const N=wt("g",{class:"learn-pap-slot","data-slot":A,tabindex:0,role:"button"}),q=()=>{S||(z!==void 0?P(A,z):b[A]!==void 0&&(b[A]=void 0,_(),O()))};N.addEventListener("click",q),N.addEventListener("keydown",$=>{$.key!=="Enter"&&$.key!==" "||($.preventDefault(),q())}),v.push(N),l.append(N)});const C=Qe("div",{class:"learn-pap-tray"});let B=!1;for(const F of AL(i.nodes.length)){const A=i.nodes[F],N=Qe("button",{class:"learn-pap-card",type:"button","aria-label":A.text},CL(A.shape,A.text));w[F]=N,N.addEventListener("click",()=>{B||S||(z=z===F?void 0:F,O())}),N.addEventListener("pointerdown",q=>{if(S)return;B=!1;let $;const ue=le=>{var Te;!$&&Math.hypot(le.clientX-q.clientX,le.clientY-q.clientY)<6||($||(B=!0,$=N.cloneNode(!0),$.classList.add("learn-pap-ghost"),document.body.append($),N.classList.add("dragging")),$.style.left=`${le.clientX}px`,$.style.top=`${le.clientY}px`,v.forEach(Je=>Je.classList.remove("over")),(Te=X(le))==null||Te.classList.add("over"))},X=le=>{var Je;$&&($.style.display="none");const Te=(Je=document.elementFromPoint(le.clientX,le.clientY))==null?void 0:Je.closest("[data-slot]");return $&&($.style.display=""),Te&&v.includes(Te)?Te:void 0},me=le=>{if(N.removeEventListener("pointermove",ue),N.removeEventListener("pointerup",me),N.removeEventListener("pointercancel",me),v.forEach(Je=>Je.classList.remove("over")),N.classList.remove("dragging"),!$)return;const Te=le.type==="pointerup"?X(le):void 0;$.remove(),Te&&P(Number(Te.getAttribute("data-slot")),F),setTimeout(()=>B=!1)};N.setPointerCapture(q.pointerId),N.addEventListener("pointermove",ue),N.addEventListener("pointerup",me),N.addEventListener("pointercancel",me)}),C.append(N)}const E=Qe("button",{class:"learn-pap-check"},p("web_learn_check")),U=Qe("button",{},p("web_learn_cloze_solution")),ee=Qe("button",{},p("web_learn_cloze_again"));U.hidden=!0,ee.hidden=!0;const ge=()=>{S=!0,E.hidden=!0,U.hidden=!0,ee.hidden=!1,C.hidden=!0,fe.classList.add("done"),k&&(k.hidden=!1)};E.addEventListener("click",()=>{const F=b.filter(q=>q===void 0).length;let A=0;b.forEach((q,$)=>{const ue=q!==void 0&&BB(i,$,q);v[$].classList.toggle("right",ue),v[$].classList.toggle("wrong",q!==void 0&&!ue),ue&&A++});const N=A===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):F?p("web_learn_pap_missing_fmt",F):p("web_learn_pap_score_fmt",A,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?ge():F||(U.hidden=!1)}),U.addEventListener("click",()=>{i.nodes.forEach((F,A)=>b[A]=A),z=void 0,O(),_(),v.forEach(F=>F.classList.add("shown")),ge()}),ee.addEventListener("click",()=>{i.nodes.forEach((F,A)=>b[A]=void 0),S=!1,z=void 0,v.forEach(F=>F.classList.remove("shown")),_(),O(),E.hidden=!1,ee.hidden=!0,C.hidden=!1,fe.classList.remove("done"),k&&(k.hidden=!0)}),O();const Ie=Qe("div",{class:"learn-pap-left"});Ie.append(l),i.legend&&Ie.append(PL());const fe=Qe("div",{class:"learn-pap-work"},Ie,C);return e.append(fe,Qe("div",{class:"learn-pap-actions"},E,U,ee),I),k&&e.append(k),e}const ML="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function bm(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=Uu(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Yu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(ML)||l.push(u)}for(let u of l)for(;;){const m=Uu(a),c=m==null?void 0:m.exec(u.data),d=c?Yu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function ZL(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Sg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},Tg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),jg=new Set(["ausfuehren","konsole","einzelschritt"]);function nr(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function vm(i){return i==="elemente"?["editor","palette"]:Tg.has(i)?["editor"]:i==="codelive"||jg.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function DL(i){return nr(i,new Set(["elemente"]))}function BL(i){return nr(i,new Set(["dateien"]))}function LL(i){return nr(i,Tg)}function WL(i){return nr(i,jg)}function ym(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Sg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function EL(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(Sg[h.dataset.target??""]??":not(*)")].find(x=>x.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(vm(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=vm(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const _t='',NL=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function j(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function tt(i,e,t){const n=j(i,e);return n.innerHTML=t,n}const JL=i=>p(`element_${T[i]}`);function FL(i){return{caption:i,elements:[_e(T.anweisung,{textLines:["ø"]})]}}function wm(i){const e=i.start?si(i.start):void 0;return e?{...e,caption:e.caption||i.title}:FL(i.title)}class RL{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=j("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=ZL(this.element),this.pointers=EL(this.element,t=>this.host.reveal(t)),Is(nm(r1())),this.restore()}restore(){const e=xe.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=An.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),Is(nm(r1()));const e=j("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=j("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=tt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},_t);t.addEventListener("click",()=>this.host.collapse());const n=j("div",{class:"learn-head"},e,t);if(this.body=j("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=An.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=Qa.map(r=>`- **${r.term}:** ${r.text}`).join(` +`),s=tt("div",{class:"learn-text learn-reference"},jn(`${Va} ## ${p("web_learn_terms")} -${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=j("details",{class:"reference-group"});r.open=n.includes(s);const o=j("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){xe.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(j("p",{class:"hint"},p("web_learn_intro")));for(const e of DL()){this.body.append(j("h3",{class:"learn-section"},e.name));const t=j("ol",{class:"learn-list"});for(const n of e.lessons){const a=xe.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=j("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},j("span",{class:"learn-num"},String(n.number)),j("span",{class:"learn-item-text"},j("strong",{},n.robot?`🤖 ${n.title}`:n.title),j("small",{},n.summary)),j("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(j("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=xe.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=j("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=j("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(j("div",{class:"learn-lesson-head"},j("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),j("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),j("h2",{class:"learn-title"},j("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,j("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=j("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),fm(this.body),dL(this.body),this.openNeededColumns(a.blocks),gm(this.body,Va),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=j("div",{class:a}),r=j("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=j("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{xe.updateLesson(e.id,{done:!0});const l=Ot.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){xe.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);OL(this.body)?(this.host.showEditor(),AL(this.body)&&this.host.reveal(["palette"])):PL(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),ML(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(j("p",{class:"hint"},p("web_learn_tasks_intro")));const e=j("ul",{class:"learn-list"});for(const t of An){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>xe.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=j("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},j("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),j("span",{class:"learn-item-text"},j("strong",{},t.title),j("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),j("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(j("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=j("details",{class:"learn-teacher"},j("summary",{},p("web_learn_teacher")));if(am()){e.setAttribute("open","");const s=j("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{aL(),this.render()}),e.append(j("p",{},p("web_learn_teacher_on")),s),e}const t=j("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=j("p",{class:"learn-result",role:"status"}),a=j("form",{class:"group"},t,j("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await iL(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(j("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=j("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,j("h2",{class:"learn-title"},e.title)),n){const a=j("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(j("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),fm(this.body),this.openNeededColumns(e.blocks),gm(this.body,Va)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(tt("div",{class:"learn-text"},jn(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return gL(e.game,ca);case"rescueGame":return vL(e.game,ca);case"caesar":return uL(e.key,e.text);case"cloze":return wL(e.cloze);case"pap":return jL(e.pap);case"textFile":return pg(e.name,e.content);case"robotModel":return cL(e.focus,e.view,e.spin);case"robotQuiz":return hL(e.tasks,e.done)}}renderBrag(e,t=!1){const n=j("aside",{class:"learn-brag"});n.append(j("img",{src:ca,alt:"",width:"48",height:"48"}));const a=j("div",{},j("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(tt("div",{class:"learn-text"},jn(e))),n.append(a),n}renderGame(e){const n=j("section",{class:"learn-game"}),a=j("div",{class:"learn-game-head"});a.append(j("img",{src:ca,alt:"",width:"40",height:"40"}),j("strong",{},p("web_game_title")));const s=j("p",{class:"learn-game-status"}),r=j("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=Tb(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=j("div",{class:"learn-game-values mono"});for(const[w,z]of jb(d))h.append(j("code",{},`${w} = ${z}`));const g=j("div",{class:"group learn-game-answers"}),f=j("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=j("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=j("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=x.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=j("div",{class:"learn-game-steps mono"});kb(d.condition,d.values).forEach((S,_)=>I.append(j("div",{},`${_?"→ ":""}${S}`)));const k=j("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(j("p",{},p(z?"web_game_right":"web_game_wrong")),I,k),k.focus()};f.addEventListener("click",()=>v(!0)),x.addEventListener("click",()=>v(!1)),r.replaceChildren(h,j("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=j("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(j("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),j("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=j("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(j("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=j("figure",{class:"learn-figure"}),a=j("div",{class:"learn-images"});for(const s of e){const r=jr(s);r&&a.append(j("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(tt("figcaption",{},Pe(t))),n}renderGraphic(e,t,n){const a=j("figure",{class:"learn-figure"}),s=jr(e),r=n?jr(n):void 0;if(s&&r){const o=j("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=j("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,j("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(j("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(tt("figcaption",{},Pe(t))),a}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=j("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=si(e),a=j("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(j("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(tt("figcaption",{},Pe(t)));const r=j("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=j("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>xe.exercise(e.id),a=j("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(j("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),EL(e),tt("div",{class:"learn-text"},jn(e.task)));const s=j("div",{class:"learn-result",role:"status"}),r=j("div",{class:"learn-hints"}),o=j("div",{class:"group"}),l=j("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=xm(e);if(c)try{d=Hl(c)}catch{}this.host.openExercise(e,d)});const u=j("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Jl)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=vb(c,e.tests,this.host.subprogramsFor(e.id),Qa),h=yb(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in T&&!h.has(T[b])),f=e.loopDepth!==void 0&&Wo(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(xe.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=j("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(tt("aside",{class:"lesson-note"},jn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=j("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}xe.resetExercise(e.id),this.host.resetExercise(e.id,xm(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),am()&&e.solution){const c=si(e.solution);if(c){const d=j("details",{class:"learn-solution"},j("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(j("div",{class:"learn-preview",dir:"ltr"},h));const g=j("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=si(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=si(f),b=x&&this.host.preview(x);b&&d.append(j("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(j("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(j("p",{},`✗ ${p("web_learn_missing_fmt",BL(T[d]))}`));s&&e.append(j("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=j("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,v])=>`mbot.${b}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=j("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(j("span",{},`${p("web_learn_expected")}: `,j("code",{},ii(d.test.drive)||"–")),j("span",{},`${p("web_learn_actual")}: `,j("code",{},ii(d.result.drive??[])||"–"))),d.test.actions&&x.append(j("span",{},`${p("web_learn_expected")}: `,j("code",{},ii(d.test.actions)||"–")),j("span",{},`${p("web_learn_actual")}: `,j("code",{},ii(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");x.append(j("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(j("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(j("span",{},`📺 ${p("web_learn_expected")}: `,j("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,j("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Qa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Qa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(j("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(j("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(j("span",{},`${p("web_learn_expected")}: `,j("code",{},d.test.expected.join(" | ")||"–")),j("span",{},`${p("web_learn_actual")}: `,j("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(j("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,j("code",{},b.lines.join(" | ")||"–")),j("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,j("code",{},Kh((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));!d.passed&&!d.result.error&&bb(d.result.outputs,d.test.expected)&&x.append(j("span",{class:"learn-error"},p("web_learn_missing_line_break"))),d.result.error&&x.append(j("span",{class:"learn-error"},n1(d.result.error))),d.result.missingInput&&x.append(j("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(j("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(j("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(j("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderCompetences(e){const t=j("aside",{class:"learn-competences"},j("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=j("ul",{});for(const a of e)n.append(tt("li",{},Pe(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=j("div",{class:"learn-checklist-wrap"}),r=j("p",{class:"learn-rating-legend"});for(const l of a)r.append(j("span",{},`${l.icon} ${l.label}`));const o=j("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=xe.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=tt("span",{class:"learn-check-text"},Pe(l.text)),g=j("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=j("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,x(),!n)return;const I={...xe.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],xe.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),x=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),b.dataset.rating=d??""};g.append(...f);const b=j("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=j("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:xe.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),b.append(I)}x(),o.append(b)}),s}renderQuiz(e,t,n){const a=j("div",{class:"learn-quiz"}),s=j("p",{class:"learn-score",role:"status"}),r=()=>n?xe.lesson(n.id).quiz??{}:{},o=j("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,x)=>f.pairs?f.pairs.every((b,v)=>u[`${t}-${x}-${v}`]!==void 0):u[`${t}-${x}`]!==void 0,c=(f,x)=>{var b;return!!(f.pairs?f.pairs.every((v,w)=>bm(f)[u[`${t}-${x}-${w}`]]===f.pairs[w].right):(b=f.options[u[`${t}-${x}`]])!=null&&b.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=j("fieldset",{},tt("legend",{},Pe(u.question))),h=tt("p",{class:"learn-explanation"},Pe(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((x,b)=>{x.classList.toggle("right",f!==void 0&&u.options[b].correct),x.classList.toggle("wrong",f===b&&!u.options[b].correct),x.setAttribute("aria-pressed",String(f===b))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,x)=>{const b=tt("button",{class:"learn-option"},Pe(f.text));b.addEventListener("click",()=>{n&&xe.updateLesson(n.id,{quiz:{...r(),[c]:x}}),g(x),l()}),d.append(b)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=xe.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],x=f===!0?"sun":f||void 0,b=h.step===void 0?[]:n.map((k,S)=>k.step===h.step?S:-1).filter(k=>k>=0),v=b.filter(k=>!a(k));let w="";x==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(k=>k+1).join(", ")):x&&x!=="sun"&&b.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=j("li",{class:w?"learn-review-deviation":""}),I=tt("span",{class:"learn-check-text"},Pe(h.text));if(w&&I.append(j("br",{}),j("em",{},w)),z.append(I,j("span",{class:"learn-review-icon","aria-label":p(x?`web_learn_rating_${x}`:"web_learn_review_unrated")},x?s[x]:"–")),w&&x==="sun"&&h.step!==void 0){const k=h.step,S=j("button",{class:"link-button learn-check-link"},p("web_learn_review"));S.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:xe.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,k)}),z.append(S)}o.push(z)})})),o.length&&e.append(j("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),j("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),j("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=bm(e),u=j("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?xe.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=j("select",{class:"learn-match-select"});b.append(j("option",{value:""},"–")),l.forEach((w,z)=>b.append(j("option",{value:String(z)},w)));const v=tt("label",{class:"learn-match-left"},Pe(x.left));return v.append(b),u.append(v),b}),f=()=>{const x=o.every((b,v)=>h(v)!==void 0);g.forEach((b,v)=>{const w=h(v);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[v].right),b.classList.toggle("wrong",x&&l[w]!==o[v].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const v={...c()};x.value===""?delete v[`${t}-${b}`]:v[`${t}-${b}`]=Number(x.value),d(v),f(),r()})),f(),u}}function bm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function EL(i){const e=og(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=j("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(j("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const NL=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,tr="visustruct.visubot";function nr(){try{return localStorage.getItem(tr)}catch{return null}}function hi(){const i=nr();return i==="1"||i==="kurs"?"on":"off"}const kg=()=>nr()==="2";function Sg(){try{localStorage.setItem(tr,"2")}catch{}}const Tg=()=>nr()==="3";function jg(){try{localStorage.setItem(tr,"3")}catch{}}const JL=()=>nr()!==null;function Ar(i){try{localStorage.setItem(tr,i==="on"?"1":"0")}catch{}}const FL=`VisuBot`,Vn=()=>hi()!=="off",vm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Fo(){const i=kg()?"object":Tg()?"flow":hi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
+${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=j("details",{class:"reference-group"});r.open=n.includes(s);const o=j("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){xe.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(j("p",{class:"hint"},p("web_learn_intro")));for(const e of NL()){this.body.append(j("h3",{class:"learn-section"},e.name));const t=j("ol",{class:"learn-list"});for(const n of e.lessons){const a=xe.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=j("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},j("span",{class:"learn-num"},String(n.number)),j("span",{class:"learn-item-text"},j("strong",{},n.robot?`🤖 ${n.title}`:n.title),j("small",{},n.summary)),j("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(j("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=xe.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=j("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=j("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(j("div",{class:"learn-lesson-head"},j("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),j("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),j("h2",{class:"learn-title"},j("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,j("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=j("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),ym(this.body),xL(this.body),this.openNeededColumns(a.blocks),bm(this.body,Qa),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=j("div",{class:a}),r=j("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=j("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{xe.updateLesson(e.id,{done:!0});const l=Ot.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){xe.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);LL(this.body)?(this.host.showEditor(),DL(this.body)&&this.host.reveal(["palette"])):BL(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),WL(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(j("p",{class:"hint"},p("web_learn_tasks_intro")));const e=j("ul",{class:"learn-list"});for(const t of An){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>xe.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=j("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},j("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),j("span",{class:"learn-item-text"},j("strong",{},t.title),j("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),j("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(j("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=j("details",{class:"learn-teacher"},j("summary",{},p("web_learn_teacher")));if(lm()){e.setAttribute("open","");const s=j("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{uL(),this.render()}),e.append(j("p",{},p("web_learn_teacher_on")),s),e}const t=j("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=j("p",{class:"learn-result",role:"status"}),a=j("form",{class:"group"},t,j("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await lL(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(j("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=j("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,j("h2",{class:"learn-title"},e.title)),n){const a=j("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(j("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),ym(this.body),this.openNeededColumns(e.blocks),bm(this.body,Qa)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(tt("div",{class:"learn-text"},jn(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return vL(e.game,ca);case"rescueGame":return kL(e.game,ca);case"caesar":return gL(e.key,e.text);case"cloze":return TL(e.cloze);case"pap":return OL(e.pap);case"textFile":return vg(e.name,e.content);case"robotModel":return fL(e.focus,e.view,e.spin);case"robotQuiz":return bL(e.tasks,e.done)}}renderBrag(e,t=!1){const n=j("aside",{class:"learn-brag"});n.append(j("img",{src:ca,alt:"",width:"48",height:"48"}));const a=j("div",{},j("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(tt("div",{class:"learn-text"},jn(e))),n.append(a),n}renderGame(e){const n=j("section",{class:"learn-game"}),a=j("div",{class:"learn-game-head"});a.append(j("img",{src:ca,alt:"",width:"40",height:"40"}),j("strong",{},p("web_game_title")));const s=j("p",{class:"learn-game-status"}),r=j("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=Pb(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=j("div",{class:"learn-game-values mono"});for(const[w,z]of Ob(d))h.append(j("code",{},`${w} = ${z}`));const g=j("div",{class:"group learn-game-answers"}),f=j("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=j("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=j("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=x.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=j("div",{class:"learn-game-steps mono"});Cb(d.condition,d.values).forEach((S,_)=>I.append(j("div",{},`${_?"→ ":""}${S}`)));const k=j("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(j("p",{},p(z?"web_game_right":"web_game_wrong")),I,k),k.focus()};f.addEventListener("click",()=>v(!0)),x.addEventListener("click",()=>v(!1)),r.replaceChildren(h,j("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=j("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(j("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),j("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=j("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(j("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=j("figure",{class:"learn-figure"}),a=j("div",{class:"learn-images"});for(const s of e){const r=Cr(s);r&&a.append(j("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(tt("figcaption",{},Pe(t))),n}renderGraphic(e,t,n){const a=j("figure",{class:"learn-figure"}),s=Cr(e),r=n?Cr(n):void 0;if(s&&r){const o=j("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=j("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,j("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(j("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(tt("figcaption",{},Pe(t))),a}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=j("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=si(e),a=j("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(j("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(tt("figcaption",{},Pe(t)));const r=j("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=j("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>xe.exercise(e.id),a=j("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(j("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),GL(e),tt("div",{class:"learn-text"},jn(e.task)));const s=j("div",{class:"learn-result",role:"status"}),r=j("div",{class:"learn-hints"}),o=j("div",{class:"group"}),l=j("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=wm(e);if(c)try{d=Vl(c)}catch{}this.host.openExercise(e,d)});const u=j("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Fl)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=kb(c,e.tests,this.host.subprogramsFor(e.id),qa),h=Sb(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in T&&!h.has(T[b])),f=e.loopDepth!==void 0&&Eo(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(xe.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=j("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(tt("aside",{class:"lesson-note"},jn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=j("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}xe.resetExercise(e.id),this.host.resetExercise(e.id,wm(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),lm()&&e.solution){const c=si(e.solution);if(c){const d=j("details",{class:"learn-solution"},j("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(j("div",{class:"learn-preview",dir:"ltr"},h));const g=j("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=si(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=si(f),b=x&&this.host.preview(x);b&&d.append(j("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(j("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(j("p",{},`✗ ${p("web_learn_missing_fmt",JL(T[d]))}`));s&&e.append(j("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=j("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,v])=>`mbot.${b}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=j("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(j("span",{},`${p("web_learn_expected")}: `,j("code",{},ii(d.test.drive)||"–")),j("span",{},`${p("web_learn_actual")}: `,j("code",{},ii(d.result.drive??[])||"–"))),d.test.actions&&x.append(j("span",{},`${p("web_learn_expected")}: `,j("code",{},ii(d.test.actions)||"–")),j("span",{},`${p("web_learn_actual")}: `,j("code",{},ii(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");x.append(j("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(j("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(j("span",{},`📺 ${p("web_learn_expected")}: `,j("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,j("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=qa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=qa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(j("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(j("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(j("span",{},`${p("web_learn_expected")}: `,j("code",{},d.test.expected.join(" | ")||"–")),j("span",{},`${p("web_learn_actual")}: `,j("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(j("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,j("code",{},b.lines.join(" | ")||"–")),j("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,j("code",{},ig((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));!d.passed&&!d.result.error&&Ib(d.result.outputs,d.test.expected)&&x.append(j("span",{class:"learn-error"},p("web_learn_missing_line_break"))),d.result.error&&x.append(j("span",{class:"learn-error"},n1(d.result.error))),d.result.missingInput&&x.append(j("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(j("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(j("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(j("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderCompetences(e){const t=j("aside",{class:"learn-competences"},j("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=j("ul",{});for(const a of e)n.append(tt("li",{},Pe(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=j("div",{class:"learn-checklist-wrap"}),r=j("p",{class:"learn-rating-legend"});for(const l of a)r.append(j("span",{},`${l.icon} ${l.label}`));const o=j("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=xe.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=tt("span",{class:"learn-check-text"},Pe(l.text)),g=j("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=j("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,x(),!n)return;const I={...xe.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],xe.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),x=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),b.dataset.rating=d??""};g.append(...f);const b=j("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=j("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:xe.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),b.append(I)}x(),o.append(b)}),s}renderQuiz(e,t,n){const a=j("div",{class:"learn-quiz"}),s=j("p",{class:"learn-score",role:"status"}),r=()=>n?xe.lesson(n.id).quiz??{}:{},o=j("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,x)=>f.pairs?f.pairs.every((b,v)=>u[`${t}-${x}-${v}`]!==void 0):u[`${t}-${x}`]!==void 0,c=(f,x)=>{var b;return!!(f.pairs?f.pairs.every((v,w)=>zm(f)[u[`${t}-${x}-${w}`]]===f.pairs[w].right):(b=f.options[u[`${t}-${x}`]])!=null&&b.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=j("fieldset",{},tt("legend",{},Pe(u.question))),h=tt("p",{class:"learn-explanation"},Pe(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((x,b)=>{x.classList.toggle("right",f!==void 0&&u.options[b].correct),x.classList.toggle("wrong",f===b&&!u.options[b].correct),x.setAttribute("aria-pressed",String(f===b))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,x)=>{const b=tt("button",{class:"learn-option"},Pe(f.text));b.addEventListener("click",()=>{n&&xe.updateLesson(n.id,{quiz:{...r(),[c]:x}}),g(x),l()}),d.append(b)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=xe.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],x=f===!0?"sun":f||void 0,b=h.step===void 0?[]:n.map((k,S)=>k.step===h.step?S:-1).filter(k=>k>=0),v=b.filter(k=>!a(k));let w="";x==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(k=>k+1).join(", ")):x&&x!=="sun"&&b.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=j("li",{class:w?"learn-review-deviation":""}),I=tt("span",{class:"learn-check-text"},Pe(h.text));if(w&&I.append(j("br",{}),j("em",{},w)),z.append(I,j("span",{class:"learn-review-icon","aria-label":p(x?`web_learn_rating_${x}`:"web_learn_review_unrated")},x?s[x]:"–")),w&&x==="sun"&&h.step!==void 0){const k=h.step,S=j("button",{class:"link-button learn-check-link"},p("web_learn_review"));S.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:xe.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,k)}),z.append(S)}o.push(z)})})),o.length&&e.append(j("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),j("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),j("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=zm(e),u=j("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?xe.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=j("select",{class:"learn-match-select"});b.append(j("option",{value:""},"–")),l.forEach((w,z)=>b.append(j("option",{value:String(z)},w)));const v=tt("label",{class:"learn-match-left"},Pe(x.left));return v.append(b),u.append(v),b}),f=()=>{const x=o.every((b,v)=>h(v)!==void 0);g.forEach((b,v)=>{const w=h(v);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[v].right),b.classList.toggle("wrong",x&&l[w]!==o[v].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const v={...c()};x.value===""?delete v[`${t}-${b}`]:v[`${t}-${b}`]=Number(x.value),d(v),f(),r()})),f(),u}}function zm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function GL(i){const e=cg(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=j("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(j("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const HL=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,ir="visustruct.visubot";function ar(){try{return localStorage.getItem(ir)}catch{return null}}function hi(){const i=ar();return i==="1"||i==="kurs"?"on":"off"}const _g=()=>ar()==="2";function Cg(){try{localStorage.setItem(ir,"2")}catch{}}const Ag=()=>ar()==="3";function Pg(){try{localStorage.setItem(ir,"3")}catch{}}const VL=()=>ar()!==null;function Or(i){try{localStorage.setItem(ir,i==="on"?"1":"0")}catch{}}const QL=`VisuBot`,Vn=()=>hi()!=="off",Im=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Ro(){const i=_g()?"object":Ag()?"flow":hi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
${e("off","VisuStruct")}${e("on","VisuBot")}${e("object","VisuObject")}${e("flow","VisuFlow")}
- ${vm(p(t))}`}class RL{constructor(e=_i){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new xs(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${GL()}${HL()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=pe.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=K(async()=>{const{Robot3D:e}=await import("./robot3d-BOvRTAxq.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??_i,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new xs(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;pe.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>pe.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&pe.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!pe.connected)break;const t=e.dataset.sensor,n=await pe.ask(Ct[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof Ct[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return pe.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await pe.ask(Ct[a].python);typeof Ct[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof Ct[a].simulated=="string"?n[a]=typeof s=="string"?s:String(Ct[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){pe.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=Cg(),this.liveStatus.classList.toggle("connected",pe.connected),this.check.hidden=!pe.connected,pe.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(m0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&pe.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let Y1;function _g(i,e){try{Y1??(Y1=new AudioContext);const t=Y1.createOscillator(),n=Y1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(Y1.destination);const a=Y1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function GL(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} + ${Im(p(t))}`}class qL{constructor(e=_i){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new vs(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${UL()}${YL()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=pe.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=K(async()=>{const{Robot3D:e}=await import("./robot3d-DG_g7sTv.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??_i,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new vs(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;pe.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>pe.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&pe.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!pe.connected)break;const t=e.dataset.sensor,n=await pe.ask(Ct[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof Ct[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return pe.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await pe.ask(Ct[a].python);typeof Ct[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof Ct[a].simulated=="string"?n[a]=typeof s=="string"?s:String(Ct[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){pe.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=Mg(),this.liveStatus.classList.toggle("connected",pe.connected),this.check.hidden=!pe.connected,pe.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(d0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&pe.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let Y1;function Og(i,e){try{Y1??(Y1=new AudioContext);const t=Y1.createOscillator(),n=Y1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(Y1.destination);const a=Y1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function UL(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")}

${p("web_visubot_controls_hint")}

${i("getBrightness","web_visubot_sensor_brightness",0,100,50)} ${i("getLoudness","web_visubot_sensor_loudness",0,100,0)} @@ -67248,23 +67254,23 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis ${e("isJoystickLeft","←","web_visubot_sensor_joy_left")}${e("isJoystickRight","→","web_visubot_sensor_joy_right")} ${e("isShaken",`〰 ${p("web_visubot_shake")}`,"web_visubot_sensor_shake")}
- `}function HL(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=Ag.map(a=>`${p(a.key)}…`).join("");return``}function YL(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=Zg.map(a=>`${p(a.key)}…`).join("");return``}function Cg(){return pe.connecting?p("web_visubot_connecting"):pe.connected?`✓ ${p("web_visubot_connected")}`:pe.error?`⚠︎ ${p("web_visubot_link_error")}: ${pe.error}`:""}async function VL(){if(pe.connected||pe.connecting)return pe.disconnect();try{await pe.connect()}catch(i){await pe.disconnect(i.name==="NotFoundError"?void 0:i.message)}}const ht=i=>()=>_e(T.anweisung,{textLines:[i]}),QL=[{key:"web_visubot_el_forward",group:"drive",type:T.anweisung,make:ht("mbot.forward()")},{key:"web_visubot_el_backward",group:"drive",type:T.anweisung,make:ht("mbot.backward()")},{key:"web_visubot_el_right",group:"drive",type:T.anweisung,make:ht("mbot.turnRight()")},{key:"web_visubot_el_left",group:"drive",type:T.anweisung,make:ht("mbot.turnLeft()")},{key:"web_visubot_el_drive",group:"wheels",type:T.anweisung,make:ht("mbot.drive(30, 30)")},{key:"web_visubot_el_stop",group:"wheels",type:T.anweisung,make:ht("mbot.stop()")},{key:"web_visubot_el_led",group:"output",type:T.anweisung,make:ht("mbot.setLed(255, 0, 0)")},{key:"web_visubot_el_led_off",group:"output",type:T.anweisung,make:ht("mbot.ledOff()")},{key:"web_visubot_el_led_color",group:"output",type:T.anweisung,make:ht('mbot.led(0).setColor("grün")')},{key:"web_visubot_el_tone",group:"output",type:T.anweisung,make:ht("mbot.playTone(440, 300)")},{key:"web_visubot_el_text",group:"output",type:T.anweisung,make:ht('mbot.showText("Hallo")')},{key:"web_visubot_el_wait",group:"wait",type:T.anweisung,make:ht("mbot.pause(100)")},{key:"web_visubot_el_emotion",group:"emotion",type:T.anweisung,make:ht('mbot.emotion("smile")')},{key:"web_visubot_el_timer",group:"wait",type:T.anweisung,make:ht("mbot.resetTimer()")}],Ag=[{key:"web_visubot_sensor_distance",group:"distance",text:"mbot.getDistance()"},{key:"web_visubot_sensor_line",group:"line",text:"mbot.getLine()"},{key:"web_visubot_sensor_line_left",group:"line",text:"mbot.isLineLeft()"},{key:"web_visubot_sensor_line_right",group:"line",text:"mbot.isLineRight()"},{key:"web_visubot_sensor_color",group:"color",get text(){return`mbot.getColor().equals("${wh("red")}")`}},{key:"web_visubot_sensor_button_a",group:"buttons",text:"mbot.isButtonA()"},{key:"web_visubot_sensor_button_b",group:"buttons",text:"mbot.isButtonB()"},{key:"web_visubot_sensor_joy_up",group:"buttons",text:"mbot.isJoystickUp()"},{key:"web_visubot_sensor_joy_down",group:"buttons",text:"mbot.isJoystickDown()"},{key:"web_visubot_sensor_joy_left",group:"buttons",text:"mbot.isJoystickLeft()"},{key:"web_visubot_sensor_joy_right",group:"buttons",text:"mbot.isJoystickRight()"},{key:"web_visubot_sensor_brightness",group:"light",text:"mbot.getBrightness()"},{key:"web_visubot_sensor_loudness",group:"light",text:"mbot.getLoudness()"},{key:"web_visubot_sensor_pitch",group:"tilt",text:"mbot.getPitch()"},{key:"web_visubot_sensor_roll",group:"tilt",text:"mbot.getRoll()"},{key:"web_visubot_sensor_shake",group:"tilt",text:"mbot.isShaken()"},{key:"web_visubot_sensor_timer",group:"timer",text:"mbot.getTimer()"},{key:"web_visubot_sensor_battery",group:"timer",text:"mbot.getBattery()"}],ha=()=>typeof window.showDirectoryPicker=="function";class ir{constructor(e){this.handle=e}get name(){return this.handle.name}async list(){const e=[];for await(const t of this.handle.values())t.name.startsWith(".")||e.push({kind:t.kind,name:t.name});return e}async dir(e,t=!1){return new ir(await this.handle.getDirectoryHandle(e,{create:t}))}async read(e){return(await(await this.handle.getFileHandle(e)).getFile()).text()}async write(e,t){const a=await(await this.handle.getFileHandle(e,{create:!0})).createWritable();await a.write(t),await a.close()}async has(e){try{return await this.handle.getFileHandle(e),!0}catch{try{return await this.handle.getDirectoryHandle(e),!0}catch{return!1}}}async remove(e){await this.handle.removeEntry(e,{recursive:!0})}}const qL="visustruct-workspace";function UL(){return new Promise((i,e)=>{const t=indexedDB.open(qL,1);t.onupgradeneeded=()=>{t.result.createObjectStore("files"),t.result.createObjectStore("meta")},t.onsuccess=()=>i(t.result),t.onerror=()=>e(t.error)})}async function jt(i,e,t){const n=await UL();return new Promise((a,s)=>{const r=t(n.transaction(i,e).objectStore(i));r.onsuccess=()=>a(r.result),r.onerror=()=>s(r.error)})}class f0{constructor(e,t){this.name=e,this.path=t}key(e){return this.path+e}async list(){const e=await jt("files","readonly",n=>n.getAllKeys()),t=new Map;for(const n of e){if(!n.startsWith(this.path)||n===this.path)continue;const a=n.slice(this.path.length),s=a.indexOf("/"),r=s<0?a:a.slice(0,s);t.has(r)||t.set(r,{kind:s<0?"file":"directory",name:r})}return[...t.values()]}async dir(e,t=!1){const n=this.key(e)+"/";if(!(await jt("files","readonly",s=>s.count(n))>0)){if(!t)throw new DOMException(e,"NotFoundError");await jt("files","readwrite",s=>s.put("",n))}return new f0(e,n)}async read(e){const t=await jt("files","readonly",n=>n.get(this.key(e)));if(typeof t!="string")throw new DOMException(e,"NotFoundError");return t}async write(e,t){await jt("files","readwrite",n=>n.put(t,this.key(e)))}async has(e){const t=await jt("files","readonly",a=>a.count(this.key(e))),n=await jt("files","readonly",a=>a.count(this.key(e)+"/"));return t+n>0}async remove(e){const t=this.key(e);await jt("files","readwrite",n=>n.delete(t)),await jt("files","readwrite",n=>n.delete(IDBKeyRange.bound(t+"/",t+"/￿")))}}async function YL(i,e="folder"){const t=await window.showDirectoryPicker({id:e==="folder"?"visustruct-workspace":e,mode:"readwrite"}),n=i&&t.name!==i?await t.getDirectoryHandle(i,{create:!0}):t;return await jt("meta","readwrite",a=>a.put(n,e)),{kind:"folder",root:new ir(n)}}function ym(){return{kind:"browser",root:new f0("VisuStruct","")}}async function $L(i="folder"){var e;try{const t=await jt("meta","readonly",a=>a.get(i));if(!t)return;const n=await((e=t.queryPermission)==null?void 0:e.call(t,{mode:"readwrite"}))??"granted";return{handle:t,ready:n==="granted"}}catch{return}}async function wm(i){var t;return(await((t=i.requestPermission)==null?void 0:t.call(i,{mode:"readwrite"}))??"granted")==="granted"?{kind:"folder",root:new ir(i)}:void 0}async function XL(i="folder"){try{await jt("meta","readwrite",e=>e.delete(i))}catch{}}const ga="learnProgress.json",pa="lernstand.json",fa="visustruct.files.mode",zm="visustruct.files.expanded";function KL(i){try{const e=JSON.parse(Pg(i)??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}function Pg(i){try{return localStorage.getItem(i)}catch{return null}}function xa(i,e){try{e===null?localStorage.removeItem(i):localStorage.setItem(i,e)}catch{}}const te=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Im(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=(i.choices??[]).map(o=>``).join("");t.innerHTML=``;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class eW{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(KL(zm)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),xe.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){xa(zm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=` + `;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class sW{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(aW(Tm)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),xe.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){xa(Tm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=`

${te(p("web_files_title"))}

@@ -67272,21 +67278,21 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis
- `,this.body=this.element.querySelector(".files-body");const e=(t,n)=>this.element.querySelector(`[data-files=${t}]`).addEventListener("click",n);e("hide",()=>this.host.hide()),e("new-folder",()=>void this.newFolder()),e("switch",()=>void this.switchWorkspace()),this.body.addEventListener("click",t=>void this.onTreeClick(t)),this.render()}async restore(){if(Pg(fa)==="browser")this.workspace=ym();else if(ha()){const e=await $L();e!=null&&e.ready?this.workspace=await wm(e.handle):this.pending=e==null?void 0:e.handle}await this.render(),this.workspace||this.startDialog()}async startDialog(){var r;const e=p("web_learn_start_folder"),t=(o,l,u=!1,m)=>`${m?`

${te(m)}

`:""}`,n=ha()?[this.pending?t("reconnect",`${se.open} ${te(p("web_learn_start_continue_fmt",this.pending.name))}`,!0):"",t("pick",`${se.open} ${te(p("web_learn_start_open"))}`,!this.pending),t("create",`${se.newFolder} ${te(p("web_learn_start_create_fmt",e))}`,!1,p("web_learn_start_create_hint"))]:[t("browser",te(p("web_files_browser")),!0,p("web_files_browser_hint"))],a=document.createElement("div");a.className="confirm",a.innerHTML=``)}}};try{await a(t.root,"",0)}catch(o){n.push(`

${te(o.message)}

`)}if(e!==this.rendering)return;const s=t.kind==="folder"?`📁 ${te(t.root.name)}`:te(p("web_files_in_browser")),r=p("web_files_save_hint_fmt",Eu());this.body.innerHTML=`

${s}

${n.join("")||`

${te(p("web_files_empty"))}

`}

${te(r)}

@@ -67294,38 +67300,38 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis `:ha()?`

${te(p("web_files_connect_hint"))}

`:`

${te(p("web_files_browser_hint"))}

- `}async onTreeClick(e){var r;const t=e.target,n=(r=t.closest("[data-start]"))==null?void 0:r.dataset.start;if(n==="pick")return this.connectFolder();if(n==="reconnect")return this.reconnect();if(n==="browser")return this.useBrowser();const a=t.closest(".files-row");if(!a||!this.workspace)return;const s=a.dataset.path;if(t.closest(".files-delete"))return this.remove(a);if(a.dataset.kind==="dir")return this.expanded.has(s)?this.expanded.delete(s):this.expanded.add(s),this.rememberExpanded(),this.render();if(a.dataset.kind==="program")return this.openProgram(s)}async locate(e){const t=e.split("/");let n=this.workspace.root;for(const a of t.slice(0,-1))n=await n.dir(a);return{dir:n,name:t.at(-1)}}async openProgram(e){try{const{dir:t,name:n}=await this.locate(e),a=n.replace(/\.(visustruct|java)$/i,""),s=await t.has(`${a}.visustruct`)?await t.read(`${a}.visustruct`):void 0,r=await t.has(`${a}.java`)?await t.read(`${a}.java`):void 0;if(s===void 0&&r===void 0)return;const o={dir:t,base:a,path:e.replace(/\.(visustruct|java)$/i,"")};this.host.open(s??"",o,r)}catch(t){this.host.message(t.message)}}async remove(e){const t=e.dataset.path,n=e.dataset.kind==="program",a=n?t.replace(/\.(visustruct|java)$/i,""):t;if(await Im({title:p("web_files_delete_confirm_fmt",a),ok:p("web_files_delete"),danger:!0})!==void 0){try{const{dir:s,name:r}=await this.locate(t);if(n){const o=r.replace(/\.(visustruct|java)$/i,"");for(const l of[".visustruct",".java"])await s.has(o+l)&&await s.remove(o+l)}else await s.remove(r)}catch(s){this.host.message(s.message)}await this.render()}}async newFolder(){if(!this.workspace)return;const e=ib(await Im({title:p("web_files_folder_prompt"),input:"",ok:p("web_files_create")})??"");if(e){try{await this.workspace.root.dir(e,!0)}catch(t){this.host.message(t.message)}await this.render()}}async save(e,t,n,a){const s=this.workspace;if(!s)return;let r=a;if(!r){const o=Du(),l=await s.root.dir(o,!0),u=nb(tb(e,p("web_files_default_name")),(await l.list()).map(m=>m.name));r={dir:l,base:u,path:`${o}/${u}`},this.expanded.add(o),this.rememberExpanded()}return await r.dir.write(`${r.base}.visustruct`,t),n!==void 0&&await r.dir.write(`${r.base}.java`,n),await this.render(),r}}const Og=["boolean","int","double","String","char","long","float","short","byte"],tW=new Set([...Og,"Boolean","Integer","Double","Character","Long","Float","Short","Byte","var","void"]);function nW(i){if(tW.has(i))return;const e=i.toLowerCase();for(const t of Og)if(iW(e,t.toLowerCase())<=(t.length>=6?2:1))return t}function iW(i,e){const t=Array.from({length:i.length+1},(n,a)=>Array.from({length:e.length+1},(s,r)=>a===0?r:r===0?a:0));for(let n=1;n<=i.length;n++)for(let a=1;a<=e.length;a++){const s=i[n-1]===e[a-1]?0:1;t[n][a]=Math.min(t[n-1][a]+1,t[n][a-1]+1,t[n-1][a-1]+s),n>1&&a>1&&i[n-1]===e[a-2]&&i[n-2]===e[a-1]&&(t[n][a]=Math.min(t[n][a],t[n-2][a-2]+1))}return t[i.length][e.length]}const aW=[">>>=","<<=",">>=",">>>","->","::","++","--","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<"];function sW(i,e){const t=[];let n=0,a=0;const s=(r,o,l,u)=>t.push({kind:r,text:i.slice(o,l),start:o,end:l,line:u});for(;n${te(p("web_files_browser"))}`}async onTreeClick(e){var r;const t=e.target,n=(r=t.closest("[data-start]"))==null?void 0:r.dataset.start;if(n==="pick")return this.connectFolder();if(n==="reconnect")return this.reconnect();if(n==="browser")return this.useBrowser();const a=t.closest(".files-row");if(!a||!this.workspace)return;const s=a.dataset.path;if(t.closest(".files-delete"))return this.remove(a);if(a.dataset.kind==="dir")return this.expanded.has(s)?this.expanded.delete(s):this.expanded.add(s),this.rememberExpanded(),this.render();if(a.dataset.kind==="program")return this.openProgram(s)}async locate(e){const t=e.split("/");let n=this.workspace.root;for(const a of t.slice(0,-1))n=await n.dir(a);return{dir:n,name:t.at(-1)}}async openProgram(e){try{const{dir:t,name:n}=await this.locate(e),a=n.replace(/\.(visustruct|java)$/i,""),s=await t.has(`${a}.visustruct`)?await t.read(`${a}.visustruct`):void 0,r=await t.has(`${a}.java`)?await t.read(`${a}.java`):void 0;if(s===void 0&&r===void 0)return;const o={dir:t,base:a,path:e.replace(/\.(visustruct|java)$/i,"")};this.host.open(s??"",o,r)}catch(t){this.host.message(t.message)}}async remove(e){const t=e.dataset.path,n=e.dataset.kind==="program",a=n?t.replace(/\.(visustruct|java)$/i,""):t;if(await jm({title:p("web_files_delete_confirm_fmt",a),ok:p("web_files_delete"),danger:!0})!==void 0){try{const{dir:s,name:r}=await this.locate(t);if(n){const o=r.replace(/\.(visustruct|java)$/i,"");for(const l of[".visustruct",".java"])await s.has(o+l)&&await s.remove(o+l)}else await s.remove(r)}catch(s){this.host.message(s.message)}await this.render()}}async newFolder(){if(!this.workspace)return;const e=lb(await jm({title:p("web_files_folder_prompt"),input:"",ok:p("web_files_create")})??"");if(e){try{await this.workspace.root.dir(e,!0)}catch(t){this.host.message(t.message)}await this.render()}}async save(e,t,n,a){const s=this.workspace;if(!s)return;let r=a;if(!r){const o=Eu(),l=await s.root.dir(o,!0),u=ob(rb(e,p("web_files_default_name")),(await l.list()).map(m=>m.name));r={dir:l,base:u,path:`${o}/${u}`},this.expanded.add(o),this.rememberExpanded()}return await r.dir.write(`${r.base}.visustruct`,t),n!==void 0&&await r.dir.write(`${r.base}.java`,n),await this.render(),r}}const Bg=["boolean","int","double","String","char","long","float","short","byte"],rW=new Set([...Bg,"Boolean","Integer","Double","Character","Long","Float","Short","Byte","var","void"]);function oW(i){if(rW.has(i))return;const e=i.toLowerCase();for(const t of Bg)if(lW(e,t.toLowerCase())<=(t.length>=6?2:1))return t}function lW(i,e){const t=Array.from({length:i.length+1},(n,a)=>Array.from({length:e.length+1},(s,r)=>a===0?r:r===0?a:0));for(let n=1;n<=i.length;n++)for(let a=1;a<=e.length;a++){const s=i[n-1]===e[a-1]?0:1;t[n][a]=Math.min(t[n-1][a]+1,t[n][a-1]+1,t[n-1][a-1]+s),n>1&&a>1&&i[n-1]===e[a-2]&&i[n-2]===e[a-1]&&(t[n][a]=Math.min(t[n][a],t[n-2][a-2]+1))}return t[i.length][e.length]}const uW=[">>>=","<<=",">>=",">>>","->","::","++","--","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<"];function mW(i,e){const t=[];let n=0,a=0;const s=(r,o,l,u)=>t.push({kind:r,text:i.slice(o,l),start:o,end:l,line:u});for(;ni.startsWith(d,n))??r;n+=c.length,s("op",o,n,l)}return t}const ba=new Set(["if","else","for","while","do","switch","case","default","break","return","try"]),Pr=new Set(["public","private","protected","static","final","abstract"]),km="(?:int|long|short|byte|float|double|boolean|char|String)";let rW=class{constructor(e,t,n){y(this,"toks");y(this,"comments");y(this,"i",0);y(this,"problems",[]);y(this,"placeholders",[]);y(this,"lines",new Map);y(this,"className");y(this,"imports",[]);y(this,"fileScanners",new Set);this.src=e,this.labels=t,this.opts=n;const a=sW(e,this.problems);this.toks=a.filter(s=>s.kind!=="comment"),this.comments=a.filter(s=>s.kind==="comment")}get tok(){return this.toks[this.i]}is(e,t=this.tok){return t!==void 0&&t.text===e&&t.kind!=="str"}next(){return this.toks[this.i++]}eat(e){return this.is(e)?this.next():void 0}prev(){return this.toks[this.i-1]}problem(e,t,n){const a=t??{start:this.src.length,end:this.src.length};this.problems.push({from:a.start,to:Math.max(a.end,a.start+1),key:e,arg:n})}missingAfter(e,t){const n=e?e.end:this.src.length;this.problems.push({from:Math.max(0,n-1),to:n,key:"web_parse_missing",arg:t})}text(e,t){let n="",a=e;for(const s of this.comments)s.end<=e||s.start>=t||(n+=this.src.slice(a,Math.max(a,s.start)),a=Math.max(a,s.end));return n+=this.src.slice(a,Math.max(a,t)),n.replace(/\s*\n\s*/g," ").trim()}slot(e,t,n){const a=this.text(e,t);if(a===n){const s=this.src.indexOf(n,e);return s>=0&&this.placeholders.push({from:s,to:s+n.length}),""}return a}record(e,t,n){return this.lines.set(e,[t,n]),{element:e,from:t,to:n}}lineOf(e){var t;return(e==null?void 0:e.line)??((t=this.toks[this.toks.length-1])==null?void 0:t.line)??0}checkImports(){const e=["File","PrintWriter","FileReader","FileWriter","BufferedReader","IOException","FileNotFoundException"].map(t=>[t,"java.io"]);for(const[t,n]of[["Scanner","java.util"],["Files","java.nio.file"],["Path","java.nio.file"],["Paths","java.nio.file"],...e]){const a=this.imports.some(r=>r===`import${n}.${t};`||r===`import${n}.*;`),s=this.toks.find((r,o)=>{var l;return r.kind==="id"&&r.text===t&&(n!=="java.nio.file"||((l=this.toks[o+1])==null?void 0:l.text)===".")});if(!a&&s){this.problem("web_parse_missing_import",s,n==="java.util"?`import ${n}.${t};`:`import ${n}.*;`);return}}}checkScanners(){var n;const e=new Set(["next","nextInt","nextDouble","nextLine","nextBoolean","nextLong","nextFloat","hasNext","hasNextInt","hasNextLine","hasNextDouble"]),t=a=>this.toks.some((s,r)=>{const o=this.toks[r-1];return s.kind==="id"&&s.text===a&&!!o&&(o.kind==="id"&&!ba.has(o.text)&&o.text!=="new"||o.text===">"||o.text==="]")});for(let a=0;a{var s;return((s=this.toks[a-1])==null?void 0:s.text)==="class"}).map(n=>n.text));for(let n=0;nthis.toks.some((c,d)=>{var h;return c.text===m&&((h=this.toks[d-1])==null?void 0:h.kind)==="id"&&!ba.has(this.toks[d-1].text)}),n=["println","print","printf"],a=["length","charAt","substring","indexOf","equals","equalsIgnoreCase","compareTo","contains","startsWith","endsWith","toUpperCase","toLowerCase","trim","isEmpty","split","replace","sqrt","pow","abs","max","min","random","round","parseInt","parseDouble","nextInt","nextDouble","nextLine","next","hasNext","hasNextInt","hasNextLine"],s=(m,c)=>c.find(d=>d!==m&&d.toLowerCase()===m.toLowerCase());for(let m=0;mo.text).join(""));continue}const a=this.classStart();if(a!==void 0){this.className??(this.className=a.name),this.i=a.index;const r=this.parseClassBody();e.push(...r.elements),t??(t=r.caption);continue}const s=this.methodStart();if(s){n&&this.problem("web_parse_more_methods",this.tok);const r=this.parseMethod(s);n||(t=s.caption,e.push(...r)),n=!0;continue}if(this.is("}")){this.problem("web_parse_extra",this.next(),"}");continue}e.push(...this.parseStatement())}return{caption:t,elements:this.finishList(e)}}skipPast(e){for(;this.tok&&!this.is(e);)this.next();this.eat(e)}classStart(){var n,a;let e=this.i;for(;this.toks[e]&&Pr.has(this.toks[e].text);)e++;if(((n=this.toks[e])==null?void 0:n.text)!=="class"||((a=this.toks[e+1])==null?void 0:a.kind)!=="id")return;const t=this.toks[e+1].text;for(e+=2;this.toks[e]&&this.toks[e].text!=="{";)e++;return{name:t,index:e+1}}parseClassBody(){let e,t,n=!1;const a=[];for(;this.tok&&!this.is("}");){const s=this.methodStart();if(!s){this.is("{")?a.push(...this.parseBlock().elements):a.push(...this.parseStatement());continue}const r=this.tok,o=this.parseMethod(s);s.name==="main"?e??(e=o):t?n=!0:t={caption:s.caption,body:o},(e&&t||n)&&this.problem("web_parse_more_methods",r)}return this.eat("}"),e?{elements:e}:a.length>0||!t?{elements:a}:{caption:t.caption,elements:t.body}}methodStart(){var g,f,x,b,v,w,z,I,k,S,_;let e=this.i,t=0;for(;this.toks[e]&&Pr.has(this.toks[e].text);)e++,t++;const n=this.toks[e];if((n==null?void 0:n.kind)!=="id"||ba.has(n.text)||n.text==="new")return;for(e++;((g=this.toks[e])==null?void 0:g.text)==="["&&((f=this.toks[e+1])==null?void 0:f.text)==="]";)e+=2;const a=this.toks[e];if((a==null?void 0:a.kind)!=="id"||((x=this.toks[e+1])==null?void 0:x.text)!=="(")return;let s=0,r=e+1;for(;this.toks[r];r++){const M=this.toks[r].text;if(M==="(")s++;else{if(M===")"&&--s===0)break;if(M===";"||M==="{"||M==="}")break}}let o=r+1;if(((b=this.toks[r])==null?void 0:b.text)===")"&&((v=this.toks[o])==null?void 0:v.text)==="throws")for(o++;((w=this.toks[o])==null?void 0:w.kind)==="id"&&(((z=this.toks[o+1])==null?void 0:z.text)===","||((I=this.toks[o+1])==null?void 0:I.text)==="{"||((k=this.toks[o+1])==null?void 0:k.text)===".");)o+=this.toks[o+1].text==="{"?1:2;const l=this.toks[o],u=((S=this.toks[r])==null?void 0:S.text)===")"&&(l==null?void 0:l.text)==="{";if(!u&&!(t>0&&(l===void 0||this.toks[r]===void 0)))return;const m=((_=this.toks[r])==null?void 0:_.text)===")"?this.toks[r].start:this.src.length,c=this.text(this.toks[e+1].end,m),h=`${this.text(n.start,this.toks[e-1].end).replace(/\s+/g,"")} ${a.text}(${c.replace(/\s*,\s*/g,", ")})`;return this.i=Math.min(u?o:r+1,this.toks.length),{name:a.text,caption:a.text==="main"||!It(h)?void 0:h}}parseMethod(e){return this.is("{")?this.parseBlock().elements:(this.missingAfter(this.prev(),"{"),[])}parseBlock(){const e=this.next(),t=[];for(;this.tok&&!this.is("}")&&!(this.is("case")||this.is("default"));)t.push(...this.parseStatement());const n=this.eat("}");if(n||this.problem("web_parse_missing",e,"}"),t.length===0){const a=(n==null?void 0:n.start)??this.src.length,s=this.comments.find(r=>r.start>e.end&&r.startn.element)}parseStatement(){const e=this.tok;switch(e.kind==="id"?e.text:""){case"if":return[this.parseIf()];case"while":return[this.parseWhile()];case"do":return[this.parseDo()];case"for":return[this.parseFor()];case"switch":return[this.parseSwitch()];case"try":return this.parseTry();case"break":{this.next();const t=this.eat(";");t||this.missingAfter(e,";");const n=this.trailingComment(t??e);return[this.record(_e(T.aussprung,{textLines:[n]}),e.line,e.line)]}case"else":return this.problem("web_parse_else_without_if",this.next()),[];case"case":case"default":for(this.problem("web_parse_case_outside_switch",this.next());this.tok&&!this.is(":")&&!this.is("->")&&!this.is(";");)this.next();return this.next(),[]}return this.is("{")?this.parseBlock().elements:this.is(";")?(this.next(),[this.record(_e(T.anweisung),e.line,e.line)]):this.parseSimple()}parseTry(){const e=this.next();let t=e;const n=(r,o)=>{t=this.next();let u=1;for(;this.tok;){const m=this.next();if(t=m,m.kind!=="str"){if(m.text===r)u++;else if(m.text===o&&--u===0)return!0}}return this.missingAfter(t,o),!1};let a=!0;for(this.is("(")&&(a=n("(",")")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{");a&&(this.is("catch")||this.is("finally"));){const r=this.next().text==="catch";t=this.prev(),r&&(this.is("(")?a=n("(",")"):this.missingAfter(t,"(")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{")}const s=this.text(e.start,t.end).replace(/\s+/g," ");return[this.record(_e(T.anweisung,{textLines:[s]}),e.line,t.line)]}trailingComment(e){const t=this.comments.find(a=>a.start>=e.end&&a.line===e.line),n=this.toks.find(a=>a.start>=e.end);return!t||n&&n.start1;)m.push("");const c=this.parseBody();return this.record(_e(T.forSchleife,{textLines:m,loopBody:c.elements}),e.line,c.end)}parseSwitch(){const e=this.next(),t=this.parenthesized(e,this.labels.selector),n=[];let a=this.lineOf(this.prev());const s=this.eat("{");if(!s)this.missingAfter(this.prev(),"{");else{for(;this.tok&&!this.is("}");){if(!this.is("case")&&!this.is("default")){this.problem("web_parse_case_outside_switch",this.tok),this.parseStatement();continue}n.push(this.parseCase())}const o=this.eat("}");o||this.problem("web_parse_missing",s,"}"),a=this.lineOf(o??this.prev())}n.some(o=>o.isDefault)||n.push({name:"default",elements:[nn()],isDefault:!0});const r=[...n.filter(o=>!o.isDefault),...n.filter(o=>o.isDefault)].map(({name:o,elements:l})=>({name:o,elements:l}));return this.record(_e(T.fallauswahl,{textLines:[t.text],cases:r}),e.line,a)}parseCase(){var l;const e=this.next(),t=e.text==="default",n=((l=this.tok)==null?void 0:l.start)??e.end;let a=n;for(;this.tok&&!this.is("->")&&!this.is(":")&&!this.is("{")&&!this.is("}");)a=this.next().end;const s=this.eat("->")??this.eat(":");s||this.missingAfter(this.prev(),"->");let r=t?"default":this.text(n,a),o=[];if((s==null?void 0:s.text)==="->")this.is("{")?(t&&(r=this.trailingComment(this.tok)||r),o=this.parseBlock().elements):this.tok&&!this.is("}")&&(o=this.parseStatement());else{for(t&&s&&(r=this.trailingComment(s)||r);this.tok&&!this.is("case")&&!this.is("default")&&!this.is("}");)o.push(...this.parseStatement());const u=o[o.length-1];(u==null?void 0:u.element.type)===T.aussprung&&u.element.textLines.every(m=>m==="")&&o.pop()}return{name:r,elements:this.finishList(o),isDefault:t}}parseSimple(){const e=this.next();let t=e;const n=e.text==="("||e.text==="["||e.text==="{"?[e.text]:[],a=()=>n.length>0&&n[n.length-1]==="{"&&e.text!=="{";let s;for(;this.tok;){const u=this.tok;if(u.text===";"&&u.kind==="op"&&!a()){s=this.next();break}if(u.line!==t.line&&!a()&&(n.length===0||u.kind==="id"&&ba.has(u.text)||u.text==="}")||u.text==="}"&&n.length===0)break;(u.text==="("||u.text==="["||u.text==="{")&&n.push(u.text),(u.text===")"||u.text==="]"||u.text==="}")&&n.pop(),t=this.next()}s||this.missingAfter(t,";"),this.checkBrackets(e,t);const r=this.text(e.start,t.end),o=this.simpleElement(r);if(!o)return[];const l=this.record(o.element,e.line,t.line);return l.prompt=o.prompt,[l]}checkBrackets(e,t){const n=[],a={")":"(","]":"[","}":"{"},s={"(":")","[":"]","{":"}"};for(let r=this.toks.indexOf(e);r>=0&&r_e(T.anweisung,{textLines:[u]}),a=/^System\.out\.println\s*\(([\s\S]*?)\)?$/.exec(e);if(a){const u=a[1].trim();if(u==="")return{element:n("output: ")};const m=/^"((?:[^"\\]|\\.)*)"$/.exec(u),c=m?oW(m[1]):void 0;return{element:n(`output: ${u}`),prompt:c!==void 0&&!c.includes('"')?c:void 0}}const s=new RegExp(`^(?:(${km})\\s+)?([A-Za-z_]\\w*(?:\\s*\\[[^\\]]+\\])*)\\s*=\\s*\\w+\\.(nextInt|nextDouble|nextLine|next|nextBoolean)\\s*\\(\\s*\\)$`).exec(e);if(s&&!this.fileScanners.has(e.replace(/^[\s\S]*=\s*(\w+)\.\w+\s*\(\s*\)$/,"$1"))){const u={nextInt:"int",nextDouble:"double",nextLine:"String",next:"String",nextBoolean:"boolean"}[s[3]],m=s[2].replace(/\s+/g,"");if((s[1]===u||!s[1]&&m.includes("["))&&u)return{element:n(`input: ${u} ${m}`)}}const r=new RegExp(`^final\\s+(${km}\\s+[\\s\\S]*)$`).exec(e);if(r)return{element:n(`const ${r[1]}`)};const o=/^(?:(?:\w+\s+)?\w+\s*=\s*)?([A-Za-z_]\w*)\s*\(/.exec(e);return o&&((l=this.opts.subprograms)!=null&&l.has(o[1]))?{element:_e(T.aufruf,{textLines:[e]})}:{element:n(e)}}spansFor(e,t=[],n=[]){return e.forEach((a,s)=>{var l;const r=[...t,s],o=this.lines.get(a);o&&n.push({path:r,from:o[0],to:o[1]}),a.loopBody&&this.spansFor(a.loopBody,[...r,0],n),(l=a.cases)==null||l.forEach((u,m)=>this.spansFor(u.elements,[...r,m],n))}),n}isCodePlaceholder(e){return e.text.startsWith("//")&&e.text.slice(2).trim()===this.labels.code}markPlaceholderComments(){for(const e of this.comments)this.isCodePlaceholder(e)&&this.placeholders.push({from:e.start,to:e.end})}};function oW(i){return i.replace(/\\(.)/g,(e,t)=>({n:` -`,r:"\r",t:" "})[t]??t)}function Ro(i,e,t={}){const n=new rW(i,e,t),{caption:a,elements:s}=n.parseProgram();n.markPlaceholderComments(),n.checkImports(),n.checkScanners(),n.checkTypes(),n.checkCase();const r=n.spansFor(s),o=n.problems.sort((l,u)=>l.from-u.from);return{caption:a,className:n.className,elements:s,spans:r,placeholders:n.placeholders.sort((l,u)=>l.from-u.from),problems:o}}const x0={asClass:!1,withMain:!1},Sm=i=>/^import\s+[\w.]+(?:\.\*)?\s*;$/.test(i.trim()),Tm=i=>i.map(e=>e.trim()===""?"":" "+e);function Mg(i,e,t=x0){var u;const n=Qh(i,"java",e);let a=n.text.replaceAll(Hi,"").replaceAll(r0,"").split(` -`),s=n.spans;const r=m=>s=s.map(c=>({...c,from:c.from+m,to:c.to+m})),o=It(i.caption)!==void 0,l=[];if(t.withMain&&!o||t.asClass){for(let m=a.findIndex(Sm);m>=0;m=a.findIndex(Sm))l.push(a[m].trim()),a.splice(m,1),s=s.map(c=>({...c,from:c.from>m?c.from-1:c.from,to:c.to>m?c.to-1:c.to}));l.length&&((u=a[0])==null?void 0:u.trim())===""&&(a.splice(0,1),s=s.map(m=>({...m,from:m.from>0?m.from-1:m.from,to:m.to>0?m.to-1:m.to}))),l.length&&l.push("")}return t.withMain&&!o&&(a=[`public static void main(String[] args)${Ax(i)?" throws Exception":""} {`,...Tm(a),"}"],r(1)),t.asClass&&(a=[`public class ${Ks(o?"Main":i.caption)} {`,...Tm(a),"}"],r(1)),l.length&&(a=[...l,...a],r(l.length)),{text:a.join(` -`),spans:s}}function gi(i,e,t=x0){return Mg(i,e,t).text}function Or(i){const e=Zg(i).code;return(e.trim()===""?i:e).replace(/\s+/g,"")}function Zg(i){let e="";for(let t=0;tnew Array(a+1).fill(0));for(let u=n-1;u>=0;u--)for(let m=a-1;m>=0;m--)s[u][m]=t(i[u],e[m])?s[u+1][m+1]+1:Math.max(s[u+1][m],s[u][m+1]);const r=[];let o=0,l=0;for(;o=s[o][l+1])?r.push({kind:"del",a:o++}):r.push({kind:"ins",b:l++});return r}function _m(i,e,t,n,a={},s=x0){const r=gi(t,n,s),o=gi(e,n,s);if(i===o)return r;const l=o.split(` +`;)n+=i[n]==="\\"?2:1;i[n]===r?n++:e.push({from:o,to:Math.min(n,i.length),key:"web_parse_unclosed_string",arg:r}),s("str",o,Math.min(n,i.length),l);continue}const u=/^\d[\d_]*(?:\.\d+)?(?:[eE][+-]?\d+)?[lLfFdD]?/.exec(i.slice(n,n+64));if(u){n+=u[0].length,s("num",o,n,l);continue}const m=/^[\p{L}_$][\p{L}\p{N}_$]*/u.exec(i.slice(n,n+256));if(m){n+=m[0].length,s("id",o,n,l);continue}const c=uW.find(d=>i.startsWith(d,n))??r;n+=c.length,s("op",o,n,l)}return t}const ba=new Set(["if","else","for","while","do","switch","case","default","break","return","try"]),Mr=new Set(["public","private","protected","static","final","abstract"]),_m="(?:int|long|short|byte|float|double|boolean|char|String)";let cW=class{constructor(e,t,n){y(this,"toks");y(this,"comments");y(this,"i",0);y(this,"problems",[]);y(this,"placeholders",[]);y(this,"lines",new Map);y(this,"className");y(this,"imports",[]);y(this,"fileScanners",new Set);this.src=e,this.labels=t,this.opts=n;const a=mW(e,this.problems);this.toks=a.filter(s=>s.kind!=="comment"),this.comments=a.filter(s=>s.kind==="comment")}get tok(){return this.toks[this.i]}is(e,t=this.tok){return t!==void 0&&t.text===e&&t.kind!=="str"}next(){return this.toks[this.i++]}eat(e){return this.is(e)?this.next():void 0}prev(){return this.toks[this.i-1]}problem(e,t,n){const a=t??{start:this.src.length,end:this.src.length};this.problems.push({from:a.start,to:Math.max(a.end,a.start+1),key:e,arg:n})}missingAfter(e,t){const n=e?e.end:this.src.length;this.problems.push({from:Math.max(0,n-1),to:n,key:"web_parse_missing",arg:t})}text(e,t){let n="",a=e;for(const s of this.comments)s.end<=e||s.start>=t||(n+=this.src.slice(a,Math.max(a,s.start)),a=Math.max(a,s.end));return n+=this.src.slice(a,Math.max(a,t)),n.replace(/\s*\n\s*/g," ").trim()}slot(e,t,n){const a=this.text(e,t);if(a===n){const s=this.src.indexOf(n,e);return s>=0&&this.placeholders.push({from:s,to:s+n.length}),""}return a}record(e,t,n){return this.lines.set(e,[t,n]),{element:e,from:t,to:n}}lineOf(e){var t;return(e==null?void 0:e.line)??((t=this.toks[this.toks.length-1])==null?void 0:t.line)??0}checkImports(){const e=["File","PrintWriter","FileReader","FileWriter","BufferedReader","IOException","FileNotFoundException"].map(t=>[t,"java.io"]);for(const[t,n]of[["Scanner","java.util"],["Arrays","java.util"],["Files","java.nio.file"],["Path","java.nio.file"],["Paths","java.nio.file"],...e]){const a=this.imports.some(r=>r===`import${n}.${t};`||r===`import${n}.*;`),s=this.toks.find((r,o)=>{var l;return r.kind==="id"&&r.text===t&&(t!=="Arrays"&&n!=="java.nio.file"||((l=this.toks[o+1])==null?void 0:l.text)===".")});if(!a&&s){this.problem("web_parse_missing_import",s,n==="java.util"?`import ${n}.${t};`:`import ${n}.*;`);return}}}checkScanners(){var n;const e=new Set(["next","nextInt","nextDouble","nextLine","nextBoolean","nextLong","nextFloat","hasNext","hasNextInt","hasNextLine","hasNextDouble"]),t=a=>this.toks.some((s,r)=>{const o=this.toks[r-1];return s.kind==="id"&&s.text===a&&!!o&&(o.kind==="id"&&!ba.has(o.text)&&o.text!=="new"||o.text===">"||o.text==="]")});for(let a=0;a{var s;return((s=this.toks[a-1])==null?void 0:s.text)==="class"}).map(n=>n.text));for(let n=0;nthis.toks.some((c,d)=>{var h;return c.text===m&&((h=this.toks[d-1])==null?void 0:h.kind)==="id"&&!ba.has(this.toks[d-1].text)}),n=["println","print","printf"],a=["length","charAt","substring","indexOf","equals","equalsIgnoreCase","compareTo","contains","startsWith","endsWith","toUpperCase","toLowerCase","trim","isEmpty","split","replace","sqrt","pow","abs","max","min","random","round","parseInt","parseDouble","nextInt","nextDouble","nextLine","next","hasNext","hasNextInt","hasNextLine"],s=(m,c)=>c.find(d=>d!==m&&d.toLowerCase()===m.toLowerCase());for(let m=0;mo.text).join(""));continue}const a=this.classStart();if(a!==void 0){this.className??(this.className=a.name),this.i=a.index;const r=this.parseClassBody();e.push(...r.elements),t??(t=r.caption);continue}const s=this.methodStart();if(s){n&&this.problem("web_parse_more_methods",this.tok);const r=this.parseMethod(s);n||(t=s.caption,e.push(...r)),n=!0;continue}if(this.is("}")){this.problem("web_parse_extra",this.next(),"}");continue}e.push(...this.parseStatement())}return{caption:t,elements:this.finishList(e)}}skipPast(e){for(;this.tok&&!this.is(e);)this.next();this.eat(e)}classStart(){var n,a;let e=this.i;for(;this.toks[e]&&Mr.has(this.toks[e].text);)e++;if(((n=this.toks[e])==null?void 0:n.text)!=="class"||((a=this.toks[e+1])==null?void 0:a.kind)!=="id")return;const t=this.toks[e+1].text;for(e+=2;this.toks[e]&&this.toks[e].text!=="{";)e++;return{name:t,index:e+1}}parseClassBody(){let e,t,n=!1;const a=[];for(;this.tok&&!this.is("}");){const s=this.methodStart();if(!s){this.is("{")?a.push(...this.parseBlock().elements):a.push(...this.parseStatement());continue}const r=this.tok,o=this.parseMethod(s);s.name==="main"?e??(e=o):t?n=!0:t={caption:s.caption,body:o},(e&&t||n)&&this.problem("web_parse_more_methods",r)}return this.eat("}"),e?{elements:e}:a.length>0||!t?{elements:a}:{caption:t.caption,elements:t.body}}methodStart(){var g,f,x,b,v,w,z,I,k,S,_;let e=this.i,t=0;for(;this.toks[e]&&Mr.has(this.toks[e].text);)e++,t++;const n=this.toks[e];if((n==null?void 0:n.kind)!=="id"||ba.has(n.text)||n.text==="new")return;for(e++;((g=this.toks[e])==null?void 0:g.text)==="["&&((f=this.toks[e+1])==null?void 0:f.text)==="]";)e+=2;const a=this.toks[e];if((a==null?void 0:a.kind)!=="id"||((x=this.toks[e+1])==null?void 0:x.text)!=="(")return;let s=0,r=e+1;for(;this.toks[r];r++){const M=this.toks[r].text;if(M==="(")s++;else{if(M===")"&&--s===0)break;if(M===";"||M==="{"||M==="}")break}}let o=r+1;if(((b=this.toks[r])==null?void 0:b.text)===")"&&((v=this.toks[o])==null?void 0:v.text)==="throws")for(o++;((w=this.toks[o])==null?void 0:w.kind)==="id"&&(((z=this.toks[o+1])==null?void 0:z.text)===","||((I=this.toks[o+1])==null?void 0:I.text)==="{"||((k=this.toks[o+1])==null?void 0:k.text)===".");)o+=this.toks[o+1].text==="{"?1:2;const l=this.toks[o],u=((S=this.toks[r])==null?void 0:S.text)===")"&&(l==null?void 0:l.text)==="{";if(!u&&!(t>0&&(l===void 0||this.toks[r]===void 0)))return;const m=((_=this.toks[r])==null?void 0:_.text)===")"?this.toks[r].start:this.src.length,c=this.text(this.toks[e+1].end,m),h=`${this.text(n.start,this.toks[e-1].end).replace(/\s+/g,"")} ${a.text}(${c.replace(/\s*,\s*/g,", ")})`;return this.i=Math.min(u?o:r+1,this.toks.length),{name:a.text,caption:a.text==="main"||!It(h)?void 0:h}}parseMethod(e){return this.is("{")?this.parseBlock().elements:(this.missingAfter(this.prev(),"{"),[])}parseBlock(){const e=this.next(),t=[];for(;this.tok&&!this.is("}")&&!(this.is("case")||this.is("default"));)t.push(...this.parseStatement());const n=this.eat("}");if(n||this.problem("web_parse_missing",e,"}"),t.length===0){const a=(n==null?void 0:n.start)??this.src.length,s=this.comments.find(r=>r.start>e.end&&r.startn.element)}parseStatement(){const e=this.tok;switch(e.kind==="id"?e.text:""){case"if":return[this.parseIf()];case"while":return[this.parseWhile()];case"do":return[this.parseDo()];case"for":return[this.parseFor()];case"switch":return[this.parseSwitch()];case"try":return this.parseTry();case"break":{this.next();const t=this.eat(";");t||this.missingAfter(e,";");const n=this.trailingComment(t??e);return[this.record(_e(T.aussprung,{textLines:[n]}),e.line,e.line)]}case"else":return this.problem("web_parse_else_without_if",this.next()),[];case"case":case"default":for(this.problem("web_parse_case_outside_switch",this.next());this.tok&&!this.is(":")&&!this.is("->")&&!this.is(";");)this.next();return this.next(),[]}return this.is("{")?this.parseBlock().elements:this.is(";")?(this.next(),[this.record(_e(T.anweisung),e.line,e.line)]):this.parseSimple()}parseTry(){const e=this.next();let t=e;const n=(r,o)=>{t=this.next();let u=1;for(;this.tok;){const m=this.next();if(t=m,m.kind!=="str"){if(m.text===r)u++;else if(m.text===o&&--u===0)return!0}}return this.missingAfter(t,o),!1};let a=!0;for(this.is("(")&&(a=n("(",")")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{");a&&(this.is("catch")||this.is("finally"));){const r=this.next().text==="catch";t=this.prev(),r&&(this.is("(")?a=n("(",")"):this.missingAfter(t,"(")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{")}const s=this.text(e.start,t.end).replace(/\s+/g," ");return[this.record(_e(T.anweisung,{textLines:[s]}),e.line,t.line)]}trailingComment(e){const t=this.comments.find(a=>a.start>=e.end&&a.line===e.line),n=this.toks.find(a=>a.start>=e.end);return!t||n&&n.start1;)m.push("");const c=this.parseBody();return this.record(_e(T.forSchleife,{textLines:m,loopBody:c.elements}),e.line,c.end)}parseSwitch(){const e=this.next(),t=this.parenthesized(e,this.labels.selector),n=[];let a=this.lineOf(this.prev());const s=this.eat("{");if(!s)this.missingAfter(this.prev(),"{");else{for(;this.tok&&!this.is("}");){if(!this.is("case")&&!this.is("default")){this.problem("web_parse_case_outside_switch",this.tok),this.parseStatement();continue}n.push(this.parseCase())}const o=this.eat("}");o||this.problem("web_parse_missing",s,"}"),a=this.lineOf(o??this.prev())}n.some(o=>o.isDefault)||n.push({name:"default",elements:[nn()],isDefault:!0});const r=[...n.filter(o=>!o.isDefault),...n.filter(o=>o.isDefault)].map(({name:o,elements:l})=>({name:o,elements:l}));return this.record(_e(T.fallauswahl,{textLines:[t.text],cases:r}),e.line,a)}parseCase(){var l;const e=this.next(),t=e.text==="default",n=((l=this.tok)==null?void 0:l.start)??e.end;let a=n;for(;this.tok&&!this.is("->")&&!this.is(":")&&!this.is("{")&&!this.is("}");)a=this.next().end;const s=this.eat("->")??this.eat(":");s||this.missingAfter(this.prev(),"->");let r=t?"default":this.text(n,a),o=[];if((s==null?void 0:s.text)==="->")this.is("{")?(t&&(r=this.trailingComment(this.tok)||r),o=this.parseBlock().elements):this.tok&&!this.is("}")&&(o=this.parseStatement());else{for(t&&s&&(r=this.trailingComment(s)||r);this.tok&&!this.is("case")&&!this.is("default")&&!this.is("}");)o.push(...this.parseStatement());const u=o[o.length-1];(u==null?void 0:u.element.type)===T.aussprung&&u.element.textLines.every(m=>m==="")&&o.pop()}return{name:r,elements:this.finishList(o),isDefault:t}}parseSimple(){const e=this.next();let t=e;const n=e.text==="("||e.text==="["||e.text==="{"?[e.text]:[],a=()=>n.length>0&&n[n.length-1]==="{"&&e.text!=="{";let s;for(;this.tok;){const u=this.tok;if(u.text===";"&&u.kind==="op"&&!a()){s=this.next();break}if(u.line!==t.line&&!a()&&(n.length===0||u.kind==="id"&&ba.has(u.text)||u.text==="}")||u.text==="}"&&n.length===0)break;(u.text==="("||u.text==="["||u.text==="{")&&n.push(u.text),(u.text===")"||u.text==="]"||u.text==="}")&&n.pop(),t=this.next()}s||this.missingAfter(t,";"),this.checkBrackets(e,t);const r=this.text(e.start,t.end),o=this.simpleElement(r);if(!o)return[];const l=this.record(o.element,e.line,t.line);return l.prompt=o.prompt,[l]}checkBrackets(e,t){const n=[],a={")":"(","]":"[","}":"{"},s={"(":")","[":"]","{":"}"};for(let r=this.toks.indexOf(e);r>=0&&r_e(T.anweisung,{textLines:[u]}),a=/^System\.out\.println\s*\(([\s\S]*?)\)?$/.exec(e);if(a){const u=a[1].trim();if(u==="")return{element:n("output: ")};const m=/^"((?:[^"\\]|\\.)*)"$/.exec(u),c=m?dW(m[1]):void 0;return{element:n(`output: ${u}`),prompt:c!==void 0&&!c.includes('"')?c:void 0}}const s=new RegExp(`^(?:(${_m})\\s+)?([A-Za-z_]\\w*(?:\\s*\\[[^\\]]+\\])*)\\s*=\\s*\\w+\\.(nextInt|nextDouble|nextLine|next|nextBoolean)\\s*\\(\\s*\\)$`).exec(e);if(s&&!this.fileScanners.has(e.replace(/^[\s\S]*=\s*(\w+)\.\w+\s*\(\s*\)$/,"$1"))){const u={nextInt:"int",nextDouble:"double",nextLine:"String",next:"String",nextBoolean:"boolean"}[s[3]],m=s[2].replace(/\s+/g,"");if((s[1]===u||!s[1]&&m.includes("["))&&u)return{element:n(`input: ${u} ${m}`)}}const r=new RegExp(`^final\\s+(${_m}\\s+[\\s\\S]*)$`).exec(e);if(r)return{element:n(`const ${r[1]}`)};const o=/^(?:(?:\w+\s+)?\w+\s*=\s*)?([A-Za-z_]\w*)\s*\(/.exec(e);return o&&((l=this.opts.subprograms)!=null&&l.has(o[1]))?{element:_e(T.aufruf,{textLines:[e]})}:{element:n(e)}}spansFor(e,t=[],n=[]){return e.forEach((a,s)=>{var l;const r=[...t,s],o=this.lines.get(a);o&&n.push({path:r,from:o[0],to:o[1]}),a.loopBody&&this.spansFor(a.loopBody,[...r,0],n),(l=a.cases)==null||l.forEach((u,m)=>this.spansFor(u.elements,[...r,m],n))}),n}isCodePlaceholder(e){return e.text.startsWith("//")&&e.text.slice(2).trim()===this.labels.code}markPlaceholderComments(){for(const e of this.comments)this.isCodePlaceholder(e)&&this.placeholders.push({from:e.start,to:e.end})}};function dW(i){return i.replace(/\\(.)/g,(e,t)=>({n:` +`,r:"\r",t:" "})[t]??t)}function Go(i,e,t={}){const n=new cW(i,e,t),{caption:a,elements:s}=n.parseProgram();n.markPlaceholderComments(),n.checkImports(),n.checkScanners(),n.checkTypes(),n.checkCase();const r=n.spansFor(s),o=n.problems.sort((l,u)=>l.from-u.from);return{caption:a,className:n.className,elements:s,spans:r,placeholders:n.placeholders.sort((l,u)=>l.from-u.from),problems:o}}const v0={asClass:!1,withMain:!1},Cm=i=>/^import\s+[\w.]+(?:\.\*)?\s*;$/.test(i.trim()),Am=i=>i.map(e=>e.trim()===""?"":" "+e);function Lg(i,e,t=v0){var u;const n=$h(i,"java",e);let a=n.text.replaceAll(Hi,"").replaceAll(l0,"").split(` +`),s=n.spans;const r=m=>s=s.map(c=>({...c,from:c.from+m,to:c.to+m})),o=It(i.caption)!==void 0,l=[];if(t.withMain&&!o||t.asClass){for(let m=a.findIndex(Cm);m>=0;m=a.findIndex(Cm))l.push(a[m].trim()),a.splice(m,1),s=s.map(c=>({...c,from:c.from>m?c.from-1:c.from,to:c.to>m?c.to-1:c.to}));l.length&&((u=a[0])==null?void 0:u.trim())===""&&(a.splice(0,1),s=s.map(m=>({...m,from:m.from>0?m.from-1:m.from,to:m.to>0?m.to-1:m.to}))),l.length&&l.push("")}return t.withMain&&!o&&(a=[`public static void main(String[] args)${Dx(i)?" throws Exception":""} {`,...Am(a),"}"],r(1)),t.asClass&&(a=[`public class ${tr(o?"Main":i.caption)} {`,...Am(a),"}"],r(1)),l.length&&(a=[...l,...a],r(l.length)),{text:a.join(` +`),spans:s}}function gi(i,e,t=v0){return Lg(i,e,t).text}function Zr(i){const e=Wg(i).code;return(e.trim()===""?i:e).replace(/\s+/g,"")}function Wg(i){let e="";for(let t=0;tnew Array(a+1).fill(0));for(let u=n-1;u>=0;u--)for(let m=a-1;m>=0;m--)s[u][m]=t(i[u],e[m])?s[u+1][m+1]+1:Math.max(s[u+1][m],s[u][m+1]);const r=[];let o=0,l=0;for(;o=s[o][l+1])?r.push({kind:"del",a:o++}):r.push({kind:"ins",b:l++});return r}function Om(i,e,t,n,a={},s=v0){const r=gi(t,n,s),o=gi(e,n,s);if(i===o)return r;const l=o.split(` `),u=r.split(` `),m=i.split(` -`),c=new Array(l.length).fill(-1);for(const v of jm(l,m,(w,z)=>Or(w)!==""&&Or(w)===Or(z)))v.kind==="keep"&&(c[v.a]=v.b);const d=[];let h=0,g="";const f=v=>{for(;hw===z))if(v.kind==="keep")c[v.a]>=0&&(f(c[v.a]+1),g="");else if(v.kind==="del"){const w=c[v.a];if(w<0)continue;f(w),g||(g=Zg(m[w]).comment),h=w+1}else{const w=u[v.b];d.push(g&&w.trim()!==""?`${w} ${g}`:w),w.trim()!==""&&(g="")}f(m.length);const x=d.join(` -`),b=Ro(x,n,a);return gi(Go(t,b),n,s)===r?x:r}function Go(i,e){let t=e.caption??(It(i.caption)?"":i.caption);return!e.caption&&e.className&&Ks(t)!==e.className&&(t=e.className),{...i,caption:t,elements:Ho(i.elements,e.elements)}}function Ho(i,e){return e.map((t,n)=>{const a=i[n];if(!a||a.type!==t.type)return t;const s={...t,zoomX:a.zoomX,zoomY:a.zoomY};return a.textColor&&(s.textColor=a.textColor),a.backgroundColor&&(s.backgroundColor=a.backgroundColor),t.loopBody&&(s.loopBody=Ho(a.loopBody??[],t.loopBody)),t.cases&&(s.cases=t.cases.map((r,o)=>{var l,u;return{...r,elements:Ho(((u=(l=a.cases)==null?void 0:l[o])==null?void 0:u.elements)??[],r.elements)}})),s})}let Vo=[],Dg=[];(()=>{let i="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,1n,9,16,o,,x,1i,3,,i,,7,a,2,t,3,1k,,,7,2,2,2,3,9,,a,2,q,,2,3,1k,,,5,4,2,2,3,3,,u,2,3,,b,3,1k,,,8,,3,,3,k,2,m,6,,3,1k,,,7,2,2,2,3,7,3,a,2,u,,1n,5,3,3,,4,9,,14,5,1j,,,7,,3,,4,7,2,b,2,t,3,1k,,,7,,3,,4,7,2,b,2,f,,c,4,1j,2,,7,,3,,4,9,,a,2,t,3,1y,,4,6,,,,8,i,2,1p,,,8,c,8,2q,,,a,b,7,21,2,r,,,,,,4,2,1d,k,,2,5,b,,10,9,,2u,b,,6,n,4,4,3,g,4,d,,,3,6,,f,,jj,3,qa,4,s,3,t,2,u,2,1s,w,9,,19,3,,,39,2,y,,3a,c,4,c,63,5,1l,a,,,,,2,o,2,,1c,1a,2,c,k,5,1b,h,12,9,c,3,u,d,1k,e,1c,k,48,3,,l,4,,6,,2,3,5i,1s,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,n,5,4,,2b,2,1e,i,q,i,d,,12,8,p,d,18,4,1b,e,10,,1v,e,c,,8,2,1a,,1f,,,3,2,2,5,2,,,15,5,5,2,6k,8,,2,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,1t,5,8t,2,25,6,1y,b,1d,4,3e,3,1h,f,15,,2,2,a,4,19,b,7,,1p,3,10,e,g,2,18,,c,3,1c,e,8,4,,2,2k,c,6,,2,,4d,c,l,4,1j,2,,7,2,2,2,3,9,,a,2,2,7,3,5,1v,9,,,2,,,4,,5,,,e,2,2a,i,n,,29,k,6j,7,2,9,r,2,2a,h,2y,d,2t,3,2,a,74,f,6t,6,,2,2,4,,,,2,3x,7,2,7,3,,s,a,14,7,,4,8,,9,b,1a,g,5i,8,5j,8,,8,2a,m,,e,3e,6,3,,,2,,7,,,1u,5,,2,,5,9n,4,9,2,,,1c,7,3,5,n,,44l,,6,f,8ug,i,1xc,5,1n,7,t4,,,1j,7,4,29,,b,2,f57,2,3mp,1a,2,n,f2,5,3,6,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,2s,,4g,7,af,,1p,4,e4,4,72,2,6r,,2,,7,2,5,,d6,7,31,7,240,5".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(i=Dg[n])e=n+1;else return!0;if(e==t)return!1}}function Cm(i){return i>=127462&&i<=127487}const Am=8205;function uW(i,e,t=!0,n=!0){return(t?Bg:mW)(i,e,n)}function Bg(i,e,t){if(e==i.length)return e;e&&Lg(i.charCodeAt(e))&&Wg(i.charCodeAt(e-1))&&e--;let n=Mr(i,e);for(e+=Pm(n);e=0&&Cm(Mr(i,r));)s++,r-=2;if(s%2==0)break;e+=2}else break}return e}function mW(i,e,t){for(;e>1;){let n=Bg(i,e-2,t);if(n=56320&&i<57344}function Wg(i){return i>=55296&&i<56320}function Pm(i){return i<65536?1:2}class oe{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){[e,t]=O1(this,e,t);let a=[];return this.decompose(0,e,a,2),n.length&&n.decompose(0,n.length,a,3),this.decompose(t,this.length,a,1),an.from(a,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=O1(this,e,t);let n=[];return this.decompose(e,t,n,0),an.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),a=new pi(this),s=new pi(e);for(let r=t,o=t;;){if(a.next(r),s.next(r),r=0,a.lineBreak!=s.lineBreak||a.done!=s.done||a.value!=s.value)return!1;if(o+=a.value.length,a.done||o>=n)return!0}}iter(e=1){return new pi(this,e)}iterRange(e,t=this.length){return new Eg(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t==null&&(t=this.lines+1);let a=this.line(e).from;n=this.iterRange(a,Math.max(a,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Ng(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?oe.empty:e.length<=32?new Oe(e):an.from(Oe.split(e,[]))}}class Oe extends oe{constructor(e,t=cW(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,a){for(let s=0;;s++){let r=this.text[s],o=a+r.length;if((t?n:o)>=e)return new dW(a,o,n,r);a=o+1,n++}}decompose(e,t,n,a){let s=e<=0&&t>=this.length?this:new Oe(Om(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(a&1){let r=n.pop(),o=qa(s.text,r.text.slice(),0,s.length);if(o.length<=32)n.push(new Oe(o,r.length+s.length));else{let l=o.length>>1;n.push(new Oe(o.slice(0,l)),new Oe(o.slice(l)))}}else n.push(s)}replace(e,t,n){if(!(n instanceof Oe))return super.replace(e,t,n);[e,t]=O1(this,e,t);let a=qa(this.text,qa(n.text,Om(this.text,0,e)),t),s=this.length+n.length-(t-e);return a.length<=32?new Oe(a,s):an.from(Oe.split(a,[]),s)}sliceString(e,t=this.length,n=` +`),c=new Array(l.length).fill(-1);for(const v of Pm(l,m,(w,z)=>Zr(w)!==""&&Zr(w)===Zr(z)))v.kind==="keep"&&(c[v.a]=v.b);const d=[];let h=0,g="";const f=v=>{for(;hw===z))if(v.kind==="keep")c[v.a]>=0&&(f(c[v.a]+1),g="");else if(v.kind==="del"){const w=c[v.a];if(w<0)continue;f(w),g||(g=Wg(m[w]).comment),h=w+1}else{const w=u[v.b];d.push(g&&w.trim()!==""?`${w} ${g}`:w),w.trim()!==""&&(g="")}f(m.length);const x=d.join(` +`),b=Go(x,n,a);return gi(Ho(t,b),n,s)===r?x:r}function Ho(i,e){let t=e.caption??(It(i.caption)?"":i.caption);return!e.caption&&e.className&&tr(t)!==e.className&&(t=e.className),{...i,caption:t,elements:Vo(i.elements,e.elements)}}function Vo(i,e){return e.map((t,n)=>{const a=i[n];if(!a||a.type!==t.type)return t;const s={...t,zoomX:a.zoomX,zoomY:a.zoomY};return a.textColor&&(s.textColor=a.textColor),a.backgroundColor&&(s.backgroundColor=a.backgroundColor),t.loopBody&&(s.loopBody=Vo(a.loopBody??[],t.loopBody)),t.cases&&(s.cases=t.cases.map((r,o)=>{var l,u;return{...r,elements:Vo(((u=(l=a.cases)==null?void 0:l[o])==null?void 0:u.elements)??[],r.elements)}})),s})}let Qo=[],Eg=[];(()=>{let i="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,1n,9,16,o,,x,1i,3,,i,,7,a,2,t,3,1k,,,7,2,2,2,3,9,,a,2,q,,2,3,1k,,,5,4,2,2,3,3,,u,2,3,,b,3,1k,,,8,,3,,3,k,2,m,6,,3,1k,,,7,2,2,2,3,7,3,a,2,u,,1n,5,3,3,,4,9,,14,5,1j,,,7,,3,,4,7,2,b,2,t,3,1k,,,7,,3,,4,7,2,b,2,f,,c,4,1j,2,,7,,3,,4,9,,a,2,t,3,1y,,4,6,,,,8,i,2,1p,,,8,c,8,2q,,,a,b,7,21,2,r,,,,,,4,2,1d,k,,2,5,b,,10,9,,2u,b,,6,n,4,4,3,g,4,d,,,3,6,,f,,jj,3,qa,4,s,3,t,2,u,2,1s,w,9,,19,3,,,39,2,y,,3a,c,4,c,63,5,1l,a,,,,,2,o,2,,1c,1a,2,c,k,5,1b,h,12,9,c,3,u,d,1k,e,1c,k,48,3,,l,4,,6,,2,3,5i,1s,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,n,5,4,,2b,2,1e,i,q,i,d,,12,8,p,d,18,4,1b,e,10,,1v,e,c,,8,2,1a,,1f,,,3,2,2,5,2,,,15,5,5,2,6k,8,,2,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,1t,5,8t,2,25,6,1y,b,1d,4,3e,3,1h,f,15,,2,2,a,4,19,b,7,,1p,3,10,e,g,2,18,,c,3,1c,e,8,4,,2,2k,c,6,,2,,4d,c,l,4,1j,2,,7,2,2,2,3,9,,a,2,2,7,3,5,1v,9,,,2,,,4,,5,,,e,2,2a,i,n,,29,k,6j,7,2,9,r,2,2a,h,2y,d,2t,3,2,a,74,f,6t,6,,2,2,4,,,,2,3x,7,2,7,3,,s,a,14,7,,4,8,,9,b,1a,g,5i,8,5j,8,,8,2a,m,,e,3e,6,3,,,2,,7,,,1u,5,,2,,5,9n,4,9,2,,,1c,7,3,5,n,,44l,,6,f,8ug,i,1xc,5,1n,7,t4,,,1j,7,4,29,,b,2,f57,2,3mp,1a,2,n,f2,5,3,6,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,2s,,4g,7,af,,1p,4,e4,4,72,2,6r,,2,,7,2,5,,d6,7,31,7,240,5".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(i=Eg[n])e=n+1;else return!0;if(e==t)return!1}}function Mm(i){return i>=127462&&i<=127487}const Zm=8205;function gW(i,e,t=!0,n=!0){return(t?Ng:pW)(i,e,n)}function Ng(i,e,t){if(e==i.length)return e;e&&Jg(i.charCodeAt(e))&&Fg(i.charCodeAt(e-1))&&e--;let n=Dr(i,e);for(e+=Dm(n);e=0&&Mm(Dr(i,r));)s++,r-=2;if(s%2==0)break;e+=2}else break}return e}function pW(i,e,t){for(;e>1;){let n=Ng(i,e-2,t);if(n=56320&&i<57344}function Fg(i){return i>=55296&&i<56320}function Dm(i){return i<65536?1:2}class oe{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){[e,t]=O1(this,e,t);let a=[];return this.decompose(0,e,a,2),n.length&&n.decompose(0,n.length,a,3),this.decompose(t,this.length,a,1),an.from(a,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=O1(this,e,t);let n=[];return this.decompose(e,t,n,0),an.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),a=new pi(this),s=new pi(e);for(let r=t,o=t;;){if(a.next(r),s.next(r),r=0,a.lineBreak!=s.lineBreak||a.done!=s.done||a.value!=s.value)return!1;if(o+=a.value.length,a.done||o>=n)return!0}}iter(e=1){return new pi(this,e)}iterRange(e,t=this.length){return new Rg(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t==null&&(t=this.lines+1);let a=this.line(e).from;n=this.iterRange(a,Math.max(a,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Gg(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?oe.empty:e.length<=32?new Oe(e):an.from(Oe.split(e,[]))}}class Oe extends oe{constructor(e,t=fW(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,a){for(let s=0;;s++){let r=this.text[s],o=a+r.length;if((t?n:o)>=e)return new xW(a,o,n,r);a=o+1,n++}}decompose(e,t,n,a){let s=e<=0&&t>=this.length?this:new Oe(Bm(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(a&1){let r=n.pop(),o=Ua(s.text,r.text.slice(),0,s.length);if(o.length<=32)n.push(new Oe(o,r.length+s.length));else{let l=o.length>>1;n.push(new Oe(o.slice(0,l)),new Oe(o.slice(l)))}}else n.push(s)}replace(e,t,n){if(!(n instanceof Oe))return super.replace(e,t,n);[e,t]=O1(this,e,t);let a=Ua(this.text,Ua(n.text,Bm(this.text,0,e)),t),s=this.length+n.length-(t-e);return a.length<=32?new Oe(a,s):an.from(Oe.split(a,[]),s)}sliceString(e,t=this.length,n=` `){[e,t]=O1(this,e,t);let a="";for(let s=0,r=0;s<=t&&re&&r&&(a+=n),es&&(a+=o.slice(Math.max(0,e-s),t-s)),s=l+1}return a}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let n=[],a=-1;for(let s of e)n.push(s),a+=s.length+1,n.length==32&&(t.push(new Oe(n,a)),n=[],a=-1);return a>-1&&t.push(new Oe(n,a)),t}}class an extends oe{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let n of e)this.lines+=n.lines}lineInner(e,t,n,a){for(let s=0;;s++){let r=this.children[s],o=a+r.length,l=n+r.lines-1;if((t?l:o)>=e)return r.lineInner(e,t,n,a);a=o+1,n=l+1}}decompose(e,t,n,a){for(let s=0,r=0;r<=t&&s=r){let u=a&((r<=e?1:0)|(l>=t?2:0));r>=e&&l<=t&&!u?n.push(o):o.decompose(e-r,t-r,n,u)}r=l+1}}replace(e,t,n){if([e,t]=O1(this,e,t),n.lines=s&&t<=o){let l=r.replace(e-s,t-s,n),u=this.lines-r.lines+l.lines;if(l.lines>4&&l.lines>u>>6){let m=this.children.slice();return m[a]=l,new an(m,this.length-(t-e)+n.length)}return super.replace(s,o,l)}s=o+1}return super.replace(e,t,n)}sliceString(e,t=this.length,n=` -`){[e,t]=O1(this,e,t);let a="";for(let s=0,r=0;se&&s&&(a+=n),er&&(a+=o.sliceString(e-r,t-r,n)),r=l+1}return a}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof an))return 0;let n=0,[a,s,r,o]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;a+=t,s+=t){if(a==r||s==o)return n;let l=this.children[a],u=e.children[s];if(l!=u)return n+l.scanIdentical(u,t);n+=l.length+1}}static from(e,t=e.reduce((n,a)=>n+a.length+1,-1)){let n=0;for(let h of e)n+=h.lines;if(n<32){let h=[];for(let g of e)g.flatten(h);return new Oe(h,t)}let a=Math.max(32,n>>5),s=a<<1,r=a>>1,o=[],l=0,u=-1,m=[];function c(h){let g;if(h.lines>s&&h instanceof an)for(let f of h.children)c(f);else h.lines>r&&(l>r||!l)?(d(),o.push(h)):h instanceof Oe&&l&&(g=m[m.length-1])instanceof Oe&&h.lines+g.lines<=32?(l+=h.lines,u+=h.length+1,m[m.length-1]=new Oe(g.text.concat(h.text),g.length+1+h.length)):(l+h.lines>a&&d(),l+=h.lines,u+=h.length+1,m.push(h))}function d(){l!=0&&(o.push(m.length==1?m[0]:an.from(m,u)),u=-1,l=m.length=0)}for(let h of e)c(h);return d(),o.length==1?o[0]:new an(o,t)}}oe.empty=new Oe([""],0);function cW(i){let e=-1;for(let t of i)e+=t.length+1;return e}function qa(i,e,t=0,n=1e9){for(let a=0,s=0,r=!0;s=t&&(l>n&&(o=o.slice(0,n-a)),a0?1:(e instanceof Oe?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,a=this.nodes[n],s=this.offsets[n],r=s>>1,o=a instanceof Oe?a.text.length:a.children.length;if(r==(t>0?o:0)){if(n==0)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(a instanceof Oe){let l=a.text[r+(t<0?-1:0)];if(this.offsets[n]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=a.children[r+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof Oe?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Eg{constructor(e,t,n){this.value="",this.done=!1,this.cursor=new pi(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:a}=this.cursor.next(e);return this.pos+=(a.length+e)*t,this.value=a.length<=n?a:t<0?a.slice(a.length-n):a.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Ng{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:n,value:a}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=a,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(oe.prototype[Symbol.iterator]=function(){return this.iter()},pi.prototype[Symbol.iterator]=Eg.prototype[Symbol.iterator]=Ng.prototype[Symbol.iterator]=function(){return this});class dW{constructor(e,t,n,a){this.from=e,this.to=t,this.number=n,this.text=a}get length(){return this.to-this.from}}function O1(i,e,t){return e=Math.max(0,Math.min(i.length,e)),[e,Math.max(e,Math.min(i.length,t))]}function rt(i,e,t=!0,n=!0){return uW(i,e,t,n)}function hW(i){return i>=56320&&i<57344}function gW(i){return i>=55296&&i<56320}function At(i,e){let t=i.charCodeAt(e);if(!gW(t)||e+1==i.length)return t;let n=i.charCodeAt(e+1);return hW(n)?(t-55296<<10)+(n-56320)+65536:t}function Jg(i){return i<=65535?String.fromCharCode(i):(i-=65536,String.fromCharCode((i>>10)+55296,(i&1023)+56320))}function hn(i){return i<65536?1:2}const Qo=/\r\n?|\n/;var st=(function(i){return i[i.Simple=0]="Simple",i[i.TrackDel=1]="TrackDel",i[i.TrackBefore=2]="TrackBefore",i[i.TrackAfter=3]="TrackAfter",i})(st||(st={}));class pn{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-a);s+=o}else{if(n!=st.Simple&&u>=e&&(n==st.TrackDel&&ae||n==st.TrackBefore&&ae))return null;if(u>e||u==e&&t<0&&!o)return e==a||t<0?s:s+l;s+=l}a=u}if(e>a)throw new RangeError(`Position ${e} is out of range for changeset of length ${a}`);return s}touchesRange(e,t=e){for(let n=0,a=0;n=0&&a<=t&&o>=e)return at?"cover":!0;a=o}return!1}toString(){let e="";for(let t=0;t=0?":"+a:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new pn(e)}static create(e){return new pn(e)}}class De extends pn{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return qo(this,(t,n,a,s,r)=>e=e.replace(a,a+(n-t),r),!1),e}mapDesc(e,t=!1){return Uo(this,e,t,!0)}invert(e){let t=this.sections.slice(),n=[];for(let a=0,s=0;a=0){t[a]=o,t[a+1]=r;let l=a>>1;for(;n.length0&&Pn(n,t,s.text),s.forward(m),o+=m}let u=e[r++];for(;o>1].toJSON()))}return e}static of(e,t,n){let a=[],s=[],r=0,o=null;function l(m=!1){if(!m&&!a.length)return;rd||c<0||d>t)throw new RangeError(`Invalid change range ${c} to ${d} (in doc of length ${t})`);let g=h?typeof h=="string"?oe.of(h.split(n||Qo)):h:oe.empty,f=g.length;if(c==d&&f==0)return;cr&&at(a,c-r,-1),at(a,d-c,f),Pn(s,a,g),r=d}}return u(e),l(!o),o}static empty(e){return new De(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],n=[];for(let a=0;ao&&typeof r!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;n.length=0&&t<=0&&t==i[a+1]?i[a]+=e:a>=0&&e==0&&i[a]==0?i[a+1]+=t:n?(i[a]+=e,i[a+1]+=t):i.push(e,t)}function Pn(i,e,t){if(t.length==0)return;let n=e.length-2>>1;if(n>1])),!(t||r==i.sections.length||i.sections[r+1]<0);)o=i.sections[r++],l=i.sections[r++];e(a,u,s,m,c),a=u,s=m}}}function Uo(i,e,t,n=!1){let a=[],s=n?[]:null,r=new Ai(i),o=new Ai(e);for(let l=-1;;){if(r.done&&o.len||o.done&&r.len)throw new Error("Mismatched change set lengths");if(r.ins==-1&&o.ins==-1){let u=Math.min(r.len,o.len);at(a,u,-1),r.forward(u),o.forward(u)}else if(o.ins>=0&&(r.ins<0||l==r.i||r.off==0&&(o.len=0&&l=0){let u=0,m=r.len;for(;m;)if(o.ins==-1){let c=Math.min(m,o.len);u+=c,m-=c,o.forward(c)}else if(o.ins==0&&o.lenl||r.ins>=0&&r.len>l)&&(o||n.length>u),s.forward2(l),r.forward(l)}}}}class Ai{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?oe.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?oe.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class _n{constructor(e,t,n,a){this.from=e,this.to=t,this.flags=n,this.goalColumn=a}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let n,a;return this.empty?n=a=e.mapPos(this.from,t):(n=e.mapPos(this.from,1),a=e.mapPos(this.to,-1)),n==this.from&&a==this.to?this:new _n(n,a,this.flags,this.goalColumn)}extend(e,t=e,n=0){if(e<=this.anchor&&t>=this.anchor)return Z.range(e,t,void 0,void 0,n);let a=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return Z.range(this.anchor,a,void 0,void 0,n)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return Z.range(e.anchor,e.head)}static create(e,t,n,a){return new _n(e,t,n,a)}}class Z{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:Z.create(this.ranges.map(n=>n.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let n=0;ne.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new Z(e.ranges.map(t=>_n.fromJSON(t)),e.main)}static single(e,t=e){return new Z([Z.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let n=0,a=0;aa.from-s.from),t=e.indexOf(n);for(let a=1;as.head?Z.range(l,o):Z.range(o,l))}}return new Z(e,t)}}function Rg(i,e){for(let t of i.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let b0=0;class V{constructor(e,t,n,a,s){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=a,this.id=b0++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new V(e.combine||(t=>t),e.compareInput||((t,n)=>t===n),e.compare||(e.combine?(t,n)=>t===n:v0),!!e.static,e.enables)}of(e){return new Ua([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ua(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ua(e,this,2,t)}from(e,t){return t||(t=n=>n),this.compute([e],n=>t(n.field(e)))}}function v0(i,e){return i==e||i.length==e.length&&i.every((t,n)=>t===e[n])}class Ua{constructor(e,t,n,a){this.dependencies=e,this.facet=t,this.type=n,this.value=a,this.id=b0++}dynamicSlot(e){var t;let n=this.value,a=this.facet.compareInput,s=this.id,r=e[s]>>1,o=this.type==2,l=!1,u=!1,m=[];for(let c of this.dependencies)c=="doc"?l=!0:c=="selection"?u=!0:(((t=e[c.id])!==null&&t!==void 0?t:1)&1)==0&&m.push(e[c.id]);return{create(c){return c.values[r]=n(c),1},update(c,d){if(l&&d.docChanged||u&&(d.docChanged||d.selection)||Yo(c,m)){let h=n(c);if(o?!Mm(h,c.values[r],a):!a(h,c.values[r]))return c.values[r]=h,1}return 0},reconfigure:(c,d)=>{let h,g=d.config.address[s];if(g!=null){let f=Is(d,g);if(this.dependencies.every(x=>x instanceof V?d.facet(x)===c.facet(x):x instanceof Et?d.field(x,!1)==c.field(x,!1):!0)||(o?Mm(h=n(c),f,a):a(h=n(c),f)))return c.values[r]=f,0}else h=n(c);return c.values[r]=h,1}}}get extension(){return this}}function Mm(i,e,t){if(i.length!=e.length)return!1;for(let n=0;ni[l.id]),a=t.map(l=>l.type),s=n.filter(l=>!(l&1)),r=i[e.id]>>1;function o(l){let u=[];for(let m=0;mn===a),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(va).find(n=>n.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:n=>(n.values[t]=this.create(n),1),update:(n,a)=>{let s=n.values[t],r=this.updateF(s,a);return this.compareF(s,r)?0:(n.values[t]=r,1)},reconfigure:(n,a)=>{let s=n.facet(va),r=a.facet(va),o;return(o=s.find(l=>l.field==this))&&o!=r.find(l=>l.field==this)?(n.values[t]=o.create(n),1):a.config.address[this.id]!=null?(n.values[t]=a.field(this),0):(n.values[t]=this.create(n),1)}}}init(e){return[this,va.of({field:this,create:e})]}get extension(){return this}}const qn={lowest:4,low:3,default:2,high:1,highest:0};function $1(i){return e=>new Gg(e,i)}const u1={highest:$1(qn.highest),high:$1(qn.high),default:$1(qn.default),low:$1(qn.low),lowest:$1(qn.lowest)};class Gg{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Vi{of(e){return new $o(this,e)}reconfigure(e){return Vi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class $o{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class zs{constructor(e,t,n,a,s,r){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=a,this.staticValues=s,this.facets=r,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,n){let a=[],s=Object.create(null),r=new Map;for(let d of fW(e,t,r))d instanceof Et?a.push(d):(s[d.facet.id]||(s[d.facet.id]=[])).push(d);let o=Object.create(null),l=[],u=[];for(let d of a)o[d.id]=u.length<<1,u.push(h=>d.slot(h));let m=n==null?void 0:n.config.facets;for(let d in s){let h=s[d],g=h[0].facet,f=m&&m[d]||[];if(h.every(x=>x.type==0))if(o[g.id]=l.length<<1|1,v0(f,h))l.push(n.facet(g));else{let x=g.combine(h.map(b=>b.value));l.push(n&&g.compare(x,n.facet(g))?n.facet(g):x)}else{for(let x of h)x.type==0?(o[x.id]=l.length<<1|1,l.push(x.value)):(o[x.id]=u.length<<1,u.push(b=>x.dynamicSlot(b)));o[g.id]=u.length<<1,u.push(x=>pW(x,g,h))}}let c=u.map(d=>d(o));return new zs(e,r,c,o,l,s)}}function fW(i,e,t){let n=[[],[],[],[],[]],a=new Map;function s(r,o){let l=a.get(r);if(l!=null){if(l<=o)return;let u=n[l].indexOf(r);u>-1&&n[l].splice(u,1),r instanceof $o&&t.delete(r.compartment)}if(a.set(r,o),Array.isArray(r))for(let u of r)s(u,o);else if(r instanceof $o){if(t.has(r.compartment))throw new RangeError("Duplicate use of compartment in extensions");let u=e.get(r.compartment)||r.inner;t.set(r.compartment,u),s(u,o)}else if(r instanceof Gg)s(r.inner,r.prec);else if(r instanceof Et)n[o].push(r),r.provides&&s(r.provides,o);else if(r instanceof Ua)n[o].push(r),r.facet.extensions&&s(r.facet.extensions,qn.default);else{let u=r.extension;if(!u)throw new Error(`Unrecognized extension value in extension set (${r}).`);if(u==r)throw new Error(`Unrecognized extension value in extension set (${r}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(u,o)}}return s(i,qn.default),n.reduce((r,o)=>r.concat(o))}function fi(i,e){if(e&1)return 2;let t=e>>1,n=i.status[t];if(n==4)throw new Error("Cyclic dependency between fields and/or facets");if(n&2)return n;i.status[t]=4;let a=i.computeSlot(i,i.config.dynamicSlots[t]);return i.status[t]=2|a}function Is(i,e){return e&1?i.config.staticValues[e>>1]:i.values[e>>1]}const Hg=V.define(),Xo=V.define({combine:i=>i.some(e=>e),static:!0}),Vg=V.define({combine:i=>i.length?i[0]:void 0,static:!0}),Qg=V.define(),qg=V.define(),Ug=V.define(),Yg=V.define({combine:i=>i.length?i[0]:!1});class Nn{constructor(e,t){this.type=e,this.value=t}static define(){return new xW}}class xW{of(e){return new Nn(this,e)}}class bW{constructor(e){this.map=e}of(e){return new de(this,e)}}class de{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new de(this.type,t)}is(e){return this.type==e}static define(e={}){return new bW(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let a of e){let s=a.map(t);s&&n.push(s)}return n}}de.reconfigure=de.define();de.appendConfig=de.define();class Ye{constructor(e,t,n,a,s,r){this.startState=e,this.changes=t,this.selection=n,this.effects=a,this.annotations=s,this.scrollIntoView=r,this._doc=null,this._state=null,n&&Rg(n,t.newLength),s.some(o=>o.type==Ye.time)||(this.annotations=s.concat(Ye.time.of(Date.now())))}static create(e,t,n,a,s,r){return new Ye(e,t,n,a,s,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(Ye.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}Ye.time=Nn.define();Ye.userEvent=Nn.define();Ye.addToHistory=Nn.define();Ye.remote=Nn.define();function vW(i,e){let t=[];for(let n=0,a=0;;){let s,r;if(n=i[n]))s=i[n++],r=i[n++];else if(a=0;a--){let s=n[a](i);s instanceof Ye?i=s:Array.isArray(s)&&s.length==1&&s[0]instanceof Ye?i=s[0]:i=Xg(e,T1(s),!1)}return i}function wW(i){let e=i.startState,t=e.facet(Ug),n=i;for(let a=t.length-1;a>=0;a--){let s=t[a](i);s&&Object.keys(s).length&&(n=$g(n,Ko(e,s,i.changes.newLength),!0))}return n==i?i:Ye.create(e,i.changes,i.selection,n.effects,n.annotations,n.scrollIntoView)}const zW=[];function T1(i){return i==null?zW:Array.isArray(i)?i:[i]}var Zt=(function(i){return i[i.Word=0]="Word",i[i.Space=1]="Space",i[i.Other=2]="Other",i})(Zt||(Zt={}));const IW=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let el;try{el=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function kW(i){if(el)return el.test(i);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||IW.test(t)))return!0}return!1}function SW(i){return e=>{if(!/\S/.test(e))return Zt.Space;if(kW(e))return Zt.Word;for(let t=0;t-1)return Zt.Word;return Zt.Other}}class re{constructor(e,t,n,a,s,r){this.config=e,this.doc=t,this.selection=n,this.values=a,this.status=e.statusTemplate.slice(),this.computeSlot=s,r&&(r._state=this);for(let o=0;oa.set(u,l)),t=null),a.set(o.value.compartment,o.value.extension)):o.is(de.reconfigure)?(t=null,n=o.value):o.is(de.appendConfig)&&(t=null,n=T1(n).concat(o.value));let s;t?s=e.startState.values.slice():(t=zs.resolve(n,a,this),s=new re(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,u)=>u.reconfigure(l,this),null).values);let r=e.startState.facet(Xo)?e.newSelection:e.newSelection.asSingle();new re(t,e.newDoc,r,s,(o,l)=>l.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:Z.cursor(t.from+e.length,-1)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),a=this.changes(n.changes),s=[n.range],r=T1(n.effects);for(let o=1;or.spec.fromJSON(o,l)))}}return re.create({doc:e.doc,selection:Z.fromJSON(e.selection),extensions:t.extensions?a.concat([t.extensions]):a})}static create(e={}){let t=zs.resolve(e.extensions||[],new Map),n=e.doc instanceof oe?e.doc:oe.of((e.doc||"").split(t.staticFacet(re.lineSeparator)||Qo)),a=e.selection?e.selection instanceof Z?e.selection:Z.single(e.selection.anchor,e.selection.head):Z.single(0);return Rg(a,n.length),t.staticFacet(Xo)||(a=a.asSingle()),new re(t,n,a,t.dynamicSlots.map(()=>null),(s,r)=>r.create(s),null)}get tabSize(){return this.facet(re.tabSize)}get lineBreak(){return this.facet(re.lineSeparator)||` -`}get readOnly(){return this.facet(Yg)}phrase(e,...t){for(let n of this.facet(re.phrases))if(Object.prototype.hasOwnProperty.call(n,e)){e=n[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(n,a)=>{if(a=="$")return"$";let s=+(a||1);return!s||s>t.length?n:t[s-1]})),e}languageDataAt(e,t,n=-1){let a=[];for(let s of this.facet(Hg))for(let r of s(this,t,n))Object.prototype.hasOwnProperty.call(r,e)&&a.push(r[e]);return a}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return SW(t.length?t[0]:"")}wordAt(e){let{text:t,from:n,length:a}=this.doc.lineAt(e),s=this.charCategorizer(e),r=e-n,o=e-n;for(;r>0;){let l=rt(t,r,!1);if(s(t.slice(l,r))!=Zt.Word)break;r=l}for(;oi.length?i[0]:4});re.lineSeparator=Vg;re.readOnly=Yg;re.phrases=V.define({compare(i,e){let t=Object.keys(i),n=Object.keys(e);return t.length==n.length&&t.every(a=>i[a]==e[a])}});re.languageData=Hg;re.changeFilter=Qg;re.transactionFilter=qg;re.transactionExtender=Ug;Vi.reconfigure=de.define();function y0(i,e,t={}){let n={};for(let a of i)for(let s of Object.keys(a)){let r=a[s],o=n[s];if(o===void 0)n[s]=r;else if(!(o===r||r===void 0))if(Object.hasOwnProperty.call(t,s))n[s]=t[s](o,r);else throw new Error("Config merge conflict for field "+s)}for(let a in e)n[a]===void 0&&(n[a]=e[a]);return n}class Dn{eq(e){return this==e}range(e,t=e){return tl.create(e,t,this)}}Dn.prototype.startSide=Dn.prototype.endSide=0;Dn.prototype.point=!1;Dn.prototype.mapMode=st.TrackDel;function w0(i,e){return i==e||i.constructor==e.constructor&&i.eq(e)}let tl=class Kg{constructor(e,t,n){this.from=e,this.to=t,this.value=n}static create(e,t,n){return new Kg(e,t,n)}};function nl(i,e){return i.from-e.from||i.value.startSide-e.value.startSide}class z0{constructor(e,t,n,a){this.from=e,this.to=t,this.value=n,this.maxPoint=a}get length(){return x1(this.to)}findIndex(e,t,n,a=0){let s=n?this.to:this.from;for(let r=a,o=s.length;;){if(r==o)return r;let l=r+o>>1,u=s[l]-e||(n?this.value[l].endSide:this.value[l].startSide)-t;if(l==r)return u>=0?r:o;u>=0?o=l:r=l+1}}between(e,t,n,a){for(let s=this.findIndex(t,-1e9,!0),r=this.findIndex(n,1e9,!1,s);sx||f==x&&d.startSide>0&&d.endSide<=0)continue;if(!((x-f||d.endSide-d.startSide)<0))if(u<0&&(u=f),d.point&&(m=Math.max(m,x-f)),(f-n||d.startSide-a)>=0)r.push(d),o.push(f-u),l.push(x-u),n=x,a=d.endSide;else{if(f==x)for(let b=r.length;b>0;b--){if((f-(l[b-1]+u)||d.startSide-r[b-1].endSide)>=0){r.splice(b,0,d),o.splice(b,0,f-u),l.splice(b,0,x-u);continue e}if((f-(o[b-1]+u)||d.endSide-r[b-1].startSide)>0)break}s(f,x,d)}}return{mapped:r.length?new z0(o,l,r,m):null,pos:u}}}class ie{constructor(e,t,n,a){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=a}static create(e,t,n,a){return new ie(e,t,n,a)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:n=!1,filterFrom:a=0,filterTo:s=this.length}=e,r=e.filter;if(t.length==0&&!r)return this;if(n&&(t=t.slice().sort(nl)),this.isEmpty)return t.length?ie.of(t):this;let o=new ep(this,null,-1).goto(0),l=0,u=[],m=new i1;for(;o.value||l=0){let c=t[l++];m.addInner(c.from,c.to,c.value,!1)||u.push(c)}else o.rangeIndex==1&&o.chunkIndexthis.chunkEnd(o.chunkIndex)||so.to||s{s||(s=new i1),s.addRange(l,u,m,!1)};for(let l=0;l=s&&e<=s+r.length&&r.between(s,e-s,t-s,n)===!1)return}this.nextLayer.between(e,t,n)}}iter(e=0){return Pi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Pi.from(e).goto(t)}static compare(e,t,n,a,s=-1){let r=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),o=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),l=Zm(r,o,n),u=new X1(r,l,s),m=new X1(o,l,s);n.iterGaps((c,d,h)=>Dm(u,c,m,d,h,a)),n.empty&&n.length==0&&Dm(u,0,m,0,0,a)}static eq(e,t,n=0,a){a==null&&(a=999999999);let s=e.filter(m=>!m.isEmpty&&t.indexOf(m)<0),r=t.filter(m=>!m.isEmpty&&e.indexOf(m)<0);if(s.length!=r.length)return!1;if(!s.length)return!0;let o=Zm(s,r),l=new X1(s,o,0).goto(n),u=new X1(r,o,0).goto(n);for(;;){if(l.to!=u.to||!il(l.active,u.active)||l.point&&(!u.point||!w0(l.point,u.point)))return!1;if(l.to>a)return!0;l.next(),u.next()}}static spans(e,t,n,a,s=-1){let r=new X1(e,null,s).goto(t),o=t,l=r.openStart;for(;;){let u=Math.min(r.to,n);if(r.point){let m=r.activeForPoint(r.to),c=r.pointFromo&&(a.span(o,u,r.active,l),l=r.openEnd(u));if(r.to>n)return l+(r.point&&r.to>n?1:0);o=r.to,r.next()}}static of(e,t=!1){let n=new i1;for(let a of e instanceof tl?[e]:t?TW(e):e)n.add(a.from,a.to,a.value);return n.finish()}static join(e){if(!e.length)return ie.empty;let t=x1(e);for(let n=e.length-2;n>=0;n--)for(let a=e[n];a!=ie.empty;a=a.nextLayer)t=new ie(a.chunkPos,a.chunk,t,Math.max(a.maxPoint,t.maxPoint));return t}}ie.empty=new ie([],[],null,-1);function x1(i){return i[i.length-1]}function TW(i){if(i.length>1)for(let e=i[0],t=1;t0)return i.slice().sort(nl);e=n}return i}ie.empty.nextLayer=ie.empty;class i1{finishChunk(e){this.chunks.push(new z0(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,n){this.addRange(e,t,n,!0)}addRange(e,t,n,a){this.addInner(e,t,n,a)||(this.nextLayer||(this.nextLayer=new i1)).addRange(e,t,n,a)}addInner(e,t,n,a){let s=e-this.lastTo||n.startSide-this.last.endSide;if(a&&s<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}finish(){return this.finishInner(ie.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=ie.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function Zm(i,e,t){let n=new Map;for(let s of i)for(let r=0;r=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=n&&a.push(new ep(r,t,n,s));return a.length==1?a[0]:new Pi(a)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let n of this.heap)n.goto(e,t);for(let n=this.heap.length>>1;n>=0;n--)Zr(this.heap,n);return this.next(),this}forward(e,t){for(let n of this.heap)n.forward(e,t);for(let n=this.heap.length>>1;n>=0;n--)Zr(this.heap,n);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Zr(this.heap,0)}}}function Zr(i,e){for(let t=i[e];;){let n=(e<<1)+1;if(n>=i.length)break;let a=i[n];if(n+1=0&&(a=i[n+1],n++),t.compare(a)<0)break;i[n]=t,i[e]=a,e=n}}class X1{constructor(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Pi.from(e,t,n)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){ya(this.active,e),ya(this.activeTo,e),ya(this.activeRank,e),this.minActive=Bm(this.active,this.activeTo)}addActive(e){let t=0,{value:n,to:a,rank:s}=this.cursor;for(;t0;)t++;wa(this.active,t,n),wa(this.activeTo,t,a),wa(this.activeRank,t,s),e&&wa(e,t,this.cursor.from),this.minActive=Bm(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let n=this.openStart<0?[]:null;for(;;){let a=this.minActive;if(a>-1&&(this.activeTo[a]-this.cursor.from||this.active[a].endSide-this.cursor.startSide)<0){if(this.activeTo[a]>e){this.to=this.activeTo[a],this.endSide=this.active[a].endSide;break}this.removeActive(a),n&&ya(n,a)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(n),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[a]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()}openEnd(e){let t=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t}}function Dm(i,e,t,n,a,s){i.goto(e),t.goto(n);let r=n+a,o=n,l=n-e,u=!!s.boundChange;for(let m=!1;;){let c=i.to+l-t.to,d=c||i.endSide-t.endSide,h=d<0?i.to+l:t.to,g=Math.min(h,r);if(i.point||t.point?(i.point&&t.point&&w0(i.point,t.point)&&il(i.activeForPoint(i.to),t.activeForPoint(t.to))||s.comparePoint(o,g,i.point,t.point),m=!1):(m&&(s.boundChange(o),m=!1),g>o&&!il(i.active,t.active)&&s.compareRange(o,g,i.active,t.active),u&&gr)break;o=h,d<=0&&i.next(),d>=0&&t.next()}}function il(i,e){if(i.length!=e.length)return!1;for(let t=0;t=e;n--)i[n+1]=i[n];i[e]=t}function Bm(i,e){let t=-1,n=1e9;for(let a=0;a=e)return a;if(a==i.length)break;s+=i.charCodeAt(a)==9?t-s%t:1,a=rt(i,a)}return i.length}const al="ͼ",Lm=typeof Symbol>"u"?"__"+al:Symbol.for(al),sl=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Wm=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class Bn{constructor(e,t){this.rules=[];let{finish:n}=t||{};function a(r){return/^@/.test(r)?[r]:r.split(/,\s*/)}function s(r,o,l,u){let m=[],c=/^@(\w+)\b/.exec(r[0]),d=c&&c[1]=="keyframes";if(c&&o==null)return l.push(r[0]+";");for(let h in o){let g=o[h];if(/&/.test(h))s(h.split(/,\s*/).map(f=>r.map(x=>f.replace(/&/,x))).reduce((f,x)=>f.concat(x)),g,l);else if(g&&typeof g=="object"){if(!c)throw new RangeError("The value of a property ("+h+") should be a primitive value.");s(a(h),g,m,d)}else g!=null&&m.push(h.replace(/_.*/,"").replace(/[A-Z]/g,f=>"-"+f.toLowerCase())+": "+g+";")}(m.length||d)&&l.push((n&&!c&&!u?r.map(n):r).join(", ")+" {"+m.join(" ")+"}")}for(let r in e)s(a(r),e[r],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=Wm[Lm]||1;return Wm[Lm]=e+1,al+e.toString(36)}static mount(e,t,n){let a=e[sl],s=n&&n.nonce;a?s&&a.setNonce(s):a=new _W(e,s),a.mount(Array.isArray(t)?t:[t],e)}}let Em=new Map;class _W{constructor(e,t){let n=e.ownerDocument||e,a=n.defaultView;if(!e.head&&e.adoptedStyleSheets&&a.CSSStyleSheet){let s=Em.get(n);if(s)return e[sl]=s;this.sheet=new a.CSSStyleSheet,Em.set(n,this)}else this.styleTag=n.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[sl]=this}mount(e,t){let n=this.sheet,a=0,s=0,r=!1;for(let o=0;o-1&&(this.modules.splice(u,1),r=!0,s--,u=-1),u==-1){if(this.modules.splice(s++,0,l),r=!0,n)for(let m=0;m",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},CW=typeof navigator<"u"&&/Mac/.test(navigator.platform),AW=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var Ue=0;Ue<10;Ue++)Ln[48+Ue]=Ln[96+Ue]=String(Ue);for(var Ue=1;Ue<=24;Ue++)Ln[Ue+111]="F"+Ue;for(var Ue=65;Ue<=90;Ue++)Ln[Ue]=String.fromCharCode(Ue+32),Oi[Ue]=String.fromCharCode(Ue);for(var Dr in Ln)Oi.hasOwnProperty(Dr)||(Oi[Dr]=Ln[Dr]);function PW(i){var e=CW&&i.metaKey&&i.shiftKey&&!i.ctrlKey&&!i.altKey||AW&&i.shiftKey&&i.key&&i.key.length==1||i.key=="Unidentified",t=!e&&i.key||(i.shiftKey?Oi:Ln)[i.keyCode]||i.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}let ut=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},rl=typeof document<"u"?document:{documentElement:{style:{}}};const ol=/Edge\/(\d+)/.exec(ut.userAgent),tp=/MSIE \d/.test(ut.userAgent),ll=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(ut.userAgent),ar=!!(tp||ll||ol),Nm=!ar&&/gecko\/(\d+)/i.test(ut.userAgent),Br=!ar&&/Chrome\/(\d+)/.exec(ut.userAgent),Jm="webkitFontSmoothing"in rl.documentElement.style,ul=!ar&&/Apple Computer/.test(ut.vendor),Fm=ul&&(/Mobile\/\w+/.test(ut.userAgent)||ut.maxTouchPoints>2);var G={mac:Fm||/Mac/.test(ut.platform),windows:/Win/.test(ut.platform),linux:/Linux|X11/.test(ut.platform),ie:ar,ie_version:tp?rl.documentMode||6:ll?+ll[1]:ol?+ol[1]:0,gecko:Nm,gecko_version:Nm?+(/Firefox\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,chrome:!!Br,chrome_version:Br?+Br[1]:0,ios:Fm,android:/Android\b/.test(ut.userAgent),webkit:Jm,webkit_version:Jm?+(/\bAppleWebKit\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,safari:ul,safari_version:ul?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ut.userAgent)||[0,0])[1]:0,tabSize:rl.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function I0(i,e){for(let t in i)t=="class"&&e.class?e.class+=" "+i.class:t=="style"&&e.style?e.style+=";"+i.style:e[t]=i[t];return e}const ks=Object.create(null);function k0(i,e,t){if(i==e)return!0;i||(i=ks),e||(e=ks);let n=Object.keys(i),a=Object.keys(e);if(n.length-0!=a.length-0)return!1;for(let s of n)if(s!=t&&(a.indexOf(s)==-1||i[s]!==e[s]))return!1;return!0}function OW(i,e){for(let t=i.attributes.length-1;t>=0;t--){let n=i.attributes[t].name;e[n]==null&&i.removeAttribute(n)}for(let t in e){let n=e[t];t=="style"?i.style.cssText=n:i.getAttribute(t)!=n&&i.setAttribute(t,n)}}function Rm(i,e,t){let n=!1;if(e)for(let a in e)t&&a in t||(n=!0,a=="style"?i.style.cssText="":i.removeAttribute(a));if(t)for(let a in t)e&&e[a]==t[a]||(n=!0,a=="style"?i.style.cssText=t[a]:i.setAttribute(a,t[a]));return n}function MW(i){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new o1(e,t,t,n,e.widget||null,!1)}static replace(e){let t=!!e.block,n,a;if(e.isBlockGap)n=-5e8,a=4e8;else{let{start:s,end:r}=np(e,t);n=(s?t?-3e8:-1:5e8)-1,a=(r?t?2e8:1:-6e8)+1}return new o1(e,n,a,t,e.widget||null,!0)}static line(e){return new Ui(e)}static set(e,t=!1){return ie.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}he.none=ie.empty;class qi extends he{constructor(e){let{start:t,end:n}=np(e);super(t?-1:5e8,n?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?I0(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||ks}eq(e){return this==e||e instanceof qi&&this.tagName==e.tagName&&k0(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}qi.prototype.point=!1;class Ui extends he{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Ui&&this.spec.class==e.spec.class&&k0(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Ui.prototype.mapMode=st.TrackBefore;Ui.prototype.point=!0;class o1 extends he{constructor(e,t,n,a,s,r){super(t,n,s,e),this.block=a,this.isReplace=r,this.mapMode=a?t<=0?st.TrackBefore:st.TrackAfter:st.TrackDel}get type(){return this.startSide!=this.endSide?$e.WidgetRange:this.startSide<=0?$e.WidgetBefore:$e.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof o1&&ZW(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}o1.prototype.point=!0;function np(i,e=!1){let{inclusiveStart:t,inclusiveEnd:n}=i;return t==null&&(t=i.inclusive),n==null&&(n=i.inclusive),{start:t??e,end:n??e}}function ZW(i,e){return i==e||!!(i&&e&&i.compare(e))}function j1(i,e,t,n=0){let a=t.length-1;a>=0&&t[a]+n>=i?t[a]=Math.max(t[a],e):t.push(i,e)}class Mi extends Dn{constructor(e,t,n){super(),this.tagName=e,this.attributes=t,this.rank=n}eq(e){return e==this||e instanceof Mi&&this.tagName==e.tagName&&k0(this.attributes,e.attributes)}static create(e){return new Mi(e.tagName,e.attributes||ks,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return ie.of(e,t)}}Mi.prototype.startSide=Mi.prototype.endSide=-1;const He=i=>i.nodeType==1,M1=i=>i.nodeType==3;function Zi(i){let e;return i.nodeType==11?e=i.getSelection?i:i.ownerDocument:e=i,e.getSelection()}function ml(i,e){return e?i==e||i.contains(e.nodeType!=1?e.parentNode:e):!1}function xi(i,e){if(!e.anchorNode)return!1;try{return ml(i,e.anchorNode)}catch{return!1}}function Ya(i){return M1(i)?Di(i,0,i.nodeValue.length).getClientRects():He(i)?i.getClientRects():[]}function bi(i,e,t,n){return t?Gm(i,e,t,n,-1)||Gm(i,e,t,n,1):!1}function Wn(i){for(var e=0;;e++)if(i=i.previousSibling,!i)return e}function Ss(i){return He(i)&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(i.nodeName)}function Gm(i,e,t,n,a){for(;;){if(i==t&&e==n)return!0;if(e==(a<0?0:vn(i))){if(i.nodeName=="DIV")return!1;let s=i.parentNode;if(!s||!He(s))return!1;e=Wn(i)+(a<0?0:1),i=s}else if(He(i)){if(i=i.childNodes[e+(a<0?-1:0)],He(i)&&(i.nodeName=="IMG"||i.nodeName=="BR"||i.contentEditable=="false"))return!1;e=a<0?vn(i):0}else return!1}}function vn(i){return M1(i)?i.nodeValue.length:i.childNodes.length}function Ts(i,e){let{left:t,right:n}=i;if(t==n)return i;let a=e?t:n;return{left:a,right:a,top:i.top,bottom:i.bottom}}function DW(i){let e=i.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:i.innerWidth,top:0,bottom:i.innerHeight}}function ip(i,e){let t=e.width/i.offsetWidth,n=e.height/i.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-i.offsetWidth)<1)&&(t=1),(n>.995&&n<1.005||!isFinite(n)||Math.abs(e.height-i.offsetHeight)<1)&&(n=1),{scaleX:t,scaleY:n}}function BW(i,e,t,n,a,s,r,o){let l=i.ownerDocument,u=l.defaultView||window;for(let m=i,c=!1;m&&!c;)if(He(m)){let d,h=m==l.body,g=1,f=1,x=!0,b=!0;if(h)d=DW(u);else{let z=getComputedStyle(m);if(/^(fixed|sticky)$/.test(z.position)&&(c=!0),(m.scrollHeight<=m.clientHeight||!/auto|scroll/.test(z.overflowY))&&(b=!1),(m.scrollWidth<=m.clientWidth||!/auto|scroll/.test(z.overflowX))&&(x=!1),!x&&!b){m=m.assignedSlot||m.parentNode;continue}let I=m.getBoundingClientRect();({scaleX:g,scaleY:f}=ip(m,I)),d={left:I.left,right:I.left+m.clientWidth*g,top:I.top,bottom:I.top+m.clientHeight*f}}let v=0,w=0;if(b)if(a=="nearest")e.top0&&e.bottom>d.bottom+w&&(w=e.bottom-d.bottom+r)):e.bottom>d.bottom-r&&(w=e.bottom-d.bottom+r,t<0&&e.top-w0&&e.right>d.right+v&&(v=e.right-d.right+s)):e.right>d.right-s&&(v=e.right-d.right+s,t<0&&e.leftd.bottom||e.leftd.right)&&(e={left:Math.max(e.left,d.left),right:Math.min(e.right,d.right),top:Math.max(e.top,d.top),bottom:Math.min(e.bottom,d.bottom)}),m=m.assignedSlot||m.parentNode}else if(m.nodeType==11)m=m.host;else break}function ap(i,e=!0){let t=i.ownerDocument,n=null,a=null;for(let s=i.parentNode;s&&!(s==t.body||(!e||n)&&a);)if(He(s))!a&&s.scrollHeight>s.clientHeight&&/scroll|auto/.test(getComputedStyle(s).overflowY)&&(a=s),e&&!n&&s.scrollWidth>s.clientWidth&&/scroll|auto/.test(getComputedStyle(s).overflowX)&&(n=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:n,y:a}}class LW{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:n}=e;this.set(t,Math.min(e.anchorOffset,t?vn(t):0),n,Math.min(e.focusOffset,n?vn(n):0))}set(e,t,n,a){this.anchorNode=e,this.anchorOffset=t,this.focusNode=n,this.focusOffset=a}}function sp(i){let e=[];for(let t=i;t;t=t.nodeType==11?t.host:t.parentNode)He(t)&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function rp(i,e=!0){for(let{node:t,left:n,top:a}of i)e&&t.scrollTop!=a&&(t.scrollTop=a),t.scrollLeft!=n&&(t.scrollLeft=n)}let Qn=null;G.safari&&G.safari_version>=26&&(Qn=!1);function op(i){if(i.setActive)return i.setActive();if(Qn)return i.focus(Qn);let e=sp(i);i.focus(Qn==null?{get preventScroll(){return Qn={preventScroll:!0},!0}}:void 0),Qn||(Qn=!1,rp(e))}let Hm;function Di(i,e,t=e){let n=Hm||(Hm=document.createRange());return n.setEnd(i,t),n.setStart(i,e),n}function _1(i,e,t,n){let a={key:e,code:e,keyCode:t,which:t,cancelable:!0};n&&({altKey:a.altKey,ctrlKey:a.ctrlKey,shiftKey:a.shiftKey,metaKey:a.metaKey}=n);let s=new KeyboardEvent("keydown",a);s.synthetic=!0,i.dispatchEvent(s);let r=new KeyboardEvent("keyup",a);return r.synthetic=!0,i.dispatchEvent(r),s.defaultPrevented||r.defaultPrevented}function WW(i){for(;i;){if(i&&(i.nodeType==9||i.nodeType==11&&i.host))return i;i=i.assignedSlot||i.parentNode}return null}function EW(i,e){let t=e.focusNode,n=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=n)return!1;for(n=Math.min(n,vn(t));;)if(n){if(!He(t))return!1;let a=t.childNodes[n-1];a.contentEditable=="false"?n--:(t=a,n=vn(t))}else{if(t==i)return!0;n=Wn(t),t=t.parentNode}}function lp(i){return i instanceof Window?i.pageYOffset>Math.max(0,i.document.documentElement.scrollHeight-i.innerHeight-4):i.scrollTop>Math.max(1,i.scrollHeight-i.clientHeight-4)}function up(i,e){for(let t=i,n=e;;){if(M1(t)&&n>0)return{node:t,offset:n};if(He(t)&&n>0){if(t.contentEditable=="false")return null;t=t.childNodes[n-1],n=vn(t)}else if(t.parentNode&&!Ss(t))n=Wn(t),t=t.parentNode;else return null}}function mp(i,e){for(let t=i,n=e;;){if(M1(t)&&n=t){if(o.level==n)return r;(s<0||(a!=0?a<0?o.fromt:e[s].level>o.level))&&(s=r)}}if(s<0)throw new RangeError("Index out of range");return s}}function hp(i,e){if(i.length!=e.length)return!1;for(let t=0;t=0;f-=3)if($t[f+1]==-h){let x=$t[f+2],b=x&2?a:x&4?x&1?s:a:0;b&&(be[c]=be[$t[f]]=b),o=f;break}}else{if($t.length==189)break;$t[o++]=c,$t[o++]=d,$t[o++]=l}else if((g=be[c])==2||g==1){let f=g==a;l=f?0:1;for(let x=o-3;x>=0;x-=3){let b=$t[x+2];if(b&2)break;if(f)$t[x+2]|=2;else{if(b&4)break;$t[x+2]|=4}}}}}function HW(i,e,t,n){for(let a=0,s=n;a<=t.length;a++){let r=a?t[a-1].to:i,o=al;)g==x&&(g=t[--f].from,x=f?t[f-1].to:i),be[--g]=h;l=m}else s=u,l++}}}function dl(i,e,t,n,a,s,r){let o=n%2?2:1;if(n%2==a%2)for(let l=e,u=0;ll&&r.push(new rn(l,f.from,h));let x=f.direction==Z1!=!(h%2);hl(i,x?n+1:n,a,f.inner,f.from,f.to,r),l=f.to}g=f.to}else{if(g==t||(m?be[g]!=o:be[g]==o))break;g++}d?dl(i,l,g,n+1,a,d,r):le;){let m=!0,c=!1;if(!u||l>s[u-1].to){let f=be[l-1];f!=o&&(m=!1,c=f==16)}let d=!m&&o==1?[]:null,h=m?n:n+1,g=l;e:for(;;)if(u&&g==s[u-1].to){if(c)break e;let f=s[--u];if(!m)for(let x=f.from,b=u;;){if(x==e)break e;if(b&&s[b-1].to==x)x=s[--b].from;else{if(be[x-1]==o)break e;break}}if(d)d.push(f);else{f.tobe.length;)be[be.length]=256;let n=[],a=e==Z1?0:1;return hl(i,a,a,t,0,i.length,n),n}function gp(i){return[new rn(0,i,0)]}let pp="";function QW(i,e,t,n,a){var s;if(!i.length)return null;let r=n.head-i.from,o;if(n.head==i.from&&n.assoc<0){if(!a)return null;r=e[o=0].side(!1,t)}else if(n.head==i.to&&n.assoc>0){if(a)return null;r=e[o=e.length-1].side(!0,t)}else o=rn.find(e,r,(s=n.bidiLevel)!==null&&s!==void 0?s:-1,n.assoc);let l=e[o],u=l.side(a,t);if(r==u){let d=o+=a?1:-1;if(d<0||d>=e.length)return null;l=e[o=d],r=l.side(!a,t),u=l.side(a,t)}let m=rt(i.text,r,l.forward(a,t));(ml.to)&&(m=u),pp=i.text.slice(Math.min(r,m),Math.max(r,m));let c=o==(a?e.length-1:0)?null:e[o+(a?1:-1)];if(m==u){if(!c)return a?Z.cursor(i.to,1):Z.cursor(i.from,-1);if(c.level+(a?0:1)i.some(e=>e)}),UW=V.define({combine:i=>i.some(e=>e)}),Ip=V.define();class C1{constructor(e,t,n,a,s,r=!1){this.range=e,this.y=t,this.x=n,this.yMargin=a,this.xMargin=s,this.isSnapshot=r}map(e){return e.empty?this:new C1(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new C1(Z.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const za=de.define({map:(i,e)=>i.map(e)}),kp=de.define();function zt(i,e,t){let n=i.facet(vp);n.length?n[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const gn=V.define({combine:i=>i.length?i[0]:!0});let YW=0;const w1=V.define({combine(i){return i.filter((e,t)=>{for(let n=0;n{let l=[];return r&&l.push(sr.of(u=>{let m=u.plugin(o);return m?r(m):he.none})),s&&l.push(s(o)),l})}static fromClass(e,t){return Wt.define((n,a)=>new e(n,a),t)}}class Lr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(n){if(zt(t.state,n,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){zt(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(n){zt(e.state,n,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Sp=V.define(),_0=V.define(),sr=V.define(),Tp=V.define(),C0=V.define(),Yi=V.define(),jp=V.define();function Vm(i,e){let t=i.state.facet(jp);if(!t.length)return t;let n=t.map(s=>s instanceof Function?s(i):s),a=[];return ie.spans(n,e.from,e.to,{point(){},span(s,r,o,l){let u=s-e.from,m=r-e.from,c=a;for(let d=o.length-1;d>=0;d--,l--){let h=o[d].spec.bidiIsolate,g;if(l>0&&c.length&&(g=c[c.length-1]).to==u&&g.direction==h)g.to=m,c=g.inner;else{let f={from:u,to:m,direction:h,inner:[]};c.push(f),c=f.inner}}}}),_p(e.text,a)}function _p(i,e){for(let t of e){if(t.direction==null){for(let n=t.from,a=0;n0;t--){let a=e[t-1];if(!(a.fromA>n.toA)){if(a.toAa.push(new Dt(s,r,o,l))),this.changedRanges=a}static create(e,t,n){return new js(e,t,n)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const $W=[];class Ae{constructor(e,t,n=0){this.dom=e,this.length=t,this.flags=n,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return $W}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&OW(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let n=t;for(let a of this.children){if(a==e)return n;n+=a.length+a.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,n){return null}domPosFor(e,t){let n=Wn(this.dom),a=this.length?e>0:t>0;return new Gt(this.parent.dom,n+(a?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof or)return e;return null}static get(e){return e.cmTile}}class rr extends Ae{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,n=null,a,s=(e==null?void 0:e.node)==t?e:null,r=0;for(let o of this.children){if(o.sync(e),r+=o.length+o.breakAfter,a=n?n.nextSibling:t.firstChild,s&&a!=o.dom&&(s.written=!0),o.dom.parentNode==t)for(;a&&a!=o.dom;)a=Qm(a);else t.insertBefore(o.dom,a);n=o.dom}for(a=n?n.nextSibling:t.firstChild,s&&a&&(s.written=!0);a;)a=Qm(a);this.length=r}}function Qm(i){let e=i.nextSibling;return i.parentNode.removeChild(i),e}class or extends rr{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Ae.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],n=this,a=0,s=0;;)if(a==n.children.length){if(!t.length)return;n=n.parent,n.breakAfter&&s++,a=t.pop()}else{let r=n.children[a++];if(r instanceof fn)t.push(a),n=r,a=0;else{let o=s+r.length,l=e(r,s);if(l!==void 0)return l;s=o+r.breakAfter}}}resolveBlock(e,t){let n,a=-1,s,r=-1;if(this.blockTiles((o,l)=>{let u=l+o.length;if(e>=l&&e<=u){if(o.isWidget()&&t>=-1&&t<=1){if(o.flags&32)return!0;o.flags&16&&(n=void 0)}(le||e==l&&(t>1?o.length:o.covers(-1)))&&(!s||!o.isWidget()&&s.isWidget())&&(s=o,r=e-l)}}),!n&&!s)throw new Error("No tile at position "+e);return n&&t<0||!s?{tile:n,offset:a}:{tile:s,offset:r}}}class fn extends rr{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let n=new fn(t||document.createElement(e.tagName),e);return t||(n.flags|=4),n}}class D1 extends rr{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,n){let a=new D1(t||document.createElement("div"),e);return(!t||!n)&&(a.flags|=4),a}get domAttrs(){return this.attrs}resolveInline(e,t,n=!1){let a=null,s=-1,r=null,o=-1;function l(m,c){for(let d=0,h=0;d=c&&(g.isComposite()?l(g,c-h):(!r||n&&r.isHidden&&(t>0&&!(r.flags&32)||n&&KW(r,g)))&&(f>c||g.flags&32&&t<=1)?(r=g,o=c-h):(h=-1)&&(a=g,s=c-h)),h=f}}l(this,e);let u=(t<0?a:r)||a||r;return u?{tile:u,offset:u==a?s:o}:null}coordsIn(e,t,n){let a=this.resolveInline(e,t,!0);return a?a.tile.coordsIn(Math.max(0,a.offset),t,n):XW(this)}domIn(e,t){let n=this.resolveInline(e,t);if(n){let{tile:a,offset:s}=n;if(this.dom.contains(a.dom))return a.isText()?new Gt(a.dom,Math.min(a.dom.nodeValue.length,s)):a.domPosFor(s,a.flags&16?1:a.flags&32?-1:t);let r=n.tile.parent,o=!1;for(let l of r.children){if(o)return new Gt(l.dom,0);l==n.tile&&(o=!0)}}return new Gt(this.dom,0)}}function XW(i){let e=i.dom.lastChild;if(!e)return i.dom.getBoundingClientRect();let t=Ya(e);return t[t.length-1]||null}function KW(i,e){let t=i.coordsIn(0,1),n=e.coordsIn(0,1);return t&&n&&n.topa&&(e=a);let s=e,r=e,o=0;e==0&&t<0||e==a&&t>=0?G.chrome||G.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return G.safari&&!o&&u.width==0&&(u=Array.prototype.find.call(l,m=>m.width)||u),n==null?u:Ts(u,(o?o>0:t<0)==n)}static of(e,t){let n=new $n(t||document.createTextNode(e),e);return t||(n.flags|=2),n}}class l1 extends Ae{constructor(e,t,n,a){super(e,t,a),this.widget=n}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,n){let a=this.widget.coordsAt(this.dom,e,t);if(a)return a;if(n)return Ts(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),r=null;if(!s.length)return null;let o=this.flags&16?!0:this.flags&32?!1:e>0;for(let l=o?s.length-1:0;r=s[l],!(e>0?l==0:l==s.length-1||r.top0==n)}}class eE{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,n){let{tile:a,index:s,beforeBreak:r,parents:o}=this;for(;e||t>0;)if(a.isComposite())if(r){if(!e)break;n&&n.break(),e--,r=!1}else if(s==a.children.length){if(!e&&!o.length)break;n&&n.leave(a),r=!!a.breakAfter,{tile:a,index:s}=o.pop(),s++}else{let l=a.children[s],u=l.breakAfter;(t>0?l.length<=e:l.length=0;o--){let l=t.marks[o],u=a.lastChild;if(u instanceof pt&&u.mark.eq(l.mark))u.dom!=l.dom&&u.setDOM(Wr(l.dom)),a=u;else{let{dom:m}=l;this.cache.reused.get(l)&&Ae.get(l.dom)&&(m=Wr(l.dom));let c=pt.of(l.mark,m);a.append(c),a=c}this.cache.reused.set(l,2)}let s=Ae.get(e.text);s&&this.cache.reused.set(s,2);let r=new $n(e.text,e.text.nodeValue);r.flags|=8,this.pos=e.range.toB,a.append(r)}addInlineWidget(e,t,n){let a=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);a||this.flushBuffer();let s=this.ensureMarks(t,n);!a&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,n){this.flushBuffer(),this.ensureMarks(t,n).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var n;e||(e=Ap);let a=D1.start(e,t||((n=this.cache.find(D1))===null||n===void 0?void 0:n.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=a)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var n;let a=this.curLine;for(let s=e.length-1;s>=0;s--){let r=e[s],o;if(t>0&&(o=a.lastChild)&&o instanceof pt&&o.mark.eq(r))a=o,t--;else{let l=pt.of(r,(n=this.cache.find(pt,u=>u.mark.eq(r)))===null||n===void 0?void 0:n.dom);a.append(l),a=l,t=0}}return a}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!qm(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(G.ios&&qm(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Er,0,32)||new l1(Er.toDOM(),0,Er,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,n=new tE(e.from,e.to,e.value,t),a=this.wrappers.length;for(;a>0&&(this.wrappers[a-1].rank-n.rank||this.wrappers[a-1].to-n.to)<0;)a--;this.wrappers.splice(a,0,n)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let n of this.wrappers){let a=t.lastChild;if(n.fromr.wrapper.eq(n.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),n=this.cache.find(_s,void 0,1);return n&&(n.flags=t),n||new _s(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class iE{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:a,lineBreak:s,done:r}=this.cursor.next(this.skipCount);if(this.skipCount=0,r)throw new Error("Ran out of text content when drawing inline views");this.text=a;let o=this.textOff=Math.min(e,a.length);return s?null:a.slice(0,o)}let t=Math.min(this.text.length,this.textOff+e),n=this.text.slice(this.textOff,t);return this.textOff=t,n}}const Cs=[l1,D1,$n,pt,_s,fn,or];for(let i=0;i[]),this.index=Cs.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,n=this.buckets[t];n.length<6?n.push(e):n[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,n=2){let a=e.bucket,s=this.buckets[a],r=this.index[a];for(let o=0;o{if(this.cache.add(r),r.isComposite())return!1},enter:r=>this.cache.add(r),leave:()=>{},break:()=>{}}}run(e,t){let n=t&&this.getCompositionContext(t.text);for(let a=0,s=0,r=0;;){let o=ra){let u=l-a;this.preserve(u,!r,!o),a=l,s+=u}if(!o)break;t&&o.fromA<=t.range.fromA&&o.toA>=t.range.toA?(this.forward(o.fromA,t.range.fromA,t.range.fromA{if(r.isWidget())if(this.openWidget)this.builder.continueWidget(l-o);else{let u=l>0||o{r.isLine()?this.builder.addLineStart(r.attrs,this.cache.maybeReuse(r)):(this.cache.add(r),r instanceof pt&&a.unshift(r.mark)),this.openWidget=!1},leave:r=>{r.isLine()?a.length&&(a.length=s=0):r instanceof pt&&(a.shift(),s=Math.min(s,a.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let n=null,a=this.builder,s=-1,r=ie.spans(this.decorations,e,t,{point:(o,l,u,m,c,d)=>{if(u instanceof o1){if(this.disallowBlockEffectsFor[d]){if(u.block)throw new RangeError("Block decorations may not be specified via plugins");if(l>this.view.state.doc.lineAt(o).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=m.length,c>m.length)a.continueWidget(l-o);else{let h=u.widget||(u.block?B1.block:B1.inline),g=rE(u),f=this.cache.findWidget(h,l-o,g)||l1.of(h,this.view,l-o,g);u.block?(u.startSide>0&&a.addLineStartIfNotCovered(n),a.addBlockWidget(f)):(a.ensureLine(n),a.addInlineWidget(f,m,c))}n=null}else n=oE(n,u);l>o&&this.text.skip(l-o)},span:(o,l,u,m)=>{for(let c=o;c-1&&(this.openWidget=r>s),this.openWidget||a.addLineStartIfNotCovered(n),this.openMarks=r}forward(e,t,n=1){t-e<=10?this.old.advance(t-e,n,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,n,this.reuseWalker))}getCompositionContext(e){let t=[],n=null;for(let a=e.parentNode;;a=a.parentNode){let s=Ae.get(a);if(a==this.view.contentDOM)break;s instanceof pt?t.push(s):s!=null&&s.isLine()?n=s:s instanceof fn||(a.nodeName=="DIV"&&!n?n=new D1(a,Ap):n||t.push(pt.of(new qi({tagName:a.nodeName.toLowerCase(),attributes:MW(a)}),a)))}return n?{line:n,marks:t}:null}}function qm(i,e){let t=n=>{for(let a of n.children)if((e?a.isText():a.length)||t(a))return!0;return!1};return t(i)}function rE(i){let e=i.isReplace?(i.startSide<0?64:0)|(i.endSide>0?128:0):i.startSide>0?32:16;return i.block&&(e|=256),e}const Ap={class:"cm-line"};function oE(i,e){let t=e.spec.attributes,n=e.spec.class;return!t&&!n||(i||(i={class:"cm-line"}),t&&I0(t,i),n&&(i.class+=" "+n)),i}function lE(i){let e=[];for(let t=i.parents.length;t>1;t--){let n=t==i.parents.length?i.tile:i.parents[t].tile;n instanceof pt&&e.push(n.mark)}return e}function Wr(i){let e=Ae.get(i);return e&&e.setDOM(i.cloneNode()),i}class B1 extends J1{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}B1.inline=new B1("span");B1.block=new B1("div");const Er=new class extends J1{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Um{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=he.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new or(e,e.contentDOM),this.updateInner([new Dt(0,0,0,e.state.doc.length)],null)}update(e){var t;let n=e.changedRanges;this.minWidth>0&&n.length&&(n.every(({fromA:m,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let a=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?a=this.domChanged.newSel.head:!xE(e.changes,this.hasComposition)&&!e.selectionSet&&(a=e.state.selection.main.head));let s=a>-1?mE(this.view,e.changes,a):null;if(this.domChanged=null,this.hasComposition){let{from:m,to:c}=this.hasComposition;n=new Dt(m,c,e.changes.mapPos(m,-1),e.changes.mapPos(c,1)).addToSet(n.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(G.ie||G.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let r=this.decorations,o=this.blockWrappers;this.updateDeco();let l=hE(r,this.decorations,e.changes);l.length&&(n=Dt.extendWithRanges(n,l));let u=pE(o,this.blockWrappers,e.changes);return u.length&&(n=Dt.extendWithRanges(n,u)),s&&!n.some(m=>m.fromA<=s.range.fromA&&m.toA>=s.range.toA)&&(n=s.range.addToSet(n.slice())),this.tile.flags&2&&n.length==0?!1:(this.updateInner(n,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:n}=this.view;n.ignore(()=>{if(t||e.length){let r=this.tile,o=new sE(this.view,r,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&Ae.get(t.text)&&o.cache.reused.set(Ae.get(t.text),2),this.tile=o.run(e,t),pl(r,o.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=G.chrome||G.ios?{node:n.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||n.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let a=[];if(this.view.viewport.from||this.view.viewport.to-1)&&xi(n,this.view.observer.selectionRange)&&!(a&&n.contains(a));if(!(s||t||r))return;let o=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,u,m;if(l.empty?m=u=this.inlineDOMNearPos(l.anchor,l.assoc||1):(m=this.inlineDOMNearPos(l.head,l.head==l.from?1:-1),u=this.inlineDOMNearPos(l.anchor,l.anchor==l.from?1:-1)),G.gecko&&l.empty&&!this.hasComposition&&uE(u)){let d=document.createTextNode("");this.view.observer.ignore(()=>u.node.insertBefore(d,u.node.childNodes[u.offset]||null)),u=m=new Gt(d,0),o=!0}let c=this.view.observer.selectionRange;(o||!c.focusNode||(!bi(u.node,u.offset,c.anchorNode,c.anchorOffset)||!bi(m.node,m.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,l))&&(this.view.observer.ignore(()=>{G.android&&G.chrome&&n.contains(c.focusNode)&&fE(c.focusNode,n)&&(n.blur(),n.focus({preventScroll:!0}));let d=Zi(this.view.root);if(d)if(l.empty){if(G.gecko){let h=cE(u.node,u.offset);if(h&&h!=3){let g=(h==1?up:mp)(u.node,u.offset);g&&(u=new Gt(g.node,g.offset))}}d.collapse(u.node,u.offset),l.bidiLevel!=null&&d.caretBidiLevel!==void 0&&(d.caretBidiLevel=l.bidiLevel)}else if(d.extend){d.collapse(u.node,u.offset);try{d.extend(m.node,m.offset)}catch{}}else{let h=document.createRange();l.anchor>l.head&&([u,m]=[m,u]),h.setEnd(m.node,m.offset),h.setStart(u.node,u.offset),d.removeAllRanges(),d.addRange(h)}r&&this.view.root.activeElement==n&&(n.blur(),a&&a.focus())}),this.view.observer.setSelectionRange(u,m)),this.impreciseAnchor=u.precise?null:new Gt(c.anchorNode,c.anchorOffset),this.impreciseHead=m.precise?null:new Gt(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&bi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,n=Zi(e.root),{anchorNode:a,anchorOffset:s}=e.observer.selectionRange;if(!n||!t.empty||!t.assoc||!n.modify)return;let r=this.lineAt(t.head,t.assoc);if(!r)return;let o=r.posAtStart;if(t.head==o||t.head==o+r.length)return;let l=this.coordsAt(t.head,-1),u=this.coordsAt(t.head,1);if(!l||!u||l.bottom>u.top)return;let m=this.domAtPos(t.head+t.assoc,t.assoc);n.collapse(m.node,m.offset),n.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&n.collapse(a,s)}posFromDOM(e,t){let n=this.tile.nearest(e);if(!n)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let a=n.posAtStart;if(n.isComposite()){let s;if(e==n.dom)s=n.dom.childNodes[t];else{let r=vn(e)==0?0:t==0?-1:1;for(;;){let o=e.parentNode;if(o==n.dom)break;r==0&&o.firstChild!=o.lastChild&&(e==o.firstChild?r=-1:r=1),e=o}r<0?s=e:s=e.nextSibling}if(s==n.dom.firstChild)return a;for(;s&&!Ae.get(s);)s=s.nextSibling;if(!s)return a+n.length;for(let r=0,o=a;;r++){let l=n.children[r];if(l.dom==s)return o;o+=l.length+l.breakAfter}}else return n.isText()?e==n.dom?a+t:a+(t?n.length:0):a}domAtPos(e,t){let{tile:n,offset:a}=this.tile.resolveBlock(e,t);return n.isWidget()?n.domPosFor(a,t):n.domIn(a,t)}inlineDOMNearPos(e,t){let n,a=-1,s=!1,r,o=-1,l=!1;return this.tile.blockTiles((u,m)=>{if(u.isWidget()){if(u.flags&32&&m>=e)return!0;u.flags&16&&(s=!0)}else{let c=m+u.length;if(m<=e&&(n=u,a=e-m,s=c=e&&!r&&(r=u,o=e-m,l=m>e),m>e&&r)return!0}}),!n&&!r?this.domAtPos(e,t):(s&&r?n=null:l&&n&&(r=null),n&&t<0||!r?n.domIn(a,t):r.domIn(o,t))}coordsAt(e,t,n){let{tile:a,offset:s}=this.tile.resolveBlock(e,t);return a.isWidget()?a.widget instanceof Nr?null:a.coordsInWidget(s,t,!0):a.coordsIn(s,t,n)}lineAt(e,t){let{tile:n}=this.tile.resolveBlock(e,t);return n.isLine()?n:null}coordsForChar(e){let{tile:t,offset:n}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function a(s,r){if(s.isComposite())for(let o of s.children){if(o.length>=r){let l=a(o,r);if(l)return l}if(r-=o.length,r<0)break}else if(s.isText()&&rMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,o=-1,l=this.view.textDirection==ye.LTR,u=0,m=(c,d,h)=>{for(let g=0;ga);g++){let f=c.children[g],x=d+f.length,b=f.dom.getBoundingClientRect(),{height:v}=b;if(h&&!g&&(u+=b.top-h.top),f instanceof fn)x>n&&m(f,d,b);else if(d>=n&&(u>0&&t.push(-u),t.push(v+u),u=0,r)){let w=f.dom.lastChild,z=w?Ya(w):[];if(z.length){let I=z[z.length-1],k=l?I.right-b.left:b.right-I.left;k>o&&(o=k,this.minWidth=s,this.minWidthFrom=d,this.minWidthTo=x)}}h&&g==c.children.length-1&&(u+=h.bottom-b.bottom),d=x+f.breakAfter}};return m(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?ye.RTL:ye.LTR}measureTextSize(){let e=this.tile.blockTiles(r=>{if(r.isLine()&&r.children.length&&r.length<=20){let o=0,l;for(let u of r.children){if(!u.isText()||/[^ -~]/.test(u.text))return;let m=Ya(u.dom);if(m.length!=1)return;o+=m[0].width,l=m[0].height}if(o)return{lineHeight:r.dom.getBoundingClientRect().height,charWidth:o/r.length,textHeight:l}}});if(e)return e;let t=document.createElement("div"),n,a,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let r=Ya(t.firstChild)[0];n=t.getBoundingClientRect().height,a=r&&r.width?r.width/27:7,s=r&&r.height?r.height:n,t.remove()}),{lineHeight:n,charWidth:a,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let n=0,a=0;;a++){let s=a==t.viewports.length?null:t.viewports[a],r=s?s.from-1:this.view.state.doc.length;if(r>n){let o=(t.lineBlockAt(r).bottom-t.lineBlockAt(n).top)/this.view.scaleY;e.push(he.replace({widget:new Nr(o),block:!0,inclusive:!0,isBlockGap:!0}).range(n,r))}if(!s)break;n=s.to+1}return he.set(e)}updateDeco(){let e=1,t=this.view.state.facet(sr).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),n=!1,a=this.view.state.facet(C0).map((s,r)=>{let o=typeof s=="function";return o&&(n=!0),o?s(this.view):s});for(a.length&&(this.dynamicDecorationMap[e++]=n,t.push(ie.join(a))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){if(e.isSnapshot){let u=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=u.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let u of this.view.state.facet(Ip))try{if(u(this.view,e.range,e))return!0}catch(m){zt(this.view.state,m,"scroll handler")}let{range:t}=e,n=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),a;if(!n)return;!t.empty&&(a=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(n={left:Math.min(n.left,a.left),top:Math.min(n.top,a.top),right:Math.max(n.right,a.right),bottom:Math.max(n.bottom,a.bottom)});let s=A0(this.view),r={left:n.left-s.left,top:n.top-s.top,right:n.right+s.right,bottom:n.bottom+s.bottom},{offsetWidth:o,offsetHeight:l}=this.view.scrollDOM;if(BW(this.view.scrollDOM,r,t.head1&&(n.top>window.visualViewport.offsetTop+window.visualViewport.height||n.bottomn.isWidget()||n.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){pl(this.tile)}}function pl(i,e){let t=e==null?void 0:e.get(i);if(t!=1){t==null&&i.destroy();for(let n of i.children)pl(n,e)}}function uE(i){return He(i.node)&&i.node.firstChild&&(i.offset==0||i.node.childNodes[i.offset-1].contentEditable=="false")&&(i.offset==i.node.childNodes.length||i.node.childNodes[i.offset].contentEditable=="false")}function Pp(i,e){let t=i.observer.selectionRange;if(!t.focusNode)return null;let n=up(t.focusNode,t.focusOffset),a=mp(t.focusNode,t.focusOffset),s=n||a;if(a&&n&&a.node!=n.node){let o=Ae.get(a.node);if(!o||o.isText()&&o.text!=a.node.nodeValue)s=a;else if(i.docView.lastCompositionAfterCursor){let l=Ae.get(n.node);!l||l.isText()&&l.text!=n.node.nodeValue||(s=a)}}if(i.docView.lastCompositionAfterCursor=s!=n,!s)return null;let r=e-s.offset;return{from:r,to:r+s.node.nodeValue.length,node:s.node}}function mE(i,e,t){let n=Pp(i,t);if(!n)return null;let{node:a,from:s,to:r}=n,o=a.nodeValue;if(/[\n\r]/.test(o)||i.state.doc.sliceString(n.from,n.to)!=o)return null;let l=e.invertedDesc;return{range:new Dt(l.mapPos(s),l.mapPos(r),s,r),text:a}}function cE(i,e){return He(i)?(e&&i.childNodes[e-1].contentEditable=="false"?1:0)|(e{ne.from&&(t=!0)}),t}class Nr extends J1{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function bE(i,e,t=1){let n=i.charCategorizer(e),a=i.doc.lineAt(e),s=e-a.from;if(a.length==0)return Z.cursor(e);s==0?t=1:s==a.length&&(t=-1);let r=s,o=s;t<0?r=rt(a.text,s,!1):o=rt(a.text,s);let l=n(a.text.slice(r,o));for(;r>0;){let u=rt(a.text,r,!1);if(n(a.text.slice(u,r))!=l)break;r=u}for(;oi.defaultLineHeight*1.5){let o=i.viewState.heightOracle.textHeight,l=Math.floor((a-t.top-(i.defaultLineHeight-o)*.5)/o);s+=l*i.viewState.heightOracle.lineLength}let r=i.state.sliceDoc(t.from,t.to);return t.from+jW(r,s,i.state.tabSize)}function fl(i,e,t){let n=i.lineBlockAt(e);if(Array.isArray(n.type)){let a;for(let s of n.type){if(s.from>e)break;if(!(s.toe)return s;(!a||s.type==$e.Text&&(a.type!=s.type||(t<0?s.frome)))&&(a=s)}}return a||n}return n}function yE(i,e,t,n){let a=fl(i,e.head,e.assoc||-1),s=!n||a.type!=$e.Text||!(i.lineWrapping||a.widgetLineBreaks)?null:i.coordsAtPos(e.assoc<0&&e.head>a.from?e.head-1:e.head);if(s){let r=i.dom.getBoundingClientRect(),o=i.textDirectionAt(a.from),l=i.posAndSideAtCoords({x:t==(o==ye.LTR)?r.right-1:r.left+1,y:(s.top+s.bottom)/2});if(l)return Z.cursor(l.pos,l.assoc)}return Z.cursor(t?a.to:a.from,t?1:-1)}function Ym(i,e,t,n){let a=i.state.doc.lineAt(e.head),s=i.bidiSpans(a),r=i.textDirectionAt(a.from);for(let o=e,l=null;;){let u=QW(a,s,r,o,t),m=pp;if(!u){if(a.number==(t?i.state.doc.lines:1))return o;m=` -`,a=i.state.doc.line(a.number+(t?1:-1)),s=i.bidiSpans(a),u=t?Z.cursor(a.from,-1):Z.cursor(a.to,1)}if(l){if(!l(m))return o}else{if(!n)return u;l=n(m)}o=u}}function wE(i,e,t){let n=i.state.charCategorizer(e),a=n(t);return s=>{let r=n(s);return a==Zt.Space&&(a=r),a==r}}function zE(i,e,t,n){let a=e.head,s=t?1:-1;if(a==(t?i.state.doc.length:0))return Z.cursor(a,e.assoc);let r=e.goalColumn,o,l=i.contentDOM.getBoundingClientRect(),u=i.coordsAtPos(a,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),m=i.documentTop;if(u)r==null&&(r=u.left-l.left),o=s<0?u.top:u.bottom;else{let g=i.viewState.lineBlockAt(a);r==null&&(r=Math.min(l.right-l.left,i.defaultCharacterWidth*(a-g.from))),o=(s<0?g.top:g.bottom)+m}let c=l.left+r,d=i.viewState.heightOracle.textHeight>>1,h=n??d;for(let g=0;;g+=d){let f=o+(h+g)*s,x=xl(i,{x:c,y:f},!1,s);if(t?f>l.bottom:fo:v{if(e>s&&ea(i)),t.from,e.head>t.from?-1:1);return n==t.from?t:Z.cursor(n,ni.viewState.docHeight)return new sn(i.state.doc.length,-1);if(u=i.elementAtHeight(l),n==null)break;if(u.type==$e.Text){if(n<0?u.toi.viewport.to)break;let d=i.docView.coordsAt(n<0?u.from:u.to,n>0?-1:1);if(d&&(n<0?d.top<=l+s:d.bottom>=l+s))break}let c=i.viewState.heightOracle.textHeight/2;l=n>0?u.bottom+c:u.top-c}if(i.viewport.from>=u.to||i.viewport.to<=u.from){if(t)return null;if(u.type==$e.Text){let c=vE(i,a,u,r,o);return new sn(c,c==u.from?1:-1)}}if(u.type!=$e.Text)return l<(u.top+u.bottom)/2?new sn(u.from,1):new sn(u.to,-1);let m=i.docView.lineAt(u.from,2);return(!m||m.length!=u.length)&&(m=i.docView.lineAt(u.from,-2)),new IE(i,r,o,i.textDirectionAt(u.from)).scanTile(m,u.from)}class IE{constructor(e,t,n,a){this.view=e,this.x=t,this.y=n,this.baseDir=a,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||n.length&&(n[0].level!=this.baseDir||n[0].to+a.from>1;t:if(r.has(f)){for(let v=1;v=s&&(w-=g),!r.has(w)){f=w;break t}}break e}r.add(f);let x=t(f),b=0;if(x)for(let v=0;v1))if(w.bottomthis.y)(!u||u.top>w.top)&&(u=w),b=-1;else{let z=w.left>this.x?this.x-w.left:w.right(g+g+f)/3)return this.y=l.bottom-1,this.scan(e,t,!0);if(u&&u.top<(g+f+f)/3)return this.y=u.top+1,this.scan(e,t,!0)}let h=(o?this.dirAt(e[m],1):this.baseDir)==ye.LTR;return{i:m,after:this.x>(d.left+d.right)/2==h}}scanText(e,t){let n=[];for(let s=0;s{let r=n[s]-t,o=n[s+1]-t;return Di(e.dom,r,o).getClientRects()});return a.after?new sn(n[a.i+1],-1):new sn(n[a.i],1)}scanTile(e,t){if(!e.length)return new sn(t,1);if(e.children.length==1){let o=e.children[0];if(o.isText())return this.scanText(o,t);if(o.isComposite())return this.scanTile(o,t)}let n=[t];for(let o=0,l=t;o{let l=e.children[o];return l.flags&48?null:(He(l.dom)?l.dom:Di(l.dom,0,l.length)).getClientRects()}),s=e.children[a.i],r=n[a.i];return s.isText()?this.scanText(s,r):s.isComposite()?this.scanTile(s,r):a.after?new sn(n[a.i+1],-1):new sn(r,1)}}const b1="￿";class kE{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(re.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=b1}readRange(e,t){if(!e)return this;let n=e.parentNode;for(let a=e;;){this.findPointBefore(n,a);let s=this.text.length;this.readNode(a);let r=Ae.get(a),o=a.nextSibling;if(o==t){r!=null&&r.breakAfter&&!o&&n!=this.view.contentDOM&&this.lineBreak();break}let l=Ae.get(o);(r&&l?r.breakAfter:(r?r.breakAfter:Ss(a))||Ss(o)&&(a.nodeName!="BR"||r!=null&&r.isWidget())&&this.text.length>s)&&!TE(o,t)&&this.lineBreak(),a=o}return this.findPointBefore(n,t),this}readTextNode(e){let t=e.nodeValue;for(let n of this.points)n.node==e&&(n.pos=this.text.length+Math.min(n.offset,t.length));for(let n=0,a=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,r=1,o;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,n),r=this.lineSeparator.length):(o=a.exec(t))&&(s=o.index,r=o[0].length),this.append(t.slice(n,s<0?t.length:s)),s<0)break;if(this.lineBreak(),r>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=r-1);n=s+r}}readNode(e){let t=Ae.get(e),n=t&&t.overrideDOMText;if(n!=null){this.findPointInside(e,n.length);for(let a=n.iter();!a.next().done;)a.lineBreak?this.lineBreak():this.append(a.value)}else M1(e)?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():He(e)&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let n of this.points)n.node==e&&e.childNodes[n.offset]==t&&(n.pos=this.text.length)}findPointInside(e,t){for(let n of this.points)(M1(e)?n.node==e:e.contains(n.node))&&(n.pos=this.text.length+(SE(e,n.node,n.offset)?t:0))}}function SE(i,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:r}=e.docView,o=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Mp(e.docView.tile,t,n,0))){let l=s||r?[]:CE(e),u=new kE(l,e);u.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=u.text,this.newSel=AE(l,this.bounds.from)}else{let l=e.observer.selectionRange,u=s&&s.node==l.focusNode&&s.offset==l.focusOffset||!ml(e.contentDOM,l.focusNode)?o.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),m=r&&r.node==l.anchorNode&&r.offset==l.anchorOffset||!ml(e.contentDOM,l.anchorNode)?o.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((G.ios||G.chrome)&&u!=m&&Math.min(u,m)<=o.main.from&&Math.max(u,m)>=o.main.to&&(c.from>0||c.to-1&&o.ranges.length>1)this.newSel=o.replaceRange(Z.range(m,u));else if(e.lineWrapping&&m==u&&!(o.main.empty&&o.main.head==u)&&e.inputState.lastTouchTime>Date.now()-100){let d=e.coordsAtPos(u,-1),h=0;d&&(h=e.inputState.lastTouchY<=d.bottom?-1:1),this.newSel=Z.create([Z.cursor(u,h)])}else this.newSel=Z.single(m,u)}}}function Mp(i,e,t,n){if(i.isComposite()){let a=-1,s=-1,r=-1,o=-1;for(let l=0,u=n,m=n;lt)return Mp(c,e,t,u);if(d>=e&&a==-1&&(a=l,s=u),u>t&&c.dom.parentNode==i.dom){r=l,o=m;break}m=d,u=d+c.breakAfter}return{from:s,to:o<0?n+i.length:o,startDOM:(a?i.children[a-1].dom.nextSibling:null)||i.dom.firstChild,endDOM:r=0?i.children[r].dom:null}}else return i.isText()?{from:n,to:n+i.length,startDOM:i.dom,endDOM:i.dom.nextSibling}:null}function Zp(i,e){let t,{newSel:n}=e,{state:a}=i,s=a.selection.main,r=i.inputState.lastKeyTime>Date.now()-100?i.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,u=s.from,m=null;(r===8||G.android&&e.text.length=o&&s.to<=l&&(e.typeOver||c!=e.text)&&c.slice(0,s.from-o)==e.text.slice(0,s.from-o)&&c.slice(s.to-o)==e.text.slice(d=e.text.length-(c.length-(s.to-o)))?t={from:s.from,to:s.to,insert:oe.of(e.text.slice(s.from-o,d).split(b1))}:(h=Dp(c,e.text,u-o,m))&&(G.chrome&&r==13&&h.toB==h.from+2&&e.text.slice(h.from,h.toB)==b1+b1&&h.toB--,t={from:o+h.from,to:o+h.toA,insert:oe.of(e.text.slice(h.from,h.toB).split(b1))})}else n&&(!i.hasFocus&&a.facet(gn)||bl(n,s))&&(n=null);if(!t&&!n)return!1;if((G.mac||G.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&i.contentDOM.getAttribute("autocorrect")=="off"?(n&&t.insert.length==2&&(n=Z.single(n.main.anchor-1,n.main.head-1)),t={from:t.from,to:t.to,insert:oe.of([t.insert.toString().replace("."," ")])}):a.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:a.toText(i.inputState.insertingText)}:G.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` - `&&i.lineWrapping&&(n&&(n=Z.single(n.main.anchor-1,n.main.head-1)),t={from:s.from,to:s.to,insert:oe.of([" "])}),t)return P0(i,t,n,r);if(n&&!bl(n,s)){let o=!1,l="select";return i.inputState.lastSelectionTime>Date.now()-50&&(i.inputState.lastSelectionOrigin=="select"&&(o=!0),l=i.inputState.lastSelectionOrigin,l=="select.pointer"&&(n=Op(a.facet(Yi).map(u=>u(i)),n))),i.dispatch({selection:n,scrollIntoView:o,userEvent:l}),!0}else return!1}function P0(i,e,t,n=-1){if(G.ios&&i.inputState.flushIOSKey(e))return!0;let a=i.state.selection.main;if(G.android&&(e.to==a.to&&(e.from==a.from||e.from==a.from-1&&i.state.sliceDoc(e.from,a.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&_1(i.contentDOM,"Enter",13)||(e.from==a.from-1&&e.to==a.to&&e.insert.length==0||n==8&&e.insert.lengtha.head)&&_1(i.contentDOM,"Backspace",8)||e.from==a.from&&e.to==a.to+1&&e.insert.length==0&&_1(i.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();i.inputState.composing>=0&&i.inputState.composing++;let r,o=()=>r||(r=_E(i,e,t));return i.state.facet(yp).some(l=>l(i,e.from,e.to,s,o))||i.dispatch(o()),!0}function _E(i,e,t){let n,a=i.state,s=a.selection.main,r=-1;if(e.from==e.to&&e.froms.to){let l=e.fromc(i)),u,l);e.from==m&&(r=m)}if(r>-1)n={changes:e,selection:Z.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&i.inputState.composing<0){let l=s.frome.to?a.sliceDoc(e.to,s.to):"";n=a.replaceSelection(i.state.toText(l+e.insert.sliceString(0,void 0,i.state.lineBreak)+u))}else{let l=a.changes(e),u=t&&t.main.to<=l.newLength?t.main:void 0;if(a.selection.ranges.length>1&&(i.inputState.composing>=0||i.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let m=i.state.sliceDoc(e.from,e.to),c,d=t&&Pp(i,t.main.head);if(d){let g=e.insert.length-(e.to-e.from);c={from:d.from,to:d.to-g}}else c=i.state.doc.lineAt(s.head);let h=s.to-e.to;n=a.changeByRange(g=>{if(g.from==s.from&&g.to==s.to)return{changes:l,range:u||g.map(l)};let f=g.to-h,x=f-m.length;if(i.state.sliceDoc(x,f)!=m||f>=c.from&&x<=c.to)return{range:g};let b=a.changes({from:x,to:f,insert:e.insert}),v=g.to-s.to;return{changes:b,range:u?Z.range(Math.max(0,u.anchor+v),Math.max(0,u.head+v)):g.map(b)}})}else n={changes:l,selection:u&&a.selection.replaceRange(u)}}let o="input.type";return(i.composing||i.inputState.compositionPendingChange&&i.inputState.compositionEndedAt>Date.now()-50)&&(i.inputState.compositionPendingChange=!1,o+=".compose",i.inputState.compositionFirstChange&&(o+=".start",i.inputState.compositionFirstChange=!1)),a.update(n,{userEvent:o,scrollIntoView:!0})}function Dp(i,e,t,n){let a=Math.min(i.length,e.length),s=0;for(;s0&&o>0&&i.charCodeAt(r-1)==e.charCodeAt(o-1);)r--,o--;if(n=="end"){let l=Math.max(0,s-Math.min(r,o));t-=r+l-s}if(r=r?s-t:0;s-=l,o=s+(o-r),r=s}else if(o=o?s-t:0;s-=l,r=s+(r-o),o=s}return{from:s,toA:r,toB:o}}function CE(i){let e=[];if(i.root.activeElement!=i.contentDOM)return e;let{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}=i.observer.selectionRange;return t&&(e.push(new $m(t,n)),(a!=t||s!=n)&&e.push(new $m(a,s))),e}function AE(i,e){if(i.length==0)return null;let t=i[0].pos,n=i.length==2?i[1].pos:t;return t<0||n<0?null:t==n?Z.create([Z.cursor(n+e,-1)]):Z.single(t+e,n+e)}function bl(i,e){return e.head==i.main.head&&e.anchor==i.main.anchor}class PE{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,G.safari&&e.contentDOM.addEventListener("input",()=>null),G.gecko&&QE(e.contentDOM.ownerDocument)}handleEvent(e){!NE(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let n=this.handlers[e];if(n){for(let a of n.observers)a(this.view,t);for(let a of n.handlers){if(t.defaultPrevented)break;if(a(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=ME(e),n=this.handlers,a=this.view.contentDOM;for(let s in t)if(s!="scroll"){let r=!t[s].handlers.length,o=n[s];o&&r!=!o.handlers.length&&(a.removeEventListener(s,this.handleEvent),o=null),o||a.addEventListener(s,this.handleEvent,{passive:r})}for(let s in n)s!="scroll"&&!t[s]&&a.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Lp.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),G.android&&G.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if(G.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(Bp.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||ZE.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};t.shiftKey&&G.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&OE(this.view.win)&&(t.shiftKey=!1);let n=this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t};return setTimeout(()=>{this.pendingIOSKey==n&&this.flushIOSKey()},50),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||this.view.observer.pendingRecords().length||t.key=="Enter"&&e&&e.from0?!0:G.safari&&!G.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function OE(i){return i.visualViewport?i.visualViewport.height*i.visualViewport.scale/i.document.documentElement.clientHeight<.85:!1}function Xm(i,e){return(t,n)=>{try{return e.call(i,n,t)}catch(a){zt(t.state,a)}}}function ME(i){let e=Object.create(null);function t(n){return e[n]||(e[n]={observers:[],handlers:[]})}for(let n of i){let a=n.spec,s=a&&a.plugin.domEventHandlers,r=a&&a.plugin.domEventObservers;if(s)for(let o in s){let l=s[o];l&&t(o).handlers.push(Xm(n.value,l))}if(r)for(let o in r){let l=r[o];l&&t(o).observers.push(Xm(n.value,l))}}for(let n in Vt)t(n).handlers.push(Vt[n]);for(let n in ct)t(n).observers.push(ct[n]);return e}const Bp=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],ZE="dthko",Lp=[16,17,18,20,91,92,224,225],Ia=6;function ka(i){return Math.max(0,i)*.7+8}function DE(i,e){return Math.max(Math.abs(i.clientX-e.clientX),Math.abs(i.clientY-e.clientY))}class BE{constructor(e,t,n,a){this.view=e,this.startEvent=t,this.style=n,this.mustSelect=a,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=ap(e.contentDOM),this.atoms=e.state.facet(Yi).map(r=>r(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(re.allowMultipleSelections)&&LE(e,t),this.dragging=EE(e,t)&&Np(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&DE(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,n=0,a=0,s=0,r=this.view.win.innerWidth,o=this.view.win.innerHeight;this.scrollParents.x&&({left:a,right:r}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:o}=this.scrollParents.y.getBoundingClientRect());let l=A0(this.view);e.clientX-l.left<=a+Ia?t=-ka(a-e.clientX):e.clientX+l.right>=r-Ia&&(t=ka(e.clientX-r)),e.clientY-l.top<=s+Ia?n=-ka(s-e.clientY):e.clientY+l.bottom>=o-Ia&&(n=ka(e.clientY-o)),this.setScrollSpeed(t,n)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,n=Op(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!n.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:n,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function LE(i,e){let t=i.state.facet(fp);return t.length?t[0](e):G.mac?e.metaKey:e.ctrlKey}function WE(i,e){let t=i.state.facet(xp);return t.length?t[0](e):G.mac?!e.altKey:!e.ctrlKey}function EE(i,e){let{main:t}=i.state.selection;if(t.empty)return!1;let n=Zi(i.root);if(!n||n.rangeCount==0)return!0;let a=n.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&r.top<=e.clientY&&r.bottom>=e.clientY)return!0}return!1}function NE(i,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,n;t!=i.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(n=Ae.get(t))&&n.isWidget()&&!n.isHidden&&n.widget.ignoreEvent(e))return!1;return!0}const Vt=Object.create(null),ct=Object.create(null),Wp=G.ie&&G.ie_version<15||G.ios&&G.webkit_version<604;function JE(i){let e=i.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{i.focus(),t.remove(),Ep(i,t.value)},50)}function lr(i,e,t){for(let n of i.facet(e))t=n(t,i);return t}function Ep(i,e){e=lr(i.state,T0,e);let{state:t}=i,n,a=1,s=t.toText(e),r=s.lines==t.selection.ranges.length;if(vl!=null&&t.selection.ranges.every(l=>l.empty)&&vl==s.toString()){let l=-1;n=t.changeByRange(u=>{let m=t.doc.lineAt(u.from);if(m.from==l)return{range:u};l=m.from;let c=t.toText((r?s.line(a++).text:e)+t.lineBreak);return{changes:{from:m.from,insert:c},range:Z.cursor(u.from+c.length,-1)}})}else r?n=t.changeByRange(l=>{let u=s.line(a++);return{changes:{from:l.from,to:l.to,insert:u.text},range:Z.cursor(l.from+u.length,-1)}}):n=t.replaceSelection(s);i.dispatch(n,{userEvent:"input.paste",scrollIntoView:!0})}ct.scroll=i=>{let e=i.inputState;e.lastScrollTop=i.scrollDOM.scrollTop,e.lastScrollLeft=i.scrollDOM.scrollLeft,G.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};ct.wheel=ct.mousewheel=i=>{i.inputState.lastWheelEvent=Date.now()};Vt.keydown=(i,e)=>(i.inputState.setSelectionOrigin("select"),e.keyCode==27&&i.inputState.tabFocusMode!=0&&(i.inputState.tabFocusMode=Date.now()+2e3),!1);ct.touchstart=(i,e)=>{let t=i.inputState,n=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),n&&(t.lastTouchX=n.clientX,t.lastTouchY=n.clientY),t.setSelectionOrigin("select.pointer")};ct.touchmove=i=>{i.inputState.setSelectionOrigin("select.pointer")};ct.touchend=(i,e)=>{i.inputState.touchActive=!1};Vt.mousedown=(i,e)=>{if(i.observer.flush(),i.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let n of i.state.facet(bp))if(t=n(i,e),t)break;if(!t&&e.button==0&&(t=RE(i,e)),t){let n=!i.hasFocus;i.inputState.startMouseSelection(new BE(i,e,t,n)),n&&i.observer.ignore(()=>{op(i.contentDOM);let s=i.root.activeElement;s&&!s.contains(i.contentDOM)&&s.blur()});let a=i.inputState.mouseSelection;if(a)return a.start(e),a.dragging===!1}else i.inputState.setSelectionOrigin("select.pointer");return!1};function Km(i,e,t,n){if(n==1)return Z.cursor(e,t);if(n==2)return bE(i.state,e,t);{let a=i.docView.lineAt(e,t),s=i.state.doc.lineAt(a?a.posAtEnd:e),r=a?a.posAtStart:s.from,o=a?a.posAtEnd:s.to;return oDate.now()-400&&Math.abs(e.clientX-i.clientX)<2&&Math.abs(e.clientY-i.clientY)<2?(tc+1)%3:1}function RE(i,e){let t=i.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),n=Np(e),a=i.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),a=a.map(s.changes))},get(s,r,o){let l=i.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),u,m=Km(i,l.pos,l.assoc,n);if(t.pos!=l.pos&&!r){let c=Km(i,t.pos,t.assoc,n),d=Math.min(c.from,m.from),h=Math.max(c.to,m.to);m=d1&&(u=GE(a,l.pos))?u:o?a.addRange(m):Z.create([m])}}}function GE(i,e){for(let t=0;t=e)return Z.create(i.ranges.slice(0,t).concat(i.ranges.slice(t+1)),i.mainIndex==t?0:i.mainIndex-(i.mainIndex>t?1:0))}return null}Vt.dragstart=(i,e)=>{let{selection:{main:t}}=i.state;if(e.target.draggable){let a=i.docView.tile.nearest(e.target);if(a&&a.isWidget()){let s=a.posAtStart,r=s+a.length;(s>=t.to||r<=t.from)&&(t=Z.undirectionalRange(s,r))}}let{inputState:n}=i;return n.mouseSelection&&(n.mouseSelection.dragging=!0),n.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",lr(i.state,j0,i.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Vt.dragend=i=>(i.inputState.draggedContent=null,!1);function ic(i,e,t,n){if(t=lr(i.state,T0,t),!t)return;let a=i.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=i.inputState,r=n&&s&&WE(i,e)?{from:s.from,to:s.to}:null,o={from:a,insert:t},l=i.state.changes(r?[r,o]:o);i.focus(),i.dispatch({changes:l,selection:{anchor:l.mapPos(a,-1),head:l.mapPos(a,1)},userEvent:r?"move.drop":"input.drop"}),i.inputState.draggedContent=null}Vt.drop=(i,e)=>{if(!e.dataTransfer)return!1;if(i.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let n=Array(t.length),a=0,s=()=>{++a==t.length&&ic(i,e,n.filter(r=>r!=null).join(i.state.lineBreak),!1)};for(let r=0;r{/[\x00-\x08\x0e-\x1f]{2}/.test(o.result)||(n[r]=o.result),s()},o.readAsText(t[r])}return!0}else{let n=e.dataTransfer.getData("Text");if(n)return ic(i,e,n,!0),!0}return!1};Vt.paste=(i,e)=>{if(i.state.readOnly)return!0;i.observer.flush();let t=Wp?null:e.clipboardData;return t?(Ep(i,t.getData("text/plain")||t.getData("text/uri-list")),!0):(JE(i),!1)};function HE(i,e){let t=i.dom.parentNode;if(!t)return;let n=t.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.value=e,n.focus(),n.selectionEnd=e.length,n.selectionStart=0,setTimeout(()=>{n.remove(),i.focus()},50)}function VE(i){let e=[],t=[],n=!1;for(let a of i.selection.ranges)a.empty||(e.push(i.sliceDoc(a.from,a.to)),t.push(a));if(!e.length){let a=-1;for(let{from:s}of i.selection.ranges){let r=i.doc.lineAt(s);r.number>a&&(e.push(r.text),t.push({from:r.from,to:Math.min(i.doc.length,r.to+1)})),a=r.number}n=!0}return{text:lr(i,j0,e.join(i.lineBreak)),ranges:t,linewise:n}}let vl=null;Vt.copy=Vt.cut=(i,e)=>{if(!xi(i.contentDOM,i.observer.selectionRange))return!1;let{text:t,ranges:n,linewise:a}=VE(i.state);if(!t&&!a)return!1;vl=a?t:null,e.type=="cut"&&!i.state.readOnly&&i.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let s=Wp?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(HE(i,t),!1)};const Jp=Nn.define();function Fp(i,e){let t=[];for(let n of i.facet(wp)){let a=n(i,e);a&&t.push(a)}return t.length?i.update({effects:t,annotations:Jp.of(!0)}):null}function Rp(i){setTimeout(()=>{let e=i.hasFocus;if(e!=i.inputState.notifiedFocused){let t=Fp(i.state,e);t?i.dispatch(t):i.update([])}},10)}ct.focus=i=>{i.inputState.lastFocusTime=Date.now(),!i.scrollDOM.scrollTop&&(i.inputState.lastScrollTop||i.inputState.lastScrollLeft)&&(i.scrollDOM.scrollTop=i.inputState.lastScrollTop,i.scrollDOM.scrollLeft=i.inputState.lastScrollLeft),Rp(i)};ct.blur=i=>{i.observer.clearSelectionRange(),Rp(i)};ct.compositionstart=ct.compositionupdate=(i,e)=>{if(!i.observer.editContext&&(i.inputState.compositionFirstChange==null&&(i.inputState.compositionFirstChange=!0),i.inputState.composing<0)){let{main:t}=i.state.selection;!t.empty&&i.lineBlockAt(t.from).from!=i.lineBlockAt(t.to).from&&!i.state.readOnly&&i.dispatch({changes:i.state.selection.ranges.filter(n=>!n.empty).map(n=>({from:n.from,to:n.to})),userEvent:"input"}),i.inputState.composing=0}};ct.compositionend=i=>{i.observer.editContext||(i.inputState.composing=-1,i.inputState.compositionEndedAt=Date.now(),i.inputState.compositionPendingKey=!0,i.inputState.compositionPendingChange=i.observer.pendingRecords().length>0,i.inputState.compositionFirstChange=null,G.chrome&&G.android?i.observer.flushSoon():i.inputState.compositionPendingChange?Promise.resolve().then(()=>i.observer.flush()):setTimeout(()=>{i.inputState.composing<0&&i.docView.hasComposition&&i.update([])},50))};ct.contextmenu=i=>{i.inputState.lastContextMenu=Date.now()};Vt.beforeinput=(i,e)=>{var t,n;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(i.inputState.insertingText=e.data,i.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&i.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),r=e.getTargetRanges();if(s&&r.length){let o=r[0],l=i.posAtDOM(o.startContainer,o.startOffset),u=i.posAtDOM(o.endContainer,o.endOffset);return P0(i,{from:l,to:u,insert:i.state.toText(s)},null),!0}}let a;if(G.chrome&&G.android&&(a=Bp.find(s=>s.inputType==e.inputType))&&(i.observer.delayAndroidKey(a.key,a.keyCode),a.key=="Backspace"||a.key=="Delete")){let s=((n=window.visualViewport)===null||n===void 0?void 0:n.height)||0;setTimeout(()=>{var r;(((r=window.visualViewport)===null||r===void 0?void 0:r.height)||0)>s+10&&i.hasFocus&&(i.contentDOM.blur(),i.focus())},100)}return G.ios&&e.inputType=="deleteContentForward"&&i.observer.flushSoon(),G.safari&&e.inputType=="insertText"&&i.inputState.composing>=0&&setTimeout(()=>ct.compositionend(i,e),20),!1};const ac=new Set;function QE(i){ac.has(i)||(ac.add(i),i.addEventListener("copy",()=>{}),i.addEventListener("cut",()=>{}))}const sc=["pre-wrap","normal","pre-line","break-spaces"];let L1=!1;function rc(){L1=!1}class qE{constructor(e){this.lineWrapping=e,this.doc=oe.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let n=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(n+=Math.max(0,Math.ceil((t-e-n*this.lineLength*.5)/this.lineLength))),this.lineHeight*n}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return sc.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let n=0;n-1,l=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=t,this.charWidth=n,this.textHeight=a,this.lineLength=s,l){this.heightSamples={};for(let u=0;u0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>$a&&(L1=!0),this.height=e)}replace(e,t,n){return mt.of(n)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,n,a){let s=this,r=n.doc;for(let o=a.length-1;o>=0;o--){let{fromA:l,toA:u,fromB:m,toB:c}=a[o],d=s.lineAt(l,we.ByPosNoHeight,n.setDoc(t),0,0),h=d.to>=u?d:s.lineAt(u,we.ByPosNoHeight,n,0,0);for(c+=h.to-u,u=h.to;o>0&&d.from<=a[o-1].toA;)l=a[o-1].fromA,m=a[o-1].fromB,o--,ls*2){let o=e[t-1];o.break?e.splice(--t,1,o.left,null,o.right):e.splice(--t,1,o.left,o.right),n+=1+o.break,a-=o.size}else if(s>a*2){let o=e[n];o.break?e.splice(n,1,o.left,null,o.right):e.splice(n,1,o.left,o.right),n+=2+o.break,s-=o.size}else break;else if(a=s&&r(this.lineAt(0,we.ByPos,n,a,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more&&this.setMeasuredHeight(a),this.outdated=!1,this}toString(){return`block(${this.length})`}}class yt extends Gp{constructor(e,t,n){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=n}mainBlock(e,t){return new Rt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,n){let a=n[0];return n.length==1&&(a instanceof yt||a instanceof qe&&a.flags&4)&&Math.abs(this.length-a.length)<10?(a instanceof qe?a=new yt(a.length,this.height,this.spaceAbove):a.height=this.height,this.outdated||(a.outdated=!1),a):mt.of(n)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more?this.setMeasuredHeight(a):(n||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class qe extends mt{constructor(e){super(e,0)}heightMetrics(e,t){let n=e.doc.lineAt(t).number,a=e.doc.lineAt(t+this.length).number,s=a-n+1,r,o=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*s);r=l/s,this.length>s+1&&(o=(this.height-l)/(this.length-s-1))}else r=this.height/s;return{firstLine:n,lastLine:a,perLine:r,perChar:o}}blockAt(e,t,n,a){let{firstLine:s,lastLine:r,perLine:o,perChar:l}=this.heightMetrics(t,a);if(t.lineWrapping){let u=a+(e0){let s=n[n.length-1];s instanceof qe?n[n.length-1]=new qe(s.length+a):n.push(null,new qe(a-1))}if(e>0){let s=n[0];s instanceof qe?n[0]=new qe(e+s.length):n.unshift(new qe(e-1),null)}return mt.of(n)}decomposeLeft(e,t){t.push(new qe(e-1),null)}decomposeRight(e,t){t.push(null,new qe(this.length-e-1))}updateHeight(e,t=0,n=!1,a){let s=t+this.length;if(a&&a.from<=t+this.length&&a.more){let r=[],o=Math.max(t,a.from),l=-1;for(a.from>t&&r.push(new qe(a.from-t-1).updateHeight(e,t));o<=s&&a.more;){let m=e.doc.lineAt(o).length;r.length&&r.push(null);let c=a.heights[a.index++],d=0;c<0&&(d=-c,c=a.heights[a.index++]),l==-1?l=c:Math.abs(c-l)>=$a&&(l=-2);let h=new yt(m,c,d);h.outdated=!1,r.push(h),o+=m+1}o<=s&&r.push(null,new qe(s-o).updateHeight(e,o));let u=mt.of(r);return(l<0||Math.abs(u.height-this.height)>=$a||Math.abs(l-this.heightMetrics(e,t).perLine)>=$a)&&(L1=!0),As(this,u)}else(n||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class $E extends mt{constructor(e,t,n){super(e.length+(t?1:0)+n.length,e.height+n.height,(t?1:0)|(e.outdated||n.outdated?2:0)),this.left=e,this.right=n,this.size=e.size+n.size}get break(){return this.flags&1}blockAt(e,t,n,a){let s=n+this.left.height;return eo))return u;let m=t==we.ByPosNoHeight?we.ByPosNoHeight:we.ByPos;return l?u.join(this.right.lineAt(o,m,n,r,o)):this.left.lineAt(o,m,n,a,s).join(u)}forEachLine(e,t,n,a,s,r){let o=a+this.left.height,l=s+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,n,o,l,r);else{let u=this.lineAt(l,we.ByPos,n,a,s);e=e&&u.from<=t&&r(u),t>u.to&&this.right.forEachLine(Math.max(e,u.to+1),t,n,o,l,r)}}replace(e,t,n){let a=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-a,t-a,n));let s=[];e>0&&this.decomposeLeft(e,s);let r=s.length;for(let o of n)s.push(o);if(e>0&&oc(s,r-1),t=n&&t.push(null)),e>n&&this.right.decomposeLeft(e-n,t)}decomposeRight(e,t){let n=this.left.length,a=n+this.break;if(e>=a)return this.right.decomposeRight(e-a,t);e2*t.size||t.size>2*e.size?mt.of(this.break?[e,null,t]:[e,t]):(this.left=As(this.left,e),this.right=As(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,n=!1,a){let{left:s,right:r}=this,o=t+s.length+this.break,l=null;return a&&a.from<=t+s.length&&a.more?l=s=s.updateHeight(e,t,n,a):s.updateHeight(e,t,n),a&&a.from<=o+r.length&&a.more?l=r=r.updateHeight(e,o,n,a):r.updateHeight(e,o,n),l?this.balanced(s,r):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function oc(i,e){let t,n;i[e]==null&&(t=i[e-1])instanceof qe&&(n=i[e+1])instanceof qe&&i.splice(e-1,3,new qe(t.length+1+n.length))}const XE=5;class O0{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let n=Math.min(t,this.lineEnd),a=this.nodes[this.nodes.length-1];a instanceof yt?a.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new yt(n-this.pos,-1,0)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,n){if(e=XE)&&this.addLineDeco(a,s,r)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new yt(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let n=new qe(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof yt)return e;let t=new yt(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,n){let a=this.ensureLine();a.length+=n,a.collapsed+=n,a.widgetHeight=Math.max(a.widgetHeight,e),a.breaks+=t,this.writtenTo=this.pos=this.pos+n}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof yt)&&!this.isCovered?this.nodes.push(new yt(0,-1,0)):(this.writtenTou.clientHeight||u.scrollWidth>u.clientWidth)&&m.overflow!="visible"){let c=u.getBoundingClientRect();s=Math.max(s,c.left),r=Math.min(r,c.right),o=Math.max(o,c.top),l=Math.min(u==i.parentNode?a.innerHeight:l,c.bottom)}u=m.position=="absolute"||m.position=="fixed"?u.offsetParent:u.parentNode}else if(u.nodeType==11)u=u.host;else break;return{left:s-t.left,right:Math.max(s,r)-t.left,top:o-(t.top+e),bottom:Math.max(o,l)-(t.top+e)}}function nN(i){let e=i.getBoundingClientRect(),t=i.ownerDocument.defaultView||window;return e.left0&&e.top0}function iN(i,e){let t=i.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Fr{constructor(e,t,n,a){this.from=e,this.to=t,this.size=n,this.displaySize=a}static same(e,t){if(e.length!=t.length)return!1;for(let n=0;ntypeof a!="function"&&a.class=="cm-lineWrapping");this.heightOracle=new qE(n),this.stateDeco=uc(t),this.heightMap=mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle.setDoc(t.doc),[new Dt(0,0,0,t.doc.length)]);for(let a=0;a<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());a++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=he.set(this.lineGaps.map(a=>a.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let n=0;n<=1;n++){let a=n?t.head:t.anchor;if(!e.some(({from:s,to:r})=>a>=s&&a<=r)){let{from:s,to:r}=this.lineBlockAt(a);e.push(new Sa(s,r))}}return this.viewports=e.sort((n,a)=>n.from-a.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?yl:Ps.get(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(oi(e,this.scaler))})}update(e,t=null){this.state=e.state;let n=this.stateDeco;this.stateDeco=uc(this.state);let a=e.changedRanges,s=Dt.extendWithRanges(a,KE(n,this.stateDeco,e?e.changes:De.empty(this.state.doc.length))),r=this.heightMap.height,o=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);rc(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=r||L1)&&(e.flags|=2),o?(this.scrollAnchorPos=e.changes.mapPos(o.from,-1),this.scrollAnchorHeight=o.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=r);let l=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let u=l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,e.flags|=this.updateForViewport(),(u||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(UW)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,n=window.getComputedStyle(t),a=this.heightOracle,s=n.whiteSpace;this.defaultTextDirection=n.direction=="rtl"?ye.RTL:ye.LTR;let r=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",o=t.getBoundingClientRect(),l=r||this.mustMeasureContent||this.contentDOMHeight!=o.height;this.contentDOMHeight=o.height,this.mustMeasureContent=!1;let u=0,m=0;if(o.width&&o.height){let{scaleX:I,scaleY:k}=ip(t,o);(I>.005&&Math.abs(this.scaleX-I)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=I,this.scaleY=k,u|=16,r=l=!0)}let c=(parseInt(n.paddingTop)||0)*this.scaleY,d=(parseInt(n.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=d)&&(this.paddingTop=c,this.paddingBottom=d,u|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(a.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,u|=16);let h=ap(this.view.contentDOM,!1).y;h!=this.scrollParent&&(this.scrollParent=h,this.scrollAnchorHeight=-1,this.scrollOffset=0);let g=this.getScrollOffset();this.scrollOffset!=g&&(this.scrollAnchorHeight=-1,this.scrollOffset=g),this.scrolledToBottom=lp(this.scrollParent||e.win);let f=(this.printing?iN:tN)(t,this.paddingTop),x=f.top-this.pixelViewport.top,b=f.bottom-this.pixelViewport.bottom;this.pixelViewport=f;let v=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(v!=this.inView&&(this.inView=v,v&&(l=!0)),!this.inView&&!this.scrollTarget&&!nN(e.dom))return 0;let w=o.width;if((this.contentDOMWidth!=w||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=o.width,this.editorHeight=e.scrollDOM.clientHeight,u|=16),l){let I=e.docView.measureVisibleLineHeights(this.viewport);if(a.mustRefreshForHeights(I)&&(r=!0),r||a.lineWrapping&&Math.abs(w-this.contentDOMWidth)>a.charWidth){let{lineHeight:k,charWidth:S,textHeight:_}=e.docView.measureTextSize();r=k>0&&a.refresh(s,k,S,_,Math.max(5,w/S),I),r&&(e.docView.minWidth=0,u|=16)}x>0&&b>0?m=Math.max(x,b):x<0&&b<0&&(m=Math.min(x,b)),rc();for(let k of this.viewports){let S=k.from==this.viewport.from?I:e.docView.measureVisibleLineHeights(k);this.heightMap=(r?mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle,[new Dt(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(a,0,r,new UE(k.from,S))}L1&&(u|=2)}let z=!this.viewportIsAppropriate(this.viewport,m)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return z&&(u&2&&(u|=this.updateScaler()),this.viewport=this.getViewport(m,this.scrollTarget),u|=this.updateForViewport()),(u&2||z)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(r?[]:this.lineGaps,e)),u|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),u}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),a=this.heightMap,s=this.heightOracle,{visibleTop:r,visibleBottom:o}=this,l=new Sa(a.lineAt(r-n*1e3,we.ByHeight,s,0,0).from,a.lineAt(o+(1-n)*1e3,we.ByHeight,s,0,0).to);if(t){let{head:u}=t.range;if(ul.to){let m=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=a.lineAt(u,we.ByPos,s,0,0),d;t.y=="center"?d=(c.top+c.bottom)/2-m/2:t.y=="start"||t.y=="nearest"&&u=o+Math.max(10,Math.min(n,250)))&&a>r-2*1e3&&s>1,r=a<<1;if(this.defaultTextDirection!=ye.LTR&&!n)return[];let o=[],l=(m,c,d,h)=>{if(c-mm&&bb.from>=d.from&&b.to<=d.to&&Math.abs(b.from-m)b.fromv));if(!x){if(cw.from<=c&&w.to>=c)){let w=t.moveToLineBoundary(Z.cursor(c),!1,!0).head;w>m&&(c=w)}let b=this.gapSize(d,m,c,h),v=n||b<2e6?b:2e6;x=new Fr(m,c,b,v)}o.push(x)},u=m=>{if(m.length2e6)for(let k of e)k.from>=m.from&&k.fromm.from&&l(m.from,h,m,c),gt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let n=[];ie.spans(t,this.viewport.from,this.viewport.to,{span(s,r){n.push({from:s,to:r})},point(){}},20);let a=0;if(n.length!=this.visibleRanges.length)a=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||oi(this.heightMap.lineAt(e,we.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||oi(this.heightMap.lineAt(this.scaler.fromDOM(e),we.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop*this.scaleY:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+12-this.paddingTop);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return oi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Sa{constructor(e,t){this.from=e,this.to=t}}function sN(i,e,t){let n=[],a=i,s=0;return ie.spans(t,i,e,{span(){},point(r,o){r>a&&(n.push({from:a,to:r}),s+=r-a),a=o}},20),a=1)return e[e.length-1].to;let n=Math.floor(i*t);for(let a=0;;a++){let{from:s,to:r}=e[a],o=r-s;if(n<=o)return s+n;n-=o}}function ja(i,e){let t=0;for(let{from:n,to:a}of i.ranges){if(e<=a){t+=e-n;break}t+=a-n}return t/i.total}function rN(i,e){for(let t of i)if(e(t))return t}const yl={toDOM(i){return i},fromDOM(i){return i},scale:1,eq(i){return i==this}};function uc(i){let e=i.facet(sr).filter(n=>typeof n!="function"),t=i.facet(C0).filter(n=>typeof n!="function");return t.length&&e.push(ie.join(t)),e}class Ps{constructor(e,t){this.scale=e,this.viewports=t}static get(e,t,n){let a=0,s=0,r=0,o=n.map(({from:u,to:m})=>{let c=t.lineAt(u,we.ByPos,e,0,0).top,d=t.lineAt(m,we.ByPos,e,0,0).bottom;return a+=d-c,{from:u,to:m,top:c,bottom:d,domTop:0,domBottom:0}});if(t.height-a<10)return yl;let l=(7e6-a)/(t.height-a);for(let u of o)u.domTop=r+(u.top-s)*l,r=u.domBottom=u.domTop+(u.bottom-u.top),s=u.bottom;return new Ps(l,o)}toDOM(e){for(let t=0,n=0,a=0;;t++){let s=tt.from==e.viewports[n].from&&t.to==e.viewports[n].to):!1}}function oi(i,e){if(e.scale==1)return i;let t=e.toDOM(i.top),n=e.toDOM(i.bottom);return new Rt(i.from,i.length,t,n-t,Array.isArray(i._content)?i._content.map(a=>oi(a,e)):i._content)}const _a=V.define({combine:i=>i.join(" ")}),wl=V.define({combine:i=>i.indexOf(!0)>-1}),zl=Bn.newName(),Hp=Bn.newName(),Vp=Bn.newName(),Qp={"&light":"."+Hp,"&dark":"."+Vp};function Il(i,e,t){return new Bn(e,{finish(n){return/&/.test(n)?n.replace(/&\w*/,a=>{if(a=="&")return i;if(!t||!t[a])throw new RangeError(`Unsupported selector: ${a}`);return t[a]}):i+" "+n}})}const oN=Il("."+zl,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"baseline",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{background:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 0) no-repeat",backgroundSize:".4em",backgroundPosition:"calc(min(50%, 0px)) center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Qp),lN={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Rr=G.ie&&G.ie_version<=11;class uN{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new LW,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let n of t)this.queue.push(n);(G.ie&&G.ie_version<=11||G.ios&&e.composing)&&t.some(n=>n.type=="childList"&&n.removedNodes.length||n.type=="characterData"&&n.oldValue.length>n.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&G.android&&e.constructor.EDIT_CONTEXT!==!1&&!(G.chrome&&G.chrome_version<126)&&(this.editContext=new cN(e),e.state.facet(gn)&&(e.contentDOM.editContext=this.editContext.editContext)),Rr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(this.pendingRecords().length>0),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,n)=>t!=e[n]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:n}=this,a=this.selectionRange;if(n.state.facet(gn)?n.root.activeElement!=this.dom:!xi(this.dom,a))return;let s=a.anchorNode&&n.docView.tile.nearest(a.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(G.ie&&G.ie_version<=11||G.android&&G.chrome)&&!n.state.selection.main.empty&&a.focusNode&&bi(a.focusNode,a.focusOffset,a.anchorNode,a.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Zi(e.root);if(!t)return!1;let n=G.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&mN(this.view,t)||t;if(!n||this.selectionRange.eq(n))return!1;let a=xi(this.dom,n);return a&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&_1(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(a)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,n=-1,a=!1;for(let s of e){let r=this.readMutation(s);r&&(r.typeOver&&(a=!0),t==-1?{from:t,to:n}=r:(t=Math.min(r.from,t),n=Math.max(r.to,n)))}return{from:t,to:n,typeOver:a}}readChange(){let{from:e,to:t,typeOver:n}=this.processRecords(),a=this.selectionChanged&&xi(this.dom,this.selectionRange);if(e<0&&!a)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new jE(this.view,e,t,n);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.selectionChanged,n=this.readChange();if(!n)return this.view.requestMeasure(),!1;let a=this.view.state,s=Zp(this.view,n);return this.view.state==a&&(n.domChanged||t)&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let n=mc(t,e.previousSibling||e.target.previousSibling,-1),a=mc(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:a?t.posBefore(a):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(gn)!=e.state.facet(gn)&&(e.view.contentDOM.editContext=e.state.facet(gn)?this.editContext.editContext:null))}destroy(){var e,t,n;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(n=this.resizeScroll)===null||n===void 0||n.disconnect();for(let a of this.scrollTargets)a.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function mc(i,e,t){for(;e;){let n=Ae.get(e);if(n&&n.parent==i)return n;let a=e.parentNode;e=a!=i.dom?a:t>0?e.nextSibling:e.previousSibling}return null}function cc(i,e){let t=e.startContainer,n=e.startOffset,a=e.endContainer,s=e.endOffset,r=i.docView.domAtPos(i.state.selection.main.anchor,1);return bi(r.node,r.offset,a,s)&&([t,n,a,s]=[a,s,t,n]),{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}}function mN(i,e){if(e.getComposedRanges){let a=e.getComposedRanges(i.root)[0];if(a)return cc(i,a)}let t=null;function n(a){a.preventDefault(),a.stopImmediatePropagation(),t=a.getTargetRanges()[0]}return i.contentDOM.addEventListener("beforeinput",n,!0),i.dom.ownerDocument.execCommand("indent"),i.contentDOM.removeEventListener("beforeinput",n,!0),t?cc(i,t):null}class cN{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=n=>{let a=e.state.selection.main,{anchor:s,head:r}=a,o=this.toEditorPos(n.updateRangeStart),l=this.toEditorPos(n.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:n.updateRangeStart,editorBase:o,drifted:!1});let u=l-o>n.text.length;o==this.from&&sthis.to&&(l=s);let m=Dp(e.state.sliceDoc(o,l),n.text,(u?a.from:a.to)-o,u?"end":null);if(!m){let d=Z.single(this.toEditorPos(n.selectionStart),this.toEditorPos(n.selectionEnd));bl(d,a)||e.dispatch({selection:d,userEvent:"select"});return}let c={from:m.from+o,to:m.toA+o,insert:oe.of(n.text.slice(m.from,m.toB).split(` -`))};if((G.mac||G.android)&&c.from==r-1&&/^\. ?$/.test(n.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:o,to:l,insert:oe.of([n.text.replace("."," ")])}),this.pendingContextChange=c,!e.state.readOnly){let d=this.to-this.from+(c.to-c.from+c.insert.length);P0(e,c,Z.single(this.toEditorPos(n.selectionStart,d),this.toEditorPos(n.selectionEnd,d)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,n.updateRangeStart-1),Math.min(t.text.length,n.updateRangeStart+1)))&&this.handlers.compositionend(n)},this.handlers.characterboundsupdate=n=>{let a=[],s=null;for(let r=this.toEditorPos(n.rangeStart),o=this.toEditorPos(n.rangeEnd);r{let a=[];for(let s of n.getTextFormats()){let r=s.underlineStyle,o=s.underlineThickness;if(!/none/i.test(r)&&!/none/i.test(o)){let l=this.toEditorPos(s.rangeStart),u=this.toEditorPos(s.rangeEnd);if(l{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:n}=this.composing;this.composing=null,n&&this.reset(e.state)}};for(let n in this.handlers)t.addEventListener(n,this.handlers[n]);this.measureReq={read:n=>{let a=Zi(n.root);a&&a.rangeCount&&this.editContext.updateSelectionBounds(a.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,n=!1,a=this.pendingContextChange;return e.changes.iterChanges((s,r,o,l,u)=>{if(n)return;let m=u.length-(r-s);if(a&&r>=a.to)if(a.from==s&&a.to==r&&a.insert.eq(u)){a=this.pendingContextChange=null,t+=m,this.to+=m;return}else a=null,this.revertPending(e.state);if(s+=t,r+=t,r<=this.from)this.from+=m,this.to+=m;else if(sthis.to||this.to-this.from+u.length>3e4){n=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(r),u.toString()),this.to+=m}t+=m}),a&&!n&&this.revertPending(e.state),!n}update(e){let t=this.pendingContextChange,n=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(n.from,n.to)&&e.transactions.some(a=>!a.isUserEvent("input.type")&&a.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,n=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),a=this.toContextPos(t.head);(this.editContext.selectionStart!=n||this.editContext.selectionEnd!=a)&&this.editContext.updateSelection(n,a)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let n=this.composing;return n&&n.drifted?n.editorBase+(e-n.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class Q{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.clearAnnouncement=-1,this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:n}=e;this.dispatchTransactions=e.dispatchTransactions||n&&(a=>a.forEach(s=>n(s,this)))||(a=>this.update(a)),this.dispatch=this.dispatch.bind(this),this._root=e.root||WW(e.parent)||document,this.viewState=new lc(this,e.state||re.create(e)),e.scrollTo&&e.scrollTo.is(za)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(w1).map(a=>new Lr(a));for(let a of this.plugins)a.update(this);this.observer=new uN(this),this.inputState=new PE(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Um(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof Ye?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,n=!1,a,s=this.state;for(let d of e){if(d.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=d.state}if(this.destroyed){this.viewState.state=s;return}let r=this.hasFocus,o=0,l=null;e.some(d=>d.annotation(Jp))?(this.inputState.notifiedFocused=r,o=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,l=Fp(s,r),l||(o=1));let u=this.observer.delayedAndroidKey,m=null;if(u?(this.observer.clearDelayedAndroidKey(),m=this.observer.readChange(),(m&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(m=null)):this.observer.clear(),s.facet(re.phrases)!=this.state.facet(re.phrases))return this.setState(s);a=js.create(this,s,e),a.flags|=o;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let d of e){if(c&&(c=c.map(d.changes)),d.scrollIntoView){let{main:h}=d.state.selection,{x:g,y:f}=this.state.facet(Q.cursorScrollMargin);c=new C1(h.empty?h:Z.cursor(h.head,h.head>h.anchor?-1:1),"nearest","nearest",f,g)}for(let h of d.effects)h.is(za)&&(c=h.value.clip(this.state))}this.viewState.update(a,c),this.bidiCache=Os.update(this.bidiCache,a.changes),a.empty||(this.updatePlugins(a),this.inputState.update(a)),t=this.docView.update(a),this.state.facet(ri)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(a.startState.facet(_a)!=a.state.facet(_a)&&(this.viewState.mustMeasureContent=!0),(t||n||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!a.empty)for(let d of this.state.facet(gl))try{d(a)}catch(h){zt(this.state,h,"update listener")}(l||m)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),m&&!Zp(this,m)&&u.force&&_1(this.contentDOM,u.key,u.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new lc(this,e),this.plugins=e.facet(w1).map(n=>new Lr(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new Um(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(w1),n=e.state.facet(w1);if(t!=n){let a=[];for(let s of n){let r=t.indexOf(s);if(r<0)a.push(new Lr(s));else{let o=this.plugins[r];o.mustUpdate=e,a.push(o)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=a,this.pluginMap.clear()}else for(let a of this.plugins)a.mustUpdate=e;for(let a=0;a-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,n=this.viewState.scrollParent,a=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:r,scaleY:o}=this.viewState;Math.abs(a-this.viewState.scrollOffset)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(r<0){if(lp(n||this.win))s=-1,r=this.viewState.heightMap.height/this.viewState.scaleY;else{let g=this.viewState.scrollAnchorAt(a);s=g.from,r=g.top}o=this.viewState.scaleY}this.updateState=1;let u=this.viewState.measure();if(!u&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let m=[];u&4||([this.measureRequests,m]=[m,this.measureRequests]);let c=m.map(g=>{try{return g.read(this)}catch(f){return zt(this.state,f),dc}}),d=js.create(this,this.state,[]),h=!1;d.flags|=u,t?t.flags|=u:t=d,this.updateState=2,d.empty||(this.updatePlugins(d),this.inputState.update(d),this.updateAttrs(),h=this.docView.update(d),h&&this.docViewUpdate());for(let g=0;g1||f<-1)&&!(G.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(n==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){a=a+f,n?s<0?n.scrollTop=n.scrollHeight:n.scrollTop+=f:this.win.scrollBy(0,f),r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(gl))l(t)}get themeClasses(){return zl+" "+(this.state.facet(wl)?Vp:Hp)+" "+this.state.facet(_a)}updateAttrs(){let e=hc(this,Sp,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(gn)?"true":"false",class:"cm-content",style:`${G.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),hc(this,_0,t);let n=this.observer.ignore(()=>{let a=Rm(this.contentDOM,this.contentAttrs,t),s=Rm(this.dom,this.editorAttrs,e);return a||s});return this.editorAttrs=e,this.contentAttrs=t,n}showAnnouncements(e){let t=!0;for(let n of e)for(let a of n.effects)if(a.is(Q.announce)){t&&(this.announceDOM.textContent="",this.win.clearTimeout(this.clearAnnouncement),this.clearAnnouncement=this.win.setTimeout(()=>{this.announceDOM.textContent=" "},200),t=!1);let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=a.value}}mountStyles(){this.styleModules=this.state.facet(ri);let e=this.state.facet(Q.cspNonce);Bn.mount(this.root,this.styleModules.concat(oN).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;tn.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,n){return Jr(this,e,Ym(this,e,t,n))}moveByGroup(e,t){return Jr(this,e,Ym(this,e,t,n=>wE(this,e.head,n)))}visualLineSide(e,t){return t?Z.cursor(e.to,1):Z.cursor(e.from,-1)}moveToLineBoundary(e,t,n=!0){return yE(this,e,t,n)}moveVertically(e,t,n){return Jr(this,e,zE(this,e,t,n))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let n=xl(this,e,t);return n&&n.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),xl(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let n=this.state.doc.lineAt(e),a=this.bidiSpans(n),s=a[rn.find(a,e-n.from,-1,t)];return n.length&&(e==n.from&&t<0||e==n.to&&t>0)&&s.dir!=this.textDirectionAt(n.from)&&(e==n.to?(e=n.from+s.from,t=1):(e=n.from+s.to,t=-1)),this.docView.coordsAt(e,t,s.dir==ye.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(zp)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>dN)return gp(e.length);let t=this.textDirectionAt(e.from),n;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||hp(s.isolates,n=Vm(this,e))))return s.order;n||(n=Vm(this,e));let a=VW(e.text,t,n);return this.bidiCache.push(new Os(e.from,e.to,t,n,!0,a)),a}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||G.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{op(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.win.clearTimeout(this.clearAnnouncement),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var n,a,s,r;return za.of(new C1(typeof e=="number"?Z.cursor(e):e,(n=t.y)!==null&&n!==void 0?n:"nearest",(a=t.x)!==null&&a!==void 0?a:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(r=t.xMargin)!==null&&r!==void 0?r:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,n=this.viewState.scrollAnchorAt(e);return za.of(new C1(Z.cursor(n.from),"start","start",n.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Wt.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Wt.define(()=>({}),{eventObservers:e})}static theme(e,t){let n=Bn.newName(),a=[_a.of(n),ri.of(Il(`.${n}`,e))];return t&&t.dark&&a.push(wl.of(!0)),a}static baseTheme(e){return u1.lowest(ri.of(Il("."+zl,e,Qp)))}static findFromDOM(e){var t;let n=e.querySelector(".cm-content"),a=n&&Ae.get(n)||Ae.get(e);return((t=a==null?void 0:a.root)===null||t===void 0?void 0:t.view)||null}}Q.styleModule=ri;Q.inputHandler=yp;Q.clipboardInputFilter=T0;Q.clipboardOutputFilter=j0;Q.scrollHandler=Ip;Q.focusChangeEffect=wp;Q.perLineTextDirection=zp;Q.exceptionSink=vp;Q.updateListener=gl;Q.editable=gn;Q.mouseSelectionStyle=bp;Q.dragMovesSelection=xp;Q.clickAddsSelectionRange=fp;Q.decorations=sr;Q.blockWrappers=Tp;Q.outerDecorations=C0;Q.atomicRanges=Yi;Q.bidiIsolatedRanges=jp;Q.cursorScrollMargin=V.define({combine:i=>{let e=5,t=5;for(let n of i)typeof n=="number"?e=t=n:{x:e,y:t}=n;return{x:e,y:t}}});Q.scrollMargins=Cp;Q.darkTheme=wl;Q.cspNonce=V.define({combine:i=>i.length?i[0]:""});Q.contentAttributes=_0;Q.editorAttributes=Sp;Q.lineWrapping=Q.contentAttributes.of({class:"cm-lineWrapping"});Q.announce=de.define();const dN=4096,dc={};class Os{constructor(e,t,n,a,s,r){this.from=e,this.to=t,this.dir=n,this.isolates=a,this.fresh=s,this.order=r}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let n=[],a=e.length?e[e.length-1].dir:ye.LTR;for(let s=Math.max(0,e.length-10);s=0;a--){let s=n[a],r=typeof s=="function"?s(i):s;r&&I0(r,t)}return t}const hN=G.mac?"mac":G.windows?"win":G.linux?"linux":"key";function gN(i,e){const t=i.split(/-(?!$)/);let n=t[t.length-1];n=="Space"&&(n=" ");let a,s,r,o;for(let l=0;ln.concat(a),[]))),t}let Cn=null;const xN=4e3;function bN(i,e=hN){let t=Object.create(null),n=Object.create(null),a=(r,o)=>{let l=n[r];if(l==null)n[r]=o;else if(l!=o)throw new Error("Key binding "+r+" is used both as a regular binding and as a multi-stroke prefix")},s=(r,o,l,u,m)=>{var c,d;let h=t[r]||(t[r]=Object.create(null)),g=o.split(/ (?!$)/).map(b=>gN(b,e));for(let b=1;b{let z=Cn={view:w,prefix:v,scope:r};return setTimeout(()=>{Cn==z&&(Cn=null)},xN),!0}]})}let f=g.join(" ");a(f,!1);let x=h[f]||(h[f]={preventDefault:!1,stopPropagation:!1,run:((d=(c=h._any)===null||c===void 0?void 0:c.run)===null||d===void 0?void 0:d.slice())||[]});l&&x.run.push(l),u&&(x.preventDefault=!0),m&&(x.stopPropagation=!0)};for(let r of i){let o=r.scope?r.scope.split(" "):["editor"];if(r.any)for(let u of o){let m=t[u]||(t[u]=Object.create(null));m._any||(m._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=r;for(let d in m)m[d].run.push(h=>c(h,kl))}let l=r[e]||r.key;if(l)for(let u of o)s(u,l,r.run,r.preventDefault,r.stopPropagation),r.shift&&s(u,"Shift-"+l,r.shift,r.preventDefault,r.stopPropagation)}return t}let kl=null;function vN(i,e,t,n){kl=e;let a=PW(e),s=At(a,0),r=hn(s)==a.length&&a!=" ",o="",l=!1,u=!1,m=!1;Cn&&Cn.view==t&&Cn.scope==n&&(o=Cn.prefix+" ",Lp.indexOf(e.keyCode)<0&&(u=!0,Cn=null));let c=new Set,d=x=>{if(x){for(let b of x.run)if(!c.has(b)&&(c.add(b),b(t)))return x.stopPropagation&&(m=!0),!0;x.preventDefault&&(x.stopPropagation&&(m=!0),u=!0)}return!1},h=i[n],g,f;return h&&(d(h[o+Ca(a,e,!r)])?l=!0:r&&(e.altKey||e.metaKey||e.ctrlKey)&&!(G.windows&&e.ctrlKey&&e.altKey)&&!(G.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(g=Ln[e.keyCode])&&g!=a?(d(h[o+Ca(g,e,!0)])||e.shiftKey&&(f=Oi[e.keyCode])!=a&&f!=g&&d(h[o+Ca(f,e,!1)]))&&(l=!0):r&&e.shiftKey&&d(h[o+Ca(a,e,!0)])&&(l=!0),!l&&d(h._any)&&(l=!0)),u&&(l=!0),l&&m&&e.stopPropagation(),kl=null,l}class ur{constructor(e,t,n,a,s){this.className=e,this.left=t,this.top=n,this.width=a,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,n){if(n.empty){let a=e.coordsAtPos(n.head,n.assoc||1);if(!a)return[];let s=qp(e);return[new ur(t,a.left-s.left,a.top-s.top,null,a.bottom-a.top)]}else return yN(e,t,n)}}function qp(i){let e=i.scrollDOM.getBoundingClientRect();return{left:(i.textDirection==ye.LTR?e.left:e.right-i.scrollDOM.clientWidth*i.scaleX)-i.scrollDOM.scrollLeft*i.scaleX,top:e.top-i.scrollDOM.scrollTop*i.scaleY}}function pc(i,e,t,n){let a=i.coordsAtPos(e,t*2);if(!a)return n;let s=i.dom.getBoundingClientRect(),r=(a.top+a.bottom)/2,o=i.posAtCoords({x:s.left+1,y:r}),l=i.posAtCoords({x:s.right-1,y:r});return o==null||l==null?n:{from:Math.max(n.from,Math.min(o,l)),to:Math.min(n.to,Math.max(o,l))}}function yN(i,e,t){if(t.to<=i.viewport.from||t.from>=i.viewport.to)return[];let n=Math.max(t.from,i.viewport.from),a=Math.min(t.to,i.viewport.to),s=i.textDirection==ye.LTR,r=i.contentDOM,o=r.getBoundingClientRect(),l=qp(i),u=r.querySelector(".cm-line"),m=u&&window.getComputedStyle(u),c=o.left+(m?parseInt(m.paddingLeft)+Math.min(0,parseInt(m.textIndent)):0),d=o.right-(m?parseInt(m.paddingRight):0),h=fl(i,n,1),g=fl(i,a,-1),f=h.type==$e.Text?h:null,x=g.type==$e.Text?g:null;if(f&&(i.lineWrapping||h.widgetLineBreaks)&&(f=pc(i,n,1,f)),x&&(i.lineWrapping||g.widgetLineBreaks)&&(x=pc(i,a,-1,x)),f&&x&&f.from==x.from&&f.to==x.to)return v(w(t.from,t.to,f));{let I=f?w(t.from,null,f):z(h,!1),k=x?w(null,t.to,x):z(g,!0),S=[];return(f||h).to<(x||g).from-(f&&x?1:0)||h.widgetLineBreaks>1&&I.bottom+i.defaultLineHeight/2C&&E.from=ee)break;F>U&&P(Math.max(fe,U),I==null&&fe<=C,Math.min(F,ee),k==null&&F>=B,Ie.dir)}if(U=ge.to+1,U>=ee)break}return O.length==0&&P(C,I==null,B,k==null,i.textDirection),{top:_,bottom:M,horizontal:O}}function z(I,k){let S=o.top+(k?I.top:I.bottom);return{top:S,bottom:S,horizontal:[]}}}function wN(i,e){return i.constructor==e.constructor&&i.eq(e)}class zN{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Xa)!=e.state.facet(Xa)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,n=e.facet(Xa);for(;t!wN(t,this.drawn[n]))){let t=this.dom.firstChild,n=0;for(let a of e)a.update&&t&&a.constructor&&this.drawn[n].constructor&&a.update(t,this.drawn[n])?(t=t.nextSibling,n++):this.dom.insertBefore(a.draw(),t);for(;t;){let a=t.nextSibling;t.remove(),t=a}this.drawn=e,G.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const Xa=V.define();function IN(i){return[Wt.define(e=>new zN(e,i)),Xa.of(i)]}const Aa="-10000px";class kN{constructor(e,t,n,a){this.facet=t,this.createTooltipView=n,this.removeTooltipView=a,this.input=e.state.facet(t),this.tooltips=this.input.filter(r=>r);let s=null;this.tooltipViews=this.tooltips.map(r=>s=n(r,s))}update(e,t){var n;let a=e.state.facet(this.facet),s=a.filter(l=>l);if(a===this.input){for(let l of this.tooltipViews)l.update&&l.update(e);return!1}let r=[],o=t?[]:null;for(let l=0;lt[u]=l),t.length=o.length),this.input=a,this.tooltips=s,this.tooltipViews=r,!0}}function Up(i){let e=i.dom.ownerDocument.documentElement,t=e.clientWidth,n=getComputedStyle(e);if(!/stable/.test(n.scrollbarGutter||""))return{left:0,right:t};let a=e.getBoundingClientRect(),s=i.win.scrollX;return{left:Math.max(0,a.left+s-parseFloat(n.marginLeft)),right:Math.min(t,a.right+s+parseFloat(n.marginRight))}}function SN(i){let{left:e,right:t}=Up(i);return{top:0,left:e,right:t,bottom:i.dom.ownerDocument.documentElement.clientHeight}}const Gr=V.define({combine:i=>{var e,t,n;return{position:G.ios?"absolute":((e=i.find(a=>a.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=i.find(a=>a.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((n=i.find(a=>a.tooltipSpace))===null||n===void 0?void 0:n.tooltipSpace)||SN}}}),fc=new WeakMap,Yp=Wt.fromClass(class{constructor(i){this.view=i,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=i.state.facet(Gr);this.position=e.position,this.parent=e.parent,this.classes=i.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new kN(i,$p,(t,n)=>this.createTooltip(t,n),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),i.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let i of this.manager.tooltipViews)this.intersectionObserver.observe(i.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(i){i.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(i,this.above);e&&this.observeIntersection();let t=e||i.geometryChanged,n=i.state.facet(Gr);if(n.position!=this.position&&!this.madeAbsolute){this.position=n.position;for(let a of this.manager.tooltipViews)a.dom.style.position=this.position;t=!0}if(n.parent!=this.parent){this.parent&&this.container.remove(),this.parent=n.parent,this.createContainer();for(let a of this.manager.tooltipViews)this.container.appendChild(a.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(i,e){let t=i.create(this.view),n=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),i.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let a=document.createElement("div");a.className="cm-tooltip-arrow",t.dom.appendChild(a)}return t.dom.style.position=this.position,t.dom.style.top=Aa,t.dom.style.left="0px",this.container.insertBefore(t.dom,n),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var i,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let n of this.manager.tooltipViews)n.dom.remove(),(i=n.destroy)===null||i===void 0||i.call(n);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let i=1,e=1,t=!1,n=0;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(G.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(i=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:i,scaleY:e}=this.view.viewState);else n=Up(this.view).left;let a=this.view.scrollDOM.getBoundingClientRect(),s=A0(this.view);return{visible:{left:a.left+s.left,top:a.top+s.top,right:a.right-s.right,bottom:a.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Gr).tooltipSpace(this.view),scaleX:i,scaleY:e,makeAbsolute:t,fixedLeft:n}}writeMeasure(i){var e;if(i.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let o of this.manager.tooltipViews)o.dom.style.position="absolute"}let{visible:t,space:n,scaleX:a,scaleY:s}=i,r=[];for(let o=0;o=Math.min(t.bottom,n.bottom)||c.rightMath.min(t.right,n.right)+.1)){m.style.top=Aa;continue}let h=l.arrow?u.dom.querySelector(".cm-tooltip-arrow"):null,g=h?7:0,f=d.right-d.left,x=(e=fc.get(u))!==null&&e!==void 0?e:d.bottom-d.top,b=u.offset||jN,v=this.view.textDirection==ye.LTR,w=d.width>n.right-n.left?v?n.left:n.right-d.width:v?Math.max(n.left,Math.min(c.left-(h?14:0)+b.x,n.right-f)):Math.min(Math.max(n.left,c.left-f+(h?14:0)-b.x),n.right-f),z=this.above[o];!l.strictSide&&(z?c.top-x-g-b.yn.bottom)&&z==n.bottom-c.bottom>c.top-n.top&&(z=this.above[o]=!z);let I=(z?c.top-n.top:n.bottom-c.bottom)-g;if(Iw&&_.topk&&(k=z?_.top-x-2-g:_.bottom+g+2);if(this.position=="absolute"?(m.style.top=(k-i.parent.top)/s+"px",xc(m,(w-i.parent.left)/a)):(m.style.top=k/s+"px",xc(m,(w-i.fixedLeft)/a)),h){let _=c.left+(v?b.x:-b.x)-(w+14-7);h.style.left=_/a+"px"}u.overlap!==!0&&r.push({left:w,top:k,right:S,bottom:k+x}),m.classList.toggle("cm-tooltip-above",z),m.classList.toggle("cm-tooltip-below",!z),u.positioned&&u.positioned(i.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let i of this.manager.tooltipViews)i.dom.style.top=Aa}},{eventObservers:{scroll(){this.maybeMeasure()}}});function xc(i,e){let t=parseInt(i.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(i.style.left=e+"px")}const TN=Q.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),jN={x:0,y:0},$p=V.define({enables:[Yp,TN]});function Xp(i,e){let t=i.plugin(Yp);if(!t)return null;let n=t.manager.tooltips.indexOf(e);return n<0?null:t.manager.tooltipViews[n]}class un extends Dn{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}un.prototype.elementClass="";un.prototype.toDOM=void 0;un.prototype.mapMode=st.TrackBefore;un.prototype.startSide=un.prototype.endSide=-1;un.prototype.point=!0;const yi=V.define(),_N=V.define(),CN={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>ie.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},wi=V.define();function AN(i){return[Kp(),wi.of({...CN,...i})]}const bc=V.define({combine:i=>i.some(e=>e)});function Kp(i){return[PN]}const PN=Wt.fromClass(class{constructor(i){this.view=i,this.domAfter=null,this.prevViewport=i.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=i.state.facet(wi).map(e=>new yc(i,e)),this.fixed=!i.state.facet(bc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),i.scrollDOM.insertBefore(this.dom,i.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(i){if(this.updateGutters(i)){let e=this.prevViewport,t=i.view.viewport,n=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(n<(t.to-t.from)*.8)}if(i.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(bc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=i.view.viewport}syncGutters(i){let e=this.dom.nextSibling;i&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=ie.iter(this.view.state.facet(yi),this.view.viewport.from),n=[],a=this.gutters.map(s=>new ON(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(n.length&&(n=[]),Array.isArray(s.type)){let r=!0;for(let o of s.type)if(o.type==$e.Text&&r){Sl(t,n,o.from);for(let l of a)l.line(this.view,o,n);r=!1}else if(o.widget)for(let l of a)l.widget(this.view,o)}else if(s.type==$e.Text){Sl(t,n,s.from);for(let r of a)r.line(this.view,s,n)}else if(s.widget)for(let r of a)r.widget(this.view,s);for(let s of a)s.finish();i&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(i){let e=i.startState.facet(wi),t=i.state.facet(wi),n=i.docChanged||i.heightChanged||i.viewportChanged||!ie.eq(i.startState.facet(yi),i.state.facet(yi),i.view.viewport.from,i.view.viewport.to);if(e==t)for(let a of this.gutters)a.update(i)&&(n=!0);else{n=!0;let a=[];for(let s of t){let r=e.indexOf(s);r<0?a.push(new yc(this.view,s)):(this.gutters[r].update(i),a.push(this.gutters[r]))}for(let s of this.gutters)s.dom.remove(),a.indexOf(s)<0&&s.destroy();for(let s of a)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=a}return n}destroy(){for(let i of this.gutters)i.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:i=>Q.scrollMargins.of(e=>{let t=e.plugin(i);if(!t||t.gutters.length==0||!t.fixed)return null;let n=t.dom.offsetWidth*e.scaleX,a=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==ye.LTR?{left:n,right:a}:{right:n,left:a}})});function vc(i){return Array.isArray(i)?i:[i]}function Sl(i,e,t){for(;i.value&&i.from<=t;)i.from==t&&e.push(i.value),i.next()}class ON{constructor(e,t,n){this.gutter=e,this.height=n,this.i=0,this.cursor=ie.iter(e.markers,t.from)}addElement(e,t,n){let{gutter:a}=this,s=(t.top-this.height)/e.scaleY,r=t.height/e.scaleY;if(this.i==a.elements.length){let o=new ef(e,r,s,n);a.elements.push(o),a.dom.appendChild(o.dom)}else a.elements[this.i].update(e,r,s,n);this.height=t.bottom,this.i++}line(e,t,n){let a=[];Sl(this.cursor,a,t.from),n.length&&(a=a.concat(n));let s=this.gutter.config.lineMarker(e,t,a);s&&a.unshift(s);let r=this.gutter;a.length==0&&!r.config.renderEmptyElements||this.addElement(e,t,a)}widget(e,t){let n=this.gutter.config.widgetMarker(e,t.widget,t),a=n?[n]:null;for(let s of e.state.facet(_N)){let r=s(e,t.widget,t);r&&(a||(a=[])).push(r)}a&&this.addElement(e,t,a)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class yc{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let n in t.domEventHandlers)this.dom.addEventListener(n,a=>{let s=a.target,r;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let l=s.getBoundingClientRect();r=(l.top+l.bottom)/2}else r=a.clientY;let o=e.lineBlockAtHeight(r-e.documentTop);t.domEventHandlers[n](e,o,a)&&a.preventDefault()});this.markers=vc(t.markers(e)),t.initialSpacer&&(this.spacer=new ef(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=vc(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let a=this.config.updateSpacer(this.spacer.markers[0],e);a!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[a])}let n=e.view.viewport;return!ie.eq(this.markers,t,n.from,n.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class ef{constructor(e,t,n,a){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,n,a)}update(e,t,n,a){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=n&&(this.dom.style.marginTop=(this.above=n)?n+"px":""),MN(this.markers,a)||this.setMarkers(e,a)}setMarkers(e,t){let n="cm-gutterElement",a=this.dom.firstChild;for(let s=0,r=0;;){let o=r,l=ss(o,l,u)||r(o,l,u):r}return n}})}});class Hr extends un{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Vr(i,e){return i.state.facet(z1).formatNumber(e,i.state)}const BN=wi.compute([z1],i=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(ZN)},lineMarker(e,t,n){return n.some(a=>a.toDOM)?null:new Hr(Vr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,n)=>{for(let a of e.state.facet(DN)){let s=a(e,t,n);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet(z1)!=e.state.facet(z1),initialSpacer(e){return new Hr(Vr(e,wc(e.state.doc.lines)))},updateSpacer(e,t){let n=Vr(t.view,wc(t.view.state.doc.lines));return n==e.number?e:new Hr(n)},domEventHandlers:i.facet(z1).domEventHandlers,side:"before"}));function LN(i={}){return[z1.of(i),Kp(),BN]}function wc(i){let e=9;for(;e{let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.head).from;a>t&&(t=a,e.push(WN.range(a)))}return ie.of(e)});function NN(){return EN}const tf=1024;let JN=0;class Qr{constructor(e,t){this.from=e,this.to=t}}class ae{constructor(e={}){this.id=JN++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ft.match(e)),t=>{let n=e(t);return n===void 0?null:[this,n]}}}ae.closedBy=new ae({deserialize:i=>i.split(" ")});ae.openedBy=new ae({deserialize:i=>i.split(" ")});ae.group=new ae({deserialize:i=>i.split(" ")});ae.isolate=new ae({deserialize:i=>{if(i&&i!="rtl"&&i!="ltr"&&i!="auto")throw new RangeError("Invalid value for isolate: "+i);return i||"auto"}});ae.contextHash=new ae({perNode:!0});ae.lookAhead=new ae({perNode:!0});ae.mounted=new ae({perNode:!0});class zi{constructor(e,t,n,a=!1){this.tree=e,this.overlay=t,this.parser=n,this.bracketed=a}static get(e){return e&&e.props&&e.props[ae.mounted.id]}}const FN=Object.create(null);class ft{constructor(e,t,n,a=0){this.name=e,this.props=t,this.id=n,this.flags=a}static define(e){let t=e.props&&e.props.length?Object.create(null):FN,n=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),a=new ft(e.name||"",t,e.id,n);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(a)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return a}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(ae.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let n in e)for(let a of n.split(" "))t[a]=e[n];return n=>{for(let a=n.prop(ae.group),s=-1;s<(a?a.length:0);s++){let r=t[s<0?n.name:a[s]];if(r)return r}}}}ft.none=new ft("",Object.create(null),0,8);class M0{constructor(e){this.types=e;for(let t=0;t0;for(let l=this.cursor(r|Ce.IncludeAnonymous);;){let u=!1;if(l.from<=s&&l.to>=a&&(!o&&l.type.isAnonymous||t(l)!==!1)){if(l.firstChild())continue;u=!0}for(;u&&n&&(o||!l.type.isAnonymous)&&n(l),!l.nextSibling();){if(!l.parent())return;u=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:B0(ft.none,this.children,this.positions,0,this.children.length,0,this.length,(t,n,a)=>new Le(this.type,t,n,a,this.propValues),e.makeTree||((t,n,a)=>new Le(ft.none,t,n,a)))}static build(e){return VN(e)}}Le.empty=new Le(ft.none,[],[],0);class Z0{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Z0(this.buffer,this.index)}}class En{constructor(e,t,n){this.buffer=e,this.length=t,this.set=n}get type(){return ft.none}toString(){let e=[];for(let t=0;t0));l=r[l+3]);return o}slice(e,t,n){let a=this.buffer,s=new Uint16Array(t-e),r=0;for(let o=e,l=0;o=e&&te;case 1:return t<=e&&n>e;case 2:return n>e;case 4:return!0}}function Li(i,e,t,n){for(var a;i.from==i.to||(t<1?i.from>=e:i.from>e)||(t>-1?i.to<=e:i.to0?o.length:-1;e!=u;e+=t){let m=o[e],c=l[e]+r.from,d;if(!(!(s&Ce.EnterBracketed&&m instanceof Le&&(d=zi.get(m))&&!d.overlay&&d.bracketed&&n>=c&&n<=c+m.length)&&!nf(a,n,c,c+m.length))){if(m instanceof En){if(s&Ce.ExcludeBuffers)continue;let h=m.findChild(0,m.buffer.length,t,n-c,a);if(h>-1)return new On(new RN(r,m,e,c),null,h)}else if(s&Ce.IncludeAnonymous||!m.type.isAnonymous||D0(m)){let h;if(!(s&Ce.IgnoreMounts)&&(h=zi.get(m))&&!h.overlay)return new Lt(h.tree,c,e,r);let g=new Lt(m,c,e,r);return s&Ce.IncludeAnonymous||!g.type.isAnonymous?g:g.nextChild(t<0?m.children.length-1:0,t,n,a,s)}}}if(s&Ce.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+t:e=t<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,n=0){let a;if(!(n&Ce.IgnoreOverlays)&&(a=zi.get(this._tree))&&a.overlay){let s=e-this.from,r=n&Ce.EnterBracketed&&a.bracketed;for(let{from:o,to:l}of a.overlay)if((t>0||r?o<=s:o=s:l>s))return new Lt(a.tree,a.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,n)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function Ic(i,e,t,n){let a=i.cursor(),s=[];if(!a.firstChild())return s;if(t!=null){for(let r=!1;!r;)if(r=a.type.is(t),!a.nextSibling())return s}for(;;){if(n!=null&&a.type.is(n))return s;if(a.type.is(e)&&s.push(a.node),!a.nextSibling())return n==null?s:[]}}function Tl(i,e,t=e.length-1){for(let n=i;t>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(e[t]&&e[t]!=n.name)return!1;t--}}return!0}class RN{constructor(e,t,n,a){this.parent=e,this.buffer=t,this.index=n,this.start=a}}class On extends af{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,n){super(),this.context=e,this._parent=t,this.index=n,this.type=e.buffer.set.types[e.buffer.buffer[n]]}child(e,t,n){let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.context.start,n);return s<0?null:new On(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,n=0){if(n&Ce.ExcludeBuffers)return null;let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new On(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new On(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new On(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:n}=this.context,a=this.index+4,s=n.buffer[this.index+3];if(s>a){let r=n.buffer[this.index+1];e.push(n.slice(a,s,r)),t.push(0)}return new Le(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function sf(i){if(!i.length)return null;let e=0,t=i[0];for(let s=1;st.from||r.to=e){let o=new Lt(r.tree,r.overlay[0].from+s.from,-1,s);(a||(a=[n])).push(Li(o,e,t,!1))}}return a?sf(a):n}class jl{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~Ce.EnterBracketed,e instanceof Lt)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let n=e._parent;n;n=n._parent)this.stack.unshift(n.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:n,buffer:a}=this.buffer;return this.type=t||a.set.types[a.buffer[e]],this.from=n+a.buffer[e+1],this.to=n+a.buffer[e+2],!0}yield(e){return e?e instanceof Lt?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,n){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,n,this.mode));let{buffer:a}=this.buffer,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.buffer.start,n);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,n=this.mode){return this.buffer?n&Ce.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,n))}parent(){if(!this.buffer)return this.yieldNode(this.mode&Ce.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&Ce.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,n=this.stack.length-1;if(e<0){let a=n<0?0:this.stack[n]+4;if(this.index!=a)return this.yieldBuf(t.findChild(a,this.index,-1,0,4))}else{let a=t.buffer[this.index+3];if(a<(n<0?t.buffer.length:t.buffer[this.stack[n]+3]))return this.yieldBuf(a)}return n<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,n,{buffer:a}=this;if(a){if(e>0){if(this.index-1)for(let s=t+e,r=e<0?-1:n._tree.children.length;s!=r;s+=e){let o=n._tree.children[s];if(this.mode&Ce.IncludeAnonymous||o instanceof En||!o.type.isAnonymous||D0(o))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let r=e;r;r=r._parent)if(r.index==a){if(a==this.index)return r;t=r,n=s+1;break e}a=this.stack[--s]}for(let a=n;a=0;s--){if(s<0)return Tl(this._tree,e,a);let r=n[t.buffer[this.stack[s]]];if(!r.isAnonymous){if(e[a]&&e[a]!=r.name)return!1;a--}}return!0}}function D0(i){return i.children.some(e=>e instanceof En||!e.type.isAnonymous||D0(e))}function VN(i){var e;let{buffer:t,nodeSet:n,maxBufferLength:a=tf,reused:s=[],minRepeatType:r=n.types.length}=i,o=Array.isArray(t)?new Z0(t,t.length):t,l=n.types,u=0,m=0;function c(I,k,S,_,M,O){let{id:P,start:C,end:B,size:E}=o,U=m,ee=u;if(E<0)if(o.next(),E==-1){let A=s[P];S.push(A),_.push(C-I);return}else if(E==-3){u=P;return}else if(E==-4){m=P;return}else throw new RangeError(`Unrecognized record size: ${E}`);let ge=l[P],Ie,fe,F=C-I;if(B-C<=a&&(fe=x(o.pos-k,M))){let A=new Uint16Array(fe.size-fe.skip),N=o.pos-fe.size,q=A.length;for(;o.pos>N;)q=b(fe.start,A,q);Ie=new En(A,B-fe.start,n),F=fe.start-I}else{let A=o.pos-E;o.next();let N=[],q=[],$=P>=r?P:-1,ue=0,X=B,me=U;for(;o.pos>A;)$>=0&&o.id==$&&o.size>=0?(o.end<=X-a&&(g(N,q,C,ue,o.end,X,$,me,ee),ue=N.length,X=o.end,me=m),o.next()):O>2500?d(C,A,N,q):c(C,A,N,q,$,O+1);if($>=0&&ue>0&&ue-1&&ue>0){let le=h(ge,ee);Ie=B0(ge,N,q,0,N.length,0,B-C,le,le)}else Ie=f(ge,N,q,B-C,U-B,ee)}S.push(Ie),_.push(F)}function d(I,k,S,_){let M=[],O=0,P=-1;for(;o.pos>k;){let{id:C,start:B,end:E,size:U}=o;if(U>4)o.next();else{if(P>-1&&B=0;E-=3)C[U++]=M[E],C[U++]=M[E+1]-B,C[U++]=M[E+2]-B,C[U++]=U;S.push(new En(C,M[2]-B,n)),_.push(B-I)}}function h(I,k){return(S,_,M)=>{let O=0,P=S.length-1,C,B;if(P>=0&&(C=S[P])instanceof Le){if(!P&&C.type==I&&C.length==M)return C;(B=C.prop(ae.lookAhead))&&(O=_[P]+C.length+B-M)}return f(I,S,_,M,O,k)}}function g(I,k,S,_,M,O,P,C,B){let E=[],U=[];for(;I.length>_;)E.push(I.pop()),U.push(k.pop()+S-M);I.push(f(n.types[P],E,U,O-M,C-O,B)),k.push(M-S)}function f(I,k,S,_,M,O,P){if(O){let C=[ae.contextHash,O];P=P?[C].concat(P):[C]}if(M>25){let C=[ae.lookAhead,M];P=P?[C].concat(P):[C]}return new Le(I,k,S,_,P)}function x(I,k){let S=o.fork(),_=0,M=0,O=0,P=S.end-a,C={size:0,start:0,skip:0};e:for(let B=S.pos-I;S.pos>B;){let E=S.size;if(S.id==k&&E>=0){C.size=_,C.start=M,C.skip=O,O+=4,_+=4,S.next();continue}let U=S.pos-E;if(E<0||U=r?4:0,ge=S.start;for(S.next();S.pos>U;){if(S.size<0)if(S.size==-3||S.size==-4)ee+=4;else break e;else S.id>=r&&(ee+=4);S.next()}M=ge,_+=E,O+=ee}return(k<0||_==I)&&(C.size=_,C.start=M,C.skip=O),C.size>4?C:void 0}function b(I,k,S){let{id:_,start:M,end:O,size:P}=o;if(o.next(),P>=0&&_4){let B=o.pos-(P-4);for(;o.pos>B;)S=b(I,k,S)}k[--S]=C,k[--S]=O-I,k[--S]=M-I,k[--S]=_}else P==-3?u=_:P==-4&&(m=_);return S}let v=[],w=[];for(;o.pos>0;)c(i.start||0,i.bufferStart||0,v,w,-1,0);let z=(e=i.length)!==null&&e!==void 0?e:v.length?w[0]+v[0].length:0;return new Le(l[i.topID],v.reverse(),w.reverse(),z)}const kc=new WeakMap;function Ka(i,e){if(!i.isAnonymous||e instanceof En||e.type!=i)return 1;let t=kc.get(e);if(t==null){t=1;for(let n of e.children){if(n.type!=i||!(n instanceof Le)){t=1;break}t+=Ka(i,n)}kc.set(e,t)}return t}function B0(i,e,t,n,a,s,r,o,l){let u=0;for(let g=n;g=m)break;k+=S}if(w==z+1){if(k>m){let S=g[z];h(S.children,S.positions,0,S.children.length,f[z]+v);continue}c.push(g[z])}else{let S=f[w-1]+g[w-1].length-I;c.push(B0(i,g,f,z,w,I,S,null,l))}d.push(I+v-s)}}return h(e,t,n,a,0),(o||l)(c,d,r)}class a1{constructor(e,t,n,a,s=!1,r=!1){this.from=e,this.to=t,this.tree=n,this.offset=a,this.open=(s?1:0)|(r?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],n=!1){let a=[new a1(0,e.length,e,0,!1,n)];for(let s of t)s.to>e.length&&a.push(s);return a}static applyChanges(e,t,n=128){if(!t.length)return e;let a=[],s=1,r=e.length?e[0]:null;for(let o=0,l=0,u=0;;o++){let m=o=n)for(;r&&r.from=d.from||c<=d.to||u){let h=Math.max(d.from,l)-u,g=Math.min(d.to,c)-u;d=h>=g?null:new a1(h,g,d.tree,d.offset+u,o>0,!!m)}if(d&&a.push(d),r.to>c)break;r=snew Qr(a.from,a.to)):[new Qr(0,0)]:[new Qr(0,e.length)],this.createParse(e,t||[],n)}parse(e,t,n){let a=this.startParse(e,t,n);for(;;){let s=a.advance();if(s)return s}}}class QN{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new ae({perNode:!0});let qN=0;class Pt{constructor(e,t,n,a){this.name=e,this.set=t,this.base=n,this.modified=a,this.id=qN++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let n=typeof e=="string"?e:"?";if(e instanceof Pt&&(t=e),t!=null&&t.base)throw new Error("Can not derive from a modified tag");let a=new Pt(n,[],null,[]);if(a.set.push(a),t)for(let s of t.set)a.set.push(s);return a}static defineModifier(e){let t=new Ms(e);return n=>n.modified.indexOf(t)>-1?n:Ms.get(n.base||n,n.modified.concat(t).sort((a,s)=>a.id-s.id))}}let UN=0;class Ms{constructor(e){this.name=e,this.instances=[],this.id=UN++}static get(e,t){if(!t.length)return e;let n=t[0].instances.find(o=>o.base==e&&YN(t,o.modified));if(n)return n;let a=[],s=new Pt(e.name,a,e,t);for(let o of t)o.instances.push(s);let r=$N(t);for(let o of e.set)if(!o.modified.length)for(let l of r)a.push(Ms.get(o,l));return s}}function YN(i,e){return i.length==e.length&&i.every((t,n)=>t==e[n])}function $N(i){let e=[[]];for(let t=0;tn.length-t.length)}function of(i){let e=Object.create(null);for(let t in i){let n=i[t];Array.isArray(n)||(n=[n]);for(let a of t.split(" "))if(a){let s=[],r=2,o=a;for(let c=0;;){if(o=="..."&&c>0&&c+3==a.length){r=1;break}let d=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(o);if(!d)throw new RangeError("Invalid path: "+a);if(s.push(d[0]=="*"?"":d[0][0]=='"'?JSON.parse(d[0]):d[0]),c+=d[0].length,c==a.length)break;let h=a[c++];if(c==a.length&&h=="!"){r=0;break}if(h!="/")throw new RangeError("Invalid path: "+a);o=a.slice(c)}let l=s.length-1,u=s[l];if(!u)throw new RangeError("Invalid path: "+a);let m=new Wi(n,r,l>0?s.slice(0,l):null);e[u]=m.sort(e[u])}}return lf.add(e)}const lf=new ae({combine(i,e){let t,n,a;for(;i||e;){if(!i||e&&i.depth<=e.depth?(a=e,e=e.next):(a=i,i=i.next),t&&t.mode==a.mode&&!a.context&&!t.context)continue;let s=new Wi(a.tags,a.mode,a.context);t?t.next=s:n=s,t=s}return n}});class Wi{constructor(e,t,n,a){this.tags=e,this.mode=t,this.context=n,this.next=a}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let r=a;for(let o of s)for(let l of o.set){let u=t[l.id];if(u){r=r?r+" "+u:u;break}}return r},scope:n}}function XN(i,e){let t=null;for(let n of i){let a=n.style(e);a&&(t=t?t+" "+a:a)}return t}function KN(i,e,t,n=0,a=i.length){let s=new eJ(n,Array.isArray(e)?e:[e],t);s.highlightRange(i.cursor(),n,a,"",s.highlighters),s.flush(a)}class eJ{constructor(e,t,n){this.at=e,this.highlighters=t,this.span=n,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,n,a,s){let{type:r,from:o,to:l}=e;if(o>=n||l<=t)return;r.isTop&&(s=this.highlighters.filter(h=>!h.scope||h.scope(r)));let u=a,m=tJ(e)||Wi.empty,c=XN(s,m.tags);if(c&&(u&&(u+=" "),u+=c,m.mode==1&&(a+=(a?" ":"")+c)),this.startSpan(Math.max(t,o),u),m.opaque)return;let d=e.tree&&e.tree.prop(ae.mounted);if(d&&d.overlay){let h=e.node.enter(d.overlay[0].from+o,1),g=this.highlighters.filter(x=>!x.scope||x.scope(d.tree.type)),f=e.firstChild();for(let x=0,b=o;;x++){let v=x=w||!e.nextSibling())););if(!v||w>n)break;b=v.to+o,b>t&&(this.highlightRange(h.cursor(),Math.max(t,v.from+o),Math.min(n,b),"",g),this.startSpan(Math.min(n,b),u))}f&&e.parent()}else if(e.firstChild()){d&&(a="");do if(!(e.to<=t)){if(e.from>=n)break;this.highlightRange(e,t,n,a,s),this.startSpan(Math.min(n,e.to),u)}while(e.nextSibling());e.parent()}}}function tJ(i){let e=i.type.prop(lf);for(;e&&e.context&&!i.matchContext(e.context);)e=e.next;return e||null}const J=Pt.define,Oa=J(),Sn=J(),Sc=J(Sn),Tc=J(Sn),Tn=J(),Ma=J(Tn),qr=J(Tn),en=J(),Gn=J(en),Xt=J(),Kt=J(),_l=J(),K1=J(_l),Za=J(),W={comment:Oa,lineComment:J(Oa),blockComment:J(Oa),docComment:J(Oa),name:Sn,variableName:J(Sn),typeName:Sc,tagName:J(Sc),propertyName:Tc,attributeName:J(Tc),className:J(Sn),labelName:J(Sn),namespace:J(Sn),macroName:J(Sn),literal:Tn,string:Ma,docString:J(Ma),character:J(Ma),attributeValue:J(Ma),number:qr,integer:J(qr),float:J(qr),bool:J(Tn),regexp:J(Tn),escape:J(Tn),color:J(Tn),url:J(Tn),keyword:Xt,self:J(Xt),null:J(Xt),atom:J(Xt),unit:J(Xt),modifier:J(Xt),operatorKeyword:J(Xt),controlKeyword:J(Xt),definitionKeyword:J(Xt),moduleKeyword:J(Xt),operator:Kt,derefOperator:J(Kt),arithmeticOperator:J(Kt),logicOperator:J(Kt),bitwiseOperator:J(Kt),compareOperator:J(Kt),updateOperator:J(Kt),definitionOperator:J(Kt),typeOperator:J(Kt),controlOperator:J(Kt),punctuation:_l,separator:J(_l),bracket:K1,angleBracket:J(K1),squareBracket:J(K1),paren:J(K1),brace:J(K1),content:en,heading:Gn,heading1:J(Gn),heading2:J(Gn),heading3:J(Gn),heading4:J(Gn),heading5:J(Gn),heading6:J(Gn),contentSeparator:J(en),list:J(en),quote:J(en),emphasis:J(en),strong:J(en),link:J(en),monospace:J(en),strikethrough:J(en),inserted:J(),deleted:J(),changed:J(),invalid:J(),meta:Za,documentMeta:J(Za),annotation:J(Za),processingInstruction:J(Za),definition:Pt.defineModifier("definition"),constant:Pt.defineModifier("constant"),function:Pt.defineModifier("function"),standard:Pt.defineModifier("standard"),local:Pt.defineModifier("local"),special:Pt.defineModifier("special")};for(let i in W){let e=W[i];e instanceof Pt&&(e.name=i)}uf([{tag:W.link,class:"tok-link"},{tag:W.heading,class:"tok-heading"},{tag:W.emphasis,class:"tok-emphasis"},{tag:W.strong,class:"tok-strong"},{tag:W.keyword,class:"tok-keyword"},{tag:W.atom,class:"tok-atom"},{tag:W.bool,class:"tok-bool"},{tag:W.url,class:"tok-url"},{tag:W.labelName,class:"tok-labelName"},{tag:W.inserted,class:"tok-inserted"},{tag:W.deleted,class:"tok-deleted"},{tag:W.literal,class:"tok-literal"},{tag:W.string,class:"tok-string"},{tag:W.number,class:"tok-number"},{tag:[W.regexp,W.escape,W.special(W.string)],class:"tok-string2"},{tag:W.variableName,class:"tok-variableName"},{tag:W.local(W.variableName),class:"tok-variableName tok-local"},{tag:W.definition(W.variableName),class:"tok-variableName tok-definition"},{tag:W.special(W.variableName),class:"tok-variableName2"},{tag:W.definition(W.propertyName),class:"tok-propertyName tok-definition"},{tag:W.typeName,class:"tok-typeName"},{tag:W.namespace,class:"tok-namespace"},{tag:W.className,class:"tok-className"},{tag:W.macroName,class:"tok-macroName"},{tag:W.propertyName,class:"tok-propertyName"},{tag:W.operator,class:"tok-operator"},{tag:W.comment,class:"tok-comment"},{tag:W.meta,class:"tok-meta"},{tag:W.invalid,class:"tok-invalid"},{tag:W.punctuation,class:"tok-punctuation"}]);var Ur;const I1=new ae;function nJ(i){return V.define({combine:i?e=>e.concat(i):void 0})}const iJ=new ae;class Ht{constructor(e,t,n=[],a=""){this.data=e,this.name=a,re.prototype.hasOwnProperty("tree")||Object.defineProperty(re.prototype,"tree",{get(){return Xe(this)}}),this.parser=t,this.extension=[E1.of(this),re.languageData.of((s,r,o)=>{let l=jc(s,r,o),u=l.type.prop(I1);if(!u)return[];let m=s.facet(u),c=l.type.prop(iJ);if(c){let d=l.resolve(r-l.from,o);for(let h of c)if(h.test(d,s)){let g=s.facet(h.facet);return h.type=="replace"?g:g.concat(m)}}return m})].concat(n)}isActiveAt(e,t,n=-1){return jc(e,t,n).type.prop(I1)==this.data}findRegions(e){let t=e.facet(E1);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],a=(s,r)=>{if(s.prop(I1)==this.data){n.push({from:r,to:r+s.length});return}let o=s.prop(ae.mounted);if(o){if(o.tree.prop(I1)==this.data){if(o.overlay)for(let l of o.overlay)n.push({from:l.from+r,to:l.to+r});else n.push({from:r,to:r+s.length});return}else if(o.overlay){let l=n.length;if(a(o.tree,o.overlay[0].from+r),n.length>l)return}}for(let l=0;ln.isTop?t:void 0)]}),e.name)}configure(e,t){return new Zs(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Xe(i){let e=i.field(Ht.state,!1);return e?e.tree:Le.empty}class aJ{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}}let ei=null;class Ds{constructor(e,t,n=[],a,s,r,o,l){this.parser=e,this.state=t,this.fragments=n,this.tree=a,this.treeLen=s,this.viewport=r,this.skipped=o,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,n){return new Ds(e,t,[],Le.empty,0,n,[],null)}startParse(){return this.parser.startParse(new aJ(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=Le.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var n;if(typeof e=="number"){let a=Date.now()+e;e=()=>Date.now()>a}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(a1.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=ei;ei=this;try{return e()}finally{ei=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=_c(e,t.from,t.to);return e}changes(e,t){let{fragments:n,tree:a,treeLen:s,viewport:r,skipped:o}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((u,m,c,d)=>l.push({fromA:u,toA:m,fromB:c,toB:d})),n=a1.applyChanges(n,l),a=Le.empty,s=0,r={from:e.mapPos(r.from,-1),to:e.mapPos(r.to,1)},this.skipped.length){o=[];for(let u of this.skipped){let m=e.mapPos(u.from,1),c=e.mapPos(u.to,-1);me.from&&(this.fragments=_c(this.fragments,a,s),this.skipped.splice(n--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends rf{createParse(t,n,a){let s=a[0].from,r=a[a.length-1].to;return{parsedPos:s,advance(){let l=ei;if(l){for(let u of a)l.tempSkipped.push(u);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=r,new Le(ft.none,[],[],r-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return ei}}function _c(i,e,t){return a1.applyChanges(i,[{fromA:e,toA:t,fromB:e,toB:t}])}class W1{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),n=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,n)||t.takeTree(),new W1(t)}static init(e){let t=Math.min(3e3,e.doc.length),n=Ds.create(e.facet(E1).parser,e,{from:0,to:t});return n.work(20,t)||n.takeTree(),new W1(n)}}Ht.state=Et.define({create:W1.init,update(i,e){for(let t of e.effects)if(t.is(Ht.setState))return t.value;return e.startState.facet(E1)!=e.state.facet(E1)?W1.init(e.state):i.apply(e)}});let mf=i=>{let e=setTimeout(()=>i(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(mf=i=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(i,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Yr=typeof navigator<"u"&&(!((Ur=navigator.scheduling)===null||Ur===void 0)&&Ur.isInputPending)?()=>navigator.scheduling.isInputPending():null,sJ=Wt.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Ht.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Ht.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=mf(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnda+1e3,l=s.context.work(()=>Yr&&Yr()||Date.now()>r,a+(o?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:Ht.setState.of(new W1(s.context))})),this.chunkBudget>0&&!(l&&!o)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>zt(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),E1=V.define({combine(i){return i.length?i[0]:null},enables:i=>[Ht.state,sJ,Q.contentAttributes.compute([i],e=>{let t=e.facet(i);return t&&t.name?{"data-language":t.name}:{}})]});class rJ{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const oJ=V.define(),$i=V.define({combine:i=>{if(!i.length)return" ";let e=i[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(i[0]));return e}});function Bs(i){let e=i.facet($i);return e.charCodeAt(0)==9?i.tabSize*e.length:e.length}function Ei(i,e){let t="",n=i.tabSize,a=i.facet($i)[0];if(a==" "){for(;e>=n;)t+=" ",e-=n;a=" "}for(let s=0;s=e?lJ(i,t,e):null}class mr{constructor(e,t={}){this.state=e,this.options=t,this.unit=Bs(e)}lineAt(e,t=1){let n=this.state.doc.lineAt(e),{simulateBreak:a,simulateDoubleBreak:s}=this.options;return a!=null&&a>=n.from&&a<=n.to?s&&a==e?{text:"",from:e}:(t<0?a-1&&(s+=r-this.countColumn(n,n.search(/\S|$/))),s}countColumn(e,t=e.length){return Qi(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:n,from:a}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let r=s(a);if(r>-1)return r}return this.countColumn(n,n.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const cf=new ae;function lJ(i,e,t){let n=e.resolveStack(t),a=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(a!=n.node){let s=[];for(let r=a;r&&!(r.fromn.node.to||r.from==n.node.from&&r.type==n.node.type);r=r.parent)s.push(r);for(let r=s.length-1;r>=0;r--)n={node:s[r],next:n}}return df(n,i,t)}function df(i,e,t){for(let n=i;n;n=n.next){let a=mJ(n.node);if(a)return a(W0.create(e,t,n))}return 0}function uJ(i){return i.pos==i.options.simulateBreak&&i.options.simulateDoubleBreak}function mJ(i){let e=i.type.prop(cf);if(e)return e;let t=i.firstChild,n;if(t&&(n=t.type.prop(ae.closedBy))){let a=i.lastChild,s=a&&n.indexOf(a.name)>-1;return r=>hf(r,!0,1,void 0,s&&!uJ(r)?a.from:void 0)}return i.parent==null?cJ:null}function cJ(){return 0}class W0 extends mr{constructor(e,t,n){super(e.state,e.options),this.base=e,this.pos=t,this.context=n}get node(){return this.context.node}static create(e,t,n){return new W0(e,t,n)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let n=e.resolve(t.from);for(;n.parent&&n.parent.from==n.from;)n=n.parent;if(dJ(n,e))break;t=this.state.doc.lineAt(n.from)}return this.lineIndent(t.from)}continue(){return df(this.context.next,this.base,this.pos)}}function dJ(i,e){for(let t=e;t;t=t.parent)if(i==t)return!0;return!1}function hJ(i){let e=i.node,t=e.childAfter(e.from),n=e.lastChild;if(!t)return null;let a=i.options.simulateBreak,s=i.state.doc.lineAt(t.from),r=a==null||a<=s.from?s.to:Math.min(s.to,a);for(let o=t.to;;){let l=e.childAfter(o);if(!l||l==n)return null;if(!l.type.isSkipped){if(l.from>=r)return null;let u=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+u}}o=l.to}}function gJ({closing:i,align:e=!0,units:t=1}){return n=>hf(n,e,t,i)}function hf(i,e,t,n,a){let s=i.textAfter,r=s.match(/^\s*/)[0].length,o=n&&s.slice(r,r+n.length)==n||a==i.pos+r,l=e?hJ(i):null;return l?o?i.column(l.from):i.column(l.to):i.baseIndent+(o?0:i.unit*t)}const pJ=i=>i.baseIndent;function $r({except:i,units:e=1}={}){return t=>{let n=i&&i.test(t.textAfter);return t.baseIndent+(n?0:e*t.unit)}}const fJ=200;function xJ(){return re.transactionFilter.of(i=>{if(!i.docChanged||!i.isUserEvent("input.type")&&!i.isUserEvent("input.complete"))return i;let e=i.startState.languageDataAt("indentOnInput",i.startState.selection.main.head);if(!e.length)return i;let t=i.newDoc,{head:n}=i.newSelection.main,a=t.lineAt(n);if(n>a.from+fJ)return i;let s=t.sliceString(a.from,n);if(!e.some(u=>u.test(s)))return i;let{state:r}=i,o=-1,l=[];for(let{head:u}of r.selection.ranges){let m=r.doc.lineAt(u);if(m.from==o)continue;o=m.from;let c=L0(r,m.from);if(c==null)continue;let d=/^\s*/.exec(m.text)[0],h=Ei(r,c);d!=h&&l.push({from:m.from,to:m.from+d.length,insert:h})}return l.length?[i,{changes:l,sequential:!0}]:i})}const bJ=new ae;function vJ(i){let e=i.firstChild,t=i.lastChild;return e&&e.too.prop(I1)==r.data:r?o=>o==r:void 0,this.style=uf(e.map(o=>({tag:o.tag,class:o.class||a(Object.assign({},o,{tag:null}))})),{all:s}).style,this.module=n?new Bn(n):null,this.themeType=t.themeType}static define(e,t){return new cr(e,t||{})}}const Cl=V.define(),yJ=V.define({combine(i){return i.length?[i[0]]:null}});function Xr(i){let e=i.facet(Cl);return e.length?e:i.facet(yJ)}function wJ(i,e){let t=[IJ],n;return i instanceof cr&&(i.module&&t.push(Q.styleModule.of(i.module)),n=i.themeType),n?t.push(Cl.computeN([Q.darkTheme],a=>a.facet(Q.darkTheme)==(n=="dark")?[i]:[])):t.push(Cl.of(i)),t}class zJ{constructor(e){this.markCache=Object.create(null),this.tree=Xe(e.state),this.decorations=this.buildDeco(e,Xr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Xe(e.state),n=Xr(e.state),a=n!=Xr(e.startState),{viewport:s}=e.view,r=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=r):(t!=this.tree||e.viewportChanged||a)&&(this.tree=t,this.decorations=this.buildDeco(e.view,n),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return he.none;let n=new i1;for(let{from:a,to:s}of e.visibleRanges)KN(this.tree,t,(r,o,l)=>{n.add(r,o,this.markCache[l]||(this.markCache[l]=he.mark({class:l})))},a,s);return n.finish()}}const IJ=u1.high(Wt.fromClass(zJ,{decorations:i=>i.decorations})),kJ=Q.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),gf=1e4,pf="()[]{}",ff=V.define({combine(i){return y0(i,{afterCursor:!0,brackets:pf,maxScanDistance:gf,renderMatch:jJ})}}),SJ=he.mark({class:"cm-matchingBracket"}),TJ=he.mark({class:"cm-nonmatchingBracket"});function jJ(i){let e=[],t=i.matched?SJ:TJ;return e.push(t.range(i.start.from,i.start.to)),i.end&&e.push(t.range(i.end.from,i.end.to)),e}function Cc(i){let e=[],t=i.facet(ff);for(let n of i.selection.ranges){if(!n.empty)continue;let a=on(i,n.head,-1,t)||n.head>0&&on(i,n.head-1,1,t)||t.afterCursor&&(on(i,n.head,1,t)||n.headi.decorations}),CJ=[_J,kJ];function AJ(i={}){return[ff.of(i),CJ]}const PJ=new ae;function Al(i,e,t){let n=i.prop(e<0?ae.openedBy:ae.closedBy);if(n)return n;if(i.name.length==1){let a=t.indexOf(i.name);if(a>-1&&a%2==(e<0?1:0))return[t[a+e]]}return null}function Pl(i){let e=i.type.prop(PJ);return e?e(i.node):i}function on(i,e,t,n={}){let a=n.maxScanDistance||gf,s=n.brackets||pf,r=Xe(i),o=r.resolveInner(e,t);for(let l=o;l;l=l.parent){let u=Al(l.type,t,s);if(u&&l.from0?e>=m.from&&em.from&&e<=m.to))return OJ(i,e,t,l,m,u,s)}}return MJ(i,e,t,r,o.type,a,s)}function OJ(i,e,t,n,a,s,r){let o=n.parent,l={from:a.from,to:a.to},u=0,m=o==null?void 0:o.cursor();if(m&&(t<0?m.childBefore(n.from):m.childAfter(n.to)))do if(t<0?m.to<=n.from:m.from>=n.to){if(u==0&&s.indexOf(m.type.name)>-1&&m.from0)return null;let u={from:t<0?e-1:e,to:t>0?e+1:e},m=i.doc.iterRange(e,t>0?i.doc.length:0),c=0;for(let d=0;!m.next().done&&d<=s;){let h=m.value;t<0&&(d+=h.length);let g=e+d*t;for(let f=t>0?0:h.length-1,x=t>0?h.length:-1;f!=x;f+=t){let b=r.indexOf(h[f]);if(!(b<0||n.resolveInner(g+f,1).type!=a))if(b%2==0==t>0)c++;else{if(c==1)return{start:u,end:{from:g+f,to:g+f+1},matched:b>>1==l>>1};c--}}t>0&&(d+=h.length)}return m.done?{start:u,matched:!1}:null}const ZJ=Object.create(null),Ac=[ft.none],Pc=[],Oc=Object.create(null),DJ=Object.create(null);for(let[i,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])DJ[i]=BJ(ZJ,e);function Kr(i,e){Pc.indexOf(i)>-1||(Pc.push(i),console.warn(e))}function BJ(i,e){let t=[];for(let o of e.split(" ")){let l=[];for(let u of o.split(".")){let m=i[u]||W[u];m?typeof m=="function"?l.length?l=l.map(m):Kr(u,`Modifier ${u} used at start of tag`):l.length?Kr(u,`Tag ${u} used as modifier`):l=Array.isArray(m)?m:[m]:Kr(u,`Unknown highlighting tag ${u}`)}for(let u of l)t.push(u)}if(!t.length)return 0;let n=e.replace(/ /g,"_"),a=n+" "+t.map(o=>o.id),s=Oc[a];if(s)return s.id;let r=Oc[a]=ft.define({id:Ac.length,name:n,props:[of({[n]:t})]});return Ac.push(r),r.id}ye.RTL,ye.LTR;class xf{constructor(e,t,n,a){this.state=e,this.pos=t,this.explicit=n,this.view=a,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Xe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),a=t.text.slice(n-t.from,this.pos-t.from),s=a.search(bf(e,!1));return s<0?null:{from:n+s,to:this.pos,text:a.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,n){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),n&&n.onDocChange&&(this.abortOnDocChange=!0))}}function Mc(i){let e=Object.keys(i).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function LJ(i){let e=Object.create(null),t=Object.create(null);for(let{label:a}of i){e[a[0]]=!0;for(let s=1;stypeof a=="string"?{label:a}:a),[t,n]=e.every(a=>/^\w+$/.test(a.label))?[/\w*$/,/\w+$/]:LJ(e);return a=>{let s=a.matchBefore(n);return s||a.explicit?{from:s?s.from:a.pos,options:e,validFor:t}:null}}class Zc{constructor(e,t,n,a){this.completion=e,this.source=t,this.match=n,this.score=a}}function s1(i){return i.selection.main.from}function bf(i,e){var t;let{source:n}=i,a=e&&n[0]!="^",s=n[n.length-1]!="$";return!a&&!s?i:new RegExp(`${a?"^":""}(?:${n})${s?"$":""}`,(t=i.flags)!==null&&t!==void 0?t:i.ignoreCase?"i":"")}const E0=Nn.define();function EJ(i,e,t,n){let{main:a}=i.selection,s=t-a.from,r=n-a.from;return{...i.changeByRange(o=>{if(o!=a&&t!=n&&i.sliceDoc(o.from+s,o.from+r)!=i.sliceDoc(t,n))return{range:o};let l=i.toText(e);return{changes:{from:o.from+s,to:n==a.from?o.to:o.from+r,insert:l},range:Z.cursor(o.from+s+l.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Dc=new WeakMap;function NJ(i){if(!Array.isArray(i))return i;let e=Dc.get(i);return e||Dc.set(i,e=WJ(i)),e}const Ls=de.define(),Ni=de.define();class JJ{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&I<=57||I>=97&&I<=122?2:I>=65&&I<=90?1:0:(k=Jg(I))!=k.toLowerCase()?1:k!=k.toUpperCase()?2:0;(!v||S==1&&x||z==0&&S!=0)&&(t[c]==I||n[c]==I&&(d=!0)?r[c++]=v:r.length&&(b=!1)),z=S,v+=hn(I)}return c==l&&r[0]==0&&b?this.result(-100+(d?-200:0),r,e):h==l&&g==0?this.ret(-200-e.length+(f==e.length?0:-100),[0,f]):o>-1?this.ret(-700-e.length,[o,o+this.pattern.length]):h==l?this.ret(-900-e.length,[g,f]):c==l?this.result(-100+(d?-200:0)+-700+(b?0:-1100),r,e):t.length==2?null:this.result((a[0]?-700:0)+-200+-1100,a,e)}result(e,t,n){let a=[],s=0;for(let r of t){let o=r+(this.astral?hn(At(n,r)):1);s&&a[s-1]==r?a[s-1]=o:(a[s++]=r,a[s++]=o)}return this.ret(e-n.length,a)}}class FJ{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:RJ,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>n=>Bc(e(n),t(n)),optionClass:(e,t)=>n=>Bc(e(n),t(n)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Bc(i,e){return i?e?i+" "+e:i:e}function RJ(i,e,t,n,a,s){let r=i.textDirection==ye.RTL,o=r,l=!1,u="top",m,c,d=e.left-a.left,h=a.right-e.right,g=n.right-n.left,f=n.bottom-n.top;if(o&&d=f||v>e.top?m=t.bottom-e.top:(u="bottom",m=e.bottom-t.top)}let x=(e.bottom-e.top)/s.offsetHeight,b=(e.right-e.left)/s.offsetWidth;return{style:`${u}: ${m/x}px; max-width: ${c/b}px`,class:"cm-completionInfo-"+(l?r?"left-narrow":"right-narrow":o?"left":"right")}}const N0=de.define();function GJ(i){let e=i.addToOptions.slice();return i.icons&&e.push({render(t){let n=document.createElement("div");return n.classList.add("cm-completionIcon"),t.type&&n.classList.add(...t.type.split(/\s+/g).map(a=>"cm-completionIcon-"+a)),n.setAttribute("aria-hidden","true"),n},position:20}),e.push({render(t,n,a,s){let r=document.createElement("span");r.className="cm-completionLabel";let o=t.displayLabel||t.label,l=0;for(let u=0;ul&&r.appendChild(document.createTextNode(o.slice(l,m)));let d=r.appendChild(document.createElement("span"));d.appendChild(document.createTextNode(o.slice(m,c))),d.className="cm-completionMatchedText",l=c}return lt.position-n.position).map(t=>t.render)}function eo(i,e,t){if(i<=t)return{from:0,to:i};if(e<0&&(e=0),e<=i>>1){let a=Math.floor(e/t);return{from:a*t,to:(a+1)*t}}let n=Math.ceil((i-e)/t);return{from:i-n*t,to:i-(n-1)*t}}class HJ{constructor(e,t,n){this.view=e,this.stateField=t,this.applyCompletion=n,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:l=>this.placeInfo(l),key:this},this.space=null,this.currentClass="";let a=e.state.field(t),{options:s,selected:r}=a.open,o=e.state.facet(Ge);this.optionContent=GJ(o),this.optionClass=o.optionClass,this.tooltipClass=o.tooltipClass,this.range=eo(s.length,r,o.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",l=>{let{options:u}=e.state.field(t).open;for(let m=l.target,c;m&&m!=this.dom;m=m.parentNode)if(m.nodeName=="LI"&&(c=/-(\d+)$/.exec(m.id))&&+c[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;m!=null&&(e.dispatch({effects:N0.of(m)}),l.preventDefault())}}),this.dom.addEventListener("focusout",l=>{let u=e.state.field(this.stateField,!1);u&&u.tooltip&&e.state.facet(Ge).closeOnBlur&&l.relatedTarget!=e.contentDOM&&e.dispatch({effects:Ni.of(null)})}),this.showOptions(s,a.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let n=e.state.field(this.stateField),a=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),n!=a){let{options:s,selected:r,disabled:o}=n.open;(!a.open||a.open.options!=s)&&(this.range=eo(s.length,r,e.state.facet(Ge).maxRenderedOptions),this.showOptions(s,n.id)),this.updateSel(),o!=((t=a.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!o)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let n of this.currentClass.split(" "))n&&this.dom.classList.remove(n);for(let n of t.split(" "))n&&this.dom.classList.add(n);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=eo(t.options.length,t.selected,this.view.state.facet(Ge).maxRenderedOptions),this.showOptions(t.options,e.id));let n=this.updateSelectedOption(t.selected);if(n){this.destroyInfo();let{completion:a}=t.options[t.selected],{info:s}=a;if(!s)return;let r=typeof s=="string"?document.createTextNode(s):s(a);if(!r)return;"then"in r?r.then(o=>{o&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(o,a)}).catch(o=>zt(this.view.state,o,"completion info")):(this.addInfoPane(r,a),n.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let n=this.info=document.createElement("div");if(n.className="cm-tooltip cm-completionInfo",n.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)n.appendChild(e),this.infoDestroy=null;else{let{dom:a,destroy:s}=e;n.appendChild(a),this.infoDestroy=s||null}this.dom.appendChild(n),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let n=this.list.firstChild,a=this.range.from;n;n=n.nextSibling,a++)n.nodeName!="LI"||!n.id?a--:a==e?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),t=n):n.hasAttribute("aria-selected")&&(n.removeAttribute("aria-selected"),n.removeAttribute("aria-describedby"));return t&&QJ(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),n=this.info.getBoundingClientRect(),a=e.getBoundingClientRect(),s=this.space;if(!s){let r=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:r.clientWidth,bottom:r.clientHeight}}return a.top>Math.min(s.bottom,t.bottom)-10||a.bottom{r.target==a&&r.preventDefault()});let s=null;for(let r=n.from;rn.from||n.from==0))if(s=d,typeof u!="string"&&u.header)a.appendChild(u.header(u));else{let h=a.appendChild(document.createElement("completion-section"));h.textContent=d}}const m=a.appendChild(document.createElement("li"));m.id=t+"-"+r,m.setAttribute("role","option");let c=this.optionClass(o);c&&(m.className=c);for(let d of this.optionContent){let h=d(o,this.view.state,this.view,l);h&&m.appendChild(h)}}return n.from&&a.classList.add("cm-completionListIncompleteTop"),n.tonew HJ(t,i,e)}function QJ(i,e){let t=i.getBoundingClientRect(),n=e.getBoundingClientRect(),a=t.height/i.offsetHeight;n.topt.bottom&&(i.scrollTop+=(n.bottom-t.bottom)/a)}function Lc(i){return(i.boost||0)*100+(i.apply?10:0)+(i.info?5:0)+(i.type?1:0)}function qJ(i,e){let t=[],n=null,a=null,s=m=>{t.push(m);let{section:c}=m.completion;if(c){n||(n=[]);let d=typeof c=="string"?c:c.name;n.some(h=>h.name==d)||n.push(typeof c=="string"?{name:d}:c)}},r=e.facet(Ge);for(let m of i)if(m.hasResult()){let c=m.result.getMatch;if(m.result.filter===!1)for(let d of m.result.options)s(new Zc(d,m.source,c?c(d):[],1e9-t.length));else{let d=e.sliceDoc(m.from,m.to),h,g=r.filterStrict?new FJ(d):new JJ(d);for(let f of m.result.options)if(h=g.match(f.label)){let x=f.displayLabel?c?c(f,h.matched):[]:h.matched,b=h.score+(f.boost||0);if(s(new Zc(f,m.source,x,b)),typeof f.section=="object"&&f.section.rank==="dynamic"){let{name:v}=f.section;a||(a=Object.create(null)),a[v]=Math.max(b,a[v]||-1e9)}}}}if(n){let m=Object.create(null),c=0,d=(h,g)=>(h.rank==="dynamic"&&g.rank==="dynamic"?a[g.name]-a[h.name]:0)||(typeof h.rank=="number"?h.rank:1e9)-(typeof g.rank=="number"?g.rank:1e9)||(h.named.score-c.score||u(c.completion,d.completion))){let c=m.completion;!l||l.label!=c.label||l.detail!=c.detail||l.type!=null&&c.type!=null&&l.type!=c.type||l.apply!=c.apply||l.boost!=c.boost?o.push(m):Lc(m.completion)>Lc(l)&&(o[o.length-1]=m),l=m.completion}return o}class k1{constructor(e,t,n,a,s,r){this.options=e,this.attrs=t,this.tooltip=n,this.timestamp=a,this.selected=s,this.disabled=r}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new k1(this.options,Wc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,n,a,s,r){if(a&&!r&&e.some(u=>u.isPending))return a.setDisabled();let o=qJ(e,t);if(!o.length)return a&&e.some(u=>u.isPending)?a.setDisabled():null;let l=t.facet(Ge).selectOnOpen?0:-1;if(a&&a.selected!=l&&a.selected!=-1){let u=a.options[a.selected].completion;for(let m=0;mm.hasResult()?Math.min(u,m.from):u,1e8),create:eF,above:s.aboveCursor},a?a.timestamp:Date.now(),l,!1)}map(e){return new k1(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new k1(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ws{constructor(e,t,n){this.active=e,this.id=t,this.open=n}static start(){return new Ws(XJ,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,n=t.facet(Ge),s=(n.override||t.languageDataAt("autocomplete",s1(t)).map(NJ)).map(l=>(this.active.find(m=>m.source==l)||new Bt(l,this.active.some(m=>m.state!=0)?1:0)).update(e,n));s.length==this.active.length&&s.every((l,u)=>l==this.active[u])&&(s=this.active);let r=this.open,o=e.effects.some(l=>l.is(J0));r&&e.docChanged&&(r=r.map(e.changes)),e.selection||s.some(l=>l.hasResult()&&e.changes.touchesRange(l.from,l.to))||!UJ(s,this.active)||o?r=k1.build(s,t,this.id,r,n,o):r&&r.disabled&&!s.some(l=>l.isPending)&&(r=null),!r&&s.every(l=>!l.isPending)&&s.some(l=>l.hasResult())&&(s=s.map(l=>l.hasResult()?new Bt(l.source,0):l));for(let l of e.effects)l.is(N0)&&(r=r&&r.setSelected(l.value,this.id));return s==this.active&&r==this.open?this:new Ws(s,this.id,r)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?YJ:$J}}function UJ(i,e){if(i==e)return!0;for(let t=0,n=0;;){for(;t-1&&(t["aria-activedescendant"]=i+"-"+e),t}const XJ=[];function vf(i,e){if(i.isUserEvent("input.complete")){let n=i.annotation(E0);if(n&&e.activateOnCompletion(n))return 12}let t=i.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:i.isUserEvent("delete.backward")?2:i.selection?8:i.docChanged?16:0}class Bt{constructor(e,t,n=!1){this.source=e,this.state=t,this.explicit=n}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let n=vf(e,t),a=this;(n&8||n&16&&this.touches(e))&&(a=new Bt(a.source,0)),n&4&&a.state==0&&(a=new Bt(this.source,1)),a=a.updateFor(e,n);for(let s of e.effects)if(s.is(Ls))a=new Bt(a.source,1,s.value);else if(s.is(Ni))a=new Bt(a.source,0);else if(s.is(J0))for(let r of s.value)r.source==a.source&&(a=r);return a}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(s1(e.state))}}class A1 extends Bt{constructor(e,t,n,a,s,r){super(e,3,t),this.limit=n,this.result=a,this.from=s,this.to=r}hasResult(){return!0}updateFor(e,t){var n;if(!(t&3))return this.map(e.changes);let a=this.result;a.map&&!e.changes.empty&&(a=a.map(a,e.changes));let s=e.changes.mapPos(this.from),r=e.changes.mapPos(this.to,1),o=s1(e.state);if(o>r||!a||t&2&&(s1(e.startState)==this.from||ot.map(e))}}),gt=Et.define({create(){return Ws.start()},update(i,e){return i.update(e)},provide:i=>[$p.from(i,e=>e.tooltip),Q.contentAttributes.from(i,e=>e.attrs)]});function F0(i,e){const t=e.completion.apply||e.completion.label;let n=i.state.field(gt).active.find(a=>a.source==e.source);return n instanceof A1?(typeof t=="string"?i.dispatch({...EJ(i.state,t,n.from,n.to),annotations:E0.of(e.completion)}):t(i,e.completion,n.from,n.to),!0):!1}const eF=VJ(gt,F0);function Da(i,e="option"){return t=>{let n=t.state.field(gt,!1);if(!n||!n.open||n.open.disabled||Date.now()-n.open.timestamp-1?n.open.selected+a*(i?1:-1):i?0:r-1;return o<0?o=e=="page"?0:r-1:o>=r&&(o=e=="page"?r-1:0),t.dispatch({effects:N0.of(o)}),!0}}const tF=i=>{let e=i.state.field(gt,!1);return i.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampi.state.field(gt,!1)?(i.dispatch({effects:Ls.of(!0)}),!0):!1,nF=i=>{let e=i.state.field(gt,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(i.dispatch({effects:Ni.of(null)}),!0)};class iF{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const aF=50,sF=1e3,rF=Wt.fromClass(class{constructor(i){this.view=i,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of i.state.field(gt).active)e.isPending&&this.startQuery(e)}update(i){let e=i.state.field(gt),t=i.state.facet(Ge);if(!i.selectionSet&&!i.docChanged&&i.startState.field(gt)==e)return;let n=i.transactions.some(s=>{let r=vf(s,t);return r&8||(s.selection||s.docChanged)&&!(r&3)});for(let s=0;saF&&Date.now()-r.time>sF){for(let o of r.context.abortListeners)try{o()}catch(l){zt(this.view.state,l)}r.context.abortListeners=null,this.running.splice(s--,1)}else r.updates.push(...i.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),i.transactions.some(s=>s.effects.some(r=>r.is(Ls)))&&(this.pendingStart=!0);let a=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(r=>r.active.source==s.source))?setTimeout(()=>this.startUpdate(),a):-1,this.composing!=0)for(let s of i.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:i}=this.view,e=i.field(gt);for(let t of e.active)t.isPending&&!this.running.some(n=>n.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}startQuery(i){let{state:e}=this.view,t=s1(e),n=new xf(e,t,i.explicit,this.view),a=new iF(i,n);this.running.push(a),Promise.resolve(i.source(n)).then(s=>{a.context.aborted||(a.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:Ni.of(null)}),zt(this.view.state,s)})}scheduleAccept(){this.running.every(i=>i.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}accept(){var i;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ge),n=this.view.state.field(gt);for(let a=0;ao.source==s.active.source);if(r&&r.isPending)if(s.done==null){let o=new Bt(s.active.source,0);for(let l of s.updates)o=o.update(l,t);o.isPending||e.push(o)}else this.startQuery(r)}(e.length||n.open&&n.open.disabled)&&this.view.dispatch({effects:J0.of(e)})}},{eventHandlers:{blur(i){let e=this.view.state.field(gt,!1);if(e&&e.tooltip&&this.view.state.facet(Ge).closeOnBlur){let t=e.open&&Xp(this.view,e.open.tooltip);(!t||!t.dom.contains(i.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Ni.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Ls.of(!1)}),20),this.composing=0}}}),oF=typeof navigator=="object"&&/Win/.test(navigator.platform),lF=u1.highest(Q.domEventHandlers({keydown(i,e){let t=e.state.field(gt,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||!i.key||i.key.length>1||i.ctrlKey&&!(oF&&i.altKey)||i.metaKey)return!1;let n=t.open.options[t.open.selected],a=t.active.find(r=>r.source==n.source),s=n.completion.commitCharacters||a.result.commitCharacters;return s&&s.indexOf(i.key)>-1&&F0(e,n),!1}})),yf=Q.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class uF{constructor(e,t,n,a){this.field=e,this.line=t,this.from=n,this.to=a}}class R0{constructor(e,t,n){this.field=e,this.from=t,this.to=n}map(e){let t=e.mapPos(this.from,-1,st.TrackDel),n=e.mapPos(this.to,1,st.TrackDel);return t==null||n==null?null:new R0(this.field,t,n)}}class G0{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let n=[],a=[t],s=e.doc.lineAt(t),r=/^\s*/.exec(s.text)[0];for(let l of this.lines){if(n.length){let u=r,m=/^\t*/.exec(l)[0].length;for(let c=0;cnew R0(l.field,a[l.line]+l.from,a[l.line]+l.to));return{text:n,ranges:o}}static parse(e){let t=[],n=[],a=[],s;for(let r of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(r);){let o=s[1]?+s[1]:null,l=s[2]||s[3]||"",u=-1;o===0&&(o=1e9);let m=l.replace(/\\[{}]/g,c=>c[1]);for(let c=0;c=u&&d.field++}for(let c of a)if(c.line==n.length&&c.from>s.index){let d=s[2]?3+(s[1]||"").length:2;c.from-=d,c.to-=d}a.push(new uF(u,n.length,s.index,s.index+m.length)),r=r.slice(0,s.index)+l+r.slice(s.index+s[0].length)}r=r.replace(/\\([{}])/g,(o,l,u)=>{for(let m of a)m.line==n.length&&m.from>u&&(m.from--,m.to--);return l}),n.push(r)}return new G0(n,a)}}let mF=he.widget({widget:new class extends J1{toDOM(){let i=document.createElement("span");return i.className="cm-snippetFieldPosition",i}ignoreEvent(){return!1}}}),cF=he.mark({class:"cm-snippetField"});class F1{constructor(e,t){this.ranges=e,this.active=t,this.deco=he.set(e.map(n=>(n.from==n.to?mF:cF).range(n.from,n.to)),!0)}map(e){let t=[];for(let n of this.ranges){let a=n.map(e);if(!a)return null;t.push(a)}return new F1(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(n=>n.field==this.active&&n.from<=t.from&&n.to>=t.to))}}const Xi=de.define({map(i,e){return i&&i.map(e)}}),dF=de.define(),Ji=Et.define({create(){return null},update(i,e){for(let t of e.effects){if(t.is(Xi))return t.value;if(t.is(dF)&&i)return new F1(i.ranges,t.value)}return i&&e.docChanged&&(i=i.map(e.changes)),i&&e.selection&&!i.selectionInsideField(e.selection)&&(i=null),i},provide:i=>Q.decorations.from(i,e=>e?e.deco:he.none)});function H0(i,e){return Z.create(i.filter(t=>t.field==e).map(t=>Z.range(t.from,t.to)))}function hF(i){let e=G0.parse(i);return(t,n,a,s)=>{let{text:r,ranges:o}=e.instantiate(t.state,a),{main:l}=t.state.selection,u={changes:{from:a,to:s==l.from?l.to:s,insert:oe.of(r)},scrollIntoView:!0,annotations:n?[E0.of(n),Ye.userEvent.of("input.complete")]:void 0};if(o.length&&(u.selection=H0(o,0)),o.some(m=>m.field>0)){let m=new F1(o,0),c=u.effects=[Xi.of(m)];t.state.field(Ji,!1)===void 0&&c.push(de.appendConfig.of([Ji,bF,vF,yf]))}t.dispatch(t.state.update(u))}}function wf(i){return({state:e,dispatch:t})=>{let n=e.field(Ji,!1);if(!n||i<0&&n.active==0)return!1;let a=n.active+i,s=i>0&&!n.ranges.some(r=>r.field==a+i);return t(e.update({selection:H0(n.ranges,a),effects:Xi.of(s?null:new F1(n.ranges,a)),scrollIntoView:!0})),!0}}const gF=({state:i,dispatch:e})=>i.field(Ji,!1)?(e(i.update({effects:Xi.of(null)})),!0):!1,pF=wf(1),fF=wf(-1),xF=[{key:"Tab",run:pF,shift:fF},{key:"Escape",run:gF}],Ec=V.define({combine(i){return i.length?i[0]:xF}}),bF=u1.highest(Bi.compute([Ec],i=>i.facet(Ec)));function V0(i,e){return{...e,apply:hF(i)}}const vF=Q.domEventHandlers({mousedown(i,e){let t=e.state.field(Ji,!1),n;if(!t||(n=e.posAtCoords({x:i.clientX,y:i.clientY}))==null)return!1;let a=t.ranges.find(s=>s.from<=n&&s.to>=n);return!a||a.field==t.active?!1:(e.dispatch({selection:H0(t.ranges,a.field),effects:Xi.of(t.ranges.some(s=>s.field>a.field)?new F1(t.ranges,a.field):null),scrollIntoView:!0}),!0)}}),Fi={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Xn=de.define({map(i,e){let t=e.mapPos(i,-1,st.TrackAfter);return t??void 0}}),Q0=new class extends Dn{};Q0.startSide=1;Q0.endSide=-1;const zf=Et.define({create(){return ie.empty},update(i,e){if(i=i.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);i=i.update({filter:n=>n>=t.from&&n<=t.to})}for(let t of e.effects)t.is(Xn)&&(i=i.update({add:[Q0.range(t.value,t.value+1)]}));return i}});function yF(){return[zF,zf]}const no="()[]{}<>«»»«[]{}";function If(i){for(let e=0;e{if((wF?i.composing:i.compositionStarted)||i.state.readOnly)return!1;let a=i.state.selection.main;if(n.length>2||n.length==2&&hn(At(n,0))==1||e!=a.from||t!=a.to)return!1;let s=SF(i.state,n);return s?(i.dispatch(s),!0):!1}),IF=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let n=kf(i,i.selection.main.head).brackets||Fi.brackets,a=null,s=i.changeByRange(r=>{if(r.empty){let o=TF(i.doc,r.head);for(let l of n)if(l==o&&dr(i.doc,r.head)==If(At(l,0)))return{changes:{from:r.head-l.length,to:r.head+l.length},range:Z.cursor(r.head-l.length)}}return{range:a=r}});return a||e(i.update(s,{scrollIntoView:!0,userEvent:"delete.backward"})),!a},kF=[{key:"Backspace",run:IF}];function SF(i,e){let t=kf(i,i.selection.main.head),n=t.brackets||Fi.brackets;for(let a of n){let s=If(At(a,0));if(e==a)return s==a?CF(i,a,n.indexOf(a+a+a)>-1,t):jF(i,a,s,t.before||Fi.before);if(e==s&&Sf(i,i.selection.main.from))return _F(i,a,s)}return null}function Sf(i,e){let t=!1;return i.field(zf).between(0,i.doc.length,n=>{n==e&&(t=!0)}),t}function dr(i,e){let t=i.sliceString(e,e+2);return t.slice(0,hn(At(t,0)))}function TF(i,e){let t=i.sliceString(e-2,e);return hn(At(t,0))==t.length?t:t.slice(1)}function jF(i,e,t,n){let a=null,s=i.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:t,from:r.to}],effects:Xn.of(r.to+e.length),range:Z.range(r.anchor+e.length,r.head+e.length)};let o=dr(i.doc,r.head);return!o||/\s/.test(o)||n.indexOf(o)>-1?{changes:{insert:e+t,from:r.head},effects:Xn.of(r.head+e.length),range:Z.cursor(r.head+e.length)}:{range:a=r}});return a?null:i.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function _F(i,e,t){let n=null,a=i.changeByRange(s=>s.empty&&dr(i.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:Z.cursor(s.head+t.length)}:n={range:s});return n?null:i.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function CF(i,e,t,n){let a=n.stringPrefixes||Fi.stringPrefixes,s=null,r=i.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:e,from:o.to}],effects:Xn.of(o.to+e.length),range:Z.range(o.anchor+e.length,o.head+e.length)};let l=o.head,u=dr(i.doc,l),m;if(u==e){if(Nc(i,l))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:Z.cursor(l+e.length)};if(Sf(i,l)){let d=t&&i.sliceDoc(l,l+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:l,to:l+d.length,insert:d},range:Z.cursor(l+d.length)}}}else{if(t&&i.sliceDoc(l-2*e.length,l)==e+e&&(m=Jc(i,l-2*e.length,a))>-1&&Nc(i,m))return{changes:{insert:e+e+e+e,from:l},effects:Xn.of(l+e.length),range:Z.cursor(l+e.length)};if(i.charCategorizer(l)(u)!=Zt.Word&&Jc(i,l,a)>-1&&!AF(i,l,e,a))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:Z.cursor(l+e.length)}}return{range:s=o}});return s?null:i.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Nc(i,e){let t=Xe(i).resolveInner(e+1);return t.parent&&t.from==e}function AF(i,e,t,n){let a=Xe(i).resolveInner(e,-1),s=n.reduce((r,o)=>Math.max(r,o.length),0);for(let r=0;r<5;r++){let o=i.sliceDoc(a.from,Math.min(a.to,a.from+t.length+s)),l=o.indexOf(t);if(!l||l>-1&&n.indexOf(o.slice(0,l))>-1){let m=a.firstChild;for(;m&&m.from==a.from&&m.to-m.from>t.length+l;){if(i.sliceDoc(m.to-t.length,m.to)==t)return!1;m=m.firstChild}return!0}let u=a.to==e&&a.parent;if(!u)break;a=u}return!1}function Jc(i,e,t){let n=i.charCategorizer(e);if(n(i.sliceDoc(e-1,e))!=Zt.Word)return e;for(let a of t){let s=e-a.length;if(i.sliceDoc(s,e)==a&&n(i.sliceDoc(s-1,s))!=Zt.Word)return s}return-1}function PF(i={}){return[lF,gt,Ge.of(i),rF,OF,yf]}const Tf=[{key:"Ctrl-Space",run:to},{mac:"Alt-`",run:to},{mac:"Alt-i",run:to},{key:"Escape",run:nF},{key:"ArrowDown",run:Da(!0)},{key:"ArrowUp",run:Da(!1)},{key:"PageDown",run:Da(!0,"page")},{key:"PageUp",run:Da(!1,"page")},{key:"Enter",run:tF}],OF=u1.highest(Bi.computeN([Ge],i=>i.facet(Ge).defaultKeymap?[Tf]:[])),MF=i=>{let{state:e}=i,t=e.doc.lineAt(e.selection.main.from),n=U0(i.state,t.from);return n.line?ZF(i):n.block?BF(i):!1};function q0(i,e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let a=i(e,t);return a?(n(t.update(a)),!0):!1}}const ZF=q0(EF,0),DF=q0(jf,0),BF=q0((i,e)=>jf(i,e,WF(e)),0);function U0(i,e){let t=i.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const ti=50;function LF(i,{open:e,close:t},n,a){let s=i.sliceDoc(n-ti,n),r=i.sliceDoc(a,a+ti),o=/\s*$/.exec(s)[0].length,l=/^\s*/.exec(r)[0].length,u=s.length-o;if(s.slice(u-e.length,u)==e&&r.slice(l,l+t.length)==t)return{open:{pos:n-o,margin:o&&1},close:{pos:a+l,margin:l&&1}};let m,c;a-n<=2*ti?m=c=i.sliceDoc(n,a):(m=i.sliceDoc(n,n+ti),c=i.sliceDoc(a-ti,a));let d=/^\s*/.exec(m)[0].length,h=/\s*$/.exec(c)[0].length,g=c.length-h-t.length;return m.slice(d,d+e.length)==e&&c.slice(g,g+t.length)==t?{open:{pos:n+d+e.length,margin:/\s/.test(m.charAt(d+e.length))?1:0},close:{pos:a-h-t.length,margin:/\s/.test(c.charAt(g-1))?1:0}}:null}function WF(i){let e=[];for(let t of i.selection.ranges){let n=i.doc.lineAt(t.from),a=t.to<=n.to?n:i.doc.lineAt(t.to);a.from>n.from&&a.from==t.to&&(a=t.to==n.to+1?n:i.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>n.from?e[s].to=a.to:e.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:a.to})}return e}function jf(i,e,t=e.selection.ranges){let n=t.map(s=>U0(e,s.from).block);if(!n.every(s=>s))return null;let a=t.map((s,r)=>LF(e,n[r],s.from,s.to));if(i!=2&&!a.every(s=>s))return{changes:e.changes(t.map((s,r)=>a[r]?[]:[{from:s.from,insert:n[r].open+" "},{from:s.to,insert:" "+n[r].close}]))};if(i!=1&&a.some(s=>s)){let s=[];for(let r=0,o;ra&&(s==r||r>c.from)){a=c.from;let d=/^\s*/.exec(c.text)[0].length,h=d==c.length,g=c.text.slice(d,d+u.length)==u?d:-1;ds.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:o,token:l,indent:u,empty:m,single:c}of n)(c||!m)&&s.push({from:o.from+u,insert:l+" "});let r=e.changes(s);return{changes:r,selection:e.selection.map(r,1)}}else if(i!=1&&n.some(s=>s.comment>=0)){let s=[];for(let{line:r,comment:o,token:l}of n)if(o>=0){let u=r.from+o,m=u+l.length;r.text[m-r.from]==" "&&m++,s.push({from:u,to:m})}return{changes:s}}return null}function R1(i,e){return Z.create(i.ranges.map(e),i.mainIndex)}function qt(i,e){return i.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Ut({state:i,dispatch:e},t){let n=R1(i.selection,t);return n.eq(i.selection,!0)?!1:(e(qt(i,n)),!0)}function hr(i,e){return Z.cursor(e?i.to:i.from)}function _f(i,e){return Ut(i,t=>t.empty?i.moveByChar(t,e):hr(t,e))}function ot(i){return i.textDirectionAt(i.state.selection.main.head)==ye.LTR}const Cf=i=>_f(i,!ot(i)),Af=i=>_f(i,ot(i));function Pf(i,e){return Ut(i,t=>t.empty?i.moveByGroup(t,e):hr(t,e))}const NF=i=>Pf(i,!ot(i)),JF=i=>Pf(i,ot(i));function FF(i,e,t){if(e.type.prop(t))return!0;let n=e.to-e.from;return n&&(n>2||/[^\s,.;:]/.test(i.sliceDoc(e.from,e.to)))||e.firstChild}function gr(i,e,t){let n=Xe(i).resolveInner(e.head),a=t?ae.closedBy:ae.openedBy;for(let l=e.head;;){let u=t?n.childAfter(l):n.childBefore(l);if(!u)break;FF(i,u,a)?n=u:l=t?u.to:u.from}let s=n.type.prop(a),r,o;return s&&(r=t?on(i,n.from,1):on(i,n.to,-1))&&r.matched?o=t?r.end.to:r.end.from:o=t?n.to:n.from,Z.cursor(o,t?-1:1)}const RF=i=>Ut(i,e=>gr(i.state,e,!ot(i))),GF=i=>Ut(i,e=>gr(i.state,e,ot(i)));function Of(i,e){return Ut(i,t=>{if(!t.empty)return hr(t,e);let n=i.moveVertically(t,e);return n.head!=t.head?n:i.moveToLineBoundary(t,e)})}const Mf=i=>Of(i,!1),Zf=i=>Of(i,!0);function Df(i){let e=i.scrollDOM.clientHeightr.empty?i.moveVertically(r,e,t.height):hr(r,e));if(a.eq(n.selection))return!1;let s;if(t.selfScroll){let r=i.coordsAtPos(n.selection.main.head),o=i.scrollDOM.getBoundingClientRect(),l=o.top+t.marginTop,u=o.bottom-t.marginBottom;r&&r.top>l&&r.bottomBf(i,!1),Ol=i=>Bf(i,!0);function Jn(i,e,t){let n=i.lineBlockAt(e.head),a=i.moveToLineBoundary(e,t);if(a.head==e.head&&a.head!=(t?n.to:n.from)&&(a=i.moveToLineBoundary(e,t,!1)),!t&&a.head==n.from&&n.length){let s=/^\s*/.exec(i.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;s&&e.head!=n.from+s&&(a=Z.cursor(n.from+s))}return a}const HF=i=>Ut(i,e=>Jn(i,e,!0)),VF=i=>Ut(i,e=>Jn(i,e,!1)),QF=i=>Ut(i,e=>Jn(i,e,!ot(i))),qF=i=>Ut(i,e=>Jn(i,e,ot(i))),UF=i=>Ut(i,e=>i.moveToLineBoundary(e,!1,!1)),YF=i=>Ut(i,e=>i.moveToLineBoundary(e,!0,!1));function $F(i,e,t){let n=!1,a=R1(i.selection,s=>{let r=on(i,s.head,-1)||on(i,s.head,1)||s.head>0&&on(i,s.head-1,1)||s.head$F(i,e);function Nt(i,e,t){let n=R1(i.state.selection,a=>{a.undirectional&&a.head>=a.anchor!=e&&(a=Z.range(a.head,a.anchor));let s=t(a);return Z.range(a.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return n.eq(i.state.selection)?!1:(i.dispatch(qt(i.state,n)),!0)}function Lf(i,e){return Nt(i,e,t=>i.moveByChar(t,e))}const Wf=i=>Lf(i,!ot(i)),Ef=i=>Lf(i,ot(i));function Nf(i,e){return Nt(i,e,t=>i.moveByGroup(t,e))}const KF=i=>Nf(i,!ot(i)),eR=i=>Nf(i,ot(i)),tR=i=>{let e=!ot(i);return Nt(i,e,t=>gr(i.state,t,e))},nR=i=>{let e=ot(i);return Nt(i,e,t=>gr(i.state,t,e))};function Jf(i,e){return Nt(i,e,t=>i.moveVertically(t,e))}const Ff=i=>Jf(i,!1),Rf=i=>Jf(i,!0);function Gf(i,e){return Nt(i,e,t=>i.moveVertically(t,e,Df(i).height))}const Rc=i=>Gf(i,!1),Gc=i=>Gf(i,!0),iR=i=>Nt(i,!0,e=>Jn(i,e,!0)),aR=i=>Nt(i,!1,e=>Jn(i,e,!1)),sR=i=>{let e=!ot(i);return Nt(i,e,t=>Jn(i,t,e))},rR=i=>{let e=ot(i);return Nt(i,e,t=>Jn(i,t,e))},oR=i=>Nt(i,!1,e=>Z.cursor(i.lineBlockAt(e.head).from)),lR=i=>Nt(i,!0,e=>Z.cursor(i.lineBlockAt(e.head).to)),Hc=({state:i,dispatch:e})=>(e(qt(i,{anchor:0})),!0),Vc=({state:i,dispatch:e})=>(e(qt(i,{anchor:i.doc.length})),!0),Qc=({state:i,dispatch:e})=>(e(qt(i,{anchor:i.selection.main.anchor,head:0})),!0),qc=({state:i,dispatch:e})=>(e(qt(i,{anchor:i.selection.main.anchor,head:i.doc.length})),!0),uR=({state:i,dispatch:e})=>(e(i.update({selection:{anchor:0,head:i.doc.length},userEvent:"select"})),!0),mR=({state:i,dispatch:e})=>{let t=pr(i).map(({from:n,to:a})=>Z.undirectionalRange(n,Math.min(a+1,i.doc.length)));return e(i.update({selection:Z.create(t),userEvent:"select"})),!0},cR=({state:i,dispatch:e})=>{let t=R1(i.selection,n=>{let a=Xe(i),s=a.resolveStack(n.from,1);if(n.empty){let r=a.resolveStack(n.from,-1);r.node.from>=s.node.from&&r.node.to<=s.node.to&&(s=r)}for(let r=s;r;r=r.next){let{node:o}=r;if((o.from=n.to||o.to>n.to&&o.from<=n.from)&&r.next)return Z.undirectionalRange(o.from,o.to)}return n});return t.eq(i.selection)?!1:(e(qt(i,t)),!0)};function Hf(i,e){let{state:t}=i,n=t.selection,a=t.selection.ranges.slice();for(let s of t.selection.ranges){let r=t.doc.lineAt(s.head);if(e?r.to0)for(let o=s;;){let l=i.moveVertically(o,e);if(l.headr.to){a.some(u=>u.head==l.head)||a.push(l);break}else{if(l.head==o.head)break;o=l}}}return a.length==n.ranges.length?!1:(i.dispatch(qt(t,Z.create(a,a.length-1))),!0)}const dR=i=>Hf(i,!1),hR=i=>Hf(i,!0),gR=({state:i,dispatch:e})=>{let t=i.selection,n=null;return t.ranges.length>1?n=Z.create([t.main]):t.main.empty||(n=Z.create([Z.cursor(t.main.head)])),n?(e(qt(i,n)),!0):!1};function Ki(i,e){if(i.state.readOnly)return!1;let t="delete.selection",{state:n}=i,a=n.changeByRange(s=>{let{from:r,to:o}=s;if(r==o){let l=e(s);lr&&(t="delete.forward",l=Ba(i,l,!0)),r=Math.min(r,l),o=Math.max(o,l)}else r=Ba(i,r,!1),o=Ba(i,o,!0);return r==o?{range:s}:{changes:{from:r,to:o},range:Z.cursor(r,ra(i)))n.between(e,e,(a,s)=>{ae&&(e=t?s:a)});return e}const Vf=(i,e,t)=>Ki(i,n=>{let a=n.from,{state:s}=i,r=s.doc.lineAt(a),o,l;if(t&&!e&&a>r.from&&aVf(i,!1,!0),Qf=i=>Vf(i,!0,!1),qf=(i,e)=>Ki(i,t=>{let n=t.head,{state:a}=i,s=a.doc.lineAt(n),r=a.charCategorizer(n);for(let o=null;;){if(n==(e?s.to:s.from)){n==t.head&&s.number!=(e?a.doc.lines:1)&&(n+=e?1:-1);break}let l=rt(s.text,n-s.from,e)+s.from,u=s.text.slice(Math.min(n,l)-s.from,Math.max(n,l)-s.from),m=r(u);if(o!=null&&m!=o)break;(u!=" "||n!=t.head)&&(o=m),n=l}return n}),Uf=i=>qf(i,!1),pR=i=>qf(i,!0),fR=i=>Ki(i,e=>{let t=i.lineBlockAt(e.head).to;return e.headKi(i,e=>{let t=i.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),bR=i=>Ki(i,e=>{let t=i.moveToLineBoundary(e,!0).head;return e.head{if(i.readOnly)return!1;let t=i.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:oe.of(["",""])},range:Z.cursor(n.from)}));return e(i.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},yR=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=i.changeByRange(n=>{if(!n.empty||n.from==0||n.from==i.doc.length)return{range:n};let a=n.from,s=i.doc.lineAt(a),r=a==s.from?a-1:rt(s.text,a-s.from,!1)+s.from,o=a==s.to?a+1:rt(s.text,a-s.from,!0)+s.from;return{changes:{from:r,to:o,insert:i.doc.slice(a,o).append(i.doc.slice(r,a))},range:Z.cursor(o)}});return t.changes.empty?!1:(e(i.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function pr(i){let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.from),s=i.doc.lineAt(n.to);if(!n.empty&&n.to==s.from&&(s=i.doc.lineAt(n.to-1)),t>=a.number){let r=e[e.length-1];r.to=s.to,r.ranges.push(n)}else e.push({from:a.from,to:s.to,ranges:[n]});t=s.number+1}return e}function Yf(i,e,t){if(i.readOnly)return!1;let n=[],a=[];for(let s of pr(i)){if(t?s.to==i.doc.length:s.from==0)continue;let r=i.doc.lineAt(t?s.to+1:s.from-1),o=r.length+1;if(t){n.push({from:s.to,to:r.to},{from:s.from,insert:r.text+i.lineBreak});for(let l of s.ranges)a.push(Z.range(Math.min(i.doc.length,l.anchor+o),Math.min(i.doc.length,l.head+o)))}else{n.push({from:r.from,to:s.from},{from:s.to,insert:i.lineBreak+r.text});for(let l of s.ranges)a.push(Z.range(l.anchor-o,l.head-o))}}return n.length?(e(i.update({changes:n,scrollIntoView:!0,selection:Z.create(a,i.selection.mainIndex),userEvent:"move.line"})),!0):!1}const wR=({state:i,dispatch:e})=>Yf(i,e,!1),zR=({state:i,dispatch:e})=>Yf(i,e,!0);function $f(i,e,t){if(i.readOnly)return!1;let n=[];for(let s of pr(i))t?n.push({from:s.from,insert:i.doc.slice(s.from,s.to)+i.lineBreak}):n.push({from:s.to,insert:i.lineBreak+i.doc.slice(s.from,s.to)});let a=i.changes(n);return e(i.update({changes:a,selection:i.selection.map(a,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const IR=({state:i,dispatch:e})=>$f(i,e,!1),kR=({state:i,dispatch:e})=>$f(i,e,!0),SR=i=>{if(i.state.readOnly)return!1;let{state:e}=i,t=e.changes(pr(e).map(({from:a,to:s})=>(a>0?a--:s{let s;if(i.lineWrapping){let r=i.lineBlockAt(a.head),o=i.coordsAtPos(a.head,a.assoc||1);o&&(s=r.bottom+i.documentTop-o.bottom+i.defaultLineHeight/2)}return i.moveVertically(a,!0,s)}).map(t);return i.dispatch({changes:t,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0};function TR(i,e){if(/\(\)|\[\]|\{\}/.test(i.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Xe(i).resolveInner(e),n=t.childBefore(e),a=t.childAfter(e),s;return n&&a&&n.to<=e&&a.from>=e&&(s=n.type.prop(ae.closedBy))&&s.indexOf(a.name)>-1&&i.doc.lineAt(n.to).from==i.doc.lineAt(a.from).from&&!/\S/.test(i.sliceDoc(n.to,a.from))?{from:n.to,to:a.from}:null}const Uc=Xf(!1),jR=Xf(!0);function Xf(i){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(a=>{let{from:s,to:r}=a,o=e.doc.lineAt(s),l=!i&&s==r&&TR(e,s);i&&(s=r=(r<=o.to?o:e.doc.lineAt(r)).to);let u=new mr(e,{simulateBreak:s,simulateDoubleBreak:!!l}),m=L0(u,s);for(m==null&&(m=Qi(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ro.from&&s{let a=[];for(let r=n.from;r<=n.to;){let o=i.doc.lineAt(r);o.number>t&&(n.empty||n.to>o.from)&&(e(o,a,n),t=o.number),r=o.to+1}let s=i.changes(a);return{changes:a,range:Z.range(s.mapPos(n.anchor,1),s.mapPos(n.head,1))}})}const _R=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=Object.create(null),n=new mr(i,{overrideIndentation:s=>{let r=t[s];return r??-1}}),a=Y0(i,(s,r,o)=>{let l=L0(n,s.from);if(l==null)return;/\S/.test(s.text)||(l=0);let u=/^\s*/.exec(s.text)[0],m=Ei(i,l);(u!=m||o.fromi.readOnly?!1:(e(i.update(Y0(i,(t,n)=>{n.push({from:t.from,insert:i.facet($i)})}),{userEvent:"input.indent"})),!0),e2=({state:i,dispatch:e})=>i.readOnly?!1:(e(i.update(Y0(i,(t,n)=>{let a=/^\s*/.exec(t.text)[0];if(!a)return;let s=Qi(a,i.tabSize),r=0,o=Ei(i,Math.max(0,s-Bs(i)));for(;r(i.setTabFocusMode(),!0),AR=[{key:"Ctrl-b",run:Cf,shift:Wf,preventDefault:!0},{key:"Ctrl-f",run:Af,shift:Ef},{key:"Ctrl-p",run:Mf,shift:Ff},{key:"Ctrl-n",run:Zf,shift:Rf},{key:"Ctrl-a",run:UF,shift:oR},{key:"Ctrl-e",run:YF,shift:lR},{key:"Ctrl-d",run:Qf},{key:"Ctrl-h",run:Ml},{key:"Ctrl-k",run:fR},{key:"Ctrl-Alt-h",run:Uf},{key:"Ctrl-o",run:vR},{key:"Ctrl-t",run:yR},{key:"Ctrl-v",run:Ol}],PR=[{key:"ArrowLeft",run:Cf,shift:Wf,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:NF,shift:KF,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:QF,shift:sR,preventDefault:!0},{key:"ArrowRight",run:Af,shift:Ef,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:JF,shift:eR,preventDefault:!0},{mac:"Cmd-ArrowRight",run:qF,shift:rR,preventDefault:!0},{key:"ArrowUp",run:Mf,shift:Ff,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Hc,shift:Qc},{mac:"Ctrl-ArrowUp",run:Fc,shift:Rc},{key:"ArrowDown",run:Zf,shift:Rf,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Vc,shift:qc},{mac:"Ctrl-ArrowDown",run:Ol,shift:Gc},{key:"PageUp",run:Fc,shift:Rc},{key:"PageDown",run:Ol,shift:Gc},{key:"Home",run:VF,shift:aR,preventDefault:!0},{key:"Mod-Home",run:Hc,shift:Qc},{key:"End",run:HF,shift:iR,preventDefault:!0},{key:"Mod-End",run:Vc,shift:qc},{key:"Enter",run:Uc,shift:Uc},{key:"Mod-a",run:uR},{key:"Backspace",run:Ml,shift:Ml,preventDefault:!0},{key:"Delete",run:Qf,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Uf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:pR,preventDefault:!0},{mac:"Mod-Backspace",run:xR,preventDefault:!0},{mac:"Mod-Delete",run:bR,preventDefault:!0}].concat(AR.map(i=>({mac:i.key,run:i.run,shift:i.shift}))),OR=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:RF,shift:tR},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:GF,shift:nR},{key:"Alt-ArrowUp",run:wR},{key:"Shift-Alt-ArrowUp",run:IR},{key:"Alt-ArrowDown",run:zR},{key:"Shift-Alt-ArrowDown",run:kR},{key:"Mod-Alt-ArrowUp",run:dR},{key:"Mod-Alt-ArrowDown",run:hR},{key:"Escape",run:gR},{key:"Mod-Enter",run:jR},{key:"Alt-l",mac:"Ctrl-l",run:mR},{key:"Mod-i",run:cR,preventDefault:!0},{key:"Mod-[",run:e2},{key:"Mod-]",run:Kf},{key:"Mod-Alt-\\",run:_R},{key:"Shift-Mod-k",run:SR},{key:"Shift-Mod-\\",run:XF},{key:"Mod-/",run:MF},{key:"Alt-A",mac:"Ctrl-A",run:DF},{key:"Ctrl-m",mac:"Shift-Alt-m",run:CR}].concat(PR),MR={key:"Tab",run:Kf,shift:e2};var Yc={};class Es{constructor(e,t,n,a,s,r,o,l,u,m=0,c){this.p=e,this.stack=t,this.state=n,this.reducePos=a,this.pos=s,this.score=r,this.buffer=o,this.bufferBase=l,this.curContext=u,this.lookAhead=m,this.parent=c}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,n=0){let a=e.parser.context;return new Es(e,[],t,n,n,0,[],0,a?new $c(a,a.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let n=e>>19,a=e&65535,{parser:s}=this.p,r=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[a])===null||t===void 0)&&t.isAnonymous)&&(u==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=m):this.p.lastBigReductionSizel;)this.stack.pop();this.reduceContext(a,u)}storeNode(e,t,n,a=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[r-4]==0&&this.buffer[r-1]>-1){if(t==n)return;if(this.buffer[r-2]>=t){this.buffer[r-2]=n;return}}}if(!s||this.pos==n)this.buffer.push(e,t,n,a);else{let r=this.buffer.length;if(r>0&&(this.buffer[r-4]!=0||this.buffer[r-1]<0)){let o=!1;for(let l=r;l>0&&this.buffer[l-2]>n;l-=4)if(this.buffer[l-1]>=0){o=!0;break}if(o)for(;r>0&&this.buffer[r-2]>n;)this.buffer[r]=this.buffer[r-4],this.buffer[r+1]=this.buffer[r-3],this.buffer[r+2]=this.buffer[r-2],this.buffer[r+3]=this.buffer[r-1],r-=4,a>4&&(a-=4)}this.buffer[r]=e,this.buffer[r+1]=t,this.buffer[r+2]=n,this.buffer[r+3]=a}}shift(e,t,n,a){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let s=e,{parser:r}=this.p;this.pos=a;let o=r.stateFlag(s,1);!o&&(a>n||t<=r.maxNode)&&(this.reducePos=a),this.pushState(s,o?n:Math.min(n,this.reducePos)),this.shiftContext(t,n),t<=r.maxNode&&this.buffer.push(t,n,a,4)}else this.pos=a,this.shiftContext(t,n),t<=this.p.parser.maxNode&&this.buffer.push(t,n,a,4)}apply(e,t,n,a){e&65536?this.reduce(e):this.shift(e,t,n,a)}useNode(e,t,n){let a=this.p.reused.length-1;(a<0||this.p.reused[a]!=e)&&(this.p.reused.push(e),a++);let s=this.reducePos=this.pos=n+e.length;this.pushState(t,n),this.buffer.push(a,n,s,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let n=e.buffer.slice(t),a=e.bufferBase+t;for(;e&&a==e.bufferBase;)e=e.parent;return new Es(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,n,a,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new ZR(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if((n&65536)==0)return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let a=[];for(let s=0,r;sl&1&&o==r)||a.push(t[s],r)}t=a}let n=[];for(let a=0;a>19,a=t&65535,s=this.stack.length-n*3;if(s<0||e.getGoto(this.stack[s],a,!1)<0){let r=this.findForcedReduction();if(r==null)return!1;t=r}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],n=(a,s)=>{if(!t.includes(a))return t.push(a),e.allActions(a,r=>{if(!(r&393216))if(r&65536){let o=(r>>19)-s;if(o>1){let l=r&65535,u=this.stack.length-o*3;if(u>=0&&e.getGoto(this.stack[u],l,!1)>=0)return o<<19|65536|l}}else{let o=n(r,s+1);if(o!=null)return o}})};return n(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(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class $c{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class ZR{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let a=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=a}}class Ns{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Ns(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Ns(this.stack,this.pos,this.index)}}function La(i,e=Uint16Array){if(typeof i!="string")return i;let t=null;for(let n=0,a=0;n=92&&r--,r>=34&&r--;let l=r-32;if(l>=46&&(l-=46,o=!0),s+=l,o)break;s*=46}t?t[a++]=s:t=new e(s)}return t}class es{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Xc=new es;class DR{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Xc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,a=this.rangeIndex,s=this.pos+e;for(;sn.to:s>=n.to;){if(a==this.ranges.length-1)return null;let r=this.ranges[++a];s+=r.from-n.to,n=r}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,a;if(t>=0&&t=this.chunk2Pos&&no.to&&(this.chunk2=this.chunk2.slice(0,o.to-n)),a=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),a}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,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(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,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(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Xc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n="";for(let a of this.ranges){if(a.from>=t)break;a.to>e&&(n+=this.input.read(Math.max(a.from,e),Math.min(a.to,t)))}return n}}class P1{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;BR(this.data,e,t,this.id,n.data,n.tokenPrecTable)}}P1.prototype.contextual=P1.prototype.fallback=P1.prototype.extend=!1;P1.prototype.fallback=P1.prototype.extend=!1;function BR(i,e,t,n,a,s){let r=0,o=1<0){let g=i[h];if(l.allows(g)&&(e.token.value==-1||e.token.value==g||LR(g,e.token.value,a,s))){e.acceptToken(g);break}}let m=e.next,c=0,d=i[r+2];if(e.next<0&&d>c&&i[u+d*3-3]==65535){r=i[u+d*3-1];continue e}for(;c>1,g=u+h+(h<<1),f=i[g],x=i[g+1]||65536;if(m=x)c=h+1;else{r=i[g+2],e.advance();continue e}}break}}function Kc(i,e,t){for(let n=e,a;(a=i[n])!=65535;n++)if(a==t)return n-e;return-1}function LR(i,e,t,n){let a=Kc(t,n,e);return a<0||Kc(t,n,i)e)&&!n.type.isError)return t<0?Math.max(0,Math.min(n.to-1,e-25)):Math.min(i.length,Math.max(n.from+1,e+25));if(t<0?n.prevSibling():n.nextSibling())break;if(!n.parent())return t<0?0:i.length}}class WR{constructor(e,t){this.fragments=e,this.minRepeat=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.lastRepeat=null,this.lastRepeatPos=-1,this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?ed(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?ed(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=r,null;if(s instanceof Le){let o=r>this.lastRepeatPos&&s.type.id>=this.minRepeat;if(r==e||o){let l=r+s.length,u;if(r>=this.safeFrom&&l<=this.safeTo&&(!(u=s.prop(ae.lookAhead))||l+u=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(r),this.index.push(0))}else this.index[t]++,this.nextStart=r+s.length}}}class ER{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(n=>new es)}getActions(e){let t=0,n=null,{parser:a}=e.p,{tokenizers:s}=a,r=a.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,l=0;for(let u=0;uc.end+25&&(l=Math.max(c.lookAhead,l)),c.value!=0)){let d=t;if(c.extended>-1&&(t=this.addActions(e,c.extended,c.end,t)),t=this.addActions(e,c.value,c.end,t),!m.extend&&(n=c,t>d))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!n&&e.pos==this.stream.end&&(n=new es,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new es,{pos:n,p:a}=e;return t.start=n,t.end=Math.min(n+1,a.stream.end),t.value=n==a.stream.end?a.parser.eofTerm:0,t}updateCachedToken(e,t,n){let a=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(a,e),n),e.value>-1){let{parser:s}=n.p;for(let r=0;r=0&&n.p.parser.dialect.allows(o>>1)){(o&1)==0?e.value=o>>1:e.extended=o>>1;break}}}else e.value=0,e.end=this.stream.clipPos(a+1)}putAction(e,t,n,a){for(let s=0;se.bufferLength*4?new WR(n,e.minRepeatTerm):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],a,s;if(this.bigReductionCount>300&&e.length==1){let[r]=e;for(;r.forceReduce()&&r.stack.length&&r.stack[r.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let r=0;rt)n.push(o);else{if(this.advanceStack(o,n,e))continue;{a||(a=[],s=[]),a.push(o);let l=this.tokens.getMainToken(o);s.push(l.value,l.end)}}break}}if(!n.length){let r=a&&FR(a);if(r)return xt&&console.log("Finish with "+this.stackID(r)),this.stackToTree(r);if(this.parser.strict)throw xt&&a&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&a){let r=this.stoppedAt!=null&&a[0].pos>this.stoppedAt?a[0]:this.runRecovery(a,s,n);if(r)return xt&&console.log("Force-finish "+this.stackID(r)),this.stackToTree(r.forceAll())}if(this.recovering){let r=this.recovering==1?1:this.recovering*3;if(n.length>r)for(n.sort((o,l)=>l.score-o.score);n.length>r;)n.pop();n.some(o=>o.reducePos>t)&&this.recovering--}else if(n.length>1){e:for(let r=0;r500&&u.buffer.length>500)if((o.score-u.score||o.buffer.length-u.buffer.length)>0)n.splice(l--,1);else{n.splice(r--,1);continue e}}}n.length>12&&(n.sort((r,o)=>o.score-r.score),n.splice(12,n.length-12))}this.minStackPos=n[0].pos;for(let r=1;r-1&&n.length&&(!s||(n.prop(ae.contextHash)||0)==r))return e.useNode(n,o,t),n;if(n.children.length==0||n.positions[0]>0)break;let l=n.children[0];if(l instanceof Le&&(!a||l.type.id>=this.parser.minRepeatTerm))n=l;else break}return null}advanceStack(e,t,n){let a=e.pos,{parser:s}=this,r=xt?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&a>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let u=e.reducePos0)return e.reduce(o),xt&&console.log(r+this.stackID(e)+` (via always-reduce ${s.getName(o&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let u=0;ua?t.push(g):n.push(g)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return td(e,t),!0}}runRecovery(e,t,n){let a=null,s=!1;for(let r=0;r ":"";if(o.deadEnd&&(s||(s=!0,o.restart(),xt&&console.log(m+this.stackID(o)+" (restarted)"),this.advanceFully(o,n))))continue;let c=o.split(),d=m;for(let h=0;h<10&&c.forceReduce()&&(xt&&console.log(d+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,n));h++)xt&&(d=this.stackID(c)+" -> ");for(let h of o.recoverByInsert(l))xt&&console.log(m+this.stackID(h)+" (via recover-insert)"),this.advanceFully(h,n);this.stream.end>o.pos?(u==o.pos&&(u++,l=0),o.recoverByDelete(l,u),xt&&console.log(m+this.stackID(o)+` (via recover-delete ${this.parser.getName(l)})`),td(o,n)):(!a||a.scoree.topRules[o][1]),a=[];for(let o=0;o=0)s(m,l,o[u++]);else{let c=o[u+-m];for(let d=-m;d>0;d--)s(o[u++],l,c);u++}}}this.nodeSet=new M0(t.map((o,l)=>ft.define({name:l>=this.minRepeatTerm?void 0:o,id:l,props:a[l],top:n.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=tf;let r=La(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let o=0;otypeof o=="number"?new P1(r,o):o),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let a=new NR(this,e,t,n);for(let s of this.wrappers)a=s(a,e,t,n);return a}getGoto(e,t,n=!1){let a=this.goto;if(t>=a[0])return-1;for(let s=a[t+1];;){let r=a[s++],o=r&1,l=a[s++];if(o&&n)return l;for(let u=s+(r>>1);s0}validAction(e,t){return!!this.allActions(e,n=>n==t?!0:null)}allActions(e,t){let n=this.stateSlot(e,4),a=n?t(n):void 0;for(let s=this.stateSlot(e,1);a==null;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=dn(this.data,s+2);else break;a=t(dn(this.data,s+1))}return a}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=dn(this.data,n+2);else break;if((this.data[n+2]&1)==0){let a=this.data[n+1];t.some((s,r)=>r&1&&s==a)||t.push(this.data[n],a)}}return t}configure(e){let t=Object.assign(Object.create(Js.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let n=this.topRules[e.top];if(!n)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=n}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(n=>{let a=e.tokenizers.find(s=>s.from==n);return a?a.to:n})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((n,a)=>{let s=e.specializers.find(o=>o.from==n.external);if(!s)return n;let r=Object.assign(Object.assign({},n),{external:s.to});return t.specializers[a]=nd(r),r})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let s of e.split(" ")){let r=t.indexOf(s);r>=0&&(n[r]=!0)}let a=null;for(let s=0;sn)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scorei.external(t,n)<<1|e}return i.get}const RR=of({null:W.null,instanceof:W.operatorKeyword,this:W.self,"new super assert open to with void":W.keyword,"class interface extends implements enum var":W.definitionKeyword,"module package import":W.moduleKeyword,"switch while for if else case default do break continue return try catch finally throw":W.controlKeyword,"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws":W.modifier,IntegerLiteral:W.integer,FloatingPointLiteral:W.float,"StringLiteral TextBlock":W.string,CharacterLiteral:W.character,LineComment:W.lineComment,BlockComment:W.blockComment,BooleanLiteral:W.bool,PrimitiveType:W.standard(W.typeName),TypeName:W.typeName,Identifier:W.variableName,"MethodName/Identifier":W.function(W.variableName),Definition:W.definition(W.variableName),ArithOp:W.arithmeticOperator,LogicOp:W.logicOperator,BitOp:W.bitwiseOperator,CompareOp:W.compareOperator,AssignOp:W.definitionOperator,UpdateOp:W.updateOperator,Asterisk:W.punctuation,Label:W.labelName,"( )":W.paren,"[ ]":W.squareBracket,"{ }":W.brace,".":W.derefOperator,", ;":W.separator}),GR={__proto__:null,void:34,byte:36,short:36,int:36,long:36,char:36,float:36,double:36,boolean:36,extends:50,super:52,this:64,public:70,protected:72,private:74,abstract:76,static:78,final:80,strictfp:82,default:84,synchronized:86,native:88,transient:90,volatile:92,sealed:95,non:97,instanceof:140,true:158,false:158,null:166,class:170,new:176,throws:196,implements:204,permits:211,record:215,interface:226,enum:236,open:289,module:291,requires:296,transitive:298,exports:300,to:302,opens:304,uses:306,provides:308,with:310,package:314,import:318,if:330,else:332,while:336,for:340,var:347,assert:354,switch:358,case:366,throw:370,do:374,break:378,continue:382,return:386,try:392,catch:396,finally:404},HR=Js.deserialize({version:14,states:"#5QQ]QPOOQ%QQPOOO(wQQO'#HlO+OQQO'#CbOOQO'#Cb'#CbO+VQPO'#CaOOQO'#Co'#CoO,{QPO'#DOO-iQQO'#HvOOQO'#Hv'#HvO0^QQO'#HqO0eQQO'#HqOOQO'#Hq'#HqOOQO'#Hp'#HpOOQO'#Hz'#HzO0lQPO'#GwO2`QPO'#DOO2gQPO'#CkO4vQPO'#DfO4}QPO'#CiO6ZQQO'#FsO6bQPO'#DyO7rOSO'#EQOOQO'#IW'#IWO+VQPO'#EzO8iQPO'#EzOOQO'#EV'#EVO:QQQO'#ITOnQPO'#HzO>uQPO'#EcO>uQPO'#EjO>uQPO'#EuO>uQPO'#EpO>}QPO'#I[O?cQQO'#FRO+VQPO'#C`O?kQPO'#C`O+VQPO'#FnO?pQPO'#FpO@OQPO'#FvO@OQPO'#FyO>uQPO'#GOO@TQPO'#F{O6bQPO'#GSO6bQPO'#G[O@OQPO'#GUO]QPO'#G^O@YQPO'#G`O@eQPO'#GbO@pQPO'#GdO@wQPO'#GgOAeQQO'#CjOBTQQO'#CjOB_QPO'#I`OCzQPO'#DOODbQPO'#E]OBbQPO'#E^OESQPO'#I`OEeQPO'#E]OEmQPO'#IhOErQPO'#FOOOQO'#I^'#I^OOQO'#G}'#G}Q%QQPOOOGhQPO'#HzOOQO'#Hl'#HlOHZQQO,58{OOQO'#Hj'#HjOOQO'#Hr'#HrOJtQPO,59_OLSQPO,59jOOQO-E:r-E:rO+VQPO,58zOLyQPO,58zO+VQPO,5uQPO,5:}O>uQPO,5;UO>uQPO,5;aO>uQPO,5;[O>uQPO,5gO6bQPO'#EUO@zQPO,5=QO!0rQPO,5:}O!1TQPO,5;UO!1]QPO,5;aO!1eQPO,5;[O!-SQPO,5>vO!1sQPO,5>vO!-SQPO,5>vO!2OQPO,5;mO!2aQQO,58zO!2iQQO,5zOB_QPO,5:vO!;WQPO,5:wOErQPO,5;jO!;`QPO'#E_OBbQPO'#E_O!;kQPO'#IaO!;sQPO,5:xOB_QPO,5>zO!-SQPO,5>zOEmQPO,5?SOOQO,5:w,5:wO!+VQPO'#CkOOQO,5?S,5?SO!?pQPO'#FPOOQO,5;j,5;jO!?wQPO,5;jO!-SQPO'#EaOOQO-E:{-E:{OOQO,5;i,5;iO+VQPO,58}O!?|QPO'#ChOOQO1G.k1G.kO!2aQQO1G.fO+VQPO1G.fO!@WQQO1G1tOOQO,59f,59fO!@`QPO,59fOOQO-E:t-E:tO!@eQPO,5>iO!@|QPO,59zO>uQPO'#HOO!ATQPO,5>yOOQO1G2U1G2UOOQO1G0Y1G0YO!AnQPO'#CsO!B^QPO'#HvO!BkQPO'#CtO!ByQPO'#HuO!CRQPO,59^OOQO1G.v1G.vO!#aQPO1G.vO!CiQPO,59_O!CvQQO'#HlO!DXQQO'#CbO!DjQPO,59yOOQO,59i,59iO>uQPO,59yOOQO,59W,59WO!DuQQO,59WO!DzQPO,59iO!,oQPO'#GyO!E]QPO,5>eOOQO1G.q1G.qO!EeQPO'#C}O!EvQPO1G.qO>uQPO'#GzO!E{QPO,5>mOOQO1G/k1G/kOOQO1G0[1G0[O!-SQPO'#HPO!FTQPO1G1cO6bQPO1G1cOOQO1G/l1G/lO!F]QQO1G.oOOQO1G.o1G.oO!HZQQO1G/mO!IxQQO1G/mO!KgQQO1G/mO!KnQQO1G/mO!KuQQO1G/mO!MdQQO1G/mO!MkQQO1G/mO# YQQO1G/mO# aQQO1G/mO# kQQO1G/mO# rQQO1G/|O!)dQPO'#DOO# yQQO'#HvO!*jQPO'#DuOOQO1G/y1G/yO##`QQO1G1dOOOO-E:y-E:yOOQO1G0W1G0WO##vQPO'#E{OOQO1G1Q1G1QO#$jQPO1G2UO!-{QPO1G1QO!0rQPO1G0iO!1TQPO1G0pO!1]QPO1G0{O!1eQPO1G0vOOQO1G0]1G0]O#$oQQO1G1XO}QPO'#I[OOQO1G1X1G1XO#&iQQO1G1XO#&qQQO1G1YOOQO1G1]1G1]O#&xQPO1G1]O#'TQQO'#I]O#'bQPO,5:sOOQO1G1z1G1zOOQO1G4R1G4ROOQO1G2l1G2lO#'gQPO'#EYO!-SQPO'#EdO!-SQPO'#EeO!-SQPO'#EhOOQO1G0i1G0iO#'nQPO1G0iO#'sQPO1G0iO#'{QPO1G0iO#(WQPO1G0iO#(fQPO'#ElO#(|QPO1G0pO#)UQPO1G0pO#)ZQPO'#EwOOQO1G0{1G0{O#)nQPO1G0{O#)sQPO'#EsO!-SQPO'#ErOOQO1G0v1G0vO#*pQPO1G0vO#*uQPO1G0vO#*}QPO1G0vO!1sQPO1G4bO#+YQPO'#FXO#+aQPO'#FXOOQO'#HX'#HXO#+iQQO1G1^O#-fQQO1G4bO!-SQPO1G4bO|OOQO1G0b1G0bOOQO1G4f1G4fO#DXQPO1G0bOOQO1G0c1G0cOOQO1G1U1G1UO!?wQPO1G1UOOQO,5:y,5:yO!-SQPO'#E`O#D^QPO,5:yOBbQPO'#HQO#DiQPO,5>{OOQO1G0d1G0dOEmQPO'#IbO#DqQPO1G4fOB_QPO1G4fOOQO1G4n1G4nO!)tQPO'#C}O!)dQPO'#DOOOQO,5;k,5;kO#D|QPO,5;kO#ETQPO,5;kO#E[QQO'#ITO#EcQQO'#IVO#EjQQO'#FQO#EuQPO'#FQO#E}QPO'#IcOOQO,5:{,5:{OOQO1G.i1G.iO#F]QQO'#HnO#FmQQO'#FUO#HTQPO'#F`OOQO'#Hn'#HnO#H_QPO'#HnO#H|QPO'#IkO#IUQPO,59SOOQO7+$Q7+$QO!2aQQO7+$QOOQO7+'`7+'`OOQO1G/Q1G/QO#IZQPO'#DdO#IeQQO'#IPOOQO'#IP'#IPOOQO1G/f1G/fOOQO,5=j,5=jOOQO-E:|-E:|O#IuQWO,58{O#I|QPO,59`OOQO,59`,59`O!-SQPO'#HxO!!tQPO'#GuO#J[QPO,5>aOOQO1G.x1G.xOOQO7+$b7+$bOOQO1G.r1G.rO#JdQQO1G.rO>uQPO1G/eOOQO1G/e1G/eO#JiQPO1G.rO#JnQPO1G/eOOQO1G/T1G/TOOQO,5=e,5=eOOQO-E:w-E:wOOQO7+$]7+$]OOQO,5=f,5=fOOQO-E:x-E:xOOQO,5=k,5=kOOQO-E:}-E:}O6bQPO7+&}O#JyQQO7+&}O6bQPO7+%hO#LgQQO,59_OOQO,5:a,5:aOB_QPO,5:aO#MvQPO'#EtO#NUQPO'#EtOOQO'#HW'#HWO#NpQPO,5;gOOQO,5;g,5;gOOQO7+'p7+'pOOQO7+&l7+&lOOQO7+&T7+&TO#'nQPO7+&TO#'sQPO7+&TO#'{QPO7+&TO#(WQPO7+&TO#(|QPO7+&[O#)UQPO7+&[OOQO7+&g7+&gO#)nQPO7+&gOOQO7+&b7+&bO#*pQPO7+&bO#*uQPO7+&bO#*}QPO7+&bOOQO7+&u7+&uOOQO'#FU'#FUOvOvO$ dQPO7+&sO$ rQPO7+&wOOQO7+&t7+&tOOQO7+&w7+&wO6bQPO'#G|O$!QQPO,5>wOOQO1G0_1G0_O$!]QPO,5:tOOQO,5:t,5:tOOQO,5;O,5;OOOQO'#Eg'#EgOOQO,5;P,5;POOQO,5;S,5;SO$!dQPO'#EmO!*jQPO'#EmO$!uQPO'#IdO$!}QPO,5;WO$#SQPO'#EnOOQO7+&[7+&[O$#ZQPO7+&[O$#`QPO'#ExO>uQPO'#ExO$#qQPO'#IfO$#|QPO,5;cOB_QPO'#I`O!-SQPO'#I`O$$UQPO'#E]OOQO'#HU'#HUO$$]QPO,5;_OOQO,5;_,5;_OOQO,5;^,5;^O$%YQQO7+&xO$'VQQO7+)|O$)PQQO,5;sOOQO,5;s,5;sO$)WQPO,5;sOOQO-E;V-E;VOOQO7+&x7+&xOOQO7+)|7+)|O}O$4VQPO,5;{O$4^QPO'#IjO$4fQPO,5;zO+VQPO'#HZO$4kQPO,5?VOOQO1G.n1G.nOOQO<d,5>dOOQO,5=a,5=aOOQO-E:s-E:sO$5QQPO7+$^OOQO7+%P7+%POOQO7+$^7+$^O>uQPO7+%PO$5VQQO<uQPO,5;XOOQO,5;X,5;XO$;zQPO,5;XO!,oQPO'#HSO$<]QPO,5?OOOQO1G0r1G0rODbQPO'#E]O$WQPO'#EyOOQO1G0}1G0}O$>_QPO1G0}OB_QPO,5;`OOQO-E;S-E;SOOQO1G0y1G0yOOQO<dQQO1G1_O$>kQQO<uQPO,5=VO!*jQPO,5=VOOQO1G2o1G2oOOQO<lOOQO1G/j1G/jOOQO<uQPO1G0sOOQO1G0s1G0sO$HSQPO1G0sOOQO,5=n,5=nOOQO-E;Q-E;QO$uQPO1G2qOOQO<uQPO7+&_OOQO1G0u1G0uOOQO7+&j7+&jOOQO7+'V7+'VO+VQPO'#H^O$JtQPO,5?XO$J|QPO7+'VO$KRQQO'#InOOQOAN@yAN@yO$K^QQOAN@yOOQOAN@uAN@uO$KeQPOAN@uO$KjQQO<`!>cP!=^!>{!=^P!=^P!?O!?R!?VP!{#?U#?XP0oP#?]!)]PPP#Ae#Cm#C|#DY#Dr#ET#EW#Ed#El#Eo#EsP#EvP#FU#FX#F[#F`#Ff#FiwuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u)usOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%q%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h)r){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-[-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u/}0T0j0u1S1V1Z1]1^1j2Q2R2X2Z2[2e2i2k2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n$xlOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nv!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rQ$ShS&_#`)dQ'V$UU']$[$n-VQ'd$^W(w%U,n/i1]U)o%p(^,]Q)q%qS*[&W-RU+U'_.W/vQ+]'eQ-s*oQ.T+YQ.X+ZQ0Q-_Q0]-tR0g.Yw!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rT%r!s*R${rOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n$OcObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3n^!lP!h!p'k+a.p0u|#RW!Y#`$T$Z%{&]&`&d(d(u)d*]*o+g,`,m-l-t.a/n1aS#ea3mQ$g|Q$h}Q$i!OQ$j!PW%Y!f%]+r.sS%`!i)]Q%f!jQ'W$VQ'X$WQ'Y$XQ'Z$YQ)[%aS)`%d)bQ*e&fQ*m&|S+n'w.nQ-o*nS.f+k.iQ.m+oQ0i._Q0m.eQ1r0hQ2^1sw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nU%i!l.f0mS)R%Y)`Q)c%fw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3iV#da%h3m'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ&U#YQ*Y&VX/k,s/o1^2R'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/k,s/o1^2R'fZOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/l,s/o1^2RS#XY/kS$m!Q'`S'_$[$nQ'e$^S)l%j)hQ.W+YQ.Y+ZR/v-V%mXOabepy![!]!_!b#W#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|$]$_$b$e$t$u$v$w$x%U%j%m%q%z&j&l'l'm'n'{(R(f(k(m)Z)g)h)r){*U*V*i*k+^+},^,b,c,g,j,n-T-U-Y-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ&S#WR-g*V'c]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n!w#PW!f!v#Q#R#`$O$T%X%Y%]%d%y&Q&W&`&d&|(d(u)R)b)d*l*n*o+g+r,`,m,x-R-t.a.s/m1j2Q2X2[2e2kW#ba#d%h3mR*b&aviOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u[!hP!p'k+a.p0uY#aa#d%h&a3mQ&}#{Q(e$vW(y%U,n/i1]S*p'S*rS+h't.bS+o'w.nS+t'z+vS.e+k.iR/o,sh#TW!Y!f$T$Z%](d*o+r,`-t.sQ*P%{Q*^&]Q-j*]R0X-lU)}%z){0TQ,P(UR.v+y$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3ivwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uQ%V!cQ%g!kQ%o!qS&o#k2wQ'j$fQ)Q%WQ)V%^Q,u)OQ/p,tQ0n.fQ1W/^R1t0m${qOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n!^#od#g$y$z%S&n&p&r&s&t&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lg2y/b3U3V3X3Y3Z3[3]3a3e3f!Y#rd#g$y$z%S&n&r&s&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lc2|/b3U3X3Y3[3]3a3e3fR'O#{%TgOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%ToOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%SoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ$f{Q$t!WQ$u!XQ${!^R,k(oQ$`mS(V$l+XQ+T'^S+z(Q(XS-W)j)kQ.S+VQ.l+nQ.z,RQ/y-XQ0e.VQ0r.mQ1d/wQ1q0fR2V1cQ'o$gY*v'W'p'q'r'sQ,Q(VW-w*w*x*y*zQ.k+nQ.w+zU0^-x-y-zS0q.l.mQ0x.zS1m0_0`Q1u0rR2]1na!nP!p'k+a+k.i.p0u`!nP!p'k+a+k.i.p0uT+u'z+vd!jP!h!p'k+a+k.e.i.p0uQ's$gQ'v$hQ(P$jQ*z'WQ*|'XQ+S'ZV+s'z+t+vQ%b!iR,})]Q)Y%`R,|)[Q%l!mQ)T%[Q)X%_Q-P)aR/s-QvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uS*q'S*rT+u'z+vQ'r$gS*y'W'sR-z*zQ'q$gQ'y$iU*x'W'r'sQ+O'YQ+m'uS-y*y*zQ-|*{Q0`-zR0b-}Q+e'mQ+f'nR+x'{Q'p$gQ'}$jW*w'W'q'r'sU+Q'Z(O(PU-x*x*y*zS.Q+R+SS0_-y-zQ0d.RR1n0`Q'u$hS*{'X'vR-}*|Q+i'tR0k.bQ+l'uS-{*{+mS0a-|-}R1o0bT.g+k.iQ(O$jS+R'Z(PR.R+SQ'|$jW+P'Z'}(O(PU.P+Q+R+SS0c.Q.RR1p0dvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uT+u'z+vQ'x$iS*}'Y'yR.O+OQ+p'wR0s.nR.r+qQ'T$SR*u'VT*q'S*rQ%k!mS)W%_%lR,z)XQ)g%jR-U)h$zoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nX(x%U,n/i1]%SmOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nU'^$[$n-VS+V'_/vQ.V+YR0f.WX(T$l(Q(U+y_)s%q)r-[/}2Z2i2nQ)u%qR0R-_Q([$oQ)w%sR-b)xT,S(Z,TvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR1W/^wwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uvvOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uQ%P!`R%R!aR$w!ZvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR(f$vR$x!ZR(n${T,f(m,gT,e(m,gX({%V(|)Q,vR,t(}Q/n,sR1a/oQ)P%VQ,r(|Q,w)QR/q,vR%W!cQ(z%UV/g,n/i1]QyOQ#jbY$cy#j)h-T/uQ)h%jQ-T)gR/u-UvVOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uv!gP!p#d&a'S'k't'w'z*r+a+k+v,s.b.i.n.p0u|!xV!g#O#Z#_#}$k%a%e&P&V&Z&{(S(W)e*`+W.^0j2R3`!f#OW!f!v#R$O$T%Y%]%d%y&Q&W&|(d(u)R)b*l*n*o+r,`,m,x-R-t.s/m1j2Q2X2[2e2kQ#Z_S#_a3m$`#}ep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%m%q%z&j&l'l'm'n'{(R(f(k)Z)r){*U*i*k+^+},b,c,j-Y-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$k!QS%a!i)]S%e!j+sS&P#W*VQ&V#YU&Z#`&d)dQ&{#{W(S$l(Q(U+yQ(W$mQ)e%hQ*`&`Q+W'`Q.^+gQ0j.aQ2R1^Z3`$v%U,n/i1]Q*W&SR-h*W^#QW#`$O&|(d(u*l!Q%X!f!v$T%]%d&Q&W&`&d)b)d*n*o+g+r,`,m-R-t.a.s/m2Q2e[%x#Q%X%y,x2X2kS%y#R%YQ,x)RQ2X1jR2k2[#Q`OPaby!_!p#d#j#{$b$t$u$v$w$x%U%h%j&a'S'k't'w'z(m)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3m[!wV!g#_&{)e3`T#[`!wQ0U-cR1i0UQ&b#bR*c&bQ&g#eR*f&gQ$QfR'Q$QQ+_'fS.[+_1XR1X/bQ!pPU%n!p+a0uQ+a'kR0u.pQ%|#TR*Q%|Q&k#hU*h&k/r3kQ/r,{R3k3jQ)^%bR-O)^Q-Z)mR/{-ZQ.c+iR0l.cQ.i+kR0o.iQ+v'zR.t+vQ.o+pR0t.oQ*r'SR-u*rQ(U$lQ+y(QT,O(U+yQ0O-]R1g0OQ-`)uR0S-`Q,T(ZR.{,TQ/P,VR0{/PQ1x0|S2`1x2bR2b1zQ,g(mR/`,gQ(|%VS,q(|,vR,v)QQ1_/mR2S1_Q,o(zR/j,odxOby#j%j)g)h-T-U/uQ$|!_Q'h$bQ(b$tQ(c$uQ(h$wQ(i$xS,f(m,gR/V,^)ftOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u0T0j0u1S1V1Z1]1^1j2Q2R2X2[2e2k2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n_)t%q)r-[/}2Z2i2nQ!sTQ$o!SQ$p!UQ$q!VQ%s!yQ%u!{Q(`$rQ(a$sQ)x%tQ*R2rS.},V,XQ/R,WQ/S,YQ0z/PS0|/R1OQ1z1PR2_1w&{SOTabehpy!S!U!V![!]!_!b!y!{#`#j#k#n#o#p#q#r#s#t#u#v#w#x#|$U$[$]$^$_$b$e$n$r$s$t$u$v$w$x%U%j%p%q%t%z&W&l'_'e(R(^(f(k(m)d)g)h)r){*i*k*o+Y+Z+^+},V,W,X,Y,],^,b,c,g,j,n-R-T-U-V-[-_-t.W.Y/P/R/W/Y/^/e/i/u/v/}0T1O1P1S1V1Z1]1w2Z2i2n2r2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ)v%qQ-])rQ/|-[Q1f/}Q2j2ZQ2l2iR2p2nxdOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/^/uU#ga$e3mS#ye3hS$ap3iQ$y![Q$z!]Q%S!bQ&n#kQ&p#nQ&q#oQ&r#pQ&s#qQ&t#rQ&u#sQ&v#tQ&w#uS&x#v3QQ&y#wQ&z#xQ'P#|Q'c$]Y'f$_$v,b/Y1V^)p%q)r-[/}2Z2i2nU)|%z){0TS*j&l3TQ+{(RQ,a(fQ,d(kS-m*i3bQ-n*kQ.Z+^Q.y+}Q/[,cQ/b,jQ1R/WQ1Y/eQ1|1SQ2P1ZQ3U2wQ3V2xQ3W2yQ3X2zQ3Y2{Q3Z2|Q3[2}Q3]3OQ3^3PQ3_3RQ3a3SQ3e3cQ3f3dR3l3nvWOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!fP!p'k+a+k.i.p0uW!vV#}&P3`S#`a3m#|$Oep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%q%z&l(R(f(k)r){*i*k+^+},b,c,j-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$TiS%]!h.eS%d!j+sf&Q#W%m&j'l'm'n'{)Z*U*V-YQ&W#_Q&`#aS&d#d&aQ&|#{Q(d$vW(u%U,n/i1]Q)b%eQ)d%hQ*l&{Q*n&}S*o'S*rS+g't.bS+r'z+vQ,`(eQ,m(yQ-R)eQ-t*pQ.a+hQ.s+tS/m,s/oQ2Q1^R2e2R'b]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ$l!QQ(Q$kS(X$m+WQ+X'`R,R(W'sUOPVabeipy!Q![!]!_!b!h!j!p#W#Y#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&V&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nR&T#W%OnObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ#haQ&S#WQ'O#{W)m%m'm'n'{Q*g&jQ+c'lQ,{)ZQ-f*UQ-g*VQ/z-YR3j3mQ*T&RR-e*SU#ca%h3mR&e#d#c_OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3m#c^OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3ml#SW!Y!f$T$Z%]%{&]*]*o+r-l-t.sU&[#`&d)dQ*a&`Q,_(dQ,l(uQ.`+gQ/X,`Q/f,mQ0i.aQ1`/nR2U1aQ*O%zQ-c){R1h0TR-d){T#fa3m$vkOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%q%z&l(R(f(k(m)g)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nW(v%U,n/i1]T)i%j)h%SjOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nT'[$[-VQ'g$_Q(g$vQ/Z,bQ1T/YR2O1V[!oP!p'k+a.p0uT.g+k.iU#UW!Y(dQ%Z!fU'U$T$Z,`Q)U%]S-r*o+rT0[-t.sd!kP!p'k'z+a+k+v.i.p0uV%^!h+t.eR%c!iW%[!f%]+r.sQ)a%dR-Q)bQ)n%mV+d'm'n'{R+j'tT.h+k.iR+q'w`!mP!p'k+a+k.i.p0uT%_!h.eR-^)rR)v%qT/O,V/PQ0}/RR1y1OR1y1PR/c,j",nodeNames:"⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList LambdaExpression Definition FormalParameters ReceiverParameter void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ this FormalParameter Modifiers public protected private abstract static final strictfp default synchronized native transient volatile sealed non SpreadParameter VariableDeclarator AssignOp } { ArrayInitializer InferredParameters Block BinaryExpression CompareOp CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp BitOp InstanceofExpression instanceof TypePattern TernaryExpression LogicOp : UpdateExpression UpdateOp IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral class ParenthesizedExpression ObjectCreationExpression new ArgumentList ClassBody ; FieldDeclaration MethodDeclaration TypeParameters TypeParameter TypeBound Throws throws ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList Permits permits RecordDeclaration record RecordHeader RecordComponent RecordBody CompactConstructorDeclaration InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation FieldAccess ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension UnaryExpression LogicOp BitOp CastExpression AssignmentExpression AssignOp ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchRule SwitchLabel case ThrowStatement throw DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent",maxTerm:296,nodeProps:[["isolate",-4,1,2,80,81,""],["group",-27,4,56,91,99,106,112,117,122,156,158,161,162,164,167,169,172,174,176,178,184,186,188,190,192,194,195,203,"Statement",-25,6,13,32,57,69,72,75,77,78,79,80,81,82,83,84,86,87,129,130,131,133,134,136,139,140,"Expression",-7,17,18,19,20,21,23,28,"Type"],["openedBy",10,"(",52,"{"],["closedBy",11,")",53,"}"]],propSources:[RR],skippedNodes:[0,1,2],repeatNodeCount:30,tokenData:"#$g_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu2zuv4avw5qwx7Xxy?pyz@^z{@z{|Ap|}CW}!OCt!O!PEa!P!QNZ!Q!R!+P!R![!.k![!]!;T!]!^!osw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}P>rVOY>oZw>owx?Xx#O>o#P;'S>o;'S;=`?^<%lO>oP?^O!rPP?aP;=`<%l>oT?gP;=`<%l<}T?mP;=`<%l8P_?wVZZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV@eVYR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVATX$fP&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVAwZ!dR&}SOY%QYZ%lZr%Qrs%qs{%Q{|Bj|!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVBqV!nR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVC_VkR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_C}[&pW!dR&}SOY%QYZ%lZr%Qrs%qs}%Q}!OBj!O!_%Q!_!`5T!`!aDs!a;'S%Q;'S;=`&s<%lO%QVDzV&vR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_EhZWY&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PFZ!P!Q%Q!Q![Gi![;'S%Q;'S;=`&s<%lO%QVF`X&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PF{!P;'S%Q;'S;=`&s<%lO%QVGSV&rR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTGpc&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#R%Q#R#SMc#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTISV&}S!pPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIn]&}SOY%QYZ%lZr%Qrs%qs{%Q{|Jg|}%Q}!OJg!O!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTJlX&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTK`c&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![!f%Q!f!gH{!g!h%Q!h!iH{!i#R%Q#R#SLk#S#W%Q#W#XH{#X#Y%Q#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTLpZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![#R%Q#R#SLk#S;'S%Q;'S;=`&s<%lO%QTMhZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![#R%Q#R#SMc#S;'S%Q;'S;=`&s<%lO%Q_Nb]&}S!eQOY%QYZ%lZr%Qrs%qsz%Qz{! Z{!P%Q!P!Q!'|!Q!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%Q_! `X&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!!QT&}SOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!dTOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!vVOz!!az{!!s{!P!!a!P!Q!#]!Q;'S!!a;'S;=`!#b<%lO!!aZ!#bOQZZ!#eP;=`<%l!!a_!#kXOY!$WYZ! {Zr!$Wrs!&bsz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!$ZXOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!${Z&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!%uV&}SQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!&_P;=`<%l! Z_!&eXOY!$WYZ! {Zr!$Wrs!!asz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!'TZOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!'yP;=`<%l!$W_!(TV&}SPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!(oVPZOY!)UYZ%lZr!)Urs!)vs;'S!)U;'S;=`!*y<%lO!)U_!)ZVPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!)sP;=`<%l!'|_!){VPZOY!)UYZ%lZr!)Urs!*bs;'S!)U;'S;=`!*y<%lO!)UZ!*gSPZOY!*bZ;'S!*b;'S;=`!*s<%lO!*bZ!*vP;=`<%l!*b_!*|P;=`<%l!)UT!+Wq&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!d%Q!d!e!1u!e!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o!z%Q!z!{!3s!{#R%Q#R#S!0}#S#U%Q#U#V!1u#V#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a#l%Q#l#m!3s#m;'S%Q;'S;=`&s<%lO%QT!-fa&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QT!.ri&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o#R%Q#R#S!0}#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!0hV&}S!oPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!1SZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!.k![#R%Q#R#S!0}#S;'S%Q;'S;=`&s<%lO%QT!1zY&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S;'S%Q;'S;=`&s<%lO%QT!2q`&}S!oPOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S!n%Q!n!o!0a!o#R%Q#R#S!1u#S#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!3x_&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!P!4w!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QT!4|]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i#T%Q#T#Z!5u#Z;'S%Q;'S;=`&s<%lO%QT!5zc&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#R%Q#R#S!4w#S#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!7^i&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8{!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i!n%Q!n!o!0a!o!r%Q!r!sIi!s#R%Q#R#S!:V#S#T%Q#T#Z!7V#Z#`%Q#`#a!0a#a#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!9Qa&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!:[]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QV!;[X!lR&}SOY%QYZ%lZr%Qrs%qs![%Q![!]!;w!];'S%Q;'S;=`&s<%lO%QV!l!`;'S%Q;'S;=`&s<%lO%QU!>PX!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU!>sV!]Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?aX!TR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!@TY&gR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`!>l!`!a!@s!a;'S%Q;'S;=`&s<%lO%QU!@zY!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`!a!=x!a;'S%Q;'S;=`&s<%lO%Q_!AsV&kX!kQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!BaX&]Z&}SOY%QYZ%lZr%Qrs%qs#]%Q#]#^!B|#^;'S%Q;'S;=`&s<%lO%QV!CRX&}SOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Cn#c;'S%Q;'S;=`&s<%lO%QV!CsX&}SOY%QYZ%lZr%Qrs%qs#h%Q#h#i!D`#i;'S%Q;'S;=`&s<%lO%QV!DeX&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!EQ#Y;'S%Q;'S;=`&s<%lO%QV!EVX&}SOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Er#g;'S%Q;'S;=`&s<%lO%QV!EwX&}SOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Fd#Z;'S%Q;'S;=`&s<%lO%QV!FiX&}SOY%QYZ%lZr%Qrs%qs#T%Q#T#U!GU#U;'S%Q;'S;=`&s<%lO%QV!GZX&}SOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Gv#W;'S%Q;'S;=`&s<%lO%QV!G{X&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Hh#Y;'S%Q;'S;=`&s<%lO%QV!HoV'ZR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!I]b&aZ&}SOY%QYZ%lZr%Qrs%qst%Qtu!IUu!Q%Q!Q![!IU![!c%Q!c!}!IU!}#R%Q#R#S!IU#S#T%Q#T#o!IU#o$g%Q$g;'S!IU;'S;=`!Je<%lO!IU_!JhP;=`<%l!IU_!JrVoZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!K`VmR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!K|X!cQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QV!LpV!VR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!M`Z'dX!bQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`#p%Q#p#q!NR#q;'S%Q;'S;=`&s<%lO%QU!NYV!`Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!NvV!UR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT# dV$OP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!Su&}S&XZ&_ZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2z",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,206]},dynamicPrecedences:{21:1,246:-1,252:-1},specialized:[{term:245,get:i=>GR[i]||-1}],tokenPrec:9164}),VR=Zs.define({name:"java",parser:HR.configure({props:[cf.add({IfStatement:$r({except:/^\s*({|else\b)/}),TryStatement:$r({except:/^\s*({|catch|finally)\b/}),LabeledStatement:pJ,SwitchBlock:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:n?1:2)*i.unit},Block:gJ({closing:"}"}),BlockComment:()=>null,Statement:$r({except:/^{/})}),bJ.add({"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer":vJ,BlockComment(i){return{from:i.from+2,to:i.to-2}}})]}),languageData:{commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\})$/}});function QR(){return new rJ(VR)}const qR=" ";function UR(i,e){let t="",n=e;for(let a=0;a{var x,b;const o=s.trim(),l=a,{chars:u,comment:m}=UR(s,a);a=m;const c=l?0:((x=/^[}\])\s]*/.exec(o)[0].match(/[}\])]/g))==null?void 0:x.length)??0,d=n.slice(0,Math.max(0,n.length-c));$R.test(o)&&((b=d.at(-1))!=null&&b.inCase)&&(d.at(-1).inCase=!1);const h=YR(d);for(const v of u)"{[(".includes(v)?n.push({line:r,char:v}):n.pop();const g=n.at(-1);(g==null?void 0:g.line)===r&&g.char==="{"&&/^switch\b/.test(o)&&(g.char="switch"),(g==null?void 0:g.char)==="switch"&&XR.test(o)&&(g.inCase=!0);const f=r+1;return ft||l&&!o.startsWith("*")?s:o===""?"":qR.repeat(h)+(l?" ":"")+o}).join(` -`)}const KR=[">>>=","<<=",">>=","...","->","::","++","--","&&","||","==","!=","<=",">=","+=","-=","*=","/=","%=","&=","|=","^=","<<"],eG=new Set(["=","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>>=","->","&","|","^","<<"]),tG=new Set(["+","-","*","/","%"]),nG=new Set(["return","case","throw","new","else","do","yield","assert","instanceof"]),iG=new Set(["byte","short","int","long","float","double","char","boolean"]),aG=new Set(["if","for","while","switch","catch","synchronized","try"]),sG=new Set(["else","catch","finally"]);function rG(i){const e=[];let t=1,n=0;const a=(s,r)=>{e.push({kind:s,text:i.slice(n,r),from:n,to:r,line:t});for(let o=n;oe&&s&&(a+=n),er&&(a+=o.sliceString(e-r,t-r,n)),r=l+1}return a}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof an))return 0;let n=0,[a,s,r,o]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;a+=t,s+=t){if(a==r||s==o)return n;let l=this.children[a],u=e.children[s];if(l!=u)return n+l.scanIdentical(u,t);n+=l.length+1}}static from(e,t=e.reduce((n,a)=>n+a.length+1,-1)){let n=0;for(let h of e)n+=h.lines;if(n<32){let h=[];for(let g of e)g.flatten(h);return new Oe(h,t)}let a=Math.max(32,n>>5),s=a<<1,r=a>>1,o=[],l=0,u=-1,m=[];function c(h){let g;if(h.lines>s&&h instanceof an)for(let f of h.children)c(f);else h.lines>r&&(l>r||!l)?(d(),o.push(h)):h instanceof Oe&&l&&(g=m[m.length-1])instanceof Oe&&h.lines+g.lines<=32?(l+=h.lines,u+=h.length+1,m[m.length-1]=new Oe(g.text.concat(h.text),g.length+1+h.length)):(l+h.lines>a&&d(),l+=h.lines,u+=h.length+1,m.push(h))}function d(){l!=0&&(o.push(m.length==1?m[0]:an.from(m,u)),u=-1,l=m.length=0)}for(let h of e)c(h);return d(),o.length==1?o[0]:new an(o,t)}}oe.empty=new Oe([""],0);function fW(i){let e=-1;for(let t of i)e+=t.length+1;return e}function Ua(i,e,t=0,n=1e9){for(let a=0,s=0,r=!0;s=t&&(l>n&&(o=o.slice(0,n-a)),a0?1:(e instanceof Oe?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,a=this.nodes[n],s=this.offsets[n],r=s>>1,o=a instanceof Oe?a.text.length:a.children.length;if(r==(t>0?o:0)){if(n==0)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(a instanceof Oe){let l=a.text[r+(t<0?-1:0)];if(this.offsets[n]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=a.children[r+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof Oe?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Rg{constructor(e,t,n){this.value="",this.done=!1,this.cursor=new pi(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:a}=this.cursor.next(e);return this.pos+=(a.length+e)*t,this.value=a.length<=n?a:t<0?a.slice(a.length-n):a.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Gg{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:n,value:a}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=a,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(oe.prototype[Symbol.iterator]=function(){return this.iter()},pi.prototype[Symbol.iterator]=Rg.prototype[Symbol.iterator]=Gg.prototype[Symbol.iterator]=function(){return this});class xW{constructor(e,t,n,a){this.from=e,this.to=t,this.number=n,this.text=a}get length(){return this.to-this.from}}function O1(i,e,t){return e=Math.max(0,Math.min(i.length,e)),[e,Math.max(e,Math.min(i.length,t))]}function rt(i,e,t=!0,n=!0){return gW(i,e,t,n)}function bW(i){return i>=56320&&i<57344}function vW(i){return i>=55296&&i<56320}function At(i,e){let t=i.charCodeAt(e);if(!vW(t)||e+1==i.length)return t;let n=i.charCodeAt(e+1);return bW(n)?(t-55296<<10)+(n-56320)+65536:t}function Hg(i){return i<=65535?String.fromCharCode(i):(i-=65536,String.fromCharCode((i>>10)+55296,(i&1023)+56320))}function hn(i){return i<65536?1:2}const qo=/\r\n?|\n/;var st=(function(i){return i[i.Simple=0]="Simple",i[i.TrackDel=1]="TrackDel",i[i.TrackBefore=2]="TrackBefore",i[i.TrackAfter=3]="TrackAfter",i})(st||(st={}));class pn{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-a);s+=o}else{if(n!=st.Simple&&u>=e&&(n==st.TrackDel&&ae||n==st.TrackBefore&&ae))return null;if(u>e||u==e&&t<0&&!o)return e==a||t<0?s:s+l;s+=l}a=u}if(e>a)throw new RangeError(`Position ${e} is out of range for changeset of length ${a}`);return s}touchesRange(e,t=e){for(let n=0,a=0;n=0&&a<=t&&o>=e)return at?"cover":!0;a=o}return!1}toString(){let e="";for(let t=0;t=0?":"+a:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new pn(e)}static create(e){return new pn(e)}}class De extends pn{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Uo(this,(t,n,a,s,r)=>e=e.replace(a,a+(n-t),r),!1),e}mapDesc(e,t=!1){return Yo(this,e,t,!0)}invert(e){let t=this.sections.slice(),n=[];for(let a=0,s=0;a=0){t[a]=o,t[a+1]=r;let l=a>>1;for(;n.length0&&Pn(n,t,s.text),s.forward(m),o+=m}let u=e[r++];for(;o>1].toJSON()))}return e}static of(e,t,n){let a=[],s=[],r=0,o=null;function l(m=!1){if(!m&&!a.length)return;rd||c<0||d>t)throw new RangeError(`Invalid change range ${c} to ${d} (in doc of length ${t})`);let g=h?typeof h=="string"?oe.of(h.split(n||qo)):h:oe.empty,f=g.length;if(c==d&&f==0)return;cr&&at(a,c-r,-1),at(a,d-c,f),Pn(s,a,g),r=d}}return u(e),l(!o),o}static empty(e){return new De(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],n=[];for(let a=0;ao&&typeof r!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;n.length=0&&t<=0&&t==i[a+1]?i[a]+=e:a>=0&&e==0&&i[a]==0?i[a+1]+=t:n?(i[a]+=e,i[a+1]+=t):i.push(e,t)}function Pn(i,e,t){if(t.length==0)return;let n=e.length-2>>1;if(n>1])),!(t||r==i.sections.length||i.sections[r+1]<0);)o=i.sections[r++],l=i.sections[r++];e(a,u,s,m,c),a=u,s=m}}}function Yo(i,e,t,n=!1){let a=[],s=n?[]:null,r=new Ai(i),o=new Ai(e);for(let l=-1;;){if(r.done&&o.len||o.done&&r.len)throw new Error("Mismatched change set lengths");if(r.ins==-1&&o.ins==-1){let u=Math.min(r.len,o.len);at(a,u,-1),r.forward(u),o.forward(u)}else if(o.ins>=0&&(r.ins<0||l==r.i||r.off==0&&(o.len=0&&l=0){let u=0,m=r.len;for(;m;)if(o.ins==-1){let c=Math.min(m,o.len);u+=c,m-=c,o.forward(c)}else if(o.ins==0&&o.lenl||r.ins>=0&&r.len>l)&&(o||n.length>u),s.forward2(l),r.forward(l)}}}}class Ai{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?oe.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?oe.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class _n{constructor(e,t,n,a){this.from=e,this.to=t,this.flags=n,this.goalColumn=a}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let n,a;return this.empty?n=a=e.mapPos(this.from,t):(n=e.mapPos(this.from,1),a=e.mapPos(this.to,-1)),n==this.from&&a==this.to?this:new _n(n,a,this.flags,this.goalColumn)}extend(e,t=e,n=0){if(e<=this.anchor&&t>=this.anchor)return Z.range(e,t,void 0,void 0,n);let a=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return Z.range(this.anchor,a,void 0,void 0,n)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return Z.range(e.anchor,e.head)}static create(e,t,n,a){return new _n(e,t,n,a)}}class Z{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:Z.create(this.ranges.map(n=>n.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let n=0;ne.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new Z(e.ranges.map(t=>_n.fromJSON(t)),e.main)}static single(e,t=e){return new Z([Z.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let n=0,a=0;aa.from-s.from),t=e.indexOf(n);for(let a=1;as.head?Z.range(l,o):Z.range(o,l))}}return new Z(e,t)}}function Qg(i,e){for(let t of i.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let y0=0;class V{constructor(e,t,n,a,s){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=a,this.id=y0++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new V(e.combine||(t=>t),e.compareInput||((t,n)=>t===n),e.compare||(e.combine?(t,n)=>t===n:w0),!!e.static,e.enables)}of(e){return new Ya([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ya(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Ya(e,this,2,t)}from(e,t){return t||(t=n=>n),this.compute([e],n=>t(n.field(e)))}}function w0(i,e){return i==e||i.length==e.length&&i.every((t,n)=>t===e[n])}class Ya{constructor(e,t,n,a){this.dependencies=e,this.facet=t,this.type=n,this.value=a,this.id=y0++}dynamicSlot(e){var t;let n=this.value,a=this.facet.compareInput,s=this.id,r=e[s]>>1,o=this.type==2,l=!1,u=!1,m=[];for(let c of this.dependencies)c=="doc"?l=!0:c=="selection"?u=!0:(((t=e[c.id])!==null&&t!==void 0?t:1)&1)==0&&m.push(e[c.id]);return{create(c){return c.values[r]=n(c),1},update(c,d){if(l&&d.docChanged||u&&(d.docChanged||d.selection)||$o(c,m)){let h=n(c);if(o?!Lm(h,c.values[r],a):!a(h,c.values[r]))return c.values[r]=h,1}return 0},reconfigure:(c,d)=>{let h,g=d.config.address[s];if(g!=null){let f=Ss(d,g);if(this.dependencies.every(x=>x instanceof V?d.facet(x)===c.facet(x):x instanceof Et?d.field(x,!1)==c.field(x,!1):!0)||(o?Lm(h=n(c),f,a):a(h=n(c),f)))return c.values[r]=f,0}else h=n(c);return c.values[r]=h,1}}}get extension(){return this}}function Lm(i,e,t){if(i.length!=e.length)return!1;for(let n=0;ni[l.id]),a=t.map(l=>l.type),s=n.filter(l=>!(l&1)),r=i[e.id]>>1;function o(l){let u=[];for(let m=0;mn===a),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(va).find(n=>n.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:n=>(n.values[t]=this.create(n),1),update:(n,a)=>{let s=n.values[t],r=this.updateF(s,a);return this.compareF(s,r)?0:(n.values[t]=r,1)},reconfigure:(n,a)=>{let s=n.facet(va),r=a.facet(va),o;return(o=s.find(l=>l.field==this))&&o!=r.find(l=>l.field==this)?(n.values[t]=o.create(n),1):a.config.address[this.id]!=null?(n.values[t]=a.field(this),0):(n.values[t]=this.create(n),1)}}}init(e){return[this,va.of({field:this,create:e})]}get extension(){return this}}const qn={lowest:4,low:3,default:2,high:1,highest:0};function $1(i){return e=>new qg(e,i)}const u1={highest:$1(qn.highest),high:$1(qn.high),default:$1(qn.default),low:$1(qn.low),lowest:$1(qn.lowest)};class qg{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Vi{of(e){return new Xo(this,e)}reconfigure(e){return Vi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Xo{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class ks{constructor(e,t,n,a,s,r){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=a,this.staticValues=s,this.facets=r,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,n){let a=[],s=Object.create(null),r=new Map;for(let d of wW(e,t,r))d instanceof Et?a.push(d):(s[d.facet.id]||(s[d.facet.id]=[])).push(d);let o=Object.create(null),l=[],u=[];for(let d of a)o[d.id]=u.length<<1,u.push(h=>d.slot(h));let m=n==null?void 0:n.config.facets;for(let d in s){let h=s[d],g=h[0].facet,f=m&&m[d]||[];if(h.every(x=>x.type==0))if(o[g.id]=l.length<<1|1,w0(f,h))l.push(n.facet(g));else{let x=g.combine(h.map(b=>b.value));l.push(n&&g.compare(x,n.facet(g))?n.facet(g):x)}else{for(let x of h)x.type==0?(o[x.id]=l.length<<1|1,l.push(x.value)):(o[x.id]=u.length<<1,u.push(b=>x.dynamicSlot(b)));o[g.id]=u.length<<1,u.push(x=>yW(x,g,h))}}let c=u.map(d=>d(o));return new ks(e,r,c,o,l,s)}}function wW(i,e,t){let n=[[],[],[],[],[]],a=new Map;function s(r,o){let l=a.get(r);if(l!=null){if(l<=o)return;let u=n[l].indexOf(r);u>-1&&n[l].splice(u,1),r instanceof Xo&&t.delete(r.compartment)}if(a.set(r,o),Array.isArray(r))for(let u of r)s(u,o);else if(r instanceof Xo){if(t.has(r.compartment))throw new RangeError("Duplicate use of compartment in extensions");let u=e.get(r.compartment)||r.inner;t.set(r.compartment,u),s(u,o)}else if(r instanceof qg)s(r.inner,r.prec);else if(r instanceof Et)n[o].push(r),r.provides&&s(r.provides,o);else if(r instanceof Ya)n[o].push(r),r.facet.extensions&&s(r.facet.extensions,qn.default);else{let u=r.extension;if(!u)throw new Error(`Unrecognized extension value in extension set (${r}).`);if(u==r)throw new Error(`Unrecognized extension value in extension set (${r}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(u,o)}}return s(i,qn.default),n.reduce((r,o)=>r.concat(o))}function fi(i,e){if(e&1)return 2;let t=e>>1,n=i.status[t];if(n==4)throw new Error("Cyclic dependency between fields and/or facets");if(n&2)return n;i.status[t]=4;let a=i.computeSlot(i,i.config.dynamicSlots[t]);return i.status[t]=2|a}function Ss(i,e){return e&1?i.config.staticValues[e>>1]:i.values[e>>1]}const Ug=V.define(),Ko=V.define({combine:i=>i.some(e=>e),static:!0}),Yg=V.define({combine:i=>i.length?i[0]:void 0,static:!0}),$g=V.define(),Xg=V.define(),Kg=V.define(),ep=V.define({combine:i=>i.length?i[0]:!1});class Nn{constructor(e,t){this.type=e,this.value=t}static define(){return new zW}}class zW{of(e){return new Nn(this,e)}}class IW{constructor(e){this.map=e}of(e){return new de(this,e)}}class de{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new de(this.type,t)}is(e){return this.type==e}static define(e={}){return new IW(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let a of e){let s=a.map(t);s&&n.push(s)}return n}}de.reconfigure=de.define();de.appendConfig=de.define();class Ye{constructor(e,t,n,a,s,r){this.startState=e,this.changes=t,this.selection=n,this.effects=a,this.annotations=s,this.scrollIntoView=r,this._doc=null,this._state=null,n&&Qg(n,t.newLength),s.some(o=>o.type==Ye.time)||(this.annotations=s.concat(Ye.time.of(Date.now())))}static create(e,t,n,a,s,r){return new Ye(e,t,n,a,s,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(Ye.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}Ye.time=Nn.define();Ye.userEvent=Nn.define();Ye.addToHistory=Nn.define();Ye.remote=Nn.define();function kW(i,e){let t=[];for(let n=0,a=0;;){let s,r;if(n=i[n]))s=i[n++],r=i[n++];else if(a=0;a--){let s=n[a](i);s instanceof Ye?i=s:Array.isArray(s)&&s.length==1&&s[0]instanceof Ye?i=s[0]:i=np(e,T1(s),!1)}return i}function TW(i){let e=i.startState,t=e.facet(Kg),n=i;for(let a=t.length-1;a>=0;a--){let s=t[a](i);s&&Object.keys(s).length&&(n=tp(n,el(e,s,i.changes.newLength),!0))}return n==i?i:Ye.create(e,i.changes,i.selection,n.effects,n.annotations,n.scrollIntoView)}const jW=[];function T1(i){return i==null?jW:Array.isArray(i)?i:[i]}var Zt=(function(i){return i[i.Word=0]="Word",i[i.Space=1]="Space",i[i.Other=2]="Other",i})(Zt||(Zt={}));const _W=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let tl;try{tl=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function CW(i){if(tl)return tl.test(i);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||_W.test(t)))return!0}return!1}function AW(i){return e=>{if(!/\S/.test(e))return Zt.Space;if(CW(e))return Zt.Word;for(let t=0;t-1)return Zt.Word;return Zt.Other}}class re{constructor(e,t,n,a,s,r){this.config=e,this.doc=t,this.selection=n,this.values=a,this.status=e.statusTemplate.slice(),this.computeSlot=s,r&&(r._state=this);for(let o=0;oa.set(u,l)),t=null),a.set(o.value.compartment,o.value.extension)):o.is(de.reconfigure)?(t=null,n=o.value):o.is(de.appendConfig)&&(t=null,n=T1(n).concat(o.value));let s;t?s=e.startState.values.slice():(t=ks.resolve(n,a,this),s=new re(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,u)=>u.reconfigure(l,this),null).values);let r=e.startState.facet(Ko)?e.newSelection:e.newSelection.asSingle();new re(t,e.newDoc,r,s,(o,l)=>l.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:Z.cursor(t.from+e.length,-1)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),a=this.changes(n.changes),s=[n.range],r=T1(n.effects);for(let o=1;or.spec.fromJSON(o,l)))}}return re.create({doc:e.doc,selection:Z.fromJSON(e.selection),extensions:t.extensions?a.concat([t.extensions]):a})}static create(e={}){let t=ks.resolve(e.extensions||[],new Map),n=e.doc instanceof oe?e.doc:oe.of((e.doc||"").split(t.staticFacet(re.lineSeparator)||qo)),a=e.selection?e.selection instanceof Z?e.selection:Z.single(e.selection.anchor,e.selection.head):Z.single(0);return Qg(a,n.length),t.staticFacet(Ko)||(a=a.asSingle()),new re(t,n,a,t.dynamicSlots.map(()=>null),(s,r)=>r.create(s),null)}get tabSize(){return this.facet(re.tabSize)}get lineBreak(){return this.facet(re.lineSeparator)||` +`}get readOnly(){return this.facet(ep)}phrase(e,...t){for(let n of this.facet(re.phrases))if(Object.prototype.hasOwnProperty.call(n,e)){e=n[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(n,a)=>{if(a=="$")return"$";let s=+(a||1);return!s||s>t.length?n:t[s-1]})),e}languageDataAt(e,t,n=-1){let a=[];for(let s of this.facet(Ug))for(let r of s(this,t,n))Object.prototype.hasOwnProperty.call(r,e)&&a.push(r[e]);return a}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return AW(t.length?t[0]:"")}wordAt(e){let{text:t,from:n,length:a}=this.doc.lineAt(e),s=this.charCategorizer(e),r=e-n,o=e-n;for(;r>0;){let l=rt(t,r,!1);if(s(t.slice(l,r))!=Zt.Word)break;r=l}for(;oi.length?i[0]:4});re.lineSeparator=Yg;re.readOnly=ep;re.phrases=V.define({compare(i,e){let t=Object.keys(i),n=Object.keys(e);return t.length==n.length&&t.every(a=>i[a]==e[a])}});re.languageData=Ug;re.changeFilter=$g;re.transactionFilter=Xg;re.transactionExtender=Kg;Vi.reconfigure=de.define();function z0(i,e,t={}){let n={};for(let a of i)for(let s of Object.keys(a)){let r=a[s],o=n[s];if(o===void 0)n[s]=r;else if(!(o===r||r===void 0))if(Object.hasOwnProperty.call(t,s))n[s]=t[s](o,r);else throw new Error("Config merge conflict for field "+s)}for(let a in e)n[a]===void 0&&(n[a]=e[a]);return n}class Dn{eq(e){return this==e}range(e,t=e){return nl.create(e,t,this)}}Dn.prototype.startSide=Dn.prototype.endSide=0;Dn.prototype.point=!1;Dn.prototype.mapMode=st.TrackDel;function I0(i,e){return i==e||i.constructor==e.constructor&&i.eq(e)}let nl=class ip{constructor(e,t,n){this.from=e,this.to=t,this.value=n}static create(e,t,n){return new ip(e,t,n)}};function il(i,e){return i.from-e.from||i.value.startSide-e.value.startSide}class k0{constructor(e,t,n,a){this.from=e,this.to=t,this.value=n,this.maxPoint=a}get length(){return x1(this.to)}findIndex(e,t,n,a=0){let s=n?this.to:this.from;for(let r=a,o=s.length;;){if(r==o)return r;let l=r+o>>1,u=s[l]-e||(n?this.value[l].endSide:this.value[l].startSide)-t;if(l==r)return u>=0?r:o;u>=0?o=l:r=l+1}}between(e,t,n,a){for(let s=this.findIndex(t,-1e9,!0),r=this.findIndex(n,1e9,!1,s);sx||f==x&&d.startSide>0&&d.endSide<=0)continue;if(!((x-f||d.endSide-d.startSide)<0))if(u<0&&(u=f),d.point&&(m=Math.max(m,x-f)),(f-n||d.startSide-a)>=0)r.push(d),o.push(f-u),l.push(x-u),n=x,a=d.endSide;else{if(f==x)for(let b=r.length;b>0;b--){if((f-(l[b-1]+u)||d.startSide-r[b-1].endSide)>=0){r.splice(b,0,d),o.splice(b,0,f-u),l.splice(b,0,x-u);continue e}if((f-(o[b-1]+u)||d.endSide-r[b-1].startSide)>0)break}s(f,x,d)}}return{mapped:r.length?new k0(o,l,r,m):null,pos:u}}}class ie{constructor(e,t,n,a){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=a}static create(e,t,n,a){return new ie(e,t,n,a)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:n=!1,filterFrom:a=0,filterTo:s=this.length}=e,r=e.filter;if(t.length==0&&!r)return this;if(n&&(t=t.slice().sort(il)),this.isEmpty)return t.length?ie.of(t):this;let o=new ap(this,null,-1).goto(0),l=0,u=[],m=new i1;for(;o.value||l=0){let c=t[l++];m.addInner(c.from,c.to,c.value,!1)||u.push(c)}else o.rangeIndex==1&&o.chunkIndexthis.chunkEnd(o.chunkIndex)||so.to||s{s||(s=new i1),s.addRange(l,u,m,!1)};for(let l=0;l=s&&e<=s+r.length&&r.between(s,e-s,t-s,n)===!1)return}this.nextLayer.between(e,t,n)}}iter(e=0){return Pi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Pi.from(e).goto(t)}static compare(e,t,n,a,s=-1){let r=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),o=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),l=Wm(r,o,n),u=new X1(r,l,s),m=new X1(o,l,s);n.iterGaps((c,d,h)=>Em(u,c,m,d,h,a)),n.empty&&n.length==0&&Em(u,0,m,0,0,a)}static eq(e,t,n=0,a){a==null&&(a=999999999);let s=e.filter(m=>!m.isEmpty&&t.indexOf(m)<0),r=t.filter(m=>!m.isEmpty&&e.indexOf(m)<0);if(s.length!=r.length)return!1;if(!s.length)return!0;let o=Wm(s,r),l=new X1(s,o,0).goto(n),u=new X1(r,o,0).goto(n);for(;;){if(l.to!=u.to||!al(l.active,u.active)||l.point&&(!u.point||!I0(l.point,u.point)))return!1;if(l.to>a)return!0;l.next(),u.next()}}static spans(e,t,n,a,s=-1){let r=new X1(e,null,s).goto(t),o=t,l=r.openStart;for(;;){let u=Math.min(r.to,n);if(r.point){let m=r.activeForPoint(r.to),c=r.pointFromo&&(a.span(o,u,r.active,l),l=r.openEnd(u));if(r.to>n)return l+(r.point&&r.to>n?1:0);o=r.to,r.next()}}static of(e,t=!1){let n=new i1;for(let a of e instanceof nl?[e]:t?PW(e):e)n.add(a.from,a.to,a.value);return n.finish()}static join(e){if(!e.length)return ie.empty;let t=x1(e);for(let n=e.length-2;n>=0;n--)for(let a=e[n];a!=ie.empty;a=a.nextLayer)t=new ie(a.chunkPos,a.chunk,t,Math.max(a.maxPoint,t.maxPoint));return t}}ie.empty=new ie([],[],null,-1);function x1(i){return i[i.length-1]}function PW(i){if(i.length>1)for(let e=i[0],t=1;t0)return i.slice().sort(il);e=n}return i}ie.empty.nextLayer=ie.empty;class i1{finishChunk(e){this.chunks.push(new k0(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,n){this.addRange(e,t,n,!0)}addRange(e,t,n,a){this.addInner(e,t,n,a)||(this.nextLayer||(this.nextLayer=new i1)).addRange(e,t,n,a)}addInner(e,t,n,a){let s=e-this.lastTo||n.startSide-this.last.endSide;if(a&&s<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}finish(){return this.finishInner(ie.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=ie.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function Wm(i,e,t){let n=new Map;for(let s of i)for(let r=0;r=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=n&&a.push(new ap(r,t,n,s));return a.length==1?a[0]:new Pi(a)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let n of this.heap)n.goto(e,t);for(let n=this.heap.length>>1;n>=0;n--)Br(this.heap,n);return this.next(),this}forward(e,t){for(let n of this.heap)n.forward(e,t);for(let n=this.heap.length>>1;n>=0;n--)Br(this.heap,n);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Br(this.heap,0)}}}function Br(i,e){for(let t=i[e];;){let n=(e<<1)+1;if(n>=i.length)break;let a=i[n];if(n+1=0&&(a=i[n+1],n++),t.compare(a)<0)break;i[n]=t,i[e]=a,e=n}}class X1{constructor(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Pi.from(e,t,n)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){ya(this.active,e),ya(this.activeTo,e),ya(this.activeRank,e),this.minActive=Nm(this.active,this.activeTo)}addActive(e){let t=0,{value:n,to:a,rank:s}=this.cursor;for(;t0;)t++;wa(this.active,t,n),wa(this.activeTo,t,a),wa(this.activeRank,t,s),e&&wa(e,t,this.cursor.from),this.minActive=Nm(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let n=this.openStart<0?[]:null;for(;;){let a=this.minActive;if(a>-1&&(this.activeTo[a]-this.cursor.from||this.active[a].endSide-this.cursor.startSide)<0){if(this.activeTo[a]>e){this.to=this.activeTo[a],this.endSide=this.active[a].endSide;break}this.removeActive(a),n&&ya(n,a)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(n),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[a]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()}openEnd(e){let t=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t}}function Em(i,e,t,n,a,s){i.goto(e),t.goto(n);let r=n+a,o=n,l=n-e,u=!!s.boundChange;for(let m=!1;;){let c=i.to+l-t.to,d=c||i.endSide-t.endSide,h=d<0?i.to+l:t.to,g=Math.min(h,r);if(i.point||t.point?(i.point&&t.point&&I0(i.point,t.point)&&al(i.activeForPoint(i.to),t.activeForPoint(t.to))||s.comparePoint(o,g,i.point,t.point),m=!1):(m&&(s.boundChange(o),m=!1),g>o&&!al(i.active,t.active)&&s.compareRange(o,g,i.active,t.active),u&&gr)break;o=h,d<=0&&i.next(),d>=0&&t.next()}}function al(i,e){if(i.length!=e.length)return!1;for(let t=0;t=e;n--)i[n+1]=i[n];i[e]=t}function Nm(i,e){let t=-1,n=1e9;for(let a=0;a=e)return a;if(a==i.length)break;s+=i.charCodeAt(a)==9?t-s%t:1,a=rt(i,a)}return i.length}const sl="ͼ",Jm=typeof Symbol>"u"?"__"+sl:Symbol.for(sl),rl=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Fm=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class Bn{constructor(e,t){this.rules=[];let{finish:n}=t||{};function a(r){return/^@/.test(r)?[r]:r.split(/,\s*/)}function s(r,o,l,u){let m=[],c=/^@(\w+)\b/.exec(r[0]),d=c&&c[1]=="keyframes";if(c&&o==null)return l.push(r[0]+";");for(let h in o){let g=o[h];if(/&/.test(h))s(h.split(/,\s*/).map(f=>r.map(x=>f.replace(/&/,x))).reduce((f,x)=>f.concat(x)),g,l);else if(g&&typeof g=="object"){if(!c)throw new RangeError("The value of a property ("+h+") should be a primitive value.");s(a(h),g,m,d)}else g!=null&&m.push(h.replace(/_.*/,"").replace(/[A-Z]/g,f=>"-"+f.toLowerCase())+": "+g+";")}(m.length||d)&&l.push((n&&!c&&!u?r.map(n):r).join(", ")+" {"+m.join(" ")+"}")}for(let r in e)s(a(r),e[r],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=Fm[Jm]||1;return Fm[Jm]=e+1,sl+e.toString(36)}static mount(e,t,n){let a=e[rl],s=n&&n.nonce;a?s&&a.setNonce(s):a=new MW(e,s),a.mount(Array.isArray(t)?t:[t],e)}}let Rm=new Map;class MW{constructor(e,t){let n=e.ownerDocument||e,a=n.defaultView;if(!e.head&&e.adoptedStyleSheets&&a.CSSStyleSheet){let s=Rm.get(n);if(s)return e[rl]=s;this.sheet=new a.CSSStyleSheet,Rm.set(n,this)}else this.styleTag=n.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[rl]=this}mount(e,t){let n=this.sheet,a=0,s=0,r=!1;for(let o=0;o-1&&(this.modules.splice(u,1),r=!0,s--,u=-1),u==-1){if(this.modules.splice(s++,0,l),r=!0,n)for(let m=0;m",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},ZW=typeof navigator<"u"&&/Mac/.test(navigator.platform),DW=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var Ue=0;Ue<10;Ue++)Ln[48+Ue]=Ln[96+Ue]=String(Ue);for(var Ue=1;Ue<=24;Ue++)Ln[Ue+111]="F"+Ue;for(var Ue=65;Ue<=90;Ue++)Ln[Ue]=String.fromCharCode(Ue+32),Oi[Ue]=String.fromCharCode(Ue);for(var Lr in Ln)Oi.hasOwnProperty(Lr)||(Oi[Lr]=Ln[Lr]);function BW(i){var e=ZW&&i.metaKey&&i.shiftKey&&!i.ctrlKey&&!i.altKey||DW&&i.shiftKey&&i.key&&i.key.length==1||i.key=="Unidentified",t=!e&&i.key||(i.shiftKey?Oi:Ln)[i.keyCode]||i.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}let ut=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},ol=typeof document<"u"?document:{documentElement:{style:{}}};const ll=/Edge\/(\d+)/.exec(ut.userAgent),sp=/MSIE \d/.test(ut.userAgent),ul=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(ut.userAgent),rr=!!(sp||ul||ll),Gm=!rr&&/gecko\/(\d+)/i.test(ut.userAgent),Wr=!rr&&/Chrome\/(\d+)/.exec(ut.userAgent),Hm="webkitFontSmoothing"in ol.documentElement.style,ml=!rr&&/Apple Computer/.test(ut.vendor),Vm=ml&&(/Mobile\/\w+/.test(ut.userAgent)||ut.maxTouchPoints>2);var G={mac:Vm||/Mac/.test(ut.platform),windows:/Win/.test(ut.platform),linux:/Linux|X11/.test(ut.platform),ie:rr,ie_version:sp?ol.documentMode||6:ul?+ul[1]:ll?+ll[1]:0,gecko:Gm,gecko_version:Gm?+(/Firefox\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,chrome:!!Wr,chrome_version:Wr?+Wr[1]:0,ios:Vm,android:/Android\b/.test(ut.userAgent),webkit:Hm,webkit_version:Hm?+(/\bAppleWebKit\/(\d+)/.exec(ut.userAgent)||[0,0])[1]:0,safari:ml,safari_version:ml?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ut.userAgent)||[0,0])[1]:0,tabSize:ol.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function S0(i,e){for(let t in i)t=="class"&&e.class?e.class+=" "+i.class:t=="style"&&e.style?e.style+=";"+i.style:e[t]=i[t];return e}const Ts=Object.create(null);function T0(i,e,t){if(i==e)return!0;i||(i=Ts),e||(e=Ts);let n=Object.keys(i),a=Object.keys(e);if(n.length-0!=a.length-0)return!1;for(let s of n)if(s!=t&&(a.indexOf(s)==-1||i[s]!==e[s]))return!1;return!0}function LW(i,e){for(let t=i.attributes.length-1;t>=0;t--){let n=i.attributes[t].name;e[n]==null&&i.removeAttribute(n)}for(let t in e){let n=e[t];t=="style"?i.style.cssText=n:i.getAttribute(t)!=n&&i.setAttribute(t,n)}}function Qm(i,e,t){let n=!1;if(e)for(let a in e)t&&a in t||(n=!0,a=="style"?i.style.cssText="":i.removeAttribute(a));if(t)for(let a in t)e&&e[a]==t[a]||(n=!0,a=="style"?i.style.cssText=t[a]:i.setAttribute(a,t[a]));return n}function WW(i){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new o1(e,t,t,n,e.widget||null,!1)}static replace(e){let t=!!e.block,n,a;if(e.isBlockGap)n=-5e8,a=4e8;else{let{start:s,end:r}=rp(e,t);n=(s?t?-3e8:-1:5e8)-1,a=(r?t?2e8:1:-6e8)+1}return new o1(e,n,a,t,e.widget||null,!0)}static line(e){return new Ui(e)}static set(e,t=!1){return ie.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}he.none=ie.empty;class qi extends he{constructor(e){let{start:t,end:n}=rp(e);super(t?-1:5e8,n?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?S0(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Ts}eq(e){return this==e||e instanceof qi&&this.tagName==e.tagName&&T0(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}qi.prototype.point=!1;class Ui extends he{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Ui&&this.spec.class==e.spec.class&&T0(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Ui.prototype.mapMode=st.TrackBefore;Ui.prototype.point=!0;class o1 extends he{constructor(e,t,n,a,s,r){super(t,n,s,e),this.block=a,this.isReplace=r,this.mapMode=a?t<=0?st.TrackBefore:st.TrackAfter:st.TrackDel}get type(){return this.startSide!=this.endSide?$e.WidgetRange:this.startSide<=0?$e.WidgetBefore:$e.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof o1&&EW(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}o1.prototype.point=!0;function rp(i,e=!1){let{inclusiveStart:t,inclusiveEnd:n}=i;return t==null&&(t=i.inclusive),n==null&&(n=i.inclusive),{start:t??e,end:n??e}}function EW(i,e){return i==e||!!(i&&e&&i.compare(e))}function j1(i,e,t,n=0){let a=t.length-1;a>=0&&t[a]+n>=i?t[a]=Math.max(t[a],e):t.push(i,e)}class Mi extends Dn{constructor(e,t,n){super(),this.tagName=e,this.attributes=t,this.rank=n}eq(e){return e==this||e instanceof Mi&&this.tagName==e.tagName&&T0(this.attributes,e.attributes)}static create(e){return new Mi(e.tagName,e.attributes||Ts,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return ie.of(e,t)}}Mi.prototype.startSide=Mi.prototype.endSide=-1;const He=i=>i.nodeType==1,M1=i=>i.nodeType==3;function Zi(i){let e;return i.nodeType==11?e=i.getSelection?i:i.ownerDocument:e=i,e.getSelection()}function cl(i,e){return e?i==e||i.contains(e.nodeType!=1?e.parentNode:e):!1}function xi(i,e){if(!e.anchorNode)return!1;try{return cl(i,e.anchorNode)}catch{return!1}}function $a(i){return M1(i)?Di(i,0,i.nodeValue.length).getClientRects():He(i)?i.getClientRects():[]}function bi(i,e,t,n){return t?qm(i,e,t,n,-1)||qm(i,e,t,n,1):!1}function Wn(i){for(var e=0;;e++)if(i=i.previousSibling,!i)return e}function js(i){return He(i)&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(i.nodeName)}function qm(i,e,t,n,a){for(;;){if(i==t&&e==n)return!0;if(e==(a<0?0:vn(i))){if(i.nodeName=="DIV")return!1;let s=i.parentNode;if(!s||!He(s))return!1;e=Wn(i)+(a<0?0:1),i=s}else if(He(i)){if(i=i.childNodes[e+(a<0?-1:0)],He(i)&&(i.nodeName=="IMG"||i.nodeName=="BR"||i.contentEditable=="false"))return!1;e=a<0?vn(i):0}else return!1}}function vn(i){return M1(i)?i.nodeValue.length:i.childNodes.length}function _s(i,e){let{left:t,right:n}=i;if(t==n)return i;let a=e?t:n;return{left:a,right:a,top:i.top,bottom:i.bottom}}function NW(i){let e=i.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:i.innerWidth,top:0,bottom:i.innerHeight}}function op(i,e){let t=e.width/i.offsetWidth,n=e.height/i.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-i.offsetWidth)<1)&&(t=1),(n>.995&&n<1.005||!isFinite(n)||Math.abs(e.height-i.offsetHeight)<1)&&(n=1),{scaleX:t,scaleY:n}}function JW(i,e,t,n,a,s,r,o){let l=i.ownerDocument,u=l.defaultView||window;for(let m=i,c=!1;m&&!c;)if(He(m)){let d,h=m==l.body,g=1,f=1,x=!0,b=!0;if(h)d=NW(u);else{let z=getComputedStyle(m);if(/^(fixed|sticky)$/.test(z.position)&&(c=!0),(m.scrollHeight<=m.clientHeight||!/auto|scroll/.test(z.overflowY))&&(b=!1),(m.scrollWidth<=m.clientWidth||!/auto|scroll/.test(z.overflowX))&&(x=!1),!x&&!b){m=m.assignedSlot||m.parentNode;continue}let I=m.getBoundingClientRect();({scaleX:g,scaleY:f}=op(m,I)),d={left:I.left,right:I.left+m.clientWidth*g,top:I.top,bottom:I.top+m.clientHeight*f}}let v=0,w=0;if(b)if(a=="nearest")e.top0&&e.bottom>d.bottom+w&&(w=e.bottom-d.bottom+r)):e.bottom>d.bottom-r&&(w=e.bottom-d.bottom+r,t<0&&e.top-w0&&e.right>d.right+v&&(v=e.right-d.right+s)):e.right>d.right-s&&(v=e.right-d.right+s,t<0&&e.leftd.bottom||e.leftd.right)&&(e={left:Math.max(e.left,d.left),right:Math.min(e.right,d.right),top:Math.max(e.top,d.top),bottom:Math.min(e.bottom,d.bottom)}),m=m.assignedSlot||m.parentNode}else if(m.nodeType==11)m=m.host;else break}function lp(i,e=!0){let t=i.ownerDocument,n=null,a=null;for(let s=i.parentNode;s&&!(s==t.body||(!e||n)&&a);)if(He(s))!a&&s.scrollHeight>s.clientHeight&&/scroll|auto/.test(getComputedStyle(s).overflowY)&&(a=s),e&&!n&&s.scrollWidth>s.clientWidth&&/scroll|auto/.test(getComputedStyle(s).overflowX)&&(n=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:n,y:a}}class FW{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:n}=e;this.set(t,Math.min(e.anchorOffset,t?vn(t):0),n,Math.min(e.focusOffset,n?vn(n):0))}set(e,t,n,a){this.anchorNode=e,this.anchorOffset=t,this.focusNode=n,this.focusOffset=a}}function up(i){let e=[];for(let t=i;t;t=t.nodeType==11?t.host:t.parentNode)He(t)&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function mp(i,e=!0){for(let{node:t,left:n,top:a}of i)e&&t.scrollTop!=a&&(t.scrollTop=a),t.scrollLeft!=n&&(t.scrollLeft=n)}let Qn=null;G.safari&&G.safari_version>=26&&(Qn=!1);function cp(i){if(i.setActive)return i.setActive();if(Qn)return i.focus(Qn);let e=up(i);i.focus(Qn==null?{get preventScroll(){return Qn={preventScroll:!0},!0}}:void 0),Qn||(Qn=!1,mp(e))}let Um;function Di(i,e,t=e){let n=Um||(Um=document.createRange());return n.setEnd(i,t),n.setStart(i,e),n}function _1(i,e,t,n){let a={key:e,code:e,keyCode:t,which:t,cancelable:!0};n&&({altKey:a.altKey,ctrlKey:a.ctrlKey,shiftKey:a.shiftKey,metaKey:a.metaKey}=n);let s=new KeyboardEvent("keydown",a);s.synthetic=!0,i.dispatchEvent(s);let r=new KeyboardEvent("keyup",a);return r.synthetic=!0,i.dispatchEvent(r),s.defaultPrevented||r.defaultPrevented}function RW(i){for(;i;){if(i&&(i.nodeType==9||i.nodeType==11&&i.host))return i;i=i.assignedSlot||i.parentNode}return null}function GW(i,e){let t=e.focusNode,n=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=n)return!1;for(n=Math.min(n,vn(t));;)if(n){if(!He(t))return!1;let a=t.childNodes[n-1];a.contentEditable=="false"?n--:(t=a,n=vn(t))}else{if(t==i)return!0;n=Wn(t),t=t.parentNode}}function dp(i){return i instanceof Window?i.pageYOffset>Math.max(0,i.document.documentElement.scrollHeight-i.innerHeight-4):i.scrollTop>Math.max(1,i.scrollHeight-i.clientHeight-4)}function hp(i,e){for(let t=i,n=e;;){if(M1(t)&&n>0)return{node:t,offset:n};if(He(t)&&n>0){if(t.contentEditable=="false")return null;t=t.childNodes[n-1],n=vn(t)}else if(t.parentNode&&!js(t))n=Wn(t),t=t.parentNode;else return null}}function gp(i,e){for(let t=i,n=e;;){if(M1(t)&&n=t){if(o.level==n)return r;(s<0||(a!=0?a<0?o.fromt:e[s].level>o.level))&&(s=r)}}if(s<0)throw new RangeError("Index out of range");return s}}function xp(i,e){if(i.length!=e.length)return!1;for(let t=0;t=0;f-=3)if($t[f+1]==-h){let x=$t[f+2],b=x&2?a:x&4?x&1?s:a:0;b&&(be[c]=be[$t[f]]=b),o=f;break}}else{if($t.length==189)break;$t[o++]=c,$t[o++]=d,$t[o++]=l}else if((g=be[c])==2||g==1){let f=g==a;l=f?0:1;for(let x=o-3;x>=0;x-=3){let b=$t[x+2];if(b&2)break;if(f)$t[x+2]|=2;else{if(b&4)break;$t[x+2]|=4}}}}}function YW(i,e,t,n){for(let a=0,s=n;a<=t.length;a++){let r=a?t[a-1].to:i,o=al;)g==x&&(g=t[--f].from,x=f?t[f-1].to:i),be[--g]=h;l=m}else s=u,l++}}}function hl(i,e,t,n,a,s,r){let o=n%2?2:1;if(n%2==a%2)for(let l=e,u=0;ll&&r.push(new rn(l,f.from,h));let x=f.direction==Z1!=!(h%2);gl(i,x?n+1:n,a,f.inner,f.from,f.to,r),l=f.to}g=f.to}else{if(g==t||(m?be[g]!=o:be[g]==o))break;g++}d?hl(i,l,g,n+1,a,d,r):le;){let m=!0,c=!1;if(!u||l>s[u-1].to){let f=be[l-1];f!=o&&(m=!1,c=f==16)}let d=!m&&o==1?[]:null,h=m?n:n+1,g=l;e:for(;;)if(u&&g==s[u-1].to){if(c)break e;let f=s[--u];if(!m)for(let x=f.from,b=u;;){if(x==e)break e;if(b&&s[b-1].to==x)x=s[--b].from;else{if(be[x-1]==o)break e;break}}if(d)d.push(f);else{f.tobe.length;)be[be.length]=256;let n=[],a=e==Z1?0:1;return gl(i,a,a,t,0,i.length,n),n}function bp(i){return[new rn(0,i,0)]}let vp="";function XW(i,e,t,n,a){var s;if(!i.length)return null;let r=n.head-i.from,o;if(n.head==i.from&&n.assoc<0){if(!a)return null;r=e[o=0].side(!1,t)}else if(n.head==i.to&&n.assoc>0){if(a)return null;r=e[o=e.length-1].side(!0,t)}else o=rn.find(e,r,(s=n.bidiLevel)!==null&&s!==void 0?s:-1,n.assoc);let l=e[o],u=l.side(a,t);if(r==u){let d=o+=a?1:-1;if(d<0||d>=e.length)return null;l=e[o=d],r=l.side(!a,t),u=l.side(a,t)}let m=rt(i.text,r,l.forward(a,t));(ml.to)&&(m=u),vp=i.text.slice(Math.min(r,m),Math.max(r,m));let c=o==(a?e.length-1:0)?null:e[o+(a?1:-1)];if(m==u){if(!c)return a?Z.cursor(i.to,1):Z.cursor(i.from,-1);if(c.level+(a?0:1)i.some(e=>e)}),eE=V.define({combine:i=>i.some(e=>e)}),jp=V.define();class C1{constructor(e,t,n,a,s,r=!1){this.range=e,this.y=t,this.x=n,this.yMargin=a,this.xMargin=s,this.isSnapshot=r}map(e){return e.empty?this:new C1(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new C1(Z.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const za=de.define({map:(i,e)=>i.map(e)}),_p=de.define();function zt(i,e,t){let n=i.facet(Ip);n.length?n[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const gn=V.define({combine:i=>i.length?i[0]:!0});let tE=0;const w1=V.define({combine(i){return i.filter((e,t)=>{for(let n=0;n{let l=[];return r&&l.push(or.of(u=>{let m=u.plugin(o);return m?r(m):he.none})),s&&l.push(s(o)),l})}static fromClass(e,t){return Wt.define((n,a)=>new e(n,a),t)}}class Er{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(n){if(zt(t.state,n,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){zt(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(n){zt(e.state,n,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Cp=V.define(),A0=V.define(),or=V.define(),Ap=V.define(),P0=V.define(),Yi=V.define(),Pp=V.define();function Ym(i,e){let t=i.state.facet(Pp);if(!t.length)return t;let n=t.map(s=>s instanceof Function?s(i):s),a=[];return ie.spans(n,e.from,e.to,{point(){},span(s,r,o,l){let u=s-e.from,m=r-e.from,c=a;for(let d=o.length-1;d>=0;d--,l--){let h=o[d].spec.bidiIsolate,g;if(l>0&&c.length&&(g=c[c.length-1]).to==u&&g.direction==h)g.to=m,c=g.inner;else{let f={from:u,to:m,direction:h,inner:[]};c.push(f),c=f.inner}}}}),Op(e.text,a)}function Op(i,e){for(let t of e){if(t.direction==null){for(let n=t.from,a=0;n0;t--){let a=e[t-1];if(!(a.fromA>n.toA)){if(a.toAa.push(new Dt(s,r,o,l))),this.changedRanges=a}static create(e,t,n){return new Cs(e,t,n)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const nE=[];class Ae{constructor(e,t,n=0){this.dom=e,this.length=t,this.flags=n,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return nE}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&LW(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let n=t;for(let a of this.children){if(a==e)return n;n+=a.length+a.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,n){return null}domPosFor(e,t){let n=Wn(this.dom),a=this.length?e>0:t>0;return new Gt(this.parent.dom,n+(a?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof ur)return e;return null}static get(e){return e.cmTile}}class lr extends Ae{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,n=null,a,s=(e==null?void 0:e.node)==t?e:null,r=0;for(let o of this.children){if(o.sync(e),r+=o.length+o.breakAfter,a=n?n.nextSibling:t.firstChild,s&&a!=o.dom&&(s.written=!0),o.dom.parentNode==t)for(;a&&a!=o.dom;)a=$m(a);else t.insertBefore(o.dom,a);n=o.dom}for(a=n?n.nextSibling:t.firstChild,s&&a&&(s.written=!0);a;)a=$m(a);this.length=r}}function $m(i){let e=i.nextSibling;return i.parentNode.removeChild(i),e}class ur extends lr{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Ae.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],n=this,a=0,s=0;;)if(a==n.children.length){if(!t.length)return;n=n.parent,n.breakAfter&&s++,a=t.pop()}else{let r=n.children[a++];if(r instanceof fn)t.push(a),n=r,a=0;else{let o=s+r.length,l=e(r,s);if(l!==void 0)return l;s=o+r.breakAfter}}}resolveBlock(e,t){let n,a=-1,s,r=-1;if(this.blockTiles((o,l)=>{let u=l+o.length;if(e>=l&&e<=u){if(o.isWidget()&&t>=-1&&t<=1){if(o.flags&32)return!0;o.flags&16&&(n=void 0)}(le||e==l&&(t>1?o.length:o.covers(-1)))&&(!s||!o.isWidget()&&s.isWidget())&&(s=o,r=e-l)}}),!n&&!s)throw new Error("No tile at position "+e);return n&&t<0||!s?{tile:n,offset:a}:{tile:s,offset:r}}}class fn extends lr{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let n=new fn(t||document.createElement(e.tagName),e);return t||(n.flags|=4),n}}class D1 extends lr{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,n){let a=new D1(t||document.createElement("div"),e);return(!t||!n)&&(a.flags|=4),a}get domAttrs(){return this.attrs}resolveInline(e,t,n=!1){let a=null,s=-1,r=null,o=-1;function l(m,c){for(let d=0,h=0;d=c&&(g.isComposite()?l(g,c-h):(!r||n&&r.isHidden&&(t>0&&!(r.flags&32)||n&&aE(r,g)))&&(f>c||g.flags&32&&t<=1)?(r=g,o=c-h):(h=-1)&&(a=g,s=c-h)),h=f}}l(this,e);let u=(t<0?a:r)||a||r;return u?{tile:u,offset:u==a?s:o}:null}coordsIn(e,t,n){let a=this.resolveInline(e,t,!0);return a?a.tile.coordsIn(Math.max(0,a.offset),t,n):iE(this)}domIn(e,t){let n=this.resolveInline(e,t);if(n){let{tile:a,offset:s}=n;if(this.dom.contains(a.dom))return a.isText()?new Gt(a.dom,Math.min(a.dom.nodeValue.length,s)):a.domPosFor(s,a.flags&16?1:a.flags&32?-1:t);let r=n.tile.parent,o=!1;for(let l of r.children){if(o)return new Gt(l.dom,0);l==n.tile&&(o=!0)}}return new Gt(this.dom,0)}}function iE(i){let e=i.dom.lastChild;if(!e)return i.dom.getBoundingClientRect();let t=$a(e);return t[t.length-1]||null}function aE(i,e){let t=i.coordsIn(0,1),n=e.coordsIn(0,1);return t&&n&&n.topa&&(e=a);let s=e,r=e,o=0;e==0&&t<0||e==a&&t>=0?G.chrome||G.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return G.safari&&!o&&u.width==0&&(u=Array.prototype.find.call(l,m=>m.width)||u),n==null?u:_s(u,(o?o>0:t<0)==n)}static of(e,t){let n=new $n(t||document.createTextNode(e),e);return t||(n.flags|=2),n}}class l1 extends Ae{constructor(e,t,n,a){super(e,t,a),this.widget=n}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,n){let a=this.widget.coordsAt(this.dom,e,t);if(a)return a;if(n)return _s(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),r=null;if(!s.length)return null;let o=this.flags&16?!0:this.flags&32?!1:e>0;for(let l=o?s.length-1:0;r=s[l],!(e>0?l==0:l==s.length-1||r.top0==n)}}class sE{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,n){let{tile:a,index:s,beforeBreak:r,parents:o}=this;for(;e||t>0;)if(a.isComposite())if(r){if(!e)break;n&&n.break(),e--,r=!1}else if(s==a.children.length){if(!e&&!o.length)break;n&&n.leave(a),r=!!a.breakAfter,{tile:a,index:s}=o.pop(),s++}else{let l=a.children[s],u=l.breakAfter;(t>0?l.length<=e:l.length=0;o--){let l=t.marks[o],u=a.lastChild;if(u instanceof pt&&u.mark.eq(l.mark))u.dom!=l.dom&&u.setDOM(Nr(l.dom)),a=u;else{let{dom:m}=l;this.cache.reused.get(l)&&Ae.get(l.dom)&&(m=Nr(l.dom));let c=pt.of(l.mark,m);a.append(c),a=c}this.cache.reused.set(l,2)}let s=Ae.get(e.text);s&&this.cache.reused.set(s,2);let r=new $n(e.text,e.text.nodeValue);r.flags|=8,this.pos=e.range.toB,a.append(r)}addInlineWidget(e,t,n){let a=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);a||this.flushBuffer();let s=this.ensureMarks(t,n);!a&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,n){this.flushBuffer(),this.ensureMarks(t,n).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var n;e||(e=Zp);let a=D1.start(e,t||((n=this.cache.find(D1))===null||n===void 0?void 0:n.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=a)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var n;let a=this.curLine;for(let s=e.length-1;s>=0;s--){let r=e[s],o;if(t>0&&(o=a.lastChild)&&o instanceof pt&&o.mark.eq(r))a=o,t--;else{let l=pt.of(r,(n=this.cache.find(pt,u=>u.mark.eq(r)))===null||n===void 0?void 0:n.dom);a.append(l),a=l,t=0}}return a}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Xm(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(G.ios&&Xm(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Jr,0,32)||new l1(Jr.toDOM(),0,Jr,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,n=new rE(e.from,e.to,e.value,t),a=this.wrappers.length;for(;a>0&&(this.wrappers[a-1].rank-n.rank||this.wrappers[a-1].to-n.to)<0;)a--;this.wrappers.splice(a,0,n)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let n of this.wrappers){let a=t.lastChild;if(n.fromr.wrapper.eq(n.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),n=this.cache.find(As,void 0,1);return n&&(n.flags=t),n||new As(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class lE{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:a,lineBreak:s,done:r}=this.cursor.next(this.skipCount);if(this.skipCount=0,r)throw new Error("Ran out of text content when drawing inline views");this.text=a;let o=this.textOff=Math.min(e,a.length);return s?null:a.slice(0,o)}let t=Math.min(this.text.length,this.textOff+e),n=this.text.slice(this.textOff,t);return this.textOff=t,n}}const Ps=[l1,D1,$n,pt,As,fn,ur];for(let i=0;i[]),this.index=Ps.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,n=this.buckets[t];n.length<6?n.push(e):n[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,n=2){let a=e.bucket,s=this.buckets[a],r=this.index[a];for(let o=0;o{if(this.cache.add(r),r.isComposite())return!1},enter:r=>this.cache.add(r),leave:()=>{},break:()=>{}}}run(e,t){let n=t&&this.getCompositionContext(t.text);for(let a=0,s=0,r=0;;){let o=ra){let u=l-a;this.preserve(u,!r,!o),a=l,s+=u}if(!o)break;t&&o.fromA<=t.range.fromA&&o.toA>=t.range.toA?(this.forward(o.fromA,t.range.fromA,t.range.fromA{if(r.isWidget())if(this.openWidget)this.builder.continueWidget(l-o);else{let u=l>0||o{r.isLine()?this.builder.addLineStart(r.attrs,this.cache.maybeReuse(r)):(this.cache.add(r),r instanceof pt&&a.unshift(r.mark)),this.openWidget=!1},leave:r=>{r.isLine()?a.length&&(a.length=s=0):r instanceof pt&&(a.shift(),s=Math.min(s,a.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let n=null,a=this.builder,s=-1,r=ie.spans(this.decorations,e,t,{point:(o,l,u,m,c,d)=>{if(u instanceof o1){if(this.disallowBlockEffectsFor[d]){if(u.block)throw new RangeError("Block decorations may not be specified via plugins");if(l>this.view.state.doc.lineAt(o).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=m.length,c>m.length)a.continueWidget(l-o);else{let h=u.widget||(u.block?B1.block:B1.inline),g=cE(u),f=this.cache.findWidget(h,l-o,g)||l1.of(h,this.view,l-o,g);u.block?(u.startSide>0&&a.addLineStartIfNotCovered(n),a.addBlockWidget(f)):(a.ensureLine(n),a.addInlineWidget(f,m,c))}n=null}else n=dE(n,u);l>o&&this.text.skip(l-o)},span:(o,l,u,m)=>{for(let c=o;c-1&&(this.openWidget=r>s),this.openWidget||a.addLineStartIfNotCovered(n),this.openMarks=r}forward(e,t,n=1){t-e<=10?this.old.advance(t-e,n,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,n,this.reuseWalker))}getCompositionContext(e){let t=[],n=null;for(let a=e.parentNode;;a=a.parentNode){let s=Ae.get(a);if(a==this.view.contentDOM)break;s instanceof pt?t.push(s):s!=null&&s.isLine()?n=s:s instanceof fn||(a.nodeName=="DIV"&&!n?n=new D1(a,Zp):n||t.push(pt.of(new qi({tagName:a.nodeName.toLowerCase(),attributes:WW(a)}),a)))}return n?{line:n,marks:t}:null}}function Xm(i,e){let t=n=>{for(let a of n.children)if((e?a.isText():a.length)||t(a))return!0;return!1};return t(i)}function cE(i){let e=i.isReplace?(i.startSide<0?64:0)|(i.endSide>0?128:0):i.startSide>0?32:16;return i.block&&(e|=256),e}const Zp={class:"cm-line"};function dE(i,e){let t=e.spec.attributes,n=e.spec.class;return!t&&!n||(i||(i={class:"cm-line"}),t&&S0(t,i),n&&(i.class+=" "+n)),i}function hE(i){let e=[];for(let t=i.parents.length;t>1;t--){let n=t==i.parents.length?i.tile:i.parents[t].tile;n instanceof pt&&e.push(n.mark)}return e}function Nr(i){let e=Ae.get(i);return e&&e.setDOM(i.cloneNode()),i}class B1 extends J1{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}B1.inline=new B1("span");B1.block=new B1("div");const Jr=new class extends J1{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Km{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=he.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new ur(e,e.contentDOM),this.updateInner([new Dt(0,0,0,e.state.doc.length)],null)}update(e){var t;let n=e.changedRanges;this.minWidth>0&&n.length&&(n.every(({fromA:m,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let a=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?a=this.domChanged.newSel.head:!zE(e.changes,this.hasComposition)&&!e.selectionSet&&(a=e.state.selection.main.head));let s=a>-1?pE(this.view,e.changes,a):null;if(this.domChanged=null,this.hasComposition){let{from:m,to:c}=this.hasComposition;n=new Dt(m,c,e.changes.mapPos(m,-1),e.changes.mapPos(c,1)).addToSet(n.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(G.ie||G.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let r=this.decorations,o=this.blockWrappers;this.updateDeco();let l=bE(r,this.decorations,e.changes);l.length&&(n=Dt.extendWithRanges(n,l));let u=yE(o,this.blockWrappers,e.changes);return u.length&&(n=Dt.extendWithRanges(n,u)),s&&!n.some(m=>m.fromA<=s.range.fromA&&m.toA>=s.range.toA)&&(n=s.range.addToSet(n.slice())),this.tile.flags&2&&n.length==0?!1:(this.updateInner(n,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:n}=this.view;n.ignore(()=>{if(t||e.length){let r=this.tile,o=new mE(this.view,r,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&Ae.get(t.text)&&o.cache.reused.set(Ae.get(t.text),2),this.tile=o.run(e,t),fl(r,o.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=G.chrome||G.ios?{node:n.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||n.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let a=[];if(this.view.viewport.from||this.view.viewport.to-1)&&xi(n,this.view.observer.selectionRange)&&!(a&&n.contains(a));if(!(s||t||r))return;let o=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,u,m;if(l.empty?m=u=this.inlineDOMNearPos(l.anchor,l.assoc||1):(m=this.inlineDOMNearPos(l.head,l.head==l.from?1:-1),u=this.inlineDOMNearPos(l.anchor,l.anchor==l.from?1:-1)),G.gecko&&l.empty&&!this.hasComposition&&gE(u)){let d=document.createTextNode("");this.view.observer.ignore(()=>u.node.insertBefore(d,u.node.childNodes[u.offset]||null)),u=m=new Gt(d,0),o=!0}let c=this.view.observer.selectionRange;(o||!c.focusNode||(!bi(u.node,u.offset,c.anchorNode,c.anchorOffset)||!bi(m.node,m.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,l))&&(this.view.observer.ignore(()=>{G.android&&G.chrome&&n.contains(c.focusNode)&&wE(c.focusNode,n)&&(n.blur(),n.focus({preventScroll:!0}));let d=Zi(this.view.root);if(d)if(l.empty){if(G.gecko){let h=fE(u.node,u.offset);if(h&&h!=3){let g=(h==1?hp:gp)(u.node,u.offset);g&&(u=new Gt(g.node,g.offset))}}d.collapse(u.node,u.offset),l.bidiLevel!=null&&d.caretBidiLevel!==void 0&&(d.caretBidiLevel=l.bidiLevel)}else if(d.extend){d.collapse(u.node,u.offset);try{d.extend(m.node,m.offset)}catch{}}else{let h=document.createRange();l.anchor>l.head&&([u,m]=[m,u]),h.setEnd(m.node,m.offset),h.setStart(u.node,u.offset),d.removeAllRanges(),d.addRange(h)}r&&this.view.root.activeElement==n&&(n.blur(),a&&a.focus())}),this.view.observer.setSelectionRange(u,m)),this.impreciseAnchor=u.precise?null:new Gt(c.anchorNode,c.anchorOffset),this.impreciseHead=m.precise?null:new Gt(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&bi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,n=Zi(e.root),{anchorNode:a,anchorOffset:s}=e.observer.selectionRange;if(!n||!t.empty||!t.assoc||!n.modify)return;let r=this.lineAt(t.head,t.assoc);if(!r)return;let o=r.posAtStart;if(t.head==o||t.head==o+r.length)return;let l=this.coordsAt(t.head,-1),u=this.coordsAt(t.head,1);if(!l||!u||l.bottom>u.top)return;let m=this.domAtPos(t.head+t.assoc,t.assoc);n.collapse(m.node,m.offset),n.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&n.collapse(a,s)}posFromDOM(e,t){let n=this.tile.nearest(e);if(!n)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let a=n.posAtStart;if(n.isComposite()){let s;if(e==n.dom)s=n.dom.childNodes[t];else{let r=vn(e)==0?0:t==0?-1:1;for(;;){let o=e.parentNode;if(o==n.dom)break;r==0&&o.firstChild!=o.lastChild&&(e==o.firstChild?r=-1:r=1),e=o}r<0?s=e:s=e.nextSibling}if(s==n.dom.firstChild)return a;for(;s&&!Ae.get(s);)s=s.nextSibling;if(!s)return a+n.length;for(let r=0,o=a;;r++){let l=n.children[r];if(l.dom==s)return o;o+=l.length+l.breakAfter}}else return n.isText()?e==n.dom?a+t:a+(t?n.length:0):a}domAtPos(e,t){let{tile:n,offset:a}=this.tile.resolveBlock(e,t);return n.isWidget()?n.domPosFor(a,t):n.domIn(a,t)}inlineDOMNearPos(e,t){let n,a=-1,s=!1,r,o=-1,l=!1;return this.tile.blockTiles((u,m)=>{if(u.isWidget()){if(u.flags&32&&m>=e)return!0;u.flags&16&&(s=!0)}else{let c=m+u.length;if(m<=e&&(n=u,a=e-m,s=c=e&&!r&&(r=u,o=e-m,l=m>e),m>e&&r)return!0}}),!n&&!r?this.domAtPos(e,t):(s&&r?n=null:l&&n&&(r=null),n&&t<0||!r?n.domIn(a,t):r.domIn(o,t))}coordsAt(e,t,n){let{tile:a,offset:s}=this.tile.resolveBlock(e,t);return a.isWidget()?a.widget instanceof Fr?null:a.coordsInWidget(s,t,!0):a.coordsIn(s,t,n)}lineAt(e,t){let{tile:n}=this.tile.resolveBlock(e,t);return n.isLine()?n:null}coordsForChar(e){let{tile:t,offset:n}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function a(s,r){if(s.isComposite())for(let o of s.children){if(o.length>=r){let l=a(o,r);if(l)return l}if(r-=o.length,r<0)break}else if(s.isText()&&rMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,o=-1,l=this.view.textDirection==ye.LTR,u=0,m=(c,d,h)=>{for(let g=0;ga);g++){let f=c.children[g],x=d+f.length,b=f.dom.getBoundingClientRect(),{height:v}=b;if(h&&!g&&(u+=b.top-h.top),f instanceof fn)x>n&&m(f,d,b);else if(d>=n&&(u>0&&t.push(-u),t.push(v+u),u=0,r)){let w=f.dom.lastChild,z=w?$a(w):[];if(z.length){let I=z[z.length-1],k=l?I.right-b.left:b.right-I.left;k>o&&(o=k,this.minWidth=s,this.minWidthFrom=d,this.minWidthTo=x)}}h&&g==c.children.length-1&&(u+=h.bottom-b.bottom),d=x+f.breakAfter}};return m(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?ye.RTL:ye.LTR}measureTextSize(){let e=this.tile.blockTiles(r=>{if(r.isLine()&&r.children.length&&r.length<=20){let o=0,l;for(let u of r.children){if(!u.isText()||/[^ -~]/.test(u.text))return;let m=$a(u.dom);if(m.length!=1)return;o+=m[0].width,l=m[0].height}if(o)return{lineHeight:r.dom.getBoundingClientRect().height,charWidth:o/r.length,textHeight:l}}});if(e)return e;let t=document.createElement("div"),n,a,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let r=$a(t.firstChild)[0];n=t.getBoundingClientRect().height,a=r&&r.width?r.width/27:7,s=r&&r.height?r.height:n,t.remove()}),{lineHeight:n,charWidth:a,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let n=0,a=0;;a++){let s=a==t.viewports.length?null:t.viewports[a],r=s?s.from-1:this.view.state.doc.length;if(r>n){let o=(t.lineBlockAt(r).bottom-t.lineBlockAt(n).top)/this.view.scaleY;e.push(he.replace({widget:new Fr(o),block:!0,inclusive:!0,isBlockGap:!0}).range(n,r))}if(!s)break;n=s.to+1}return he.set(e)}updateDeco(){let e=1,t=this.view.state.facet(or).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),n=!1,a=this.view.state.facet(P0).map((s,r)=>{let o=typeof s=="function";return o&&(n=!0),o?s(this.view):s});for(a.length&&(this.dynamicDecorationMap[e++]=n,t.push(ie.join(a))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){if(e.isSnapshot){let u=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=u.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let u of this.view.state.facet(jp))try{if(u(this.view,e.range,e))return!0}catch(m){zt(this.view.state,m,"scroll handler")}let{range:t}=e,n=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),a;if(!n)return;!t.empty&&(a=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(n={left:Math.min(n.left,a.left),top:Math.min(n.top,a.top),right:Math.max(n.right,a.right),bottom:Math.max(n.bottom,a.bottom)});let s=O0(this.view),r={left:n.left-s.left,top:n.top-s.top,right:n.right+s.right,bottom:n.bottom+s.bottom},{offsetWidth:o,offsetHeight:l}=this.view.scrollDOM;if(JW(this.view.scrollDOM,r,t.head1&&(n.top>window.visualViewport.offsetTop+window.visualViewport.height||n.bottomn.isWidget()||n.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){fl(this.tile)}}function fl(i,e){let t=e==null?void 0:e.get(i);if(t!=1){t==null&&i.destroy();for(let n of i.children)fl(n,e)}}function gE(i){return He(i.node)&&i.node.firstChild&&(i.offset==0||i.node.childNodes[i.offset-1].contentEditable=="false")&&(i.offset==i.node.childNodes.length||i.node.childNodes[i.offset].contentEditable=="false")}function Dp(i,e){let t=i.observer.selectionRange;if(!t.focusNode)return null;let n=hp(t.focusNode,t.focusOffset),a=gp(t.focusNode,t.focusOffset),s=n||a;if(a&&n&&a.node!=n.node){let o=Ae.get(a.node);if(!o||o.isText()&&o.text!=a.node.nodeValue)s=a;else if(i.docView.lastCompositionAfterCursor){let l=Ae.get(n.node);!l||l.isText()&&l.text!=n.node.nodeValue||(s=a)}}if(i.docView.lastCompositionAfterCursor=s!=n,!s)return null;let r=e-s.offset;return{from:r,to:r+s.node.nodeValue.length,node:s.node}}function pE(i,e,t){let n=Dp(i,t);if(!n)return null;let{node:a,from:s,to:r}=n,o=a.nodeValue;if(/[\n\r]/.test(o)||i.state.doc.sliceString(n.from,n.to)!=o)return null;let l=e.invertedDesc;return{range:new Dt(l.mapPos(s),l.mapPos(r),s,r),text:a}}function fE(i,e){return He(i)?(e&&i.childNodes[e-1].contentEditable=="false"?1:0)|(e{ne.from&&(t=!0)}),t}class Fr extends J1{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function IE(i,e,t=1){let n=i.charCategorizer(e),a=i.doc.lineAt(e),s=e-a.from;if(a.length==0)return Z.cursor(e);s==0?t=1:s==a.length&&(t=-1);let r=s,o=s;t<0?r=rt(a.text,s,!1):o=rt(a.text,s);let l=n(a.text.slice(r,o));for(;r>0;){let u=rt(a.text,r,!1);if(n(a.text.slice(u,r))!=l)break;r=u}for(;oi.defaultLineHeight*1.5){let o=i.viewState.heightOracle.textHeight,l=Math.floor((a-t.top-(i.defaultLineHeight-o)*.5)/o);s+=l*i.viewState.heightOracle.lineLength}let r=i.state.sliceDoc(t.from,t.to);return t.from+OW(r,s,i.state.tabSize)}function xl(i,e,t){let n=i.lineBlockAt(e);if(Array.isArray(n.type)){let a;for(let s of n.type){if(s.from>e)break;if(!(s.toe)return s;(!a||s.type==$e.Text&&(a.type!=s.type||(t<0?s.frome)))&&(a=s)}}return a||n}return n}function SE(i,e,t,n){let a=xl(i,e.head,e.assoc||-1),s=!n||a.type!=$e.Text||!(i.lineWrapping||a.widgetLineBreaks)?null:i.coordsAtPos(e.assoc<0&&e.head>a.from?e.head-1:e.head);if(s){let r=i.dom.getBoundingClientRect(),o=i.textDirectionAt(a.from),l=i.posAndSideAtCoords({x:t==(o==ye.LTR)?r.right-1:r.left+1,y:(s.top+s.bottom)/2});if(l)return Z.cursor(l.pos,l.assoc)}return Z.cursor(t?a.to:a.from,t?1:-1)}function ec(i,e,t,n){let a=i.state.doc.lineAt(e.head),s=i.bidiSpans(a),r=i.textDirectionAt(a.from);for(let o=e,l=null;;){let u=XW(a,s,r,o,t),m=vp;if(!u){if(a.number==(t?i.state.doc.lines:1))return o;m=` +`,a=i.state.doc.line(a.number+(t?1:-1)),s=i.bidiSpans(a),u=t?Z.cursor(a.from,-1):Z.cursor(a.to,1)}if(l){if(!l(m))return o}else{if(!n)return u;l=n(m)}o=u}}function TE(i,e,t){let n=i.state.charCategorizer(e),a=n(t);return s=>{let r=n(s);return a==Zt.Space&&(a=r),a==r}}function jE(i,e,t,n){let a=e.head,s=t?1:-1;if(a==(t?i.state.doc.length:0))return Z.cursor(a,e.assoc);let r=e.goalColumn,o,l=i.contentDOM.getBoundingClientRect(),u=i.coordsAtPos(a,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),m=i.documentTop;if(u)r==null&&(r=u.left-l.left),o=s<0?u.top:u.bottom;else{let g=i.viewState.lineBlockAt(a);r==null&&(r=Math.min(l.right-l.left,i.defaultCharacterWidth*(a-g.from))),o=(s<0?g.top:g.bottom)+m}let c=l.left+r,d=i.viewState.heightOracle.textHeight>>1,h=n??d;for(let g=0;;g+=d){let f=o+(h+g)*s,x=bl(i,{x:c,y:f},!1,s);if(t?f>l.bottom:fo:v{if(e>s&&ea(i)),t.from,e.head>t.from?-1:1);return n==t.from?t:Z.cursor(n,ni.viewState.docHeight)return new sn(i.state.doc.length,-1);if(u=i.elementAtHeight(l),n==null)break;if(u.type==$e.Text){if(n<0?u.toi.viewport.to)break;let d=i.docView.coordsAt(n<0?u.from:u.to,n>0?-1:1);if(d&&(n<0?d.top<=l+s:d.bottom>=l+s))break}let c=i.viewState.heightOracle.textHeight/2;l=n>0?u.bottom+c:u.top-c}if(i.viewport.from>=u.to||i.viewport.to<=u.from){if(t)return null;if(u.type==$e.Text){let c=kE(i,a,u,r,o);return new sn(c,c==u.from?1:-1)}}if(u.type!=$e.Text)return l<(u.top+u.bottom)/2?new sn(u.from,1):new sn(u.to,-1);let m=i.docView.lineAt(u.from,2);return(!m||m.length!=u.length)&&(m=i.docView.lineAt(u.from,-2)),new _E(i,r,o,i.textDirectionAt(u.from)).scanTile(m,u.from)}class _E{constructor(e,t,n,a){this.view=e,this.x=t,this.y=n,this.baseDir=a,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||n.length&&(n[0].level!=this.baseDir||n[0].to+a.from>1;t:if(r.has(f)){for(let v=1;v=s&&(w-=g),!r.has(w)){f=w;break t}}break e}r.add(f);let x=t(f),b=0;if(x)for(let v=0;v1))if(w.bottomthis.y)(!u||u.top>w.top)&&(u=w),b=-1;else{let z=w.left>this.x?this.x-w.left:w.right(g+g+f)/3)return this.y=l.bottom-1,this.scan(e,t,!0);if(u&&u.top<(g+f+f)/3)return this.y=u.top+1,this.scan(e,t,!0)}let h=(o?this.dirAt(e[m],1):this.baseDir)==ye.LTR;return{i:m,after:this.x>(d.left+d.right)/2==h}}scanText(e,t){let n=[];for(let s=0;s{let r=n[s]-t,o=n[s+1]-t;return Di(e.dom,r,o).getClientRects()});return a.after?new sn(n[a.i+1],-1):new sn(n[a.i],1)}scanTile(e,t){if(!e.length)return new sn(t,1);if(e.children.length==1){let o=e.children[0];if(o.isText())return this.scanText(o,t);if(o.isComposite())return this.scanTile(o,t)}let n=[t];for(let o=0,l=t;o{let l=e.children[o];return l.flags&48?null:(He(l.dom)?l.dom:Di(l.dom,0,l.length)).getClientRects()}),s=e.children[a.i],r=n[a.i];return s.isText()?this.scanText(s,r):s.isComposite()?this.scanTile(s,r):a.after?new sn(n[a.i+1],-1):new sn(r,1)}}const b1="￿";class CE{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(re.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=b1}readRange(e,t){if(!e)return this;let n=e.parentNode;for(let a=e;;){this.findPointBefore(n,a);let s=this.text.length;this.readNode(a);let r=Ae.get(a),o=a.nextSibling;if(o==t){r!=null&&r.breakAfter&&!o&&n!=this.view.contentDOM&&this.lineBreak();break}let l=Ae.get(o);(r&&l?r.breakAfter:(r?r.breakAfter:js(a))||js(o)&&(a.nodeName!="BR"||r!=null&&r.isWidget())&&this.text.length>s)&&!PE(o,t)&&this.lineBreak(),a=o}return this.findPointBefore(n,t),this}readTextNode(e){let t=e.nodeValue;for(let n of this.points)n.node==e&&(n.pos=this.text.length+Math.min(n.offset,t.length));for(let n=0,a=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,r=1,o;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,n),r=this.lineSeparator.length):(o=a.exec(t))&&(s=o.index,r=o[0].length),this.append(t.slice(n,s<0?t.length:s)),s<0)break;if(this.lineBreak(),r>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=r-1);n=s+r}}readNode(e){let t=Ae.get(e),n=t&&t.overrideDOMText;if(n!=null){this.findPointInside(e,n.length);for(let a=n.iter();!a.next().done;)a.lineBreak?this.lineBreak():this.append(a.value)}else M1(e)?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():He(e)&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let n of this.points)n.node==e&&e.childNodes[n.offset]==t&&(n.pos=this.text.length)}findPointInside(e,t){for(let n of this.points)(M1(e)?n.node==e:e.contains(n.node))&&(n.pos=this.text.length+(AE(e,n.node,n.offset)?t:0))}}function AE(i,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:r}=e.docView,o=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Lp(e.docView.tile,t,n,0))){let l=s||r?[]:ZE(e),u=new CE(l,e);u.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=u.text,this.newSel=DE(l,this.bounds.from)}else{let l=e.observer.selectionRange,u=s&&s.node==l.focusNode&&s.offset==l.focusOffset||!cl(e.contentDOM,l.focusNode)?o.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),m=r&&r.node==l.anchorNode&&r.offset==l.anchorOffset||!cl(e.contentDOM,l.anchorNode)?o.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((G.ios||G.chrome)&&u!=m&&Math.min(u,m)<=o.main.from&&Math.max(u,m)>=o.main.to&&(c.from>0||c.to-1&&o.ranges.length>1)this.newSel=o.replaceRange(Z.range(m,u));else if(e.lineWrapping&&m==u&&!(o.main.empty&&o.main.head==u)&&e.inputState.lastTouchTime>Date.now()-100){let d=e.coordsAtPos(u,-1),h=0;d&&(h=e.inputState.lastTouchY<=d.bottom?-1:1),this.newSel=Z.create([Z.cursor(u,h)])}else this.newSel=Z.single(m,u)}}}function Lp(i,e,t,n){if(i.isComposite()){let a=-1,s=-1,r=-1,o=-1;for(let l=0,u=n,m=n;lt)return Lp(c,e,t,u);if(d>=e&&a==-1&&(a=l,s=u),u>t&&c.dom.parentNode==i.dom){r=l,o=m;break}m=d,u=d+c.breakAfter}return{from:s,to:o<0?n+i.length:o,startDOM:(a?i.children[a-1].dom.nextSibling:null)||i.dom.firstChild,endDOM:r=0?i.children[r].dom:null}}else return i.isText()?{from:n,to:n+i.length,startDOM:i.dom,endDOM:i.dom.nextSibling}:null}function Wp(i,e){let t,{newSel:n}=e,{state:a}=i,s=a.selection.main,r=i.inputState.lastKeyTime>Date.now()-100?i.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,u=s.from,m=null;(r===8||G.android&&e.text.length=o&&s.to<=l&&(e.typeOver||c!=e.text)&&c.slice(0,s.from-o)==e.text.slice(0,s.from-o)&&c.slice(s.to-o)==e.text.slice(d=e.text.length-(c.length-(s.to-o)))?t={from:s.from,to:s.to,insert:oe.of(e.text.slice(s.from-o,d).split(b1))}:(h=Ep(c,e.text,u-o,m))&&(G.chrome&&r==13&&h.toB==h.from+2&&e.text.slice(h.from,h.toB)==b1+b1&&h.toB--,t={from:o+h.from,to:o+h.toA,insert:oe.of(e.text.slice(h.from,h.toB).split(b1))})}else n&&(!i.hasFocus&&a.facet(gn)||vl(n,s))&&(n=null);if(!t&&!n)return!1;if((G.mac||G.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&i.contentDOM.getAttribute("autocorrect")=="off"?(n&&t.insert.length==2&&(n=Z.single(n.main.anchor-1,n.main.head-1)),t={from:t.from,to:t.to,insert:oe.of([t.insert.toString().replace("."," ")])}):a.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:a.toText(i.inputState.insertingText)}:G.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` + `&&i.lineWrapping&&(n&&(n=Z.single(n.main.anchor-1,n.main.head-1)),t={from:s.from,to:s.to,insert:oe.of([" "])}),t)return M0(i,t,n,r);if(n&&!vl(n,s)){let o=!1,l="select";return i.inputState.lastSelectionTime>Date.now()-50&&(i.inputState.lastSelectionOrigin=="select"&&(o=!0),l=i.inputState.lastSelectionOrigin,l=="select.pointer"&&(n=Bp(a.facet(Yi).map(u=>u(i)),n))),i.dispatch({selection:n,scrollIntoView:o,userEvent:l}),!0}else return!1}function M0(i,e,t,n=-1){if(G.ios&&i.inputState.flushIOSKey(e))return!0;let a=i.state.selection.main;if(G.android&&(e.to==a.to&&(e.from==a.from||e.from==a.from-1&&i.state.sliceDoc(e.from,a.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&_1(i.contentDOM,"Enter",13)||(e.from==a.from-1&&e.to==a.to&&e.insert.length==0||n==8&&e.insert.lengtha.head)&&_1(i.contentDOM,"Backspace",8)||e.from==a.from&&e.to==a.to+1&&e.insert.length==0&&_1(i.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();i.inputState.composing>=0&&i.inputState.composing++;let r,o=()=>r||(r=ME(i,e,t));return i.state.facet(kp).some(l=>l(i,e.from,e.to,s,o))||i.dispatch(o()),!0}function ME(i,e,t){let n,a=i.state,s=a.selection.main,r=-1;if(e.from==e.to&&e.froms.to){let l=e.fromc(i)),u,l);e.from==m&&(r=m)}if(r>-1)n={changes:e,selection:Z.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&i.inputState.composing<0){let l=s.frome.to?a.sliceDoc(e.to,s.to):"";n=a.replaceSelection(i.state.toText(l+e.insert.sliceString(0,void 0,i.state.lineBreak)+u))}else{let l=a.changes(e),u=t&&t.main.to<=l.newLength?t.main:void 0;if(a.selection.ranges.length>1&&(i.inputState.composing>=0||i.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let m=i.state.sliceDoc(e.from,e.to),c,d=t&&Dp(i,t.main.head);if(d){let g=e.insert.length-(e.to-e.from);c={from:d.from,to:d.to-g}}else c=i.state.doc.lineAt(s.head);let h=s.to-e.to;n=a.changeByRange(g=>{if(g.from==s.from&&g.to==s.to)return{changes:l,range:u||g.map(l)};let f=g.to-h,x=f-m.length;if(i.state.sliceDoc(x,f)!=m||f>=c.from&&x<=c.to)return{range:g};let b=a.changes({from:x,to:f,insert:e.insert}),v=g.to-s.to;return{changes:b,range:u?Z.range(Math.max(0,u.anchor+v),Math.max(0,u.head+v)):g.map(b)}})}else n={changes:l,selection:u&&a.selection.replaceRange(u)}}let o="input.type";return(i.composing||i.inputState.compositionPendingChange&&i.inputState.compositionEndedAt>Date.now()-50)&&(i.inputState.compositionPendingChange=!1,o+=".compose",i.inputState.compositionFirstChange&&(o+=".start",i.inputState.compositionFirstChange=!1)),a.update(n,{userEvent:o,scrollIntoView:!0})}function Ep(i,e,t,n){let a=Math.min(i.length,e.length),s=0;for(;s0&&o>0&&i.charCodeAt(r-1)==e.charCodeAt(o-1);)r--,o--;if(n=="end"){let l=Math.max(0,s-Math.min(r,o));t-=r+l-s}if(r=r?s-t:0;s-=l,o=s+(o-r),r=s}else if(o=o?s-t:0;s-=l,r=s+(r-o),o=s}return{from:s,toA:r,toB:o}}function ZE(i){let e=[];if(i.root.activeElement!=i.contentDOM)return e;let{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}=i.observer.selectionRange;return t&&(e.push(new tc(t,n)),(a!=t||s!=n)&&e.push(new tc(a,s))),e}function DE(i,e){if(i.length==0)return null;let t=i[0].pos,n=i.length==2?i[1].pos:t;return t<0||n<0?null:t==n?Z.create([Z.cursor(n+e,-1)]):Z.single(t+e,n+e)}function vl(i,e){return e.head==i.main.head&&e.anchor==i.main.anchor}class BE{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,G.safari&&e.contentDOM.addEventListener("input",()=>null),G.gecko&&XE(e.contentDOM.ownerDocument)}handleEvent(e){!HE(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let n=this.handlers[e];if(n){for(let a of n.observers)a(this.view,t);for(let a of n.handlers){if(t.defaultPrevented)break;if(a(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=WE(e),n=this.handlers,a=this.view.contentDOM;for(let s in t)if(s!="scroll"){let r=!t[s].handlers.length,o=n[s];o&&r!=!o.handlers.length&&(a.removeEventListener(s,this.handleEvent),o=null),o||a.addEventListener(s,this.handleEvent,{passive:r})}for(let s in n)s!="scroll"&&!t[s]&&a.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Jp.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),G.android&&G.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if(G.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(Np.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||EE.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};t.shiftKey&&G.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&LE(this.view.win)&&(t.shiftKey=!1);let n=this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t};return setTimeout(()=>{this.pendingIOSKey==n&&this.flushIOSKey()},50),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||this.view.observer.pendingRecords().length||t.key=="Enter"&&e&&e.from0?!0:G.safari&&!G.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function LE(i){return i.visualViewport?i.visualViewport.height*i.visualViewport.scale/i.document.documentElement.clientHeight<.85:!1}function nc(i,e){return(t,n)=>{try{return e.call(i,n,t)}catch(a){zt(t.state,a)}}}function WE(i){let e=Object.create(null);function t(n){return e[n]||(e[n]={observers:[],handlers:[]})}for(let n of i){let a=n.spec,s=a&&a.plugin.domEventHandlers,r=a&&a.plugin.domEventObservers;if(s)for(let o in s){let l=s[o];l&&t(o).handlers.push(nc(n.value,l))}if(r)for(let o in r){let l=r[o];l&&t(o).observers.push(nc(n.value,l))}}for(let n in Vt)t(n).handlers.push(Vt[n]);for(let n in ct)t(n).observers.push(ct[n]);return e}const Np=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],EE="dthko",Jp=[16,17,18,20,91,92,224,225],Ia=6;function ka(i){return Math.max(0,i)*.7+8}function NE(i,e){return Math.max(Math.abs(i.clientX-e.clientX),Math.abs(i.clientY-e.clientY))}class JE{constructor(e,t,n,a){this.view=e,this.startEvent=t,this.style=n,this.mustSelect=a,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=lp(e.contentDOM),this.atoms=e.state.facet(Yi).map(r=>r(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(re.allowMultipleSelections)&&FE(e,t),this.dragging=GE(e,t)&&Gp(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&NE(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,n=0,a=0,s=0,r=this.view.win.innerWidth,o=this.view.win.innerHeight;this.scrollParents.x&&({left:a,right:r}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:o}=this.scrollParents.y.getBoundingClientRect());let l=O0(this.view);e.clientX-l.left<=a+Ia?t=-ka(a-e.clientX):e.clientX+l.right>=r-Ia&&(t=ka(e.clientX-r)),e.clientY-l.top<=s+Ia?n=-ka(s-e.clientY):e.clientY+l.bottom>=o-Ia&&(n=ka(e.clientY-o)),this.setScrollSpeed(t,n)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,n=Bp(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!n.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:n,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function FE(i,e){let t=i.state.facet(yp);return t.length?t[0](e):G.mac?e.metaKey:e.ctrlKey}function RE(i,e){let t=i.state.facet(wp);return t.length?t[0](e):G.mac?!e.altKey:!e.ctrlKey}function GE(i,e){let{main:t}=i.state.selection;if(t.empty)return!1;let n=Zi(i.root);if(!n||n.rangeCount==0)return!0;let a=n.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&r.top<=e.clientY&&r.bottom>=e.clientY)return!0}return!1}function HE(i,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,n;t!=i.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(n=Ae.get(t))&&n.isWidget()&&!n.isHidden&&n.widget.ignoreEvent(e))return!1;return!0}const Vt=Object.create(null),ct=Object.create(null),Fp=G.ie&&G.ie_version<15||G.ios&&G.webkit_version<604;function VE(i){let e=i.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{i.focus(),t.remove(),Rp(i,t.value)},50)}function mr(i,e,t){for(let n of i.facet(e))t=n(t,i);return t}function Rp(i,e){e=mr(i.state,_0,e);let{state:t}=i,n,a=1,s=t.toText(e),r=s.lines==t.selection.ranges.length;if(yl!=null&&t.selection.ranges.every(l=>l.empty)&&yl==s.toString()){let l=-1;n=t.changeByRange(u=>{let m=t.doc.lineAt(u.from);if(m.from==l)return{range:u};l=m.from;let c=t.toText((r?s.line(a++).text:e)+t.lineBreak);return{changes:{from:m.from,insert:c},range:Z.cursor(u.from+c.length,-1)}})}else r?n=t.changeByRange(l=>{let u=s.line(a++);return{changes:{from:l.from,to:l.to,insert:u.text},range:Z.cursor(l.from+u.length,-1)}}):n=t.replaceSelection(s);i.dispatch(n,{userEvent:"input.paste",scrollIntoView:!0})}ct.scroll=i=>{let e=i.inputState;e.lastScrollTop=i.scrollDOM.scrollTop,e.lastScrollLeft=i.scrollDOM.scrollLeft,G.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};ct.wheel=ct.mousewheel=i=>{i.inputState.lastWheelEvent=Date.now()};Vt.keydown=(i,e)=>(i.inputState.setSelectionOrigin("select"),e.keyCode==27&&i.inputState.tabFocusMode!=0&&(i.inputState.tabFocusMode=Date.now()+2e3),!1);ct.touchstart=(i,e)=>{let t=i.inputState,n=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),n&&(t.lastTouchX=n.clientX,t.lastTouchY=n.clientY),t.setSelectionOrigin("select.pointer")};ct.touchmove=i=>{i.inputState.setSelectionOrigin("select.pointer")};ct.touchend=(i,e)=>{i.inputState.touchActive=!1};Vt.mousedown=(i,e)=>{if(i.observer.flush(),i.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let n of i.state.facet(zp))if(t=n(i,e),t)break;if(!t&&e.button==0&&(t=qE(i,e)),t){let n=!i.hasFocus;i.inputState.startMouseSelection(new JE(i,e,t,n)),n&&i.observer.ignore(()=>{cp(i.contentDOM);let s=i.root.activeElement;s&&!s.contains(i.contentDOM)&&s.blur()});let a=i.inputState.mouseSelection;if(a)return a.start(e),a.dragging===!1}else i.inputState.setSelectionOrigin("select.pointer");return!1};function ic(i,e,t,n){if(n==1)return Z.cursor(e,t);if(n==2)return IE(i.state,e,t);{let a=i.docView.lineAt(e,t),s=i.state.doc.lineAt(a?a.posAtEnd:e),r=a?a.posAtStart:s.from,o=a?a.posAtEnd:s.to;return oDate.now()-400&&Math.abs(e.clientX-i.clientX)<2&&Math.abs(e.clientY-i.clientY)<2?(sc+1)%3:1}function qE(i,e){let t=i.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),n=Gp(e),a=i.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),a=a.map(s.changes))},get(s,r,o){let l=i.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),u,m=ic(i,l.pos,l.assoc,n);if(t.pos!=l.pos&&!r){let c=ic(i,t.pos,t.assoc,n),d=Math.min(c.from,m.from),h=Math.max(c.to,m.to);m=d1&&(u=UE(a,l.pos))?u:o?a.addRange(m):Z.create([m])}}}function UE(i,e){for(let t=0;t=e)return Z.create(i.ranges.slice(0,t).concat(i.ranges.slice(t+1)),i.mainIndex==t?0:i.mainIndex-(i.mainIndex>t?1:0))}return null}Vt.dragstart=(i,e)=>{let{selection:{main:t}}=i.state;if(e.target.draggable){let a=i.docView.tile.nearest(e.target);if(a&&a.isWidget()){let s=a.posAtStart,r=s+a.length;(s>=t.to||r<=t.from)&&(t=Z.undirectionalRange(s,r))}}let{inputState:n}=i;return n.mouseSelection&&(n.mouseSelection.dragging=!0),n.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",mr(i.state,C0,i.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Vt.dragend=i=>(i.inputState.draggedContent=null,!1);function oc(i,e,t,n){if(t=mr(i.state,_0,t),!t)return;let a=i.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=i.inputState,r=n&&s&&RE(i,e)?{from:s.from,to:s.to}:null,o={from:a,insert:t},l=i.state.changes(r?[r,o]:o);i.focus(),i.dispatch({changes:l,selection:{anchor:l.mapPos(a,-1),head:l.mapPos(a,1)},userEvent:r?"move.drop":"input.drop"}),i.inputState.draggedContent=null}Vt.drop=(i,e)=>{if(!e.dataTransfer)return!1;if(i.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let n=Array(t.length),a=0,s=()=>{++a==t.length&&oc(i,e,n.filter(r=>r!=null).join(i.state.lineBreak),!1)};for(let r=0;r{/[\x00-\x08\x0e-\x1f]{2}/.test(o.result)||(n[r]=o.result),s()},o.readAsText(t[r])}return!0}else{let n=e.dataTransfer.getData("Text");if(n)return oc(i,e,n,!0),!0}return!1};Vt.paste=(i,e)=>{if(i.state.readOnly)return!0;i.observer.flush();let t=Fp?null:e.clipboardData;return t?(Rp(i,t.getData("text/plain")||t.getData("text/uri-list")),!0):(VE(i),!1)};function YE(i,e){let t=i.dom.parentNode;if(!t)return;let n=t.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.value=e,n.focus(),n.selectionEnd=e.length,n.selectionStart=0,setTimeout(()=>{n.remove(),i.focus()},50)}function $E(i){let e=[],t=[],n=!1;for(let a of i.selection.ranges)a.empty||(e.push(i.sliceDoc(a.from,a.to)),t.push(a));if(!e.length){let a=-1;for(let{from:s}of i.selection.ranges){let r=i.doc.lineAt(s);r.number>a&&(e.push(r.text),t.push({from:r.from,to:Math.min(i.doc.length,r.to+1)})),a=r.number}n=!0}return{text:mr(i,C0,e.join(i.lineBreak)),ranges:t,linewise:n}}let yl=null;Vt.copy=Vt.cut=(i,e)=>{if(!xi(i.contentDOM,i.observer.selectionRange))return!1;let{text:t,ranges:n,linewise:a}=$E(i.state);if(!t&&!a)return!1;yl=a?t:null,e.type=="cut"&&!i.state.readOnly&&i.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let s=Fp?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(YE(i,t),!1)};const Hp=Nn.define();function Vp(i,e){let t=[];for(let n of i.facet(Sp)){let a=n(i,e);a&&t.push(a)}return t.length?i.update({effects:t,annotations:Hp.of(!0)}):null}function Qp(i){setTimeout(()=>{let e=i.hasFocus;if(e!=i.inputState.notifiedFocused){let t=Vp(i.state,e);t?i.dispatch(t):i.update([])}},10)}ct.focus=i=>{i.inputState.lastFocusTime=Date.now(),!i.scrollDOM.scrollTop&&(i.inputState.lastScrollTop||i.inputState.lastScrollLeft)&&(i.scrollDOM.scrollTop=i.inputState.lastScrollTop,i.scrollDOM.scrollLeft=i.inputState.lastScrollLeft),Qp(i)};ct.blur=i=>{i.observer.clearSelectionRange(),Qp(i)};ct.compositionstart=ct.compositionupdate=(i,e)=>{if(!i.observer.editContext&&(i.inputState.compositionFirstChange==null&&(i.inputState.compositionFirstChange=!0),i.inputState.composing<0)){let{main:t}=i.state.selection;!t.empty&&i.lineBlockAt(t.from).from!=i.lineBlockAt(t.to).from&&!i.state.readOnly&&i.dispatch({changes:i.state.selection.ranges.filter(n=>!n.empty).map(n=>({from:n.from,to:n.to})),userEvent:"input"}),i.inputState.composing=0}};ct.compositionend=i=>{i.observer.editContext||(i.inputState.composing=-1,i.inputState.compositionEndedAt=Date.now(),i.inputState.compositionPendingKey=!0,i.inputState.compositionPendingChange=i.observer.pendingRecords().length>0,i.inputState.compositionFirstChange=null,G.chrome&&G.android?i.observer.flushSoon():i.inputState.compositionPendingChange?Promise.resolve().then(()=>i.observer.flush()):setTimeout(()=>{i.inputState.composing<0&&i.docView.hasComposition&&i.update([])},50))};ct.contextmenu=i=>{i.inputState.lastContextMenu=Date.now()};Vt.beforeinput=(i,e)=>{var t,n;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(i.inputState.insertingText=e.data,i.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&i.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),r=e.getTargetRanges();if(s&&r.length){let o=r[0],l=i.posAtDOM(o.startContainer,o.startOffset),u=i.posAtDOM(o.endContainer,o.endOffset);return M0(i,{from:l,to:u,insert:i.state.toText(s)},null),!0}}let a;if(G.chrome&&G.android&&(a=Np.find(s=>s.inputType==e.inputType))&&(i.observer.delayAndroidKey(a.key,a.keyCode),a.key=="Backspace"||a.key=="Delete")){let s=((n=window.visualViewport)===null||n===void 0?void 0:n.height)||0;setTimeout(()=>{var r;(((r=window.visualViewport)===null||r===void 0?void 0:r.height)||0)>s+10&&i.hasFocus&&(i.contentDOM.blur(),i.focus())},100)}return G.ios&&e.inputType=="deleteContentForward"&&i.observer.flushSoon(),G.safari&&e.inputType=="insertText"&&i.inputState.composing>=0&&setTimeout(()=>ct.compositionend(i,e),20),!1};const lc=new Set;function XE(i){lc.has(i)||(lc.add(i),i.addEventListener("copy",()=>{}),i.addEventListener("cut",()=>{}))}const uc=["pre-wrap","normal","pre-line","break-spaces"];let L1=!1;function mc(){L1=!1}class KE{constructor(e){this.lineWrapping=e,this.doc=oe.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let n=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(n+=Math.max(0,Math.ceil((t-e-n*this.lineLength*.5)/this.lineLength))),this.lineHeight*n}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return uc.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let n=0;n-1,l=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=t,this.charWidth=n,this.textHeight=a,this.lineLength=s,l){this.heightSamples={};for(let u=0;u0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>Xa&&(L1=!0),this.height=e)}replace(e,t,n){return mt.of(n)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,n,a){let s=this,r=n.doc;for(let o=a.length-1;o>=0;o--){let{fromA:l,toA:u,fromB:m,toB:c}=a[o],d=s.lineAt(l,we.ByPosNoHeight,n.setDoc(t),0,0),h=d.to>=u?d:s.lineAt(u,we.ByPosNoHeight,n,0,0);for(c+=h.to-u,u=h.to;o>0&&d.from<=a[o-1].toA;)l=a[o-1].fromA,m=a[o-1].fromB,o--,ls*2){let o=e[t-1];o.break?e.splice(--t,1,o.left,null,o.right):e.splice(--t,1,o.left,o.right),n+=1+o.break,a-=o.size}else if(s>a*2){let o=e[n];o.break?e.splice(n,1,o.left,null,o.right):e.splice(n,1,o.left,o.right),n+=2+o.break,s-=o.size}else break;else if(a=s&&r(this.lineAt(0,we.ByPos,n,a,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more&&this.setMeasuredHeight(a),this.outdated=!1,this}toString(){return`block(${this.length})`}}class yt extends qp{constructor(e,t,n){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=n}mainBlock(e,t){return new Rt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,n){let a=n[0];return n.length==1&&(a instanceof yt||a instanceof qe&&a.flags&4)&&Math.abs(this.length-a.length)<10?(a instanceof qe?a=new yt(a.length,this.height,this.spaceAbove):a.height=this.height,this.outdated||(a.outdated=!1),a):mt.of(n)}updateHeight(e,t=0,n=!1,a){return a&&a.from<=t&&a.more?this.setMeasuredHeight(a):(n||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class qe extends mt{constructor(e){super(e,0)}heightMetrics(e,t){let n=e.doc.lineAt(t).number,a=e.doc.lineAt(t+this.length).number,s=a-n+1,r,o=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*s);r=l/s,this.length>s+1&&(o=(this.height-l)/(this.length-s-1))}else r=this.height/s;return{firstLine:n,lastLine:a,perLine:r,perChar:o}}blockAt(e,t,n,a){let{firstLine:s,lastLine:r,perLine:o,perChar:l}=this.heightMetrics(t,a);if(t.lineWrapping){let u=a+(e0){let s=n[n.length-1];s instanceof qe?n[n.length-1]=new qe(s.length+a):n.push(null,new qe(a-1))}if(e>0){let s=n[0];s instanceof qe?n[0]=new qe(e+s.length):n.unshift(new qe(e-1),null)}return mt.of(n)}decomposeLeft(e,t){t.push(new qe(e-1),null)}decomposeRight(e,t){t.push(null,new qe(this.length-e-1))}updateHeight(e,t=0,n=!1,a){let s=t+this.length;if(a&&a.from<=t+this.length&&a.more){let r=[],o=Math.max(t,a.from),l=-1;for(a.from>t&&r.push(new qe(a.from-t-1).updateHeight(e,t));o<=s&&a.more;){let m=e.doc.lineAt(o).length;r.length&&r.push(null);let c=a.heights[a.index++],d=0;c<0&&(d=-c,c=a.heights[a.index++]),l==-1?l=c:Math.abs(c-l)>=Xa&&(l=-2);let h=new yt(m,c,d);h.outdated=!1,r.push(h),o+=m+1}o<=s&&r.push(null,new qe(s-o).updateHeight(e,o));let u=mt.of(r);return(l<0||Math.abs(u.height-this.height)>=Xa||Math.abs(l-this.heightMetrics(e,t).perLine)>=Xa)&&(L1=!0),Os(this,u)}else(n||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class nN extends mt{constructor(e,t,n){super(e.length+(t?1:0)+n.length,e.height+n.height,(t?1:0)|(e.outdated||n.outdated?2:0)),this.left=e,this.right=n,this.size=e.size+n.size}get break(){return this.flags&1}blockAt(e,t,n,a){let s=n+this.left.height;return eo))return u;let m=t==we.ByPosNoHeight?we.ByPosNoHeight:we.ByPos;return l?u.join(this.right.lineAt(o,m,n,r,o)):this.left.lineAt(o,m,n,a,s).join(u)}forEachLine(e,t,n,a,s,r){let o=a+this.left.height,l=s+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,n,o,l,r);else{let u=this.lineAt(l,we.ByPos,n,a,s);e=e&&u.from<=t&&r(u),t>u.to&&this.right.forEachLine(Math.max(e,u.to+1),t,n,o,l,r)}}replace(e,t,n){let a=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-a,t-a,n));let s=[];e>0&&this.decomposeLeft(e,s);let r=s.length;for(let o of n)s.push(o);if(e>0&&cc(s,r-1),t=n&&t.push(null)),e>n&&this.right.decomposeLeft(e-n,t)}decomposeRight(e,t){let n=this.left.length,a=n+this.break;if(e>=a)return this.right.decomposeRight(e-a,t);e2*t.size||t.size>2*e.size?mt.of(this.break?[e,null,t]:[e,t]):(this.left=Os(this.left,e),this.right=Os(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,n=!1,a){let{left:s,right:r}=this,o=t+s.length+this.break,l=null;return a&&a.from<=t+s.length&&a.more?l=s=s.updateHeight(e,t,n,a):s.updateHeight(e,t,n),a&&a.from<=o+r.length&&a.more?l=r=r.updateHeight(e,o,n,a):r.updateHeight(e,o,n),l?this.balanced(s,r):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function cc(i,e){let t,n;i[e]==null&&(t=i[e-1])instanceof qe&&(n=i[e+1])instanceof qe&&i.splice(e-1,3,new qe(t.length+1+n.length))}const iN=5;class Z0{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let n=Math.min(t,this.lineEnd),a=this.nodes[this.nodes.length-1];a instanceof yt?a.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new yt(n-this.pos,-1,0)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,n){if(e=iN)&&this.addLineDeco(a,s,r)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new yt(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let n=new qe(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof yt)return e;let t=new yt(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,n){let a=this.ensureLine();a.length+=n,a.collapsed+=n,a.widgetHeight=Math.max(a.widgetHeight,e),a.breaks+=t,this.writtenTo=this.pos=this.pos+n}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof yt)&&!this.isCovered?this.nodes.push(new yt(0,-1,0)):(this.writtenTou.clientHeight||u.scrollWidth>u.clientWidth)&&m.overflow!="visible"){let c=u.getBoundingClientRect();s=Math.max(s,c.left),r=Math.min(r,c.right),o=Math.max(o,c.top),l=Math.min(u==i.parentNode?a.innerHeight:l,c.bottom)}u=m.position=="absolute"||m.position=="fixed"?u.offsetParent:u.parentNode}else if(u.nodeType==11)u=u.host;else break;return{left:s-t.left,right:Math.max(s,r)-t.left,top:o-(t.top+e),bottom:Math.max(o,l)-(t.top+e)}}function oN(i){let e=i.getBoundingClientRect(),t=i.ownerDocument.defaultView||window;return e.left0&&e.top0}function lN(i,e){let t=i.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Gr{constructor(e,t,n,a){this.from=e,this.to=t,this.size=n,this.displaySize=a}static same(e,t){if(e.length!=t.length)return!1;for(let n=0;ntypeof a!="function"&&a.class=="cm-lineWrapping");this.heightOracle=new KE(n),this.stateDeco=hc(t),this.heightMap=mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle.setDoc(t.doc),[new Dt(0,0,0,t.doc.length)]);for(let a=0;a<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());a++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=he.set(this.lineGaps.map(a=>a.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let n=0;n<=1;n++){let a=n?t.head:t.anchor;if(!e.some(({from:s,to:r})=>a>=s&&a<=r)){let{from:s,to:r}=this.lineBlockAt(a);e.push(new Sa(s,r))}}return this.viewports=e.sort((n,a)=>n.from-a.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?wl:Ms.get(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(oi(e,this.scaler))})}update(e,t=null){this.state=e.state;let n=this.stateDeco;this.stateDeco=hc(this.state);let a=e.changedRanges,s=Dt.extendWithRanges(a,aN(n,this.stateDeco,e?e.changes:De.empty(this.state.doc.length))),r=this.heightMap.height,o=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);mc(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=r||L1)&&(e.flags|=2),o?(this.scrollAnchorPos=e.changes.mapPos(o.from,-1),this.scrollAnchorHeight=o.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=r);let l=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let u=l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,e.flags|=this.updateForViewport(),(u||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(eE)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,n=window.getComputedStyle(t),a=this.heightOracle,s=n.whiteSpace;this.defaultTextDirection=n.direction=="rtl"?ye.RTL:ye.LTR;let r=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",o=t.getBoundingClientRect(),l=r||this.mustMeasureContent||this.contentDOMHeight!=o.height;this.contentDOMHeight=o.height,this.mustMeasureContent=!1;let u=0,m=0;if(o.width&&o.height){let{scaleX:I,scaleY:k}=op(t,o);(I>.005&&Math.abs(this.scaleX-I)>.005||k>.005&&Math.abs(this.scaleY-k)>.005)&&(this.scaleX=I,this.scaleY=k,u|=16,r=l=!0)}let c=(parseInt(n.paddingTop)||0)*this.scaleY,d=(parseInt(n.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=d)&&(this.paddingTop=c,this.paddingBottom=d,u|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(a.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,u|=16);let h=lp(this.view.contentDOM,!1).y;h!=this.scrollParent&&(this.scrollParent=h,this.scrollAnchorHeight=-1,this.scrollOffset=0);let g=this.getScrollOffset();this.scrollOffset!=g&&(this.scrollAnchorHeight=-1,this.scrollOffset=g),this.scrolledToBottom=dp(this.scrollParent||e.win);let f=(this.printing?lN:rN)(t,this.paddingTop),x=f.top-this.pixelViewport.top,b=f.bottom-this.pixelViewport.bottom;this.pixelViewport=f;let v=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(v!=this.inView&&(this.inView=v,v&&(l=!0)),!this.inView&&!this.scrollTarget&&!oN(e.dom))return 0;let w=o.width;if((this.contentDOMWidth!=w||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=o.width,this.editorHeight=e.scrollDOM.clientHeight,u|=16),l){let I=e.docView.measureVisibleLineHeights(this.viewport);if(a.mustRefreshForHeights(I)&&(r=!0),r||a.lineWrapping&&Math.abs(w-this.contentDOMWidth)>a.charWidth){let{lineHeight:k,charWidth:S,textHeight:_}=e.docView.measureTextSize();r=k>0&&a.refresh(s,k,S,_,Math.max(5,w/S),I),r&&(e.docView.minWidth=0,u|=16)}x>0&&b>0?m=Math.max(x,b):x<0&&b<0&&(m=Math.min(x,b)),mc();for(let k of this.viewports){let S=k.from==this.viewport.from?I:e.docView.measureVisibleLineHeights(k);this.heightMap=(r?mt.empty().applyChanges(this.stateDeco,oe.empty,this.heightOracle,[new Dt(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(a,0,r,new eN(k.from,S))}L1&&(u|=2)}let z=!this.viewportIsAppropriate(this.viewport,m)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return z&&(u&2&&(u|=this.updateScaler()),this.viewport=this.getViewport(m,this.scrollTarget),u|=this.updateForViewport()),(u&2||z)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(r?[]:this.lineGaps,e)),u|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),u}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),a=this.heightMap,s=this.heightOracle,{visibleTop:r,visibleBottom:o}=this,l=new Sa(a.lineAt(r-n*1e3,we.ByHeight,s,0,0).from,a.lineAt(o+(1-n)*1e3,we.ByHeight,s,0,0).to);if(t){let{head:u}=t.range;if(ul.to){let m=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=a.lineAt(u,we.ByPos,s,0,0),d;t.y=="center"?d=(c.top+c.bottom)/2-m/2:t.y=="start"||t.y=="nearest"&&u=o+Math.max(10,Math.min(n,250)))&&a>r-2*1e3&&s>1,r=a<<1;if(this.defaultTextDirection!=ye.LTR&&!n)return[];let o=[],l=(m,c,d,h)=>{if(c-mm&&bb.from>=d.from&&b.to<=d.to&&Math.abs(b.from-m)b.fromv));if(!x){if(cw.from<=c&&w.to>=c)){let w=t.moveToLineBoundary(Z.cursor(c),!1,!0).head;w>m&&(c=w)}let b=this.gapSize(d,m,c,h),v=n||b<2e6?b:2e6;x=new Gr(m,c,b,v)}o.push(x)},u=m=>{if(m.length2e6)for(let k of e)k.from>=m.from&&k.fromm.from&&l(m.from,h,m,c),gt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let n=[];ie.spans(t,this.viewport.from,this.viewport.to,{span(s,r){n.push({from:s,to:r})},point(){}},20);let a=0;if(n.length!=this.visibleRanges.length)a=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||oi(this.heightMap.lineAt(e,we.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||oi(this.heightMap.lineAt(this.scaler.fromDOM(e),we.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop*this.scaleY:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+12-this.paddingTop);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return oi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Sa{constructor(e,t){this.from=e,this.to=t}}function mN(i,e,t){let n=[],a=i,s=0;return ie.spans(t,i,e,{span(){},point(r,o){r>a&&(n.push({from:a,to:r}),s+=r-a),a=o}},20),a=1)return e[e.length-1].to;let n=Math.floor(i*t);for(let a=0;;a++){let{from:s,to:r}=e[a],o=r-s;if(n<=o)return s+n;n-=o}}function ja(i,e){let t=0;for(let{from:n,to:a}of i.ranges){if(e<=a){t+=e-n;break}t+=a-n}return t/i.total}function cN(i,e){for(let t of i)if(e(t))return t}const wl={toDOM(i){return i},fromDOM(i){return i},scale:1,eq(i){return i==this}};function hc(i){let e=i.facet(or).filter(n=>typeof n!="function"),t=i.facet(P0).filter(n=>typeof n!="function");return t.length&&e.push(ie.join(t)),e}class Ms{constructor(e,t){this.scale=e,this.viewports=t}static get(e,t,n){let a=0,s=0,r=0,o=n.map(({from:u,to:m})=>{let c=t.lineAt(u,we.ByPos,e,0,0).top,d=t.lineAt(m,we.ByPos,e,0,0).bottom;return a+=d-c,{from:u,to:m,top:c,bottom:d,domTop:0,domBottom:0}});if(t.height-a<10)return wl;let l=(7e6-a)/(t.height-a);for(let u of o)u.domTop=r+(u.top-s)*l,r=u.domBottom=u.domTop+(u.bottom-u.top),s=u.bottom;return new Ms(l,o)}toDOM(e){for(let t=0,n=0,a=0;;t++){let s=tt.from==e.viewports[n].from&&t.to==e.viewports[n].to):!1}}function oi(i,e){if(e.scale==1)return i;let t=e.toDOM(i.top),n=e.toDOM(i.bottom);return new Rt(i.from,i.length,t,n-t,Array.isArray(i._content)?i._content.map(a=>oi(a,e)):i._content)}const _a=V.define({combine:i=>i.join(" ")}),zl=V.define({combine:i=>i.indexOf(!0)>-1}),Il=Bn.newName(),Up=Bn.newName(),Yp=Bn.newName(),$p={"&light":"."+Up,"&dark":"."+Yp};function kl(i,e,t){return new Bn(e,{finish(n){return/&/.test(n)?n.replace(/&\w*/,a=>{if(a=="&")return i;if(!t||!t[a])throw new RangeError(`Unsupported selector: ${a}`);return t[a]}):i+" "+n}})}const dN=kl("."+Il,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"baseline",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{background:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 0) no-repeat",backgroundSize:".4em",backgroundPosition:"calc(min(50%, 0px)) center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},$p),hN={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Hr=G.ie&&G.ie_version<=11;class gN{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new FW,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let n of t)this.queue.push(n);(G.ie&&G.ie_version<=11||G.ios&&e.composing)&&t.some(n=>n.type=="childList"&&n.removedNodes.length||n.type=="characterData"&&n.oldValue.length>n.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&G.android&&e.constructor.EDIT_CONTEXT!==!1&&!(G.chrome&&G.chrome_version<126)&&(this.editContext=new fN(e),e.state.facet(gn)&&(e.contentDOM.editContext=this.editContext.editContext)),Hr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(this.pendingRecords().length>0),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,n)=>t!=e[n]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:n}=this,a=this.selectionRange;if(n.state.facet(gn)?n.root.activeElement!=this.dom:!xi(this.dom,a))return;let s=a.anchorNode&&n.docView.tile.nearest(a.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(G.ie&&G.ie_version<=11||G.android&&G.chrome)&&!n.state.selection.main.empty&&a.focusNode&&bi(a.focusNode,a.focusOffset,a.anchorNode,a.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Zi(e.root);if(!t)return!1;let n=G.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&pN(this.view,t)||t;if(!n||this.selectionRange.eq(n))return!1;let a=xi(this.dom,n);return a&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&_1(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(a)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,n=-1,a=!1;for(let s of e){let r=this.readMutation(s);r&&(r.typeOver&&(a=!0),t==-1?{from:t,to:n}=r:(t=Math.min(r.from,t),n=Math.max(r.to,n)))}return{from:t,to:n,typeOver:a}}readChange(){let{from:e,to:t,typeOver:n}=this.processRecords(),a=this.selectionChanged&&xi(this.dom,this.selectionRange);if(e<0&&!a)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new OE(this.view,e,t,n);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.selectionChanged,n=this.readChange();if(!n)return this.view.requestMeasure(),!1;let a=this.view.state,s=Wp(this.view,n);return this.view.state==a&&(n.domChanged||t)&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let n=gc(t,e.previousSibling||e.target.previousSibling,-1),a=gc(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:a?t.posBefore(a):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(gn)!=e.state.facet(gn)&&(e.view.contentDOM.editContext=e.state.facet(gn)?this.editContext.editContext:null))}destroy(){var e,t,n;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(n=this.resizeScroll)===null||n===void 0||n.disconnect();for(let a of this.scrollTargets)a.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function gc(i,e,t){for(;e;){let n=Ae.get(e);if(n&&n.parent==i)return n;let a=e.parentNode;e=a!=i.dom?a:t>0?e.nextSibling:e.previousSibling}return null}function pc(i,e){let t=e.startContainer,n=e.startOffset,a=e.endContainer,s=e.endOffset,r=i.docView.domAtPos(i.state.selection.main.anchor,1);return bi(r.node,r.offset,a,s)&&([t,n,a,s]=[a,s,t,n]),{anchorNode:t,anchorOffset:n,focusNode:a,focusOffset:s}}function pN(i,e){if(e.getComposedRanges){let a=e.getComposedRanges(i.root)[0];if(a)return pc(i,a)}let t=null;function n(a){a.preventDefault(),a.stopImmediatePropagation(),t=a.getTargetRanges()[0]}return i.contentDOM.addEventListener("beforeinput",n,!0),i.dom.ownerDocument.execCommand("indent"),i.contentDOM.removeEventListener("beforeinput",n,!0),t?pc(i,t):null}class fN{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=n=>{let a=e.state.selection.main,{anchor:s,head:r}=a,o=this.toEditorPos(n.updateRangeStart),l=this.toEditorPos(n.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:n.updateRangeStart,editorBase:o,drifted:!1});let u=l-o>n.text.length;o==this.from&&sthis.to&&(l=s);let m=Ep(e.state.sliceDoc(o,l),n.text,(u?a.from:a.to)-o,u?"end":null);if(!m){let d=Z.single(this.toEditorPos(n.selectionStart),this.toEditorPos(n.selectionEnd));vl(d,a)||e.dispatch({selection:d,userEvent:"select"});return}let c={from:m.from+o,to:m.toA+o,insert:oe.of(n.text.slice(m.from,m.toB).split(` +`))};if((G.mac||G.android)&&c.from==r-1&&/^\. ?$/.test(n.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(c={from:o,to:l,insert:oe.of([n.text.replace("."," ")])}),this.pendingContextChange=c,!e.state.readOnly){let d=this.to-this.from+(c.to-c.from+c.insert.length);M0(e,c,Z.single(this.toEditorPos(n.selectionStart,d),this.toEditorPos(n.selectionEnd,d)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),c.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,n.updateRangeStart-1),Math.min(t.text.length,n.updateRangeStart+1)))&&this.handlers.compositionend(n)},this.handlers.characterboundsupdate=n=>{let a=[],s=null;for(let r=this.toEditorPos(n.rangeStart),o=this.toEditorPos(n.rangeEnd);r{let a=[];for(let s of n.getTextFormats()){let r=s.underlineStyle,o=s.underlineThickness;if(!/none/i.test(r)&&!/none/i.test(o)){let l=this.toEditorPos(s.rangeStart),u=this.toEditorPos(s.rangeEnd);if(l{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:n}=this.composing;this.composing=null,n&&this.reset(e.state)}};for(let n in this.handlers)t.addEventListener(n,this.handlers[n]);this.measureReq={read:n=>{let a=Zi(n.root);a&&a.rangeCount&&this.editContext.updateSelectionBounds(a.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,n=!1,a=this.pendingContextChange;return e.changes.iterChanges((s,r,o,l,u)=>{if(n)return;let m=u.length-(r-s);if(a&&r>=a.to)if(a.from==s&&a.to==r&&a.insert.eq(u)){a=this.pendingContextChange=null,t+=m,this.to+=m;return}else a=null,this.revertPending(e.state);if(s+=t,r+=t,r<=this.from)this.from+=m,this.to+=m;else if(sthis.to||this.to-this.from+u.length>3e4){n=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(r),u.toString()),this.to+=m}t+=m}),a&&!n&&this.revertPending(e.state),!n}update(e){let t=this.pendingContextChange,n=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(n.from,n.to)&&e.transactions.some(a=>!a.isUserEvent("input.type")&&a.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,n=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),a=this.toContextPos(t.head);(this.editContext.selectionStart!=n||this.editContext.selectionEnd!=a)&&this.editContext.updateSelection(n,a)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let n=this.composing;return n&&n.drifted?n.editorBase+(e-n.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class Q{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.clearAnnouncement=-1,this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:n}=e;this.dispatchTransactions=e.dispatchTransactions||n&&(a=>a.forEach(s=>n(s,this)))||(a=>this.update(a)),this.dispatch=this.dispatch.bind(this),this._root=e.root||RW(e.parent)||document,this.viewState=new dc(this,e.state||re.create(e)),e.scrollTo&&e.scrollTo.is(za)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(w1).map(a=>new Er(a));for(let a of this.plugins)a.update(this);this.observer=new gN(this),this.inputState=new BE(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Km(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof Ye?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,n=!1,a,s=this.state;for(let d of e){if(d.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=d.state}if(this.destroyed){this.viewState.state=s;return}let r=this.hasFocus,o=0,l=null;e.some(d=>d.annotation(Hp))?(this.inputState.notifiedFocused=r,o=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,l=Vp(s,r),l||(o=1));let u=this.observer.delayedAndroidKey,m=null;if(u?(this.observer.clearDelayedAndroidKey(),m=this.observer.readChange(),(m&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(m=null)):this.observer.clear(),s.facet(re.phrases)!=this.state.facet(re.phrases))return this.setState(s);a=Cs.create(this,s,e),a.flags|=o;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let d of e){if(c&&(c=c.map(d.changes)),d.scrollIntoView){let{main:h}=d.state.selection,{x:g,y:f}=this.state.facet(Q.cursorScrollMargin);c=new C1(h.empty?h:Z.cursor(h.head,h.head>h.anchor?-1:1),"nearest","nearest",f,g)}for(let h of d.effects)h.is(za)&&(c=h.value.clip(this.state))}this.viewState.update(a,c),this.bidiCache=Zs.update(this.bidiCache,a.changes),a.empty||(this.updatePlugins(a),this.inputState.update(a)),t=this.docView.update(a),this.state.facet(ri)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(a.startState.facet(_a)!=a.state.facet(_a)&&(this.viewState.mustMeasureContent=!0),(t||n||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!a.empty)for(let d of this.state.facet(pl))try{d(a)}catch(h){zt(this.state,h,"update listener")}(l||m)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),m&&!Wp(this,m)&&u.force&&_1(this.contentDOM,u.key,u.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new dc(this,e),this.plugins=e.facet(w1).map(n=>new Er(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new Km(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(w1),n=e.state.facet(w1);if(t!=n){let a=[];for(let s of n){let r=t.indexOf(s);if(r<0)a.push(new Er(s));else{let o=this.plugins[r];o.mustUpdate=e,a.push(o)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=a,this.pluginMap.clear()}else for(let a of this.plugins)a.mustUpdate=e;for(let a=0;a-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,n=this.viewState.scrollParent,a=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:r,scaleY:o}=this.viewState;Math.abs(a-this.viewState.scrollOffset)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(r<0){if(dp(n||this.win))s=-1,r=this.viewState.heightMap.height/this.viewState.scaleY;else{let g=this.viewState.scrollAnchorAt(a);s=g.from,r=g.top}o=this.viewState.scaleY}this.updateState=1;let u=this.viewState.measure();if(!u&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let m=[];u&4||([this.measureRequests,m]=[m,this.measureRequests]);let c=m.map(g=>{try{return g.read(this)}catch(f){return zt(this.state,f),fc}}),d=Cs.create(this,this.state,[]),h=!1;d.flags|=u,t?t.flags|=u:t=d,this.updateState=2,d.empty||(this.updatePlugins(d),this.inputState.update(d),this.updateAttrs(),h=this.docView.update(d),h&&this.docViewUpdate());for(let g=0;g1||f<-1)&&!(G.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(n==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){a=a+f,n?s<0?n.scrollTop=n.scrollHeight:n.scrollTop+=f:this.win.scrollBy(0,f),r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(pl))l(t)}get themeClasses(){return Il+" "+(this.state.facet(zl)?Yp:Up)+" "+this.state.facet(_a)}updateAttrs(){let e=xc(this,Cp,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(gn)?"true":"false",class:"cm-content",style:`${G.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),xc(this,A0,t);let n=this.observer.ignore(()=>{let a=Qm(this.contentDOM,this.contentAttrs,t),s=Qm(this.dom,this.editorAttrs,e);return a||s});return this.editorAttrs=e,this.contentAttrs=t,n}showAnnouncements(e){let t=!0;for(let n of e)for(let a of n.effects)if(a.is(Q.announce)){t&&(this.announceDOM.textContent="",this.win.clearTimeout(this.clearAnnouncement),this.clearAnnouncement=this.win.setTimeout(()=>{this.announceDOM.textContent=" "},200),t=!1);let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=a.value}}mountStyles(){this.styleModules=this.state.facet(ri);let e=this.state.facet(Q.cspNonce);Bn.mount(this.root,this.styleModules.concat(dN).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;tn.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,n){return Rr(this,e,ec(this,e,t,n))}moveByGroup(e,t){return Rr(this,e,ec(this,e,t,n=>TE(this,e.head,n)))}visualLineSide(e,t){return t?Z.cursor(e.to,1):Z.cursor(e.from,-1)}moveToLineBoundary(e,t,n=!0){return SE(this,e,t,n)}moveVertically(e,t,n){return Rr(this,e,jE(this,e,t,n))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let n=bl(this,e,t);return n&&n.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),bl(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let n=this.state.doc.lineAt(e),a=this.bidiSpans(n),s=a[rn.find(a,e-n.from,-1,t)];return n.length&&(e==n.from&&t<0||e==n.to&&t>0)&&s.dir!=this.textDirectionAt(n.from)&&(e==n.to?(e=n.from+s.from,t=1):(e=n.from+s.to,t=-1)),this.docView.coordsAt(e,t,s.dir==ye.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Tp)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>xN)return bp(e.length);let t=this.textDirectionAt(e.from),n;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||xp(s.isolates,n=Ym(this,e))))return s.order;n||(n=Ym(this,e));let a=$W(e.text,t,n);return this.bidiCache.push(new Zs(e.from,e.to,t,n,!0,a)),a}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||G.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{cp(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.win.clearTimeout(this.clearAnnouncement),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var n,a,s,r;return za.of(new C1(typeof e=="number"?Z.cursor(e):e,(n=t.y)!==null&&n!==void 0?n:"nearest",(a=t.x)!==null&&a!==void 0?a:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(r=t.xMargin)!==null&&r!==void 0?r:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,n=this.viewState.scrollAnchorAt(e);return za.of(new C1(Z.cursor(n.from),"start","start",n.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Wt.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Wt.define(()=>({}),{eventObservers:e})}static theme(e,t){let n=Bn.newName(),a=[_a.of(n),ri.of(kl(`.${n}`,e))];return t&&t.dark&&a.push(zl.of(!0)),a}static baseTheme(e){return u1.lowest(ri.of(kl("."+Il,e,$p)))}static findFromDOM(e){var t;let n=e.querySelector(".cm-content"),a=n&&Ae.get(n)||Ae.get(e);return((t=a==null?void 0:a.root)===null||t===void 0?void 0:t.view)||null}}Q.styleModule=ri;Q.inputHandler=kp;Q.clipboardInputFilter=_0;Q.clipboardOutputFilter=C0;Q.scrollHandler=jp;Q.focusChangeEffect=Sp;Q.perLineTextDirection=Tp;Q.exceptionSink=Ip;Q.updateListener=pl;Q.editable=gn;Q.mouseSelectionStyle=zp;Q.dragMovesSelection=wp;Q.clickAddsSelectionRange=yp;Q.decorations=or;Q.blockWrappers=Ap;Q.outerDecorations=P0;Q.atomicRanges=Yi;Q.bidiIsolatedRanges=Pp;Q.cursorScrollMargin=V.define({combine:i=>{let e=5,t=5;for(let n of i)typeof n=="number"?e=t=n:{x:e,y:t}=n;return{x:e,y:t}}});Q.scrollMargins=Mp;Q.darkTheme=zl;Q.cspNonce=V.define({combine:i=>i.length?i[0]:""});Q.contentAttributes=A0;Q.editorAttributes=Cp;Q.lineWrapping=Q.contentAttributes.of({class:"cm-lineWrapping"});Q.announce=de.define();const xN=4096,fc={};class Zs{constructor(e,t,n,a,s,r){this.from=e,this.to=t,this.dir=n,this.isolates=a,this.fresh=s,this.order=r}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let n=[],a=e.length?e[e.length-1].dir:ye.LTR;for(let s=Math.max(0,e.length-10);s=0;a--){let s=n[a],r=typeof s=="function"?s(i):s;r&&S0(r,t)}return t}const bN=G.mac?"mac":G.windows?"win":G.linux?"linux":"key";function vN(i,e){const t=i.split(/-(?!$)/);let n=t[t.length-1];n=="Space"&&(n=" ");let a,s,r,o;for(let l=0;ln.concat(a),[]))),t}let Cn=null;const zN=4e3;function IN(i,e=bN){let t=Object.create(null),n=Object.create(null),a=(r,o)=>{let l=n[r];if(l==null)n[r]=o;else if(l!=o)throw new Error("Key binding "+r+" is used both as a regular binding and as a multi-stroke prefix")},s=(r,o,l,u,m)=>{var c,d;let h=t[r]||(t[r]=Object.create(null)),g=o.split(/ (?!$)/).map(b=>vN(b,e));for(let b=1;b{let z=Cn={view:w,prefix:v,scope:r};return setTimeout(()=>{Cn==z&&(Cn=null)},zN),!0}]})}let f=g.join(" ");a(f,!1);let x=h[f]||(h[f]={preventDefault:!1,stopPropagation:!1,run:((d=(c=h._any)===null||c===void 0?void 0:c.run)===null||d===void 0?void 0:d.slice())||[]});l&&x.run.push(l),u&&(x.preventDefault=!0),m&&(x.stopPropagation=!0)};for(let r of i){let o=r.scope?r.scope.split(" "):["editor"];if(r.any)for(let u of o){let m=t[u]||(t[u]=Object.create(null));m._any||(m._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:c}=r;for(let d in m)m[d].run.push(h=>c(h,Sl))}let l=r[e]||r.key;if(l)for(let u of o)s(u,l,r.run,r.preventDefault,r.stopPropagation),r.shift&&s(u,"Shift-"+l,r.shift,r.preventDefault,r.stopPropagation)}return t}let Sl=null;function kN(i,e,t,n){Sl=e;let a=BW(e),s=At(a,0),r=hn(s)==a.length&&a!=" ",o="",l=!1,u=!1,m=!1;Cn&&Cn.view==t&&Cn.scope==n&&(o=Cn.prefix+" ",Jp.indexOf(e.keyCode)<0&&(u=!0,Cn=null));let c=new Set,d=x=>{if(x){for(let b of x.run)if(!c.has(b)&&(c.add(b),b(t)))return x.stopPropagation&&(m=!0),!0;x.preventDefault&&(x.stopPropagation&&(m=!0),u=!0)}return!1},h=i[n],g,f;return h&&(d(h[o+Ca(a,e,!r)])?l=!0:r&&(e.altKey||e.metaKey||e.ctrlKey)&&!(G.windows&&e.ctrlKey&&e.altKey)&&!(G.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(g=Ln[e.keyCode])&&g!=a?(d(h[o+Ca(g,e,!0)])||e.shiftKey&&(f=Oi[e.keyCode])!=a&&f!=g&&d(h[o+Ca(f,e,!1)]))&&(l=!0):r&&e.shiftKey&&d(h[o+Ca(a,e,!0)])&&(l=!0),!l&&d(h._any)&&(l=!0)),u&&(l=!0),l&&m&&e.stopPropagation(),Sl=null,l}class cr{constructor(e,t,n,a,s){this.className=e,this.left=t,this.top=n,this.width=a,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,n){if(n.empty){let a=e.coordsAtPos(n.head,n.assoc||1);if(!a)return[];let s=Xp(e);return[new cr(t,a.left-s.left,a.top-s.top,null,a.bottom-a.top)]}else return SN(e,t,n)}}function Xp(i){let e=i.scrollDOM.getBoundingClientRect();return{left:(i.textDirection==ye.LTR?e.left:e.right-i.scrollDOM.clientWidth*i.scaleX)-i.scrollDOM.scrollLeft*i.scaleX,top:e.top-i.scrollDOM.scrollTop*i.scaleY}}function vc(i,e,t,n){let a=i.coordsAtPos(e,t*2);if(!a)return n;let s=i.dom.getBoundingClientRect(),r=(a.top+a.bottom)/2,o=i.posAtCoords({x:s.left+1,y:r}),l=i.posAtCoords({x:s.right-1,y:r});return o==null||l==null?n:{from:Math.max(n.from,Math.min(o,l)),to:Math.min(n.to,Math.max(o,l))}}function SN(i,e,t){if(t.to<=i.viewport.from||t.from>=i.viewport.to)return[];let n=Math.max(t.from,i.viewport.from),a=Math.min(t.to,i.viewport.to),s=i.textDirection==ye.LTR,r=i.contentDOM,o=r.getBoundingClientRect(),l=Xp(i),u=r.querySelector(".cm-line"),m=u&&window.getComputedStyle(u),c=o.left+(m?parseInt(m.paddingLeft)+Math.min(0,parseInt(m.textIndent)):0),d=o.right-(m?parseInt(m.paddingRight):0),h=xl(i,n,1),g=xl(i,a,-1),f=h.type==$e.Text?h:null,x=g.type==$e.Text?g:null;if(f&&(i.lineWrapping||h.widgetLineBreaks)&&(f=vc(i,n,1,f)),x&&(i.lineWrapping||g.widgetLineBreaks)&&(x=vc(i,a,-1,x)),f&&x&&f.from==x.from&&f.to==x.to)return v(w(t.from,t.to,f));{let I=f?w(t.from,null,f):z(h,!1),k=x?w(null,t.to,x):z(g,!0),S=[];return(f||h).to<(x||g).from-(f&&x?1:0)||h.widgetLineBreaks>1&&I.bottom+i.defaultLineHeight/2C&&E.from=ee)break;F>U&&P(Math.max(fe,U),I==null&&fe<=C,Math.min(F,ee),k==null&&F>=B,Ie.dir)}if(U=ge.to+1,U>=ee)break}return O.length==0&&P(C,I==null,B,k==null,i.textDirection),{top:_,bottom:M,horizontal:O}}function z(I,k){let S=o.top+(k?I.top:I.bottom);return{top:S,bottom:S,horizontal:[]}}}function TN(i,e){return i.constructor==e.constructor&&i.eq(e)}class jN{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Ka)!=e.state.facet(Ka)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,n=e.facet(Ka);for(;t!TN(t,this.drawn[n]))){let t=this.dom.firstChild,n=0;for(let a of e)a.update&&t&&a.constructor&&this.drawn[n].constructor&&a.update(t,this.drawn[n])?(t=t.nextSibling,n++):this.dom.insertBefore(a.draw(),t);for(;t;){let a=t.nextSibling;t.remove(),t=a}this.drawn=e,G.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const Ka=V.define();function _N(i){return[Wt.define(e=>new jN(e,i)),Ka.of(i)]}const Aa="-10000px";class CN{constructor(e,t,n,a){this.facet=t,this.createTooltipView=n,this.removeTooltipView=a,this.input=e.state.facet(t),this.tooltips=this.input.filter(r=>r);let s=null;this.tooltipViews=this.tooltips.map(r=>s=n(r,s))}update(e,t){var n;let a=e.state.facet(this.facet),s=a.filter(l=>l);if(a===this.input){for(let l of this.tooltipViews)l.update&&l.update(e);return!1}let r=[],o=t?[]:null;for(let l=0;lt[u]=l),t.length=o.length),this.input=a,this.tooltips=s,this.tooltipViews=r,!0}}function Kp(i){let e=i.dom.ownerDocument.documentElement,t=e.clientWidth,n=getComputedStyle(e);if(!/stable/.test(n.scrollbarGutter||""))return{left:0,right:t};let a=e.getBoundingClientRect(),s=i.win.scrollX;return{left:Math.max(0,a.left+s-parseFloat(n.marginLeft)),right:Math.min(t,a.right+s+parseFloat(n.marginRight))}}function AN(i){let{left:e,right:t}=Kp(i);return{top:0,left:e,right:t,bottom:i.dom.ownerDocument.documentElement.clientHeight}}const Vr=V.define({combine:i=>{var e,t,n;return{position:G.ios?"absolute":((e=i.find(a=>a.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=i.find(a=>a.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((n=i.find(a=>a.tooltipSpace))===null||n===void 0?void 0:n.tooltipSpace)||AN}}}),yc=new WeakMap,ef=Wt.fromClass(class{constructor(i){this.view=i,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=i.state.facet(Vr);this.position=e.position,this.parent=e.parent,this.classes=i.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new CN(i,tf,(t,n)=>this.createTooltip(t,n),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),i.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let i of this.manager.tooltipViews)this.intersectionObserver.observe(i.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(i){i.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(i,this.above);e&&this.observeIntersection();let t=e||i.geometryChanged,n=i.state.facet(Vr);if(n.position!=this.position&&!this.madeAbsolute){this.position=n.position;for(let a of this.manager.tooltipViews)a.dom.style.position=this.position;t=!0}if(n.parent!=this.parent){this.parent&&this.container.remove(),this.parent=n.parent,this.createContainer();for(let a of this.manager.tooltipViews)this.container.appendChild(a.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(i,e){let t=i.create(this.view),n=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),i.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let a=document.createElement("div");a.className="cm-tooltip-arrow",t.dom.appendChild(a)}return t.dom.style.position=this.position,t.dom.style.top=Aa,t.dom.style.left="0px",this.container.insertBefore(t.dom,n),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var i,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let n of this.manager.tooltipViews)n.dom.remove(),(i=n.destroy)===null||i===void 0||i.call(n);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let i=1,e=1,t=!1,n=0;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(G.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(i=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:i,scaleY:e}=this.view.viewState);else n=Kp(this.view).left;let a=this.view.scrollDOM.getBoundingClientRect(),s=O0(this.view);return{visible:{left:a.left+s.left,top:a.top+s.top,right:a.right-s.right,bottom:a.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Vr).tooltipSpace(this.view),scaleX:i,scaleY:e,makeAbsolute:t,fixedLeft:n}}writeMeasure(i){var e;if(i.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let o of this.manager.tooltipViews)o.dom.style.position="absolute"}let{visible:t,space:n,scaleX:a,scaleY:s}=i,r=[];for(let o=0;o=Math.min(t.bottom,n.bottom)||c.rightMath.min(t.right,n.right)+.1)){m.style.top=Aa;continue}let h=l.arrow?u.dom.querySelector(".cm-tooltip-arrow"):null,g=h?7:0,f=d.right-d.left,x=(e=yc.get(u))!==null&&e!==void 0?e:d.bottom-d.top,b=u.offset||ON,v=this.view.textDirection==ye.LTR,w=d.width>n.right-n.left?v?n.left:n.right-d.width:v?Math.max(n.left,Math.min(c.left-(h?14:0)+b.x,n.right-f)):Math.min(Math.max(n.left,c.left-f+(h?14:0)-b.x),n.right-f),z=this.above[o];!l.strictSide&&(z?c.top-x-g-b.yn.bottom)&&z==n.bottom-c.bottom>c.top-n.top&&(z=this.above[o]=!z);let I=(z?c.top-n.top:n.bottom-c.bottom)-g;if(Iw&&_.topk&&(k=z?_.top-x-2-g:_.bottom+g+2);if(this.position=="absolute"?(m.style.top=(k-i.parent.top)/s+"px",wc(m,(w-i.parent.left)/a)):(m.style.top=k/s+"px",wc(m,(w-i.fixedLeft)/a)),h){let _=c.left+(v?b.x:-b.x)-(w+14-7);h.style.left=_/a+"px"}u.overlap!==!0&&r.push({left:w,top:k,right:S,bottom:k+x}),m.classList.toggle("cm-tooltip-above",z),m.classList.toggle("cm-tooltip-below",!z),u.positioned&&u.positioned(i.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let i of this.manager.tooltipViews)i.dom.style.top=Aa}},{eventObservers:{scroll(){this.maybeMeasure()}}});function wc(i,e){let t=parseInt(i.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(i.style.left=e+"px")}const PN=Q.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),ON={x:0,y:0},tf=V.define({enables:[ef,PN]});function nf(i,e){let t=i.plugin(ef);if(!t)return null;let n=t.manager.tooltips.indexOf(e);return n<0?null:t.manager.tooltipViews[n]}class un extends Dn{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}un.prototype.elementClass="";un.prototype.toDOM=void 0;un.prototype.mapMode=st.TrackBefore;un.prototype.startSide=un.prototype.endSide=-1;un.prototype.point=!0;const yi=V.define(),MN=V.define(),ZN={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>ie.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},wi=V.define();function DN(i){return[af(),wi.of({...ZN,...i})]}const zc=V.define({combine:i=>i.some(e=>e)});function af(i){return[BN]}const BN=Wt.fromClass(class{constructor(i){this.view=i,this.domAfter=null,this.prevViewport=i.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=i.state.facet(wi).map(e=>new kc(i,e)),this.fixed=!i.state.facet(zc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),i.scrollDOM.insertBefore(this.dom,i.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(i){if(this.updateGutters(i)){let e=this.prevViewport,t=i.view.viewport,n=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(n<(t.to-t.from)*.8)}if(i.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(zc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=i.view.viewport}syncGutters(i){let e=this.dom.nextSibling;i&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=ie.iter(this.view.state.facet(yi),this.view.viewport.from),n=[],a=this.gutters.map(s=>new LN(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(n.length&&(n=[]),Array.isArray(s.type)){let r=!0;for(let o of s.type)if(o.type==$e.Text&&r){Tl(t,n,o.from);for(let l of a)l.line(this.view,o,n);r=!1}else if(o.widget)for(let l of a)l.widget(this.view,o)}else if(s.type==$e.Text){Tl(t,n,s.from);for(let r of a)r.line(this.view,s,n)}else if(s.widget)for(let r of a)r.widget(this.view,s);for(let s of a)s.finish();i&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(i){let e=i.startState.facet(wi),t=i.state.facet(wi),n=i.docChanged||i.heightChanged||i.viewportChanged||!ie.eq(i.startState.facet(yi),i.state.facet(yi),i.view.viewport.from,i.view.viewport.to);if(e==t)for(let a of this.gutters)a.update(i)&&(n=!0);else{n=!0;let a=[];for(let s of t){let r=e.indexOf(s);r<0?a.push(new kc(this.view,s)):(this.gutters[r].update(i),a.push(this.gutters[r]))}for(let s of this.gutters)s.dom.remove(),a.indexOf(s)<0&&s.destroy();for(let s of a)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=a}return n}destroy(){for(let i of this.gutters)i.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:i=>Q.scrollMargins.of(e=>{let t=e.plugin(i);if(!t||t.gutters.length==0||!t.fixed)return null;let n=t.dom.offsetWidth*e.scaleX,a=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==ye.LTR?{left:n,right:a}:{right:n,left:a}})});function Ic(i){return Array.isArray(i)?i:[i]}function Tl(i,e,t){for(;i.value&&i.from<=t;)i.from==t&&e.push(i.value),i.next()}class LN{constructor(e,t,n){this.gutter=e,this.height=n,this.i=0,this.cursor=ie.iter(e.markers,t.from)}addElement(e,t,n){let{gutter:a}=this,s=(t.top-this.height)/e.scaleY,r=t.height/e.scaleY;if(this.i==a.elements.length){let o=new sf(e,r,s,n);a.elements.push(o),a.dom.appendChild(o.dom)}else a.elements[this.i].update(e,r,s,n);this.height=t.bottom,this.i++}line(e,t,n){let a=[];Tl(this.cursor,a,t.from),n.length&&(a=a.concat(n));let s=this.gutter.config.lineMarker(e,t,a);s&&a.unshift(s);let r=this.gutter;a.length==0&&!r.config.renderEmptyElements||this.addElement(e,t,a)}widget(e,t){let n=this.gutter.config.widgetMarker(e,t.widget,t),a=n?[n]:null;for(let s of e.state.facet(MN)){let r=s(e,t.widget,t);r&&(a||(a=[])).push(r)}a&&this.addElement(e,t,a)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class kc{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let n in t.domEventHandlers)this.dom.addEventListener(n,a=>{let s=a.target,r;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let l=s.getBoundingClientRect();r=(l.top+l.bottom)/2}else r=a.clientY;let o=e.lineBlockAtHeight(r-e.documentTop);t.domEventHandlers[n](e,o,a)&&a.preventDefault()});this.markers=Ic(t.markers(e)),t.initialSpacer&&(this.spacer=new sf(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=Ic(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let a=this.config.updateSpacer(this.spacer.markers[0],e);a!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[a])}let n=e.view.viewport;return!ie.eq(this.markers,t,n.from,n.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class sf{constructor(e,t,n,a){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,n,a)}update(e,t,n,a){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=n&&(this.dom.style.marginTop=(this.above=n)?n+"px":""),WN(this.markers,a)||this.setMarkers(e,a)}setMarkers(e,t){let n="cm-gutterElement",a=this.dom.firstChild;for(let s=0,r=0;;){let o=r,l=ss(o,l,u)||r(o,l,u):r}return n}})}});class Qr extends un{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function qr(i,e){return i.state.facet(z1).formatNumber(e,i.state)}const JN=wi.compute([z1],i=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(EN)},lineMarker(e,t,n){return n.some(a=>a.toDOM)?null:new Qr(qr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,n)=>{for(let a of e.state.facet(NN)){let s=a(e,t,n);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet(z1)!=e.state.facet(z1),initialSpacer(e){return new Qr(qr(e,Sc(e.state.doc.lines)))},updateSpacer(e,t){let n=qr(t.view,Sc(t.view.state.doc.lines));return n==e.number?e:new Qr(n)},domEventHandlers:i.facet(z1).domEventHandlers,side:"before"}));function FN(i={}){return[z1.of(i),af(),JN]}function Sc(i){let e=9;for(;e{let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.head).from;a>t&&(t=a,e.push(RN.range(a)))}return ie.of(e)});function HN(){return GN}const rf=1024;let VN=0;class Ur{constructor(e,t){this.from=e,this.to=t}}class ae{constructor(e={}){this.id=VN++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ft.match(e)),t=>{let n=e(t);return n===void 0?null:[this,n]}}}ae.closedBy=new ae({deserialize:i=>i.split(" ")});ae.openedBy=new ae({deserialize:i=>i.split(" ")});ae.group=new ae({deserialize:i=>i.split(" ")});ae.isolate=new ae({deserialize:i=>{if(i&&i!="rtl"&&i!="ltr"&&i!="auto")throw new RangeError("Invalid value for isolate: "+i);return i||"auto"}});ae.contextHash=new ae({perNode:!0});ae.lookAhead=new ae({perNode:!0});ae.mounted=new ae({perNode:!0});class zi{constructor(e,t,n,a=!1){this.tree=e,this.overlay=t,this.parser=n,this.bracketed=a}static get(e){return e&&e.props&&e.props[ae.mounted.id]}}const QN=Object.create(null);class ft{constructor(e,t,n,a=0){this.name=e,this.props=t,this.id=n,this.flags=a}static define(e){let t=e.props&&e.props.length?Object.create(null):QN,n=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),a=new ft(e.name||"",t,e.id,n);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(a)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return a}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(ae.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let n in e)for(let a of n.split(" "))t[a]=e[n];return n=>{for(let a=n.prop(ae.group),s=-1;s<(a?a.length:0);s++){let r=t[s<0?n.name:a[s]];if(r)return r}}}}ft.none=new ft("",Object.create(null),0,8);class D0{constructor(e){this.types=e;for(let t=0;t0;for(let l=this.cursor(r|Ce.IncludeAnonymous);;){let u=!1;if(l.from<=s&&l.to>=a&&(!o&&l.type.isAnonymous||t(l)!==!1)){if(l.firstChild())continue;u=!0}for(;u&&n&&(o||!l.type.isAnonymous)&&n(l),!l.nextSibling();){if(!l.parent())return;u=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:W0(ft.none,this.children,this.positions,0,this.children.length,0,this.length,(t,n,a)=>new Le(this.type,t,n,a,this.propValues),e.makeTree||((t,n,a)=>new Le(ft.none,t,n,a)))}static build(e){return $N(e)}}Le.empty=new Le(ft.none,[],[],0);class B0{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new B0(this.buffer,this.index)}}class En{constructor(e,t,n){this.buffer=e,this.length=t,this.set=n}get type(){return ft.none}toString(){let e=[];for(let t=0;t0));l=r[l+3]);return o}slice(e,t,n){let a=this.buffer,s=new Uint16Array(t-e),r=0;for(let o=e,l=0;o=e&&te;case 1:return t<=e&&n>e;case 2:return n>e;case 4:return!0}}function Li(i,e,t,n){for(var a;i.from==i.to||(t<1?i.from>=e:i.from>e)||(t>-1?i.to<=e:i.to0?o.length:-1;e!=u;e+=t){let m=o[e],c=l[e]+r.from,d;if(!(!(s&Ce.EnterBracketed&&m instanceof Le&&(d=zi.get(m))&&!d.overlay&&d.bracketed&&n>=c&&n<=c+m.length)&&!of(a,n,c,c+m.length))){if(m instanceof En){if(s&Ce.ExcludeBuffers)continue;let h=m.findChild(0,m.buffer.length,t,n-c,a);if(h>-1)return new On(new qN(r,m,e,c),null,h)}else if(s&Ce.IncludeAnonymous||!m.type.isAnonymous||L0(m)){let h;if(!(s&Ce.IgnoreMounts)&&(h=zi.get(m))&&!h.overlay)return new Lt(h.tree,c,e,r);let g=new Lt(m,c,e,r);return s&Ce.IncludeAnonymous||!g.type.isAnonymous?g:g.nextChild(t<0?m.children.length-1:0,t,n,a,s)}}}if(s&Ce.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+t:e=t<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,n=0){let a;if(!(n&Ce.IgnoreOverlays)&&(a=zi.get(this._tree))&&a.overlay){let s=e-this.from,r=n&Ce.EnterBracketed&&a.bracketed;for(let{from:o,to:l}of a.overlay)if((t>0||r?o<=s:o=s:l>s))return new Lt(a.tree,a.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,n)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function jc(i,e,t,n){let a=i.cursor(),s=[];if(!a.firstChild())return s;if(t!=null){for(let r=!1;!r;)if(r=a.type.is(t),!a.nextSibling())return s}for(;;){if(n!=null&&a.type.is(n))return s;if(a.type.is(e)&&s.push(a.node),!a.nextSibling())return n==null?s:[]}}function jl(i,e,t=e.length-1){for(let n=i;t>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(e[t]&&e[t]!=n.name)return!1;t--}}return!0}class qN{constructor(e,t,n,a){this.parent=e,this.buffer=t,this.index=n,this.start=a}}class On extends lf{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,n){super(),this.context=e,this._parent=t,this.index=n,this.type=e.buffer.set.types[e.buffer.buffer[n]]}child(e,t,n){let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.context.start,n);return s<0?null:new On(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,n=0){if(n&Ce.ExcludeBuffers)return null;let{buffer:a}=this.context,s=a.findChild(this.index+4,a.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new On(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new On(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new On(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:n}=this.context,a=this.index+4,s=n.buffer[this.index+3];if(s>a){let r=n.buffer[this.index+1];e.push(n.slice(a,s,r)),t.push(0)}return new Le(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function uf(i){if(!i.length)return null;let e=0,t=i[0];for(let s=1;st.from||r.to=e){let o=new Lt(r.tree,r.overlay[0].from+s.from,-1,s);(a||(a=[n])).push(Li(o,e,t,!1))}}return a?uf(a):n}class _l{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~Ce.EnterBracketed,e instanceof Lt)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let n=e._parent;n;n=n._parent)this.stack.unshift(n.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:n,buffer:a}=this.buffer;return this.type=t||a.set.types[a.buffer[e]],this.from=n+a.buffer[e+1],this.to=n+a.buffer[e+2],!0}yield(e){return e?e instanceof Lt?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,n){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,n,this.mode));let{buffer:a}=this.buffer,s=a.findChild(this.index+4,a.buffer[this.index+3],e,t-this.buffer.start,n);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,n=this.mode){return this.buffer?n&Ce.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,n))}parent(){if(!this.buffer)return this.yieldNode(this.mode&Ce.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&Ce.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,n=this.stack.length-1;if(e<0){let a=n<0?0:this.stack[n]+4;if(this.index!=a)return this.yieldBuf(t.findChild(a,this.index,-1,0,4))}else{let a=t.buffer[this.index+3];if(a<(n<0?t.buffer.length:t.buffer[this.stack[n]+3]))return this.yieldBuf(a)}return n<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,n,{buffer:a}=this;if(a){if(e>0){if(this.index-1)for(let s=t+e,r=e<0?-1:n._tree.children.length;s!=r;s+=e){let o=n._tree.children[s];if(this.mode&Ce.IncludeAnonymous||o instanceof En||!o.type.isAnonymous||L0(o))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let r=e;r;r=r._parent)if(r.index==a){if(a==this.index)return r;t=r,n=s+1;break e}a=this.stack[--s]}for(let a=n;a=0;s--){if(s<0)return jl(this._tree,e,a);let r=n[t.buffer[this.stack[s]]];if(!r.isAnonymous){if(e[a]&&e[a]!=r.name)return!1;a--}}return!0}}function L0(i){return i.children.some(e=>e instanceof En||!e.type.isAnonymous||L0(e))}function $N(i){var e;let{buffer:t,nodeSet:n,maxBufferLength:a=rf,reused:s=[],minRepeatType:r=n.types.length}=i,o=Array.isArray(t)?new B0(t,t.length):t,l=n.types,u=0,m=0;function c(I,k,S,_,M,O){let{id:P,start:C,end:B,size:E}=o,U=m,ee=u;if(E<0)if(o.next(),E==-1){let A=s[P];S.push(A),_.push(C-I);return}else if(E==-3){u=P;return}else if(E==-4){m=P;return}else throw new RangeError(`Unrecognized record size: ${E}`);let ge=l[P],Ie,fe,F=C-I;if(B-C<=a&&(fe=x(o.pos-k,M))){let A=new Uint16Array(fe.size-fe.skip),N=o.pos-fe.size,q=A.length;for(;o.pos>N;)q=b(fe.start,A,q);Ie=new En(A,B-fe.start,n),F=fe.start-I}else{let A=o.pos-E;o.next();let N=[],q=[],$=P>=r?P:-1,ue=0,X=B,me=U;for(;o.pos>A;)$>=0&&o.id==$&&o.size>=0?(o.end<=X-a&&(g(N,q,C,ue,o.end,X,$,me,ee),ue=N.length,X=o.end,me=m),o.next()):O>2500?d(C,A,N,q):c(C,A,N,q,$,O+1);if($>=0&&ue>0&&ue-1&&ue>0){let le=h(ge,ee);Ie=W0(ge,N,q,0,N.length,0,B-C,le,le)}else Ie=f(ge,N,q,B-C,U-B,ee)}S.push(Ie),_.push(F)}function d(I,k,S,_){let M=[],O=0,P=-1;for(;o.pos>k;){let{id:C,start:B,end:E,size:U}=o;if(U>4)o.next();else{if(P>-1&&B=0;E-=3)C[U++]=M[E],C[U++]=M[E+1]-B,C[U++]=M[E+2]-B,C[U++]=U;S.push(new En(C,M[2]-B,n)),_.push(B-I)}}function h(I,k){return(S,_,M)=>{let O=0,P=S.length-1,C,B;if(P>=0&&(C=S[P])instanceof Le){if(!P&&C.type==I&&C.length==M)return C;(B=C.prop(ae.lookAhead))&&(O=_[P]+C.length+B-M)}return f(I,S,_,M,O,k)}}function g(I,k,S,_,M,O,P,C,B){let E=[],U=[];for(;I.length>_;)E.push(I.pop()),U.push(k.pop()+S-M);I.push(f(n.types[P],E,U,O-M,C-O,B)),k.push(M-S)}function f(I,k,S,_,M,O,P){if(O){let C=[ae.contextHash,O];P=P?[C].concat(P):[C]}if(M>25){let C=[ae.lookAhead,M];P=P?[C].concat(P):[C]}return new Le(I,k,S,_,P)}function x(I,k){let S=o.fork(),_=0,M=0,O=0,P=S.end-a,C={size:0,start:0,skip:0};e:for(let B=S.pos-I;S.pos>B;){let E=S.size;if(S.id==k&&E>=0){C.size=_,C.start=M,C.skip=O,O+=4,_+=4,S.next();continue}let U=S.pos-E;if(E<0||U=r?4:0,ge=S.start;for(S.next();S.pos>U;){if(S.size<0)if(S.size==-3||S.size==-4)ee+=4;else break e;else S.id>=r&&(ee+=4);S.next()}M=ge,_+=E,O+=ee}return(k<0||_==I)&&(C.size=_,C.start=M,C.skip=O),C.size>4?C:void 0}function b(I,k,S){let{id:_,start:M,end:O,size:P}=o;if(o.next(),P>=0&&_4){let B=o.pos-(P-4);for(;o.pos>B;)S=b(I,k,S)}k[--S]=C,k[--S]=O-I,k[--S]=M-I,k[--S]=_}else P==-3?u=_:P==-4&&(m=_);return S}let v=[],w=[];for(;o.pos>0;)c(i.start||0,i.bufferStart||0,v,w,-1,0);let z=(e=i.length)!==null&&e!==void 0?e:v.length?w[0]+v[0].length:0;return new Le(l[i.topID],v.reverse(),w.reverse(),z)}const _c=new WeakMap;function es(i,e){if(!i.isAnonymous||e instanceof En||e.type!=i)return 1;let t=_c.get(e);if(t==null){t=1;for(let n of e.children){if(n.type!=i||!(n instanceof Le)){t=1;break}t+=es(i,n)}_c.set(e,t)}return t}function W0(i,e,t,n,a,s,r,o,l){let u=0;for(let g=n;g=m)break;k+=S}if(w==z+1){if(k>m){let S=g[z];h(S.children,S.positions,0,S.children.length,f[z]+v);continue}c.push(g[z])}else{let S=f[w-1]+g[w-1].length-I;c.push(W0(i,g,f,z,w,I,S,null,l))}d.push(I+v-s)}}return h(e,t,n,a,0),(o||l)(c,d,r)}class a1{constructor(e,t,n,a,s=!1,r=!1){this.from=e,this.to=t,this.tree=n,this.offset=a,this.open=(s?1:0)|(r?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],n=!1){let a=[new a1(0,e.length,e,0,!1,n)];for(let s of t)s.to>e.length&&a.push(s);return a}static applyChanges(e,t,n=128){if(!t.length)return e;let a=[],s=1,r=e.length?e[0]:null;for(let o=0,l=0,u=0;;o++){let m=o=n)for(;r&&r.from=d.from||c<=d.to||u){let h=Math.max(d.from,l)-u,g=Math.min(d.to,c)-u;d=h>=g?null:new a1(h,g,d.tree,d.offset+u,o>0,!!m)}if(d&&a.push(d),r.to>c)break;r=snew Ur(a.from,a.to)):[new Ur(0,0)]:[new Ur(0,e.length)],this.createParse(e,t||[],n)}parse(e,t,n){let a=this.startParse(e,t,n);for(;;){let s=a.advance();if(s)return s}}}class XN{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new ae({perNode:!0});let KN=0;class Pt{constructor(e,t,n,a){this.name=e,this.set=t,this.base=n,this.modified=a,this.id=KN++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let n=typeof e=="string"?e:"?";if(e instanceof Pt&&(t=e),t!=null&&t.base)throw new Error("Can not derive from a modified tag");let a=new Pt(n,[],null,[]);if(a.set.push(a),t)for(let s of t.set)a.set.push(s);return a}static defineModifier(e){let t=new Ds(e);return n=>n.modified.indexOf(t)>-1?n:Ds.get(n.base||n,n.modified.concat(t).sort((a,s)=>a.id-s.id))}}let eJ=0;class Ds{constructor(e){this.name=e,this.instances=[],this.id=eJ++}static get(e,t){if(!t.length)return e;let n=t[0].instances.find(o=>o.base==e&&tJ(t,o.modified));if(n)return n;let a=[],s=new Pt(e.name,a,e,t);for(let o of t)o.instances.push(s);let r=nJ(t);for(let o of e.set)if(!o.modified.length)for(let l of r)a.push(Ds.get(o,l));return s}}function tJ(i,e){return i.length==e.length&&i.every((t,n)=>t==e[n])}function nJ(i){let e=[[]];for(let t=0;tn.length-t.length)}function cf(i){let e=Object.create(null);for(let t in i){let n=i[t];Array.isArray(n)||(n=[n]);for(let a of t.split(" "))if(a){let s=[],r=2,o=a;for(let c=0;;){if(o=="..."&&c>0&&c+3==a.length){r=1;break}let d=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(o);if(!d)throw new RangeError("Invalid path: "+a);if(s.push(d[0]=="*"?"":d[0][0]=='"'?JSON.parse(d[0]):d[0]),c+=d[0].length,c==a.length)break;let h=a[c++];if(c==a.length&&h=="!"){r=0;break}if(h!="/")throw new RangeError("Invalid path: "+a);o=a.slice(c)}let l=s.length-1,u=s[l];if(!u)throw new RangeError("Invalid path: "+a);let m=new Wi(n,r,l>0?s.slice(0,l):null);e[u]=m.sort(e[u])}}return df.add(e)}const df=new ae({combine(i,e){let t,n,a;for(;i||e;){if(!i||e&&i.depth<=e.depth?(a=e,e=e.next):(a=i,i=i.next),t&&t.mode==a.mode&&!a.context&&!t.context)continue;let s=new Wi(a.tags,a.mode,a.context);t?t.next=s:n=s,t=s}return n}});class Wi{constructor(e,t,n,a){this.tags=e,this.mode=t,this.context=n,this.next=a}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let r=a;for(let o of s)for(let l of o.set){let u=t[l.id];if(u){r=r?r+" "+u:u;break}}return r},scope:n}}function iJ(i,e){let t=null;for(let n of i){let a=n.style(e);a&&(t=t?t+" "+a:a)}return t}function aJ(i,e,t,n=0,a=i.length){let s=new sJ(n,Array.isArray(e)?e:[e],t);s.highlightRange(i.cursor(),n,a,"",s.highlighters),s.flush(a)}class sJ{constructor(e,t,n){this.at=e,this.highlighters=t,this.span=n,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,n,a,s){let{type:r,from:o,to:l}=e;if(o>=n||l<=t)return;r.isTop&&(s=this.highlighters.filter(h=>!h.scope||h.scope(r)));let u=a,m=rJ(e)||Wi.empty,c=iJ(s,m.tags);if(c&&(u&&(u+=" "),u+=c,m.mode==1&&(a+=(a?" ":"")+c)),this.startSpan(Math.max(t,o),u),m.opaque)return;let d=e.tree&&e.tree.prop(ae.mounted);if(d&&d.overlay){let h=e.node.enter(d.overlay[0].from+o,1),g=this.highlighters.filter(x=>!x.scope||x.scope(d.tree.type)),f=e.firstChild();for(let x=0,b=o;;x++){let v=x=w||!e.nextSibling())););if(!v||w>n)break;b=v.to+o,b>t&&(this.highlightRange(h.cursor(),Math.max(t,v.from+o),Math.min(n,b),"",g),this.startSpan(Math.min(n,b),u))}f&&e.parent()}else if(e.firstChild()){d&&(a="");do if(!(e.to<=t)){if(e.from>=n)break;this.highlightRange(e,t,n,a,s),this.startSpan(Math.min(n,e.to),u)}while(e.nextSibling());e.parent()}}}function rJ(i){let e=i.type.prop(df);for(;e&&e.context&&!i.matchContext(e.context);)e=e.next;return e||null}const J=Pt.define,Oa=J(),Sn=J(),Cc=J(Sn),Ac=J(Sn),Tn=J(),Ma=J(Tn),Yr=J(Tn),en=J(),Gn=J(en),Xt=J(),Kt=J(),Cl=J(),K1=J(Cl),Za=J(),W={comment:Oa,lineComment:J(Oa),blockComment:J(Oa),docComment:J(Oa),name:Sn,variableName:J(Sn),typeName:Cc,tagName:J(Cc),propertyName:Ac,attributeName:J(Ac),className:J(Sn),labelName:J(Sn),namespace:J(Sn),macroName:J(Sn),literal:Tn,string:Ma,docString:J(Ma),character:J(Ma),attributeValue:J(Ma),number:Yr,integer:J(Yr),float:J(Yr),bool:J(Tn),regexp:J(Tn),escape:J(Tn),color:J(Tn),url:J(Tn),keyword:Xt,self:J(Xt),null:J(Xt),atom:J(Xt),unit:J(Xt),modifier:J(Xt),operatorKeyword:J(Xt),controlKeyword:J(Xt),definitionKeyword:J(Xt),moduleKeyword:J(Xt),operator:Kt,derefOperator:J(Kt),arithmeticOperator:J(Kt),logicOperator:J(Kt),bitwiseOperator:J(Kt),compareOperator:J(Kt),updateOperator:J(Kt),definitionOperator:J(Kt),typeOperator:J(Kt),controlOperator:J(Kt),punctuation:Cl,separator:J(Cl),bracket:K1,angleBracket:J(K1),squareBracket:J(K1),paren:J(K1),brace:J(K1),content:en,heading:Gn,heading1:J(Gn),heading2:J(Gn),heading3:J(Gn),heading4:J(Gn),heading5:J(Gn),heading6:J(Gn),contentSeparator:J(en),list:J(en),quote:J(en),emphasis:J(en),strong:J(en),link:J(en),monospace:J(en),strikethrough:J(en),inserted:J(),deleted:J(),changed:J(),invalid:J(),meta:Za,documentMeta:J(Za),annotation:J(Za),processingInstruction:J(Za),definition:Pt.defineModifier("definition"),constant:Pt.defineModifier("constant"),function:Pt.defineModifier("function"),standard:Pt.defineModifier("standard"),local:Pt.defineModifier("local"),special:Pt.defineModifier("special")};for(let i in W){let e=W[i];e instanceof Pt&&(e.name=i)}hf([{tag:W.link,class:"tok-link"},{tag:W.heading,class:"tok-heading"},{tag:W.emphasis,class:"tok-emphasis"},{tag:W.strong,class:"tok-strong"},{tag:W.keyword,class:"tok-keyword"},{tag:W.atom,class:"tok-atom"},{tag:W.bool,class:"tok-bool"},{tag:W.url,class:"tok-url"},{tag:W.labelName,class:"tok-labelName"},{tag:W.inserted,class:"tok-inserted"},{tag:W.deleted,class:"tok-deleted"},{tag:W.literal,class:"tok-literal"},{tag:W.string,class:"tok-string"},{tag:W.number,class:"tok-number"},{tag:[W.regexp,W.escape,W.special(W.string)],class:"tok-string2"},{tag:W.variableName,class:"tok-variableName"},{tag:W.local(W.variableName),class:"tok-variableName tok-local"},{tag:W.definition(W.variableName),class:"tok-variableName tok-definition"},{tag:W.special(W.variableName),class:"tok-variableName2"},{tag:W.definition(W.propertyName),class:"tok-propertyName tok-definition"},{tag:W.typeName,class:"tok-typeName"},{tag:W.namespace,class:"tok-namespace"},{tag:W.className,class:"tok-className"},{tag:W.macroName,class:"tok-macroName"},{tag:W.propertyName,class:"tok-propertyName"},{tag:W.operator,class:"tok-operator"},{tag:W.comment,class:"tok-comment"},{tag:W.meta,class:"tok-meta"},{tag:W.invalid,class:"tok-invalid"},{tag:W.punctuation,class:"tok-punctuation"}]);var $r;const I1=new ae;function oJ(i){return V.define({combine:i?e=>e.concat(i):void 0})}const lJ=new ae;class Ht{constructor(e,t,n=[],a=""){this.data=e,this.name=a,re.prototype.hasOwnProperty("tree")||Object.defineProperty(re.prototype,"tree",{get(){return Xe(this)}}),this.parser=t,this.extension=[E1.of(this),re.languageData.of((s,r,o)=>{let l=Pc(s,r,o),u=l.type.prop(I1);if(!u)return[];let m=s.facet(u),c=l.type.prop(lJ);if(c){let d=l.resolve(r-l.from,o);for(let h of c)if(h.test(d,s)){let g=s.facet(h.facet);return h.type=="replace"?g:g.concat(m)}}return m})].concat(n)}isActiveAt(e,t,n=-1){return Pc(e,t,n).type.prop(I1)==this.data}findRegions(e){let t=e.facet(E1);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],a=(s,r)=>{if(s.prop(I1)==this.data){n.push({from:r,to:r+s.length});return}let o=s.prop(ae.mounted);if(o){if(o.tree.prop(I1)==this.data){if(o.overlay)for(let l of o.overlay)n.push({from:l.from+r,to:l.to+r});else n.push({from:r,to:r+s.length});return}else if(o.overlay){let l=n.length;if(a(o.tree,o.overlay[0].from+r),n.length>l)return}}for(let l=0;ln.isTop?t:void 0)]}),e.name)}configure(e,t){return new Bs(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Xe(i){let e=i.field(Ht.state,!1);return e?e.tree:Le.empty}class uJ{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}}let ei=null;class Ls{constructor(e,t,n=[],a,s,r,o,l){this.parser=e,this.state=t,this.fragments=n,this.tree=a,this.treeLen=s,this.viewport=r,this.skipped=o,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,n){return new Ls(e,t,[],Le.empty,0,n,[],null)}startParse(){return this.parser.startParse(new uJ(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=Le.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var n;if(typeof e=="number"){let a=Date.now()+e;e=()=>Date.now()>a}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(a1.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=ei;ei=this;try{return e()}finally{ei=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Oc(e,t.from,t.to);return e}changes(e,t){let{fragments:n,tree:a,treeLen:s,viewport:r,skipped:o}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((u,m,c,d)=>l.push({fromA:u,toA:m,fromB:c,toB:d})),n=a1.applyChanges(n,l),a=Le.empty,s=0,r={from:e.mapPos(r.from,-1),to:e.mapPos(r.to,1)},this.skipped.length){o=[];for(let u of this.skipped){let m=e.mapPos(u.from,1),c=e.mapPos(u.to,-1);me.from&&(this.fragments=Oc(this.fragments,a,s),this.skipped.splice(n--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends mf{createParse(t,n,a){let s=a[0].from,r=a[a.length-1].to;return{parsedPos:s,advance(){let l=ei;if(l){for(let u of a)l.tempSkipped.push(u);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=r,new Le(ft.none,[],[],r-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return ei}}function Oc(i,e,t){return a1.applyChanges(i,[{fromA:e,toA:t,fromB:e,toB:t}])}class W1{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),n=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,n)||t.takeTree(),new W1(t)}static init(e){let t=Math.min(3e3,e.doc.length),n=Ls.create(e.facet(E1).parser,e,{from:0,to:t});return n.work(20,t)||n.takeTree(),new W1(n)}}Ht.state=Et.define({create:W1.init,update(i,e){for(let t of e.effects)if(t.is(Ht.setState))return t.value;return e.startState.facet(E1)!=e.state.facet(E1)?W1.init(e.state):i.apply(e)}});let gf=i=>{let e=setTimeout(()=>i(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(gf=i=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(i,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Xr=typeof navigator<"u"&&(!(($r=navigator.scheduling)===null||$r===void 0)&&$r.isInputPending)?()=>navigator.scheduling.isInputPending():null,mJ=Wt.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Ht.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Ht.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=gf(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnda+1e3,l=s.context.work(()=>Xr&&Xr()||Date.now()>r,a+(o?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:Ht.setState.of(new W1(s.context))})),this.chunkBudget>0&&!(l&&!o)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>zt(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),E1=V.define({combine(i){return i.length?i[0]:null},enables:i=>[Ht.state,mJ,Q.contentAttributes.compute([i],e=>{let t=e.facet(i);return t&&t.name?{"data-language":t.name}:{}})]});class cJ{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const dJ=V.define(),$i=V.define({combine:i=>{if(!i.length)return" ";let e=i[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(i[0]));return e}});function Ws(i){let e=i.facet($i);return e.charCodeAt(0)==9?i.tabSize*e.length:e.length}function Ei(i,e){let t="",n=i.tabSize,a=i.facet($i)[0];if(a==" "){for(;e>=n;)t+=" ",e-=n;a=" "}for(let s=0;s=e?hJ(i,t,e):null}class dr{constructor(e,t={}){this.state=e,this.options=t,this.unit=Ws(e)}lineAt(e,t=1){let n=this.state.doc.lineAt(e),{simulateBreak:a,simulateDoubleBreak:s}=this.options;return a!=null&&a>=n.from&&a<=n.to?s&&a==e?{text:"",from:e}:(t<0?a-1&&(s+=r-this.countColumn(n,n.search(/\S|$/))),s}countColumn(e,t=e.length){return Qi(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:n,from:a}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let r=s(a);if(r>-1)return r}return this.countColumn(n,n.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const pf=new ae;function hJ(i,e,t){let n=e.resolveStack(t),a=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(a!=n.node){let s=[];for(let r=a;r&&!(r.fromn.node.to||r.from==n.node.from&&r.type==n.node.type);r=r.parent)s.push(r);for(let r=s.length-1;r>=0;r--)n={node:s[r],next:n}}return ff(n,i,t)}function ff(i,e,t){for(let n=i;n;n=n.next){let a=pJ(n.node);if(a)return a(N0.create(e,t,n))}return 0}function gJ(i){return i.pos==i.options.simulateBreak&&i.options.simulateDoubleBreak}function pJ(i){let e=i.type.prop(pf);if(e)return e;let t=i.firstChild,n;if(t&&(n=t.type.prop(ae.closedBy))){let a=i.lastChild,s=a&&n.indexOf(a.name)>-1;return r=>xf(r,!0,1,void 0,s&&!gJ(r)?a.from:void 0)}return i.parent==null?fJ:null}function fJ(){return 0}class N0 extends dr{constructor(e,t,n){super(e.state,e.options),this.base=e,this.pos=t,this.context=n}get node(){return this.context.node}static create(e,t,n){return new N0(e,t,n)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let n=e.resolve(t.from);for(;n.parent&&n.parent.from==n.from;)n=n.parent;if(xJ(n,e))break;t=this.state.doc.lineAt(n.from)}return this.lineIndent(t.from)}continue(){return ff(this.context.next,this.base,this.pos)}}function xJ(i,e){for(let t=e;t;t=t.parent)if(i==t)return!0;return!1}function bJ(i){let e=i.node,t=e.childAfter(e.from),n=e.lastChild;if(!t)return null;let a=i.options.simulateBreak,s=i.state.doc.lineAt(t.from),r=a==null||a<=s.from?s.to:Math.min(s.to,a);for(let o=t.to;;){let l=e.childAfter(o);if(!l||l==n)return null;if(!l.type.isSkipped){if(l.from>=r)return null;let u=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+u}}o=l.to}}function vJ({closing:i,align:e=!0,units:t=1}){return n=>xf(n,e,t,i)}function xf(i,e,t,n,a){let s=i.textAfter,r=s.match(/^\s*/)[0].length,o=n&&s.slice(r,r+n.length)==n||a==i.pos+r,l=e?bJ(i):null;return l?o?i.column(l.from):i.column(l.to):i.baseIndent+(o?0:i.unit*t)}const yJ=i=>i.baseIndent;function Kr({except:i,units:e=1}={}){return t=>{let n=i&&i.test(t.textAfter);return t.baseIndent+(n?0:e*t.unit)}}const wJ=200;function zJ(){return re.transactionFilter.of(i=>{if(!i.docChanged||!i.isUserEvent("input.type")&&!i.isUserEvent("input.complete"))return i;let e=i.startState.languageDataAt("indentOnInput",i.startState.selection.main.head);if(!e.length)return i;let t=i.newDoc,{head:n}=i.newSelection.main,a=t.lineAt(n);if(n>a.from+wJ)return i;let s=t.sliceString(a.from,n);if(!e.some(u=>u.test(s)))return i;let{state:r}=i,o=-1,l=[];for(let{head:u}of r.selection.ranges){let m=r.doc.lineAt(u);if(m.from==o)continue;o=m.from;let c=E0(r,m.from);if(c==null)continue;let d=/^\s*/.exec(m.text)[0],h=Ei(r,c);d!=h&&l.push({from:m.from,to:m.from+d.length,insert:h})}return l.length?[i,{changes:l,sequential:!0}]:i})}const IJ=new ae;function kJ(i){let e=i.firstChild,t=i.lastChild;return e&&e.too.prop(I1)==r.data:r?o=>o==r:void 0,this.style=hf(e.map(o=>({tag:o.tag,class:o.class||a(Object.assign({},o,{tag:null}))})),{all:s}).style,this.module=n?new Bn(n):null,this.themeType=t.themeType}static define(e,t){return new hr(e,t||{})}}const Al=V.define(),SJ=V.define({combine(i){return i.length?[i[0]]:null}});function eo(i){let e=i.facet(Al);return e.length?e:i.facet(SJ)}function TJ(i,e){let t=[_J],n;return i instanceof hr&&(i.module&&t.push(Q.styleModule.of(i.module)),n=i.themeType),n?t.push(Al.computeN([Q.darkTheme],a=>a.facet(Q.darkTheme)==(n=="dark")?[i]:[])):t.push(Al.of(i)),t}class jJ{constructor(e){this.markCache=Object.create(null),this.tree=Xe(e.state),this.decorations=this.buildDeco(e,eo(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Xe(e.state),n=eo(e.state),a=n!=eo(e.startState),{viewport:s}=e.view,r=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=r):(t!=this.tree||e.viewportChanged||a)&&(this.tree=t,this.decorations=this.buildDeco(e.view,n),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return he.none;let n=new i1;for(let{from:a,to:s}of e.visibleRanges)aJ(this.tree,t,(r,o,l)=>{n.add(r,o,this.markCache[l]||(this.markCache[l]=he.mark({class:l})))},a,s);return n.finish()}}const _J=u1.high(Wt.fromClass(jJ,{decorations:i=>i.decorations})),CJ=Q.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),bf=1e4,vf="()[]{}",yf=V.define({combine(i){return z0(i,{afterCursor:!0,brackets:vf,maxScanDistance:bf,renderMatch:OJ})}}),AJ=he.mark({class:"cm-matchingBracket"}),PJ=he.mark({class:"cm-nonmatchingBracket"});function OJ(i){let e=[],t=i.matched?AJ:PJ;return e.push(t.range(i.start.from,i.start.to)),i.end&&e.push(t.range(i.end.from,i.end.to)),e}function Mc(i){let e=[],t=i.facet(yf);for(let n of i.selection.ranges){if(!n.empty)continue;let a=on(i,n.head,-1,t)||n.head>0&&on(i,n.head-1,1,t)||t.afterCursor&&(on(i,n.head,1,t)||n.headi.decorations}),ZJ=[MJ,CJ];function DJ(i={}){return[yf.of(i),ZJ]}const BJ=new ae;function Pl(i,e,t){let n=i.prop(e<0?ae.openedBy:ae.closedBy);if(n)return n;if(i.name.length==1){let a=t.indexOf(i.name);if(a>-1&&a%2==(e<0?1:0))return[t[a+e]]}return null}function Ol(i){let e=i.type.prop(BJ);return e?e(i.node):i}function on(i,e,t,n={}){let a=n.maxScanDistance||bf,s=n.brackets||vf,r=Xe(i),o=r.resolveInner(e,t);for(let l=o;l;l=l.parent){let u=Pl(l.type,t,s);if(u&&l.from0?e>=m.from&&em.from&&e<=m.to))return LJ(i,e,t,l,m,u,s)}}return WJ(i,e,t,r,o.type,a,s)}function LJ(i,e,t,n,a,s,r){let o=n.parent,l={from:a.from,to:a.to},u=0,m=o==null?void 0:o.cursor();if(m&&(t<0?m.childBefore(n.from):m.childAfter(n.to)))do if(t<0?m.to<=n.from:m.from>=n.to){if(u==0&&s.indexOf(m.type.name)>-1&&m.from0)return null;let u={from:t<0?e-1:e,to:t>0?e+1:e},m=i.doc.iterRange(e,t>0?i.doc.length:0),c=0;for(let d=0;!m.next().done&&d<=s;){let h=m.value;t<0&&(d+=h.length);let g=e+d*t;for(let f=t>0?0:h.length-1,x=t>0?h.length:-1;f!=x;f+=t){let b=r.indexOf(h[f]);if(!(b<0||n.resolveInner(g+f,1).type!=a))if(b%2==0==t>0)c++;else{if(c==1)return{start:u,end:{from:g+f,to:g+f+1},matched:b>>1==l>>1};c--}}t>0&&(d+=h.length)}return m.done?{start:u,matched:!1}:null}const EJ=Object.create(null),Zc=[ft.none],Dc=[],Bc=Object.create(null),NJ=Object.create(null);for(let[i,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])NJ[i]=JJ(EJ,e);function to(i,e){Dc.indexOf(i)>-1||(Dc.push(i),console.warn(e))}function JJ(i,e){let t=[];for(let o of e.split(" ")){let l=[];for(let u of o.split(".")){let m=i[u]||W[u];m?typeof m=="function"?l.length?l=l.map(m):to(u,`Modifier ${u} used at start of tag`):l.length?to(u,`Tag ${u} used as modifier`):l=Array.isArray(m)?m:[m]:to(u,`Unknown highlighting tag ${u}`)}for(let u of l)t.push(u)}if(!t.length)return 0;let n=e.replace(/ /g,"_"),a=n+" "+t.map(o=>o.id),s=Bc[a];if(s)return s.id;let r=Bc[a]=ft.define({id:Zc.length,name:n,props:[cf({[n]:t})]});return Zc.push(r),r.id}ye.RTL,ye.LTR;class wf{constructor(e,t,n,a){this.state=e,this.pos=t,this.explicit=n,this.view=a,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Xe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),a=t.text.slice(n-t.from,this.pos-t.from),s=a.search(zf(e,!1));return s<0?null:{from:n+s,to:this.pos,text:a.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,n){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),n&&n.onDocChange&&(this.abortOnDocChange=!0))}}function Lc(i){let e=Object.keys(i).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function FJ(i){let e=Object.create(null),t=Object.create(null);for(let{label:a}of i){e[a[0]]=!0;for(let s=1;stypeof a=="string"?{label:a}:a),[t,n]=e.every(a=>/^\w+$/.test(a.label))?[/\w*$/,/\w+$/]:FJ(e);return a=>{let s=a.matchBefore(n);return s||a.explicit?{from:s?s.from:a.pos,options:e,validFor:t}:null}}class Wc{constructor(e,t,n,a){this.completion=e,this.source=t,this.match=n,this.score=a}}function s1(i){return i.selection.main.from}function zf(i,e){var t;let{source:n}=i,a=e&&n[0]!="^",s=n[n.length-1]!="$";return!a&&!s?i:new RegExp(`${a?"^":""}(?:${n})${s?"$":""}`,(t=i.flags)!==null&&t!==void 0?t:i.ignoreCase?"i":"")}const J0=Nn.define();function GJ(i,e,t,n){let{main:a}=i.selection,s=t-a.from,r=n-a.from;return{...i.changeByRange(o=>{if(o!=a&&t!=n&&i.sliceDoc(o.from+s,o.from+r)!=i.sliceDoc(t,n))return{range:o};let l=i.toText(e);return{changes:{from:o.from+s,to:n==a.from?o.to:o.from+r,insert:l},range:Z.cursor(o.from+s+l.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Ec=new WeakMap;function HJ(i){if(!Array.isArray(i))return i;let e=Ec.get(i);return e||Ec.set(i,e=RJ(i)),e}const Es=de.define(),Ni=de.define();class VJ{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&I<=57||I>=97&&I<=122?2:I>=65&&I<=90?1:0:(k=Hg(I))!=k.toLowerCase()?1:k!=k.toUpperCase()?2:0;(!v||S==1&&x||z==0&&S!=0)&&(t[c]==I||n[c]==I&&(d=!0)?r[c++]=v:r.length&&(b=!1)),z=S,v+=hn(I)}return c==l&&r[0]==0&&b?this.result(-100+(d?-200:0),r,e):h==l&&g==0?this.ret(-200-e.length+(f==e.length?0:-100),[0,f]):o>-1?this.ret(-700-e.length,[o,o+this.pattern.length]):h==l?this.ret(-900-e.length,[g,f]):c==l?this.result(-100+(d?-200:0)+-700+(b?0:-1100),r,e):t.length==2?null:this.result((a[0]?-700:0)+-200+-1100,a,e)}result(e,t,n){let a=[],s=0;for(let r of t){let o=r+(this.astral?hn(At(n,r)):1);s&&a[s-1]==r?a[s-1]=o:(a[s++]=r,a[s++]=o)}return this.ret(e-n.length,a)}}class QJ{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:qJ,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>n=>Nc(e(n),t(n)),optionClass:(e,t)=>n=>Nc(e(n),t(n)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Nc(i,e){return i?e?i+" "+e:i:e}function qJ(i,e,t,n,a,s){let r=i.textDirection==ye.RTL,o=r,l=!1,u="top",m,c,d=e.left-a.left,h=a.right-e.right,g=n.right-n.left,f=n.bottom-n.top;if(o&&d=f||v>e.top?m=t.bottom-e.top:(u="bottom",m=e.bottom-t.top)}let x=(e.bottom-e.top)/s.offsetHeight,b=(e.right-e.left)/s.offsetWidth;return{style:`${u}: ${m/x}px; max-width: ${c/b}px`,class:"cm-completionInfo-"+(l?r?"left-narrow":"right-narrow":o?"left":"right")}}const F0=de.define();function UJ(i){let e=i.addToOptions.slice();return i.icons&&e.push({render(t){let n=document.createElement("div");return n.classList.add("cm-completionIcon"),t.type&&n.classList.add(...t.type.split(/\s+/g).map(a=>"cm-completionIcon-"+a)),n.setAttribute("aria-hidden","true"),n},position:20}),e.push({render(t,n,a,s){let r=document.createElement("span");r.className="cm-completionLabel";let o=t.displayLabel||t.label,l=0;for(let u=0;ul&&r.appendChild(document.createTextNode(o.slice(l,m)));let d=r.appendChild(document.createElement("span"));d.appendChild(document.createTextNode(o.slice(m,c))),d.className="cm-completionMatchedText",l=c}return lt.position-n.position).map(t=>t.render)}function no(i,e,t){if(i<=t)return{from:0,to:i};if(e<0&&(e=0),e<=i>>1){let a=Math.floor(e/t);return{from:a*t,to:(a+1)*t}}let n=Math.ceil((i-e)/t);return{from:i-n*t,to:i-(n-1)*t}}class YJ{constructor(e,t,n){this.view=e,this.stateField=t,this.applyCompletion=n,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:l=>this.placeInfo(l),key:this},this.space=null,this.currentClass="";let a=e.state.field(t),{options:s,selected:r}=a.open,o=e.state.facet(Ge);this.optionContent=UJ(o),this.optionClass=o.optionClass,this.tooltipClass=o.tooltipClass,this.range=no(s.length,r,o.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",l=>{let{options:u}=e.state.field(t).open;for(let m=l.target,c;m&&m!=this.dom;m=m.parentNode)if(m.nodeName=="LI"&&(c=/-(\d+)$/.exec(m.id))&&+c[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;m!=null&&(e.dispatch({effects:F0.of(m)}),l.preventDefault())}}),this.dom.addEventListener("focusout",l=>{let u=e.state.field(this.stateField,!1);u&&u.tooltip&&e.state.facet(Ge).closeOnBlur&&l.relatedTarget!=e.contentDOM&&e.dispatch({effects:Ni.of(null)})}),this.showOptions(s,a.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let n=e.state.field(this.stateField),a=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),n!=a){let{options:s,selected:r,disabled:o}=n.open;(!a.open||a.open.options!=s)&&(this.range=no(s.length,r,e.state.facet(Ge).maxRenderedOptions),this.showOptions(s,n.id)),this.updateSel(),o!=((t=a.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!o)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let n of this.currentClass.split(" "))n&&this.dom.classList.remove(n);for(let n of t.split(" "))n&&this.dom.classList.add(n);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=no(t.options.length,t.selected,this.view.state.facet(Ge).maxRenderedOptions),this.showOptions(t.options,e.id));let n=this.updateSelectedOption(t.selected);if(n){this.destroyInfo();let{completion:a}=t.options[t.selected],{info:s}=a;if(!s)return;let r=typeof s=="string"?document.createTextNode(s):s(a);if(!r)return;"then"in r?r.then(o=>{o&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(o,a)}).catch(o=>zt(this.view.state,o,"completion info")):(this.addInfoPane(r,a),n.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let n=this.info=document.createElement("div");if(n.className="cm-tooltip cm-completionInfo",n.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)n.appendChild(e),this.infoDestroy=null;else{let{dom:a,destroy:s}=e;n.appendChild(a),this.infoDestroy=s||null}this.dom.appendChild(n),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let n=this.list.firstChild,a=this.range.from;n;n=n.nextSibling,a++)n.nodeName!="LI"||!n.id?a--:a==e?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),t=n):n.hasAttribute("aria-selected")&&(n.removeAttribute("aria-selected"),n.removeAttribute("aria-describedby"));return t&&XJ(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),n=this.info.getBoundingClientRect(),a=e.getBoundingClientRect(),s=this.space;if(!s){let r=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:r.clientWidth,bottom:r.clientHeight}}return a.top>Math.min(s.bottom,t.bottom)-10||a.bottom{r.target==a&&r.preventDefault()});let s=null;for(let r=n.from;rn.from||n.from==0))if(s=d,typeof u!="string"&&u.header)a.appendChild(u.header(u));else{let h=a.appendChild(document.createElement("completion-section"));h.textContent=d}}const m=a.appendChild(document.createElement("li"));m.id=t+"-"+r,m.setAttribute("role","option");let c=this.optionClass(o);c&&(m.className=c);for(let d of this.optionContent){let h=d(o,this.view.state,this.view,l);h&&m.appendChild(h)}}return n.from&&a.classList.add("cm-completionListIncompleteTop"),n.tonew YJ(t,i,e)}function XJ(i,e){let t=i.getBoundingClientRect(),n=e.getBoundingClientRect(),a=t.height/i.offsetHeight;n.topt.bottom&&(i.scrollTop+=(n.bottom-t.bottom)/a)}function Jc(i){return(i.boost||0)*100+(i.apply?10:0)+(i.info?5:0)+(i.type?1:0)}function KJ(i,e){let t=[],n=null,a=null,s=m=>{t.push(m);let{section:c}=m.completion;if(c){n||(n=[]);let d=typeof c=="string"?c:c.name;n.some(h=>h.name==d)||n.push(typeof c=="string"?{name:d}:c)}},r=e.facet(Ge);for(let m of i)if(m.hasResult()){let c=m.result.getMatch;if(m.result.filter===!1)for(let d of m.result.options)s(new Wc(d,m.source,c?c(d):[],1e9-t.length));else{let d=e.sliceDoc(m.from,m.to),h,g=r.filterStrict?new QJ(d):new VJ(d);for(let f of m.result.options)if(h=g.match(f.label)){let x=f.displayLabel?c?c(f,h.matched):[]:h.matched,b=h.score+(f.boost||0);if(s(new Wc(f,m.source,x,b)),typeof f.section=="object"&&f.section.rank==="dynamic"){let{name:v}=f.section;a||(a=Object.create(null)),a[v]=Math.max(b,a[v]||-1e9)}}}}if(n){let m=Object.create(null),c=0,d=(h,g)=>(h.rank==="dynamic"&&g.rank==="dynamic"?a[g.name]-a[h.name]:0)||(typeof h.rank=="number"?h.rank:1e9)-(typeof g.rank=="number"?g.rank:1e9)||(h.named.score-c.score||u(c.completion,d.completion))){let c=m.completion;!l||l.label!=c.label||l.detail!=c.detail||l.type!=null&&c.type!=null&&l.type!=c.type||l.apply!=c.apply||l.boost!=c.boost?o.push(m):Jc(m.completion)>Jc(l)&&(o[o.length-1]=m),l=m.completion}return o}class k1{constructor(e,t,n,a,s,r){this.options=e,this.attrs=t,this.tooltip=n,this.timestamp=a,this.selected=s,this.disabled=r}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new k1(this.options,Fc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,n,a,s,r){if(a&&!r&&e.some(u=>u.isPending))return a.setDisabled();let o=KJ(e,t);if(!o.length)return a&&e.some(u=>u.isPending)?a.setDisabled():null;let l=t.facet(Ge).selectOnOpen?0:-1;if(a&&a.selected!=l&&a.selected!=-1){let u=a.options[a.selected].completion;for(let m=0;mm.hasResult()?Math.min(u,m.from):u,1e8),create:sF,above:s.aboveCursor},a?a.timestamp:Date.now(),l,!1)}map(e){return new k1(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new k1(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ns{constructor(e,t,n){this.active=e,this.id=t,this.open=n}static start(){return new Ns(iF,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,n=t.facet(Ge),s=(n.override||t.languageDataAt("autocomplete",s1(t)).map(HJ)).map(l=>(this.active.find(m=>m.source==l)||new Bt(l,this.active.some(m=>m.state!=0)?1:0)).update(e,n));s.length==this.active.length&&s.every((l,u)=>l==this.active[u])&&(s=this.active);let r=this.open,o=e.effects.some(l=>l.is(R0));r&&e.docChanged&&(r=r.map(e.changes)),e.selection||s.some(l=>l.hasResult()&&e.changes.touchesRange(l.from,l.to))||!eF(s,this.active)||o?r=k1.build(s,t,this.id,r,n,o):r&&r.disabled&&!s.some(l=>l.isPending)&&(r=null),!r&&s.every(l=>!l.isPending)&&s.some(l=>l.hasResult())&&(s=s.map(l=>l.hasResult()?new Bt(l.source,0):l));for(let l of e.effects)l.is(F0)&&(r=r&&r.setSelected(l.value,this.id));return s==this.active&&r==this.open?this:new Ns(s,this.id,r)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?tF:nF}}function eF(i,e){if(i==e)return!0;for(let t=0,n=0;;){for(;t-1&&(t["aria-activedescendant"]=i+"-"+e),t}const iF=[];function If(i,e){if(i.isUserEvent("input.complete")){let n=i.annotation(J0);if(n&&e.activateOnCompletion(n))return 12}let t=i.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:i.isUserEvent("delete.backward")?2:i.selection?8:i.docChanged?16:0}class Bt{constructor(e,t,n=!1){this.source=e,this.state=t,this.explicit=n}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let n=If(e,t),a=this;(n&8||n&16&&this.touches(e))&&(a=new Bt(a.source,0)),n&4&&a.state==0&&(a=new Bt(this.source,1)),a=a.updateFor(e,n);for(let s of e.effects)if(s.is(Es))a=new Bt(a.source,1,s.value);else if(s.is(Ni))a=new Bt(a.source,0);else if(s.is(R0))for(let r of s.value)r.source==a.source&&(a=r);return a}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(s1(e.state))}}class A1 extends Bt{constructor(e,t,n,a,s,r){super(e,3,t),this.limit=n,this.result=a,this.from=s,this.to=r}hasResult(){return!0}updateFor(e,t){var n;if(!(t&3))return this.map(e.changes);let a=this.result;a.map&&!e.changes.empty&&(a=a.map(a,e.changes));let s=e.changes.mapPos(this.from),r=e.changes.mapPos(this.to,1),o=s1(e.state);if(o>r||!a||t&2&&(s1(e.startState)==this.from||ot.map(e))}}),gt=Et.define({create(){return Ns.start()},update(i,e){return i.update(e)},provide:i=>[tf.from(i,e=>e.tooltip),Q.contentAttributes.from(i,e=>e.attrs)]});function G0(i,e){const t=e.completion.apply||e.completion.label;let n=i.state.field(gt).active.find(a=>a.source==e.source);return n instanceof A1?(typeof t=="string"?i.dispatch({...GJ(i.state,t,n.from,n.to),annotations:J0.of(e.completion)}):t(i,e.completion,n.from,n.to),!0):!1}const sF=$J(gt,G0);function Da(i,e="option"){return t=>{let n=t.state.field(gt,!1);if(!n||!n.open||n.open.disabled||Date.now()-n.open.timestamp-1?n.open.selected+a*(i?1:-1):i?0:r-1;return o<0?o=e=="page"?0:r-1:o>=r&&(o=e=="page"?r-1:0),t.dispatch({effects:F0.of(o)}),!0}}const rF=i=>{let e=i.state.field(gt,!1);return i.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampi.state.field(gt,!1)?(i.dispatch({effects:Es.of(!0)}),!0):!1,oF=i=>{let e=i.state.field(gt,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(i.dispatch({effects:Ni.of(null)}),!0)};class lF{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const uF=50,mF=1e3,cF=Wt.fromClass(class{constructor(i){this.view=i,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of i.state.field(gt).active)e.isPending&&this.startQuery(e)}update(i){let e=i.state.field(gt),t=i.state.facet(Ge);if(!i.selectionSet&&!i.docChanged&&i.startState.field(gt)==e)return;let n=i.transactions.some(s=>{let r=If(s,t);return r&8||(s.selection||s.docChanged)&&!(r&3)});for(let s=0;suF&&Date.now()-r.time>mF){for(let o of r.context.abortListeners)try{o()}catch(l){zt(this.view.state,l)}r.context.abortListeners=null,this.running.splice(s--,1)}else r.updates.push(...i.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),i.transactions.some(s=>s.effects.some(r=>r.is(Es)))&&(this.pendingStart=!0);let a=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(r=>r.active.source==s.source))?setTimeout(()=>this.startUpdate(),a):-1,this.composing!=0)for(let s of i.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:i}=this.view,e=i.field(gt);for(let t of e.active)t.isPending&&!this.running.some(n=>n.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}startQuery(i){let{state:e}=this.view,t=s1(e),n=new wf(e,t,i.explicit,this.view),a=new lF(i,n);this.running.push(a),Promise.resolve(i.source(n)).then(s=>{a.context.aborted||(a.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:Ni.of(null)}),zt(this.view.state,s)})}scheduleAccept(){this.running.every(i=>i.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ge).updateSyncTime))}accept(){var i;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ge),n=this.view.state.field(gt);for(let a=0;ao.source==s.active.source);if(r&&r.isPending)if(s.done==null){let o=new Bt(s.active.source,0);for(let l of s.updates)o=o.update(l,t);o.isPending||e.push(o)}else this.startQuery(r)}(e.length||n.open&&n.open.disabled)&&this.view.dispatch({effects:R0.of(e)})}},{eventHandlers:{blur(i){let e=this.view.state.field(gt,!1);if(e&&e.tooltip&&this.view.state.facet(Ge).closeOnBlur){let t=e.open&&nf(this.view,e.open.tooltip);(!t||!t.dom.contains(i.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Ni.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Es.of(!1)}),20),this.composing=0}}}),dF=typeof navigator=="object"&&/Win/.test(navigator.platform),hF=u1.highest(Q.domEventHandlers({keydown(i,e){let t=e.state.field(gt,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||!i.key||i.key.length>1||i.ctrlKey&&!(dF&&i.altKey)||i.metaKey)return!1;let n=t.open.options[t.open.selected],a=t.active.find(r=>r.source==n.source),s=n.completion.commitCharacters||a.result.commitCharacters;return s&&s.indexOf(i.key)>-1&&G0(e,n),!1}})),kf=Q.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class gF{constructor(e,t,n,a){this.field=e,this.line=t,this.from=n,this.to=a}}class H0{constructor(e,t,n){this.field=e,this.from=t,this.to=n}map(e){let t=e.mapPos(this.from,-1,st.TrackDel),n=e.mapPos(this.to,1,st.TrackDel);return t==null||n==null?null:new H0(this.field,t,n)}}class V0{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let n=[],a=[t],s=e.doc.lineAt(t),r=/^\s*/.exec(s.text)[0];for(let l of this.lines){if(n.length){let u=r,m=/^\t*/.exec(l)[0].length;for(let c=0;cnew H0(l.field,a[l.line]+l.from,a[l.line]+l.to));return{text:n,ranges:o}}static parse(e){let t=[],n=[],a=[],s;for(let r of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(r);){let o=s[1]?+s[1]:null,l=s[2]||s[3]||"",u=-1;o===0&&(o=1e9);let m=l.replace(/\\[{}]/g,c=>c[1]);for(let c=0;c=u&&d.field++}for(let c of a)if(c.line==n.length&&c.from>s.index){let d=s[2]?3+(s[1]||"").length:2;c.from-=d,c.to-=d}a.push(new gF(u,n.length,s.index,s.index+m.length)),r=r.slice(0,s.index)+l+r.slice(s.index+s[0].length)}r=r.replace(/\\([{}])/g,(o,l,u)=>{for(let m of a)m.line==n.length&&m.from>u&&(m.from--,m.to--);return l}),n.push(r)}return new V0(n,a)}}let pF=he.widget({widget:new class extends J1{toDOM(){let i=document.createElement("span");return i.className="cm-snippetFieldPosition",i}ignoreEvent(){return!1}}}),fF=he.mark({class:"cm-snippetField"});class F1{constructor(e,t){this.ranges=e,this.active=t,this.deco=he.set(e.map(n=>(n.from==n.to?pF:fF).range(n.from,n.to)),!0)}map(e){let t=[];for(let n of this.ranges){let a=n.map(e);if(!a)return null;t.push(a)}return new F1(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(n=>n.field==this.active&&n.from<=t.from&&n.to>=t.to))}}const Xi=de.define({map(i,e){return i&&i.map(e)}}),xF=de.define(),Ji=Et.define({create(){return null},update(i,e){for(let t of e.effects){if(t.is(Xi))return t.value;if(t.is(xF)&&i)return new F1(i.ranges,t.value)}return i&&e.docChanged&&(i=i.map(e.changes)),i&&e.selection&&!i.selectionInsideField(e.selection)&&(i=null),i},provide:i=>Q.decorations.from(i,e=>e?e.deco:he.none)});function Q0(i,e){return Z.create(i.filter(t=>t.field==e).map(t=>Z.range(t.from,t.to)))}function bF(i){let e=V0.parse(i);return(t,n,a,s)=>{let{text:r,ranges:o}=e.instantiate(t.state,a),{main:l}=t.state.selection,u={changes:{from:a,to:s==l.from?l.to:s,insert:oe.of(r)},scrollIntoView:!0,annotations:n?[J0.of(n),Ye.userEvent.of("input.complete")]:void 0};if(o.length&&(u.selection=Q0(o,0)),o.some(m=>m.field>0)){let m=new F1(o,0),c=u.effects=[Xi.of(m)];t.state.field(Ji,!1)===void 0&&c.push(de.appendConfig.of([Ji,IF,kF,kf]))}t.dispatch(t.state.update(u))}}function Sf(i){return({state:e,dispatch:t})=>{let n=e.field(Ji,!1);if(!n||i<0&&n.active==0)return!1;let a=n.active+i,s=i>0&&!n.ranges.some(r=>r.field==a+i);return t(e.update({selection:Q0(n.ranges,a),effects:Xi.of(s?null:new F1(n.ranges,a)),scrollIntoView:!0})),!0}}const vF=({state:i,dispatch:e})=>i.field(Ji,!1)?(e(i.update({effects:Xi.of(null)})),!0):!1,yF=Sf(1),wF=Sf(-1),zF=[{key:"Tab",run:yF,shift:wF},{key:"Escape",run:vF}],Rc=V.define({combine(i){return i.length?i[0]:zF}}),IF=u1.highest(Bi.compute([Rc],i=>i.facet(Rc)));function q0(i,e){return{...e,apply:bF(i)}}const kF=Q.domEventHandlers({mousedown(i,e){let t=e.state.field(Ji,!1),n;if(!t||(n=e.posAtCoords({x:i.clientX,y:i.clientY}))==null)return!1;let a=t.ranges.find(s=>s.from<=n&&s.to>=n);return!a||a.field==t.active?!1:(e.dispatch({selection:Q0(t.ranges,a.field),effects:Xi.of(t.ranges.some(s=>s.field>a.field)?new F1(t.ranges,a.field):null),scrollIntoView:!0}),!0)}}),Fi={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Xn=de.define({map(i,e){let t=e.mapPos(i,-1,st.TrackAfter);return t??void 0}}),U0=new class extends Dn{};U0.startSide=1;U0.endSide=-1;const Tf=Et.define({create(){return ie.empty},update(i,e){if(i=i.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);i=i.update({filter:n=>n>=t.from&&n<=t.to})}for(let t of e.effects)t.is(Xn)&&(i=i.update({add:[U0.range(t.value,t.value+1)]}));return i}});function SF(){return[jF,Tf]}const ao="()[]{}<>«»»«[]{}";function jf(i){for(let e=0;e{if((TF?i.composing:i.compositionStarted)||i.state.readOnly)return!1;let a=i.state.selection.main;if(n.length>2||n.length==2&&hn(At(n,0))==1||e!=a.from||t!=a.to)return!1;let s=AF(i.state,n);return s?(i.dispatch(s),!0):!1}),_F=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let n=_f(i,i.selection.main.head).brackets||Fi.brackets,a=null,s=i.changeByRange(r=>{if(r.empty){let o=PF(i.doc,r.head);for(let l of n)if(l==o&&gr(i.doc,r.head)==jf(At(l,0)))return{changes:{from:r.head-l.length,to:r.head+l.length},range:Z.cursor(r.head-l.length)}}return{range:a=r}});return a||e(i.update(s,{scrollIntoView:!0,userEvent:"delete.backward"})),!a},CF=[{key:"Backspace",run:_F}];function AF(i,e){let t=_f(i,i.selection.main.head),n=t.brackets||Fi.brackets;for(let a of n){let s=jf(At(a,0));if(e==a)return s==a?ZF(i,a,n.indexOf(a+a+a)>-1,t):OF(i,a,s,t.before||Fi.before);if(e==s&&Cf(i,i.selection.main.from))return MF(i,a,s)}return null}function Cf(i,e){let t=!1;return i.field(Tf).between(0,i.doc.length,n=>{n==e&&(t=!0)}),t}function gr(i,e){let t=i.sliceString(e,e+2);return t.slice(0,hn(At(t,0)))}function PF(i,e){let t=i.sliceString(e-2,e);return hn(At(t,0))==t.length?t:t.slice(1)}function OF(i,e,t,n){let a=null,s=i.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:t,from:r.to}],effects:Xn.of(r.to+e.length),range:Z.range(r.anchor+e.length,r.head+e.length)};let o=gr(i.doc,r.head);return!o||/\s/.test(o)||n.indexOf(o)>-1?{changes:{insert:e+t,from:r.head},effects:Xn.of(r.head+e.length),range:Z.cursor(r.head+e.length)}:{range:a=r}});return a?null:i.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function MF(i,e,t){let n=null,a=i.changeByRange(s=>s.empty&&gr(i.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:Z.cursor(s.head+t.length)}:n={range:s});return n?null:i.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function ZF(i,e,t,n){let a=n.stringPrefixes||Fi.stringPrefixes,s=null,r=i.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:e,from:o.to}],effects:Xn.of(o.to+e.length),range:Z.range(o.anchor+e.length,o.head+e.length)};let l=o.head,u=gr(i.doc,l),m;if(u==e){if(Gc(i,l))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:Z.cursor(l+e.length)};if(Cf(i,l)){let d=t&&i.sliceDoc(l,l+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:l,to:l+d.length,insert:d},range:Z.cursor(l+d.length)}}}else{if(t&&i.sliceDoc(l-2*e.length,l)==e+e&&(m=Hc(i,l-2*e.length,a))>-1&&Gc(i,m))return{changes:{insert:e+e+e+e,from:l},effects:Xn.of(l+e.length),range:Z.cursor(l+e.length)};if(i.charCategorizer(l)(u)!=Zt.Word&&Hc(i,l,a)>-1&&!DF(i,l,e,a))return{changes:{insert:e+e,from:l},effects:Xn.of(l+e.length),range:Z.cursor(l+e.length)}}return{range:s=o}});return s?null:i.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Gc(i,e){let t=Xe(i).resolveInner(e+1);return t.parent&&t.from==e}function DF(i,e,t,n){let a=Xe(i).resolveInner(e,-1),s=n.reduce((r,o)=>Math.max(r,o.length),0);for(let r=0;r<5;r++){let o=i.sliceDoc(a.from,Math.min(a.to,a.from+t.length+s)),l=o.indexOf(t);if(!l||l>-1&&n.indexOf(o.slice(0,l))>-1){let m=a.firstChild;for(;m&&m.from==a.from&&m.to-m.from>t.length+l;){if(i.sliceDoc(m.to-t.length,m.to)==t)return!1;m=m.firstChild}return!0}let u=a.to==e&&a.parent;if(!u)break;a=u}return!1}function Hc(i,e,t){let n=i.charCategorizer(e);if(n(i.sliceDoc(e-1,e))!=Zt.Word)return e;for(let a of t){let s=e-a.length;if(i.sliceDoc(s,e)==a&&n(i.sliceDoc(s-1,s))!=Zt.Word)return s}return-1}function BF(i={}){return[hF,gt,Ge.of(i),cF,LF,kf]}const Af=[{key:"Ctrl-Space",run:io},{mac:"Alt-`",run:io},{mac:"Alt-i",run:io},{key:"Escape",run:oF},{key:"ArrowDown",run:Da(!0)},{key:"ArrowUp",run:Da(!1)},{key:"PageDown",run:Da(!0,"page")},{key:"PageUp",run:Da(!1,"page")},{key:"Enter",run:rF}],LF=u1.highest(Bi.computeN([Ge],i=>i.facet(Ge).defaultKeymap?[Af]:[])),WF=i=>{let{state:e}=i,t=e.doc.lineAt(e.selection.main.from),n=$0(i.state,t.from);return n.line?EF(i):n.block?JF(i):!1};function Y0(i,e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let a=i(e,t);return a?(n(t.update(a)),!0):!1}}const EF=Y0(GF,0),NF=Y0(Pf,0),JF=Y0((i,e)=>Pf(i,e,RF(e)),0);function $0(i,e){let t=i.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const ti=50;function FF(i,{open:e,close:t},n,a){let s=i.sliceDoc(n-ti,n),r=i.sliceDoc(a,a+ti),o=/\s*$/.exec(s)[0].length,l=/^\s*/.exec(r)[0].length,u=s.length-o;if(s.slice(u-e.length,u)==e&&r.slice(l,l+t.length)==t)return{open:{pos:n-o,margin:o&&1},close:{pos:a+l,margin:l&&1}};let m,c;a-n<=2*ti?m=c=i.sliceDoc(n,a):(m=i.sliceDoc(n,n+ti),c=i.sliceDoc(a-ti,a));let d=/^\s*/.exec(m)[0].length,h=/\s*$/.exec(c)[0].length,g=c.length-h-t.length;return m.slice(d,d+e.length)==e&&c.slice(g,g+t.length)==t?{open:{pos:n+d+e.length,margin:/\s/.test(m.charAt(d+e.length))?1:0},close:{pos:a-h-t.length,margin:/\s/.test(c.charAt(g-1))?1:0}}:null}function RF(i){let e=[];for(let t of i.selection.ranges){let n=i.doc.lineAt(t.from),a=t.to<=n.to?n:i.doc.lineAt(t.to);a.from>n.from&&a.from==t.to&&(a=t.to==n.to+1?n:i.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>n.from?e[s].to=a.to:e.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:a.to})}return e}function Pf(i,e,t=e.selection.ranges){let n=t.map(s=>$0(e,s.from).block);if(!n.every(s=>s))return null;let a=t.map((s,r)=>FF(e,n[r],s.from,s.to));if(i!=2&&!a.every(s=>s))return{changes:e.changes(t.map((s,r)=>a[r]?[]:[{from:s.from,insert:n[r].open+" "},{from:s.to,insert:" "+n[r].close}]))};if(i!=1&&a.some(s=>s)){let s=[];for(let r=0,o;ra&&(s==r||r>c.from)){a=c.from;let d=/^\s*/.exec(c.text)[0].length,h=d==c.length,g=c.text.slice(d,d+u.length)==u?d:-1;ds.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:o,token:l,indent:u,empty:m,single:c}of n)(c||!m)&&s.push({from:o.from+u,insert:l+" "});let r=e.changes(s);return{changes:r,selection:e.selection.map(r,1)}}else if(i!=1&&n.some(s=>s.comment>=0)){let s=[];for(let{line:r,comment:o,token:l}of n)if(o>=0){let u=r.from+o,m=u+l.length;r.text[m-r.from]==" "&&m++,s.push({from:u,to:m})}return{changes:s}}return null}function R1(i,e){return Z.create(i.ranges.map(e),i.mainIndex)}function qt(i,e){return i.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Ut({state:i,dispatch:e},t){let n=R1(i.selection,t);return n.eq(i.selection,!0)?!1:(e(qt(i,n)),!0)}function pr(i,e){return Z.cursor(e?i.to:i.from)}function Of(i,e){return Ut(i,t=>t.empty?i.moveByChar(t,e):pr(t,e))}function ot(i){return i.textDirectionAt(i.state.selection.main.head)==ye.LTR}const Mf=i=>Of(i,!ot(i)),Zf=i=>Of(i,ot(i));function Df(i,e){return Ut(i,t=>t.empty?i.moveByGroup(t,e):pr(t,e))}const HF=i=>Df(i,!ot(i)),VF=i=>Df(i,ot(i));function QF(i,e,t){if(e.type.prop(t))return!0;let n=e.to-e.from;return n&&(n>2||/[^\s,.;:]/.test(i.sliceDoc(e.from,e.to)))||e.firstChild}function fr(i,e,t){let n=Xe(i).resolveInner(e.head),a=t?ae.closedBy:ae.openedBy;for(let l=e.head;;){let u=t?n.childAfter(l):n.childBefore(l);if(!u)break;QF(i,u,a)?n=u:l=t?u.to:u.from}let s=n.type.prop(a),r,o;return s&&(r=t?on(i,n.from,1):on(i,n.to,-1))&&r.matched?o=t?r.end.to:r.end.from:o=t?n.to:n.from,Z.cursor(o,t?-1:1)}const qF=i=>Ut(i,e=>fr(i.state,e,!ot(i))),UF=i=>Ut(i,e=>fr(i.state,e,ot(i)));function Bf(i,e){return Ut(i,t=>{if(!t.empty)return pr(t,e);let n=i.moveVertically(t,e);return n.head!=t.head?n:i.moveToLineBoundary(t,e)})}const Lf=i=>Bf(i,!1),Wf=i=>Bf(i,!0);function Ef(i){let e=i.scrollDOM.clientHeightr.empty?i.moveVertically(r,e,t.height):pr(r,e));if(a.eq(n.selection))return!1;let s;if(t.selfScroll){let r=i.coordsAtPos(n.selection.main.head),o=i.scrollDOM.getBoundingClientRect(),l=o.top+t.marginTop,u=o.bottom-t.marginBottom;r&&r.top>l&&r.bottomNf(i,!1),Ml=i=>Nf(i,!0);function Jn(i,e,t){let n=i.lineBlockAt(e.head),a=i.moveToLineBoundary(e,t);if(a.head==e.head&&a.head!=(t?n.to:n.from)&&(a=i.moveToLineBoundary(e,t,!1)),!t&&a.head==n.from&&n.length){let s=/^\s*/.exec(i.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;s&&e.head!=n.from+s&&(a=Z.cursor(n.from+s))}return a}const YF=i=>Ut(i,e=>Jn(i,e,!0)),$F=i=>Ut(i,e=>Jn(i,e,!1)),XF=i=>Ut(i,e=>Jn(i,e,!ot(i))),KF=i=>Ut(i,e=>Jn(i,e,ot(i))),eR=i=>Ut(i,e=>i.moveToLineBoundary(e,!1,!1)),tR=i=>Ut(i,e=>i.moveToLineBoundary(e,!0,!1));function nR(i,e,t){let n=!1,a=R1(i.selection,s=>{let r=on(i,s.head,-1)||on(i,s.head,1)||s.head>0&&on(i,s.head-1,1)||s.headnR(i,e);function Nt(i,e,t){let n=R1(i.state.selection,a=>{a.undirectional&&a.head>=a.anchor!=e&&(a=Z.range(a.head,a.anchor));let s=t(a);return Z.range(a.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return n.eq(i.state.selection)?!1:(i.dispatch(qt(i.state,n)),!0)}function Jf(i,e){return Nt(i,e,t=>i.moveByChar(t,e))}const Ff=i=>Jf(i,!ot(i)),Rf=i=>Jf(i,ot(i));function Gf(i,e){return Nt(i,e,t=>i.moveByGroup(t,e))}const aR=i=>Gf(i,!ot(i)),sR=i=>Gf(i,ot(i)),rR=i=>{let e=!ot(i);return Nt(i,e,t=>fr(i.state,t,e))},oR=i=>{let e=ot(i);return Nt(i,e,t=>fr(i.state,t,e))};function Hf(i,e){return Nt(i,e,t=>i.moveVertically(t,e))}const Vf=i=>Hf(i,!1),Qf=i=>Hf(i,!0);function qf(i,e){return Nt(i,e,t=>i.moveVertically(t,e,Ef(i).height))}const Qc=i=>qf(i,!1),qc=i=>qf(i,!0),lR=i=>Nt(i,!0,e=>Jn(i,e,!0)),uR=i=>Nt(i,!1,e=>Jn(i,e,!1)),mR=i=>{let e=!ot(i);return Nt(i,e,t=>Jn(i,t,e))},cR=i=>{let e=ot(i);return Nt(i,e,t=>Jn(i,t,e))},dR=i=>Nt(i,!1,e=>Z.cursor(i.lineBlockAt(e.head).from)),hR=i=>Nt(i,!0,e=>Z.cursor(i.lineBlockAt(e.head).to)),Uc=({state:i,dispatch:e})=>(e(qt(i,{anchor:0})),!0),Yc=({state:i,dispatch:e})=>(e(qt(i,{anchor:i.doc.length})),!0),$c=({state:i,dispatch:e})=>(e(qt(i,{anchor:i.selection.main.anchor,head:0})),!0),Xc=({state:i,dispatch:e})=>(e(qt(i,{anchor:i.selection.main.anchor,head:i.doc.length})),!0),gR=({state:i,dispatch:e})=>(e(i.update({selection:{anchor:0,head:i.doc.length},userEvent:"select"})),!0),pR=({state:i,dispatch:e})=>{let t=xr(i).map(({from:n,to:a})=>Z.undirectionalRange(n,Math.min(a+1,i.doc.length)));return e(i.update({selection:Z.create(t),userEvent:"select"})),!0},fR=({state:i,dispatch:e})=>{let t=R1(i.selection,n=>{let a=Xe(i),s=a.resolveStack(n.from,1);if(n.empty){let r=a.resolveStack(n.from,-1);r.node.from>=s.node.from&&r.node.to<=s.node.to&&(s=r)}for(let r=s;r;r=r.next){let{node:o}=r;if((o.from=n.to||o.to>n.to&&o.from<=n.from)&&r.next)return Z.undirectionalRange(o.from,o.to)}return n});return t.eq(i.selection)?!1:(e(qt(i,t)),!0)};function Uf(i,e){let{state:t}=i,n=t.selection,a=t.selection.ranges.slice();for(let s of t.selection.ranges){let r=t.doc.lineAt(s.head);if(e?r.to0)for(let o=s;;){let l=i.moveVertically(o,e);if(l.headr.to){a.some(u=>u.head==l.head)||a.push(l);break}else{if(l.head==o.head)break;o=l}}}return a.length==n.ranges.length?!1:(i.dispatch(qt(t,Z.create(a,a.length-1))),!0)}const xR=i=>Uf(i,!1),bR=i=>Uf(i,!0),vR=({state:i,dispatch:e})=>{let t=i.selection,n=null;return t.ranges.length>1?n=Z.create([t.main]):t.main.empty||(n=Z.create([Z.cursor(t.main.head)])),n?(e(qt(i,n)),!0):!1};function Ki(i,e){if(i.state.readOnly)return!1;let t="delete.selection",{state:n}=i,a=n.changeByRange(s=>{let{from:r,to:o}=s;if(r==o){let l=e(s);lr&&(t="delete.forward",l=Ba(i,l,!0)),r=Math.min(r,l),o=Math.max(o,l)}else r=Ba(i,r,!1),o=Ba(i,o,!0);return r==o?{range:s}:{changes:{from:r,to:o},range:Z.cursor(r,ra(i)))n.between(e,e,(a,s)=>{ae&&(e=t?s:a)});return e}const Yf=(i,e,t)=>Ki(i,n=>{let a=n.from,{state:s}=i,r=s.doc.lineAt(a),o,l;if(t&&!e&&a>r.from&&aYf(i,!1,!0),$f=i=>Yf(i,!0,!1),Xf=(i,e)=>Ki(i,t=>{let n=t.head,{state:a}=i,s=a.doc.lineAt(n),r=a.charCategorizer(n);for(let o=null;;){if(n==(e?s.to:s.from)){n==t.head&&s.number!=(e?a.doc.lines:1)&&(n+=e?1:-1);break}let l=rt(s.text,n-s.from,e)+s.from,u=s.text.slice(Math.min(n,l)-s.from,Math.max(n,l)-s.from),m=r(u);if(o!=null&&m!=o)break;(u!=" "||n!=t.head)&&(o=m),n=l}return n}),Kf=i=>Xf(i,!1),yR=i=>Xf(i,!0),wR=i=>Ki(i,e=>{let t=i.lineBlockAt(e.head).to;return e.headKi(i,e=>{let t=i.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),IR=i=>Ki(i,e=>{let t=i.moveToLineBoundary(e,!0).head;return e.head{if(i.readOnly)return!1;let t=i.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:oe.of(["",""])},range:Z.cursor(n.from)}));return e(i.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},SR=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=i.changeByRange(n=>{if(!n.empty||n.from==0||n.from==i.doc.length)return{range:n};let a=n.from,s=i.doc.lineAt(a),r=a==s.from?a-1:rt(s.text,a-s.from,!1)+s.from,o=a==s.to?a+1:rt(s.text,a-s.from,!0)+s.from;return{changes:{from:r,to:o,insert:i.doc.slice(a,o).append(i.doc.slice(r,a))},range:Z.cursor(o)}});return t.changes.empty?!1:(e(i.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function xr(i){let e=[],t=-1;for(let n of i.selection.ranges){let a=i.doc.lineAt(n.from),s=i.doc.lineAt(n.to);if(!n.empty&&n.to==s.from&&(s=i.doc.lineAt(n.to-1)),t>=a.number){let r=e[e.length-1];r.to=s.to,r.ranges.push(n)}else e.push({from:a.from,to:s.to,ranges:[n]});t=s.number+1}return e}function e2(i,e,t){if(i.readOnly)return!1;let n=[],a=[];for(let s of xr(i)){if(t?s.to==i.doc.length:s.from==0)continue;let r=i.doc.lineAt(t?s.to+1:s.from-1),o=r.length+1;if(t){n.push({from:s.to,to:r.to},{from:s.from,insert:r.text+i.lineBreak});for(let l of s.ranges)a.push(Z.range(Math.min(i.doc.length,l.anchor+o),Math.min(i.doc.length,l.head+o)))}else{n.push({from:r.from,to:s.from},{from:s.to,insert:i.lineBreak+r.text});for(let l of s.ranges)a.push(Z.range(l.anchor-o,l.head-o))}}return n.length?(e(i.update({changes:n,scrollIntoView:!0,selection:Z.create(a,i.selection.mainIndex),userEvent:"move.line"})),!0):!1}const TR=({state:i,dispatch:e})=>e2(i,e,!1),jR=({state:i,dispatch:e})=>e2(i,e,!0);function t2(i,e,t){if(i.readOnly)return!1;let n=[];for(let s of xr(i))t?n.push({from:s.from,insert:i.doc.slice(s.from,s.to)+i.lineBreak}):n.push({from:s.to,insert:i.lineBreak+i.doc.slice(s.from,s.to)});let a=i.changes(n);return e(i.update({changes:a,selection:i.selection.map(a,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const _R=({state:i,dispatch:e})=>t2(i,e,!1),CR=({state:i,dispatch:e})=>t2(i,e,!0),AR=i=>{if(i.state.readOnly)return!1;let{state:e}=i,t=e.changes(xr(e).map(({from:a,to:s})=>(a>0?a--:s{let s;if(i.lineWrapping){let r=i.lineBlockAt(a.head),o=i.coordsAtPos(a.head,a.assoc||1);o&&(s=r.bottom+i.documentTop-o.bottom+i.defaultLineHeight/2)}return i.moveVertically(a,!0,s)}).map(t);return i.dispatch({changes:t,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0};function PR(i,e){if(/\(\)|\[\]|\{\}/.test(i.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Xe(i).resolveInner(e),n=t.childBefore(e),a=t.childAfter(e),s;return n&&a&&n.to<=e&&a.from>=e&&(s=n.type.prop(ae.closedBy))&&s.indexOf(a.name)>-1&&i.doc.lineAt(n.to).from==i.doc.lineAt(a.from).from&&!/\S/.test(i.sliceDoc(n.to,a.from))?{from:n.to,to:a.from}:null}const Kc=n2(!1),OR=n2(!0);function n2(i){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(a=>{let{from:s,to:r}=a,o=e.doc.lineAt(s),l=!i&&s==r&&PR(e,s);i&&(s=r=(r<=o.to?o:e.doc.lineAt(r)).to);let u=new dr(e,{simulateBreak:s,simulateDoubleBreak:!!l}),m=E0(u,s);for(m==null&&(m=Qi(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ro.from&&s{let a=[];for(let r=n.from;r<=n.to;){let o=i.doc.lineAt(r);o.number>t&&(n.empty||n.to>o.from)&&(e(o,a,n),t=o.number),r=o.to+1}let s=i.changes(a);return{changes:a,range:Z.range(s.mapPos(n.anchor,1),s.mapPos(n.head,1))}})}const MR=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=Object.create(null),n=new dr(i,{overrideIndentation:s=>{let r=t[s];return r??-1}}),a=X0(i,(s,r,o)=>{let l=E0(n,s.from);if(l==null)return;/\S/.test(s.text)||(l=0);let u=/^\s*/.exec(s.text)[0],m=Ei(i,l);(u!=m||o.fromi.readOnly?!1:(e(i.update(X0(i,(t,n)=>{n.push({from:t.from,insert:i.facet($i)})}),{userEvent:"input.indent"})),!0),a2=({state:i,dispatch:e})=>i.readOnly?!1:(e(i.update(X0(i,(t,n)=>{let a=/^\s*/.exec(t.text)[0];if(!a)return;let s=Qi(a,i.tabSize),r=0,o=Ei(i,Math.max(0,s-Ws(i)));for(;r(i.setTabFocusMode(),!0),DR=[{key:"Ctrl-b",run:Mf,shift:Ff,preventDefault:!0},{key:"Ctrl-f",run:Zf,shift:Rf},{key:"Ctrl-p",run:Lf,shift:Vf},{key:"Ctrl-n",run:Wf,shift:Qf},{key:"Ctrl-a",run:eR,shift:dR},{key:"Ctrl-e",run:tR,shift:hR},{key:"Ctrl-d",run:$f},{key:"Ctrl-h",run:Zl},{key:"Ctrl-k",run:wR},{key:"Ctrl-Alt-h",run:Kf},{key:"Ctrl-o",run:kR},{key:"Ctrl-t",run:SR},{key:"Ctrl-v",run:Ml}],BR=[{key:"ArrowLeft",run:Mf,shift:Ff,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:HF,shift:aR,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:XF,shift:mR,preventDefault:!0},{key:"ArrowRight",run:Zf,shift:Rf,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:VF,shift:sR,preventDefault:!0},{mac:"Cmd-ArrowRight",run:KF,shift:cR,preventDefault:!0},{key:"ArrowUp",run:Lf,shift:Vf,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Uc,shift:$c},{mac:"Ctrl-ArrowUp",run:Vc,shift:Qc},{key:"ArrowDown",run:Wf,shift:Qf,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Yc,shift:Xc},{mac:"Ctrl-ArrowDown",run:Ml,shift:qc},{key:"PageUp",run:Vc,shift:Qc},{key:"PageDown",run:Ml,shift:qc},{key:"Home",run:$F,shift:uR,preventDefault:!0},{key:"Mod-Home",run:Uc,shift:$c},{key:"End",run:YF,shift:lR,preventDefault:!0},{key:"Mod-End",run:Yc,shift:Xc},{key:"Enter",run:Kc,shift:Kc},{key:"Mod-a",run:gR},{key:"Backspace",run:Zl,shift:Zl,preventDefault:!0},{key:"Delete",run:$f,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Kf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:yR,preventDefault:!0},{mac:"Mod-Backspace",run:zR,preventDefault:!0},{mac:"Mod-Delete",run:IR,preventDefault:!0}].concat(DR.map(i=>({mac:i.key,run:i.run,shift:i.shift}))),LR=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:qF,shift:rR},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:UF,shift:oR},{key:"Alt-ArrowUp",run:TR},{key:"Shift-Alt-ArrowUp",run:_R},{key:"Alt-ArrowDown",run:jR},{key:"Shift-Alt-ArrowDown",run:CR},{key:"Mod-Alt-ArrowUp",run:xR},{key:"Mod-Alt-ArrowDown",run:bR},{key:"Escape",run:vR},{key:"Mod-Enter",run:OR},{key:"Alt-l",mac:"Ctrl-l",run:pR},{key:"Mod-i",run:fR,preventDefault:!0},{key:"Mod-[",run:a2},{key:"Mod-]",run:i2},{key:"Mod-Alt-\\",run:MR},{key:"Shift-Mod-k",run:AR},{key:"Shift-Mod-\\",run:iR},{key:"Mod-/",run:WF},{key:"Alt-A",mac:"Ctrl-A",run:NF},{key:"Ctrl-m",mac:"Shift-Alt-m",run:ZR}].concat(BR),WR={key:"Tab",run:i2,shift:a2};var ed={};class Js{constructor(e,t,n,a,s,r,o,l,u,m=0,c){this.p=e,this.stack=t,this.state=n,this.reducePos=a,this.pos=s,this.score=r,this.buffer=o,this.bufferBase=l,this.curContext=u,this.lookAhead=m,this.parent=c}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,n=0){let a=e.parser.context;return new Js(e,[],t,n,n,0,[],0,a?new td(a,a.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let n=e>>19,a=e&65535,{parser:s}=this.p,r=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[a])===null||t===void 0)&&t.isAnonymous)&&(u==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=m):this.p.lastBigReductionSizel;)this.stack.pop();this.reduceContext(a,u)}storeNode(e,t,n,a=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[r-4]==0&&this.buffer[r-1]>-1){if(t==n)return;if(this.buffer[r-2]>=t){this.buffer[r-2]=n;return}}}if(!s||this.pos==n)this.buffer.push(e,t,n,a);else{let r=this.buffer.length;if(r>0&&(this.buffer[r-4]!=0||this.buffer[r-1]<0)){let o=!1;for(let l=r;l>0&&this.buffer[l-2]>n;l-=4)if(this.buffer[l-1]>=0){o=!0;break}if(o)for(;r>0&&this.buffer[r-2]>n;)this.buffer[r]=this.buffer[r-4],this.buffer[r+1]=this.buffer[r-3],this.buffer[r+2]=this.buffer[r-2],this.buffer[r+3]=this.buffer[r-1],r-=4,a>4&&(a-=4)}this.buffer[r]=e,this.buffer[r+1]=t,this.buffer[r+2]=n,this.buffer[r+3]=a}}shift(e,t,n,a){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let s=e,{parser:r}=this.p;this.pos=a;let o=r.stateFlag(s,1);!o&&(a>n||t<=r.maxNode)&&(this.reducePos=a),this.pushState(s,o?n:Math.min(n,this.reducePos)),this.shiftContext(t,n),t<=r.maxNode&&this.buffer.push(t,n,a,4)}else this.pos=a,this.shiftContext(t,n),t<=this.p.parser.maxNode&&this.buffer.push(t,n,a,4)}apply(e,t,n,a){e&65536?this.reduce(e):this.shift(e,t,n,a)}useNode(e,t,n){let a=this.p.reused.length-1;(a<0||this.p.reused[a]!=e)&&(this.p.reused.push(e),a++);let s=this.reducePos=this.pos=n+e.length;this.pushState(t,n),this.buffer.push(a,n,s,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let n=e.buffer.slice(t),a=e.bufferBase+t;for(;e&&a==e.bufferBase;)e=e.parent;return new Js(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,n,a,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new ER(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if((n&65536)==0)return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let a=[];for(let s=0,r;sl&1&&o==r)||a.push(t[s],r)}t=a}let n=[];for(let a=0;a>19,a=t&65535,s=this.stack.length-n*3;if(s<0||e.getGoto(this.stack[s],a,!1)<0){let r=this.findForcedReduction();if(r==null)return!1;t=r}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],n=(a,s)=>{if(!t.includes(a))return t.push(a),e.allActions(a,r=>{if(!(r&393216))if(r&65536){let o=(r>>19)-s;if(o>1){let l=r&65535,u=this.stack.length-o*3;if(u>=0&&e.getGoto(this.stack[u],l,!1)>=0)return o<<19|65536|l}}else{let o=n(r,s+1);if(o!=null)return o}})};return n(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(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class td{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class ER{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let a=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=a}}class Fs{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Fs(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Fs(this.stack,this.pos,this.index)}}function La(i,e=Uint16Array){if(typeof i!="string")return i;let t=null;for(let n=0,a=0;n=92&&r--,r>=34&&r--;let l=r-32;if(l>=46&&(l-=46,o=!0),s+=l,o)break;s*=46}t?t[a++]=s:t=new e(s)}return t}class ts{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const nd=new ts;class NR{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=nd,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,a=this.rangeIndex,s=this.pos+e;for(;sn.to:s>=n.to;){if(a==this.ranges.length-1)return null;let r=this.ranges[++a];s+=r.from-n.to,n=r}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,a;if(t>=0&&t=this.chunk2Pos&&no.to&&(this.chunk2=this.chunk2.slice(0,o.to-n)),a=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),a}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,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(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,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(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=nd,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n="";for(let a of this.ranges){if(a.from>=t)break;a.to>e&&(n+=this.input.read(Math.max(a.from,e),Math.min(a.to,t)))}return n}}class P1{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;JR(this.data,e,t,this.id,n.data,n.tokenPrecTable)}}P1.prototype.contextual=P1.prototype.fallback=P1.prototype.extend=!1;P1.prototype.fallback=P1.prototype.extend=!1;function JR(i,e,t,n,a,s){let r=0,o=1<0){let g=i[h];if(l.allows(g)&&(e.token.value==-1||e.token.value==g||FR(g,e.token.value,a,s))){e.acceptToken(g);break}}let m=e.next,c=0,d=i[r+2];if(e.next<0&&d>c&&i[u+d*3-3]==65535){r=i[u+d*3-1];continue e}for(;c>1,g=u+h+(h<<1),f=i[g],x=i[g+1]||65536;if(m=x)c=h+1;else{r=i[g+2],e.advance();continue e}}break}}function id(i,e,t){for(let n=e,a;(a=i[n])!=65535;n++)if(a==t)return n-e;return-1}function FR(i,e,t,n){let a=id(t,n,e);return a<0||id(t,n,i)e)&&!n.type.isError)return t<0?Math.max(0,Math.min(n.to-1,e-25)):Math.min(i.length,Math.max(n.from+1,e+25));if(t<0?n.prevSibling():n.nextSibling())break;if(!n.parent())return t<0?0:i.length}}class RR{constructor(e,t){this.fragments=e,this.minRepeat=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.lastRepeat=null,this.lastRepeatPos=-1,this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?ad(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?ad(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=r,null;if(s instanceof Le){let o=r>this.lastRepeatPos&&s.type.id>=this.minRepeat;if(r==e||o){let l=r+s.length,u;if(r>=this.safeFrom&&l<=this.safeTo&&(!(u=s.prop(ae.lookAhead))||l+u=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(r),this.index.push(0))}else this.index[t]++,this.nextStart=r+s.length}}}class GR{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(n=>new ts)}getActions(e){let t=0,n=null,{parser:a}=e.p,{tokenizers:s}=a,r=a.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,l=0;for(let u=0;uc.end+25&&(l=Math.max(c.lookAhead,l)),c.value!=0)){let d=t;if(c.extended>-1&&(t=this.addActions(e,c.extended,c.end,t)),t=this.addActions(e,c.value,c.end,t),!m.extend&&(n=c,t>d))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!n&&e.pos==this.stream.end&&(n=new ts,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new ts,{pos:n,p:a}=e;return t.start=n,t.end=Math.min(n+1,a.stream.end),t.value=n==a.stream.end?a.parser.eofTerm:0,t}updateCachedToken(e,t,n){let a=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(a,e),n),e.value>-1){let{parser:s}=n.p;for(let r=0;r=0&&n.p.parser.dialect.allows(o>>1)){(o&1)==0?e.value=o>>1:e.extended=o>>1;break}}}else e.value=0,e.end=this.stream.clipPos(a+1)}putAction(e,t,n,a){for(let s=0;se.bufferLength*4?new RR(n,e.minRepeatTerm):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],a,s;if(this.bigReductionCount>300&&e.length==1){let[r]=e;for(;r.forceReduce()&&r.stack.length&&r.stack[r.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let r=0;rt)n.push(o);else{if(this.advanceStack(o,n,e))continue;{a||(a=[],s=[]),a.push(o);let l=this.tokens.getMainToken(o);s.push(l.value,l.end)}}break}}if(!n.length){let r=a&&QR(a);if(r)return xt&&console.log("Finish with "+this.stackID(r)),this.stackToTree(r);if(this.parser.strict)throw xt&&a&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&a){let r=this.stoppedAt!=null&&a[0].pos>this.stoppedAt?a[0]:this.runRecovery(a,s,n);if(r)return xt&&console.log("Force-finish "+this.stackID(r)),this.stackToTree(r.forceAll())}if(this.recovering){let r=this.recovering==1?1:this.recovering*3;if(n.length>r)for(n.sort((o,l)=>l.score-o.score);n.length>r;)n.pop();n.some(o=>o.reducePos>t)&&this.recovering--}else if(n.length>1){e:for(let r=0;r500&&u.buffer.length>500)if((o.score-u.score||o.buffer.length-u.buffer.length)>0)n.splice(l--,1);else{n.splice(r--,1);continue e}}}n.length>12&&(n.sort((r,o)=>o.score-r.score),n.splice(12,n.length-12))}this.minStackPos=n[0].pos;for(let r=1;r-1&&n.length&&(!s||(n.prop(ae.contextHash)||0)==r))return e.useNode(n,o,t),n;if(n.children.length==0||n.positions[0]>0)break;let l=n.children[0];if(l instanceof Le&&(!a||l.type.id>=this.parser.minRepeatTerm))n=l;else break}return null}advanceStack(e,t,n){let a=e.pos,{parser:s}=this,r=xt?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&a>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let u=e.reducePos0)return e.reduce(o),xt&&console.log(r+this.stackID(e)+` (via always-reduce ${s.getName(o&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let u=0;ua?t.push(g):n.push(g)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return sd(e,t),!0}}runRecovery(e,t,n){let a=null,s=!1;for(let r=0;r ":"";if(o.deadEnd&&(s||(s=!0,o.restart(),xt&&console.log(m+this.stackID(o)+" (restarted)"),this.advanceFully(o,n))))continue;let c=o.split(),d=m;for(let h=0;h<10&&c.forceReduce()&&(xt&&console.log(d+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,n));h++)xt&&(d=this.stackID(c)+" -> ");for(let h of o.recoverByInsert(l))xt&&console.log(m+this.stackID(h)+" (via recover-insert)"),this.advanceFully(h,n);this.stream.end>o.pos?(u==o.pos&&(u++,l=0),o.recoverByDelete(l,u),xt&&console.log(m+this.stackID(o)+` (via recover-delete ${this.parser.getName(l)})`),sd(o,n)):(!a||a.scoree.topRules[o][1]),a=[];for(let o=0;o=0)s(m,l,o[u++]);else{let c=o[u+-m];for(let d=-m;d>0;d--)s(o[u++],l,c);u++}}}this.nodeSet=new D0(t.map((o,l)=>ft.define({name:l>=this.minRepeatTerm?void 0:o,id:l,props:a[l],top:n.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=rf;let r=La(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let o=0;otypeof o=="number"?new P1(r,o):o),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let a=new HR(this,e,t,n);for(let s of this.wrappers)a=s(a,e,t,n);return a}getGoto(e,t,n=!1){let a=this.goto;if(t>=a[0])return-1;for(let s=a[t+1];;){let r=a[s++],o=r&1,l=a[s++];if(o&&n)return l;for(let u=s+(r>>1);s0}validAction(e,t){return!!this.allActions(e,n=>n==t?!0:null)}allActions(e,t){let n=this.stateSlot(e,4),a=n?t(n):void 0;for(let s=this.stateSlot(e,1);a==null;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=dn(this.data,s+2);else break;a=t(dn(this.data,s+1))}return a}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=dn(this.data,n+2);else break;if((this.data[n+2]&1)==0){let a=this.data[n+1];t.some((s,r)=>r&1&&s==a)||t.push(this.data[n],a)}}return t}configure(e){let t=Object.assign(Object.create(Rs.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let n=this.topRules[e.top];if(!n)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=n}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(n=>{let a=e.tokenizers.find(s=>s.from==n);return a?a.to:n})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((n,a)=>{let s=e.specializers.find(o=>o.from==n.external);if(!s)return n;let r=Object.assign(Object.assign({},n),{external:s.to});return t.specializers[a]=rd(r),r})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let s of e.split(" ")){let r=t.indexOf(s);r>=0&&(n[r]=!0)}let a=null;for(let s=0;sn)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scorei.external(t,n)<<1|e}return i.get}const qR=cf({null:W.null,instanceof:W.operatorKeyword,this:W.self,"new super assert open to with void":W.keyword,"class interface extends implements enum var":W.definitionKeyword,"module package import":W.moduleKeyword,"switch while for if else case default do break continue return try catch finally throw":W.controlKeyword,"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws":W.modifier,IntegerLiteral:W.integer,FloatingPointLiteral:W.float,"StringLiteral TextBlock":W.string,CharacterLiteral:W.character,LineComment:W.lineComment,BlockComment:W.blockComment,BooleanLiteral:W.bool,PrimitiveType:W.standard(W.typeName),TypeName:W.typeName,Identifier:W.variableName,"MethodName/Identifier":W.function(W.variableName),Definition:W.definition(W.variableName),ArithOp:W.arithmeticOperator,LogicOp:W.logicOperator,BitOp:W.bitwiseOperator,CompareOp:W.compareOperator,AssignOp:W.definitionOperator,UpdateOp:W.updateOperator,Asterisk:W.punctuation,Label:W.labelName,"( )":W.paren,"[ ]":W.squareBracket,"{ }":W.brace,".":W.derefOperator,", ;":W.separator}),UR={__proto__:null,void:34,byte:36,short:36,int:36,long:36,char:36,float:36,double:36,boolean:36,extends:50,super:52,this:64,public:70,protected:72,private:74,abstract:76,static:78,final:80,strictfp:82,default:84,synchronized:86,native:88,transient:90,volatile:92,sealed:95,non:97,instanceof:140,true:158,false:158,null:166,class:170,new:176,throws:196,implements:204,permits:211,record:215,interface:226,enum:236,open:289,module:291,requires:296,transitive:298,exports:300,to:302,opens:304,uses:306,provides:308,with:310,package:314,import:318,if:330,else:332,while:336,for:340,var:347,assert:354,switch:358,case:366,throw:370,do:374,break:378,continue:382,return:386,try:392,catch:396,finally:404},YR=Rs.deserialize({version:14,states:"#5QQ]QPOOQ%QQPOOO(wQQO'#HlO+OQQO'#CbOOQO'#Cb'#CbO+VQPO'#CaOOQO'#Co'#CoO,{QPO'#DOO-iQQO'#HvOOQO'#Hv'#HvO0^QQO'#HqO0eQQO'#HqOOQO'#Hq'#HqOOQO'#Hp'#HpOOQO'#Hz'#HzO0lQPO'#GwO2`QPO'#DOO2gQPO'#CkO4vQPO'#DfO4}QPO'#CiO6ZQQO'#FsO6bQPO'#DyO7rOSO'#EQOOQO'#IW'#IWO+VQPO'#EzO8iQPO'#EzOOQO'#EV'#EVO:QQQO'#ITOnQPO'#HzO>uQPO'#EcO>uQPO'#EjO>uQPO'#EuO>uQPO'#EpO>}QPO'#I[O?cQQO'#FRO+VQPO'#C`O?kQPO'#C`O+VQPO'#FnO?pQPO'#FpO@OQPO'#FvO@OQPO'#FyO>uQPO'#GOO@TQPO'#F{O6bQPO'#GSO6bQPO'#G[O@OQPO'#GUO]QPO'#G^O@YQPO'#G`O@eQPO'#GbO@pQPO'#GdO@wQPO'#GgOAeQQO'#CjOBTQQO'#CjOB_QPO'#I`OCzQPO'#DOODbQPO'#E]OBbQPO'#E^OESQPO'#I`OEeQPO'#E]OEmQPO'#IhOErQPO'#FOOOQO'#I^'#I^OOQO'#G}'#G}Q%QQPOOOGhQPO'#HzOOQO'#Hl'#HlOHZQQO,58{OOQO'#Hj'#HjOOQO'#Hr'#HrOJtQPO,59_OLSQPO,59jOOQO-E:r-E:rO+VQPO,58zOLyQPO,58zO+VQPO,5uQPO,5:}O>uQPO,5;UO>uQPO,5;aO>uQPO,5;[O>uQPO,5gO6bQPO'#EUO@zQPO,5=QO!0rQPO,5:}O!1TQPO,5;UO!1]QPO,5;aO!1eQPO,5;[O!-SQPO,5>vO!1sQPO,5>vO!-SQPO,5>vO!2OQPO,5;mO!2aQQO,58zO!2iQQO,5zOB_QPO,5:vO!;WQPO,5:wOErQPO,5;jO!;`QPO'#E_OBbQPO'#E_O!;kQPO'#IaO!;sQPO,5:xOB_QPO,5>zO!-SQPO,5>zOEmQPO,5?SOOQO,5:w,5:wO!+VQPO'#CkOOQO,5?S,5?SO!?pQPO'#FPOOQO,5;j,5;jO!?wQPO,5;jO!-SQPO'#EaOOQO-E:{-E:{OOQO,5;i,5;iO+VQPO,58}O!?|QPO'#ChOOQO1G.k1G.kO!2aQQO1G.fO+VQPO1G.fO!@WQQO1G1tOOQO,59f,59fO!@`QPO,59fOOQO-E:t-E:tO!@eQPO,5>iO!@|QPO,59zO>uQPO'#HOO!ATQPO,5>yOOQO1G2U1G2UOOQO1G0Y1G0YO!AnQPO'#CsO!B^QPO'#HvO!BkQPO'#CtO!ByQPO'#HuO!CRQPO,59^OOQO1G.v1G.vO!#aQPO1G.vO!CiQPO,59_O!CvQQO'#HlO!DXQQO'#CbO!DjQPO,59yOOQO,59i,59iO>uQPO,59yOOQO,59W,59WO!DuQQO,59WO!DzQPO,59iO!,oQPO'#GyO!E]QPO,5>eOOQO1G.q1G.qO!EeQPO'#C}O!EvQPO1G.qO>uQPO'#GzO!E{QPO,5>mOOQO1G/k1G/kOOQO1G0[1G0[O!-SQPO'#HPO!FTQPO1G1cO6bQPO1G1cOOQO1G/l1G/lO!F]QQO1G.oOOQO1G.o1G.oO!HZQQO1G/mO!IxQQO1G/mO!KgQQO1G/mO!KnQQO1G/mO!KuQQO1G/mO!MdQQO1G/mO!MkQQO1G/mO# YQQO1G/mO# aQQO1G/mO# kQQO1G/mO# rQQO1G/|O!)dQPO'#DOO# yQQO'#HvO!*jQPO'#DuOOQO1G/y1G/yO##`QQO1G1dOOOO-E:y-E:yOOQO1G0W1G0WO##vQPO'#E{OOQO1G1Q1G1QO#$jQPO1G2UO!-{QPO1G1QO!0rQPO1G0iO!1TQPO1G0pO!1]QPO1G0{O!1eQPO1G0vOOQO1G0]1G0]O#$oQQO1G1XO}QPO'#I[OOQO1G1X1G1XO#&iQQO1G1XO#&qQQO1G1YOOQO1G1]1G1]O#&xQPO1G1]O#'TQQO'#I]O#'bQPO,5:sOOQO1G1z1G1zOOQO1G4R1G4ROOQO1G2l1G2lO#'gQPO'#EYO!-SQPO'#EdO!-SQPO'#EeO!-SQPO'#EhOOQO1G0i1G0iO#'nQPO1G0iO#'sQPO1G0iO#'{QPO1G0iO#(WQPO1G0iO#(fQPO'#ElO#(|QPO1G0pO#)UQPO1G0pO#)ZQPO'#EwOOQO1G0{1G0{O#)nQPO1G0{O#)sQPO'#EsO!-SQPO'#ErOOQO1G0v1G0vO#*pQPO1G0vO#*uQPO1G0vO#*}QPO1G0vO!1sQPO1G4bO#+YQPO'#FXO#+aQPO'#FXOOQO'#HX'#HXO#+iQQO1G1^O#-fQQO1G4bO!-SQPO1G4bO|OOQO1G0b1G0bOOQO1G4f1G4fO#DXQPO1G0bOOQO1G0c1G0cOOQO1G1U1G1UO!?wQPO1G1UOOQO,5:y,5:yO!-SQPO'#E`O#D^QPO,5:yOBbQPO'#HQO#DiQPO,5>{OOQO1G0d1G0dOEmQPO'#IbO#DqQPO1G4fOB_QPO1G4fOOQO1G4n1G4nO!)tQPO'#C}O!)dQPO'#DOOOQO,5;k,5;kO#D|QPO,5;kO#ETQPO,5;kO#E[QQO'#ITO#EcQQO'#IVO#EjQQO'#FQO#EuQPO'#FQO#E}QPO'#IcOOQO,5:{,5:{OOQO1G.i1G.iO#F]QQO'#HnO#FmQQO'#FUO#HTQPO'#F`OOQO'#Hn'#HnO#H_QPO'#HnO#H|QPO'#IkO#IUQPO,59SOOQO7+$Q7+$QO!2aQQO7+$QOOQO7+'`7+'`OOQO1G/Q1G/QO#IZQPO'#DdO#IeQQO'#IPOOQO'#IP'#IPOOQO1G/f1G/fOOQO,5=j,5=jOOQO-E:|-E:|O#IuQWO,58{O#I|QPO,59`OOQO,59`,59`O!-SQPO'#HxO!!tQPO'#GuO#J[QPO,5>aOOQO1G.x1G.xOOQO7+$b7+$bOOQO1G.r1G.rO#JdQQO1G.rO>uQPO1G/eOOQO1G/e1G/eO#JiQPO1G.rO#JnQPO1G/eOOQO1G/T1G/TOOQO,5=e,5=eOOQO-E:w-E:wOOQO7+$]7+$]OOQO,5=f,5=fOOQO-E:x-E:xOOQO,5=k,5=kOOQO-E:}-E:}O6bQPO7+&}O#JyQQO7+&}O6bQPO7+%hO#LgQQO,59_OOQO,5:a,5:aOB_QPO,5:aO#MvQPO'#EtO#NUQPO'#EtOOQO'#HW'#HWO#NpQPO,5;gOOQO,5;g,5;gOOQO7+'p7+'pOOQO7+&l7+&lOOQO7+&T7+&TO#'nQPO7+&TO#'sQPO7+&TO#'{QPO7+&TO#(WQPO7+&TO#(|QPO7+&[O#)UQPO7+&[OOQO7+&g7+&gO#)nQPO7+&gOOQO7+&b7+&bO#*pQPO7+&bO#*uQPO7+&bO#*}QPO7+&bOOQO7+&u7+&uOOQO'#FU'#FUOvOvO$ dQPO7+&sO$ rQPO7+&wOOQO7+&t7+&tOOQO7+&w7+&wO6bQPO'#G|O$!QQPO,5>wOOQO1G0_1G0_O$!]QPO,5:tOOQO,5:t,5:tOOQO,5;O,5;OOOQO'#Eg'#EgOOQO,5;P,5;POOQO,5;S,5;SO$!dQPO'#EmO!*jQPO'#EmO$!uQPO'#IdO$!}QPO,5;WO$#SQPO'#EnOOQO7+&[7+&[O$#ZQPO7+&[O$#`QPO'#ExO>uQPO'#ExO$#qQPO'#IfO$#|QPO,5;cOB_QPO'#I`O!-SQPO'#I`O$$UQPO'#E]OOQO'#HU'#HUO$$]QPO,5;_OOQO,5;_,5;_OOQO,5;^,5;^O$%YQQO7+&xO$'VQQO7+)|O$)PQQO,5;sOOQO,5;s,5;sO$)WQPO,5;sOOQO-E;V-E;VOOQO7+&x7+&xOOQO7+)|7+)|O}O$4VQPO,5;{O$4^QPO'#IjO$4fQPO,5;zO+VQPO'#HZO$4kQPO,5?VOOQO1G.n1G.nOOQO<d,5>dOOQO,5=a,5=aOOQO-E:s-E:sO$5QQPO7+$^OOQO7+%P7+%POOQO7+$^7+$^O>uQPO7+%PO$5VQQO<uQPO,5;XOOQO,5;X,5;XO$;zQPO,5;XO!,oQPO'#HSO$<]QPO,5?OOOQO1G0r1G0rODbQPO'#E]O$WQPO'#EyOOQO1G0}1G0}O$>_QPO1G0}OB_QPO,5;`OOQO-E;S-E;SOOQO1G0y1G0yOOQO<dQQO1G1_O$>kQQO<uQPO,5=VO!*jQPO,5=VOOQO1G2o1G2oOOQO<lOOQO1G/j1G/jOOQO<uQPO1G0sOOQO1G0s1G0sO$HSQPO1G0sOOQO,5=n,5=nOOQO-E;Q-E;QO$uQPO1G2qOOQO<uQPO7+&_OOQO1G0u1G0uOOQO7+&j7+&jOOQO7+'V7+'VO+VQPO'#H^O$JtQPO,5?XO$J|QPO7+'VO$KRQQO'#InOOQOAN@yAN@yO$K^QQOAN@yOOQOAN@uAN@uO$KeQPOAN@uO$KjQQO<`!>cP!=^!>{!=^P!=^P!?O!?R!?VP!{#?U#?XP0oP#?]!)]PPP#Ae#Cm#C|#DY#Dr#ET#EW#Ed#El#Eo#EsP#EvP#FU#FX#F[#F`#Ff#FiwuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u)usOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%q%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h)r){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-[-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u/}0T0j0u1S1V1Z1]1^1j2Q2R2X2Z2[2e2i2k2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n$xlOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nv!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rQ$ShS&_#`)dQ'V$UU']$[$n-VQ'd$^W(w%U,n/i1]U)o%p(^,]Q)q%qS*[&W-RU+U'_.W/vQ+]'eQ-s*oQ.T+YQ.X+ZQ0Q-_Q0]-tR0g.Yw!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rT%r!s*R${rOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n$OcObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3n^!lP!h!p'k+a.p0u|#RW!Y#`$T$Z%{&]&`&d(d(u)d*]*o+g,`,m-l-t.a/n1aS#ea3mQ$g|Q$h}Q$i!OQ$j!PW%Y!f%]+r.sS%`!i)]Q%f!jQ'W$VQ'X$WQ'Y$XQ'Z$YQ)[%aS)`%d)bQ*e&fQ*m&|S+n'w.nQ-o*nS.f+k.iQ.m+oQ0i._Q0m.eQ1r0hQ2^1sw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nU%i!l.f0mS)R%Y)`Q)c%fw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3iV#da%h3m'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ&U#YQ*Y&VX/k,s/o1^2R'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/k,s/o1^2R'fZOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/l,s/o1^2RS#XY/kS$m!Q'`S'_$[$nQ'e$^S)l%j)hQ.W+YQ.Y+ZR/v-V%mXOabepy![!]!_!b#W#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|$]$_$b$e$t$u$v$w$x%U%j%m%q%z&j&l'l'm'n'{(R(f(k(m)Z)g)h)r){*U*V*i*k+^+},^,b,c,g,j,n-T-U-Y-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ&S#WR-g*V'c]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n!w#PW!f!v#Q#R#`$O$T%X%Y%]%d%y&Q&W&`&d&|(d(u)R)b)d*l*n*o+g+r,`,m,x-R-t.a.s/m1j2Q2X2[2e2kW#ba#d%h3mR*b&aviOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u[!hP!p'k+a.p0uY#aa#d%h&a3mQ&}#{Q(e$vW(y%U,n/i1]S*p'S*rS+h't.bS+o'w.nS+t'z+vS.e+k.iR/o,sh#TW!Y!f$T$Z%](d*o+r,`-t.sQ*P%{Q*^&]Q-j*]R0X-lU)}%z){0TQ,P(UR.v+y$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3ivwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uQ%V!cQ%g!kQ%o!qS&o#k2wQ'j$fQ)Q%WQ)V%^Q,u)OQ/p,tQ0n.fQ1W/^R1t0m${qOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n!^#od#g$y$z%S&n&p&r&s&t&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lg2y/b3U3V3X3Y3Z3[3]3a3e3f!Y#rd#g$y$z%S&n&r&s&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lc2|/b3U3X3Y3[3]3a3e3fR'O#{%TgOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%ToOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%SoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ$f{Q$t!WQ$u!XQ${!^R,k(oQ$`mS(V$l+XQ+T'^S+z(Q(XS-W)j)kQ.S+VQ.l+nQ.z,RQ/y-XQ0e.VQ0r.mQ1d/wQ1q0fR2V1cQ'o$gY*v'W'p'q'r'sQ,Q(VW-w*w*x*y*zQ.k+nQ.w+zU0^-x-y-zS0q.l.mQ0x.zS1m0_0`Q1u0rR2]1na!nP!p'k+a+k.i.p0u`!nP!p'k+a+k.i.p0uT+u'z+vd!jP!h!p'k+a+k.e.i.p0uQ's$gQ'v$hQ(P$jQ*z'WQ*|'XQ+S'ZV+s'z+t+vQ%b!iR,})]Q)Y%`R,|)[Q%l!mQ)T%[Q)X%_Q-P)aR/s-QvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uS*q'S*rT+u'z+vQ'r$gS*y'W'sR-z*zQ'q$gQ'y$iU*x'W'r'sQ+O'YQ+m'uS-y*y*zQ-|*{Q0`-zR0b-}Q+e'mQ+f'nR+x'{Q'p$gQ'}$jW*w'W'q'r'sU+Q'Z(O(PU-x*x*y*zS.Q+R+SS0_-y-zQ0d.RR1n0`Q'u$hS*{'X'vR-}*|Q+i'tR0k.bQ+l'uS-{*{+mS0a-|-}R1o0bT.g+k.iQ(O$jS+R'Z(PR.R+SQ'|$jW+P'Z'}(O(PU.P+Q+R+SS0c.Q.RR1p0dvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uT+u'z+vQ'x$iS*}'Y'yR.O+OQ+p'wR0s.nR.r+qQ'T$SR*u'VT*q'S*rQ%k!mS)W%_%lR,z)XQ)g%jR-U)h$zoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nX(x%U,n/i1]%SmOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nU'^$[$n-VS+V'_/vQ.V+YR0f.WX(T$l(Q(U+y_)s%q)r-[/}2Z2i2nQ)u%qR0R-_Q([$oQ)w%sR-b)xT,S(Z,TvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR1W/^wwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uvvOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uQ%P!`R%R!aR$w!ZvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR(f$vR$x!ZR(n${T,f(m,gT,e(m,gX({%V(|)Q,vR,t(}Q/n,sR1a/oQ)P%VQ,r(|Q,w)QR/q,vR%W!cQ(z%UV/g,n/i1]QyOQ#jbY$cy#j)h-T/uQ)h%jQ-T)gR/u-UvVOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uv!gP!p#d&a'S'k't'w'z*r+a+k+v,s.b.i.n.p0u|!xV!g#O#Z#_#}$k%a%e&P&V&Z&{(S(W)e*`+W.^0j2R3`!f#OW!f!v#R$O$T%Y%]%d%y&Q&W&|(d(u)R)b*l*n*o+r,`,m,x-R-t.s/m1j2Q2X2[2e2kQ#Z_S#_a3m$`#}ep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%m%q%z&j&l'l'm'n'{(R(f(k)Z)r){*U*i*k+^+},b,c,j-Y-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$k!QS%a!i)]S%e!j+sS&P#W*VQ&V#YU&Z#`&d)dQ&{#{W(S$l(Q(U+yQ(W$mQ)e%hQ*`&`Q+W'`Q.^+gQ0j.aQ2R1^Z3`$v%U,n/i1]Q*W&SR-h*W^#QW#`$O&|(d(u*l!Q%X!f!v$T%]%d&Q&W&`&d)b)d*n*o+g+r,`,m-R-t.a.s/m2Q2e[%x#Q%X%y,x2X2kS%y#R%YQ,x)RQ2X1jR2k2[#Q`OPaby!_!p#d#j#{$b$t$u$v$w$x%U%h%j&a'S'k't'w'z(m)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3m[!wV!g#_&{)e3`T#[`!wQ0U-cR1i0UQ&b#bR*c&bQ&g#eR*f&gQ$QfR'Q$QQ+_'fS.[+_1XR1X/bQ!pPU%n!p+a0uQ+a'kR0u.pQ%|#TR*Q%|Q&k#hU*h&k/r3kQ/r,{R3k3jQ)^%bR-O)^Q-Z)mR/{-ZQ.c+iR0l.cQ.i+kR0o.iQ+v'zR.t+vQ.o+pR0t.oQ*r'SR-u*rQ(U$lQ+y(QT,O(U+yQ0O-]R1g0OQ-`)uR0S-`Q,T(ZR.{,TQ/P,VR0{/PQ1x0|S2`1x2bR2b1zQ,g(mR/`,gQ(|%VS,q(|,vR,v)QQ1_/mR2S1_Q,o(zR/j,odxOby#j%j)g)h-T-U/uQ$|!_Q'h$bQ(b$tQ(c$uQ(h$wQ(i$xS,f(m,gR/V,^)ftOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u0T0j0u1S1V1Z1]1^1j2Q2R2X2[2e2k2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n_)t%q)r-[/}2Z2i2nQ!sTQ$o!SQ$p!UQ$q!VQ%s!yQ%u!{Q(`$rQ(a$sQ)x%tQ*R2rS.},V,XQ/R,WQ/S,YQ0z/PS0|/R1OQ1z1PR2_1w&{SOTabehpy!S!U!V![!]!_!b!y!{#`#j#k#n#o#p#q#r#s#t#u#v#w#x#|$U$[$]$^$_$b$e$n$r$s$t$u$v$w$x%U%j%p%q%t%z&W&l'_'e(R(^(f(k(m)d)g)h)r){*i*k*o+Y+Z+^+},V,W,X,Y,],^,b,c,g,j,n-R-T-U-V-[-_-t.W.Y/P/R/W/Y/^/e/i/u/v/}0T1O1P1S1V1Z1]1w2Z2i2n2r2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ)v%qQ-])rQ/|-[Q1f/}Q2j2ZQ2l2iR2p2nxdOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/^/uU#ga$e3mS#ye3hS$ap3iQ$y![Q$z!]Q%S!bQ&n#kQ&p#nQ&q#oQ&r#pQ&s#qQ&t#rQ&u#sQ&v#tQ&w#uS&x#v3QQ&y#wQ&z#xQ'P#|Q'c$]Y'f$_$v,b/Y1V^)p%q)r-[/}2Z2i2nU)|%z){0TS*j&l3TQ+{(RQ,a(fQ,d(kS-m*i3bQ-n*kQ.Z+^Q.y+}Q/[,cQ/b,jQ1R/WQ1Y/eQ1|1SQ2P1ZQ3U2wQ3V2xQ3W2yQ3X2zQ3Y2{Q3Z2|Q3[2}Q3]3OQ3^3PQ3_3RQ3a3SQ3e3cQ3f3dR3l3nvWOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!fP!p'k+a+k.i.p0uW!vV#}&P3`S#`a3m#|$Oep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%q%z&l(R(f(k)r){*i*k+^+},b,c,j-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$TiS%]!h.eS%d!j+sf&Q#W%m&j'l'm'n'{)Z*U*V-YQ&W#_Q&`#aS&d#d&aQ&|#{Q(d$vW(u%U,n/i1]Q)b%eQ)d%hQ*l&{Q*n&}S*o'S*rS+g't.bS+r'z+vQ,`(eQ,m(yQ-R)eQ-t*pQ.a+hQ.s+tS/m,s/oQ2Q1^R2e2R'b]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ$l!QQ(Q$kS(X$m+WQ+X'`R,R(W'sUOPVabeipy!Q![!]!_!b!h!j!p#W#Y#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&V&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nR&T#W%OnObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ#haQ&S#WQ'O#{W)m%m'm'n'{Q*g&jQ+c'lQ,{)ZQ-f*UQ-g*VQ/z-YR3j3mQ*T&RR-e*SU#ca%h3mR&e#d#c_OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3m#c^OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3ml#SW!Y!f$T$Z%]%{&]*]*o+r-l-t.sU&[#`&d)dQ*a&`Q,_(dQ,l(uQ.`+gQ/X,`Q/f,mQ0i.aQ1`/nR2U1aQ*O%zQ-c){R1h0TR-d){T#fa3m$vkOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%q%z&l(R(f(k(m)g)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nW(v%U,n/i1]T)i%j)h%SjOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nT'[$[-VQ'g$_Q(g$vQ/Z,bQ1T/YR2O1V[!oP!p'k+a.p0uT.g+k.iU#UW!Y(dQ%Z!fU'U$T$Z,`Q)U%]S-r*o+rT0[-t.sd!kP!p'k'z+a+k+v.i.p0uV%^!h+t.eR%c!iW%[!f%]+r.sQ)a%dR-Q)bQ)n%mV+d'm'n'{R+j'tT.h+k.iR+q'w`!mP!p'k+a+k.i.p0uT%_!h.eR-^)rR)v%qT/O,V/PQ0}/RR1y1OR1y1PR/c,j",nodeNames:"⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList LambdaExpression Definition FormalParameters ReceiverParameter void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ this FormalParameter Modifiers public protected private abstract static final strictfp default synchronized native transient volatile sealed non SpreadParameter VariableDeclarator AssignOp } { ArrayInitializer InferredParameters Block BinaryExpression CompareOp CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp BitOp InstanceofExpression instanceof TypePattern TernaryExpression LogicOp : UpdateExpression UpdateOp IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral class ParenthesizedExpression ObjectCreationExpression new ArgumentList ClassBody ; FieldDeclaration MethodDeclaration TypeParameters TypeParameter TypeBound Throws throws ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList Permits permits RecordDeclaration record RecordHeader RecordComponent RecordBody CompactConstructorDeclaration InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation FieldAccess ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension UnaryExpression LogicOp BitOp CastExpression AssignmentExpression AssignOp ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchRule SwitchLabel case ThrowStatement throw DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent",maxTerm:296,nodeProps:[["isolate",-4,1,2,80,81,""],["group",-27,4,56,91,99,106,112,117,122,156,158,161,162,164,167,169,172,174,176,178,184,186,188,190,192,194,195,203,"Statement",-25,6,13,32,57,69,72,75,77,78,79,80,81,82,83,84,86,87,129,130,131,133,134,136,139,140,"Expression",-7,17,18,19,20,21,23,28,"Type"],["openedBy",10,"(",52,"{"],["closedBy",11,")",53,"}"]],propSources:[qR],skippedNodes:[0,1,2],repeatNodeCount:30,tokenData:"#$g_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu2zuv4avw5qwx7Xxy?pyz@^z{@z{|Ap|}CW}!OCt!O!PEa!P!QNZ!Q!R!+P!R![!.k![!]!;T!]!^!osw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}P>rVOY>oZw>owx?Xx#O>o#P;'S>o;'S;=`?^<%lO>oP?^O!rPP?aP;=`<%l>oT?gP;=`<%l<}T?mP;=`<%l8P_?wVZZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV@eVYR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVATX$fP&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVAwZ!dR&}SOY%QYZ%lZr%Qrs%qs{%Q{|Bj|!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVBqV!nR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVC_VkR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_C}[&pW!dR&}SOY%QYZ%lZr%Qrs%qs}%Q}!OBj!O!_%Q!_!`5T!`!aDs!a;'S%Q;'S;=`&s<%lO%QVDzV&vR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_EhZWY&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PFZ!P!Q%Q!Q![Gi![;'S%Q;'S;=`&s<%lO%QVF`X&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PF{!P;'S%Q;'S;=`&s<%lO%QVGSV&rR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTGpc&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#R%Q#R#SMc#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTISV&}S!pPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIn]&}SOY%QYZ%lZr%Qrs%qs{%Q{|Jg|}%Q}!OJg!O!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTJlX&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTK`c&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![!f%Q!f!gH{!g!h%Q!h!iH{!i#R%Q#R#SLk#S#W%Q#W#XH{#X#Y%Q#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTLpZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![#R%Q#R#SLk#S;'S%Q;'S;=`&s<%lO%QTMhZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![#R%Q#R#SMc#S;'S%Q;'S;=`&s<%lO%Q_Nb]&}S!eQOY%QYZ%lZr%Qrs%qsz%Qz{! Z{!P%Q!P!Q!'|!Q!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%Q_! `X&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!!QT&}SOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!dTOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!vVOz!!az{!!s{!P!!a!P!Q!#]!Q;'S!!a;'S;=`!#b<%lO!!aZ!#bOQZZ!#eP;=`<%l!!a_!#kXOY!$WYZ! {Zr!$Wrs!&bsz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!$ZXOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!${Z&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!%uV&}SQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!&_P;=`<%l! Z_!&eXOY!$WYZ! {Zr!$Wrs!!asz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!'TZOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!'yP;=`<%l!$W_!(TV&}SPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!(oVPZOY!)UYZ%lZr!)Urs!)vs;'S!)U;'S;=`!*y<%lO!)U_!)ZVPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!)sP;=`<%l!'|_!){VPZOY!)UYZ%lZr!)Urs!*bs;'S!)U;'S;=`!*y<%lO!)UZ!*gSPZOY!*bZ;'S!*b;'S;=`!*s<%lO!*bZ!*vP;=`<%l!*b_!*|P;=`<%l!)UT!+Wq&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!d%Q!d!e!1u!e!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o!z%Q!z!{!3s!{#R%Q#R#S!0}#S#U%Q#U#V!1u#V#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a#l%Q#l#m!3s#m;'S%Q;'S;=`&s<%lO%QT!-fa&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QT!.ri&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o#R%Q#R#S!0}#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!0hV&}S!oPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!1SZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!.k![#R%Q#R#S!0}#S;'S%Q;'S;=`&s<%lO%QT!1zY&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S;'S%Q;'S;=`&s<%lO%QT!2q`&}S!oPOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S!n%Q!n!o!0a!o#R%Q#R#S!1u#S#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!3x_&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!P!4w!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QT!4|]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i#T%Q#T#Z!5u#Z;'S%Q;'S;=`&s<%lO%QT!5zc&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#R%Q#R#S!4w#S#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!7^i&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8{!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i!n%Q!n!o!0a!o!r%Q!r!sIi!s#R%Q#R#S!:V#S#T%Q#T#Z!7V#Z#`%Q#`#a!0a#a#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!9Qa&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!:[]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QV!;[X!lR&}SOY%QYZ%lZr%Qrs%qs![%Q![!]!;w!];'S%Q;'S;=`&s<%lO%QV!l!`;'S%Q;'S;=`&s<%lO%QU!>PX!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU!>sV!]Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?aX!TR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!@TY&gR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`!>l!`!a!@s!a;'S%Q;'S;=`&s<%lO%QU!@zY!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`!a!=x!a;'S%Q;'S;=`&s<%lO%Q_!AsV&kX!kQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!BaX&]Z&}SOY%QYZ%lZr%Qrs%qs#]%Q#]#^!B|#^;'S%Q;'S;=`&s<%lO%QV!CRX&}SOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Cn#c;'S%Q;'S;=`&s<%lO%QV!CsX&}SOY%QYZ%lZr%Qrs%qs#h%Q#h#i!D`#i;'S%Q;'S;=`&s<%lO%QV!DeX&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!EQ#Y;'S%Q;'S;=`&s<%lO%QV!EVX&}SOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Er#g;'S%Q;'S;=`&s<%lO%QV!EwX&}SOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Fd#Z;'S%Q;'S;=`&s<%lO%QV!FiX&}SOY%QYZ%lZr%Qrs%qs#T%Q#T#U!GU#U;'S%Q;'S;=`&s<%lO%QV!GZX&}SOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Gv#W;'S%Q;'S;=`&s<%lO%QV!G{X&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Hh#Y;'S%Q;'S;=`&s<%lO%QV!HoV'ZR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!I]b&aZ&}SOY%QYZ%lZr%Qrs%qst%Qtu!IUu!Q%Q!Q![!IU![!c%Q!c!}!IU!}#R%Q#R#S!IU#S#T%Q#T#o!IU#o$g%Q$g;'S!IU;'S;=`!Je<%lO!IU_!JhP;=`<%l!IU_!JrVoZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!K`VmR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!K|X!cQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QV!LpV!VR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!M`Z'dX!bQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`#p%Q#p#q!NR#q;'S%Q;'S;=`&s<%lO%QU!NYV!`Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!NvV!UR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT# dV$OP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!Su&}S&XZ&_ZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2z",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,206]},dynamicPrecedences:{21:1,246:-1,252:-1},specialized:[{term:245,get:i=>UR[i]||-1}],tokenPrec:9164}),$R=Bs.define({name:"java",parser:YR.configure({props:[pf.add({IfStatement:Kr({except:/^\s*({|else\b)/}),TryStatement:Kr({except:/^\s*({|catch|finally)\b/}),LabeledStatement:yJ,SwitchBlock:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:n?1:2)*i.unit},Block:vJ({closing:"}"}),BlockComment:()=>null,Statement:Kr({except:/^{/})}),IJ.add({"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer":kJ,BlockComment(i){return{from:i.from+2,to:i.to-2}}})]}),languageData:{commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\})$/}});function XR(){return new cJ($R)}const KR=" ";function eG(i,e){let t="",n=e;for(let a=0;a{var x,b;const o=s.trim(),l=a,{chars:u,comment:m}=eG(s,a);a=m;const c=l?0:((x=/^[}\])\s]*/.exec(o)[0].match(/[}\])]/g))==null?void 0:x.length)??0,d=n.slice(0,Math.max(0,n.length-c));nG.test(o)&&((b=d.at(-1))!=null&&b.inCase)&&(d.at(-1).inCase=!1);const h=tG(d);for(const v of u)"{[(".includes(v)?n.push({line:r,char:v}):n.pop();const g=n.at(-1);(g==null?void 0:g.line)===r&&g.char==="{"&&/^switch\b/.test(o)&&(g.char="switch"),(g==null?void 0:g.char)==="switch"&&iG.test(o)&&(g.inCase=!0);const f=r+1;return ft||l&&!o.startsWith("*")?s:o===""?"":KR.repeat(h)+(l?" ":"")+o}).join(` +`)}const aG=[">>>=","<<=",">>=","...","->","::","++","--","&&","||","==","!=","<=",">=","+=","-=","*=","/=","%=","&=","|=","^=","<<"],sG=new Set(["=","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>>=","->","&","|","^","<<"]),rG=new Set(["+","-","*","/","%"]),oG=new Set(["return","case","throw","new","else","do","yield","assert","instanceof"]),lG=new Set(["byte","short","int","long","float","double","char","boolean"]),uG=new Set(["if","for","while","switch","catch","synchronized","try"]),mG=new Set(["else","catch","finally"]);function cG(i){const e=[];let t=1,n=0;const a=(s,r)=>{e.push({kind:s,text:i.slice(n,r),from:n,to:r,line:t});for(let o=n;oi.startsWith(l,n));a(o?"op":"other",n+((o==null?void 0:o.length)??1))}}return e}function oG(i,e){var n,a;const t=i[e];return t?t.kind==="num"||t.kind==="str"?!0:t.kind==="word"?!nG.has(t.text):t.text==="]"?!0:t.text===")"?!(iG.has(((n=i[e-1])==null?void 0:n.text)??"")&&((a=i[e-2])==null?void 0:a.text)==="("):!1:!1}const id=i=>(i==null?void 0:i.kind)==="word"&&new RegExp("^\\p{Lu}","u").test(i.text);function lG(i,e=1,t=Number.MAX_SAFE_INTEGER){const n=rG(i),a=n.length,s=new Array(a).fill(!1),r=new Array(a).fill(!1),o=new Array(a).fill(-1),l=new Array(a).fill(!1),u=new Array(a).fill(!1),m=[{at:-1,block:!0,paren:0}];let c=0,d=0;n.forEach((g,f)=>{var v,w;const x=n[f-1],b=m.at(-1);if(g.kind!=="comment")if(g.text==="(")b.paren++;else if(g.text===")")b.paren=Math.max(0,b.paren-1);else if(g.text==="{"){const z=(x==null?void 0:x.text)??"",I=["=",",","]","("].includes(z)||z==="{"&&!r[f-1];r[f]=!I,l[f]=z==="do",m.push({at:f,block:!I,paren:0})}else if(g.text==="}")if(m.length>1){const z=m.pop();r[f]=z.block,o[f]=z.at,o[z.at]=f,l[f]=l[z.at]}else r[f]=!0;else if(g.text===";")u[f]=b.block&&b.paren===0,d=0;else if(g.text==="?"&&(x==null?void 0:x.text)!=="<"&&![")",";",",",void 0].includes((v=n[f+1])==null?void 0:v.text))s[f]=!0,d++;else if(g.text===":")s[f]=d>0||b.paren>0,d>0&&d--;else if(g.text==="<"){const z=n[f+1];(id(x)||(x==null?void 0:x.text)===".")&&(id(z)||(z==null?void 0:z.text)===">"||(z==null?void 0:z.text)==="?")?c++:s[f]=!((x==null?void 0:x.text)==="<"||(z==null?void 0:z.text)==="<")}else g.text===">"?c>0?c--:s[f]=!((x==null?void 0:x.text)===">"||((w=n[f+1])==null?void 0:w.text)===">"):eG.has(g.text)?s[f]=!0:tG.has(g.text)&&(s[f]=oG(n,f-1))});const h=[];for(let g=1;gi.startsWith(l,n));a(o?"op":"other",n+((o==null?void 0:o.length)??1))}}return e}function dG(i,e){var n,a;const t=i[e];return t?t.kind==="num"||t.kind==="str"?!0:t.kind==="word"?!oG.has(t.text):t.text==="]"?!0:t.text===")"?!(lG.has(((n=i[e-1])==null?void 0:n.text)??"")&&((a=i[e-2])==null?void 0:a.text)==="("):!1:!1}const od=i=>(i==null?void 0:i.kind)==="word"&&new RegExp("^\\p{Lu}","u").test(i.text);function hG(i,e=1,t=Number.MAX_SAFE_INTEGER){const n=cG(i),a=n.length,s=new Array(a).fill(!1),r=new Array(a).fill(!1),o=new Array(a).fill(-1),l=new Array(a).fill(!1),u=new Array(a).fill(!1),m=[{at:-1,block:!0,paren:0}];let c=0,d=0;n.forEach((g,f)=>{var v,w;const x=n[f-1],b=m.at(-1);if(g.kind!=="comment")if(g.text==="(")b.paren++;else if(g.text===")")b.paren=Math.max(0,b.paren-1);else if(g.text==="{"){const z=(x==null?void 0:x.text)??"",I=["=",",","]","("].includes(z)||z==="{"&&!r[f-1];r[f]=!I,l[f]=z==="do",m.push({at:f,block:!I,paren:0})}else if(g.text==="}")if(m.length>1){const z=m.pop();r[f]=z.block,o[f]=z.at,o[z.at]=f,l[f]=l[z.at]}else r[f]=!0;else if(g.text===";")u[f]=b.block&&b.paren===0,d=0;else if(g.text==="?"&&(x==null?void 0:x.text)!=="<"&&![")",";",",",void 0].includes((v=n[f+1])==null?void 0:v.text))s[f]=!0,d++;else if(g.text===":")s[f]=d>0||b.paren>0,d>0&&d--;else if(g.text==="<"){const z=n[f+1];(od(x)||(x==null?void 0:x.text)===".")&&(od(z)||(z==null?void 0:z.text)===">"||(z==null?void 0:z.text)==="?")?c++:s[f]=!((x==null?void 0:x.text)==="<"||(z==null?void 0:z.text)==="<")}else g.text===">"?c>0?c--:s[f]=!((x==null?void 0:x.text)===">"||((w=n[f+1])==null?void 0:w.text)===">"):sG.has(g.text)?s[f]=!0:rG.has(g.text)&&(s[f]=dG(n,f-1))});const h=[];for(let g=1;gt||f.kind==="comment")continue;let v;x.kind==="comment"?v=void 0:r[g-1]&&f.text==="{"&&o[g-1]!==g||r[g]&&x.text==="}"&&o[g]!==g-1?v=` -`:r[g-1]&&f.text==="}"?sG.has(x.text)||x.text==="while"&&l[g-1]?v=" ":[")",";",",","."].includes(x.text)||(v=` +`:r[g-1]&&f.text==="}"?mG.has(x.text)||x.text==="while"&&l[g-1]?v=" ":[")",";",",","."].includes(x.text)||(v=` `):u[g-1]?v=` -`:x.text===","||x.text===";"?v="":f.text===","?v=" ":f.text===";"?v=x.text===")"?"":" ":f.text==="("||x.text===")"?v="":(x.text==="("&&aG.has(f.text)||x.text==="{"&&r[g]||s[g-1]||s[g])&&(v=" "),v!==void 0&&v!==b&&h.push({from:f.to,to:x.from,insert:v})}return h}const uG=[["nextInt","","int","Ganze Zahl einlesen","Read a whole number","Ler um número inteiro"],["nextDouble","","double","Kommazahl einlesen","Read a decimal number","Ler um número decimal"],["nextLine","","String","Ganze Zeile als Text einlesen","Read a whole line as text","Ler uma linha inteira como texto"],["next","","String","Ein Wort einlesen (bis zum Leerzeichen)","Read one word (up to a space)","Ler uma palavra (até ao espaço)"],["nextBoolean","","boolean","true oder false einlesen","Read true or false","Ler true ou false"],["nextLong","","long","Große ganze Zahl einlesen","Read a large whole number","Ler um número inteiro grande"],["hasNextInt","","boolean","Kommt als Nächstes eine ganze Zahl?","Is the next input a whole number?","A próxima entrada é um número inteiro?"],["hasNextDouble","","boolean","Kommt als Nächstes eine Kommazahl?","Is the next input a decimal number?","A próxima entrada é um número decimal?"],["hasNextLine","","boolean","Gibt es noch eine Zeile?","Is there another line?","Existe mais uma linha?"],["hasNext","","boolean","Gibt es noch ein Wort?","Is there another word?","Existe mais uma palavra?"],["close","","void","Eingabe schließen","Close the input","Fechar a entrada"]],mG=[["length","","int","Anzahl der Zeichen","Number of characters","Número de caracteres"],["charAt","index","char","Zeichen an Stelle index (ab 0)","Character at position index (from 0)","Carácter na posição index (a partir de 0)"],["equals","text","boolean","Gleicher Text? (statt ==)","Same text? (instead of ==)","Mesmo texto? (em vez de ==)"],["equalsIgnoreCase","text","boolean","Gleicher Text, groß/klein egal?","Same text, ignoring case?","Mesmo texto, ignorando maiúsculas?"],["compareTo","text","int","Alphabetisch vergleichen (<0, 0, >0)","Compare alphabetically (<0, 0, >0)","Comparar alfabeticamente (<0, 0, >0)"],["substring","von, bis","String","Teiltext von Stelle von bis vor bis","Part of the text from start up to before end","Parte do texto do início até antes do fim"],["indexOf","text","int","Erste Stelle des Textes (−1 = fehlt)","First position of the text (−1 = missing)","Primeira posição do texto (−1 = não existe)"],["lastIndexOf","text","int","Letzte Stelle des Textes (−1 = fehlt)","Last position of the text (−1 = missing)","Última posição do texto (−1 = não existe)"],["contains","text","boolean","Kommt der Text darin vor?","Does it contain the text?","Contém o texto?"],["startsWith","text","boolean","Fängt damit an?","Starts with it?","Começa com isto?"],["endsWith","text","boolean","Hört damit auf?","Ends with it?","Termina com isto?"],["toUpperCase","","String","In GROSSBUCHSTABEN","In UPPER CASE","Em MAIÚSCULAS"],["toLowerCase","","String","In kleinbuchstaben","In lower case","Em minúsculas"],["trim","","String","Leerzeichen vorn und hinten weg","Remove spaces at both ends","Remover espaços no início e no fim"],["replace","alt, neu","String","Text ersetzen","Replace text","Substituir texto"],["split","trenner","String[]",'In Teile zerlegen, z. B. split(";")','Split into parts, e.g. split(";")','Dividir em partes, p. ex. split(";")'],["isEmpty","","boolean","Leerer Text?","Empty text?","Texto vazio?"],["toCharArray","","char[]","Als Array von Zeichen","As an array of characters","Como array de caracteres"]],n2=[["println","wert","void","Ausgeben, danach neue Zeile","Print, then a new line","Escrever e mudar de linha"],["print","wert","void","Ausgeben ohne neue Zeile","Print without a new line","Escrever sem mudar de linha"],["printf","format, werte","PrintStream",'Formatiert ausgeben, z. B. "%.2f"','Print formatted, e.g. "%.2f"','Escrever formatado, p. ex. "%.2f"']],cG=[...n2,["close","","void","Datei speichern und schließen","Save and close the file","Guardar e fechar o ficheiro"]],dG=[["readLine","","String","Nächste Zeile lesen (null = Ende)","Read the next line (null = end)","Ler a próxima linha (null = fim)"],["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],hG=[["exists","","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"],["getName","","String","Name der Datei","Name of the file","Nome do ficheiro"],["length","","long","Größe in Bytes","Size in bytes","Tamanho em bytes"]],gG=[["getMessage","","String","Fehlermeldung als Text","Error message as text","Mensagem de erro como texto"],["printStackTrace","","void","Fehler mit Zeilen ausgeben","Print the error with its lines","Mostrar o erro com as linhas"]],pG=[["getSource","","Object","Welcher Knopf wurde geklickt?","Which button was clicked?","Que botão foi clicado?"],["getActionCommand","","String","Beschriftung des Knopfs","Label of the button","Texto do botão"]],fG=[["setBackground","farbe","void","Hintergrundfarbe, z. B. Color.RED","Background colour, e.g. Color.RED","Cor de fundo, p. ex. Color.RED"],["setForeground","farbe","void","Schriftfarbe","Text colour","Cor do texto"],["setFont","schrift","void",'Schrift, z. B. new Font("Arial", Font.BOLD, 24)','Font, e.g. new Font("Arial", Font.BOLD, 24)','Letra, p. ex. new Font("Arial", Font.BOLD, 24)'],["setVisible","true","void","Anzeigen (true) oder verstecken (false)","Show (true) or hide (false)","Mostrar (true) ou esconder (false)"],["setEnabled","true","void","Anklickbar (true) oder grau (false)","Clickable (true) or greyed out (false)","Clicável (true) ou cinzento (false)"],["setSize","breite, höhe","void","Größe in Pixeln","Size in pixels","Tamanho em píxeis"]],xG=[["add","baustein","Component","Baustein hinzufügen","Add a component","Adicionar um componente"],["setLayout","layout","void","Anordnung, z. B. new FlowLayout()","Layout, e.g. new FlowLayout()","Disposição, p. ex. new FlowLayout()"],["remove","baustein","void","Baustein entfernen","Remove a component","Remover um componente"]],bG=[["setTitle","text","void","Titel oben im Fenster","Title at the top of the window","Título no topo da janela"],["setDefaultCloseOperation","JFrame.EXIT_ON_CLOSE","void","Was beim Schließen passiert","What happens when closing","O que acontece ao fechar"],["setLocationRelativeTo","null","void","Mit null: Fenster in die Mitte","With null: centre the window","Com null: janela no centro"],["setResizable","false","void","Größe änderbar?","Can the size change?","Pode mudar de tamanho?"],["pack","","void","Größe passend zum Inhalt","Size to fit the content","Tamanho ajustado ao conteúdo"],["getContentPane","","JPanel","Inhaltsfläche des Fensters","Content area of the window","Área de conteúdo da janela"],["dispose","","void","Fenster schließen","Close the window","Fechar a janela"]],vG=[["setText","text","void","Text setzen","Set the text","Definir o texto"],["getText","","String","Text holen","Get the text","Obter o texto"]],yG=[["addActionListener","e -> { }","void","Was beim Klick passiert","What happens on click","O que acontece ao clicar"],["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setBorderPainted","false","void","Rahmen zeichnen?","Draw the border?","Desenhar a borda?"]],wG=[["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setHorizontalAlignment","JLabel.CENTER","void","Text links, mittig oder rechts","Text left, centre or right","Texto à esquerda, centro ou direita"]],zG=[["addActionListener","e -> { }","void","Was bei Enter passiert","What happens on Enter","O que acontece ao carregar em Enter"],["setEditable","false","void","Darf man hineinschreiben?","Can you type into it?","Pode-se escrever?"],["setColumns","anzahl","void","Breite in Zeichen","Width in characters","Largura em caracteres"],["requestFocus","","void","Cursor hineinsetzen","Put the cursor into it","Pôr o cursor no campo"]],IG=[["length",null,"int","Anzahl der Elemente (ohne Klammern)","Number of elements (no brackets)","Número de elementos (sem parênteses)"]],ao=[["add","wert","boolean","Element hinten anhängen","Append an element at the end","Acrescentar um elemento no fim"],["get","index","E","Element an Stelle index holen (ab 0)","Get the element at index (from 0)","Obter o elemento na posição index (a partir de 0)"],["size","","int","Anzahl der Elemente","Number of elements","Número de elementos"],["set","index, wert","E","Element an Stelle index ersetzen","Replace the element at index","Substituir o elemento na posição index"],["remove","index","E","Element an Stelle index entfernen","Remove the element at index","Remover o elemento na posição index"],["contains","wert","boolean","Ist das Element in der Liste?","Is the element in the list?","O elemento está na lista?"],["indexOf","wert","int","Stelle des Elements (-1 = nicht da)","Position of the element (-1 = not found)","Posição do elemento (-1 = não existe)"],["isEmpty","","boolean","Ist die Liste leer?","Is the list empty?","A lista está vazia?"],["clear","","void","Alle Elemente entfernen","Remove all elements","Remover todos os elementos"]],so={Scanner:uG,String:mG,PrintStream:n2,PrintWriter:cG,BufferedReader:dG,FileReader:[["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],File:hG,Exception:gG,ActionEvent:pG,Component:fG,Container:xG,JFrame:bG,JPanel:[],JButton:yG,JLabel:wG,JTextField:zG,TextHolder:vG,ArrayList:ao,List:ao,LinkedList:ao},kG={JFrame:["Container","Component"],JPanel:["Container","Component"],JButton:["TextHolder","Component"],JLabel:["TextHolder","Component"],JTextField:["TextHolder","Component"],PrintWriter:[]},i2={mbot:[["forward","cm","void","Geradeaus vorwärts fahren","Drive forward","Andar para a frente"],["backward","cm","void","Rückwärts fahren","Drive backward","Andar para trás"],["turnLeft","grad","void","Auf der Stelle nach links drehen","Turn left on the spot","Rodar para a esquerda"],["turnRight","grad","void","Auf der Stelle nach rechts drehen","Turn right on the spot","Rodar para a direita"],["stop","","void","Motoren anhalten","Stop the motors","Parar os motores"],["drive","links, rechts","void","Räder einzeln in Prozent (−100–100), fährt weiter bis stop()","Wheels separately in percent (−100–100), keeps going until stop()","Rodas separadas em percentagem (−100–100), continua até stop()"],["resetTimer","","void","Stoppuhr auf 0 setzen","Reset the stopwatch to 0","Pôr o cronómetro a 0"],["pause","ms","void","Millisekunden warten","Wait milliseconds","Esperar milissegundos"],["setLed","rot, gruen, blau","void","LEDs in einer Farbe (je 0–255)","LEDs in a colour (0–255 each)","LEDs numa cor (0–255 cada)"],["ledOff","","void","LEDs aus","LEDs off","Desligar LEDs"],["led","nr","LED",'Eine LED (0–4), dann .setColor("grün") oder .setColor("aus")','One LED (0–4), then .setColor("green") or .setColor("off")','Um LED (0–4), depois .setColor("green") ou .setColor("off")'],["showText",'"Hallo"',"void","Text auf dem Bildschirm zeigen","Show text on the screen","Mostrar texto no ecrã"],["emotion",'"smile"',"void","Gefühl zeigen: LEDs, Ton, Bewegung (smile, hello, sad …)","Show a feeling: LEDs, sound, motion (smile, hello, sad …)","Mostrar um sentimento: LEDs, som, movimento (smile, hello, sad …)"],["playTone","hz, ms","void","Ton spielen, z. B. playTone(440, 500)","Play a tone, e.g. playTone(440, 500)","Tocar um som, p. ex. playTone(440, 500)"],["getDistance","","int","Abstand vorn in cm (Ultraschall)","Distance ahead in cm (ultrasonic)","Distância à frente em cm (ultrassom)"],["getLine","","int","Liniensensor: 0 = keine Linie, 15 = alle vier auf der Linie","Line sensor: 0 = no line, 15 = all four on the line","Sensor de linha: 0 = sem linha, 15 = os quatro na linha"],["isLineLeft","","boolean","Linie unter dem linken mittleren Fühler","Line under the left middle probe","Linha sob a sonda central esquerda"],["isLineRight","","boolean","Linie unter dem rechten mittleren Fühler","Line under the right middle probe","Linha sob a sonda central direita"],["getBrightness","","int","Helligkeit 0–100","Brightness 0–100","Luminosidade 0–100"],["getLoudness","","int","Lautstärke 0–100","Loudness 0–100","Volume 0–100"],["getColor","","String",'Farbe unter dem mBot2, z. B. "rot"','Colour under the mBot2, e.g. "red"','Cor por baixo do mBot2, p. ex. "red"'],["isButtonA","","boolean","Taste A ist gedrückt","Button A is pressed","O botão A está premido"],["isButtonB","","boolean","Taste B ist gedrückt","Button B is pressed","O botão B está premido"],["isJoystickUp","","boolean","Joystick nach oben gedrückt","Joystick pushed up","Joystick para cima"],["isJoystickDown","","boolean","Joystick nach unten gedrückt","Joystick pushed down","Joystick para baixo"],["isJoystickLeft","","boolean","Joystick nach links gedrückt","Joystick pushed left","Joystick para a esquerda"],["isJoystickRight","","boolean","Joystick nach rechts gedrückt","Joystick pushed right","Joystick para a direita"],["getPitch","","int","Neigung nach vorn (+) oder hinten (−) in Grad","Tilt forward (+) or back (−) in degrees","Inclinação para a frente (+) ou trás (−) em graus"],["getRoll","","int","Neigung zur Seite in Grad","Tilt sideways in degrees","Inclinação lateral em graus"],["isShaken","","boolean","Der mBot2 wird geschüttelt","The mBot2 is being shaken","O mBot2 está a ser abanado"],["getTimer","","double","Stoppuhr in Sekunden","Stopwatch in seconds","Cronómetro em segundos"],["getBattery","","int","Akku in Prozent","Battery in percent","Bateria em percentagem"]],System:[["out",null,"PrintStream","Ausgabe in die Konsole","Output to the console","Saída para a consola"],["in",null,"InputStream","Eingabe von der Tastatur (für Scanner)","Keyboard input (for Scanner)","Entrada do teclado (para Scanner)"],["err",null,"PrintStream","Fehlerausgabe","Error output","Saída de erros"],["currentTimeMillis","","long","Uhrzeit in Millisekunden","Time in milliseconds","Hora em milissegundos"],["exit","0","void","Programm beenden","End the program","Terminar o programa"]],Math:[["random","","double","Zufallszahl von 0 bis unter 1","Random number from 0 to below 1","Número aleatório de 0 até menos de 1"],["abs","zahl","double","Betrag (ohne Minus)","Absolute value (no minus)","Valor absoluto (sem menos)"],["sqrt","zahl","double","Wurzel","Square root","Raiz quadrada"],["pow","basis, exponent","double","Hoch: pow(2, 3) = 8","Power: pow(2, 3) = 8","Potência: pow(2, 3) = 8"],["max","a, b","double","Größere von zwei Zahlen","Larger of two numbers","Maior de dois números"],["min","a, b","double","Kleinere von zwei Zahlen","Smaller of two numbers","Menor de dois números"],["round","zahl","long","Runden","Round","Arredondar"],["floor","zahl","double","Abrunden","Round down","Arredondar para baixo"],["ceil","zahl","double","Aufrunden","Round up","Arredondar para cima"],["PI",null,"double","Kreiszahl π = 3.14159…","Pi π = 3.14159…","Pi π = 3,14159…"]],Integer:[["parseInt","text","int","Text in ganze Zahl umwandeln","Turn text into a whole number","Converter texto em número inteiro"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"],["MAX_VALUE",null,"int","Größte int-Zahl","Largest int value","Maior valor int"],["MIN_VALUE",null,"int","Kleinste int-Zahl","Smallest int value","Menor valor int"]],Double:[["parseDouble","text","double","Text in Kommazahl umwandeln","Turn text into a decimal number","Converter texto em número decimal"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"]],String:[["valueOf","wert","String","Wert in Text umwandeln","Turn a value into text","Converter valor em texto"],["format","format, werte","String",'Formatierter Text, z. B. "%.2f"','Formatted text, e.g. "%.2f"','Texto formatado, p. ex. "%.2f"'],["join","trenner, teile","String","Teile mit Trenner verbinden","Join parts with a separator","Juntar partes com um separador"]],Character:[["isDigit","zeichen","boolean","Ist es eine Ziffer?","Is it a digit?","É um algarismo?"],["isLetter","zeichen","boolean","Ist es ein Buchstabe?","Is it a letter?","É uma letra?"],["isUpperCase","zeichen","boolean","Ist es ein Großbuchstabe?","Is it upper case?","É maiúscula?"],["toUpperCase","zeichen","char","In Großbuchstaben","To upper case","Para maiúscula"],["toLowerCase","zeichen","char","In Kleinbuchstaben","To lower case","Para minúscula"]],Files:[["readString",'Path.of("datei.txt")',"String","Ganze Datei als Text lesen","Read the whole file as text","Ler o ficheiro inteiro como texto"],["writeString","pfad, text","Path","Text in Datei schreiben","Write text to a file","Escrever texto num ficheiro"],["readAllLines","pfad","List","Alle Zeilen lesen","Read all lines","Ler todas as linhas"],["exists","pfad","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"]],Path:[["of",'"datei.txt"',"Path","Pfad zu einer Datei","Path to a file","Caminho para um ficheiro"]],JFrame:[["EXIT_ON_CLOSE",null,"int","Programm endet beim Schließen","Program ends when closed","O programa termina ao fechar"]],JLabel:[["CENTER",null,"int","Mittig","Centred","Ao centro"],["LEFT",null,"int","Links","Left","À esquerda"],["RIGHT",null,"int","Rechts","Right","À direita"]],Font:[["BOLD",null,"int","Fett","Bold","Negrito"],["PLAIN",null,"int","Normal","Plain","Normal"],["ITALIC",null,"int","Kursiv","Italic","Itálico"]],Color:[["RED","Rot","Red","Vermelho"],["GREEN","Grün","Green","Verde"],["BLUE","Blau","Blue","Azul"],["YELLOW","Gelb","Yellow","Amarelo"],["ORANGE","Orange","Orange","Laranja"],["WHITE","Weiß","White","Branco"],["BLACK","Schwarz","Black","Preto"],["GRAY","Grau","Grey","Cinzento"],["LIGHT_GRAY","Hellgrau","Light grey","Cinzento-claro"],["PINK","Rosa","Pink","Rosa"],["CYAN","Türkis","Cyan","Ciano"],["MAGENTA","Magenta","Magenta","Magenta"]].map(([i,e,t,n])=>[i,null,"Color",e,t,n])};function a2(i,e){const[t,n,a,s,r,o]=i;return{name:t,kind:n===null?"field":"method",params:!!n,returns:a,description:e==="de"?s:e==="pt"?o:r}}const Zl=i=>i.replace(/<.*>$/,""),s2=i=>{var e;return(e=/<\s*([^<>,]+?)\s*>$/.exec(i))==null?void 0:e[1]};function r2(i){if(/\[\]$/.test(i))return IG;if(i=Zl(i),/Exception$|^Throwable$/.test(i))return so.Exception;if(!so[i])return;const t=new Set,n=[];for(const a of[i,...kG[i]??[]])for(const s of so[a]??[])t.has(s[0])||(t.add(s[0]),n.push(s));return n}function cV(i,e="de"){return(r2(i)??[]).map(t=>a2(t,e))}const SG="[A-Z]\\w*|int|long|double|float|boolean|char|byte|short|var";function TG(i,e){var a,s;const t=new RegExp(`(?:^|[^\\w.])(${SG})\\s*(?:<([^<>;]*)>)?((?:\\s*\\[\\s*\\])*)\\s+${e}\\s*(?:\\[\\s*\\])*\\s*(=\\s*([^;]*))?(?=[=;,):]|$)`,"gm");let n;for(const r of i.matchAll(t)){let o=r[1];if(o==="var"){const u=r[5]??"";if(o=((a=/^new\s+([A-Z]\w*)/.exec(u))==null?void 0:a[1])??(/^"/.test(u)?"String":""),!o)continue}if(/^(return|new|else|case|throw)$/.test(o))continue;const l=(s=r[2])==null?void 0:s.replace(/\s+/g,"");n=o+(l?`<${l}>`:"")+(r[3]??"").replace(/\s+/g,"")}return n}function jG(i){let e=0,t;const n=/^"(?:[^"\\]|\\.)*"/.exec(i);if(n)t='"',e=n[0].length;else{const r=/^[A-Za-z_]\w*/.exec(i);if(!r)return;t=r[0],e=r[0].length}const a=[{name:t,call:!1,indices:0}],s=(r,o)=>{let l=0;for(;e0;){const n=i[t-1];if(/[\w.]/.test(n))t--;else if(n===")"||n==="]"){const a=n===")"?"(":"[";let s=0,r=t-1;for(;r>=0;r--)if(i[r]===n)s++;else if(i[r]===a&&--s===0)break;if(r<0)return t;t=r}else if(n==='"'){const a=i.lastIndexOf('"',t-2);if(a<0)return t;t=a}else break}return t}const ad=(i,e)=>i.slice(0,Math.max(0,i.length-2*e));function o2(i,e,t,n){const a=e?t==null?void 0:t.statics(Zl(i)):t==null?void 0:t.members(Zl(i));if(a)return a;const s=e?i2[i]:r2(i);return s==null?void 0:s.map(r=>a2(r,n))}function CG(i,e,t,n){var s,r;const a=(r=(s=o2(i,t,n,"en"))==null?void 0:s.find(o=>o.name===e))==null?void 0:r.returns;return a==="E"?s2(i)??"Object":a}function AG(i,e,t){const n=jG(e);if(!n)return;const[a,...s]=n.links;let r,o=!1;if(n.head==='"')r="String";else if(a.name==="this"&&(t!=null&&t.thisType)&&!a.call&&!a.indices)r=t.thisType;else{if(r=TG(i,a.name),!r&&(i2[a.name]||t!=null&&t.statics(a.name))&&!a.call&&(r=a.name,o=!0),!r)return;a.indices&&(r=ad(r,a.indices))}for(const l of s){const u=CG(r,l.name,o,t);if(!u)return;r=ad(u,l.indices),o=!1}return{type:r,isStatic:o}}function PG(i,e,t="de",n){const a=i.lastIndexOf(` -`,e-1)+1,s=i.slice(a,e),r=/\.\s*(\w*)$/.exec(s);if(!r)return;const o=r.index,l=s.slice(_G(s,o),o);if(!l||/^\d/.test(l))return;const u=AG(i,l,n);if(!u)return;const m=o2(u.type,u.isStatic,n,t);if(!m)return;const c=s2(u.type)??"Object";return{from:e-r[1].length,members:m.map(d=>d.returns==="E"?{...d,returns:c}:d)}}const sd=Nn.define(),$0=de.define(),OG=he.mark({class:"cm-ph"}),MG=he.mark({class:"cm-err"}),rd=he.line({class:"cm-debug-line"});class ZG extends J1{constructor(e){super(),this.fix=e}eq(e){return JSON.stringify(e.fix)===JSON.stringify(this.fix)}toDOM(e){const t=document.createElement("button");return t.type="button",t.className="cm-quickfix",t.textContent="💡",t.dataset.tip=this.fix.title,t.setAttribute("aria-label",this.fix.title),t.addEventListener("mousedown",n=>n.preventDefault()),t.addEventListener("click",()=>{const{from:n,to:a,insert:s}=this.fix;a>e.state.doc.length||(e.dispatch({changes:{from:n,to:a,insert:s},selection:{anchor:n+s.length},userEvent:"input"}),e.focus())}),t}ignoreEvent(){return!0}}function od(i,e){const t=i.doc.length,n=[];e.current!==void 0&&e.currentr===rd;n.sort((r,o)=>r.from-o.from||Number(a(o.deco))-Number(a(r.deco))||r.to-o.to);const s=new i1;for(const r of n)s.add(r.from,r.to,r.deco);return s.finish()}const N1=Et.define({create:()=>({marks:{placeholders:[],problems:[]},decorations:he.none}),update(i,e){for(const a of e.effects)if(a.is($0))return{marks:a.value,decorations:od(e.state,a.value)};if(!e.docChanged)return i;const t=a=>({from:e.changes.mapPos(a.from,1),to:e.changes.mapPos(a.to,-1)}),n={...i.marks,placeholders:i.marks.placeholders.map(t).filter(a=>a.fromQ.decorations.from(i,e=>e.decorations)});class DG extends un{constructor(){super(...arguments);y(this,"elementClass","cm-error-line")}}const BG=new DG,LG=yi.compute([N1],i=>{const e=[...new Set(i.field(N1).marks.errorLines??[])].filter(t=>tt-n);return ie.of(e.map(t=>BG.range(i.doc.line(t+1).from)))}),ld={ClassDeclaration:"class",InterfaceDeclaration:"class",EnumDeclaration:"class",MethodDeclaration:"method",ConstructorDeclaration:"method",ForStatement:"loop",EnhancedForStatement:"loop",WhileStatement:"loop",DoStatement:"loop",IfStatement:"if",SwitchStatement:"if",TryStatement:"try"};function WG(i,e){const t=i.lineAt(e);if(!t.text.trimEnd().endsWith("{"))return t.number;let n=0;for(let a=t.number;a<=i.lines;a++)for(const s of i.line(a).text.replace(/"(?:[^"\\]|\\.)*"|\/\/.*$/g,""))if(s==="{")n++;else if(s==="}"&&--n===0)return a;return t.number}function EG(i){const{state:e}=i,t=e.doc,n=i.contentDOM.querySelector(".cm-line");if(!n)return[];const a=getComputedStyle(n),s=i.scrollDOM.getBoundingClientRect(),r=i.contentDOM.getBoundingClientRect(),o=s.left-i.scrollDOM.scrollLeft,l=s.top-i.scrollDOM.scrollTop,u=r.left-o+parseFloat(a.paddingLeft)+parseFloat(a.borderLeftWidth),m=r.right-o-6,c=i.documentTop-l,d=e.tabSize,h=i.defaultCharacterWidth,g=(z,I,k,S)=>{const _=t.line(I),M=Qi(/^\s*/.exec(_.text)[0],d),O=u+M*h-7,P=i.lineBlockAt(_.from).top+c+S,C=i.lineBlockAt(t.line(k).from).bottom+c-S;return new ur(z,O,P,Math.max(m-O,20),Math.max(C-P,4))},f=[],x=Xe(e).topNode,b=[];for(let z=x.firstChild;z;z=z.nextSibling){if(ld[z.name]==="class"||z.name==="MethodDeclaration"){b.length=0;break}z.name!=="ImportDeclaration"&&z.name!=="PackageDeclaration"&&!z.name.includes("Comment")&&b.push(z)}b.length&&f.push(g("cm-scope cm-scope-method",t.lineAt(b[0].from).number,t.lineAt(b[b.length-1].to).number,1));const v=[];Xe(e).iterate({from:i.viewport.from,to:i.viewport.to,enter:z=>{var _;const I=ld[z.name];if(!I||z.name==="IfStatement"&&((_=z.node.parent)==null?void 0:_.name)==="IfStatement")return;const k=t.lineAt(z.from).number,S=Math.max(t.lineAt(z.to).number,WG(t,z.from));v.push({kind:I,from:k,to:S}),f.push(g(`cm-scope cm-scope-${I}`,k,S,1))}});for(let z=1;z<=t.lines;z++){let I;for(const S of v)S.from<=z&&z<=S.to&&(!I||S.from>=I.from)&&(I=S);if(!I||I.kind!=="loop"&&I.kind!=="if"||z===I.from)continue;const k=t.line(z).text.trim();!k||k.startsWith("}")||k.endsWith("{")||k.startsWith("//")||k.startsWith("case ")||k.startsWith("default")||f.push(g("cm-scope cm-scope-method cm-scope-stmt",z,z,2))}const w=e.field(N1).marks.lines;return w&&w.fromi.docChanged||i.viewportChanged||i.geometryChanged||Xe(i.state)!==Xe(i.startState)||i.transactions.some(e=>e.effects.some(t=>t.is($0)))});class FG extends un{toDOM(){const e=document.createElement("span");return e.className="cm-breakpoint",e}}const Dl=new FG,m2=de.define(),c2=de.define(),Bl=Et.define({create:()=>ie.empty,update(i,e){i=i.map(e.changes);for(const t of e.effects){if(t.is(c2)&&(i=ie.of(t.value.map(a=>Dl.range(a)),!0)),!t.is(m2))continue;let n=!1;i.between(t.value,t.value,()=>{n=!0}),i=n?i.update({filter:a=>a!==t.value}):i.update({add:[Dl.range(t.value)]})}return i}});function RG(i){const t={mousedown:(n,a)=>{const s=i.breakpointLine(n.state.doc.lineAt(a.from).number-1);return s===void 0||s>=n.state.doc.lines?!1:(n.dispatch({effects:m2.of(n.state.doc.line(s+1).from)}),queueMicrotask(()=>i.onBreakpoints()),!0)}};return[Bl,AN({class:"cm-breakpoint-gutter",markers:n=>n.state.field(Bl),initialSpacer:()=>Dl,domEventHandlers:t}),LN({domEventHandlers:t})]}function X0(i,e){return i.field(N1).marks.placeholders.find(t=>e>=t.from&&e<=t.to)}const GG=Q.inputHandler.of((i,e,t,n)=>{if(e!==t)return!1;const a=X0(i.state,e);return a?(i.dispatch({changes:{from:a.from,to:a.to,insert:n},selection:{anchor:a.from+n.length},userEvent:"input.type"}),!0):!1}),HG=re.transactionFilter.of(i=>{if(!i.docChanged||!(i.isUserEvent("input.paste")||i.isUserEvent("input.drop")))return i;const e=[];if(i.changes.iterChanges((a,s,r,o,l)=>e.push({from:a,to:s,text:l.toString()})),e.length!==1||e[0].from!==e[0].to)return i;const t=X0(i.startState,e[0].from);if(!t)return i;const{text:n}=e[0];return{changes:{from:t.from,to:t.to,insert:n},selection:{anchor:t.from+n.length},userEvent:"input.paste",scrollIntoView:!0}}),ud=i=>e=>{const t=e.state.selection.main;if(!t.empty)return!1;const n=X0(e.state,t.head);return!n||(i?t.head>=n.to:t.head<=n.from)?!1:(e.dispatch({changes:{from:n.from,to:n.to},selection:{anchor:n.from},userEvent:"delete"}),!0)},VG=Q.updateListener.of(i=>{if(!i.selectionSet||i.docChanged||!i.transactions.some(n=>n.isUserEvent("select.pointer")))return;const e=i.state.selection.main;if(!e.empty)return;const t=i.state.field(N1).marks.placeholders.find(n=>e.head>n.from&&e.headi.view.dispatch({selection:Z.range(t.from,t.to)}))}),QG=cr.define([{tag:[W.keyword,W.controlKeyword,W.definitionKeyword,W.modifier,W.operatorKeyword,W.standard(W.typeName),W.bool,W.null],color:"var(--syn-keyword)",fontWeight:"600"},{tag:[W.string,W.character],color:"var(--syn-string)"},{tag:W.number,color:"var(--syn-number)"},{tag:[W.lineComment,W.blockComment],color:"var(--syn-comment)",fontStyle:"italic"}]);function qG(i){const e=i,t=`\${// ${e.code}}`,n=(a,s,r,o=0)=>V0(s,{label:a,detail:r,type:"keyword",boost:o});return[n("if",`if (\${${e.condition}}) { +`:x.text===","||x.text===";"?v="":f.text===","?v=" ":f.text===";"?v=x.text===")"?"":" ":f.text==="("||x.text===")"?v="":(x.text==="("&&uG.has(f.text)||x.text==="{"&&r[g]||s[g-1]||s[g])&&(v=" "),v!==void 0&&v!==b&&h.push({from:f.to,to:x.from,insert:v})}return h}const gG=[["nextInt","","int","Ganze Zahl einlesen","Read a whole number","Ler um número inteiro"],["nextDouble","","double","Kommazahl einlesen","Read a decimal number","Ler um número decimal"],["nextLine","","String","Ganze Zeile als Text einlesen","Read a whole line as text","Ler uma linha inteira como texto"],["next","","String","Ein Wort einlesen (bis zum Leerzeichen)","Read one word (up to a space)","Ler uma palavra (até ao espaço)"],["nextBoolean","","boolean","true oder false einlesen","Read true or false","Ler true ou false"],["nextLong","","long","Große ganze Zahl einlesen","Read a large whole number","Ler um número inteiro grande"],["hasNextInt","","boolean","Kommt als Nächstes eine ganze Zahl?","Is the next input a whole number?","A próxima entrada é um número inteiro?"],["hasNextDouble","","boolean","Kommt als Nächstes eine Kommazahl?","Is the next input a decimal number?","A próxima entrada é um número decimal?"],["hasNextLine","","boolean","Gibt es noch eine Zeile?","Is there another line?","Existe mais uma linha?"],["hasNext","","boolean","Gibt es noch ein Wort?","Is there another word?","Existe mais uma palavra?"],["close","","void","Eingabe schließen","Close the input","Fechar a entrada"]],pG=[["length","","int","Anzahl der Zeichen","Number of characters","Número de caracteres"],["charAt","index","char","Zeichen an Stelle index (ab 0)","Character at position index (from 0)","Carácter na posição index (a partir de 0)"],["equals","text","boolean","Gleicher Text? (statt ==)","Same text? (instead of ==)","Mesmo texto? (em vez de ==)"],["equalsIgnoreCase","text","boolean","Gleicher Text, groß/klein egal?","Same text, ignoring case?","Mesmo texto, ignorando maiúsculas?"],["compareTo","text","int","Alphabetisch vergleichen (<0, 0, >0)","Compare alphabetically (<0, 0, >0)","Comparar alfabeticamente (<0, 0, >0)"],["substring","von, bis","String","Teiltext von Stelle von bis vor bis","Part of the text from start up to before end","Parte do texto do início até antes do fim"],["indexOf","text","int","Erste Stelle des Textes (−1 = fehlt)","First position of the text (−1 = missing)","Primeira posição do texto (−1 = não existe)"],["lastIndexOf","text","int","Letzte Stelle des Textes (−1 = fehlt)","Last position of the text (−1 = missing)","Última posição do texto (−1 = não existe)"],["contains","text","boolean","Kommt der Text darin vor?","Does it contain the text?","Contém o texto?"],["startsWith","text","boolean","Fängt damit an?","Starts with it?","Começa com isto?"],["endsWith","text","boolean","Hört damit auf?","Ends with it?","Termina com isto?"],["toUpperCase","","String","In GROSSBUCHSTABEN","In UPPER CASE","Em MAIÚSCULAS"],["toLowerCase","","String","In kleinbuchstaben","In lower case","Em minúsculas"],["trim","","String","Leerzeichen vorn und hinten weg","Remove spaces at both ends","Remover espaços no início e no fim"],["replace","alt, neu","String","Text ersetzen","Replace text","Substituir texto"],["split","trenner","String[]",'In Teile zerlegen, z. B. split(";")','Split into parts, e.g. split(";")','Dividir em partes, p. ex. split(";")'],["isEmpty","","boolean","Leerer Text?","Empty text?","Texto vazio?"],["toCharArray","","char[]","Als Array von Zeichen","As an array of characters","Como array de caracteres"]],r2=[["println","wert","void","Ausgeben, danach neue Zeile","Print, then a new line","Escrever e mudar de linha"],["print","wert","void","Ausgeben ohne neue Zeile","Print without a new line","Escrever sem mudar de linha"],["printf","format, werte","PrintStream",'Formatiert ausgeben, z. B. "%.2f"','Print formatted, e.g. "%.2f"','Escrever formatado, p. ex. "%.2f"']],fG=[...r2,["close","","void","Datei speichern und schließen","Save and close the file","Guardar e fechar o ficheiro"]],xG=[["readLine","","String","Nächste Zeile lesen (null = Ende)","Read the next line (null = end)","Ler a próxima linha (null = fim)"],["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],bG=[["exists","","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"],["getName","","String","Name der Datei","Name of the file","Nome do ficheiro"],["length","","long","Größe in Bytes","Size in bytes","Tamanho em bytes"]],vG=[["getMessage","","String","Fehlermeldung als Text","Error message as text","Mensagem de erro como texto"],["printStackTrace","","void","Fehler mit Zeilen ausgeben","Print the error with its lines","Mostrar o erro com as linhas"]],yG=[["getSource","","Object","Welcher Knopf wurde geklickt?","Which button was clicked?","Que botão foi clicado?"],["getActionCommand","","String","Beschriftung des Knopfs","Label of the button","Texto do botão"]],wG=[["setBackground","farbe","void","Hintergrundfarbe, z. B. Color.RED","Background colour, e.g. Color.RED","Cor de fundo, p. ex. Color.RED"],["setForeground","farbe","void","Schriftfarbe","Text colour","Cor do texto"],["setFont","schrift","void",'Schrift, z. B. new Font("Arial", Font.BOLD, 24)','Font, e.g. new Font("Arial", Font.BOLD, 24)','Letra, p. ex. new Font("Arial", Font.BOLD, 24)'],["setVisible","true","void","Anzeigen (true) oder verstecken (false)","Show (true) or hide (false)","Mostrar (true) ou esconder (false)"],["setEnabled","true","void","Anklickbar (true) oder grau (false)","Clickable (true) or greyed out (false)","Clicável (true) ou cinzento (false)"],["setSize","breite, höhe","void","Größe in Pixeln","Size in pixels","Tamanho em píxeis"]],zG=[["add","baustein","Component","Baustein hinzufügen","Add a component","Adicionar um componente"],["setLayout","layout","void","Anordnung, z. B. new FlowLayout()","Layout, e.g. new FlowLayout()","Disposição, p. ex. new FlowLayout()"],["remove","baustein","void","Baustein entfernen","Remove a component","Remover um componente"]],IG=[["setTitle","text","void","Titel oben im Fenster","Title at the top of the window","Título no topo da janela"],["setDefaultCloseOperation","JFrame.EXIT_ON_CLOSE","void","Was beim Schließen passiert","What happens when closing","O que acontece ao fechar"],["setLocationRelativeTo","null","void","Mit null: Fenster in die Mitte","With null: centre the window","Com null: janela no centro"],["setResizable","false","void","Größe änderbar?","Can the size change?","Pode mudar de tamanho?"],["pack","","void","Größe passend zum Inhalt","Size to fit the content","Tamanho ajustado ao conteúdo"],["getContentPane","","JPanel","Inhaltsfläche des Fensters","Content area of the window","Área de conteúdo da janela"],["dispose","","void","Fenster schließen","Close the window","Fechar a janela"]],kG=[["setText","text","void","Text setzen","Set the text","Definir o texto"],["getText","","String","Text holen","Get the text","Obter o texto"]],SG=[["addActionListener","e -> { }","void","Was beim Klick passiert","What happens on click","O que acontece ao clicar"],["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setBorderPainted","false","void","Rahmen zeichnen?","Draw the border?","Desenhar a borda?"]],TG=[["setOpaque","true","void","Hintergrund sichtbar (für Farben)","Show the background (for colours)","Mostrar o fundo (para cores)"],["setHorizontalAlignment","JLabel.CENTER","void","Text links, mittig oder rechts","Text left, centre or right","Texto à esquerda, centro ou direita"]],jG=[["addActionListener","e -> { }","void","Was bei Enter passiert","What happens on Enter","O que acontece ao carregar em Enter"],["setEditable","false","void","Darf man hineinschreiben?","Can you type into it?","Pode-se escrever?"],["setColumns","anzahl","void","Breite in Zeichen","Width in characters","Largura em caracteres"],["requestFocus","","void","Cursor hineinsetzen","Put the cursor into it","Pôr o cursor no campo"]],_G=[["length",null,"int","Anzahl der Elemente (ohne Klammern)","Number of elements (no brackets)","Número de elementos (sem parênteses)"]],ro=[["add","wert","boolean","Element hinten anhängen","Append an element at the end","Acrescentar um elemento no fim"],["get","index","E","Element an Stelle index holen (ab 0)","Get the element at index (from 0)","Obter o elemento na posição index (a partir de 0)"],["size","","int","Anzahl der Elemente","Number of elements","Número de elementos"],["set","index, wert","E","Element an Stelle index ersetzen","Replace the element at index","Substituir o elemento na posição index"],["remove","index","E","Element an Stelle index entfernen","Remove the element at index","Remover o elemento na posição index"],["contains","wert","boolean","Ist das Element in der Liste?","Is the element in the list?","O elemento está na lista?"],["indexOf","wert","int","Stelle des Elements (-1 = nicht da)","Position of the element (-1 = not found)","Posição do elemento (-1 = não existe)"],["isEmpty","","boolean","Ist die Liste leer?","Is the list empty?","A lista está vazia?"],["clear","","void","Alle Elemente entfernen","Remove all elements","Remover todos os elementos"]],oo={Scanner:gG,String:pG,PrintStream:r2,PrintWriter:fG,BufferedReader:xG,FileReader:[["close","","void","Datei schließen","Close the file","Fechar o ficheiro"]],File:bG,Exception:vG,ActionEvent:yG,Component:wG,Container:zG,JFrame:IG,JPanel:[],JButton:SG,JLabel:TG,JTextField:jG,TextHolder:kG,ArrayList:ro,List:ro,LinkedList:ro},CG={JFrame:["Container","Component"],JPanel:["Container","Component"],JButton:["TextHolder","Component"],JLabel:["TextHolder","Component"],JTextField:["TextHolder","Component"],PrintWriter:[]},o2={mbot:[["forward","cm","void","Geradeaus vorwärts fahren","Drive forward","Andar para a frente"],["backward","cm","void","Rückwärts fahren","Drive backward","Andar para trás"],["turnLeft","grad","void","Auf der Stelle nach links drehen","Turn left on the spot","Rodar para a esquerda"],["turnRight","grad","void","Auf der Stelle nach rechts drehen","Turn right on the spot","Rodar para a direita"],["stop","","void","Motoren anhalten","Stop the motors","Parar os motores"],["drive","links, rechts","void","Räder einzeln in Prozent (−100–100), fährt weiter bis stop()","Wheels separately in percent (−100–100), keeps going until stop()","Rodas separadas em percentagem (−100–100), continua até stop()"],["resetTimer","","void","Stoppuhr auf 0 setzen","Reset the stopwatch to 0","Pôr o cronómetro a 0"],["pause","ms","void","Millisekunden warten","Wait milliseconds","Esperar milissegundos"],["setLed","rot, gruen, blau","void","LEDs in einer Farbe (je 0–255)","LEDs in a colour (0–255 each)","LEDs numa cor (0–255 cada)"],["ledOff","","void","LEDs aus","LEDs off","Desligar LEDs"],["led","nr","LED",'Eine LED (0–4), dann .setColor("grün") oder .setColor("aus")','One LED (0–4), then .setColor("green") or .setColor("off")','Um LED (0–4), depois .setColor("green") ou .setColor("off")'],["showText",'"Hallo"',"void","Text auf dem Bildschirm zeigen","Show text on the screen","Mostrar texto no ecrã"],["emotion",'"smile"',"void","Gefühl zeigen: LEDs, Ton, Bewegung (smile, hello, sad …)","Show a feeling: LEDs, sound, motion (smile, hello, sad …)","Mostrar um sentimento: LEDs, som, movimento (smile, hello, sad …)"],["playTone","hz, ms","void","Ton spielen, z. B. playTone(440, 500)","Play a tone, e.g. playTone(440, 500)","Tocar um som, p. ex. playTone(440, 500)"],["getDistance","","int","Abstand vorn in cm (Ultraschall)","Distance ahead in cm (ultrasonic)","Distância à frente em cm (ultrassom)"],["getLine","","int","Liniensensor: 0 = keine Linie, 15 = alle vier auf der Linie","Line sensor: 0 = no line, 15 = all four on the line","Sensor de linha: 0 = sem linha, 15 = os quatro na linha"],["isLineLeft","","boolean","Linie unter dem linken mittleren Fühler","Line under the left middle probe","Linha sob a sonda central esquerda"],["isLineRight","","boolean","Linie unter dem rechten mittleren Fühler","Line under the right middle probe","Linha sob a sonda central direita"],["getBrightness","","int","Helligkeit 0–100","Brightness 0–100","Luminosidade 0–100"],["getLoudness","","int","Lautstärke 0–100","Loudness 0–100","Volume 0–100"],["getColor","","String",'Farbe unter dem mBot2, z. B. "rot"','Colour under the mBot2, e.g. "red"','Cor por baixo do mBot2, p. ex. "red"'],["isButtonA","","boolean","Taste A ist gedrückt","Button A is pressed","O botão A está premido"],["isButtonB","","boolean","Taste B ist gedrückt","Button B is pressed","O botão B está premido"],["isJoystickUp","","boolean","Joystick nach oben gedrückt","Joystick pushed up","Joystick para cima"],["isJoystickDown","","boolean","Joystick nach unten gedrückt","Joystick pushed down","Joystick para baixo"],["isJoystickLeft","","boolean","Joystick nach links gedrückt","Joystick pushed left","Joystick para a esquerda"],["isJoystickRight","","boolean","Joystick nach rechts gedrückt","Joystick pushed right","Joystick para a direita"],["getPitch","","int","Neigung nach vorn (+) oder hinten (−) in Grad","Tilt forward (+) or back (−) in degrees","Inclinação para a frente (+) ou trás (−) em graus"],["getRoll","","int","Neigung zur Seite in Grad","Tilt sideways in degrees","Inclinação lateral em graus"],["isShaken","","boolean","Der mBot2 wird geschüttelt","The mBot2 is being shaken","O mBot2 está a ser abanado"],["getTimer","","double","Stoppuhr in Sekunden","Stopwatch in seconds","Cronómetro em segundos"],["getBattery","","int","Akku in Prozent","Battery in percent","Bateria em percentagem"]],System:[["out",null,"PrintStream","Ausgabe in die Konsole","Output to the console","Saída para a consola"],["in",null,"InputStream","Eingabe von der Tastatur (für Scanner)","Keyboard input (for Scanner)","Entrada do teclado (para Scanner)"],["err",null,"PrintStream","Fehlerausgabe","Error output","Saída de erros"],["currentTimeMillis","","long","Uhrzeit in Millisekunden","Time in milliseconds","Hora em milissegundos"],["exit","0","void","Programm beenden","End the program","Terminar o programa"]],Math:[["random","","double","Zufallszahl von 0 bis unter 1","Random number from 0 to below 1","Número aleatório de 0 até menos de 1"],["abs","zahl","double","Betrag (ohne Minus)","Absolute value (no minus)","Valor absoluto (sem menos)"],["sqrt","zahl","double","Wurzel","Square root","Raiz quadrada"],["pow","basis, exponent","double","Hoch: pow(2, 3) = 8","Power: pow(2, 3) = 8","Potência: pow(2, 3) = 8"],["max","a, b","double","Größere von zwei Zahlen","Larger of two numbers","Maior de dois números"],["min","a, b","double","Kleinere von zwei Zahlen","Smaller of two numbers","Menor de dois números"],["round","zahl","long","Runden","Round","Arredondar"],["floor","zahl","double","Abrunden","Round down","Arredondar para baixo"],["ceil","zahl","double","Aufrunden","Round up","Arredondar para cima"],["PI",null,"double","Kreiszahl π = 3.14159…","Pi π = 3.14159…","Pi π = 3,14159…"]],Integer:[["parseInt","text","int","Text in ganze Zahl umwandeln","Turn text into a whole number","Converter texto em número inteiro"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"],["MAX_VALUE",null,"int","Größte int-Zahl","Largest int value","Maior valor int"],["MIN_VALUE",null,"int","Kleinste int-Zahl","Smallest int value","Menor valor int"]],Double:[["parseDouble","text","double","Text in Kommazahl umwandeln","Turn text into a decimal number","Converter texto em número decimal"],["toString","zahl","String","Zahl in Text umwandeln","Turn a number into text","Converter número em texto"]],String:[["valueOf","wert","String","Wert in Text umwandeln","Turn a value into text","Converter valor em texto"],["format","format, werte","String",'Formatierter Text, z. B. "%.2f"','Formatted text, e.g. "%.2f"','Texto formatado, p. ex. "%.2f"'],["join","trenner, teile","String","Teile mit Trenner verbinden","Join parts with a separator","Juntar partes com um separador"]],Character:[["isDigit","zeichen","boolean","Ist es eine Ziffer?","Is it a digit?","É um algarismo?"],["isLetter","zeichen","boolean","Ist es ein Buchstabe?","Is it a letter?","É uma letra?"],["isUpperCase","zeichen","boolean","Ist es ein Großbuchstabe?","Is it upper case?","É maiúscula?"],["toUpperCase","zeichen","char","In Großbuchstaben","To upper case","Para maiúscula"],["toLowerCase","zeichen","char","In Kleinbuchstaben","To lower case","Para minúscula"]],Files:[["readString",'Path.of("datei.txt")',"String","Ganze Datei als Text lesen","Read the whole file as text","Ler o ficheiro inteiro como texto"],["writeString","pfad, text","Path","Text in Datei schreiben","Write text to a file","Escrever texto num ficheiro"],["readAllLines","pfad","List","Alle Zeilen lesen","Read all lines","Ler todas as linhas"],["exists","pfad","boolean","Gibt es die Datei?","Does the file exist?","O ficheiro existe?"]],Path:[["of",'"datei.txt"',"Path","Pfad zu einer Datei","Path to a file","Caminho para um ficheiro"]],JFrame:[["EXIT_ON_CLOSE",null,"int","Programm endet beim Schließen","Program ends when closed","O programa termina ao fechar"]],JLabel:[["CENTER",null,"int","Mittig","Centred","Ao centro"],["LEFT",null,"int","Links","Left","À esquerda"],["RIGHT",null,"int","Rechts","Right","À direita"]],Font:[["BOLD",null,"int","Fett","Bold","Negrito"],["PLAIN",null,"int","Normal","Plain","Normal"],["ITALIC",null,"int","Kursiv","Italic","Itálico"]],Color:[["RED","Rot","Red","Vermelho"],["GREEN","Grün","Green","Verde"],["BLUE","Blau","Blue","Azul"],["YELLOW","Gelb","Yellow","Amarelo"],["ORANGE","Orange","Orange","Laranja"],["WHITE","Weiß","White","Branco"],["BLACK","Schwarz","Black","Preto"],["GRAY","Grau","Grey","Cinzento"],["LIGHT_GRAY","Hellgrau","Light grey","Cinzento-claro"],["PINK","Rosa","Pink","Rosa"],["CYAN","Türkis","Cyan","Ciano"],["MAGENTA","Magenta","Magenta","Magenta"]].map(([i,e,t,n])=>[i,null,"Color",e,t,n])};function l2(i,e){const[t,n,a,s,r,o]=i;return{name:t,kind:n===null?"field":"method",params:!!n,returns:a,description:e==="de"?s:e==="pt"?o:r}}const Dl=i=>i.replace(/<.*>$/,""),u2=i=>{var e;return(e=/<\s*([^<>,]+?)\s*>$/.exec(i))==null?void 0:e[1]};function m2(i){if(/\[\]$/.test(i))return _G;if(i=Dl(i),/Exception$|^Throwable$/.test(i))return oo.Exception;if(!oo[i])return;const t=new Set,n=[];for(const a of[i,...CG[i]??[]])for(const s of oo[a]??[])t.has(s[0])||(t.add(s[0]),n.push(s));return n}function fV(i,e="de"){return(m2(i)??[]).map(t=>l2(t,e))}const AG="[A-Z]\\w*|int|long|double|float|boolean|char|byte|short|var";function PG(i,e){var a,s;const t=new RegExp(`(?:^|[^\\w.])(${AG})\\s*(?:<([^<>;]*)>)?((?:\\s*\\[\\s*\\])*)\\s+${e}\\s*(?:\\[\\s*\\])*\\s*(=\\s*([^;]*))?(?=[=;,):]|$)`,"gm");let n;for(const r of i.matchAll(t)){let o=r[1];if(o==="var"){const u=r[5]??"";if(o=((a=/^new\s+([A-Z]\w*)/.exec(u))==null?void 0:a[1])??(/^"/.test(u)?"String":""),!o)continue}if(/^(return|new|else|case|throw)$/.test(o))continue;const l=(s=r[2])==null?void 0:s.replace(/\s+/g,"");n=o+(l?`<${l}>`:"")+(r[3]??"").replace(/\s+/g,"")}return n}function OG(i){let e=0,t;const n=/^"(?:[^"\\]|\\.)*"/.exec(i);if(n)t='"',e=n[0].length;else{const r=/^[A-Za-z_]\w*/.exec(i);if(!r)return;t=r[0],e=r[0].length}const a=[{name:t,call:!1,indices:0}],s=(r,o)=>{let l=0;for(;e0;){const n=i[t-1];if(/[\w.]/.test(n))t--;else if(n===")"||n==="]"){const a=n===")"?"(":"[";let s=0,r=t-1;for(;r>=0;r--)if(i[r]===n)s++;else if(i[r]===a&&--s===0)break;if(r<0)return t;t=r}else if(n==='"'){const a=i.lastIndexOf('"',t-2);if(a<0)return t;t=a}else break}return t}const ld=(i,e)=>i.slice(0,Math.max(0,i.length-2*e));function c2(i,e,t,n){const a=e?t==null?void 0:t.statics(Dl(i)):t==null?void 0:t.members(Dl(i));if(a)return a;const s=e?o2[i]:m2(i);return s==null?void 0:s.map(r=>l2(r,n))}function ZG(i,e,t,n){var s,r;const a=(r=(s=c2(i,t,n,"en"))==null?void 0:s.find(o=>o.name===e))==null?void 0:r.returns;return a==="E"?u2(i)??"Object":a}function DG(i,e,t){const n=OG(e);if(!n)return;const[a,...s]=n.links;let r,o=!1;if(n.head==='"')r="String";else if(a.name==="this"&&(t!=null&&t.thisType)&&!a.call&&!a.indices)r=t.thisType;else{if(r=PG(i,a.name),!r&&(o2[a.name]||t!=null&&t.statics(a.name))&&!a.call&&(r=a.name,o=!0),!r)return;a.indices&&(r=ld(r,a.indices))}for(const l of s){const u=ZG(r,l.name,o,t);if(!u)return;r=ld(u,l.indices),o=!1}return{type:r,isStatic:o}}function BG(i,e,t="de",n){const a=i.lastIndexOf(` +`,e-1)+1,s=i.slice(a,e),r=/\.\s*(\w*)$/.exec(s);if(!r)return;const o=r.index,l=s.slice(MG(s,o),o);if(!l||/^\d/.test(l))return;const u=DG(i,l,n);if(!u)return;const m=c2(u.type,u.isStatic,n,t);if(!m)return;const c=u2(u.type)??"Object";return{from:e-r[1].length,members:m.map(d=>d.returns==="E"?{...d,returns:c}:d)}}const ud=Nn.define(),K0=de.define(),LG=he.mark({class:"cm-ph"}),WG=he.mark({class:"cm-err"}),md=he.line({class:"cm-debug-line"});class EG extends J1{constructor(e){super(),this.fix=e}eq(e){return JSON.stringify(e.fix)===JSON.stringify(this.fix)}toDOM(e){const t=document.createElement("button");return t.type="button",t.className="cm-quickfix",t.textContent="💡",t.dataset.tip=this.fix.title,t.setAttribute("aria-label",this.fix.title),t.addEventListener("mousedown",n=>n.preventDefault()),t.addEventListener("click",()=>{const{from:n,to:a,insert:s}=this.fix;a>e.state.doc.length||(e.dispatch({changes:{from:n,to:a,insert:s},selection:{anchor:n+s.length},userEvent:"input"}),e.focus())}),t}ignoreEvent(){return!0}}function cd(i,e){const t=i.doc.length,n=[];e.current!==void 0&&e.currentr===md;n.sort((r,o)=>r.from-o.from||Number(a(o.deco))-Number(a(r.deco))||r.to-o.to);const s=new i1;for(const r of n)s.add(r.from,r.to,r.deco);return s.finish()}const N1=Et.define({create:()=>({marks:{placeholders:[],problems:[]},decorations:he.none}),update(i,e){for(const a of e.effects)if(a.is(K0))return{marks:a.value,decorations:cd(e.state,a.value)};if(!e.docChanged)return i;const t=a=>({from:e.changes.mapPos(a.from,1),to:e.changes.mapPos(a.to,-1)}),n={...i.marks,placeholders:i.marks.placeholders.map(t).filter(a=>a.fromQ.decorations.from(i,e=>e.decorations)});class NG extends un{constructor(){super(...arguments);y(this,"elementClass","cm-error-line")}}const JG=new NG,FG=yi.compute([N1],i=>{const e=[...new Set(i.field(N1).marks.errorLines??[])].filter(t=>tt-n);return ie.of(e.map(t=>JG.range(i.doc.line(t+1).from)))}),dd={ClassDeclaration:"class",InterfaceDeclaration:"class",EnumDeclaration:"class",MethodDeclaration:"method",ConstructorDeclaration:"method",ForStatement:"loop",EnhancedForStatement:"loop",WhileStatement:"loop",DoStatement:"loop",IfStatement:"if",SwitchStatement:"if",TryStatement:"try"};function RG(i,e){const t=i.lineAt(e);if(!t.text.trimEnd().endsWith("{"))return t.number;let n=0;for(let a=t.number;a<=i.lines;a++)for(const s of i.line(a).text.replace(/"(?:[^"\\]|\\.)*"|\/\/.*$/g,""))if(s==="{")n++;else if(s==="}"&&--n===0)return a;return t.number}function GG(i){const{state:e}=i,t=e.doc,n=i.contentDOM.querySelector(".cm-line");if(!n)return[];const a=getComputedStyle(n),s=i.scrollDOM.getBoundingClientRect(),r=i.contentDOM.getBoundingClientRect(),o=s.left-i.scrollDOM.scrollLeft,l=s.top-i.scrollDOM.scrollTop,u=r.left-o+parseFloat(a.paddingLeft)+parseFloat(a.borderLeftWidth),m=r.right-o-6,c=i.documentTop-l,d=e.tabSize,h=i.defaultCharacterWidth,g=(z,I,k,S)=>{const _=t.line(I),M=Qi(/^\s*/.exec(_.text)[0],d),O=u+M*h-7,P=i.lineBlockAt(_.from).top+c+S,C=i.lineBlockAt(t.line(k).from).bottom+c-S;return new cr(z,O,P,Math.max(m-O,20),Math.max(C-P,4))},f=[],x=Xe(e).topNode,b=[];for(let z=x.firstChild;z;z=z.nextSibling){if(dd[z.name]==="class"||z.name==="MethodDeclaration"){b.length=0;break}z.name!=="ImportDeclaration"&&z.name!=="PackageDeclaration"&&!z.name.includes("Comment")&&b.push(z)}b.length&&f.push(g("cm-scope cm-scope-method",t.lineAt(b[0].from).number,t.lineAt(b[b.length-1].to).number,1));const v=[];Xe(e).iterate({from:i.viewport.from,to:i.viewport.to,enter:z=>{var _;const I=dd[z.name];if(!I||z.name==="IfStatement"&&((_=z.node.parent)==null?void 0:_.name)==="IfStatement")return;const k=t.lineAt(z.from).number,S=Math.max(t.lineAt(z.to).number,RG(t,z.from));v.push({kind:I,from:k,to:S}),f.push(g(`cm-scope cm-scope-${I}`,k,S,1))}});for(let z=1;z<=t.lines;z++){let I;for(const S of v)S.from<=z&&z<=S.to&&(!I||S.from>=I.from)&&(I=S);if(!I||I.kind!=="loop"&&I.kind!=="if"||z===I.from)continue;const k=t.line(z).text.trim();!k||k.startsWith("}")||k.endsWith("{")||k.startsWith("//")||k.startsWith("case ")||k.startsWith("default")||f.push(g("cm-scope cm-scope-method cm-scope-stmt",z,z,2))}const w=e.field(N1).marks.lines;return w&&w.fromi.docChanged||i.viewportChanged||i.geometryChanged||Xe(i.state)!==Xe(i.startState)||i.transactions.some(e=>e.effects.some(t=>t.is(K0)))});class QG extends un{toDOM(){const e=document.createElement("span");return e.className="cm-breakpoint",e}}const Bl=new QG,g2=de.define(),p2=de.define(),Ll=Et.define({create:()=>ie.empty,update(i,e){i=i.map(e.changes);for(const t of e.effects){if(t.is(p2)&&(i=ie.of(t.value.map(a=>Bl.range(a)),!0)),!t.is(g2))continue;let n=!1;i.between(t.value,t.value,()=>{n=!0}),i=n?i.update({filter:a=>a!==t.value}):i.update({add:[Bl.range(t.value)]})}return i}});function qG(i){const t={mousedown:(n,a)=>{const s=i.breakpointLine(n.state.doc.lineAt(a.from).number-1);return s===void 0||s>=n.state.doc.lines?!1:(n.dispatch({effects:g2.of(n.state.doc.line(s+1).from)}),queueMicrotask(()=>i.onBreakpoints()),!0)}};return[Ll,DN({class:"cm-breakpoint-gutter",markers:n=>n.state.field(Ll),initialSpacer:()=>Bl,domEventHandlers:t}),FN({domEventHandlers:t})]}function eu(i,e){return i.field(N1).marks.placeholders.find(t=>e>=t.from&&e<=t.to)}const UG=Q.inputHandler.of((i,e,t,n)=>{if(e!==t)return!1;const a=eu(i.state,e);return a?(i.dispatch({changes:{from:a.from,to:a.to,insert:n},selection:{anchor:a.from+n.length},userEvent:"input.type"}),!0):!1}),YG=re.transactionFilter.of(i=>{if(!i.docChanged||!(i.isUserEvent("input.paste")||i.isUserEvent("input.drop")))return i;const e=[];if(i.changes.iterChanges((a,s,r,o,l)=>e.push({from:a,to:s,text:l.toString()})),e.length!==1||e[0].from!==e[0].to)return i;const t=eu(i.startState,e[0].from);if(!t)return i;const{text:n}=e[0];return{changes:{from:t.from,to:t.to,insert:n},selection:{anchor:t.from+n.length},userEvent:"input.paste",scrollIntoView:!0}}),hd=i=>e=>{const t=e.state.selection.main;if(!t.empty)return!1;const n=eu(e.state,t.head);return!n||(i?t.head>=n.to:t.head<=n.from)?!1:(e.dispatch({changes:{from:n.from,to:n.to},selection:{anchor:n.from},userEvent:"delete"}),!0)},$G=Q.updateListener.of(i=>{if(!i.selectionSet||i.docChanged||!i.transactions.some(n=>n.isUserEvent("select.pointer")))return;const e=i.state.selection.main;if(!e.empty)return;const t=i.state.field(N1).marks.placeholders.find(n=>e.head>n.from&&e.headi.view.dispatch({selection:Z.range(t.from,t.to)}))}),XG=hr.define([{tag:[W.keyword,W.controlKeyword,W.definitionKeyword,W.modifier,W.operatorKeyword,W.standard(W.typeName),W.bool,W.null],color:"var(--syn-keyword)",fontWeight:"600"},{tag:[W.string,W.character],color:"var(--syn-string)"},{tag:W.number,color:"var(--syn-number)"},{tag:[W.lineComment,W.blockComment],color:"var(--syn-comment)",fontStyle:"italic"}]);function KG(i){const e=i,t=`\${// ${e.code}}`,n=(a,s,r,o=0)=>q0(s,{label:a,detail:r,type:"keyword",boost:o});return[n("if",`if (\${${e.condition}}) { ${t} }`,e.branch,2),n("if … else",`if (\${${e.condition}}) { ${t} @@ -67346,16 +67352,16 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis } }`,e.switchCase,1),n("System.out.println","System.out.println(${});",e.output,3),...["syso","sysout","sout"].map(a=>n(a,"System.out.println(${});",`System.out.println · ${e.output}`,2)),...["main","psvm"].map(a=>n(a,`public static void main(String[] args) { ${t} -}`,"public static void main(String[] args)",2)),YG(e.input),n("scanner.nextInt","int ${zahl} = scanner.nextInt();",e.input,1),n("scanner.next","String ${text} = scanner.next();",e.input),n("scanner.nextDouble","double ${wert} = scanner.nextDouble();",e.input),n("try … catch",`try { +}`,"public static void main(String[] args)",2)),tH(e.input),n("scanner.nextInt","int ${zahl} = scanner.nextInt();",e.input,1),n("scanner.next","String ${text} = scanner.next();",e.input),n("scanner.nextDouble","double ${wert} = scanner.nextDouble();",e.input),n("try … catch",`try { ${t} } catch (\${Exception} e) { \${// ${e.code}} }`,"try … catch",1),n("public class",`public class \${Main} { ${t} -}`,"public class",-2),...["import java.util.Scanner;","import javax.swing.*;","import java.awt.*;","import java.awt.event.*;"].map((a,s)=>n(a,a,"import",1-s)),...["int","double","String","boolean","char","long","final","break;","continue;","return","true","false","else","null","new","public","private","static","void","class","extends","implements","interface","this"].map(a=>({label:a,type:"keyword",boost:-1})),...["Math","JFrame","JButton","JLabel","JTextField","ActionListener","ActionEvent","Color","FlowLayout","GridLayout","BorderLayout"].map(a=>({label:a,type:"type",boost:-2})),...["Math.random()","Math.abs(","Math.sqrt(","Math.max(","Math.min(",".length()",".equals("].map(a=>({label:a,type:"function",boost:-2}))]}function UG(i){if(/^\s*import\s+java\.util\.(?:Scanner|\*)\s*;/m.test(i))return;const e=/^\s*package\s+[\w.]+\s*;[^\n]*\n?/.exec(i),t=e?e[0].length:0,n=i.slice(t).replace(/^\s*\n/,"");return{from:t,insert:`import java.util.Scanner; +}`,"public class",-2),...["import java.util.Scanner;","import javax.swing.*;","import java.awt.*;","import java.awt.event.*;"].map((a,s)=>n(a,a,"import",1-s)),...["int","double","String","boolean","char","long","final","break;","continue;","return","true","false","else","null","new","public","private","static","void","class","extends","implements","interface","this"].map(a=>({label:a,type:"keyword",boost:-1})),...["Math","JFrame","JButton","JLabel","JTextField","ActionListener","ActionEvent","Color","FlowLayout","GridLayout","BorderLayout"].map(a=>({label:a,type:"type",boost:-2})),...["Math.random()","Math.abs(","Math.sqrt(","Math.max(","Math.min(",".length()",".equals("].map(a=>({label:a,type:"function",boost:-2}))]}function eH(i){if(/^\s*import\s+java\.util\.(?:Scanner|\*)\s*;/m.test(i))return;const e=/^\s*package\s+[\w.]+\s*;[^\n]*\n?/.exec(i),t=e?e[0].length:0,n=i.slice(t).replace(/^\s*\n/,"");return{from:t,insert:`import java.util.Scanner; ${/^\s*import\b/.test(n)?"":` -`}`}}function YG(i){const e=V0("Scanner ${scanner} = new Scanner(System.in);",{label:"Scanner scanner = new Scanner(System.in);",detail:i,type:"keyword",boost:3}),t=e.apply;return{...e,apply(n,a,s,r){const o=UG(n.state.doc.toString());if(!o)return t(n,a,s,r);const l=n.state.changes(o);n.dispatch({changes:l,userEvent:"input.complete"}),t(n,a,l.mapPos(s),l.mapPos(r,1))}}}function $G(i){const t={label:i.kind==="field"?i.name:`${i.name}(${i.params?"…":""})`,detail:i.returns==="void"||!i.returns?i.description:i.description?`${i.returns} · ${i.description}`:i.returns,type:i.kind==="field"?"property":"method"};return i.kind==="field"?{...t,apply:i.name}:i.params?V0(`${i.name}(\${})`,t):{...t,apply:`${i.name}()`}}function XG(){const i=r1();return i==="de"?"de":i==="pt-PT"?"pt":"en"}function KG(i){const e=new Set;for(const t of i.matchAll(/\b(?:int|long|double|float|boolean|char|String|Scanner)(?:\s*\[\s*\])*\s+([A-Za-z_]\w*)/g))e.add(t[1]);return[...e].map(t=>({label:t,type:"variable",boost:1}))}class eH{constructor(e,t,n){y(this,"view");y(this,"readOnly",new Vi);const a=r=>{var h,g;const o=r.matchBefore(/[\w.]+/);if(!o||o.from===o.to&&!r.explicit)return null;const l=r.state.doc.lineAt(r.pos),u=l.text.slice(0,r.pos-l.from);if(/\/\//.test(u)||(((h=u.match(/"/g))==null?void 0:h.length)??0)%2===1)return null;const m=PG(r.state.doc.toString(),r.pos,XG(),(g=t.ownTypes)==null?void 0:g.call(t,r.pos));if(m)return{from:m.from,options:m.members.map((f,x)=>({...$G(f),boost:50-x})),validFor:/^\w*$/};const c=/\bvoid\s+[\w.]*$/.test(u),d=qG(t.words()).filter(f=>!(c&&(f.label==="main"||f.label==="psvm")));return{from:o.from,options:[...d,...KG(r.state.doc.toString())],validFor:/^\w*$/}},s=[RG(t),NN(),QR(),wJ(QG),$i.of(" "),re.tabSize.of(4),xJ(),AJ(),yF(),N1,LG,JG,GG,HG,VG,this.readOnly.of(re.readOnly.of(!1)),PF({override:[a],icons:!1}),u1.highest(Bi.of([{key:"Mod-z",run:()=>(t.onUndo(!1),!0),preventDefault:!0},{key:"Mod-Shift-z",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Mod-y",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Backspace",run:ud(!1)},{key:"Delete",run:ud(!0)},{key:"F2",run:r=>{var o;return((o=t.onRename)==null?void 0:o.call(t,r.state.selection.main.head))??!1},preventDefault:!0}])),Bi.of([...kF,...Tf,MR,...OR]),Q.domEventHandlers({contextmenu:(r,o)=>{var u;const l=o.posAtCoords({x:r.clientX,y:r.clientY});return l===null||!((u=t.onRename)!=null&&u.call(t,l,{x:r.clientX,y:r.clientY}))?!1:(r.preventDefault(),!0)}}),Q.contentAttributes.of({"aria-label":n,autocapitalize:"off",autocorrect:"off",spellcheck:"false"}),Q.updateListener.of(r=>{r.docChanged&&!r.transactions.some(o=>o.annotation(sd))?queueMicrotask(()=>t.onChange()):r.selectionSet&&!r.docChanged&&queueMicrotask(()=>t.onCaret())})];this.view=new Q({parent:e,state:re.create({doc:"",extensions:s})})}get text(){return this.view.state.doc.toString()}get caret(){return this.view.state.selection.main.head}get hasFocus(){return this.view.hasFocus}get breakpoints(){const e=new Set,t=this.view.state.doc;return this.view.state.field(Bl).between(0,t.length,n=>{e.add(t.lineAt(n).number-1)}),e}setBreakpoints(e){const t=this.view.state.doc,n=[...new Set(e)].filter(a=>a>=0&&at.line(a+1).from);this.view.dispatch({effects:c2.of(n)})}lineAt(e){return this.view.state.doc.lineAt(Math.min(e,this.view.state.doc.length)).number-1}setText(e){const t=Math.min(this.caret,e.length),n=this.text;let a=0;for(;a({from:n.from,to:n.to,insert:t})),userEvent:"input.rename"})}indent(){const e=this.view.state.doc,t=this.view.state.selection.main,n=t.empty?1:e.lineAt(t.from).number,a=t.empty?e.lines:e.lineAt(t.to).number,s=De.of(lG(e.toString(),n,a),e.length),r=s.apply(e),o=r.lineAt(s.mapPos(e.line(n).from,-1)).number,l=r.lineAt(s.mapPos(e.line(a).to,1)).number,u=[];t2(r.toString(),o,l).split(` -`).forEach((c,d)=>{const h=r.line(d+1),g=/^\s*/.exec(h.text)[0],f=/^\s*/.exec(c)[0];g!==f&&u.push({from:h.from,to:h.from+g.length,insert:f})});const m=s.compose(De.of(u,r.length));m.empty||this.view.dispatch({changes:m,userEvent:"input.indent"}),this.view.focus()}setMarks(e,t){const n=[$0.of(e)];e.current!==void 0&&e.current({label:t,type:"variable",boost:1}))}class sH{constructor(e,t,n){y(this,"view");y(this,"readOnly",new Vi);const a=r=>{var h,g;const o=r.matchBefore(/[\w.]+/);if(!o||o.from===o.to&&!r.explicit)return null;const l=r.state.doc.lineAt(r.pos),u=l.text.slice(0,r.pos-l.from);if(/\/\//.test(u)||(((h=u.match(/"/g))==null?void 0:h.length)??0)%2===1)return null;const m=BG(r.state.doc.toString(),r.pos,iH(),(g=t.ownTypes)==null?void 0:g.call(t,r.pos));if(m)return{from:m.from,options:m.members.map((f,x)=>({...nH(f),boost:50-x})),validFor:/^\w*$/};const c=/\bvoid\s+[\w.]*$/.test(u),d=KG(t.words()).filter(f=>!(c&&(f.label==="main"||f.label==="psvm")));return{from:o.from,options:[...d,...aH(r.state.doc.toString())],validFor:/^\w*$/}},s=[qG(t),HN(),XR(),TJ(XG),$i.of(" "),re.tabSize.of(4),zJ(),DJ(),SF(),N1,FG,VG,UG,YG,$G,this.readOnly.of(re.readOnly.of(!1)),BF({override:[a],icons:!1}),u1.highest(Bi.of([{key:"Mod-z",run:()=>(t.onUndo(!1),!0),preventDefault:!0},{key:"Mod-Shift-z",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Mod-y",run:()=>(t.onUndo(!0),!0),preventDefault:!0},{key:"Backspace",run:hd(!1)},{key:"Delete",run:hd(!0)},{key:"F2",run:r=>{var o;return((o=t.onRename)==null?void 0:o.call(t,r.state.selection.main.head))??!1},preventDefault:!0}])),Bi.of([...CF,...Af,WR,...LR]),Q.domEventHandlers({contextmenu:(r,o)=>{var u;const l=o.posAtCoords({x:r.clientX,y:r.clientY});return l===null||!((u=t.onRename)!=null&&u.call(t,l,{x:r.clientX,y:r.clientY}))?!1:(r.preventDefault(),!0)}}),Q.contentAttributes.of({"aria-label":n,autocapitalize:"off",autocorrect:"off",spellcheck:"false"}),Q.updateListener.of(r=>{r.docChanged&&!r.transactions.some(o=>o.annotation(ud))?queueMicrotask(()=>t.onChange()):r.selectionSet&&!r.docChanged&&queueMicrotask(()=>t.onCaret())})];this.view=new Q({parent:e,state:re.create({doc:"",extensions:s})})}get text(){return this.view.state.doc.toString()}get caret(){return this.view.state.selection.main.head}get hasFocus(){return this.view.hasFocus}get breakpoints(){const e=new Set,t=this.view.state.doc;return this.view.state.field(Ll).between(0,t.length,n=>{e.add(t.lineAt(n).number-1)}),e}setBreakpoints(e){const t=this.view.state.doc,n=[...new Set(e)].filter(a=>a>=0&&at.line(a+1).from);this.view.dispatch({effects:p2.of(n)})}lineAt(e){return this.view.state.doc.lineAt(Math.min(e,this.view.state.doc.length)).number-1}setText(e){const t=Math.min(this.caret,e.length),n=this.text;let a=0;for(;a({from:n.from,to:n.to,insert:t})),userEvent:"input.rename"})}indent(){const e=this.view.state.doc,t=this.view.state.selection.main,n=t.empty?1:e.lineAt(t.from).number,a=t.empty?e.lines:e.lineAt(t.to).number,s=De.of(hG(e.toString(),n,a),e.length),r=s.apply(e),o=r.lineAt(s.mapPos(e.line(n).from,-1)).number,l=r.lineAt(s.mapPos(e.line(a).to,1)).number,u=[];s2(r.toString(),o,l).split(` +`).forEach((c,d)=>{const h=r.line(d+1),g=/^\s*/.exec(h.text)[0],f=/^\s*/.exec(c)[0];g!==f&&u.push({from:h.from,to:h.from+g.length,insert:f})});const m=s.compose(De.of(u,r.length));m.empty||this.view.dispatch({changes:m,userEvent:"input.indent"}),this.view.focus()}setMarks(e,t){const n=[K0.of(e)];e.current!==void 0&&e.current{const n=document.createElement("script");n.src=i,n.onload=()=>e(),n.onerror=()=>t(new Error(i)),document.head.append(n)})}function aH(i){return ln??(ln=(async()=>{await iH(tH),await cheerpjInit({status:"none"}),cheerpjCreateDisplay(-1,-1,i);const e=await fetch(md);if(!e.ok)throw new Error(md);if(cheerpOSAddStringFile(Fs,new Uint8Array(await e.arrayBuffer())),cheerpOSAddStringFile("/str/VisuStructRunner.java",nH),await cheerpjRunMain("com.sun.tools.javac.Main",Fs,"/str/VisuStructRunner.java","-d","/files/")!==0)throw new Error("javac");return await(await cheerpjRunLibrary("/files/")).VisuStructRunner})()),ln.catch(()=>ln=void 0),ln}function sH(i){const e=i.match(/public\s+(?:final\s+)?class\s+(\w+)/)??i.match(/\bclass\s+(\w+)/);return e?e[1]:"Main"}function rH(i){return/\bFiles\s*\.\s*\w+\s*\(|\bnew\s+(?:File|FileReader|FileWriter|PrintWriter|BufferedReader)\s*\(/.test(i)}function oH(i,e){return i.replace(/"([\w.-]+\.(?:txt|csv|json))"/g,`"${e}$1"`)}function d2(i){i=i.replace(/\bFiles\s*\.\s*readString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g,'new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get($1)), "UTF-8")');const e=/\bFiles\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,/g;let t="",n=0;for(let a=e.exec(i);a;a=e.exec(i)){let s=1,r=a.index+a[0].length,o=!1;for(;r0;r++){const u=i[r];o?u==="\\"?r++:u==='"'&&(o=!1):u==='"'?o=!0:u==="("?s++:u===")"&&s--}if(s>0)break;const l=i.slice(a.index+a[0].length,r-1).trim();t+=i.slice(n,a.index)+`java.nio.file.Files.write(java.nio.file.Paths.get(${a[1]}), (${l}).getBytes("UTF-8"))`,n=r,e.lastIndex=r}return t+i.slice(n)}function lH(i){if(/\bclass\s+\w+/.test(i))return i;const e=[];i=i.replace(/^[ \t]*import\s+[\w.]+(?:\.\*)?\s*;[ \t]*$/gm,a=>(e.push(a.trim()),""));const t=[...e,"import java.util.*;","import java.awt.*;","import java.awt.event.*;","import javax.swing.*;"].join(` +`;let ln,Hs=0;function lH(i){return new Promise((e,t)=>{const n=document.createElement("script");n.src=i,n.onload=()=>e(),n.onerror=()=>t(new Error(i)),document.head.append(n)})}function uH(i){return ln??(ln=(async()=>{await lH(rH),await cheerpjInit({status:"none"}),cheerpjCreateDisplay(-1,-1,i);const e=await fetch(gd);if(!e.ok)throw new Error(gd);if(cheerpOSAddStringFile(Gs,new Uint8Array(await e.arrayBuffer())),cheerpOSAddStringFile("/str/VisuStructRunner.java",oH),await cheerpjRunMain("com.sun.tools.javac.Main",Gs,"/str/VisuStructRunner.java","-d","/files/")!==0)throw new Error("javac");return await(await cheerpjRunLibrary("/files/")).VisuStructRunner})()),ln.catch(()=>ln=void 0),ln}function mH(i){const e=i.match(/public\s+(?:final\s+)?class\s+(\w+)/)??i.match(/\bclass\s+(\w+)/);return e?e[1]:"Main"}function cH(i){return/\bFiles\s*\.\s*\w+\s*\(|\bnew\s+(?:File|FileReader|FileWriter|PrintWriter|BufferedReader)\s*\(/.test(i)}function dH(i,e){return i.replace(/"([\w.-]+\.(?:txt|csv|json))"/g,`"${e}$1"`)}function f2(i){i=i.replace(/\bFiles\s*\.\s*readString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g,'new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get($1)), "UTF-8")');const e=/\bFiles\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,/g;let t="",n=0;for(let a=e.exec(i);a;a=e.exec(i)){let s=1,r=a.index+a[0].length,o=!1;for(;r0;r++){const u=i[r];o?u==="\\"?r++:u==='"'&&(o=!1):u==='"'?o=!0:u==="("?s++:u===")"&&s--}if(s>0)break;const l=i.slice(a.index+a[0].length,r-1).trim();t+=i.slice(n,a.index)+`java.nio.file.Files.write(java.nio.file.Paths.get(${a[1]}), (${l}).getBytes("UTF-8"))`,n=r,e.lastIndex=r}return t+i.slice(n)}function hH(i){if(/\bclass\s+\w+/.test(i))return i;const e=[];i=i.replace(/^[ \t]*import\s+[\w.]+(?:\.\*)?\s*;[ \t]*$/gm,a=>(e.push(a.trim()),""));const t=[...e,"import java.util.*;","import java.awt.*;","import java.awt.event.*;","import javax.swing.*;"].join(` `)+` `;if(/\bstatic\s+void\s+main\s*\(/.test(i))return`${t}public class Main { ${i} } -`;const n=rH(i)?" throws Exception":"";return`${t}public class Main { +`;const n=cH(i)?" throws Exception":"";return`${t}public class Main { public static void main(String[] args)${n} { ${i} } } -`}async function uH(){ln&&await(await ln).closeAll()}async function h2(i,e,t){const n=new Map;for(const a of(await i.list(e)).split(` -`).filter(Boolean)){const s=await i.read(e+a);t.get(a)!==s&&n.set(a,s)}return n}function mH(i,e){const t=Rs,n=`/files/run${t}/data/`,a=new Map([...Th(),...i]);let s=!1;const r=async()=>{if(!(s||Rs!==t||!ln)){try{const l=await ln,u=await h2(l,n,a);for(const[m,c]of u)a.set(m,c);if(u.size&&e(u),await l.openWindows()===0)return}catch{return}o=window.setTimeout(r,1500)}};let o=window.setTimeout(r,1500);return()=>{s=!0,window.clearTimeout(o)}}async function cH(i,e){const t=await ln,n=`/files/run${++Rs}/`;await t.mkdirs(n);const a=`${n}data/`,s=new Map(Th());await t.mkdirs(a);for(const[u,m]of s)cheerpOSAddStringFile(`/str/${u}`,m),await t.copy(`/str/${u}`,a+u);const r=lH(d2(oH(i,a))),o=sH(r);if(cheerpOSAddStringFile(`/str/${o}.java`,r),await cheerpjRunMain("com.sun.tools.javac.Main",Fs,`/str/${o}.java`,"-d",n,"-encoding","UTF-8")!==0)return{result:"compile-error",files:new Map};e(),await t.run(n,o);const l=await h2(t,a,s);return await t.openWindows()>0?{result:"windows",files:l}:(await new Promise(u=>setTimeout(u,500)),{result:await t.openWindows()>0?"windows":"finished",files:l})}async function dV(i,e,t){const n=await ln,a=`/files/run${++Rs}/`,s=`${a}src/`,r=[];for(const l of i){const u=`${s}${l.pkg?l.pkg.replace(/\./g,"/")+"/":""}${l.name}.java`;await n.write(u,d2(l.text)),r.push(u)}const o=`${a}classes/`;return await n.mkdirs(o),await cheerpjRunMain("com.sun.tools.javac.Main",Fs,...r,"-d",o,"-encoding","UTF-8")!==0?{result:"compile-error",files:new Map}:(t(),await n.run(o,e),await n.openWindows()>0?{result:"windows",files:new Map}:(await new Promise(l=>setTimeout(l,500)),{result:await n.openWindows()>0?"windows":"finished",files:new Map}))}const Gs=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record yield".split(" ")),cd=/[\p{L}\p{N}_$]/u,dH=/[\p{L}_$]/u;function G1(i){const e=[];let t=0;for(;t{if(!(s||Hs!==t||!ln)){try{const l=await ln,u=await x2(l,n,a);for(const[m,c]of u)a.set(m,c);if(u.size&&e(u),await l.openWindows()===0)return}catch{return}o=window.setTimeout(r,1500)}};let o=window.setTimeout(r,1500);return()=>{s=!0,window.clearTimeout(o)}}async function fH(i,e){const t=await ln,n=`/files/run${++Hs}/`;await t.mkdirs(n);const a=`${n}data/`,s=new Map(Ah());await t.mkdirs(a);for(const[u,m]of s)cheerpOSAddStringFile(`/str/${u}`,m),await t.copy(`/str/${u}`,a+u);const r=hH(f2(dH(i,a))),o=mH(r);if(cheerpOSAddStringFile(`/str/${o}.java`,r),await cheerpjRunMain("com.sun.tools.javac.Main",Gs,`/str/${o}.java`,"-d",n,"-encoding","UTF-8")!==0)return{result:"compile-error",files:new Map};e(),await t.run(n,o);const l=await x2(t,a,s);return await t.openWindows()>0?{result:"windows",files:l}:(await new Promise(u=>setTimeout(u,500)),{result:await t.openWindows()>0?"windows":"finished",files:l})}async function xV(i,e,t){const n=await ln,a=`/files/run${++Hs}/`,s=`${a}src/`,r=[];for(const l of i){const u=`${s}${l.pkg?l.pkg.replace(/\./g,"/")+"/":""}${l.name}.java`;await n.write(u,f2(l.text)),r.push(u)}const o=`${a}classes/`;return await n.mkdirs(o),await cheerpjRunMain("com.sun.tools.javac.Main",Gs,...r,"-d",o,"-encoding","UTF-8")!==0?{result:"compile-error",files:new Map}:(t(),await n.run(o,e),await n.openWindows()>0?{result:"windows",files:new Map}:(await new Promise(l=>setTimeout(l,500)),{result:await n.openWindows()>0?"windows":"finished",files:new Map}))}const Vs=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record yield".split(" ")),pd=/[\p{L}\p{N}_$]/u,xH=/[\p{L}_$]/u;function G1(i){const e=[];let t=0;for(;tt.name===e&&!K0(i,t.from))}function K0(i,e){let t=e-1;for(;t>=0&&(i[t]===" "||i[t]===" ");)t--;return i[t]==="."}function hH(i,e){const t=G1(i).find(n=>e>=n.from&&e<=n.to);if(!(!t||Gs.has(t.name)||K0(i,t.from)))return t}function gH(i,e,t){const n=Ri(i,e);let a="",s=0;for(const r of n)a+=i.slice(s,r.from)+t,s=r.to;return{text:a+i.slice(s),count:n.length}}function eu(i){const e=[i.caption],t=n=>{for(const a of n){e.push(a.textLines.join(` -`)),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])e.push(s.name),t(s.elements)}};return t(i.elements),e}function pH(i,e,t){let n=0;const a=o=>{const l=gH(o,e,t);return n+=l.count,l.text},s=o=>o.map(l=>({...l,textLines:a(l.textLines.join(` +`;)t+=i[t]==="\\"?2:1;t++}else if(xH.test(n)){const a=t;for(;tt.name===e&&!tu(i,t.from))}function tu(i,e){let t=e-1;for(;t>=0&&(i[t]===" "||i[t]===" ");)t--;return i[t]==="."}function bH(i,e){const t=G1(i).find(n=>e>=n.from&&e<=n.to);if(!(!t||Vs.has(t.name)||tu(i,t.from)))return t}function vH(i,e,t){const n=Ri(i,e);let a="",s=0;for(const r of n)a+=i.slice(s,r.from)+t,s=r.to;return{text:a+i.slice(s),count:n.length}}function nu(i){const e=[i.caption],t=n=>{for(const a of n){e.push(a.textLines.join(` +`)),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])e.push(s.name),t(s.elements)}};return t(i.elements),e}function yH(i,e,t){let n=0;const a=o=>{const l=vH(o,e,t);return n+=l.count,l.text},s=o=>o.map(l=>({...l,textLines:a(l.textLines.join(` `)).split(` -`),...l.loopBody?{loopBody:s(l.loopBody)}:{},...l.cases?{cases:l.cases.map(u=>({name:a(u.name),elements:s(u.elements)}))}:{}}));return{doc:{...i,caption:a(i.caption),elements:s(i.elements)},count:n}}function tu(i){const e=new Set,t=new Set,n=new Set;for(const a of i){const s=G1(a).filter(r=>!K0(a,r.from));s.forEach((r,o)=>{if(Gs.has(r.name)||r.name==="ø")return;const l=a.slice(r.to),u=s[o+1],m=u?a.slice(r.to,u.from):"",c=u!==void 0&&!Gs.has(u.name)&&/^(?:\s*\[\s*\])*[ \t]+$/.test(m);c&&/^\s*(?:[=;,):]|$)/.test(a.slice(u.to))&&n.add(u.name);const d=new RegExp("^\\p{Lu}","u").test(r.name)&&/^\s*\./.test(l);/^\s*\(/.test(l)||d||c?t.add(r.name):e.add(r.name)})}return[...e].filter(a=>!t.has(a)||n.has(a))}function fH(i){return eu(i).flatMap(e=>G1(e).map(t=>t.name))}function xH(i,e){return eu(i).reduce((t,n)=>t+Ri(n,e).length,0)}function bH(i){return tu(eu(i))}function ro(i){return tu([i.textLines.join(` -`)])}function dd(i,e,t){if(e==="")return{ok:!1,reason:"empty"};if(e===i)return{ok:!1,reason:"same"};if(!/^[\p{L}_$][\p{L}\p{N}_$]*$/u.test(e))return{ok:!1,reason:"invalid"};if(Gs.has(e))return{ok:!1,reason:"keyword"};for(const n of t)if(n===e)return{ok:!0,warning:"exists"};return{ok:!0}}const mn=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function g2(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=i.names.length===1;t.innerHTML=`