rre: remove built in gopher downloader (I recommend using curl via a pipe instead - see example/NetFetch.forth)

FossilOrigin-Name: df2a3daaa0b0c86ffe392bf85739851524fab5b4e429e3d477b0c1c851c06b4d
This commit is contained in:
crc 2019-05-10 17:49:01 +00:00
parent 5c3d25bde6
commit 9048d4cdd4
10 changed files with 305 additions and 564 deletions

View file

@ -119,7 +119,7 @@ bin/retro-repl: source/interfaces/repl.c source/interfaces/image.c
bin/retro: bin/retro-embedimage bin/retro-extend source/interfaces/retro-image.c source/interfaces/retro-unix.c source/interfaces/rre.forth source/interfaces/io/rng.forth
cp ngaImage rre.image
./bin/retro-extend rre.image source/interfaces/io/filesystem.forth source/interfaces/io/gopher.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth
./bin/retro-extend rre.image source/interfaces/io/filesystem.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth
./bin/retro-embedimage rre.image >source/interfaces/retro-image.c
cd source/interfaces && $(CC) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro retro-unix.c $(LIBM)
cd package && ../bin/retro -f list
@ -157,7 +157,7 @@ interfaces/image.c: bin/retro-embedimage bin/retro-extend bin/retro-muri source/
bin/retro-compiler: bin/retro-extend source/interfaces/retro-compiler.c source/interfaces/retro-runtime.c
cp ngaImage runtime.image
./bin/retro-extend runtime.image source/interfaces/io/filesystem.forth source/interfaces/io/gopher.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth
./bin/retro-extend runtime.image source/interfaces/io/filesystem.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth
cd source/interfaces && $(CC) $(CFLAGS) $(LDFLAGS) -o ../../retro-runtime retro-runtime.c $(LIBM)
cd source/interfaces && $(CC) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro-compiler retro-compiler.c
objcopy --add-section .ngaImage=runtime.image --set-section-flags .ngaImage=noload,readonly bin/retro-compiler

View file

@ -46,6 +46,7 @@ July - September window for this release.
## I/O
- (rre) added `clock:utc:` namespace
- (rre) remove gopher downloader
## Interfaces

View file

@ -46,8 +46,8 @@ All other devices are optional and can be specified in any order.
0002 | Floating Point | |
0003 | Block Storage | Raw, 1024 cell blocks |
0004 | Filesystem | Unix-style Files |
0005 | Network: Gopher | Make gopher requests |
0006 | Network: HTTP | |
0005 | | |
0006 | | |
0007 | Network: Sockets | |
0008 | Syscalls: Unix | |
0009 | Scripting Hooks | |
@ -108,20 +108,4 @@ additional values.
| 7 | s- | Delete a file |
| 8 | h- | Flush pending writes |
## 0005: Network: Gopher
Revision 0:
This device fetches resources using the Gopher protocol.
Takes a single value indicating the operation; the operation
requires additional values.
| Operation | Stack | Action |
| --------- | ----- | -------------------------------- |
| 0 | asns- | Connect to server (s1), port (n) |
| | | and request selector (s2). The |
| | | returned data is stored at the |
| | | destination address (a). |
## 0010: Random Number Generator

View file

@ -2508,7 +2508,7 @@
<b>Float:</b> -</p>
</div>
<p>Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> gopher | <b>Interface Layer:</b> rre</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> gopher | <b>Interface Layer:</b> ios</p>
<p><b>Example:</b> <br>
<br>
<xmp> here 'forthworks.com #70 '/ gopher:get

View file

@ -3425,7 +3425,7 @@ gopher:get
Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received.
Class: class:word | Namespace: gopher | Interface Layer: rre
Class: class:word | Namespace: gopher | Interface Layer: ios
Example #1:

View file

@ -27,6 +27,6 @@ allow for the NULL termination.
```
'Data d:create #256001 allot
'https://www.osnews.com Data #300009 net:fetch
'gopher://forthworks.com &Data #300009 net:fetch
'%n_bytes_read\n s:format s:put
```

View file

