code-playpad 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,13 +3,13 @@
3
3
  [![npm](https://img.shields.io/npm/v/code-playpad)](https://www.npmjs.com/package/code-playpad) [![license](https://img.shields.io/npm/l/code-playpad)](./LICENSE)
4
4
 
5
5
  Runnable code in any web page. A CodeMirror editor that **executes what it
6
- shows** — Python, JavaScript and TypeScript — entirely in the reader's browser.
7
- No backend, no iframe, no sign-up.
6
+ shows** — Python, JavaScript, TypeScript and a documented subset of Java —
7
+ entirely in the reader's browser. No backend, no iframe, no sign-up.
8
8
 
9
9
  **[Live demo →](https://code-playpad.swengr.com)**
10
10
 
11
11
  ```html
12
- <script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.2.1"></script>
12
+ <script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.3.1/dist/standalone.js"></script>
13
13
 
14
14
  <code-playpad height="auto">
15
15
  print("hello from a static page")
@@ -27,9 +27,10 @@ No backend, no iframe, no sign-up.
27
27
 
28
28
  | `language` | Runtime | Downloaded at runtime |
29
29
  | --- | --- | --- |
30
- | `python` (default) | Python 3.14 via Pyodide — full standard library, `input()`, real tracebacks, `numpy` on demand | ~11 MB, once, cached |
30
+ | `python` (default) | Python 3.14 via Pyodide — full standard library, `input()`, real tracebacks, `numpy` on demand | ~6 MB (13.5 MB unpacked), once, cached |
31
31
  | `javascript` | The browser's own engine, in a Worker | nothing |
32
- | `typescript` | Same engine, types stripped before running | ~50 KB, once, cached |
32
+ | `typescript` | Same engine, types stripped before running | ~70 KB, once, cached |
33
+ | `java` | A documented subset of Java 25, compiled and interpreted in a Worker by an engine built for this package — see [Java](#java) | nothing: the engine is a ~27 KB (gzipped) chunk of this package, loaded with the first Java widget |
33
34
 
34
35
  ```html
35
36
  <code-playpad height="auto">print("python is the default")</code-playpad>
@@ -49,23 +50,91 @@ No backend, no iframe, no sign-up.
49
50
 
50
51
  A trailing expression prints its value, like a REPL. Each language loads **only
51
52
  on pages that use it**: a Python-only page never downloads a byte of the
52
- JavaScript runtime, and a JavaScript-only page never touches Pyodide's 11 MB.
53
+ JavaScript runtime, and a JavaScript-only page never touches Pyodide's ~6 MB.
53
54
 
54
55
  TypeScript here erases types, it does not check them — a type error will not
55
56
  stop your code running. This is a playground, not `tsc`.
56
57
 
58
+ ### Java
59
+
60
+ ```html
61
+ <code-playpad language="java" height="auto">
62
+ int visits = 0;
63
+
64
+ void main() {
65
+ greet("Ada");
66
+ IO.println("greeted " + visits + " people");
67
+ }
68
+
69
+ void greet(String name) {
70
+ visits++;
71
+ IO.println("Hello, " + name + "!");
72
+ }
73
+ </code-playpad>
74
+ ```
75
+
76
+ Java runs on an engine written for code-playpad, not on a JVM. It covers a
77
+ documented subset of Java 25 and checks its behaviour against a real JDK 25:
78
+
79
+ - Java 25 **compact source files** and instance `main`, or a classic
80
+ `public class Main` with `public static void main(String[] args)`
81
+ - `int`, `char`, `boolean`, `String`; one-dimensional arrays; static and
82
+ instance methods with overloading and recursion; fields; `if`/`while`/`for`,
83
+ `break`/`continue`/`return`; `String.length()`/`charAt()`/`equals()`;
84
+ `System.out`/`System.err` and `IO.print`/`IO.println`
85
+ - **Errors read like the JDK's**: compile errors in javac's format, exceptions
86
+ with Java stack traces and the JDK's NullPointerException messages
87
+
88
+ Anything outside the subset — `long`/`double`, `?:`, `switch`, objects and
89
+ constructors, collections, `Scanner`, imports — is reported as *not supported in
90
+ this version* rather than run with a different meaning. The file is `Main.java`
91
+ unless `entry` says otherwise. The engine stops runaway programs after 200
92
+ million steps and explains why.
93
+
94
+ ## Download size
95
+
96
+ What a page downloads once a reader presses Run, with the CDN build. Measured by
97
+ loading one-widget pages in a browser and gzipping each file the page fetched;
98
+ CDN downloads are what the CDN actually sent.
99
+
100
+ | Page uses | code-playpad (gzip) | Also fetched from a CDN at run time | 0.2.1 (gzip) |
101
+ | --- | --- | --- | --- |
102
+ | Python | **165.8 KB** | Pyodide, about **6.0 MB** (a 3.3 MB wasm file and a 2.4 MB standard library) | 165.2 KB |
103
+ | JavaScript | **179.9 KB** | nothing | 180.5 KB |
104
+ | TypeScript | **179.9 KB** | Sucrase, 72 KB (≈ 252 KB in total) | ≈ 252.6 KB |
105
+ | Java | **189.7 KB** | nothing | n/a |
106
+ | All four | 247.2 KB | Pyodide and Sucrase | n/a |
107
+
108
+ - **A shared base of 144 KB is in every row:** the editor (CodeMirror) and the
109
+ widget, the same as 0.2.1 within 0.6 KB.
110
+ - **Each language adds:** Python 21.7 KB; JavaScript/TypeScript 35.8 KB; Java
111
+ 45.6 KB, which is the 26.5 KB engine plus 19 KB of Java syntax highlighting.
112
+ - **Languages load lazily.** A Java page never fetches the Python or JavaScript
113
+ runtimes, and Python and JavaScript pages never fetch Java, so adding Java left
114
+ Python-only and JavaScript-only pages the same size as in 0.2.1.
115
+ - **Java is the lightest to run:** it is self-contained, while Python's first run
116
+ is dominated by the roughly 6 MB Pyodide download (cached after that).
117
+ - **With npm and a bundler** you already ship CodeMirror yourself. code-playpad's
118
+ own code then costs about 9 KB, plus the runtime chunk for each language used;
119
+ Java's is 27 KB, plus `@codemirror/lang-java` if you install it.
120
+
57
121
  ## Install
58
122
 
59
123
  ### From a CDN — nothing to install
60
124
 
61
125
  ```html
62
- <script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.2.1"></script>
126
+ <script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.3.1/dist/standalone.js"></script>
63
127
  ```
64
128
 
65
129
  This is the `standalone` build: CodeMirror is bundled in, so a static blog post
66
130
  or a Markdown-rendered page needs only that one tag. Pin the version — an
67
131
  unpinned URL follows `latest` and will change under your readers.
68
132
 
133
+ The full path to `dist/standalone.js` works with every version. The short form,
134
+ `https://cdn.jsdelivr.net/npm/code-playpad@0.3.1`, works from 0.3.1 on; with
135
+ 0.3.0 and earlier it leaves the widgets as plain text, so use the full path for
136
+ those.
137
+
69
138
  ### From npm, with a bundler
70
139
 
71
140
  ```bash
@@ -76,8 +145,8 @@ npm install code-playpad @codemirror/state @codemirror/view @codemirror/commands
76
145
  CodeMirror is a peer dependency so you never end up with two copies of
77
146
  `@codemirror/state`. Language grammars are **optional** — install only what you
78
147
  use (`@codemirror/lang-python`, `@codemirror/lang-javascript`,
79
- `@codemirror/lang-json`); a missing one degrades to plain text rather than
80
- throwing.
148
+ `@codemirror/lang-json`, `@codemirror/lang-java`); a missing one degrades to
149
+ plain text rather than throwing.
81
150
 
82
151
  ```js
83
152
  import 'code-playpad/element'; // registers <code-playpad>
@@ -107,7 +176,7 @@ Next.js, Astro and SvelteKit need no dynamic import or `client:only` guard.
107
176
 
108
177
  | | |
109
178
  | --- | --- |
110
- | `language` | `python` (default), `javascript`, `typescript` |
179
+ | `language` | `python` (default), `javascript`, `typescript`, `java` |
111
180
  | `height` | number (px), any CSS length, or `auto` |
112
181
  | `min-height` / `max-height` | bounds for `auto` |
113
182
  | `theme` | `light`, `dark`, or `auto` (default — follows the OS) |
@@ -266,6 +335,8 @@ document.querySelector('code-playpad').stdin = 'Ada\n36';
266
335
  Echoed input is display-only: `stdout` stays exactly what the program printed,
267
336
  so graders are unaffected.
268
337
 
338
+ Java does not read input yet; `Scanner` over the input box is planned.
339
+
269
340
  ## Controlling it from JavaScript
270
341
 
271
342
  ```js
@@ -275,7 +346,7 @@ pad.code = 'print("set from outside")'; // replace the visible file
275
346
  const source = pad.getCode(); // read it back
276
347
  const result = await pad.run(); // { stdout, stderr?, value?, durationMs }
277
348
  pad.reset(); // back to the snippet the page shipped
278
- pad.stop(); // kill a runaway program
349
+ pad.stop(); // stop this widget's run, queued or running
279
350
  await pad.prewarm(); // boot the runtime before the reader runs anything
280
351
  ```
281
352
 
@@ -292,7 +363,7 @@ const everything = pad.getFiles(); // { name: contents }
292
363
  ```
293
364
 
294
365
  `prewarm()` is worth calling when you know the reader is about to run something
295
- — on a lesson page, for instance — so the ~11 MB Python download starts before
366
+ — on a lesson page, for instance — so the ~6 MB Python download starts before
296
367
  they press Run rather than after.
297
368
 
298
369
  ## Events and grading
@@ -535,6 +606,8 @@ warms every other page on the site.
535
606
  single-threaded, so a second widget waits for the first.
536
607
  - **Runaway code cannot freeze the page.** Code runs in a Worker; **Stop**
537
608
  terminates and reboots it. Runs queued behind the stopped one survive.
609
+ Stopping a widget that is still `Queued…` just takes it out of the queue —
610
+ whatever is running keeps running.
538
611
  - **A program waiting on `input()` holds the shared runtime.** Other widgets
539
612
  show `Queued…` until it finishes or is stopped.
540
613
  - **Nothing boots on page load.** An IntersectionObserver starts a runtime as a
@@ -549,7 +622,50 @@ warms every other page on the site.
549
622
  ## Version history
550
623
 
551
624
  No breaking changes so far: markup and API written against 0.1.3 still work on
552
- 0.2.1.
625
+ 0.3.1.
626
+
627
+ ### 0.3.1
628
+
629
+ - **Fixed:** the short jsDelivr URL (`https://cdn.jsdelivr.net/npm/code-playpad@0.3.0`)
630
+ left every widget as plain text. jsDelivr serves the CDN build at that URL
631
+ without redirecting, so its relative imports (`./config-….js`) resolved
632
+ against `/npm/` and failed with 404. Broken in every earlier version; the full path
633
+ (`…/dist/standalone.js`) always worked. The short URL now serves a one-line
634
+ entry that loads `dist/standalone.js` of the same version by absolute URL,
635
+ with every export. The documented snippets now use the full path.
636
+
637
+ ### 0.3.0
638
+
639
+ - **`language="java"`**: a documented subset of Java 25 — see [Java](#java).
640
+ The engine is a ~27 KB (gzipped) chunk loaded only by pages with a Java
641
+ widget; Python and JavaScript pages download the same as in 0.2.1 (see
642
+ [Download size](#download-size)). `@codemirror/lang-java` is a new optional
643
+ peer dependency for its highlighting.
644
+ - **Fixed:** in JavaScript, a top-level `await` inside an expression
645
+ (`Number(await input())`) failed with `SyntaxError: missing ) after argument
646
+ list`; it only worked when the first `await` started a statement.
647
+ - A hint about something other than input (a runaway loop, say) no longer opens
648
+ the standard-input box; only "input() asked for a line…" does.
649
+
650
+ 0.2.2 was never published; its fixes ship in 0.3.0:
651
+
652
+ - **Fixed:** pressing **Stop** on a widget still showing `Queued…` stopped a
653
+ *different* widget — whichever one was running — and the queued run then
654
+ went ahead anyway. Stop now cancels only the widget's own run: a queued run is
655
+ dropped without touching the worker, and only a run that is actually
656
+ executing kills and reboots it. `pad.stop()` on an idle widget no longer
657
+ affects anyone else.
658
+ - **Fixed:** stopping a run while the runtime was rebooting from an earlier
659
+ Stop could wedge the queue — every later run sat at `Queued…` forever.
660
+ - `Runtime.stop()` takes an optional argument: the promise `run()` returned,
661
+ to stop just that run. With no argument it behaves as before.
662
+ - **Fixed:** a line printed just before an infinite loop (`print("started")`
663
+ then `while True: pass`) never appeared — output batching held it back, and
664
+ the loop never let the worker send it. The first lines of any burst are now
665
+ sent immediately, in Python and JavaScript; large outputs are still batched.
666
+ - The JavaScript/TypeScript worker is now minified in `dist/` like the Python
667
+ one; it previously shipped as readable source, comments included. The
668
+ `javascript` chunk drops from about 12KB to about 7KB.
553
669
 
554
670
  ### 0.2.1
555
671
 
@@ -597,3 +713,8 @@ it, modify it. Bundled third-party components (CodeMirror 6, Lezer) remain under
597
713
  their own MIT licences, reproduced in full in `dist/THIRD-PARTY-NOTICES.txt`.
598
714
  Pyodide (MPL-2.0) is fetched from a CDN at runtime and is not redistributed by
599
715
  this package.
716
+
717
+ The Java engine is original code under the same MIT licence. Java is a trademark
718
+ of Oracle and/or its affiliates; code-playpad is not affiliated with, endorsed
719
+ by, or certified by Oracle, and its Java support is a documented subset, not a
720
+ Java implementation.
@@ -53,6 +53,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53
53
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
54
54
  THE SOFTWARE.
55
55
 
56
+ ==============================================================================
57
+ @codemirror/lang-java 6.0.2 — MIT
58
+
59
+ MIT License
60
+
61
+ Copyright (C) 2018-2021 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
62
+
63
+ Permission is hereby granted, free of charge, to any person obtaining a copy
64
+ of this software and associated documentation files (the "Software"), to deal
65
+ in the Software without restriction, including without limitation the rights
66
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
67
+ copies of the Software, and to permit persons to whom the Software is
68
+ furnished to do so, subject to the following conditions:
69
+
70
+ The above copyright notice and this permission notice shall be included in
71
+ all copies or substantial portions of the Software.
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
74
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
75
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
76
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
77
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
78
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
79
+ THE SOFTWARE.
80
+
56
81
  ==============================================================================
57
82
  @codemirror/lang-javascript 6.2.5 — MIT
58
83
 
@@ -278,6 +303,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
278
303
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
279
304
  THE SOFTWARE.
280
305
 
306
+ ==============================================================================
307
+ @lezer/java 1.1.5 — MIT
308
+
309
+ MIT License
310
+
311
+ Copyright (C) 2020 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
312
+
313
+ Permission is hereby granted, free of charge, to any person obtaining a copy
314
+ of this software and associated documentation files (the "Software"), to deal
315
+ in the Software without restriction, including without limitation the rights
316
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
317
+ copies of the Software, and to permit persons to whom the Software is
318
+ furnished to do so, subject to the following conditions:
319
+
320
+ The above copyright notice and this permission notice shall be included in
321
+ all copies or substantial portions of the Software.
322
+
323
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
324
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
325
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
326
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
327
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
328
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
329
+ THE SOFTWARE.
330
+
281
331
  ==============================================================================
282
332
  @lezer/javascript 1.5.4 — MIT
283
333
 
package/dist/cdn.js ADDED
@@ -0,0 +1,2 @@
1
+ /*! code-playpad 0.3.1: CDN entry, loads dist/standalone.js of this exact version */
2
+ export * from "https://cdn.jsdelivr.net/npm/code-playpad@0.3.1/dist/standalone.js";
@@ -1 +1,6 @@
1
+ /*!
2
+ * code-playpad — MIT © 2026 Seung Hun Lee
3
+ * Bundles CodeMirror 6 and Lezer (MIT) © Marijn Haverbeke and others.
4
+ * Full third-party licences: THIRD-PARTY-NOTICES.txt in this package.
5
+ */
1
6
  var e=`314.0.5`,t=`https://cdn.jsdelivr.net/pyodide/v${e}/full/`,n=`https://esm.sh/sucrase@3.35.1?bundle`;function r(e){t=e.indexURL.endsWith(`/`)?e.indexURL:e.indexURL+`/`}function i(e){n=e.sucraseURL}function a(){return t}function o(){return n}function s(){return[{url:t+`pyodide.js`,as:`script`},{url:t+`pyodide.asm.wasm`,as:`fetch`},{url:t+`python_stdlib.zip`,as:`fetch`}]}export{o as a,a as i,r as n,s as o,i as r,e as t};
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * code-playpad — MIT © 2026 Seung Hun Lee
3
+ * Bundles CodeMirror 6 and Lezer (MIT) © Marijn Haverbeke and others.
4
+ * Full third-party licences: THIRD-PARTY-NOTICES.txt in this package.
5
+ */
6
+ import{LRLanguage as e,LanguageSupport as t,continuedIndent as n,delimitedIndent as r,flatIndent as i,foldInside as a,foldNodeProp as o,indentNodeProp as s,n as c,t as l}from"./dist-D0FPZcUi.js";import{r as u}from"./dist-B5vq9x6M.js";var d=l({null:c.null,instanceof:c.operatorKeyword,this:c.self,"new super assert open to with void":c.keyword,"class interface extends implements enum var":c.definitionKeyword,"module package import":c.moduleKeyword,"switch while for if else case default do break continue return try catch finally throw":c.controlKeyword,"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws":c.modifier,IntegerLiteral:c.integer,FloatingPointLiteral:c.float,"StringLiteral TextBlock":c.string,CharacterLiteral:c.character,LineComment:c.lineComment,BlockComment:c.blockComment,BooleanLiteral:c.bool,PrimitiveType:c.standard(c.typeName),TypeName:c.typeName,Identifier:c.variableName,"MethodName/Identifier":c.function(c.variableName),Definition:c.definition(c.variableName),ArithOp:c.arithmeticOperator,LogicOp:c.logicOperator,BitOp:c.bitwiseOperator,CompareOp:c.compareOperator,AssignOp:c.definitionOperator,UpdateOp:c.updateOperator,Asterisk:c.punctuation,Label:c.labelName,"( )":c.paren,"[ ]":c.squareBracket,"{ }":c.brace,".":c.derefOperator,", ;":c.separator}),f={__proto__:null,void:34,byte:36,short:36,int:36,long:36,char:36,float:36,double:36,boolean:36,extends:50,super:52,this:64,public:70,protected:72,private:74,abstract:76,static:78,final:80,strictfp:82,default:84,synchronized:86,native:88,transient:90,volatile:92,sealed:95,non:97,instanceof:140,true:158,false:158,null:166,class:170,new:176,throws:196,implements:204,permits:211,record:215,interface:226,enum:236,open:289,module:291,requires:296,transitive:298,exports:300,to:302,opens:304,uses:306,provides:308,with:310,package:314,import:318,if:330,else:332,while:336,for:340,var:347,assert:354,switch:358,case:366,throw:370,do:374,break:378,continue:382,return:386,try:392,catch:396,finally:404},p=u.deserialize({version:14,states:"#5QQ]QPOOQ%QQPOOO(wQQO'#HlO+OQQO'#CbOOQO'#Cb'#CbO+VQPO'#CaOOQO'#Co'#CoO,{QPO'#DOO-iQQO'#HvOOQO'#Hv'#HvO0^QQO'#HqO0eQQO'#HqOOQO'#Hq'#HqOOQO'#Hp'#HpOOQO'#Hz'#HzO0lQPO'#GwO2`QPO'#DOO2gQPO'#CkO4vQPO'#DfO4}QPO'#CiO6ZQQO'#FsO6bQPO'#DyO7rOSO'#EQOOQO'#IW'#IWO+VQPO'#EzO8iQPO'#EzOOQO'#EV'#EVO:QQQO'#ITO<OQQO'#FUO<iQPO'#FTO<nQPO'#FVOOQO'#IV'#IVO6bQPO'#FYOOQO'#IT'#ITOOQO'#Ho'#HoOOQO'#Hh'#HhOOQO'#Gt'#GtOOQO'#Hg'#HgO<sQPO'#FtOOQO'#Hf'#HfOOQO'#Gs'#GsQ]QPOOO<xQWO'#H{O>nQPO'#HzO>uQPO'#EcO>uQPO'#EjO>uQPO'#EuO>uQPO'#EpO>}QPO'#I[O?cQQO'#FRO+VQPO'#C`O?kQPO'#C`O+VQPO'#FnO?pQPO'#FpO@OQPO'#FvO@OQPO'#FyO>uQPO'#GOO@TQPO'#F{O6bQPO'#GSO6bQPO'#G[O@OQPO'#GUO]QPO'#G^O@YQPO'#G`O@eQPO'#GbO@pQPO'#GdO@wQPO'#GgOAeQQO'#CjOBTQQO'#CjOB_QPO'#I`OCzQPO'#DOODbQPO'#E]OBbQPO'#E^OESQPO'#I`OEeQPO'#E]OEmQPO'#IhOErQPO'#FOOOQO'#I^'#I^OOQO'#G}'#G}Q%QQPOOOGhQPO'#HzOOQO'#Hl'#HlOHZQQO,58{OOQO'#Hj'#HjOOQO'#Hr'#HrOJtQPO,59_OLSQPO,59jOOQO-E:r-E:rO+VQPO,58zOLyQPO,58zO+VQPO,5<YOOQO'#Cj'#CjOMOQPO'#CzOMTQPO'#CzOOQO'#Gv'#GvONTQQO,59dO! xQPO'#H}O!!SQPO'#D`O!!bQPO'#I_O!!jQPO,5<jO!!oQPO,5:nO!#YQPO'#CrOOQO,59],59]O!#aQPO,59[O!#lQPO,5=cOOQO-E:u-E:uO!%`QQO'#HlO!'bQQO'#CbO!)dQPO'#DOO!*YQQO'#HvO!*jQPO'#C}O!*xQPO'#HyO!+QQPO,59VO!+VQPO,59VO!+mQPO'#IRO!+xQPO,5:PO!+}QQO,5:pO!,UQPO,5;wOOQO,5:Q,5:QO!,aQPO,5:QO!,hQPO,59TOOQO'#Dj'#DjOOQO'#Dm'#DmO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:bOOQO,5:e,5:eOOQO,5<_,5<_O!,oQPO,5:_O6bQPO,5;xO!-SQPO'#CsO!-eQQO'#HvOOOO'#G{'#G{O!-sOSO,5:lOOQO,5:l,5:lO!-{QPO,5;fOB_QPO,5<jO+VQPO,5;fO>uQPO,5:}O>uQPO,5;UO>uQPO,5;aO>uQPO,5;[O>uQPO,5<jO!.cQPO,5:qO6bQPO,5;nO!.jQPO,5;qO!.xQPO'#EXOOQO,5;o,5;oO!/PQQO,5;tO]QPO,5<`OOQO-E:q-E:qO!0mQPO,5>gO6bQPO'#EUO@zQPO,5=QO!0rQPO,5:}O!1TQPO,5;UO!1]QPO,5;aO!1eQPO,5;[O!-SQPO,5>vO!1sQPO,5>vO!-SQPO,5>vO!2OQPO,5;mO!2aQQO,58zO!2iQQO,5<YO!2qQQO,5<[O+VQPO,5<[O+VQPO,5<[O]QPO,5<bO]QPO,5<eO!2yQPO'#F}O]QPO,5<gO]QPO,5<lO!4PQQO,5<nO!4ZQQO,5<vO!4bQPO,5<pO!4gQPO,5<xOOQO'#Fu'#FuOOQO,5<z,5<zO!4lQPO,5<zOOQO,5<|,5<|O!4qQPO,5<|O!4vQQO,5=OOOQO,5=O,5=OO!4}QPO'#GpO!6TQPO,5=RO@zQPO,5=ZO!:_QPO,59dO!:oQPO'#H}O!:vQPO,5:vO!:{QPO,5>zOB_QPO,5:vO!;WQPO,5:wOErQPO,5;jO!;`QPO'#E_OBbQPO'#E_O!;kQPO'#IaO!;sQPO,5:xOB_QPO,5>zO!-SQPO,5>zOEmQPO,5?SOOQO,5:w,5:wO!+VQPO'#CkOOQO,5?S,5?SO!?pQPO'#FPOOQO,5;j,5;jO!?wQPO,5;jO!-SQPO'#EaOOQO-E:{-E:{OOQO,5;i,5;iO+VQPO,58}O!?|QPO'#ChOOQO1G.k1G.kO!2aQQO1G.fO+VQPO1G.fO!@WQQO1G1tOOQO,59f,59fO!@`QPO,59fOOQO-E:t-E:tO!@eQPO,5>iO!@|QPO,59zO>uQPO'#HOO!ATQPO,5>yOOQO1G2U1G2UOOQO1G0Y1G0YO!AnQPO'#CsO!B^QPO'#HvO!BkQPO'#CtO!ByQPO'#HuO!CRQPO,59^OOQO1G.v1G.vO!#aQPO1G.vO!CiQPO,59_O!CvQQO'#HlO!DXQQO'#CbO!DjQPO,59yOOQO,59i,59iO>uQPO,59yOOQO,59W,59WO!DuQQO,59WO!DzQPO,59iO!,oQPO'#GyO!E]QPO,5>eOOQO1G.q1G.qO!EeQPO'#C}O!EvQPO1G.qO>uQPO'#GzO!E{QPO,5>mOOQO1G/k1G/kOOQO1G0[1G0[O!-SQPO'#HPO!FTQPO1G1cO6bQPO1G1cOOQO1G/l1G/lO!F]QQO1G.oOOQO1G.o1G.oO!HZQQO1G/mO!IxQQO1G/mO!KgQQO1G/mO!KnQQO1G/mO!KuQQO1G/mO!MdQQO1G/mO!MkQQO1G/mO# YQQO1G/mO# aQQO1G/mO# kQQO1G/mO# rQQO1G/|O!)dQPO'#DOO# yQQO'#HvO!*jQPO'#DuOOQO1G/y1G/yO##`QQO1G1dOOOO-E:y-E:yOOQO1G0W1G0WO##vQPO'#E{OOQO1G1Q1G1QO#$jQPO1G2UO!-{QPO1G1QO!0rQPO1G0iO!1TQPO1G0pO!1]QPO1G0{O!1eQPO1G0vOOQO1G0]1G0]O#$oQQO1G1XO<iQPO1G1ZO+VQPO1G1ZO>}QPO'#I[OOQO1G1X1G1XO#&iQQO1G1XO#&qQQO1G1YOOQO1G1]1G1]O#&xQPO1G1]O#'TQQO'#I]O#'bQPO,5:sOOQO1G1z1G1zOOQO1G4R1G4ROOQO1G2l1G2lO#'gQPO'#EYO!-SQPO'#EdO!-SQPO'#EeO!-SQPO'#EhOOQO1G0i1G0iO#'nQPO1G0iO#'sQPO1G0iO#'{QPO1G0iO#(WQPO1G0iO#(fQPO'#ElO#(|QPO1G0pO#)UQPO1G0pO#)ZQPO'#EwOOQO1G0{1G0{O#)nQPO1G0{O#)sQPO'#EsO!-SQPO'#ErOOQO1G0v1G0vO#*pQPO1G0vO#*uQPO1G0vO#*}QPO1G0vO!1sQPO1G4bO#+YQPO'#FXO#+aQPO'#FXOOQO'#HX'#HXO#+iQQO1G1^O#-fQQO1G4bO!-SQPO1G4bO<iQPO1G4bO#/`QQO1G1XO#/vQPO'#FdOOQO1G.f1G.fOOQO1G1t1G1tO#/}QPO1G1vOOQO1G1v1G1vO#0YQQO1G1vO#0bQQO1G1vO#0jQPO1G1|OOQO1G2P1G2PO-iQQO,5<mO#4nQPO,5<mO#5PQPO,5<iO#5WQPO,5<iOOQO1G2R1G2ROOQO1G2W1G2WOOQO1G2Y1G2YO6bQPO1G2YOOQO1G2b1G2bO#9TQPO'#GWOOQO1G2[1G2[O@OQPO1G2dOOQO1G2f1G2fOOQO1G2h1G2hOOQO1G2j1G2jO#9[QQO'#HlO#9uQQO'#CbO-iQQO'#HvO#:`QQOOO#:|QQO'#FUO#:kQQO'#IVO!*jQPO'#GqO#;TQPO,5=[OOQO'#H`'#H`O#;]QPO1G2mO#?gQPO'#GiO@zQPO'#GmOOQO1G2m1G2mO#?lQPO1G2uO#CvQPO,5>|OOQO1G0b1G0bOOQO1G4f1G4fO#DXQPO1G0bOOQO1G0c1G0cOOQO1G1U1G1UO!?wQPO1G1UOOQO,5:y,5:yO!-SQPO'#E`O#D^QPO,5:yOBbQPO'#HQO#DiQPO,5>{OOQO1G0d1G0dOEmQPO'#IbO#DqQPO1G4fOB_QPO1G4fOOQO1G4n1G4nO!)tQPO'#C}O!)dQPO'#DOOOQO,5;k,5;kO#D|QPO,5;kO#ETQPO,5;kO#E[QQO'#ITO#EcQQO'#IVO#EjQQO'#FQO#EuQPO'#FQO#E}QPO'#IcOOQO,5:{,5:{OOQO1G.i1G.iO#F]QQO'#HnO#FmQQO'#FUO#HTQPO'#F`OOQO'#Hn'#HnO#H_QPO'#HnO#H|QPO'#IkO#IUQPO,59SOOQO7+$Q7+$QO!2aQQO7+$QOOQO7+'`7+'`OOQO1G/Q1G/QO#IZQPO'#DdO#IeQQO'#IPOOQO'#IP'#IPOOQO1G/f1G/fOOQO,5=j,5=jOOQO-E:|-E:|O#IuQWO,58{O#I|QPO,59`OOQO,59`,59`O!-SQPO'#HxO!!tQPO'#GuO#J[QPO,5>aOOQO1G.x1G.xOOQO7+$b7+$bOOQO1G.r1G.rO#JdQQO1G.rO>uQPO1G/eOOQO1G/e1G/eO#JiQPO1G.rO#JnQPO1G/eOOQO1G/T1G/TOOQO,5=e,5=eOOQO-E:w-E:wOOQO7+$]7+$]OOQO,5=f,5=fOOQO-E:x-E:xOOQO,5=k,5=kOOQO-E:}-E:}O6bQPO7+&}O#JyQQO7+&}O6bQPO7+%hO#LgQQO,59_OOQO,5:a,5:aOB_QPO,5:aO#MvQPO'#EtO#NUQPO'#EtOOQO'#HW'#HWO#NpQPO,5;gOOQO,5;g,5;gOOQO7+'p7+'pOOQO7+&l7+&lOOQO7+&T7+&TO#'nQPO7+&TO#'sQPO7+&TO#'{QPO7+&TO#(WQPO7+&TO#(|QPO7+&[O#)UQPO7+&[OOQO7+&g7+&gO#)nQPO7+&gOOQO7+&b7+&bO#*pQPO7+&bO#*uQPO7+&bO#*}QPO7+&bOOQO7+&u7+&uOOQO'#FU'#FUO<iQPO7+&uO!-SQPO,5>vO<iQPO,5>vO$ dQPO7+&sO$ rQPO7+&wOOQO7+&t7+&tOOQO7+&w7+&wO6bQPO'#G|O$!QQPO,5>wOOQO1G0_1G0_O$!]QPO,5:tOOQO,5:t,5:tOOQO,5;O,5;OOOQO'#Eg'#EgOOQO,5;P,5;POOQO,5;S,5;SO$!dQPO'#EmO!*jQPO'#EmO$!uQPO'#IdO$!}QPO,5;WO$#SQPO'#EnOOQO7+&[7+&[O$#ZQPO7+&[O$#`QPO'#ExO>uQPO'#ExO$#qQPO'#IfO$#|QPO,5;cOB_QPO'#I`O!-SQPO'#I`O$$UQPO'#E]OOQO'#HU'#HUO$$]QPO,5;_OOQO,5;_,5;_OOQO,5;^,5;^O$%YQQO7+&xO$'VQQO7+)|O$)PQQO,5;sOOQO,5;s,5;sO$)WQPO,5;sOOQO-E;V-E;VOOQO7+&x7+&xOOQO7+)|7+)|O<iQPO7+)|OOQO'#H['#H[O$)_QPO,5<OOOQO,5<O,5<OO$)fQPO'#FeO+VQPO'#FeO+VQPO'#FeO+VQPO'#FeO$)tQPO7+'bOOQO7+'b7+'bO$)yQPO7+'bO]QPO7+'hO$*UQPO1G2XOB_QPO1G2XO$*dQQO1G2TO!.xQPO1G2TO$*kQPO1G2TO$*rQQO7+'tO$*yQPO'#H_OOQO'#H_'#H_O$+RQPO,5<rOOQO,5<r,5<rO$+YQPO'#HzO$+dQPO'#GYO$,tQPO7+(OO$,yQPO,5=]OB_QPO,5=]O$-OQPO1G2vO$.XQPO1G2vOOQO1G2v1G2vOOQO-E;^-E;^OOQO7+(X7+(XO!,oQPO'#GkO@zQPO,5=TOOQO,5=X,5=XO$.aQPO7+(aOOQO7+(a7+(aO$2kQPO1G4hOOQO7+%|7+%|OOQO7+&p7+&pO$2|QPO,5:zOOQO1G0e1G0eOOQO,5=l,5=lOOQO-E;O-E;OOOQO7+*Q7+*QO$3XQPO7+*QO!CWQPO,59WOOQO1G1V1G1VO$3dQPO1G1VO$3dQPO1G1VO$3kQPO,5:qO$3rQPO,5;lO<iQPO,5;lO!-SQPO'#HRO$3wQPO,5>}O$4VQPO,5;{O$4^QPO'#IjO$4fQPO,5;zO+VQPO'#HZO$4kQPO,5?VOOQO1G.n1G.nOOQO<<Gl<<GlO$4sQPO'#IQO$4{QPO,5:OOOQO1G.z1G.zOOQO,5>d,5>dOOQO,5=a,5=aOOQO-E:s-E:sO$5QQPO7+$^OOQO7+%P7+%POOQO7+$^7+$^O>uQPO7+%PO$5VQQO<<JiO$7tQQO<<ISOOQO1G/{1G/{O$8sQPO'#HlO$8zQPO'#CbO$9RQPO,5;`O$9WQPO,5;hO#MvQPO,5;`OOQO-E;U-E;UOOQO1G1R1G1ROOQO<<Io<<IoO#'nQPO<<IoO#'sQPO<<IoO#'{QPO<<IoOOQO<<Iv<<IvO$#ZQPO<<IvO#(|QPO<<IvOOQO<<JR<<JROOQO<<I|<<I|O#*pQPO<<I|O#*uQPO<<I|OOQO<<Ja<<JaO$9]QQO<<J_OOQO<<J_<<J_O<iQPO<<JaO+VQPO<<JaOOQO<<Jc<<JcO$;VQPO<<JcO$;bQQO,5=hOOQO-E:z-E:zOOQO1G0`1G0`O$;oQPO,5;XO>uQPO,5;XOOQO,5;X,5;XO$;zQPO,5;XO!,oQPO'#HSO$<]QPO,5?OOOQO1G0r1G0rODbQPO'#E]O$<eQPO'#EoOOQO'#Ie'#IeOOQO'#HT'#HTO$<mQPO,5;YOOQO,5;Y,5;YOOQO,5;d,5;dO$<tQPO,5;dO$=SQPO,5;dO$=eQPO'#HVO$={QPO,5?QO$>WQPO'#EyOOQO1G0}1G0}O$>_QPO1G0}OB_QPO,5;`OOQO-E;S-E;SOOQO1G0y1G0yOOQO<<Jd<<JdOOQO<<Mh<<MhOOQO1G1_1G1_O$>dQQO1G1_O$>kQQO<<MhOOQO-E;Y-E;YOOQO1G1j1G1jO$@eQQO,5<POOQO'#H]'#H]O$)fQPO,5<POOQO'#Il'#IlO$@mQQO,5<PO$AOQQO,5<POOQO<<J|<<J|O$AWQPO<<J|OOQO<<KS<<KSO6bQPO7+'sO$A]QPO7+'sO!.xQPO7+'oO$AkQPO7+'oO$ApQQO7+'oOOQO<<K`<<K`O$AwQPO,5<sOOQO,5=y,5=yOOQO-E;]-E;]OOQO1G2^1G2^O$CYQQO'#IoOOQO,5<t,5<tOOQO<<Kj<<KjO6bQPO1G2wO$CgQPO1G2wOOQO,5=|,5=|OOQO7+(b7+(bO$ClQPO7+(bOOQO-E;`-E;`O$EZQWO'#HqO$DuQWO'#HqO$EbQPO'#GlO>uQPO,5=VO!*jQPO,5=VOOQO1G2o1G2oOOQO<<K{<<K{O$EsQPO1G0fOOQO<<Ml<<MlOOQO7+&q7+&qO$FOQPO7+&qO$FVQPO1G1ZO$FbQQO1G1WOOQO1G1W1G1WO$FmQPO1G1WOOQO,5=m,5=mOOQO-E;P-E;POOQO1G1g1G1gO$FrQPO'#HYO$GPQPO,5?UOOQO1G1f1G1fO$GXQPO'#FaOOQO,5=u,5=uOOQO-E;X-E;XO$G^QPO'#GxO$GkQPO,5>lOOQO1G/j1G/jOOQO<<Gx<<GxOOQO<<Hk<<HkOOQO1G0z1G0zO$GsQPO1G1SO$GxQPO1G0zO$G}QPO1G1SOOQOAN?ZAN?ZO#'nQPOAN?ZO#'sQPOAN?ZOOQOAN?bAN?bO$#ZQPOAN?bOOQOAN?hAN?hO#*pQPOAN?hOOQOAN?{AN?{O<iQPOAN?{OOQOAN?}AN?}O>uQPO1G0sOOQO1G0s1G0sO$HSQPO1G0sOOQO,5=n,5=nOOQO-E;Q-E;QO$<eQPO,5;ZOOQO,5;Z,5;ZOOQO-E;R-E;ROOQO1G0t1G0tOOQO1G1O1G1OO$H_QPO1G1OOOQO,5=q,5=qOOQO-E;T-E;TO$HmQPO,5;eOOQO7+&i7+&iOOQO7+&y7+&yOOQOANCSANCSOOQO1G1k1G1kO$HtQQO1G1kOOQO-E;Z-E;ZO$H|QQO'#ImO$HwQPO1G1kO$@sQPO1G1kO+VQPO1G1kOOQOAN@hAN@hO$IXQQO<<K_O6bQPO<<K_O$I`QPO<<KZOOQO<<KZ<<KZO!.xQPO<<KZOOQO1G2_1G2_O$IeQPO,5?ZO$IpQQO7+(cO6bQPO7+(cOOQO<<K|<<K|P!4}QPO'#HbO!-SQPO'#HaO$IzQPO,5=WO$JVQPO1G2qO>uQPO1G2qOOQO<<J]<<J]O<iQPO7+&rO$J[QPO7+&rOOQO7+&r7+&rOOQO,5=t,5=tOOQO-E;W-E;WOOQO,5=d,5=dOOQO-E:v-E:vO$JaQPO7+&nOOQO7+&f7+&fO$JoQPO7+&nOOQOG24uG24uO#'nQPOG24uOOQOG24|G24|OOQOG25SG25SOOQOG25gG25gOOQO7+&_7+&_O>uQPO7+&_OOQO1G0u1G0uOOQO7+&j7+&jOOQO7+'V7+'VO+VQPO'#H^O$JtQPO,5?XO$J|QPO7+'VO$KRQQO'#InOOQOAN@yAN@yO$K^QQOAN@yOOQOAN@uAN@uO$KeQPOAN@uO$KjQQO<<K}O$KtQPO,5={O!-SQPO,5={OOQO-E;_-E;_OOQO7+(]7+(]O$LVQPO7+(]O$L[QPO<<J^OOQO<<J^<<J^O$LaQPO<<JYOOQO<<JY<<JYO$4VQPO<<JYO$LaQPO<<JYOOQOLD*aLD*aOOQO<<Iy<<IyO$LoQQO,5=xOOQO-E;[-E;[OOQO<<Jq<<JqO$LzQPO,5?YOOQOG26eG26eOOQOG26aG26aO$MSQPO1G3gOOQO<<Kw<<KwOOQOAN?xAN?xOOQOAN?tAN?tO$4VQPOAN?tO$MeQPOAN?tO$MjQPOAN?tO$MxQPOG25`OOQOG25`G25`O$4VQPOG25`OOQOLD*zLD*zO$M}QPOLD*zOOQO!$'Nf!$'NfO+VQPO'#CaO$NSQQO'#HlO$NgQQO'#HlO%!gQQO'#CbO%!zQQO'#CbO%$zQPO,59TO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5;xO$+dQPO1G1cO%%RQQO1G.oO%&mQQO1G/mO%(RQQO1G/mO%)gQQO1G/mO%)nQQO1G/mO%)uQQO1G/mO%+ZQQO1G/mO%+bQQO1G/mO%,vQQO1G/mO%,}QQO1G/mO%-UQPO'#DOO%-iQQO1G1dO$+dQPO7+&}O$+dQPO7+%hO$+dQPO'#G|O%.wQQO<<ISO%/[QQO,5=hO%/iQPO'#CiO$+dQPO'#DyO$+dQPO'#FYO%/nQPO,5;wO%/yQPO1G1cO%0RQQO1G/|O2gQPO'#CkO6bQPO,5:b",stateData:"%0d~OPOSQOS&XOS~OZaOa[Ob[Oj!ROpoOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{{O|^O}^O!O^O!P^O!QzO!VbO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!w|O!z!QO!}wO#_}O#e!PO#j!OO#}pO$OpO$U!TO$V!SO$c!UO$e!VO$k!WO$n!XO$p!ZO$s!YO$w![O$y!^O%P!]O%R!_O%T!`O%V!aO%X!bO%[!cO&]TO&_RO&aQO&|fO'ZhO~Oa[Ob[Os^Ot^Ou^Ov^Ow!qOx^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO!VbO!w|O!}!nO#_}O#e!PO#j!OO&]TO&_!dO&a!eO&h!iO'ZhO~OWcXW&`XZ&`XocXo&`X!T&`X![&`X!]&`X!_&`X!`&`X!b&`X!c&`X!d&`X!e&`X!f&`X!h&`X!k&`X!n&`X!}&`X$R&`X&]cX&_cX&acX&g&`X&hcX&h&`X&v^X&x&`X']cX']&`X~O!l$iX~P&wOWUXW&fXZUXoUXo&fX!TUX![UX!]UX!_UX!`UX!bUX!cUX!dUX!eUX!fUX!hUX!kUX!nUX!}UX$RUX&]&fX&_&fX&a&fX&gUX&hUX&h&fX&v^X&xUX']UX']&fX~O!l$iX~P)OO&_SO&a!rO~Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzOarXbrX!wrX#_rX#erX#jrX$srX&_rX&arX'ZrX~Oa[Ob[O$U!zO$V!yO$c!{O&]TO&_!uO&aUO~P+_OW#VOo!}O&]TO&_!|O&a!|O']&jX~OW#YOo&eX&]&eX&_&eX&a&eX']&eXY&eXp&eX&r&eX&x&eXZ&eXk&eX&g&eX!T&eX![&eX!]&eX!_&eX!`&eX!b&eX!c&eX!d&eX!e&eX!f&eX!h&eX!k&eX!n&eX!}&eX$R&eX!V&eX#Y&eX#]&eX!l&eXm&eX!U&eX&v&eX~O&h#WO~P-}O&h&eX~P-}O&]TOa%kXb%kXs%kXt%kXu%kXv%kXw%kXx%kXy%kXz%kX{%kX|%kX}%kX!O%kX!P%kX!Q%kX!w%kX#_%kX#e%kX#j%kX$s%kX&_%kX&a%kX'Z%kX&h%kX~O&hrX~P+_OZaOa[Ob[Oj!ROpoOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO#}pO$OpO&]TO&_#^O&a#]O&|fOY&mP~O!U#iO~P]O&v#kO~O!T#|O![#nO!]#oO!_#pO!`#qO!b#sO!c#tO!d#uO!e#vO!f#wO!h#{O!k#xO!n#yO$R#|O&g#lO&h#lO&x#mO~O!}#zO~P5SOZaOa[Ob[Oj!ROpoO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO#}pO$OpO&]TO&_2uO&a2sO&|fO~O&{$RO&}$PO~Oa[Ob[O!w$VO#_$WO#e$YO#j$XO&_!uO&aUO'Z$UO~O$s$ZO~P7zOo$]O']$^O!T&wX![&wX!]&wX!_&wX!`&wX!b&wX!c&wX!d&wX!e&wX!f&wX!h&wX!k&wX!n&wX!}&wX$R&wX&g&wX&h&wX&x&wX~OW$[OY&wX!l&wXm&wXk&wX!U&wX&v&wX~P8pOW&yXo&yX!T&yX![&yX!]&yX!_&yX!`&yX!b&yX!c&yX!d&yX!e&yX!f&yX!h&yX!k&yX!n&yX!}&yX$R&yX&g&yX&h&yX&x&yX']&yX~OZ#xXY&yX!l&yXm&yXk&yX!U&yX&v&yX~P:kOZ$_O~O']$^O~O!l$bO~O&p$dO~Oa&nXb&nXs&nXt&nXu&nXv&nXw&nXx&nXy&nXz&nX{&nX|&nX}&nX!O&nX!P&nX!Q&nX!w&nX#_&nX#e&nX#j&nX$s&nX&]&nX&_&nX&a&nX'Z&nX~OZ$eO~P<}O&_!|O&a!|O~Oa[Ob[O&]TO&_!uO&aUO&h#WO~OW$nO']$^O~O$V!yO~Ow$sO$V$rO&_SO&a!rO~OZ$eO~OZ$vO~O!}%OO&_$}O&a$}O~O!}%QO&_$}O&a$}O~O!}%TO~P6bOZ%UO!VbO~OW&fXo&fX&]&fX&_&fX&a&fX&h&fX~OZ^X!V^X~PAPOWcXocX&]cX&_cX&acX&hcX~OZ^X!V^X~PAoOo!}O&]TO&_!|O&a!|O~Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO&]TOarXbrX&_rX&arX~O!wrX#_rX#erX#jrX&hrX'ZrX~PBmOa[Ob[O!w$VO#_$WO#e$YO#j$XO&_!dO&a!eO&h!iO'Z$UO~Oa[Ob[O&]TO&_!dO&a!eO~O!VbO!}%gO~OZ%hO~O!V%jO#U%mO~Oa&nXb&nXs&nXt&nXu&nXv&nXw&nXx&nXy&nXz&nX{&nX|&nX}&nX!O&nX!P&nX!Q&nX!w&nX#_&nX#e&nX#j&nX&]&nX&_&nX&a&nX'Z&nX~O!VbO&h&nX~PEzOW%pOZ%qOaTabTa&]Ta&_Ta&aTa~OsTatTauTavTawTaxTayTazTa{Ta|Ta}Ta!OTa!PTa!QTa!wTa#_Ta#eTa#jTa$UTa$VTa$cTa$sTa'ZTa&hTaoTa&rTaYTakTa!UTa!}Ta~PGrOo!}O&]TOkga&ggaYga&xga!}ga~O']ga!Vga#Yga#]ga~PJ]Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO~Oarabra!wra#_ra#era#jra$sra&_ra&ara'Zra&hra~PKUO$V%tO~Om%vO~Oo%wO&]TO~Oo!}O&]la&_la&ala']laYlapla&rla&xla!}la&glakla~OWla!Tla![la!]la!_la!`la!bla!cla!dla!ela!fla!hla!kla!nla$Rla&hla!llamla!Ula&vla~PM]Oo!}O&]TOk&qX!T&qX!}&qX~OY&qX!l&qX~P! gO!T%zOk!SX!}!SXY!SX~Ok%{O!}'RX~O!}%}O~O!w&OO~Oa[Ob[O&]2rO&_!uO&aUO&k&RO~O&g&iP~P!!tO&]TO&_!uO&aUO~O&]TOa%kab%kas%kat%kau%kav%kaw%kax%kay%kaz%ka{%ka|%ka}%ka!O%ka!P%ka!Q%ka!w%ka#_%ka#e%ka#j%ka$s%ka&_%ka&a%ka'Z%ka&h%ka~OW&`XY^XYcXY&`XZ&`Xk^Xo&`XpcX!T&`X![&`X!]&`X!_&`X!`&`X!b&`X!c&`X!d&`X!e&`X!f&`X!h&`X!k&`X!n&`X$R&`X&g&`X&h&`X&rcX&v^X&xcX&x&`X']cX']&`X~PAoOWUXYUXY^XY&fXZUXk^XoUXp&fX!TUX![UX!]UX!_UX!`UX!bUX!cUX!dUX!eUX!fUX!hUX!kUX!nUX$RUX&gUX&hUX&r&fX&v^X&xUX&x&fX']UX']&fX~PAPOa[Ob[O&_!uO&aUO~PBmOo!}Op&^O&]TO&_&YO&a&XO&r&]O~OW#VOY&jX&x&jX']&jX~P!)tOa[Ob[O&_!uO&aUO~Ok&aOY&mX~OY&cO~Oa[Ob[O&]TO&_!uO&aUOY&mP~PKUOk&fO&v#kOY&uX~OY&hO~OY&iO~P5SOY&lO&x&jO']$^O~O!U&mO~P]O!VbO~P6bOa[Ob[O&]TO&_!uO&aUO~PKUOa[Ob[O&]TO&_!uO&aUO~OW#VOo!}O&]TO']&jX~O&{'RO&}$PO~O!V'SO~Op'aO!z'`O&_SO&a!rO&h#WO~Oj'bO~P!.QO!z'dO&_SO&a!rO&h#WO~OY'PP~P6bO!n#yO!T#|a![#|a!]#|a!_#|a!`#|a!b#|a!c#|a!d#|a!e#|a!f#|a!h#|a!k#|a!}#|a$R#|a&g#|a&h#|a&x#|aY#|a!l#|am#|ak#|a!U#|a&v#|a~O!P'iO~Oi'lO!V'kO#Y'mO#]'nO&h!iO~OZ'tO&h!iO~O!V'wO#Y'mO~Oi'{O!V'zO#]'nO&h!iO~OZ$_Oo(RO&]TO~Oj(YOp'aO&_SO&a!rO&h#WO~OW%pO!V(ZO~OW%pO!}(]O~OW(^O!}(_O~Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO$s!YO!}'PP~P6bO!l(kO!}(jO~P5SO!}(lO~P5SO!V(mO~O$n(oO~O!}(pO~O!}(qO~O!}(rO~P5SOZ$eOa[Ob[Oj!ROpoO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO&]TO&_(tO&a(sO&|fO~PKUO%^(}O%b)OOZ%Zaa%Zab%Zaj%Zap%Zas%Zat%Zau%Zav%Zaw%Zax%Zay%Zaz%Za{%Za|%Za}%Za!O%Za!P%Za!Q%Za!V%Za!d%Za!n%Za!o%Za!p%Za!q%Za!r%Za!s%Za!u%Za!w%Za!z%Za!}%Za#_%Za#e%Za#j%Za#}%Za$O%Za$U%Za$V%Za$c%Za$e%Za$k%Za$n%Za$p%Za$s%Za$w%Za$y%Za%P%Za%R%Za%T%Za%V%Za%X%Za%[%Za&V%Za&]%Za&_%Za&a%Za&|%Za'Z%Za!U%Za$l%Za&h%Za$}%Za~O!Vla#Yla#]la'dla~PM]OZ%hO~P! gO!})SO~O#U%mO!V'Sa!}'Sa~O!VbO!})VO~Oi)ZOk#RX&g#RX~Ok)]O&g'TX~O&g)_O~OZaOa[Ob[Oj)kOp)jOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{{O|^O}^O!O^O!P^O!QzO!VbO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!w|O!z!QO!}wO#_}O#e!PO#j!OO#}pO$OpO$U!TO$V!SO$c!UO$e!VO$k!WO$n!XO$p!ZO$s!YO$w![O$y!^O%P!]O%R!_O%T!`O%V!aO%X!bO%[!cO&]TO&_RO&aQO&h#WO&|fO'ZhO~O!U)fO~P!;xO!V%jO~O!V)rOY'_P~P6bOW%pO!})yO~Om)zO~Oo!}O&]TOk&qa!T&qa!}&qaY&qa!l&qa~O!V){O~P6bOk%{O!}'Ra~Oa[Ob[O&]2rO&_!uO&aUO~O&k*SO~P!A]Oo!}O&]TOk&jX&g&jXY&jX&x&jX!}&jX~O!V&jX#Y&jX#]&jX~P!AuOi*UOj*UOkhX&ghX~Ok*VO&g&iX~O&g*XO~Oo!}Op*ZO&]TO&_SO&a!rO~OYga&xga']ga~P!CWOW&`XY^Xk^Xo^X&]^X~OWUXY^Xk^Xo^X&]^X~Oo%wO&]TO&r*]O~OW*_O~Oo!}O&]TO&_!|O&a!|O&r*]O~Ok&aOY&ma~Oo!}O&]TO&_!|O&a!|O&r&]O~OY*dO~Ok&fOY&ua~OY*iO&x&jO~O!}]iY]i!l]im]ik]i!U]i~P5SO!]#oO!d#uO!e#vO!f#wO!h#{O!n#yO&g#lO&h#lO!T!Zi!_!Zi!`!Zi!b!Zi!c!Zi!k!Zi!}!Zi$R!Zi&x!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O![!Zi~P!FsO!d#uO!e#vO!n#yO!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!h!Zi!k!Zi!}!Zi$R!Zi&g!Zi&h!Zi&x!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!f#wO~P!HbO![#nO!]#oO!b#sO!c#tO!d#uO!e#vO!f#wO!h#{O!n#yO&g#lO&h#lO&x#mO!T!Zi!`!Zi!k!Zi!}!Zi$R!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!_!Zi~P!JPO!_#pO~P!JPO![#nO~P!FsO![#nO!]#oO!d#uO!e#vO!f#wO!h#{O!n#yO&g#lO&h#lO&x#mO!T!Zi!_!Zi!`!Zi!b!Zi!k!Zi!}!Zi$R!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!c#tO~P!K|O!c!Zi~P!K|O!n#yO!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!d!Zi!f!Zi!h!Zi!k!Zi!}!Zi$R!Zi&g!Zi&h!Zi&x!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!e#vO~P!MrO!e!Zi&v!Zi~P!MrO!f!Zi~P!HbO!l*kO~P5SO&_!|O&a!|O!T&jX![&jX!]&jX!_&jX!`&jX!b&jX!c&jX!d&jX!e&jX!f&jX!h&jX!k&jX!n&jX$R&jX&h&jX!l&jXm&jX!U&jX&v&jX~P!AuO!}$QiY$Qi!l$Qim$Qik$Qi!U$Qi~P5SOa[Ob[O!U*sO!w|O#_}O#e!PO&]TO&_!uO&aUO'ZhO~PKUO!}*tO~OW#uiZ#xXo#ui!T#ui![#ui!]#ui!_#ui!`#ui!b#ui!c#ui!d#ui!e#ui!f#ui!h#ui!k#ui!n#ui!}#ui$R#ui&g#ui&h#ui&x#ui']#uiY#ui!l#uim#uik#ui!U#ui&v#ui~OW+YO']+ZO~Om+[O~P5SO!z+]O&_SO&a!rO~Ok+^OY'PX!}'PX~P5SOY+`O~O!U+bO~P%QO!V'kO~O!V'kO#]'nO~O!V'kO#Y'mO#]'nO~Oi'lO!V'kO#Y'mO#]'nO~Oa[Ob[O&]TO&_!uO&aUOY'WP~PKUO!V+kO#Y'mO~OZ'tO~O&]TO&_!|O&a!|O!U'YP!}'YP~PKUO!V'wO~Oa[Ob[O!U+wO!w|O!}+uO#_}O#e!PO#j!OO&]TO&_!uO&aUO&h!iO'ZhO~PKUO!V'zO~O!V'zO#]'nO~Oi'{O!V'zO#]'nO~Om+|O~P6bOo+}O&]TO~Oo(RO!V){O&]TOW#zi!T#zi![#zi!]#zi!_#zi!`#zi!b#zi!c#zi!d#zi!e#zi!f#zi!h#zi!k#zi!n#zi!}#zi$R#zi&g#zi&h#zi&x#zi']#ziY#zi!l#zim#zik#zi!U#zi&v#zi~O!V'kOW'Oio'Oi!T'Oi!['Oi!]'Oi!_'Oi!`'Oi!b'Oi!c'Oi!d'Oi!e'Oi!f'Oi!h'Oi!k'Oi!n'Oi!}'Oi$R'Oi&g'Oi&h'Oi&x'Oi']'OiY'Oi!l'Oim'Oik'Oi!U'Oi&v'Oi~OW+YO~O$Y,VO$[,WO$^,WO$_,XO$`,YO~O!U,UO~P#/eO$f,ZO&_SO&a!rO~OW%pO!},[O~OW,]O!},[O~O$l,^OZ$jia$jib$jij$jip$jis$jit$jiu$jiv$jiw$jix$jiy$jiz$ji{$ji|$ji}$ji!O$ji!P$ji!Q$ji!V$ji!d$ji!n$ji!o$ji!p$ji!q$ji!r$ji!s$ji!u$ji!w$ji!z$ji!}$ji#_$ji#e$ji#j$ji#}$ji$O$ji$U$ji$V$ji$c$ji$e$ji$k$ji$n$ji$p$ji$s$ji$w$ji$y$ji%P$ji%R$ji%T$ji%V$ji%X$ji%[$ji&V$ji&]$ji&_$ji&a$ji&|$ji'Z$ji!U$ji&h$ji$}$ji~Oa[Ob[O$s$ZO&_!uO&aUO~O!},bO~P6bO!},cO~OZaOa[Ob[Oj!ROpoOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz,iO{{O|^O}^O!O^O!P^O!QzO!VbO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!w|O!z!QO!}wO#_}O#e!PO#j!OO#}pO$OpO$U!TO$V!SO$c!UO$e!VO$k!WO$n!XO$p!ZO$s!YO$w![O$y!^O$},jO%P!]O%R!_O%T!`O%V!aO%X!bO%[!cO&]TO&_RO&aQO&|fO'ZhO~O!U,hO~P#5]OW&`XY&`XZ&`Xo&`X!}&`X']cX']&`X~PAoOWUXYUXZUXoUX!}UX']UX']&fX~PAPOW$[Oo$]O']$^O~OW&yXY%eXo&yX!}%eX']&yX~OZ#xX~P#:kOY,pO!},nO~O%^(}O%b)OOZ%Zia%Zib%Zij%Zip%Zis%Zit%Ziu%Ziv%Ziw%Zix%Ziy%Ziz%Zi{%Zi|%Zi}%Zi!O%Zi!P%Zi!Q%Zi!V%Zi!d%Zi!n%Zi!o%Zi!p%Zi!q%Zi!r%Zi!s%Zi!u%Zi!w%Zi!z%Zi!}%Zi#_%Zi#e%Zi#j%Zi#}%Zi$O%Zi$U%Zi$V%Zi$c%Zi$e%Zi$k%Zi$n%Zi$p%Zi$s%Zi$w%Zi$y%Zi%P%Zi%R%Zi%T%Zi%V%Zi%X%Zi%[%Zi&V%Zi&]%Zi&_%Zi&a%Zi&|%Zi'Z%Zi!U%Zi$l%Zi&h%Zi$}%Zi~OZ,sO~O%^(}O%b)OOZ%cia%cib%cij%cip%cis%cit%ciu%civ%ciw%cix%ciy%ciz%ci{%ci|%ci}%ci!O%ci!P%ci!Q%ci!V%ci!d%ci!n%ci!o%ci!p%ci!q%ci!r%ci!s%ci!u%ci!w%ci!z%ci!}%ci#_%ci#e%ci#j%ci#}%ci$O%ci$U%ci$V%ci$c%ci$e%ci$k%ci$n%ci$p%ci$s%ci$w%ci$y%ci%P%ci%R%ci%T%ci%V%ci%X%ci%[%ci&V%ci&]%ci&_%ci&a%ci&|%ci'Z%ci!U%ci$l%ci&h%ci$}%ci~Oo!}O&]TO!V'Ua!}'Ua#U'Ua~O!},yO~Oi)ZOk#Ra&g#Ra~Ok)]O&g'Ta~O#U%mO!V'Si!}'Si~O!U-SO~P]O!U-SO~P!;xOW-VO~P8pOZ$_O~P:kOW$nOZ$_O']$^O~Oj-XOp-XO~Ok-YO!V'VX#]'VX!}'VX~OY&bXk&bX!U&bX!}&bX~P5SO!T-[OW&yXY&yXZ#xXo&yX![&yX!]&yX!_&yX!`&yX!b&yX!c&yX!d&yX!e&yX!f&yX!h&yX!k&yX!n&yX$R&yX&g&yX&h&yX&x&yX']&yX~O!V)rO!U'^P~P6bOY&bXa%hXb%hX&]%hX&_%hX&a%hXk&bX!U&bX!}&bX~Ok-_OY'_X~OY-aO~O!V){O!U&tP~P6bOk&sX!}&sX!U&sXY&sX~P5SO&kTa~PGrOi*UOj*UOkha&gha~Ok*VO&g&ia~OW-iO~Op-kO~Oo%wO&]TO&r-lO~O!n#yO!T$Pq![$Pq!]$Pq!_$Pq!`$Pq!b$Pq!c$Pq!d$Pq!e$Pq!f$Pq!h$Pq!k$Pq!}$Pq$R$Pq&g$Pq&h$Pq&x$PqY$Pq!l$Pqm$Pqk$Pq!U$Pq&v$Pq~O!Tga![ga!]ga!_ga!`ga!bga!cga!dga!ega!fga!hga!kga!nga$Rga&hga!lgamga!Uga&vga~PJ]Oo!}O&]TO&_-qO&a-pO~Oa[Ob[O!w$VO#_$WO#e$YO&_!uO&aUO'Z$UO~Oa[Ob[O!U-vO!w|O#_}O#e!PO&]TO&_!uO&aUO'ZhO~PKUOp.UO&_SO&a!rO&h#WO~O!z.XO&_SO&a!rO&h#WO~Ok+^OY'Pa!}'Pa~O!U.]O~P%QOo!}O&]TO&_!|O&a!|O&r._O~Ok.bOY'WX~OY.dO~O!U.jO~P%QO!V+kO~OZ$_O!V'kOk#lX!U#lX!}#lX~Ok.nO!U'YX!}'YX~O!U.qO!}.pO~O&h!iO~P7zOa[Ob[O!U.uO!w|O!}+uO#_}O#e!PO#j!OO&]TO&_!uO&aUO&h!iO'ZhO~PKUOo(RO!V){O&]TOW#zq!T#zq![#zq!]#zq!_#zq!`#zq!b#zq!c#zq!d#zq!e#zq!f#zq!h#zq!k#zq!n#zq!}#zq$R#zq&g#zq&h#zq&x#zq']#zqY#zq!l#zqm#zqk#zq!U#zq&v#zq~O!V'kOW'Oqo'Oq!T'Oq!['Oq!]'Oq!_'Oq!`'Oq!b'Oq!c'Oq!d'Oq!e'Oq!f'Oq!h'Oq!k'Oq!n'Oq!}'Oq$R'Oq&g'Oq&h'Oq&x'Oq']'OqY'Oq!l'Oqm'Oqk'Oq!U'Oq&v'Oq~Om.xO~P5SOm.xO~P6bO!U.|O~P#/eOw/QO$Z/QO&_SO&a!rO~O!}/TO~O$f/UO&_SO&a!rO~O!T%zO!l/WOk!SX!}!SX~O!}/YO~P5SO!}/YO~P6bO!}/]O~P5SO!l/_O&v/^O~O!U/aO~P#5]O!l$|X&v$|X~P<}OZ3mOa[Ob[Oj!ROpoO!d3iO!n3hO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO#}3iO$O3iO&]TO&_2vO&a2tO&|fO~O!}/dO~O!T/eO~OY/hOZ$eOa[Ob[Oj!ROpoO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO&]TO&_(tO&a(sO&|fO~PKUOY/hO!}/iO~O%^(}O%b)OOZ%cqa%cqb%cqj%cqp%cqs%cqt%cqu%cqv%cqw%cqx%cqy%cqz%cq{%cq|%cq}%cq!O%cq!P%cq!Q%cq!V%cq!d%cq!n%cq!o%cq!p%cq!q%cq!r%cq!s%cq!u%cq!w%cq!z%cq!}%cq#_%cq#e%cq#j%cq#}%cq$O%cq$U%cq$V%cq$c%cq$e%cq$k%cq$n%cq$p%cq$s%cq$w%cq$y%cq%P%cq%R%cq%T%cq%V%cq%X%cq%[%cq&V%cq&]%cq&_%cq&a%cq&|%cq'Z%cq!U%cq$l%cq&h%cq$}%cq~Oo!}O&]TO!V'Ui!}'Ui#U'Ui~O&x&jOk#Sa&g#Sa~O#U%mO!V'Sq!}'Sq~O!U/tO~P]Oj/wO~P!.QO!}/xO~Ok-YO!V'Va#]'Va!}'Va~O!V)rO~P6bOk/}O!U'^X~O!U0PO~Ok-_OY'_a~Ok0TO!U&tX~O!U0VO~Op0WO~O!n#yO!T$Py![$Py!]$Py!_$Py!`$Py!b$Py!c$Py!d$Py!e$Py!f$Py!h$Py!k$Py!}$Py$R$Py&g$Py&h$Py&x$PyY$Py!l$Pym$Pyk$Py!U$Py&v$Py~O![#nO!]#oO!_#pO!`#qO!b#sO!c#tO!d#uO!e#vO!f#wO!h#{O!k#xO!n#yO&g#lO&h#lO&x#mO~O!T!jy!}!jy$R!jyY!jy!l!jym!jyk!jy!U!jy~P$6sOk^Xo^X!T^X!}^X&]^X~OZ&`X~P$8bOZUX~P$8bO!}0YO~OZ0ZO~OW#uyZ#xXo#uy!T#uy![#uy!]#uy!_#uy!`#uy!b#uy!c#uy!d#uy!e#uy!f#uy!h#uy!k#uy!n#uy!}#uy$R#uy&g#uy&h#uy&x#uy']#uyY#uy!l#uym#uyk#uy!U#uy&v#uy~O!z0gO&_SO&a!rO~OY%pak%pa!}%pa~P5SOo%wO&]TO&r0hO~Oo!}O&]TO&_!|O&a!|O&r0hO~Ok.bOY'Wa~OZ%hO!VbO~O!U0pO~P%QO!V'kOk#la!U#la!}#la~OZ$_O!V'kOk#la!U#la!}#la~O&]TO&_!|O&a!|Ok%yX!U%yX!}%yX~PKUOk.nO!U'Ya!}'Ya~O!U#mX~P%QO!U0vO~Om0wO~P5SO!V'kOW'Oyo'Oy!T'Oy!['Oy!]'Oy!_'Oy!`'Oy!b'Oy!c'Oy!d'Oy!e'Oy!f'Oy!h'Oy!k'Oy!n'Oy!}'Oy$R'Oy&g'Oy&h'Oy&x'Oy']'OyY'Oy!l'Oym'Oyk'Oy!U'Oy&v'Oy~OW%pO!}0yO~OW%pO$]1OO&_SO&a!rO!}'aP~OW%pO$a1PO~O!}1QO~O!T%zO!l1SOk!SX!}!SX~OY1UO~O!}1VO~P5SO!VbO%P!]O~P6bO!T3SO![2xO!]2yO!_2zO!`2{O!b2}O!c3OO!d3PO!e3QO!f3RO!h#{O!k3nO!n#yO$R3SO&g#lO&h#lO&x#mO~Ok3dO!l'cX&v'cX~P$BRO!T1ZO~OY1[OZ$eOa[Ob[Oj!ROpoO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO&]TO&_(tO&a(sO&|fO~PKUOW#YOo&eX&]&eX&_&eX&a&eX'd&eX~O&h#WO~P$DuOo!}O&]TO'd1^O&_%`X&a%`X~O&x&jOk#Si&g#Si~O!U1bO~P]Oj1cO&_SO&a!rO~OW+YOZ$_O']+ZO~O!}1eO~O!V)rOk%|X!U%|X~P6bOk/}O!U'^a~O!T-[O~O!V){Ok%lX!U%lX~P6bOk0TO!U&ta~OY1jO~O!}1kO~OZ1lO~Oo%wO&]TO&r1sO~O!V'kOk#li!U#li!}#li~O!U#ma~P%QOW%pO!}1vO~OW%pOk1wO!}'aX~OY1{O~P5SOY1}O~Ok3dO!l'ca&v'ca~OY%eq!}%eq~P5SO'd1^O&_%`a&a%`a~OY2TO~O!}2WO~Oo!}Oz2ZO!}2YO&]TO~OY2[O~Ok1wO!}'aa~O!}2aO~OW%pOk1wO!}'bX~OY2cO~P5SOY2dO~OY%ey!}%ey~P5SOo!}O&]TO&_&Ta&a&Ta'd&Ta~OY2fO~O!}2gO~Oo!}Oz2iO!}2hO&]TO~OW%pOk&Qa!}&Qa~Ok1wO!}'ba~Oo!}O&]TO&_&Ti&a&Ti'd&Ti~O!}2mO~Oo!}Oz2nO!}2mO&]TO~O!}2oO~O!}2qO~O!l&`XY&`Xm&`Xk&`X!U&`X~P&wOWcXW&`XZ&`Xk&`XocXo&`X!T&`X![&`X!]&`X!_&`X!`&`X!b&`X!c&`X!d&`X!e&`X!f&`X!h&`X!k&`X!l&`X!n&`X$R&`X&]cX&g&`X&hcX&h&`X&v^X&v&`X&x&`X']cX']&`X~O!lUXYUXmUXkUX!UUX~P)OOWUXW&fXZUXkUXoUXo&fX!TUX![UX!]UX!_UX!`UX!bUX!cUX!dUX!eUX!fUX!hUX!kUX!lUX!nUX$RUX&]&fX&gUX&hUX&h&fX&vUX&v^X&xUX']UX']&fX~O!VbO~P$+dOk]i!l]i&v]i~P$BRO!]2yO!d3PO!e3QO!f3RO!h#{O!n#yO&g#lO&h#lOk!Zi!T!Zi!_!Zi!`!Zi!b!Zi!c!Zi!k!Zi!l!Zi$R!Zi&v!Zi&x!Zi~O![!Zi~P%%`O!d3PO!e3QO!n#yOk!Zi!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!h!Zi!k!Zi!l!Zi$R!Zi&g!Zi&h!Zi&v!Zi&x!Zi~O!f3RO~P%&tO![2xO!]2yO!b2}O!c3OO!d3PO!e3QO!f3RO!h#{O!n#yO&g#lO&h#lO&x#mOk!Zi!T!Zi!`!Zi!k!Zi!l!Zi$R!Zi&v!Zi~O!_!Zi~P%(YO!_2zO~P%(YO![2xO~P%%`O![2xO!]2yO!d3PO!e3QO!f3RO!h#{O!n#yO&g#lO&h#lO&x#mOk!Zi!T!Zi!_!Zi!`!Zi!b!Zi!k!Zi!l!Zi$R!Zi&v!Zi~O!c3OO~P%)|O!c!Zi~P%)|O!e3QO!n#yOk!Zi!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!f!Zi!h!Zi!k!Zi!l!Zi$R!Zi&g!Zi&h!Zi&v!Zi&x!Zi~O!d!Zi~P%+iO!f!Zi~P%&tOa[Ob[O&_!uO&aUO$srX~PBmOk$Qi!l$Qi&v$Qi~P$BRO![2xO!]2yO!_2zO!`2{O!b2}O!c3OO!d3PO!e3QO!f3RO!h#{O!k3nO!n#yO&g#lO&h#lO&x#mO~Ok!jy!T!jy!l!jy$R!jy&v!jy~P%-vOk%pa!l%pa&v%pa~P$BRO&v2wO~OY3TO&x&jO']$^O~OY3bO&x&jO~O!l3cO~P5SO!pQ!oP!e&X&_&|!s~",goto:"#Fl'dPPPP'e'z,`0UP'zPP0k0o2o7U9dPP9i=S@gCzDhFxPPPGOPJZPPKXKbPPPPPPPPPPPPPPKXL{PPPMgMr! t!#[PP!%[PP!&ZPPPPP!#[P!'U!#[PP!#[PPPPPP!'XP!)]P!+a!)]P!-t!.sP!/t!0O!0^!1R!1X!1_P!1n!2g!2qP!3a!3jP!1nP!4`!4j!4p!5O!1nP!5S!5^!2_!5sP!6h!6r!6x!1n!6{!7R!/t!/t!7V!7a!7g!)]!)]!9m!)]!)]!<Q!#[PP!#[0oP!<W!<aPP!<g!<pPPPPPPPP'eP'ePP!<t!=^!=s!=^PP!=^P!=^P!>`!>cP!=^!>{!=^P!=^P!?O!?R!?VP!<tP!=^P!=^P!=^P!=^P!=^!=^P!?ZP!?a!?d!?jP!=^!?v!?yP!@R!@i!E{!FR!G]!Hl!Hr!Hx!IO!IU!I`!In!It!JS!JY!J`!Jf!Jl!Jr!Jx!KO!KY!K`!Kf!Kl!Kr!K|!LS!L^!LdPPP!Lj!=^!MaP##wP#%OP#(O#(e#,o#1Y#4uPP#8Y#8]P#;T#;Z#;c#<nP#=yP#>{#?U#?XP0oP#?]!)]PPP#Ae#Cm#C|#DY#Dr#ET#EW#Ed#El#Eo#EsP#EvP#FU#FX#F[#F`#Ff#FiwuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u)usOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%q%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h)r){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-[-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u/}0T0j0u1S1V1Z1]1^1j2Q2R2X2Z2[2e2i2k2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n$xlOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nv!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rQ$ShS&_#`)dQ'V$UU']$[$n-VQ'd$^W(w%U,n/i1]U)o%p(^,]Q)q%qS*[&W-RU+U'_.W/vQ+]'eQ-s*oQ.T+YQ.X+ZQ0Q-_Q0]-tR0g.Yw!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rT%r!s*R${rOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n$OcObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3n^!lP!h!p'k+a.p0u|#RW!Y#`$T$Z%{&]&`&d(d(u)d*]*o+g,`,m-l-t.a/n1aS#ea3mQ$g|Q$h}Q$i!OQ$j!PW%Y!f%]+r.sS%`!i)]Q%f!jQ'W$VQ'X$WQ'Y$XQ'Z$YQ)[%aS)`%d)bQ*e&fQ*m&|S+n'w.nQ-o*nS.f+k.iQ.m+oQ0i._Q0m.eQ1r0hQ2^1sw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nU%i!l.f0mS)R%Y)`Q)c%fw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3iV#da%h3m'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ&U#YQ*Y&VX/k,s/o1^2R'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/k,s/o1^2R'fZOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/l,s/o1^2RS#XY/kS$m!Q'`S'_$[$nQ'e$^S)l%j)hQ.W+YQ.Y+ZR/v-V%mXOabepy![!]!_!b#W#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|$]$_$b$e$t$u$v$w$x%U%j%m%q%z&j&l'l'm'n'{(R(f(k(m)Z)g)h)r){*U*V*i*k+^+},^,b,c,g,j,n-T-U-Y-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ&S#WR-g*V'c]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n!w#PW!f!v#Q#R#`$O$T%X%Y%]%d%y&Q&W&`&d&|(d(u)R)b)d*l*n*o+g+r,`,m,x-R-t.a.s/m1j2Q2X2[2e2kW#ba#d%h3mR*b&aviOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u[!hP!p'k+a.p0uY#aa#d%h&a3mQ&}#{Q(e$vW(y%U,n/i1]S*p'S*rS+h't.bS+o'w.nS+t'z+vS.e+k.iR/o,sh#TW!Y!f$T$Z%](d*o+r,`-t.sQ*P%{Q*^&]Q-j*]R0X-lU)}%z){0TQ,P(UR.v+y$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3ivwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uQ%V!cQ%g!kQ%o!qS&o#k2wQ'j$fQ)Q%WQ)V%^Q,u)OQ/p,tQ0n.fQ1W/^R1t0m${qOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n!^#od#g$y$z%S&n&p&r&s&t&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lg2y/b3U3V3X3Y3Z3[3]3a3e3f!Y#rd#g$y$z%S&n&r&s&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lc2|/b3U3X3Y3[3]3a3e3fR'O#{%TgOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%ToOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%SoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ$f{Q$t!WQ$u!XQ${!^R,k(oQ$`mS(V$l+XQ+T'^S+z(Q(XS-W)j)kQ.S+VQ.l+nQ.z,RQ/y-XQ0e.VQ0r.mQ1d/wQ1q0fR2V1cQ'o$gY*v'W'p'q'r'sQ,Q(VW-w*w*x*y*zQ.k+nQ.w+zU0^-x-y-zS0q.l.mQ0x.zS1m0_0`Q1u0rR2]1na!nP!p'k+a+k.i.p0u`!nP!p'k+a+k.i.p0uT+u'z+vd!jP!h!p'k+a+k.e.i.p0uQ's$gQ'v$hQ(P$jQ*z'WQ*|'XQ+S'ZV+s'z+t+vQ%b!iR,})]Q)Y%`R,|)[Q%l!mQ)T%[Q)X%_Q-P)aR/s-QvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uS*q'S*rT+u'z+vQ'r$gS*y'W'sR-z*zQ'q$gQ'y$iU*x'W'r'sQ+O'YQ+m'uS-y*y*zQ-|*{Q0`-zR0b-}Q+e'mQ+f'nR+x'{Q'p$gQ'}$jW*w'W'q'r'sU+Q'Z(O(PU-x*x*y*zS.Q+R+SS0_-y-zQ0d.RR1n0`Q'u$hS*{'X'vR-}*|Q+i'tR0k.bQ+l'uS-{*{+mS0a-|-}R1o0bT.g+k.iQ(O$jS+R'Z(PR.R+SQ'|$jW+P'Z'}(O(PU.P+Q+R+SS0c.Q.RR1p0dvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uT+u'z+vQ'x$iS*}'Y'yR.O+OQ+p'wR0s.nR.r+qQ'T$SR*u'VT*q'S*rQ%k!mS)W%_%lR,z)XQ)g%jR-U)h$zoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nX(x%U,n/i1]%SmOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nU'^$[$n-VS+V'_/vQ.V+YR0f.WX(T$l(Q(U+y_)s%q)r-[/}2Z2i2nQ)u%qR0R-_Q([$oQ)w%sR-b)xT,S(Z,TvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR1W/^wwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uvvOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uQ%P!`R%R!aR$w!ZvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR(f$vR$x!ZR(n${T,f(m,gT,e(m,gX({%V(|)Q,vR,t(}Q/n,sR1a/oQ)P%VQ,r(|Q,w)QR/q,vR%W!cQ(z%UV/g,n/i1]QyOQ#jbY$cy#j)h-T/uQ)h%jQ-T)gR/u-UvVOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uv!gP!p#d&a'S'k't'w'z*r+a+k+v,s.b.i.n.p0u|!xV!g#O#Z#_#}$k%a%e&P&V&Z&{(S(W)e*`+W.^0j2R3`!f#OW!f!v#R$O$T%Y%]%d%y&Q&W&|(d(u)R)b*l*n*o+r,`,m,x-R-t.s/m1j2Q2X2[2e2kQ#Z_S#_a3m$`#}ep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%m%q%z&j&l'l'm'n'{(R(f(k)Z)r){*U*i*k+^+},b,c,j-Y-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$k!QS%a!i)]S%e!j+sS&P#W*VQ&V#YU&Z#`&d)dQ&{#{W(S$l(Q(U+yQ(W$mQ)e%hQ*`&`Q+W'`Q.^+gQ0j.aQ2R1^Z3`$v%U,n/i1]Q*W&SR-h*W^#QW#`$O&|(d(u*l!Q%X!f!v$T%]%d&Q&W&`&d)b)d*n*o+g+r,`,m-R-t.a.s/m2Q2e[%x#Q%X%y,x2X2kS%y#R%YQ,x)RQ2X1jR2k2[#Q`OPaby!_!p#d#j#{$b$t$u$v$w$x%U%h%j&a'S'k't'w'z(m)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3m[!wV!g#_&{)e3`T#[`!wQ0U-cR1i0UQ&b#bR*c&bQ&g#eR*f&gQ$QfR'Q$QQ+_'fS.[+_1XR1X/bQ!pPU%n!p+a0uQ+a'kR0u.pQ%|#TR*Q%|Q&k#hU*h&k/r3kQ/r,{R3k3jQ)^%bR-O)^Q-Z)mR/{-ZQ.c+iR0l.cQ.i+kR0o.iQ+v'zR.t+vQ.o+pR0t.oQ*r'SR-u*rQ(U$lQ+y(QT,O(U+yQ0O-]R1g0OQ-`)uR0S-`Q,T(ZR.{,TQ/P,VR0{/PQ1x0|S2`1x2bR2b1zQ,g(mR/`,gQ(|%VS,q(|,vR,v)QQ1_/mR2S1_Q,o(zR/j,odxOby#j%j)g)h-T-U/uQ$|!_Q'h$bQ(b$tQ(c$uQ(h$wQ(i$xS,f(m,gR/V,^)ftOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u0T0j0u1S1V1Z1]1^1j2Q2R2X2[2e2k2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n_)t%q)r-[/}2Z2i2nQ!sTQ$o!SQ$p!UQ$q!VQ%s!yQ%u!{Q(`$rQ(a$sQ)x%tQ*R2rS.},V,XQ/R,WQ/S,YQ0z/PS0|/R1OQ1z1PR2_1w&{SOTabehpy!S!U!V![!]!_!b!y!{#`#j#k#n#o#p#q#r#s#t#u#v#w#x#|$U$[$]$^$_$b$e$n$r$s$t$u$v$w$x%U%j%p%q%t%z&W&l'_'e(R(^(f(k(m)d)g)h)r){*i*k*o+Y+Z+^+},V,W,X,Y,],^,b,c,g,j,n-R-T-U-V-[-_-t.W.Y/P/R/W/Y/^/e/i/u/v/}0T1O1P1S1V1Z1]1w2Z2i2n2r2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ)v%qQ-])rQ/|-[Q1f/}Q2j2ZQ2l2iR2p2nxdOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/^/uU#ga$e3mS#ye3hS$ap3iQ$y![Q$z!]Q%S!bQ&n#kQ&p#nQ&q#oQ&r#pQ&s#qQ&t#rQ&u#sQ&v#tQ&w#uS&x#v3QQ&y#wQ&z#xQ'P#|Q'c$]Y'f$_$v,b/Y1V^)p%q)r-[/}2Z2i2nU)|%z){0TS*j&l3TQ+{(RQ,a(fQ,d(kS-m*i3bQ-n*kQ.Z+^Q.y+}Q/[,cQ/b,jQ1R/WQ1Y/eQ1|1SQ2P1ZQ3U2wQ3V2xQ3W2yQ3X2zQ3Y2{Q3Z2|Q3[2}Q3]3OQ3^3PQ3_3RQ3a3SQ3e3cQ3f3dR3l3nvWOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!fP!p'k+a+k.i.p0uW!vV#}&P3`S#`a3m#|$Oep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%q%z&l(R(f(k)r){*i*k+^+},b,c,j-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$TiS%]!h.eS%d!j+sf&Q#W%m&j'l'm'n'{)Z*U*V-YQ&W#_Q&`#aS&d#d&aQ&|#{Q(d$vW(u%U,n/i1]Q)b%eQ)d%hQ*l&{Q*n&}S*o'S*rS+g't.bS+r'z+vQ,`(eQ,m(yQ-R)eQ-t*pQ.a+hQ.s+tS/m,s/oQ2Q1^R2e2R'b]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ$l!QQ(Q$kS(X$m+WQ+X'`R,R(W'sUOPVabeipy!Q![!]!_!b!h!j!p#W#Y#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&V&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nR&T#W%OnObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ#haQ&S#WQ'O#{W)m%m'm'n'{Q*g&jQ+c'lQ,{)ZQ-f*UQ-g*VQ/z-YR3j3mQ*T&RR-e*SU#ca%h3mR&e#d#c_OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3m#c^OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3ml#SW!Y!f$T$Z%]%{&]*]*o+r-l-t.sU&[#`&d)dQ*a&`Q,_(dQ,l(uQ.`+gQ/X,`Q/f,mQ0i.aQ1`/nR2U1aQ*O%zQ-c){R1h0TR-d){T#fa3m$vkOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%q%z&l(R(f(k(m)g)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nW(v%U,n/i1]T)i%j)h%SjOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nT'[$[-VQ'g$_Q(g$vQ/Z,bQ1T/YR2O1V[!oP!p'k+a.p0uT.g+k.iU#UW!Y(dQ%Z!fU'U$T$Z,`Q)U%]S-r*o+rT0[-t.sd!kP!p'k'z+a+k+v.i.p0uV%^!h+t.eR%c!iW%[!f%]+r.sQ)a%dR-Q)bQ)n%mV+d'm'n'{R+j'tT.h+k.iR+q'w`!mP!p'k+a+k.i.p0uT%_!h.eR-^)rR)v%qT/O,V/PQ0}/RR1y1OR1y1PR/c,j",nodeNames:`⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList LambdaExpression Definition FormalParameters ReceiverParameter void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ this FormalParameter Modifiers public protected private abstract static final strictfp default synchronized native transient volatile sealed non SpreadParameter VariableDeclarator AssignOp } { ArrayInitializer InferredParameters Block BinaryExpression CompareOp CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp BitOp InstanceofExpression instanceof TypePattern TernaryExpression LogicOp : UpdateExpression UpdateOp IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral class ParenthesizedExpression ObjectCreationExpression new ArgumentList ClassBody ; FieldDeclaration MethodDeclaration TypeParameters TypeParameter TypeBound Throws throws ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList Permits permits RecordDeclaration record RecordHeader RecordComponent RecordBody CompactConstructorDeclaration InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation FieldAccess ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension UnaryExpression LogicOp BitOp CastExpression AssignmentExpression AssignOp ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchRule SwitchLabel case ThrowStatement throw DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent`,maxTerm:296,nodeProps:[[`isolate`,-4,1,2,80,81,``],[`group`,-27,4,56,91,99,106,112,117,122,156,158,161,162,164,167,169,172,174,176,178,184,186,188,190,192,194,195,203,`Statement`,-25,6,13,32,57,69,72,75,77,78,79,80,81,82,83,84,86,87,129,130,131,133,134,136,139,140,`Expression`,-7,17,18,19,20,21,23,28,`Type`],[`openedBy`,10,`(`,52,`{`],[`closedBy`,11,`)`,53,`}`]],propSources:[d],skippedNodes:[0,1,2],repeatNodeCount:30,tokenData:"#$g_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu2zuv4avw5qwx7Xxy?pyz@^z{@z{|Ap|}CW}!OCt!O!PEa!P!QNZ!Q!R!+P!R![!.k![!]!;T!]!^!<e!^!_!=R!_!`!?Y!`!a!?|!a!b!Aj!b!c!BY!c!}!IU!}#O!Jk#O#P%Q#P#Q!KX#Q#R!Ku#R#S2z#S#T%Q#T#o2z#o#p!Li#p#q!MV#q#r!No#r#s# ]#s#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2zS%VV&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS%qO&}SS%tVOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZS&^VOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS&vP;=`<%l%QS&|UOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZS'cP;=`<%l&Z_'mk&}S&XZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qs#y%Q#y#z'f#z$f%Q$f$g'f$g#BY%Q#BY#BZ'f#BZ$IS%Q$IS$I_'f$I_$I|%Q$I|$JO'f$JO$JT%Q$JT$JU'f$JU$KV%Q$KV$KW'f$KW&FU%Q&FU&FV'f&FV;'S%Q;'S;=`&s<%lO%Q_)iY&}S&XZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XZ*^Y&XZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XV+TX#}P&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QU+wV![Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT,aXOY,|YZ%lZr,|rs1as#O,|#O#P0k#P;'S,|;'S;=`1Z<%lO,|T-PXOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`1T<%lO-lT-qX&}SOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`1T<%lO-lT.cV!sPOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZT.}V&}SOY-lYZ%lZr-lrs/ds;'S-l;'S;=`1T<%lO-lT/gXOY,|YZ%lZr,|rs0Ss#O,|#O#P0k#P;'S,|;'S;=`1Z<%lO,|T0XU!sPOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZT0nVOY-lYZ%lZr-lrs/ds;'S-l;'S;=`1T<%lO-lT1WP;=`<%l-lT1^P;=`<%l,|T1fV!sPOY&ZYZ%lZr&Zrs1{s;'S&Z;'S;=`'`<%lO&ZT2QS&{SXY2^YZ2m]^2rpq2^P2aSXY2^YZ2m]^2rpq2^P2rO&|PP2wP&|PYZ2m_3Rb&}S&_ZOY%QYZ%lZr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o$g%Q$g;'S2z;'S;=`4Z<%lO2z_4^P;=`<%l2zU4hX&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU5[V$RQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV5xZ&xR&}SOY%QYZ%lZr%Qrs%qsv%Qvw6kw!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU6rV!_Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT7^Z&}SOY8PYZ%lZr8Prs9_sw8Pwx%Qx#O8P#O#P:i#P;'S8P;'S;=`?j<%lO8PT8UX&}SOY%QYZ%lZr%Qrs%qsw%Qwx8qx;'S%Q;'S;=`&s<%lO%QT8xV!rP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT9bXOY&ZYZ%lZr&Zrs&ysw&Zwx9}x;'S&Z;'S;=`'`<%lO&ZT:SV!rPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT:nZ&}SOY;aYZ%lZr;ars<Xsw;awx8Px#O;a#O#P8P#P;'S;a;'S;=`=s<%lO;aT;fZ&}SOY;aYZ%lZr;ars<Xsw;awx8qx#O;a#O#P%Q#P;'S;a;'S;=`=s<%lO;aT<[ZOY<}YZ%lZr<}rs=ysw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}T=QZOY;aYZ%lZr;ars<Xsw;awx8qx#O;a#O#P%Q#P;'S;a;'S;=`=s<%lO;aT=vP;=`<%l;aT=|ZOY<}YZ%lZr<}rs>osw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}P>rVOY>oZw>owx?Xx#O>o#P;'S>o;'S;=`?^<%lO>oP?^O!rPP?aP;=`<%l>oT?gP;=`<%l<}T?mP;=`<%l8P_?wVZZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV@eVYR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVATX$fP&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVAwZ!dR&}SOY%QYZ%lZr%Qrs%qs{%Q{|Bj|!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVBqV!nR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVC_VkR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_C}[&pW!dR&}SOY%QYZ%lZr%Qrs%qs}%Q}!OBj!O!_%Q!_!`5T!`!aDs!a;'S%Q;'S;=`&s<%lO%QVDzV&vR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_EhZWY&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PFZ!P!Q%Q!Q![Gi![;'S%Q;'S;=`&s<%lO%QVF`X&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PF{!P;'S%Q;'S;=`&s<%lO%QVGSV&rR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTGpc&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#R%Q#R#SMc#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTISV&}S!pPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIn]&}SOY%QYZ%lZr%Qrs%qs{%Q{|Jg|}%Q}!OJg!O!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTJlX&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTK`c&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![!f%Q!f!gH{!g!h%Q!h!iH{!i#R%Q#R#SLk#S#W%Q#W#XH{#X#Y%Q#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTLpZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![#R%Q#R#SLk#S;'S%Q;'S;=`&s<%lO%QTMhZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![#R%Q#R#SMc#S;'S%Q;'S;=`&s<%lO%Q_Nb]&}S!eQOY%QYZ%lZr%Qrs%qsz%Qz{! Z{!P%Q!P!Q!'|!Q!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%Q_! `X&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!!QT&}SOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!dTOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!vVOz!!az{!!s{!P!!a!P!Q!#]!Q;'S!!a;'S;=`!#b<%lO!!aZ!#bOQZZ!#eP;=`<%l!!a_!#kXOY!$WYZ! {Zr!$Wrs!&bsz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!$ZXOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!${Z&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!%uV&}SQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!&_P;=`<%l! Z_!&eXOY!$WYZ! {Zr!$Wrs!!asz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!'TZOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!'yP;=`<%l!$W_!(TV&}SPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!(oVPZOY!)UYZ%lZr!)Urs!)vs;'S!)U;'S;=`!*y<%lO!)U_!)ZVPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!)sP;=`<%l!'|_!){VPZOY!)UYZ%lZr!)Urs!*bs;'S!)U;'S;=`!*y<%lO!)UZ!*gSPZOY!*bZ;'S!*b;'S;=`!*s<%lO!*bZ!*vP;=`<%l!*b_!*|P;=`<%l!)UT!+Wq&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!d%Q!d!e!1u!e!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o!z%Q!z!{!3s!{#R%Q#R#S!0}#S#U%Q#U#V!1u#V#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a#l%Q#l#m!3s#m;'S%Q;'S;=`&s<%lO%QT!-fa&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QT!.ri&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o#R%Q#R#S!0}#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!0hV&}S!oPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!1SZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!.k![#R%Q#R#S!0}#S;'S%Q;'S;=`&s<%lO%QT!1zY&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S;'S%Q;'S;=`&s<%lO%QT!2q`&}S!oPOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S!n%Q!n!o!0a!o#R%Q#R#S!1u#S#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!3x_&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!P!4w!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QT!4|]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i#T%Q#T#Z!5u#Z;'S%Q;'S;=`&s<%lO%QT!5zc&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#R%Q#R#S!4w#S#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!7^i&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8{!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i!n%Q!n!o!0a!o!r%Q!r!sIi!s#R%Q#R#S!:V#S#T%Q#T#Z!7V#Z#`%Q#`#a!0a#a#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!9Qa&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!:[]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QV!;[X!lR&}SOY%QYZ%lZr%Qrs%qs![%Q![!]!;w!];'S%Q;'S;=`&s<%lO%QV!<OV']R&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!<lV!}R&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!=YY&hZ&}SOY%QYZ%lZr%Qrs%qs!^%Q!^!_!=x!_!`!>l!`;'S%Q;'S;=`&s<%lO%QU!>PX!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU!>sV!]Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?aX!TR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!@TY&gR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`!>l!`!a!@s!a;'S%Q;'S;=`&s<%lO%QU!@zY!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`!a!=x!a;'S%Q;'S;=`&s<%lO%Q_!AsV&kX!kQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!BaX&]Z&}SOY%QYZ%lZr%Qrs%qs#]%Q#]#^!B|#^;'S%Q;'S;=`&s<%lO%QV!CRX&}SOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Cn#c;'S%Q;'S;=`&s<%lO%QV!CsX&}SOY%QYZ%lZr%Qrs%qs#h%Q#h#i!D`#i;'S%Q;'S;=`&s<%lO%QV!DeX&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!EQ#Y;'S%Q;'S;=`&s<%lO%QV!EVX&}SOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Er#g;'S%Q;'S;=`&s<%lO%QV!EwX&}SOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Fd#Z;'S%Q;'S;=`&s<%lO%QV!FiX&}SOY%QYZ%lZr%Qrs%qs#T%Q#T#U!GU#U;'S%Q;'S;=`&s<%lO%QV!GZX&}SOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Gv#W;'S%Q;'S;=`&s<%lO%QV!G{X&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Hh#Y;'S%Q;'S;=`&s<%lO%QV!HoV'ZR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!I]b&aZ&}SOY%QYZ%lZr%Qrs%qst%Qtu!IUu!Q%Q!Q![!IU![!c%Q!c!}!IU!}#R%Q#R#S!IU#S#T%Q#T#o!IU#o$g%Q$g;'S!IU;'S;=`!Je<%lO!IU_!JhP;=`<%l!IU_!JrVoZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!K`VmR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!K|X!cQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QV!LpV!VR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!M`Z'dX!bQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`#p%Q#p#q!NR#q;'S%Q;'S;=`&s<%lO%QU!NYV!`Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!NvV!UR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT# dV$OP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!Su&}S&XZ&_ZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2z",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,206]},dynamicPrecedences:{21:1,246:-1,252:-1},specialized:[{term:245,get:e=>f[e]||-1}],tokenPrec:9164}),m=e.define({name:`java`,parser:p.configure({props:[s.add({IfStatement:n({except:/^\s*({|else\b)/}),TryStatement:n({except:/^\s*({|catch|finally)\b/}),LabeledStatement:i,SwitchBlock:e=>{let t=e.textAfter,n=/^\s*\}/.test(t),r=/^\s*(case|default)\b/.test(t);return e.baseIndent+(n?0:r?1:2)*e.unit},Block:r({closing:`}`}),BlockComment:()=>null,Statement:n({except:/^{/})}),o.add({"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer":a,BlockComment(e){return{from:e.from+2,to:e.to-2}}})]}),languageData:{commentTokens:{line:`//`,block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*(?:case |default:|\{|\})$/}});function h(){return new t(m)}export{h as java};
@@ -1,4 +1,4 @@
1
- async function e(e){try{return await t(e)}catch(t){return console.warn(`[code-playpad] CodeMirror unavailable, using plain textarea:`,t),n(e)}}async function t(e){let[t,n,r,i,a,o]=await Promise.all([import(`@codemirror/view`),import(`@codemirror/state`),import(`@codemirror/commands`),import(`@codemirror/language`),import(`@codemirror/autocomplete`),import(`@codemirror/theme-one-dark`)]),{EditorView:s,keymap:c,lineNumbers:l,highlightActiveLine:u,highlightActiveLineGutter:d,highlightSpecialChars:f,drawSelection:p,rectangularSelection:m,crosshairCursor:h}=t,{EditorState:g,Compartment:_}=n,{defaultKeymap:v,history:y,historyKeymap:b,indentWithTab:x}=r,{syntaxHighlighting:S,defaultHighlightStyle:C,indentOnInput:w,bracketMatching:T,foldGutter:E,foldKeymap:D}=i,{autocompletion:O,closeBrackets:k,closeBracketsKeymap:A,completionKeymap:j}=a,M=new _,N=new _,P=new _,F=[s.theme({"&":{color:`#1f2328`,backgroundColor:`#ffffff`},".cm-gutters":{backgroundColor:`#f6f8fa`,color:`#8b949e`,border:`none`},".cm-activeLine":{backgroundColor:`#f6f8fa88`},".cm-activeLineGutter":{backgroundColor:`#eaeef2`},".cm-cursor":{borderLeftColor:`#1f2328`},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:`#cfe3ff`}}),S(C,{fallback:!0})],I=e=>e?o.oneDark:F,L=c.of([{key:`Mod-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)},{key:`Shift-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)}]),R=e.dark,z=e.readOnly,B=e.language??[],V=t=>g.create({doc:t,extensions:[l(),d(),f(),y(),E(),p(),g.allowMultipleSelections.of(!0),w(),T(),k(),O(),m(),h(),u(),L,c.of([...A,...v,...b,...D,...j,x]),s.lineWrapping,P.of(B),M.of(I(R)),N.of(g.readOnly.of(z)),s.updateListener.of(t=>{t.docChanged&&e.onChange?.(t.state.doc.toString())})]}),H=new s({parent:e.parent,state:V(e.doc)}),U=new Map,W=e.name??``;return{fallback:!1,getCode:()=>H.state.doc.toString(),setCode(e){H.dispatch({changes:{from:0,to:H.state.doc.length,insert:e}})},openFile(e,t){if(e===W)return;U.set(W,H.state);let n=U.get(e);H.setState(n??V(t)),W=e,n&&H.dispatch({effects:[M.reconfigure(I(R)),N.reconfigure(g.readOnly.of(z)),P.reconfigure(B)]})},fileCode(e,t){if(e===W)return H.state.doc.toString();let n=U.get(e);return n?n.doc.toString():t},forgetFiles(e){for(let t of[...U.keys()])e.includes(t)||U.delete(t)},setTheme(e){R=e,H.dispatch({effects:M.reconfigure(I(R))})},setReadOnly(e){z=e,H.dispatch({effects:N.reconfigure(g.readOnly.of(z))})},setLanguage(e){B=e,H.dispatch({effects:P.reconfigure(B)})},focus:()=>H.focus(),destroy:()=>H.destroy()}}function n(e){let t=document.createElement(`textarea`);t.className=`cp-fallback-editor`,t.spellcheck=!1,t.value=e.doc,t.readOnly=e.readOnly,t.addEventListener(`input`,()=>e.onChange?.(t.value)),t.addEventListener(`keydown`,t=>{(t.metaKey||t.ctrlKey)&&t.key===`Enter`&&(t.preventDefault(),e.onRun?.())}),e.parent.appendChild(t);let n=new Map,r=e.name??``;return{fallback:!0,getCode:()=>t.value,setCode:e=>{t.value=e},openFile(e,i){e!==r&&(n.set(r,t.value),t.value=n.get(e)??i,r=e)},fileCode(e,i){return e===r?t.value:n.get(e)??i},forgetFiles(e){for(let t of[...n.keys()])e.includes(t)||n.delete(t)},setTheme:()=>{},setReadOnly:e=>{t.readOnly=e},setLanguage:()=>{},focus:()=>t.focus(),destroy:()=>t.remove()}}var r=new Map,i=new Map;function a(e,t){r.set(e,t)}function o(){return[...r.keys()]}function s(e){let t=i.get(e);if(t)return t;let n=r.get(e);if(!n)return Promise.reject(Error(`Unknown runtime "${e}". Registered: ${o().join(`, `)||`none`}`));let a=n().catch(t=>{throw i.delete(e),t});return i.set(e,a),a}a(`python`,()=>import(`./pyodide-5ByQYqgo.js`).then(e=>e.pythonRuntime)),a(`javascript`,()=>import(`./javascript-RVtPk08Z.js`).then(e=>e.javascriptRuntime)),a(`typescript`,()=>import(`./javascript-RVtPk08Z.js`).then(e=>e.typescriptRuntime));var c=class extends Error{constructor(e=`Execution stopped`){super(e),this.name=`RunStopped`}},l=class extends Error{constructor(e=`Web Workers are unavailable in this page`){super(e),this.name=`WorkerUnavailable`}},u=String.raw`
1
+ async function e(e){try{return await t(e)}catch(t){return console.warn(`[code-playpad] CodeMirror unavailable, using plain textarea:`,t),n(e)}}async function t(e){let[t,n,r,i,a,o]=await Promise.all([import(`@codemirror/view`),import(`@codemirror/state`),import(`@codemirror/commands`),import(`@codemirror/language`),import(`@codemirror/autocomplete`),import(`@codemirror/theme-one-dark`)]),{EditorView:s,keymap:c,lineNumbers:l,highlightActiveLine:u,highlightActiveLineGutter:d,highlightSpecialChars:f,drawSelection:p,rectangularSelection:m,crosshairCursor:h}=t,{EditorState:g,Compartment:_}=n,{defaultKeymap:v,history:y,historyKeymap:b,indentWithTab:x}=r,{syntaxHighlighting:S,defaultHighlightStyle:C,indentOnInput:w,bracketMatching:T,foldGutter:E,foldKeymap:D}=i,{autocompletion:O,closeBrackets:k,closeBracketsKeymap:A,completionKeymap:j}=a,M=new _,N=new _,P=new _,F=[s.theme({"&":{color:`#1f2328`,backgroundColor:`#ffffff`},".cm-gutters":{backgroundColor:`#f6f8fa`,color:`#8b949e`,border:`none`},".cm-activeLine":{backgroundColor:`#f6f8fa88`},".cm-activeLineGutter":{backgroundColor:`#eaeef2`},".cm-cursor":{borderLeftColor:`#1f2328`},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:`#cfe3ff`}}),S(C,{fallback:!0})],I=e=>e?o.oneDark:F,L=c.of([{key:`Mod-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)},{key:`Shift-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)}]),R=e.dark,z=e.readOnly,B=e.language??[],V=t=>g.create({doc:t,extensions:[l(),d(),f(),y(),E(),p(),g.allowMultipleSelections.of(!0),w(),T(),k(),O(),m(),h(),u(),L,c.of([...A,...v,...b,...D,...j,x]),s.lineWrapping,P.of(B),M.of(I(R)),N.of(g.readOnly.of(z)),s.updateListener.of(t=>{t.docChanged&&e.onChange?.(t.state.doc.toString())})]}),H=new s({parent:e.parent,state:V(e.doc)}),U=new Map,W=e.name??``;return{fallback:!1,getCode:()=>H.state.doc.toString(),setCode(e){H.dispatch({changes:{from:0,to:H.state.doc.length,insert:e}})},openFile(e,t){if(e===W)return;U.set(W,H.state);let n=U.get(e);H.setState(n??V(t)),W=e,n&&H.dispatch({effects:[M.reconfigure(I(R)),N.reconfigure(g.readOnly.of(z)),P.reconfigure(B)]})},fileCode(e,t){if(e===W)return H.state.doc.toString();let n=U.get(e);return n?n.doc.toString():t},forgetFiles(e){for(let t of[...U.keys()])e.includes(t)||U.delete(t)},setTheme(e){R=e,H.dispatch({effects:M.reconfigure(I(R))})},setReadOnly(e){z=e,H.dispatch({effects:N.reconfigure(g.readOnly.of(z))})},setLanguage(e){B=e,H.dispatch({effects:P.reconfigure(B)})},focus:()=>H.focus(),destroy:()=>H.destroy()}}function n(e){let t=document.createElement(`textarea`);t.className=`cp-fallback-editor`,t.spellcheck=!1,t.value=e.doc,t.readOnly=e.readOnly,t.addEventListener(`input`,()=>e.onChange?.(t.value)),t.addEventListener(`keydown`,t=>{(t.metaKey||t.ctrlKey)&&t.key===`Enter`&&(t.preventDefault(),e.onRun?.())}),e.parent.appendChild(t);let n=new Map,r=e.name??``;return{fallback:!0,getCode:()=>t.value,setCode:e=>{t.value=e},openFile(e,i){e!==r&&(n.set(r,t.value),t.value=n.get(e)??i,r=e)},fileCode(e,i){return e===r?t.value:n.get(e)??i},forgetFiles(e){for(let t of[...n.keys()])e.includes(t)||n.delete(t)},setTheme:()=>{},setReadOnly:e=>{t.readOnly=e},setLanguage:()=>{},focus:()=>t.focus(),destroy:()=>t.remove()}}var r=new Map,i=new Map;function a(e,t){r.set(e,t)}function o(){return[...r.keys()]}function s(e){let t=i.get(e);if(t)return t;let n=r.get(e);if(!n)return Promise.reject(Error(`Unknown runtime "${e}". Registered: ${o().join(`, `)||`none`}`));let a=n().catch(t=>{throw i.delete(e),t});return i.set(e,a),a}a(`python`,()=>import(`./pyodide-BTGQ_X_F.js`).then(e=>e.pythonRuntime)),a(`javascript`,()=>import(`./javascript-hfFD1Fg2.js`).then(e=>e.javascriptRuntime)),a(`typescript`,()=>import(`./javascript-hfFD1Fg2.js`).then(e=>e.typescriptRuntime)),a(`java`,()=>import(`./java-1ISFU8hm.js`).then(e=>e.javaRuntime));var c=class extends Error{constructor(e=`Execution stopped`){super(e),this.name=`RunStopped`}},l=class extends Error{constructor(e=`Web Workers are unavailable in this page`){super(e),this.name=`WorkerUnavailable`}},u=new WeakSet,d=String.raw`
2
2
  :host {
3
3
  --cp-bg: #ffffff;
4
4
  --cp-fg: #1f2328;
@@ -294,12 +294,12 @@ table.cp-table th { background: var(--cp-bg); }
294
294
  @media (prefers-reduced-motion: reduce) {
295
295
  .cp-progress { animation: none; background-position: 0 0; background-size: 100% 100%; opacity: 0.4; }
296
296
  }
297
- `,d=e=>()=>import(`@codemirror/lang-javascript`).then(t=>t.javascript(e)),f={py:()=>import(`@codemirror/lang-python`).then(e=>e.python()),pyi:()=>import(`@codemirror/lang-python`).then(e=>e.python()),js:d({}),mjs:d({}),cjs:d({}),jsx:d({jsx:!0}),ts:d({typescript:!0}),mts:d({typescript:!0}),cts:d({typescript:!0}),tsx:d({typescript:!0,jsx:!0}),json:()=>import(`@codemirror/lang-json`).then(e=>e.json())};async function p(e){let t=f[e.includes(`.`)?e.slice(e.lastIndexOf(`.`)+1).toLowerCase():``];return t?t().catch(()=>null):null}var m=`code-playpad`,h=1,g=`snippets`,_=`progress`,v=null;function y(){return typeof indexedDB>`u`?Promise.reject(Error(`IndexedDB unavailable`)):(v||=new Promise((e,t)=>{let n=indexedDB.open(m,h);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(g)||e.createObjectStore(g),e.objectStoreNames.contains(_)||e.createObjectStore(_,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}).catch(e=>{throw v=null,e}),v)}function b(e,t,n){return y().then(r=>new Promise((i,a)=>{let o=n(r.transaction(e,t).objectStore(e));o.onsuccess=()=>i(o.result),o.onerror=()=>a(o.error)}))}function x(e,t){return b(g,`readwrite`,n=>n.put(t,e)).then(()=>void 0)}function S(e){return b(g,`readonly`,t=>t.get(e)).then(e=>e??null)}function C(e){return b(g,`readwrite`,t=>t.delete(e)).then(()=>void 0)}function w(e,t={}){let n={completed:!0,...t,id:e,updatedAt:Date.now()};return b(_,`readwrite`,e=>e.put(n)).then(()=>n)}function T(e){return b(_,`readonly`,t=>t.get(e)).then(e=>e??null)}function E(){return b(_,`readonly`,e=>e.getAll())}var D=`code-playpad`;function O(e){let t=e.replace(/\t/g,` `).split(`
297
+ `,f=e=>()=>import(`@codemirror/lang-javascript`).then(t=>t.javascript(e)),p={py:()=>import(`@codemirror/lang-python`).then(e=>e.python()),pyi:()=>import(`@codemirror/lang-python`).then(e=>e.python()),js:f({}),mjs:f({}),cjs:f({}),jsx:f({jsx:!0}),ts:f({typescript:!0}),mts:f({typescript:!0}),cts:f({typescript:!0}),tsx:f({typescript:!0,jsx:!0}),json:()=>import(`@codemirror/lang-json`).then(e=>e.json()),java:()=>import(`@codemirror/lang-java`).then(e=>e.java())};async function m(e){let t=p[e.includes(`.`)?e.slice(e.lastIndexOf(`.`)+1).toLowerCase():``];return t?t().catch(()=>null):null}var h=`code-playpad`,g=1,_=`snippets`,v=`progress`,y=null;function b(){return typeof indexedDB>`u`?Promise.reject(Error(`IndexedDB unavailable`)):(y||=new Promise((e,t)=>{let n=indexedDB.open(h,g);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(_)||e.createObjectStore(_),e.objectStoreNames.contains(v)||e.createObjectStore(v,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}).catch(e=>{throw y=null,e}),y)}function x(e,t,n){return b().then(r=>new Promise((i,a)=>{let o=n(r.transaction(e,t).objectStore(e));o.onsuccess=()=>i(o.result),o.onerror=()=>a(o.error)}))}function S(e,t){return x(_,`readwrite`,n=>n.put(t,e)).then(()=>void 0)}function C(e){return x(_,`readonly`,t=>t.get(e)).then(e=>e??null)}function w(e){return x(_,`readwrite`,t=>t.delete(e)).then(()=>void 0)}function T(e,t={}){let n={completed:!0,...t,id:e,updatedAt:Date.now()};return x(v,`readwrite`,e=>e.put(n)).then(()=>n)}function E(e){return x(v,`readonly`,t=>t.get(e)).then(e=>e??null)}function D(){return x(v,`readonly`,e=>e.getAll())}var O=`code-playpad`;function k(e){let t=e.replace(/\t/g,` `).split(`
298
298
  `);for(;t.length&&t[0].trim()===``;)t.shift();for(;t.length&&t[t.length-1].trim()===``;)t.pop();let n=t.filter(e=>e.trim()!==``).reduce((e,t)=>Math.min(e,t.match(/^ */)[0].length),1/0);return(n===1/0?t:t.map(e=>e.slice(n))).join(`
299
- `)}var k=2e5,A=`playpad-file`,j={python:`main.py`,javascript:`main.js`,typescript:`main.ts`};function M(e){return j[e]??`main.txt`}function N(e,t){let n={};for(let t of e.children){if(t.tagName.toLowerCase()!==A)continue;let e=t.getAttribute(`name`);e&&(n[e]=O(t.textContent??``))}if(Object.keys(n).length)return n;let r=[...e.childNodes].filter(e=>e.nodeType!==Node.ELEMENT_NODE||e.tagName.toLowerCase()!==A),i=r.some(e=>e.nodeType===Node.ELEMENT_NODE),a=O(r.filter(e=>!(i&&e.nodeType===Node.TEXT_NODE&&!(e.textContent??``).trim())).map(e=>e.textContent??``).join(``));return{[t]:a}}function P(e,t){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t;return Object.keys(e).length?e:null}}catch{}return e?{[t]:e}:null}var F=typeof HTMLElement>`u`?class{}:HTMLElement,I=class extends F{static get observedAttributes(){return[`language`,`height`,`min-height`,`max-height`,`theme`,`readonly`,`autorun`,`stdin`,`persist`,`entry`]}#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u=null;#d=null;#f=null;#p=null;#m={};#h={};#g=`main.py`;#_=null;#v;#y=!1;#b=!1;#x=null;#S=null;#C=null;#w=()=>this.#W();#T=null;#E=!0;#D=[];#O=null;#k=null;#A=null;#j=0;#M=!1;constructor(){super(),this.#e=this.attachShadow({mode:`open`})}get code(){return this.#u?this.#u.getCode():this.#m[this.#g]??``}set code(e){this.#m[this.#g]=e,this.#R()}get files(){return this.#B()}set files(e){let t=Object.keys(e);if(!t.length)return;let n=Object.keys(this.#h);n.length===1&&!this.#h[n[0]]&&(this.#h={...e}),this.#m={...e},t.includes(this.#g)||(this.#g=this.#z()),this.#u?.forgetFiles([]),this.#R(),this.#V(),this.#L()}get entry(){return this.#z()}set entry(e){this.setAttribute(`entry`,e)}openFile(e){e in this.#m&&(this.#u&&(this.#m[this.#g]=this.#u.getCode(),this.#u.openFile(e,this.#m[e]??``)),this.#g=e,this.#V(),this.#L())}get stdin(){return this.#l?this.#l.value:``}set stdin(e){this.#l&&(this.#l.value=e,this.#c.hidden=!1)}get language(){return this.getAttribute(`language`)||`python`}set language(e){this.setAttribute(`language`,e)}getCode(){return this.code}getFiles(){return this.#B()}reset(){this.#m={...this.#h},this.#g=this.#z(),this.#u?.forgetFiles([]),this.#R(),this.#V(),this.#q(),this.#s.hidden=!0,this.#K(this.#f?.ready?`${this.#f.label} ready`:``,`idle`)}async run(){if(this.#y)return;await this.#d;let e=this.#B(),t=this.#z(),n=e[t]??``;this.#y=!0,this.#n.disabled=!0,this.#r.hidden=!1,this.#q(),this.#s.hidden=!1,this.#ee(`py-run`,{code:n,entry:t,files:e,language:this.language});try{let r=await this.#I();this.#K(`Queued…`,`busy`),this.#o.hidden=!1;let i=await r.run(n,{stdin:this.#l.value,files:e,entry:t,onStart:()=>this.#K(`Running…`,`busy`),onStdout:e=>this.#J(e),onStderr:e=>this.#J(e,`cp-err`),onEcho:e=>this.#J(e,`cp-in`),onStdinRequest:()=>this.#X()});return i.table&&this.#$(i.table),i.value!==void 0&&this.#J(`${i.value}\n`,`cp-value`),i.hint&&this.#Q(i.hint),i.stderr?(this.#K(`Error · ${i.durationMs} ms`,`error`),this.#ee(`py-error`,{message:i.stderr,hint:i.hint,language:this.language})):this.#K(`Done in ${i.durationMs} ms`,`ok`),this.#ee(`py-output`,{...i,language:this.language}),i}catch(e){if(e instanceof c)this.#J(`
299
+ `)}var A=2e5,j=`playpad-file`,M={python:`main.py`,javascript:`main.js`,typescript:`main.ts`,java:`Main.java`};function N(e){return M[e]??`main.txt`}function P(e,t){let n={};for(let t of e.children){if(t.tagName.toLowerCase()!==j)continue;let e=t.getAttribute(`name`);e&&(n[e]=k(t.textContent??``))}if(Object.keys(n).length)return n;let r=[...e.childNodes].filter(e=>e.nodeType!==Node.ELEMENT_NODE||e.tagName.toLowerCase()!==j),i=r.some(e=>e.nodeType===Node.ELEMENT_NODE),a=k(r.filter(e=>!(i&&e.nodeType===Node.TEXT_NODE&&!(e.textContent??``).trim())).map(e=>e.textContent??``).join(``));return{[t]:a}}function F(e,t){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t;return Object.keys(e).length?e:null}}catch{}return e?{[t]:e}:null}var I=typeof HTMLElement>`u`?class{}:HTMLElement,L=class extends I{static get observedAttributes(){return[`language`,`height`,`min-height`,`max-height`,`theme`,`readonly`,`autorun`,`stdin`,`persist`,`entry`]}#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u=null;#d=null;#f=null;#p=null;#m={};#h={};#g=`main.py`;#_=null;#v;#y=!1;#b=null;#x=!1;#S=!1;#C=null;#w=null;#T=null;#E=()=>this.#K();#D=null;#O=!0;#k=[];#A=null;#j=null;#M=null;#N=0;#P=!1;constructor(){super(),this.#e=this.attachShadow({mode:`open`})}get code(){return this.#u?this.#u.getCode():this.#m[this.#g]??``}set code(e){this.#m[this.#g]=e,this.#B()}get files(){return this.#H()}set files(e){let t=Object.keys(e);if(!t.length)return;let n=Object.keys(this.#h);n.length===1&&!this.#h[n[0]]&&(this.#h={...e}),this.#m={...e},t.includes(this.#g)||(this.#g=this.#V()),this.#u?.forgetFiles([]),this.#B(),this.#U(),this.#z()}get entry(){return this.#V()}set entry(e){this.setAttribute(`entry`,e)}openFile(e){e in this.#m&&(this.#u&&(this.#m[this.#g]=this.#u.getCode(),this.#u.openFile(e,this.#m[e]??``)),this.#g=e,this.#U(),this.#z())}get stdin(){return this.#l?this.#l.value:``}set stdin(e){this.#l&&(this.#l.value=e,this.#c.hidden=!1)}get language(){return this.getAttribute(`language`)||`python`}set language(e){this.setAttribute(`language`,e)}getCode(){return this.code}getFiles(){return this.#H()}reset(){this.#m={...this.#h},this.#g=this.#V(),this.#u?.forgetFiles([]),this.#B(),this.#U(),this.#Y(),this.#s.hidden=!0,this.#J(this.#f?.ready?`${this.#f.label} ready`:``,`idle`)}async run(){if(this.#y)return;await this.#d;let e=this.#H(),t=this.#V(),n=e[t]??``;this.#y=!0,this.#x=!1,this.#n.disabled=!0,this.#r.hidden=!1,this.#Y(),this.#s.hidden=!1,this.#ne(`py-run`,{code:n,entry:t,files:e,language:this.language});try{let r=await this.#R();if(this.#x)throw new c;this.#J(`Queued…`,`busy`),this.#o.hidden=!1;let i=r.run(n,{stdin:this.#l.value,files:e,entry:t,onStart:()=>this.#J(`Running…`,`busy`),onStdout:e=>this.#X(e),onStderr:e=>this.#X(e,`cp-err`),onEcho:e=>this.#X(e,`cp-in`),onStdinRequest:()=>this.#Q()});this.#b={runtime:r,run:i};let a=await i;return a.table&&this.#te(a.table),a.value!==void 0&&this.#X(`${a.value}\n`,`cp-value`),a.hint&&this.#ee(a.hint,u.has(a)),a.stderr?(this.#J(`Error · ${a.durationMs} ms`,`error`),this.#ne(`py-error`,{message:a.stderr,hint:a.hint,language:this.language})):this.#J(`Done in ${a.durationMs} ms`,`ok`),this.#ne(`py-output`,{...a,language:this.language}),a}catch(e){if(e instanceof c)this.#X(`
300
300
  [stopped]
301
- `,`cp-err`),this.#K(`Stopped`,`error`);else{let t=e instanceof Error?e.message:String(e);this.#J(t+`
302
- `,`cp-err`),this.#K(`Failed to start`,`error`),this.#ee(`py-error`,{message:t,language:this.language})}return}finally{this.#Z(null),this.#Y(),this.#y=!1,this.#n.disabled=!1,this.#r.hidden=!0,this.#o.hidden=!0}}stop(){this.#f?.stop?.()}prewarm(){return this.#I()}connectedCallback(){if(this.#M){this.#F();return}if(!this.textContent?.trim()&&document.readyState===`loading`){document.addEventListener(`DOMContentLoaded`,()=>this.isConnected&&this.#N(),{once:!0});return}this.#N()}disconnectedCallback(){this.#x?.disconnect(),this.#x=null,this.#S?.removeEventListener(`change`,this.#w),this.#S=null,this.#C?.disconnect(),this.#C=null,this.#T&&clearTimeout(this.#T),this.#Z(null),setTimeout(()=>{this.isConnected||!this.#u||(this.#_=this.#B(),this.#u.destroy(),this.#u=null,this.#d=null,this.#M=!1)},0)}attributeChangedCallback(e,t,n){if(this.#M)switch(e){case`theme`:this.#W();break;case`height`:case`min-height`:case`max-height`:this.#G();break;case`readonly`:this.#u?.setReadOnly(n!==null);break;case`stdin`:this.#c.hidden=n===null&&!this.#l.value;break;case`entry`:this.#V();break;case`language`:this.#f=null,this.#p=null,this.#b=!1,this.#I().catch(()=>{})}}#N(){this.#M=!0,this.#h=N(this,M(this.language)),this.#m=this.#_??{...this.#h},this.#g=this.#z(),this.#P(),this.#W(),this.#G();let t=this.getAttribute(`persist`);this.#d=(async()=>{if(t&&this.#_==null){let e=await S(t).catch(()=>null),n=e==null?null:P(e,M(this.language));if(n){let e={};for(let t of Object.keys(this.#h))e[t]=n[t]??this.#h[t];this.#m=e,this.#g=this.#z()}}this.#V();let n=await s(this.language).catch(()=>null),r=n?await n.editorLanguage().catch(()=>null):null;this.#u=await e({parent:this.#t,doc:this.#m[this.#g]??``,name:this.#g,dark:this.#U(),readOnly:this.hasAttribute(`readonly`),language:r,onRun:()=>void this.run(),onChange:e=>this.#H(e)}),this.#_=null,this.#L()})(),this.#F()}#P(){let e=document.createElement(`style`);e.textContent=u;let t=document.createElement(`div`);t.className=`cp-root`,t.innerHTML=`
301
+ `,`cp-err`),this.#J(`Stopped`,`error`);else{let t=e instanceof Error?e.message:String(e);this.#X(t+`
302
+ `,`cp-err`),this.#J(`Failed to start`,`error`),this.#ne(`py-error`,{message:t,language:this.language})}return}finally{this.#b=null,this.#$(null),this.#Z(),this.#y=!1,this.#n.disabled=!1,this.#r.hidden=!0,this.#o.hidden=!0}}stop(){this.#b?this.#b.runtime.stop?.(this.#b.run):this.#y&&(this.#x=!0)}prewarm(){return this.#R()}connectedCallback(){if(this.#P){this.#L();return}if(!this.textContent?.trim()&&document.readyState===`loading`){document.addEventListener(`DOMContentLoaded`,()=>this.isConnected&&this.#F(),{once:!0});return}this.#F()}disconnectedCallback(){this.#C?.disconnect(),this.#C=null,this.#w?.removeEventListener(`change`,this.#E),this.#w=null,this.#T?.disconnect(),this.#T=null,this.#D&&clearTimeout(this.#D),this.#$(null),setTimeout(()=>{this.isConnected||!this.#u||(this.#_=this.#H(),this.#u.destroy(),this.#u=null,this.#d=null,this.#P=!1)},0)}attributeChangedCallback(e,t,n){if(this.#P)switch(e){case`theme`:this.#K();break;case`height`:case`min-height`:case`max-height`:this.#q();break;case`readonly`:this.#u?.setReadOnly(n!==null);break;case`stdin`:this.#c.hidden=n===null&&!this.#l.value;break;case`entry`:this.#U();break;case`language`:this.#f=null,this.#p=null,this.#S=!1,this.#R().catch(()=>{})}}#F(){this.#P=!0,this.#h=P(this,N(this.language)),this.#m=this.#_??{...this.#h},this.#g=this.#V(),this.#I(),this.#K(),this.#q();let t=this.getAttribute(`persist`);this.#d=(async()=>{if(t&&this.#_==null){let e=await C(t).catch(()=>null),n=e==null?null:F(e,N(this.language));if(n){let e={};for(let t of Object.keys(this.#h))e[t]=n[t]??this.#h[t];this.#m=e,this.#g=this.#V()}}this.#U();let n=await s(this.language).catch(()=>null),r=n?await n.editorLanguage().catch(()=>null):null;this.#u=await e({parent:this.#t,doc:this.#m[this.#g]??``,name:this.#g,dark:this.#G(),readOnly:this.hasAttribute(`readonly`),language:r,onRun:()=>void this.run(),onChange:e=>this.#W(e)}),this.#_=null,this.#z()})(),this.#L()}#I(){let e=document.createElement(`style`);e.textContent=d;let t=document.createElement(`div`);t.className=`cp-root`,t.innerHTML=`
303
303
  <div class="cp-toolbar">
304
304
  <button class="cp-primary" part="run-button" data-action="run">Run</button>
305
305
  <button class="cp-danger" part="stop-button" data-action="stop" hidden>Stop</button>
@@ -314,10 +314,10 @@ table.cp-table th { background: var(--cp-bg); }
314
314
  <label>Standard input — one value per line</label>
315
315
  <textarea rows="2" spellcheck="false"></textarea>
316
316
  </div>
317
- <pre class="cp-output" part="output" hidden></pre>`,this.#e.replaceChildren(e,t),this.#n=t.querySelector(`[data-action="run"]`),this.#r=t.querySelector(`[data-action="stop"]`),this.#i=t.querySelector(`[data-action="reset"]`),this.#a=t.querySelector(`.cp-status`),this.#o=t.querySelector(`.cp-progress`),this.#v=t.querySelector(`.cp-tabs`),this.#t=t.querySelector(`.cp-editor`),this.#c=t.querySelector(`.cp-stdin`),this.#l=t.querySelector(`.cp-stdin textarea`),this.#s=t.querySelector(`.cp-output`),this.#c.hidden=!this.hasAttribute(`stdin`),this.#l.addEventListener(`input`,()=>this.#c.classList.remove(`cp-attention`)),this.#v.addEventListener(`click`,e=>{let t=e.target.closest(`button[data-file]`);t&&this.openFile(t.getAttribute(`data-file`))}),this.#n.addEventListener(`click`,()=>void this.run()),this.#r.addEventListener(`click`,()=>this.stop()),this.#i.addEventListener(`click`,()=>this.reset());let n=()=>void this.#I().catch(()=>{});this.#t.addEventListener(`pointerdown`,n,{once:!0}),this.#t.addEventListener(`focusin`,n,{once:!0})}#F(){this.#x||typeof IntersectionObserver>`u`||(this.#x=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(this.#x?.disconnect(),this.#x=null,this.#I().then(()=>{this.hasAttribute(`autorun`)&&this.run()}).catch(()=>{}))},{rootMargin:`300px`}),this.#x.observe(this))}#I(){return this.#p||=(async()=>{let e=await s(this.language);this.#f=e,e.ready||(this.#o.hidden=!1,this.#K(`Loading ${e.label}…`,`busy`));try{await e.load(e=>{this.#y||this.#K(e.message,e.phase===`ready`?`ok`:`busy`)})}catch(e){this.#p=null,this.#K(`Runtime unavailable`,`error`);let t=e instanceof Error?e.message:String(e);throw this.#J(t+`
318
- `,`cp-err`),this.#s.hidden=!1,e}finally{this.#o.hidden=!0}return this.#L(),this.#b||(this.#b=!0,this.#K(`${e.label} ready`,`ok`),this.#ee(`py-ready`,{language:e.id,label:e.label})),e})(),this.#p}async#L(){if(!this.#u)return;let e=this.#g,t=await p(e);if(t){this.#g===e&&this.#u?.setLanguage(t);return}let n=e.includes(`.`)?null:await(this.#f??await s(this.language).catch(()=>null))?.editorLanguage().catch(()=>null);this.#g===e&&this.#u?.setLanguage(n??[])}#R(){if(this.#u){this.#u.setCode(this.#m[this.#g]??``);return}this.#d?.then(()=>{this.#u?.setCode(this.#m[this.#g]??``),this.#V()})}#z(){let e=Object.keys(this.#m),t=this.getAttribute(`entry`);if(t&&e.includes(t))return t;let n=M(this.language);return e.includes(n)?n:e[0]??n}#B(){let e={...this.#m};if(this.#u)for(let t of Object.keys(e))e[t]=this.#u.fileCode(t,e[t]);return e}#V(){let e=Object.keys(this.#m);if(this.#v.hidden=e.length<2,this.#v.hidden){this.#v.replaceChildren();return}let t=this.#z();this.#v.replaceChildren(...e.map(e=>{let n=document.createElement(`button`);return n.dataset.file=e,n.textContent=e,n.setAttribute(`aria-pressed`,String(e===this.#g)),e===t&&(n.classList.add(`cp-entry`),n.title=`entry point — this is the file Run executes`),n}))}#H(e){this.#m[this.#g]=e;let t=this.getAttribute(`persist`);if(!t)return;this.#T&&clearTimeout(this.#T);let n=JSON.stringify(this.#B());this.#T=setTimeout(()=>void x(t,n).catch(()=>{}),400)}#U(){let e=this.getAttribute(`theme`)??`auto`;if(e===`dark`)return!0;if(e===`light`)return!1;let t=typeof document>`u`?``:getComputedStyle(document.documentElement).colorScheme,n=t.includes(`dark`);return n===t.includes(`light`)?!!this.#S?.matches:n}#W(){!this.#S&&typeof matchMedia==`function`&&(this.#S=matchMedia(`(prefers-color-scheme: dark)`),this.#S.addEventListener(`change`,this.#w)),!this.#C&&typeof MutationObserver==`function`&&typeof document<`u`&&(this.#C=new MutationObserver(this.#w),this.#C.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`,`style`,`data-theme`,`data-color-scheme`,`color-scheme`]}));let e=this.#U();this.setAttribute(`data-resolved-theme`,e?`dark`:`light`),this.#u?.setTheme(e)}#G(){for(let[e,t]of[[`height`,`--cp-height`],[`min-height`,`--cp-min-height`],[`max-height`,`--cp-max-height`]]){let n=this.getAttribute(e);n===null||n===``?this.style.removeProperty(t):this.style.setProperty(t,/^\d+$/.test(n)?`${n}px`:n)}}#K(e,t){this.#a.textContent=e,this.#a.dataset.state=t}#q(){this.#A&&clearTimeout(this.#A),this.#A=null,this.#D=[],this.#j=0,this.#s.replaceChildren(),this.#E=!0}#J(e,t){if(!e)return;let n=t===`cp-err`&&!this.#E?`\n${e}`:e;this.#E=n.endsWith(`
319
- `),this.#D.push({text:n,className:t}),this.#A??=setTimeout(()=>this.#Y(),16)}#Y(){if(this.#A&&clearTimeout(this.#A),this.#A=null,!this.#D.length)return;let e=this.#D;this.#D=[];let t=document.createDocumentFragment(),n=``,r,i=()=>{if(!n)return;let e=document.createElement(`span`);r&&(e.className=r),e.textContent=n,t.appendChild(e),n=``};for(let t of e){if(this.#j>=k)break;let e=t.text;this.#j+e.length>k&&(e=e.slice(0,k-this.#j)+`
317
+ <pre class="cp-output" part="output" hidden></pre>`,this.#e.replaceChildren(e,t),this.#n=t.querySelector(`[data-action="run"]`),this.#r=t.querySelector(`[data-action="stop"]`),this.#i=t.querySelector(`[data-action="reset"]`),this.#a=t.querySelector(`.cp-status`),this.#o=t.querySelector(`.cp-progress`),this.#v=t.querySelector(`.cp-tabs`),this.#t=t.querySelector(`.cp-editor`),this.#c=t.querySelector(`.cp-stdin`),this.#l=t.querySelector(`.cp-stdin textarea`),this.#s=t.querySelector(`.cp-output`),this.#c.hidden=!this.hasAttribute(`stdin`),this.#l.addEventListener(`input`,()=>this.#c.classList.remove(`cp-attention`)),this.#v.addEventListener(`click`,e=>{let t=e.target.closest(`button[data-file]`);t&&this.openFile(t.getAttribute(`data-file`))}),this.#n.addEventListener(`click`,()=>void this.run()),this.#r.addEventListener(`click`,()=>this.stop()),this.#i.addEventListener(`click`,()=>this.reset());let n=()=>void this.#R().catch(()=>{});this.#t.addEventListener(`pointerdown`,n,{once:!0}),this.#t.addEventListener(`focusin`,n,{once:!0})}#L(){this.#C||typeof IntersectionObserver>`u`||(this.#C=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(this.#C?.disconnect(),this.#C=null,this.#R().then(()=>{this.hasAttribute(`autorun`)&&this.run()}).catch(()=>{}))},{rootMargin:`300px`}),this.#C.observe(this))}#R(){return this.#p||=(async()=>{let e=await s(this.language);this.#f=e,e.ready||(this.#o.hidden=!1,this.#J(`Loading ${e.label}…`,`busy`));try{await e.load(e=>{this.#y||this.#J(e.message,e.phase===`ready`?`ok`:`busy`)})}catch(e){this.#p=null,this.#J(`Runtime unavailable`,`error`);let t=e instanceof Error?e.message:String(e);throw this.#X(t+`
318
+ `,`cp-err`),this.#s.hidden=!1,e}finally{this.#o.hidden=!0}return this.#z(),this.#S||(this.#S=!0,this.#J(`${e.label} ready`,`ok`),this.#ne(`py-ready`,{language:e.id,label:e.label})),e})(),this.#p}async#z(){if(!this.#u)return;let e=this.#g,t=await m(e);if(t){this.#g===e&&this.#u?.setLanguage(t);return}let n=e.includes(`.`)?null:await(this.#f??await s(this.language).catch(()=>null))?.editorLanguage().catch(()=>null);this.#g===e&&this.#u?.setLanguage(n??[])}#B(){if(this.#u){this.#u.setCode(this.#m[this.#g]??``);return}this.#d?.then(()=>{this.#u?.setCode(this.#m[this.#g]??``),this.#U()})}#V(){let e=Object.keys(this.#m),t=this.getAttribute(`entry`);if(t&&e.includes(t))return t;let n=N(this.language);return e.includes(n)?n:e[0]??n}#H(){let e={...this.#m};if(this.#u)for(let t of Object.keys(e))e[t]=this.#u.fileCode(t,e[t]);return e}#U(){let e=Object.keys(this.#m);if(this.#v.hidden=e.length<2,this.#v.hidden){this.#v.replaceChildren();return}let t=this.#V();this.#v.replaceChildren(...e.map(e=>{let n=document.createElement(`button`);return n.dataset.file=e,n.textContent=e,n.setAttribute(`aria-pressed`,String(e===this.#g)),e===t&&(n.classList.add(`cp-entry`),n.title=`entry point — this is the file Run executes`),n}))}#W(e){this.#m[this.#g]=e;let t=this.getAttribute(`persist`);if(!t)return;this.#D&&clearTimeout(this.#D);let n=JSON.stringify(this.#H());this.#D=setTimeout(()=>void S(t,n).catch(()=>{}),400)}#G(){let e=this.getAttribute(`theme`)??`auto`;if(e===`dark`)return!0;if(e===`light`)return!1;let t=typeof document>`u`?``:getComputedStyle(document.documentElement).colorScheme,n=t.includes(`dark`);return n===t.includes(`light`)?!!this.#w?.matches:n}#K(){!this.#w&&typeof matchMedia==`function`&&(this.#w=matchMedia(`(prefers-color-scheme: dark)`),this.#w.addEventListener(`change`,this.#E)),!this.#T&&typeof MutationObserver==`function`&&typeof document<`u`&&(this.#T=new MutationObserver(this.#E),this.#T.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`,`style`,`data-theme`,`data-color-scheme`,`color-scheme`]}));let e=this.#G();this.setAttribute(`data-resolved-theme`,e?`dark`:`light`),this.#u?.setTheme(e)}#q(){for(let[e,t]of[[`height`,`--cp-height`],[`min-height`,`--cp-min-height`],[`max-height`,`--cp-max-height`]]){let n=this.getAttribute(e);n===null||n===``?this.style.removeProperty(t):this.style.setProperty(t,/^\d+$/.test(n)?`${n}px`:n)}}#J(e,t){this.#a.textContent=e,this.#a.dataset.state=t}#Y(){this.#M&&clearTimeout(this.#M),this.#M=null,this.#k=[],this.#N=0,this.#s.replaceChildren(),this.#O=!0}#X(e,t){if(!e)return;let n=t===`cp-err`&&!this.#O?`\n${e}`:e;this.#O=n.endsWith(`
319
+ `),this.#k.push({text:n,className:t}),this.#M??=setTimeout(()=>this.#Z(),16)}#Z(){if(this.#M&&clearTimeout(this.#M),this.#M=null,!this.#k.length)return;let e=this.#k;this.#k=[];let t=document.createDocumentFragment(),n=``,r,i=()=>{if(!n)return;let e=document.createElement(`span`);r&&(e.className=r),e.textContent=n,t.appendChild(e),n=``};for(let t of e){if(this.#N>=A)break;let e=t.text;this.#N+e.length>A&&(e=e.slice(0,A-this.#N)+`
320
320
  … output truncated for display — the full text is in the py-output event
