diff --git a/CHANGELOG.md b/CHANGELOG.md
index f72da106..feab50a5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog.
### Added
+- **Web 0.13.4, Pseudocode switch in the toolbar and simulation of pseudocode:** the checkbox „Pseudocode“ now sits in the toolbar left of ⇄ (before it was only in the code window). For a diagram marked as pseudocode (e.g. „Tee kochen“ in Lektion 1) the simulation no longer runs the boxes as Java: it only highlights them one after another, and for a condition („Regnet es?“), a loop or a Fallauswahl it asks for the answer (true/false or ja/nein, case name). Programmieren shows no Java errors for pseudocode. Lektion 1 now mentions spaghetti code right where it says a Struktogramm has no jumps.
- **Web 0.13.3, Struktogramm and Elemente in the code block colours:** the Struktogramm uses the same soft colours as the blocks in Programmieren: statements yellow like the method, loops (for, while, do-until, endless) pink, Verzweigung and Fallauswahl blue; elements inside a loop or branch take its colour, so code and diagram side by side show the matching blocks at a glance. The boxes in „Elemente“ get the same colours. The setting is now called „Blöcke farbig“ and switches code, diagram and Elemente together; a colour stored in the file still wins, and exports stay white. Lesson 1 uses the same colours (statements yellow, branch blue, loop pink; the sequence itself has no colour, it is the row of statements).
- **Web 0.13.1, divider between Struktogramm and Programmieren always draggable:** with four open columns (lessons, Struktogramm, Programmieren, „mBot2 live“) the diagram sat at its minimum width and the divider barely moved. Dragging it now first uses the space of the two columns next to it, then takes width from „mBot2 live“, then from the lessons and files columns (down to their minimum widths). Works in both orders after ⇄; all widths are remembered.
- **Web 0.13.0, VisuBot simulation in the „mBot2 live“ window:** in the VisuBot world „Simulation starten“ no longer shows a second 3D world in the simulation column; the mBot2 of the simulation drives in the „mBot2 live“ window instead (title „🤖 Simulation“, world buttons and distance/line values there, its own ▶ rests until the simulation ends). The window opens by itself for the simulation and closes again afterwards if it was closed before; if it is closed during the simulation, the 3D world goes back to the simulation column. Controls, variables, console, sensor sliders and the real mBot2 stay in the simulation column.
diff --git a/web/lessons/de/01-was-ist-ein-struktogramm.md b/web/lessons/de/01-was-ist-ein-struktogramm.md
index ea2da15a..9d554f4c 100644
--- a/web/lessons/de/01-was-ist-ein-struktogramm.md
+++ b/web/lessons/de/01-was-ist-ein-struktogramm.md
@@ -24,7 +24,7 @@ Die Darstellung stammt von **Isaac Nassi und Ben Shneiderman** (1973). Deshalb h
Links Isaac „Ike“ Nassi (Foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/deed.de), zugeschnitten), rechts Ben Shneiderman (Foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0).
:::
-> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer.
+> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer. Programme, die kreuz und quer springen, nennt man **Spaghetticode**, weil sich ihr Ablauf verheddert wie Nudeln auf dem Teller. Mehr dazu in Schritt 8.
::: angeberwissen
Määäh, aufgepasst! 1972 waren Nassi und Shneiderman noch Doktoranden an der Stony Brook University bei New York, Shneiderman etwa 25 und Nassi etwa 23. Also quasi zwei Studis, die nebenbei Informatikgeschichte geschrieben haben.
diff --git a/web/lessons/en/01-was-ist-ein-struktogramm.md b/web/lessons/en/01-was-ist-ein-struktogramm.md
index a6b17361..e6b82529 100644
--- a/web/lessons/en/01-was-ist-ein-struktogramm.md
+++ b/web/lessons/en/01-was-ist-ein-struktogramm.md
@@ -24,7 +24,7 @@ This way of drawing was invented by **Isaac Nassi and Ben Shneiderman** (1973).
Left: Isaac “Ike” Nassi (photo: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), cropped), right: Ben Shneiderman (photo: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0).
:::
-> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place.
+> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place. Programs that jump all over the place are called **spaghetti code**, because their flow gets tangled like noodles on a plate. More on this in step 8.
::: angeberwissen
Baaah, listen up! In 1972 Nassi and Shneiderman were still PhD students at Stony Brook University near New York. Shneiderman was about 25 and Nassi about 23. So basically two students who wrote computer science history on the side.
diff --git a/web/lessons/pt/01-was-ist-ein-struktogramm.md b/web/lessons/pt/01-was-ist-ein-struktogramm.md
index 02f8420f..7415d24a 100644
--- a/web/lessons/pt/01-was-ist-ein-struktogramm.md
+++ b/web/lessons/pt/01-was-ist-ein-struktogramm.md
@@ -24,7 +24,7 @@ Esta forma de desenhar foi inventada por **Isaac Nassi e Ben Shneiderman** (1973
À esquerda: Isaac “Ike” Nassi (foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), recortada), à direita: Ben Shneiderman (foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0).
:::
-> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado.
+> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado. Programas que saltam para todo o lado chamam-se **código esparguete**, porque o seu fluxo se enrola como massa no prato. Mais sobre isto no passo 8.
::: angeberwissen
Méééé, ouve bem! Em 1972, Nassi e Shneiderman ainda eram doutorandos na Universidade de Stony Brook, perto de Nova Iorque. Shneiderman tinha uns 25 anos e Nassi uns 23. Ou seja, dois estudantes que escreveram história da informática nas horas vagas.
diff --git a/web/package-lock.json b/web/package-lock.json
index 9035f0a5..466be3bc 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "visustruct-web",
- "version": "0.13.3",
+ "version": "0.13.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "visustruct-web",
- "version": "0.13.3",
+ "version": "0.13.4",
"dependencies": {
"@codemirror/autocomplete": "^6.20.4",
"@codemirror/commands": "^6.11.1",
diff --git a/web/package.json b/web/package.json
index 6b1838af..fde031e5 100644
--- a/web/package.json
+++ b/web/package.json
@@ -1,7 +1,7 @@
{
"name": "visustruct-web",
"private": true,
- "version": "0.13.3",
+ "version": "0.13.4",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/web/src/core/simulation.ts b/web/src/core/simulation.ts
index d4847253..80a44398 100644
--- a/web/src/core/simulation.ts
+++ b/web/src/core/simulation.ts
@@ -65,6 +65,8 @@ export interface InputRequest {
prompt: string
/** Wie in Java hinter `System.out.print("Note: ")`: Die Eingabe steht in derselben Zeile wie diese Ausgabe. */
continuesLine?: boolean
+ /** Pseudocode: Die Frage gehört zu einer Bedingung, die Antwort (true/false) entscheidet den Weg. */
+ decision?: boolean
}
/** Meldungen der Simulation, unabhängig von der Sprache. */
@@ -961,12 +963,17 @@ export class SimulationEngine {
private peeking = false
/** Messwerte des echten mBot2; fehlt ein Wert, gilt der simulierte aus `MBOT_SENSORS`. */
robotSensors: MBotSensorValues = {}
+ /** Pseudocode: Kästen werden nur der Reihe nach gezeigt, Bedingungen beantwortet man selbst. */
+ private pseudocode: boolean
+ /** Pseudocode: Antwort auf die gerade gestellte Frage (Bedingung: true/false, Fallauswahl: Name des Falls). */
+ private decided?: boolean | string
constructor(
document: VSDocument,
private resolveSubprogram: SubprogramResolver = () => undefined,
) {
this.steps = buildSteps(document.elements)
+ this.pseudocode = !!document.pseudocode
}
/** Im Unterprogramm bleibt der Aufruf-Kasten im Hauptprogramm markiert. */
@@ -985,7 +992,11 @@ export class SimulationEngine {
}
reset(document?: VSDocument): void {
- if (document) this.steps = buildSteps(document.elements)
+ if (document) {
+ this.steps = buildSteps(document.elements)
+ this.pseudocode = !!document.pseudocode
+ }
+ this.decided = undefined
this.state = freshState()
this.afterOutput = false
this.nextFrame = 1
@@ -1003,6 +1014,11 @@ export class SimulationEngine {
try {
switch (step.kind) {
case 'statement':
+ // Pseudocode ist kein Programm: Der Kasten wird nur gezeigt, nicht ausgeführt.
+ if (this.pseudocode) {
+ state.lastTrace = step.text
+ break
+ }
if (/^return\b/u.test(step.text)) return this.executeReturn(step)
this.executeStatement(step.text)
break
@@ -1034,6 +1050,7 @@ export class SimulationEngine {
provideInput(rawValue: string): void {
const request = this.state.inputRequest
if (!request) return
+ if (request.decision) return this.provideDecision(rawValue)
try {
const value = parseInputValue(rawValue, request.valueType)
this.assignValue(value, request.variableName)
@@ -1048,6 +1065,42 @@ export class SimulationEngine {
this.state.notice = this.finishedIfAtEnd()
}
+ /** Pseudocode: Antwort auf die Frage zur Bedingung, dann gleich den Weg nehmen (die Bedingung ist der Schritt). */
+ private provideDecision(rawValue: string): void {
+ if (this.state.inputRequest?.valueType === 'string') {
+ this.state.inputRequest = undefined
+ this.decided = rawValue.trim()
+ return this.step()
+ }
+ const answer = rawValue.trim().toLowerCase()
+ const yes = ['true', 'wahr', 'ja', 'yes', 'sim', 'verdadeiro'].includes(answer)
+ const no = ['false', 'falsch', 'nein', 'no', 'não', 'nao', 'falso'].includes(answer)
+ if (!yes && !no) {
+ this.state.inputErrorNotice = { kind: 'booleanExpected' }
+ return
+ }
+ this.state.inputRequest = undefined
+ this.state.inputErrorNotice = undefined
+ this.decided = yes
+ this.step()
+ }
+
+ /**
+ * Wert einer Bedingung. Bei Pseudocode (z. B. „Regnet es?“) fragt die Simulation: `undefined`, bis die Antwort da ist.
+ */
+ private condition(condition: string): boolean | undefined {
+ if (!this.pseudocode) return this.evaluateBool(condition)
+ const answer = this.decided
+ if (typeof answer === 'boolean') {
+ this.decided = undefined
+ return answer
+ }
+ this.state.inputRequest = { variableName: '', valueType: 'boolean', prompt: `${condition} (true/false)`, decision: true }
+ this.state.inputErrorNotice = undefined
+ this.state.notice = undefined
+ return undefined
+ }
+
private finishedIfAtEnd(): SimNotice | undefined {
return this.state.stepIndex >= this.steps.length ? { kind: 'finished' } : undefined
}
@@ -1065,7 +1118,8 @@ export class SimulationEngine {
const cases = step.cases
if (!cases || cases.length < 2) throw unsupported(step.text)
const condition = stripConditionKeyword(step.text)
- const result = this.evaluateBool(condition)
+ const result = this.condition(condition)
+ if (result === undefined) return
const selected = result ? 0 : 1
const branchSteps = buildSteps(cases[selected].elements, [...step.path, selected], contextOf(step))
this.splice(branchSteps)
@@ -1077,8 +1131,20 @@ export class SimulationEngine {
const cases = step.cases
if (!cases || cases.length === 0) throw unsupported(step.text)
const selector = stripConditionKeyword(step.text)
- const value = this.evaluateSwitchSelector(selector)
- const selected = matchingCaseIndex(value, cases) ?? cases.length - 1
+ let selected: number
+ if (this.pseudocode) {
+ // Pseudocode: Man wählt den Fall selbst; unbekannte Antwort = letzter Fall (sonst).
+ const answer = this.decided
+ if (typeof answer !== 'string') {
+ const names = cases.map((c) => c.name).join(' / ')
+ this.state.inputRequest = { variableName: '', valueType: 'string', prompt: `${selector} (${names})`, decision: true }
+ this.state.notice = undefined
+ return
+ }
+ this.decided = undefined
+ const index = cases.findIndex((c) => c.name.trim().toLowerCase() === answer.toLowerCase())
+ selected = index >= 0 ? index : cases.length - 1
+ } else selected = matchingCaseIndex(this.evaluateSwitchSelector(selector), cases) ?? cases.length - 1
const caseSteps = buildSteps(cases[selected].elements, [...step.path, selected], contextOf(step))
this.splice(caseSteps)
this.state.lastTrace = `${selector} -> ${cases[selected].name}`
@@ -1086,6 +1152,8 @@ export class SimulationEngine {
}
private executeForLoopStart(step: SimStep): void {
+ // Pseudocode wie „für jeden Gast“: eine Frage wie bei der kopfgesteuerten Schleife.
+ if (this.pseudocode) return this.splice([{ ...step, kind: 'whileLoop' }])
const parts = normalizedForParts(step.forParts ?? [step.text])
if (parts[0] !== '') this.executeStatement(parts[0])
this.splice([{ ...contextOf(step), path: step.path, text: parts[1], kind: 'forLoopCondition', loopBody: step.loopBody, forParts: parts }])
@@ -1094,7 +1162,8 @@ export class SimulationEngine {
private executeForLoopCondition(step: SimStep): void {
const parts = normalizedForParts(step.forParts ?? [step.text])
const condition = parts[1] === '' ? 'true' : parts[1]
- const shouldEnter = this.evaluateBool(condition)
+ const shouldEnter = this.condition(condition)
+ if (shouldEnter === undefined) return
this.state.lastTrace = `${condition} -> ${shouldEnter}`
if (shouldEnter) {
const bodySteps = buildSteps(step.loopBody ?? [], [...step.path, 0], contextOf(step))
@@ -1117,7 +1186,8 @@ export class SimulationEngine {
private executeWhileLoop(step: SimStep): void {
const condition = stripConditionKeyword(step.text)
- const shouldEnter = this.evaluateBool(condition)
+ const shouldEnter = this.condition(condition)
+ if (shouldEnter === undefined) return
this.state.lastTrace = `${condition} -> ${shouldEnter}`
if (shouldEnter) {
const bodySteps = buildSteps(step.loopBody ?? [], [...step.path, 0], contextOf(step))
@@ -1137,7 +1207,8 @@ export class SimulationEngine {
private executeDoUntilCondition(step: SimStep): void {
const condition = stripConditionKeyword(step.text)
- const shouldRepeat = this.evaluateBool(condition)
+ const shouldRepeat = this.condition(condition)
+ if (shouldRepeat === undefined) return
this.state.lastTrace = `${condition} -> ${shouldRepeat}`
if (shouldRepeat) {
const bodySteps = buildSteps(step.loopBody ?? [], [...step.path, 0], contextOf(step))
diff --git a/web/src/i18n/ar.strings b/web/src/i18n/ar.strings
index 87bf132b..e4c6b393 100644
--- a/web/src/i18n/ar.strings
+++ b/web/src/i18n/ar.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "إظهار العناصر";
"web_code_scopes" = "كتل الشيفرة ملوّنة";
"web_code_scopes_hint" = "الصنف والدالة والحلقة والتفرّع في مربعات خاصة";
+"web_pseudocode" = "شبه كود";
diff --git a/web/src/i18n/da.strings b/web/src/i18n/da.strings
index ff5e762f..a1e13ff7 100644
--- a/web/src/i18n/da.strings
+++ b/web/src/i18n/da.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Vis elementerne";
"web_code_scopes" = "Farvede kodeblokke";
"web_code_scopes_hint" = "Klasse, metode, løkke, forgrening i egne felter";
+"web_pseudocode" = "Pseudokode";
diff --git a/web/src/i18n/de.strings b/web/src/i18n/de.strings
index 481f339e..70beda9c 100644
--- a/web/src/i18n/de.strings
+++ b/web/src/i18n/de.strings
@@ -665,3 +665,4 @@
"web_visuobject_method_ph" = "+ bellen(): void";
"web_code_scopes" = "Blöcke farbig";
"web_code_scopes_hint" = "Code und Struktogramm: Schleife rosa, Verzweigung blau, Methode gelb, Klasse grün";
+"web_pseudocode" = "Pseudocode";
diff --git a/web/src/i18n/el.strings b/web/src/i18n/el.strings
index 8c03a2ff..dd9bcf82 100644
--- a/web/src/i18n/el.strings
+++ b/web/src/i18n/el.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Εμφάνιση στοιχείων";
"web_code_scopes" = "Χρωματιστά μπλοκ κώδικα";
"web_code_scopes_hint" = "Κλάση, μέθοδος, βρόχος, διακλάδωση σε δικά τους πλαίσια";
+"web_pseudocode" = "Ψευδοκώδικας";
diff --git a/web/src/i18n/en.strings b/web/src/i18n/en.strings
index 29b8c3d8..658ad32f 100644
--- a/web/src/i18n/en.strings
+++ b/web/src/i18n/en.strings
@@ -665,3 +665,4 @@
"web_visuobject_method_ph" = "+ bark(): void";
"web_code_scopes" = "Colored blocks";
"web_code_scopes_hint" = "Code and structogram: loop pink, branch blue, method yellow, class green";
+"web_pseudocode" = "Pseudocode";
diff --git a/web/src/i18n/es.strings b/web/src/i18n/es.strings
index 257e7287..76ebf53e 100644
--- a/web/src/i18n/es.strings
+++ b/web/src/i18n/es.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Mostrar elementos";
"web_code_scopes" = "Bloques de código en color";
"web_code_scopes_hint" = "Clase, método, bucle, condición en sus propias cajas";
+"web_pseudocode" = "Pseudocódigo";
diff --git a/web/src/i18n/fr.strings b/web/src/i18n/fr.strings
index eb770b77..ecb40127 100644
--- a/web/src/i18n/fr.strings
+++ b/web/src/i18n/fr.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Afficher les éléments";
"web_code_scopes" = "Blocs de code en couleur";
"web_code_scopes_hint" = "Classe, méthode, boucle, condition dans leurs propres cadres";
+"web_pseudocode" = "Pseudo-code";
diff --git a/web/src/i18n/he.strings b/web/src/i18n/he.strings
index 7acc8012..ac7a7248 100644
--- a/web/src/i18n/he.strings
+++ b/web/src/i18n/he.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "הצגת הרכיבים";
"web_code_scopes" = "בלוקי קוד צבעוניים";
"web_code_scopes_hint" = "מחלקה, מתודה, לולאה, הסתעפות בתיבות משלהן";
+"web_pseudocode" = "פסאודו-קוד";
diff --git a/web/src/i18n/it.strings b/web/src/i18n/it.strings
index 48498264..4b42e666 100644
--- a/web/src/i18n/it.strings
+++ b/web/src/i18n/it.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Mostra elementi";
"web_code_scopes" = "Blocchi di codice colorati";
"web_code_scopes_hint" = "Classe, metodo, ciclo, selezione in riquadri propri";
+"web_pseudocode" = "Pseudocodice";
diff --git a/web/src/i18n/ja.strings b/web/src/i18n/ja.strings
index baeb96d8..0a0ec387 100644
--- a/web/src/i18n/ja.strings
+++ b/web/src/i18n/ja.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "要素を表示";
"web_code_scopes" = "コードブロックを色分け";
"web_code_scopes_hint" = "クラス、メソッド、ループ、分岐をそれぞれの枠で表示";
+"web_pseudocode" = "疑似コード";
diff --git a/web/src/i18n/ko.strings b/web/src/i18n/ko.strings
index 67be59f5..d0ac8c28 100644
--- a/web/src/i18n/ko.strings
+++ b/web/src/i18n/ko.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "요소 표시";
"web_code_scopes" = "코드 블록 색상 표시";
"web_code_scopes_hint" = "클래스, 메서드, 반복, 분기를 각각의 상자로 표시";
+"web_pseudocode" = "의사 코드";
diff --git a/web/src/i18n/nb.strings b/web/src/i18n/nb.strings
index 7b97f6b0..da1ba87a 100644
--- a/web/src/i18n/nb.strings
+++ b/web/src/i18n/nb.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Vis elementene";
"web_code_scopes" = "Fargede kodeblokker";
"web_code_scopes_hint" = "Klasse, metode, løkke, forgrening i egne bokser";
+"web_pseudocode" = "Pseudokode";
diff --git a/web/src/i18n/nl.strings b/web/src/i18n/nl.strings
index d0b4650e..41b30e58 100644
--- a/web/src/i18n/nl.strings
+++ b/web/src/i18n/nl.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Elementen tonen";
"web_code_scopes" = "Gekleurde codeblokken";
"web_code_scopes_hint" = "Klasse, methode, lus, keuze in eigen kaders";
+"web_pseudocode" = "Pseudocode";
diff --git a/web/src/i18n/pl.strings b/web/src/i18n/pl.strings
index 1ec2e2ed..54bb5061 100644
--- a/web/src/i18n/pl.strings
+++ b/web/src/i18n/pl.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Pokaż elementy";
"web_code_scopes" = "Kolorowe bloki kodu";
"web_code_scopes_hint" = "Klasa, metoda, pętla, rozgałęzienie we własnych ramkach";
+"web_pseudocode" = "Pseudokod";
diff --git a/web/src/i18n/pt-PT.strings b/web/src/i18n/pt-PT.strings
index bc294088..0ac79a5a 100644
--- a/web/src/i18n/pt-PT.strings
+++ b/web/src/i18n/pt-PT.strings
@@ -663,3 +663,4 @@
"web_visuobject_method_ph" = "+ ladrar(): void";
"web_code_scopes" = "Blocos coloridos";
"web_code_scopes_hint" = "Código e diagrama: ciclo rosa, decisão azul, método amarelo, classe verde";
+"web_pseudocode" = "Pseudocódigo";
diff --git a/web/src/i18n/ru.strings b/web/src/i18n/ru.strings
index 019ecc71..71115318 100644
--- a/web/src/i18n/ru.strings
+++ b/web/src/i18n/ru.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Показать элементы";
"web_code_scopes" = "Цветные блоки кода";
"web_code_scopes_hint" = "Класс, метод, цикл, ветвление в отдельных рамках";
+"web_pseudocode" = "Псевдокод";
diff --git a/web/src/i18n/sv.strings b/web/src/i18n/sv.strings
index fa723c4b..aa533939 100644
--- a/web/src/i18n/sv.strings
+++ b/web/src/i18n/sv.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Visa elementen";
"web_code_scopes" = "Färgade kodblock";
"web_code_scopes_hint" = "Klass, metod, loop, förgrening i egna rutor";
+"web_pseudocode" = "Pseudokod";
diff --git a/web/src/i18n/tr.strings b/web/src/i18n/tr.strings
index 170d5811..5a79faf8 100644
--- a/web/src/i18n/tr.strings
+++ b/web/src/i18n/tr.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Öğeleri göster";
"web_code_scopes" = "Renkli kod blokları";
"web_code_scopes_hint" = "Sınıf, metot, döngü, dallanma kendi kutularında";
+"web_pseudocode" = "Sözde kod";
diff --git a/web/src/i18n/uk.strings b/web/src/i18n/uk.strings
index d2bb8d12..8a39b0c1 100644
--- a/web/src/i18n/uk.strings
+++ b/web/src/i18n/uk.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "Показати елементи";
"web_code_scopes" = "Кольорові блоки коду";
"web_code_scopes_hint" = "Клас, метод, цикл, розгалуження в окремих рамках";
+"web_pseudocode" = "Псевдокод";
diff --git a/web/src/i18n/zh-Hans.strings b/web/src/i18n/zh-Hans.strings
index 426430a1..0223fa3f 100644
--- a/web/src/i18n/zh-Hans.strings
+++ b/web/src/i18n/zh-Hans.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "显示元素";
"web_code_scopes" = "代码块彩色显示";
"web_code_scopes_hint" = "类、方法、循环、分支各有自己的框";
+"web_pseudocode" = "伪代码";
diff --git a/web/src/i18n/zh-Hant.strings b/web/src/i18n/zh-Hant.strings
index 7c5a67c7..9b0a04a8 100644
--- a/web/src/i18n/zh-Hant.strings
+++ b/web/src/i18n/zh-Hant.strings
@@ -176,3 +176,4 @@
"web_palette_show" = "顯示元素";
"web_code_scopes" = "程式碼區塊彩色顯示";
"web_code_scopes_hint" = "類別、方法、迴圈、分支各有自己的框";
+"web_pseudocode" = "虛擬碼";
diff --git a/web/src/ui/app.ts b/web/src/ui/app.ts
index 4949f7e0..edb02713 100644
--- a/web/src/ui/app.ts
+++ b/web/src/ui/app.ts
@@ -312,6 +312,7 @@ export class App {
private simPath?: number[]
private sim!: SimulationPanel
private simButton!: HTMLButtonElement
+ private pseudocodeBox!: HTMLInputElement
private coding = false
private code!: CodePanel
private codeButton!: HTMLButtonElement
@@ -556,6 +557,7 @@ export class App {
+
@@ -589,6 +591,9 @@ export class App {
this.deleteButton = $('[data-action=delete]')
this.statusLine = $('.status')
this.simButton = $('[data-action=simulate]')
+ // Pseudocode (z. B. „Wasserkocher einschalten“): kein Java, die Simulation fragt die Bedingungen.
+ this.pseudocodeBox = $('[data-action=pseudocode]')
+ this.pseudocodeBox.addEventListener('change', () => this.commit({ ...this.doc, pseudocode: this.pseudocodeBox.checked || undefined }))
$('[data-action=hide-editor]').addEventListener('click', () => this.setEditorHidden(true))
$('[data-action=swap-main]').addEventListener('click', () => this.setCodeMain(!this.codeMain))
this.labelSwap()
@@ -1321,6 +1326,7 @@ export class App {
width: Math.max(320, this.layout.canvasSize.width, Math.floor(host.clientWidth / z)),
height: Math.max(240, this.layout.canvasSize.height + 60, Math.floor(host.clientHeight / z)),
}
+ this.pseudocodeBox.checked = !!this.doc.pseudocode
this.renderer.usesSimulationHighlight = this.simulating
this.renderer.fillsSelection = this.liveCoding
this.svg = this.renderer.render(this.layout, size, this.simulating ? this.simPath : this.selected)
diff --git a/web/src/ui/liveCodePanel.ts b/web/src/ui/liveCodePanel.ts
index 3abaf86b..fde038a5 100644
--- a/web/src/ui/liveCodePanel.ts
+++ b/web/src/ui/liveCodePanel.ts
@@ -443,7 +443,7 @@ export class LiveCodePanel {
if (this.onRobotRun?.(stepping)) return
// Wie javac: Ohne Import, ohne angelegten Scanner oder mit vertipptem Datentyp startet das Programm nicht.
const blocking = ['web_parse_missing_import', 'web_parse_missing_scanner', 'web_parse_unknown_type']
- const missing = this.target === 'java' ? this.problems.find((p) => blocking.includes(p.key)) : undefined
+ const missing = this.target === 'java' ? this.javaProblems.find((p) => blocking.includes(p.key)) : undefined
if (missing) {
this.stopRun(false)
this.setConsoleVisible(true)
@@ -849,6 +849,11 @@ export class LiveCodePanel {
this.problems = this.parsed.problems
}
+ /** Pseudocode ist kein Java: keine Fehler anzeigen und den Start nicht verhindern. */
+ private get javaProblems(): JavaProblem[] {
+ return this.last?.doc.pseudocode ? [] : this.problems
+ }
+
private drawMarks(highlight: number[] | undefined) {
const span = highlight && this.spans.find((s) => samePath(s.path, highlight))
const key = span ? `${span.from}-${span.to}` : undefined
@@ -857,13 +862,13 @@ export class LiveCodePanel {
this.code.setMarks(
{
placeholders: this.placeholders,
- problems: this.showProblems ? this.problems : [],
+ problems: this.showProblems ? this.javaProblems : [],
lines: span && simulated === undefined ? { from: span.from, to: span.to } : undefined,
current: this.debugLine ?? simulated,
},
key !== undefined && key !== this.highlighted && !this.code.hasFocus,
)
- const first = this.showProblems ? this.problems[0] : undefined
+ const first = this.showProblems ? this.javaProblems[0] : undefined
this.problemLine.textContent = first ? t('web_parse_line_fmt', this.code.lineAt(first.from) + 1, t(first.key, first.arg ?? '')) : ''
this.highlighted = key
}
diff --git a/web/src/ui/styles.css b/web/src/ui/styles.css
index 2331cca2..11ad0ac8 100644
--- a/web/src/ui/styles.css
+++ b/web/src/ui/styles.css
@@ -5583,3 +5583,10 @@ button.danger-text:not(:disabled) {
display: none !important;
}
}
+/* Haken „Pseudocode“ links vom ⇄ in der Werkzeugzeile. */
+.diagram-tools .pseudocode-toggle {
+ gap: 4px;
+ margin: 0 4px;
+ white-space: nowrap;
+ cursor: pointer;
+}
diff --git a/web/test/simulation.test.ts b/web/test/simulation.test.ts
index 66b1b782..2427423a 100644
--- a/web/test/simulation.test.ts
+++ b/web/test/simulation.test.ts
@@ -693,3 +693,43 @@ describe('Zeichenketten', () => {
expect(state.notice?.kind).toBe('invalidExpression')
})
})
+
+describe('Pseudocode', () => {
+ const lesson = (name: string) => decodeDocument(readFileSync(join(__dirname, '..', 'lessons', 'diagramme', name), 'utf8'))
+
+ it('geht die Kästen von Lektion 1 ohne Fehler durch', () => {
+ for (const name of ['l1-tee.visustruct', 'l1-sequenz.visustruct', 'l1-grundbausteine.visustruct']) {
+ const state = runSimulation(lesson(name), ['true', 'false', 'false', 'false'])
+ expect(state.notice?.kind, name).toBe('finished')
+ }
+ expect(runSimulation(lesson('l1-tee.visustruct')).lastTrace).toBe('Teebeutel herausnehmen')
+ })
+
+ it('fragt bei einer Bedingung nach dem Weg', () => {
+ const branch = makeElement(ElementType.verzweigung, {
+ textLines: ['Regnet es?'],
+ cases: [
+ { name: 'true', elements: [stmt('Schirm mitnehmen')] },
+ { name: 'false', elements: [stmt('Sonnenbrille aufsetzen')] },
+ ],
+ })
+ const engine = new SimulationEngine({ caption: '', elements: [branch, stmt('Losgehen')], pseudocode: true })
+ engine.step()
+ expect(engine.state.inputRequest?.prompt).toBe('Regnet es? (true/false)')
+ engine.provideInput('vielleicht')
+ expect(engine.state.inputErrorNotice?.kind).toBe('booleanExpected')
+ engine.provideInput('nein')
+ engine.step()
+ expect(engine.state.lastTrace).toBe('Sonnenbrille aufsetzen')
+ engine.step()
+ expect(engine.message).toBe('Simulation finished.')
+ })
+
+ it('wiederholt, solange man true antwortet', () => {
+ const loop = makeElement(ElementType.whileSchleife, { textLines: ['Teller nicht leer?'] })
+ loop.loopBody = [stmt('Einen Bissen essen')]
+ const state = runSimulation({ caption: '', elements: [loop], pseudocode: true }, ['ja', 'ja', 'nein'])
+ expect(state.notice?.kind).toBe('finished')
+ expect(state.lastTrace).toBe('Teller nicht leer? -> false')
+ })
+})
diff --git a/website/app/assets/ar-Ce_JBvN0.js b/website/app/assets/ar-DeE-RHam.js
similarity index 99%
rename from website/app/assets/ar-Ce_JBvN0.js
rename to website/app/assets/ar-DeE-RHam.js
index 08af3d2d..5352e2b8 100644
--- a/website/app/assets/ar-Ce_JBvN0.js
+++ b/website/app/assets/ar-DeE-RHam.js
@@ -176,4 +176,5 @@ const e=`/* نصوص موجودة في نسخة الويب فقط. أما بقي
"web_palette_show" = "إظهار العناصر";
"web_code_scopes" = "كتل الشيفرة ملوّنة";
"web_code_scopes_hint" = "الصنف والدالة والحلقة والتفرّع في مربعات خاصة";
+"web_pseudocode" = "شبه كود";
`;export{e as default};
diff --git a/website/app/assets/da-DECOxrcR.js b/website/app/assets/da-D4INXE4p.js
similarity index 99%
rename from website/app/assets/da-DECOxrcR.js
rename to website/app/assets/da-D4INXE4p.js
index 6353afae..635f9b95 100644
--- a/website/app/assets/da-DECOxrcR.js
+++ b/website/app/assets/da-D4INXE4p.js
@@ -176,4 +176,5 @@ const e=`/* Tekster, der kun findes i webversionen. Alt andet kommer fra appens
"web_palette_show" = "Vis elementerne";
"web_code_scopes" = "Farvede kodeblokke";
"web_code_scopes_hint" = "Klasse, metode, løkke, forgrening i egne felter";
+"web_pseudocode" = "Pseudokode";
`;export{e as default};
diff --git a/website/app/assets/de-aPa6h38I.js b/website/app/assets/de-Bm4PpPCp.js
similarity index 99%
rename from website/app/assets/de-aPa6h38I.js
rename to website/app/assets/de-Bm4PpPCp.js
index 48d82a72..56588d5f 100644
--- a/website/app/assets/de-aPa6h38I.js
+++ b/website/app/assets/de-Bm4PpPCp.js
@@ -665,4 +665,5 @@ const e=`/* Texte, die es nur in der Web-Version gibt. Alle anderen kommen aus d
"web_visuobject_method_ph" = "+ bellen(): void";
"web_code_scopes" = "Blöcke farbig";
"web_code_scopes_hint" = "Code und Struktogramm: Schleife rosa, Verzweigung blau, Methode gelb, Klasse grün";
+"web_pseudocode" = "Pseudocode";
`;export{e as default};
diff --git a/website/app/assets/el-yeMMlSVC.js b/website/app/assets/el-CtIZyj0I.js
similarity index 99%
rename from website/app/assets/el-yeMMlSVC.js
rename to website/app/assets/el-CtIZyj0I.js
index 90173eab..0c996c1b 100644
--- a/website/app/assets/el-yeMMlSVC.js
+++ b/website/app/assets/el-CtIZyj0I.js
@@ -176,4 +176,5 @@ const e=`/* Κείμενα που υπάρχουν μόνο στην έκδοσ
"web_palette_show" = "Εμφάνιση στοιχείων";
"web_code_scopes" = "Χρωματιστά μπλοκ κώδικα";
"web_code_scopes_hint" = "Κλάση, μέθοδος, βρόχος, διακλάδωση σε δικά τους πλαίσια";
+"web_pseudocode" = "Ψευδοκώδικας";
`;export{e as default};
diff --git a/website/app/assets/en-CZyy4vg0.js b/website/app/assets/en--cTSOMBP.js
similarity index 99%
rename from website/app/assets/en-CZyy4vg0.js
rename to website/app/assets/en--cTSOMBP.js
index 5ee471ac..f09a80b9 100644
--- a/website/app/assets/en-CZyy4vg0.js
+++ b/website/app/assets/en--cTSOMBP.js
@@ -665,4 +665,5 @@ const e=`/* Texts that exist only in the web version. Everything else comes from
"web_visuobject_method_ph" = "+ bark(): void";
"web_code_scopes" = "Colored blocks";
"web_code_scopes_hint" = "Code and structogram: loop pink, branch blue, method yellow, class green";
+"web_pseudocode" = "Pseudocode";
`;export{e as default};
diff --git a/website/app/assets/es-ha3UN8DQ.js b/website/app/assets/es-BAduFB3L.js
similarity index 99%
rename from website/app/assets/es-ha3UN8DQ.js
rename to website/app/assets/es-BAduFB3L.js
index 5b2e8e7a..b05a09bc 100644
--- a/website/app/assets/es-ha3UN8DQ.js
+++ b/website/app/assets/es-BAduFB3L.js
@@ -176,4 +176,5 @@ const e=`/* Textos que solo existen en la versión web. Todo lo demás procede d
"web_palette_show" = "Mostrar elementos";
"web_code_scopes" = "Bloques de código en color";
"web_code_scopes_hint" = "Clase, método, bucle, condición en sus propias cajas";
+"web_pseudocode" = "Pseudocódigo";
`;export{e as default};
diff --git a/website/app/assets/fr-UiUxTyGK.js b/website/app/assets/fr-C_mSEvw5.js
similarity index 99%
rename from website/app/assets/fr-UiUxTyGK.js
rename to website/app/assets/fr-C_mSEvw5.js
index 0ecf5bfd..33ead673 100644
--- a/website/app/assets/fr-UiUxTyGK.js
+++ b/website/app/assets/fr-C_mSEvw5.js
@@ -176,4 +176,5 @@ const e=`/* Textes propres à la version web. Tout le reste provient des Localiz
"web_palette_show" = "Afficher les éléments";
"web_code_scopes" = "Blocs de code en couleur";
"web_code_scopes_hint" = "Classe, méthode, boucle, condition dans leurs propres cadres";
+"web_pseudocode" = "Pseudo-code";
`;export{e as default};
diff --git a/website/app/assets/he-D_LHtXfc.js b/website/app/assets/he-BAg3LrWK.js
similarity index 99%
rename from website/app/assets/he-D_LHtXfc.js
rename to website/app/assets/he-BAg3LrWK.js
index c16be225..2f086eab 100644
--- a/website/app/assets/he-D_LHtXfc.js
+++ b/website/app/assets/he-BAg3LrWK.js
@@ -176,4 +176,5 @@ const e=`/* טקסטים שקיימים רק בגרסת הרשת. כל השאר
"web_palette_show" = "הצגת הרכיבים";
"web_code_scopes" = "בלוקי קוד צבעוניים";
"web_code_scopes_hint" = "מחלקה, מתודה, לולאה, הסתעפות בתיבות משלהן";
+"web_pseudocode" = "פסאודו-קוד";
`;export{e as default};
diff --git a/website/app/assets/index-Bv5oUBU1.css b/website/app/assets/index-BEDgt2SF.css
similarity index 99%
rename from website/app/assets/index-Bv5oUBU1.css
rename to website/app/assets/index-BEDgt2SF.css
index 0f50ffab..359bf195 100644
--- a/website/app/assets/index-Bv5oUBU1.css
+++ b/website/app/assets/index-BEDgt2SF.css
@@ -1 +1 @@
-:root{--bg: #f2f2f7;--panel: #ffffff;--text: #1c1c1e;--muted: #6e6e73;--border: #d1d1d6;--accent: #007aff;--accent-soft: rgba(0, 122, 255, .18);--accent-faint: rgba(0, 122, 255, .08);--accent-glow: rgba(0, 122, 255, .35);color-scheme:light}:root.visubot-theme{--bg: #f1f0f8;--text: #2f3454;--muted: #6a6890;--border: #d6d3e8;--accent: #e07000;--accent-soft: rgba(253, 161, 21, .24);--accent-faint: rgba(253, 161, 21, .1);--accent-glow: rgba(224, 112, 0, .35)}:root.visubot-theme .selection-frame{stroke:#e07000e6}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font:14px/1.4 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.app{display:grid;grid-template:"tools tools" auto "pal work" 1fr "pal insp" auto / var(--palette-width, 210px) minmax(0,1fr);height:100%;flex:1;min-width:0}.shell{display:flex;flex-direction:column;height:100vh;height:100dvh}.columns{display:flex;flex:1;min-height:0}.columns>.app{min-width:240px}.toolbar{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--border)}button.icon{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:32px;padding:0 7px}button.icon svg{display:block}.tooltip{position:fixed;z-index:1000;max-width:260px;padding:4px 8px;border-radius:6px;background:#1c1c1e;color:#fff;font-size:12px;line-height:1.35;pointer-events:none;box-shadow:0 2px 8px #0003}.tooltip[hidden]{display:none}.diagram-tools{grid-area:tools;display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:5px 8px;background:var(--panel);border-bottom:1px solid var(--border)}.diagram-tools button.icon{min-width:30px;height:30px;padding:0 5px}.diagram-tools .sim-toggle{margin-inline-start:auto;display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;white-space:nowrap}.diagram-tools{container-type:inline-size}@container (max-width: 520px){.diagram-tools .sim-toggle span{display:none}}.diagram-tools .sep{width:1px;height:20px;margin-inline:3px;background:var(--border)}.menu-host{position:relative}.export-menu{position:absolute;top:calc(100% + 4px);inset-inline-end:0;z-index:30;display:grid;min-width:180px;padding:4px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #00000026}.export-menu[hidden]{display:none}.export-menu button{border:none;background:none;text-align:start;padding:7px 10px;border-radius:6px}.export-menu button:hover,.export-menu button:focus-visible{background:var(--accent-soft)}.settings{position:relative;margin-inline-start:auto}.settings>button{display:inline-flex;align-items:center;padding:6px 8px}.settings-menu{position:absolute;top:calc(100% + 6px);inset-inline-end:0;z-index:30;display:grid;width:290px;max-width:calc(100vw - 24px);max-height:calc(100dvh - 80px);overflow-y:auto;padding:4px 0;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #00000026}.settings-menu[hidden]{display:none}.settings-menu section,.settings-menu footer{display:grid;gap:10px;padding:10px 14px 12px}.settings-menu section+section,.settings-menu footer{border-top:1px solid var(--border)}.settings-menu footer{display:flex;align-items:center;justify-content:space-between;gap:10px}.settings-version{font-size:12px;color:var(--muted)}.settings-menu section[hidden]{display:none}.settings-menu h3{margin:0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.settings-menu label{display:grid;gap:4px;font-size:13px;font-weight:600;color:var(--muted)}.settings-menu select{width:100%;max-width:none}.settings-menu label.check{grid-template-columns:auto 1fr;align-items:start;gap:8px;font-weight:500;color:var(--text);cursor:pointer}.settings-menu label.check input{margin:2px 0 0}.settings-menu label small,.settings-menu label.check small{display:block;font-weight:400;color:var(--muted)}.settings-menu .about-button{justify-self:start;padding:6px 10px;font-size:13px}dialog.about{width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:0;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 40px #00000040}dialog.about::backdrop{background:#00000059}dialog.about header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border)}dialog.about h2{margin:0;font-size:16px}.about-body{padding:20px 24px 24px;font-size:14px;line-height:1.5}.about-body p{margin:0 0 8px;color:var(--muted)}.about-head{display:flex;gap:16px;padding-bottom:16px;margin-bottom:8px;border-bottom:1px solid var(--border)}.about-head .logo{flex:none;width:40px;height:40px;color:var(--accent)}.about-head h3{margin:0 0 6px;font-size:20px}.about-head h3 small{font-weight:400;color:var(--muted)}.about-body .about-version{font-variant-numeric:tabular-nums}.about-body .about-author{color:var(--text);font-weight:600}.about-link{margin:0 0 2px}.about-body h4{margin:16px 0 6px;font-size:15px}.about-body code{font-weight:600;color:var(--text)}.about-body .about-copy{margin-top:16px}.brand{font-weight:700;font-size:16px;display:flex;align-items:center;gap:8px}.visubot-logo{width:auto;height:30px;margin:-4px 0}.visubot-bot{color:#f08a00;margin-left:-8px}.brand small{font-weight:500;color:var(--muted);font-size:12px}.logo{width:20px;height:20px;border:2px solid currentColor;background:linear-gradient(to bottom right,transparent 47%,currentColor 47% 53%,transparent 53%) left / 50% 60% no-repeat,linear-gradient(to bottom left,transparent 47%,currentColor 47% 53%,transparent 53%) right / 50% 60% no-repeat}.group{display:flex;flex-wrap:wrap;gap:6px}button,select{font:inherit;padding:6px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);cursor:pointer;min-height:34px}select{max-width:180px}button:hover:not(:disabled),select:hover{border-color:var(--accent)}button:disabled{opacity:.4;cursor:default}.palette,.inspector{background:var(--panel);padding:12px;overflow-y:auto}.palette{grid-area:pal;border-inline-end:1px solid var(--border)}.inspector{grid-area:insp;border-top:1px solid var(--border);max-height:34vh}h2{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 4px}.hint{color:var(--muted);font-size:12px;margin:0 0 10px}.palette ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}.palette-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;cursor:grab;line-height:1.25;user-select:none;-webkit-user-select:none;touch-action:none}.palette-item:hover,.palette-item:focus-visible{border-color:var(--accent);outline:none}.palette-item .icon{flex:none;color:var(--text)}.workspace{grid-area:work;display:flex;flex-direction:column;min-width:0;min-height:0}.caption{font:600 18px system-ui,-apple-system,sans-serif;border:none;border-bottom:1px solid var(--border);padding:10px 16px;background:var(--panel);outline:none}.canvas{flex:1;overflow:auto;scrollbar-gutter:stable;background:#fafafa}.canvas svg{display:block;user-select:none;-webkit-user-select:none}.dragging,.dragging *{cursor:grabbing!important}.drop-line{fill:var(--accent)}.drop-replace{fill:var(--accent-soft);stroke:var(--accent);stroke-width:3}.drag-ghost{position:fixed;left:0;top:0;z-index:10;pointer-events:none;padding:6px 10px;border-radius:8px;background:var(--accent);color:#fff;font-weight:600;box-shadow:0 4px 14px #0003;white-space:nowrap;max-width:260px;overflow:hidden;text-overflow:ellipsis}.inspector label{display:block;font-weight:600;margin:8px 0 4px}.inspector textarea{width:100%;font:14px ui-monospace,SF Mono,Menlo,Consolas,monospace;padding:8px;border:1px solid var(--border);border-radius:8px;resize:vertical}.statusbar{display:flex;flex-wrap:wrap;gap:2px 16px;align-items:baseline;padding:4px 12px;font-size:12px;color:var(--muted);background:var(--panel);border-top:1px solid var(--border)}.status{flex:1 1 auto;min-width:0}.site-links{display:flex;gap:12px;margin-inline-start:auto}.site-links a{color:inherit}.site-links a:hover,.site-links a:focus-visible{color:var(--accent)}a.brand{color:inherit;text-decoration:none}.file-drag .canvas{outline:3px dashed var(--accent);outline-offset:-8px}@media(min-width:821px){.app.compact-palette{--palette-width: 100px}.app.compact-palette .palette{padding:8px 6px}.app.compact-palette .palette h2{font-size:10px;letter-spacing:0;text-align:center}.app.compact-palette .palette .hint{display:none}.app.compact-palette .palette-item{flex-direction:column;gap:3px;padding:6px 2px;font-size:10.5px;line-height:1.15;text-align:center;overflow-wrap:break-word}}@media(max-width:820px){.app{grid-template:"tools" auto "pal" auto "work" 1fr "insp" auto / minmax(0,1fr)}.palette,.inspector{min-width:0}.palette{border-inline-end:none;border-bottom:1px solid var(--border);padding:8px}.palette .hint,.palette h2{display:none}.palette ul{display:flex;overflow-x:auto;overflow-y:hidden}.palette-item{white-space:nowrap}.inspector{max-height:30vh}}.status.message{color:var(--text);font-weight:600}.confirm{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;background:#00000040;padding:16px}.confirm-card{background:var(--panel);border-radius:12px;padding:16px 18px;max-width:360px;box-shadow:0 10px 30px #0003}.confirm-card p{margin:0 0 8px}.confirm-card .group{justify-content:flex-end;margin-top:12px}.files-ask{width:min(360px,100%)}.files-ask input{width:100%;box-sizing:border-box;margin-top:4px}.files-choices{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 10px}.files-choice{display:inline-flex;align-items:center;gap:6px}.files-choice svg{width:16px;height:16px}button.danger{background:#d70015;border-color:#d70015;color:#fff}.simpanel{display:none;grid-area:insp;background:var(--panel);border-inline-start:1px solid var(--border);padding:12px;overflow-y:auto}.app.simulating{grid-template:"tools tools" auto "work insp" 1fr / minmax(0,1fr) 320px}.app.simulating.visubot-mode{grid-template:"tools tools" auto "work insp" 1fr / minmax(0,1fr) min(440px,45%)}.app.simulating .palette,.app.simulating .inspector{display:none}.app.simulating .simpanel{display:block}.app.simulating .caption{cursor:default}button.sim-toggle{font-weight:600}button.sim-toggle{background:var(--accent);border-color:var(--accent);color:#fff}.simpanel section{margin-bottom:14px}.sim-buttons{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:6px 0 10px}.sim-option{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;font-size:13px}.mono,.sim-vars td{font:13px/1.5 ui-monospace,SF Mono,Menlo,Consolas,monospace}.sim-trace,.sim-output,.sim-vars{background:var(--bg);border-radius:8px;padding:8px 10px;overflow-wrap:anywhere}.sim-output{max-height:220px;overflow-y:auto;white-space:pre-wrap}.sim-vars table{border-collapse:collapse;width:100%}.sim-vars td{padding:2px 0;vertical-align:top}.sim-vars td:first-child{color:var(--muted);padding-inline-end:12px;width:1%;white-space:nowrap}.sim-vars table.sim-grid{width:auto}.sim-vars .sim-grid td,.sim-vars .sim-grid td:first-child{border:1px solid var(--border);color:inherit;font-size:11px;padding:0 4px;text-align:center;width:auto}.sim-vars .sim-grid td.sim-grid-true{font-weight:700}.simpanel .placeholder{color:var(--muted);font:13px system-ui,-apple-system,sans-serif;margin:0}.sim-notice{margin:0 0 14px;padding:8px 10px;border-radius:8px;background:#34c75926;font-weight:600}.sim-edit{width:100%;margin:-6px 0 14px}.sim-notice.error{background:#ff3b3026;color:#b0000f}.sim-input.active{padding:8px 10px;margin-left:-10px;margin-right:-10px;border-radius:10px;background:var(--accent-faint);outline:2px solid var(--accent)}.sim-prompt{margin:4px 0 6px;font-weight:600}.sim-input-row{display:flex;gap:6px}.sim-input-row input{flex:1;min-width:0;font:inherit;padding:6px 10px;border:1px solid var(--border);border-radius:8px}.sim-input-error{color:#b0000f;margin:6px 0 0;font-size:13px}@media(max-width:820px){.app.simulating{grid-template:"tools" auto "work" minmax(200px,1fr) "insp" auto / minmax(0,1fr)}.simpanel{border-inline-start:none;border-top:1px solid var(--border);max-height:48vh}}.codepanel{display:none;grid-area:code;background:var(--panel);border-inline-start:1px solid var(--border);padding:12px;overflow-y:auto;min-height:0}.app.coding{grid-template:"tools tools tools" auto "pal work code" 1fr "pal insp code" auto / var(--palette-width, 210px) minmax(0,1fr) 400px}.app.coding .codepanel{display:block}.app.coding .inspector{max-height:34vh}button[data-action=code][aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft)}.code-head,.runner-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.code-close{min-height:28px;padding:2px 10px}.segmented{display:flex;margin-bottom:8px}.segmented button{flex:1;border-radius:0;min-height:30px;padding:4px 8px}.segmented button:first-child{border-radius:8px 0 0 8px}.segmented button:last-child{border-radius:0 8px 8px 0}.segmented button+button{border-inline-start:none}.segmented button[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.segmented[hidden]{display:none}.check{display:flex;gap:8px;align-items:center;font-size:13px;margin-bottom:4px}.code-actions{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.code-actions [hidden]{display:none}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.code-view,.runner-out{margin:0;padding:10px 12px;border-radius:10px;background:var(--bg);font:13px/1.5 ui-monospace,SF Mono,Menlo,Consolas,monospace;overflow:auto;white-space:pre;-moz-tab-size:4;tab-size:4}.runner{margin:12px 0}.runner-out{background:#0b1220;color:#e5e7eb;min-height:3em;max-height:240px;white-space:pre-wrap}.runner-out.error{outline:2px solid #ff453a}.runner-input{margin-top:8px}.runner-input label{display:block;font-weight:600;margin-bottom:4px}@media(max-width:820px){.app.coding{grid-template:"tools" auto "pal" auto "work" minmax(240px,1fr) "insp" auto "code" auto / minmax(0,1fr)}.codepanel{border-inline-start:none;border-top:1px solid var(--border);max-height:50vh}}.tabs{display:flex;align-items:flex-end;gap:2px;padding:6px 8px 0;background:var(--bg);border-bottom:1px solid var(--border);overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.tab{display:flex;align-items:center;max-width:220px;border:1px solid var(--border);border-bottom:none;border-radius:8px 8px 0 0;background:#ffffff80}.tab.active{background:var(--panel);margin-bottom:-1px;padding-bottom:1px}.tab button{border:none;background:none;min-height:30px;border-radius:8px 8px 0 0}.tab-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:4px 6px 4px 12px}.tab.active .tab-label{font-weight:600}.tab-close{padding:2px 8px;color:var(--muted);font-size:11px}.tab-close:hover{color:var(--text)}.tab-dot,.tab-close.unsaved .tab-x{display:none}.tab-close.unsaved .tab-dot{display:inline;color:var(--text);font-size:10px}.tab-close.unsaved:hover .tab-dot{display:none}button.tab-close.unsaved:hover .tab-x{display:inline}span.tab-close{padding:2px 10px 2px 4px}.tab-add{min-height:28px;padding:2px 10px;margin:0 0 3px 4px;border-radius:8px}.inspector .segmented{margin:6px 0 4px;max-width:420px}.mono-hint{font:11px/1.45 ui-monospace,SF Mono,Menlo,Consolas,monospace;overflow-wrap:anywhere}.editor-row{display:flex;gap:8px;align-items:flex-start}.editor-row textarea{flex:1;min-width:0}.fixed-prefix{font:14px ui-monospace,SF Mono,Menlo,Consolas,monospace;color:var(--muted);padding-top:9px}.inspector input:not([type]){width:100%;font:14px ui-monospace,SF Mono,Menlo,Consolas,monospace;padding:7px 8px;border:1px solid var(--border);border-radius:8px}.for-fields{display:grid;gap:4px}.for-fields label,.case-controls label{margin:4px 0 0;font-size:12px;color:var(--muted);font-weight:600}.case-controls{margin-top:12px;padding-top:10px;border-top:1px solid var(--border)}.case-controls .group{margin-top:8px}button.danger-text:not(:disabled){color:#d70015}.print-sheet{display:none}.files{display:none;flex:0 1 auto;flex-direction:column;width:260px;min-width:200px;min-height:0;background:var(--panel);border-inline-end:1px solid var(--border)}.shell.files-open .files{display:flex}.shell.files-open .files-rail{display:none}.files-head{display:flex;align-items:center;gap:4px;margin:10px 12px 6px}.files-head h2{flex:1;margin:0;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.files-head button.icon{min-width:30px;height:30px;padding:0 5px}.files-head [hidden]{display:none}.files-body{flex:1;min-height:0;overflow:auto;padding:0 8px 12px;font-size:14px}.files-where{margin:0 4px 6px;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-hint,.files-empty{margin:8px 4px;font-size:13px;color:var(--muted)}.start-ask .files-start{margin-bottom:2px}.start-ask .hint{font-size:13px;color:var(--muted)}.start-without{display:block;margin:12px auto 0;border:none;background:none;color:var(--accent);text-decoration:underline}.start-without+.hint{text-align:center}.files-start{display:flex;align-items:center;gap:6px;width:100%;margin:8px 0;justify-content:center}.files-row{display:flex;align-items:center;border-radius:6px}.files-row:hover,.files-row:focus-within{background:var(--accent-soft)}.files-row.current>.files-name{font-weight:600}.files-name{flex:1;min-width:0;display:flex;align-items:center;gap:6px;padding:4px 6px 4px calc(6px + var(--depth) * 16px);border:none;background:none;text-align:start;font:inherit;color:var(--text);cursor:pointer}.files-name:disabled{cursor:default;color:var(--muted)}.files-name svg{flex:none;width:16px;height:16px;color:var(--muted)}.files-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-name small{margin-inline-start:auto;padding:0 6px;border-radius:6px;background:var(--accent);color:#fff;font-size:11px;font-weight:600}.files-row .files-delete{visibility:hidden;min-width:26px;height:26px;padding:0 4px;border:none;background:none;color:var(--muted)}.files-row:hover .files-delete,.files-row:focus-within .files-delete{visibility:visible}.files-error{color:#c62828}.files-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.shell.files-open .files-resizer{display:block}.files-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px}.files-resizer:hover:after,.files-resizer:focus-visible:after{background:var(--accent)}.learn{display:none;flex:0 1 auto;width:400px;min-width:280px;flex-direction:column;background:var(--panel);border-inline-end:1px solid var(--border);min-height:0}.shell.learning .learn{display:flex}.learn-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.shell.learning .learn-resizer{display:block}.learn-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.learn-resizer:hover:after,.learn-resizer:focus-visible:after,.shell.resizing .learn-resizer:after{background:var(--accent)}.learn-resizer:focus-visible{outline:none}.shell.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.learn-head{display:flex;align-items:flex-start;gap:6px;margin:10px 12px 0}.learn-tabs{flex:1;min-width:0}.learn-hide{flex:none;min-height:30px;padding:4px 7px;display:inline-flex;align-items:center;color:var(--muted)}.learn-rail{flex:none;display:flex;flex-direction:column;align-items:center;gap:10px;width:36px;padding:10px 0;border:none;border-radius:0;border-inline-end:1px solid var(--border);background:var(--panel);cursor:pointer}.learn-rail:hover{background:var(--accent-soft)}.learn-rail span{writing-mode:vertical-rl;white-space:nowrap}.shell.learning .learn-rail:not(.live-rail):not(.editor-rail):not(.files-rail):not(.robotpreview-rail):not(.palette-rail){display:none}.live-rail{border-inline-end:none;border-inline-start:1px solid var(--border)}.live-rail svg{transform:scaleX(-1)}.shell.live .live-rail{display:none}.editor-rail{display:none;border-inline-start:1px solid var(--border)}.shell.editor-hidden .editor-rail{display:flex}.shell.editor-hidden .app,.shell.editor-hidden .live-resizer,.shell.editor-hidden:not(.live) .learn-resizer{display:none}.shell.editor-hidden .livecode,.shell.editor-hidden:not(.live) .learn{flex:1 1 0;width:auto!important;min-width:0}.learn-body{overflow-y:auto;scrollbar-gutter:stable;padding:4px 16px 24px;flex:1;min-height:0;line-height:1.5}.learn-body h2.learn-title{display:flex;align-items:center;gap:8px;font-size:20px;text-transform:none;letter-spacing:0;color:var(--text);margin:2px 0 10px}.learn-section{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:18px 0 6px}.learn-list{list-style:none;padding:0;margin:0;display:grid;gap:6px}.learn-item{display:flex;align-items:center;gap:10px;width:100%;text-align:start;padding:8px 10px}.learn-item.done{border-color:#34c759}.learn-num{flex:none;min-width:28px;height:28px;border-radius:14px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-weight:700;font-size:12px;padding:0 6px}.learn-item.done .learn-num{background:#34c7592e;color:#248a3d}.learn-item-text{flex:1;display:grid;min-width:0}.learn-item-text small{color:var(--muted)}.learn-status{flex:none;color:var(--muted);font-size:12px}.learn-item.done .learn-status{color:#248a3d;font-weight:700}.learn-back,.link-button{border:none;background:none;padding:6px 0;min-height:0;color:var(--accent)}.link-button{padding:0;text-align:start}.learn-kicker{margin:4px 0 0;color:var(--muted);font-size:12px}.learn-progress{display:flex;gap:4px;margin-bottom:14px}.learn-progress button{flex:1 1 0;min-width:0;padding:3px 0;font-size:13px;font-variant-numeric:tabular-nums;border-radius:6px}.learn-progress button.past{border-color:var(--accent);color:var(--accent)}.learn-progress button.current{border-color:var(--accent);background:var(--accent);color:#fff;font-weight:600}.learn-progress button.robot-step:not(.current){border-color:#0fa3c6;background:#0fa3c61f}.learn-progress button.robot-step.current{border-color:#0fa3c6;background:#0fa3c6}.learn-step-title{font-size:16px;margin:0 0 6px}.learn-text p,.learn-text ul,.learn-text ol{margin:0 0 10px}.learn-text ul,.learn-text ol{padding-inline-start:22px}.learn-text code,.learn-tests code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;background:var(--bg);border-radius:4px;padding:1px 4px}.learn-text h3{font-size:15px;margin:18px 0 4px}.reference-group{border:1px solid var(--border);border-radius:8px;margin:0 0 8px;padding:0 12px}.reference-group summary{cursor:pointer;font-weight:600;padding:9px 0}.reference-group[open] summary{border-bottom:1px solid var(--border)}.reference-group>h3:first-of-type{margin-top:10px}.lesson-code{background:var(--bg);border-radius:8px;padding:8px 10px;margin:0 0 10px;overflow-x:auto;overflow-y:hidden;font-size:12.5px}.lesson-code code{background:none;padding:0}.lesson-note{border-inline-start:3px solid var(--accent);background:var(--accent-soft);border-radius:6px;padding:8px 10px;margin:0 0 10px}.lesson-note p:last-child{margin-bottom:0}.learn-images{display:flex;gap:8px;flex-wrap:wrap}.learn-images img{width:150px;height:200px;object-fit:cover;border-radius:8px}.learn-file{margin:0 0 14px;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--panel)}.learn-file figcaption{display:flex;align-items:center;gap:6px;padding:6px 10px;background:var(--bg);border-bottom:1px solid var(--border);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;font-weight:600}.learn-file-text{margin:0;padding:8px 10px;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.5;white-space:pre}.learn-file.written{margin:8px 0;border-color:#15803d}.learn-file.written figcaption{background:#dcfce7}.learn-file-text .ln{display:inline-block;min-width:2ch;margin-inline-end:10px;color:var(--muted);text-align:end;-webkit-user-select:none;user-select:none}.learn-brag{display:grid;grid-template-columns:48px minmax(0,1fr);gap:10px;align-items:start;border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin:0 0 14px;background:var(--accent-soft)}.learn-brag img{width:48px;height:48px;border-radius:50%}.learn-brag-title{margin:0 0 4px;font-weight:700}.learn-brag .learn-text p:last-child{margin-bottom:0}.learn-game{border:2px solid var(--accent);border-radius:12px;padding:12px 14px;margin:0 0 14px}.learn-game-head{display:flex;align-items:center;gap:10px;font-size:1.05em}.learn-game-head img{width:40px;height:40px;border-radius:50%}.learn-game-status{margin:6px 0;color:var(--muted);font-size:.9em}.learn-game-values{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.learn-game-values code{background:var(--accent-soft);border-radius:6px;padding:2px 8px}.learn-game-condition{font-size:1.15em;font-weight:600;padding:10px 12px;border-radius:8px;background:var(--bg, #f2f2f7);margin-bottom:10px;overflow-wrap:anywhere}.learn-game-answers button{flex:1;font-weight:600;padding-block:10px}.learn-game-true:not(:disabled){border-color:#15803d;color:#15803d}.learn-game-false:not(:disabled){border-color:#b91c1c;color:#b91c1c}.learn-game-feedback:empty{display:none}.learn-game-feedback{margin-top:10px;padding:10px 12px;border-radius:8px}.learn-game-feedback.right{background:#dcfce7}.learn-game-feedback.wrong{background:#fee2e2}.learn-game-feedback p{margin:0 0 6px;font-weight:700}.learn-game-steps{margin-bottom:10px;line-height:1.6}.learn-game-result{font-size:1.2em;font-weight:700}.learn-game-question{font-weight:600;margin:10px 0 8px}.learn-game-code{margin:0 0 8px;padding:8px 0;border-radius:8px;background:var(--bg, #f2f2f7);font-size:13px;line-height:1.5;overflow-x:auto}.learn-game-code .ln{padding:0 10px 0 calc(10px + 2ch);text-indent:-2ch;border-inline-start:3px solid transparent;white-space:pre-wrap;overflow-wrap:anywhere;transition:background .2s}.learn-game-code .ln.hit{background:#fef3c7;border-inline-start-color:#d97706}.learn-bomb{display:flex;align-items:center;gap:10px;margin-bottom:6px;font-weight:700}.learn-bomb-icon{font-size:28px;line-height:1}.learn-bomb.hurry .learn-bomb-icon{animation:learn-bomb-shake .25s infinite alternate}.learn-bomb.boom .learn-bomb-icon{animation:learn-bomb-boom .5s ease-out}@keyframes learn-bomb-shake{0%{transform:rotate(-8deg)}to{transform:rotate(8deg)}}@keyframes learn-bomb-boom{0%{transform:scale(.6)}60%{transform:scale(1.5)}to{transform:scale(1)}}.learn-bomb-time{min-width:7ch;font-variant-numeric:tabular-nums}.learn-bomb-fuse{flex:1;height:8px;border-radius:4px;background:#e5e7eb;overflow:hidden}.learn-bomb-fuse span{display:block;height:100%;background:#f59e0b;transition:width .2s linear}.learn-bomb.hurry .learn-bomb-fuse span{background:#dc2626}.learn-bomb.defused .learn-bomb-fuse span{background:#15803d}.learn-bomb-code .ln{display:block;width:100%;margin:0;border-radius:0;border-block:0;border-inline-end:0;background:none;color:inherit;font:inherit;line-height:inherit;min-height:0;height:auto;padding-block:1px;text-align:start;cursor:pointer}.learn-bomb-code .ln:not(:disabled):hover{background:#fef3c7}.learn-bomb-code .ln:disabled{cursor:default;opacity:1}.learn-bomb-code .ln.right,.learn-bomb-code .ln.right:hover{background:#dcfce7;border-inline-start-color:#15803d}.learn-bomb-code .ln.wrong,.learn-bomb-code .ln.wrong:hover{background:#fee2e2;border-inline-start-color:#b91c1c}.learn-bomb-fix code{white-space:pre-wrap}.learn-game-options{display:grid;gap:6px}.learn-game-options button{text-align:start;padding:8px 12px}.learn-game-options.pictures{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}.learn-game-options.pictures button{padding:6px}.learn-game-options button.right{border-color:#15803d;background:#dcfce7;color:inherit;opacity:1}.learn-game-options button.wrong{border-color:#b91c1c;background:#fee2e2;color:inherit;opacity:1}.learn-order-hint{margin:0 0 6px;font-size:13px;opacity:.75}.learn-order button{display:flex;align-items:center;gap:10px}.learn-order-badge{flex:none;display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;border:1.5px solid currentColor;font-size:13px;font-weight:700;opacity:.5}.learn-order button.right .learn-order-badge,.learn-order button:disabled .learn-order-badge:not(:empty){opacity:1}.learn-game-file{margin:0;padding:2px 0;font-size:13px;line-height:1.45;white-space:pre;background:none}.learn-game-explain{margin-bottom:10px}.learn-swing-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px;align-items:start}.learn-swing-window{border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fff;color:#1c1c1e}.learn-swing-title{padding:3px 8px;font-size:12px;text-align:center;background:#e5e5ea;border-bottom:1px solid #d1d1d6;min-height:1.4em}.learn-swing-body{display:grid;gap:6px;padding:10px}.learn-swing-label{padding:4px 2px;min-height:1.4em}.learn-swing-label.changed,.learn-swing-button.changed{animation:swing-changed 1s ease-out}@keyframes swing-changed{0%{background:#ffd60acc}}.learn-swing-button{padding:6px 10px;background:#fff;color:#1c1c1e;border:1px solid #a1a1aa;border-radius:6px}.learn-swing-button:disabled{opacity:1;cursor:default}.learn-swing-button.pressed{background:var(--accent);border-color:var(--accent);color:#fff;transform:scale(.96)}.learn-swing-event{margin:0;padding:0 10px 8px;font-size:12px;min-height:1.4em}.learn-swing-event.heard{color:#b45309;font-weight:600}.learn-swing-event.nobody{color:#6b7280;font-style:italic}.learn-swing-console{margin:0 10px 10px;padding:6px 8px;border-radius:6px;background:#1c1c1e;color:#f2f2f7;font-size:12px}.learn-swing-console[hidden]{display:none}.learn-swing-clicks{margin:8px 0 0}.learn-swing-try{font-weight:400!important;font-style:italic}.learn-layout-window{width:100%;border:1px solid #a1a1aa;border-radius:6px;overflow:hidden;background:#fff;color:#1c1c1e}.learn-layout-title{height:10px;background:#e5e5ea;border-bottom:1px solid #d1d1d6}.learn-layout-body{height:80px;padding:3px;gap:3px;font-size:12px}.learn-layout-body.grid{display:grid;grid-auto-rows:1fr}.learn-layout-body.flow{display:flex;flex-direction:column;gap:3px}.learn-layout-row{display:flex;justify-content:center;gap:3px}.learn-layout-body.border{display:grid;grid-template:"N N N" auto "W C E" 1fr "S S S" auto / auto 1fr auto}.learn-layout-cell{display:flex;align-items:center;justify-content:center;min-width:22px;padding:2px 6px;border:1px solid #a1a1aa;border-radius:4px;background:#f4f4f5;font-weight:600}.learn-figure{margin:0 0 14px;display:grid;gap:6px;justify-items:start}.learn-preview{width:100%;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fafafa}.learn-preview>svg{display:block;width:100%;margin:0 auto;height:auto}.learn-figure figcaption{color:var(--muted);font-size:13px}.learn-exercise{border:1px solid var(--accent);border-radius:10px;padding:10px 12px;margin:0 0 14px;display:grid;gap:8px}.learn-exercise h4{margin:0;font-size:15px;display:flex;gap:8px;align-items:center}.learn-badge{font-size:12px;color:#248a3d;background:#34c7592e;border-radius:10px;padding:1px 8px}.learn-exercise .learn-text p:last-child{margin-bottom:0}.learn-result:empty{display:none}.learn-result{border-radius:8px;padding:8px 10px}.learn-result.ok{background:#34c75924}.learn-result.fail{background:#ff950024}.learn-result.info{background:var(--bg)}.learn-result-head{margin:0 0 6px;font-weight:600}.learn-tests{list-style:none;padding:0;margin:0;display:grid;gap:6px}.learn-test-detail{display:grid;padding-inline-start:16px;font-size:13px}.learn-error{color:#c4291c}.learn-solution summary{cursor:pointer;color:var(--accent)}.learn-solution[open]{display:grid;gap:6px;justify-items:start}.learn-checklist{list-style:none;padding:0;margin:0 0 14px;display:grid;gap:6px}.learn-checklist li{display:flex;gap:8px;align-items:baseline;justify-content:space-between}.learn-checklist label{display:flex;gap:8px;align-items:baseline}.learn-return{width:100%;margin:0 0 12px;border-color:var(--accent);background:var(--accent-soft)}.learn-nav+.learn-return{margin:12px 0 0}.learn-check-link{flex:none;font-size:13px}.learn-quiz fieldset{border:1px solid var(--border);border-radius:10px;padding:8px 12px 10px;margin:0 0 10px;display:grid;gap:6px}.learn-quiz legend{font-weight:600;padding:0 4px}.learn-option{text-align:start}.learn-option.right{border-color:#34c759;background:#34c75924}.learn-option.wrong{border-color:#ff3b30;background:#ff3b301a}.learn-match{display:grid;gap:6px}.learn-match-left{display:grid;grid-template-columns:8.5em minmax(0,1fr);align-items:center;gap:8px}.learn-match-select{min-width:0;width:100%;max-width:none}.learn-match-select.right{border-color:#34c759;background:#34c75924}.learn-match-select.wrong{border-color:#ff3b30;background:#ff3b301a}.learn-explanation{margin:0;color:var(--muted);font-size:13px}.learn-score{font-weight:600}.learn-nav{display:flex;justify-content:space-between;gap:8px;margin-top:18px}@media(max-width:1100px){.learn{width:340px}}@media(max-width:900px){.learn{width:300px}}.livecode{display:none;flex:0 1 auto;width:420px;min-width:200px;flex-direction:column;gap:6px;padding:10px 12px 12px;background:var(--panel);border-inline-start:1px solid var(--border);min-height:0}.shell.live .livecode{display:flex}.livecode-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px}.livecode-head h2{margin:0;font-size:16px}.livecode-lang{margin-inline-start:auto;padding:2px 8px;border-radius:6px;background:var(--accent-soft);color:var(--accent);font-size:12px;font-weight:600}.livecode .learn-hide svg{transform:scaleX(-1)}.livecode .hint{margin:0}.livecode-view{flex:1;min-height:0;padding:10px 0;font-size:var(--code-size, 14px)}.livecode-view .ln{padding:0 12px;min-height:1.5em;border-inline-start:3px solid transparent}.livecode-view.selectable .ln{cursor:pointer}.livecode-view .ln.sel{background:var(--accent-soft);border-inline-start-color:var(--accent)}.livecode-view .ph{color:var(--muted);font-style:italic}.livecode-editor{flex:1;min-height:0;padding:0;font-size:var(--code-size, 14px);white-space:normal;overflow:hidden;--syn-keyword: #7f0055;--syn-string: #2a00ff;--syn-number: #986801;--syn-comment: #3f7f5f}.livecode-editor[hidden],.livecode-view[hidden],.livecode-problem[hidden]{display:none}.livecode-editor .cm-editor{height:100%;background:transparent}.livecode-editor .cm-editor.cm-focused{outline:2px solid var(--accent-soft);outline-offset:-2px;border-radius:10px}.livecode-editor .cm-scroller{font:inherit;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;line-height:1.5}.livecode-editor .cm-gutters{background:transparent;border-inline-end:1px solid var(--border);color:var(--muted)}.livecode-editor .cm-lineNumbers .cm-gutterElement{padding:0 8px 0 10px;min-width:2ch}.livecode-editor .cm-activeLineGutter{background:transparent;color:var(--text)}.livecode-editor .cm-content{padding:10px 0;caret-color:var(--text)}.livecode-editor .cm-line{padding:0 12px;border-inline-start:3px solid transparent}.livecode-editor .cm-scopeLayer .cm-scope{border:1px solid color-mix(in srgb,var(--scope) 28%,transparent);border-left:3px solid var(--scope);border-radius:8px;background:color-mix(in srgb,var(--scope) 9%,#fff)}.livecode-editor .cm-scopeLayer .cm-scope-class{--scope: #34c47c}.livecode-editor .cm-scopeLayer .cm-scope-method{--scope: #f2b100}.livecode-editor .cm-scopeLayer .cm-scope-loop{--scope: #ec5fa6}.livecode-editor .cm-scopeLayer .cm-scope-if{--scope: #3b9cf0}.livecode-editor .cm-scopeLayer .cm-scope-try{--scope: #9a7cf0}:root.no-code-scopes .livecode-editor .cm-scopeLayer .cm-scope:not(.cm-scope-sel){display:none}:root:not(.no-code-scopes) .ns-scope-method{fill:color-mix(in srgb,#f2b100 14%,#fff)}:root:not(.no-code-scopes) .ns-scope-loop{fill:color-mix(in srgb,#ec5fa6 14%,#fff)}:root:not(.no-code-scopes) .ns-scope-if{fill:color-mix(in srgb,#3b9cf0 14%,#fff)}:root:not(.no-code-scopes) .palette-item[data-scope=method]{background:color-mix(in srgb,#f2b100 14%,#fff)}:root:not(.no-code-scopes) .palette-item[data-scope=loop]{background:color-mix(in srgb,#ec5fa6 14%,#fff)}:root:not(.no-code-scopes) .palette-item[data-scope=if]{background:color-mix(in srgb,#3b9cf0 14%,#fff)}.livecode-editor .cm-scopeLayer .cm-scope-sel{background:transparent;border:2px solid var(--accent);box-shadow:0 0 0 3px var(--accent-faint)}.livecode-editor .cm-line.cm-debug-line{background:#ffd60a59;border-inline-start-color:#e0a800}.livecode-editor .cm-breakpoint-gutter .cm-gutterElement,.livecode-editor .cm-lineNumbers .cm-gutterElement{cursor:pointer}.livecode-editor .cm-breakpoint-gutter .cm-gutterElement{display:flex;align-items:center;justify-content:center;width:14px;padding-inline-start:4px}.livecode-editor .cm-breakpoint{display:inline-block;width:10px;height:10px;border-radius:50%;background:#d33}.livecode-editor .cm-breakpoint-gutter .cm-gutterElement:not(:has(.cm-breakpoint)):hover:before{content:"";width:10px;height:10px;border-radius:50%;background:#dd33334d}.livecode-debug{flex:none;max-height:30%;overflow-y:auto}.livecode-debug[hidden]{display:none}.livecode-debug h2{margin:0 0 4px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.livecode-vars tr.changed td{animation:var-changed 1.6s ease-out;font-weight:700}@keyframes var-changed{0%{background:#ffd60ab3}to{background:transparent}}.livecode-editor .cm-ph,.livecode-editor .cm-ph *{color:var(--muted)!important;font-style:italic;font-weight:400!important}.livecode-editor .cm-err{text-decoration:underline wavy #d33;text-decoration-skip-ink:none;text-underline-offset:3px}.livecode-editor .cm-selectionBackground,.livecode-editor .cm-focused .cm-selectionBackground{background:color-mix(in srgb,var(--accent) 25%,transparent)!important}.livecode-editor .cm-matchingBracket{background:color-mix(in srgb,var(--accent) 20%,transparent);outline:1px solid color-mix(in srgb,var(--accent) 50%,transparent)}.cm-tooltip.cm-tooltip-autocomplete{border:1px solid var(--border);border-radius:8px;background:var(--panel);box-shadow:0 4px 16px #0000001f;overflow:hidden}.cm-tooltip.cm-tooltip-autocomplete>ul{font:14px/1.4 ui-monospace,SF Mono,Menlo,Consolas,monospace;max-height:16em}.cm-tooltip.cm-tooltip-autocomplete>ul>li{padding:4px 10px}.cm-tooltip.cm-tooltip-autocomplete>ul>li[aria-selected]{background:var(--accent);color:#fff}.cm-tooltip-autocomplete .cm-completionDetail{margin-inline-start:12px;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-style:normal;color:var(--muted)}.cm-tooltip-autocomplete li[aria-selected] .cm-completionDetail{color:#ffffffd9}.livecode-run{padding:3px 10px;font-size:13px;margin-inline-start:6px}.console{display:flex;flex:none;flex-direction:column;gap:6px;height:180px;min-height:80px;padding:6px 10px 8px;background:var(--bg);border:1px solid var(--border);border-radius:8px}.console[hidden],.console-resizer[hidden]{display:none}.console-head{display:flex;align-items:center;gap:8px}.console-head h2{margin:0;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.console-hide{margin-inline-start:auto;padding:0 8px;font-size:14px}.console-resizer{flex:none;height:10px;margin-block:-5px;cursor:row-resize;touch-action:none;position:relative}.console-resizer:after{content:"";position:absolute;inset-inline:0;top:4px;height:2px}.console-resizer:hover:after,.console-resizer:focus-visible:after,.console-resizer.dragging:after{background:var(--accent)}.console-resizer:focus-visible{outline:none}.livecode-console-lines{flex:1;min-height:0;overflow:auto;font-size:var(--code-size, 14px);white-space:pre-wrap}.livecode-console-lines .typed{color:var(--accent)}.livecode-console-lines .pending:after{content:"▌";color:var(--accent);animation:blink 1s steps(1) infinite}@keyframes blink{50%{opacity:0}}.livecode-console-input{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.livecode-console-input[hidden]{display:none}.livecode-console-input label{display:flex;flex:1;align-items:center;gap:6px;min-width:0;font-size:var(--code-size, 14px)}.livecode-console-input input{flex:1;min-width:60px;padding:4px 8px;font:inherit}.livecode-console-error,.livecode-console-notice{margin:0;font-size:13px;color:var(--muted)}.livecode-console-error{flex-basis:100%;color:#c62828}.livecode-console-notice.error{color:#c62828}.livecode-problem{margin:0;min-height:1.4em;font-size:13px;color:#c62828}.live-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.shell.live .live-resizer{display:block}.live-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.live-resizer:hover:after,.live-resizer:focus-visible:after,.shell.resizing .live-resizer:after{background:var(--accent)}.live-resizer:focus-visible{outline:none}@media(max-width:1100px){.livecode{width:340px}}@media(max-width:700px){.shell.learning .learn-resizer,.shell.live .live-resizer,.shell.files-open .files-resizer{display:none}.shell .files{width:auto!important;max-height:40vh;border-inline-end:none;border-bottom:1px solid var(--border)}.shell .learn,.shell .livecode,.columns>.app{width:auto!important;min-width:0}.livecode{height:40vh;height:40dvh;border-inline-start:none;border-top:1px solid var(--border)}.learn-rail{flex-direction:row;justify-content:center;width:auto;padding:4px 0;border-inline-end:none;border-bottom:1px solid var(--border)}.learn-rail span{writing-mode:horizontal-tb}.live-rail{border-inline-start:none;border-bottom:none;border-top:1px solid var(--border)}.columns{flex-direction:column}.editor-rail{border-inline-start:none;border-bottom:1px solid var(--border)}.learn{width:auto;height:45vh;height:45dvh;border-inline-end:none;border-bottom:1px solid var(--border)}.columns>.app,.shell.editor-hidden .livecode{flex:1;min-height:0;height:auto}}@media print{@page{margin:12mm}body>*:not(.print-sheet){display:none!important}body{background:#fff!important}.print-sheet{display:block}.print-sheet svg{display:block;width:100%;height:auto;max-height:100vh}}.learn .term{text-decoration:underline dotted var(--accent);text-decoration-thickness:2px;text-underline-offset:3px;cursor:help;border-radius:3px}.learn .term:focus-visible,.learn .term[aria-expanded=true]{outline:none;background:var(--accent-soft)}.term-tip{position:fixed;z-index:1000;max-width:min(300px,calc(100vw - 16px));padding:8px 10px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 16px #0000002e;font-size:14px;line-height:1.4}.term-tip[hidden]{display:none}.learn .ui-pointer{color:var(--accent);font-weight:600;border-bottom:2px solid var(--accent-soft);cursor:pointer;border-radius:3px}.learn .ui-pointer:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.ui-spot{outline:3px solid var(--accent)!important;outline-offset:-3px;box-shadow:inset 0 0 0 9999px var(--accent-faint);animation:ui-spot-pulse 1.2s ease-in-out infinite}@keyframes ui-spot-pulse{50%{outline-color:var(--accent-glow)}}@media(prefers-reduced-motion:reduce){.ui-spot{animation:none}}.learn-graphic{display:block;width:100%;max-width:440px;height:auto;margin:0 auto;border-radius:8px;border:1px solid var(--border)}.lesson-table{overflow-x:auto;margin:8px 0}.lesson-table table{border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}.lesson-table th,.lesson-table td{border:1px solid var(--border);padding:3px 8px;text-align:start;white-space:nowrap}.lesson-table th{background:var(--bg)}.learn-hints .lesson-note{margin-top:8px}.learn-teacher{margin-top:24px;border-top:1px solid var(--border);padding-top:12px}.learn-teacher summary{cursor:pointer;color:var(--muted)}.learn-teacher input{flex:1;min-width:0}.shell.editor-hidden:not(.live):not(.learning) .files{flex:1 1 0;width:auto!important}.livecode-swing{height:380px}.livecode-swing[hidden]{display:none}.livecode-swing-display{position:relative;flex:1;min-height:0;overflow:hidden;border-radius:6px;background:#e9ecf0}.learn-caesar-stage{display:flex;flex-direction:column;align-items:center;gap:8px}.learn-caesar-disc{width:min(100%,320px);touch-action:none;user-select:none;-webkit-user-select:none}.learn-caesar-disc text{font:600 19px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.learn-caesar-disc .outer-disc{fill:#f3e6c8;stroke:#8a6d3b;stroke-width:3}.learn-caesar-disc .outer-letters text{fill:#3d2f14;cursor:pointer}.learn-caesar-disc .inner{cursor:grab;transition:transform .25s ease}.learn-caesar-disc .inner.dragging{cursor:grabbing;transition:none}.learn-caesar-disc .inner-disc{fill:#6b4f2a;stroke:#3d2f14;stroke-width:2}.learn-caesar-disc .inner-letters text{fill:#fff8e8}.learn-caesar-disc .tick{stroke:#8a6d3b;stroke-width:1;opacity:.6}.learn-caesar-disc .hub{fill:#f3e6c8;stroke:#3d2f14;stroke-width:2}.learn-caesar-disc .window{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2.5}.learn-caesar-disc .marked text{fill:var(--accent);font-size:23px}.learn-caesar-disc .inner-letters .marked text{fill:#ffd54a}.learn-caesar-disc .key{font-size:40px;font-weight:700;fill:#3d2f14}.learn-caesar-disc .key-label{font-size:15px;fill:#6e5a33}.learn-caesar-controls,.learn-caesar-mode{display:flex;justify-content:center;gap:8px}.learn-caesar-controls button{min-width:56px;font-size:1.05em}.learn-caesar-mode{margin:10px 0 6px}.learn-caesar-mode button.active{background:var(--accent);border-color:var(--accent);color:#fff}.learn-caesar-fields{display:grid;gap:8px}.learn-caesar-fields label,.learn-caesar-fields>div{display:grid;gap:3px;color:var(--muted);font-size:.9em}.learn-caesar-fields input,.learn-caesar-output{font:600 1.15em ui-monospace,Menlo,Consolas,monospace;letter-spacing:.08em;padding:6px 8px;border:1px solid var(--border);border-radius:8px;color:var(--text);background:var(--panel);overflow-wrap:anywhere}.learn-caesar-output{background:var(--bg)}.learn-rescue-path{display:flex;align-items:center;gap:6px;margin:8px 0 2px}.learn-rescue-ludwig{width:32px;height:32px;border-radius:50%;flex:none}.learn-rescue-dot{flex:1;height:6px;max-width:48px;border-radius:3px;background:var(--border);transition:background .3s}.learn-rescue-dot.done{background:#15803d}.learn-rescue-tower{position:relative;font-size:34px;line-height:1;margin-inline-start:auto}.learn-rescue-zora,.learn-rescue-fox{position:absolute;font-size:15px}.learn-rescue-zora{top:-4px;left:50%;transform:translate(-50%)}.learn-rescue-fox{bottom:-2px;right:-12px;transition:transform .8s,opacity .8s}.learn-rescue.freed .learn-rescue-fox{transform:translate(60px);opacity:0}.learn-rescue.freed .learn-rescue-zora{display:none}.learn-rescue-free{font-size:24px;line-height:1;animation:learn-rescue-jump .6s ease-out 3}@keyframes learn-rescue-jump{50%{transform:translateY(-12px)}}.learn-rescue-answer{display:flex;gap:8px;align-items:center}.learn-rescue-number{width:6ch;font-size:1.1em;padding:6px 8px;text-align:center}.learn-rescue-label{margin:14px 0 4px;color:var(--muted);font-size:.9em}.learn-rescue-alphabet{display:flex;flex-wrap:wrap;gap:2px;margin-bottom:12px}.learn-rescue-letter{display:inline-flex;flex-direction:column;align-items:center;min-width:22px;padding:2px 0;border-radius:4px;background:var(--bg)}.learn-rescue-letter small{font-size:10px;color:var(--muted)}.learn-rescue-letter.hit{background:#fde68a;outline:2px solid #d97706}.learn-rescue-charat{font-weight:600}.learn-rescue-moved{font-weight:400!important}.learn-rescue-word{font:inherit;padding:1px 4px;border:1px solid var(--accent);border-radius:4px}.learn-rescue-gate{padding:8px 0;margin-bottom:8px}.learn-cw{--cw-cell: 30px;display:flex;flex-wrap:wrap;gap:12px 20px;margin-bottom:10px}.learn-cw-grid{display:grid;gap:2px}.learn-cw-cell{position:relative;width:var(--cw-cell);height:var(--cw-cell)}.learn-cw-cell input{width:100%;height:100%;box-sizing:border-box;padding:0;border:1px solid #6e6e73;border-radius:3px;background:#fff;color:#1c1c1e;text-align:center;font:600 16px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase}.learn-cw-cell input:disabled{opacity:1;-webkit-text-fill-color:#1c1c1e}.learn-cw-cell.key input{background:#fde68a}.learn-cw-cell.given input{color:#1d4ed8;-webkit-text-fill-color:#1d4ed8}.learn-cw-cell.arrived input{animation:learn-cw-arrive .6s ease-out}.learn-cw-cell input.wrong{border-color:#b91c1c;background:#fee2e2}@keyframes learn-cw-arrive{0%{transform:scale(1.6)}}.learn-cw-number,.learn-cw-keyindex{position:absolute;font-size:8px;line-height:1;pointer-events:none;color:#6e6e73;z-index:1}.learn-cw-number{top:2px;left:2px}.learn-cw-keyindex{bottom:2px;right:2px;color:#b45309}.learn-cw-keyword{margin:8px 0 0;font-weight:600}.learn-cw-keybox{display:inline-block;width:22px;height:24px;margin-inline-end:2px;border-bottom:2px solid #d97706;background:#fef3c7;text-align:center;line-height:24px;white-space:pre}.learn-cw-cluebox{flex:1;min-width:200px}.learn-cw-clues{margin:4px 0 10px;padding-inline-start:24px}.learn-cw-clues li{cursor:pointer}@media(max-width:380px){.learn-cw{--cw-cell: 28px}}.learn-cloze{border:2px solid var(--accent);border-radius:12px;padding:12px 14px;margin:0 0 14px}.learn-cloze-title{display:block;font-size:1.05em;margin-bottom:4px}.learn-cloze p{margin:0 0 8px}.learn-cloze-hint{color:var(--muted);font-size:.9em}.learn-cloze-code{margin:0 0 10px;padding:8px 10px;border-radius:8px;background:var(--bg, #f2f2f7);font-size:13px;line-height:1.9;overflow-x:auto}.learn-cloze-code .ln{white-space:pre;min-height:1.9em}.learn-cloze-gap{font-size:13px;padding:1px 3px;margin:0 1px;min-width:0;max-width:none;border:1px solid #8e8e93;border-bottom-width:2px;border-radius:4px;background:#fff;color:#1c1c1e;text-align:center}.learn-cloze-gap.right{border-color:#34c759;background:#34c75924}.learn-cloze-gap.wrong{border-color:#ff3b30;background:#ff3b301a}.learn-cloze-gap.shown{border-color:#d97706;background:#fef3c7}.learn-cloze-gap:disabled{opacity:1;-webkit-text-fill-color:currentColor}.learn-cloze-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.learn-cloze-check{font-weight:600}.learn-cloze-status:empty{display:none}.learn-cloze-status{padding:8px 12px;border-radius:8px;font-weight:600}.learn-cloze-status.right{background:#dcfce7}.learn-cloze-status.wrong{background:#fee2e2}.learn-mark{color:inherit;padding:0 3px;border-radius:3px}.learn-mark.blau{background:#e4f1fd}.learn-mark.orange{background:#ffedd5}.learn-mark.gruen{background:#dcfce7}.learn-mark.gelb{background:#fdf4db}.learn-mark.rosa{background:#fce9f2}.startup-error{max-width:520px;margin:15vh auto 0;padding:0 16px;font:16px/1.5 system-ui,-apple-system,sans-serif;color:var(--text)}.startup-error h1{font-size:22px}.startup-error button{font-size:16px;padding:8px 16px}.startup-error pre{margin-top:24px;color:var(--muted);font-size:12px;white-space:pre-wrap}.visubot-stage{position:relative;height:280px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:linear-gradient(#dfe9f3,#f6f3ec)}.visubot-live{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 8px;font-size:12px;color:var(--muted)}.visubot-live:empty{display:none}.visubot-live.connected{color:#0f8a5f;font-weight:600}.visubot-worlds{display:flex;gap:6px;margin:0 0 6px}.visubot-worlds button.active{background:var(--accent);border-color:var(--accent);color:#fff}.visubot-canvas{display:block;width:100%;height:100%;touch-action:none}.visubot-status{font-size:12px;color:var(--muted);margin:6px 0 0}.visubot-controls{margin-top:8px;font-size:13px}.visubot-controls summary{cursor:pointer;font-weight:600}.visubot-controls .hint{color:var(--muted);font-size:12px;margin:4px 0 6px}.visubot-controls label{display:grid;grid-template-columns:9.5em 1fr 2.5em;align-items:center;gap:6px;margin:2px 0}.visubot-controls output{text-align:end;font-variant-numeric:tabular-nums}.visubot-presses{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.visubot-presses button{min-width:2.2em}.visubot-presses button.pressed{background:var(--accent);border-color:var(--accent);color:#fff}.visubot-check{margin-top:8px;font-size:13px}.visubot-check summary{cursor:pointer;font-weight:600}.visubot-check .hint{color:var(--muted);font-size:12px;margin:4px 0 6px}.visubot-check-sensors{margin-top:8px;border-collapse:collapse;font-variant-numeric:tabular-nums}.visubot-check-sensors th{text-align:start;font-weight:400;padding:1px 12px 1px 0}.palette-visubot-title{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:14px 0 6px}.palette-sensor{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border-style:dashed}.palette-sensor code{font-size:12px;color:var(--muted)}.palette-visubot .palette-item{border-color:#a7a0d3;background:color-mix(in srgb,#a7a0d3 16%,transparent)}.visubot-model{margin:12px 0}.visubot-model .visubot-stage{height:300px}.visubot-model-hint{font-size:13px;margin:4px 0 0}.visubot-part-label{position:absolute;pointer-events:none;padding:2px 8px;border-radius:6px;background:#14181ed9;color:#fff;font-size:13px;white-space:nowrap;z-index:1}.robot-part-link{text-decoration:underline 2px #f2b705;text-underline-offset:3px;cursor:pointer}.robot-part-link:hover,.robot-part-link:focus-visible{background:color-mix(in srgb,#f2b705 25%,transparent);outline:none}.visubot-quiz-question{font-size:15px;margin:12px 0 6px}.visubot-quiz-question.done{color:var(--success, #2f9e44)}.visubot-quiz-feedback{min-height:1.4em;margin:6px 0}.visubot-quiz-feedback.right{color:var(--success, #2f9e44)}.visubot-quiz-feedback.wrong{color:var(--danger, #c92a2a)}.diagram-tools .mbot-link{margin-inline-start:auto;height:30px;padding:0 10px;white-space:nowrap}.diagram-tools .mbot-link:not([hidden])+.sim-toggle,.diagram-tools .mbot-upload:not([hidden])+.sim-toggle{margin-inline-start:6px}.diagram-tools .mbot-upload{margin-inline-start:6px;height:30px;padding:0 10px;white-space:nowrap}.mbot-upload-steps{margin:0 0 12px;padding-inline-start:22px;line-height:1.5}.mbot-upload progress{width:100%;height:10px}.mbot-upload-status.done{color:var(--success, #2f9e44);font-weight:600}.settings-mbot-link{display:grid;gap:4px;margin-top:8px}.settings-mbot-link small{font-size:12px;color:var(--muted)}.world-chooser{margin-bottom:4px}.world-hint{display:block;font-size:12px;color:var(--muted);margin-bottom:8px}.start-world{margin-bottom:14px}.robotpreview,.robotpreview-rail,.preview-resizer{display:none}.shell.robot-world.preview .robotpreview{display:flex}.shell.robot-world:not(.preview) .robotpreview-rail{display:flex;border-inline-end:none;border-inline-start:1px solid var(--border)}.robotpreview-rail svg{transform:scaleX(-1)}.shell.robot-world.preview:not(.preview-stacked) .preview-resizer{display:block}.robotpreview{flex:0 1 auto;width:360px;min-width:220px;flex-direction:column;gap:6px;padding:10px 12px 12px;background:var(--panel);border-inline-start:1px solid var(--border);min-height:0;overflow-y:auto}.robotpreview .hint{margin:0;font-size:.85em;color:var(--muted, inherit)}.robotpreview .robotpreview-stage{flex:1 1 auto;height:auto;min-height:160px}.robotpreview .robotpreview-status{margin:0;min-height:1.3em}.robotpreview-height{display:none}.robotpreview.simulation>.visubot-worlds,.robotpreview.simulation>.robotpreview-stage,.robotpreview.simulation>.robotpreview-status,.robotpreview.simulation .robotpreview-play{display:none}.robotpreview .visubot-viewport{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.robotpreview .visubot-viewport .visubot-stage{flex:1 1 auto;height:auto;min-height:160px}.visubot-elsewhere{display:none;margin:0 0 8px;font-size:12px;color:var(--muted)}.visubot:not(:has(>.visubot-viewport)) .visubot-elsewhere{display:block}.shell.preview-stacked .robotpreview{flex:0 0 auto;width:auto!important;height:320px;min-width:0;margin:4px -12px -12px;padding-top:0;border-inline-start:none;border-top:1px solid var(--border);overflow:visible}.shell.preview-stacked .robotpreview-height{display:block;height:10px;margin:-5px 0 0;cursor:row-resize;touch-action:none;position:relative}.robotpreview-height:after{content:"";position:absolute;inset-inline:0;top:4px;height:2px;background:transparent;transition:background .15s}.robotpreview-height:hover:after,.robotpreview-height:focus-visible:after,.shell.resizing .robotpreview-height:after{background:var(--accent)}.robotpreview-height:focus-visible{outline:none}.preview-resizer{flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.preview-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.preview-resizer:hover:after,.preview-resizer:focus-visible:after,.shell.resizing .preview-resizer:after{background:var(--accent)}.preview-resizer:focus-visible{outline:none}.palette-group{grid-column:1 / -1}.palette-group button{display:flex;align-items:center;gap:6px;width:100%;margin-top:4px;padding:2px 0;border:none;background:none;color:var(--muted);font-size:12px;font-weight:600;text-align:start;cursor:pointer}.palette-group button:before{content:"▾";transition:transform .15s}.palette-group button[aria-expanded=false]:before{transform:rotate(-90deg)}.palette-item[hidden]{display:none}.editor-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.editor-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.editor-resizer:hover:after,.editor-resizer:focus-visible:after,.shell.resizing .editor-resizer:after{background:var(--accent)}.editor-resizer:focus-visible{outline:none}.shell.code-main.live:not(.editor-hidden) .editor-resizer{display:block}.shell.code-main.live:not(.editor-hidden) .live-resizer{display:none}.shell.code-main.live:not(.editor-hidden) .app{flex:0 1 auto;width:460px;min-width:300px}.shell.code-main.live:not(.editor-hidden) .livecode{flex:1 1 0;width:auto!important;min-width:0}.shell.code-main.live:not(.editor-hidden) .livecode{order:1}.shell.code-main.live:not(.editor-hidden) .editor-resizer{order:2}.shell.code-main.live:not(.editor-hidden) .app{order:3;border-inline-start:1px solid var(--border)}.shell.code-main.live:not(.editor-hidden) .live-rail,.shell.code-main.live:not(.editor-hidden) .preview-resizer,.shell.code-main.live:not(.editor-hidden) .robotpreview,.shell.code-main.live:not(.editor-hidden) .robotpreview-rail{order:4}[data-action=swap-main]{font-size:16px;line-height:1}[data-action=swap-main][aria-pressed=true]{color:var(--accent)}.palette-resizer{grid-area:pal;justify-self:end;width:10px;margin-inline-end:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.palette-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.palette-resizer:hover:after,.palette-resizer:focus-visible:after,.shell.resizing .palette-resizer:after{background:var(--accent)}.palette-resizer:focus-visible{outline:none}.app.simulating .palette-resizer{display:none}:root.visuobject-theme{--bg: #edf4f6;--text: #17292e;--muted: #566a70;--border: #cddde1;--accent: #0e7c86;--accent-soft: rgba(14, 124, 134, .2);--accent-faint: rgba(14, 124, 134, .08);--accent-glow: rgba(14, 124, 134, .35)}.visuobject-obj,.visuobject .brand .logo{color:var(--accent)}.shell.visuobject button.text-button{padding:5px 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);font:inherit;cursor:pointer}.shell.visuobject button.text-button:hover{border-color:var(--accent);color:var(--accent)}:root.visuobject-theme{--vo-bar: #e3edf0}.vo-columns{display:grid;grid-template-columns:var(--vo-cols, 260px 1px minmax(0, 45fr) 1px minmax(0, 55fr));flex:1;min-height:0;border-top:1px solid var(--border)}.vo-columns.vo-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.vo-pane{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--panel)}.vo-pane.collapsed>:not(.vo-strip){display:none}.vo-strip{display:none;flex:1;align-items:center;justify-content:center;padding:12px 0;border:0;background:var(--vo-bar);color:var(--muted);font:600 14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;writing-mode:vertical-rl;cursor:pointer}.vo-pane.collapsed>.vo-strip{display:flex}.vo-strip:hover,.vo-strip:focus-visible{color:var(--accent);background:var(--accent-faint);outline:none}.vo-splitter{position:relative;z-index:4;background:var(--border);cursor:col-resize;touch-action:none;outline:none}.vo-splitter:after{content:"";position:absolute;top:0;right:-4px;bottom:0;left:-4px}.vo-splitter:hover,.vo-splitter:focus-visible,.vo-resizing .vo-splitter{background:var(--accent)}.vo-splitter.fixed{cursor:default;background:var(--border)}.vo-bar{display:flex;flex-wrap:wrap;align-items:stretch;min-height:40px;background:var(--vo-bar);border-bottom:1px solid var(--border);font-size:14px}.vo-bar-title{display:flex;flex:1;align-items:center;margin:0;text-transform:none;letter-spacing:normal;padding:0 12px;font-size:14px;font-weight:600;color:var(--text)}.vo-bar-actions{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:6px;padding:4px 4px 4px 0}.shell.visuobject .vo-bar button.text-button{padding:2px 8px;border-radius:6px}.vo-collapse{padding:0 12px;border:0;background:none;color:var(--muted);font-size:16px;font-weight:700;cursor:pointer}.vo-collapse:hover,.vo-collapse:focus-visible{color:var(--accent)}.vo-tabs{display:flex;flex:1;min-width:0;overflow-x:auto}.vo-tab{display:flex;align-items:stretch;border-right:1px solid var(--border);border-bottom:3px solid transparent}.vo-tab.active{background:var(--panel);border-bottom-color:var(--accent)}.vo-tab [role=tab]{padding:0 4px 0 14px;border:0;background:none;color:var(--text);font:13px ui-monospace,SF Mono,Menlo,Consolas,monospace;white-space:nowrap;cursor:pointer}.vo-tab.active [role=tab]{font-weight:700}.vo-tab [role=tab]:hover{color:var(--accent)}.vo-tab-close{padding:0 10px 0 6px;border:0;background:none;color:var(--muted);font-size:15px;cursor:pointer;visibility:hidden}.vo-tab.active .vo-tab-close,.vo-tab:hover .vo-tab-close{visibility:visible}.vo-tab-close:hover{color:var(--accent)}.vo-tab-close .vo-dot,.vo-tab-close.unsaved .vo-x{display:none}.vo-tab-close.unsaved{visibility:visible;color:var(--text)}.vo-tab-close.unsaved .vo-dot{display:inline;font-size:11px}.vo-tab-close.unsaved:hover .vo-dot{display:none}.vo-tab-close.unsaved:hover .vo-x{display:inline}.vo-no-file{display:flex;align-items:center;padding:0 12px;color:var(--muted)}.vo-editor{flex:1;min-height:0;overflow:auto;font-size:14px}.vo-foot{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;padding:6px 12px;border-top:1px solid var(--border);background:var(--vo-bar)}.vo-hint{color:var(--muted);flex:1 1 260px}.vo-canvas{position:relative;flex:1;min-height:0;overflow:auto;background:radial-gradient(circle,var(--border) 1px,transparent 1px) 0 0 / 20px 20px;outline:none}.vo-frames{position:absolute;inset:0 auto auto 0;z-index:0;pointer-events:none;overflow:visible}.vo-package-frame{fill:#0e7c8609;stroke:var(--muted);stroke-width:1.2}.vo-package.current .vo-package-frame{stroke:var(--accent);fill:var(--accent-faint)}.vo-package-name{font:600 12px ui-monospace,SF Mono,Menlo,Consolas,monospace;fill:var(--muted)}.vo-package.current .vo-package-name{fill:var(--accent)}.vo-lines{position:absolute;inset:0 auto auto 0;z-index:3;pointer-events:none;overflow:visible}.vo-rel{stroke:var(--text);stroke-width:1.4;fill:none}.vo-rel.ghost{stroke:var(--accent);stroke-dasharray:4 4}.vo-hit{stroke:transparent;stroke-width:12;pointer-events:stroke;cursor:pointer}.vo-relation:hover .vo-rel,.vo-relation:hover .vo-diamond{stroke:var(--accent)}.vo-relation.selected .vo-rel,.vo-relation.selected .vo-diamond{stroke:var(--accent);stroke-width:2.4}.vo-relation.selected .vo-label-svg{fill:var(--accent)}.vo-diamond{fill:var(--panel);stroke:var(--text);stroke-width:1.4}.vo-diamond.filled{fill:var(--text)}.vo-relation.selected .vo-diamond.filled{fill:var(--accent)}.vo-label-svg.name{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-style:italic;fill:var(--text)}.vo-rel.dashed{stroke-dasharray:6 4}.vo-hollow,.vo-open{fill:none;stroke:var(--text);stroke-width:1.4}.vo-label-svg{font:12px ui-monospace,SF Mono,Menlo,Consolas,monospace;fill:var(--muted);paint-order:stroke;stroke:var(--panel);stroke-width:4px}.vo-empty{margin:24px;max-width:40ch;color:var(--muted)}.vo-status{margin:0;color:#b3261e}.vo-status:empty{display:none}.vo-status.hint{color:var(--accent)}.uml-class{position:absolute;left:16px;top:16px;min-width:150px;background:var(--panel);border:1.5px solid var(--text);font:13px/1.5 ui-monospace,SF Mono,Menlo,Consolas,monospace;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.uml-connect{position:absolute;right:-11px;top:50%;width:20px;height:20px;margin-top:-10px;padding:0;border:2px solid var(--panel);border-radius:50%;background:var(--accent);box-shadow:0 1px 4px #00000040;cursor:crosshair;touch-action:none}.uml-connect:after{content:"";position:absolute;top:5px;right:4px;bottom:5px;left:5px;background:#fff;clip-path:polygon(0 35%,55% 35%,55% 0,100% 50%,55% 100%,55% 65%,0 65%)}.uml-class.drop{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.vo-relmenu{position:absolute;z-index:10;display:grid;min-width:220px;padding:6px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #0000002e;font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-relmenu p{margin:2px 8px 6px;color:var(--muted);font-size:12px}.vo-relmenu button{display:flex;align-items:center;gap:10px;padding:6px 8px;border:0;border-radius:6px;background:none;color:var(--text);font:inherit;text-align:left;cursor:pointer}.vo-relmenu button:hover,.vo-relmenu button:focus-visible{background:var(--accent-faint);color:var(--accent);outline:none}.vo-relicon{flex:none}.vo-palette{display:flex;flex-wrap:wrap;align-items:stretch;gap:2px;padding:4px 6px;border-bottom:1px solid var(--border);background:var(--panel)}.vo-palette-sep{width:1px;margin:4px;background:var(--border)}.vo-tool{display:grid;justify-items:center;gap:1px;min-width:44px;padding:3px 3px 2px;border:1px solid transparent;border-radius:7px;background:none;color:var(--text);font:11px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none}.vo-tool:hover{background:var(--accent-faint);color:var(--accent)}.vo-tool[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.vo-tool[data-tool=class],.vo-tool[data-tool=interface]{cursor:grab}.vo-tool-ghost{position:fixed;z-index:1000;display:grid;justify-items:center;min-width:120px;padding:4px 10px 14px;margin:-14px 0 0 -60px;border:1.5px dashed var(--accent);background:#ffffffe6;font:13px ui-monospace,SF Mono,Menlo,Consolas,monospace;pointer-events:none}.vo-tool-ghost small{color:var(--muted);font-size:11px}.vo-canvas:not([data-tool=select])[data-tool]{cursor:crosshair}.vo-canvas:not([data-tool=select])[data-tool] .uml-class{cursor:crosshair}.vo-canvas:not([data-tool=select])[data-tool] .uml-class:hover,.uml-class.source{border-color:var(--accent)}.uml-class.source{box-shadow:0 0 0 4px var(--accent-soft)}.vo-stage{position:relative;display:flex;flex:1;min-height:0}.vo-stage .vo-canvas{flex:1}.vo-hsplit{flex:0 0 6px;margin:-3px 0;position:relative;z-index:5;cursor:row-resize;touch-action:none}.vo-hsplit:after{content:"";position:absolute;left:0;right:0;top:2px;height:2px;background:transparent}.vo-hsplit:hover:after,.vo-hsplit:focus-visible:after{background:var(--accent)}.vo-hsplit:focus-visible{outline:none}.vo-dock.collapsed+.vo-hsplit,.vo-hsplit:has(+.vo-dock.collapsed){cursor:default;pointer-events:none}.vo-dock{border-top:1px solid var(--border);background:var(--panel)}.vo-dock-bar{min-height:30px}.vo-dock-bar .vo-bar-title{font-size:13px}.vo-dock.collapsed .vo-inspector{display:none}.vo-inspector{display:grid;align-content:start;gap:8px;height:32vh;overflow:auto;padding:8px 12px 10px;font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-inspector-row>label.check,.vo-inspector label.check{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;padding-bottom:6px;color:var(--text);font-size:13px}.vo-inspector input[type=checkbox]{width:auto;margin:0;accent-color:var(--accent)}.vo-inspector fieldset.vo-inspector-ifaces{display:flex;flex-wrap:wrap;gap:4px 14px}.vo-inspector-empty{color:var(--muted)}.vo-inspector-row{display:flex;flex-wrap:wrap;align-items:end;gap:8px 12px}.vo-inspector-row>label{flex:1 1 160px;max-width:260px}.vo-inspector-ends{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:8px}.vo-inspector label{display:grid;gap:3px;color:var(--muted);font-size:12px}.vo-inspector input,.vo-inspector select{box-sizing:border-box;width:100%;min-width:0;padding:4px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-inspector input:focus,.vo-inspector select:focus{border-color:var(--accent);outline:2px solid var(--accent-soft)}.vo-inspector fieldset{display:grid;grid-template-columns:minmax(0,1fr) 84px;align-items:start;gap:6px;min-width:0;margin:0;padding:6px 8px 8px;border:1px solid var(--border);border-radius:8px}.vo-inspector fieldset .vo-wide{grid-column:1 / -1}.vo-reading{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;color:var(--muted)}.vo-reading b{color:var(--text)}.shell.visuobject .vo-reading button.text-button{padding:1px 8px;font-size:12px}.vo-inspector legend{padding:0 4px;color:var(--text);font-weight:600}.vo-inspector small{color:var(--muted);font-size:11px}.vo-inspector p{margin:0}.vo-inspector-kind{font-weight:600;padding-top:4px}.shell.visuobject .vo-inspector button.vo-danger{display:inline-flex;align-items:center;justify-self:start;gap:6px;color:#b3261e}.vo-inspector .vo-danger svg{width:15px;height:15px}.vo-insp-head{position:sticky;top:-8px;z-index:1;margin-top:-8px;padding-top:8px;background:var(--panel);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;border-bottom:1px solid var(--border)}.vo-insp-head .vo-inspector-kind{padding:0}.vo-insp-tabs{display:flex;gap:2px}.shell.visuobject .vo-insp-tabs button{margin-bottom:-1px;padding:5px 12px;border:1px solid transparent;border-bottom:none;border-radius:6px 6px 0 0;background:none;color:var(--muted);font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer}.shell.visuobject .vo-insp-tabs button[aria-selected=true]{border-color:var(--border);background:var(--panel);color:var(--text);font-weight:600}.vo-members{width:100%;border-collapse:collapse}.vo-members th{padding:0 4px 3px;color:var(--muted);font-size:12px;font-weight:500;text-align:left}.vo-members td{padding:2px 4px;vertical-align:middle}.vo-members td.c{width:52px;text-align:center}.vo-members td:first-child{width:112px}.vo-members td:last-child{width:32px}.vo-members .icon svg{width:15px;height:15px}.vo-doc textarea{box-sizing:border-box;width:100%;max-width:780px;padding:4px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;resize:vertical}.vo-insp-sep{align-self:stretch;width:1px;margin:0 4px;background:var(--border)}.vo-insp-label{align-self:center;color:var(--muted);font-size:12px}.uml-class.selected{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);z-index:2}.uml-head{display:grid;justify-items:center;padding:4px 10px;font-weight:700}.uml-head small{font-weight:400;font-size:11px;color:var(--muted)}.uml-class.abstract .uml-name,.uml-member.abstract{font-style:italic}.uml-member.static{text-decoration:underline}.uml-class ul{list-style:none;margin:0;padding:3px 0;border-top:1.5px solid var(--text);min-height:12px}.uml-class.selected ul{border-top-color:var(--accent)}.uml-class li{padding:0 10px;white-space:nowrap}.uml-member.selected{background:var(--accent-soft)}.uml-add{color:var(--accent);font-style:italic;cursor:pointer;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:12px}.uml-add:hover{text-decoration:underline}.uml-input{font:inherit;padding:0 4px;margin:0 -5px;border:1px solid var(--accent);border-radius:4px;outline:none;max-width:340px}.uml-tools{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;padding:6px 10px;border-top:1px dashed var(--border);font:12px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:default}.uml-tools label{display:inline-flex;gap:4px;align-items:center}.uml-tools button.icon svg{width:16px;height:16px}.vo-ws{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 10px 4px;font-size:13px}.vo-ws[hidden]{display:none}.vo-ws.ask{margin:8px 10px 4px;padding:10px;border:1px solid var(--accent);border-radius:8px;background:var(--bg, #fff)}.vo-ws.ask p{flex-basis:100%;margin:0}.vo-ws.ask .hint{color:var(--muted);font-size:12px;margin-bottom:4px}.vo-ws-name{display:inline-flex;align-items:center;gap:6px;margin-right:auto;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shell.visuobject .vo-ws button.text-button{padding:2px 8px;border-radius:6px}.shell.visuobject .vo-ws button.text-button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.vo-lines .vo-end-hit{fill:transparent;pointer-events:all;cursor:context-menu}.vo-lines .vo-label-svg.editable{pointer-events:all;cursor:pointer}.vo-lines .vo-label-svg.editable:hover{fill:var(--accent);text-decoration:underline}.vo-lines .vo-label-svg.placeholder{fill:var(--muted);opacity:.6;font-style:italic}.vo-endpop{position:absolute;z-index:12;display:grid;gap:8px;width:min(330px,calc(100% - 16px));box-sizing:border-box;padding:10px 12px;background:var(--panel);border:1px solid var(--accent);border-radius:10px;box-shadow:0 8px 24px #00000029;font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-endpop p{margin:0}.vo-endpop label{display:grid;gap:3px;color:var(--muted);font-size:12px}.vo-endpop input{box-sizing:border-box;min-width:0;padding:4px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-endpop-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.vo-endpop-row>span{flex-basis:100%;color:var(--muted);font-size:12px}.vo-endpop-row button{padding:2px 8px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:12px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer}.vo-endpop-row button[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.vo-endpop-row input{width:64px}.vo-new{position:relative}.vo-new-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:30;display:grid;min-width:190px;padding:4px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #00000024}.vo-new-menu[hidden]{display:none}.vo-new-menu button{display:flex;align-items:center;gap:8px;padding:6px 8px;border:0;border-radius:6px;background:none;color:var(--text);font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;text-align:left;cursor:pointer}.vo-new-menu button:hover,.vo-new-menu button:focus-visible{background:var(--accent-soft);outline:none}.vo-badge.folder.source{box-shadow:inset 0 3px #ffffff59,inset -5px -4px #8a6d2b}.confirm-card.vo-wizard{display:grid;gap:10px;width:min(520px,100%);max-width:none;max-height:calc(100vh - 32px);overflow:auto;box-sizing:border-box;font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-wizard h2{margin:0;font-size:17px}.vo-wizard .hint{margin:0;color:var(--muted);font-size:13px}.vo-wizard>label{display:grid;grid-template-columns:130px minmax(0,1fr);align-items:center;gap:8px;color:var(--muted);font-size:13px}.vo-wizard input[type=text],.vo-wizard select{box-sizing:border-box;width:100%;min-width:0;padding:5px 7px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:inherit}.vo-wizard fieldset{margin:0;padding:6px 10px 8px;border:1px solid var(--border);border-radius:8px}.vo-wizard legend{padding:0 4px;color:var(--muted);font-size:13px}.vo-wizard-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}.vo-wizard-row select,.vo-wizard-row input[type=text]{width:auto;flex:1 1 160px}.vo-wizard-list{display:grid;gap:4px}.vo-wizard .check{display:inline-flex;align-items:center;gap:6px}.vo-wizard code{font-size:12px}.vo-wizard-error{min-height:1em;margin:0;color:#b3261e;font-size:13px}.vo-wizard .group button.primary{background:var(--accent);border-color:var(--accent);color:#fff}@media(max-width:560px){.vo-wizard>label{grid-template-columns:1fr}}.vo-dirty{color:var(--accent)}.vo-tree-tools{display:flex;flex-wrap:wrap;gap:6px;padding:8px 10px 4px}.shell.visuobject .vo-tree-tools button.text-button{padding:2px 8px;border-radius:6px}.vo-tree{flex:1;min-height:0;overflow:auto;padding:6px;font:13px/1.3 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-tree ul{list-style:none;margin:0;padding:0}.vo-row{display:flex;align-items:center;gap:6px;min-height:28px;padding:0 6px 0 calc(4px + var(--depth, 0) * 14px);border-radius:7px;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;outline:none}.vo-row:hover{background:var(--accent-faint)}.vo-row:focus-visible{box-shadow:inset 0 0 0 2px var(--accent-soft)}.vo-row.active .vo-label{font-weight:600}.vo-row.selected{background:var(--accent-soft);color:var(--text)}.vo-twisty,.vo-twisty-space{flex:none;width:18px;height:18px}.vo-twisty{display:grid;place-items:center;padding:0;border:0;border-radius:4px;background:none;color:var(--muted);cursor:pointer}.vo-twisty svg{transition:transform .15s ease}[aria-expanded=true]>.vo-row .vo-twisty svg{transform:rotate(90deg)}.vo-twisty:hover{color:var(--accent)}.vo-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.vo-type{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis}.vo-row .uml-input{margin:0;font:inherit}.vo-row-delete{margin-left:auto;visibility:hidden}.vo-tree button.vo-row-delete{width:24px;height:24px}.vo-tree button.vo-row-delete svg{width:14px;height:14px}.vo-row:hover .vo-row-delete,.vo-row.selected .vo-row-delete{visibility:visible}.vo-tree-empty{padding:6px 10px 6px 52px;color:var(--muted);font-size:12px;white-space:normal}.vo-badge{flex:none;display:inline-grid;place-items:center;width:16px;height:16px;border-radius:4px;font:700 10px/1 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:#fff}.vo-badge.project{background:var(--accent);border-radius:5px;box-shadow:inset 0 -5px #0000002e}.vo-badge.project.closed{opacity:.55}.vo-badge.folder{width:17px;height:13px;border-radius:2px 4px 3px 3px;background:#e0a63b;box-shadow:inset 0 3px #ffffff59}.vo-badge.package{width:14px;height:14px;border-radius:3px;background:#b07a2a;transform:rotate(45deg) scale(.82)}.vo-badge.package.empty{background:none;border:1.5px solid #b07a2a}.vo-badge.file{background:#e66a2c;border-radius:3px 6px 3px 3px}.vo-badge.type.class{background:#2f7d32;border-radius:50%}.vo-badge.type.class.abstract{background:#6a9c3a;font-style:italic}.vo-badge.type.interface{background:#7b4fb0;border-radius:50%}.vo-badge.field,.vo-badge.method{width:9px;height:9px;margin:0 3px}.vo-badge.field{border-radius:2px}.vo-badge.method{border-radius:50%}.vo-badge.public{background:#2f9e44}.vo-badge.private{background:#d6453d}.vo-badge.protected{background:#e0a63b}.vo-badge.package.field,.vo-badge.package.method{background:#3b82c4;transform:none;border:0}.vo-badge.static{box-shadow:0 0 0 2px var(--panel),0 0 0 3px currentColor;color:var(--muted)}@media(max-width:760px){.vo-columns{grid-template-columns:1fr;grid-auto-rows:auto;overflow:auto}.vo-splitter{display:none}.vo-explorer:not(.collapsed){height:260px}.vo-code:not(.collapsed){height:320px}.vo-diagram:not(.collapsed){min-height:420px}.vo-pane{border-bottom:1px solid var(--border)}.vo-strip{writing-mode:horizontal-tb;padding:10px}}.shell.visuobject .vo-run-group button.vo-run{color:var(--accent);font-weight:600}.vo-console{display:flex;flex-direction:column;height:32vh;min-height:120px;border-top:1px solid var(--border)}.vo-console[hidden],.vo-swing[hidden]{display:none}.vo-console .vo-dock-bar{gap:10px}.vo-console-status{flex:1;color:var(--muted);font-size:12px}.vo-console-status.error{color:#b3261e}.vo-swing{display:flex;height:60%;padding:6px}.vo-console-lines{flex:1;min-height:0;overflow:auto;margin:0;padding:6px 12px;font-size:13px;white-space:pre-wrap}.uml-note{position:absolute;min-width:120px;max-width:260px;padding:8px 22px 8px 10px;background:#fffbe6;border:1.2px solid var(--text);clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%);font:13px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:#17292e;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;z-index:1}.uml-note:after{content:"";position:absolute;top:0;right:0;width:14px;height:14px;background:linear-gradient(to bottom left,transparent 50%,#e9dfae 50%);border-left:1.2px solid var(--text);border-bottom:1.2px solid var(--text)}.uml-note.selected{outline:3px solid var(--accent-soft);border-color:var(--accent);clip-path:none}.uml-note .uml-connect{z-index:2}.uml-note-text{white-space:pre-wrap;overflow-wrap:anywhere}.uml-note-text.placeholder{color:#8a8a8a;font-style:italic}.uml-note-edit{box-sizing:border-box;width:220px;border:1px solid var(--accent);background:#fffef5;font:inherit;resize:both}.vo-note-link{stroke-dasharray:5 4}.vo-canvas[hidden],.vo-palette[hidden]{display:none}.vo-diagram-switch{display:flex;gap:2px;padding:2px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.shell.visuobject .vo-diagram-switch button{padding:3px 10px;border:none;border-radius:6px;background:none;color:var(--muted);font:600 13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer}.shell.visuobject .vo-diagram-switch button[aria-selected=true]{background:var(--accent);color:#fff}.vo-obj-palette{align-items:center;gap:8px;padding:6px 10px}.vo-obj-new{display:flex;align-items:center;gap:6px;font-size:13px}.vo-obj-new select{padding:3px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.uml-object .uml-objname{text-decoration:underline;font-weight:600}.uml-object.unknown{border-style:dashed}.uml-object .uml-member.changed,.vo-objlink.changed{animation:vo-changed 1.2s ease-out}.uml-object .uml-member.changed{background:#fff3b0}@keyframes vo-changed{0%{background:#ffe066}}.vo-obj-values td:first-child{width:auto;white-space:nowrap}.vo-obj-values td:last-child{width:50%}.vo-dbg-controls{display:inline-flex;gap:2px}.vo-dbg-controls[hidden]{display:none}.vo-console-lines .vo-out-err{color:#b3261e}.vo-console-lines .vo-out-in{color:var(--accent);font-weight:600}.vo-console-input{display:flex;align-items:center;gap:6px;padding:4px 12px 8px;color:var(--accent)}.vo-console-input[hidden]{display:none}.vo-console-input input{flex:1;font-size:13px;padding:4px 6px;border:1px solid var(--accent);border-radius:4px}.vo-dbg{display:grid;grid-template-columns:minmax(160px,1fr) minmax(220px,2fr);gap:12px;padding:8px 12px}.vo-dbg h3{margin:0 0 6px;font-size:12px;font-weight:600;color:var(--muted)}.vo-dbg ol{list-style:none;margin:0;padding:0}.vo-dbg-frame{display:block;width:100%;text-align:start;padding:3px 6px;border:0;border-radius:4px;background:none;color:inherit;font:inherit;cursor:pointer}.vo-dbg-frame.on{background:var(--accent-soft)}.vo-dbg-frame small{color:var(--muted)}.vo-dbg-vars tr.changed td{background:#ffd60a59}@media(max-width:760px){.vo-dbg{grid-template-columns:1fr}}.vo-seqcanvas{overflow:auto}.vo-seqcanvas .vo-empty[hidden]{display:none}.vo-seq{display:block;font:12px ui-monospace,SFMono-Regular,Menlo,monospace}.vo-seq-head rect{fill:var(--panel);stroke:var(--text);stroke-width:1.2}.vo-seq-head text{fill:var(--text);text-decoration:underline}.vo-seq-head.static text{text-decoration:none;font-weight:600}.vo-seq-life{stroke:var(--muted);stroke-dasharray:5 4}.vo-seq-bar{fill:var(--panel);stroke:var(--text);stroke-width:1}.vo-seq-bar.running{fill:var(--accent-soft)}.vo-seq-msg{cursor:pointer}.vo-seq-msg line,.vo-seq-msg path{stroke:var(--text);stroke-width:1.2}.vo-seq-msg .head.filled{fill:var(--text)}.vo-seq-msg text{fill:var(--text)}.vo-seq-msg.return line,.vo-seq-msg.create line{stroke-dasharray:6 4}.vo-seq-msg.exception line,.vo-seq-msg.exception text{stroke:#b3261e;fill:#b3261e}.vo-seq-msg.current line,.vo-seq-msg.current path{stroke:#e0a800;stroke-width:2.4}.vo-seq-msg.current .head.filled{fill:#e0a800}.vo-seq-msg.current text{font-weight:700}.vo-seq-msg:hover text{fill:var(--accent)}.vo-seq-more{fill:var(--muted)}.palette-head{display:flex;align-items:center;gap:4px;margin:0 0 4px}.palette-head h2{flex:1;min-width:0;margin:0}.palette-hide{min-height:26px;padding:2px 5px}.app.compact-palette .palette-head{flex-direction:column;gap:2px}.palette-rail{display:none;grid-area:pal;width:auto}.app.palette-hidden .palette,.app.palette-hidden .palette-resizer{display:none}.app.palette-hidden:not(.simulating) .palette-rail{display:flex}@media(max-width:820px){.palette-head{display:none}.app.palette-hidden .palette{display:block}.app.palette-hidden .palette-rail{display:none!important}}
+:root{--bg: #f2f2f7;--panel: #ffffff;--text: #1c1c1e;--muted: #6e6e73;--border: #d1d1d6;--accent: #007aff;--accent-soft: rgba(0, 122, 255, .18);--accent-faint: rgba(0, 122, 255, .08);--accent-glow: rgba(0, 122, 255, .35);color-scheme:light}:root.visubot-theme{--bg: #f1f0f8;--text: #2f3454;--muted: #6a6890;--border: #d6d3e8;--accent: #e07000;--accent-soft: rgba(253, 161, 21, .24);--accent-faint: rgba(253, 161, 21, .1);--accent-glow: rgba(224, 112, 0, .35)}:root.visubot-theme .selection-frame{stroke:#e07000e6}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font:14px/1.4 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.app{display:grid;grid-template:"tools tools" auto "pal work" 1fr "pal insp" auto / var(--palette-width, 210px) minmax(0,1fr);height:100%;flex:1;min-width:0}.shell{display:flex;flex-direction:column;height:100vh;height:100dvh}.columns{display:flex;flex:1;min-height:0}.columns>.app{min-width:240px}.toolbar{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--border)}button.icon{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:32px;padding:0 7px}button.icon svg{display:block}.tooltip{position:fixed;z-index:1000;max-width:260px;padding:4px 8px;border-radius:6px;background:#1c1c1e;color:#fff;font-size:12px;line-height:1.35;pointer-events:none;box-shadow:0 2px 8px #0003}.tooltip[hidden]{display:none}.diagram-tools{grid-area:tools;display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:5px 8px;background:var(--panel);border-bottom:1px solid var(--border)}.diagram-tools button.icon{min-width:30px;height:30px;padding:0 5px}.diagram-tools .sim-toggle{margin-inline-start:auto;display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;white-space:nowrap}.diagram-tools{container-type:inline-size}@container (max-width: 520px){.diagram-tools .sim-toggle span{display:none}}.diagram-tools .sep{width:1px;height:20px;margin-inline:3px;background:var(--border)}.menu-host{position:relative}.export-menu{position:absolute;top:calc(100% + 4px);inset-inline-end:0;z-index:30;display:grid;min-width:180px;padding:4px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #00000026}.export-menu[hidden]{display:none}.export-menu button{border:none;background:none;text-align:start;padding:7px 10px;border-radius:6px}.export-menu button:hover,.export-menu button:focus-visible{background:var(--accent-soft)}.settings{position:relative;margin-inline-start:auto}.settings>button{display:inline-flex;align-items:center;padding:6px 8px}.settings-menu{position:absolute;top:calc(100% + 6px);inset-inline-end:0;z-index:30;display:grid;width:290px;max-width:calc(100vw - 24px);max-height:calc(100dvh - 80px);overflow-y:auto;padding:4px 0;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #00000026}.settings-menu[hidden]{display:none}.settings-menu section,.settings-menu footer{display:grid;gap:10px;padding:10px 14px 12px}.settings-menu section+section,.settings-menu footer{border-top:1px solid var(--border)}.settings-menu footer{display:flex;align-items:center;justify-content:space-between;gap:10px}.settings-version{font-size:12px;color:var(--muted)}.settings-menu section[hidden]{display:none}.settings-menu h3{margin:0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.settings-menu label{display:grid;gap:4px;font-size:13px;font-weight:600;color:var(--muted)}.settings-menu select{width:100%;max-width:none}.settings-menu label.check{grid-template-columns:auto 1fr;align-items:start;gap:8px;font-weight:500;color:var(--text);cursor:pointer}.settings-menu label.check input{margin:2px 0 0}.settings-menu label small,.settings-menu label.check small{display:block;font-weight:400;color:var(--muted)}.settings-menu .about-button{justify-self:start;padding:6px 10px;font-size:13px}dialog.about{width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:0;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 40px #00000040}dialog.about::backdrop{background:#00000059}dialog.about header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border)}dialog.about h2{margin:0;font-size:16px}.about-body{padding:20px 24px 24px;font-size:14px;line-height:1.5}.about-body p{margin:0 0 8px;color:var(--muted)}.about-head{display:flex;gap:16px;padding-bottom:16px;margin-bottom:8px;border-bottom:1px solid var(--border)}.about-head .logo{flex:none;width:40px;height:40px;color:var(--accent)}.about-head h3{margin:0 0 6px;font-size:20px}.about-head h3 small{font-weight:400;color:var(--muted)}.about-body .about-version{font-variant-numeric:tabular-nums}.about-body .about-author{color:var(--text);font-weight:600}.about-link{margin:0 0 2px}.about-body h4{margin:16px 0 6px;font-size:15px}.about-body code{font-weight:600;color:var(--text)}.about-body .about-copy{margin-top:16px}.brand{font-weight:700;font-size:16px;display:flex;align-items:center;gap:8px}.visubot-logo{width:auto;height:30px;margin:-4px 0}.visubot-bot{color:#f08a00;margin-left:-8px}.brand small{font-weight:500;color:var(--muted);font-size:12px}.logo{width:20px;height:20px;border:2px solid currentColor;background:linear-gradient(to bottom right,transparent 47%,currentColor 47% 53%,transparent 53%) left / 50% 60% no-repeat,linear-gradient(to bottom left,transparent 47%,currentColor 47% 53%,transparent 53%) right / 50% 60% no-repeat}.group{display:flex;flex-wrap:wrap;gap:6px}button,select{font:inherit;padding:6px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);cursor:pointer;min-height:34px}select{max-width:180px}button:hover:not(:disabled),select:hover{border-color:var(--accent)}button:disabled{opacity:.4;cursor:default}.palette,.inspector{background:var(--panel);padding:12px;overflow-y:auto}.palette{grid-area:pal;border-inline-end:1px solid var(--border)}.inspector{grid-area:insp;border-top:1px solid var(--border);max-height:34vh}h2{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 4px}.hint{color:var(--muted);font-size:12px;margin:0 0 10px}.palette ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}.palette-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;cursor:grab;line-height:1.25;user-select:none;-webkit-user-select:none;touch-action:none}.palette-item:hover,.palette-item:focus-visible{border-color:var(--accent);outline:none}.palette-item .icon{flex:none;color:var(--text)}.workspace{grid-area:work;display:flex;flex-direction:column;min-width:0;min-height:0}.caption{font:600 18px system-ui,-apple-system,sans-serif;border:none;border-bottom:1px solid var(--border);padding:10px 16px;background:var(--panel);outline:none}.canvas{flex:1;overflow:auto;scrollbar-gutter:stable;background:#fafafa}.canvas svg{display:block;user-select:none;-webkit-user-select:none}.dragging,.dragging *{cursor:grabbing!important}.drop-line{fill:var(--accent)}.drop-replace{fill:var(--accent-soft);stroke:var(--accent);stroke-width:3}.drag-ghost{position:fixed;left:0;top:0;z-index:10;pointer-events:none;padding:6px 10px;border-radius:8px;background:var(--accent);color:#fff;font-weight:600;box-shadow:0 4px 14px #0003;white-space:nowrap;max-width:260px;overflow:hidden;text-overflow:ellipsis}.inspector label{display:block;font-weight:600;margin:8px 0 4px}.inspector textarea{width:100%;font:14px ui-monospace,SF Mono,Menlo,Consolas,monospace;padding:8px;border:1px solid var(--border);border-radius:8px;resize:vertical}.statusbar{display:flex;flex-wrap:wrap;gap:2px 16px;align-items:baseline;padding:4px 12px;font-size:12px;color:var(--muted);background:var(--panel);border-top:1px solid var(--border)}.status{flex:1 1 auto;min-width:0}.site-links{display:flex;gap:12px;margin-inline-start:auto}.site-links a{color:inherit}.site-links a:hover,.site-links a:focus-visible{color:var(--accent)}a.brand{color:inherit;text-decoration:none}.file-drag .canvas{outline:3px dashed var(--accent);outline-offset:-8px}@media(min-width:821px){.app.compact-palette{--palette-width: 100px}.app.compact-palette .palette{padding:8px 6px}.app.compact-palette .palette h2{font-size:10px;letter-spacing:0;text-align:center}.app.compact-palette .palette .hint{display:none}.app.compact-palette .palette-item{flex-direction:column;gap:3px;padding:6px 2px;font-size:10.5px;line-height:1.15;text-align:center;overflow-wrap:break-word}}@media(max-width:820px){.app{grid-template:"tools" auto "pal" auto "work" 1fr "insp" auto / minmax(0,1fr)}.palette,.inspector{min-width:0}.palette{border-inline-end:none;border-bottom:1px solid var(--border);padding:8px}.palette .hint,.palette h2{display:none}.palette ul{display:flex;overflow-x:auto;overflow-y:hidden}.palette-item{white-space:nowrap}.inspector{max-height:30vh}}.status.message{color:var(--text);font-weight:600}.confirm{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;background:#00000040;padding:16px}.confirm-card{background:var(--panel);border-radius:12px;padding:16px 18px;max-width:360px;box-shadow:0 10px 30px #0003}.confirm-card p{margin:0 0 8px}.confirm-card .group{justify-content:flex-end;margin-top:12px}.files-ask{width:min(360px,100%)}.files-ask input{width:100%;box-sizing:border-box;margin-top:4px}.files-choices{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 10px}.files-choice{display:inline-flex;align-items:center;gap:6px}.files-choice svg{width:16px;height:16px}button.danger{background:#d70015;border-color:#d70015;color:#fff}.simpanel{display:none;grid-area:insp;background:var(--panel);border-inline-start:1px solid var(--border);padding:12px;overflow-y:auto}.app.simulating{grid-template:"tools tools" auto "work insp" 1fr / minmax(0,1fr) 320px}.app.simulating.visubot-mode{grid-template:"tools tools" auto "work insp" 1fr / minmax(0,1fr) min(440px,45%)}.app.simulating .palette,.app.simulating .inspector{display:none}.app.simulating .simpanel{display:block}.app.simulating .caption{cursor:default}button.sim-toggle{font-weight:600}button.sim-toggle{background:var(--accent);border-color:var(--accent);color:#fff}.simpanel section{margin-bottom:14px}.sim-buttons{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:6px 0 10px}.sim-option{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;font-size:13px}.mono,.sim-vars td{font:13px/1.5 ui-monospace,SF Mono,Menlo,Consolas,monospace}.sim-trace,.sim-output,.sim-vars{background:var(--bg);border-radius:8px;padding:8px 10px;overflow-wrap:anywhere}.sim-output{max-height:220px;overflow-y:auto;white-space:pre-wrap}.sim-vars table{border-collapse:collapse;width:100%}.sim-vars td{padding:2px 0;vertical-align:top}.sim-vars td:first-child{color:var(--muted);padding-inline-end:12px;width:1%;white-space:nowrap}.sim-vars table.sim-grid{width:auto}.sim-vars .sim-grid td,.sim-vars .sim-grid td:first-child{border:1px solid var(--border);color:inherit;font-size:11px;padding:0 4px;text-align:center;width:auto}.sim-vars .sim-grid td.sim-grid-true{font-weight:700}.simpanel .placeholder{color:var(--muted);font:13px system-ui,-apple-system,sans-serif;margin:0}.sim-notice{margin:0 0 14px;padding:8px 10px;border-radius:8px;background:#34c75926;font-weight:600}.sim-edit{width:100%;margin:-6px 0 14px}.sim-notice.error{background:#ff3b3026;color:#b0000f}.sim-input.active{padding:8px 10px;margin-left:-10px;margin-right:-10px;border-radius:10px;background:var(--accent-faint);outline:2px solid var(--accent)}.sim-prompt{margin:4px 0 6px;font-weight:600}.sim-input-row{display:flex;gap:6px}.sim-input-row input{flex:1;min-width:0;font:inherit;padding:6px 10px;border:1px solid var(--border);border-radius:8px}.sim-input-error{color:#b0000f;margin:6px 0 0;font-size:13px}@media(max-width:820px){.app.simulating{grid-template:"tools" auto "work" minmax(200px,1fr) "insp" auto / minmax(0,1fr)}.simpanel{border-inline-start:none;border-top:1px solid var(--border);max-height:48vh}}.codepanel{display:none;grid-area:code;background:var(--panel);border-inline-start:1px solid var(--border);padding:12px;overflow-y:auto;min-height:0}.app.coding{grid-template:"tools tools tools" auto "pal work code" 1fr "pal insp code" auto / var(--palette-width, 210px) minmax(0,1fr) 400px}.app.coding .codepanel{display:block}.app.coding .inspector{max-height:34vh}button[data-action=code][aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft)}.code-head,.runner-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.code-close{min-height:28px;padding:2px 10px}.segmented{display:flex;margin-bottom:8px}.segmented button{flex:1;border-radius:0;min-height:30px;padding:4px 8px}.segmented button:first-child{border-radius:8px 0 0 8px}.segmented button:last-child{border-radius:0 8px 8px 0}.segmented button+button{border-inline-start:none}.segmented button[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.segmented[hidden]{display:none}.check{display:flex;gap:8px;align-items:center;font-size:13px;margin-bottom:4px}.code-actions{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.code-actions [hidden]{display:none}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.code-view,.runner-out{margin:0;padding:10px 12px;border-radius:10px;background:var(--bg);font:13px/1.5 ui-monospace,SF Mono,Menlo,Consolas,monospace;overflow:auto;white-space:pre;-moz-tab-size:4;tab-size:4}.runner{margin:12px 0}.runner-out{background:#0b1220;color:#e5e7eb;min-height:3em;max-height:240px;white-space:pre-wrap}.runner-out.error{outline:2px solid #ff453a}.runner-input{margin-top:8px}.runner-input label{display:block;font-weight:600;margin-bottom:4px}@media(max-width:820px){.app.coding{grid-template:"tools" auto "pal" auto "work" minmax(240px,1fr) "insp" auto "code" auto / minmax(0,1fr)}.codepanel{border-inline-start:none;border-top:1px solid var(--border);max-height:50vh}}.tabs{display:flex;align-items:flex-end;gap:2px;padding:6px 8px 0;background:var(--bg);border-bottom:1px solid var(--border);overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.tab{display:flex;align-items:center;max-width:220px;border:1px solid var(--border);border-bottom:none;border-radius:8px 8px 0 0;background:#ffffff80}.tab.active{background:var(--panel);margin-bottom:-1px;padding-bottom:1px}.tab button{border:none;background:none;min-height:30px;border-radius:8px 8px 0 0}.tab-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:4px 6px 4px 12px}.tab.active .tab-label{font-weight:600}.tab-close{padding:2px 8px;color:var(--muted);font-size:11px}.tab-close:hover{color:var(--text)}.tab-dot,.tab-close.unsaved .tab-x{display:none}.tab-close.unsaved .tab-dot{display:inline;color:var(--text);font-size:10px}.tab-close.unsaved:hover .tab-dot{display:none}button.tab-close.unsaved:hover .tab-x{display:inline}span.tab-close{padding:2px 10px 2px 4px}.tab-add{min-height:28px;padding:2px 10px;margin:0 0 3px 4px;border-radius:8px}.inspector .segmented{margin:6px 0 4px;max-width:420px}.mono-hint{font:11px/1.45 ui-monospace,SF Mono,Menlo,Consolas,monospace;overflow-wrap:anywhere}.editor-row{display:flex;gap:8px;align-items:flex-start}.editor-row textarea{flex:1;min-width:0}.fixed-prefix{font:14px ui-monospace,SF Mono,Menlo,Consolas,monospace;color:var(--muted);padding-top:9px}.inspector input:not([type]){width:100%;font:14px ui-monospace,SF Mono,Menlo,Consolas,monospace;padding:7px 8px;border:1px solid var(--border);border-radius:8px}.for-fields{display:grid;gap:4px}.for-fields label,.case-controls label{margin:4px 0 0;font-size:12px;color:var(--muted);font-weight:600}.case-controls{margin-top:12px;padding-top:10px;border-top:1px solid var(--border)}.case-controls .group{margin-top:8px}button.danger-text:not(:disabled){color:#d70015}.print-sheet{display:none}.files{display:none;flex:0 1 auto;flex-direction:column;width:260px;min-width:200px;min-height:0;background:var(--panel);border-inline-end:1px solid var(--border)}.shell.files-open .files{display:flex}.shell.files-open .files-rail{display:none}.files-head{display:flex;align-items:center;gap:4px;margin:10px 12px 6px}.files-head h2{flex:1;margin:0;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.files-head button.icon{min-width:30px;height:30px;padding:0 5px}.files-head [hidden]{display:none}.files-body{flex:1;min-height:0;overflow:auto;padding:0 8px 12px;font-size:14px}.files-where{margin:0 4px 6px;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-hint,.files-empty{margin:8px 4px;font-size:13px;color:var(--muted)}.start-ask .files-start{margin-bottom:2px}.start-ask .hint{font-size:13px;color:var(--muted)}.start-without{display:block;margin:12px auto 0;border:none;background:none;color:var(--accent);text-decoration:underline}.start-without+.hint{text-align:center}.files-start{display:flex;align-items:center;gap:6px;width:100%;margin:8px 0;justify-content:center}.files-row{display:flex;align-items:center;border-radius:6px}.files-row:hover,.files-row:focus-within{background:var(--accent-soft)}.files-row.current>.files-name{font-weight:600}.files-name{flex:1;min-width:0;display:flex;align-items:center;gap:6px;padding:4px 6px 4px calc(6px + var(--depth) * 16px);border:none;background:none;text-align:start;font:inherit;color:var(--text);cursor:pointer}.files-name:disabled{cursor:default;color:var(--muted)}.files-name svg{flex:none;width:16px;height:16px;color:var(--muted)}.files-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.files-name small{margin-inline-start:auto;padding:0 6px;border-radius:6px;background:var(--accent);color:#fff;font-size:11px;font-weight:600}.files-row .files-delete{visibility:hidden;min-width:26px;height:26px;padding:0 4px;border:none;background:none;color:var(--muted)}.files-row:hover .files-delete,.files-row:focus-within .files-delete{visibility:visible}.files-error{color:#c62828}.files-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.shell.files-open .files-resizer{display:block}.files-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px}.files-resizer:hover:after,.files-resizer:focus-visible:after{background:var(--accent)}.learn{display:none;flex:0 1 auto;width:400px;min-width:280px;flex-direction:column;background:var(--panel);border-inline-end:1px solid var(--border);min-height:0}.shell.learning .learn{display:flex}.learn-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.shell.learning .learn-resizer{display:block}.learn-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.learn-resizer:hover:after,.learn-resizer:focus-visible:after,.shell.resizing .learn-resizer:after{background:var(--accent)}.learn-resizer:focus-visible{outline:none}.shell.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.learn-head{display:flex;align-items:flex-start;gap:6px;margin:10px 12px 0}.learn-tabs{flex:1;min-width:0}.learn-hide{flex:none;min-height:30px;padding:4px 7px;display:inline-flex;align-items:center;color:var(--muted)}.learn-rail{flex:none;display:flex;flex-direction:column;align-items:center;gap:10px;width:36px;padding:10px 0;border:none;border-radius:0;border-inline-end:1px solid var(--border);background:var(--panel);cursor:pointer}.learn-rail:hover{background:var(--accent-soft)}.learn-rail span{writing-mode:vertical-rl;white-space:nowrap}.shell.learning .learn-rail:not(.live-rail):not(.editor-rail):not(.files-rail):not(.robotpreview-rail):not(.palette-rail){display:none}.live-rail{border-inline-end:none;border-inline-start:1px solid var(--border)}.live-rail svg{transform:scaleX(-1)}.shell.live .live-rail{display:none}.editor-rail{display:none;border-inline-start:1px solid var(--border)}.shell.editor-hidden .editor-rail{display:flex}.shell.editor-hidden .app,.shell.editor-hidden .live-resizer,.shell.editor-hidden:not(.live) .learn-resizer{display:none}.shell.editor-hidden .livecode,.shell.editor-hidden:not(.live) .learn{flex:1 1 0;width:auto!important;min-width:0}.learn-body{overflow-y:auto;scrollbar-gutter:stable;padding:4px 16px 24px;flex:1;min-height:0;line-height:1.5}.learn-body h2.learn-title{display:flex;align-items:center;gap:8px;font-size:20px;text-transform:none;letter-spacing:0;color:var(--text);margin:2px 0 10px}.learn-section{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:18px 0 6px}.learn-list{list-style:none;padding:0;margin:0;display:grid;gap:6px}.learn-item{display:flex;align-items:center;gap:10px;width:100%;text-align:start;padding:8px 10px}.learn-item.done{border-color:#34c759}.learn-num{flex:none;min-width:28px;height:28px;border-radius:14px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-weight:700;font-size:12px;padding:0 6px}.learn-item.done .learn-num{background:#34c7592e;color:#248a3d}.learn-item-text{flex:1;display:grid;min-width:0}.learn-item-text small{color:var(--muted)}.learn-status{flex:none;color:var(--muted);font-size:12px}.learn-item.done .learn-status{color:#248a3d;font-weight:700}.learn-back,.link-button{border:none;background:none;padding:6px 0;min-height:0;color:var(--accent)}.link-button{padding:0;text-align:start}.learn-kicker{margin:4px 0 0;color:var(--muted);font-size:12px}.learn-progress{display:flex;gap:4px;margin-bottom:14px}.learn-progress button{flex:1 1 0;min-width:0;padding:3px 0;font-size:13px;font-variant-numeric:tabular-nums;border-radius:6px}.learn-progress button.past{border-color:var(--accent);color:var(--accent)}.learn-progress button.current{border-color:var(--accent);background:var(--accent);color:#fff;font-weight:600}.learn-progress button.robot-step:not(.current){border-color:#0fa3c6;background:#0fa3c61f}.learn-progress button.robot-step.current{border-color:#0fa3c6;background:#0fa3c6}.learn-step-title{font-size:16px;margin:0 0 6px}.learn-text p,.learn-text ul,.learn-text ol{margin:0 0 10px}.learn-text ul,.learn-text ol{padding-inline-start:22px}.learn-text code,.learn-tests code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;background:var(--bg);border-radius:4px;padding:1px 4px}.learn-text h3{font-size:15px;margin:18px 0 4px}.reference-group{border:1px solid var(--border);border-radius:8px;margin:0 0 8px;padding:0 12px}.reference-group summary{cursor:pointer;font-weight:600;padding:9px 0}.reference-group[open] summary{border-bottom:1px solid var(--border)}.reference-group>h3:first-of-type{margin-top:10px}.lesson-code{background:var(--bg);border-radius:8px;padding:8px 10px;margin:0 0 10px;overflow-x:auto;overflow-y:hidden;font-size:12.5px}.lesson-code code{background:none;padding:0}.lesson-note{border-inline-start:3px solid var(--accent);background:var(--accent-soft);border-radius:6px;padding:8px 10px;margin:0 0 10px}.lesson-note p:last-child{margin-bottom:0}.learn-images{display:flex;gap:8px;flex-wrap:wrap}.learn-images img{width:150px;height:200px;object-fit:cover;border-radius:8px}.learn-file{margin:0 0 14px;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--panel)}.learn-file figcaption{display:flex;align-items:center;gap:6px;padding:6px 10px;background:var(--bg);border-bottom:1px solid var(--border);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;font-weight:600}.learn-file-text{margin:0;padding:8px 10px;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.5;white-space:pre}.learn-file.written{margin:8px 0;border-color:#15803d}.learn-file.written figcaption{background:#dcfce7}.learn-file-text .ln{display:inline-block;min-width:2ch;margin-inline-end:10px;color:var(--muted);text-align:end;-webkit-user-select:none;user-select:none}.learn-brag{display:grid;grid-template-columns:48px minmax(0,1fr);gap:10px;align-items:start;border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin:0 0 14px;background:var(--accent-soft)}.learn-brag img{width:48px;height:48px;border-radius:50%}.learn-brag-title{margin:0 0 4px;font-weight:700}.learn-brag .learn-text p:last-child{margin-bottom:0}.learn-game{border:2px solid var(--accent);border-radius:12px;padding:12px 14px;margin:0 0 14px}.learn-game-head{display:flex;align-items:center;gap:10px;font-size:1.05em}.learn-game-head img{width:40px;height:40px;border-radius:50%}.learn-game-status{margin:6px 0;color:var(--muted);font-size:.9em}.learn-game-values{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.learn-game-values code{background:var(--accent-soft);border-radius:6px;padding:2px 8px}.learn-game-condition{font-size:1.15em;font-weight:600;padding:10px 12px;border-radius:8px;background:var(--bg, #f2f2f7);margin-bottom:10px;overflow-wrap:anywhere}.learn-game-answers button{flex:1;font-weight:600;padding-block:10px}.learn-game-true:not(:disabled){border-color:#15803d;color:#15803d}.learn-game-false:not(:disabled){border-color:#b91c1c;color:#b91c1c}.learn-game-feedback:empty{display:none}.learn-game-feedback{margin-top:10px;padding:10px 12px;border-radius:8px}.learn-game-feedback.right{background:#dcfce7}.learn-game-feedback.wrong{background:#fee2e2}.learn-game-feedback p{margin:0 0 6px;font-weight:700}.learn-game-steps{margin-bottom:10px;line-height:1.6}.learn-game-result{font-size:1.2em;font-weight:700}.learn-game-question{font-weight:600;margin:10px 0 8px}.learn-game-code{margin:0 0 8px;padding:8px 0;border-radius:8px;background:var(--bg, #f2f2f7);font-size:13px;line-height:1.5;overflow-x:auto}.learn-game-code .ln{padding:0 10px 0 calc(10px + 2ch);text-indent:-2ch;border-inline-start:3px solid transparent;white-space:pre-wrap;overflow-wrap:anywhere;transition:background .2s}.learn-game-code .ln.hit{background:#fef3c7;border-inline-start-color:#d97706}.learn-bomb{display:flex;align-items:center;gap:10px;margin-bottom:6px;font-weight:700}.learn-bomb-icon{font-size:28px;line-height:1}.learn-bomb.hurry .learn-bomb-icon{animation:learn-bomb-shake .25s infinite alternate}.learn-bomb.boom .learn-bomb-icon{animation:learn-bomb-boom .5s ease-out}@keyframes learn-bomb-shake{0%{transform:rotate(-8deg)}to{transform:rotate(8deg)}}@keyframes learn-bomb-boom{0%{transform:scale(.6)}60%{transform:scale(1.5)}to{transform:scale(1)}}.learn-bomb-time{min-width:7ch;font-variant-numeric:tabular-nums}.learn-bomb-fuse{flex:1;height:8px;border-radius:4px;background:#e5e7eb;overflow:hidden}.learn-bomb-fuse span{display:block;height:100%;background:#f59e0b;transition:width .2s linear}.learn-bomb.hurry .learn-bomb-fuse span{background:#dc2626}.learn-bomb.defused .learn-bomb-fuse span{background:#15803d}.learn-bomb-code .ln{display:block;width:100%;margin:0;border-radius:0;border-block:0;border-inline-end:0;background:none;color:inherit;font:inherit;line-height:inherit;min-height:0;height:auto;padding-block:1px;text-align:start;cursor:pointer}.learn-bomb-code .ln:not(:disabled):hover{background:#fef3c7}.learn-bomb-code .ln:disabled{cursor:default;opacity:1}.learn-bomb-code .ln.right,.learn-bomb-code .ln.right:hover{background:#dcfce7;border-inline-start-color:#15803d}.learn-bomb-code .ln.wrong,.learn-bomb-code .ln.wrong:hover{background:#fee2e2;border-inline-start-color:#b91c1c}.learn-bomb-fix code{white-space:pre-wrap}.learn-game-options{display:grid;gap:6px}.learn-game-options button{text-align:start;padding:8px 12px}.learn-game-options.pictures{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}.learn-game-options.pictures button{padding:6px}.learn-game-options button.right{border-color:#15803d;background:#dcfce7;color:inherit;opacity:1}.learn-game-options button.wrong{border-color:#b91c1c;background:#fee2e2;color:inherit;opacity:1}.learn-order-hint{margin:0 0 6px;font-size:13px;opacity:.75}.learn-order button{display:flex;align-items:center;gap:10px}.learn-order-badge{flex:none;display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;border:1.5px solid currentColor;font-size:13px;font-weight:700;opacity:.5}.learn-order button.right .learn-order-badge,.learn-order button:disabled .learn-order-badge:not(:empty){opacity:1}.learn-game-file{margin:0;padding:2px 0;font-size:13px;line-height:1.45;white-space:pre;background:none}.learn-game-explain{margin-bottom:10px}.learn-swing-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px;align-items:start}.learn-swing-window{border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fff;color:#1c1c1e}.learn-swing-title{padding:3px 8px;font-size:12px;text-align:center;background:#e5e5ea;border-bottom:1px solid #d1d1d6;min-height:1.4em}.learn-swing-body{display:grid;gap:6px;padding:10px}.learn-swing-label{padding:4px 2px;min-height:1.4em}.learn-swing-label.changed,.learn-swing-button.changed{animation:swing-changed 1s ease-out}@keyframes swing-changed{0%{background:#ffd60acc}}.learn-swing-button{padding:6px 10px;background:#fff;color:#1c1c1e;border:1px solid #a1a1aa;border-radius:6px}.learn-swing-button:disabled{opacity:1;cursor:default}.learn-swing-button.pressed{background:var(--accent);border-color:var(--accent);color:#fff;transform:scale(.96)}.learn-swing-event{margin:0;padding:0 10px 8px;font-size:12px;min-height:1.4em}.learn-swing-event.heard{color:#b45309;font-weight:600}.learn-swing-event.nobody{color:#6b7280;font-style:italic}.learn-swing-console{margin:0 10px 10px;padding:6px 8px;border-radius:6px;background:#1c1c1e;color:#f2f2f7;font-size:12px}.learn-swing-console[hidden]{display:none}.learn-swing-clicks{margin:8px 0 0}.learn-swing-try{font-weight:400!important;font-style:italic}.learn-layout-window{width:100%;border:1px solid #a1a1aa;border-radius:6px;overflow:hidden;background:#fff;color:#1c1c1e}.learn-layout-title{height:10px;background:#e5e5ea;border-bottom:1px solid #d1d1d6}.learn-layout-body{height:80px;padding:3px;gap:3px;font-size:12px}.learn-layout-body.grid{display:grid;grid-auto-rows:1fr}.learn-layout-body.flow{display:flex;flex-direction:column;gap:3px}.learn-layout-row{display:flex;justify-content:center;gap:3px}.learn-layout-body.border{display:grid;grid-template:"N N N" auto "W C E" 1fr "S S S" auto / auto 1fr auto}.learn-layout-cell{display:flex;align-items:center;justify-content:center;min-width:22px;padding:2px 6px;border:1px solid #a1a1aa;border-radius:4px;background:#f4f4f5;font-weight:600}.learn-figure{margin:0 0 14px;display:grid;gap:6px;justify-items:start}.learn-preview{width:100%;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fafafa}.learn-preview>svg{display:block;width:100%;margin:0 auto;height:auto}.learn-figure figcaption{color:var(--muted);font-size:13px}.learn-exercise{border:1px solid var(--accent);border-radius:10px;padding:10px 12px;margin:0 0 14px;display:grid;gap:8px}.learn-exercise h4{margin:0;font-size:15px;display:flex;gap:8px;align-items:center}.learn-badge{font-size:12px;color:#248a3d;background:#34c7592e;border-radius:10px;padding:1px 8px}.learn-exercise .learn-text p:last-child{margin-bottom:0}.learn-result:empty{display:none}.learn-result{border-radius:8px;padding:8px 10px}.learn-result.ok{background:#34c75924}.learn-result.fail{background:#ff950024}.learn-result.info{background:var(--bg)}.learn-result-head{margin:0 0 6px;font-weight:600}.learn-tests{list-style:none;padding:0;margin:0;display:grid;gap:6px}.learn-test-detail{display:grid;padding-inline-start:16px;font-size:13px}.learn-error{color:#c4291c}.learn-solution summary{cursor:pointer;color:var(--accent)}.learn-solution[open]{display:grid;gap:6px;justify-items:start}.learn-checklist{list-style:none;padding:0;margin:0 0 14px;display:grid;gap:6px}.learn-checklist li{display:flex;gap:8px;align-items:baseline;justify-content:space-between}.learn-checklist label{display:flex;gap:8px;align-items:baseline}.learn-return{width:100%;margin:0 0 12px;border-color:var(--accent);background:var(--accent-soft)}.learn-nav+.learn-return{margin:12px 0 0}.learn-check-link{flex:none;font-size:13px}.learn-quiz fieldset{border:1px solid var(--border);border-radius:10px;padding:8px 12px 10px;margin:0 0 10px;display:grid;gap:6px}.learn-quiz legend{font-weight:600;padding:0 4px}.learn-option{text-align:start}.learn-option.right{border-color:#34c759;background:#34c75924}.learn-option.wrong{border-color:#ff3b30;background:#ff3b301a}.learn-match{display:grid;gap:6px}.learn-match-left{display:grid;grid-template-columns:8.5em minmax(0,1fr);align-items:center;gap:8px}.learn-match-select{min-width:0;width:100%;max-width:none}.learn-match-select.right{border-color:#34c759;background:#34c75924}.learn-match-select.wrong{border-color:#ff3b30;background:#ff3b301a}.learn-explanation{margin:0;color:var(--muted);font-size:13px}.learn-score{font-weight:600}.learn-nav{display:flex;justify-content:space-between;gap:8px;margin-top:18px}@media(max-width:1100px){.learn{width:340px}}@media(max-width:900px){.learn{width:300px}}.livecode{display:none;flex:0 1 auto;width:420px;min-width:200px;flex-direction:column;gap:6px;padding:10px 12px 12px;background:var(--panel);border-inline-start:1px solid var(--border);min-height:0}.shell.live .livecode{display:flex}.livecode-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px}.livecode-head h2{margin:0;font-size:16px}.livecode-lang{margin-inline-start:auto;padding:2px 8px;border-radius:6px;background:var(--accent-soft);color:var(--accent);font-size:12px;font-weight:600}.livecode .learn-hide svg{transform:scaleX(-1)}.livecode .hint{margin:0}.livecode-view{flex:1;min-height:0;padding:10px 0;font-size:var(--code-size, 14px)}.livecode-view .ln{padding:0 12px;min-height:1.5em;border-inline-start:3px solid transparent}.livecode-view.selectable .ln{cursor:pointer}.livecode-view .ln.sel{background:var(--accent-soft);border-inline-start-color:var(--accent)}.livecode-view .ph{color:var(--muted);font-style:italic}.livecode-editor{flex:1;min-height:0;padding:0;font-size:var(--code-size, 14px);white-space:normal;overflow:hidden;--syn-keyword: #7f0055;--syn-string: #2a00ff;--syn-number: #986801;--syn-comment: #3f7f5f}.livecode-editor[hidden],.livecode-view[hidden],.livecode-problem[hidden]{display:none}.livecode-editor .cm-editor{height:100%;background:transparent}.livecode-editor .cm-editor.cm-focused{outline:2px solid var(--accent-soft);outline-offset:-2px;border-radius:10px}.livecode-editor .cm-scroller{font:inherit;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;line-height:1.5}.livecode-editor .cm-gutters{background:transparent;border-inline-end:1px solid var(--border);color:var(--muted)}.livecode-editor .cm-lineNumbers .cm-gutterElement{padding:0 8px 0 10px;min-width:2ch}.livecode-editor .cm-activeLineGutter{background:transparent;color:var(--text)}.livecode-editor .cm-content{padding:10px 0;caret-color:var(--text)}.livecode-editor .cm-line{padding:0 12px;border-inline-start:3px solid transparent}.livecode-editor .cm-scopeLayer .cm-scope{border:1px solid color-mix(in srgb,var(--scope) 28%,transparent);border-left:3px solid var(--scope);border-radius:8px;background:color-mix(in srgb,var(--scope) 9%,#fff)}.livecode-editor .cm-scopeLayer .cm-scope-class{--scope: #34c47c}.livecode-editor .cm-scopeLayer .cm-scope-method{--scope: #f2b100}.livecode-editor .cm-scopeLayer .cm-scope-loop{--scope: #ec5fa6}.livecode-editor .cm-scopeLayer .cm-scope-if{--scope: #3b9cf0}.livecode-editor .cm-scopeLayer .cm-scope-try{--scope: #9a7cf0}:root.no-code-scopes .livecode-editor .cm-scopeLayer .cm-scope:not(.cm-scope-sel){display:none}:root:not(.no-code-scopes) .ns-scope-method{fill:color-mix(in srgb,#f2b100 14%,#fff)}:root:not(.no-code-scopes) .ns-scope-loop{fill:color-mix(in srgb,#ec5fa6 14%,#fff)}:root:not(.no-code-scopes) .ns-scope-if{fill:color-mix(in srgb,#3b9cf0 14%,#fff)}:root:not(.no-code-scopes) .palette-item[data-scope=method]{background:color-mix(in srgb,#f2b100 14%,#fff)}:root:not(.no-code-scopes) .palette-item[data-scope=loop]{background:color-mix(in srgb,#ec5fa6 14%,#fff)}:root:not(.no-code-scopes) .palette-item[data-scope=if]{background:color-mix(in srgb,#3b9cf0 14%,#fff)}.livecode-editor .cm-scopeLayer .cm-scope-sel{background:transparent;border:2px solid var(--accent);box-shadow:0 0 0 3px var(--accent-faint)}.livecode-editor .cm-line.cm-debug-line{background:#ffd60a59;border-inline-start-color:#e0a800}.livecode-editor .cm-breakpoint-gutter .cm-gutterElement,.livecode-editor .cm-lineNumbers .cm-gutterElement{cursor:pointer}.livecode-editor .cm-breakpoint-gutter .cm-gutterElement{display:flex;align-items:center;justify-content:center;width:14px;padding-inline-start:4px}.livecode-editor .cm-breakpoint{display:inline-block;width:10px;height:10px;border-radius:50%;background:#d33}.livecode-editor .cm-breakpoint-gutter .cm-gutterElement:not(:has(.cm-breakpoint)):hover:before{content:"";width:10px;height:10px;border-radius:50%;background:#dd33334d}.livecode-debug{flex:none;max-height:30%;overflow-y:auto}.livecode-debug[hidden]{display:none}.livecode-debug h2{margin:0 0 4px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.livecode-vars tr.changed td{animation:var-changed 1.6s ease-out;font-weight:700}@keyframes var-changed{0%{background:#ffd60ab3}to{background:transparent}}.livecode-editor .cm-ph,.livecode-editor .cm-ph *{color:var(--muted)!important;font-style:italic;font-weight:400!important}.livecode-editor .cm-err{text-decoration:underline wavy #d33;text-decoration-skip-ink:none;text-underline-offset:3px}.livecode-editor .cm-selectionBackground,.livecode-editor .cm-focused .cm-selectionBackground{background:color-mix(in srgb,var(--accent) 25%,transparent)!important}.livecode-editor .cm-matchingBracket{background:color-mix(in srgb,var(--accent) 20%,transparent);outline:1px solid color-mix(in srgb,var(--accent) 50%,transparent)}.cm-tooltip.cm-tooltip-autocomplete{border:1px solid var(--border);border-radius:8px;background:var(--panel);box-shadow:0 4px 16px #0000001f;overflow:hidden}.cm-tooltip.cm-tooltip-autocomplete>ul{font:14px/1.4 ui-monospace,SF Mono,Menlo,Consolas,monospace;max-height:16em}.cm-tooltip.cm-tooltip-autocomplete>ul>li{padding:4px 10px}.cm-tooltip.cm-tooltip-autocomplete>ul>li[aria-selected]{background:var(--accent);color:#fff}.cm-tooltip-autocomplete .cm-completionDetail{margin-inline-start:12px;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-style:normal;color:var(--muted)}.cm-tooltip-autocomplete li[aria-selected] .cm-completionDetail{color:#ffffffd9}.livecode-run{padding:3px 10px;font-size:13px;margin-inline-start:6px}.console{display:flex;flex:none;flex-direction:column;gap:6px;height:180px;min-height:80px;padding:6px 10px 8px;background:var(--bg);border:1px solid var(--border);border-radius:8px}.console[hidden],.console-resizer[hidden]{display:none}.console-head{display:flex;align-items:center;gap:8px}.console-head h2{margin:0;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.console-hide{margin-inline-start:auto;padding:0 8px;font-size:14px}.console-resizer{flex:none;height:10px;margin-block:-5px;cursor:row-resize;touch-action:none;position:relative}.console-resizer:after{content:"";position:absolute;inset-inline:0;top:4px;height:2px}.console-resizer:hover:after,.console-resizer:focus-visible:after,.console-resizer.dragging:after{background:var(--accent)}.console-resizer:focus-visible{outline:none}.livecode-console-lines{flex:1;min-height:0;overflow:auto;font-size:var(--code-size, 14px);white-space:pre-wrap}.livecode-console-lines .typed{color:var(--accent)}.livecode-console-lines .pending:after{content:"▌";color:var(--accent);animation:blink 1s steps(1) infinite}@keyframes blink{50%{opacity:0}}.livecode-console-input{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.livecode-console-input[hidden]{display:none}.livecode-console-input label{display:flex;flex:1;align-items:center;gap:6px;min-width:0;font-size:var(--code-size, 14px)}.livecode-console-input input{flex:1;min-width:60px;padding:4px 8px;font:inherit}.livecode-console-error,.livecode-console-notice{margin:0;font-size:13px;color:var(--muted)}.livecode-console-error{flex-basis:100%;color:#c62828}.livecode-console-notice.error{color:#c62828}.livecode-problem{margin:0;min-height:1.4em;font-size:13px;color:#c62828}.live-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.shell.live .live-resizer{display:block}.live-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.live-resizer:hover:after,.live-resizer:focus-visible:after,.shell.resizing .live-resizer:after{background:var(--accent)}.live-resizer:focus-visible{outline:none}@media(max-width:1100px){.livecode{width:340px}}@media(max-width:700px){.shell.learning .learn-resizer,.shell.live .live-resizer,.shell.files-open .files-resizer{display:none}.shell .files{width:auto!important;max-height:40vh;border-inline-end:none;border-bottom:1px solid var(--border)}.shell .learn,.shell .livecode,.columns>.app{width:auto!important;min-width:0}.livecode{height:40vh;height:40dvh;border-inline-start:none;border-top:1px solid var(--border)}.learn-rail{flex-direction:row;justify-content:center;width:auto;padding:4px 0;border-inline-end:none;border-bottom:1px solid var(--border)}.learn-rail span{writing-mode:horizontal-tb}.live-rail{border-inline-start:none;border-bottom:none;border-top:1px solid var(--border)}.columns{flex-direction:column}.editor-rail{border-inline-start:none;border-bottom:1px solid var(--border)}.learn{width:auto;height:45vh;height:45dvh;border-inline-end:none;border-bottom:1px solid var(--border)}.columns>.app,.shell.editor-hidden .livecode{flex:1;min-height:0;height:auto}}@media print{@page{margin:12mm}body>*:not(.print-sheet){display:none!important}body{background:#fff!important}.print-sheet{display:block}.print-sheet svg{display:block;width:100%;height:auto;max-height:100vh}}.learn .term{text-decoration:underline dotted var(--accent);text-decoration-thickness:2px;text-underline-offset:3px;cursor:help;border-radius:3px}.learn .term:focus-visible,.learn .term[aria-expanded=true]{outline:none;background:var(--accent-soft)}.term-tip{position:fixed;z-index:1000;max-width:min(300px,calc(100vw - 16px));padding:8px 10px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 16px #0000002e;font-size:14px;line-height:1.4}.term-tip[hidden]{display:none}.learn .ui-pointer{color:var(--accent);font-weight:600;border-bottom:2px solid var(--accent-soft);cursor:pointer;border-radius:3px}.learn .ui-pointer:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.ui-spot{outline:3px solid var(--accent)!important;outline-offset:-3px;box-shadow:inset 0 0 0 9999px var(--accent-faint);animation:ui-spot-pulse 1.2s ease-in-out infinite}@keyframes ui-spot-pulse{50%{outline-color:var(--accent-glow)}}@media(prefers-reduced-motion:reduce){.ui-spot{animation:none}}.learn-graphic{display:block;width:100%;max-width:440px;height:auto;margin:0 auto;border-radius:8px;border:1px solid var(--border)}.lesson-table{overflow-x:auto;margin:8px 0}.lesson-table table{border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}.lesson-table th,.lesson-table td{border:1px solid var(--border);padding:3px 8px;text-align:start;white-space:nowrap}.lesson-table th{background:var(--bg)}.learn-hints .lesson-note{margin-top:8px}.learn-teacher{margin-top:24px;border-top:1px solid var(--border);padding-top:12px}.learn-teacher summary{cursor:pointer;color:var(--muted)}.learn-teacher input{flex:1;min-width:0}.shell.editor-hidden:not(.live):not(.learning) .files{flex:1 1 0;width:auto!important}.livecode-swing{height:380px}.livecode-swing[hidden]{display:none}.livecode-swing-display{position:relative;flex:1;min-height:0;overflow:hidden;border-radius:6px;background:#e9ecf0}.learn-caesar-stage{display:flex;flex-direction:column;align-items:center;gap:8px}.learn-caesar-disc{width:min(100%,320px);touch-action:none;user-select:none;-webkit-user-select:none}.learn-caesar-disc text{font:600 19px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.learn-caesar-disc .outer-disc{fill:#f3e6c8;stroke:#8a6d3b;stroke-width:3}.learn-caesar-disc .outer-letters text{fill:#3d2f14;cursor:pointer}.learn-caesar-disc .inner{cursor:grab;transition:transform .25s ease}.learn-caesar-disc .inner.dragging{cursor:grabbing;transition:none}.learn-caesar-disc .inner-disc{fill:#6b4f2a;stroke:#3d2f14;stroke-width:2}.learn-caesar-disc .inner-letters text{fill:#fff8e8}.learn-caesar-disc .tick{stroke:#8a6d3b;stroke-width:1;opacity:.6}.learn-caesar-disc .hub{fill:#f3e6c8;stroke:#3d2f14;stroke-width:2}.learn-caesar-disc .window{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2.5}.learn-caesar-disc .marked text{fill:var(--accent);font-size:23px}.learn-caesar-disc .inner-letters .marked text{fill:#ffd54a}.learn-caesar-disc .key{font-size:40px;font-weight:700;fill:#3d2f14}.learn-caesar-disc .key-label{font-size:15px;fill:#6e5a33}.learn-caesar-controls,.learn-caesar-mode{display:flex;justify-content:center;gap:8px}.learn-caesar-controls button{min-width:56px;font-size:1.05em}.learn-caesar-mode{margin:10px 0 6px}.learn-caesar-mode button.active{background:var(--accent);border-color:var(--accent);color:#fff}.learn-caesar-fields{display:grid;gap:8px}.learn-caesar-fields label,.learn-caesar-fields>div{display:grid;gap:3px;color:var(--muted);font-size:.9em}.learn-caesar-fields input,.learn-caesar-output{font:600 1.15em ui-monospace,Menlo,Consolas,monospace;letter-spacing:.08em;padding:6px 8px;border:1px solid var(--border);border-radius:8px;color:var(--text);background:var(--panel);overflow-wrap:anywhere}.learn-caesar-output{background:var(--bg)}.learn-rescue-path{display:flex;align-items:center;gap:6px;margin:8px 0 2px}.learn-rescue-ludwig{width:32px;height:32px;border-radius:50%;flex:none}.learn-rescue-dot{flex:1;height:6px;max-width:48px;border-radius:3px;background:var(--border);transition:background .3s}.learn-rescue-dot.done{background:#15803d}.learn-rescue-tower{position:relative;font-size:34px;line-height:1;margin-inline-start:auto}.learn-rescue-zora,.learn-rescue-fox{position:absolute;font-size:15px}.learn-rescue-zora{top:-4px;left:50%;transform:translate(-50%)}.learn-rescue-fox{bottom:-2px;right:-12px;transition:transform .8s,opacity .8s}.learn-rescue.freed .learn-rescue-fox{transform:translate(60px);opacity:0}.learn-rescue.freed .learn-rescue-zora{display:none}.learn-rescue-free{font-size:24px;line-height:1;animation:learn-rescue-jump .6s ease-out 3}@keyframes learn-rescue-jump{50%{transform:translateY(-12px)}}.learn-rescue-answer{display:flex;gap:8px;align-items:center}.learn-rescue-number{width:6ch;font-size:1.1em;padding:6px 8px;text-align:center}.learn-rescue-label{margin:14px 0 4px;color:var(--muted);font-size:.9em}.learn-rescue-alphabet{display:flex;flex-wrap:wrap;gap:2px;margin-bottom:12px}.learn-rescue-letter{display:inline-flex;flex-direction:column;align-items:center;min-width:22px;padding:2px 0;border-radius:4px;background:var(--bg)}.learn-rescue-letter small{font-size:10px;color:var(--muted)}.learn-rescue-letter.hit{background:#fde68a;outline:2px solid #d97706}.learn-rescue-charat{font-weight:600}.learn-rescue-moved{font-weight:400!important}.learn-rescue-word{font:inherit;padding:1px 4px;border:1px solid var(--accent);border-radius:4px}.learn-rescue-gate{padding:8px 0;margin-bottom:8px}.learn-cw{--cw-cell: 30px;display:flex;flex-wrap:wrap;gap:12px 20px;margin-bottom:10px}.learn-cw-grid{display:grid;gap:2px}.learn-cw-cell{position:relative;width:var(--cw-cell);height:var(--cw-cell)}.learn-cw-cell input{width:100%;height:100%;box-sizing:border-box;padding:0;border:1px solid #6e6e73;border-radius:3px;background:#fff;color:#1c1c1e;text-align:center;font:600 16px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase}.learn-cw-cell input:disabled{opacity:1;-webkit-text-fill-color:#1c1c1e}.learn-cw-cell.key input{background:#fde68a}.learn-cw-cell.given input{color:#1d4ed8;-webkit-text-fill-color:#1d4ed8}.learn-cw-cell.arrived input{animation:learn-cw-arrive .6s ease-out}.learn-cw-cell input.wrong{border-color:#b91c1c;background:#fee2e2}@keyframes learn-cw-arrive{0%{transform:scale(1.6)}}.learn-cw-number,.learn-cw-keyindex{position:absolute;font-size:8px;line-height:1;pointer-events:none;color:#6e6e73;z-index:1}.learn-cw-number{top:2px;left:2px}.learn-cw-keyindex{bottom:2px;right:2px;color:#b45309}.learn-cw-keyword{margin:8px 0 0;font-weight:600}.learn-cw-keybox{display:inline-block;width:22px;height:24px;margin-inline-end:2px;border-bottom:2px solid #d97706;background:#fef3c7;text-align:center;line-height:24px;white-space:pre}.learn-cw-cluebox{flex:1;min-width:200px}.learn-cw-clues{margin:4px 0 10px;padding-inline-start:24px}.learn-cw-clues li{cursor:pointer}@media(max-width:380px){.learn-cw{--cw-cell: 28px}}.learn-cloze{border:2px solid var(--accent);border-radius:12px;padding:12px 14px;margin:0 0 14px}.learn-cloze-title{display:block;font-size:1.05em;margin-bottom:4px}.learn-cloze p{margin:0 0 8px}.learn-cloze-hint{color:var(--muted);font-size:.9em}.learn-cloze-code{margin:0 0 10px;padding:8px 10px;border-radius:8px;background:var(--bg, #f2f2f7);font-size:13px;line-height:1.9;overflow-x:auto}.learn-cloze-code .ln{white-space:pre;min-height:1.9em}.learn-cloze-gap{font-size:13px;padding:1px 3px;margin:0 1px;min-width:0;max-width:none;border:1px solid #8e8e93;border-bottom-width:2px;border-radius:4px;background:#fff;color:#1c1c1e;text-align:center}.learn-cloze-gap.right{border-color:#34c759;background:#34c75924}.learn-cloze-gap.wrong{border-color:#ff3b30;background:#ff3b301a}.learn-cloze-gap.shown{border-color:#d97706;background:#fef3c7}.learn-cloze-gap:disabled{opacity:1;-webkit-text-fill-color:currentColor}.learn-cloze-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.learn-cloze-check{font-weight:600}.learn-cloze-status:empty{display:none}.learn-cloze-status{padding:8px 12px;border-radius:8px;font-weight:600}.learn-cloze-status.right{background:#dcfce7}.learn-cloze-status.wrong{background:#fee2e2}.learn-mark{color:inherit;padding:0 3px;border-radius:3px}.learn-mark.blau{background:#e4f1fd}.learn-mark.orange{background:#ffedd5}.learn-mark.gruen{background:#dcfce7}.learn-mark.gelb{background:#fdf4db}.learn-mark.rosa{background:#fce9f2}.startup-error{max-width:520px;margin:15vh auto 0;padding:0 16px;font:16px/1.5 system-ui,-apple-system,sans-serif;color:var(--text)}.startup-error h1{font-size:22px}.startup-error button{font-size:16px;padding:8px 16px}.startup-error pre{margin-top:24px;color:var(--muted);font-size:12px;white-space:pre-wrap}.visubot-stage{position:relative;height:280px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:linear-gradient(#dfe9f3,#f6f3ec)}.visubot-live{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 8px;font-size:12px;color:var(--muted)}.visubot-live:empty{display:none}.visubot-live.connected{color:#0f8a5f;font-weight:600}.visubot-worlds{display:flex;gap:6px;margin:0 0 6px}.visubot-worlds button.active{background:var(--accent);border-color:var(--accent);color:#fff}.visubot-canvas{display:block;width:100%;height:100%;touch-action:none}.visubot-status{font-size:12px;color:var(--muted);margin:6px 0 0}.visubot-controls{margin-top:8px;font-size:13px}.visubot-controls summary{cursor:pointer;font-weight:600}.visubot-controls .hint{color:var(--muted);font-size:12px;margin:4px 0 6px}.visubot-controls label{display:grid;grid-template-columns:9.5em 1fr 2.5em;align-items:center;gap:6px;margin:2px 0}.visubot-controls output{text-align:end;font-variant-numeric:tabular-nums}.visubot-presses{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.visubot-presses button{min-width:2.2em}.visubot-presses button.pressed{background:var(--accent);border-color:var(--accent);color:#fff}.visubot-check{margin-top:8px;font-size:13px}.visubot-check summary{cursor:pointer;font-weight:600}.visubot-check .hint{color:var(--muted);font-size:12px;margin:4px 0 6px}.visubot-check-sensors{margin-top:8px;border-collapse:collapse;font-variant-numeric:tabular-nums}.visubot-check-sensors th{text-align:start;font-weight:400;padding:1px 12px 1px 0}.palette-visubot-title{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:14px 0 6px}.palette-sensor{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border-style:dashed}.palette-sensor code{font-size:12px;color:var(--muted)}.palette-visubot .palette-item{border-color:#a7a0d3;background:color-mix(in srgb,#a7a0d3 16%,transparent)}.visubot-model{margin:12px 0}.visubot-model .visubot-stage{height:300px}.visubot-model-hint{font-size:13px;margin:4px 0 0}.visubot-part-label{position:absolute;pointer-events:none;padding:2px 8px;border-radius:6px;background:#14181ed9;color:#fff;font-size:13px;white-space:nowrap;z-index:1}.robot-part-link{text-decoration:underline 2px #f2b705;text-underline-offset:3px;cursor:pointer}.robot-part-link:hover,.robot-part-link:focus-visible{background:color-mix(in srgb,#f2b705 25%,transparent);outline:none}.visubot-quiz-question{font-size:15px;margin:12px 0 6px}.visubot-quiz-question.done{color:var(--success, #2f9e44)}.visubot-quiz-feedback{min-height:1.4em;margin:6px 0}.visubot-quiz-feedback.right{color:var(--success, #2f9e44)}.visubot-quiz-feedback.wrong{color:var(--danger, #c92a2a)}.diagram-tools .mbot-link{margin-inline-start:auto;height:30px;padding:0 10px;white-space:nowrap}.diagram-tools .mbot-link:not([hidden])+.sim-toggle,.diagram-tools .mbot-upload:not([hidden])+.sim-toggle{margin-inline-start:6px}.diagram-tools .mbot-upload{margin-inline-start:6px;height:30px;padding:0 10px;white-space:nowrap}.mbot-upload-steps{margin:0 0 12px;padding-inline-start:22px;line-height:1.5}.mbot-upload progress{width:100%;height:10px}.mbot-upload-status.done{color:var(--success, #2f9e44);font-weight:600}.settings-mbot-link{display:grid;gap:4px;margin-top:8px}.settings-mbot-link small{font-size:12px;color:var(--muted)}.world-chooser{margin-bottom:4px}.world-hint{display:block;font-size:12px;color:var(--muted);margin-bottom:8px}.start-world{margin-bottom:14px}.robotpreview,.robotpreview-rail,.preview-resizer{display:none}.shell.robot-world.preview .robotpreview{display:flex}.shell.robot-world:not(.preview) .robotpreview-rail{display:flex;border-inline-end:none;border-inline-start:1px solid var(--border)}.robotpreview-rail svg{transform:scaleX(-1)}.shell.robot-world.preview:not(.preview-stacked) .preview-resizer{display:block}.robotpreview{flex:0 1 auto;width:360px;min-width:220px;flex-direction:column;gap:6px;padding:10px 12px 12px;background:var(--panel);border-inline-start:1px solid var(--border);min-height:0;overflow-y:auto}.robotpreview .hint{margin:0;font-size:.85em;color:var(--muted, inherit)}.robotpreview .robotpreview-stage{flex:1 1 auto;height:auto;min-height:160px}.robotpreview .robotpreview-status{margin:0;min-height:1.3em}.robotpreview-height{display:none}.robotpreview.simulation>.visubot-worlds,.robotpreview.simulation>.robotpreview-stage,.robotpreview.simulation>.robotpreview-status,.robotpreview.simulation .robotpreview-play{display:none}.robotpreview .visubot-viewport{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.robotpreview .visubot-viewport .visubot-stage{flex:1 1 auto;height:auto;min-height:160px}.visubot-elsewhere{display:none;margin:0 0 8px;font-size:12px;color:var(--muted)}.visubot:not(:has(>.visubot-viewport)) .visubot-elsewhere{display:block}.shell.preview-stacked .robotpreview{flex:0 0 auto;width:auto!important;height:320px;min-width:0;margin:4px -12px -12px;padding-top:0;border-inline-start:none;border-top:1px solid var(--border);overflow:visible}.shell.preview-stacked .robotpreview-height{display:block;height:10px;margin:-5px 0 0;cursor:row-resize;touch-action:none;position:relative}.robotpreview-height:after{content:"";position:absolute;inset-inline:0;top:4px;height:2px;background:transparent;transition:background .15s}.robotpreview-height:hover:after,.robotpreview-height:focus-visible:after,.shell.resizing .robotpreview-height:after{background:var(--accent)}.robotpreview-height:focus-visible{outline:none}.preview-resizer{flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.preview-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.preview-resizer:hover:after,.preview-resizer:focus-visible:after,.shell.resizing .preview-resizer:after{background:var(--accent)}.preview-resizer:focus-visible{outline:none}.palette-group{grid-column:1 / -1}.palette-group button{display:flex;align-items:center;gap:6px;width:100%;margin-top:4px;padding:2px 0;border:none;background:none;color:var(--muted);font-size:12px;font-weight:600;text-align:start;cursor:pointer}.palette-group button:before{content:"▾";transition:transform .15s}.palette-group button[aria-expanded=false]:before{transform:rotate(-90deg)}.palette-item[hidden]{display:none}.editor-resizer{display:none;flex:none;width:10px;margin-inline:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.editor-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.editor-resizer:hover:after,.editor-resizer:focus-visible:after,.shell.resizing .editor-resizer:after{background:var(--accent)}.editor-resizer:focus-visible{outline:none}.shell.code-main.live:not(.editor-hidden) .editor-resizer{display:block}.shell.code-main.live:not(.editor-hidden) .live-resizer{display:none}.shell.code-main.live:not(.editor-hidden) .app{flex:0 1 auto;width:460px;min-width:300px}.shell.code-main.live:not(.editor-hidden) .livecode{flex:1 1 0;width:auto!important;min-width:0}.shell.code-main.live:not(.editor-hidden) .livecode{order:1}.shell.code-main.live:not(.editor-hidden) .editor-resizer{order:2}.shell.code-main.live:not(.editor-hidden) .app{order:3;border-inline-start:1px solid var(--border)}.shell.code-main.live:not(.editor-hidden) .live-rail,.shell.code-main.live:not(.editor-hidden) .preview-resizer,.shell.code-main.live:not(.editor-hidden) .robotpreview,.shell.code-main.live:not(.editor-hidden) .robotpreview-rail{order:4}[data-action=swap-main]{font-size:16px;line-height:1}[data-action=swap-main][aria-pressed=true]{color:var(--accent)}.palette-resizer{grid-area:pal;justify-self:end;width:10px;margin-inline-end:-5px;z-index:5;cursor:col-resize;touch-action:none;position:relative}.palette-resizer:after{content:"";position:absolute;inset-block:0;inset-inline-start:4px;width:2px;background:transparent;transition:background .15s}.palette-resizer:hover:after,.palette-resizer:focus-visible:after,.shell.resizing .palette-resizer:after{background:var(--accent)}.palette-resizer:focus-visible{outline:none}.app.simulating .palette-resizer{display:none}:root.visuobject-theme{--bg: #edf4f6;--text: #17292e;--muted: #566a70;--border: #cddde1;--accent: #0e7c86;--accent-soft: rgba(14, 124, 134, .2);--accent-faint: rgba(14, 124, 134, .08);--accent-glow: rgba(14, 124, 134, .35)}.visuobject-obj,.visuobject .brand .logo{color:var(--accent)}.shell.visuobject button.text-button{padding:5px 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);font:inherit;cursor:pointer}.shell.visuobject button.text-button:hover{border-color:var(--accent);color:var(--accent)}:root.visuobject-theme{--vo-bar: #e3edf0}.vo-columns{display:grid;grid-template-columns:var(--vo-cols, 260px 1px minmax(0, 45fr) 1px minmax(0, 55fr));flex:1;min-height:0;border-top:1px solid var(--border)}.vo-columns.vo-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.vo-pane{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--panel)}.vo-pane.collapsed>:not(.vo-strip){display:none}.vo-strip{display:none;flex:1;align-items:center;justify-content:center;padding:12px 0;border:0;background:var(--vo-bar);color:var(--muted);font:600 14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;writing-mode:vertical-rl;cursor:pointer}.vo-pane.collapsed>.vo-strip{display:flex}.vo-strip:hover,.vo-strip:focus-visible{color:var(--accent);background:var(--accent-faint);outline:none}.vo-splitter{position:relative;z-index:4;background:var(--border);cursor:col-resize;touch-action:none;outline:none}.vo-splitter:after{content:"";position:absolute;top:0;right:-4px;bottom:0;left:-4px}.vo-splitter:hover,.vo-splitter:focus-visible,.vo-resizing .vo-splitter{background:var(--accent)}.vo-splitter.fixed{cursor:default;background:var(--border)}.vo-bar{display:flex;flex-wrap:wrap;align-items:stretch;min-height:40px;background:var(--vo-bar);border-bottom:1px solid var(--border);font-size:14px}.vo-bar-title{display:flex;flex:1;align-items:center;margin:0;text-transform:none;letter-spacing:normal;padding:0 12px;font-size:14px;font-weight:600;color:var(--text)}.vo-bar-actions{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:6px;padding:4px 4px 4px 0}.shell.visuobject .vo-bar button.text-button{padding:2px 8px;border-radius:6px}.vo-collapse{padding:0 12px;border:0;background:none;color:var(--muted);font-size:16px;font-weight:700;cursor:pointer}.vo-collapse:hover,.vo-collapse:focus-visible{color:var(--accent)}.vo-tabs{display:flex;flex:1;min-width:0;overflow-x:auto}.vo-tab{display:flex;align-items:stretch;border-right:1px solid var(--border);border-bottom:3px solid transparent}.vo-tab.active{background:var(--panel);border-bottom-color:var(--accent)}.vo-tab [role=tab]{padding:0 4px 0 14px;border:0;background:none;color:var(--text);font:13px ui-monospace,SF Mono,Menlo,Consolas,monospace;white-space:nowrap;cursor:pointer}.vo-tab.active [role=tab]{font-weight:700}.vo-tab [role=tab]:hover{color:var(--accent)}.vo-tab-close{padding:0 10px 0 6px;border:0;background:none;color:var(--muted);font-size:15px;cursor:pointer;visibility:hidden}.vo-tab.active .vo-tab-close,.vo-tab:hover .vo-tab-close{visibility:visible}.vo-tab-close:hover{color:var(--accent)}.vo-tab-close .vo-dot,.vo-tab-close.unsaved .vo-x{display:none}.vo-tab-close.unsaved{visibility:visible;color:var(--text)}.vo-tab-close.unsaved .vo-dot{display:inline;font-size:11px}.vo-tab-close.unsaved:hover .vo-dot{display:none}.vo-tab-close.unsaved:hover .vo-x{display:inline}.vo-no-file{display:flex;align-items:center;padding:0 12px;color:var(--muted)}.vo-editor{flex:1;min-height:0;overflow:auto;font-size:14px}.vo-foot{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;padding:6px 12px;border-top:1px solid var(--border);background:var(--vo-bar)}.vo-hint{color:var(--muted);flex:1 1 260px}.vo-canvas{position:relative;flex:1;min-height:0;overflow:auto;background:radial-gradient(circle,var(--border) 1px,transparent 1px) 0 0 / 20px 20px;outline:none}.vo-frames{position:absolute;inset:0 auto auto 0;z-index:0;pointer-events:none;overflow:visible}.vo-package-frame{fill:#0e7c8609;stroke:var(--muted);stroke-width:1.2}.vo-package.current .vo-package-frame{stroke:var(--accent);fill:var(--accent-faint)}.vo-package-name{font:600 12px ui-monospace,SF Mono,Menlo,Consolas,monospace;fill:var(--muted)}.vo-package.current .vo-package-name{fill:var(--accent)}.vo-lines{position:absolute;inset:0 auto auto 0;z-index:3;pointer-events:none;overflow:visible}.vo-rel{stroke:var(--text);stroke-width:1.4;fill:none}.vo-rel.ghost{stroke:var(--accent);stroke-dasharray:4 4}.vo-hit{stroke:transparent;stroke-width:12;pointer-events:stroke;cursor:pointer}.vo-relation:hover .vo-rel,.vo-relation:hover .vo-diamond{stroke:var(--accent)}.vo-relation.selected .vo-rel,.vo-relation.selected .vo-diamond{stroke:var(--accent);stroke-width:2.4}.vo-relation.selected .vo-label-svg{fill:var(--accent)}.vo-diamond{fill:var(--panel);stroke:var(--text);stroke-width:1.4}.vo-diamond.filled{fill:var(--text)}.vo-relation.selected .vo-diamond.filled{fill:var(--accent)}.vo-label-svg.name{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-style:italic;fill:var(--text)}.vo-rel.dashed{stroke-dasharray:6 4}.vo-hollow,.vo-open{fill:none;stroke:var(--text);stroke-width:1.4}.vo-label-svg{font:12px ui-monospace,SF Mono,Menlo,Consolas,monospace;fill:var(--muted);paint-order:stroke;stroke:var(--panel);stroke-width:4px}.vo-empty{margin:24px;max-width:40ch;color:var(--muted)}.vo-status{margin:0;color:#b3261e}.vo-status:empty{display:none}.vo-status.hint{color:var(--accent)}.uml-class{position:absolute;left:16px;top:16px;min-width:150px;background:var(--panel);border:1.5px solid var(--text);font:13px/1.5 ui-monospace,SF Mono,Menlo,Consolas,monospace;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.uml-connect{position:absolute;right:-11px;top:50%;width:20px;height:20px;margin-top:-10px;padding:0;border:2px solid var(--panel);border-radius:50%;background:var(--accent);box-shadow:0 1px 4px #00000040;cursor:crosshair;touch-action:none}.uml-connect:after{content:"";position:absolute;top:5px;right:4px;bottom:5px;left:5px;background:#fff;clip-path:polygon(0 35%,55% 35%,55% 0,100% 50%,55% 100%,55% 65%,0 65%)}.uml-class.drop{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.vo-relmenu{position:absolute;z-index:10;display:grid;min-width:220px;padding:6px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #0000002e;font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-relmenu p{margin:2px 8px 6px;color:var(--muted);font-size:12px}.vo-relmenu button{display:flex;align-items:center;gap:10px;padding:6px 8px;border:0;border-radius:6px;background:none;color:var(--text);font:inherit;text-align:left;cursor:pointer}.vo-relmenu button:hover,.vo-relmenu button:focus-visible{background:var(--accent-faint);color:var(--accent);outline:none}.vo-relicon{flex:none}.vo-palette{display:flex;flex-wrap:wrap;align-items:stretch;gap:2px;padding:4px 6px;border-bottom:1px solid var(--border);background:var(--panel)}.vo-palette-sep{width:1px;margin:4px;background:var(--border)}.vo-tool{display:grid;justify-items:center;gap:1px;min-width:44px;padding:3px 3px 2px;border:1px solid transparent;border-radius:7px;background:none;color:var(--text);font:11px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none}.vo-tool:hover{background:var(--accent-faint);color:var(--accent)}.vo-tool[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.vo-tool[data-tool=class],.vo-tool[data-tool=interface]{cursor:grab}.vo-tool-ghost{position:fixed;z-index:1000;display:grid;justify-items:center;min-width:120px;padding:4px 10px 14px;margin:-14px 0 0 -60px;border:1.5px dashed var(--accent);background:#ffffffe6;font:13px ui-monospace,SF Mono,Menlo,Consolas,monospace;pointer-events:none}.vo-tool-ghost small{color:var(--muted);font-size:11px}.vo-canvas:not([data-tool=select])[data-tool]{cursor:crosshair}.vo-canvas:not([data-tool=select])[data-tool] .uml-class{cursor:crosshair}.vo-canvas:not([data-tool=select])[data-tool] .uml-class:hover,.uml-class.source{border-color:var(--accent)}.uml-class.source{box-shadow:0 0 0 4px var(--accent-soft)}.vo-stage{position:relative;display:flex;flex:1;min-height:0}.vo-stage .vo-canvas{flex:1}.vo-hsplit{flex:0 0 6px;margin:-3px 0;position:relative;z-index:5;cursor:row-resize;touch-action:none}.vo-hsplit:after{content:"";position:absolute;left:0;right:0;top:2px;height:2px;background:transparent}.vo-hsplit:hover:after,.vo-hsplit:focus-visible:after{background:var(--accent)}.vo-hsplit:focus-visible{outline:none}.vo-dock.collapsed+.vo-hsplit,.vo-hsplit:has(+.vo-dock.collapsed){cursor:default;pointer-events:none}.vo-dock{border-top:1px solid var(--border);background:var(--panel)}.vo-dock-bar{min-height:30px}.vo-dock-bar .vo-bar-title{font-size:13px}.vo-dock.collapsed .vo-inspector{display:none}.vo-inspector{display:grid;align-content:start;gap:8px;height:32vh;overflow:auto;padding:8px 12px 10px;font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-inspector-row>label.check,.vo-inspector label.check{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;padding-bottom:6px;color:var(--text);font-size:13px}.vo-inspector input[type=checkbox]{width:auto;margin:0;accent-color:var(--accent)}.vo-inspector fieldset.vo-inspector-ifaces{display:flex;flex-wrap:wrap;gap:4px 14px}.vo-inspector-empty{color:var(--muted)}.vo-inspector-row{display:flex;flex-wrap:wrap;align-items:end;gap:8px 12px}.vo-inspector-row>label{flex:1 1 160px;max-width:260px}.vo-inspector-ends{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:8px}.vo-inspector label{display:grid;gap:3px;color:var(--muted);font-size:12px}.vo-inspector input,.vo-inspector select{box-sizing:border-box;width:100%;min-width:0;padding:4px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-inspector input:focus,.vo-inspector select:focus{border-color:var(--accent);outline:2px solid var(--accent-soft)}.vo-inspector fieldset{display:grid;grid-template-columns:minmax(0,1fr) 84px;align-items:start;gap:6px;min-width:0;margin:0;padding:6px 8px 8px;border:1px solid var(--border);border-radius:8px}.vo-inspector fieldset .vo-wide{grid-column:1 / -1}.vo-reading{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;color:var(--muted)}.vo-reading b{color:var(--text)}.shell.visuobject .vo-reading button.text-button{padding:1px 8px;font-size:12px}.vo-inspector legend{padding:0 4px;color:var(--text);font-weight:600}.vo-inspector small{color:var(--muted);font-size:11px}.vo-inspector p{margin:0}.vo-inspector-kind{font-weight:600;padding-top:4px}.shell.visuobject .vo-inspector button.vo-danger{display:inline-flex;align-items:center;justify-self:start;gap:6px;color:#b3261e}.vo-inspector .vo-danger svg{width:15px;height:15px}.vo-insp-head{position:sticky;top:-8px;z-index:1;margin-top:-8px;padding-top:8px;background:var(--panel);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;border-bottom:1px solid var(--border)}.vo-insp-head .vo-inspector-kind{padding:0}.vo-insp-tabs{display:flex;gap:2px}.shell.visuobject .vo-insp-tabs button{margin-bottom:-1px;padding:5px 12px;border:1px solid transparent;border-bottom:none;border-radius:6px 6px 0 0;background:none;color:var(--muted);font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer}.shell.visuobject .vo-insp-tabs button[aria-selected=true]{border-color:var(--border);background:var(--panel);color:var(--text);font-weight:600}.vo-members{width:100%;border-collapse:collapse}.vo-members th{padding:0 4px 3px;color:var(--muted);font-size:12px;font-weight:500;text-align:left}.vo-members td{padding:2px 4px;vertical-align:middle}.vo-members td.c{width:52px;text-align:center}.vo-members td:first-child{width:112px}.vo-members td:last-child{width:32px}.vo-members .icon svg{width:15px;height:15px}.vo-doc textarea{box-sizing:border-box;width:100%;max-width:780px;padding:4px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;resize:vertical}.vo-insp-sep{align-self:stretch;width:1px;margin:0 4px;background:var(--border)}.vo-insp-label{align-self:center;color:var(--muted);font-size:12px}.uml-class.selected{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);z-index:2}.uml-head{display:grid;justify-items:center;padding:4px 10px;font-weight:700}.uml-head small{font-weight:400;font-size:11px;color:var(--muted)}.uml-class.abstract .uml-name,.uml-member.abstract{font-style:italic}.uml-member.static{text-decoration:underline}.uml-class ul{list-style:none;margin:0;padding:3px 0;border-top:1.5px solid var(--text);min-height:12px}.uml-class.selected ul{border-top-color:var(--accent)}.uml-class li{padding:0 10px;white-space:nowrap}.uml-member.selected{background:var(--accent-soft)}.uml-add{color:var(--accent);font-style:italic;cursor:pointer;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:12px}.uml-add:hover{text-decoration:underline}.uml-input{font:inherit;padding:0 4px;margin:0 -5px;border:1px solid var(--accent);border-radius:4px;outline:none;max-width:340px}.uml-tools{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;padding:6px 10px;border-top:1px dashed var(--border);font:12px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:default}.uml-tools label{display:inline-flex;gap:4px;align-items:center}.uml-tools button.icon svg{width:16px;height:16px}.vo-ws{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 10px 4px;font-size:13px}.vo-ws[hidden]{display:none}.vo-ws.ask{margin:8px 10px 4px;padding:10px;border:1px solid var(--accent);border-radius:8px;background:var(--bg, #fff)}.vo-ws.ask p{flex-basis:100%;margin:0}.vo-ws.ask .hint{color:var(--muted);font-size:12px;margin-bottom:4px}.vo-ws-name{display:inline-flex;align-items:center;gap:6px;margin-right:auto;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shell.visuobject .vo-ws button.text-button{padding:2px 8px;border-radius:6px}.shell.visuobject .vo-ws button.text-button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.vo-lines .vo-end-hit{fill:transparent;pointer-events:all;cursor:context-menu}.vo-lines .vo-label-svg.editable{pointer-events:all;cursor:pointer}.vo-lines .vo-label-svg.editable:hover{fill:var(--accent);text-decoration:underline}.vo-lines .vo-label-svg.placeholder{fill:var(--muted);opacity:.6;font-style:italic}.vo-endpop{position:absolute;z-index:12;display:grid;gap:8px;width:min(330px,calc(100% - 16px));box-sizing:border-box;padding:10px 12px;background:var(--panel);border:1px solid var(--accent);border-radius:10px;box-shadow:0 8px 24px #00000029;font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-endpop p{margin:0}.vo-endpop label{display:grid;gap:3px;color:var(--muted);font-size:12px}.vo-endpop input{box-sizing:border-box;min-width:0;padding:4px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-endpop-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.vo-endpop-row>span{flex-basis:100%;color:var(--muted);font-size:12px}.vo-endpop-row button{padding:2px 8px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:12px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer}.vo-endpop-row button[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.vo-endpop-row input{width:64px}.vo-new{position:relative}.vo-new-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:30;display:grid;min-width:190px;padding:4px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #00000024}.vo-new-menu[hidden]{display:none}.vo-new-menu button{display:flex;align-items:center;gap:8px;padding:6px 8px;border:0;border-radius:6px;background:none;color:var(--text);font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;text-align:left;cursor:pointer}.vo-new-menu button:hover,.vo-new-menu button:focus-visible{background:var(--accent-soft);outline:none}.vo-badge.folder.source{box-shadow:inset 0 3px #ffffff59,inset -5px -4px #8a6d2b}.confirm-card.vo-wizard{display:grid;gap:10px;width:min(520px,100%);max-width:none;max-height:calc(100vh - 32px);overflow:auto;box-sizing:border-box;font:14px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-wizard h2{margin:0;font-size:17px}.vo-wizard .hint{margin:0;color:var(--muted);font-size:13px}.vo-wizard>label{display:grid;grid-template-columns:130px minmax(0,1fr);align-items:center;gap:8px;color:var(--muted);font-size:13px}.vo-wizard input[type=text],.vo-wizard select{box-sizing:border-box;width:100%;min-width:0;padding:5px 7px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:inherit}.vo-wizard fieldset{margin:0;padding:6px 10px 8px;border:1px solid var(--border);border-radius:8px}.vo-wizard legend{padding:0 4px;color:var(--muted);font-size:13px}.vo-wizard-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}.vo-wizard-row select,.vo-wizard-row input[type=text]{width:auto;flex:1 1 160px}.vo-wizard-list{display:grid;gap:4px}.vo-wizard .check{display:inline-flex;align-items:center;gap:6px}.vo-wizard code{font-size:12px}.vo-wizard-error{min-height:1em;margin:0;color:#b3261e;font-size:13px}.vo-wizard .group button.primary{background:var(--accent);border-color:var(--accent);color:#fff}@media(max-width:560px){.vo-wizard>label{grid-template-columns:1fr}}.vo-dirty{color:var(--accent)}.vo-tree-tools{display:flex;flex-wrap:wrap;gap:6px;padding:8px 10px 4px}.shell.visuobject .vo-tree-tools button.text-button{padding:2px 8px;border-radius:6px}.vo-tree{flex:1;min-height:0;overflow:auto;padding:6px;font:13px/1.3 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.vo-tree ul{list-style:none;margin:0;padding:0}.vo-row{display:flex;align-items:center;gap:6px;min-height:28px;padding:0 6px 0 calc(4px + var(--depth, 0) * 14px);border-radius:7px;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;outline:none}.vo-row:hover{background:var(--accent-faint)}.vo-row:focus-visible{box-shadow:inset 0 0 0 2px var(--accent-soft)}.vo-row.active .vo-label{font-weight:600}.vo-row.selected{background:var(--accent-soft);color:var(--text)}.vo-twisty,.vo-twisty-space{flex:none;width:18px;height:18px}.vo-twisty{display:grid;place-items:center;padding:0;border:0;border-radius:4px;background:none;color:var(--muted);cursor:pointer}.vo-twisty svg{transition:transform .15s ease}[aria-expanded=true]>.vo-row .vo-twisty svg{transform:rotate(90deg)}.vo-twisty:hover{color:var(--accent)}.vo-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.vo-type{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis}.vo-row .uml-input{margin:0;font:inherit}.vo-row-delete{margin-left:auto;visibility:hidden}.vo-tree button.vo-row-delete{width:24px;height:24px}.vo-tree button.vo-row-delete svg{width:14px;height:14px}.vo-row:hover .vo-row-delete,.vo-row.selected .vo-row-delete{visibility:visible}.vo-tree-empty{padding:6px 10px 6px 52px;color:var(--muted);font-size:12px;white-space:normal}.vo-badge{flex:none;display:inline-grid;place-items:center;width:16px;height:16px;border-radius:4px;font:700 10px/1 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:#fff}.vo-badge.project{background:var(--accent);border-radius:5px;box-shadow:inset 0 -5px #0000002e}.vo-badge.project.closed{opacity:.55}.vo-badge.folder{width:17px;height:13px;border-radius:2px 4px 3px 3px;background:#e0a63b;box-shadow:inset 0 3px #ffffff59}.vo-badge.package{width:14px;height:14px;border-radius:3px;background:#b07a2a;transform:rotate(45deg) scale(.82)}.vo-badge.package.empty{background:none;border:1.5px solid #b07a2a}.vo-badge.file{background:#e66a2c;border-radius:3px 6px 3px 3px}.vo-badge.type.class{background:#2f7d32;border-radius:50%}.vo-badge.type.class.abstract{background:#6a9c3a;font-style:italic}.vo-badge.type.interface{background:#7b4fb0;border-radius:50%}.vo-badge.field,.vo-badge.method{width:9px;height:9px;margin:0 3px}.vo-badge.field{border-radius:2px}.vo-badge.method{border-radius:50%}.vo-badge.public{background:#2f9e44}.vo-badge.private{background:#d6453d}.vo-badge.protected{background:#e0a63b}.vo-badge.package.field,.vo-badge.package.method{background:#3b82c4;transform:none;border:0}.vo-badge.static{box-shadow:0 0 0 2px var(--panel),0 0 0 3px currentColor;color:var(--muted)}@media(max-width:760px){.vo-columns{grid-template-columns:1fr;grid-auto-rows:auto;overflow:auto}.vo-splitter{display:none}.vo-explorer:not(.collapsed){height:260px}.vo-code:not(.collapsed){height:320px}.vo-diagram:not(.collapsed){min-height:420px}.vo-pane{border-bottom:1px solid var(--border)}.vo-strip{writing-mode:horizontal-tb;padding:10px}}.shell.visuobject .vo-run-group button.vo-run{color:var(--accent);font-weight:600}.vo-console{display:flex;flex-direction:column;height:32vh;min-height:120px;border-top:1px solid var(--border)}.vo-console[hidden],.vo-swing[hidden]{display:none}.vo-console .vo-dock-bar{gap:10px}.vo-console-status{flex:1;color:var(--muted);font-size:12px}.vo-console-status.error{color:#b3261e}.vo-swing{display:flex;height:60%;padding:6px}.vo-console-lines{flex:1;min-height:0;overflow:auto;margin:0;padding:6px 12px;font-size:13px;white-space:pre-wrap}.uml-note{position:absolute;min-width:120px;max-width:260px;padding:8px 22px 8px 10px;background:#fffbe6;border:1.2px solid var(--text);clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%);font:13px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:#17292e;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;z-index:1}.uml-note:after{content:"";position:absolute;top:0;right:0;width:14px;height:14px;background:linear-gradient(to bottom left,transparent 50%,#e9dfae 50%);border-left:1.2px solid var(--text);border-bottom:1.2px solid var(--text)}.uml-note.selected{outline:3px solid var(--accent-soft);border-color:var(--accent);clip-path:none}.uml-note .uml-connect{z-index:2}.uml-note-text{white-space:pre-wrap;overflow-wrap:anywhere}.uml-note-text.placeholder{color:#8a8a8a;font-style:italic}.uml-note-edit{box-sizing:border-box;width:220px;border:1px solid var(--accent);background:#fffef5;font:inherit;resize:both}.vo-note-link{stroke-dasharray:5 4}.vo-canvas[hidden],.vo-palette[hidden]{display:none}.vo-diagram-switch{display:flex;gap:2px;padding:2px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.shell.visuobject .vo-diagram-switch button{padding:3px 10px;border:none;border-radius:6px;background:none;color:var(--muted);font:600 13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer}.shell.visuobject .vo-diagram-switch button[aria-selected=true]{background:var(--accent);color:#fff}.vo-obj-palette{align-items:center;gap:8px;padding:6px 10px}.vo-obj-new{display:flex;align-items:center;gap:6px;font-size:13px}.vo-obj-new select{padding:3px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);font:13px system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.uml-object .uml-objname{text-decoration:underline;font-weight:600}.uml-object.unknown{border-style:dashed}.uml-object .uml-member.changed,.vo-objlink.changed{animation:vo-changed 1.2s ease-out}.uml-object .uml-member.changed{background:#fff3b0}@keyframes vo-changed{0%{background:#ffe066}}.vo-obj-values td:first-child{width:auto;white-space:nowrap}.vo-obj-values td:last-child{width:50%}.vo-dbg-controls{display:inline-flex;gap:2px}.vo-dbg-controls[hidden]{display:none}.vo-console-lines .vo-out-err{color:#b3261e}.vo-console-lines .vo-out-in{color:var(--accent);font-weight:600}.vo-console-input{display:flex;align-items:center;gap:6px;padding:4px 12px 8px;color:var(--accent)}.vo-console-input[hidden]{display:none}.vo-console-input input{flex:1;font-size:13px;padding:4px 6px;border:1px solid var(--accent);border-radius:4px}.vo-dbg{display:grid;grid-template-columns:minmax(160px,1fr) minmax(220px,2fr);gap:12px;padding:8px 12px}.vo-dbg h3{margin:0 0 6px;font-size:12px;font-weight:600;color:var(--muted)}.vo-dbg ol{list-style:none;margin:0;padding:0}.vo-dbg-frame{display:block;width:100%;text-align:start;padding:3px 6px;border:0;border-radius:4px;background:none;color:inherit;font:inherit;cursor:pointer}.vo-dbg-frame.on{background:var(--accent-soft)}.vo-dbg-frame small{color:var(--muted)}.vo-dbg-vars tr.changed td{background:#ffd60a59}@media(max-width:760px){.vo-dbg{grid-template-columns:1fr}}.vo-seqcanvas{overflow:auto}.vo-seqcanvas .vo-empty[hidden]{display:none}.vo-seq{display:block;font:12px ui-monospace,SFMono-Regular,Menlo,monospace}.vo-seq-head rect{fill:var(--panel);stroke:var(--text);stroke-width:1.2}.vo-seq-head text{fill:var(--text);text-decoration:underline}.vo-seq-head.static text{text-decoration:none;font-weight:600}.vo-seq-life{stroke:var(--muted);stroke-dasharray:5 4}.vo-seq-bar{fill:var(--panel);stroke:var(--text);stroke-width:1}.vo-seq-bar.running{fill:var(--accent-soft)}.vo-seq-msg{cursor:pointer}.vo-seq-msg line,.vo-seq-msg path{stroke:var(--text);stroke-width:1.2}.vo-seq-msg .head.filled{fill:var(--text)}.vo-seq-msg text{fill:var(--text)}.vo-seq-msg.return line,.vo-seq-msg.create line{stroke-dasharray:6 4}.vo-seq-msg.exception line,.vo-seq-msg.exception text{stroke:#b3261e;fill:#b3261e}.vo-seq-msg.current line,.vo-seq-msg.current path{stroke:#e0a800;stroke-width:2.4}.vo-seq-msg.current .head.filled{fill:#e0a800}.vo-seq-msg.current text{font-weight:700}.vo-seq-msg:hover text{fill:var(--accent)}.vo-seq-more{fill:var(--muted)}.palette-head{display:flex;align-items:center;gap:4px;margin:0 0 4px}.palette-head h2{flex:1;min-width:0;margin:0}.palette-hide{min-height:26px;padding:2px 5px}.app.compact-palette .palette-head{flex-direction:column;gap:2px}.palette-rail{display:none;grid-area:pal;width:auto}.app.palette-hidden .palette,.app.palette-hidden .palette-resizer{display:none}.app.palette-hidden:not(.simulating) .palette-rail{display:flex}@media(max-width:820px){.palette-head{display:none}.app.palette-hidden .palette{display:block}.app.palette-hidden .palette-rail{display:none!important}}.diagram-tools .pseudocode-toggle{gap:4px;margin:0 4px;white-space:nowrap;cursor:pointer}
diff --git a/website/app/assets/index-DpeMIv3e.js b/website/app/assets/index-jxsDX5pJ.js
similarity index 97%
rename from website/app/assets/index-DpeMIv3e.js
rename to website/app/assets/index-jxsDX5pJ.js
index 74b3971c..b590cc8b 100644
--- a/website/app/assets/index-DpeMIv3e.js
+++ b/website/app/assets/index-jxsDX5pJ.js
@@ -1,4 +1,4 @@
-var qf=Object.defineProperty;var Uf=(i,e,t)=>e in i?qf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var v=(i,e,t)=>Uf(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 $f="modulepreload",Yf=function(i,e){return new URL(i,e).href},J0={},q=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=Yf(m,n),m in J0)return;J0[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":$f,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 I=(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))(I||{});function Xf(i){return i===3||i===4||i===5||i===6}function Kf(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function e2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case I.forSchleife:return e.length<=1?e:[n2(e)];case I.verzweigung:return Vi("if",e);case I.whileSchleife:return Vi("while",e);case I.doUntilSchleife:return Vi("while",t2(e));case I.fallauswahl:return Vi("switch",e);default:return e}}function t2(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 R0(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 Vi(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 n2(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 Td={[I.anweisung]:"Anweisung",[I.verzweigung]:"Bedingung",[I.fallauswahl]:"Fallauswahl",[I.forSchleife]:"for 0 < i < anzahl",[I.whileSchleife]:"while …",[I.doUntilSchleife]:"while …",[I.endlosschleife]:"endless",[I.aussprung]:"break",[I.aufruf]:"Aufruf()",[I.leerElement]:"ø"};function i2(i){Object.assign(Td,i)}function Ol(i){return e2(i)??[Td[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(I.anweisung,{textLines:["ø"]})}function a2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===I.leerElement)return!0;if(i.type===I.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Od(i[t],a),s)}function Od(i,e){if(Xf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(Kf(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(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}=Zi(a.elements,r);s=Od(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Ad(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(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 Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function s2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Ad(a,n,jl(t,e))}function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function o2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function l2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==I.fallauswahl||!n||n.length===0)throw new Ce("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:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function u2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==I.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function m2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==I.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function c2(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=Nt(e,a))==null?void 0:t.type)===I.fallauswahl)return a}}function d2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const Pd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function h2(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 G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function g2(i,e){const t=h2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>Pd(i[0])?i.slice(1):i;function p2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||Pd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return p2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function f2(i,e){return e===""?`${i} `:`${i} ${e}`}function jd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function x2(i){let e=jd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function b2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Cd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function y2(){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",Ls),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 lr;function Bd(){return lr===void 0&&(lr=y2()??null),lr??void 0}function Dd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Bd();if(n={ascent:i*.95,descent:i*.24},a){Dd(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})}U0.set(t,n)}return n}const U0=new Map;function v2(){const i=Bd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Dd(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 Cd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=b2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Zd={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function w2(i){return{...Zd,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===I.forSchleife||i===I.whileSchleife||i===I.doUntilSchleife||i===I.endlosschleife,Ui=i=>i===I.fallauswahl||i===I.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function $e(i){return{...i,frame:{...i.frame}}}class Md{constructor(e=Zd,t=Cd){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=$e(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=$e(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=$e(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=$e(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=$e(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(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=$e(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===I.anweisung||s===I.leerElement||s===I.aufruf||s===I.aussprung||qi(s);let a;switch(t.element.type){case I.forSchleife:case I.whileSchleife:case I.endlosschleife:{const s=t.element.type===I.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case I.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=$e(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===I.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case I.fallauswahl:a=40;break;case I.verzweigung:a=20;break;case I.forSchleife:case I.whileSchleife:case I.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===I.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return Ui(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===I.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===I.leerElement?76:e.type===I.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(Ui(e.type))return this.layoutMultiway(e,t,n,a);if(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,y)=>b+y.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===I.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,y=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),S=Math.max(this.minWidth(e),r(w)+x),z=s(w)+y+b,k=Math.max(0,S-x),_=$i(a,e,{x:t,y:n,width:S,height:z},y);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=$e(T);return j.frame.x=t+x,j.frame.width=k,this.stretchDescendantsWidths(j,k)}),_}const l=20,u=this.headerHeight(e),m=e.type===I.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=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=$e(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 y=t+c,w=this.layoutList(x.elements,y,n+s,[...a,b]),S=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===I.verzweigung&&o===2?z=Math.max(S,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,S);const k=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,k),u.push({x:y,y:n+s,width:z,height:k}),m.push(w.map(_=>{const T=$e(_);return T.frame.x=y,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===I.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,y=t+x,w=y-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:y,width:x},c=x*2,m[0]=m[0].map(S=>{const z=$e(S);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(S=>{const z=ao(S,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=z2(m,n+s);m=x.columns.map(b=>b.map(y=>this.stretchLoopBodiesVertically(y)));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 y=[],w=[];u.forEach((S,z)=>{const k=S.width*x;w.push(m[z].map(_=>{const T=$e(_);return T.frame.x=b,T.frame.width=k,this.stretchDescendantsWidths(T,k)})),y.push({x:b,y:S.y,width:k,height:S.height}),b+=k}),u=y,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=$i(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===I.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Ld(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i),n=a=>{const s=$e(a);return s.frame.y+=e,Ld(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 ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function z2(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=$e(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),y=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,y-f),g=Ld(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const I2=[{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 $0(i){const e=en;switch(i){case"anweisung":return ze(I.anweisung);case"verzweigung":return ze(I.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(I.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(I.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(I.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(I.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(I.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(I.aussprung);case"aufruf":return ze(I.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(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 Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Wd(a)}"`;let t=`
+var qf=Object.defineProperty;var Uf=(i,e,t)=>e in i?qf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>Uf(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 $f="modulepreload",Yf=function(i,e){return new URL(i,e).href},J0={},q=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=Yf(m,n),m in J0)return;J0[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":$f,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 I=(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))(I||{});function Xf(i){return i===3||i===4||i===5||i===6}function Kf(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function e2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case I.forSchleife:return e.length<=1?e:[n2(e)];case I.verzweigung:return Vi("if",e);case I.whileSchleife:return Vi("while",e);case I.doUntilSchleife:return Vi("while",t2(e));case I.fallauswahl:return Vi("switch",e);default:return e}}function t2(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 R0(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 Vi(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 n2(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 Td={[I.anweisung]:"Anweisung",[I.verzweigung]:"Bedingung",[I.fallauswahl]:"Fallauswahl",[I.forSchleife]:"for 0 < i < anzahl",[I.whileSchleife]:"while …",[I.doUntilSchleife]:"while …",[I.endlosschleife]:"endless",[I.aussprung]:"break",[I.aufruf]:"Aufruf()",[I.leerElement]:"ø"};function i2(i){Object.assign(Td,i)}function Ol(i){return e2(i)??[Td[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(I.anweisung,{textLines:["ø"]})}function a2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===I.leerElement)return!0;if(i.type===I.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Od(i[t],a),s)}function Od(i,e){if(Xf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(Kf(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(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}=Zi(a.elements,r);s=Od(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Ad(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(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 Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function s2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Ad(a,n,jl(t,e))}function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function o2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function l2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==I.fallauswahl||!n||n.length===0)throw new Ce("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:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function u2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==I.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function m2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==I.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function c2(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=Nt(e,a))==null?void 0:t.type)===I.fallauswahl)return a}}function d2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const Pd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function h2(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 G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function g2(i,e){const t=h2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>Pd(i[0])?i.slice(1):i;function p2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||Pd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return p2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function f2(i,e){return e===""?`${i} `:`${i} ${e}`}function jd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function x2(i){let e=jd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function b2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Cd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function v2(){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",Ls),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 lr;function Bd(){return lr===void 0&&(lr=v2()??null),lr??void 0}function Dd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Bd();if(n={ascent:i*.95,descent:i*.24},a){Dd(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})}U0.set(t,n)}return n}const U0=new Map;function y2(){const i=Bd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Dd(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 Cd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=b2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Zd={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function w2(i){return{...Zd,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===I.forSchleife||i===I.whileSchleife||i===I.doUntilSchleife||i===I.endlosschleife,Ui=i=>i===I.fallauswahl||i===I.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function $e(i){return{...i,frame:{...i.frame}}}class Md{constructor(e=Zd,t=Cd){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=$e(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=$e(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=$e(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=$e(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=$e(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(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=$e(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===I.anweisung||s===I.leerElement||s===I.aufruf||s===I.aussprung||qi(s);let a;switch(t.element.type){case I.forSchleife:case I.whileSchleife:case I.endlosschleife:{const s=t.element.type===I.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case I.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=$e(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===I.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case I.fallauswahl:a=40;break;case I.verzweigung:a=20;break;case I.forSchleife:case I.whileSchleife:case I.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===I.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return Ui(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===I.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===I.leerElement?76:e.type===I.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(Ui(e.type))return this.layoutMultiway(e,t,n,a);if(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(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===I.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),S=Math.max(this.minWidth(e),r(w)+x),z=s(w)+v+b,k=Math.max(0,S-x),_=$i(a,e,{x:t,y:n,width:S,height:z},v);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=$e(T);return j.frame.x=t+x,j.frame.width=k,this.stretchDescendantsWidths(j,k)}),_}const l=20,u=this.headerHeight(e),m=e.type===I.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=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=$e(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]),S=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===I.verzweigung&&o===2?z=Math.max(S,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,S);const k=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:z,height:k}),m.push(w.map(_=>{const T=$e(_);return T.frame.x=v,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===I.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(S=>{const z=$e(S);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(S=>{const z=ao(S,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=z2(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((S,z)=>{const k=S.width*x;w.push(m[z].map(_=>{const T=$e(_);return T.frame.x=b,T.frame.width=k,this.stretchDescendantsWidths(T,k)})),v.push({x:b,y:S.y,width:k,height:S.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=$i(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===I.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Ld(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i),n=a=>{const s=$e(a);return s.frame.y+=e,Ld(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 ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function z2(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=$e(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=Ld(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const I2=[{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 $0(i){const e=en;switch(i){case"anweisung":return ze(I.anweisung);case"verzweigung":return ze(I.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(I.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(I.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(I.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(I.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(I.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(I.aussprung);case"aufruf":return ze(I.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(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 Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Wd(a)}"`;let t=`
`;t+="
`;for(const n of i.elements)t+=ro(n," ");return t+=`
`,t}function ro(i,e){let t=`${e}
@@ -8,16 +8,16 @@ var qf=Object.defineProperty;var Uf=(i,e,t)=>e in i?qf(i,e,{enumerable:!0,config
`}if(i.cases)for(const n of i.cases){t+=`${e}
`;for(const a of n.elements)t+=ro(a,e+" ");t+=`${e}
`}return t+=`${e}
-`,t}function Wd(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function k2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=S2(t);n&&e.push(n)}return e}function S2(i){const e=ni(i,"typ");if(e===void 0||I[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(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 _2="http://www.w3.org/2000/svg",Be={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 Ed(i){switch(i){case I.forSchleife:case I.whileSchleife:case I.doUntilSchleife:case I.endlosschleife:return"loop";case I.verzweigung:case I.fallauswahl:return"if";default:return}}function ye(i,e={}){const t=document.createElementNS(_2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Nd{constructor(e,t){v(this,"usesSimulationHighlight",!1);v(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=Be.canvasOuterMargin){const s=ye("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ye("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ye("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":Be.outerFrameLineWidth}));const o=ye("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(ye("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.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(ye("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.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=R0(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=ye("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ye("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ye("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ye("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+Be.multiHeaderFirstLineY;if(e.element.type===I.fallauswahl){const c=Math.max(Be.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 T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===I.verzweigung||l.type===I.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ye("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,y=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)":y,S=Ed(l.type)??r,z=ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&S&&z.setAttribute("class",`ns-scope ns-scope-${S}`),f.append(z),this.strokeCellBorder(f,o,a);const k=Be.callSideBarInset;if(l.type===I.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===I.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 j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,O=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===I.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let L;O+P<=C.maxTextBottom?L=O:L=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===I.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,L+Q*this.lineHeight)})}else if(l.type!==I.doUntilSchleife)if(l.type===I.anweisung||l.type===I.aufruf||l.type===I.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===I.aufruf?(C=o.x+k+Be.callTextInsetFromSideBar,P=u-k-Be.callTextInsetFromSideBar):l.type===I.aussprung&&(C=o.x+k+j);const O=Math.max(0,P-C);let L=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(O-this.textWidth(E))/2,L),L+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===I.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===I.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,S)});const _=ye("g");if(t.append(_),l.type===I.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const O of g)this.drawKeywordLine(_,O,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((O,L)=>{if(L>=e.caseColumnFrames.length-1)return;const E=O.x+O.width,Q=T2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const O=l.type===I.fallauswahl?j.roofBottom-6:o.y+d-8,L=Be.branchLabelInsetX;if(l.type===I.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+L,O,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-L-Q,O,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,O,he,"bottom")})}}h&&_.append(ye("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":Be.selectionLineWidth}))}}function T2(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 lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function O2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const A2=[{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)"}],Fd=["de","en","pt-PT"],Jd=A2.filter(i=>Fd.includes(i.code)),tu=i=>Fd.includes(i),P2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Rd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),j2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-Ce_JBvN0.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-DECOxrcR.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-aPa6h38I.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-yeMMlSVC.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en-CZyy4vg0.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-ha3UN8DQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-UiUxTyGK.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-D_LHtXfc.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-Bxp07svi.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-9S_323Dj.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-DHMRauQa.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-Cr772wdv.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-CiVlWKIy.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-B4o_YjNG.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BcL3wukx.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-DLZRltoa.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-IXV83uxu.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DZP25RUK.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-F1BqsLKX.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-p7zVv8W8.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-Dxf58hMr.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Gd(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"?`
+`,t}function Wd(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function k2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=S2(t);n&&e.push(n)}return e}function S2(i){const e=ni(i,"typ");if(e===void 0||I[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(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 _2="http://www.w3.org/2000/svg",Be={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 Ed(i){switch(i){case I.forSchleife:case I.whileSchleife:case I.doUntilSchleife:case I.endlosschleife:return"loop";case I.verzweigung:case I.fallauswahl:return"if";default:return}}function ve(i,e={}){const t=document.createElementNS(_2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Nd{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=Be.canvasOuterMargin){const s=ve("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ve("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ve("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":Be.outerFrameLineWidth}));const o=ve("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(ve("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.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(ve("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.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=R0(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=ve("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ve("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ve("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ve("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+Be.multiHeaderFirstLineY;if(e.element.type===I.fallauswahl){const c=Math.max(Be.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 T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===I.verzweigung||l.type===I.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ve("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,S=Ed(l.type)??r,z=ve("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&S&&z.setAttribute("class",`ns-scope ns-scope-${S}`),f.append(z),this.strokeCellBorder(f,o,a);const k=Be.callSideBarInset;if(l.type===I.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===I.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 j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,O=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===I.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let W;O+P<=C.maxTextBottom?W=O:W=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===I.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,W+Q*this.lineHeight)})}else if(l.type!==I.doUntilSchleife)if(l.type===I.anweisung||l.type===I.aufruf||l.type===I.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===I.aufruf?(C=o.x+k+Be.callTextInsetFromSideBar,P=u-k-Be.callTextInsetFromSideBar):l.type===I.aussprung&&(C=o.x+k+j);const O=Math.max(0,P-C);let W=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(O-this.textWidth(E))/2,W),W+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===I.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===I.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,S)});const _=ve("g");if(t.append(_),l.type===I.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const O of g)this.drawKeywordLine(_,O,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((O,W)=>{if(W>=e.caseColumnFrames.length-1)return;const E=O.x+O.width,Q=T2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const O=l.type===I.fallauswahl?j.roofBottom-6:o.y+d-8,W=Be.branchLabelInsetX;if(l.type===I.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+W,O,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-W-Q,O,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,O,he,"bottom")})}}h&&_.append(ve("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":Be.selectionLineWidth}))}}function T2(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 lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function O2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const A2=[{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)"}],Fd=["de","en","pt-PT"],Jd=A2.filter(i=>Fd.includes(i.code)),tu=i=>Fd.includes(i),P2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Rd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),j2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-DeE-RHam.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-D4INXE4p.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-Bm4PpPCp.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-CtIZyj0I.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en--cTSOMBP.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-BAduFB3L.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-C_mSEvw5.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-BAg3LrWK.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-ClGS2uQV.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-JQ8MwNFB.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-tfdKG8Fb.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-BpibUAkX.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-HArZjiga.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-C3HmQqUD.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BdG-UtKG.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-B4vTuE57.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-Dau75zUV.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DrZsTe-O.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-DQrOpK2W.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-CeIYjS3N.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-7-ScZHAu.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Gd(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 uo(i){const e=i==="java"?Ba(Rd,"/Java.strings"):Ba(P2,`/${i}.lproj/Localizable.strings`),t=Ba(j2,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Gd(await a()))n.set(s,r);return n}let Hd="en",Vd=new Map,$n=new Map;const $a="appLanguageCode",Dl="visustruct.keywords";let mo=new Map,Zl=!1;const C2=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function B2(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem($a)==="java";return i&&(localStorage.setItem($a,"en"),localStorage.setItem(Dl,"1")),i}catch{return!1}}function D2(){try{return localStorage.getItem(Dl)==="1"}catch{return!1}}async function Qd(i,e=!0){if(i&&mo.size===0){$n.size===0&&($n=await uo("en"));const t=Ba(Rd,"/Java.strings");if(t)for(const[n,a]of Gd(await t()))C2(n)&&a!==$n.get(n)&&mo.set(n,a)}if(Zl=i,e)try{localStorage.setItem(Dl,i?"1":"0")}catch{}}function Z2(){return Zl}function M2(){if(B2())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&tu(i))return i;try{const e=localStorage.getItem($a);if(e&&tu(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=Jd.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function qd(i,e=!0){if($n.size===0&&($n=await uo("en")),Vd=i==="en"?$n:await uo(i),Hd=i,e)try{localStorage.setItem($a,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function i1(){return Hd}function p(i,...e){const t=(Zl?mo.get(i):void 0)??Vd.get(i)??$n.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 Ya=243,L2=244,Ud=40,ur=4,W2=1;function Ml(i){const e=i.length,t=Ya+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([Ya,t,e&255,e>>8,...i,n,L2])}function E2(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ml([Ud,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function N2(i){if(i[0]!==Ud||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:J2(t[1].trim())}:void 0}function F2(i){const e=[];for(;;){const t=i.indexOf(Ya);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]!==(Ya+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 V2(i){let e=0;for(let t=0;t>>0;return ii(e,4)}const mr=(i,e)=>Ml([1,0,$d,i,...ii(e.length,2),...e]);function Q2(i,e=R2){const t=new TextEncoder().encode(i),n=(4-t.length%W1+W1)%W1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[mr(1,[0,...ii(a.length,4),...V2(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,U2=i=>i.length===7||i.some((e,t)=>e===$d&&i[t+1]===240),Yd=()=>typeof navigator>"u"?void 0:navigator.serial,cr=()=>Yd()!==void 0,$2=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Ws=(i,e=24)=>$2("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Xd=Ws("VisuBot",32);class Y2{constructor(){v(this,"port");v(this,"writer");v(this,"reader");v(this,"loop");v(this,"rx",[]);v(this,"idx",1);v(this,"frameWaiters",[]);v(this,"waiting",new Map);v(this,"queue",Promise.resolve());v(this,"listeners",new Set);v(this,"error");v(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=Yd();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(Xd))}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()",Ws("Bis bald!")])await this.send(r,ur,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,ur,3e4).then(()=>{})}ask(e){return this.send(e,W2,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=Q2(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ml(G2),q2),r();for(const l of H2)await this.send(l,ur,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,U2),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(E2(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 F2(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=N2(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 le=new Y2,Kd=5,X2=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),xi={forward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(i)})`,label:([i])=>`${be(i)} cm vorwärts`},backward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(-i)})`,label:([i])=>`${be(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(-i)})`,label:([i])=>`${be(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(i)})`,label:([i])=>`${be(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${be(i)}, ${be(-e)})`,label:([i,e])=>`Räder links ${be(i)} %, rechts ${be(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${be(i)}, ${be(e)}, ${be(t)})`,label:([i,e,t])=>`LEDs (${be(i)}, ${be(e)}, ${be(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(Xa),valid:([i])=>X2(i),python:([i],e)=>`cyberpi.led.on(${Xa[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${be(i)}, ${be(e/1e3)})`,label:([i,e])=>`Ton ${be(i)} Hz, ${be(e)} ms`},pause:{args:1,label:([i])=>`${be(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:K2,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Ws(e),label:(i,e)=>`Bildschirm: ${e}`}},iu={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 Ll="en";function e3(i){Ll=i==="de"?"de":"en"}const t3=()=>Ll;function eh(i){const e=i.trim().toLowerCase(),t=iu[e]??Object.values(iu).find(n=>n.de===e);return t?t[Ll]:e}const l1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),St={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:l1("a"),isButtonB:l1("b"),isJoystickUp:l1("up"),isJoystickDown:l1("down"),isJoystickLeft:l1("left"),isJoystickRight:l1("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 n3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in St&&e.add(t[1]);return[...e]}function i3(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===""?[]:r3(n)}}function Ka(i,e){const t=xi[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 au(i,e,t=""){var a;const n=xi[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(be),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function a3(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 St))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?eh(a):a):String(a)}):i}function r3(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 nh(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=U1(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const ih=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],o3=i=>ih.includes(i),l3=100;function ah(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`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 Ze extends Error{constructor(e){super(ah(e)),this.notice=e}}const Qe=i=>new Ze({kind:"unsupportedStatement",text:i}),F=i=>new Ze({kind:"invalidExpression",text:i}),$1=i=>new Ze({kind:"unknownVariable",text:i}),u3=()=>new Ze({kind:"divisionByZero"}),ts=new Map;function m3(i,e){ts.set(i,e)}const sh=()=>[...ts];function su(i){return i instanceof Ze?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function c3(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 ru(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):c3(i)}function we(i){switch(i.kind){case"int":return String(i.value);case"double":return ru(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(ru).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+d3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function d3(i){return i.value.map(e=>"["+e.map(t=>we(co(i.elementType,t))).join(", ")+"]")}function co(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 ou(i){return i==="string"?"":i==="boolean"?!1:0}function ho(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function h3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const vt=i=>({kind:"int",value:i}),wt=i=>({kind:"double",value:i}),Wl=i=>i!==void 0&&/\s/u.test(i),ns=i=>new RegExp("\\p{L}","u").test(i),Y1=i=>new RegExp("\\p{N}","u").test(i);function ai(i){const e=Array.from(i);return e.length===0||!(ns(e[0])||e[0]==="_")?!1:e.every(t=>ns(t)||Y1(t)||t==="_")}function Kt(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 lu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function at(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 uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(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 is(i,e){const t=Array.from(i),n=Array.from(e),a=El(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=El(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 Es(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(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(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===""||Wl(n[0])||n[0]==="("))continue;let a=n.trim();const s=rh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function f3(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(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(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 F(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 F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(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 I.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case I.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case I.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case I.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case I.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case I.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case I.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case I.aussprung:a({path:o,text:l,kind:"jump"});break;case I.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function y3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(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 Ze({kind:"booleanExpected"})}}}function gu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function v3(i,e){for(let t=0;tt===e.path[n])}function yt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(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:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(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(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=yt(e))==null?void 0:t.name)??((n=oh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){v(this,"steps");v(this,"state",gu());v(this,"nextFrame",1);v(this,"callDepth",0);v(this,"frames",new Map);v(this,"peeking",!1);v(this,"robotSensors",{});v(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=qt(e.elements)}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 ${we(n)}`}catch(n){this.state.inputErrorNotice=su(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}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 Qe(e.text);const n=Yi(e.text),a=this.evaluateBool(n),s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(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 Qe(e.text);const n=Yi(e.text),a=this.evaluateSwitchSelector(n),s=v3(a,t)??t.length-1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${t[s].name}`,this.state.notice=this.noticeAfterEntering(r)}executeForLoopStart(e){const t=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.evaluateBool(n);if(this.state.lastTrace=`${n} -> ${a}`,a){const s=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(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=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(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=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(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(as(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=yt(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 Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=l3)throw new Ze({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)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(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=qt(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():we(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=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(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 Ze({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"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(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 y=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(y)),S=y.trim()===""?"":this.evaluateOutputExpression(y);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${S}`;return}const o=i3(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(Yn(n).trim()),u=l?Kt(l[1]):void 0;if(l&&u){const y=l[2].split(",").map(w=>w.trim());for(const w of y)t.variables.set(w,co(u,ou(u)));t.lastTrace=y.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Qe(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} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(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 F(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 Qe(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 Ze({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=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw F(t)}fileContent(e){const t=this.state.files.get(e)??ts.get(e);if(t===void 0)throw new Ze({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw F(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,vt(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,wt(l)),this.state.lastTrace=`${s} = ${we(r)} ${o} 1 -> ${we(wt(l))}`;return}throw Qe(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(!ai(r)||!l)throw Qe(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,vt(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,wt(c)),this.state.lastTrace=`${r} = ${we(l)} ${u} ${we(wt(m))} -> ${we(wt(c))}`;return}throw Qe(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(d1(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&&Kt(t[0]))n=t[1],a=Kt(t[0]);else if(t.length===3&&t[0]==="const"&&Kt(t[1]))n=t[2],a=Kt(t[1]);else throw Qe(e);if(!mu(n))throw Qe(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 Qe(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=Kt(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()),!mu(r))throw Qe(e);const m=at(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=Kt(s),o=n[1];if(!r||!ai(o))throw Qe(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=>at(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 Qe(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw F(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 at(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 F(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 Qe(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw F(o[1]);if(u<0)throw F(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(ou(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw F(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 F(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=d1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=f3(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 Ze({kind:"nullValue",text:t.target.trim()});const s=at(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 F(e);const g=at(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 F(h)},l=d=>{if(r[d]===void 0)throw F(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw F(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw F(e);return d};switch(t.method){case"length":return u(0),vt(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 F(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 F(e);return t.args[0]},a=s=>{const r=at(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 F(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Ze({kind:"numberExpected"});return wt(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 F(e);const r=at(s[1]),o=ts.get(r);if(o===void 0)throw new Ze({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=d1(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=Es(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"?go(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 $1(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw F(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw F(a);return co(n.elementType,r[t[1]])}if(t.length!==1)throw F(a);const s=t[0];if(!ho(n))throw F(e);if(s>=n.value.length)throw F(a);switch(n.kind){case"intArray":return vt(n.value[s]);case"doubleArray":return wt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw F(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return lu(n);const a=d1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw $1(a.arrayName);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 F(a.arrayName)}throw Qe(e)}assignValue(e,t){const n=t.trim(),a=d1(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 $1(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw F(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||ho(e))throw F(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 F(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 F(n);if(o>=l.value.length)throw F(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(du(t)&&dr(t).every(s=>at(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of dr(this.withSensors(e))){const r=s.trim(),o=at(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(du(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"?vt(n.value+l.value):wt(n.value+l.value):n=l;continue}a=(a??(n?we(n):""))+we(l),n=void 0}return a??(n?we(n):"")}renderOutputExpression(e){return dr(e).map(t=>{const n=t.trim();if(at(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return we(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return vt(this.evaluateInt(e));case"double":return wt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=at(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:we(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?vt(t):wt(t)}parser(e){const t=this.withSensors(e);return new b3(cu(uu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return s3(e,t=>this.robotSensors[t]??St[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=is(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=is(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=rh(t);if(r!==void 0)return this.evaluateBool(r);const o=p3(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 F(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 F(`${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 F(`${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=at(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=at(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 F(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return cu(uu(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 $1(t.name);return we(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const lh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ss(i,e,t={},n=[]){const a=Nl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict";
+ pass`],ii=(i,e)=>Array.from({length:e},(t,n)=>i>>>8*n&255);function V2(i){let e=0;for(let t=0;t>>0;return ii(e,4)}const mr=(i,e)=>Ml([1,0,$d,i,...ii(e.length,2),...e]);function Q2(i,e=R2){const t=new TextEncoder().encode(i),n=(4-t.length%W1+W1)%W1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[mr(1,[0,...ii(a.length,4),...V2(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,U2=i=>i.length===7||i.some((e,t)=>e===$d&&i[t+1]===240),Yd=()=>typeof navigator>"u"?void 0:navigator.serial,cr=()=>Yd()!==void 0,$2=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Ws=(i,e=24)=>$2("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Xd=Ws("VisuBot",32);class Y2{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=Yd();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(Xd))}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()",Ws("Bis bald!")])await this.send(r,ur,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,ur,3e4).then(()=>{})}ask(e){return this.send(e,W2,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=Q2(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ml(G2),q2),r();for(const l of H2)await this.send(l,ur,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,U2),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(E2(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 F2(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=N2(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 le=new Y2,Kd=5,X2=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),xi={forward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(i)})`,label:([i])=>`${be(i)} cm vorwärts`},backward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(-i)})`,label:([i])=>`${be(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(-i)})`,label:([i])=>`${be(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(i)})`,label:([i])=>`${be(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${be(i)}, ${be(-e)})`,label:([i,e])=>`Räder links ${be(i)} %, rechts ${be(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${be(i)}, ${be(e)}, ${be(t)})`,label:([i,e,t])=>`LEDs (${be(i)}, ${be(e)}, ${be(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(Xa),valid:([i])=>X2(i),python:([i],e)=>`cyberpi.led.on(${Xa[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${be(i)}, ${be(e/1e3)})`,label:([i,e])=>`Ton ${be(i)} Hz, ${be(e)} ms`},pause:{args:1,label:([i])=>`${be(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:K2,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Ws(e),label:(i,e)=>`Bildschirm: ${e}`}},iu={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 Ll="en";function e3(i){Ll=i==="de"?"de":"en"}const t3=()=>Ll;function eh(i){const e=i.trim().toLowerCase(),t=iu[e]??Object.values(iu).find(n=>n.de===e);return t?t[Ll]:e}const l1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),St={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:l1("a"),isButtonB:l1("b"),isJoystickUp:l1("up"),isJoystickDown:l1("down"),isJoystickLeft:l1("left"),isJoystickRight:l1("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 n3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in St&&e.add(t[1]);return[...e]}function i3(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===""?[]:r3(n)}}function Ka(i,e){const t=xi[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 au(i,e,t=""){var a;const n=xi[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(be),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function a3(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 St))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?eh(a):a):String(a)}):i}function r3(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 nh(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=U1(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const ih=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],o3=i=>ih.includes(i),l3=100;function ah(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`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 Ze extends Error{constructor(e){super(ah(e)),this.notice=e}}const Qe=i=>new Ze({kind:"unsupportedStatement",text:i}),F=i=>new Ze({kind:"invalidExpression",text:i}),$1=i=>new Ze({kind:"unknownVariable",text:i}),u3=()=>new Ze({kind:"divisionByZero"}),ts=new Map;function m3(i,e){ts.set(i,e)}const sh=()=>[...ts];function su(i){return i instanceof Ze?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function c3(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 ru(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):c3(i)}function we(i){switch(i.kind){case"int":return String(i.value);case"double":return ru(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(ru).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+d3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function d3(i){return i.value.map(e=>"["+e.map(t=>we(co(i.elementType,t))).join(", ")+"]")}function co(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 ou(i){return i==="string"?"":i==="boolean"?!1:0}function ho(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function h3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const yt=i=>({kind:"int",value:i}),wt=i=>({kind:"double",value:i}),Wl=i=>i!==void 0&&/\s/u.test(i),ns=i=>new RegExp("\\p{L}","u").test(i),Y1=i=>new RegExp("\\p{N}","u").test(i);function ai(i){const e=Array.from(i);return e.length===0||!(ns(e[0])||e[0]==="_")?!1:e.every(t=>ns(t)||Y1(t)||t==="_")}function Kt(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 lu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function at(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 uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(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 is(i,e){const t=Array.from(i),n=Array.from(e),a=El(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=El(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 Es(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(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(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===""||Wl(n[0])||n[0]==="("))continue;let a=n.trim();const s=rh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function f3(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(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(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 F(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 F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(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 I.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case I.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case I.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case I.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case I.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case I.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case I.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case I.aussprung:a({path:o,text:l,kind:"jump"});break;case I.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function v3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return yt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(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 Ze({kind:"booleanExpected"})}}}function gu(){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 vt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(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:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(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(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=vt(e))==null?void 0:t.name)??((n=oh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",gu());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=qt(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 ${we(n)}`}catch(n){this.state.inputErrorNotice=su(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 Qe(e.text);const n=Yi(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(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 Qe(e.text);const n=Yi(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=qt(t[a].elements,[...e.path,a],lt(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=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(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=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(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=Yi(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(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=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(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(as(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=vt(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 Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=l3)throw new Ze({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)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(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=qt(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():we(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=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(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 Ze({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"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(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)),S=v.trim()===""?"":this.evaluateOutputExpression(v);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${S}`;return}const o=i3(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(Yn(n).trim()),u=l?Kt(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,co(u,ou(u)));t.lastTrace=v.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Qe(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} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(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 F(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 Qe(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 Ze({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=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw F(t)}fileContent(e){const t=this.state.files.get(e)??ts.get(e);if(t===void 0)throw new Ze({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw F(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,yt(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,wt(l)),this.state.lastTrace=`${s} = ${we(r)} ${o} 1 -> ${we(wt(l))}`;return}throw Qe(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(!ai(r)||!l)throw Qe(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,yt(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,wt(c)),this.state.lastTrace=`${r} = ${we(l)} ${u} ${we(wt(m))} -> ${we(wt(c))}`;return}throw Qe(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(d1(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&&Kt(t[0]))n=t[1],a=Kt(t[0]);else if(t.length===3&&t[0]==="const"&&Kt(t[1]))n=t[2],a=Kt(t[1]);else throw Qe(e);if(!mu(n))throw Qe(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 Qe(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=Kt(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()),!mu(r))throw Qe(e);const m=at(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=Kt(s),o=n[1];if(!r||!ai(o))throw Qe(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=>at(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 Qe(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw F(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 at(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 F(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 Qe(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw F(o[1]);if(u<0)throw F(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(ou(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw F(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 F(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=d1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=f3(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 Ze({kind:"nullValue",text:t.target.trim()});const s=at(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 F(e);const g=at(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 F(h)},l=d=>{if(r[d]===void 0)throw F(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw F(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw F(e);return d};switch(t.method){case"length":return u(0),yt(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 F(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 F(e);return t.args[0]},a=s=>{const r=at(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 F(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Ze({kind:"wholeNumberExpected"});return yt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Ze({kind:"numberExpected"});return wt(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 F(e);const r=at(s[1]),o=ts.get(r);if(o===void 0)throw new Ze({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=d1(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=Es(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"?go(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 $1(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw F(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw F(a);return co(n.elementType,r[t[1]])}if(t.length!==1)throw F(a);const s=t[0];if(!ho(n))throw F(e);if(s>=n.value.length)throw F(a);switch(n.kind){case"intArray":return yt(n.value[s]);case"doubleArray":return wt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw F(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return lu(n);const a=d1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw $1(a.arrayName);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 F(a.arrayName)}throw Qe(e)}assignValue(e,t){const n=t.trim(),a=d1(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 $1(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw F(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||ho(e))throw F(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 F(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 F(n);if(o>=l.value.length)throw F(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(du(t)&&dr(t).every(s=>at(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of dr(this.withSensors(e))){const r=s.trim(),o=at(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(du(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"?yt(n.value+l.value):wt(n.value+l.value):n=l;continue}a=(a??(n?we(n):""))+we(l),n=void 0}return a??(n?we(n):"")}renderOutputExpression(e){return dr(e).map(t=>{const n=t.trim();if(at(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return we(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return yt(this.evaluateInt(e));case"double":return wt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=at(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:we(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?yt(t):wt(t)}parser(e){const t=this.withSensors(e);return new b3(cu(uu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return s3(e,t=>this.robotSensors[t]??St[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=is(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=is(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=rh(t);if(r!==void 0)return this.evaluateBool(r);const o=p3(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 F(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 F(`${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 F(`${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=at(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=at(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 F(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return cu(uu(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 $1(t.name);return we(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const lh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ss(i,e,t={},n=[]){const a=Nl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict";
`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(Ih)&&(s+=`import random
@@ -26,8 +26,8 @@ except:
`),i.pseudocode&&(s+=(e==="python"?"# ":"// ")+a.pseudocodeNote+`
-`),e!=="java")for(const u of n){if(u===i)continue;const m=yt(u.caption);m&&(s+=fo(u,m,e,t,0)+`
-`)}const o=yt(i.caption),l={out:""};if(o)l.out=fo(i,o,e,t,a.baseIndent);else for(const u of i.elements)Rs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=I3(e);return e==="javascript"?`"use strict";
+`),e!=="java")for(const u of n){if(u===i)continue;const m=vt(u.caption);m&&(s+=fo(u,m,e,t,0)+`
+`)}const o=vt(i.caption),l={out:""};if(o)l.out=fo(i,o,e,t,a.baseIndent);else for(const u of i.elements)Rs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=I3(e);return e==="javascript"?`"use strict";
`+u:u}return Th(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Nl(i,e,t){const n={...lh,...t,jsIntVariables:new Set,arrayElementTypes:C3(i),stringVariables:j3(i)};return e!=="java"&&(n.jsIntVariables=K3(i)),n}const pu=i=>i==="string"?"String":i===void 0?"void":i;function uh(i){const e=i.params.map(t=>`${pu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${pu(i.returnType)} ${i.name}(${e}) {`}function fo(i,e,t,n,a){const s=Nl(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)Rs(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=Z(a+s.indentPerLevel)+(t==="python"?`pass
`:`
@@ -48,19 +48,19 @@ ${o.out}${Z(a)}}
`}const _3=i=>i==="java"||i==="javascript";function rs(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 Da(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return T3(e.length===0?"true":e.join(" "))}function T3(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=ch(t,e);if(n!==void 0)return n===""?"true":n}return e}function ch(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 Ht(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function O3(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 Ns=i=>i.name.includes("[")&&i.name.includes("]");function Jl(i){const e=i.trim();if(e==="")return;const t=ce(/^\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:os(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ce(/^\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=A3(e);if(a)return{type:os(a[0]),name:a[1]}}function os(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 A3(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 P3(i,e,t,n,a){const s=Ht(i).trim();if(s.startsWith('"'))switch(e){case"java":return Z(t)+"System.out.println("+s+`);
`;case"javascript":return Z(t)+"console.log("+s+`);
`;case"python":return Z(t)+"print("+jn(s,n,a)+`)
-`}}function yi(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(`
-`,"\\n").replaceAll("\r","\\r")}function Rl(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=Jl(n);if(a&&Ns(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 j3(i){const e=new Set;return gn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=Jl(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Ns(o)&&e.add(o.name);continue}const s=ce(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ce(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function C3(i){const e=new Map;return gn(i.elements,t=>{for(const n of t.textLines){const a=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],os(a[1]))}}),e}function B3(i,e,t){const n=Rl(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+yi(a)+`");
+`}}function vi(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(`
+`,"\\n").replaceAll("\r","\\r")}function Rl(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=Jl(n);if(a&&Ns(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 j3(i){const e=new Set;return gn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=Jl(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Ns(o)&&e.add(o.name);continue}const s=ce(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ce(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function C3(i){const e=new Map;return gn(i.elements,t=>{for(const n of t.textLines){const a=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],os(a[1]))}}),e}function B3(i,e,t){const n=Rl(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+vi(a)+`");
`,r=o=>Ns(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${r("int")} = scanner.nextInt();
`;case"double":return s+Z(e)+`${r("double")} = scanner.nextDouble();
`;case"String":return s+Z(e)+`${r("String")} = scanner.next();
`;case"boolean":return s+Z(e)+`${r("boolean")} = scanner.nextBoolean();
-`;default:return}}function D3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+yi(n.name+": ")+`");
-`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${yi(u)}") ?? "${l}")`},o=Ns(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${o} = parseInt(${r("0")}, 10);
+`;default:return}}function D3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+vi(n.name+": ")+`");
+`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${vi(u)}") ?? "${l}")`},o=Ns(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${o} = parseInt(${r("0")}, 10);
`;case"double":return s+Z(e)+`${o} = Number(${r("0")});
`;case"String":return s+Z(e)+`${o} = ${r("")};
`;case"boolean":return s+Z(e)+`${o} = ${r("")}.trim().toLowerCase() === "true";
-`;default:return}}function Z3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+yi(n.name+": ")+`")
-`,r=`input("${yi(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+Z(e)+`${n.name} = int(${r})
+`;default:return}}function Z3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+vi(n.name+": ")+`")
+`,r=`input("${vi(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+Z(e)+`${n.name} = int(${r})
`;case"double":return s+Z(e)+`${n.name} = float(${r})
`;case"String":return s+Z(e)+`${n.name} = ${r}
`;case"boolean":return s+Z(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr")
@@ -120,12 +120,12 @@ ${o.out}${Z(a)}}
`:void 0;switch(e){case"java":return Z(t)+"System.out.println("+r+`);
`;case"javascript":return Z(t)+"console.log("+r+`);
`;case"python":return Z(t)+"print("+jn(r,n,a)+`)
-`}}function Gl(i){const e=i.map(Ht).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function J3(i){const t=Gl(i).split(";"),n=hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function hh(i){const e=ce(/^(\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 R3(i){const e=i.map(n=>Ht(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=ch("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 gh(i,e){let t=ce(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ce(/^\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=ce(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ce(/^\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 yo(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 G3(i,e){const t=R3(i);if(!t)return;const[n,a,s]=t,r=ce(/^\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} = ${Pe(r[2],e)}`,condition:a,increment:s},u=ce(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=gh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Pe(r[2],e);let d=Pe(u[3],e);const h=u[2];if(m>0&&h==="<=")d=yo(d,1);else if(m<0&&h===">=")d=yo(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 ph(i){const e=Ht(i).trim();if(e==="")return;const t=ce(/^\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 H3(i,e,t,n){var o;const a=ph(i);if(!a)return;const s=os(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+rs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+`
+`}}function Gl(i){const e=i.map(Ht).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function J3(i){const t=Gl(i).split(";"),n=hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function hh(i){const e=ce(/^(\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 R3(i){const e=i.map(n=>Ht(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=ch("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 gh(i,e){let t=ce(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ce(/^\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=ce(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ce(/^\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 vo(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 G3(i,e){const t=R3(i);if(!t)return;const[n,a,s]=t,r=ce(/^\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} = ${Pe(r[2],e)}`,condition:a,increment:s},u=ce(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=gh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Pe(r[2],e);let d=Pe(u[3],e);const h=u[2];if(m>0&&h==="<=")d=vo(d,1);else if(m<0&&h===">=")d=vo(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 ph(i){const e=Ht(i).trim();if(e==="")return;const t=ce(/^\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 H3(i,e,t,n){var o;const a=ph(i);if(!a)return;const s=os(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+rs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+`
`;case"javascript":return r?Z(t)+rs(`const ${a.name} = ${r}`)+`
`:Z(t)+`let ${a.name}; // from diagram: const ${s} ${a.name}
`;case"python":return r?Z(t)+`${a.name} = ${Js(r,n)} # const ${s}
`:Z(t)+`${a.name} = None # const ${s}, uninitialized
-`}}function V3(i){const e=Ht(i).trim();if(e===""||wh(e))return;const t=ce(/^\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 Fs(i){const e=ce(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||fh(t)))return t.startsWith("(")&&vo(t,0)===t.length-1?t.slice(1,-1).trim():t}function vo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Q3(i,e){if(i[e]==="("){const a=vo(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=vo(i,n);if(s<0)return-1;n=s+1}else return n}}function wo(i,e){return Hl(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=Q3(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!fh(u))continue;const m=wo(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 Js(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Fs(t);return n!==void 0?`int(${Js(n,e)})`:Pe(t,e)}function Hl(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return Hl(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 xh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function jn(i,e,t){const n=xh(i),a=s=>Vl(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==="")?Pe(i,e):n.map(s=>a(s)?s:`str(${Pe(s,e)})`).join(" + ")}function bh(i,e,t=new Set){const n=Ht(i).trim(),a=ce(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ce(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Pe(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ce(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Pe(s[2],e)}`;const r=ce(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=xh(u);m=jn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!Vl(u.trim())&&!t.has(u.trim())&&(m=`str(${Pe(u,e)})`)}else l==="="&&Fs(u)===void 0&&u.trim()!=="null"?m=jn(u,e,t):m=l==="="?Js(u,e):Pe(u,e);return`${o} ${l} ${m}`}return Pe(n,e)}const q3=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function yh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function vh(i){const e=ce(/^\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 wh(i){const e=ce(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Ht(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function U3(i){const e=ce(/^\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 fu=i=>i.replaceAll("{","[").replaceAll("}","]");function xu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function $3(i,e,t){const n=U3(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${xu(i.elementType,e)}))`:fu(i.rhs):n?`[[${xu(i.elementType,e)}] * ${Pe(n[1],t)} for _ in range(${Pe(n[0],t)})]`:Pe(fu(i.rhs),t)}function zh(i,e){const t=i.trim();if(e){const a=vh(t);return a!==void 0?`new Array(${a})`:yh(t)}const n=Fs(t);return n!==void 0?`Math.floor(${zh(n,!1)})`:q3(t)}function Y3(i,e,t){const n=i.trim();if(e){const a=vh(n);return a!==void 0?`[None] * ${a}`:Pe(yh(n),t)}return Js(n,t)}function X3(i,e,t,n,a){if(e==="java")return;const s=wh(i);if(s){const u=$3(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u};
+`}}function V3(i){const e=Ht(i).trim();if(e===""||wh(e))return;const t=ce(/^\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 Fs(i){const e=ce(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||fh(t)))return t.startsWith("(")&&yo(t,0)===t.length-1?t.slice(1,-1).trim():t}function yo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Q3(i,e){if(i[e]==="("){const a=yo(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=yo(i,n);if(s<0)return-1;n=s+1}else return n}}function wo(i,e){return Hl(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=Q3(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!fh(u))continue;const m=wo(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 Js(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Fs(t);return n!==void 0?`int(${Js(n,e)})`:Pe(t,e)}function Hl(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return Hl(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 xh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function jn(i,e,t){const n=xh(i),a=s=>Vl(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==="")?Pe(i,e):n.map(s=>a(s)?s:`str(${Pe(s,e)})`).join(" + ")}function bh(i,e,t=new Set){const n=Ht(i).trim(),a=ce(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ce(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Pe(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ce(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Pe(s[2],e)}`;const r=ce(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=xh(u);m=jn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!Vl(u.trim())&&!t.has(u.trim())&&(m=`str(${Pe(u,e)})`)}else l==="="&&Fs(u)===void 0&&u.trim()!=="null"?m=jn(u,e,t):m=l==="="?Js(u,e):Pe(u,e);return`${o} ${l} ${m}`}return Pe(n,e)}const q3=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function vh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function yh(i){const e=ce(/^\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 wh(i){const e=ce(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Ht(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function U3(i){const e=ce(/^\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 fu=i=>i.replaceAll("{","[").replaceAll("}","]");function xu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function $3(i,e,t){const n=U3(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${xu(i.elementType,e)}))`:fu(i.rhs):n?`[[${xu(i.elementType,e)}] * ${Pe(n[1],t)} for _ in range(${Pe(n[0],t)})]`:Pe(fu(i.rhs),t)}function zh(i,e){const t=i.trim();if(e){const a=yh(t);return a!==void 0?`new Array(${a})`:vh(t)}const n=Fs(t);return n!==void 0?`Math.floor(${zh(n,!1)})`:q3(t)}function Y3(i,e,t){const n=i.trim();if(e){const a=yh(n);return a!==void 0?`[None] * ${a}`:Pe(vh(n),t)}return Js(n,t)}function X3(i,e,t,n,a){if(e==="java")return;const s=wh(i);if(s){const u=$3(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u};
`:Z(t)+`${s.name} = ${u}
`}const r=V3(i);if(!r)return;if(e==="javascript")return Z(t)+rs(`let ${r.name} = ${zh(r.rhs,r.isArray)}`)+`
`;const l=!r.isArray&&Fs(r.rhs)===void 0&&r.rhs.trim()!=="null"?jn(r.rhs,n,a):Y3(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l}
@@ -178,8 +178,8 @@ ${o.out}${Z(a)}}
`:`while (true) /* ${c} */ {
`),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`}
`);return}}}const Mi="",ql="",Xn=i=>Mi+i+ql,Ul=(i,e)=>Z(i)+Xn(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+`
-`,$l=i=>i.every(e=>e.trim()==="");function kh(i,e){return $l(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Ht(i[a]??"");return s===""?Xn(n):s}).join("; "):Gl(i)}function ax(i,e){const t=kh(i,e).split(";"),n=t[0].includes(Mi)?void 0:hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function sx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Ht(g)):[],r=ce(/^\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=ce(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Pe(r[2],t):Xn(e.start),u=ce(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=Xn(e.end);u&&(o===void 0||u[1]===o)&&(m=Pe(u[3],t),u[2]==="<="&&(m=yo(m,1)));const c=o===void 0?void 0:gh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??Xn(e.selector)} in range(${d.join(", ")}):`}function ko(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&&ko(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>ko(o.elements,[...s,l],t))}),t}function Sh(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:ko(i.elements),spans:[]},a=Nl(i,e,{includeEmptyElseBranch:!0,live:n}),s=yt(i.caption);let r="";if(e==="java"){const u=Ql(i);for(const m of u)r+=m+`
+`,$l=i=>i.every(e=>e.trim()==="");function kh(i,e){return $l(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Ht(i[a]??"");return s===""?Xn(n):s}).join("; "):Gl(i)}function ax(i,e){const t=kh(i,e).split(";"),n=t[0].includes(Mi)?void 0:hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function sx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Ht(g)):[],r=ce(/^\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=ce(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Pe(r[2],t):Xn(e.start),u=ce(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=Xn(e.end);u&&(o===void 0||u[1]===o)&&(m=Pe(u[3],t),u[2]==="<="&&(m=vo(m,1)));const c=o===void 0?void 0:gh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??Xn(e.selector)} in range(${d.join(", ")}):`}function ko(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&&ko(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>ko(o.elements,[...s,l],t))}),t}function Sh(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:ko(i.elements),spans:[]},a=Nl(i,e,{includeEmptyElseBranch:!0,live:n}),s=vt(i.caption);let r="";if(e==="java"){const u=Ql(i);for(const m of u)r+=m+`
`;ls(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner;
`),r+=`Scanner scanner = new Scanner(System.in);
@@ -193,10 +193,10 @@ ${o.out}${Z(a)}}
`),r+=bo([i],"python"),s&&(r+=`def ${s.name}(${u}):
`))}const o={out:""};p1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`}
`);const l=r.split(`
-`).length-1;return{text:Th((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Th(i,e){switch(e){case"javascript":return lx(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return rx(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return cx(i)}}function rx(i){for(let e=0;e<5;e++){const t=Oh(ox(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 ox(i){return Yl(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=ux(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 lx(i){for(let e=0;e<5;e++){const t=Oh(Yl(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 Oh(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 ux(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 Yl(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 dx=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 Gs(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),dx.has(t.toLowerCase())&&(t="_"+t),t)}function yu(i,e,t={},n=[]){const a={...lh,...t},s=Gs(e),r=[i,...n].filter((S,z,k)=>k.indexOf(S)===z).map(S=>({d:S,header:yt(S.caption)})).filter(S=>S.header!==void 0),o=r.map(S=>fo(S.d,S.header,"java",t,a.indentPerLevel)),l=yt(i.caption),u=r.some(S=>ls(S.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?hx(m):m,g=Z(c),f=h.trim()===""?"":h.split(`
+`).length-1;return{text:Th((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Th(i,e){switch(e){case"javascript":return lx(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return rx(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return cx(i)}}function rx(i){for(let e=0;e<5;e++){const t=Oh(ox(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 ox(i){return Yl(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=ux(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 lx(i){for(let e=0;e<5;e++){const t=Oh(Yl(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 Oh(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 ux(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 Yl(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 dx=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 Gs(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),dx.has(t.toLowerCase())&&(t="_"+t),t)}function vu(i,e,t={},n=[]){const a={...lh,...t},s=Gs(e),r=[i,...n].filter((S,z,k)=>k.indexOf(S)===z).map(S=>({d:S,header:vt(S.caption)})).filter(S=>S.header!==void 0),o=r.map(S=>fo(S.d,S.header,"java",t,a.indentPerLevel)),l=vt(i.caption),u=r.some(S=>ls(S.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?hx(m):m,g=Z(c),f=h.trim()===""?"":h.split(`
`).map(S=>S.trim()===""?g:g+S).join(`
-`);let x="";const b=o.length>0&&(d||u),y=[...new Set([i,...r.map(S=>S.d)].flatMap(Ql))],w=y.length>0;(d||u)&&!y.includes("import java.util.Scanner;")&&y.push("import java.util.Scanner;");for(const S of y)x+=S+`
-`;y.length&&(x+=`
+`);let x="";const b=o.length>0&&(d||u),v=[...new Set([i,...r.map(S=>S.d)].flatMap(Ql))],w=v.length>0;(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const S of v)x+=S+`
+`;v.length&&(x+=`
`),x+=`public class ${s} {
`,b&&(x+=Z(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in);
@@ -255,7 +255,7 @@ onmessage = async (e) => {
send('error', String(err))
}
}
-`,gr=2e3;class bx{constructor(e,t,n,a,s=()=>[]){v(this,"element");v(this,"target");v(this,"javaMode");v(this,"comments");v(this,"emptyElse");v(this,"code","");v(this,"codeView");v(this,"javaModeRow");v(this,"runButton");v(this,"saveButton");v(this,"copyButton");v(this,"runner");v(this,"runOutput");v(this,"runInput");v(this,"pseudocodeBox");v(this,"pseudocodeHint");v(this,"worker");v(this,"outputLines",[]);v(this,"droppedLines",0);v(this,"outputFrame");v(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=Ki(xn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=Ki(xn.javaMode)==="class"?"class":"snippet",this.comments=Ki(xn.comments)==="true",this.emptyElse=Ki(xn.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"?yu(e,this.classStem(),t,this.subprograms()):ss(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 as(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`
+`,gr=2e3;class bx{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=Ki(xn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=Ki(xn.javaMode)==="class"?"class":"snippet",this.comments=Ki(xn.comments)==="true",this.emptyElse=Ki(xn.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"?vu(e,this.classStem(),t,this.subprograms()):ss(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 as(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`
${De(p("codegen_placeholder_title"))}
@@ -285,11 +285,11 @@ onmessage = async (e) => {
${De(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,ea(xn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ea(xn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ea(xn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ea(xn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Gs(this.classStem()),s=yu(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=fx(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(Ah())):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>gr&&(this.droppedLines+=this.outputLines.length-gr,this.outputLines.splice(0,this.outputLines.length-gr)),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,ea(xn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ea(xn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ea(xn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ea(xn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Gs(this.classStem()),s=vu(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=fx(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(Ah())):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>gr&&(this.droppedLines+=this.outputLines.length-gr,this.outputLines.splice(0,this.outputLines.length-gr)),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 Oe=(i,e=!1)=>``,ne={newFile:Oe(''),open:Oe(''),save:Oe(''),undo:Oe(''),redo:Oe(''),cut:Oe(''),copy:Oe(''),paste:Oe(''),trash:Oe(''),share:Oe(''),book:Oe(''),code:Oe(''),play:Oe('',!0),step:Oe(''),indent:Oe(''),stop:Oe('',!0),folder:Oe(''),newFolder:Oe(''),diagram:Oe(''),fileText:Oe('')},yx="visustruct.learn.progress",pr={"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 vx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(pr))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&&pr[i.view.lesson]?{...i.view,lesson:pr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function wx(){try{localStorage.removeItem(yx)}catch{}}const Ph=()=>({lessons:{},exercises:{}});wx();let qe=Ph();const So=new Set;function ta(){for(const i of So)i()}const vu="visustruct-lernstand";function jh(i,e){return i||e||void 0}function zx(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||!!t[n];return{step:Math.max(i.step??0,e.step??0),done:jh(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Ix(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=zx(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:jh(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const ge={lesson(i){return qe.lessons[i]??{step:0}},updateLesson(i,e){qe.lessons[i]={...ge.lesson(i),...e},ta()},exercise(i){return qe.exercises[i]??{}},updateExercise(i,e){qe.exercises[i]={...ge.exercise(i),...e},ta()},resetExercise(i){delete qe.exercises[i],ta()},view(){return qe.view},hasContent(){return Object.values(qe.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(qe.exercises).length>0},setView(i){qe.view=i,ta()},onChange(i){return So.add(i),()=>So.delete(i)},toFile(){return JSON.stringify({format:vu,version:1,saved:new Date().toISOString(),lessons:qe.lessons,exercises:qe.exercises,view:qe.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==vu)return!1;const n=vx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return qe=e?{...Ix(qe,n),view:n.view??qe.view}:n,!0},clear(){qe=Ph()}};function wu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function kx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:zu(i.name)&&zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function Sx(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function _x(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 Tx(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Vn=10;function Ox(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))*Vn,r=e.length*Vn,o=(m,c)=>({x:-s/2+(m+.5)*Vn,y:r/2-(c+.5)*Vn}),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 Iu?l.colors.push({at:g,color:Iu[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 Iu={r:"red",g:"green",b:"blue",y:"yellow"},N1=(i,e)=>Math.abs(i.x-e.x)<=Vn/2&&Math.abs(i.y-e.y)<=Vn/2,ku=10,Su=9,Ax=300,u1=8,Px=[-3.6,-1.2,1.2,3.6],jx=2.5,Cx=20,Bx=12,Xl=100,vi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},_u=i=>i*Math.PI/180,m1=i=>({x:Math.sin(_u(i)),y:Math.cos(_u(i))}),na=()=>Array.from({length:Kd},()=>{}),Tu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class us{constructor(e=vi){v(this,"pose");v(this,"trail");v(this,"bumps",0);v(this,"leds",na());v(this,"screen");v(this,"wheels",[0,0]);v(this,"time",0);v(this,"timerStart",0);v(this,"blocked",!1);v(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=na(),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=Vn/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=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(this.setup.goals??[]).some(n=>N1(this.pose,n)||N1(t,n))||(this.setup.targets??[]).some(n=>N1(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=[Ou(e.args[0]),Ou(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=na().map(()=>Tu(e.args));return;case"ledOff":this.leds=na();return;case"ledColor":this.leds[e.args[0]]=Tu(Xa[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*Cx);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*u1+t.x*a,y:this.pose.y+e.y*u1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>N1(r,l))||this.setup.lines.some(l=>Zx(r,l)<=jx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(n=(this.setup.colors??[]).find(a=>N1(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=Dx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Au(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Dx(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 Zx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(Xl),s.robotSensors={...o.sensors(),...Fx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?es(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=>!Ex.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:es(s.state.robotActions),tooManySteps:!0}}function Fx(i,e){const t=Math.floor(e/Lx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Ch(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(`
+`:""),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 Oe=(i,e=!1)=>``,ne={newFile:Oe(''),open:Oe(''),save:Oe(''),undo:Oe(''),redo:Oe(''),cut:Oe(''),copy:Oe(''),paste:Oe(''),trash:Oe(''),share:Oe(''),book:Oe(''),code:Oe(''),play:Oe('',!0),step:Oe(''),indent:Oe(''),stop:Oe('',!0),folder:Oe(''),newFolder:Oe(''),diagram:Oe(''),fileText:Oe('')},vx="visustruct.learn.progress",pr={"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(pr))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&&pr[i.view.lesson]?{...i.view,lesson:pr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function wx(){try{localStorage.removeItem(vx)}catch{}}const Ph=()=>({lessons:{},exercises:{}});wx();let qe=Ph();const So=new Set;function ta(){for(const i of So)i()}const yu="visustruct-lernstand";function jh(i,e){return i||e||void 0}function zx(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||!!t[n];return{step:Math.max(i.step??0,e.step??0),done:jh(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Ix(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=zx(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:jh(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const ge={lesson(i){return qe.lessons[i]??{step:0}},updateLesson(i,e){qe.lessons[i]={...ge.lesson(i),...e},ta()},exercise(i){return qe.exercises[i]??{}},updateExercise(i,e){qe.exercises[i]={...ge.exercise(i),...e},ta()},resetExercise(i){delete qe.exercises[i],ta()},view(){return qe.view},hasContent(){return Object.values(qe.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(qe.exercises).length>0},setView(i){qe.view=i,ta()},onChange(i){return So.add(i),()=>So.delete(i)},toFile(){return JSON.stringify({format:yu,version:1,saved:new Date().toISOString(),lessons:qe.lessons,exercises:qe.exercises,view:qe.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==yu)return!1;const n=yx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return qe=e?{...Ix(qe,n),view:n.view??qe.view}:n,!0},clear(){qe=Ph()}};function wu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function kx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:zu(i.name)&&zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function Sx(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function _x(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 Tx(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Vn=10;function Ox(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))*Vn,r=e.length*Vn,o=(m,c)=>({x:-s/2+(m+.5)*Vn,y:r/2-(c+.5)*Vn}),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 Iu?l.colors.push({at:g,color:Iu[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 Iu={r:"red",g:"green",b:"blue",y:"yellow"},N1=(i,e)=>Math.abs(i.x-e.x)<=Vn/2&&Math.abs(i.y-e.y)<=Vn/2,ku=10,Su=9,Ax=300,u1=8,Px=[-3.6,-1.2,1.2,3.6],jx=2.5,Cx=20,Bx=12,Xl=100,yi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},_u=i=>i*Math.PI/180,m1=i=>({x:Math.sin(_u(i)),y:Math.cos(_u(i))}),na=()=>Array.from({length:Kd},()=>{}),Tu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class us{constructor(e=yi){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",na());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=na(),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=Vn/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=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(this.setup.goals??[]).some(n=>N1(this.pose,n)||N1(t,n))||(this.setup.targets??[]).some(n=>N1(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=[Ou(e.args[0]),Ou(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=na().map(()=>Tu(e.args));return;case"ledOff":this.leds=na();return;case"ledColor":this.leds[e.args[0]]=Tu(Xa[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*Cx);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*u1+t.x*a,y:this.pose.y+e.y*u1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>N1(r,l))||this.setup.lines.some(l=>Zx(r,l)<=jx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(n=(this.setup.colors??[]).find(a=>N1(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=Dx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Au(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Dx(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 Zx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(Xl),s.robotSensors={...o.sensors(),...Fx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?es(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=>!Ex.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:es(s.state.robotActions),tooManySteps:!0}}function Fx(i,e){const t=Math.floor(e/Lx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Ch(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(`
`)}function ia(i,e){return i.length!==e.length?!1:i.every((t,n)=>Pu(t)===Pu(e[n]))}function Pu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function Jx(i,e,t,n){return e.map(a=>{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=Nx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ia(Ch((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ia(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||ia(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ia(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Rx(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 _o(i){const e=[I.forSchleife,I.whileSchleife,I.doUntilSchleife,I.endlosschleife];let t=0;for(const n of i){const a=Math.max(_o(n.loopBody??[]),...(n.cases??[]).map(s=>_o(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class wi extends Error{}function Gx(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();ms(o,Hx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new wi(`${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 wi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Hx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Vx(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 wi(`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 wi(`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 Qx(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(ms(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ms(i,e));return s!==t[t.length-1]&&t.push(s),t}function qx(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 Ux(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=qx(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:ms(o,l)}}function $x(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Yx=`---
titel: Was ist ein Struktogramm?
bereich: Erste Schritte
@@ -316,7 +316,7 @@ Die Darstellung stammt von **Isaac Nassi und Ben Shneiderman** (1973). Deshalb h
Links Isaac „Ike“ Nassi (Foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/deed.de), zugeschnitten), rechts Ben Shneiderman (Foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0).
:::
-> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer.
+> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer. Programme, die kreuz und quer springen, nennt man **Spaghetticode**, weil sich ihr Ablauf verheddert wie Nudeln auf dem Teller. Mehr dazu in Schritt 8.
::: angeberwissen
Määäh, aufgepasst! 1972 waren Nassi und Shneiderman noch Doktoranden an der Stony Brook University bei New York, Shneiderman etwa 25 und Nassi etwa 23. Also quasi zwei Studis, die nebenbei Informatikgeschichte geschrieben haben.
@@ -6695,7 +6695,7 @@ Die Exception heißt \`ArithmeticException\`. Schreib in den \`try\`-Block nur d
= ArithmeticException -> Teilen durch 0
= NumberFormatException -> Text ist keine Zahl
:::
-`,yb=`---
+`,vb=`---
titel: Text einlesen und speichern
bereich: Dateien
kurz: Mit Scanner eine Textdatei Zeile für Zeile lesen und mit PrintWriter eine Datei speichern.
@@ -6933,7 +6933,7 @@ runde:
= println(text) -> schreibt eine Zeile
= close() -> schließt die Datei
:::
-`,vb=`---
+`,yb=`---
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.
@@ -11398,7 +11398,7 @@ This way of drawing was invented by **Isaac Nassi and Ben Shneiderman** (1973).
Left: Isaac “Ike” Nassi (photo: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), cropped), right: Ben Shneiderman (photo: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0).
:::
-> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place.
+> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place. Programs that jump all over the place are called **spaghetti code**, because their flow gets tangled like noodles on a plate. More on this in step 8.
::: angeberwissen
Baaah, listen up! In 1972 Nassi and Shneiderman were still PhD students at Stony Brook University near New York. Shneiderman was about 25 and Nassi about 23. So basically two students who wrote computer science history on the side.
@@ -20563,7 +20563,7 @@ Always test the limits: 90 must be an A, 89 a B. Most mistakes hide at the limit
- [ ] 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=`---
+`,v4=`---
titel: A calculator
bereich: Windows with Swing
kurz: Two columns with GridLayout, four arithmetic buttons and catching division by 0.
@@ -20820,7 +20820,7 @@ For “abc” every listener needs a try/catch with \`NumberFormatException\`. A
- [ ] Column by column, starting top to bottom on the far left
- [ ] Randomly
:::
-`,v4=`---
+`,y4=`---
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.
@@ -22476,7 +22476,7 @@ Esta forma de desenhar foi inventada por **Isaac Nassi e Ben Shneiderman** (1973
À esquerda: Isaac “Ike” Nassi (foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), recortada), à direita: Ben Shneiderman (foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0).
:::
-> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado.
+> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado. Programas que saltam para todo o lado chamam-se **código esparguete**, porque o seu fluxo se enrola como massa no prato. Mais sobre isto no passo 8.
::: angeberwissen
Méééé, ouve bem! Em 1972, Nassi e Shneiderman ainda eram doutorandos na Universidade de Stony Brook, perto de Nova Iorque. Shneiderman tinha uns 25 anos e Nassi uns 23. Ou seja, dois estudantes que escreveram história da informática nas horas vagas.
@@ -29907,7 +29907,7 @@ richtig: txt
= a pauta de notas da turma -> CSV
= um jogo guardado com listas -> JSON
:::
-`,ey=`---
+`,ev=`---
titel: A tua primeira janela
bereich: Janelas com Swing
kurz: Abrir uma janela tua com Java e Swing, explicado linha a linha.
@@ -30114,7 +30114,7 @@ Não te apetece escrever tanto? Com o “Java verdadeiro” podes escrever na á
- [ ] Estão entre chavetas.
- [ ] Terminam em Window.
:::
-`,ty=`---
+`,tv=`---
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.
@@ -30315,7 +30315,7 @@ Cada botão precisa da sua própria variável, por exemplo \`botao\` e \`botao2\
- [ ] No botão aparece “Fui clicado”.
> O que deve acontecer com um clique aprendes na próxima lição.
:::
-`,ny=`---
+`,nv=`---
titel: O botão reage
bereich: Janelas com Swing
kurz: Com um ActionListener decides o que acontece com um clique.
@@ -30642,7 +30642,7 @@ Cada botão recebe o seu próprio ouvinte, com o seu próprio \`addActionListene
= setText -> mudar o texto
= setVisible(true) -> mostrar a janela
:::
-`,iy=`---
+`,iv=`---
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.
@@ -30907,7 +30907,7 @@ O botão “Dividir por 2” entra no GridLayout como quarta linha e recebe o se
= JButton -> botão
= GridLayout -> arrumação em grelha
:::
-`,ay=`---
+`,av=`---
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.
@@ -31125,7 +31125,7 @@ Para “nunca abaixo de 0”, o ouvinte do −1 precisa de um \`if\`: só se \`c
- [ ] Põe a janela no meio do ecrã.
- [ ] Aumenta a letra.
:::
-`,sy=`---
+`,sv=`---
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.
@@ -31386,7 +31386,7 @@ Com quatro fases, depois do 3 vem o 0. Ajusta por isso o número em \`if (fase >
- [ ] 3
> Depois de fase++ é 3, que é maior do que 2, por isso passa a 0.
:::
-`,ry=`---
+`,rv=`---
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.
@@ -31643,7 +31643,7 @@ Testa sempre os limites: 90 tem de dar 5, 89 tem de dar 4. É nos limites que se
- [ ] 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.
:::
-`,oy=`---
+`,ov=`---
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.
@@ -31900,7 +31900,7 @@ Para o “abc” cada ouvinte precisa de um try/catch com \`NumberFormatExceptio
- [ ] Coluna a coluna, começando de cima para baixo na coluna da esquerda
- [ ] Ao acaso
:::
-`,ly=`---
+`,lv=`---
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.
@@ -32042,7 +32042,7 @@ Para “não conta como tentativa”, o \`tentativas++\` tem de vir **depois** d
- [x] 7
> Cada palpite corta o intervalo a meio, e 2 elevado a 7 = 128 é maior do que 100.
:::
-`,uy=`---
+`,uv=`---
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.
@@ -32331,7 +32331,7 @@ Também na calculadora da lição 35 chega um ouvinte para +, -, \\* e /. Verifi
= ActionEvent -> o evento e com a informação sobre o clique
= JPanel -> uma área com o seu próprio layout
:::
-`,my=`---
+`,mv=`---
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ê.
@@ -32547,7 +32547,7 @@ Experimenta se os três botões contam como esperado. Depois tira o \`static\` d
= new ActionListener() { … } -> classe anónima
= a seta depois de e -> lambda
:::
-`,cy=`---
+`,cv=`---
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.
@@ -32812,7 +32812,7 @@ Depois melhora-o:
= JPanel -> a área de um separador
= JTextArea -> uma área de texto com várias linhas
:::
-`,dy=`---
+`,dv=`---
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.
@@ -33209,7 +33209,7 @@ Depois melhora-o:
= VistaNumero com atualizar(int valor) -> view
= o ouvinte do botão -> controller
:::
-`,hy=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua
+`,hv=`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.
@@ -33408,7 +33408,7 @@ Um bloco pronto do Java que lê entradas do teclado, por exemplo um número com
### import
Uma linha mesmo no início do código Java que vai buscar um bloco pronto a um pacote, por exemplo \`import java.util.Scanner;\`. Sem ela, o Java não conhece o nome.
-`,gy=`## Elementos básicos
+`,gv=`## Elementos básicos
### Instrução
@@ -33534,7 +33534,7 @@ boolean[][] lugares = new boolean[3][5]
lugares[1][4] = true
output: lugares.length + " filas, " + lugares[0].length + " lugares"
\`\`\`
-`,py=`---
+`,pv=`---
titel: Alter im Unterprogramm
nach: 18
stufe: 2
@@ -33555,7 +33555,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
:::
-`,fy=`---
+`,fv=`---
titel: Ballwurf auswerten
nach: 25
stufe: 2
@@ -33584,7 +33584,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
:::
-`,xy=`---
+`,xv=`---
titel: Bestenliste
nach: 19
stufe: 2
@@ -33618,7 +33618,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
:::
-`,by=`---
+`,bv=`---
titel: Binärzahl
nach: 11
stufe: 3
@@ -33660,7 +33660,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
:::
-`,yy=`---
+`,vv=`---
titel: Caesar-Verschlüsselung
nach: 17
stufe: 3
@@ -33794,7 +33794,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.
:::
-`,vy=`---
+`,yv=`---
titel: Collatz-Folge
nach: 11
stufe: 2
@@ -33838,7 +33838,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.
:::
-`,wy=`---
+`,wv=`---
titel: Einheitenrechner
nach: 35
stufe: 2
@@ -33887,7 +33887,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.
:::
-`,zy=`---
+`,zv=`---
titel: Fibonacci-Zahlen
nach: 13
stufe: 2
@@ -33941,7 +33941,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.
:::
-`,Iy=`---
+`,Iv=`---
titel: Gerade oder ungerade
nach: 8
stufe: 1
@@ -33977,7 +33977,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
:::
-`,ky=`---
+`,kv=`---
titel: Mehrwertsteuer
nach: 6
stufe: 1
@@ -34018,7 +34018,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.
:::
-`,Sy=`---
+`,Sv=`---
titel: Notendurchschnitt
nach: 13
stufe: 2
@@ -34053,7 +34053,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
:::
-`,_y=`---
+`,_v=`---
titel: PIN prüfen
nach: 12
stufe: 2
@@ -34093,7 +34093,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
:::
-`,Ty=`---
+`,Tv=`---
titel: Schiffe versenken
nach: 16
stufe: 2
@@ -34130,7 +34130,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
:::
-`,Oy=`---
+`,Ov=`---
titel: Speisekarte
nach: 10
stufe: 1
@@ -34166,7 +34166,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
:::
-`,Ay=`---
+`,Av=`---
titel: Summe bilden
nach: 2
stufe: 1
@@ -34182,7 +34182,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
:::
-`,Py=`---
+`,Pv=`---
titel: Tafeldienst auslosen
nach: 15
stufe: 2
@@ -34219,7 +34219,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.
-`,jy=`---
+`,jv=`---
titel: Taschenrechner
nach: 10
stufe: 2
@@ -34255,7 +34255,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
:::
-`,Cy=`---
+`,Cv=`---
titel: Verleih-Menü
nach: 18
stufe: 2
@@ -34290,7 +34290,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
:::
-`,By=`---
+`,Bv=`---
titel: Vokabeltrainer
nach: 27
stufe: 3
@@ -34325,7 +34325,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
:::
-`,Dy=`---
+`,Dv=`---
titel: Volljährig?
nach: 8
stufe: 1
@@ -34361,7 +34361,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
:::
-`,Zy=`---
+`,Zv=`---
titel: Würfeln mit MVC
nach: 40
stufe: 3
@@ -34399,7 +34399,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.
:::
-`,My=`---
+`,Mv=`---
titel: Zahl verdoppeln
nach: 2
stufe: 1
@@ -34415,7 +34415,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
:::
-`,Ly=`---
+`,Lv=`---
titel: Age in a subprogram
nach: 18
stufe: 2
@@ -34436,7 +34436,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
:::
-`,Wy=`---
+`,Wv=`---
titel: Ball throw results
nach: 25
stufe: 2
@@ -34465,7 +34465,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
:::
-`,Ey=`---
+`,Ev=`---
titel: Leaderboard
nach: 19
stufe: 2
@@ -34499,7 +34499,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
:::
-`,Ny=`---
+`,Nv=`---
titel: Binary number
nach: 11
stufe: 3
@@ -34541,7 +34541,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
:::
-`,Fy=`---
+`,Fv=`---
titel: Caesar cipher
nach: 17
stufe: 3
@@ -34675,7 +34675,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.
:::
-`,Jy=`---
+`,Jv=`---
titel: Collatz sequence
nach: 11
stufe: 2
@@ -34719,7 +34719,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.
:::
-`,Ry=`---
+`,Rv=`---
titel: Unit converter
nach: 35
stufe: 2
@@ -34768,7 +34768,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.
:::
-`,Gy=`---
+`,Gv=`---
titel: Fibonacci numbers
nach: 13
stufe: 2
@@ -34822,7 +34822,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.
:::
-`,Hy=`---
+`,Hv=`---
titel: Even or odd
nach: 8
stufe: 1
@@ -34858,7 +34858,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
:::
-`,Vy=`---
+`,Vv=`---
titel: Sales tax
nach: 6
stufe: 1
@@ -34899,7 +34899,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\`.
:::
-`,Qy=`---
+`,Qv=`---
titel: Grade average
nach: 13
stufe: 2
@@ -34934,7 +34934,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
:::
-`,qy=`---
+`,qv=`---
titel: Check the PIN
nach: 12
stufe: 2
@@ -34974,7 +34974,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
:::
-`,Uy=`---
+`,Uv=`---
titel: Battleship
nach: 16
stufe: 2
@@ -35011,7 +35011,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
:::
-`,$y=`---
+`,$v=`---
titel: Menu
nach: 10
stufe: 1
@@ -35047,7 +35047,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
:::
-`,Yy=`---
+`,Yv=`---
titel: Add up
nach: 2
stufe: 1
@@ -35063,7 +35063,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
:::
-`,Xy=`---
+`,Xv=`---
titel: Draw for board duty
nach: 15
stufe: 2
@@ -35100,7 +35100,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.
-`,Ky=`---
+`,Kv=`---
titel: Calculator
nach: 10
stufe: 2
@@ -35136,7 +35136,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
:::
-`,ev=`---
+`,ey=`---
titel: Rental menu
nach: 18
stufe: 2
@@ -35171,7 +35171,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
:::
-`,tv=`---
+`,ty=`---
titel: Vocabulary trainer
nach: 27
stufe: 3
@@ -35206,7 +35206,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
:::
-`,nv=`---
+`,ny=`---
titel: Adult?
nach: 8
stufe: 1
@@ -35242,7 +35242,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
:::
-`,iv=`---
+`,iy=`---
titel: Rolling dice with MVC
nach: 40
stufe: 3
@@ -35280,7 +35280,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.
:::
-`,av=`---
+`,ay=`---
titel: Double a number
nach: 2
stufe: 1
@@ -35296,7 +35296,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
:::
-`,sv=`---
+`,sy=`---
titel: Idade num subprograma
nach: 18
stufe: 2
@@ -35317,7 +35317,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
:::
-`,rv=`---
+`,ry=`---
titel: Avaliar o lançamento da bola
nach: 25
stufe: 2
@@ -35346,7 +35346,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
:::
-`,ov=`---
+`,oy=`---
titel: Classificação
nach: 19
stufe: 2
@@ -35380,7 +35380,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
:::
-`,lv=`---
+`,ly=`---
titel: Número binário
nach: 11
stufe: 3
@@ -35422,7 +35422,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
:::
-`,uv=`---
+`,uy=`---
titel: Cifra de César
nach: 17
stufe: 3
@@ -35556,7 +35556,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.
:::
-`,mv=`---
+`,my=`---
titel: Sequência de Collatz
nach: 11
stufe: 2
@@ -35600,7 +35600,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.
:::
-`,cv=`---
+`,cy=`---
titel: Conversor de unidades
nach: 35
stufe: 2
@@ -35649,7 +35649,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.
:::
-`,dv=`---
+`,dy=`---
titel: Números de Fibonacci
nach: 13
stufe: 2
@@ -35703,7 +35703,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.
:::
-`,hv=`---
+`,hy=`---
titel: Par ou ímpar
nach: 8
stufe: 1
@@ -35739,7 +35739,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
:::
-`,gv=`---
+`,gy=`---
titel: IVA
nach: 6
stufe: 1
@@ -35780,7 +35780,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\`.
:::
-`,pv=`---
+`,py=`---
titel: Média das notas
nach: 13
stufe: 2
@@ -35815,7 +35815,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
:::
-`,fv=`---
+`,fy=`---
titel: Verificar o PIN
nach: 12
stufe: 2
@@ -35855,7 +35855,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
:::
-`,xv=`---
+`,xy=`---
titel: Batalha naval
nach: 16
stufe: 2
@@ -35892,7 +35892,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
:::
-`,bv=`---
+`,by=`---
titel: Ementa
nach: 10
stufe: 1
@@ -35928,7 +35928,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
:::
-`,yv=`---
+`,vy=`---
titel: Somar
nach: 2
stufe: 1
@@ -35944,7 +35944,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
:::
-`,vv=`---
+`,yy=`---
titel: Sortear quem limpa o quadro
nach: 15
stufe: 2
@@ -35981,7 +35981,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.
-`,wv=`---
+`,wy=`---
titel: Calculadora
nach: 10
stufe: 2
@@ -36017,7 +36017,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
:::
-`,zv=`---
+`,zy=`---
titel: Menu de aluguer
nach: 18
stufe: 2
@@ -36052,7 +36052,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
:::
-`,Iv=`---
+`,Iy=`---
titel: Treino de vocabulário
nach: 27
stufe: 3
@@ -36087,7 +36087,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
:::
-`,kv=`---
+`,ky=`---
titel: Maior de idade?
nach: 8
stufe: 1
@@ -36123,7 +36123,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
:::
-`,Sv=`---
+`,Sy=`---
titel: Lançar o dado com MVC
nach: 40
stufe: 3
@@ -36161,7 +36161,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.
:::
-`,_v=`---
+`,_y=`---
titel: Duplicar um número
nach: 2
stufe: 1
@@ -36177,7 +36177,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
:::
-`,Tv=`---
+`,Ty=`---
titel: Der mBot2
bereich: VisuBot
kurz: Lerne den Roboter kennen, den du gleich programmierst.
@@ -36492,7 +36492,7 @@ Ist der mBot2 verbunden, erscheint unter der Welt **🔧 mBot2 testen**. Klapp e
- 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
:::
-`,Ov=`---
+`,Oy=`---
titel: Das Quadrat
bereich: VisuBot
kurz: Vom langen Struktogramm zur dreifach verschachtelten Schleife.
@@ -36616,7 +36616,7 @@ Das Programm bleibt gespeichert, auch wenn du den mBot2 aus- und wieder einschal
- 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
:::
-`,Av='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse 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- [ ] 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- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kenne die Datentypen `int`, `double`, `String` und `boolean`. → 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',Pv=`---
+`,Ay='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse 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- [ ] 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- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kenne die Datentypen `int`, `double`, `String` und `boolean`. → 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',Py=`---
titel: Sensoren abfragen
bereich: VisuBot
kurz: Der mBot2 misst etwas, und dein Programm entscheidet.
@@ -36685,7 +36685,7 @@ lösung: vb-wand-vorn-loesung.visustruct
- Ich kenne den Unterschied zwischen Befehl und Sensor. → Befehle und Sensoren
- Ich kann einen Sensor in eine Bedingung einbauen. → Wand vorn?
:::
-`,jv=`---
+`,jy=`---
titel: Bis zur Wand
bereich: VisuBot
kurz: Der mBot2 misst den Abstand und hält rechtzeitig an.
@@ -36760,7 +36760,7 @@ lösung: vb-bis-ziel-loesung.visustruct
- Ich weiß, 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
:::
-`,Cv=`---
+`,Cy=`---
titel: Der Ultraschallsensor
bereich: VisuBot
kurz: Abstand messen, Abstand halten und das Ganze in Java.
@@ -36846,7 +36846,7 @@ lösung: vb-java-wand-piep-loesung.visustruct
- Ich kann zwei Verzweigungen ineinander bauen. → Abstand halten im Struktogramm
- Ich kann eine While-Schleife mit dem Abstand in Java schreiben. → Jetzt in Java
:::
-`,Bv=`---
+`,By=`---
titel: Der Liniensensor
bereich: VisuBot
kurz: Dunkle Linien auf dem Boden erkennen und nicht vom Tisch fallen.
@@ -36928,7 +36928,7 @@ lösung: vb-java-rand-loesung.visustruct
- 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
:::
-`,Dv=`---
+`,Dy=`---
titel: Farben erkennen
bereich: VisuBot
kurz: Der Quad-RGB-Sensor sagt, auf welcher Farbe der mBot2 steht.
@@ -37006,7 +37006,7 @@ lösung: vb-java-blau-gruen-loesung.visustruct
- 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
:::
-`,Zv=`---
+`,Zy=`---
titel: Fallauswahl mit Farben
bereich: VisuBot
kurz: Je nach Farbe oder Linie etwas anderes tun, mit einer Fallauswahl statt vieler Verzweigungen.
@@ -37116,7 +37116,7 @@ lösung: vb-ohne-noten-loesung.visustruct
- 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
:::
-`,Mv=`---
+`,My=`---
titel: Tasten und Joystick
bereich: VisuBot
kurz: Der mBot2 wartet auf dich und lässt sich fernsteuern.
@@ -37193,7 +37193,7 @@ lösung: vb-java-joystick-loesung.visustruct
- Ich kann auf eine Taste warten. → Warten auf Taste A im Struktogramm
- Ich kann den mBot2 mit dem Joystick steuern. → Jetzt in Java: Fernsteuerung
:::
-`,Lv=`---
+`,Ly=`---
titel: Der Lichtsensor
bereich: VisuBot
kurz: Hell oder dunkel? Der mBot2 wird zum Nachtlicht.
@@ -37261,7 +37261,7 @@ lösung: vb-java-nachtlicht-ton-loesung.visustruct
- 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
:::
-`,Wv=`---
+`,Wy=`---
titel: Das Mikrofon
bereich: VisuBot
kurz: Klatschen zum Losfahren und eine Lärmampel für das Klassenzimmer.
@@ -37327,7 +37327,7 @@ Lautstärke misst man eigentlich in **Dezibel** (dB). Flüstern hat etwa 30 dB,
- Ich kann warten, bis etwas passiert. → Klatschen zum Losfahren im Struktogramm
- Ich kann eine Lärmampel in Java schreiben. → Jetzt in Java: Lärmampel
:::
-`,Ev=`---
+`,Ey=`---
titel: Der Lagesensor
bereich: VisuBot
kurz: Neigung messen und Schütteln erkennen.
@@ -37401,7 +37401,7 @@ lösung: vb-java-wasserwaage-loesung.visustruct
- Ich kann zwei Bedingungen mit „oder“ verbinden. → Schräglage-Warnung im Struktogramm
- Ich kann mehrere Bedingungen mit „und“ verbinden. → Jetzt in Java: Wasserwaage
:::
-`,Nv=`---
+`,Ny=`---
titel: Die LEDs
bereich: VisuBot
kurz: Farben mischen, eine Ampel bauen und blinken lassen.
@@ -37476,7 +37476,7 @@ lösung: vb-java-blinken-loesung.visustruct
- Ich kann Farben mit Pausen nacheinander zeigen. → Ampel im Struktogramm
- Ich kann die LEDs in Java blinken lassen. → Jetzt in Java: Blaulicht
:::
-`,Fv=`---
+`,Fy=`---
titel: Einzelne LEDs
bereich: VisuBot
kurz: Jede der fünf LEDs bekommt ihre eigene Farbe, bis zum Lauflicht.
@@ -37551,7 +37551,7 @@ lösung: vb-java-lauflicht-loesung.visustruct
- 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
:::
-`,Jv=`---
+`,Jy=`---
titel: Der Lautsprecher
bereich: VisuBot
kurz: Töne, eine Tonleiter und eine Sirene.
@@ -37642,7 +37642,7 @@ Der mBot2 kann auch fröhlich, traurig oder müde sein. Mit **Gefühl zeigen** (
- 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
:::
-`,Rv='---\ntitel: Arrays und Melodien\nbereich: VisuBot\nkurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten.\n---\n\n## Eine Melodie als Array\n\nEine Melodie ist eine Reihe von Tönen. Statt fünf Variablen `ton1`, `ton2`, … nimmst du ein **Array**. Ein Array ist eine Reihe von Fächern unter **einem** Namen:\n\n```java\nint[] toene = {262, 294, 330, 349, 392};\n```\n\n- `int[]` heißt: ein Array aus ganzen Zahlen.\n- Die Fächer sind von **0** an nummeriert. `toene[0]` ist 262, `toene[4]` ist 392.\n- `toene.length` sagt, wie viele Fächer es gibt, hier 5.\n\nEine For-Schleife mit `i` von 0 bis `toene.length - 1` kommt so an jedes Fach.\n\n::: übung vb-melodie\ntitel: Melodie\nauftrag: Lege ein Array `toene` mit den Tonhöhen 262, 294, 330, 349 und 392 an. Eine For-Schleife spielt sie nacheinander, jeden 300 Millisekunden lang.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] toene = {262, 294, 330, 349, 392}` legt das Array an.\ntipp: Die Schleife läuft von `i = 0` bis `i < toene.length`. Darin steht `mbot.playTone(toene[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> Willst du eine andere Melodie, änderst du nur das Array. Die Schleife bleibt gleich.\n\n## Jetzt in Java: Regenbogen\n\nDie fünf LEDs haben die Nummern 0 bis 4, genau wie die Fächer eines Arrays mit fünf Werten. Ein Array kann auch Texte enthalten: `String[] farben = {"rot", "gelb"};`. LED `i` bekommt dann die Farbe aus Fach `i`: `mbot.led(i).setColor(farben[i])`.\n\n::: übung vb-farben\ntitel: Regenbogen\ncode: java\nauftrag: Schreibe in Java: Lege ein Array `farben` mit den Texten `"rot"`, `"gelb"`, `"grün"`, `"blau"` und `"lila"` an. Eine For-Schleife gibt jeder LED `i` die Farbe aus `farben[i]`.\nbefehle: ledColor 0 "rot", ledColor 1 "gelb", ledColor 2 "grün", ledColor 3 "blau", ledColor 4 "lila"\nbraucht: forSchleife\ntipp: `String[] farben = {"rot", "gelb", "grün", "blau", "lila"};` legt das Array an.\ntipp: `for (int i = 0; i < farben.length; i++) { mbot.led(i).setColor(farben[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Summe der Noten\n\nMit einer Schleife kannst du auch alle Werte eines Arrays zusammenzählen. Dafür brauchst du eine Variable, die mit 0 anfängt und in jedem Durchgang wächst:\n\n```java\nint summe = 0;\nfor (int i = 0; i < noten.length; i++) {\n summe = summe + noten[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Summe der Noten\ncode: java\nauftrag: Lege `int[] noten = {2, 1, 3, 2}` an. Zähle in einer Schleife alle Noten zusammen und gib danach **Summe: 8** und in einer zweiten Zeile **Anzahl: 4** aus. Die Anzahl liefert `noten.length`. Ganz ohne `mbot`!\ntest: - -> Summe: 8 | Anzahl: 4\nbraucht: forSchleife\ntipp: Vor der Schleife `int summe = 0;`, in der Schleife `summe = summe + noten[i];`.\ntipp: Nach der Schleife `System.out.println("Summe: " + summe);` und `System.out.println("Anzahl: " + noten.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? Was ist `toene[1]`, wenn `int[] toene = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> Die Fächer zählen ab 0. Fach 1 ist also das zweite.\n? Wie viele Fächer hat `{262, 294, 330}`, also was ist `toene.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` zählt die Fächer, hier drei. Das letzte Fach hat deshalb die Nummer 2.\n:::\n\n::: checkliste\n- Ich kann ein Array anlegen und mit einer Schleife abspielen. → Eine Melodie als Array\n- Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen\n- Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten\n:::\n',Gv=`---
+`,Ry='---\ntitel: Arrays und Melodien\nbereich: VisuBot\nkurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten.\n---\n\n## Eine Melodie als Array\n\nEine Melodie ist eine Reihe von Tönen. Statt fünf Variablen `ton1`, `ton2`, … nimmst du ein **Array**. Ein Array ist eine Reihe von Fächern unter **einem** Namen:\n\n```java\nint[] toene = {262, 294, 330, 349, 392};\n```\n\n- `int[]` heißt: ein Array aus ganzen Zahlen.\n- Die Fächer sind von **0** an nummeriert. `toene[0]` ist 262, `toene[4]` ist 392.\n- `toene.length` sagt, wie viele Fächer es gibt, hier 5.\n\nEine For-Schleife mit `i` von 0 bis `toene.length - 1` kommt so an jedes Fach.\n\n::: übung vb-melodie\ntitel: Melodie\nauftrag: Lege ein Array `toene` mit den Tonhöhen 262, 294, 330, 349 und 392 an. Eine For-Schleife spielt sie nacheinander, jeden 300 Millisekunden lang.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] toene = {262, 294, 330, 349, 392}` legt das Array an.\ntipp: Die Schleife läuft von `i = 0` bis `i < toene.length`. Darin steht `mbot.playTone(toene[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> Willst du eine andere Melodie, änderst du nur das Array. Die Schleife bleibt gleich.\n\n## Jetzt in Java: Regenbogen\n\nDie fünf LEDs haben die Nummern 0 bis 4, genau wie die Fächer eines Arrays mit fünf Werten. Ein Array kann auch Texte enthalten: `String[] farben = {"rot", "gelb"};`. LED `i` bekommt dann die Farbe aus Fach `i`: `mbot.led(i).setColor(farben[i])`.\n\n::: übung vb-farben\ntitel: Regenbogen\ncode: java\nauftrag: Schreibe in Java: Lege ein Array `farben` mit den Texten `"rot"`, `"gelb"`, `"grün"`, `"blau"` und `"lila"` an. Eine For-Schleife gibt jeder LED `i` die Farbe aus `farben[i]`.\nbefehle: ledColor 0 "rot", ledColor 1 "gelb", ledColor 2 "grün", ledColor 3 "blau", ledColor 4 "lila"\nbraucht: forSchleife\ntipp: `String[] farben = {"rot", "gelb", "grün", "blau", "lila"};` legt das Array an.\ntipp: `for (int i = 0; i < farben.length; i++) { mbot.led(i).setColor(farben[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Summe der Noten\n\nMit einer Schleife kannst du auch alle Werte eines Arrays zusammenzählen. Dafür brauchst du eine Variable, die mit 0 anfängt und in jedem Durchgang wächst:\n\n```java\nint summe = 0;\nfor (int i = 0; i < noten.length; i++) {\n summe = summe + noten[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Summe der Noten\ncode: java\nauftrag: Lege `int[] noten = {2, 1, 3, 2}` an. Zähle in einer Schleife alle Noten zusammen und gib danach **Summe: 8** und in einer zweiten Zeile **Anzahl: 4** aus. Die Anzahl liefert `noten.length`. Ganz ohne `mbot`!\ntest: - -> Summe: 8 | Anzahl: 4\nbraucht: forSchleife\ntipp: Vor der Schleife `int summe = 0;`, in der Schleife `summe = summe + noten[i];`.\ntipp: Nach der Schleife `System.out.println("Summe: " + summe);` und `System.out.println("Anzahl: " + noten.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? Was ist `toene[1]`, wenn `int[] toene = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> Die Fächer zählen ab 0. Fach 1 ist also das zweite.\n? Wie viele Fächer hat `{262, 294, 330}`, also was ist `toene.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` zählt die Fächer, hier drei. Das letzte Fach hat deshalb die Nummer 2.\n:::\n\n::: checkliste\n- Ich kann ein Array anlegen und mit einer Schleife abspielen. → Eine Melodie als Array\n- Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen\n- Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten\n:::\n',Gy=`---
titel: Der Bildschirm
bereich: VisuBot
kurz: Text, Zahlen und Messwerte auf dem CyberPi anzeigen.
@@ -37717,7 +37717,7 @@ lösung: vb-java-countdown-loesung.visustruct
- Ich kann Zahlen und Messwerte anzeigen. → Zahlen und Messwerte
- Ich kann einen Countdown in Java schreiben. → Jetzt in Java: Countdown
:::
-`,Hv=`---
+`,Hy=`---
titel: Zeichenketten
bereich: VisuBot
kurz: Mit Texten rechnen, Buchstaben herausholen und auf dem Bildschirm zeigen.
@@ -37799,7 +37799,7 @@ lösung: vb-ohne-rueckwaerts-loesung.visustruct
- 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
:::
-`,Vv=`---
+`,Vy=`---
titel: Motoren und Geschwindigkeit
bereich: VisuBot
kurz: Gas geben, lenken und einer Linie folgen.
@@ -37889,7 +37889,7 @@ lösung: vb-java-linienfolger-loesung.visustruct
- 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
:::
-`,Qv=`---
+`,Qy=`---
titel: Stoppuhr und Akku
bereich: VisuBot
kurz: Zeit messen und den Akku im Blick behalten.
@@ -37968,7 +37968,7 @@ lösung: vb-java-akku-loesung.visustruct
- Ich kann eine bestimmte Zeit lang fahren. → Zwei Sekunden fahren im Struktogramm
- Ich kann den Akkustand anzeigen. → Jetzt in Java: Akku-Anzeige
:::
-`,qv=`---
+`,qy=`---
titel: Eigene Methoden
bereich: VisuBot
kurz: Eigene Befehle mit Parametern und Rückgabewert schreiben und aufrufen.
@@ -38058,7 +38058,7 @@ unterprogramm: vb-ohne-quadratzahl-unterprogramm-loesung.visustruct
- Ich weiß, wie Methoden in Java aussehen. → Methoden in Java
- Ich kann eine Methode mit Rückgabewert schreiben. → Jetzt ohne Roboter: Methode mit Rückgabe
:::
-`,Uv=`## 🤖 mBot2-Befehle
+`,Uy=`## 🤖 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.
@@ -38210,7 +38210,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.
-`,$v=`---
+`,$y=`---
titel: The mBot2
bereich: VisuBot
kurz: Get to know the robot you are about to program.
@@ -38525,7 +38525,7 @@ If a value does not change although you do something, something is wrong. Then t
- 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
:::
-`,Yv=`---
+`,Yy=`---
titel: The square
bereich: VisuBot
kurz: From a long structure chart to a triple nested loop.
@@ -38649,7 +38649,7 @@ The program stays saved, even when you switch the mBot2 off and on again. Only t
- 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
:::
-`,Xv='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\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- [ ] 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- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I know the data types `int`, `double`, `String` and `boolean`. → 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',Kv=`---
+`,Xy='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\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- [ ] 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- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I know the data types `int`, `double`, `String` and `boolean`. → 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',Ky=`---
titel: Reading sensors
bereich: VisuBot
kurz: The mBot2 measures something, and your program decides.
@@ -40243,7 +40243,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=`---
+`,v9=`---
titel: Die Alarmanlage
nach: 16
stufe: 2
@@ -40262,7 +40262,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
:::
-`,v9=`---
+`,y9=`---
titel: Labyrinth mit Ausgängen
nach: 5
stufe: 3
@@ -41515,7 +41515,7 @@ lösung: vb-wald-loesung.visustruct
111;117;116;112;117;116;58;32;115;117;109;109;101;
-`,yw=`
+`,vw=`
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;
@@ -41537,7 +41537,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;
-`,vw=`
+`,yw=`
105;110;116;32;122;97;104;108;32;61;32;52;
@@ -43068,7 +43068,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;
-`,y5=`
+`,v5=`
105;110;116;32;110;117;109;98;101;114;32;61;32;51;
@@ -43083,7 +43083,7 @@ lösung: vb-wald-loesung.visustruct
111;117;116;112;117;116;58;32;110;117;109;98;101;114;
-`,v5=`
+`,y5=`
105;110;116;32;110;117;109;98;101;114;32;61;32;50;
@@ -44122,7 +44122,7 @@ lösung: vb-wald-loesung.visustruct
111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34;
-`,y6=`
+`,v6=`
105;110;116;32;110;117;109;98;101;114;32;61;32;51;
@@ -44139,7 +44139,7 @@ lösung: vb-wald-loesung.visustruct
111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34;
-`,v6=`
+`,y6=`
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;
@@ -45316,7 +45316,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;
-`,yz=`
+`,vz=`
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;
@@ -45345,7 +45345,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;
-`,vz=`
+`,yz=`
105;110;116;32;115;117;109;32;61;32;48;
@@ -46804,7 +46804,7 @@ lösung: vb-wald-loesung.visustruct
-`,y7=`
+`,v7=`
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;
@@ -46862,7 +46862,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;
-`,v7=`
+`,y7=`
105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125;
@@ -48019,7 +48019,7 @@ lösung: vb-wald-loesung.visustruct
111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115;
-`,yI=`
+`,vI=`
105;110;116;32;108;101;110;103;116;104;32;61;32;54;48;
@@ -48034,7 +48034,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;
-`,vI=`
+`,yI=`
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;
@@ -49245,7 +49245,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;
-`,y8=`
+`,v8=`
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;
@@ -49257,7 +49257,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;
-`,v8=`
+`,y8=`
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;
@@ -50408,7 +50408,7 @@ lösung: vb-wald-loesung.visustruct
-`,yk=`
+`,vk=`
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;
@@ -50425,7 +50425,7 @@ lösung: vb-wald-loesung.visustruct
-`,vk=`
+`,yk=`
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;
@@ -51633,7 +51633,7 @@ lösung: vb-wald-loesung.visustruct
-`,yS=`
+`,vS=`
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;
@@ -51649,7 +51649,7 @@ lösung: vb-wald-loesung.visustruct
-`,vS=`
+`,yS=`
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;
@@ -53182,7 +53182,7 @@ lösung: vb-wald-loesung.visustruct
-`,y_=`
+`,v_=`
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;
@@ -53242,7 +53242,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;
-`,v_=`
+`,y_=`
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;
@@ -54248,7 +54248,7 @@ lösung: vb-wald-loesung.visustruct
-`,yT=`
+`,vT=`
105;110;112;117;116;58;32;105;110;116;32;97;110;111;32;34;65;110;111;63;34;
@@ -54267,7 +54267,7 @@ lösung: vb-wald-loesung.visustruct
-`,vT=`
+`,yT=`
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;
@@ -55557,7 +55557,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;
-`,yO=`
+`,vO=`
105;110;116;32;115;111;109;97;32;61;32;48;
@@ -55587,7 +55587,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;
-`,vO=`
+`,yO=`
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;
@@ -56751,7 +56751,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;
-`,yA=`
+`,vA=`
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;
@@ -56801,7 +56801,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;
-`,vA=`
+`,yA=`
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;
@@ -58368,7 +58368,7 @@ lösung: vb-wald-loesung.visustruct
-`,yP=`
+`,vP=`
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;
@@ -58379,7 +58379,7 @@ lösung: vb-wald-loesung.visustruct
-`,vP=`
+`,yP=`
109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;
@@ -59624,7 +59624,7 @@ lösung: vb-wald-loesung.visustruct
-`,yj=`
+`,vj=`
105;110;116;32;108;105;110;107;115;32;61;32;57;57;
@@ -59656,7 +59656,7 @@ lösung: vb-wald-loesung.visustruct
-`,vj=`
+`,yj=`
105;110;116;32;115;101;105;116;101;32;61;32;51;48;
@@ -60256,15 +60256,15 @@ raster: 3
.....
..^..
.....
-`,mC=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,cC=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,dC=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,hC=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,gC=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,pC=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,fC=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,xC=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,bC="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==",yC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",vC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",wC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",zC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",IC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",kC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",SC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",_C="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==",TC="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=",OC=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,AC=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,PC=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,jC="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==",CC=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,BC="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==",DC=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,ZC=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,MC=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,LC=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,WC="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==",EC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",NC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",FC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",JC="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",RC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",GC="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=",HC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",VC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",QC="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",qC="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",UC=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,$C=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,YC=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,XC=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,KC="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==",eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",iB="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==",aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",lB="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=",uB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,mB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,cB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,dB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,hB="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=",gB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,pB="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",fB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,xB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,bB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,yB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,vB="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",wB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,zB="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",IB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function kB(i){const e=[];for(const t of i.replace(/\r\n/g,`
+`,mC=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,cC=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,dC=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,hC=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,gC=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,pC=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,fC=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,xC=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,bC="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==",vC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",yC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",wC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",zC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",IC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",kC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",SC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",_C="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==",TC="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=",OC=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,AC=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,PC=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,jC="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==",CC=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,BC="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==",DC=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,ZC=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,MC=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,LC=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,WC="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==",EC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",NC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",FC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",JC="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",RC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",GC="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=",HC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",VC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",QC="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",qC="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",UC=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,$C=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,YC=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,XC=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,KC="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==",eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",iB="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==",aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",lB="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=",uB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,mB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,cB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,dB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,hB="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=",gB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,pB="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",fB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,xB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,bB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,vB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,yB="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",wB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,zB="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",IB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function kB(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 SB=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ju(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 To extends Error{}function _B(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function TB(i,e,t){const n=h=>{throw new To(`${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[,y,w]=f;y==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?y==="frage"?c.question=w:y==="fehler"?c.wrongLine=Number(w):y==="besser"?c.fix=w:y==="klicks"?c.clicks=w.split(",").map(S=>S.trim()).filter(Boolean):y==="richtig"?c.rightText=w:n(`„${y}:“ gehört vor die erste Runde.`):y==="titel"?a=w:y==="intro"?s=w:y==="antworten"?o=w.split("|").map(S=>S.trim()):y==="frage"?r=w:y==="zeit"?l=Number(w):y==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${y}:“ 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",`
+`:"")+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(S=>S.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(S=>S.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=>Bh(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=Dh(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);OB(f,h.clicks)}catch(f){if(f instanceof To)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 Bh(i,e="",t=n=>{throw new To(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 Za='"((?:[^"\\\\]|\\\\.)*)"';function Dh(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:Oo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Oo(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 Oo(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 Oo(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 Lh(i,e,n.name)}function Lh(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)??[])Wh(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function OB(i,e){const t=Zh(i);return e.map(n=>Mh(i,t,n))}function Wh(i,e,t,n){if(typeof i!="string"){for(const s of AB(i.condition,e,n)?i.then:i.otherwise)Wh(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(Qn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Qn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[Bu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=Bu(a[1],e),r=Number(Qn(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 AB(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(Qn(n[2],e,t))===String(Qn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Qn(n[1],e,t)),s=Number(Qn(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 Bu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Qn(i,e,t){const n=i.match(new RegExp(`${Za}|\\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 PB extends Error{}const cs="___";function jB(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=T=>{throw new PB(`${e}: ${T}`)},n=(T,j)=>{const C=/^(\d+)\s+(\d+)$/.exec(T.trim());return!C||Number(C[1])<1||Number(C[2])<1?t(`${j}: „${T}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(C[1])-1,col:Number(C[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const T of i){const j=T.trim();if(g&&(/^( {4}|\t)/.test(T)||j==="")){const P=T.replace(/^( {4}|\t)/,"");if(g==="station"){const O=c[c.length-1];O.code+=(O.code?`
`:"")+P}else u+=(u?`
-`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,O]=C;if(P==="station")c.push({name:O,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=O,f="crossword";else if(P==="tor")l=O,f="gate",g="gate";else if(P==="titel")a=O;else if(P==="intro")s=O;else if(P==="alphabet")r=O;else if(P==="ende")m=O;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=O.split(",").map(L=>n(L,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const L=c[c.length-1];P==="frage"?L.question=O:P==="tipp"?L.hint=O:P==="zahl"?L.answer=/^-?\d+$/.test(O)?Number(O):t(`Station „${L.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(L,n(O,`Station „${L.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ 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"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}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(cs)||t(`Der Code bei „tor:“ braucht ${cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),y=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),O=T.col+(T.across?C:0);y[P][O]&&y[P][O]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${O+1} nicht (dort steht ${y[P][O]}).`),y[P][O]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),S=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=y[T])==null?void 0:C[j])??""},k=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:S,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const BB=/\[\[(.+?)\]\]/g;function DB(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=>ZB(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 ZB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(BB)){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 LB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Eh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,`
+`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,O]=C;if(P==="station")c.push({name:O,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=O,f="crossword";else if(P==="tor")l=O,f="gate",g="gate";else if(P==="titel")a=O;else if(P==="intro")s=O;else if(P==="alphabet")r=O;else if(P==="ende")m=O;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=O.split(",").map(W=>n(W,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const W=c[c.length-1];P==="frage"?W.question=O:P==="tipp"?W.hint=O:P==="zahl"?W.answer=/^-?\d+$/.test(O)?Number(O):t(`Station „${W.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(W,n(O,`Station „${W.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ 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"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}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(cs)||t(`Der Code bei „tor:“ braucht ${cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),O=T.col+(T.across?C:0);v[P][O]&&v[P][O]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${O+1} nicht (dort steht ${v[P][O]}).`),v[P][O]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),S=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=v[T])==null?void 0:C[j])??""},k=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:S,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const BB=/\[\[(.+?)\]\]/g;function DB(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=>ZB(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 ZB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(BB)){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 LB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Eh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,`
`));if(!t)throw new te(`${e}: Kopfzeilen (--- … ---) fehlen.`);const n=new Map;for(const a of t[1].split(`
`)){const s=/^([a-zäöüß]+):\s*(.*)$/i.exec(a.trim());s&&n.set(s[1].toLowerCase(),s[2].trim())}return{meta:n,body:i.replace(/\r\n/g,`
`).slice(t[0].length)}}function WB(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new te(`${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 St))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 St[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Nh({inputs:[],expected:[],sensors:t},e[2])}function Nh(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=es(nh(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):\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 te(`${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:es(nh(l))})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Nh({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new te(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new te(`${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:a3(l)})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(EB(l))}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new te(`${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 te(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break}}else a&&s.trim()!==""?a==="task"?n.task+=`
@@ -60277,7 +60277,7 @@ raster: 3
`).trim(),tip:!0});break;case"caesar":{const d=c?Number(c):3;if(!Number.isInteger(d)||d<0||d>25)throw new te(`${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 te(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=Du(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:Du(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new te(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new te(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new te(`${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 te(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function JB(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((n,a)=>[n.title.toLowerCase(),a]));for(const n of i.flatMap(a=>a.blocks))if(n.kind==="checklist"){for(const a of n.items)if(a.ref!==void 0&&(a.step=t.get(a.ref.toLowerCase()),a.step===void 0))throw new te(`${e}: Checkliste verweist auf unbekannten Schritt „${a.ref}“.`)}}function GB(i,e){var c;const{meta:t,body:n}=Eh(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new te(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:Fh(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 te(`${e}: Keine Schritte (## Überschrift) gefunden.`);RB(r,e);const m=t.get("titel");if(!m)throw new te(`${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}=Eh(i,e),a=t.get("titel");if(!a)throw new te(`${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:Fh(n,e)}}function Du(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!o3(n))throw new te(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${ih.join(", ")}.`);return t}const VB=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Yx,"../../lessons/de/02-der-editor.md":Xx,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Kx,"../../lessons/de/04-variablen-und-datentypen.md":eb,"../../lessons/de/05-sequenz.md":tb,"../../lessons/de/06-eingabe-und-ausgabe.md":nb,"../../lessons/de/07-simulation-und-schreibtischtest.md":ib,"../../lessons/de/08-verzweigung.md":ab,"../../lessons/de/09-bedingungen-verknuepfen.md":sb,"../../lessons/de/10-fallauswahl.md":rb,"../../lessons/de/11-while-schleife.md":ob,"../../lessons/de/12-do-while-schleife.md":lb,"../../lessons/de/13-for-schleife.md":ub,"../../lessons/de/14-verschachteln.md":mb,"../../lessons/de/15-arrays.md":cb,"../../lessons/de/16-zweidimensionale-arrays.md":db,"../../lessons/de/17-zeichenketten.md":hb,"../../lessons/de/18-aufruf-und-aussprung.md":gb,"../../lessons/de/19-suchen-und-sortieren.md":pb,"../../lessons/de/20-java.md":fb,"../../lessons/de/21-python-und-javascript.md":xb,"../../lessons/de/22-try-und-catch.md":bb,"../../lessons/de/23-text-einlesen-und-speichern.md":yb,"../../lessons/de/24-zeile-fuer-zeile.md":vb,"../../lessons/de/25-tabellen-als-csv.md":wb,"../../lessons/de/26-json.md":zb,"../../lessons/de/27-formate-im-vergleich.md":Ib,"../../lessons/de/28-erstes-fenster.md":kb,"../../lessons/de/29-knopf-im-fenster.md":Sb,"../../lessons/de/30-der-knopf-reagiert.md":_b,"../../lessons/de/31-zahl-verdoppeln.md":Tb,"../../lessons/de/32-klickzaehler.md":Ob,"../../lessons/de/33-ampel.md":Ab,"../../lessons/de/34-notenrechner.md":Pb,"../../lessons/de/35-taschenrechner.md":jb,"../../lessons/de/36-zahlenraten.md":Cb,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":Bb,"../../lessons/de/38-innere-klassen.md":Db,"../../lessons/de/39-zwei-reiter.md":Zb,"../../lessons/de/40-model-view-controller.md":Mb,"../../lessons/de/begriffe.md":Lb,"../../lessons/de/nachschlagen.md":Wb,"../../lessons/en/01-was-ist-ein-struktogramm.md":Eb,"../../lessons/en/02-der-editor.md":Nb,"../../lessons/en/03-speichern-oeffnen-exportieren.md":Fb,"../../lessons/en/04-variablen-und-datentypen.md":Jb,"../../lessons/en/05-sequenz.md":Rb,"../../lessons/en/06-eingabe-und-ausgabe.md":Gb,"../../lessons/en/07-simulation-und-schreibtischtest.md":Hb,"../../lessons/en/08-verzweigung.md":Vb,"../../lessons/en/09-bedingungen-verknuepfen.md":Qb,"../../lessons/en/10-fallauswahl.md":qb,"../../lessons/en/11-while-schleife.md":Ub,"../../lessons/en/12-do-while-schleife.md":$b,"../../lessons/en/13-for-schleife.md":Yb,"../../lessons/en/14-verschachteln.md":Xb,"../../lessons/en/15-arrays.md":Kb,"../../lessons/en/16-zweidimensionale-arrays.md":e4,"../../lessons/en/17-zeichenketten.md":t4,"../../lessons/en/18-aufruf-und-aussprung.md":n4,"../../lessons/en/19-suchen-und-sortieren.md":i4,"../../lessons/en/20-java.md":a4,"../../lessons/en/21-python-und-javascript.md":s4,"../../lessons/en/22-try-und-catch.md":r4,"../../lessons/en/23-text-einlesen-und-speichern.md":o4,"../../lessons/en/24-zeile-fuer-zeile.md":l4,"../../lessons/en/25-tabellen-als-csv.md":u4,"../../lessons/en/26-json.md":m4,"../../lessons/en/27-formate-im-vergleich.md":c4,"../../lessons/en/28-erstes-fenster.md":d4,"../../lessons/en/29-knopf-im-fenster.md":h4,"../../lessons/en/30-der-knopf-reagiert.md":g4,"../../lessons/en/31-zahl-verdoppeln.md":p4,"../../lessons/en/32-klickzaehler.md":f4,"../../lessons/en/33-ampel.md":x4,"../../lessons/en/34-notenrechner.md":b4,"../../lessons/en/35-taschenrechner.md":y4,"../../lessons/en/36-zahlenraten.md":v4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":w4,"../../lessons/en/38-innere-klassen.md":z4,"../../lessons/en/39-zwei-reiter.md":I4,"../../lessons/en/40-model-view-controller.md":k4,"../../lessons/en/begriffe.md":S4,"../../lessons/en/nachschlagen.md":_4,"../../lessons/pt/01-was-ist-ein-struktogramm.md":T4,"../../lessons/pt/02-der-editor.md":O4,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":A4,"../../lessons/pt/04-variablen-und-datentypen.md":P4,"../../lessons/pt/05-sequenz.md":j4,"../../lessons/pt/06-eingabe-und-ausgabe.md":C4,"../../lessons/pt/07-simulation-und-schreibtischtest.md":B4,"../../lessons/pt/08-verzweigung.md":D4,"../../lessons/pt/09-bedingungen-verknuepfen.md":Z4,"../../lessons/pt/10-fallauswahl.md":M4,"../../lessons/pt/11-while-schleife.md":L4,"../../lessons/pt/12-do-while-schleife.md":W4,"../../lessons/pt/13-for-schleife.md":E4,"../../lessons/pt/14-verschachteln.md":N4,"../../lessons/pt/15-arrays.md":F4,"../../lessons/pt/16-zweidimensionale-arrays.md":J4,"../../lessons/pt/17-zeichenketten.md":R4,"../../lessons/pt/18-aufruf-und-aussprung.md":G4,"../../lessons/pt/19-suchen-und-sortieren.md":H4,"../../lessons/pt/20-java.md":V4,"../../lessons/pt/21-python-und-javascript.md":Q4,"../../lessons/pt/22-try-und-catch.md":q4,"../../lessons/pt/23-text-einlesen-und-speichern.md":U4,"../../lessons/pt/24-zeile-fuer-zeile.md":$4,"../../lessons/pt/25-tabellen-als-csv.md":Y4,"../../lessons/pt/26-json.md":X4,"../../lessons/pt/27-formate-im-vergleich.md":K4,"../../lessons/pt/28-erstes-fenster.md":ey,"../../lessons/pt/29-knopf-im-fenster.md":ty,"../../lessons/pt/30-der-knopf-reagiert.md":ny,"../../lessons/pt/31-zahl-verdoppeln.md":iy,"../../lessons/pt/32-klickzaehler.md":ay,"../../lessons/pt/33-ampel.md":sy,"../../lessons/pt/34-notenrechner.md":ry,"../../lessons/pt/35-taschenrechner.md":oy,"../../lessons/pt/36-zahlenraten.md":ly,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":uy,"../../lessons/pt/38-innere-klassen.md":my,"../../lessons/pt/39-zwei-reiter.md":cy,"../../lessons/pt/40-model-view-controller.md":dy,"../../lessons/pt/begriffe.md":hy,"../../lessons/pt/nachschlagen.md":gy}),QB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":py,"../../lessons/de/aufgaben/ballwurf.md":fy,"../../lessons/de/aufgaben/bestenliste.md":xy,"../../lessons/de/aufgaben/binaerzahl.md":by,"../../lessons/de/aufgaben/caesar.md":yy,"../../lessons/de/aufgaben/collatz.md":vy,"../../lessons/de/aufgaben/einheitenrechner.md":wy,"../../lessons/de/aufgaben/fibonacci.md":zy,"../../lessons/de/aufgaben/gerade-ungerade.md":Iy,"../../lessons/de/aufgaben/mehrwertsteuer.md":ky,"../../lessons/de/aufgaben/notendurchschnitt.md":Sy,"../../lessons/de/aufgaben/pin-pruefen.md":_y,"../../lessons/de/aufgaben/schiffe-versenken.md":Ty,"../../lessons/de/aufgaben/speisekarte.md":Oy,"../../lessons/de/aufgaben/summe-bilden.md":Ay,"../../lessons/de/aufgaben/tafeldienst.md":Py,"../../lessons/de/aufgaben/taschenrechner.md":jy,"../../lessons/de/aufgaben/verleih-menue.md":Cy,"../../lessons/de/aufgaben/vokabeltrainer.md":By,"../../lessons/de/aufgaben/volljaehrig.md":Dy,"../../lessons/de/aufgaben/wuerfel-mvc.md":Zy,"../../lessons/de/aufgaben/zahl-verdoppeln.md":My,"../../lessons/en/aufgaben/alter-unterprogramm.md":Ly,"../../lessons/en/aufgaben/ballwurf.md":Wy,"../../lessons/en/aufgaben/bestenliste.md":Ey,"../../lessons/en/aufgaben/binaerzahl.md":Ny,"../../lessons/en/aufgaben/caesar.md":Fy,"../../lessons/en/aufgaben/collatz.md":Jy,"../../lessons/en/aufgaben/einheitenrechner.md":Ry,"../../lessons/en/aufgaben/fibonacci.md":Gy,"../../lessons/en/aufgaben/gerade-ungerade.md":Hy,"../../lessons/en/aufgaben/mehrwertsteuer.md":Vy,"../../lessons/en/aufgaben/notendurchschnitt.md":Qy,"../../lessons/en/aufgaben/pin-pruefen.md":qy,"../../lessons/en/aufgaben/schiffe-versenken.md":Uy,"../../lessons/en/aufgaben/speisekarte.md":$y,"../../lessons/en/aufgaben/summe-bilden.md":Yy,"../../lessons/en/aufgaben/tafeldienst.md":Xy,"../../lessons/en/aufgaben/taschenrechner.md":Ky,"../../lessons/en/aufgaben/verleih-menue.md":ev,"../../lessons/en/aufgaben/vokabeltrainer.md":tv,"../../lessons/en/aufgaben/volljaehrig.md":nv,"../../lessons/en/aufgaben/wuerfel-mvc.md":iv,"../../lessons/en/aufgaben/zahl-verdoppeln.md":av,"../../lessons/pt/aufgaben/alter-unterprogramm.md":sv,"../../lessons/pt/aufgaben/ballwurf.md":rv,"../../lessons/pt/aufgaben/bestenliste.md":ov,"../../lessons/pt/aufgaben/binaerzahl.md":lv,"../../lessons/pt/aufgaben/caesar.md":uv,"../../lessons/pt/aufgaben/collatz.md":mv,"../../lessons/pt/aufgaben/einheitenrechner.md":cv,"../../lessons/pt/aufgaben/fibonacci.md":dv,"../../lessons/pt/aufgaben/gerade-ungerade.md":hv,"../../lessons/pt/aufgaben/mehrwertsteuer.md":gv,"../../lessons/pt/aufgaben/notendurchschnitt.md":pv,"../../lessons/pt/aufgaben/pin-pruefen.md":fv,"../../lessons/pt/aufgaben/schiffe-versenken.md":xv,"../../lessons/pt/aufgaben/speisekarte.md":bv,"../../lessons/pt/aufgaben/summe-bilden.md":yv,"../../lessons/pt/aufgaben/tafeldienst.md":vv,"../../lessons/pt/aufgaben/taschenrechner.md":wv,"../../lessons/pt/aufgaben/verleih-menue.md":zv,"../../lessons/pt/aufgaben/vokabeltrainer.md":Iv,"../../lessons/pt/aufgaben/volljaehrig.md":kv,"../../lessons/pt/aufgaben/wuerfel-mvc.md":Sv,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":_v}),Zu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":Tv,"../../lessons/de/visubot/02-das-quadrat.md":Ov,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Av,"../../lessons/de/visubot/04-sensoren.md":Pv,"../../lessons/de/visubot/05-bis-zur-wand.md":jv,"../../lessons/de/visubot/06-abstand.md":Cv,"../../lessons/de/visubot/07-linie.md":Bv,"../../lessons/de/visubot/08-farben.md":Dv,"../../lessons/de/visubot/09-fallauswahl.md":Zv,"../../lessons/de/visubot/10-tasten-joystick.md":Mv,"../../lessons/de/visubot/11-licht.md":Lv,"../../lessons/de/visubot/12-lautstaerke.md":Wv,"../../lessons/de/visubot/13-neigung.md":Ev,"../../lessons/de/visubot/14-leds.md":Nv,"../../lessons/de/visubot/15-einzelne-leds.md":Fv,"../../lessons/de/visubot/16-lautsprecher.md":Jv,"../../lessons/de/visubot/17-arrays-melodie.md":Rv,"../../lessons/de/visubot/18-bildschirm.md":Gv,"../../lessons/de/visubot/19-zeichenketten.md":Hv,"../../lessons/de/visubot/20-motoren.md":Vv,"../../lessons/de/visubot/21-stoppuhr-akku.md":Qv,"../../lessons/de/visubot/22-eigene-methoden.md":qv,"../../lessons/de/visubot/nachschlagen.md":Uv,"../../lessons/en/visubot/01-der-mbot2.md":$v,"../../lessons/en/visubot/02-das-quadrat.md":Yv,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Xv,"../../lessons/en/visubot/04-sensoren.md":Kv,"../../lessons/en/visubot/05-bis-zur-wand.md":e9,"../../lessons/en/visubot/06-abstand.md":t9,"../../lessons/en/visubot/07-linie.md":n9,"../../lessons/en/visubot/08-farben.md":i9,"../../lessons/en/visubot/09-fallauswahl.md":a9,"../../lessons/en/visubot/10-tasten-joystick.md":s9,"../../lessons/en/visubot/11-licht.md":r9,"../../lessons/en/visubot/12-lautstaerke.md":o9,"../../lessons/en/visubot/13-neigung.md":l9,"../../lessons/en/visubot/14-leds.md":u9,"../../lessons/en/visubot/15-einzelne-leds.md":m9,"../../lessons/en/visubot/16-lautsprecher.md":c9,"../../lessons/en/visubot/17-arrays-melodie.md":d9,"../../lessons/en/visubot/18-bildschirm.md":h9,"../../lessons/en/visubot/19-zeichenketten.md":g9,"../../lessons/en/visubot/20-motoren.md":p9,"../../lessons/en/visubot/21-stoppuhr-akku.md":f9,"../../lessons/en/visubot/22-eigene-methoden.md":x9,"../../lessons/en/visubot/nachschlagen.md":b9}),qB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":y9,"../../lessons/de/visubot/aufgaben/ausgang.md":v9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":w9,"../../lessons/de/visubot/aufgaben/dreieck.md":z9,"../../lessons/de/visubot/aufgaben/einparken.md":I9,"../../lessons/de/visubot/aufgaben/hindernis.md":k9,"../../lessons/de/visubot/aufgaben/knight-rider.md":S9,"../../lessons/de/visubot/aufgaben/labyrinth.md":_9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":T9,"../../lessons/de/visubot/aufgaben/morsen.md":O9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":A9,"../../lessons/de/visubot/aufgaben/slalom.md":P9,"../../lessons/de/visubot/aufgaben/spirale.md":j9,"../../lessons/de/visubot/aufgaben/treppe.md":C9,"../../lessons/de/visubot/aufgaben/tunnel.md":B9,"../../lessons/de/visubot/aufgaben/wald.md":D9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":Z9,"../../lessons/en/visubot/aufgaben/ausgang.md":M9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":L9,"../../lessons/en/visubot/aufgaben/dreieck.md":W9,"../../lessons/en/visubot/aufgaben/einparken.md":E9,"../../lessons/en/visubot/aufgaben/hindernis.md":N9,"../../lessons/en/visubot/aufgaben/knight-rider.md":F9,"../../lessons/en/visubot/aufgaben/labyrinth.md":J9,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":R9,"../../lessons/en/visubot/aufgaben/morsen.md":G9,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":H9,"../../lessons/en/visubot/aufgaben/slalom.md":V9,"../../lessons/en/visubot/aufgaben/spirale.md":Q9,"../../lessons/en/visubot/aufgaben/treppe.md":q9,"../../lessons/en/visubot/aufgaben/tunnel.md":U9,"../../lessons/en/visubot/aufgaben/wald.md":$9}),UB=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":Y9,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":X9,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":K9,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":ew,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":tw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":nw,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":iw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":aw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":sw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":rw,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":ow,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":lw,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":uw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":mw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":cw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":dw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":hw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":gw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":pw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":fw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":xw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":bw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":yw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":vw,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":ww,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":zw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":Iw,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":kw,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":Sw,"../../lessons/diagramme/dt-buffered.visustruct":_w,"../../lessons/diagramme/dt-csv.visustruct":Tw,"../../lessons/diagramme/dt-json.visustruct":Ow,"../../lessons/diagramme/dt-lesen.visustruct":Aw,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":Pw,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":jw,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":Cw,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":Bw,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":Dw,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":Zw,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":Mw,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":Lw,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":Ww,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":Ew,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":Nw,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":Fw,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":Jw,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":Rw,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":Gw,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":Hw,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":Vw,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":Qw,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":qw,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":Uw,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":$w,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":Yw,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":Xw,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":Kw,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":e5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":t5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":n5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":i5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":a5,"../../lessons/diagramme/en/dt-buffered.visustruct":s5,"../../lessons/diagramme/en/dt-csv.visustruct":r5,"../../lessons/diagramme/en/dt-json.visustruct":o5,"../../lessons/diagramme/en/dt-lesen.visustruct":l5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":u5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":m5,"../../lessons/diagramme/en/kino-frei-start.visustruct":c5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":d5,"../../lessons/diagramme/en/kino-karte-start.visustruct":h5,"../../lessons/diagramme/en/kino-saalplan.visustruct":g5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":p5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":f5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":x5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":b5,"../../lessons/diagramme/en/l04-rechnen.visustruct":y5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":v5,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":w5,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":z5,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":I5,"../../lessons/diagramme/en/l04-tauschen.visustruct":k5,"../../lessons/diagramme/en/l05-datentypen.visustruct":S5,"../../lessons/diagramme/en/l05-division.visustruct":_5,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":T5,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":O5,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":A5,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":P5,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":j5,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":C5,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":B5,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":D5,"../../lessons/diagramme/en/l06-eva.visustruct":Z5,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":M5,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":L5,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":W5,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":E5,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":N5,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":F5,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":J5,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":R5,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":G5,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":H5,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":V5,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":Q5,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":q5,"../../lessons/diagramme/en/l07-rabatt.visustruct":U5,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":$5,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Y5,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":X5,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":K5,"../../lessons/diagramme/en/l08-jugendticket.visustruct":e6,"../../lessons/diagramme/en/l08-note.visustruct":t6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":n6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":i6,"../../lessons/diagramme/en/l09-ampel.visustruct":a6,"../../lessons/diagramme/en/l09-automat.visustruct":s6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":r6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":o6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":l6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":u6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":m6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":c6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":d6,"../../lessons/diagramme/en/l1-sequenz.visustruct":h6,"../../lessons/diagramme/en/l1-tee.visustruct":g6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":p6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":f6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":x6,"../../lessons/diagramme/en/l10-countdown.visustruct":b6,"../../lessons/diagramme/en/l10-endlos.visustruct":y6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":v6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":w6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":z6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":I6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":k6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":S6,"../../lessons/diagramme/en/l11-einmal.visustruct":_6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":T6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":O6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":A6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":P6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":j6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":C6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":B6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":D6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":Z6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":M6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":L6,"../../lessons/diagramme/en/l12-summe.visustruct":W6,"../../lessons/diagramme/en/l13-dreieck.visustruct":E6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":N6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":F6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":J6,"../../lessons/diagramme/en/l13-java-fehler-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-treppe-loesung.visustruct":$6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":Y6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":X6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":ez,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":tz,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":nz,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":iz,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":az,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":sz,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":rz,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":oz,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":lz,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":uz,"../../lessons/diagramme/en/l15-quadrat.visustruct":mz,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":cz,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":dz,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":hz,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":gz,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":pz,"../../lessons/diagramme/en/l16-countdown-start.visustruct":fz,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":xz,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":bz,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":yz,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":vz,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":wz,"../../lessons/diagramme/en/l16-summe-start.visustruct":zz,"../../lessons/diagramme/en/l17-beispiel.visustruct":Iz,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":kz,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":Sz,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":_z,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":Tz,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":Oz,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":Az,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":Pz,"../../lessons/diagramme/en/l18-beispiel.visustruct":jz,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":Cz,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Bz,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Dz,"../../lessons/diagramme/en/l18-js-loesung.visustruct":Zz,"../../lessons/diagramme/en/l18-python-loesung.visustruct":Mz,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Lz,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Wz,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Ez,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Nz,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Fz,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Jz,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Rz,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Gz,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Hz,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Vz,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":Qz,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":qz,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":Uz,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":$z,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Yz,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Xz,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":Kz,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":e7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":t7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":n7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":i7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":a7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":s7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":r7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":o7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":l7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":u7,"../../lessons/diagramme/en/sim-kino-start.visustruct":m7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":c7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":d7,"../../lessons/diagramme/en/sim-tausch.visustruct":h7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":g7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":p7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":f7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":x7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":b7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":y7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":v7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":w7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":z7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":I7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":k7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":S7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":_7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":eI,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":tI,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":nI,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":iI,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":aI,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":sI,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":rI,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":oI,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":lI,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":uI,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":mI,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":cI,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":dI,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":hI,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":gI,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":pI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":fI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":xI,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":bI,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":yI,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":vI,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":wI,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":zI,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":II,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":kI,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":SI,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":_I,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":TI,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":OI,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":AI,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":PI,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":jI,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":CI,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":BI,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":DI,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":ZI,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":MI,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":LI,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":WI,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":EI,"../../lessons/diagramme/en/zk-mehr.visustruct":NI,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":FI,"../../lessons/diagramme/en/zk-split.visustruct":JI,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":RI,"../../lessons/diagramme/en/zk-zaehlen.visustruct":GI,"../../lessons/diagramme/en/zk-zeichen.visustruct":HI,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":VI,"../../lessons/diagramme/kino-frei-loesung.visustruct":QI,"../../lessons/diagramme/kino-frei-start.visustruct":qI,"../../lessons/diagramme/kino-karte-loesung.visustruct":UI,"../../lessons/diagramme/kino-karte-start.visustruct":$I,"../../lessons/diagramme/kino-saalplan.visustruct":YI,"../../lessons/diagramme/kino-verkaufen.visustruct":XI,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":KI,"../../lessons/diagramme/l04-java-fehler-start.visustruct":e8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":t8,"../../lessons/diagramme/l04-rechnen.visustruct":n8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":i8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":a8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":s8,"../../lessons/diagramme/l04-tauschen-start.visustruct":r8,"../../lessons/diagramme/l04-tauschen.visustruct":o8,"../../lessons/diagramme/l05-datentypen.visustruct":l8,"../../lessons/diagramme/l05-division.visustruct":u8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":m8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":c8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":d8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":h8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":g8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":p8,"../../lessons/diagramme/l05-sekunden-start.visustruct":f8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":x8,"../../lessons/diagramme/l06-eva.visustruct":b8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":y8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":v8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":w8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":z8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":I8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":k8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":S8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":_8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":T8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":O8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":A8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":P8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":j8,"../../lessons/diagramme/l07-rabatt.visustruct":C8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":B8,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":D8,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":Z8,"../../lessons/diagramme/l08-java-fehler-start.visustruct":M8,"../../lessons/diagramme/l08-jugendticket.visustruct":L8,"../../lessons/diagramme/l08-note.visustruct":W8,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":E8,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":N8,"../../lessons/diagramme/l09-ampel.visustruct":F8,"../../lessons/diagramme/l09-automat.visustruct":J8,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":R8,"../../lessons/diagramme/l09-java-fehler-start.visustruct":G8,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":H8,"../../lessons/diagramme/l09-note-loesung.visustruct":V8,"../../lessons/diagramme/l09-rechner-loesung.visustruct":Q8,"../../lessons/diagramme/l09-verschachtelt.visustruct":q8,"../../lessons/diagramme/l1-grundbausteine.visustruct":U8,"../../lessons/diagramme/l1-sequenz.visustruct":$8,"../../lessons/diagramme/l1-tee.visustruct":Y8,"../../lessons/diagramme/l1-verzweigung.visustruct":X8,"../../lessons/diagramme/l1-wiederholung.visustruct":K8,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":ek,"../../lessons/diagramme/l10-countdown.visustruct":tk,"../../lessons/diagramme/l10-endlos.visustruct":nk,"../../lessons/diagramme/l10-fakultaet.visustruct":ik,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":ak,"../../lessons/diagramme/l10-java-fehler-start.visustruct":sk,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":rk,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":ok,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":lk,"../../lessons/diagramme/l11-einmal.visustruct":uk,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":mk,"../../lessons/diagramme/l11-java-fehler-start.visustruct":ck,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":dk,"../../lessons/diagramme/l11-note-loesung.visustruct":hk,"../../lessons/diagramme/l11-summe-loesung.visustruct":gk,"../../lessons/diagramme/l12-countdown-loesung.visustruct":pk,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":fk,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":xk,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":bk,"../../lessons/diagramme/l12-java-fehler-start.visustruct":yk,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":vk,"../../lessons/diagramme/l12-summe.visustruct":wk,"../../lessons/diagramme/l13-dreieck.visustruct":zk,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":Ik,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":kk,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":Sk,"../../lessons/diagramme/l13-java-fehler-start.visustruct":_k,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":Tk,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":Ok,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":Ak,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":Pk,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":jk,"../../lessons/diagramme/l14-java-fehler-start.visustruct":Ck,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":Bk,"../../lessons/diagramme/l14-namen-eingeben.visustruct":Dk,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":Zk,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":Mk,"../../lessons/diagramme/l14-summe-maximum.visustruct":Lk,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":Wk,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":Ek,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":Nk,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":Fk,"../../lessons/diagramme/l15-hauptprogramm.visustruct":Jk,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":Rk,"../../lessons/diagramme/l15-java-fehler-start.visustruct":Gk,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":Hk,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":Vk,"../../lessons/diagramme/l15-quadrat.visustruct":Qk,"../../lessons/diagramme/l15-titel-loesung.visustruct":qk,"../../lessons/diagramme/l15-unterprogramm.visustruct":Uk,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":$k,"../../lessons/diagramme/l15-zeige-summe.visustruct":Yk,"../../lessons/diagramme/l16-countdown-loesung.visustruct":Xk,"../../lessons/diagramme/l16-countdown-start.visustruct":Kk,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":eS,"../../lessons/diagramme/l16-java-fehler-start.visustruct":tS,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":nS,"../../lessons/diagramme/l16-schreibtisch.visustruct":iS,"../../lessons/diagramme/l16-summe-loesung.visustruct":aS,"../../lessons/diagramme/l16-summe-start.visustruct":sS,"../../lessons/diagramme/l17-beispiel.visustruct":rS,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":oS,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":lS,"../../lessons/diagramme/l17-java-brief-start.visustruct":uS,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":mS,"../../lessons/diagramme/l17-java-fehler-start.visustruct":cS,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":dS,"../../lessons/diagramme/l17-ticket-loesung.visustruct":hS,"../../lessons/diagramme/l18-beispiel.visustruct":gS,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":pS,"../../lessons/diagramme/l18-java-fehler-start.visustruct":fS,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":xS,"../../lessons/diagramme/l18-js-loesung.visustruct":bS,"../../lessons/diagramme/l18-python-loesung.visustruct":yS,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":vS,"../../lessons/diagramme/l19-java-fehler-start.visustruct":wS,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":zS,"../../lessons/diagramme/l2-ausgabe.visustruct":IS,"../../lessons/diagramme/l2-hallo-loesung.visustruct":kS,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":SS,"../../lessons/diagramme/l20-countdown-loesung.visustruct":_S,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":TS,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":OS,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":AS,"../../lessons/diagramme/l23-java-nummern-start.visustruct":PS,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":jS,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":CS,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":BS,"../../lessons/diagramme/l24-java-laengster-start.visustruct":DS,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":ZS,"../../lessons/diagramme/l25-java-beste-start.visustruct":MS,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":LS,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":WS,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":ES,"../../lessons/diagramme/l26-java-namen-start.visustruct":NS,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":FS,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":JS,"../../lessons/diagramme/l27-java-json-loesung.visustruct":RS,"../../lessons/diagramme/l27-java-json-start.visustruct":GS,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":HS,"../../lessons/diagramme/l27-java-saetze-start.visustruct":VS,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":QS,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":qS,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":US,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":$S,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":YS,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":XS,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":KS,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":m_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":c_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":d_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":h_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":g_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":p_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":f_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":x_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":b_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":y_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":v_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":w_,"../../lessons/diagramme/pt/dt-buffered.visustruct":z_,"../../lessons/diagramme/pt/dt-csv.visustruct":I_,"../../lessons/diagramme/pt/dt-json.visustruct":k_,"../../lessons/diagramme/pt/dt-lesen.visustruct":S_,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":__,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":T_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":O_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":A_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":P_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":j_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":C_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":B_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":D_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":Z_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":M_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":L_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":W_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":E_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":N_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":F_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":J_,"../../lessons/diagramme/pt/l05-division.visustruct":R_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":G_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":H_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":V_,"../../lessons/diagramme/pt/l05-java-kino-loesung.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":$_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":Y_,"../../lessons/diagramme/pt/l06-eva.visustruct":X_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":K_,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":eT,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":tT,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":nT,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":iT,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":aT,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":sT,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":rT,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":oT,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":lT,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":uT,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":mT,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":cT,"../../lessons/diagramme/pt/l07-rabatt.visustruct":dT,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":hT,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":gT,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":pT,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":fT,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":xT,"../../lessons/diagramme/pt/l08-note.visustruct":bT,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":yT,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":vT,"../../lessons/diagramme/pt/l09-ampel.visustruct":wT,"../../lessons/diagramme/pt/l09-automat.visustruct":zT,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":IT,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":kT,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":ST,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":_T,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":TT,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":OT,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":AT,"../../lessons/diagramme/pt/l1-sequenz.visustruct":PT,"../../lessons/diagramme/pt/l1-tee.visustruct":jT,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":CT,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":BT,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":DT,"../../lessons/diagramme/pt/l10-countdown.visustruct":ZT,"../../lessons/diagramme/pt/l10-endlos.visustruct":MT,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":LT,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":WT,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":ET,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":NT,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":FT,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":JT,"../../lessons/diagramme/pt/l11-einmal.visustruct":RT,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":GT,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":HT,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":VT,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":QT,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":qT,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":UT,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":$T,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":YT,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":XT,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":KT,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":eO,"../../lessons/diagramme/pt/l12-summe.visustruct":tO,"../../lessons/diagramme/pt/l13-dreieck.visustruct":nO,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":iO,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":aO,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":sO,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":rO,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":oO,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":lO,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":uO,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":mO,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":cO,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":dO,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":hO,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":gO,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":pO,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":fO,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":xO,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":bO,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":yO,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":vO,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":wO,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":zO,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":IO,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":kO,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":SO,"../../lessons/diagramme/pt/l15-quadrat.visustruct":_O,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":TO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":OO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":AO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":PO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":jO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":CO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":BO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":DO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":ZO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":MO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":LO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":WO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":EO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":NO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":FO,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":JO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":RO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":GO,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":HO,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":VO,"../../lessons/diagramme/pt/l18-beispiel.visustruct":QO,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":qO,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":UO,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":$O,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":YO,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":XO,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":KO,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":eA,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":tA,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":nA,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":iA,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":aA,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":sA,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":rA,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":oA,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":lA,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":uA,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":mA,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":cA,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":dA,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":hA,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":gA,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":pA,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":fA,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":xA,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":bA,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":yA,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":vA,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":wA,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":zA,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":IA,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":kA,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":SA,"../../lessons/diagramme/pt/sim-kino-start.visustruct":_A,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":TA,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":OA,"../../lessons/diagramme/pt/sim-tausch.visustruct":AA,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":PA,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":jA,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":CA,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":BA,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":DA,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":ZA,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":MA,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":LA,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":WA,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":EA,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":NA,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":FA,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":JA,"../../lessons/diagramme/pt/zk-mehr.visustruct":RA,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":GA,"../../lessons/diagramme/pt/zk-split.visustruct":HA,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":VA,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":QA,"../../lessons/diagramme/pt/zk-zeichen.visustruct":qA,"../../lessons/diagramme/sim-kino-loesung.visustruct":UA,"../../lessons/diagramme/sim-kino-start.visustruct":$A,"../../lessons/diagramme/sim-tausch-loesung.visustruct":YA,"../../lessons/diagramme/sim-tausch-start.visustruct":XA,"../../lessons/diagramme/sim-tausch.visustruct":KA,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":eP,"../../lessons/diagramme/ss-absteigend-start.visustruct":tP,"../../lessons/diagramme/ss-binaere-suche.visustruct":nP,"../../lessons/diagramme/ss-bubblesort.visustruct":iP,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":aP,"../../lessons/diagramme/ss-lineare-suche.visustruct":sP,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":rP,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":oP,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":lP,"../../lessons/diagramme/uebergabe-haupt.visustruct":uP,"../../lessons/diagramme/uebergabe-leeren.visustruct":mP,"../../lessons/diagramme/uebergabe-verdopple.visustruct":cP,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":dP,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":hP,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":gP,"../../lessons/diagramme/vb-ampel-loesung.visustruct":pP,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":fP,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":xP,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":bP,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":yP,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":vP,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":wP,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":zP,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":IP,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":kP,"../../lessons/diagramme/vb-einparken-loesung.visustruct":SP,"../../lessons/diagramme/vb-farben-loesung.visustruct":_P,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":TP,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":OP,"../../lessons/diagramme/vb-gerade-loesung.visustruct":AP,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":PP,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":jP,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":CP,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":BP,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":DP,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":ZP,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":MP,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":LP,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":WP,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":EP,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":NP,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":FP,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":JP,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":RP,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":GP,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":HP,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":VP,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":QP,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":qP,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":UP,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":$P,"../../lessons/diagramme/vb-melodie-loesung.visustruct":YP,"../../lessons/diagramme/vb-morsen-loesung.visustruct":XP,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":KP,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":ej,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":tj,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":nj,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":ij,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":aj,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":sj,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":rj,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":oj,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":lj,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":uj,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":mj,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":cj,"../../lessons/diagramme/vb-rand-loesung.visustruct":dj,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":hj,"../../lessons/diagramme/vb-slalom-loesung.visustruct":gj,"../../lessons/diagramme/vb-spirale-loesung.visustruct":pj,"../../lessons/diagramme/vb-start-a-loesung.visustruct":fj,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":xj,"../../lessons/diagramme/vb-treppe-loesung.visustruct":bj,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":yj,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":vj,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":wj,"../../lessons/diagramme/vb-wald-loesung.visustruct":zj,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":Ij,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":kj,"../../lessons/diagramme/zk-initialen-loesung.visustruct":Sj,"../../lessons/diagramme/zk-mehr.visustruct":_j,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":Tj,"../../lessons/diagramme/zk-split.visustruct":Oj,"../../lessons/diagramme/zk-woerter-loesung.visustruct":Aj,"../../lessons/diagramme/zk-zaehlen.visustruct":Pj,"../../lessons/diagramme/zk-zeichen.visustruct":jj}),$B=Object.assign({"../../lessons/welten/ausgang-1.txt":Cj,"../../lessons/welten/ausgang-2.txt":Bj,"../../lessons/welten/ecke.txt":Dj,"../../lessons/welten/farbe-1.txt":Zj,"../../lessons/welten/farbe-2.txt":Mj,"../../lessons/welten/farbe-3.txt":Lj,"../../lessons/welten/farbe-4.txt":Wj,"../../lessons/welten/hindernis-1.txt":Ej,"../../lessons/welten/hindernis-2.txt":Nj,"../../lessons/welten/labyrinth-1.txt":Fj,"../../lessons/welten/labyrinth-2.txt":Jj,"../../lessons/welten/linie-1.txt":Rj,"../../lessons/welten/linie-2.txt":Gj,"../../lessons/welten/linie-rot-1.txt":Hj,"../../lessons/welten/linie-rot-2.txt":Vj,"../../lessons/welten/parken-1.txt":Qj,"../../lessons/welten/parken-2.txt":qj,"../../lessons/welten/rand-1.txt":Uj,"../../lessons/welten/rand-2.txt":$j,"../../lessons/welten/slalom.txt":Yj,"../../lessons/welten/tunnel-1.txt":Xj,"../../lessons/welten/tunnel-2.txt":Kj,"../../lessons/welten/wald-1.txt":eC,"../../lessons/welten/wald-2.txt":tC,"../../lessons/welten/wand-frei.txt":nC,"../../lessons/welten/wand-kurz.txt":iC,"../../lessons/welten/wand-lang.txt":aC,"../../lessons/welten/wand-mittel.txt":sC,"../../lessons/welten/wand-nah.txt":rC,"../../lessons/welten/zeit-1.txt":oC,"../../lessons/welten/ziel-kurz.txt":lC,"../../lessons/welten/ziel-lang.txt":uC}),YB=Object.assign({"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":mC,"../../lessons/bilder/ben-shneiderman.jpg":cC,"../../lessons/bilder/caesar-ascii.svg":dC,"../../lessons/bilder/caesar-scheibe.svg":hC,"../../lessons/bilder/caesar-verschiebung.svg":gC,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":pC,"../../lessons/bilder/en/kino-saal.svg":fC,"../../lessons/bilder/en/kino-schleifen.svg":xC,"../../lessons/bilder/en/l01-pap.svg":bC,"../../lessons/bilder/en/l02-einfuegen.svg":yC,"../../lessons/bilder/en/l04-variable.svg":vC,"../../lessons/bilder/en/l04-zuweisung.svg":wC,"../../lessons/bilder/en/l05-tauschen.svg":zC,"../../lessons/bilder/en/l08-zahlenstrahl.svg":IC,"../../lessons/bilder/en/l10-kopfgesteuert.svg":kC,"../../lessons/bilder/en/l11-vergleich.svg":SC,"../../lessons/bilder/en/l12-for-ablauf.svg":_C,"../../lessons/bilder/en/l14-array.svg":TC,"../../lessons/bilder/en/mvc-klick.svg":OC,"../../lessons/bilder/en/ss-binaere-suche.svg":AC,"../../lessons/bilder/en/ss-bubblesort.svg":PC,"../../lessons/bilder/en/ss-lineare-suche.svg":jC,"../../lessons/bilder/en/ss-vergleiche.svg":CC,"../../lessons/bilder/en/uebergabe.svg":BC,"../../lessons/bilder/en/zk-zeichen.svg":DC,"../../lessons/bilder/ike-nassi.jpg":ZC,"../../lessons/bilder/kino-saal.svg":MC,"../../lessons/bilder/kino-schleifen.svg":LC,"../../lessons/bilder/l01-pap.svg":WC,"../../lessons/bilder/l02-einfuegen.svg":EC,"../../lessons/bilder/l04-variable.svg":NC,"../../lessons/bilder/l04-zuweisung.svg":FC,"../../lessons/bilder/l05-tauschen.svg":JC,"../../lessons/bilder/l08-zahlenstrahl.svg":RC,"../../lessons/bilder/l09-wahrheitstabelle.svg":GC,"../../lessons/bilder/l10-kopfgesteuert.svg":HC,"../../lessons/bilder/l11-vergleich.svg":VC,"../../lessons/bilder/l12-for-ablauf.svg":QC,"../../lessons/bilder/l14-array.svg":qC,"../../lessons/bilder/mvc-klick.svg":UC,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":$C,"../../lessons/bilder/pt/kino-saal.svg":YC,"../../lessons/bilder/pt/kino-schleifen.svg":XC,"../../lessons/bilder/pt/l01-pap.svg":KC,"../../lessons/bilder/pt/l02-einfuegen.svg":eB,"../../lessons/bilder/pt/l04-variable.svg":tB,"../../lessons/bilder/pt/l04-zuweisung.svg":nB,"../../lessons/bilder/pt/l05-tauschen.svg":iB,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":aB,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":sB,"../../lessons/bilder/pt/l11-vergleich.svg":rB,"../../lessons/bilder/pt/l12-for-ablauf.svg":oB,"../../lessons/bilder/pt/l14-array.svg":lB,"../../lessons/bilder/pt/mvc-klick.svg":uB,"../../lessons/bilder/pt/schiffe-versenken.svg":mB,"../../lessons/bilder/pt/ss-binaere-suche.svg":cB,"../../lessons/bilder/pt/ss-bubblesort.svg":dB,"../../lessons/bilder/pt/ss-lineare-suche.svg":hB,"../../lessons/bilder/pt/ss-vergleiche.svg":gB,"../../lessons/bilder/pt/uebergabe.svg":pB,"../../lessons/bilder/pt/zk-zeichen.svg":fB,"../../lessons/bilder/schiffe-versenken.svg":xB,"../../lessons/bilder/ss-binaere-suche.svg":bB,"../../lessons/bilder/ss-bubblesort.svg":yB,"../../lessons/bilder/ss-lineare-suche.svg":vB,"../../lessons/bilder/ss-vergleiche.svg":wB,"../../lessons/bilder/uebergabe.svg":zB,"../../lessons/bilder/zk-zeichen.svg":IB}),Jh=i=>i.replace(/^.*\//,"");function F1(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])=>[Jh(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Mu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let w1="en",Ot=[],Tn=[],Ma="",La=[],ds="off";function Lu(i){i!==ds&&(ds=i,Ot=[],hs(w1))}function hs(i){var s,r,o;if(e3(i),i===w1&&Ot.length>0)return;w1=i;const e=F1(VB,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>GB(Nu(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=HB(Nu(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=F1(QB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ds==="on"){const l=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=XB(Eu(e),Eu(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=F1(qB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Tn=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),Tn=n(a,"aufgaben/");Tn.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)),...Tn.flatMap(u=>u.blocks)])l.kind==="textFile"&&m3(l.name,l.content);if(Ma=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ds!=="off"){const l=(r=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ma=`${Ma.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 te(`${e}: Keine Schritte (## Überschrift) gefunden.`);RB(r,e);const m=t.get("titel");if(!m)throw new te(`${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}=Eh(i,e),a=t.get("titel");if(!a)throw new te(`${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:Fh(n,e)}}function Du(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!o3(n))throw new te(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${ih.join(", ")}.`);return t}const VB=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Yx,"../../lessons/de/02-der-editor.md":Xx,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Kx,"../../lessons/de/04-variablen-und-datentypen.md":eb,"../../lessons/de/05-sequenz.md":tb,"../../lessons/de/06-eingabe-und-ausgabe.md":nb,"../../lessons/de/07-simulation-und-schreibtischtest.md":ib,"../../lessons/de/08-verzweigung.md":ab,"../../lessons/de/09-bedingungen-verknuepfen.md":sb,"../../lessons/de/10-fallauswahl.md":rb,"../../lessons/de/11-while-schleife.md":ob,"../../lessons/de/12-do-while-schleife.md":lb,"../../lessons/de/13-for-schleife.md":ub,"../../lessons/de/14-verschachteln.md":mb,"../../lessons/de/15-arrays.md":cb,"../../lessons/de/16-zweidimensionale-arrays.md":db,"../../lessons/de/17-zeichenketten.md":hb,"../../lessons/de/18-aufruf-und-aussprung.md":gb,"../../lessons/de/19-suchen-und-sortieren.md":pb,"../../lessons/de/20-java.md":fb,"../../lessons/de/21-python-und-javascript.md":xb,"../../lessons/de/22-try-und-catch.md":bb,"../../lessons/de/23-text-einlesen-und-speichern.md":vb,"../../lessons/de/24-zeile-fuer-zeile.md":yb,"../../lessons/de/25-tabellen-als-csv.md":wb,"../../lessons/de/26-json.md":zb,"../../lessons/de/27-formate-im-vergleich.md":Ib,"../../lessons/de/28-erstes-fenster.md":kb,"../../lessons/de/29-knopf-im-fenster.md":Sb,"../../lessons/de/30-der-knopf-reagiert.md":_b,"../../lessons/de/31-zahl-verdoppeln.md":Tb,"../../lessons/de/32-klickzaehler.md":Ob,"../../lessons/de/33-ampel.md":Ab,"../../lessons/de/34-notenrechner.md":Pb,"../../lessons/de/35-taschenrechner.md":jb,"../../lessons/de/36-zahlenraten.md":Cb,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":Bb,"../../lessons/de/38-innere-klassen.md":Db,"../../lessons/de/39-zwei-reiter.md":Zb,"../../lessons/de/40-model-view-controller.md":Mb,"../../lessons/de/begriffe.md":Lb,"../../lessons/de/nachschlagen.md":Wb,"../../lessons/en/01-was-ist-ein-struktogramm.md":Eb,"../../lessons/en/02-der-editor.md":Nb,"../../lessons/en/03-speichern-oeffnen-exportieren.md":Fb,"../../lessons/en/04-variablen-und-datentypen.md":Jb,"../../lessons/en/05-sequenz.md":Rb,"../../lessons/en/06-eingabe-und-ausgabe.md":Gb,"../../lessons/en/07-simulation-und-schreibtischtest.md":Hb,"../../lessons/en/08-verzweigung.md":Vb,"../../lessons/en/09-bedingungen-verknuepfen.md":Qb,"../../lessons/en/10-fallauswahl.md":qb,"../../lessons/en/11-while-schleife.md":Ub,"../../lessons/en/12-do-while-schleife.md":$b,"../../lessons/en/13-for-schleife.md":Yb,"../../lessons/en/14-verschachteln.md":Xb,"../../lessons/en/15-arrays.md":Kb,"../../lessons/en/16-zweidimensionale-arrays.md":e4,"../../lessons/en/17-zeichenketten.md":t4,"../../lessons/en/18-aufruf-und-aussprung.md":n4,"../../lessons/en/19-suchen-und-sortieren.md":i4,"../../lessons/en/20-java.md":a4,"../../lessons/en/21-python-und-javascript.md":s4,"../../lessons/en/22-try-und-catch.md":r4,"../../lessons/en/23-text-einlesen-und-speichern.md":o4,"../../lessons/en/24-zeile-fuer-zeile.md":l4,"../../lessons/en/25-tabellen-als-csv.md":u4,"../../lessons/en/26-json.md":m4,"../../lessons/en/27-formate-im-vergleich.md":c4,"../../lessons/en/28-erstes-fenster.md":d4,"../../lessons/en/29-knopf-im-fenster.md":h4,"../../lessons/en/30-der-knopf-reagiert.md":g4,"../../lessons/en/31-zahl-verdoppeln.md":p4,"../../lessons/en/32-klickzaehler.md":f4,"../../lessons/en/33-ampel.md":x4,"../../lessons/en/34-notenrechner.md":b4,"../../lessons/en/35-taschenrechner.md":v4,"../../lessons/en/36-zahlenraten.md":y4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":w4,"../../lessons/en/38-innere-klassen.md":z4,"../../lessons/en/39-zwei-reiter.md":I4,"../../lessons/en/40-model-view-controller.md":k4,"../../lessons/en/begriffe.md":S4,"../../lessons/en/nachschlagen.md":_4,"../../lessons/pt/01-was-ist-ein-struktogramm.md":T4,"../../lessons/pt/02-der-editor.md":O4,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":A4,"../../lessons/pt/04-variablen-und-datentypen.md":P4,"../../lessons/pt/05-sequenz.md":j4,"../../lessons/pt/06-eingabe-und-ausgabe.md":C4,"../../lessons/pt/07-simulation-und-schreibtischtest.md":B4,"../../lessons/pt/08-verzweigung.md":D4,"../../lessons/pt/09-bedingungen-verknuepfen.md":Z4,"../../lessons/pt/10-fallauswahl.md":M4,"../../lessons/pt/11-while-schleife.md":L4,"../../lessons/pt/12-do-while-schleife.md":W4,"../../lessons/pt/13-for-schleife.md":E4,"../../lessons/pt/14-verschachteln.md":N4,"../../lessons/pt/15-arrays.md":F4,"../../lessons/pt/16-zweidimensionale-arrays.md":J4,"../../lessons/pt/17-zeichenketten.md":R4,"../../lessons/pt/18-aufruf-und-aussprung.md":G4,"../../lessons/pt/19-suchen-und-sortieren.md":H4,"../../lessons/pt/20-java.md":V4,"../../lessons/pt/21-python-und-javascript.md":Q4,"../../lessons/pt/22-try-und-catch.md":q4,"../../lessons/pt/23-text-einlesen-und-speichern.md":U4,"../../lessons/pt/24-zeile-fuer-zeile.md":$4,"../../lessons/pt/25-tabellen-als-csv.md":Y4,"../../lessons/pt/26-json.md":X4,"../../lessons/pt/27-formate-im-vergleich.md":K4,"../../lessons/pt/28-erstes-fenster.md":ev,"../../lessons/pt/29-knopf-im-fenster.md":tv,"../../lessons/pt/30-der-knopf-reagiert.md":nv,"../../lessons/pt/31-zahl-verdoppeln.md":iv,"../../lessons/pt/32-klickzaehler.md":av,"../../lessons/pt/33-ampel.md":sv,"../../lessons/pt/34-notenrechner.md":rv,"../../lessons/pt/35-taschenrechner.md":ov,"../../lessons/pt/36-zahlenraten.md":lv,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":uv,"../../lessons/pt/38-innere-klassen.md":mv,"../../lessons/pt/39-zwei-reiter.md":cv,"../../lessons/pt/40-model-view-controller.md":dv,"../../lessons/pt/begriffe.md":hv,"../../lessons/pt/nachschlagen.md":gv}),QB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":pv,"../../lessons/de/aufgaben/ballwurf.md":fv,"../../lessons/de/aufgaben/bestenliste.md":xv,"../../lessons/de/aufgaben/binaerzahl.md":bv,"../../lessons/de/aufgaben/caesar.md":vv,"../../lessons/de/aufgaben/collatz.md":yv,"../../lessons/de/aufgaben/einheitenrechner.md":wv,"../../lessons/de/aufgaben/fibonacci.md":zv,"../../lessons/de/aufgaben/gerade-ungerade.md":Iv,"../../lessons/de/aufgaben/mehrwertsteuer.md":kv,"../../lessons/de/aufgaben/notendurchschnitt.md":Sv,"../../lessons/de/aufgaben/pin-pruefen.md":_v,"../../lessons/de/aufgaben/schiffe-versenken.md":Tv,"../../lessons/de/aufgaben/speisekarte.md":Ov,"../../lessons/de/aufgaben/summe-bilden.md":Av,"../../lessons/de/aufgaben/tafeldienst.md":Pv,"../../lessons/de/aufgaben/taschenrechner.md":jv,"../../lessons/de/aufgaben/verleih-menue.md":Cv,"../../lessons/de/aufgaben/vokabeltrainer.md":Bv,"../../lessons/de/aufgaben/volljaehrig.md":Dv,"../../lessons/de/aufgaben/wuerfel-mvc.md":Zv,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Mv,"../../lessons/en/aufgaben/alter-unterprogramm.md":Lv,"../../lessons/en/aufgaben/ballwurf.md":Wv,"../../lessons/en/aufgaben/bestenliste.md":Ev,"../../lessons/en/aufgaben/binaerzahl.md":Nv,"../../lessons/en/aufgaben/caesar.md":Fv,"../../lessons/en/aufgaben/collatz.md":Jv,"../../lessons/en/aufgaben/einheitenrechner.md":Rv,"../../lessons/en/aufgaben/fibonacci.md":Gv,"../../lessons/en/aufgaben/gerade-ungerade.md":Hv,"../../lessons/en/aufgaben/mehrwertsteuer.md":Vv,"../../lessons/en/aufgaben/notendurchschnitt.md":Qv,"../../lessons/en/aufgaben/pin-pruefen.md":qv,"../../lessons/en/aufgaben/schiffe-versenken.md":Uv,"../../lessons/en/aufgaben/speisekarte.md":$v,"../../lessons/en/aufgaben/summe-bilden.md":Yv,"../../lessons/en/aufgaben/tafeldienst.md":Xv,"../../lessons/en/aufgaben/taschenrechner.md":Kv,"../../lessons/en/aufgaben/verleih-menue.md":ey,"../../lessons/en/aufgaben/vokabeltrainer.md":ty,"../../lessons/en/aufgaben/volljaehrig.md":ny,"../../lessons/en/aufgaben/wuerfel-mvc.md":iy,"../../lessons/en/aufgaben/zahl-verdoppeln.md":ay,"../../lessons/pt/aufgaben/alter-unterprogramm.md":sy,"../../lessons/pt/aufgaben/ballwurf.md":ry,"../../lessons/pt/aufgaben/bestenliste.md":oy,"../../lessons/pt/aufgaben/binaerzahl.md":ly,"../../lessons/pt/aufgaben/caesar.md":uy,"../../lessons/pt/aufgaben/collatz.md":my,"../../lessons/pt/aufgaben/einheitenrechner.md":cy,"../../lessons/pt/aufgaben/fibonacci.md":dy,"../../lessons/pt/aufgaben/gerade-ungerade.md":hy,"../../lessons/pt/aufgaben/mehrwertsteuer.md":gy,"../../lessons/pt/aufgaben/notendurchschnitt.md":py,"../../lessons/pt/aufgaben/pin-pruefen.md":fy,"../../lessons/pt/aufgaben/schiffe-versenken.md":xy,"../../lessons/pt/aufgaben/speisekarte.md":by,"../../lessons/pt/aufgaben/summe-bilden.md":vy,"../../lessons/pt/aufgaben/tafeldienst.md":yy,"../../lessons/pt/aufgaben/taschenrechner.md":wy,"../../lessons/pt/aufgaben/verleih-menue.md":zy,"../../lessons/pt/aufgaben/vokabeltrainer.md":Iy,"../../lessons/pt/aufgaben/volljaehrig.md":ky,"../../lessons/pt/aufgaben/wuerfel-mvc.md":Sy,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":_y}),Zu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":Ty,"../../lessons/de/visubot/02-das-quadrat.md":Oy,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Ay,"../../lessons/de/visubot/04-sensoren.md":Py,"../../lessons/de/visubot/05-bis-zur-wand.md":jy,"../../lessons/de/visubot/06-abstand.md":Cy,"../../lessons/de/visubot/07-linie.md":By,"../../lessons/de/visubot/08-farben.md":Dy,"../../lessons/de/visubot/09-fallauswahl.md":Zy,"../../lessons/de/visubot/10-tasten-joystick.md":My,"../../lessons/de/visubot/11-licht.md":Ly,"../../lessons/de/visubot/12-lautstaerke.md":Wy,"../../lessons/de/visubot/13-neigung.md":Ey,"../../lessons/de/visubot/14-leds.md":Ny,"../../lessons/de/visubot/15-einzelne-leds.md":Fy,"../../lessons/de/visubot/16-lautsprecher.md":Jy,"../../lessons/de/visubot/17-arrays-melodie.md":Ry,"../../lessons/de/visubot/18-bildschirm.md":Gy,"../../lessons/de/visubot/19-zeichenketten.md":Hy,"../../lessons/de/visubot/20-motoren.md":Vy,"../../lessons/de/visubot/21-stoppuhr-akku.md":Qy,"../../lessons/de/visubot/22-eigene-methoden.md":qy,"../../lessons/de/visubot/nachschlagen.md":Uy,"../../lessons/en/visubot/01-der-mbot2.md":$y,"../../lessons/en/visubot/02-das-quadrat.md":Yy,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Xy,"../../lessons/en/visubot/04-sensoren.md":Ky,"../../lessons/en/visubot/05-bis-zur-wand.md":e9,"../../lessons/en/visubot/06-abstand.md":t9,"../../lessons/en/visubot/07-linie.md":n9,"../../lessons/en/visubot/08-farben.md":i9,"../../lessons/en/visubot/09-fallauswahl.md":a9,"../../lessons/en/visubot/10-tasten-joystick.md":s9,"../../lessons/en/visubot/11-licht.md":r9,"../../lessons/en/visubot/12-lautstaerke.md":o9,"../../lessons/en/visubot/13-neigung.md":l9,"../../lessons/en/visubot/14-leds.md":u9,"../../lessons/en/visubot/15-einzelne-leds.md":m9,"../../lessons/en/visubot/16-lautsprecher.md":c9,"../../lessons/en/visubot/17-arrays-melodie.md":d9,"../../lessons/en/visubot/18-bildschirm.md":h9,"../../lessons/en/visubot/19-zeichenketten.md":g9,"../../lessons/en/visubot/20-motoren.md":p9,"../../lessons/en/visubot/21-stoppuhr-akku.md":f9,"../../lessons/en/visubot/22-eigene-methoden.md":x9,"../../lessons/en/visubot/nachschlagen.md":b9}),qB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":v9,"../../lessons/de/visubot/aufgaben/ausgang.md":y9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":w9,"../../lessons/de/visubot/aufgaben/dreieck.md":z9,"../../lessons/de/visubot/aufgaben/einparken.md":I9,"../../lessons/de/visubot/aufgaben/hindernis.md":k9,"../../lessons/de/visubot/aufgaben/knight-rider.md":S9,"../../lessons/de/visubot/aufgaben/labyrinth.md":_9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":T9,"../../lessons/de/visubot/aufgaben/morsen.md":O9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":A9,"../../lessons/de/visubot/aufgaben/slalom.md":P9,"../../lessons/de/visubot/aufgaben/spirale.md":j9,"../../lessons/de/visubot/aufgaben/treppe.md":C9,"../../lessons/de/visubot/aufgaben/tunnel.md":B9,"../../lessons/de/visubot/aufgaben/wald.md":D9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":Z9,"../../lessons/en/visubot/aufgaben/ausgang.md":M9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":L9,"../../lessons/en/visubot/aufgaben/dreieck.md":W9,"../../lessons/en/visubot/aufgaben/einparken.md":E9,"../../lessons/en/visubot/aufgaben/hindernis.md":N9,"../../lessons/en/visubot/aufgaben/knight-rider.md":F9,"../../lessons/en/visubot/aufgaben/labyrinth.md":J9,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":R9,"../../lessons/en/visubot/aufgaben/morsen.md":G9,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":H9,"../../lessons/en/visubot/aufgaben/slalom.md":V9,"../../lessons/en/visubot/aufgaben/spirale.md":Q9,"../../lessons/en/visubot/aufgaben/treppe.md":q9,"../../lessons/en/visubot/aufgaben/tunnel.md":U9,"../../lessons/en/visubot/aufgaben/wald.md":$9}),UB=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":Y9,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":X9,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":K9,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":ew,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":tw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":nw,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":iw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":aw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":sw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":rw,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":ow,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":lw,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":uw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":mw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":cw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":dw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":hw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":gw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":pw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":fw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":xw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":bw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":vw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":yw,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":ww,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":zw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":Iw,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":kw,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":Sw,"../../lessons/diagramme/dt-buffered.visustruct":_w,"../../lessons/diagramme/dt-csv.visustruct":Tw,"../../lessons/diagramme/dt-json.visustruct":Ow,"../../lessons/diagramme/dt-lesen.visustruct":Aw,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":Pw,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":jw,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":Cw,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":Bw,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":Dw,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":Zw,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":Mw,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":Lw,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":Ww,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":Ew,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":Nw,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":Fw,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":Jw,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":Rw,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":Gw,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":Hw,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":Vw,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":Qw,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":qw,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":Uw,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":$w,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":Yw,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":Xw,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":Kw,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":e5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":t5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":n5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":i5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":a5,"../../lessons/diagramme/en/dt-buffered.visustruct":s5,"../../lessons/diagramme/en/dt-csv.visustruct":r5,"../../lessons/diagramme/en/dt-json.visustruct":o5,"../../lessons/diagramme/en/dt-lesen.visustruct":l5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":u5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":m5,"../../lessons/diagramme/en/kino-frei-start.visustruct":c5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":d5,"../../lessons/diagramme/en/kino-karte-start.visustruct":h5,"../../lessons/diagramme/en/kino-saalplan.visustruct":g5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":p5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":f5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":x5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":b5,"../../lessons/diagramme/en/l04-rechnen.visustruct":v5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":y5,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":w5,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":z5,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":I5,"../../lessons/diagramme/en/l04-tauschen.visustruct":k5,"../../lessons/diagramme/en/l05-datentypen.visustruct":S5,"../../lessons/diagramme/en/l05-division.visustruct":_5,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":T5,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":O5,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":A5,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":P5,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":j5,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":C5,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":B5,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":D5,"../../lessons/diagramme/en/l06-eva.visustruct":Z5,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":M5,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":L5,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":W5,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":E5,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":N5,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":F5,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":J5,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":R5,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":G5,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":H5,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":V5,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":Q5,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":q5,"../../lessons/diagramme/en/l07-rabatt.visustruct":U5,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":$5,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Y5,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":X5,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":K5,"../../lessons/diagramme/en/l08-jugendticket.visustruct":e6,"../../lessons/diagramme/en/l08-note.visustruct":t6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":n6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":i6,"../../lessons/diagramme/en/l09-ampel.visustruct":a6,"../../lessons/diagramme/en/l09-automat.visustruct":s6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":r6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":o6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":l6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":u6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":m6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":c6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":d6,"../../lessons/diagramme/en/l1-sequenz.visustruct":h6,"../../lessons/diagramme/en/l1-tee.visustruct":g6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":p6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":f6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":x6,"../../lessons/diagramme/en/l10-countdown.visustruct":b6,"../../lessons/diagramme/en/l10-endlos.visustruct":v6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":y6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":w6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":z6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":I6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":k6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":S6,"../../lessons/diagramme/en/l11-einmal.visustruct":_6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":T6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":O6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":A6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":P6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":j6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":C6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":B6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":D6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":Z6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":M6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":L6,"../../lessons/diagramme/en/l12-summe.visustruct":W6,"../../lessons/diagramme/en/l13-dreieck.visustruct":E6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":N6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":F6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":J6,"../../lessons/diagramme/en/l13-java-fehler-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-treppe-loesung.visustruct":$6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":Y6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":X6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":ez,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":tz,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":nz,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":iz,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":az,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":sz,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":rz,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":oz,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":lz,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":uz,"../../lessons/diagramme/en/l15-quadrat.visustruct":mz,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":cz,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":dz,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":hz,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":gz,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":pz,"../../lessons/diagramme/en/l16-countdown-start.visustruct":fz,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":xz,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":bz,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":vz,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":yz,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":wz,"../../lessons/diagramme/en/l16-summe-start.visustruct":zz,"../../lessons/diagramme/en/l17-beispiel.visustruct":Iz,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":kz,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":Sz,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":_z,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":Tz,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":Oz,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":Az,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":Pz,"../../lessons/diagramme/en/l18-beispiel.visustruct":jz,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":Cz,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Bz,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Dz,"../../lessons/diagramme/en/l18-js-loesung.visustruct":Zz,"../../lessons/diagramme/en/l18-python-loesung.visustruct":Mz,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Lz,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Wz,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Ez,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Nz,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Fz,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Jz,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Rz,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Gz,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Hz,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Vz,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":Qz,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":qz,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":Uz,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":$z,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Yz,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Xz,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":Kz,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":e7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":t7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":n7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":i7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":a7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":s7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":r7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":o7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":l7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":u7,"../../lessons/diagramme/en/sim-kino-start.visustruct":m7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":c7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":d7,"../../lessons/diagramme/en/sim-tausch.visustruct":h7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":g7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":p7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":f7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":x7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":b7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":v7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":y7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":w7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":z7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":I7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":k7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":S7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":_7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":eI,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":tI,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":nI,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":iI,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":aI,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":sI,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":rI,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":oI,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":lI,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":uI,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":mI,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":cI,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":dI,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":hI,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":gI,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":pI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":fI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":xI,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":bI,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":vI,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":yI,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":wI,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":zI,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":II,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":kI,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":SI,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":_I,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":TI,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":OI,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":AI,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":PI,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":jI,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":CI,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":BI,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":DI,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":ZI,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":MI,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":LI,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":WI,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":EI,"../../lessons/diagramme/en/zk-mehr.visustruct":NI,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":FI,"../../lessons/diagramme/en/zk-split.visustruct":JI,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":RI,"../../lessons/diagramme/en/zk-zaehlen.visustruct":GI,"../../lessons/diagramme/en/zk-zeichen.visustruct":HI,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":VI,"../../lessons/diagramme/kino-frei-loesung.visustruct":QI,"../../lessons/diagramme/kino-frei-start.visustruct":qI,"../../lessons/diagramme/kino-karte-loesung.visustruct":UI,"../../lessons/diagramme/kino-karte-start.visustruct":$I,"../../lessons/diagramme/kino-saalplan.visustruct":YI,"../../lessons/diagramme/kino-verkaufen.visustruct":XI,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":KI,"../../lessons/diagramme/l04-java-fehler-start.visustruct":e8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":t8,"../../lessons/diagramme/l04-rechnen.visustruct":n8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":i8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":a8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":s8,"../../lessons/diagramme/l04-tauschen-start.visustruct":r8,"../../lessons/diagramme/l04-tauschen.visustruct":o8,"../../lessons/diagramme/l05-datentypen.visustruct":l8,"../../lessons/diagramme/l05-division.visustruct":u8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":m8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":c8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":d8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":h8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":g8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":p8,"../../lessons/diagramme/l05-sekunden-start.visustruct":f8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":x8,"../../lessons/diagramme/l06-eva.visustruct":b8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":v8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":y8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":w8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":z8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":I8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":k8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":S8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":_8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":T8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":O8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":A8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":P8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":j8,"../../lessons/diagramme/l07-rabatt.visustruct":C8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":B8,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":D8,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":Z8,"../../lessons/diagramme/l08-java-fehler-start.visustruct":M8,"../../lessons/diagramme/l08-jugendticket.visustruct":L8,"../../lessons/diagramme/l08-note.visustruct":W8,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":E8,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":N8,"../../lessons/diagramme/l09-ampel.visustruct":F8,"../../lessons/diagramme/l09-automat.visustruct":J8,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":R8,"../../lessons/diagramme/l09-java-fehler-start.visustruct":G8,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":H8,"../../lessons/diagramme/l09-note-loesung.visustruct":V8,"../../lessons/diagramme/l09-rechner-loesung.visustruct":Q8,"../../lessons/diagramme/l09-verschachtelt.visustruct":q8,"../../lessons/diagramme/l1-grundbausteine.visustruct":U8,"../../lessons/diagramme/l1-sequenz.visustruct":$8,"../../lessons/diagramme/l1-tee.visustruct":Y8,"../../lessons/diagramme/l1-verzweigung.visustruct":X8,"../../lessons/diagramme/l1-wiederholung.visustruct":K8,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":ek,"../../lessons/diagramme/l10-countdown.visustruct":tk,"../../lessons/diagramme/l10-endlos.visustruct":nk,"../../lessons/diagramme/l10-fakultaet.visustruct":ik,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":ak,"../../lessons/diagramme/l10-java-fehler-start.visustruct":sk,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":rk,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":ok,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":lk,"../../lessons/diagramme/l11-einmal.visustruct":uk,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":mk,"../../lessons/diagramme/l11-java-fehler-start.visustruct":ck,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":dk,"../../lessons/diagramme/l11-note-loesung.visustruct":hk,"../../lessons/diagramme/l11-summe-loesung.visustruct":gk,"../../lessons/diagramme/l12-countdown-loesung.visustruct":pk,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":fk,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":xk,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":bk,"../../lessons/diagramme/l12-java-fehler-start.visustruct":vk,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":yk,"../../lessons/diagramme/l12-summe.visustruct":wk,"../../lessons/diagramme/l13-dreieck.visustruct":zk,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":Ik,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":kk,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":Sk,"../../lessons/diagramme/l13-java-fehler-start.visustruct":_k,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":Tk,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":Ok,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":Ak,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":Pk,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":jk,"../../lessons/diagramme/l14-java-fehler-start.visustruct":Ck,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":Bk,"../../lessons/diagramme/l14-namen-eingeben.visustruct":Dk,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":Zk,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":Mk,"../../lessons/diagramme/l14-summe-maximum.visustruct":Lk,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":Wk,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":Ek,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":Nk,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":Fk,"../../lessons/diagramme/l15-hauptprogramm.visustruct":Jk,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":Rk,"../../lessons/diagramme/l15-java-fehler-start.visustruct":Gk,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":Hk,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":Vk,"../../lessons/diagramme/l15-quadrat.visustruct":Qk,"../../lessons/diagramme/l15-titel-loesung.visustruct":qk,"../../lessons/diagramme/l15-unterprogramm.visustruct":Uk,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":$k,"../../lessons/diagramme/l15-zeige-summe.visustruct":Yk,"../../lessons/diagramme/l16-countdown-loesung.visustruct":Xk,"../../lessons/diagramme/l16-countdown-start.visustruct":Kk,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":eS,"../../lessons/diagramme/l16-java-fehler-start.visustruct":tS,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":nS,"../../lessons/diagramme/l16-schreibtisch.visustruct":iS,"../../lessons/diagramme/l16-summe-loesung.visustruct":aS,"../../lessons/diagramme/l16-summe-start.visustruct":sS,"../../lessons/diagramme/l17-beispiel.visustruct":rS,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":oS,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":lS,"../../lessons/diagramme/l17-java-brief-start.visustruct":uS,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":mS,"../../lessons/diagramme/l17-java-fehler-start.visustruct":cS,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":dS,"../../lessons/diagramme/l17-ticket-loesung.visustruct":hS,"../../lessons/diagramme/l18-beispiel.visustruct":gS,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":pS,"../../lessons/diagramme/l18-java-fehler-start.visustruct":fS,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":xS,"../../lessons/diagramme/l18-js-loesung.visustruct":bS,"../../lessons/diagramme/l18-python-loesung.visustruct":vS,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":yS,"../../lessons/diagramme/l19-java-fehler-start.visustruct":wS,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":zS,"../../lessons/diagramme/l2-ausgabe.visustruct":IS,"../../lessons/diagramme/l2-hallo-loesung.visustruct":kS,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":SS,"../../lessons/diagramme/l20-countdown-loesung.visustruct":_S,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":TS,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":OS,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":AS,"../../lessons/diagramme/l23-java-nummern-start.visustruct":PS,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":jS,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":CS,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":BS,"../../lessons/diagramme/l24-java-laengster-start.visustruct":DS,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":ZS,"../../lessons/diagramme/l25-java-beste-start.visustruct":MS,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":LS,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":WS,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":ES,"../../lessons/diagramme/l26-java-namen-start.visustruct":NS,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":FS,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":JS,"../../lessons/diagramme/l27-java-json-loesung.visustruct":RS,"../../lessons/diagramme/l27-java-json-start.visustruct":GS,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":HS,"../../lessons/diagramme/l27-java-saetze-start.visustruct":VS,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":QS,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":qS,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":US,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":$S,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":YS,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":XS,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":KS,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":m_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":c_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":d_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":h_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":g_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":p_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":f_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":x_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":b_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":v_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":y_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":w_,"../../lessons/diagramme/pt/dt-buffered.visustruct":z_,"../../lessons/diagramme/pt/dt-csv.visustruct":I_,"../../lessons/diagramme/pt/dt-json.visustruct":k_,"../../lessons/diagramme/pt/dt-lesen.visustruct":S_,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":__,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":T_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":O_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":A_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":P_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":j_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":C_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":B_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":D_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":Z_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":M_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":L_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":W_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":E_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":N_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":F_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":J_,"../../lessons/diagramme/pt/l05-division.visustruct":R_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":G_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":H_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":V_,"../../lessons/diagramme/pt/l05-java-kino-loesung.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":$_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":Y_,"../../lessons/diagramme/pt/l06-eva.visustruct":X_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":K_,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":eT,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":tT,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":nT,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":iT,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":aT,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":sT,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":rT,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":oT,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":lT,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":uT,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":mT,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":cT,"../../lessons/diagramme/pt/l07-rabatt.visustruct":dT,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":hT,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":gT,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":pT,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":fT,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":xT,"../../lessons/diagramme/pt/l08-note.visustruct":bT,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":vT,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":yT,"../../lessons/diagramme/pt/l09-ampel.visustruct":wT,"../../lessons/diagramme/pt/l09-automat.visustruct":zT,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":IT,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":kT,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":ST,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":_T,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":TT,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":OT,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":AT,"../../lessons/diagramme/pt/l1-sequenz.visustruct":PT,"../../lessons/diagramme/pt/l1-tee.visustruct":jT,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":CT,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":BT,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":DT,"../../lessons/diagramme/pt/l10-countdown.visustruct":ZT,"../../lessons/diagramme/pt/l10-endlos.visustruct":MT,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":LT,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":WT,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":ET,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":NT,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":FT,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":JT,"../../lessons/diagramme/pt/l11-einmal.visustruct":RT,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":GT,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":HT,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":VT,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":QT,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":qT,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":UT,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":$T,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":YT,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":XT,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":KT,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":eO,"../../lessons/diagramme/pt/l12-summe.visustruct":tO,"../../lessons/diagramme/pt/l13-dreieck.visustruct":nO,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":iO,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":aO,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":sO,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":rO,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":oO,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":lO,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":uO,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":mO,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":cO,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":dO,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":hO,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":gO,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":pO,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":fO,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":xO,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":bO,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":vO,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":yO,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":wO,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":zO,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":IO,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":kO,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":SO,"../../lessons/diagramme/pt/l15-quadrat.visustruct":_O,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":TO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":OO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":AO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":PO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":jO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":CO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":BO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":DO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":ZO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":MO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":LO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":WO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":EO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":NO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":FO,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":JO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":RO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":GO,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":HO,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":VO,"../../lessons/diagramme/pt/l18-beispiel.visustruct":QO,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":qO,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":UO,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":$O,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":YO,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":XO,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":KO,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":eA,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":tA,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":nA,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":iA,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":aA,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":sA,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":rA,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":oA,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":lA,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":uA,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":mA,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":cA,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":dA,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":hA,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":gA,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":pA,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":fA,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":xA,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":bA,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":vA,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":yA,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":wA,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":zA,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":IA,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":kA,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":SA,"../../lessons/diagramme/pt/sim-kino-start.visustruct":_A,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":TA,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":OA,"../../lessons/diagramme/pt/sim-tausch.visustruct":AA,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":PA,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":jA,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":CA,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":BA,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":DA,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":ZA,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":MA,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":LA,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":WA,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":EA,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":NA,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":FA,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":JA,"../../lessons/diagramme/pt/zk-mehr.visustruct":RA,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":GA,"../../lessons/diagramme/pt/zk-split.visustruct":HA,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":VA,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":QA,"../../lessons/diagramme/pt/zk-zeichen.visustruct":qA,"../../lessons/diagramme/sim-kino-loesung.visustruct":UA,"../../lessons/diagramme/sim-kino-start.visustruct":$A,"../../lessons/diagramme/sim-tausch-loesung.visustruct":YA,"../../lessons/diagramme/sim-tausch-start.visustruct":XA,"../../lessons/diagramme/sim-tausch.visustruct":KA,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":eP,"../../lessons/diagramme/ss-absteigend-start.visustruct":tP,"../../lessons/diagramme/ss-binaere-suche.visustruct":nP,"../../lessons/diagramme/ss-bubblesort.visustruct":iP,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":aP,"../../lessons/diagramme/ss-lineare-suche.visustruct":sP,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":rP,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":oP,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":lP,"../../lessons/diagramme/uebergabe-haupt.visustruct":uP,"../../lessons/diagramme/uebergabe-leeren.visustruct":mP,"../../lessons/diagramme/uebergabe-verdopple.visustruct":cP,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":dP,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":hP,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":gP,"../../lessons/diagramme/vb-ampel-loesung.visustruct":pP,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":fP,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":xP,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":bP,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":vP,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":yP,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":wP,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":zP,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":IP,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":kP,"../../lessons/diagramme/vb-einparken-loesung.visustruct":SP,"../../lessons/diagramme/vb-farben-loesung.visustruct":_P,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":TP,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":OP,"../../lessons/diagramme/vb-gerade-loesung.visustruct":AP,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":PP,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":jP,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":CP,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":BP,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":DP,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":ZP,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":MP,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":LP,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":WP,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":EP,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":NP,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":FP,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":JP,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":RP,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":GP,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":HP,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":VP,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":QP,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":qP,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":UP,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":$P,"../../lessons/diagramme/vb-melodie-loesung.visustruct":YP,"../../lessons/diagramme/vb-morsen-loesung.visustruct":XP,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":KP,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":ej,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":tj,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":nj,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":ij,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":aj,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":sj,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":rj,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":oj,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":lj,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":uj,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":mj,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":cj,"../../lessons/diagramme/vb-rand-loesung.visustruct":dj,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":hj,"../../lessons/diagramme/vb-slalom-loesung.visustruct":gj,"../../lessons/diagramme/vb-spirale-loesung.visustruct":pj,"../../lessons/diagramme/vb-start-a-loesung.visustruct":fj,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":xj,"../../lessons/diagramme/vb-treppe-loesung.visustruct":bj,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":vj,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":yj,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":wj,"../../lessons/diagramme/vb-wald-loesung.visustruct":zj,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":Ij,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":kj,"../../lessons/diagramme/zk-initialen-loesung.visustruct":Sj,"../../lessons/diagramme/zk-mehr.visustruct":_j,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":Tj,"../../lessons/diagramme/zk-split.visustruct":Oj,"../../lessons/diagramme/zk-woerter-loesung.visustruct":Aj,"../../lessons/diagramme/zk-zaehlen.visustruct":Pj,"../../lessons/diagramme/zk-zeichen.visustruct":jj}),$B=Object.assign({"../../lessons/welten/ausgang-1.txt":Cj,"../../lessons/welten/ausgang-2.txt":Bj,"../../lessons/welten/ecke.txt":Dj,"../../lessons/welten/farbe-1.txt":Zj,"../../lessons/welten/farbe-2.txt":Mj,"../../lessons/welten/farbe-3.txt":Lj,"../../lessons/welten/farbe-4.txt":Wj,"../../lessons/welten/hindernis-1.txt":Ej,"../../lessons/welten/hindernis-2.txt":Nj,"../../lessons/welten/labyrinth-1.txt":Fj,"../../lessons/welten/labyrinth-2.txt":Jj,"../../lessons/welten/linie-1.txt":Rj,"../../lessons/welten/linie-2.txt":Gj,"../../lessons/welten/linie-rot-1.txt":Hj,"../../lessons/welten/linie-rot-2.txt":Vj,"../../lessons/welten/parken-1.txt":Qj,"../../lessons/welten/parken-2.txt":qj,"../../lessons/welten/rand-1.txt":Uj,"../../lessons/welten/rand-2.txt":$j,"../../lessons/welten/slalom.txt":Yj,"../../lessons/welten/tunnel-1.txt":Xj,"../../lessons/welten/tunnel-2.txt":Kj,"../../lessons/welten/wald-1.txt":eC,"../../lessons/welten/wald-2.txt":tC,"../../lessons/welten/wand-frei.txt":nC,"../../lessons/welten/wand-kurz.txt":iC,"../../lessons/welten/wand-lang.txt":aC,"../../lessons/welten/wand-mittel.txt":sC,"../../lessons/welten/wand-nah.txt":rC,"../../lessons/welten/zeit-1.txt":oC,"../../lessons/welten/ziel-kurz.txt":lC,"../../lessons/welten/ziel-lang.txt":uC}),YB=Object.assign({"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":mC,"../../lessons/bilder/ben-shneiderman.jpg":cC,"../../lessons/bilder/caesar-ascii.svg":dC,"../../lessons/bilder/caesar-scheibe.svg":hC,"../../lessons/bilder/caesar-verschiebung.svg":gC,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":pC,"../../lessons/bilder/en/kino-saal.svg":fC,"../../lessons/bilder/en/kino-schleifen.svg":xC,"../../lessons/bilder/en/l01-pap.svg":bC,"../../lessons/bilder/en/l02-einfuegen.svg":vC,"../../lessons/bilder/en/l04-variable.svg":yC,"../../lessons/bilder/en/l04-zuweisung.svg":wC,"../../lessons/bilder/en/l05-tauschen.svg":zC,"../../lessons/bilder/en/l08-zahlenstrahl.svg":IC,"../../lessons/bilder/en/l10-kopfgesteuert.svg":kC,"../../lessons/bilder/en/l11-vergleich.svg":SC,"../../lessons/bilder/en/l12-for-ablauf.svg":_C,"../../lessons/bilder/en/l14-array.svg":TC,"../../lessons/bilder/en/mvc-klick.svg":OC,"../../lessons/bilder/en/ss-binaere-suche.svg":AC,"../../lessons/bilder/en/ss-bubblesort.svg":PC,"../../lessons/bilder/en/ss-lineare-suche.svg":jC,"../../lessons/bilder/en/ss-vergleiche.svg":CC,"../../lessons/bilder/en/uebergabe.svg":BC,"../../lessons/bilder/en/zk-zeichen.svg":DC,"../../lessons/bilder/ike-nassi.jpg":ZC,"../../lessons/bilder/kino-saal.svg":MC,"../../lessons/bilder/kino-schleifen.svg":LC,"../../lessons/bilder/l01-pap.svg":WC,"../../lessons/bilder/l02-einfuegen.svg":EC,"../../lessons/bilder/l04-variable.svg":NC,"../../lessons/bilder/l04-zuweisung.svg":FC,"../../lessons/bilder/l05-tauschen.svg":JC,"../../lessons/bilder/l08-zahlenstrahl.svg":RC,"../../lessons/bilder/l09-wahrheitstabelle.svg":GC,"../../lessons/bilder/l10-kopfgesteuert.svg":HC,"../../lessons/bilder/l11-vergleich.svg":VC,"../../lessons/bilder/l12-for-ablauf.svg":QC,"../../lessons/bilder/l14-array.svg":qC,"../../lessons/bilder/mvc-klick.svg":UC,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":$C,"../../lessons/bilder/pt/kino-saal.svg":YC,"../../lessons/bilder/pt/kino-schleifen.svg":XC,"../../lessons/bilder/pt/l01-pap.svg":KC,"../../lessons/bilder/pt/l02-einfuegen.svg":eB,"../../lessons/bilder/pt/l04-variable.svg":tB,"../../lessons/bilder/pt/l04-zuweisung.svg":nB,"../../lessons/bilder/pt/l05-tauschen.svg":iB,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":aB,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":sB,"../../lessons/bilder/pt/l11-vergleich.svg":rB,"../../lessons/bilder/pt/l12-for-ablauf.svg":oB,"../../lessons/bilder/pt/l14-array.svg":lB,"../../lessons/bilder/pt/mvc-klick.svg":uB,"../../lessons/bilder/pt/schiffe-versenken.svg":mB,"../../lessons/bilder/pt/ss-binaere-suche.svg":cB,"../../lessons/bilder/pt/ss-bubblesort.svg":dB,"../../lessons/bilder/pt/ss-lineare-suche.svg":hB,"../../lessons/bilder/pt/ss-vergleiche.svg":gB,"../../lessons/bilder/pt/uebergabe.svg":pB,"../../lessons/bilder/pt/zk-zeichen.svg":fB,"../../lessons/bilder/schiffe-versenken.svg":xB,"../../lessons/bilder/ss-binaere-suche.svg":bB,"../../lessons/bilder/ss-bubblesort.svg":vB,"../../lessons/bilder/ss-lineare-suche.svg":yB,"../../lessons/bilder/ss-vergleiche.svg":wB,"../../lessons/bilder/uebergabe.svg":zB,"../../lessons/bilder/zk-zeichen.svg":IB}),Jh=i=>i.replace(/^.*\//,"");function F1(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])=>[Jh(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Mu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let w1="en",Ot=[],Tn=[],Ma="",La=[],ds="off";function Lu(i){i!==ds&&(ds=i,Ot=[],hs(w1))}function hs(i){var s,r,o;if(e3(i),i===w1&&Ot.length>0)return;w1=i;const e=F1(VB,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>GB(Nu(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=HB(Nu(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=F1(QB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ds==="on"){const l=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=XB(Eu(e),Eu(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=F1(qB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Tn=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),Tn=n(a,"aufgaben/");Tn.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)),...Tn.flatMap(u=>u.blocks)])l.kind==="textFile"&&m3(l.name,l.content);if(Ma=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ds!=="off"){const l=(r=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ma=`${Ma.trimEnd()}
${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const Wu={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},Eu=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(Wu[o])?Wu[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 Nu(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}hs("en");function Rh(i,e){return w1==="de"?i.get(e)??i.get(`en/${e}`):(w1==="en"?void 0:i.get(`${w1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Gh=(i,e)=>i.slice(i.indexOf(e)+e.length),KB=new Map(Object.entries(UB).map(([i,e])=>[Gh(i,"/diagramme/"),e]));function X1(i){const e=Rh(KB,i);return e===void 0?void 0:Bl(e)}const eD=new Map(Object.entries(YB).map(([i,e])=>[Gh(i,"/bilder/"),e]));function Fu(i){return Rh(eD,i)}const tD=new Map(Object.entries($B).map(([i,e])=>[Jh(i).replace(/\.txt$/,""),e])),Ju=new Map;function Wa(i){const e=tD.get(i);if(e===void 0)return;let t=Ju.get(i);return t||Ju.set(i,t=Ox(e)),t}const Hh=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Re(i){const e=[];let t=Hh(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 kn(i){const e=[],t=i.replace(/\r\n/g,`
`).split(`
@@ -60286,7 +60286,7 @@ ${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const
`))}`);continue}const r=[];for(;n|\||\s*([-*]|\d+\.)\s+)/.test(t[n]);)r.push(t[n++].trim());e.push(`
`;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(qh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`
`;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(qh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`