@ -1,6 +1,6 @@
#include <stdint.h>
int32_t ngaImageCells = 17548;
int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
int32_t ngaImageCells = 17428;
int32_t ngaImage[] = { 1793,17207,17385,17427,201912,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,
17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,10,
68223234,1,2575,85000450,1,656912,142,141,268505089,66,65,135205121,66,10,101384453,0,9,10,2049,59,
@ -9,7 +9,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,
108,1793,115,2049,115,117506307,0,108,0,524545,25,113,168820993,0,127,1642241,127,134283523,7,113,
1793,108,7,524545,2049,108,1793,108,16846593,127,142,141,1793,67,16846593,127,113,141,1793,67,
7,10,659713,1,659713,2,659713,3,1793,9965,2,524559,108,2049,108,2049,108,2049,122,168820998,
2,17365,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023,
2,17245,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023,
190,134287361,181,185,659201,180,2049,59,25,84152833,48,286458116,10,459014,205,184618754,45,25,16974851,-1,
168886532,1,134284289,1,214,134284289,0,205,660227,32,0,0,112,114,101,102,105,120,58,105,
0,285278479,231,7,2576,524546,82,1641217,1,167838467,228,2049,244,2049,240,524545,231,200,17826050,230,
@ -160,7 +160,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,
3104,3151,147,118,58,117,112,100,97,116,101,0,4,1793,3158,15,4,8,10,1,
3154,2049,2088,16,10,3139,3172,147,99,111,112,121,0,1793,3181,1,59,2049,2076,2049,
62,10,1,3174,2049,2263,3,3,10,3164,3201,147,83,99,111,112,101,76,105,115,
116,0,17411,17463,10,3188,3210,147,123,123,0,2049,1570,2,1,3201,2049,62,16,10,
116,0,17291,17343,10,3188,3210,147,123,123,0,2049,1570,2,1,3201,2049,62,16,10,
3204,3235,147,45,45,45,114,101,118,101,97,108,45,45,45,0,2049,1570,1,3201,
2049,2919,16,10,3219,3249,147,125,125,0,1,3201,2049,59,4,15,11,1793,3263,3841,
3201,4097,2,10,1,3258,1793,3293,3841,3201,1793,3288,1,2,15,2,15,1,3201,2049,
@ -179,7 +179,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,
3308,10,1,3510,2049,2076,4097,3317,10,3485,3543,134,84,101,109,112,83,116,114,105,
110,103,115,0,32,3528,3561,134,84,101,109,112,83,116,114,105,110,103,77,97,
120,0,512,3544,3573,147,83,84,82,73,78,71,83,0,2049,1543,3841,3543,3841,3561,
19,18,10,3562,3593,134,67,117,114,114,101,110,116,0,12,10,3582,3608,147,115,
19,18,10,3562,3593,134,67,117,114,114,101,110,116,0,9,10,3582,3608,147,115,
58,112,111,105,110,116,101,114,0,3841,3593,3841,3561,19,2049,3573,17,10,3595,3627,
147,115,58,110,101,120,116,0,1,3593,2049,3020,3841,3593,3841,3543,11,1793,3643,1,
0,4097,3593,10,1,3638,9,10,3562,3657,147,115,58,116,101,109,112,0,2,2049,
@ -465,7 +465,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,
9177,10,1,9229,2049,3118,10,9207,9262,147,97,58,101,110,100,115,45,119,105,116,
104,63,0,1,3,1793,9278,2,2049,7211,1,13,2049,2076,2049,8156,2049,9177,10,1,
9266,2049,3118,10,9246,9289,134,76,80,0,0,9283,9299,134,73,110,100,101,120,0,
0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -483,7 +483,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,
16,10,9585,9611,147,117,110,104,111,111,107,0,2049,2919,2,2049,2919,4,16,10,
9601,9635,147,105,111,58,101,110,117,109,101,114,97,116,101,0,27,10,9619,9649,
147,105,111,58,113,117,101,114,121,0,28,10,9637,9664,147,105,111,58,105,110,
118,111,107,101,0,29,10,9651,9674,134,83,108,111,116,0,7,9651,9690,147,105,
118,111,107,101,0,29,10,9651,9674,134,83,108,111,116,0,6,9651,9690,147,105,
111,58,115,99,97,110,45,102,111,114,0,1,-1,4097,9674,2049,9635,1793,9716,2049,
9482,2049,9649,772,67502597,11,1793,9712,2049,9482,4097,9674,10,1,9707,9,10,1,9698,2049,
9539,3,3841,9674,10,9675,9733,147,99,58,112,117,116,0,1793,9735,1,0,2049,9664,
@ -540,191 +540,185 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,
2049,10204,2049,3388,10,1,10737,2049,2263,3841,10699,2049,10186,10,1,10725,2049,3504,10,10709,
10765,134,70,73,68,0,0,10709,10779,147,102,105,108,101,58,115,112,101,119,0,
2049,10459,4097,10765,1793,10790,3841,10765,2049,10223,10,1,10785,2049,4028,3841,10765,2049,10186,10,
10766,10812,134,105,111,58,71,111,112,104,101,114,0,0,10799,10825,147,105,100,101,
110,116,105,102,121,0,3841,10812,2049,2578,1793,10892,1,5,2049,9690,2,2049,2613,1793,
10880,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,
48,48,53,32,78,79,84,32,70,79,85,78,68,0,1,10843,2049,9783,2049,9746,
10,1,10840,1793,10887,4097,10812,10,1,10884,2049,67,10,1,10831,9,10,10766,10910,147,
103,111,112,104,101,114,58,103,101,116,0,2049,10825,1,0,3841,10812,2049,9664,10,
10896,10939,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,116,0,
0,10919,10952,147,105,100,101,110,116,105,102,121,0,3841,10939,2049,2578,1793,11019,1,
2,2049,9690,2,2049,2613,1793,11007,3,2049,3702,73,79,32,68,69,86,73,67,69,
10766,10819,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,116,0,
0,10799,10832,147,105,100,101,110,116,105,102,121,0,3841,10819,2049,2578,1793,10899,1,
2,2049,9690,2,2049,2613,1793,10887,3,2049,3702,73,79,32,68,69,86,73,67,69,
32,84,89,80,69,32,48,48,48,50,32,78,79,84,32,70,79,85,78,68,
0,1,10970,2049,9783,2049,9746,10,1,10967,1793,11014,4097,10939,10,1,11011,2049,67,10,
1,10958,9,10,10896,11045,147,105,111,58,102,108,111,97,116,45,111,112,101,114,
97,116,105,111,110,0,2049,10952,3841,10939,2049,9664,10,11023,11066,147,110,58,116,111,
45,102,108,111,97,116,0,1,0,2049,11045,10,11052,11085,147,115,58,116,111,45,
102,108,111,97,116,0,1,1,2049,11045,10,11071,11105,147,102,58,116,111,45,110,
117,109,98,101,114,0,1,2,2049,11045,10,11090,11125,147,102,58,116,111,45,115,
116,114,105,110,103,0,2049,3683,2,1,3,2049,11045,10,11110,11140,147,102,58,43,
0,1,4,2049,11045,10,11133,11152,147,102,58,45,0,1,5,2049,11045,10,11145,11164,
147,102,58,42,0,1,6,2049,11045,10,11157,11176,147,102,58,47,0,1,7,2049,
11045,10,11169,11192,147,102,58,102,108,111,111,114,0,1,8,2049,11045,10,11181,11210,
147,102,58,99,101,105,108,105,110,103,0,1,9,2049,11045,10,11197,11225,147,102,
58,115,113,114,116,0,1,10,2049,11045,10,11215,11239,147,102,58,101,113,63,0,
1,11,2049,11045,10,11230,11254,147,102,58,45,101,113,63,0,1,12,2049,11045,10,
11244,11268,147,102,58,108,116,63,0,1,13,2049,11045,10,11259,11282,147,102,58,103,
116,63,0,1,14,2049,11045,10,11273,11298,147,102,58,100,101,112,116,104,0,1,
15,2049,11045,10,11287,11312,147,102,58,100,117,112,0,1,16,2049,11045,10,11303,11327,
147,102,58,100,114,111,112,0,1,17,2049,11045,10,11317,11342,147,102,58,115,119,
97,112,0,1,18,2049,11045,10,11332,11356,147,102,58,108,111,103,0,1,19,2049,
11045,10,11347,11372,147,102,58,112,111,119,101,114,0,1,20,2049,11045,10,11361,11386,
147,102,58,115,105,110,0,1,21,2049,11045,10,11377,11400,147,102,58,99,111,115,
0,1,22,2049,11045,10,11391,11414,147,102,58,116,97,110,0,1,23,2049,11045,10,
11405,11429,147,102,58,97,115,105,110,0,1,24,2049,11045,10,11419,11444,147,102,58,
97,99,111,115,0,1,25,2049,11045,10,11434,11459,147,102,58,97,116,97,110,0,
1,26,2049,11045,10,11449,11474,147,102,58,112,117,115,104,0,1,27,2049,11045,10,
11464,11488,147,102,58,112,111,112,0,1,28,2049,11045,10,11479,11505,147,102,58,97,
100,101,112,116,104,0,1,29,2049,11045,10,11493,11522,147,102,58,115,113,117,97,
114,101,0,2049,11312,2049,11164,10,11510,11537,147,102,58,111,118,101,114,0,2049,11474,
2049,11312,2049,11488,2049,11342,10,11527,11556,147,102,58,116,117,99,107,0,2049,11312,2049,
11474,2049,11342,2049,11488,10,11546,11574,147,102,58,110,105,112,0,2049,11342,2049,11327,10,
11565,11594,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,11327,2049,11327,10,
11579,11613,147,102,58,100,117,112,45,112,97,105,114,0,2049,11537,2049,11537,10,11599,
11627,147,102,58,114,111,116,0,2049,11474,2049,11342,2049,11488,2049,11342,10,11618,11651,147,
102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,11066,2049,11282,10,11636,
11673,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,11066,2049,11268,
10,11658,11692,147,102,58,110,101,103,97,116,101,0,1,-1,2049,11066,2049,11164,10,
11680,11708,147,102,58,97,98,115,0,2049,11312,2049,11673,1793,11717,2049,11692,10,1,11714,
9,10,11699,11733,159,112,114,101,102,105,120,58,46,0,2049,1818,1793,11740,2049,3728,
10,1,11737,1793,11747,2049,3657,10,1,11744,2049,67,1,11085,2049,147,10,11721,11765,147,
102,58,112,117,116,0,2049,11125,2049,9783,10,11756,11778,147,102,58,80,73,0,2049,
3702,51,46,49,52,49,53,57,50,0,1,11780,2049,11085,10,11770,11801,147,102,58,
69,0,2049,3702,50,46,55,49,56,50,56,49,0,1,11803,2049,11085,10,11794,11826,
147,102,58,78,65,78,0,2049,3702,48,0,1,11828,2049,11085,2049,3702,48,0,1,
11836,2049,11085,2049,11176,10,11817,11854,147,102,58,73,78,70,0,2049,3702,49,46,48,
0,1,11856,2049,11085,2049,3702,48,0,1,11866,2049,11085,2049,11176,10,11845,11885,147,102,
58,45,73,78,70,0,2049,3702,45,49,46,48,0,1,11887,2049,11085,2049,3702,48,
0,1,11898,2049,11085,2049,11176,10,11875,11917,147,102,58,110,97,110,63,0,2049,11312,
2049,11254,10,11907,11932,147,102,58,105,110,102,63,0,2049,11854,2049,11239,10,11922,11948,
147,102,58,45,105,110,102,63,0,2049,11885,2049,11239,10,11937,11964,147,102,58,114,
111,117,110,100,0,2049,11312,2049,11673,1793,11985,2049,3702,48,46,53,0,1,11972,2049,
11085,2049,11152,2049,11210,10,1,11970,1793,12004,2049,3702,48,46,53,0,1,11991,2049,11085,
2049,11140,2049,11192,10,1,11989,2049,67,10,11953,12018,147,102,58,109,105,110,0,2049,
11613,2049,11268,1,11327,1,11574,2049,67,10,12009,12038,147,102,58,109,97,120,0,2049,
11613,2049,11282,1,11327,1,11574,2049,67,10,12029,12060,147,102,58,108,105,109,105,116,
0,2049,11342,2049,11474,2049,12018,2049,11488,2049,12038,10,12049,12085,147,102,58,98,101,116,
119,101,101,110,63,0,2049,11627,2049,11312,2049,11474,2049,11627,2049,11627,2049,12060,2049,11488,
2049,11239,10,12071,12111,147,102,58,105,110,99,0,2049,3702,49,0,1,12113,2049,11085,
2049,11140,10,12102,12131,147,102,58,100,101,99,0,2049,3702,49,0,1,12133,2049,11085,
2049,11152,10,12122,12152,147,102,58,99,97,115,101,0,2049,11537,2049,11239,1793,12164,2049,
11327,8,1,-1,10,1,12158,1793,12172,3,1,0,10,1,12168,2049,67,25,6,771,
10,12142,12190,147,102,58,115,105,103,110,0,2049,11312,2049,3702,48,0,1,12194,2049,
11085,2049,11239,1793,12209,1,0,2049,11327,10,1,12204,2049,2505,2049,3702,48,0,1,12215,
2049,11085,2049,11282,1793,12228,1,1,10,1,12225,1793,12235,1,-1,10,1,12232,2049,67,
10,12180,2147483646,134,101,58,77,65,88,0,12240,-2147483646,134,101,58,77,73,78,0,12249,
-2147483648,134,101,58,78,65,78,0,12258,2147483647,134,101,58,73,78,70,0,12267,-2147483647,134,
101,58,45,73,78,70,0,12276,12294,147,101,58,110,63,0,1,-2147483646,2049,2919,1,
2147483646,2049,2932,2049,2950,10,12286,12315,147,101,58,109,97,120,63,0,1,2147483646,11,10,
12305,12329,147,101,58,109,105,110,63,0,1,-2147483646,11,10,12319,12344,147,101,58,122,
101,114,111,63,0,2049,2578,10,12333,12357,147,101,58,110,97,110,63,0,1,-2147483648,
11,10,12347,12371,147,101,58,105,110,102,63,0,1,2147483647,11,10,12361,12386,147,101,
58,45,105,110,102,63,0,1,-2147483647,11,10,12375,12400,147,101,58,99,108,105,112,
0,1,-2147483646,1,2147483646,2049,2902,10,12390,12415,147,102,58,69,49,0,1793,12417,2049,3702,
49,46,101,53,0,1,12419,2049,11085,10,12407,12441,147,102,58,45,115,104,105,102,
116,0,2049,12415,2049,11164,10,12429,12458,147,102,58,43,115,104,105,102,116,0,2049,
12415,2049,11176,10,12446,12480,147,102,58,115,105,103,110,101,100,45,115,113,114,116,
0,2049,11312,2049,12190,2049,11708,2049,11225,2049,11066,2049,11164,10,12463,12506,147,102,58,43,
101,110,99,111,100,101,0,2049,12480,2049,12441,10,12493,12524,147,102,58,45,101,110,
99,111,100,101,0,2049,11312,2049,12190,2049,12458,2049,11312,2049,11164,2049,11066,2049,11164,10,
12511,12558,147,102,58,115,105,103,110,101,100,45,115,113,117,97,114,101,0,2049,
11312,2049,12190,2049,11312,2049,11164,2049,11066,2049,11164,10,12539,12581,147,102,58,116,111,45,
101,0,2049,11312,2049,11917,1793,12593,2049,11327,3,1,-2147483648,10,1,12587,2049,2505,2049,11312,
2049,11932,1793,12609,2049,11327,3,1,2147483647,10,1,12603,2049,2505,2049,11312,2049,11948,1793,12625,
2049,11327,3,1,-2147483647,10,1,12619,2049,2505,2049,12506,2049,11964,2049,11105,2049,12400,1,-2147483646,
1793,12644,2049,11327,10,1,12641,2049,2293,1,2147483646,1793,12655,2049,11327,10,1,12652,2049,2293,
10,12571,12670,147,101,58,116,111,45,102,0,1,-2147483648,1793,12678,3,2049,11826,10,1,
12674,2049,2293,1,2147483647,1793,12690,3,2049,11854,10,1,12686,2049,2293,1,-2147483647,1793,12702,3,
2049,11885,10,1,12698,2049,2293,2049,11066,2049,12524,10,12660,12722,147,102,58,115,116,111,
114,101,0,1793,12727,2049,12581,10,1,12724,2049,2076,16,10,12711,12744,147,102,58,102,
101,116,99,104,0,15,2049,12670,10,12733,12764,147,102,58,100,117,109,112,45,115,
116,97,99,107,0,2049,11298,2,1793,12772,2049,11474,10,1,12769,2049,2263,1793,12787,2049,
11488,2049,11312,2049,11765,2049,9757,10,1,12778,2049,2263,10,12748,12809,147,102,58,100,117,
109,112,45,97,115,116,97,99,107,0,2049,11505,2,1793,12817,2049,11488,10,1,12814,
2049,2263,1793,12832,2049,11312,2049,11765,2049,9757,2049,11474,10,1,12823,2049,2263,10,12792,12846,
147,101,58,112,117,116,0,1,2147483646,1793,12863,2049,3702,101,58,77,65,88,0,1,
12852,2049,9783,10,1,12850,2049,2293,1,-2147483646,1793,12884,2049,3702,101,58,77,73,78,0,
1,12873,2049,9783,10,1,12871,2049,2293,1,0,1793,12903,2049,3702,101,58,48,0,1,
12894,2049,9783,10,1,12892,2049,2293,1,-2147483648,1793,12924,2049,3702,101,58,78,65,78,0,
1,12913,2049,9783,10,1,12911,2049,2293,1,2147483647,1793,12945,2049,3702,101,58,73,78,70,
0,1,12934,2049,9783,10,1,12932,2049,2293,1,-2147483647,1793,12967,2049,3702,101,58,45,73,
78,70,0,1,12955,2049,9783,10,1,12953,2049,2293,2049,12670,2049,11765,10,12837,12994,134,
105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,12976,13007,147,105,
100,101,110,116,105,102,121,0,3841,12994,2049,2578,1793,13074,1,8,2049,9690,2,2049,
2613,1793,13062,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,
32,48,48,48,56,32,78,79,84,32,70,79,85,78,68,0,1,13025,2049,9783,
2049,9746,10,1,13022,1793,13069,4097,12994,10,1,13066,2049,67,10,1,13013,9,10,12837,
13097,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,13007,
3841,12994,2049,9664,10,13078,13119,147,117,110,105,120,58,115,121,115,116,101,109,0,
1,0,2049,13097,10,13104,13137,147,117,110,105,120,58,102,111,114,107,0,1,1,
2049,13097,10,13124,13156,147,117,110,105,120,58,101,120,101,99,48,0,1,2,2049,
13097,10,13142,13175,147,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,13097,
10,13161,13194,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,13097,10,
13180,13213,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,13097,10,13199,
13231,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,13097,10,13218,13251,147,
117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,13097,10,13236,13269,147,
117,110,105,120,58,119,97,105,116,0,1,8,2049,13097,10,13256,13287,147,117,110,
105,120,58,107,105,108,108,0,1,9,2049,13097,10,13274,13306,147,117,110,105,120,
58,112,111,112,101,110,0,1,10,2049,13097,10,13292,13326,147,117,110,105,120,58,
112,99,108,111,115,101,0,1,11,2049,13097,10,13311,13345,147,117,110,105,120,58,
119,114,105,116,101,0,1793,13351,2,2049,82,10,1,13347,2049,2076,1,12,2049,13097,
10,13331,13374,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,13097,10,
13360,13394,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,13097,10,
13379,13414,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,13097,10,
13399,13433,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,13097,10,13419,
13455,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,2049,13097,
10,13438,13477,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,1,18,
2049,13097,10,13460,13495,147,117,110,105,120,58,116,105,109,101,0,1,19,2049,13097,
10,13482,13513,147,99,108,111,99,107,58,100,97,121,0,1,20,2049,13097,10,13500,
13533,147,99,108,111,99,107,58,109,111,110,116,104,0,1,21,2049,13097,10,13518,
13552,147,99,108,111,99,107,58,121,101,97,114,0,1,22,2049,13097,10,13538,13571,
147,99,108,111,99,107,58,104,111,117,114,0,1,23,2049,13097,10,13557,13592,147,
99,108,111,99,107,58,109,105,110,117,116,101,0,1,24,2049,13097,10,13576,13613,
147,99,108,111,99,107,58,115,101,99,111,110,100,0,1,25,2049,13097,10,13597,
13635,147,99,108,111,99,107,58,117,116,99,58,100,97,121,0,1,26,2049,13097,
10,13618,13659,147,99,108,111,99,107,58,117,116,99,58,109,111,110,116,104,0,
1,27,2049,13097,10,13640,13682,147,99,108,111,99,107,58,117,116,99,58,121,101,
97,114,0,1,28,2049,13097,10,13664,13705,147,99,108,111,99,107,58,117,116,99,
58,104,111,117,114,0,1,29,2049,13097,10,13687,13730,147,99,108,111,99,107,58,
117,116,99,58,109,105,110,117,116,101,0,1,30,2049,13097,10,13710,13755,147,99,
108,111,99,107,58,117,116,99,58,115,101,99,111,110,100,0,1,31,2049,13097,
10,13735,13776,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049,3702,112,
119,100,0,1,13778,1,0,2049,13306,2,2049,10570,2049,3951,4,2049,13326,1,0,2049,
3702,115,121,115,58,97,114,103,118,0,1,13800,2049,200,2049,161,15,8,2049,82,
17,2049,3702,47,0,1,13822,2049,4010,10,13760,13856,147,117,110,105,120,58,99,111,
0,1,10850,2049,9783,2049,9746,10,1,10847,1793,10894,4097,10819,10,1,10891,2049,67,10,
1,10838,9,10,10766,10925,147,105,111,58,102,108,111,97,116,45,111,112,101,114,
97,116,105,111,110,0,2049,10832,3841,10819,2049,9664,10,10903,10946,147,110,58,116,111,
45,102,108,111,97,116,0,1,0,2049,10925,10,10932,10965,147,115,58,116,111,45,
102,108,111,97,116,0,1,1,2049,10925,10,10951,10985,147,102,58,116,111,45,110,
117,109,98,101,114,0,1,2,2049,10925,10,10970,11005,147,102,58,116,111,45,115,
116,114,105,110,103,0,2049,3683,2,1,3,2049,10925,10,10990,11020,147,102,58,43,
0,1,4,2049,10925,10,11013,11032,147,102,58,45,0,1,5,2049,10925,10,11025,11044,
147,102,58,42,0,1,6,2049,10925,10,11037,11056,147,102,58,47,0,1,7,2049,
10925,10,11049,11072,147,102,58,102,108,111,111,114,0,1,8,2049,10925,10,11061,11090,
147,102,58,99,101,105,108,105,110,103,0,1,9,2049,10925,10,11077,11105,147,102,
58,115,113,114,116,0,1,10,2049,10925,10,11095,11119,147,102,58,101,113,63,0,
1,11,2049,10925,10,11110,11134,147,102,58,45,101,113,63,0,1,12,2049,10925,10,
11124,11148,147,102,58,108,116,63,0,1,13,2049,10925,10,11139,11162,147,102,58,103,
116,63,0,1,14,2049,10925,10,11153,11178,147,102,58,100,101,112,116,104,0,1,
15,2049,10925,10,11167,11192,147,102,58,100,117,112,0,1,16,2049,10925,10,11183,11207,
147,102,58,100,114,111,112,0,1,17,2049,10925,10,11197,11222,147,102,58,115,119,
97,112,0,1,18,2049,10925,10,11212,11236,147,102,58,108,111,103,0,1,19,2049,
10925,10,11227,11252,147,102,58,112,111,119,101,114,0,1,20,2049,10925,10,11241,11266,
147,102,58,115,105,110,0,1,21,2049,10925,10,11257,11280,147,102,58,99,111,115,
0,1,22,2049,10925,10,11271,11294,147,102,58,116,97,110,0,1,23,2049,10925,10,
11285,11309,147,102,58,97,115,105,110,0,1,24,2049,10925,10,11299,11324,147,102,58,
97,99,111,115,0,1,25,2049,10925,10,11314,11339,147,102,58,97,116,97,110,0,
1,26,2049,10925,10,11329,11354,147,102,58,112,117,115,104,0,1,27,2049,10925,10,
11344,11368,147,102,58,112,111,112,0,1,28,2049,10925,10,11359,11385,147,102,58,97,
100,101,112,116,104,0,1,29,2049,10925,10,11373,11402,147,102,58,115,113,117,97,
114,101,0,2049,11192,2049,11044,10,11390,11417,147,102,58,111,118,101,114,0,2049,11354,
2049,11192,2049,11368,2049,11222,10,11407,11436,147,102,58,116,117,99,107,0,2049,11192,2049,
11354,2049,11222,2049,11368,10,11426,11454,147,102,58,110,105,112,0,2049,11222,2049,11207,10,
11445,11474,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,11207,2049,11207,10,
11459,11493,147,102,58,100,117,112,45,112,97,105,114,0,2049,11417,2049,11417,10,11479,
11507,147,102,58,114,111,116,0,2049,11354,2049,11222,2049,11368,2049,11222,10,11498,11531,147,
102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,10946,2049,11162,10,11516,
11553,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,10946,2049,11148,
10,11538,11572,147,102,58,110,101,103,97,116,101,0,1,-1,2049,10946,2049,11044,10,
11560,11588,147,102,58,97,98,115,0,2049,11192,2049,11553,1793,11597,2049,11572,10,1,11594,
9,10,11579,11613,159,112,114,101,102,105,120,58,46,0,2049,1818,1793,11620,2049,3728,
10,1,11617,1793,11627,2049,3657,10,1,11624,2049,67,1,10965,2049,147,10,11601,11645,147,
102,58,112,117,116,0,2049,11005,2049,9783,10,11636,11658,147,102,58,80,73,0,2049,
3702,51,46,49,52,49,53,57,50,0,1,11660,2049,10965,10,11650,11681,147,102,58,
69,0,2049,3702,50,46,55,49,56,50,56,49,0,1,11683,2049,10965,10,11674,11706,
147,102,58,78,65,78,0,2049,3702,48,0,1,11708,2049,10965,2049,3702,48,0,1,
11716,2049,10965,2049,11056,10,11697,11734,147,102,58,73,78,70,0,2049,3702,49,46,48,
0,1,11736,2049,10965,2049,3702,48,0,1,11746,2049,10965,2049,11056,10,11725,11765,147,102,
58,45,73,78,70,0,2049,3702,45,49,46,48,0,1,11767,2049,10965,2049,3702,48,
0,1,11778,2049,10965,2049,11056,10,11755,11797,147,102,58,110,97,110,63,0,2049,11192,
2049,11134,10,11787,11812,147,102,58,105,110,102,63,0,2049,11734,2049,11119,10,11802,11828,
147,102,58,45,105,110,102,63,0,2049,11765,2049,11119,10,11817,11844,147,102,58,114,
111,117,110,100,0,2049,11192,2049,11553,1793,11865,2049,3702,48,46,53,0,1,11852,2049,
10965,2049,11032,2049,11090,10,1,11850,1793,11884,2049,3702,48,46,53,0,1,11871,2049,10965,
2049,11020,2049,11072,10,1,11869,2049,67,10,11833,11898,147,102,58,109,105,110,0,2049,
11493,2049,11148,1,11207,1,11454,2049,67,10,11889,11918,147,102,58,109,97,120,0,2049,
11493,2049,11162,1,11207,1,11454,2049,67,10,11909,11940,147,102,58,108,105,109,105,116,
0,2049,11222,2049,11354,2049,11898,2049,11368,2049,11918,10,11929,11965,147,102,58,98,101,116,
119,101,101,110,63,0,2049,11507,2049,11192,2049,11354,2049,11507,2049,11507,2049,11940,2049,11368,
2049,11119,10,11951,11991,147,102,58,105,110,99,0,2049,3702,49,0,1,11993,2049,10965,
2049,11020,10,11982,12011,147,102,58,100,101,99,0,2049,3702,49,0,1,12013,2049,10965,
2049,11032,10,12002,12032,147,102,58,99,97,115,101,0,2049,11417,2049,11119,1793,12044,2049,
11207,8,1,-1,10,1,12038,1793,12052,3,1,0,10,1,12048,2049,67,25,6,771,
10,12022,12070,147,102,58,115,105,103,110,0,2049,11192,2049,3702,48,0,1,12074,2049,
10965,2049,11119,1793,12089,1,0,2049,11207,10,1,12084,2049,2505,2049,3702,48,0,1,12095,
2049,10965,2049,11162,1793,12108,1,1,10,1,12105,1793,12115,1,-1,10,1,12112,2049,67,
10,12060,2147483646,134,101,58,77,65,88,0,12120,-2147483646,134,101,58,77,73,78,0,12129,
-2147483648,134,101,58,78,65,78,0,12138,2147483647,134,101,58,73,78,70,0,12147,-2147483647,134,
101,58,45,73,78,70,0,12156,12174,147,101,58,110,63,0,1,-2147483646,2049,2919,1,
2147483646,2049,2932,2049,2950,10,12166,12195,147,101,58,109,97,120,63,0,1,2147483646,11,10,
12185,12209,147,101,58,109,105,110,63,0,1,-2147483646,11,10,12199,12224,147,101,58,122,
101,114,111,63,0,2049,2578,10,12213,12237,147,101,58,110,97,110,63,0,1,-2147483648,
11,10,12227,12251,147,101,58,105,110,102,63,0,1,2147483647,11,10,12241,12266,147,101,
58,45,105,110,102,63,0,1,-2147483647,11,10,12255,12280,147,101,58,99,108,105,112,
0,1,-2147483646,1,2147483646,2049,2902,10,12270,12295,147,102,58,69,49,0,1793,12297,2049,3702,
49,46,101,53,0,1,12299,2049,10965,10,12287,12321,147,102,58,45,115,104,105,102,
116,0,2049,12295,2049,11044,10,12309,12338,147,102,58,43,115,104,105,102,116,0,2049,
12295,2049,11056,10,12326,12360,147,102,58,115,105,103,110,101,100,45,115,113,114,116,
0,2049,11192,2049,12070,2049,11588,2049,11105,2049,10946,2049,11044,10,12343,12386,147,102,58,43,
101,110,99,111,100,101,0,2049,12360,2049,12321,10,12373,12404,147,102,58,45,101,110,
99,111,100,101,0,2049,11192,2049,12070,2049,12338,2049,11192,2049,11044,2049,10946,2049,11044,10,
12391,12438,147,102,58,115,105,103,110,101,100,45,115,113,117,97,114,101,0,2049,
11192,2049,12070,2049,11192,2049,11044,2049,10946,2049,11044,10,12419,12461,147,102,58,116,111,45,
101,0,2049,11192,2049,11797,1793,12473,2049,11207,3,1,-2147483648,10,1,12467,2049,2505,2049,11192,
2049,11812,1793,12489,2049,11207,3,1,2147483647,10,1,12483,2049,2505,2049,11192,2049,11828,1793,12505,
2049,11207,3,1,-2147483647,10,1,12499,2049,2505,2049,12386,2049,11844,2049,10985,2049,12280,1,-2147483646,
1793,12524,2049,11207,10,1,12521,2049,2293,1,2147483646,1793,12535,2049,11207,10,1,12532,2049,2293,
10,12451,12550,147,101,58,116,111,45,102,0,1,-2147483648,1793,12558,3,2049,11706,10,1,
12554,2049,2293,1,2147483647,1793,12570,3,2049,11734,10,1,12566,2049,2293,1,-2147483647,1793,12582,3,
2049,11765,10,1,12578,2049,2293,2049,10946,2049,12404,10,12540,12602,147,102,58,115,116,111,
114,101,0,1793,12607,2049,12461,10,1,12604,2049,2076,16,10,12591,12624,147,102,58,102,
101,116,99,104,0,15,2049,12550,10,12613,12644,147,102,58,100,117,109,112,45,115,
116,97,99,107,0,2049,11178,2,1793,12652,2049,11354,10,1,12649,2049,2263,1793,12667,2049,
11368,2049,11192,2049,11645,2049,9757,10,1,12658,2049,2263,10,12628,12689,147,102,58,100,117,
109,112,45,97,115,116,97,99,107,0,2049,11385,2,1793,12697,2049,11368,10,1,12694,
2049,2263,1793,12712,2049,11192,2049,11645,2049,9757,2049,11354,10,1,12703,2049,2263,10,12672,12726,
147,101,58,112,117,116,0,1,2147483646,1793,12743,2049,3702,101,58,77,65,88,0,1,
12732,2049,9783,10,1,12730,2049,2293,1,-2147483646,1793,12764,2049,3702,101,58,77,73,78,0,
1,12753,2049,9783,10,1,12751,2049,2293,1,0,1793,12783,2049,3702,101,58,48,0,1,
12774,2049,9783,10,1,12772,2049,2293,1,-2147483648,1793,12804,2049,3702,101,58,78,65,78,0,
1,12793,2049,9783,10,1,12791,2049,2293,1,2147483647,1793,12825,2049,3702,101,58,73,78,70,
0,1,12814,2049,9783,10,1,12812,2049,2293,1,-2147483647,1793,12847,2049,3702,101,58,45,73,
78,70,0,1,12835,2049,9783,10,1,12833,2049,2293,2049,12550,2049,11645,10,12717,12874,134,
105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,12856,12887,147,105,
100,101,110,116,105,102,121,0,3841,12874,2049,2578,1793,12954,1,8,2049,9690,2,2049,
2613,1793,12942,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,
32,48,48,48,56,32,78,79,84,32,70,79,85,78,68,0,1,12905,2049,9783,
2049,9746,10,1,12902,1793,12949,4097,12874,10,1,12946,2049,67,10,1,12893,9,10,12717,
12977,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,12887,
3841,12874,2049,9664,10,12958,12999,147,117,110,105,120,58,115,121,115,116,101,109,0,
1,0,2049,12977,10,12984,13017,147,117,110,105,120,58,102,111,114,107,0,1,1,
2049,12977,10,13004,13036,147,117,110,105,120,58,101,120,101,99,48,0,1,2,2049,
12977,10,13022,13055,147,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,12977,
10,13041,13074,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,12977,10,
13060,13093,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,12977,10,13079,
13111,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,12977,10,13098,13131,147,
117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,12977,10,13116,13149,147,
117,110,105,120,58,119,97,105,116,0,1,8,2049,12977,10,13136,13167,147,117,110,
105,120,58,107,105,108,108,0,1,9,2049,12977,10,13154,13186,147,117,110,105,120,
58,112,111,112,101,110,0,1,10,2049,12977,10,13172,13206,147,117,110,105,120,58,
112,99,108,111,115,101,0,1,11,2049,12977,10,13191,13225,147,117,110,105,120,58,
119,114,105,116,101,0,1793,13231,2,2049,82,10,1,13227,2049,2076,1,12,2049,12977,
10,13211,13254,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,12977,10,
13240,13274,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,12977,10,
13259,13294,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,12977,10,
13279,13313,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,12977,10,13299,
13335,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,2049,12977,
10,13318,13357,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,1,18,
2049,12977,10,13340,13375,147,117,110,105,120,58,116,105,109,101,0,1,19,2049,12977,
10,13362,13393,147,99,108,111,99,107,58,100,97,121,0,1,20,2049,12977,10,13380,
13413,147,99,108,111,99,107,58,109,111,110,116,104,0,1,21,2049,12977,10,13398,
13432,147,99,108,111,99,107,58,121,101,97,114,0,1,22,2049,12977,10,13418,13451,
147,99,108,111,99,107,58,104,111,117,114,0,1,23,2049,12977,10,13437,13472,147,
99,108,111,99,107,58,109,105,110,117,116,101,0,1,24,2049,12977,10,13456,13493,
147,99,108,111,99,107,58,115,101,99,111,110,100,0,1,25,2049,12977,10,13477,
13515,147,99,108,111,99,107,58,117,116,99,58,100,97,121,0,1,26,2049,12977,
10,13498,13539,147,99,108,111,99,107,58,117,116,99,58,109,111,110,116,104,0,
1,27,2049,12977,10,13520,13562,147,99,108,111,99,107,58,117,116,99,58,121,101,
97,114,0,1,28,2049,12977,10,13544,13585,147,99,108,111,99,107,58,117,116,99,
58,104,111,117,114,0,1,29,2049,12977,10,13567,13610,147,99,108,111,99,107,58,
117,116,99,58,109,105,110,117,116,101,0,1,30,2049,12977,10,13590,13635,147,99,
108,111,99,107,58,117,116,99,58,115,101,99,111,110,100,0,1,31,2049,12977,
10,13615,13656,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049,3702,112,
119,100,0,1,13658,1,0,2049,13186,2,2049,10570,2049,3951,4,2049,13206,1,0,2049,
3702,115,121,115,58,97,114,103,118,0,1,13680,2049,200,2049,161,15,8,2049,82,
17,2049,3702,47,0,1,13702,2049,4010,10,13640,13736,147,117,110,105,120,58,99,111,
117,110,116,45,102,105,108,101,115,45,105,110,45,99,119,100,0,2049,3702,108,
115,32,45,49,32,124,32,119,99,32,45,108,0,1,13858,1,0,2049,13306,2,
2049,10570,2049,3951,2049,221,4,2049,13326,10,13829,13911,147,117,110,105,120,58,102,111,
115,32,45,49,32,124,32,119,99,32,45,108,0,1,13738,1,0,2049,13186,2,
2049,10570,2049,3951,2049,221,4,2049,13206,10,13709,13791,147,117,110,105,120,58,102,111,
114,45,101,97,99,104,45,102,105,108,101,0,2049,3702,108,115,32,45,49,32,
45,112,0,1,13913,1,0,2049,13306,2049,13856,1793,13946,1793,13941,2049,10570,2049,3657,67502597,
8,10,1,13934,2049,2088,10,1,13932,2049,2263,2049,13326,3,10,13889,13969,147,114,97,
45,112,0,1,13793,1,0,2049,13186,2049,13736,1793,13826,1793,13821,2049,10570,2049,3657,67502597,
8,10,1,13814,2049,2088,10,1,13812,2049,2263,2049,13206,3,10,13769,13849,147,114,97,
110,100,111,109,58,98,121,116,101,0,2049,3702,47,100,101,118,47,117,114,97,
110,100,111,109,0,1,13971,1,0,2049,10167,1,10204,2049,2088,2049,10186,10,13889,14009,
147,110,58,114,97,110,100,111,109,0,2049,13969,1,-8,24,2049,13969,17,1,-8,
24,2049,13969,17,1,8,24,2049,13969,17,10,13997,14038,134,74,85,77,80,0,-2023489525,
-180170029,1872770499,2012404571,14030,14047,134,107,0,0,14042,14053,134,116,0,0,14048,14060,134,115,48,
0,0,14054,14067,134,115,49,0,0,14061,14074,134,115,50,0,0,14068,14081,134,115,
51,0,0,14075,14092,147,114,101,115,101,101,100,0,2,4097,14067,2,4097,14074,2,
4097,14081,2,4097,14047,4097,14053,10,14082,14115,147,114,111,116,108,0,4097,14047,1793,14125,
3841,14047,2049,2770,24,10,1,14119,1793,14136,1,32,3841,14047,18,24,10,1,14129,2049,
2103,22,10,14107,14151,147,114,101,115,42,42,0,3841,14060,1,5,19,1,7,2049,
14115,1,9,19,10,14142,14172,147,110,101,120,116,0,3841,14067,2,1,-9,24,5,
3841,14081,3841,14060,3841,14074,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,14074,4097,14067,4097,14060,1,
11,2049,14115,4097,14081,10,14164,14215,147,120,111,114,45,101,114,0,386860290,5,386860290,5,
386860290,5,386860290,5,101058054,101058054,10,14205,14235,147,106,117,109,112,63,0,1793,14242,1,14038,
17,15,10,1,14237,2049,2076,1,1,4,2049,2770,24,21,10,14226,14263,147,105,110,
110,101,114,0,1,32,1793,14290,2,2049,9482,2049,14235,1793,14284,1793,14279,2049,14215,10,
1,14276,2049,2076,10,1,14274,9,2049,14172,10,1,14267,2049,9539,10,13997,14320,147,114,
110,100,111,109,0,1,13851,1,0,2049,10167,1,10204,2049,2088,2049,10186,10,13769,13889,
147,110,58,114,97,110,100,111,109,0,2049,13849,1,-8,24,2049,13849,17,1,-8,
24,2049,13849,17,1,8,24,2049,13849,17,10,13877,13918,134,74,85,77,80,0,-2023489525,
-180170029,1872770499,2012404571,13910,13927,134,107,0,0,13922,13933,134,116,0,0,13928,13940,134,115,48,
0,0,13934,13947,134,115,49,0,0,13941,13954,134,115,50,0,0,13948,13961,134,115,
51,0,0,13955,13972,147,114,101,115,101,101,100,0,2,4097,13947,2,4097,13954,2,
4097,13961,2,4097,13927,4097,13933,10,13962,13995,147,114,111,116,108,0,4097,13927,1793,14005,
3841,13927,2049,2770,24,10,1,13999,1793,14016,1,32,3841,13927,18,24,10,1,14009,2049,
2103,22,10,13987,14031,147,114,101,115,42,42,0,3841,13940,1,5,19,1,7,2049,
13995,1,9,19,10,14022,14052,147,110,101,120,116,0,3841,13947,2,1,-9,24,5,
3841,13961,3841,13940,3841,13954,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,13954,4097,13947,4097,13940,1,
11,2049,13995,4097,13961,10,14044,14095,147,120,111,114,45,101,114,0,386860290,5,386860290,5,
386860290,5,386860290,5,101058054,101058054,10,14085,14115,147,106,117,109,112,63,0,1793,14122,1,13918,
17,15,10,1,14117,2049,2076,1,1,4,2049,2770,24,21,10,14106,14143,147,105,110,
110,101,114,0,1,32,1793,14170,2,2049,9482,2049,14115,1793,14164,1793,14159,2049,14095,10,
1,14156,2049,2076,10,1,14154,9,2049,14052,10,1,14147,2049,9539,10,13877,14200,147,114,
97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,42,42,
0,2049,14172,2049,14151,10,14295,14355,147,114,97,110,100,111,109,58,120,111,114,111,
115,104,105,114,111,49,50,56,42,42,58,106,117,109,112,0,1,0,1,14081,
1,0,1,14074,1,0,1,14067,1,0,1,14060,1,4,1793,14381,2049,9482,2049,14263,
3,10,1,14375,2049,9539,269488144,10,14325,14421,147,114,97,110,100,111,109,58,120,111,
0,2049,14052,2049,14031,10,14175,14235,147,114,97,110,100,111,109,58,120,111,114,111,
115,104,105,114,111,49,50,56,42,42,58,106,117,109,112,0,1,0,1,13961,
1,0,1,13954,1,0,1,13947,1,0,1,13940,1,4,1793,14261,2049,9482,2049,14143,
3,10,1,14255,2049,9539,269488144,10,14205,14301,147,114,97,110,100,111,109,58,120,111,
114,111,115,104,105,114,111,49,50,56,42,42,58,115,101,116,45,115,101,101,
100,0,2049,14092,1,100,1793,14430,2049,14172,10,1,14427,2049,2263,10,14387,14470,147,114,
100,0,2049,13972,1,100,1793,14310,2049,14052,10,1,14307,2049,2263,10,14267,14350,147,114,
97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,42,42,
58,116,101,115,116,45,115,101,101,100,0,4097,14060,4097,14067,4097,14074,4097,14081,10,
14435,14489,134,83,116,97,116,101,115,0,0,0,0,0,0,0,0,0,0,0,
58,116,101,115,116,45,115,101,101,100,0,4097,13940,4097,13947,4097,13954,4097,13961,10,
14315,14369,134,83,116,97,116,101,115,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -755,126 +749,126 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14479,15123,134,73,110,
100,101,120,0,0,15114,15133,147,114,101,115,101,116,0,1,14489,67502597,2049,2932,17,
2,15,1,30,24,4,15,23,1,1812433253,19,67502597,17,2049,2552,21,4,1,14489,17,
16,10,15124,15175,147,114,97,110,100,111,109,105,122,101,100,0,1,1,1793,15189,
2,2049,15133,2049,2919,2,1,624,14,10,1,15179,2049,2234,3,10,15161,15200,147,121,
0,2,2049,2919,1,624,788,1,14489,17,15,2049,2552,21,4,1,14489,17,15,1,
-31,24,17,10,15195,15234,147,97,108,116,101,114,101,100,0,2,2049,15200,2,1,
1,21,1,1073741823,19,1793,15262,1,2,197652,67502597,1,397,17,1,624,788,1,14489,17,
15,23,10,1,15246,2049,2076,23,4,1,14489,17,16,10,15223,15286,147,115,99,114,
97,109,98,108,101,100,0,1,0,1793,15300,2,2049,15234,2049,2919,2,1,624,14,
10,1,15290,2049,2234,3,10,14435,15334,147,114,97,110,100,111,109,58,109,101,114,
115,101,110,110,101,58,115,101,116,45,115,101,101,100,0,4097,14489,1,0,4097,
15123,2049,15175,10,15306,15362,147,114,97,110,100,111,109,58,109,101,114,115,101,110,
110,101,0,3841,15123,2049,2578,1,15286,9,3841,15123,1,14489,17,15,2,1,11,24,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14359,15003,134,73,110,
100,101,120,0,0,14994,15013,147,114,101,115,101,116,0,1,14369,67502597,2049,2932,17,
2,15,1,30,24,4,15,23,1,1812433253,19,67502597,17,2049,2552,21,4,1,14369,17,
16,10,15004,15055,147,114,97,110,100,111,109,105,122,101,100,0,1,1,1793,15069,
2,2049,15013,2049,2919,2,1,624,14,10,1,15059,2049,2234,3,10,15041,15080,147,121,
0,2,2049,2919,1,624,788,1,14369,17,15,2049,2552,21,4,1,14369,17,15,1,
-31,24,17,10,15075,15114,147,97,108,116,101,114,101,100,0,2,2049,15080,2,1,
1,21,1,1073741823,19,1793,15142,1,2,197652,67502597,1,397,17,1,624,788,1,14369,17,
15,23,10,1,15126,2049,2076,23,4,1,14369,17,16,10,15103,15166,147,115,99,114,
97,109,98,108,101,100,0,1,0,1793,15180,2,2049,15114,2049,2919,2,1,624,14,
10,1,15170,2049,2234,3,10,14315,15214,147,114,97,110,100,111,109,58,109,101,114,
115,101,110,110,101,58,115,101,116,45,115,101,101,100,0,4097,14369,1,0,4097,
15003,2049,15055,10,15186,15242,147,114,97,110,100,111,109,58,109,101,114,115,101,110,
110,101,0,3841,15003,2049,2578,1,15166,9,3841,15003,1,14369,17,15,2,1,11,24,
23,2,1,-7,24,1,1073741823,21,23,2,1,-15,24,1,2011365376,21,23,2,1,18,
24,23,3841,15123,2049,2919,1,624,788,4097,15123,10,15343,1024,134,84,73,66,0,15411,
15433,134,105,111,58,75,101,121,98,111,97,114,100,0,0,15418,15446,147,105,100,
101,110,116,105,102,121,0,3841,15433,2049,2578,1793,15513,1,1,2049,9690,2,2049,2613,
1793,15501,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,
48,48,48,49,32,78,79,84,32,70,79,85,78,68,0,1,15464,2049,9783,2049,
9746,10,1,15461,1793,15508,4097,15433,10,1,15505,2049,67,10,1,15452,9,10,15411,15526,
147,99,58,103,101,116,0,2049,15446,3841,15433,2049,9664,10,15517,15543,147,103,97,116,
104,101,114,0,2,1793,15550,1,8,11,10,1,15546,1793,15558,1,127,11,10,1,
15554,2049,2103,22,1793,15567,3,10,1,15565,1793,15574,2049,3388,10,1,15571,2049,67,10,
15533,15588,147,99,121,99,108,101,0,2049,15526,2049,2066,4,8,2049,2731,25,3,2049,
15543,1,15588,7,10,15517,15619,147,112,97,114,115,101,45,117,110,116,105,108,0,
1793,15631,2049,3683,2049,3480,2049,15588,771,2049,3354,10,1,15621,2049,3504,10,15604,15645,147,
115,58,103,101,116,0,1793,15667,1793,15653,1,10,11,10,1,15649,1793,15661,1,13,
11,10,1,15657,2049,2103,22,10,1,15647,2049,15619,10,15636,15688,134,105,111,58,83,
99,114,105,112,116,105,110,103,0,4,15672,15701,147,105,100,101,110,116,105,102,
121,0,3841,15688,2049,2578,1793,15768,1,9,2049,9690,2,2049,2613,1793,15756,3,2049,3702,
24,23,3841,15003,2049,2919,1,624,788,4097,15003,10,15223,1024,134,84,73,66,0,15291,
15313,134,105,111,58,75,101,121,98,111,97,114,100,0,0,15298,15326,147,105,100,
101,110,116,105,102,121,0,3841,15313,2049,2578,1793,15393,1,1,2049,9690,2,2049,2613,
1793,15381,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,
48,48,48,49,32,78,79,84,32,70,79,85,78,68,0,1,15344,2049,9783,2049,
9746,10,1,15341,1793,15388,4097,15313,10,1,15385,2049,67,10,1,15332,9,10,15291,15406,
147,99,58,103,101,116,0,2049,15326,3841,15313,2049,9664,10,15397,15423,147,103,97,116,
104,101,114,0,2,1793,15430,1,8,11,10,1,15426,1793,15438,1,127,11,10,1,
15434,2049,2103,22,1793,15447,3,10,1,15445,1793,15454,2049,3388,10,1,15451,2049,67,10,
15413,15468,147,99,121,99,108,101,0,2049,15406,2049,2066,4,8,2049,2731,25,3,2049,
15423,1,15468,7,10,15397,15499,147,112,97,114,115,101,45,117,110,116,105,108,0,
1793,15511,2049,3683,2049,3480,2049,15468,771,2049,3354,10,1,15501,2049,3504,10,15484,15525,147,
115,58,103,101,116,0,1793,15547,1793,15533,1,10,11,10,1,15529,1793,15541,1,13,
11,10,1,15537,2049,2103,22,10,1,15527,2049,15499,10,15516,15568,134,105,111,58,83,
99,114,105,112,116,105,110,103,0,4,15552,15581,147,105,100,101,110,116,105,102,
121,0,3841,15568,2049,2578,1793,15648,1,9,2049,9690,2,2049,2613,1793,15636,3,2049,3702,
73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48,57,32,
78,79,84,32,70,79,85,78,68,0,1,15719,2049,9783,2049,9746,10,1,15716,1793,
15763,4097,15688,10,1,15760,2049,67,10,1,15707,9,10,15636,15784,147,115,121,115,58,
97,114,103,99,0,2049,15701,1,0,3841,15688,2049,9664,10,15772,15805,147,115,121,115,
58,97,114,103,118,0,2049,3683,4,2049,15701,1,1,3841,15688,2049,9664,10,15793,15828,
147,105,110,99,108,117,100,101,0,2049,15701,1,2,3841,15688,2049,9664,10,15817,15849,
147,115,121,115,58,110,97,109,101,0,2049,3683,2049,15701,1,3,3841,15688,2049,9664,
10,15837,15882,134,70,117,108,108,83,99,114,101,101,110,76,105,115,116,101,110,
101,114,0,0,15860,15893,134,66,117,102,102,101,114,0,0,10,15883,15902,134,80,
116,114,0,0,10,15895,15917,147,116,101,114,109,105,110,97,116,101,0,1,0,
3841,15902,16,10,15904,15939,147,98,117,102,102,101,114,58,115,116,97,114,116,0,
3841,15893,10,15923,15956,147,98,117,102,102,101,114,58,101,110,100,0,3841,15902,10,
15942,15973,147,98,117,102,102,101,114,58,97,100,100,0,2049,15956,16,1,15902,2049,
3020,2049,15917,10,15959,15997,147,98,117,102,102,101,114,58,103,101,116,0,1,15902,
2049,3035,2049,15956,15,2049,15917,10,15983,16023,147,98,117,102,102,101,114,58,101,109,
112,116,121,0,2049,15939,4097,15902,2049,15917,10,16007,16044,147,98,117,102,102,101,114,
58,115,101,116,0,4097,15893,2049,16023,10,16030,16063,147,119,104,105,116,101,44,98,
78,79,84,32,70,79,85,78,68,0,1,15599,2049,9783,2049,9746,10,1,15596,1793,
15643,4097,15568,10,1,15640,2049,67,10,1,15587,9,10,15516,15664,147,115,121,115,58,
97,114,103,99,0,2049,15581,1,0,3841,15568,2049,9664,10,15652,15685,147,115,121,115,
58,97,114,103,118,0,2049,3683,4,2049,15581,1,1,3841,15568,2049,9664,10,15673,15708,
147,105,110,99,108,117,100,101,0,2049,15581,1,2,3841,15568,2049,9664,10,15697,15729,
147,115,121,115,58,110,97,109,101,0,2049,3683,2049,15581,1,3,3841,15568,2049,9664,
10,15717,15762,134,70,117,108,108,83,99,114,101,101,110,76,105,115,116,101,110,
101,114,0,0,15740,15773,134,66,117,102,102,101,114,0,0,10,15763,15782,134,80,
116,114,0,0,10,15775,15797,147,116,101,114,109,105,110,97,116,101,0,1,0,
3841,15782,16,10,15784,15819,147,98,117,102,102,101,114,58,115,116,97,114,116,0,
3841,15773,10,15803,15836,147,98,117,102,102,101,114,58,101,110,100,0,3841,15782,10,
15822,15853,147,98,117,102,102,101,114,58,97,100,100,0,2049,15836,16,1,15782,2049,
3020,2049,15797,10,15839,15877,147,98,117,102,102,101,114,58,103,101,116,0,1,15782,
2049,3035,2049,15836,15,2049,15797,10,15863,15903,147,98,117,102,102,101,114,58,101,109,
112,116,121,0,2049,15819,4097,15782,2049,15797,10,15887,15924,147,98,117,102,102,101,114,
58,115,101,116,0,4097,15773,2049,15903,10,15910,15943,147,119,104,105,116,101,44,98,
108,117,101,0,1,27,2049,9733,2049,3702,91,49,59,51,55,59,52,52,109,0,
1,16069,2049,9783,10,16049,16099,147,119,104,105,116,101,44,98,108,97,99,107,0,
1,27,2049,9733,2049,3702,91,48,59,51,55,59,52,48,109,0,1,16105,2049,9783,
10,16084,16134,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,1,5,
2049,2831,2049,3702,124,32,0,1,16143,2049,9783,1,1,1793,16172,2049,3702,97,0,1,
16156,2049,3702,97,97,0,1,16162,2049,7044,2049,9797,10,1,16154,2049,2293,1,2,1793,
16212,2049,3702,97,98,0,1,16182,2049,3702,97,98,98,97,0,1,16189,2049,7044,1,
2,1793,16207,2049,9797,2049,9757,10,1,16202,2049,2263,10,1,16180,2049,2293,1,3,1793,
16255,2049,3702,97,98,99,0,1,16222,2049,3702,97,98,99,99,98,97,0,1,16230,
2049,7044,1,3,1793,16250,2049,9797,2049,9757,10,1,16245,2049,2263,10,1,16220,2049,2293,
1,4,1793,16301,2049,3702,97,98,99,100,0,1,16265,2049,3702,97,98,99,100,100,
99,98,97,0,1,16274,2049,7044,1,4,1793,16296,2049,9797,2049,9757,10,1,16291,2049,
2263,10,1,16263,2049,2293,1,5,1793,16350,2049,3702,97,98,99,100,101,0,1,16311,
2049,3702,97,98,99,100,101,101,100,99,98,97,0,1,16321,2049,7044,1,5,1793,
16345,2049,9797,2049,9757,10,1,16340,2049,2263,10,1,16309,2049,2293,10,16120,16366,147,116,
1,15949,2049,9783,10,15929,15979,147,119,104,105,116,101,44,98,108,97,99,107,0,
1,27,2049,9733,2049,3702,91,48,59,51,55,59,52,48,109,0,1,15985,2049,9783,
10,15964,16014,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,1,5,
2049,2831,2049,3702,124,32,0,1,16023,2049,9783,1,1,1793,16052,2049,3702,97,0,1,
16036,2049,3702,97,97,0,1,16042,2049,7044,2049,9797,10,1,16034,2049,2293,1,2,1793,
16092,2049,3702,97,98,0,1,16062,2049,3702,97,98,98,97,0,1,16069,2049,7044,1,
2,1793,16087,2049,9797,2049,9757,10,1,16082,2049,2263,10,1,16060,2049,2293,1,3,1793,
16135,2049,3702,97,98,99,0,1,16102,2049,3702,97,98,99,99,98,97,0,1,16110,
2049,7044,1,3,1793,16130,2049,9797,2049,9757,10,1,16125,2049,2263,10,1,16100,2049,2293,
1,4,1793,16181,2049,3702,97,98,99,100,0,1,16145,2049,3702,97,98,99,100,100,
99,98,97,0,1,16154,2049,7044,1,4,1793,16176,2049,9797,2049,9757,10,1,16171,2049,
2263,10,1,16143,2049,2293,1,5,1793,16230,2049,3702,97,98,99,100,101,0,1,16191,
2049,3702,97,98,99,100,101,101,100,99,98,97,0,1,16201,2049,7044,1,5,1793,
16225,2049,9797,2049,9757,10,1,16220,2049,2263,10,1,16189,2049,2293,10,16000,16246,147,116,
111,112,45,114,111,119,0,1,27,2049,9733,2049,3702,91,49,59,48,72,0,1,
16372,2049,9783,10,16355,16396,147,99,108,101,97,114,45,114,111,119,0,1,80,1793,
16403,2049,9757,10,1,16400,2049,2263,10,16383,16415,147,116,111,112,0,2049,16366,2049,16063,
2049,16396,2049,16366,2049,9860,2049,1556,2049,2932,2049,3702,83,80,58,37,110,32,70,82,
69,69,58,37,110,32,0,1,16431,2049,6875,2049,9783,2049,16134,10,16408,16469,147,98,
16252,2049,9783,10,16235,16276,147,99,108,101,97,114,45,114,111,119,0,1,80,1793,
16283,2049,9757,10,1,16280,2049,2263,10,16263,16295,147,116,111,112,0,2049,16246,2049,15943,
2049,16276,2049,16246,2049,9860,2049,1556,2049,2932,2049,3702,83,80,58,37,110,32,70,82,
69,69,58,37,110,32,0,1,16311,2049,6875,2049,9783,2049,16014,10,16288,16349,147,98,
111,116,116,111,109,45,114,111,119,0,1,27,2049,9733,2049,3702,91,50,52,59,
48,72,0,1,16475,2049,9783,10,16455,16496,147,105,110,112,117,116,0,2049,16469,2049,
16063,2049,16396,2049,16469,10,16487,16515,147,111,117,116,112,117,116,0,2049,16469,2049,16099,
2049,16396,2049,16469,10,16505,16530,134,73,110,0,0,16524,16542,147,100,105,115,99,97,
114,100,0,2049,15997,3,10,16531,16553,147,114,117,98,0,1,8,2049,9733,2049,9757,
1,8,2049,9733,10,16546,16576,147,101,118,97,108,117,97,116,101,0,1,1024,2049,
367,10,16564,16590,147,114,101,115,101,116,0,1,0,4097,16530,2049,16023,10,16581,16607,
147,104,97,110,100,108,101,0,1,32,1793,16628,3841,16530,25,3,2049,16515,2049,16576,
2049,9746,2049,16590,2049,16415,2049,16496,10,1,16611,2049,2293,1,13,1793,16653,3841,16530,25,
3,2049,16515,2049,16576,2049,9746,2049,16590,2049,16415,2049,16496,10,1,16636,2049,2293,1,10,
1793,16678,3841,16530,25,3,2049,16515,2049,16576,2049,9746,2049,16590,2049,16415,2049,16496,10,1,
16661,2049,2293,1,127,1793,16699,3841,16530,25,3,2049,16542,2049,16553,1,16530,2049,3035,10,
1,16686,2049,2293,1,8,1793,16720,3841,16530,25,3,2049,16542,2049,16553,1,16530,2049,3035,
10,1,16707,2049,2293,2,2049,9733,2049,15973,1,16530,2049,3020,10,16597,16745,147,112,114,
111,99,101,115,115,0,1,1024,2049,16044,2049,15526,2049,16607,3841,16530,1,80,11,1793,
16767,1,0,4097,16530,2049,16496,10,1,16760,9,1,16749,7,10,16734,16782,147,105,110,
48,72,0,1,16355,2049,9783,10,16335,16376,147,105,110,112,117,116,0,2049,16349,2049,
15943,2049,16276,2049,16349,10,16367,16395,147,111,117,116,112,117,116,0,2049,16349,2049,15979,
2049,16276,2049,16349,10,16385,16410,134,73,110,0,0,16404,16422,147,100,105,115,99,97,
114,100,0,2049,15877,3,10,16411,16433,147,114,117,98,0,1,8,2049,9733,2049,9757,
1,8,2049,9733,10,16426,16456,147,101,118,97,108,117,97,116,101,0,1,1024,2049,
367,10,16444,16470,147,114,101,115,101,116,0,1,0,4097,16410,2049,15903,10,16461,16487,
147,104,97,110,100,108,101,0,1,32,1793,16508,3841,16410,25,3,2049,16395,2049,16456,
2049,9746,2049,16470,2049,16295,2049,16376,10,1,16491,2049,2293,1,13,1793,16533,3841,16410,25,
3,2049,16395,2049,16456,2049,9746,2049,16470,2049,16295,2049,16376,10,1,16516,2049,2293,1,10,
1793,16558,3841,16410,25,3,2049,16395,2049,16456,2049,9746,2049,16470,2049,16295,2049,16376,10,1,
16541,2049,2293,1,127,1793,16579,3841,16410,25,3,2049,16422,2049,16433,1,16410,2049,3035,10,
1,16566,2049,2293,1,8,1793,16600,3841,16410,25,3,2049,16422,2049,16433,1,16410,2049,3035,
10,1,16587,2049,2293,2,2049,9733,2049,15853,1,16410,2049,3020,10,16477,16625,147,112,114,
111,99,101,115,115,0,1,1024,2049,15924,2049,15406,2049,16487,3841,16410,1,80,11,1793,
16647,1,0,4097,16410,2049,16376,10,1,16640,9,1,16629,7,10,16614,16662,147,105,110,
105,116,0,2049,3702,115,116,116,121,32,99,98,114,101,97,107,32,45,101,99,
104,111,0,1,16784,2049,13119,10,16774,16815,147,101,120,105,116,0,2049,3702,115,116,
116,121,32,45,99,98,114,101,97,107,32,101,99,104,111,0,1,16817,2049,13119,
1,0,2049,13231,10,15860,16853,147,99,108,101,97,114,0,1,27,2049,9733,2049,3702,
91,50,74,0,1,16859,2049,9783,1,27,2049,9733,2049,3702,91,48,59,48,72,0,
1,16873,2049,9783,10,16844,16909,147,108,105,115,116,101,110,58,102,117,108,108,115,
99,114,101,101,110,58,98,121,101,0,2049,16815,10,16884,16933,147,108,105,115,116,
101,110,58,102,117,108,108,115,99,114,101,101,110,0,2049,16782,2049,16853,2049,16415,
2049,16496,2049,16745,10,16912,16954,134,78,111,69,99,104,111,0,0,16944,16966,147,118,
104,111,0,1,16664,2049,12999,10,16654,16695,147,101,120,105,116,0,2049,3702,115,116,
116,121,32,45,99,98,114,101,97,107,32,101,99,104,111,0,1,16697,2049,12999,
1,0,2049,13111,10,15740,16733,147,99,108,101,97,114,0,1,27,2049,9733,2049,3702,
91,50,74,0,1,16739,2049,9783,1,27,2049,9733,2049,3702,91,48,59,48,72,0,
1,16753,2049,9783,10,16724,16789,147,108,105,115,116,101,110,58,102,117,108,108,115,
99,114,101,101,110,58,98,121,101,0,2049,16695,10,16764,16813,147,108,105,115,116,
101,110,58,102,117,108,108,115,99,114,101,101,110,0,2049,16662,2049,16733,2049,16295,
2049,16376,2049,16625,10,16792,16834,134,78,111,69,99,104,111,0,0,16824,16846,147,118,
101,114,115,105,111,110,0,3841,4,1,100,20,2049,9797,1,46,2049,9733,2049,9797,
10,16955,16988,147,101,111,108,63,0,1793,16994,1,13,11,10,1,16990,1793,17002,1,
10,11,10,1,16998,1793,17010,1,32,11,10,1,17006,2049,2140,22,22,10,16980,17027,
147,118,97,108,105,100,63,0,2,2049,82,2049,2594,10,17017,17039,147,111,107,0,
3841,16954,2049,2731,25,3,2049,1818,1793,17062,2049,9746,2049,3702,79,107,32,0,1,17053,
2049,9783,10,1,17049,2049,73,10,17033,17080,147,99,104,101,99,107,45,101,111,102,
0,2,1793,17087,1,-1,11,10,1,17083,1793,17095,1,4,11,10,1,17091,2049,2103,
22,1793,17117,2049,3702,98,121,101,0,1,17104,2049,200,2049,161,15,8,10,1,17102,
9,10,17067,17133,147,99,104,101,99,107,45,98,115,0,2,1793,17140,1,8,11,
10,1,17136,1793,17148,1,127,11,10,1,17144,2049,2103,22,1793,17161,2049,3412,2049,3412,
771,10,1,17155,9,10,17121,17174,147,115,58,103,101,116,0,1793,17203,1,1024,2049,
3480,1793,17194,2049,15526,2,2049,3388,2049,17080,2049,17133,2049,16988,10,1,17182,2049,2234,2049,
3354,2049,3795,10,1,17176,2049,3504,10,16944,17218,147,98,97,110,110,101,114,0,3841,
16954,2049,2731,25,3,2049,3702,82,69,84,82,79,32,49,50,32,40,114,120,45,
0,1,17226,2049,9783,2049,16966,1,41,2049,9733,2049,9746,2049,1543,2049,9797,2049,3702,32,
10,16835,16868,147,101,111,108,63,0,1793,16874,1,13,11,10,1,16870,1793,16882,1,
10,11,10,1,16878,1793,16890,1,32,11,10,1,16886,2049,2140,22,22,10,16860,16907,
147,118,97,108,105,100,63,0,2,2049,82,2049,2594,10,16897,16919,147,111,107,0,
3841,16834,2049,2731,25,3,2049,1818,1793,16942,2049,9746,2049,3702,79,107,32,0,1,16933,
2049,9783,10,1,16929,2049,73,10,16913,16960,147,99,104,101,99,107,45,101,111,102,
0,2,1793,16967,1,-1,11,10,1,16963,1793,16975,1,4,11,10,1,16971,2049,2103,
22,1793,16997,2049,3702,98,121,101,0,1,16984,2049,200,2049,161,15,8,10,1,16982,
9,10,16947,17013,147,99,104,101,99,107,45,98,115,0,2,1793,17020,1,8,11,
10,1,17016,1793,17028,1,127,11,10,1,17024,2049,2103,22,1793,17041,2049,3412,2049,3412,
771,10,1,17035,9,10,17001,17054,147,115,58,103,101,116,0,1793,17083,1,1024,2049,
3480,1793,17074,2049,15406,2,2049,3388,2049,16960,2049,17013,2049,16868,10,1,17062,2049,2234,2049,
3354,2049,3795,10,1,17056,2049,3504,10,16824,17098,147,98,97,110,110,101,114,0,3841,
16834,2049,2731,25,3,2049,3702,82,69,84,82,79,32,49,50,32,40,114,120,45,
0,1,17106,2049,9783,2049,16846,1,41,2049,9733,2049,9746,2049,1543,2049,9797,2049,3702,32,
77,65,88,44,32,84,73,66,32,64,32,49,48,50,53,44,32,72,101,97,
112,32,64,32,0,1,17258,2049,9783,2049,1847,2049,9797,2049,9746,10,17208,17302,147,98,
121,101,0,3841,15882,1793,17309,2049,16909,10,1,17306,9,1,0,2049,13231,10,17295,17327,
147,108,105,115,116,101,110,0,3841,15882,1793,17334,2049,16933,10,1,17331,2049,2505,2049,
17039,2049,17174,2049,17027,1793,17351,2049,367,2049,17039,10,1,17346,1793,17357,3,10,1,17355,
2049,67,1,17340,7,10,17317,17379,147,105,109,97,103,101,58,115,97,118,101,0,
1,1000,2049,9690,2049,9664,10,17365,17397,147,100,58,119,111,114,100,115,0,1793,17406,
2049,165,2049,9783,2049,9757,10,1,17399,2049,7119,10,17386,17427,147,100,58,119,111,114,
100,115,45,119,105,116,104,0,2049,1847,2049,4726,1793,17458,2049,165,2,2049,1847,2049,
4328,1793,17447,2049,9783,2049,9757,10,1,17442,1793,17453,3,10,1,17451,2049,67,10,1,
17433,2049,7119,10,17411,17482,147,100,105,115,112,108,97,121,45,105,102,45,108,101,
102,116,0,2,2049,1847,2049,4642,1793,17494,2049,9783,2049,9757,10,1,17489,1793,17500,3,
10,1,17498,2049,67,10,17411,17531,147,100,58,119,111,114,100,115,45,98,101,103,
105,110,110,105,110,103,45,119,105,116,104,0,2049,1847,2049,4726,1793,17542,2049,165,
2049,17482,10,1,17537,2049,7119,10,0 };
112,32,64,32,0,1,17138,2049,9783,2049,1847,2049,9797,2049,9746,10,17088,17182,147,98,
121,101,0,3841,15762,1793,17189,2049,16789,10,1,17186,9,1,0,2049,13111,10,17175,17207,
147,108,105,115,116,101,110,0,3841,15762,1793,17214,2049,16813,10,1,17211,2049,2505,2049,
16919,2049,17054,2049,16907,1793,17231,2049,367,2049,16919,10,1,17226,1793,17237,3,10,1,17235,
2049,67,1,17220,7,10,17197,17259,147,105,109,97,103,101,58,115,97,118,101,0,
1,1000,2049,9690,2049,9664,10,17245,17277,147,100,58,119,111,114,100,115,0,1793,17286,
2049,165,2049,9783,2049,9757,10,1,17279,2049,7119,10,17266,17307,147,100,58,119,111,114,
100,115,45,119,105,116,104,0,2049,1847,2049,4726,1793,17338,2049,165,2,2049,1847,2049,
4328,1793,17327,2049,9783,2049,9757,10,1,17322,1793,17333,3,10,1,17331,2049,67,10,1,
17313,2049,7119,10,17291,17362,147,100,105,115,112,108,97,121,45,105,102,45,108,101,
102,116,0,2,2049,1847,2049,4642,1793,17374,2049,9783,2049,9757,10,1,17369,1793,17380,3,
10,1,17378,2049,67,10,17291,17411,147,100,58,119,111,114,100,115,45,98,101,103,
105,110,110,105,110,103,45,119,105,116,104,0,2049,1847,2049,4726,1793,17422,2049,165,
2049,17362,10,1,17417,2049,7119,10,0 };