321
- `),this.#j+=t.text.length,r!==t.className&&(i(),r=t.className),n+=e}i(),this.#s.hidden=!1;let a=this.#s.querySelector(`.cp-prompt`);a?this.#s.insertBefore(t,a):this.#s.appendChild(t),this.#s.scrollTop=this.#s.scrollHeight}#X(){return this.#Y(),this.#Z(null),new Promise(e=>{let t=document.createElement(`form`);t.className=`cp-prompt`;let n=document.createElement(`input`);n.type=`text`,n.setAttribute(`aria-label`,`Program input — press Enter to send`),n.autocapitalize=`off`,n.autocomplete=`off`,n.spellcheck=!1;let r=document.createElement(`button`);r.type=`submit`,r.className=`cp-send`,r.textContent=`⏎`,r.title=`Send this line (Enter)`;let i=document.createElement(`button`);i.type=`button`,i.className=`cp-eof`,i.textContent=`EOF`,i.title=`End of input (Ctrl-D) — makes input() raise EOFError`;let a=n=>{this.#O===e&&(this.#O=null,this.#k=null,t.remove(),n===null?this.#J(`
322
- `,`cp-in`):this.#J(n+`
323
- `,`cp-in`),this.#Y(),e(n))};t.addEventListener(`submit`,e=>{e.preventDefault(),a(n.value)}),i.addEventListener(`click`,()=>a(null)),n.addEventListener(`keydown`,e=>{(e.key===`Escape`||e.key===`d`&&e.ctrlKey)&&(e.preventDefault(),a(null))}),t.append(n,r,i),this.#s.hidden=!1,this.#s.appendChild(t),this.#s.scrollTop=this.#s.scrollHeight,this.#O=e,this.#k=a,n.focus({preventScroll:!0})})}#Z(e){this.#k?.(e),this.#k=null,this.#O=null}#Q(e){this.#Y();let t=document.createElement(`div`);t.className=`cp-hint`,t.textContent=e,this.#s.hidden=!1,this.#s.appendChild(t),this.#s.scrollTop=this.#s.scrollHeight,this.#c.hidden=!1,this.#c.classList.add(`cp-attention`)}#$(e){this.#Y();let t=document.createElement(`table`);t.className=`cp-table`;let n=t.createTHead().insertRow();for(let t of e.columns){let e=document.createElement(`th`);e.textContent=t,n.appendChild(e)}let r=t.createTBody();for(let t of e.rows){let e=r.insertRow();for(let n of t)e.insertCell().textContent=n==null?``:String(n)}this.#s.hidden=!1,this.#s.appendChild(t)}#ee(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}};function L(e=D){typeof window>`u`||typeof customElements>`u`||customElements.get(e)||customElements.define(e,I)}L();export{T as a,w as c,s as d,o as f,C as i,c as l,e as m,L as n,S as o,a as p,E as r,x as s,I as t,l as u};
321
+ `),this.#N+=t.text.length,r!==t.className&&(i(),r=t.className),n+=e}i(),this.#s.hidden=!1;let a=this.#s.querySelector(`.cp-prompt`);a?this.#s.insertBefore(t,a):this.#s.appendChild(t),this.#s.scrollTop=this.#s.scrollHeight}#Q(){return this.#Z(),this.#$(null),new Promise(e=>{let t=document.createElement(`form`);t.className=`cp-prompt`;let n=document.createElement(`input`);n.type=`text`,n.setAttribute(`aria-label`,`Program input — press Enter to send`),n.autocapitalize=`off`,n.autocomplete=`off`,n.spellcheck=!1;let r=document.createElement(`button`);r.type=`submit`,r.className=`cp-send`,r.textContent=`⏎`,r.title=`Send this line (Enter)`;let i=document.createElement(`button`);i.type=`button`,i.className=`cp-eof`,i.textContent=`EOF`,i.title=`End of input (Ctrl-D) — makes input() raise EOFError`;let a=n=>{this.#A===e&&(this.#A=null,this.#j=null,t.remove(),n===null?this.#X(`
322
+ `,`cp-in`):this.#X(n+`
323
+ `,`cp-in`),this.#Z(),e(n))};t.addEventListener(`submit`,e=>{e.preventDefault(),a(n.value)}),i.addEventListener(`click`,()=>a(null)),n.addEventListener(`keydown`,e=>{(e.key===`Escape`||e.key===`d`&&e.ctrlKey)&&(e.preventDefault(),a(null))}),t.append(n,r,i),this.#s.hidden=!1,this.#s.appendChild(t),this.#s.scrollTop=this.#s.scrollHeight,this.#A=e,this.#j=a,n.focus({preventScroll:!0})})}#$(e){this.#j?.(e),this.#j=null,this.#A=null}#ee(e,t){this.#Z();let n=document.createElement(`div`);n.className=`cp-hint`,n.textContent=e,this.#s.hidden=!1,this.#s.appendChild(n),this.#s.scrollTop=this.#s.scrollHeight,t&&(this.#c.hidden=!1,this.#c.classList.add(`cp-attention`))}#te(e){this.#Z();let t=document.createElement(`table`);t.className=`cp-table`;let n=t.createTHead().insertRow();for(let t of e.columns){let e=document.createElement(`th`);e.textContent=t,n.appendChild(e)}let r=t.createTBody();for(let t of e.rows){let e=r.insertRow();for(let n of t)e.insertCell().textContent=n==null?``:String(n)}this.#s.hidden=!1,this.#s.appendChild(t)}#ne(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}};function R(e=O){typeof window>`u`||typeof customElements>`u`||customElements.get(e)||customElements.define(e,L)}R();export{E as a,T as c,l as d,s as f,e as h,w as i,u as l,a as m,R as n,C as o,o as p,D as r,S as s,L as t,c as u};
package/dist/element.d.ts CHANGED
@@ -51,6 +51,9 @@ export declare class CodePlayPadElement extends ElementBase {
51
51
  reset(): void;
52
52
  /** Runs the entry file, with every other file placed alongside it first. */
53
53
  run(): Promise<Result | undefined>;
54
+ /** Stops this widget's own run — queued or executing — and nobody else's.
55
+ * The runtime is shared, so a bare runtime.stop() would kill whichever
56
+ * widget happens to be running. */
54
57
  stop(): void;
55
58
  /** Boot the runtime without running anything. Safe to call repeatedly. */
56
59
  prewarm(): Promise<Runtime>;
package/dist/element.js CHANGED
@@ -1 +1 @@
1
- import{n as e,t}from"./element-VP5lhHx6.js";export{t as CodePlayPadElement,e as defineCodePlayPad};
1
+ import{n as e,t}from"./element-BYcX5Z6z.js";export{t as CodePlayPadElement,e as defineCodePlayPad};
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * code-playpad — MIT © 2026 Seung Hun Lee
3
+ * Bundles CodeMirror 6 and Lezer (MIT) © Marijn Haverbeke and others.
4
+ * Full third-party licences: THIRD-PARTY-NOTICES.txt in this package.
5
+ */
6
+ var e=class extends Error{constructor(e=`Execution stopped`){super(e),this.name=`RunStopped`}},t=class extends Error{constructor(e=`Web Workers are unavailable in this page`){super(e),this.name=`WorkerUnavailable`}},n=new WeakSet;export{e as n,t as r,n as t};