View file

@ -23,13 +23,10 @@
#include <errno.h>
#include <math.h>
#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -53,10 +50,9 @@
#define D_OFFSET_CLASS 2
#define D_OFFSET_NAME 3
#define NUM_DEVICES 8 /* Set the number of I/O devices */
#define NUM_DEVICES 7 /* Set the number of I/O devices */
#define MAX_OPEN_FILES 128
#define GOPHER_MAX_FILE_SIZE (128 * 1024) + 1
/*---------------------------------------------------------------------
@ -98,8 +94,6 @@ void io_unix_query();
void io_unix_handler();
void io_floatingpoint_query();
void io_floatingpoint_handler();
void io_gopher_query();
void io_gopher_handler();
void io_scripting_handler();
void io_scripting_query();
void io_image();
@ -126,7 +120,6 @@ Handler IO_deviceHandlers[NUM_DEVICES + 1] = {
io_floatingpoint_handler,
io_scripting_handler,
io_unix_handler,
io_gopher_handler,
io_image
};
@ -137,7 +130,6 @@ Handler IO_queryHandlers[NUM_DEVICES + 1] = {
io_floatingpoint_query,
io_scripting_query,
io_unix_query,
io_gopher_query,
io_image_query
};
@ -992,117 +984,6 @@ void io_floatingpoint_handler() {
/*=====================================================================*/
/*---------------------------------------------------------------------
Gopher Support
---------------------------------------------------------------------*/
/*---------------------------------------------------------------------
The first Gopher related function is `error()`, which prints an
error message and exits if there is a problem.
---------------------------------------------------------------------*/
void error(const char *msg) {
perror(msg);
exit(0);
}
/*---------------------------------------------------------------------
`gopher_fetch()` is the part that does all the real work.
---------------------------------------------------------------------*/
void gopher_fetch(char *host, CELL port, char *selector, CELL dest) {
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char data[GOPHER_MAX_FILE_SIZE];
char buffer[1025];
portno = (int)port;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(host);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero(data, GOPHER_MAX_FILE_SIZE);
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("ERROR connecting");
n = write(sockfd, selector, strlen(selector));
if (n < 0)
error("ERROR writing to socket");
n = write(sockfd, "\n", strlen("\n"));
if (n < 0)
error("ERROR writing to socket");
n = 1;
while (n > 0) {
bzero(buffer, 1025);
n = read(sockfd, buffer, 1024);
strlcat(data, buffer, GOPHER_MAX_FILE_SIZE);
}
close(sockfd);
string_inject(data, dest);
stack_push(strlen(data));
}
/*---------------------------------------------------------------------
The last Gopher function, `gopher_handle_request()` pulls the values
needed from the stack and passes them to the `gopher_fetch()`
function.
This will take the following from the stack (TOS to bottom):
Selector (NULL terminated string)
Port (Number)
Server (NULL terminated string)
Buffer (Pointer to memory that will hold the received file)
---------------------------------------------------------------------*/
void gopher_handle_request() {
CELL port, dest;
char server[1025], selector[4097];
strlcpy(selector, string_extract(stack_pop()), 4096);
port = stack_pop();
strlcpy(server, string_extract(stack_pop()), 1024);
dest = stack_pop();
gopher_fetch(server, port, selector, dest);
}
Handler GopherActions[1] = {
gopher_handle_request
};
void io_gopher_query() {
stack_push(0);
stack_push(5);
}
void io_gopher_handler() {
GopherActions[stack_pop()]();
}
/*=====================================================================*/
/*---------------------------------------------------------------------
`unix_open_pipe()` is like `file_open()`, but for pipes. This pulls
from the data stack:

View file

@ -23,13 +23,10 @@
#include <errno.h>
#include <math.h>
#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@ -53,10 +50,9 @@
#define D_OFFSET_CLASS 2
#define D_OFFSET_NAME 3
#define NUM_DEVICES 8 /* Set the number of I/O devices */
#define NUM_DEVICES 7 /* Set the number of I/O devices */
#define MAX_OPEN_FILES 128
#define GOPHER_MAX_FILE_SIZE (128 * 1024) + 1
/*---------------------------------------------------------------------
@ -98,8 +94,6 @@ void io_unix_query();
void io_unix_handler();
void io_floatingpoint_query();
void io_floatingpoint_handler();
void io_gopher_query();
void io_gopher_handler();
void io_scripting_handler();
void io_scripting_query();
void io_image();
@ -124,7 +118,6 @@ Handler IO_deviceHandlers[NUM_DEVICES + 1] = {
io_floatingpoint_handler,
io_scripting_handler,
io_unix_handler,
io_gopher_handler,
io_image
};
@ -135,7 +128,6 @@ Handler IO_queryHandlers[NUM_DEVICES + 1] = {
io_floatingpoint_query,
io_scripting_query,
io_unix_query,
io_gopher_query,
io_image_query
};
@ -1056,117 +1048,6 @@ void io_floatingpoint_handler() {
/*=====================================================================*/
/*---------------------------------------------------------------------
Gopher Support
---------------------------------------------------------------------*/
/*---------------------------------------------------------------------
The first Gopher related function is `error()`, which prints an
error message and exits if there is a problem.
---------------------------------------------------------------------*/
void error(const char *msg) {
perror(msg);
exit(0);
}
/*---------------------------------------------------------------------
`gopher_fetch()` is the part that does all the real work.
---------------------------------------------------------------------*/
void gopher_fetch(char *host, CELL port, char *selector, CELL dest) {
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char data[GOPHER_MAX_FILE_SIZE];
char buffer[1025];
portno = (int)port;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(host);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero(data, GOPHER_MAX_FILE_SIZE);
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("ERROR connecting");
n = write(sockfd, selector, strlen(selector));
if (n < 0)
error("ERROR writing to socket");
n = write(sockfd, "\n", strlen("\n"));
if (n < 0)
error("ERROR writing to socket");
n = 1;
while (n > 0) {
bzero(buffer, 1025);
n = read(sockfd, buffer, 1024);
strlcat(data, buffer, GOPHER_MAX_FILE_SIZE);
}
close(sockfd);
string_inject(data, dest);
stack_push(strlen(data));
}
/*---------------------------------------------------------------------
The last Gopher function, `gopher_handle_request()` pulls the values
needed from the stack and passes them to the `gopher_fetch()`
function.
This will take the following from the stack (TOS to bottom):
Selector (NULL terminated string)
Port (Number)
Server (NULL terminated string)
Buffer (Pointer to memory that will hold the received file)
---------------------------------------------------------------------*/
void gopher_handle_request() {
CELL port, dest;
char server[1025], selector[4097];
strlcpy(selector, string_extract(stack_pop()), 4096);
port = stack_pop();
strlcpy(server, string_extract(stack_pop()), 1024);
dest = stack_pop();
gopher_fetch(server, port, selector, dest);
}
Handler GopherActions[1] = {
gopher_handle_request
};
void io_gopher_query() {
stack_push(0);
stack_push(5);
}
void io_gopher_handler() {
GopherActions[stack_pop()]();
}
/*=====================================================================*/
/*---------------------------------------------------------------------
`unix_open_pipe()` is like `file_open()`, but for pipes. This pulls
from the data stack:

View file

@ -295,7 +295,7 @@ file:slurp as- - - Given an address and a file name, read the file contents into
file:spew ss- - - Given a string (s1) and a file name (s2), write the string into the file, replacing any existing cotent. class:word {n/a} {n/a} file rre
file:tell h-n - - Given a file handle, return the current offset in the file. class:word {n/a} {n/a} file rre
file:write ch- - - Write a character to the file represented by the handle. class:word {n/a} {n/a} file rre
gopher:get asns-n - - Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received. class:word here 'forthworks.com #70 '/ gopher:get\n here s:put {n/a} gopher rre
gopher:get asns-n - - Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received. class:word here 'forthworks.com #70 '/ gopher:get\n here s:put {n/a} gopher ios
gt? nn-f - - Compare n1 and n2. Return `TRUE` if n1 is greater than n2, or `FALSE` otherwise. class:primitive {n/a} {n/a} global all
gteq? nn-f - - Compare n1 and n2. Return `TRUE` if n1 is greater than or equal to n2, or `FALSE` otherwise. class:word {n/a} {n/a} global all
here -a - - Return the next free address in memory. class:word {n/a} {n/a} global all

Can't render this file because it contains an unexpected character in line 63 and column 55.