summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Bakita <bakitajoshua@gmail.com>2019-10-07 19:13:39 -0400
committerJoshua Bakita <bakitajoshua@gmail.com>2019-10-07 19:13:39 -0400
commit386b7d3366f1359a265da207a9cafa3edf553b64 (patch)
treec76120c2c138faed822e4ae386be6ef22a738a78
parent54a3f7091a2146b29c73a6fdc4b62a5c4ad7a3d8 (diff)
Reorganize and commit all the modified TACLeBench code and run scripts
-rw-r--r--all_pairs/Makefile57
-rwxr-xr-xall_pairs/run_all_pairs.sh77
-rw-r--r--all_pairs/source/adpcm_dec/ChangeLog.txt32
-rw-r--r--all_pairs/source/adpcm_dec/adpcm_dec.c719
-rw-r--r--all_pairs/source/adpcm_dec/timedTest.txt100
-rw-r--r--all_pairs/source/adpcm_enc/ChangeLog.txt34
-rw-r--r--all_pairs/source/adpcm_enc/adpcm_enc.c758
-rw-r--r--all_pairs/source/ammunition/ChangeLog.txt66
-rw-r--r--all_pairs/source/ammunition/README86
-rw-r--r--all_pairs/source/ammunition/ammunition.c1185
-rw-r--r--all_pairs/source/ammunition/ammunitionTimed.txt100
-rw-r--r--all_pairs/source/ammunition/ammunition_libc.c166
-rw-r--r--all_pairs/source/ammunition/ammunition_limits.h35
-rw-r--r--all_pairs/source/ammunition/ammunition_stdio.h8
-rw-r--r--all_pairs/source/ammunition/ammunition_stdlib.h6
-rw-r--r--all_pairs/source/ammunition/ammunition_string.h18
-rw-r--r--all_pairs/source/ammunition/arithm.c1384
-rw-r--r--all_pairs/source/ammunition/arithm.h123
-rw-r--r--all_pairs/source/ammunition/bits.c313
-rw-r--r--all_pairs/source/ammunition/bits.h60
-rw-r--r--all_pairs/source/ammunition/gmon.outbin0 -> 31048 bytes
-rw-r--r--all_pairs/source/ammunition/timeScript8
-rw-r--r--all_pairs/source/anagram/ChangeLog.txt125
-rw-r--r--all_pairs/source/anagram/anagram.c670
-rw-r--r--all_pairs/source/anagram/anagramTest.txt100
-rw-r--r--all_pairs/source/anagram/anagram_compare.h27
-rw-r--r--all_pairs/source/anagram/anagram_ctype.h45
-rw-r--r--all_pairs/source/anagram/anagram_input.c2317
-rw-r--r--all_pairs/source/anagram/anagram_stdlib.c153
-rw-r--r--all_pairs/source/anagram/anagram_stdlib.h29
-rw-r--r--all_pairs/source/anagram/anagram_strings.h27
-rw-r--r--all_pairs/source/audiobeam/README86
-rw-r--r--all_pairs/source/audiobeam/audiobeam.c594
-rw-r--r--all_pairs/source/audiobeam/audiobeam.h50
-rw-r--r--all_pairs/source/audiobeam/audiobeaminput.c5784
-rw-r--r--all_pairs/source/audiobeam/audiobeamlibm.c423
-rw-r--r--all_pairs/source/audiobeam/audiobeamlibm.h59
-rw-r--r--all_pairs/source/audiobeam/audiobeamlibmalloc.c14
-rw-r--r--all_pairs/source/audiobeam/audiobeamlibmalloc.h27
-rw-r--r--all_pairs/source/audiobeam/audiobeamlibmath.h69
-rw-r--r--all_pairs/source/audiobeam/changeLog.txt36
-rw-r--r--all_pairs/source/audiobeam/license.txt21
-rw-r--r--all_pairs/source/cjpeg_transupp/ChangeLog.txt36
-rw-r--r--all_pairs/source/cjpeg_transupp/README417
-rw-r--r--all_pairs/source/cjpeg_transupp/cjpeg_transupp.c718
-rw-r--r--all_pairs/source/cjpeg_transupp/jpeglib.h757
-rw-r--r--all_pairs/source/cjpeg_wrbmp/ChangeLog.txt104
-rw-r--r--all_pairs/source/cjpeg_wrbmp/README383
-rw-r--r--all_pairs/source/cjpeg_wrbmp/cderror.h140
-rw-r--r--all_pairs/source/cjpeg_wrbmp/cdjpeg.h105
-rw-r--r--all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c225
-rw-r--r--all_pairs/source/cjpeg_wrbmp/input.c79
-rw-r--r--all_pairs/source/cjpeg_wrbmp/jconfig.h65
-rw-r--r--all_pairs/source/cjpeg_wrbmp/jerror.h203
-rw-r--r--all_pairs/source/cjpeg_wrbmp/jmorecfg.h95
-rw-r--r--all_pairs/source/cjpeg_wrbmp/jpeglib.h869
-rw-r--r--all_pairs/source/cleanupSemaphores.c10
-rw-r--r--all_pairs/source/dijkstra/ChangeLog.txt44
-rw-r--r--all_pairs/source/dijkstra/dijkstra.c204
-rw-r--r--all_pairs/source/dijkstra/input.c105
-rw-r--r--all_pairs/source/dijkstra/input.h8
-rw-r--r--all_pairs/source/empty.c11
-rw-r--r--all_pairs/source/epic/ChangeLog.txt56
-rw-r--r--all_pairs/source/epic/epic.c1141
-rw-r--r--all_pairs/source/epic/epic.h72
-rw-r--r--all_pairs/source/extra.h (renamed from rtss19/extra.h)11
-rw-r--r--all_pairs/source/fmref/Changelog.txt5
-rw-r--r--all_pairs/source/fmref/fmref.c283
-rw-r--r--all_pairs/source/fmref/license.txt21
-rw-r--r--all_pairs/source/fmref/math_private.h178
-rw-r--r--all_pairs/source/fmref/wcclibm.c522
-rw-r--r--all_pairs/source/fmref/wcclibm.h54
-rw-r--r--all_pairs/source/g723_enc/ChangeLog.txt34
-rw-r--r--all_pairs/source/g723_enc/g723_enc.c887
-rw-r--r--all_pairs/source/g723_enc/license.txt23
-rw-r--r--all_pairs/source/gsm_dec/COPYRIGHT16
-rw-r--r--all_pairs/source/gsm_dec/ChangeLog.txt87
-rw-r--r--all_pairs/source/gsm_dec/add.h55
-rw-r--r--all_pairs/source/gsm_dec/data.h865
-rw-r--r--all_pairs/source/gsm_dec/gsm.h14
-rw-r--r--all_pairs/source/gsm_dec/gsm_dec.c764
-rw-r--r--all_pairs/source/gsm_dec/private.h44
-rw-r--r--all_pairs/source/gsm_enc/COPYRIGHT16
-rw-r--r--all_pairs/source/gsm_enc/ChangeLog.txt8
-rw-r--r--all_pairs/source/gsm_enc/data.h452
-rw-r--r--all_pairs/source/gsm_enc/gsm_enc.c2072
-rw-r--r--all_pairs/source/gsm_enc/private.h56
-rw-r--r--all_pairs/source/h264_dec/changeLog.txt41
-rw-r--r--all_pairs/source/h264_dec/copyright.txt32
-rw-r--r--all_pairs/source/h264_dec/h264_dec.c610
-rw-r--r--all_pairs/source/h264_dec/h264_dec.h29
-rw-r--r--all_pairs/source/h264_dec/h264_decinput.c801
-rw-r--r--all_pairs/source/huff_dec/ChangeLog.txt20
-rw-r--r--all_pairs/source/huff_dec/compress.txt1107
-rw-r--r--all_pairs/source/huff_dec/huff_dec.c393
-rw-r--r--all_pairs/source/huff_enc/ChangeLog.txt27
-rw-r--r--all_pairs/source/huff_enc/compress.txt1107
-rw-r--r--all_pairs/source/huff_enc/huff_enc.c589
-rw-r--r--all_pairs/source/mpeg2/ChangeLog.txt35
-rw-r--r--all_pairs/source/mpeg2/mpeg2.c13218
-rw-r--r--all_pairs/source/ndes/ChangeLog.txt20
-rw-r--r--all_pairs/source/ndes/ndes.c378
-rw-r--r--all_pairs/source/petrinet/ChangeLog.txt63
-rw-r--r--all_pairs/source/petrinet/petrinet.c990
-rw-r--r--all_pairs/source/rijndael_dec/ChangeLog.txt58
-rw-r--r--all_pairs/source/rijndael_dec/aes.c406
-rw-r--r--all_pairs/source/rijndael_dec/aes.h165
-rw-r--r--all_pairs/source/rijndael_dec/aestab.h379
-rw-r--r--all_pairs/source/rijndael_dec/input_small_enc.c2051
-rw-r--r--all_pairs/source/rijndael_dec/rijndael_dec.c195
-rw-r--r--all_pairs/source/rijndael_dec/rijndael_dec_libc.c66
-rw-r--r--all_pairs/source/rijndael_dec/rijndael_dec_libc.h24
-rw-r--r--all_pairs/source/rijndael_enc/ChangeLog.txt98
-rw-r--r--all_pairs/source/rijndael_enc/aes.c406
-rw-r--r--all_pairs/source/rijndael_enc/aes.h165
-rw-r--r--all_pairs/source/rijndael_enc/aestab.h261
-rw-r--r--all_pairs/source/rijndael_enc/input_small.c1963
-rw-r--r--all_pairs/source/rijndael_enc/rijndael_enc.c238
-rw-r--r--all_pairs/source/rijndael_enc/rijndael_enc_libc.c66
-rw-r--r--all_pairs/source/rijndael_enc/rijndael_enc_libc.h24
-rw-r--r--all_pairs/source/statemate/ChangeLog.txt60
-rw-r--r--all_pairs/source/statemate/statemate.c1286
-rw-r--r--all_pairs/source/susan/ChangeLog.txt11
-rw-r--r--all_pairs/source/susan/LICENSE14
-rw-r--r--all_pairs/source/susan/input.c7292
-rw-r--r--all_pairs/source/susan/math_private.h178
-rw-r--r--all_pairs/source/susan/susan.c2014
-rw-r--r--all_pairs/source/susan/wccfile.c79
-rw-r--r--all_pairs/source/susan/wccfile.h24
-rw-r--r--all_pairs/source/susan/wcclibm.c444
-rw-r--r--all_pairs/source/susan/wcclibm.h53
-rw-r--r--all_pairs/source/susan/wccmalloc.c51
-rw-r--r--all_pairs/source/susan/wccmalloc.h10
-rw-r--r--all_pairs/tacleNames.txt19
-rw-r--r--baseline/Makefile55
-rwxr-xr-xbaseline/run_baseline.sh65
-rw-r--r--baseline/source/adpcm_dec/ChangeLog.txt32
-rw-r--r--baseline/source/adpcm_dec/adpcm_dec.c719
-rw-r--r--baseline/source/adpcm_dec/timedTest.txt100
-rw-r--r--baseline/source/adpcm_enc/ChangeLog.txt34
-rw-r--r--baseline/source/adpcm_enc/adpcm_enc.c758
-rw-r--r--baseline/source/ammunition/ChangeLog.txt66
-rw-r--r--baseline/source/ammunition/README86
-rw-r--r--baseline/source/ammunition/ammunition.c1185
-rw-r--r--baseline/source/ammunition/ammunitionTimed.txt100
-rw-r--r--baseline/source/ammunition/ammunition_libc.c166
-rw-r--r--baseline/source/ammunition/ammunition_limits.h35
-rw-r--r--baseline/source/ammunition/ammunition_stdio.h8
-rw-r--r--baseline/source/ammunition/ammunition_stdlib.h6
-rw-r--r--baseline/source/ammunition/ammunition_string.h18
-rw-r--r--baseline/source/ammunition/arithm.c1384
-rw-r--r--baseline/source/ammunition/arithm.h123
-rw-r--r--baseline/source/ammunition/bits.c313
-rw-r--r--baseline/source/ammunition/bits.h60
-rw-r--r--baseline/source/ammunition/gmon.outbin0 -> 31048 bytes
-rw-r--r--baseline/source/ammunition/timeScript8
-rw-r--r--baseline/source/anagram/ChangeLog.txt125
-rw-r--r--baseline/source/anagram/anagram.c670
-rw-r--r--baseline/source/anagram/anagramTest.txt100
-rw-r--r--baseline/source/anagram/anagram_compare.h27
-rw-r--r--baseline/source/anagram/anagram_ctype.h45
-rw-r--r--baseline/source/anagram/anagram_input.c2317
-rw-r--r--baseline/source/anagram/anagram_stdlib.c153
-rw-r--r--baseline/source/anagram/anagram_stdlib.h29
-rw-r--r--baseline/source/anagram/anagram_strings.h27
-rw-r--r--baseline/source/audiobeam/README86
-rw-r--r--baseline/source/audiobeam/audiobeam.c594
-rw-r--r--baseline/source/audiobeam/audiobeam.h50
-rw-r--r--baseline/source/audiobeam/audiobeaminput.c5784
-rw-r--r--baseline/source/audiobeam/audiobeamlibm.c423
-rw-r--r--baseline/source/audiobeam/audiobeamlibm.h59
-rw-r--r--baseline/source/audiobeam/audiobeamlibmalloc.c14
-rw-r--r--baseline/source/audiobeam/audiobeamlibmalloc.h27
-rw-r--r--baseline/source/audiobeam/audiobeamlibmath.h69
-rw-r--r--baseline/source/audiobeam/changeLog.txt36
-rw-r--r--baseline/source/audiobeam/license.txt21
-rw-r--r--baseline/source/cjpeg_transupp/ChangeLog.txt36
-rw-r--r--baseline/source/cjpeg_transupp/README417
-rw-r--r--baseline/source/cjpeg_transupp/cjpeg_transupp.c718
-rw-r--r--baseline/source/cjpeg_transupp/jpeglib.h757
-rw-r--r--baseline/source/cjpeg_wrbmp/ChangeLog.txt104
-rw-r--r--baseline/source/cjpeg_wrbmp/README383
-rw-r--r--baseline/source/cjpeg_wrbmp/cderror.h140
-rw-r--r--baseline/source/cjpeg_wrbmp/cdjpeg.h105
-rw-r--r--baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c225
-rw-r--r--baseline/source/cjpeg_wrbmp/input.c79
-rw-r--r--baseline/source/cjpeg_wrbmp/jconfig.h65
-rw-r--r--baseline/source/cjpeg_wrbmp/jerror.h203
-rw-r--r--baseline/source/cjpeg_wrbmp/jmorecfg.h95
-rw-r--r--baseline/source/cjpeg_wrbmp/jpeglib.h869
-rw-r--r--baseline/source/dijkstra/ChangeLog.txt44
-rw-r--r--baseline/source/dijkstra/dijkstra.c204
-rw-r--r--baseline/source/dijkstra/input.c105
-rw-r--r--baseline/source/dijkstra/input.h8
-rw-r--r--baseline/source/epic/ChangeLog.txt56
-rw-r--r--baseline/source/epic/epic.c1141
-rw-r--r--baseline/source/epic/epic.h72
-rw-r--r--baseline/source/extra.h116
-rw-r--r--baseline/source/fmref/Changelog.txt5
-rw-r--r--baseline/source/fmref/fmref.c283
-rw-r--r--baseline/source/fmref/license.txt21
-rw-r--r--baseline/source/fmref/math_private.h178
-rw-r--r--baseline/source/fmref/wcclibm.c522
-rw-r--r--baseline/source/fmref/wcclibm.h54
-rw-r--r--baseline/source/g723_enc/ChangeLog.txt34
-rw-r--r--baseline/source/g723_enc/g723_enc.c887
-rw-r--r--baseline/source/g723_enc/license.txt23
-rw-r--r--baseline/source/gsm_dec/COPYRIGHT16
-rw-r--r--baseline/source/gsm_dec/ChangeLog.txt87
-rw-r--r--baseline/source/gsm_dec/add.h55
-rw-r--r--baseline/source/gsm_dec/data.h865
-rw-r--r--baseline/source/gsm_dec/gsm.h14
-rw-r--r--baseline/source/gsm_dec/gsm_dec.c764
-rw-r--r--baseline/source/gsm_dec/private.h44
-rw-r--r--baseline/source/gsm_enc/COPYRIGHT16
-rw-r--r--baseline/source/gsm_enc/ChangeLog.txt8
-rw-r--r--baseline/source/gsm_enc/data.h452
-rw-r--r--baseline/source/gsm_enc/gsm_enc.c2072
-rw-r--r--baseline/source/gsm_enc/private.h56
-rw-r--r--baseline/source/h264_dec/changeLog.txt41
-rw-r--r--baseline/source/h264_dec/copyright.txt32
-rw-r--r--baseline/source/h264_dec/h264_dec.c610
-rw-r--r--baseline/source/h264_dec/h264_dec.h29
-rw-r--r--baseline/source/h264_dec/h264_decinput.c801
-rw-r--r--baseline/source/huff_dec/ChangeLog.txt20
-rw-r--r--baseline/source/huff_dec/compress.txt1107
-rw-r--r--baseline/source/huff_dec/huff_dec.c393
-rw-r--r--baseline/source/huff_enc/ChangeLog.txt27
-rw-r--r--baseline/source/huff_enc/compress.txt1107
-rw-r--r--baseline/source/huff_enc/huff_enc.c589
-rw-r--r--baseline/source/litmusStuff.h80
-rw-r--r--baseline/source/mpeg2/ChangeLog.txt35
-rw-r--r--baseline/source/mpeg2/mpeg2.c13218
-rw-r--r--baseline/source/ndes/ChangeLog.txt20
-rw-r--r--baseline/source/ndes/ndes.c378
-rw-r--r--baseline/source/petrinet/ChangeLog.txt63
-rw-r--r--baseline/source/petrinet/petrinet.c990
-rw-r--r--baseline/source/rijndael_dec/ChangeLog.txt58
-rw-r--r--baseline/source/rijndael_dec/aes.c406
-rw-r--r--baseline/source/rijndael_dec/aes.h165
-rw-r--r--baseline/source/rijndael_dec/aestab.h379
-rw-r--r--baseline/source/rijndael_dec/input_small_enc.c2051
-rw-r--r--baseline/source/rijndael_dec/rijndael_dec.c195
-rw-r--r--baseline/source/rijndael_dec/rijndael_dec_libc.c66
-rw-r--r--baseline/source/rijndael_dec/rijndael_dec_libc.h24
-rw-r--r--baseline/source/rijndael_enc/ChangeLog.txt98
-rw-r--r--baseline/source/rijndael_enc/aes.c406
-rw-r--r--baseline/source/rijndael_enc/aes.h165
-rw-r--r--baseline/source/rijndael_enc/aestab.h261
-rw-r--r--baseline/source/rijndael_enc/input_small.c1963
-rw-r--r--baseline/source/rijndael_enc/rijndael_enc.c238
-rw-r--r--baseline/source/rijndael_enc/rijndael_enc_libc.c66
-rw-r--r--baseline/source/rijndael_enc/rijndael_enc_libc.h24
-rw-r--r--baseline/source/statemate/ChangeLog.txt60
-rw-r--r--baseline/source/statemate/statemate.c1286
-rw-r--r--baseline/source/susan/ChangeLog.txt11
-rw-r--r--baseline/source/susan/LICENSE14
-rw-r--r--baseline/source/susan/input.c7292
-rw-r--r--baseline/source/susan/math_private.h178
-rw-r--r--baseline/source/susan/susan.c2014
-rw-r--r--baseline/source/susan/wccfile.c79
-rw-r--r--baseline/source/susan/wccfile.h24
-rw-r--r--baseline/source/susan/wcclibm.c444
-rw-r--r--baseline/source/susan/wcclibm.h53
-rw-r--r--baseline/source/susan/wccmalloc.c51
-rw-r--r--baseline/source/susan/wccmalloc.h10
-rw-r--r--baseline/tacleNames.txt19
-rwxr-xr-xrun_everything.sh21
268 files changed, 131897 insertions, 4 deletions
diff --git a/all_pairs/Makefile b/all_pairs/Makefile
new file mode 100644
index 0000000..36cf55a
--- /dev/null
+++ b/all_pairs/Makefile
@@ -0,0 +1,57 @@
1CC = gcc
2CFLAGS = -pthread -O2
3LDFLAGS = -lrt
4all: bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec bin/cleanupSemaphores
5
6.PHONY: clean
7clean:
8 rm bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec bin/cleanupSemaphores
9
10bin/cleanupSemaphores: ./source/extra.h ./source/cleanupSemaphores.c
11 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
12bin/cjpeg_wrbmp: ./source/extra.h ./source/cjpeg_wrbmp/cjpeg_wrbmp.c ./source/cjpeg_wrbmp/input.c
13 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
14bin/huff_enc: ./source/extra.h ./source/huff_enc/huff_enc.c
15 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
16bin/gsm_enc: ./source/extra.h ./source/gsm_enc/gsm_enc.c
17 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
18bin/dijkstra: ./source/extra.h ./source/dijkstra/dijkstra.c ./source/dijkstra/input.c
19 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
20bin/h264_dec: ./source/extra.h ./source/h264_dec/h264_dec.c ./source/h264_dec/h264_decinput.c
21 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
22bin/susan: ./source/extra.h ./source/susan/input.c ./source/susan/susan.c ./source/susan/wccfile.c ./source/susan/wcclibm.c ./source/susan/wccmalloc.c
23 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
24bin/adpcm_enc: ./source/extra.h ./source/adpcm_enc/adpcm_enc.c
25 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
26bin/rijndael_dec: ./source/extra.h ./source/rijndael_dec/aes.c ./source/rijndael_dec/input_small_enc.c ./source/rijndael_dec/rijndael_dec.c ./source/rijndael_dec/rijndael_dec_libc.c
27 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
28bin/huff_dec: ./source/extra.h ./source/huff_dec/huff_dec.c
29 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
30bin/rijndael_enc: ./source/extra.h ./source/rijndael_enc/aes.c ./source/rijndael_enc/input_small.c ./source/rijndael_enc/rijndael_enc.c ./source/rijndael_enc/rijndael_enc_libc.c
31 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
32bin/gsm_dec: ./source/extra.h ./source/gsm_dec/gsm_dec.c
33 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
34bin/anagram: ./source/extra.h ./source/anagram/anagram.c ./source/anagram/anagram_input.c ./source/anagram/anagram_stdlib.c
35 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
36bin/epic: ./source/extra.h ./source/epic/epic.c
37 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
38bin/ammunition: ./source/extra.h ./source/ammunition/ammunition.c ./source/ammunition/ammunition_libc.c ./source/ammunition/arithm.c ./source/ammunition/bits.c
39 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
40bin/g723_enc: ./source/extra.h ./source/g723_enc/g723_enc.c
41 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
42bin/ndes: ./source/extra.h ./source/ndes/ndes.c
43 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
44bin/petrinet: ./source/extra.h ./source/petrinet/petrinet.c
45 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
46bin/statemate: ./source/extra.h ./source/statemate/statemate.c
47 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
48bin/cjpeg_transupp: ./source/extra.h ./source/cjpeg_transupp/cjpeg_transupp.c
49 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
50bin/mpeg2: ./source/extra.h ./source/mpeg2/mpeg2.c
51 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
52bin/fmref: ./source/extra.h ./source/fmref/fmref.c ./source/fmref/wcclibm.c
53 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
54bin/audiobeam: ./source/extra.h ./source/audiobeam/audiobeam.c ./source/audiobeam/audiobeaminput.c ./source/audiobeam/audiobeamlibmalloc.c ./source/audiobeam/audiobeamlibm.c
55 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
56bin/adpcm_dec: ./source/extra.h ./source/adpcm_dec/adpcm_dec.c
57 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
diff --git a/all_pairs/run_all_pairs.sh b/all_pairs/run_all_pairs.sh
new file mode 100755
index 0000000..d48f211
--- /dev/null
+++ b/all_pairs/run_all_pairs.sh
@@ -0,0 +1,77 @@
1#!/bin/bash
2
3firstCore=$1
4secondCore=$2
5maxJobs=$3
6runID=$4
7tacleNames=tacleNames.txt
8
9if [ $# -lt 4 ]; then
10 echo "Usage $0 <first core ID> <second core ID> <number of iterations> <run ID> [TACLe names file]"
11 exit
12fi
13
14if [ $# -gt 4 ]; then
15 echo "Using alternate list of TACLe benchmarks from $5"
16 tacleNames=$5
17fi
18
19echo "Making sure that binaries are up to date..."
20while read i; do
21 make bin/$i
22done < $tacleNames
23echo "Done. Disabling real-time throttling..."
24
25# Turn off rt throttling
26echo -1 > /proc/sys/kernel/sched_rt_runtime_us
27echo "Done. Redirecting all interrupts to core 0..."
28
29# Redirect all interrupts to core 0
30i=0
31for IRQ in /proc/irq/*
32do
33 # Skip default_smp_affinity
34 if [ -d $IRQ ]; then
35 irqList[$i]=$(cat $IRQ/smp_affinity_list)
36 echo 0 > $IRQ/smp_affinity_list
37 fi
38 i=$(( $i + 1 ))
39done
40echo "Done. Beginning benchmarks..."
41
42# Read the names of each benchmark
43j=0
44while read i; do
45 tacleProg[$j]=$i
46 j=$(( $j + 1 ))
47done < $tacleNames
48
49
50num_tests=$(wc -l < $tacleNames)
51for (( i = 0; i < $num_tests ; i++ ))
52do
53 for (( j = $i; j < $num_tests ; j++ )) #loop through programs
54 do
55 chrt -r 97 taskset -c $firstCore ./bin/${tacleProg[$i]} ${tacleProg[$i]} $maxJobs $firstCore $secondCore ${tacleProg[$j]} $runID"-A" 1 & \
56 chrt -r 97 taskset -c $secondCore ./bin/${tacleProg[$j]} ${tacleProg[$j]} $maxJobs $secondCore $firstCore ${tacleProg[$i]} $runID"-B" 2 &
57 wait
58 echo ${tacleProg[$i]} ${tacleProg[$j]}
59 done
60 echo COMPLETE: ${tacleProg[$i]}
61done
62
63# Remove semaphores from system
64# Leaving them won't hurt these tests, but would be messy and is bad practice
65# TODO: Do this directly in the benchmarks. They should clean up after themselves
66./bin/cleanupSemaphores
67
68# Put smp_affinty back the way it was
69i=0
70for IRQ in /proc/irq/*
71do
72 if [ -d $IRQ ]; then
73 echo ${irqList[$i]} > $IRQ/smp_affinity_list
74 fi
75 i=$(( $i + 1 ))
76done
77
diff --git a/all_pairs/source/adpcm_dec/ChangeLog.txt b/all_pairs/source/adpcm_dec/ChangeLog.txt
new file mode 100644
index 0000000..b9c4f96
--- /dev/null
+++ b/all_pairs/source/adpcm_dec/ChangeLog.txt
@@ -0,0 +1,32 @@
1File: minver.c
2Original provenience: SNU-RT Benchmark Suite for Worst Case Timing Analysis
3
42016-02-26:
5 - Added TACLeBench header to line 1
6 - Rename global variable a to minver_a
7 - Rename global variable b to minver_b
8 - Rename global variable c to minver_c
9 - Rename global variable aa to minver_aa
10 - Rename global variable a_i to minver_a_i
11 - Rename global variable e to minver_e
12 - Rename global variable det to minver_det
13 - Renamed function minver to minver_minver
14 - Renamed function mmul to minver_mmul
15 - Renamed function fabs to minver_fabs
16 - Renamed function main to minver_main
17 - Created new function main, calling minver_init, minver_main and
18 returning minver_return
19 - Reordered functions in source code: initialization- and
20 return-value-related functions first, followed by algorithm core
21 functions, followed by main functions
22 - Applied code formatting with astyle as in the example
23
242016-03-09:
25 - Removed static keyword for global variables
26 - Renamed global variables, prepended adpcm_dec
27
28 2016-05-23:
29 - Check sum added and checked against the expected value
30
31 2016-05-25:
32 - Corrected expected value \ No newline at end of file
diff --git a/all_pairs/source/adpcm_dec/adpcm_dec.c b/all_pairs/source/adpcm_dec/adpcm_dec.c
new file mode 100644
index 0000000..6811e69
--- /dev/null
+++ b/all_pairs/source/adpcm_dec/adpcm_dec.c
@@ -0,0 +1,719 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: adpcm_dec
7
8 Author: Sung-Soo Lim
9
10 Function:
11 CCITT G.722 ADPCM (Adaptive Differential Pulse Code Modulation)
12 algorithm.
13 16khz sample rate data is stored in the array test_data[SIZE].
14 Results are stored in the array compressed[SIZE] and result[SIZE].
15 Execution time is determined by the constant SIZE (default value
16 is 2000).
17
18 Source: SNU-RT Benchmark Suite
19
20 Changes: adpcm benchmark was split into decode and encode benchmark
21
22 License: may be used, modified, and re-distributed freely, but
23 the SNU-RT Benchmark Suite must be acknowledged
24
25*/
26
27/*
28 This program is derived from the SNU-RT Benchmark Suite for Worst
29 Case Timing Analysis by Sung-Soo Lim
30
31 Original source: C Algorithms for Real-Time DSP by P. M. Embree
32*/
33
34/*
35 Forward declaration of functions
36*/
37
38#include "../extra.h"
39
40void adpcm_dec_decode( int );
41int adpcm_dec_filtez( int *bpl, int *dlt );
42void adpcm_dec_upzero( int dlt, int *dlti, int *bli );
43int adpcm_dec_filtep( int rlt1, int al1, int rlt2, int al2 );
44
45int adpcm_dec_logscl( int il, int nbl );
46int adpcm_dec_scalel( int nbl, int shift_constant );
47int adpcm_dec_uppol2( int al1, int al2, int plt, int plt1, int plt2 );
48int adpcm_dec_uppol1( int al1, int apl2, int plt, int plt1 );
49
50int adpcm_dec_logsch( int ih, int nbh );
51void adpcm_dec_reset();
52int adpcm_dec_fabs( int n );
53int adpcm_dec_cos( int n );
54int adpcm_dec_sin( int n );
55
56void adpcm_dec_init();
57int adpcm_dec_return();
58void adpcm_dec_main();
59//int main( void );
60
61
62/*
63 Declaration of macros
64*/
65/* common sampling rate for sound cards on IBM/PC */
66#define SAMPLE_RATE 11025
67#define PI 3141
68#define SIZE 3
69#define IN_END 4
70
71/*
72 Declaration of global variables
73*/
74
75int adpcm_dec_test_data[SIZE * 2], adpcm_dec_result[SIZE * 2];
76
77/* Input data for the decoder usually generated by the encoder. */
78int adpcm_dec_compressed[SIZE] = { 0, 253, 32 };
79
80/* G722 C code */
81
82/* QMF filter coefficients:
83 scaled by a factor of 4 compared to G722 CCITT recommendation */
84int adpcm_dec_h[24] = {
85 12, -44, -44, 212, 48, -624, 128, 1448,
86 -840, -3220, 3804, 15504, 15504, 3804, -3220, -840,
87 1448, 128, -624, 48, 212, -44, -44, 12
88};
89
90//int xl,xh;
91
92/* variables for receive quadrature mirror filter here */
93int adpcm_dec_accumc[11], adpcm_dec_accumd[11];
94
95/* outputs of decode() */
96int adpcm_dec_xout1, adpcm_dec_xout2;
97
98int adpcm_dec_xs, adpcm_dec_xd;
99
100/* variables for encoder (hi and lo) here */
101
102int adpcm_dec_il, adpcm_dec_szl, adpcm_dec_spl, adpcm_dec_sl, adpcm_dec_el;
103
104int adpcm_dec_qq4_code4_table[16] = {
105 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200,
106 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0
107};
108
109
110int adpcm_dec_qq6_code6_table[64] = {
111 -136, -136, -136, -136, -24808, -21904, -19008, -16704,
112 -14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856,
113 -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576,
114 -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728,
115 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192,
116 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456,
117 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032,
118 1688, 1360, 1040, 728, 432, 136, -432, -136
119};
120
121
122int adpcm_dec_wl_code_table[16] = {
123 -60, 3042, 1198, 538, 334, 172, 58, -30,
124 3042, 1198, 538, 334, 172, 58, -30, -60
125};
126
127
128int adpcm_dec_ilb_table[32] = {
129 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383,
130 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834,
131 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371,
132 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008
133};
134
135int adpcm_dec_nbl; /* delay line */
136int adpcm_dec_al1, adpcm_dec_al2;
137int adpcm_dec_plt, adpcm_dec_plt1, adpcm_dec_plt2;
138int adpcm_dec_rs;
139int adpcm_dec_dlt;
140int adpcm_dec_rlt, adpcm_dec_rlt1, adpcm_dec_rlt2;
141
142
143int adpcm_dec_detl;
144
145
146int adpcm_dec_deth;
147int adpcm_dec_sh; /* this comes from adaptive predictor */
148int adpcm_dec_eh;
149
150int adpcm_dec_qq2_code2_table[4] = {
151 -7408, -1616, 7408, 1616
152};
153
154int adpcm_dec_wh_code_table[4] = {
155 798, -214, 798, -214
156};
157
158
159int adpcm_dec_dh, adpcm_dec_ih;
160int adpcm_dec_nbh, adpcm_dec_szh;
161int adpcm_dec_sph, adpcm_dec_ph, adpcm_dec_yh, adpcm_dec_rh;
162
163int adpcm_dec_delay_dhx[6];
164
165int adpcm_dec_delay_bph[6];
166
167int adpcm_dec_ah1, adpcm_dec_ah2;
168int adpcm_dec_ph1, adpcm_dec_ph2;
169int adpcm_dec_rh1, adpcm_dec_rh2;
170
171/* variables for decoder here */
172int adpcm_dec_ilr, adpcm_dec_yl, adpcm_dec_rl;
173int adpcm_dec_dec_deth, adpcm_dec_dec_detl, adpcm_dec_dec_dlt;
174
175int adpcm_dec_dec_del_bpl[6];
176
177int adpcm_dec_dec_del_dltx[6];
178
179int adpcm_dec_dec_plt, adpcm_dec_dec_plt1, adpcm_dec_dec_plt2;
180int adpcm_dec_dec_szl, adpcm_dec_dec_spl, adpcm_dec_dec_sl;
181int adpcm_dec_dec_rlt1, adpcm_dec_dec_rlt2, adpcm_dec_dec_rlt;
182int adpcm_dec_dec_al1, adpcm_dec_dec_al2;
183int adpcm_dec_dl;
184int adpcm_dec_dec_nbl, adpcm_dec_dec_yh, adpcm_dec_dec_dh, adpcm_dec_dec_nbh;
185
186/* variables used in filtez */
187int adpcm_dec_dec_del_bph[6];
188
189int adpcm_dec_dec_del_dhx[6];
190
191int adpcm_dec_dec_szh;
192/* variables used in filtep */
193int adpcm_dec_dec_rh1, adpcm_dec_dec_rh2;
194int adpcm_dec_dec_ah1, adpcm_dec_dec_ah2;
195int adpcm_dec_dec_ph, adpcm_dec_dec_sph;
196
197int adpcm_dec_dec_sh, adpcm_dec_dec_rh;
198
199int adpcm_dec_dec_ph1, adpcm_dec_dec_ph2;
200
201
202/*
203 Arithmetic math functions
204*/
205
206
207/* MAX: 1 */
208int adpcm_dec_fabs( int n )
209{
210 int f;
211
212
213 if ( n >= 0 )
214 f = n;
215 else
216 f = -n;
217
218 return f;
219}
220
221
222int adpcm_dec_sin( int rad )
223{
224 int diff;
225 int app = 0;
226 int inc = 1;
227
228
229 /* MAX dependent on rad's value, say 50 */
230 _Pragma( "loopbound min 0 max 0" )
231 while ( rad > 2 * PI )
232 rad -= 2 * PI;
233
234 _Pragma( "loopbound min 0 max 1999" )
235 while ( rad < -2 * PI )
236 rad += 2 * PI;
237
238 diff = rad;
239 app = diff;
240 diff = ( diff * ( -( rad * rad ) ) ) / ( ( 2 * inc ) * ( 2 * inc + 1 ) );
241 app = app + diff;
242 inc++;
243
244 /* REALLY: while(my_fabs(diff) >= 0.00001) { */
245 /* MAX: 1000 */
246 _Pragma( "loopbound min 849 max 2424" )
247 while ( adpcm_dec_fabs( diff ) >= 1 ) {
248 diff = ( diff * ( -( rad * rad ) ) ) / ( ( 2 * inc ) * ( 2 * inc + 1 ) );
249 app = app + diff;
250 inc++;
251 }
252
253 return app;
254}
255
256
257int adpcm_dec_cos( int rad )
258{
259 return ( adpcm_dec_sin( PI / 2 - rad ) );
260}
261
262
263/*
264 Algorithm core functions
265*/
266
267/* decode function, result in xout1 and xout2 */
268void adpcm_dec_decode( int input )
269{
270 int i;
271 long int xa1, xa2; /* qmf accumulators */
272 int *h_ptr, *ac_ptr, *ac_ptr1, *ad_ptr, *ad_ptr1;
273
274
275 /* split transmitted word from input into ilr and ih */
276 adpcm_dec_ilr = input & 0x3f;
277 adpcm_dec_ih = input >> 6;
278
279 /* LOWER SUB_BAND DECODER */
280
281 /* filtez: compute predictor output for zero section */
282 adpcm_dec_dec_szl = adpcm_dec_filtez( adpcm_dec_dec_del_bpl,
283 adpcm_dec_dec_del_dltx );
284
285 /* filtep: compute predictor output signal for pole section */
286 adpcm_dec_dec_spl = adpcm_dec_filtep( adpcm_dec_dec_rlt1, adpcm_dec_dec_al1,
287 adpcm_dec_dec_rlt2, adpcm_dec_dec_al2 );
288
289 adpcm_dec_dec_sl = adpcm_dec_dec_spl + adpcm_dec_dec_szl;
290
291 /* invqxl: compute quantized difference signal for adaptive predic */
292 adpcm_dec_dec_dlt = ( ( long )adpcm_dec_dec_detl *
293 adpcm_dec_qq4_code4_table[adpcm_dec_ilr
294 >> 2] ) >> 15;
295
296 /* invqxl: compute quantized difference signal for decoder output */
297 adpcm_dec_dl = ( ( long )adpcm_dec_dec_detl *
298 adpcm_dec_qq6_code6_table[adpcm_dec_il] ) >>
299 15;
300
301 adpcm_dec_rl = adpcm_dec_dl + adpcm_dec_dec_sl;
302
303 /* logscl: quantizer scale factor adaptation in the lower sub-band */
304 adpcm_dec_dec_nbl = adpcm_dec_logscl( adpcm_dec_ilr, adpcm_dec_dec_nbl );
305
306 /* scalel: computes quantizer scale factor in the lower sub band */
307 adpcm_dec_dec_detl = adpcm_dec_scalel( adpcm_dec_dec_nbl, 8 );
308
309 /* parrec - add pole predictor output to quantized diff. signal */
310 /* for partially reconstructed signal */
311 adpcm_dec_dec_plt = adpcm_dec_dec_dlt + adpcm_dec_dec_szl;
312
313 /* upzero: update zero section predictor coefficients */
314 adpcm_dec_upzero( adpcm_dec_dec_dlt, adpcm_dec_dec_del_dltx,
315 adpcm_dec_dec_del_bpl );
316
317 /* uppol2: update second predictor coefficient apl2 and delay it as al2 */
318 adpcm_dec_dec_al2 = adpcm_dec_uppol2( adpcm_dec_dec_al1, adpcm_dec_dec_al2,
319 adpcm_dec_dec_plt, adpcm_dec_dec_plt1,
320 adpcm_dec_dec_plt2 );
321
322 /* uppol1: update first predictor coef. (pole setion) */
323 adpcm_dec_dec_al1 = adpcm_dec_uppol1( adpcm_dec_dec_al1, adpcm_dec_dec_al2,
324 adpcm_dec_dec_plt, adpcm_dec_dec_plt1 );
325
326 /* recons : compute recontructed signal for adaptive predictor */
327 adpcm_dec_dec_rlt = adpcm_dec_dec_sl + adpcm_dec_dec_dlt;
328
329 /* done with lower sub band decoder, implement delays for next time */
330 adpcm_dec_dec_rlt2 = adpcm_dec_dec_rlt1;
331 adpcm_dec_dec_rlt1 = adpcm_dec_dec_rlt;
332 adpcm_dec_dec_plt2 = adpcm_dec_dec_plt1;
333 adpcm_dec_dec_plt1 = adpcm_dec_dec_plt;
334
335 /* HIGH SUB-BAND DECODER */
336
337 /* filtez: compute predictor output for zero section */
338 adpcm_dec_dec_szh = adpcm_dec_filtez( adpcm_dec_dec_del_bph,
339 adpcm_dec_dec_del_dhx );
340
341 /* filtep: compute predictor output signal for pole section */
342 adpcm_dec_dec_sph = adpcm_dec_filtep( adpcm_dec_dec_rh1, adpcm_dec_dec_ah1,
343 adpcm_dec_dec_rh2, adpcm_dec_dec_ah2 );
344
345 /* predic:compute the predictor output value in the higher sub_band decoder */
346 adpcm_dec_dec_sh = adpcm_dec_dec_sph + adpcm_dec_dec_szh;
347
348 /* invqah: in-place compute the quantized difference signal */
349 adpcm_dec_dec_dh = ( ( long )adpcm_dec_dec_deth *
350 adpcm_dec_qq2_code2_table[adpcm_dec_ih] ) >> 15L ;
351
352 /* logsch: update logarithmic quantizer scale factor in hi sub band */
353 adpcm_dec_dec_nbh = adpcm_dec_logsch( adpcm_dec_ih, adpcm_dec_dec_nbh );
354
355 /* scalel: compute the quantizer scale factor in the higher sub band */
356 adpcm_dec_dec_deth = adpcm_dec_scalel( adpcm_dec_dec_nbh, 10 );
357
358 /* parrec: compute partially recontructed signal */
359 adpcm_dec_dec_ph = adpcm_dec_dec_dh + adpcm_dec_dec_szh;
360
361 /* upzero: update zero section predictor coefficients */
362 adpcm_dec_upzero( adpcm_dec_dec_dh, adpcm_dec_dec_del_dhx,
363 adpcm_dec_dec_del_bph );
364
365 /* uppol2: update second predictor coefficient aph2 and delay it as ah2 */
366 adpcm_dec_dec_ah2 = adpcm_dec_uppol2( adpcm_dec_dec_ah1, adpcm_dec_dec_ah2,
367 adpcm_dec_dec_ph, adpcm_dec_dec_ph1, adpcm_dec_dec_ph2 );
368
369 /* uppol1: update first predictor coef. (pole setion) */
370 adpcm_dec_dec_ah1 = adpcm_dec_uppol1( adpcm_dec_dec_ah1, adpcm_dec_dec_ah2,
371 adpcm_dec_dec_ph, adpcm_dec_dec_ph1 );
372
373 /* recons : compute recontructed signal for adaptive predictor */
374 adpcm_dec_rh = adpcm_dec_dec_sh + adpcm_dec_dec_dh;
375
376 /* done with high band decode, implementing delays for next time here */
377 adpcm_dec_dec_rh2 = adpcm_dec_dec_rh1;
378 adpcm_dec_dec_rh1 = adpcm_dec_rh;
379 adpcm_dec_dec_ph2 = adpcm_dec_dec_ph1;
380 adpcm_dec_dec_ph1 = adpcm_dec_dec_ph;
381
382 /* end of higher sub_band decoder */
383
384 /* end with receive quadrature mirror filters */
385 adpcm_dec_xd = adpcm_dec_rl - adpcm_dec_rh;
386 adpcm_dec_xs = adpcm_dec_rl + adpcm_dec_rh;
387
388 /* receive quadrature mirror filters implemented here */
389 h_ptr = adpcm_dec_h;
390 ac_ptr = adpcm_dec_accumc;
391 ad_ptr = adpcm_dec_accumd;
392 xa1 = ( long ) adpcm_dec_xd * ( *h_ptr++ );
393 xa2 = ( long ) adpcm_dec_xs * ( *h_ptr++ );
394
395 /* main multiply accumulate loop for samples and coefficients */
396 _Pragma( "loopbound min 10 max 10" )
397 for ( i = 0; i < 10; i++ ) {
398 xa1 += ( long )( *ac_ptr++ ) * ( *h_ptr++ );
399 xa2 += ( long )( *ad_ptr++ ) * ( *h_ptr++ );
400 }
401
402 /* final mult/accumulate */
403 xa1 += ( long )( *ac_ptr ) * ( *h_ptr++ );
404 xa2 += ( long )( *ad_ptr ) * ( *h_ptr++ );
405
406 /* scale by 2^14 */
407 adpcm_dec_xout1 = xa1 >> 14;
408 adpcm_dec_xout2 = xa2 >> 14;
409
410 /* update delay lines */
411 ac_ptr1 = ac_ptr - 1;
412 ad_ptr1 = ad_ptr - 1;
413
414 _Pragma( "loopbound min 10 max 10" )
415 for ( i = 0; i < 10; i++ ) {
416 *ac_ptr-- = *ac_ptr1--;
417 *ad_ptr-- = *ad_ptr1--;
418 }
419
420 *ac_ptr = adpcm_dec_xd;
421 *ad_ptr = adpcm_dec_xs;
422
423 return;
424}
425
426
427/* filtez - compute predictor output signal (zero section) */
428/* input: bpl1-6 and dlt1-6, output: szl */
429int adpcm_dec_filtez( int *bpl, int *dlt )
430{
431 int i;
432 long int zl;
433
434
435 zl = ( long )( *bpl++ ) * ( *dlt++ );
436
437 /* MAX: 5 */
438 _Pragma( "loopbound min 5 max 5" )
439 for ( i = 1; i < 6; i++ )
440 zl += ( long )( *bpl++ ) * ( *dlt++ );
441
442 return ( ( int )( zl >> 14 ) ); /* x2 here */
443}
444
445
446/* filtep - compute predictor output signal (pole section) */
447/* input rlt1-2 and al1-2, output spl */
448int adpcm_dec_filtep( int rlt1, int al1, int rlt2, int al2 )
449{
450 long int pl, pl2;
451
452
453 pl = 2 * rlt1;
454 pl = ( long ) al1 * pl;
455 pl2 = 2 * rlt2;
456 pl += ( long ) al2 * pl2;
457
458 return ( ( int )( pl >> 15 ) );
459}
460
461
462/* logscl - update log quantizer scale factor in lower sub-band */
463/* note that nbl is passed and returned */
464int adpcm_dec_logscl( int il, int nbl )
465{
466 long int wd;
467
468
469 wd = ( ( long )nbl * 127L ) >> 7L; /* leak factor 127/128 */
470 nbl = ( int )wd + adpcm_dec_wl_code_table[il >> 2];
471
472 if ( nbl < 0 )
473 nbl = 0;
474 if ( nbl > 18432 )
475 nbl = 18432;
476
477 return ( nbl );
478}
479
480
481/* scalel: compute quantizer scale factor in lower or upper sub-band*/
482int adpcm_dec_scalel( int nbl, int shift_constant )
483{
484 int wd1, wd2, wd3;
485
486
487 wd1 = ( nbl >> 6 ) & 31;
488 wd2 = nbl >> 11;
489 wd3 = adpcm_dec_ilb_table[wd1] >> ( shift_constant + 1 - wd2 );
490
491 return ( wd3 << 3 );
492}
493
494
495/* upzero - inputs: dlt, dlti[0-5], bli[0-5], outputs: updated bli[0-5] */
496/* also implements delay of bli and update of dlti from dlt */
497void adpcm_dec_upzero( int dlt, int *dlti, int *bli )
498{
499 int i, wd2, wd3;
500
501
502 /*if dlt is zero, then no sum into bli */
503 if ( dlt == 0 ) {
504 _Pragma( "loopbound min 6 max 6" )
505 for ( i = 0; i < 6; i++ ) {
506 bli[i] = ( int )( ( 255L * bli[i] ) >> 8L ); /* leak factor of 255/256 */
507 }
508
509 } else {
510 _Pragma( "loopbound min 6 max 6" )
511 for ( i = 0; i < 6; i++ ) {
512 if ( ( long )dlt * dlti[i] >= 0 )
513 wd2 = 128;
514 else
515 wd2 = -128;
516
517 wd3 = ( int )( ( 255L * bli[i] ) >> 8L ); /* leak factor of 255/256 */
518 bli[i] = wd2 + wd3;
519 }
520
521 }
522
523 /* implement delay line for dlt */
524 dlti[5] = dlti[4];
525 dlti[4] = dlti[3];
526 dlti[3] = dlti[2];
527 dlti[1] = dlti[0];
528 dlti[0] = dlt;
529
530 return;
531}
532
533
534/* uppol2 - update second predictor coefficient (pole section) */
535/* inputs: al1, al2, plt, plt1, plt2. outputs: apl2 */
536int adpcm_dec_uppol2( int al1, int al2, int plt, int plt1, int plt2 )
537{
538 long int wd2, wd4;
539 int apl2;
540
541
542 wd2 = 4L * ( long )al1;
543 if ( ( long )plt * plt1 >= 0L )
544 wd2 = -wd2; /* check same sign */
545 wd2 = wd2 >> 7; /* gain of 1/128 */
546
547 if ( ( long )plt * plt2 >= 0L ) {
548 wd4 = wd2 + 128; /* same sign case */
549 } else
550 wd4 = wd2 - 128;
551 apl2 = wd4 + ( 127L * ( long )al2 >> 7L ); /* leak factor of 127/128 */
552
553 /* apl2 is limited to +-.75 */
554 if ( apl2 > 12288 )
555 apl2 = 12288;
556 if ( apl2 < -12288 )
557 apl2 = -12288;
558
559 return ( apl2 );
560}
561
562
563/* uppol1 - update first predictor coefficient (pole section) */
564/* inputs: al1, apl2, plt, plt1. outputs: apl1 */
565int adpcm_dec_uppol1( int al1, int apl2, int plt, int plt1 )
566{
567 long int wd2;
568 int wd3, apl1;
569
570
571 wd2 = ( ( long )al1 * 255L ) >> 8L; /* leak factor of 255/256 */
572 if ( ( long )plt * plt1 >= 0L ) {
573 apl1 = ( int )wd2 + 192; /* same sign case */
574 } else
575 apl1 = ( int )wd2 - 192;
576
577 /* note: wd3= .9375-.75 is always positive */
578 wd3 = 15360 - apl2; /* limit value */
579 if ( apl1 > wd3 )
580 apl1 = wd3;
581 if ( apl1 < -wd3 )
582 apl1 = -wd3;
583
584 return ( apl1 );
585}
586
587
588/* logsch - update log quantizer scale factor in higher sub-band */
589/* note that nbh is passed and returned */
590int adpcm_dec_logsch( int ih, int nbh )
591{
592 int wd;
593
594
595 wd = ( ( long )nbh * 127L ) >> 7L; /* leak factor 127/128 */
596 nbh = wd + adpcm_dec_wh_code_table[ih];
597
598 if ( nbh < 0 )
599 nbh = 0;
600 if ( nbh > 22528 )
601 nbh = 22528;
602
603 return ( nbh );
604}
605
606/*
607 Initialization- and return-value-related functions
608*/
609
610/* clear all storage locations */
611
612void adpcm_dec_reset()
613{
614 int i;
615
616
617 adpcm_dec_detl = adpcm_dec_dec_detl = 32; /* reset to min scale factor */
618 adpcm_dec_deth = adpcm_dec_dec_deth = 8;
619 adpcm_dec_nbl = adpcm_dec_al1 = adpcm_dec_al2 = adpcm_dec_plt1 = adpcm_dec_plt2
620 = adpcm_dec_rlt1 = adpcm_dec_rlt2 = 0;
621 adpcm_dec_nbh = adpcm_dec_ah1 = adpcm_dec_ah2 = adpcm_dec_ph1 = adpcm_dec_ph2 =
622 adpcm_dec_rh1 = adpcm_dec_rh2 = 0;
623 adpcm_dec_dec_nbl = adpcm_dec_dec_al1 = adpcm_dec_dec_al2 = adpcm_dec_dec_plt1 =
624 adpcm_dec_dec_plt2 = adpcm_dec_dec_rlt1 = adpcm_dec_dec_rlt2 = 0;
625 adpcm_dec_dec_nbh = adpcm_dec_dec_ah1 = adpcm_dec_dec_ah2 = adpcm_dec_dec_ph1 =
626 adpcm_dec_dec_ph2 = adpcm_dec_dec_rh1 = adpcm_dec_dec_rh2 = 0;
627
628 _Pragma( "loopbound min 6 max 6" )
629 for ( i = 0; i < 6; i++ ) {
630 ////delay_dltx[i] = 0;
631 adpcm_dec_delay_dhx[i] = 0;
632 adpcm_dec_dec_del_dltx[i] = 0;
633 adpcm_dec_dec_del_dhx[i] = 0;
634 }
635
636 _Pragma( "loopbound min 6 max 6" )
637 for ( i = 0; i < 6; i++ ) {
638 //delay_bpl[i] = 0;
639 adpcm_dec_delay_bph[i] = 0;
640 adpcm_dec_dec_del_bpl[i] = 0;
641 adpcm_dec_dec_del_bph[i] = 0;
642 }
643
644 _Pragma( "loopbound min 11 max 11" )
645 for ( i = 0; i < 11; i++ ) {
646 adpcm_dec_accumc[i] = 0;
647 adpcm_dec_accumd[i] = 0;
648 }
649
650 return;
651}
652
653void adpcm_dec_init()
654{
655 int i, j, f;
656 volatile int x = 0;
657 /* read in amplitude and frequency for test data */
658 j = 10;
659 f = 2000;
660
661 /* reset, initialize required memory */
662 adpcm_dec_reset();
663
664 /* 16 KHz sample rate */
665 /* XXmain_0, MAX: 2 */
666 /* Since the number of times we loop in adpcm_dec_sin depends on the
667 argument we add the fact: xxmain_0:[]: */
668 _Pragma( "loopbound min 3 max 3" )
669 for ( i = 0 ; i < SIZE ; i++ ) {
670 adpcm_dec_test_data[i] = ( int ) j * adpcm_dec_cos( f * PI * i );
671
672 /* avoid constant-propagation optimizations */
673 adpcm_dec_test_data[i] += x;
674 }
675}
676
677int adpcm_dec_return()
678{
679 int i;
680 int check_sum = 0;
681
682 for (i = 0; i < IN_END; i += 2)
683 {
684 check_sum += ( adpcm_dec_result[i] + adpcm_dec_result[i + 1] );
685 }
686
687 return check_sum != -2;
688}
689
690/*
691 Main functions
692*/
693
694void _Pragma( "entrypoint" ) adpcm_dec_main( void )
695{
696 int i;
697
698 _Pragma( "loopbound min 2 max 2" )
699 for ( i = 0 ; i < IN_END ; i += 2 ) {
700 adpcm_dec_decode( adpcm_dec_compressed[i / 2] );
701 adpcm_dec_result[i] = adpcm_dec_xout1;
702 adpcm_dec_result[i + 1] = adpcm_dec_xout2;
703 }
704
705}
706
707
708int main(int argc, char **argv)
709{
710 SET_UP
711 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
712 START_LOOP
713 adpcm_dec_init();
714 adpcm_dec_main();
715 STOP_LOOP
716}
717WRITE_TO_FILE
718 return ( adpcm_dec_return() );
719}
diff --git a/all_pairs/source/adpcm_dec/timedTest.txt b/all_pairs/source/adpcm_dec/timedTest.txt
new file mode 100644
index 0000000..82c0948
--- /dev/null
+++ b/all_pairs/source/adpcm_dec/timedTest.txt
@@ -0,0 +1,100 @@
1adpcm_dec none 7 none 100 123133 timedTest 0 (null)
2adpcm_dec none 7 none 100 123203 timedTest 1 (null)
3adpcm_dec none 7 none 100 123482 timedTest 2 (null)
4adpcm_dec none 7 none 100 138289 timedTest 3 (null)
5adpcm_dec none 7 none 100 123272 timedTest 4 (null)
6adpcm_dec none 7 none 100 122924 timedTest 5 (null)
7adpcm_dec none 7 none 100 123064 timedTest 6 (null)
8adpcm_dec none 7 none 100 123343 timedTest 7 (null)
9adpcm_dec none 7 none 100 123553 timedTest 8 (null)
10adpcm_dec none 7 none 100 123483 timedTest 9 (null)
11adpcm_dec none 7 none 100 123692 timedTest 10 (null)
12adpcm_dec none 7 none 100 123762 timedTest 11 (null)
13adpcm_dec none 7 none 100 123622 timedTest 12 (null)
14adpcm_dec none 7 none 100 138569 timedTest 13 (null)
15adpcm_dec none 7 none 100 123831 timedTest 14 (null)
16adpcm_dec none 7 none 100 123343 timedTest 15 (null)
17adpcm_dec none 7 none 100 123552 timedTest 16 (null)
18adpcm_dec none 7 none 100 123622 timedTest 17 (null)
19adpcm_dec none 7 none 100 123761 timedTest 18 (null)
20adpcm_dec none 7 none 100 123343 timedTest 19 (null)
21adpcm_dec none 7 none 100 123692 timedTest 20 (null)
22adpcm_dec none 7 none 100 123972 timedTest 21 (null)
23adpcm_dec none 7 none 100 123762 timedTest 22 (null)
24adpcm_dec none 7 none 100 123622 timedTest 23 (null)
25adpcm_dec none 7 none 100 123482 timedTest 24 (null)
26adpcm_dec none 7 none 100 123552 timedTest 25 (null)
27adpcm_dec none 7 none 100 123832 timedTest 26 (null)
28adpcm_dec none 7 none 100 123971 timedTest 27 (null)
29adpcm_dec none 7 none 100 123692 timedTest 28 (null)
30adpcm_dec none 7 none 100 123832 timedTest 29 (null)
31adpcm_dec none 7 none 100 123762 timedTest 30 (null)
32adpcm_dec none 7 none 100 123902 timedTest 31 (null)
33adpcm_dec none 7 none 100 123692 timedTest 32 (null)
34adpcm_dec none 7 none 100 123762 timedTest 33 (null)
35adpcm_dec none 7 none 100 123762 timedTest 34 (null)
36adpcm_dec none 7 none 100 123832 timedTest 35 (null)
37adpcm_dec none 7 none 100 124041 timedTest 36 (null)
38adpcm_dec none 7 none 100 123762 timedTest 37 (null)
39adpcm_dec none 7 none 100 123553 timedTest 38 (null)
40adpcm_dec none 7 none 100 123692 timedTest 39 (null)
41adpcm_dec none 7 none 100 138709 timedTest 40 (null)
42adpcm_dec none 7 none 100 123762 timedTest 41 (null)
43adpcm_dec none 7 none 100 123971 timedTest 42 (null)
44adpcm_dec none 7 none 100 123832 timedTest 43 (null)
45adpcm_dec none 7 none 100 123622 timedTest 44 (null)
46adpcm_dec none 7 none 100 123692 timedTest 45 (null)
47adpcm_dec none 7 none 100 123692 timedTest 46 (null)
48adpcm_dec none 7 none 100 123622 timedTest 47 (null)
49adpcm_dec none 7 none 100 123971 timedTest 48 (null)
50adpcm_dec none 7 none 100 123762 timedTest 49 (null)
51adpcm_dec none 7 none 100 124042 timedTest 50 (null)
52adpcm_dec none 7 none 100 123971 timedTest 51 (null)
53adpcm_dec none 7 none 100 123482 timedTest 52 (null)
54adpcm_dec none 7 none 100 123832 timedTest 53 (null)
55adpcm_dec none 7 none 100 123692 timedTest 54 (null)
56adpcm_dec none 7 none 100 124041 timedTest 55 (null)
57adpcm_dec none 7 none 100 123902 timedTest 56 (null)
58adpcm_dec none 7 none 100 123972 timedTest 57 (null)
59adpcm_dec none 7 none 100 123901 timedTest 58 (null)
60adpcm_dec none 7 none 100 123692 timedTest 59 (null)
61adpcm_dec none 7 none 100 123553 timedTest 60 (null)
62adpcm_dec none 7 none 100 123692 timedTest 61 (null)
63adpcm_dec none 7 none 100 124041 timedTest 62 (null)
64adpcm_dec none 7 none 100 123971 timedTest 63 (null)
65adpcm_dec none 7 none 100 124251 timedTest 64 (null)
66adpcm_dec none 7 none 100 123622 timedTest 65 (null)
67adpcm_dec none 7 none 100 123972 timedTest 66 (null)
68adpcm_dec none 7 none 100 137870 timedTest 67 (null)
69adpcm_dec none 7 none 100 123622 timedTest 68 (null)
70adpcm_dec none 7 none 100 123553 timedTest 69 (null)
71adpcm_dec none 7 none 100 123901 timedTest 70 (null)
72adpcm_dec none 7 none 100 124041 timedTest 71 (null)
73adpcm_dec none 7 none 100 123483 timedTest 72 (null)
74adpcm_dec none 7 none 100 123831 timedTest 73 (null)
75adpcm_dec none 7 none 100 123971 timedTest 74 (null)
76adpcm_dec none 7 none 100 123413 timedTest 75 (null)
77adpcm_dec none 7 none 100 123622 timedTest 76 (null)
78adpcm_dec none 7 none 100 123553 timedTest 77 (null)
79adpcm_dec none 7 none 100 123692 timedTest 78 (null)
80adpcm_dec none 7 none 100 123692 timedTest 79 (null)
81adpcm_dec none 7 none 100 123832 timedTest 80 (null)
82adpcm_dec none 7 none 100 123692 timedTest 81 (null)
83adpcm_dec none 7 none 100 123692 timedTest 82 (null)
84adpcm_dec none 7 none 100 123482 timedTest 83 (null)
85adpcm_dec none 7 none 100 124251 timedTest 84 (null)
86adpcm_dec none 7 none 100 124111 timedTest 85 (null)
87adpcm_dec none 7 none 100 124041 timedTest 86 (null)
88adpcm_dec none 7 none 100 123692 timedTest 87 (null)
89adpcm_dec none 7 none 100 124111 timedTest 88 (null)
90adpcm_dec none 7 none 100 123972 timedTest 89 (null)
91adpcm_dec none 7 none 100 123832 timedTest 90 (null)
92adpcm_dec none 7 none 100 123483 timedTest 91 (null)
93adpcm_dec none 7 none 100 123483 timedTest 92 (null)
94adpcm_dec none 7 none 100 123692 timedTest 93 (null)
95adpcm_dec none 7 none 100 124390 timedTest 94 (null)
96adpcm_dec none 7 none 100 123831 timedTest 95 (null)
97adpcm_dec none 7 none 100 123762 timedTest 96 (null)
98adpcm_dec none 7 none 100 123692 timedTest 97 (null)
99adpcm_dec none 7 none 100 123692 timedTest 98 (null)
100adpcm_dec none 7 none 100 123902 timedTest 99 (null)
diff --git a/all_pairs/source/adpcm_enc/ChangeLog.txt b/all_pairs/source/adpcm_enc/ChangeLog.txt
new file mode 100644
index 0000000..0029192
--- /dev/null
+++ b/all_pairs/source/adpcm_enc/ChangeLog.txt
@@ -0,0 +1,34 @@
1File: adpcm_enc.c
2Original provenience: C Algorithms for Real-Time DSP by P. M. Embree
3
42016-03-07:
5- Rename adpcm_encode to adpcm_enc
6- Add generic TACLeBench header
7- Remove #define Seoul_Mate around main
8- Remove swedish comment after setting frequency to 2000
9- Introduce adpcm_enc_init, adpcm_main, adpcm_return
10- Make test_data and compressed global variables
112016-04-26:
12- Remove forward declarations of functions gaussian, iir_filter, fir_filter,
13 fft, setup_codec, key_down, int_enable, int_disable, flags, getinput,
14 sendout, which are never defined
15- Remove commented declarations of invqxl and invqah
16- Remove unused structure COMPLEX
17- Remove prefix my_ from functions names my_fabs, my_cos, my_sin, my_abs
18- Prefix all global symbols with benchmark name
19- Remove variables accumc and accumd together with their initialization loop,
20 since they are never read
21- Remove unused variables xs and xd
22- Remove unused array wl_table
23- Remove unused variable rs and rh
24- Remove unused variables and their initializations (only required for decoder):
25 ilr, yl, rl, dec_deth, dec_del_bpl, dec_plt, dec_plt1, dec_plt2, dec_szl,
26 dec_spl, dec_sl, dec_rlt1, dec_rlt2, dec_rlt, dec_al1, dec_al2, dl, dec_nbl,
27 dec_yh, dec_dh, dec_nbh, dec_rh2, dec_ah1, dec_ah2, dec_ph, dec_sph, dec_sh,
28 dec_rh, dec_ph1, dec_ph2,
29- Add addition on each element of input data with volatile variable to
30 avoid constant-propagation optimizations through the compoiler
31- Add computation of check sum
32- Add return return statement: zero if check sum is correct
332016-05-20:
34- Apply code formatting with astyle
diff --git a/all_pairs/source/adpcm_enc/adpcm_enc.c b/all_pairs/source/adpcm_enc/adpcm_enc.c
new file mode 100644
index 0000000..d9fb09a
--- /dev/null
+++ b/all_pairs/source/adpcm_enc/adpcm_enc.c
@@ -0,0 +1,758 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: adpcm_enc
7
8 Author: Sung-Soo Lim
9
10 Function: CCITT G.722 ADPCM (Adaptive Differential Pulse Code Modulation)
11 algorithm. 16khz sample rate data is stored in the array test_data[SIZE].
12 Results are stored in the array compressed[SIZE].
13 Execution time is determined by the constant SIZE (default value is 2000).
14
15
16 Source: C Algorithms for Real-Time DSP by P. M. Embree
17 and SNU-RT Benchmark Suite for Worst Case Timing Analysis
18 collected and modified by S.-S. Lim <sslim@archi.snu.ac.kr>
19
20 Original name: adpcm_encoder
21
22 Changes: no major functional changes
23
24 License: may be used, modified, and re-distributed freely, but the
25 SNU-RT Benchmark Suite must be acknowledged
26
27*/
28
29
30/* common sampling rate for sound cards on IBM/PC */
31
32#include "../extra.h"
33#define SAMPLE_RATE 11025
34
35#define PI 3141
36#define SIZE 3
37#define IN_END 4
38
39
40/*
41 Forward declaration of functions
42*/
43
44int adpcm_enc_encode( int, int );
45int adpcm_enc_filtez( int *bpl, int *dlt );
46void adpcm_enc_upzero( int dlt, int *dlti, int *bli );
47int adpcm_enc_filtep( int rlt1, int al1, int rlt2, int al2 );
48int adpcm_enc_quantl( int el, int detl );
49int adpcm_enc_logscl( int il, int nbl );
50int adpcm_enc_scalel( int nbl, int shift_constant );
51int adpcm_enc_uppol2( int al1, int al2, int plt, int plt1, int plt2 );
52int adpcm_enc_uppol1( int al1, int apl2, int plt, int plt1 );
53int adpcm_enc_logsch( int ih, int nbh );
54void adpcm_enc_reset();
55int adpcm_enc_fabs( int n );
56int adpcm_enc_cos( int n );
57int adpcm_enc_sin( int n );
58int adpcm_enc_abs( int n );
59void adpcm_enc_init(void);
60void adpcm_enc_main(void);
61int adpcm_enc_return(void);
62//int main(void);
63
64/*
65 Forward declaration of global variables
66*/
67
68int adpcm_enc_test_data[SIZE * 2], adpcm_enc_compressed[SIZE];
69
70
71/* G722 C code */
72
73/* variables for transimit quadrature mirror filter here */
74int adpcm_enc_tqmf[24];
75
76/* QMF filter coefficients:
77scaled by a factor of 4 compared to G722 CCITT recommendation */
78int adpcm_enc_h[24] = {
79 12, -44, -44, 212, 48, -624, 128, 1448,
80 -840, -3220, 3804, 15504, 15504, 3804, -3220, -840,
81 1448, 128, -624, 48, 212, -44, -44, 12
82};
83
84int adpcm_enc_xl, adpcm_enc_xh;
85
86/* variables for encoder (hi and lo) here */
87
88int adpcm_enc_il, adpcm_enc_szl, adpcm_enc_spl, adpcm_enc_sl, adpcm_enc_el;
89
90int adpcm_enc_qq4_code4_table[16] = {
91 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200,
92 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0
93};
94
95int adpcm_enc_qq5_code5_table[32] = {
96 -280, -280, -23352, -17560, -14120, -11664, -9752, -8184,
97 -6864, -5712, -4696, -3784, -2960, -2208, -1520, -880,
98 23352, 17560, 14120, 11664, 9752, 8184, 6864, 5712,
99 4696, 3784, 2960, 2208, 1520, 880, 280, -280
100};
101
102int adpcm_enc_qq6_code6_table[64] = {
103 -136, -136, -136, -136, -24808, -21904, -19008, -16704,
104-14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856,
105 -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576,
106 -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728,
107 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192,
108 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456,
109 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032,
110 1688, 1360, 1040, 728, 432, 136, -432, -136
111};
112
113int adpcm_enc_delay_bpl[6];
114
115int adpcm_enc_delay_dltx[6];
116
117int adpcm_enc_wl_code_table[16] = {
118 -60, 3042, 1198, 538, 334, 172, 58, -30,
119 3042, 1198, 538, 334, 172, 58, -30, -60
120};
121
122int adpcm_enc_ilb_table[32] = {
123 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383,
124 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834,
125 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371,
126 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008
127};
128
129int adpcm_enc_nbl; /* delay line */
130int adpcm_enc_al1, adpcm_enc_al2;
131int adpcm_enc_plt, adpcm_enc_plt1, adpcm_enc_plt2;
132int adpcm_enc_dlt;
133int adpcm_enc_rlt, adpcm_enc_rlt1, adpcm_enc_rlt2;
134
135/* decision levels - pre-multiplied by 8, 0 to indicate end */
136int adpcm_enc_decis_levl[30] = {
137 280, 576, 880, 1200, 1520, 1864, 2208, 2584,
138 2960, 3376, 3784, 4240, 4696, 5200, 5712, 6288,
139 6864, 7520, 8184, 8968, 9752, 10712, 11664, 12896,
140 14120, 15840, 17560, 20456, 23352, 32767
141};
142
143int adpcm_enc_detl;
144
145/* quantization table 31 long to make quantl look-up easier,
146last entry is for mil=30 case when wd is max */
147int adpcm_enc_quant26bt_pos[31] = {
148 61, 60, 59, 58, 57, 56, 55, 54,
149 53, 52, 51, 50, 49, 48, 47, 46,
150 45, 44, 43, 42, 41, 40, 39, 38,
151 37, 36, 35, 34, 33, 32, 32
152};
153
154/* quantization table 31 long to make quantl look-up easier,
155last entry is for mil=30 case when wd is max */
156int adpcm_enc_quant26bt_neg[31] = {
157 63, 62, 31, 30, 29, 28, 27, 26,
158 25, 24, 23, 22, 21, 20, 19, 18,
159 17, 16, 15, 14, 13, 12, 11, 10,
160 9, 8, 7, 6, 5, 4, 4
161};
162
163
164int adpcm_enc_deth;
165int adpcm_enc_sh; /* this comes from adaptive predictor */
166int adpcm_enc_eh;
167
168int adpcm_enc_qq2_code2_table[4] = {
169 -7408, -1616, 7408, 1616
170};
171
172int adpcm_enc_wh_code_table[4] = {
173 798, -214, 798, -214
174};
175
176
177int adpcm_enc_dh, adpcm_enc_ih;
178int adpcm_enc_nbh, adpcm_enc_szh;
179int adpcm_enc_sph, adpcm_enc_ph, adpcm_enc_yh;
180
181int adpcm_enc_delay_dhx[6];
182int adpcm_enc_delay_bph[6];
183
184int adpcm_enc_ah1, adpcm_enc_ah2;
185int adpcm_enc_ph1, adpcm_enc_ph2;
186int adpcm_enc_rh1, adpcm_enc_rh2;
187
188
189/* G722 encode function two ints in, one 8 bit output */
190
191/* put input samples in xin1 = first value, xin2 = second value */
192/* returns il and ih stored together */
193
194
195/* MAX: 1 */
196int adpcm_enc_abs( int n )
197{
198 int m;
199
200
201 if ( n >= 0 )
202 m = n;
203 else
204 m = -n;
205
206 return m;
207}
208
209
210/* MAX: 1 */
211int adpcm_enc_fabs( int n )
212{
213 int f;
214
215
216 if ( n >= 0 )
217 f = n;
218 else
219 f = -n;
220
221 return f;
222}
223
224
225int adpcm_enc_sin( int rad )
226{
227 int diff;
228 int app = 0;
229 int inc = 1;
230
231
232 /* MAX dependent on rad's value, say 50 */
233 _Pragma("loopbound min 0 max 0")
234 while ( rad > 2 * PI ) {
235 rad -= 2 * PI;
236 }
237
238 /* MAX dependent on rad's value, say 50 */
239 _Pragma("loopbound min 0 max 1999")
240 while ( rad < -2 * PI ) {
241 rad += 2 * PI;
242 }
243
244 diff = rad;
245 app = diff;
246 diff = (diff * (-(rad*rad))) / ((2 * inc) * (2 * inc + 1));
247 app = app + diff;
248 inc++;
249
250 /* REALLY: while(my_fabs(diff) >= 0.00001) { */
251 /* MAX: 1000 */
252 _Pragma("loopbound min 849 max 2424")
253 while ( adpcm_enc_fabs( diff ) >= 1 ) {
254 diff = (diff * (-(rad*rad))) / ((2 * inc) * (2 * inc + 1));
255 app = app + diff;
256 inc++;
257 }
258
259 return app;
260}
261
262
263int adpcm_enc_cos( int rad )
264{
265 return( adpcm_enc_sin( PI / 2 - rad ) );
266}
267
268
269/* MAX: 1 */
270int adpcm_enc_encode( int xin1, int xin2 )
271{
272 int i;
273 int *h_ptr, *tqmf_ptr, *tqmf_ptr1;
274 long int xa, xb;
275 int decis;
276
277
278 /* transmit quadrature mirror filters implemented here */
279 h_ptr = adpcm_enc_h;
280 tqmf_ptr = adpcm_enc_tqmf;
281 xa = (long)(*tqmf_ptr++) * (*h_ptr++);
282 xb = (long)(*tqmf_ptr++) * (*h_ptr++);
283
284 /* main multiply accumulate loop for samples and coefficients */
285 /* MAX: 10 */
286 _Pragma("loopbound min 10 max 10")
287 for ( i = 0; i < 10; i++ ) {
288 xa += (long)(*tqmf_ptr++) * (*h_ptr++);
289 xb += (long)(*tqmf_ptr++) * (*h_ptr++);
290 }
291
292 /* final mult/accumulate */
293 xa += (long)(*tqmf_ptr++) * (*h_ptr++);
294 xb += (long)(*tqmf_ptr) * (*h_ptr++);
295
296 /* update delay line tqmf */
297 tqmf_ptr1 = tqmf_ptr - 2;
298 /* MAX: 22 */
299 _Pragma("loopbound min 22 max 22")
300 for ( i = 0; i < 22; i++ ) {
301 *tqmf_ptr-- = *tqmf_ptr1--;
302 }
303
304 *tqmf_ptr-- = xin1;
305 *tqmf_ptr = xin2;
306
307 /* scale outputs */
308 adpcm_enc_xl = (xa + xb) >> 15;
309 adpcm_enc_xh = (xa - xb) >> 15;
310
311 /* end of quadrature mirror filter code */
312
313 /* starting with lower sub band encoder */
314
315 /* filtez - compute predictor output section - zero section */
316 adpcm_enc_szl = adpcm_enc_filtez( adpcm_enc_delay_bpl, adpcm_enc_delay_dltx );
317
318 /* filtep - compute predictor output signal (pole section) */
319 adpcm_enc_spl = adpcm_enc_filtep( adpcm_enc_rlt1, adpcm_enc_al1, adpcm_enc_rlt2, adpcm_enc_al2 );
320
321 /* compute the predictor output value in the lower sub_band encoder */
322 adpcm_enc_sl = adpcm_enc_szl + adpcm_enc_spl;
323 adpcm_enc_el = adpcm_enc_xl - adpcm_enc_sl;
324
325 /* quantl: quantize the difference signal */
326 adpcm_enc_il = adpcm_enc_quantl( adpcm_enc_el, adpcm_enc_detl );
327
328 /* invqxl: computes quantized difference signal */
329 /* for invqbl, truncate by 2 lsbs, so mode = 3 */
330 adpcm_enc_dlt = ( (long) adpcm_enc_detl * adpcm_enc_qq4_code4_table[adpcm_enc_il >> 2] ) >> 15;
331
332 /* logscl: updates logarithmic quant. scale factor in low sub band */
333 adpcm_enc_nbl = adpcm_enc_logscl( adpcm_enc_il, adpcm_enc_nbl );
334
335 /* scalel: compute the quantizer scale factor in the lower sub band */
336 /* calling parameters nbl and 8 (constant such that scalel can be scaleh) */
337 adpcm_enc_detl = adpcm_enc_scalel( adpcm_enc_nbl, 8 );
338
339 /* parrec - simple addition to compute recontructed signal for adaptive pred */
340 adpcm_enc_plt = adpcm_enc_dlt + adpcm_enc_szl;
341
342 /* upzero: update zero section predictor coefficients (sixth order)*/
343 /* calling parameters: dlt, dlt1, dlt2, ..., dlt6 from dlt */
344 /* bpli (linear_buffer in which all six values are delayed */
345 /* return params: updated bpli, delayed dltx */
346 adpcm_enc_upzero( adpcm_enc_dlt, adpcm_enc_delay_dltx, adpcm_enc_delay_bpl );
347
348 /* uppol2- update second predictor coefficient apl2 and delay it as al2 */
349 /* calling parameters: al1, al2, plt, plt1, plt2 */
350 adpcm_enc_al2 = adpcm_enc_uppol2( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, adpcm_enc_plt1, adpcm_enc_plt2 );
351
352 /* uppol1 :update first predictor coefficient apl1 and delay it as al1 */
353 /* calling parameters: al1, apl2, plt, plt1 */
354 adpcm_enc_al1 = adpcm_enc_uppol1( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, adpcm_enc_plt1);
355
356 /* recons : compute recontructed signal for adaptive predictor */
357 adpcm_enc_rlt = adpcm_enc_sl + adpcm_enc_dlt;
358
359 /* done with lower sub_band encoder; now implement delays for next time*/
360 adpcm_enc_rlt2 = adpcm_enc_rlt1;
361 adpcm_enc_rlt1 = adpcm_enc_rlt;
362 adpcm_enc_plt2 = adpcm_enc_plt1;
363 adpcm_enc_plt1 = adpcm_enc_plt;
364
365 /* high band encode */
366
367 adpcm_enc_szh = adpcm_enc_filtez( adpcm_enc_delay_bph, adpcm_enc_delay_dhx );
368
369 adpcm_enc_sph = adpcm_enc_filtep( adpcm_enc_rh1, adpcm_enc_ah1, adpcm_enc_rh2, adpcm_enc_ah2 );
370
371 /* predic: sh = sph + szh */
372 adpcm_enc_sh = adpcm_enc_sph + adpcm_enc_szh;
373 /* subtra: eh = xh - sh */
374 adpcm_enc_eh = adpcm_enc_xh - adpcm_enc_sh;
375
376 /* quanth - quantization of difference signal for higher sub-band */
377 /* quanth: in-place for speed params: eh, deth (has init. value) */
378 if ( adpcm_enc_eh >= 0 )
379 adpcm_enc_ih = 3; /* 2,3 are pos codes */
380 else
381 adpcm_enc_ih = 1; /* 0,1 are neg codes */
382
383 decis = ( 564L * (long)adpcm_enc_deth ) >> 12L;
384 if ( adpcm_enc_abs( adpcm_enc_eh ) > decis )
385 adpcm_enc_ih--; /* mih = 2 case */
386
387 /* invqah: compute the quantized difference signal, higher sub-band*/
388 adpcm_enc_dh = ( (long)adpcm_enc_deth * adpcm_enc_qq2_code2_table[adpcm_enc_ih] ) >> 15L ;
389
390 /* logsch: update logarithmic quantizer scale factor in hi sub-band*/
391 adpcm_enc_nbh = adpcm_enc_logsch( adpcm_enc_ih, adpcm_enc_nbh );
392
393 /* note : scalel and scaleh use same code, different parameters */
394 adpcm_enc_deth = adpcm_enc_scalel( adpcm_enc_nbh, 10 );
395
396 /* parrec - add pole predictor output to quantized diff. signal */
397 adpcm_enc_ph = adpcm_enc_dh + adpcm_enc_szh;
398
399 /* upzero: update zero section predictor coefficients (sixth order) */
400 /* calling parameters: dh, dhi, bphi */
401 /* return params: updated bphi, delayed dhx */
402 adpcm_enc_upzero( adpcm_enc_dh, adpcm_enc_delay_dhx, adpcm_enc_delay_bph );
403
404 /* uppol2: update second predictor coef aph2 and delay as ah2 */
405 /* calling params: ah1, ah2, ph, ph1, ph2 */
406 adpcm_enc_ah2 = adpcm_enc_uppol2( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, adpcm_enc_ph1, adpcm_enc_ph2 );
407
408 /* uppol1: update first predictor coef. aph2 and delay it as ah1 */
409 adpcm_enc_ah1 = adpcm_enc_uppol1( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, adpcm_enc_ph1 );
410
411 /* recons for higher sub-band */
412 adpcm_enc_yh = adpcm_enc_sh + adpcm_enc_dh;
413
414 /* done with higher sub-band encoder, now Delay for next time */
415 adpcm_enc_rh2 = adpcm_enc_rh1;
416 adpcm_enc_rh1 = adpcm_enc_yh;
417 adpcm_enc_ph2 = adpcm_enc_ph1;
418 adpcm_enc_ph1 = adpcm_enc_ph;
419
420 /* multiplex ih and il to get signals together */
421 return( adpcm_enc_il | (adpcm_enc_ih << 6) );
422}
423
424
425/* filtez - compute predictor output signal (zero section) */
426/* input: bpl1-6 and dlt1-6, output: szl */
427int adpcm_enc_filtez( int *bpl, int *dlt )
428{
429 int i;
430 long int zl;
431
432
433 zl = (long)(*bpl++) * (*dlt++);
434
435 /* MAX: 5 */
436 _Pragma("loopbound min 5 max 5")
437 for ( i = 1; i < 6; i++ ) {
438 zl += (long)(*bpl++) * (*dlt++);
439 }
440
441 return( (int)(zl >> 14) ); /* x2 here */
442}
443
444
445/* filtep - compute predictor output signal (pole section) */
446/* input rlt1-2 and al1-2, output spl */
447int adpcm_enc_filtep( int rlt1, int al1, int rlt2, int al2 )
448{
449 long int pl, pl2;
450
451
452 pl = 2 * rlt1;
453 pl = (long) al1 * pl;
454 pl2 = 2 * rlt2;
455 pl += (long) al2 * pl2;
456
457 return( (int)(pl >> 15) );
458}
459
460
461/* quantl - quantize the difference signal in the lower sub-band */
462int adpcm_enc_quantl( int el, int detl )
463{
464 int ril, mil;
465 long int wd, decis;
466
467
468 /* abs of difference signal */
469 wd = adpcm_enc_abs( el );
470
471 /* determine mil based on decision levels and detl gain */
472 /* MAX: 30 */
473 _Pragma("loopbound min 1 max 30")
474 for ( mil = 0; mil < 30; mil++ ) {
475 decis = (adpcm_enc_decis_levl[mil] * (long)detl) >> 15L;
476 if ( wd <= decis )
477 break;
478 }
479
480 /* if mil=30 then wd is less than all decision levels */
481 if ( el >= 0 )
482 ril = adpcm_enc_quant26bt_pos[mil];
483 else
484 ril = adpcm_enc_quant26bt_neg[mil];
485
486 return( ril );
487}
488
489
490/* invqxl is either invqbl or invqal depending on parameters passed */
491/* returns dlt, code table is pre-multiplied by 8 */
492
493/* int invqxl(int il,int detl,int *code_table,int mode) */
494/* { */
495/* long int dlt; */
496/* dlt = (long)detl*code_table[il >> (mode-1)]; */
497/* return((int)(dlt >> 15)); */
498/* } */
499
500/* logscl - update log quantizer scale factor in lower sub-band */
501/* note that nbl is passed and returned */
502int adpcm_enc_logscl( int il, int nbl )
503{
504 long int wd;
505
506
507 wd = ((long)nbl * 127L) >> 7L; /* leak factor 127/128 */
508 nbl = (int)wd + adpcm_enc_wl_code_table[il >> 2];
509
510 if ( nbl < 0 )
511 nbl = 0;
512 if ( nbl > 18432 )
513 nbl = 18432;
514
515 return( nbl );
516}
517
518
519/* scalel: compute quantizer scale factor in lower or upper sub-band*/
520int adpcm_enc_scalel( int nbl, int shift_constant )
521{
522 int wd1, wd2, wd3;
523
524
525 wd1 = (nbl >> 6) & 31;
526 wd2 = nbl >> 11;
527 wd3 = adpcm_enc_ilb_table[wd1] >> (shift_constant + 1 - wd2);
528
529 return( wd3 << 3 );
530}
531
532
533/* upzero - inputs: dlt, dlti[0-5], bli[0-5], outputs: updated bli[0-5] */
534/* also implements delay of bli and update of dlti from dlt */
535void adpcm_enc_upzero( int dlt, int *dlti, int *bli )
536{
537 int i, wd2, wd3;
538
539
540 /*if dlt is zero, then no sum into bli */
541 if ( dlt == 0 ) {
542 _Pragma("loopbound min 6 max 6")
543 for ( i = 0; i < 6; i++ ) {
544 bli[i] = (int)((255L * bli[i]) >> 8L); /* leak factor of 255/256 */
545 }
546
547 } else {
548 _Pragma("loopbound min 6 max 6")
549 for ( i = 0; i < 6; i++ ) {
550 if ( (long)dlt * dlti[i] >= 0 )
551 wd2 = 128;
552 else
553 wd2 = -128;
554
555 wd3 = (int)((255L * bli[i]) >> 8L); /* leak factor of 255/256 */
556 bli[i] = wd2 + wd3;
557 }
558
559 }
560
561 /* implement delay line for dlt */
562 dlti[5] = dlti[4];
563 dlti[4] = dlti[3];
564 dlti[3] = dlti[2];
565 dlti[1] = dlti[0];
566 dlti[0] = dlt;
567
568 return;
569}
570
571
572/* uppol2 - update second predictor coefficient (pole section) */
573/* inputs: al1, al2, plt, plt1, plt2. outputs: apl2 */
574int adpcm_enc_uppol2( int al1, int al2, int plt, int plt1, int plt2 )
575{
576 long int wd2, wd4;
577 int apl2;
578
579
580 wd2 = 4L * (long)al1;
581 if ( (long)plt * plt1 >= 0L )
582 wd2 = -wd2; /* check same sign */
583 wd2 = wd2 >> 7; /* gain of 1/128 */
584
585 if ( (long)plt * plt2 >= 0L ) {
586 wd4 = wd2 + 128; /* same sign case */
587 } else {
588 wd4 = wd2 - 128;
589 }
590 apl2 = wd4 + (127L*(long)al2 >> 7L); /* leak factor of 127/128 */
591
592 /* apl2 is limited to +-.75 */
593 if ( apl2 > 12288 )
594 apl2 = 12288;
595 if ( apl2 < -12288 )
596 apl2 = -12288;
597
598 return( apl2 );
599}
600
601
602/* uppol1 - update first predictor coefficient (pole section) */
603/* inputs: al1, apl2, plt, plt1. outputs: apl1 */
604int adpcm_enc_uppol1( int al1, int apl2, int plt, int plt1 )
605{
606 long int wd2;
607 int wd3, apl1;
608
609
610 wd2 = ((long)al1 * 255L) >> 8L; /* leak factor of 255/256 */
611 if ( (long)plt * plt1 >= 0L ) {
612 apl1 = (int)wd2 + 192; /* same sign case */
613 } else {
614 apl1 = (int)wd2 - 192;
615 }
616
617 /* note: wd3= .9375-.75 is always positive */
618 wd3 = 15360 - apl2; /* limit value */
619 if ( apl1 > wd3 )
620 apl1 = wd3;
621 if ( apl1 < -wd3 )
622 apl1 = -wd3;
623
624 return( apl1 );
625}
626
627
628/* INVQAH: inverse adaptive quantizer for the higher sub-band */
629/* returns dh, code table is pre-multiplied by 8 */
630/* int invqah(int ih,int deth) */
631/* { */
632/* long int rdh; */
633/* rdh = ((long)deth*qq2_code2_table[ih]) >> 15L ; */
634/* return((int)(rdh )); */
635/* } */
636
637
638/* logsch - update log quantizer scale factor in higher sub-band */
639/* note that nbh is passed and returned */
640int adpcm_enc_logsch( int ih, int nbh )
641{
642 int wd;
643
644
645 wd = ((long)nbh * 127L) >> 7L; /* leak factor 127/128 */
646 nbh = wd + adpcm_enc_wh_code_table[ih];
647
648 if ( nbh < 0 )
649 nbh = 0;
650 if ( nbh > 22528 )
651 nbh = 22528;
652
653 return( nbh );
654}
655
656
657/*
658 Initialization- and return-value-related functions
659*/
660
661/* clear all storage locations */
662
663void adpcm_enc_reset(void)
664{
665 int i;
666
667 adpcm_enc_detl = 32; /* reset to min scale factor */
668 adpcm_enc_deth = 8;
669 adpcm_enc_nbl = adpcm_enc_al1 = adpcm_enc_al2 = adpcm_enc_plt1 = adpcm_enc_plt2 = adpcm_enc_rlt1 = adpcm_enc_rlt2 = 0;
670 adpcm_enc_nbh = adpcm_enc_ah1 = adpcm_enc_ah2 = adpcm_enc_ph1 = adpcm_enc_ph2 = adpcm_enc_rh1 = adpcm_enc_rh2 = 0;
671
672 _Pragma("loopbound min 6 max 6")
673 for ( i = 0; i < 6; i++) {
674 adpcm_enc_delay_dltx[i] = 0;
675 adpcm_enc_delay_dhx[i] = 0;
676 }
677
678 _Pragma("loopbound min 6 max 6")
679 for ( i = 0; i < 6; i++ ) {
680 adpcm_enc_delay_bpl[i] = 0;
681 adpcm_enc_delay_bph[i] = 0;
682 }
683
684 _Pragma("loopbound min 23 max 23")
685 for ( i = 0; i < 23; i++ ) {
686 adpcm_enc_tqmf[i] = 0;
687 }
688
689 return;
690}
691
692
693void adpcm_enc_init(void)
694{
695 int i, j, f;
696 volatile int x = 0;
697
698 /* reset, initialize required memory */
699 adpcm_enc_reset();
700
701 /* read in amplitude and frequency for test data */
702 j = 10;
703 f = 2000;
704
705 /* 16 KHz sample rate */
706 /* XXmain_0, MAX: 2 */
707 /* Since the number of times we loop in my_sin depends on the argument we
708 add the fact: xxmain_0:[]: */
709 _Pragma("loopbound min 3 max 3")
710 for ( i = 0 ; i < SIZE ; i++) {
711 adpcm_enc_test_data[i] = (int) j * adpcm_enc_cos( f * PI * i );
712
713 /* avoid constant-propagation optimizations */
714 adpcm_enc_test_data[i] += x;
715 }
716}
717
718
719int adpcm_enc_return(void)
720{
721 int i;
722 int check_sum = 0;
723
724 for ( i = 0 ; i < IN_END ; i += 2 ) {
725 check_sum += adpcm_enc_compressed[i/2];
726 }
727
728 return check_sum != 385;
729}
730
731
732/*
733 Main functions
734*/
735
736void _Pragma( "entrypoint" ) adpcm_enc_main(void)
737{
738 int i;
739 /* MAX: 2 */
740 _Pragma("loopbound min 2 max 2")
741 for ( i = 0 ; i < IN_END ; i += 2 ) {
742 adpcm_enc_compressed[i/2] = adpcm_enc_encode( adpcm_enc_test_data[i], adpcm_enc_test_data[i+1] );
743 }
744
745}
746
747int main(int argc, char **argv)
748{
749 SET_UP
750 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
751 START_LOOP
752 adpcm_enc_init();
753 adpcm_enc_main();
754 STOP_LOOP
755 }
756 WRITE_TO_FILE
757 return adpcm_enc_return();
758}
diff --git a/all_pairs/source/ammunition/ChangeLog.txt b/all_pairs/source/ammunition/ChangeLog.txt
new file mode 100644
index 0000000..814ed86
--- /dev/null
+++ b/all_pairs/source/ammunition/ChangeLog.txt
@@ -0,0 +1,66 @@
1File: ammunition.c
2Original provenience: DINO programming language
3
42016-03-03:
5- Add generic TACLeBench header
6- Prefix global functions with benchmark name
7- Introduce volatile result variable for return statements
8- Split code into ammunition_init and ammunition_main
9- Fix compiler warnings "array subscript is of type 'char'":
10 char => unsigned char
11- Fix compiler warnings "'&&' within '||'":
12 Place additional parentheses
13- Remove usages and comments related to the macros
14 HAVE_MEMMOVE, NDEBUG, HAVE_MEMCMP
15- Remove comment related to unused NO_TEMPLATE macro
162016-05-02:
17- Change C++ style comments to ISO C90 compliant comments
18- Avoid mixing declarations and code: move declaration of variable writePos in
19 functions ammunition_sprintf_d and ammunition_sprintf_u
20- Change datatype in function ammunition_bits_test of iteration variables i and
21 j from int to unsigned int to avoid comparison between signed and unsigned
22 integer expressions
23- Add forward declarations to ammunition.c
24- Introduce variable ammunition_result
25- Parantheses around comparison in functions ammunition_isdigit and
26 ammunition_isspace
27- Remove usage of limits.h, move definitions of limits into separate file
28 ammunition_limits.h
29- Remove unconditional assignments of variable result to zero after each test in
30 functions ammunition_bits_test and ammunition_arithm_test
31- Remove unused functions unsigned_integer_maximum, integer_minimum,
32 integer_maximum, integer_remainder
33- Remove unused declaration of function default_arithmetic_overflow_reaction
34- Remove unused variables zero_constant_itself, zero_constant
35- Remove unused declarations of functions set_unsigned_integer_overflow_reaction
36 and set_integer_overflow_reaction
37- Remove block #ifndef MAX_INTEGER_OPERAND_SIZE, set definition of
38 MAX_INTEGER_OPERAND_SIZE to 128, since this is default
392016-05-10:
40- Integrate new version of arithm library from ammunition repository from
41 dino repository on github (commit: db9cfab042c332abb234ec8d72750103010981c1),
42 which hanles arithmetic shifts by negative numbers. This change now makes all
43 test cases in ammunition.c pass. Update headers unsigned int bits => int bits
44- Remove assert statements
45- Fix memcmp implementation: dereferencing pointer was missing
46- Add loop-bound annotation to memcmp
47- Fix strcmp implementation
48- Integrate working versions of memcpy and memset from pm benchmark
49- Update signature of ammunition_memcpy to original version:
50 void *memcpy(void *dest, const void *src, size_x n);
51- Move functions from libc into separate file, introduce header files
52 ammunition_limits.h, ammunition_stdio.h, ammunition_stdlib.h,
53 ammunition_string.h
54- Fix overflow in sprintf_d: change datatype of variable 'copyOfNumber' from int
55 to long, since the negative value of INT_MIN is undefined
56 2016-05-17:
57- Remove all static declarations of global functions
58- Rename variables 'digit_number' to digit_num to keep lines below 80 characters
59- Rename op1_digit_number to op1_digit_number and op1_digit_num in function
60 'ammunition_multiply_unsigned_integer_without_overflow_reaction'
61- Rename variable 'scaled_op1_digit_number' in function
62 'ammunition_divide_unsigned_integer_without_overflow_reaction'
63- Apply code formatting with astyle
64
652017-08-18:
66- Add explicit casts to silence g++ warnings.
diff --git a/all_pairs/source/ammunition/README b/all_pairs/source/ammunition/README
new file mode 100644
index 0000000..8caddf4
--- /dev/null
+++ b/all_pairs/source/ammunition/README
@@ -0,0 +1,86 @@
1This directory AMMUNITION contains reusable packages on C/C++:
2`allocate', `vlobject', `objstack', `hashtab', `commline', `ticker',
3`position', `errors', `bits', `arithm', `IEEE':
4 o allocate
5 Allocating and freeing memory with automatic fixing some
6 allocation errors.
7 o vlobject
8 Work with variable length objects (VLO). Any number of bytes
9 may be added to and removed from the end of VLO. If it is
10 needed the memory allocated for storing variable length object
11 may be expanded possibly with changing the object place. But
12 between any additions of the bytes (or tailoring) the object
13 place is not changed. To decrease number of changes of the
14 object place the memory being allocated for the object is
15 longer than the current object length.
16 o objstack
17 Work with stacks of objects (OS). Work with the object on the
18 stack top is analogous to one with a variable length object.
19 One motivation for the package is the problem of growing char
20 strings in symbol tables. Memory for OS is allocated by
21 segments. A segment may contain more one objects. The most
22 recently allocated segment contains object on the top of OS.
23 If there is not sufficient free memory for the top object than
24 new segment is created and the top object is transferred into
25 the new segment, i.e. there is not any memory reallocation.
26 Therefore the top object may change its address. But other
27 objects never change address.
28 o hashtab
29 Work with hash tables. The package permits to work
30 simultaneously with several expandable hash tables. Besides
31 insertion and search of elements the elements from the hash
32 tables can be also removed. The table element can be only a
33 pointer. The size of hash tables is not fixed. The hash
34 table will be automatically expanded when its occupancy will
35 became big.
36 o position
37 Work with source code positions. The package serves to
38 support information about source positions of compiled files
39 taking all included files into account.
40 o errors
41 Output of compiler messages. The package serves output
42 one-pass or multi-pass compiler messages of various modes
43 (errors, warnings, fatal, system errors and appended messages)
44 in Unix style or for traditional listing. The package also
45 permits adequate error reporting for included files.
46 o commline
47 Work with command line. The package implements features
48 analogous to ones of public domain function `getopt'. The
49 goal of the package creation is to use more readable language
50 of command line description and to use command line
51 description as help output of program.
52 o ticker
53 Simultaneous work with several tickers (timers).
54 o bits
55 Work with bit strings (copying, moving, setting, testing,
56 comparison).
57 o arithm
58 Implementing host machine-independently arbitrary precision
59 integer numbers arithmetic. The implementation of the package
60 functions are not sufficiently efficient in order to use for
61 run-time. The package functions are oriented to implement
62 constant-folding in compilers, cross-compilers.
63 o IEEE
64 Implementing host machine-independently IEEE floating point
65 arithmetic. The implementation of the package functions are
66 not sufficiently efficient in order to use for run-time. The
67 package functions are oriented to implement constant-folding
68 in compilers, cross-compilers.
69
70 There are files with corresponding names and extensions `.h'
71(interface file for C/C++), `.c' (implementation file on C), and
72`.cpp' (implementation file on C++).
73
74 To install AMMUNITION see file INSTALL in the current directory.
75
76 There are also shell scripts for testing the package with
77corresponding names and extension `.tst'. Documentation of the
78reusable packages is in files `ammunition.txt', `ammunition.dvi',
79`ammunition.ps', `ammunition.info*', `ammunition*.html',
80`ammunition*.rtf' for C and `ammunition++.txt', `ammunition++.dvi',
81`ammunition++.ps', `ammunition++.info*', `ammunition++*.html',
82`ammunition++*.rtf'.
83
84Please send bug reports and comments to vmakarov@fnmail.com
85
86Vladimir Makarov
diff --git a/all_pairs/source/ammunition/ammunition.c b/all_pairs/source/ammunition/ammunition.c
new file mode 100644
index 0000000..224babd
--- /dev/null
+++ b/all_pairs/source/ammunition/ammunition.c
@@ -0,0 +1,1185 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: ammunition
7
8 Author: Vladimir Makarov <vmakarov@gcc.gnu.org>
9
10 Function: Tests reusable packages bits and arith
11 bits: Work with bit strings (copying, moving, setting, testing, comparison).
12 arith: Implementing host machine-independently arbitrary precision integer
13 numbers arithmetic. The implementation of the package functions are not
14 sufficiently efficient in order to use for run-time. The package
15 functions are oriented to implement constant-folding in compilers,
16 cross-compilers.
17
18 Source: DINO programming language repository
19 https://github.com/dino-lang/dino/
20
21 Changes: no major functional changes
22
23 License: GPL 2 and LGPL 2
24
25*/
26
27#include "../extra.h"
28#include "bits.h"
29#include "arithm.h"
30#include "ammunition_stdlib.h"
31#include "ammunition_stdio.h"
32#include "ammunition_string.h"
33
34/*
35 Forward declaration of functions
36*/
37
38void ammunition_reset_str_bits( char *str, char *s );
39void ammunition_reset_str_arithm( char *str, char *s, char *d, char *e,
40 char *g );
41int ammunition_bits_test();
42int ammunition_arithm_test();
43void ammunition_init( void );
44int ammunition_return( void );
45void ammunition_main( void );
46//int main( void );
47
48
49/*
50 Forward declaration of global variables
51*/
52
53int ammunition_result;
54
55
56/*
57 Core functions
58*/
59
60void ammunition_reset_str_bits( char *str, char *s )
61{
62 int i;
63 _Pragma( "loopbound min 8 max 8" )
64 for ( i = 0; i < 8; i++ ) {
65 str[i] = 0;
66 s[i] = 0;
67 }
68}
69
70
71void ammunition_reset_str_arithm( char *str, char *s, char *d, char *e,
72 char *g )
73{
74 int i;
75 _Pragma( "loopbound min 20 max 20" )
76 for ( i = 0; i < 20; i++ ) {
77 str[i] = 0;
78 s[i] = 0;
79 }
80
81 _Pragma( "loopbound min 4 max 4" )
82 for ( i = 0; i < 4; i++ ) {
83 d[i] = 0;
84 e[i] = 0;
85 }
86
87 _Pragma( "loopbound min 6 max 6" )
88 for ( i = 0; i < 6; i++ )
89 g[i] = 0;
90}
91
92
93int ammunition_bits_test()
94{
95 char str[8];
96 char str1[8];
97
98 int result = 0;
99 unsigned int i, j;
100
101 /* Test 1 */
102 ammunition_reset_str_bits( str, str1 );
103
104 _Pragma( "loopbound min 64 max 64" )
105 for ( i = 0; i < sizeof ( str ) * CHAR_BIT; i++ ) {
106 if ( BIT ( str, i ) )
107 result = 1;
108 }
109
110 _Pragma( "loopbound min 64 max 64" )
111 for ( i = 0; i < sizeof ( str ) * CHAR_BIT; i++ ) {
112 SET_BIT ( str, i, 1 );
113 _Pragma( "loopbound min 64 max 64" )
114 for ( j = 0; j < sizeof ( str ) * CHAR_BIT; j++ )
115 if ( j <= i ) {
116 if ( BIT ( str, j ) == 0 )
117 result = 1;
118 } else
119 if ( BIT ( str, j ) )
120 result = 1;
121 }
122
123 /* Test 2 */
124 ammunition_reset_str_bits( str, str1 );
125
126 _Pragma( "loopbound min 64 max 64" )
127 for ( i = 0; i < sizeof ( str ) * CHAR_BIT; i++ )
128 if ( !ammunition_is_zero_bit_string (
129 str, i, ( sizeof ( str ) * CHAR_BIT - i ) / 2 + 1 ) )
130 result = 1;
131 ammunition_bit_string_set ( str, 13, 1, 35 );
132 _Pragma( "loopbound min 13 max 13" )
133 for ( i = 0; i < 13; i++ )
134 if ( !ammunition_is_zero_bit_string ( str, i, 13 - i ) )
135 result = 1;
136 _Pragma( "loopbound min 35 max 35" )
137 for ( i = 13; i < 48; i++ )
138 if ( ammunition_is_zero_bit_string ( str, i, 48 - i ) )
139 result = 1;
140 _Pragma( "loopbound min 16 max 16" )
141 for ( i = 48; i < sizeof ( str ) * CHAR_BIT; i++ )
142 if ( !ammunition_is_zero_bit_string ( str, i,
143 sizeof ( str ) * CHAR_BIT - i ) )
144 result = 1;
145
146 /* Test 3 */
147 ammunition_reset_str_bits( str, str1 );
148
149 _Pragma( "loopbound min 42 max 42" )
150 for ( i = 0; i + i / 2 + 1 < sizeof ( str ) * CHAR_BIT; i++ ) {
151 ammunition_bit_string_set ( str, i, 1, i / 2 + 1 );
152 if ( !ammunition_is_zero_bit_string ( str, 0, i - 1 ) )
153 result = 1;
154 if ( ammunition_is_zero_bit_string ( str, i, i / 2 + 1 ) )
155 result = 1;
156 if ( !ammunition_is_zero_bit_string (
157 str, i + i / 2 + 1, sizeof ( str ) * CHAR_BIT - ( i + i / 2 + 1 ) ) )
158 result = 1;
159 ammunition_bit_string_set ( str, 0, 0, sizeof ( str ) * CHAR_BIT );
160 }
161
162 /* Test 4 */
163 ammunition_reset_str_bits( str, str1 );
164
165 ammunition_bit_string_set ( str, 2, 1, 43 );
166 ammunition_bit_string_set ( str1, 2, 1, 40 );
167 _Pragma( "loopbound min 42 max 42" )
168 for ( i = 0; i < 42; i++ )
169 if ( ammunition_bit_string_comparison ( str, i, str1, i, 42 - i ) != 0 )
170 result = 1;
171 _Pragma( "loopbound min 43 max 43" )
172 for ( i = 0; i < 43; i++ )
173 if ( ammunition_bit_string_comparison ( str, i, str1, i,
174 sizeof ( str ) * CHAR_BIT - i )
175 <= 0 )
176 result = 1;
177 _Pragma( "loopbound min 43 max 43" )
178 for ( i = 0; i < 43; i++ )
179 if ( ammunition_bit_string_comparison ( str1, i, str, i,
180 sizeof ( str ) * CHAR_BIT - i )
181 >= 0 )
182 result = 1;
183
184 /* Test 5 */
185 ammunition_reset_str_bits( str, str1 );
186
187 ammunition_bit_string_set ( str, 2, 1, 43 );
188 _Pragma( "loopbound min 59 max 59" )
189 for ( i = 0; i + 5 < sizeof ( str ) * CHAR_BIT; i++ ) {
190 ammunition_bit_string_copy ( str1, i + 5, str, i,
191 sizeof ( str ) * CHAR_BIT - i - 5 );
192 if ( ammunition_bit_string_comparison (
193 str1, i + 5, str, i, sizeof ( str ) * CHAR_BIT - i - 5 ) != 0 )
194 result = 1;
195 }
196
197 /* Test 6 */
198 ammunition_reset_str_bits( str, str1 );
199
200 ammunition_bit_string_set ( str, 2, 1, 43 );
201 ammunition_bit_string_set ( str1, 2, 1, 43 );
202 _Pragma( "loopbound min 59 max 59" )
203 for ( i = 0; i + 5 < sizeof ( str ) * CHAR_BIT; i++ ) {
204 ammunition_bit_string_set ( str, 0, 0, sizeof ( str ) * CHAR_BIT );
205 ammunition_bit_string_set ( str, 2, 1, 43 );
206 ammunition_bit_string_move ( str, i + 5, str, i,
207 sizeof ( str ) * CHAR_BIT - i - 5 );
208 if ( ammunition_bit_string_comparison (
209 str, i + 5, str1, i, sizeof ( str ) * CHAR_BIT - i - 5 ) != 0 )
210 result = 1;
211 }
212
213 /* Test 7 */
214 ammunition_reset_str_bits( str, str1 );
215
216 ammunition_bit_string_set ( str, 2, 1, 43 );
217 ammunition_bit_string_set ( str1, 2, 1, 43 );
218 _Pragma( "loopbound min 59 max 59" )
219 for ( i = 0; i + 5 < sizeof ( str ) * CHAR_BIT; i++ ) {
220 ammunition_bit_string_set ( str, 0, 0, sizeof ( str ) * CHAR_BIT );
221 ammunition_bit_string_set ( str, 2, 1, 43 );
222 ammunition_bit_string_move ( str, i, str, i + 5,
223 sizeof ( str ) * CHAR_BIT - i - 5 );
224 if ( ammunition_bit_string_comparison (
225 str, i, str1, i + 5, sizeof ( str ) * CHAR_BIT - i - 5 ) != 0 )
226 result = 1;
227 }
228
229 return result;
230}
231
232
233int ammunition_arithm_test()
234{
235 int result = 0;
236
237 /* Test 1 */
238 int i;
239 char str [20], s[20], d[4], e[4], g[6];
240
241 ammunition_integer_from_string ( 4, "-2147483649", d );
242 if ( !ammunition_overflow_bit )
243 result = 1;
244 ammunition_sprintf_d( str, INT_MIN );
245 ammunition_integer_from_string ( 4, str, d );
246 if ( ammunition_overflow_bit )
247 result = 1;
248 ammunition_integer_to_string( 4, d, s );
249 if ( ammunition_strcmp ( s, str ) != 0 )
250 result = 1;
251 ammunition_integer_from_string ( 4, "2147483648", d );
252 if ( !ammunition_overflow_bit )
253 result = 1;
254 ammunition_sprintf_d( str, INT_MAX );
255 ammunition_integer_from_string ( 4, str, d );
256 if ( ammunition_overflow_bit )
257 result = 1;
258 ammunition_integer_to_string( 4, d, s );
259 if ( ammunition_strcmp ( s, str ) != 0 )
260 result = 1;
261 _Pragma( "loopbound min 4000 max 4000" )
262 for ( i = -2000; i < 2000 ; i++ ) {
263 ammunition_sprintf_d( str, i );
264 ammunition_integer_from_string ( 4, str, d );
265 if ( ammunition_overflow_bit )
266 result = 1;
267 ammunition_integer_to_string( 4, d, s );
268 if ( ammunition_strcmp ( s, str ) != 0 )
269 result = 1;
270 }
271
272 /* Test 2 */
273 ammunition_reset_str_arithm( str, s, d, e, g );
274
275 ammunition_unsigned_integer_from_string ( 4, "4294967296", d );
276 if ( !ammunition_overflow_bit )
277 result = 1;
278 ammunition_sprintf_u( str, UINT_MAX );
279 ammunition_unsigned_integer_from_string ( 4, str, d );
280 if ( ammunition_overflow_bit )
281 result = 1;
282 ammunition_unsigned_integer_to_string ( 4, d, s );
283 if ( ammunition_strcmp ( s, str ) != 0 )
284 result = 1;
285 _Pragma( "loopbound min 4000 max 4000" )
286 for ( i = 0; i < 4000 ; i++ ) {
287 ammunition_sprintf_u( str, i );
288 ammunition_unsigned_integer_from_string ( 4, str, d );
289 if ( ammunition_overflow_bit )
290 result = 1;
291 ammunition_unsigned_integer_to_string ( 4, d, s );
292 if ( ammunition_strcmp ( s, str ) != 0 )
293 result = 1;
294 }
295
296 /* Test 3 */
297 ammunition_reset_str_arithm( str, s, d, e, g );
298
299 ammunition_sprintf_d( str, INT_MAX );
300 ammunition_integer_from_string ( 4, str, d );
301 ammunition_integer_from_string ( 4, "1", e );
302 ammunition_add_integer ( 4, d, e, d );
303 if ( !ammunition_overflow_bit )
304 result = 1;
305 ammunition_sprintf_d( str, INT_MAX - 4 );
306 ammunition_integer_from_string ( 4, str, d );
307 ammunition_sprintf_d( str, 4 );
308 ammunition_integer_from_string ( 4, str, e );
309 ammunition_add_integer ( 4, d, e, d );
310 if ( ammunition_overflow_bit )
311 result = 1;
312 ammunition_integer_to_string( 4, d, s );
313 ammunition_sprintf_d( str, INT_MAX );
314 if ( ammunition_strcmp ( s, str ) != 0 )
315 result = 1;
316 _Pragma( "loopbound min 4000 max 4000" )
317 for ( i = -2000; i < 2000 ; i++ ) {
318 ammunition_sprintf_d( str, i );
319 ammunition_integer_from_string ( 4, str, d );
320 ammunition_sprintf_d( str, i + 1 );
321 ammunition_integer_from_string ( 4, str, e );
322 ammunition_add_integer ( 4, d, e, d );
323 if ( ammunition_overflow_bit )
324 result = 1;
325 ammunition_integer_to_string( 4, d, s );
326 if ( ammunition_atoi ( s ) != i + i + 1 )
327 result = 1;
328 }
329
330 /* Test 4 */
331 ammunition_reset_str_arithm( str, s, d, e, g );
332
333 ammunition_sprintf_u( str, UINT_MAX );
334 ammunition_unsigned_integer_from_string ( 4, str, d );
335 ammunition_unsigned_integer_from_string ( 4, "1", e );
336 ammunition_add_unsigned_integer ( 4, d, e, d );
337 if ( !ammunition_overflow_bit )
338 result = 1;
339 ammunition_sprintf_u( str, UINT_MAX - 4 );
340 ammunition_unsigned_integer_from_string ( 4, str, d );
341 ammunition_sprintf_u( str, 4 );
342 ammunition_unsigned_integer_from_string ( 4, str, e );
343 ammunition_add_unsigned_integer ( 4, d, e, d );
344 if ( ammunition_overflow_bit )
345 result = 1;
346 ammunition_unsigned_integer_to_string ( 4, d, s );
347 ammunition_sprintf_u( str, UINT_MAX );
348 if ( ammunition_strcmp ( s, str ) != 0 )
349 result = 1;
350 _Pragma( "loopbound min 4000 max 4000" )
351 for ( i = 0; i < 4000 ; i++ ) {
352 ammunition_sprintf_u( str, i );
353 ammunition_unsigned_integer_from_string ( 4, str, d );
354 ammunition_sprintf_u( str, i + 1 );
355 ammunition_unsigned_integer_from_string ( 4, str, e );
356 ammunition_add_unsigned_integer ( 4, d, e, d );
357 if ( ammunition_overflow_bit )
358 result = 1;
359 ammunition_unsigned_integer_to_string ( 4, d, s );
360 if ( ammunition_atoi ( s ) != i + i + 1 )
361 result = 1;
362 }
363
364 /* Test 5 */
365 ammunition_reset_str_arithm( str, s, d, e, g );
366
367 ammunition_sprintf_d( str, INT_MIN );
368 ammunition_integer_from_string ( 4, str, d );
369 ammunition_integer_from_string ( 4, "1", e );
370 ammunition_subtract_integer ( 4, d, e, d );
371 if ( !ammunition_overflow_bit )
372 result = 1;
373 ammunition_sprintf_d( str, INT_MIN + 4 );
374 ammunition_integer_from_string ( 4, str, d );
375 ammunition_sprintf_d( str, 4 );
376 ammunition_integer_from_string ( 4, str, e );
377 ammunition_subtract_integer ( 4, d, e, d );
378 if ( ammunition_overflow_bit )
379 result = 1;
380 ammunition_integer_to_string( 4, d, s );
381 ammunition_sprintf_d( str, INT_MIN );
382 if ( ammunition_strcmp ( s, str ) != 0 )
383 result = 1;
384 _Pragma( "loopbound min 4000 max 4000" )
385 for ( i = -2000; i < 2000 ; i++ ) {
386 ammunition_sprintf_d( str, i );
387 ammunition_integer_from_string ( 4, str, d );
388 ammunition_sprintf_d( str, 10 - i );
389 ammunition_integer_from_string ( 4, str, e );
390 ammunition_subtract_integer ( 4, d, e, d );
391 if ( ammunition_overflow_bit )
392 result = 1;
393 ammunition_integer_to_string( 4, d, s );
394 if ( ammunition_atoi ( s ) != i + i - 10 )
395 result = 1;
396 }
397
398 /* Test 6 */
399 ammunition_reset_str_arithm( str, s, d, e, g );
400
401 ammunition_sprintf_u( str, UINT_MAX - 2 );
402 ammunition_unsigned_integer_from_string ( 4, str, d );
403 ammunition_sprintf_u( str, UINT_MAX - 1 );
404 ammunition_unsigned_integer_from_string ( 4, str, e );
405 ammunition_subtract_unsigned_integer ( 4, d, e, d );
406 if ( !ammunition_overflow_bit )
407 result = 1;
408 ammunition_sprintf_u( str, UINT_MAX );
409 ammunition_unsigned_integer_from_string ( 4, str, d );
410 ammunition_subtract_unsigned_integer ( 4, d, d, d );
411 if ( ammunition_overflow_bit )
412 result = 1;
413 ammunition_unsigned_integer_to_string ( 4, d, s );
414 if ( ammunition_strcmp ( s, "0" ) != 0 )
415 result = 1;
416 _Pragma( "loopbound min 4000 max 4000" )
417 for ( i = 0; i < 4000 ; i++ ) {
418 ammunition_sprintf_u( str, i );
419 ammunition_unsigned_integer_from_string ( 4, str, d );
420 ammunition_sprintf_u( str, i / 2 );
421 ammunition_unsigned_integer_from_string ( 4, str, e );
422 ammunition_subtract_unsigned_integer ( 4, d, e, d );
423 if ( ammunition_overflow_bit )
424 result = 1;
425 ammunition_unsigned_integer_to_string ( 4, d, s );
426 if ( ammunition_atoi ( s ) != i - i / 2 )
427 result = 1;
428 }
429
430 /* Test 7 */
431 ammunition_reset_str_arithm( str, s, d, e, g );
432
433 ammunition_sprintf_d( str, INT_MAX / 2 + 1 );
434 ammunition_integer_from_string ( 4, str, d );
435 ammunition_integer_from_string ( 4, "2", e );
436 ammunition_multiply_integer ( 4, d, e, d );
437 if ( !ammunition_overflow_bit )
438 result = 1;
439 ammunition_sprintf_d( str, INT_MIN / 2 - 1 );
440 ammunition_integer_from_string ( 4, str, d );
441 ammunition_integer_from_string ( 4, "2", e );
442 ammunition_multiply_integer ( 4, d, e, d );
443 if ( !ammunition_overflow_bit )
444 result = 1;
445 ammunition_sprintf_d( str, INT_MAX / 3 );
446 ammunition_integer_from_string ( 4, str, d );
447 ammunition_sprintf_d( str, 3 );
448 ammunition_integer_from_string ( 4, str, e );
449 ammunition_multiply_integer ( 4, d, e, d );
450 if ( ammunition_overflow_bit )
451 result = 1;
452 ammunition_integer_to_string( 4, d, s );
453 ammunition_sprintf_d( str, ( INT_MAX / 3 ) * 3 );
454 if ( ammunition_strcmp ( s, str ) != 0 )
455 result = 1;
456 ammunition_sprintf_d( str, INT_MIN / 2 );
457 ammunition_integer_from_string ( 4, str, d );
458 ammunition_sprintf_d( str, 2 );
459 ammunition_integer_from_string ( 4, str, e );
460 ammunition_multiply_integer ( 4, d, e, d );
461 if ( ammunition_overflow_bit )
462 result = 1;
463 ammunition_integer_to_string( 4, d, s );
464 ammunition_sprintf_d( str, ( INT_MIN / 2 ) * 2 );
465 if ( ammunition_strcmp ( s, str ) != 0 )
466 result = 1;
467 _Pragma( "loopbound min 4000 max 4000" )
468 for ( i = -2000; i < 2000 ; i++ ) {
469 ammunition_sprintf_d( str, i );
470 ammunition_integer_from_string ( 4, str, d );
471 ammunition_sprintf_d( str, i + 1000 );
472 ammunition_integer_from_string ( 4, str, e );
473 ammunition_multiply_integer ( 4, d, e, d );
474 if ( ammunition_overflow_bit )
475 result = 1;
476 ammunition_integer_to_string( 4, d, s );
477 if ( ammunition_atoi ( s ) != i * ( i + 1000 ) )
478 result = 1;
479 }
480
481 /* Test 8 */
482 ammunition_reset_str_arithm( str, s, d, e, g );
483
484 ammunition_sprintf_u( str, UINT_MAX / 5 + 1 );
485 ammunition_unsigned_integer_from_string ( 4, str, d );
486 ammunition_sprintf_u( str, 5 );
487 ammunition_unsigned_integer_from_string ( 4, str, e );
488 ammunition_multiply_unsigned_integer ( 4, d, e, d );
489 if ( !ammunition_overflow_bit )
490 result = 1;
491 ammunition_sprintf_u( str, UINT_MAX / 2 );
492 ammunition_unsigned_integer_from_string ( 4, str, d );
493 ammunition_sprintf_u( str, 2 );
494 ammunition_unsigned_integer_from_string ( 4, str, e );
495 ammunition_multiply_unsigned_integer ( 4, d, e, d );
496 if ( ammunition_overflow_bit )
497 result = 1;
498 ammunition_unsigned_integer_to_string ( 4, d, s );
499 ammunition_sprintf_u( str, ( UINT_MAX / 2 ) * 2 );
500 if ( ammunition_strcmp ( s, str ) != 0 )
501 result = 1;
502 _Pragma( "loopbound min 4000 max 4000" )
503 for ( i = 0; i < 4000 ; i++ ) {
504 ammunition_sprintf_u( str, i );
505 ammunition_unsigned_integer_from_string ( 4, str, d );
506 ammunition_sprintf_u( str, i / 2 );
507 ammunition_unsigned_integer_from_string ( 4, str, e );
508 ammunition_multiply_unsigned_integer ( 4, d, e, d );
509 if ( ammunition_overflow_bit )
510 result = 1;
511 ammunition_unsigned_integer_to_string ( 4, d, s );
512 if ( ammunition_atoi ( s ) != i * ( i / 2 ) )
513 result = 1;
514 }
515
516 /* Test 9 */
517 ammunition_reset_str_arithm( str, s, d, e, g );
518
519 ammunition_integer_from_string ( 4, "10", d );
520 ammunition_integer_from_string ( 4, "0", e );
521 ammunition_divide_integer ( 4, d, e, d );
522 if ( !ammunition_overflow_bit )
523 result = 1;
524 _Pragma( "loopbound min 4000 max 4000" )
525 for ( i = -2000; i < 2000 ; i++ ) {
526 ammunition_sprintf_d( str, i );
527 ammunition_integer_from_string ( 4, str, d );
528 ammunition_sprintf_d( str, ( i < 0 ? - i / 20 + 1 : - i / 20 - 1 ) );
529 ammunition_integer_from_string ( 4, str, e );
530 ammunition_divide_integer ( 4, d, e, d );
531 if ( ammunition_overflow_bit )
532 result = 1;
533 ammunition_integer_to_string( 4, d, s );
534 if ( ammunition_atoi ( s ) != i / ( i < 0 ? - i / 20 + 1 : - i / 20 - 1 ) )
535 result = 1;
536 ammunition_sprintf_d( str, i );
537 ammunition_integer_from_string ( 4, str, d );
538 ammunition_divide_integer ( 4, d, e, e );
539 if ( ammunition_overflow_bit )
540 result = 1;
541 ammunition_integer_to_string( 4, e, s );
542 if ( ammunition_atoi ( s ) != i / ( i < 0 ? - i / 20 + 1 : - i / 20 - 1 ) )
543 result = 1;
544 }
545
546 /* Test 10 */
547 ammunition_reset_str_arithm( str, s, d, e, g );
548
549 ammunition_unsigned_integer_from_string ( 4, "10", d );
550 ammunition_unsigned_integer_from_string ( 4, "0", e );
551 ammunition_divide_unsigned_integer ( 4, d, e, d );
552 if ( !ammunition_overflow_bit )
553 result = 1;
554 _Pragma( "loopbound min 4000 max 4000" )
555 for ( i = 0; i < 4000 ; i++ ) {
556 ammunition_sprintf_u( str, i );
557 ammunition_unsigned_integer_from_string ( 4, str, d );
558 ammunition_sprintf_u( str, i / 20 + 1 );
559 ammunition_unsigned_integer_from_string ( 4, str, e );
560 ammunition_divide_unsigned_integer ( 4, d, e, d );
561 if ( ammunition_overflow_bit )
562 result = 1;
563 ammunition_unsigned_integer_to_string ( 4, d, s );
564 if ( ammunition_atoi ( s ) != i / ( i / 20 + 1 ) )
565 result = 1;
566 }
567
568 /* Test 11 */
569 ammunition_reset_str_arithm( str, s, d, e, g );
570
571 ammunition_unsigned_integer_from_string ( 4, "10", d );
572 ammunition_unsigned_integer_from_string ( 4, "0", e );
573 ammunition_unsigned_integer_remainder ( 4, d, e, d );
574 if ( !ammunition_overflow_bit )
575 result = 1;
576 _Pragma( "loopbound min 4000 max 4000" )
577 for ( i = 0; i < 4000 ; i++ ) {
578 ammunition_sprintf_u( str, i );
579 ammunition_unsigned_integer_from_string ( 4, str, d );
580 ammunition_sprintf_u( str, i / 20 + 1 );
581 ammunition_unsigned_integer_from_string ( 4, str, e );
582 ammunition_unsigned_integer_remainder ( 4, d, e, d );
583 if ( ammunition_overflow_bit )
584 result = 1;
585 ammunition_unsigned_integer_to_string ( 4, d, s );
586 if ( ammunition_atoi ( s ) != i % ( i / 20 + 1 ) )
587 result = 1;
588 }
589
590 /* Test 12 */
591 ammunition_reset_str_arithm( str, s, d, e, g );
592
593 ammunition_unsigned_integer_from_string ( 4, "1348", d );
594 ammunition_unsigned_integer_shift_right ( 4, d, 0, d );
595 ammunition_unsigned_integer_to_string ( 4, d, s );
596 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
597 result = 1;
598 ammunition_unsigned_integer_from_string ( 4, "1348", d );
599 ammunition_unsigned_integer_shift_right ( 4, d, 32, d );
600 ammunition_unsigned_integer_to_string ( 4, d, s );
601 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "0" ) != 0 )
602 result = 1;
603 ammunition_unsigned_integer_from_string ( 4, "1348", d );
604 ammunition_unsigned_integer_shift_right ( 4, d, 8, d );
605 ammunition_unsigned_integer_to_string ( 4, d, s );
606 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "5" ) != 0 )
607 result = 1;
608 ammunition_unsigned_integer_from_string ( 4, "134890", d );
609 ammunition_unsigned_integer_shift_right ( 4, d, 13, d );
610 ammunition_unsigned_integer_to_string ( 4, d, s );
611 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
612 result = 1;
613 ammunition_unsigned_integer_from_string ( 4, "134890", d );
614 ammunition_unsigned_integer_shift_left ( 4, d, -13, d );
615 ammunition_unsigned_integer_to_string ( 4, d, s );
616 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
617 result = 1;
618
619 /* Test 13 */
620 ammunition_reset_str_arithm( str, s, d, e, g );
621
622 ammunition_integer_from_string ( 4, "1348", d );
623 ammunition_integer_shift_right ( 4, d, 0, d );
624 ammunition_integer_to_string( 4, d, s );
625 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
626 result = 1;
627 ammunition_integer_from_string ( 4, "1348", d );
628 ammunition_integer_shift_right ( 4, d, 32, d );
629 ammunition_integer_to_string( 4, d, s );
630 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "0" ) != 0 )
631 result = 1;
632 ammunition_integer_from_string ( 4, "1348", d );
633 ammunition_integer_shift_right ( 4, d, 8, d );
634 ammunition_integer_to_string( 4, d, s );
635 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "5" ) != 0 )
636 result = 1;
637 ammunition_integer_from_string ( 4, "134890", d );
638 ammunition_integer_shift_right ( 4, d, 13, d );
639 ammunition_integer_to_string( 4, d, s );
640 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
641 result = 1;
642 ammunition_integer_from_string ( 4, "134890", d );
643 ammunition_integer_shift_left ( 4, d, -13, d );
644 ammunition_integer_to_string( 4, d, s );
645 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
646 result = 1;
647 ammunition_integer_from_string ( 4, "-1348", d );
648 ammunition_integer_shift_right ( 4, d, 0, d );
649 ammunition_integer_to_string( 4, d, s );
650 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1348" ) != 0 )
651 result = 1;
652 ammunition_integer_from_string ( 4, "-1348", d );
653 ammunition_integer_shift_right ( 4, d, 32, d );
654 ammunition_integer_to_string( 4, d, s );
655 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-1" ) != 0 )
656 result = 1;
657 ammunition_integer_from_string ( 4, "-1348", d );
658 ammunition_integer_shift_right ( 4, d, 8, d );
659 ammunition_integer_to_string( 4, d, s );
660 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-6" ) != 0 )
661 result = 1;
662 ammunition_integer_from_string ( 4, "-134890", d );
663 ammunition_integer_shift_right ( 4, d, 13, d );
664 ammunition_integer_to_string( 4, d, s );
665 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-17" ) != 0 )
666 result = 1;
667 ammunition_integer_from_string ( 4, "-134890", d );
668 ammunition_integer_shift_left ( 4, d, -13, d );
669 ammunition_integer_to_string( 4, d, s );
670 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-17" ) != 0 )
671 result = 1;
672
673 /* Test 14 */
674 ammunition_reset_str_arithm( str, s, d, e, g );
675
676 ammunition_unsigned_integer_from_string ( 4, "1348", d );
677 ammunition_unsigned_integer_shift_left ( 4, d, 0, d );
678 ammunition_unsigned_integer_to_string ( 4, d, s );
679 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
680 result = 1;
681 ammunition_unsigned_integer_from_string ( 4, "1348", d );
682 ammunition_unsigned_integer_shift_left ( 4, d, 22, d );
683 if ( !ammunition_overflow_bit )
684 result = 1;
685 ammunition_unsigned_integer_from_string ( 4, "1348", d );
686 ammunition_unsigned_integer_shift_left ( 4, d, 8, d );
687 ammunition_unsigned_integer_to_string ( 4, d, s );
688 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "345088" ) != 0 )
689 result = 1;
690 ammunition_unsigned_integer_from_string ( 4, "134890", d );
691 ammunition_unsigned_integer_shift_left ( 4, d, 13, d );
692 ammunition_unsigned_integer_to_string ( 4, d, s );
693 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
694 result = 1;
695 ammunition_unsigned_integer_from_string ( 4, "134890", d );
696 ammunition_unsigned_integer_shift_right ( 4, d, -13, d );
697 ammunition_unsigned_integer_to_string ( 4, d, s );
698 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
699 result = 1;
700
701 /* Test 15 */
702 ammunition_reset_str_arithm( str, s, d, e, g );
703
704 ammunition_integer_from_string ( 4, "1348", d );
705 ammunition_integer_shift_left ( 4, d, 0, d );
706 ammunition_integer_to_string( 4, d, s );
707 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
708 result = 1;
709 ammunition_integer_from_string ( 4, "1348", d );
710 ammunition_integer_shift_left ( 4, d, 21, d );
711 if ( !ammunition_overflow_bit )
712 result = 1;
713 ammunition_integer_from_string ( 4, "1348", d );
714 ammunition_integer_shift_left ( 4, d, 8, d );
715 ammunition_integer_to_string( 4, d, s );
716 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "345088" ) != 0 )
717 result = 1;
718 ammunition_integer_from_string ( 4, "134890", d );
719 ammunition_integer_shift_left ( 4, d, 13, d );
720 ammunition_integer_to_string( 4, d, s );
721 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
722 result = 1;
723 ammunition_integer_from_string ( 4, "134890", d );
724 ammunition_integer_shift_right ( 4, d, -13, d );
725 ammunition_integer_to_string( 4, d, s );
726 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
727 result = 1;
728 ammunition_integer_from_string ( 4, "-1348", d );
729 ammunition_integer_shift_left ( 4, d, 0, d );
730 ammunition_integer_to_string( 4, d, s );
731 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1348" ) != 0 )
732 result = 1;
733 ammunition_integer_from_string ( 4, "-1348", d );
734 ammunition_integer_shift_left ( 4, d, 21, d );
735 if ( !ammunition_overflow_bit )
736 result = 1;
737 ammunition_integer_from_string ( 4, "-1348", d );
738 ammunition_integer_shift_left ( 4, d, 8, d );
739 ammunition_integer_to_string( 4, d, s );
740 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-345088" ) != 0 )
741 result = 1;
742 ammunition_integer_from_string ( 4, "-134890", d );
743 ammunition_integer_shift_left ( 4, d, 13, d );
744 ammunition_integer_to_string( 4, d, s );
745 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1105018880" ) != 0 )
746 result = 1;
747 ammunition_integer_from_string ( 4, "-134890", d );
748 ammunition_integer_shift_right ( 4, d, -13, d );
749 ammunition_integer_to_string( 4, d, s );
750 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1105018880" ) != 0 )
751 result = 1;
752
753 /* Test 16 */
754 ammunition_reset_str_arithm( str, s, d, e, g );
755
756 ammunition_integer_from_string ( 4, "-10", d );
757 ammunition_integer_from_string ( 4, "1348", e );
758 if ( ammunition_eq_integer ( 4, d, e ) )
759 result = 1;
760 ammunition_integer_from_string ( 4, "-1348", d );
761 ammunition_integer_from_string ( 4, "-1348", e );
762 if ( !ammunition_eq_integer ( 4, d, e ) )
763 result = 1;
764
765 /* Test 17 */
766 ammunition_reset_str_arithm( str, s, d, e, g );
767
768 ammunition_unsigned_integer_from_string ( 4, "10", d );
769 ammunition_unsigned_integer_from_string ( 4, "1348", e );
770 if ( ammunition_eq_unsigned_integer ( 4, d, e ) )
771 result = 1;
772 ammunition_unsigned_integer_from_string ( 4, "1348", d );
773 ammunition_unsigned_integer_from_string ( 4, "1348", e );
774 if ( !ammunition_eq_unsigned_integer ( 4, d, e ) )
775 result = 1;
776
777 /* Test 18 */
778 ammunition_reset_str_arithm( str, s, d, e, g );
779
780 ammunition_integer_from_string ( 4, "-10", d );
781 ammunition_integer_from_string ( 4, "1348", e );
782 if ( !ammunition_ne_integer ( 4, d, e ) )
783 result = 1;
784 ammunition_integer_from_string ( 4, "-1348", d );
785 ammunition_integer_from_string ( 4, "-1348", e );
786 if ( ammunition_ne_integer ( 4, d, e ) )
787 result = 1;
788
789 /* Test 19 */
790 ammunition_reset_str_arithm( str, s, d, e, g );
791
792 ammunition_unsigned_integer_from_string ( 4, "10", d );
793 ammunition_unsigned_integer_from_string ( 4, "1348", e );
794 if ( !ammunition_ne_unsigned_integer ( 4, d, e ) )
795 result = 1;
796 ammunition_unsigned_integer_from_string ( 4, "1348", d );
797 ammunition_unsigned_integer_from_string ( 4, "1348", e );
798 if ( ammunition_ne_unsigned_integer ( 4, d, e ) )
799 result = 1;
800
801 /* Test 20 */
802 ammunition_reset_str_arithm( str, s, d, e, g );
803
804 ammunition_integer_from_string ( 4, "-10", d );
805 ammunition_integer_from_string ( 4, "1348", e );
806 if ( ammunition_gt_integer ( 4, d, e ) )
807 result = 1;
808 ammunition_integer_from_string ( 4, "-1348", d );
809 ammunition_integer_from_string ( 4, "-1348", e );
810 if ( ammunition_gt_integer ( 4, d, e ) )
811 result = 1;
812 ammunition_integer_from_string ( 4, "-1000000", d );
813 ammunition_integer_from_string ( 4, "-1348", e );
814 if ( ammunition_gt_integer ( 4, d, e ) )
815 result = 1;
816 ammunition_integer_from_string ( 4, "1000000", d );
817 ammunition_integer_from_string ( 4, "1348", e );
818 if ( !ammunition_gt_integer ( 4, d, e ) )
819 result = 1;
820
821 /* Test 21 */
822 ammunition_reset_str_arithm( str, s, d, e, g );
823
824 ammunition_unsigned_integer_from_string ( 4, "10", d );
825 ammunition_unsigned_integer_from_string ( 4, "1348", e );
826 if ( ammunition_gt_unsigned_integer ( 4, d, e ) )
827 result = 1;
828 ammunition_unsigned_integer_from_string ( 4, "1348", d );
829 ammunition_unsigned_integer_from_string ( 4, "1348", e );
830 if ( ammunition_gt_unsigned_integer ( 4, d, e ) )
831 result = 1;
832 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
833 ammunition_unsigned_integer_from_string ( 4, "1348", e );
834 if ( !ammunition_gt_unsigned_integer ( 4, d, e ) )
835 result = 1;
836
837 /* Test 22 */
838 ammunition_reset_str_arithm( str, s, d, e, g );
839
840 ammunition_integer_from_string ( 4, "-10", d );
841 ammunition_integer_from_string ( 4, "1348", e );
842 if ( !ammunition_lt_integer ( 4, d, e ) )
843 result = 1;
844 ammunition_integer_from_string ( 4, "-1348", d );
845 ammunition_integer_from_string ( 4, "-1348", e );
846 if ( ammunition_lt_integer ( 4, d, e ) )
847 result = 1;
848 ammunition_integer_from_string ( 4, "-1000000", d );
849 ammunition_integer_from_string ( 4, "-1348", e );
850 if ( !ammunition_lt_integer ( 4, d, e ) )
851 result = 1;
852 ammunition_integer_from_string ( 4, "1000000", d );
853 ammunition_integer_from_string ( 4, "1348", e );
854 if ( ammunition_lt_integer ( 4, d, e ) )
855 result = 1;
856
857 /* Test 23 */
858 ammunition_reset_str_arithm( str, s, d, e, g );
859
860 ammunition_unsigned_integer_from_string ( 4, "10", d );
861 ammunition_unsigned_integer_from_string ( 4, "1348", e );
862 if ( !ammunition_lt_unsigned_integer ( 4, d, e ) )
863 result = 1;
864 ammunition_unsigned_integer_from_string ( 4, "1348", d );
865 ammunition_unsigned_integer_from_string ( 4, "1348", e );
866 if ( ammunition_lt_unsigned_integer ( 4, d, e ) )
867 result = 1;
868 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
869 ammunition_unsigned_integer_from_string ( 4, "1348", e );
870 if ( ammunition_lt_unsigned_integer ( 4, d, e ) )
871 result = 1;
872
873 /* Test 24 */
874 ammunition_reset_str_arithm( str, s, d, e, g );
875
876 ammunition_integer_from_string ( 4, "-10", d );
877 ammunition_integer_from_string ( 4, "1348", e );
878 if ( ammunition_ge_integer ( 4, d, e ) )
879 result = 1;
880 ammunition_integer_from_string ( 4, "-1348", d );
881 ammunition_integer_from_string ( 4, "-1348", e );
882 if ( !ammunition_ge_integer ( 4, d, e ) )
883 result = 1;
884 ammunition_integer_from_string ( 4, "-1000000", d );
885 ammunition_integer_from_string ( 4, "-1348", e );
886 if ( ammunition_ge_integer ( 4, d, e ) )
887 result = 1;
888 ammunition_integer_from_string ( 4, "1000000", d );
889 ammunition_integer_from_string ( 4, "1348", e );
890 if ( !ammunition_ge_integer ( 4, d, e ) )
891 result = 1;
892
893 /* Test 25 */
894 ammunition_reset_str_arithm( str, s, d, e, g );
895
896 ammunition_unsigned_integer_from_string ( 4, "10", d );
897 ammunition_unsigned_integer_from_string ( 4, "1348", e );
898 if ( ammunition_ge_unsigned_integer ( 4, d, e ) )
899 result = 1;
900 ammunition_unsigned_integer_from_string ( 4, "1348", d );
901 ammunition_unsigned_integer_from_string ( 4, "1348", e );
902 if ( !ammunition_ge_unsigned_integer ( 4, d, e ) )
903 result = 1;
904 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
905 ammunition_unsigned_integer_from_string ( 4, "1348", e );
906 if ( !ammunition_ge_unsigned_integer ( 4, d, e ) )
907 result = 1;
908
909 /* Test 26 */
910 ammunition_reset_str_arithm( str, s, d, e, g );
911
912 ammunition_integer_from_string ( 4, "-10", d );
913 ammunition_integer_from_string ( 4, "1348", e );
914 if ( !ammunition_le_integer ( 4, d, e ) )
915 result = 1;
916 ammunition_integer_from_string ( 4, "-1348", d );
917 ammunition_integer_from_string ( 4, "-1348", e );
918 if ( !ammunition_le_integer ( 4, d, e ) )
919 result = 1;
920 ammunition_integer_from_string ( 4, "-1000000", d );
921 ammunition_integer_from_string ( 4, "-1348", e );
922 if ( !ammunition_le_integer ( 4, d, e ) )
923 result = 1;
924 ammunition_integer_from_string ( 4, "1000000", d );
925 ammunition_integer_from_string ( 4, "1348", e );
926 if ( ammunition_le_integer ( 4, d, e ) )
927 result = 1;
928
929 /* Test 27 */
930 ammunition_reset_str_arithm( str, s, d, e, g );
931
932 ammunition_unsigned_integer_from_string ( 4, "10", d );
933 ammunition_unsigned_integer_from_string ( 4, "1348", e );
934 if ( !ammunition_le_unsigned_integer ( 4, d, e ) )
935 result = 1;
936 ammunition_unsigned_integer_from_string ( 4, "1348", d );
937 ammunition_unsigned_integer_from_string ( 4, "1348", e );
938 if ( !ammunition_le_unsigned_integer ( 4, d, e ) )
939 result = 1;
940 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
941 ammunition_unsigned_integer_from_string ( 4, "1348", e );
942 if ( ammunition_le_unsigned_integer ( 4, d, e ) )
943 result = 1;
944
945 /* Test 28 */
946 ammunition_reset_str_arithm( str, s, d, e, g );
947
948 ammunition_unsigned_integer_from_string ( 4, "70000", d );
949 ammunition_change_unsigned_integer_size ( 4, d, 2, d );
950 if ( !ammunition_overflow_bit )
951 result = 1;
952 ammunition_unsigned_integer_from_string ( 4, "30000", d );
953 ammunition_change_unsigned_integer_size ( 4, d, 2, d );
954 ammunition_integer_to_string( 2, d, s );
955 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "30000" ) != 0 )
956 result = 1;
957 ammunition_unsigned_integer_from_string ( 4, "11230000", g );
958 ammunition_change_unsigned_integer_size ( 4, g, 6, g );
959 ammunition_integer_to_string( 6, g, s );
960 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "11230000" ) != 0 )
961 result = 1;
962
963 /* Test 29 */
964 ammunition_reset_str_arithm( str, s, d, e, g );
965
966 ammunition_integer_from_string ( 4, "40000", d );
967 ammunition_change_integer_size ( 4, d, 2, d );
968 if ( !ammunition_overflow_bit )
969 result = 1;
970 ammunition_integer_from_string ( 4, "-33000", d );
971 ammunition_change_integer_size ( 4, d, 2, d );
972 if ( !ammunition_overflow_bit )
973 result = 1;
974 ammunition_integer_from_string ( 4, "30000", d );
975 ammunition_change_integer_size ( 4, d, 2, d );
976 ammunition_integer_to_string( 2, d, s );
977 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "30000" ) != 0 )
978 result = 1;
979 ammunition_integer_from_string ( 4, "-30000", d );
980 ammunition_change_integer_size ( 4, d, 2, d );
981 ammunition_integer_to_string( 2, d, s );
982 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-30000" ) != 0 )
983 result = 1;
984 ammunition_integer_from_string ( 4, "11230000", g );
985 ammunition_change_integer_size ( 4, g, 6, g );
986 ammunition_integer_to_string( 6, g, s );
987 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "11230000" ) != 0 )
988 result = 1;
989 ammunition_integer_from_string ( 4, "-11230000", g );
990 ammunition_change_integer_size ( 4, g, 6, g );
991 ammunition_integer_to_string( 6, g, s );
992 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-11230000" ) != 0 )
993 result = 1;
994
995 /* Test 30 */
996 ammunition_reset_str_arithm( str, s, d, e, g );
997
998 ammunition_unsigned_integer_from_string ( 4, "1348", d );
999 ammunition_unsigned_integer_from_string ( 4, "1348", e );
1000 ammunition_unsigned_integer_or ( 4, d, e, e );
1001 ammunition_unsigned_integer_to_string ( 4, e, s );
1002 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1003 result = 1;
1004 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1005 ammunition_unsigned_integer_from_string ( 4, "0", e );
1006 ammunition_unsigned_integer_or ( 4, d, e, e );
1007 ammunition_unsigned_integer_to_string ( 4, e, s );
1008 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1009 result = 1;
1010 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1011 ammunition_unsigned_integer_from_string ( 4, "4294967295", e );
1012 ammunition_unsigned_integer_or ( 4, d, e, e );
1013 ammunition_unsigned_integer_to_string ( 4, e, s );
1014 if ( ammunition_strcmp ( s, "4294967295" ) != 0 )
1015 result = 1;
1016 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1017 ammunition_unsigned_integer_from_string ( 4, "96", e );
1018 ammunition_unsigned_integer_or ( 4, d, e, e );
1019 ammunition_unsigned_integer_to_string ( 4, e, s );
1020 if ( ammunition_strcmp ( s, "1380" ) != 0 )
1021 result = 1;
1022
1023 /* Test 31 */
1024 ammunition_reset_str_arithm( str, s, d, e, g );
1025
1026 ammunition_integer_from_string ( 4, "1348", d );
1027 ammunition_integer_from_string ( 4, "1348", e );
1028 ammunition_integer_or ( 4, d, e, e );
1029 ammunition_integer_to_string( 4, e, s );
1030 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1031 result = 1;
1032 ammunition_integer_from_string ( 4, "1348", d );
1033 ammunition_integer_from_string ( 4, "0", e );
1034 ammunition_integer_or ( 4, d, e, e );
1035 ammunition_integer_to_string( 4, e, s );
1036 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1037 result = 1;
1038 ammunition_integer_from_string ( 4, "1348", d );
1039 ammunition_integer_from_string ( 4, "-1", e );
1040 ammunition_integer_or ( 4, d, e, e );
1041 ammunition_integer_to_string( 4, e, s );
1042 if ( ammunition_strcmp ( s, "-1" ) != 0 )
1043 result = 1;
1044 ammunition_integer_from_string ( 4, "1348", d );
1045 ammunition_integer_from_string ( 4, "96", e );
1046 ammunition_integer_or ( 4, d, e, e );
1047 ammunition_integer_to_string( 4, e, s );
1048 if ( ammunition_strcmp ( s, "1380" ) != 0 )
1049 result = 1;
1050
1051 /* Test 32 */
1052 ammunition_reset_str_arithm( str, s, d, e, g );
1053
1054 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1055 ammunition_unsigned_integer_from_string ( 4, "1348", e );
1056 ammunition_unsigned_integer_and ( 4, d, e, e );
1057 ammunition_unsigned_integer_to_string ( 4, e, s );
1058 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1059 result = 1;
1060 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1061 ammunition_unsigned_integer_from_string ( 4, "0", e );
1062 ammunition_unsigned_integer_and ( 4, d, e, e );
1063 ammunition_unsigned_integer_to_string ( 4, e, s );
1064 if ( ammunition_strcmp ( s, "0" ) != 0 )
1065 result = 1;
1066 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1067 ammunition_unsigned_integer_from_string ( 4, "4294967295", e );
1068 ammunition_unsigned_integer_and ( 4, d, e, e );
1069 ammunition_unsigned_integer_to_string ( 4, e, s );
1070 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1071 result = 1;
1072 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1073 ammunition_unsigned_integer_from_string ( 4, "96", e );
1074 ammunition_unsigned_integer_and ( 4, d, e, e );
1075 ammunition_unsigned_integer_to_string ( 4, e, s );
1076 if ( ammunition_strcmp ( s, "64" ) != 0 )
1077 result = 1;
1078
1079 /* Test 33 */
1080 ammunition_reset_str_arithm( str, s, d, e, g );
1081
1082 ammunition_integer_from_string ( 4, "1348", d );
1083 ammunition_integer_from_string ( 4, "1348", e );
1084 ammunition_integer_and ( 4, d, e, e );
1085 ammunition_integer_to_string( 4, e, s );
1086 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1087 result = 1;
1088 ammunition_integer_from_string ( 4, "1348", d );
1089 ammunition_integer_from_string ( 4, "0", e );
1090 ammunition_integer_and ( 4, d, e, e );
1091 ammunition_integer_to_string( 4, e, s );
1092 if ( ammunition_strcmp ( s, "0" ) != 0 )
1093 result = 1;
1094 ammunition_integer_from_string ( 4, "1348", d );
1095 ammunition_integer_from_string ( 4, "-1", e );
1096 ammunition_integer_and ( 4, d, e, e );
1097 ammunition_integer_to_string( 4, e, s );
1098 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1099 result = 1;
1100 ammunition_integer_from_string ( 4, "1348", d );
1101 ammunition_integer_from_string ( 4, "96", e );
1102 ammunition_integer_and ( 4, d, e, e );
1103 ammunition_integer_to_string( 4, e, s );
1104 if ( ammunition_strcmp ( s, "64" ) != 0 )
1105 result = 1;
1106
1107 /* Test 34 */
1108 ammunition_reset_str_arithm( str, s, d, e, g );
1109
1110 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1111 ammunition_unsigned_integer_not ( 4, d, d );
1112 ammunition_unsigned_integer_to_string ( 4, d, s );
1113 if ( ammunition_strcmp ( s, "4294965947" ) != 0 )
1114 result = 1;
1115 ammunition_unsigned_integer_from_string ( 4, "0", d );
1116 ammunition_unsigned_integer_not ( 4, d, d );
1117 ammunition_unsigned_integer_to_string ( 4, d, s );
1118 if ( ammunition_strcmp ( s, "4294967295" ) != 0 )
1119 result = 1;
1120 ammunition_unsigned_integer_from_string ( 4, "4294967295", d );
1121 ammunition_unsigned_integer_not ( 4, d, d );
1122 ammunition_unsigned_integer_to_string ( 4, d, s );
1123 if ( ammunition_strcmp ( s, "0" ) != 0 )
1124 result = 1;
1125
1126 /* Test 35 */
1127 ammunition_reset_str_arithm( str, s, d, e, g );
1128
1129 ammunition_integer_from_string ( 4, "1348", d );
1130 ammunition_integer_not ( 4, d, d );
1131 ammunition_integer_to_string( 4, d, s );
1132 if ( ammunition_strcmp ( s, "-1349" ) != 0 )
1133 result = 1;
1134 ammunition_integer_from_string ( 4, "0", d );
1135 ammunition_integer_not ( 4, d, d );
1136 ammunition_integer_to_string( 4, d, s );
1137 if ( ammunition_strcmp ( s, "-1" ) != 0 )
1138 result = 1;
1139 ammunition_integer_from_string ( 4, "-1", d );
1140 ammunition_integer_not ( 4, d, d );
1141 ammunition_integer_to_string( 4, d, s );
1142 if ( ammunition_strcmp ( s, "0" ) != 0 )
1143 result = 1;
1144
1145 return result;
1146}
1147
1148
1149/*
1150 Initialization- and return-value-related functions
1151*/
1152
1153void ammunition_init( void )
1154{
1155 ammunition_result = 0;
1156}
1157
1158int ammunition_return( void )
1159{
1160 return ammunition_result;
1161}
1162
1163/*
1164 Main functions
1165*/
1166
1167void _Pragma( "entrypoint" ) ammunition_main( void )
1168{
1169 ammunition_result |= ammunition_bits_test();
1170 ammunition_result |= ammunition_arithm_test();
1171}
1172
1173
1174int main( int argc, char **argv )
1175{
1176 SET_UP
1177 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
1178 START_LOOP
1179 ammunition_init();
1180 ammunition_main();
1181 STOP_LOOP
1182 }
1183 WRITE_TO_FILE
1184 return ( ammunition_return() );
1185}
diff --git a/all_pairs/source/ammunition/ammunitionTimed.txt b/all_pairs/source/ammunition/ammunitionTimed.txt
new file mode 100644
index 0000000..b49784b
--- /dev/null
+++ b/all_pairs/source/ammunition/ammunitionTimed.txt
@@ -0,0 +1,100 @@
1ammunition none 7 none 100 52370648 ammunitionTimed 0 (null)
2ammunition none 7 none 100 52473247 ammunitionTimed 1 (null)
3ammunition none 7 none 100 52317008 ammunitionTimed 2 (null)
4ammunition none 7 none 100 52427850 ammunitionTimed 3 (null)
5ammunition none 7 none 100 52418211 ammunitionTimed 4 (null)
6ammunition none 7 none 100 52452295 ammunitionTimed 5 (null)
7ammunition none 7 none 100 52400750 ammunitionTimed 6 (null)
8ammunition none 7 none 100 52491197 ammunitionTimed 7 (null)
9ammunition none 7 none 100 52383220 ammunitionTimed 8 (null)
10ammunition none 7 none 100 52455367 ammunitionTimed 9 (null)
11ammunition none 7 none 100 52359403 ammunitionTimed 10 (null)
12ammunition none 7 none 100 52366038 ammunitionTimed 11 (null)
13ammunition none 7 none 100 52373652 ammunitionTimed 12 (null)
14ammunition none 7 none 100 52349625 ammunitionTimed 13 (null)
15ammunition none 7 none 100 52418910 ammunitionTimed 14 (null)
16ammunition none 7 none 100 52359124 ammunitionTimed 15 (null)
17ammunition none 7 none 100 52403265 ammunitionTimed 16 (null)
18ammunition none 7 none 100 52403055 ammunitionTimed 17 (null)
19ammunition none 7 none 100 52355073 ammunitionTimed 18 (null)
20ammunition none 7 none 100 52359473 ammunitionTimed 19 (null)
21ammunition none 7 none 100 52337402 ammunitionTimed 20 (null)
22ammunition none 7 none 100 52367365 ammunitionTimed 21 (null)
23ammunition none 7 none 100 52290188 ammunitionTimed 22 (null)
24ammunition none 7 none 100 52308907 ammunitionTimed 23 (null)
25ammunition none 7 none 100 52417792 ammunitionTimed 24 (null)
26ammunition none 7 none 100 52284112 ammunitionTimed 25 (null)
27ammunition none 7 none 100 52490150 ammunitionTimed 26 (null)
28ammunition none 7 none 100 52386712 ammunitionTimed 27 (null)
29ammunition none 7 none 100 52323504 ammunitionTimed 28 (null)
30ammunition none 7 none 100 52339289 ammunitionTimed 29 (null)
31ammunition none 7 none 100 52340825 ammunitionTimed 30 (null)
32ammunition none 7 none 100 52367296 ammunitionTimed 31 (null)
33ammunition none 7 none 100 52336146 ammunitionTimed 32 (null)
34ammunition none 7 none 100 52374210 ammunitionTimed 33 (null)
35ammunition none 7 none 100 52414021 ammunitionTimed 34 (null)
36ammunition none 7 none 100 52441748 ammunitionTimed 35 (null)
37ammunition none 7 none 100 52366458 ammunitionTimed 36 (null)
38ammunition none 7 none 100 52371905 ammunitionTimed 37 (null)
39ammunition none 7 none 100 52367086 ammunitionTimed 38 (null)
40ammunition none 7 none 100 52324622 ammunitionTimed 39 (null)
41ammunition none 7 none 100 52381543 ammunitionTimed 40 (null)
42ammunition none 7 none 100 52295707 ammunitionTimed 41 (null)
43ammunition none 7 none 100 52346692 ammunitionTimed 42 (null)
44ammunition none 7 none 100 52314983 ammunitionTimed 43 (null)
45ammunition none 7 none 100 52349625 ammunitionTimed 44 (null)
46ammunition none 7 none 100 52466123 ammunitionTimed 45 (null)
47ammunition none 7 none 100 52374629 ammunitionTimed 46 (null)
48ammunition none 7 none 100 52358006 ammunitionTimed 47 (null)
49ammunition none 7 none 100 52392369 ammunitionTimed 48 (null)
50ammunition none 7 none 100 52480232 ammunitionTimed 49 (null)
51ammunition none 7 none 100 52368203 ammunitionTimed 50 (null)
52ammunition none 7 none 100 52430364 ammunitionTimed 51 (null)
53ammunition none 7 none 100 52342502 ammunitionTimed 52 (null)
54ammunition none 7 none 100 52345504 ammunitionTimed 53 (null)
55ammunition none 7 none 100 52495388 ammunitionTimed 54 (null)
56ammunition none 7 none 100 52344107 ammunitionTimed 55 (null)
57ammunition none 7 none 100 52388109 ammunitionTimed 56 (null)
58ammunition none 7 none 100 52431760 ammunitionTimed 57 (null)
59ammunition none 7 none 100 52364712 ammunitionTimed 58 (null)
60ammunition none 7 none 100 52337473 ammunitionTimed 59 (null)
61ammunition none 7 none 100 52433158 ammunitionTimed 60 (null)
62ammunition none 7 none 100 52458790 ammunitionTimed 61 (null)
63ammunition none 7 none 100 52402357 ammunitionTimed 62 (null)
64ammunition none 7 none 100 52307440 ammunitionTimed 63 (null)
65ammunition none 7 none 100 52515921 ammunitionTimed 64 (null)
66ammunition none 7 none 100 52419607 ammunitionTimed 65 (null)
67ammunition none 7 none 100 52401518 ammunitionTimed 66 (null)
68ammunition none 7 none 100 52432389 ammunitionTimed 67 (null)
69ammunition none 7 none 100 52310862 ammunitionTimed 68 (null)
70ammunition none 7 none 100 52279992 ammunitionTimed 69 (null)
71ammunition none 7 none 100 52402148 ammunitionTimed 70 (null)
72ammunition none 7 none 100 52390414 ammunitionTimed 71 (null)
73ammunition none 7 none 100 52374629 ammunitionTimed 72 (null)
74ammunition none 7 none 100 52377493 ammunitionTimed 73 (null)
75ammunition none 7 none 100 52334749 ammunitionTimed 74 (null)
76ammunition none 7 none 100 52402845 ammunitionTimed 75 (null)
77ammunition none 7 none 100 52391601 ammunitionTimed 76 (null)
78ammunition none 7 none 100 52382800 ammunitionTimed 77 (null)
79ammunition none 7 none 100 52471641 ammunitionTimed 78 (null)
80ammunition none 7 none 100 52349137 ammunitionTimed 79 (null)
81ammunition none 7 none 100 52408293 ammunitionTimed 80 (null)
82ammunition none 7 none 100 52454180 ammunitionTimed 81 (null)
83ammunition none 7 none 100 52407525 ammunitionTimed 82 (null)
84ammunition none 7 none 100 52463749 ammunitionTimed 83 (null)
85ammunition none 7 none 100 52335517 ammunitionTimed 84 (null)
86ammunition none 7 none 100 52338800 ammunitionTimed 85 (null)
87ammunition none 7 none 100 52406268 ammunitionTimed 86 (null)
88ammunition none 7 none 100 52269236 ammunitionTimed 87 (null)
89ammunition none 7 none 100 52310862 ammunitionTimed 88 (null)
90ammunition none 7 none 100 52286138 ammunitionTimed 89 (null)
91ammunition none 7 none 100 52381963 ammunitionTimed 90 (null)
92ammunition none 7 none 100 52390343 ammunitionTimed 91 (null)
93ammunition none 7 none 100 52426663 ammunitionTimed 92 (null)
94ammunition none 7 none 100 52344736 ammunitionTimed 93 (null)
95ammunition none 7 none 100 52346343 ammunitionTimed 94 (null)
96ammunition none 7 none 100 52380287 ammunitionTimed 95 (null)
97ammunition none 7 none 100 52344597 ammunitionTimed 96 (null)
98ammunition none 7 none 100 52315263 ammunitionTimed 97 (null)
99ammunition none 7 none 100 52418560 ammunitionTimed 98 (null)
100ammunition none 7 none 100 52333352 ammunitionTimed 99 (null)
diff --git a/all_pairs/source/ammunition/ammunition_libc.c b/all_pairs/source/ammunition/ammunition_libc.c
new file mode 100644
index 0000000..4cce6e9
--- /dev/null
+++ b/all_pairs/source/ammunition/ammunition_libc.c
@@ -0,0 +1,166 @@
1/*
2 Include section
3*/
4
5#include "ammunition_string.h"
6#include "ammunition_stdio.h"
7#include "ammunition_stdlib.h"
8
9
10/*
11 Standard library functions
12*/
13
14char ammunition_isdigit( unsigned char c )
15{
16 if ( ( c >= '0' ) & ( c <= '9' ) )
17 return 1;
18 else
19 return 0;
20}
21
22int ammunition_isspace( int c )
23{
24 return ( c == ' ' ) | ( c == '\t' ) | ( c == '\n' ) | ( c == '\r' );
25}
26
27void *ammunition_memcpy( void *dest, const void *src, size_x size )
28{
29 size_x i;
30 _Pragma( "loopbound min 2 max 6" )
31 for ( i = 0; i < size; i++ )
32 ( ( unsigned char * )dest )[i] = ( ( unsigned char * )src )[i];
33
34 return dest;
35}
36
37
38void *ammunition_memset( void *s, int c, size_x n )
39{
40 size_x i;
41 _Pragma( "loopbound min 0 max 4" )
42 for ( i = 0; i < n; i++ )
43 ( ( unsigned char * )s )[i] = ( unsigned char )c;
44
45 return s;
46}
47
48
49int ammunition_memcmp ( const void *mem1, const void *mem2, size_x size )
50{
51 const unsigned char *p1 = (const unsigned char *) mem1,
52 *p2 = (const unsigned char *) mem2;
53 _Pragma( "loopbound min 0 max 4" )
54 while ( size-- )
55 if ( *p1 != *p2 )
56 return ( *p1 - *p2 );
57 else
58 p1++, p2++;
59 return 0;
60}
61
62
63/* The following function is an analog of standard C function
64 `memmove'. The function returns the first operand. */
65
66void *ammunition_memmove ( void *s1, const void *s2, size_x n )
67{
68 int i;
69
70 if ( ( ( char * ) s1 < ( char * ) s2 && ( char * ) s1 + n <= ( char * ) s2 )
71 || ( ( char * ) s2 < ( char * ) s1
72 && ( char * ) s2 + n <= ( char * ) s1 ) )
73 return ( void * ) ammunition_memcpy ( s1, s2, n );
74 if ( ( char * ) s1 < ( char * ) s2 && ( char * ) s1 + n > ( char * ) s2 ) {
75 _Pragma( "loopbound min 0 max 4" )
76 for ( i = 0; ( size_x ) i < n; i++ )
77 ( ( char * ) s1 ) [i] = ( ( char * ) s2 ) [i];
78 } else {
79 _Pragma( "loopbound min 0 max 4" )
80 for ( i = n - 1; i >= 0; i-- )
81 ( ( char * ) s1 )[i] = ( ( char * ) s2 ) [i];
82 }
83 return s1;
84}
85
86int ammunition_strcmp ( const char *str1, const char *str2 )
87{
88 _Pragma( "loopbound min 1 max 4008" )
89 while ( *str1 && ( *str1 == *str2 ) )
90 str1++, str2++;
91 return *( const unsigned char * )str1 - *( const unsigned char * )str2;
92}
93
94int ammunition_atoi ( const char *str )
95{
96 int result = 0;
97 int sign = ( str[0] == '-' ? -1 : 1 );
98
99 int readingPos = 0;
100 if ( str[0] == '-' || str[0] == '+' )
101 readingPos++;
102 _Pragma( "loopbound min 1 max 1" )
103 do {
104 result *= 10;
105 result += str[readingPos++] - 48;
106 } while ( str[readingPos] != 0 );
107
108 return sign * result;
109}
110
111
112int ammunition_sprintf_d( char *s, int number )
113{
114 /* How many decimal digits do we need? */
115 char digits = 0;
116 unsigned char writePos = 0;
117 long long copyOfNumber = number;
118 _Pragma( "loopbound min 1 max 10" )
119 do {
120 digits++;
121 copyOfNumber /= 10;
122 } while ( copyOfNumber != 0 );
123
124 writePos = digits;
125 if ( number < 0 ) {
126 writePos++;
127 s[0] = '-';
128 }
129 s[writePos] = 0;
130
131 copyOfNumber = number;
132 _Pragma( "loopbound min 1 max 10" )
133 do {
134 s[--writePos] = 48 + ( ( copyOfNumber >= 0 ?
135 copyOfNumber : -copyOfNumber ) % 10 );
136 copyOfNumber /= 10;
137 } while ( copyOfNumber != 0 );
138
139 return digits + ( number < 0 ? 1 : 0 );
140}
141
142
143int ammunition_sprintf_u( char *s, unsigned int number )
144{
145 /* How many decimal digits do we need? */
146 char digits = 0;
147 unsigned char writePos = 0;
148 unsigned long copyOfNumber = number;
149 _Pragma( "loopbound min 1 max 10" )
150 do {
151 digits++;
152 copyOfNumber /= 10;
153 } while ( copyOfNumber != 0 );
154
155 writePos = digits;
156 s[writePos] = 0;
157
158 copyOfNumber = number;
159 _Pragma( "loopbound min 1 max 10" )
160 do {
161 s[--writePos] = 48 + ( copyOfNumber % 10 );
162 copyOfNumber /= 10;
163 } while ( copyOfNumber != 0 );
164
165 return digits;
166}
diff --git a/all_pairs/source/ammunition/ammunition_limits.h b/all_pairs/source/ammunition/ammunition_limits.h
new file mode 100644
index 0000000..0de4c82
--- /dev/null
+++ b/all_pairs/source/ammunition/ammunition_limits.h
@@ -0,0 +1,35 @@
1#ifndef AMMUNITION_LIMITS_H
2#define AMMUNITION_LIMITS_H
3
4#ifndef CHAR_BIT
5#define CHAR_BIT 8
6#endif
7#ifndef UCHAR_MAX
8#define UCHAR_MAX 255
9#endif
10#ifndef SCHAR_MAX
11#define SCHAR_MAX 127
12#endif
13#ifndef SCHAR_MIN
14#define SCHAR_MIN (-128)
15#endif
16#ifndef USHRT_MAX
17#define USHRT_MAX 65535
18#endif
19#ifndef SHRT_MAX
20#define SHRT_MAX 32767
21#endif
22#ifndef SHRT_MIN
23#define SHRT_MIN (-32768)
24#endif
25#ifndef UINT_MAX
26#define UINT_MAX (INT_MAX * 2U + 1)
27#endif
28#ifndef INT_MAX
29#define INT_MAX 2147483647
30#endif
31#ifndef INT_MIN
32#define INT_MIN (-INT_MAX-1)
33#endif
34
35#endif /* #ifndef AMMUNITION_LIMITS_H */
diff --git a/all_pairs/source/ammunition/ammunition_stdio.h b/all_pairs/source/ammunition/ammunition_stdio.h
new file mode 100644
index 0000000..a3a7a4b
--- /dev/null
+++ b/all_pairs/source/ammunition/ammunition_stdio.h
@@ -0,0 +1,8 @@
1#ifndef AMMUNITION_STDIO_H
2#define AMMUNITION_STDIO_H
3
4int ammunition_sprintf_d( char *s, int number );
5
6int ammunition_sprintf_u( char *s, unsigned int number );
7
8#endif
diff --git a/all_pairs/source/ammunition/ammunition_stdlib.h b/all_pairs/source/ammunition/ammunition_stdlib.h
new file mode 100644
index 0000000..d907212
--- /dev/null
+++ b/all_pairs/source/ammunition/ammunition_stdlib.h
@@ -0,0 +1,6 @@
1#ifndef AMMUNITION_STDLIB_H
2#define AMMUNITION_STDLIB_H
3
4int ammunition_atoi ( const char *str );
5
6#endif
diff --git a/all_pairs/source/ammunition/ammunition_string.h b/all_pairs/source/ammunition/ammunition_string.h
new file mode 100644
index 0000000..6b042f8
--- /dev/null
+++ b/all_pairs/source/ammunition/ammunition_string.h
@@ -0,0 +1,18 @@
1#ifndef AMMUNITION_STRING_H
2#define AMMUNITION_STRING_H
3
4typedef unsigned int size_x;
5//typedef __SIZE_TYPE__ size_x;
6
7/*
8 Forward declaration of functions
9*/
10
11void *ammunition_memcpy( void *, const void *, size_x );
12void *ammunition_memset( void *, int, size_x );
13int ammunition_memcmp ( const void *mem1, const void *mem2, size_x size );
14void *ammunition_memmove ( void *s1, const void *s2, size_x n );
15int ammunition_strcmp ( const char *str1, const char *str2 );
16
17#endif /* AMMUNITION_STRING_H */
18
diff --git a/all_pairs/source/ammunition/arithm.c b/all_pairs/source/ammunition/arithm.c
new file mode 100644
index 0000000..9480846
--- /dev/null
+++ b/all_pairs/source/ammunition/arithm.c
@@ -0,0 +1,1384 @@
1/*
2 FILE NAME: arithm.c
3
4 TITLE: Package for arbitrary precision integer arithmetic
5
6 DESCRIPTION: This abstract data implements arbitrary precision
7 integer and unsigned integer numbers by machine independent
8 way. The implementation of the package functions are not
9 sufficiently efficient in order to use for run-time. The
10 package functions are oriented to implement constant-folding in
11 compilers. This package is necessary because host machine may
12 not support such arithmetic for target machine. For example,
13 VAX does not support does not support more 32-bits integer
14 numbers arithmetic. The numbers are represented by bytes in
15 big endian mode, negative integer numbers are represented in
16 complementary code. All sizes are given in bytes and must be
17 positive. Results of executions of all functions can coincide
18 with a operand(s). All functions of addition, subtraction,
19 multiplication, division, evaluation of remainder, shift,
20 changing size and transformation of string into number fix
21 overflow. The overflow is fixed when result can not be
22 represented by number of given size.
23
24*/
25
26#include "arithm.h"
27#include "ammunition_string.h"
28
29
30/* This variable can have only two values 0 or 1. The value `1'
31 corresponds to overflow. The variable value are modified by all
32 functions of addition, subtract, multiplication, division,
33 evaluation of remainder, shift, changing size and transformation of
34 string into number fix overflow. */
35
36int ammunition_overflow_bit;
37
38
39/* The following function adds unsigned integers. The function
40 returns 1 if unsigned integer overflow is fixed, 0 otherwise.
41 Result can be placed in any operand. */
42
43int ammunition_add_unsigned_integer_without_overflow_reaction
44( int size, const void *op1, const void *op2, void *result )
45{
46 int digit_num;
47 int carry;
48 unsigned int sum;
49
50 _Pragma( "loopbound min 4 max 4" )
51 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
52 sum = ( ( ( unsigned char * ) op1 ) [digit_num]
53 + ( ( unsigned char * ) op2 ) [digit_num] + carry );
54 if ( sum > UCHAR_MAX ) {
55 sum -= UCHAR_MAX + 1;
56 carry = 1;
57 } else
58 carry = 0;
59 ( ( unsigned char * ) result ) [digit_num] = sum;
60 }
61 return carry != 0;
62}
63
64/* The following function adds unsigned integers. The function
65 returns 1 if unsigned integer overflow (the first operand is less
66 than the second) is fixed, 0 otherwise. Result can be placed in
67 any operand. */
68
69int ammunition_subtract_unsigned_integer_without_overflow_reaction
70( int size, const void *op1, const void *op2, void *result )
71{
72 int digit_num;
73 int carry;
74 int subtraction;
75
76 _Pragma( "loopbound min 4 max 4" )
77 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
78 subtraction = ( ( ( unsigned char * ) op1 ) [digit_num]
79 - ( ( unsigned char * ) op2 ) [digit_num] - carry );
80 if ( subtraction < 0 ) {
81 subtraction += UCHAR_MAX + 1;
82 carry = 1;
83 } else
84 carry = 0;
85 ( ( unsigned char * ) result ) [digit_num] = subtraction;
86 }
87 return carry != 0;
88}
89
90/* The following function makes complementary code of number. Result
91 can be placed in operand. */
92
93void ammunition_make_complementary_code
94( int size, const void *operand, void *result )
95{
96 int digit_num;
97 int carry;
98 int subtraction;
99
100 _Pragma( "loopbound min 2 max 6" )
101 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
102 subtraction = ( 0 - ( ( unsigned char * ) operand ) [digit_num] - carry );
103 if ( subtraction != 0 ) {
104 subtraction += UCHAR_MAX + 1;
105 carry = 1;
106 } else
107 carry = 0;
108 ( ( unsigned char * ) result ) [digit_num] = subtraction;
109 }
110}
111
112/* The following function multiplys unsigned integer by digit (byte
113 size). The function returns 1 if unsigned integer overflow is
114 fixed, 0 otherwise. */
115
116int ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
117( int size, void *operand, unsigned int digit )
118{
119 int digit_num;
120 unsigned int carry;
121 unsigned int sum;
122
123 _Pragma( "loopbound min 4 max 4" )
124 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
125 sum = ( ( ( unsigned char * ) operand ) [digit_num] * digit + carry );
126 if ( sum > UCHAR_MAX ) {
127 carry = sum / ( UCHAR_MAX + 1 );
128 sum %= UCHAR_MAX + 1;
129 } else
130 carry = 0;
131 ( ( unsigned char * ) operand ) [digit_num] = sum;
132 }
133 return carry != 0;
134}
135
136
137/* Originally reaction on all integer and unsigned integer overflow is
138 equal to the following function. The function does nothing. */
139
140void
141ammunition_arithmetic_overflow_reaction ( void )
142{}
143
144
145/* Originally reaction on all integer and unsigned integer overflow is
146 equal to the following function. The function does nothing. */
147
148void
149ammunition_arithmetic_unsigned_overflow_reaction ( void )
150{}
151
152
153/* This page contains functions for arbitrary precision addition. */
154
155/* The function adds unsigned integers and fixes overflow reaction if
156 it is needed. The function makes this with the aid of function
157 `add_unsigned_integer_without_overflow_reaction'. Result can be
158 placed in any operand. */
159
160void
161ammunition_add_unsigned_integer ( int size, const void *op1, const void *op2,
162 void *result )
163{
164 ammunition_overflow_bit
165 = ammunition_add_unsigned_integer_without_overflow_reaction (
166 size, op1, op2, result );
167 if ( ammunition_overflow_bit != 0 )
168 ammunition_arithmetic_unsigned_overflow_reaction();
169}
170
171/* The function adds integers and fixes overflow reaction if it is
172 needed. The function makes this with the aid of function
173 `add_unsigned_integer_without_overflow_reaction'. Result can be
174 placed in any operand. */
175
176void
177ammunition_add_integer ( int size, const void *op1, const void *op2,
178 void *result )
179{
180 int op1_sign;
181 int sign_equality;
182
183 op1_sign = INTEGER_SIGN ( op1 );
184 sign_equality = INTEGER_SIGN ( op1 ) == INTEGER_SIGN ( op2 );
185 ammunition_add_unsigned_integer_without_overflow_reaction (
186 size, op1, op2, result );
187 ammunition_overflow_bit = sign_equality &&
188 ( op1_sign != INTEGER_SIGN ( result ) );
189 if ( ammunition_overflow_bit != 0 )
190 ammunition_arithmetic_overflow_reaction();
191}
192
193
194
195/* This page contains functions for arbitrary precision subtraction. */
196
197/* The function subtracts unsigned integers and fixes overflow
198 reaction if it is needed. The function makes this with the aid of
199 function `subtract_unsigned_integer_without_overflow_reaction'.
200 Result can be placed in any operand. */
201
202void
203ammunition_subtract_unsigned_integer ( int size, const void *op1,
204 const void *op2,
205 void *result )
206{
207 ammunition_overflow_bit
208 = ammunition_subtract_unsigned_integer_without_overflow_reaction (
209 size, op1, op2, result );
210 if ( ammunition_overflow_bit != 0 )
211 ammunition_arithmetic_unsigned_overflow_reaction();
212}
213
214/* The function subtracts integers and fixes overflow reaction if it
215 is needed. The function makes this with the aid of function
216 `subtract_unsigned_integer_without_overflow_reaction'. Result can
217 be placed in any operand. */
218
219void
220ammunition_subtract_integer ( int size, const void *op1, const void *op2,
221 void *result )
222{
223 int op1_sign;
224 int sign_unequality;
225
226 op1_sign = INTEGER_SIGN ( op1 );
227 sign_unequality = INTEGER_SIGN ( op1 ) != INTEGER_SIGN ( op2 );
228 ammunition_subtract_unsigned_integer_without_overflow_reaction (
229 size, op1, op2, result );
230 ammunition_overflow_bit = sign_unequality &&
231 ( op1_sign != INTEGER_SIGN ( result ) );
232 if ( ammunition_overflow_bit != 0 )
233 ammunition_arithmetic_overflow_reaction();
234}
235
236
237
238/* This page contains functions for arbitrary precision multiplication. */
239
240/* The following function multiplys unsigned integers. The function
241 returns 1 if unsigned integer overflow is fixed, 0 otherwise.
242 Result can be placed in any operand. */
243
244int ammunition_multiply_unsigned_integer_without_overflow_reaction
245( int size, const void *op1, const void *op2, void *result )
246{
247 int op1_digit_num;
248 int op2_digit_num;
249 int carry;
250 unsigned long int partial_sum;
251 int result_digit_number;
252 int overflow_flag;
253 unsigned char long_result [2 * MAX_INTEGER_OPERAND_SIZE];
254
255 ammunition_memset ( long_result + size, 0, ( size_x ) size );
256 _Pragma( "loopbound min 4 max 4" )
257 for ( op2_digit_num = size - 1; op2_digit_num >= 0; op2_digit_num-- ) {
258 if ( ( ( unsigned char * ) op2 ) [op2_digit_num] != 0 ) {
259 _Pragma( "loopbound min 4 max 4" )
260 for ( op1_digit_num = size - 1, carry = 0; op1_digit_num >= 0;
261 op1_digit_num-- ) {
262 partial_sum
263 = ( ( ( unsigned char * ) op1 ) [op1_digit_num]
264 * ( ( unsigned char * ) op2 ) [op2_digit_num]
265 + long_result [op1_digit_num + op2_digit_num + 1]
266 + carry );
267 long_result [op1_digit_num + op2_digit_num + 1]
268 = ( unsigned char ) ( partial_sum % ( UCHAR_MAX + 1 ) );
269 carry = partial_sum / ( UCHAR_MAX + 1 );
270 }
271 long_result [op2_digit_num] = carry;
272 } else
273 long_result [op2_digit_num] = 0;
274 }
275 overflow_flag = 0;
276 _Pragma( "loopbound min 1 max 4" )
277 for ( result_digit_number = size - 1; result_digit_number >= 0;
278 result_digit_number-- ) {
279 if ( long_result [result_digit_number] != 0 ) {
280 overflow_flag = 1;
281 break;
282 }
283 }
284 ammunition_memcpy ( result, long_result + size, ( size_x ) size );
285 return overflow_flag;
286}
287
288/* The following function multiplys unsigned integers and fixes
289 overflow reaction if it is needed. The function makes this with
290 the aid of function
291 `multiply_unsigned_integer_without_overflow_reaction'. Result can
292 be placed in any operand. */
293
294void
295ammunition_multiply_unsigned_integer ( int size, const void *op1,
296 const void *op2,
297 void *result )
298{
299 ammunition_overflow_bit =
300 ammunition_multiply_unsigned_integer_without_overflow_reaction (
301 size, op1, op2, result );
302 if ( ammunition_overflow_bit )
303 ammunition_arithmetic_unsigned_overflow_reaction();
304}
305
306/* The function multiplys integers and fixes overflow reaction if it
307 is needed. The function makes this with the aid of function
308 `multiply_unsigned_integer_without_overflow_reaction'. Result can
309 be placed in any operand. */
310
311void
312ammunition_multiply_integer ( int size, const void *op1, const void *op2,
313 void *result )
314{
315 int negative_result_flag;
316 unsigned char op1_complementary [MAX_INTEGER_OPERAND_SIZE];
317 unsigned char op2_complementary [MAX_INTEGER_OPERAND_SIZE];
318 unsigned const char *abs_op1;
319 unsigned const char *abs_op2;
320 int unsigned_result_sign;
321
322 negative_result_flag = INTEGER_SIGN ( op1 ) != INTEGER_SIGN ( op2 );
323 if ( INTEGER_SIGN ( op1 ) ) {
324 /* May be integer overflow. But result is correct because
325 it is unsigned. */
326 ammunition_make_complementary_code ( size, op1, op1_complementary );
327 abs_op1 = ( unsigned const char * )op1_complementary;
328 } else
329 abs_op1 = ( unsigned const char * )op1;
330 if ( INTEGER_SIGN ( op2 ) ) {
331 /* May be integer overflow. But result is correct because
332 it is unsigned. */
333 ammunition_make_complementary_code ( size, op2, op2_complementary );
334 abs_op2 = ( unsigned const char * )op2_complementary;
335 } else
336 abs_op2 = ( unsigned const char * )op2;
337 ammunition_overflow_bit =
338 ammunition_multiply_unsigned_integer_without_overflow_reaction (
339 size, abs_op1, abs_op2, result );
340 unsigned_result_sign = INTEGER_SIGN ( result );
341 if ( negative_result_flag )
342 ammunition_make_complementary_code ( size, result, result );
343 if ( unsigned_result_sign
344 && ( !negative_result_flag
345 || INTEGER_SIGN ( result ) != unsigned_result_sign ) )
346 /* Unsigned result can not be represented as integer. */
347 ammunition_overflow_bit = 1;
348 if ( ammunition_overflow_bit )
349 ammunition_arithmetic_overflow_reaction();
350}
351
352
353
354/* This page contains functions for arbitrary precision division. */
355
356/* The following function divides unsigned integers. The function
357 returns 1 if unsigned integer overflow (division by zero) is fixed,
358 0 otherwise. Result can be placed in any operand. See algorithm
359 in Knuth's book. */
360
361int ammunition_divide_unsigned_integer_without_overflow_reaction
362( int size, const void *op1, const void *op2, void *result )
363{
364 int scaled_op1_digit_num;
365 unsigned int q_approximation;
366 int first_nonzero_digit_number;
367 int op2_digit_number;
368 unsigned int scale;
369 unsigned char scaled_op1 [MAX_INTEGER_OPERAND_SIZE + 1];
370 unsigned char normalized_op2 [MAX_INTEGER_OPERAND_SIZE];
371 unsigned char extended_normalized_op2 [MAX_INTEGER_OPERAND_SIZE + 1];
372
373 _Pragma( "loopbound min 4 max 4" )
374 for ( op2_digit_number = 0; op2_digit_number < size; op2_digit_number++ ) {
375 if ( ( ( unsigned char * ) op2 ) [op2_digit_number] != 0 )
376 break;
377 }
378 first_nonzero_digit_number = op2_digit_number;
379 if ( first_nonzero_digit_number == size ) {
380 /* Zero divisor */
381 ammunition_memset ( result, 0, ( size_x ) size );
382 return 1 /* TRUE */;
383 } else
384 if ( first_nonzero_digit_number == size - 1 ) {
385 /* Division by digit. */
386 int digit_num;
387 int digit;
388 unsigned long divisable;
389 unsigned long remainder;
390
391 digit = ( ( unsigned char * ) op2 ) [first_nonzero_digit_number];
392 ammunition_memcpy ( result, op1, ( size_x ) size );
393 remainder = 0;
394 _Pragma( "loopbound min 4 max 4" )
395 for ( digit_num = 0; digit_num < size; digit_num++ ) {
396 divisable = ( remainder * ( UCHAR_MAX + 1 )
397 + ( ( unsigned char * ) result ) [digit_num] );
398 remainder = divisable % digit;
399 ( ( unsigned char * ) result ) [digit_num]
400 = ( unsigned char ) ( divisable / digit );
401 }
402 return 0 /* FALSE */;
403 }
404 /* Normalization of divisor. */
405 scale = ( UCHAR_MAX + 1 ) / ( ( ( unsigned char * ) op2 ) [op2_digit_number] +
406 1 );
407 ammunition_memcpy ( scaled_op1 + 1, op1, ( size_x ) size );
408 *scaled_op1 = 0;
409
410 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
411 ( size + 1, scaled_op1, scale );
412
413 ammunition_memcpy ( normalized_op2, op2, ( size_x ) size );
414
415 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
416 ( size, normalized_op2, scale );
417
418 _Pragma( "loopbound min 0 max 0" )
419 for ( scaled_op1_digit_num = 0;
420 scaled_op1_digit_num <= first_nonzero_digit_number;
421 scaled_op1_digit_num++ ) {
422 /* Division of `scaled_op1[scaled_op1_digit_number]..scaled_op1[size]' by
423 `normalized_op2[first_nonzero_digit_number]..normalized_op2[size-1]'
424 for evaluation of one digit of quotient
425 `result[size-1-first_nonzero_digit_number-scaled_op1_digit_number]'.
426 */
427 if ( scaled_op1 [scaled_op1_digit_num]
428 == normalized_op2 [first_nonzero_digit_number] )
429 q_approximation = UCHAR_MAX;
430 else
431 q_approximation
432 = ( scaled_op1 [scaled_op1_digit_num] * ( UCHAR_MAX + 1 )
433 + scaled_op1 [scaled_op1_digit_num + 1] )
434 / normalized_op2 [first_nonzero_digit_number];
435
436 _Pragma( "loopbound min 0 max 0" )
437 while ( normalized_op2 [first_nonzero_digit_number + 1] * q_approximation
438 > ( ( ( unsigned long int ) scaled_op1 [scaled_op1_digit_num]
439 * ( UCHAR_MAX + 1 )
440 + scaled_op1 [scaled_op1_digit_num + 1]
441 - q_approximation
442 * normalized_op2 [first_nonzero_digit_number] )
443 * ( UCHAR_MAX + 1 ) + scaled_op1 [scaled_op1_digit_num + 2] ) )
444 q_approximation --;
445
446 /* Multiply and subtract */
447 ammunition_memcpy ( extended_normalized_op2 + 1,
448 normalized_op2 + first_nonzero_digit_number,
449 ( size_x ) ( size - first_nonzero_digit_number ) );
450 *extended_normalized_op2 = 0;
451 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
452 ( size - first_nonzero_digit_number + 1, extended_normalized_op2,
453 q_approximation );
454 if ( ammunition_subtract_unsigned_integer_without_overflow_reaction
455 ( size - first_nonzero_digit_number + 1,
456 scaled_op1 + scaled_op1_digit_num, extended_normalized_op2,
457 scaled_op1 + scaled_op1_digit_num ) ) {
458 /* Negative result. Compensation by addition. */
459 q_approximation--;
460 ammunition_memcpy ( extended_normalized_op2 + 1,
461 normalized_op2 + first_nonzero_digit_number,
462 ( size_x ) ( size - first_nonzero_digit_number ) );
463 *extended_normalized_op2 = 0;
464
465 ammunition_add_unsigned_integer_without_overflow_reaction
466 ( size - first_nonzero_digit_number + 1,
467 scaled_op1 + scaled_op1_digit_num, extended_normalized_op2,
468 scaled_op1 + scaled_op1_digit_num );
469
470 }
471 ( ( unsigned char * ) result ) [size - 1 - first_nonzero_digit_number
472 + scaled_op1_digit_num] = q_approximation;
473 }
474 ammunition_memset ( result, 0,
475 ( size_x ) ( size - 1 - first_nonzero_digit_number ) );
476 return 0 /* TRUE */;
477}
478
479/* The function divides unsigned integers and fixes overflow reaction
480 if it is needed. The function makes this with the aid of function
481 `divide_unsigned_integer_without_overflow_reaction'. Result can be
482 placed in any operand. */
483
484void
485ammunition_divide_unsigned_integer ( int size, const void *op1, const void *op2,
486 void *result )
487{
488 ammunition_overflow_bit =
489 ammunition_divide_unsigned_integer_without_overflow_reaction (
490 size, op1, op2, result );
491 if ( ammunition_overflow_bit )
492 ammunition_arithmetic_unsigned_overflow_reaction();
493}
494
495/* The function divides integers and fixes overflow reaction if it is
496 needed. The function makes this with the aid of function
497 `divide_unsigned_integer_without_overflow_reaction'. Result can be
498 placed in any operand. */
499
500void
501ammunition_divide_integer ( int size, const void *op1, const void *op2,
502 void *result )
503{
504 int negative_result_flag;
505 unsigned char op1_complementary [MAX_INTEGER_OPERAND_SIZE];
506 unsigned char op2_complementary [MAX_INTEGER_OPERAND_SIZE];
507 unsigned const char *abs_op1;
508 unsigned const char *abs_op2;
509 int unsigned_result_sign;
510
511 negative_result_flag = INTEGER_SIGN ( op1 ) != INTEGER_SIGN ( op2 );
512 if ( INTEGER_SIGN ( op1 ) ) {
513 /* May be integer overflow for minimal int. But result is correct because
514 it is unsigned. */
515 ammunition_make_complementary_code ( size, op1, op1_complementary );
516 abs_op1 = ( unsigned const char * )op1_complementary;
517 } else
518 abs_op1 = ( unsigned const char * )op1;
519 if ( INTEGER_SIGN ( op2 ) ) {
520 /* May be integer overflow for minimal int. But result is correct
521 because it is unsigned. */
522 ammunition_make_complementary_code ( size, op2, op2_complementary );
523 abs_op2 = ( unsigned const char * )op2_complementary;
524 } else
525 abs_op2 = ( unsigned const char * )op2;
526 ammunition_overflow_bit =
527 ammunition_divide_unsigned_integer_without_overflow_reaction (
528 size, abs_op1, abs_op2, result );
529 unsigned_result_sign = INTEGER_SIGN ( result );
530 if ( negative_result_flag )
531 ammunition_make_complementary_code ( size, result, result );
532 if ( unsigned_result_sign
533 && ( !negative_result_flag
534 || INTEGER_SIGN ( result ) != unsigned_result_sign ) )
535 /* Unsigned result can not be represented as integer. */
536 ammunition_overflow_bit = 1;
537 if ( ammunition_overflow_bit )
538 ammunition_arithmetic_overflow_reaction();
539}
540
541
542
543/* This page contains functions for arbitrary precision evaluation of
544 remainder. */
545
546/* The function evaluates remainder of division of unsigned integers
547 as `op1 - (op1/op2)*op2' and fixes overflow reaction if it is
548 needed. Result can be placed in any operand. */
549
550void
551ammunition_unsigned_integer_remainder ( int size, const void *op1,
552 const void *op2,
553 void *result )
554{
555 unsigned char temporary [MAX_INTEGER_OPERAND_SIZE];
556
557 ammunition_divide_unsigned_integer ( size, op1, op2, temporary );
558 if ( ammunition_overflow_bit )
559 /* Reaction on zero is called from `divide_unsigned_integer'. */
560 ammunition_memset ( result, 0, ( size_x ) size );
561 else {
562 ammunition_multiply_unsigned_integer ( size, temporary, op2, temporary );
563 ammunition_subtract_unsigned_integer ( size, op1, temporary, result );
564 }
565}
566
567
568/* This page contains functions for arbitrary precision number shifts. */
569
570/* This function makes right shift of unsigned integer of given size
571 on given number of bits. If number of bits is negative the
572 function makes shift to left actually with the aid of function
573 `unsigned_integer_shift_left'. The function fixes overflow when
574 result can not be represented by number of given size, i.e. in
575 other words the opposite unsigned shift (to left) results in number
576 not equal to source operand. Result can be placed in operand. */
577
578void
579ammunition_unsigned_integer_shift_right ( int size, const void *operand,
580 int bits, void *result )
581{
582 int byte_number;
583 unsigned byte;
584 unsigned carry;
585 int bit_shift;
586 int byte_shift;
587
588
589 if ( bits < 0 )
590 ammunition_unsigned_integer_shift_left ( size, operand, -bits, result );
591 else {
592 ammunition_overflow_bit = 0;
593 byte_shift = bits / CHAR_BIT;
594 bit_shift = bits % CHAR_BIT;
595 _Pragma( "loopbound min 0 max 3" )
596 for ( byte_number = ( byte_shift >= size ? 0 : size - byte_shift );
597 byte_number < size; byte_number++ )
598 if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) {
599 ammunition_overflow_bit = 1;
600 break;
601 }
602 if ( byte_shift >= size )
603 ammunition_memset ( result, 0, ( size_x ) size );
604 else {
605 ammunition_memmove ( ( char * ) result + byte_shift, operand,
606 ( size_x ) ( size - byte_shift ) );
607 ammunition_memset ( result, 0, ( size_x ) byte_shift );
608 if ( bit_shift == 0 )
609 return;
610 _Pragma( "loopbound min 3 max 3" )
611 for ( byte_number = byte_shift, carry = 0; byte_number < size;
612 byte_number++ ) {
613 byte = ( ( unsigned char * ) result ) [byte_number];
614 ( ( unsigned char * ) result ) [byte_number]
615 = carry | ( byte >> bit_shift );
616 carry = ( byte << ( CHAR_BIT - bit_shift ) ) & UCHAR_MAX;
617 }
618 if ( carry != 0 )
619 ammunition_overflow_bit = 1;
620 }
621 if ( ammunition_overflow_bit )
622 ammunition_arithmetic_unsigned_overflow_reaction();
623 }
624}
625
626/* This function makes right arithmetic shift of integer of given size
627 on given number of bits. If number of bits is negative the
628 function makes shift to left actually with the aid of function
629 `integer_shift_left'. The function fixes overflow when result can
630 not be represented by number of given size, i.e. in other words the
631 opposite shift (to left) results in number not equal to source
632 operand. Result can be placed in operand. */
633
634void
635ammunition_integer_shift_right ( int size, const void *operand, int bits,
636 void *result )
637{
638 int byte_number;
639 unsigned byte;
640 unsigned carry;
641 int bit_shift;
642 int byte_shift;
643 int operand_sign;
644
645 if ( bits < 0 )
646 ammunition_integer_shift_left ( size, operand, -bits, result );
647 else {
648 operand_sign = INTEGER_SIGN ( operand );
649 ammunition_overflow_bit = 0;
650 byte_shift = bits / CHAR_BIT;
651 bit_shift = bits % CHAR_BIT;
652 _Pragma( "loopbound min 0 max 3" )
653 for ( byte_number = ( byte_shift >= size ? 0 : size - byte_shift );
654 byte_number < size; byte_number++ )
655 if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) {
656 ammunition_overflow_bit = 1;
657 break;
658 }
659 if ( byte_shift >= size )
660 ammunition_memset ( result,
661 ( operand_sign ? UCHAR_MAX : 0 ), ( size_x ) size );
662 else {
663 ammunition_memmove ( ( char * ) result + byte_shift, operand,
664 ( size_x ) ( size - byte_shift ) );
665 ammunition_memset ( result, ( operand_sign ? UCHAR_MAX : 0 ),
666 ( size_x ) byte_shift );
667 if ( bit_shift == 0 )
668 return;
669 carry = ( ( ( operand_sign ? UCHAR_MAX : 0 ) << ( CHAR_BIT - bit_shift ) )
670 & UCHAR_MAX );
671 _Pragma( "loopbound min 3 max 3" )
672 for ( byte_number = byte_shift; byte_number < size; byte_number++ ) {
673 byte = ( ( unsigned char * ) result ) [byte_number];
674 ( ( unsigned char * ) result ) [byte_number]
675 = carry | ( byte >> bit_shift );
676 carry = ( byte << ( CHAR_BIT - bit_shift ) ) & UCHAR_MAX;
677 }
678 if ( carry != 0 )
679 ammunition_overflow_bit = 1;
680 }
681 if ( ammunition_overflow_bit )
682 ammunition_arithmetic_overflow_reaction();
683 }
684}
685
686/* This function makes left shift of unsigned integer of given size on
687 given number of bits. If number of bits is negative the function
688 makes shift to left actually with the aid of function
689 `unsigned_integer_shift_right'. The function fixes overflow when
690 result can not be represented by number of given size, i.e. i.e. in
691 other words the opposite shift (to right) results in number not
692 equal to source operand. Result can be placed in operand. */
693
694void
695ammunition_unsigned_integer_shift_left ( int size, const void *operand,
696 int bits, void *result )
697{
698 int byte_number;
699 unsigned byte;
700 unsigned carry;
701 int bit_shift;
702 int byte_shift;
703
704 if ( bits < 0 )
705 ammunition_unsigned_integer_shift_right ( size, operand, -bits, result );
706 else {
707 ammunition_overflow_bit = 0;
708 byte_shift = bits / CHAR_BIT;
709 bit_shift = bits % CHAR_BIT;
710 _Pragma( "loopbound min 0 max 2" )
711 for ( byte_number = 0; byte_number < byte_shift && byte_number < size;
712 byte_number++ )
713 if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) {
714 ammunition_overflow_bit = 1;
715 break;
716 }
717 if ( byte_shift >= size )
718 ammunition_memset ( result, 0, ( size_x ) size );
719 else {
720 ammunition_memmove ( result, ( char * ) operand + byte_shift,
721 ( size_x ) ( size - byte_shift ) );
722 ammunition_memset ( ( char * ) result + ( size - byte_shift ), 0,
723 ( size_x ) byte_shift );
724 if ( bit_shift == 0 )
725 return;
726 _Pragma( "loopbound min 2 max 3" )
727 for ( byte_number = size - byte_shift - 1, carry = 0;
728 byte_number >= 0; byte_number-- ) {
729 byte = ( ( unsigned char * ) result ) [byte_number];
730 ( ( unsigned char * ) result ) [byte_number]
731 = carry | ( byte << bit_shift );
732 carry = byte >> ( CHAR_BIT - bit_shift );
733 }
734 if ( carry != 0 )
735 ammunition_overflow_bit = 1;
736 }
737 if ( ammunition_overflow_bit )
738 ammunition_arithmetic_unsigned_overflow_reaction();
739 }
740}
741
742/* This function makes left arithmetic shift of integer of given size
743 on given number of bits. If number of bits is negative the
744 function makes shift to left actually with the aid of function
745 `integer_shift_right'. The function fixes overflow when result can
746 not be represented by number of given size, i.e. in other words the
747 opposite shift (to right) results in number not equal to source
748 operand. Result can be placed in operand. */
749
750void
751ammunition_integer_shift_left ( int size, const void *operand, int bits,
752 void *result )
753{
754 int byte_number;
755 unsigned byte;
756 unsigned carry;
757 int bit_shift;
758 int byte_shift;
759 int operand_sign;
760
761 if ( bits < 0 )
762 ammunition_integer_shift_right ( size, operand, -bits, result );
763 else {
764 operand_sign = INTEGER_SIGN ( operand );
765 ammunition_overflow_bit = 0;
766 byte_shift = bits / CHAR_BIT;
767 bit_shift = bits % CHAR_BIT;
768 _Pragma( "loopbound min 0 max 2" )
769 for ( byte_number = 0; byte_number < byte_shift && byte_number < size;
770 byte_number++ )
771 if ( ( ( unsigned char * ) operand ) [byte_number]
772 != ( operand_sign ? UCHAR_MAX : 0 ) ) {
773 ammunition_overflow_bit = 1;
774 break;
775 }
776 if ( byte_shift >= size )
777 ammunition_memset ( result, 0, ( size_x ) size );
778 else {
779 ammunition_memmove ( result, ( char * ) operand + byte_shift,
780 ( size_x ) ( size - byte_shift ) );
781 ammunition_memset ( ( char * ) result + ( size - byte_shift ), 0,
782 ( size_x ) byte_shift );
783 if ( bit_shift == 0 )
784 return;
785 _Pragma( "loopbound min 2 max 3" )
786 for ( byte_number = size - byte_shift - 1, carry = 0;
787 byte_number >= 0; byte_number-- ) {
788 byte = ( ( unsigned char * ) result ) [byte_number];
789 ( ( unsigned char * ) result ) [byte_number]
790 = carry | ( byte << bit_shift );
791 carry = byte >> ( CHAR_BIT - bit_shift );
792 }
793 if ( carry != ( ( unsigned ) ( operand_sign ? UCHAR_MAX : 0 )
794 >> ( CHAR_BIT - bit_shift ) ) )
795 ammunition_overflow_bit = 1;
796 }
797 if ( operand_sign != INTEGER_SIGN ( result ) )
798 ammunition_overflow_bit = 1;
799 if ( ammunition_overflow_bit )
800 ammunition_arithmetic_overflow_reaction();
801 }
802}
803
804
805
806/* This page contains functions for bitwise operations of arbitrary
807 precision numbers. */
808
809/* This function makes bitwise `or' of two integers of given size. */
810
811void
812ammunition_integer_or ( int size, const void *op1, const void *op2,
813 void *result )
814{
815 int byte_number;
816
817 _Pragma( "loopbound min 4 max 4" )
818 for ( byte_number = 0; byte_number < size; byte_number++ ) {
819 ( ( unsigned char * ) result ) [byte_number]
820 = ( ( unsigned char * ) op1 ) [byte_number]
821 | ( ( unsigned char * ) op2 ) [byte_number];
822 }
823}
824
825/* This function makes bitwise `or' of two unsigned integers of given
826 size. */
827
828void
829ammunition_unsigned_integer_or ( int size, const void *op1, const void *op2,
830 void *result )
831{
832 ammunition_integer_or ( size, op1, op2, result );
833}
834
835
836/* This function makes bitwise `and' of two integers of given size. */
837
838void
839ammunition_integer_and ( int size, const void *op1, const void *op2,
840 void *result )
841{
842 int byte_number;
843
844 _Pragma( "loopbound min 4 max 4" )
845 for ( byte_number = 0; byte_number < size; byte_number++ ) {
846 ( ( unsigned char * ) result ) [byte_number]
847 = ( ( unsigned char * ) op1 ) [byte_number]
848 & ( ( unsigned char * ) op2 ) [byte_number];
849 }
850}
851
852/* This function makes bitwise `and' of two unsigned integers of given
853 size. */
854
855void
856ammunition_unsigned_integer_and ( int size, const void *op1, const void *op2,
857 void *result )
858{
859 ammunition_integer_and ( size, op1, op2, result );
860}
861
862
863/* This function makes bitwise `not' of integer of given size. */
864
865void
866ammunition_integer_not ( int size, const void *operand, void *result )
867{
868 int byte_number;
869
870 _Pragma( "loopbound min 4 max 4" )
871 for ( byte_number = 0; byte_number < size; byte_number++ ) {
872 ( ( unsigned char * ) result ) [byte_number]
873 = ( ( unsigned char * ) operand ) [byte_number] ^ UCHAR_MAX;
874 }
875}
876
877/* This function makes bitwise `not' of unsigned integer of given
878 size. */
879
880void
881ammunition_unsigned_integer_not ( int size, const void *operand, void *result )
882{
883 ammunition_integer_not ( size, operand, result );
884}
885
886
887
888/* This page contains functions for comparison of arbitrary precision
889 numbers. */
890
891/* This function compares two unsigned integers of given size on
892 equality. The function returns 1 if unsigned integers are equal, 0
893 otherwise. */
894
895int
896ammunition_eq_unsigned_integer ( int size, const void *op1, const void *op2 )
897{
898 return ammunition_memcmp ( op1, op2, ( size_x ) size ) == 0;
899}
900
901/* This function compares two integers of given size on equality. The
902 function returns 1 if integers are equal, 0 otherwise. */
903
904int
905ammunition_eq_integer ( int size, const void *op1, const void *op2 )
906{
907 return ammunition_memcmp ( op1, op2, ( size_x ) size ) == 0;
908}
909
910/* This function compares two unsigned integers of given size on
911 inequality. The function returns 1 if unsigned integers are not
912 equal, 0 otherwise. */
913
914int
915ammunition_ne_unsigned_integer ( int size, const void *op1, const void *op2 )
916{
917 return ammunition_memcmp ( op1, op2, ( size_x ) size ) != 0;
918}
919
920/* This function compares two integers of given size on inequality.
921 The function returns 1 if integers are not equal, 0 otherwise. */
922
923int
924ammunition_ne_integer ( int size, const void *op1, const void *op2 )
925{
926 return ammunition_memcmp ( op1, op2, ( size_x ) size ) != 0;
927}
928
929
930/* This function compares two memory parts of given size on that the
931 first operand is greater than the second. The bytes are described
932 as unsigned. The function returns 1 if the first operand is
933 greater than the second, - 1 if the first operand is less than the
934 second, 0 otherwise. */
935
936int ammunition_bytes_comparison ( const void *op1, const void *op2, int size )
937{
938 const unsigned char *str1 = ( unsigned const char * )op1;
939 const unsigned char *str2 = ( unsigned const char * )op2;
940
941 _Pragma( "loopbound min 1 max 4" )
942 while ( size > 0 && *str1 == *str2 ) {
943 str1++;
944 str2++;
945 size--;
946 }
947 if ( size <= 0 )
948 return 0;
949 else
950 if ( *str1 > *str2 )
951 return 1;
952 else
953 return -1;
954}
955
956/* This function compares two unsigned integers of given size on that
957 the first operand is greater than the second. The function returns
958 1 if the first unsigned integer is greater than the second, 0
959 otherwise. */
960
961int
962ammunition_gt_unsigned_integer ( int size, const void *op1, const void *op2 )
963{
964 return ammunition_bytes_comparison ( op1, op2, size ) > 0;
965}
966
967/* This function compares two integers of given size on that the first
968 operand is greater than the second. The function returns 1 if the
969 first integer is greater than the second, 0 otherwise. */
970
971int ammunition_gt_integer ( int size, const void *op1, const void *op2 )
972{
973 if ( INTEGER_SIGN ( op1 ) == 0 ) {
974 if ( INTEGER_SIGN ( op2 ) == 0 )
975 return ammunition_bytes_comparison ( op1, op2, size ) > 0;
976 else
977 return 1; /* TRUE */
978 } else
979 if ( INTEGER_SIGN ( op2 ) == 0 )
980 return 0; /*FALSE*/
981 else
982 return ammunition_bytes_comparison ( op1, op2, size ) > 0;
983}
984
985/* This function compares two unsigned integers of given size on that
986 the first operand is less than the second. The function returns 1
987 if the first unsigned integer is less than the second, 0
988 otherwise. */
989
990int
991ammunition_lt_unsigned_integer ( int size, const void *op1, const void *op2 )
992{
993 return ammunition_bytes_comparison ( op1, op2, size ) < 0;
994}
995
996/* This function compares two integers of given size on that the first
997 operand is less than the second. The function returns 1 if the
998 first integer is less than the second, 0 otherwise. */
999
1000int
1001ammunition_lt_integer ( int size, const void *op1, const void *op2 )
1002{
1003 if ( INTEGER_SIGN ( op1 ) == 0 ) {
1004 if ( INTEGER_SIGN ( op2 ) == 0 )
1005 return ammunition_bytes_comparison ( op1, op2, size ) < 0;
1006 else
1007 return 0; /*FALSE*/
1008 } else
1009 if ( INTEGER_SIGN ( op2 ) == 0 )
1010 return 1; /* TRUE */
1011 else
1012 return ammunition_bytes_comparison ( op1, op2, size ) < 0;
1013}
1014
1015/* This function compares two unsigned integers of given size on that
1016 the first operand is greater than or equal to the second. The
1017 function returns 1 if the first unsigned integer is greater than or
1018 equal to the second, 0 otherwise. */
1019
1020int
1021ammunition_ge_unsigned_integer ( int size, const void *op1, const void *op2 )
1022{
1023 return ammunition_bytes_comparison ( op1, op2, size ) >= 0;
1024}
1025
1026/* This function compares two integers of given size on that the first
1027 operand is greater than or equal to the second. The function
1028 returns 1 if the first integer is greater than or equal to the
1029 second, 0 otherwise. */
1030
1031int
1032ammunition_ge_integer ( int size, const void *op1, const void *op2 )
1033{
1034 if ( INTEGER_SIGN ( op1 ) == 0 ) {
1035 if ( INTEGER_SIGN ( op2 ) == 0 )
1036 return ammunition_bytes_comparison ( op1, op2, size ) >= 0;
1037 else
1038 return 1; /* TRUE */
1039 } else
1040 if ( INTEGER_SIGN ( op2 ) == 0 )
1041 return 0; /*FALSE*/
1042 else
1043 return ammunition_bytes_comparison ( op1, op2, size ) >= 0;
1044}
1045
1046/* This function compares two unsigned integers of given size on that
1047 the first operand is less than or equal to the second. The
1048 function returns 1 if the first unsigned integer is less than or
1049 equal to the second, 0 otherwise. */
1050
1051int
1052ammunition_le_unsigned_integer ( int size, const void *op1, const void *op2 )
1053{
1054 return ammunition_bytes_comparison ( op1, op2, size ) <= 0;
1055}
1056
1057/* This function compares two integers of given size on that the first
1058 operand is less than or equal to the second. The function returns
1059 1 if the first integer is less than or equal to the second, 0
1060 otherwise. */
1061
1062int
1063ammunition_le_integer ( int size, const void *op1, const void *op2 )
1064{
1065 if ( INTEGER_SIGN ( op1 ) == 0 ) {
1066 if ( INTEGER_SIGN ( op2 ) == 0 )
1067 return ammunition_bytes_comparison ( op1, op2, size ) <= 0;
1068 else
1069 return 0; /*FALSE*/
1070 } else
1071 if ( INTEGER_SIGN ( op2 ) == 0 )
1072 return 1; /* TRUE */
1073 else
1074 return ammunition_bytes_comparison ( op1, op2, size ) <= 0;
1075}
1076
1077
1078
1079/* This page contains functions for changing size of arbitrary
1080 precision numbers. */
1081
1082/* The function changes size of unsigned integer. The function fixes
1083 overflow when result can not be represented by number of given
1084 size. Result can be placed in operand. */
1085
1086void
1087ammunition_change_unsigned_integer_size ( int operand_size, const void *operand,
1088 int result_size, void *result )
1089{
1090 int operand_digit_number;
1091
1092 ammunition_overflow_bit = 0;
1093 if ( operand_size <= result_size ) {
1094 ammunition_memmove ( ( char * ) result + result_size - operand_size,
1095 operand, ( size_x ) operand_size );
1096 ammunition_memset ( result, 0, ( size_x ) ( result_size - operand_size ) );
1097 } else {
1098 _Pragma( "loopbound min 2 max 2" )
1099 for ( operand_digit_number = 0;
1100 operand_digit_number < operand_size - result_size;
1101 operand_digit_number++ ) {
1102 if ( ( ( unsigned char * ) operand ) [operand_digit_number] != 0 ) {
1103 ammunition_overflow_bit = 1;
1104 break;
1105 }
1106 }
1107 ammunition_memmove ( result,
1108 ( char * ) operand + operand_size - result_size,
1109 ( size_x ) result_size );
1110 }
1111 if ( ammunition_overflow_bit )
1112 ammunition_arithmetic_unsigned_overflow_reaction();
1113}
1114
1115/* The function changes size of integer. The function fixes overflow
1116 when result can not be represented by number of given size. Result
1117 can be placed in operand. */
1118
1119void
1120ammunition_change_integer_size ( int operand_size, const void *operand,
1121 int result_size, void *result )
1122{
1123 int operand_digit_number;
1124 int operand_sign;
1125
1126 ammunition_overflow_bit = 0;
1127 operand_sign = INTEGER_SIGN ( operand );
1128 if ( operand_size <= result_size ) {
1129 ammunition_memmove ( ( char * ) result + result_size - operand_size,
1130 operand, ( size_x ) operand_size );
1131 ammunition_memset ( result, ( operand_sign ? UCHAR_MAX : 0 ),
1132 ( size_x ) ( result_size - operand_size ) );
1133 } else {
1134 _Pragma( "loopbound min 2 max 2" )
1135 for ( operand_digit_number = 0;
1136 operand_digit_number < operand_size - result_size;
1137 operand_digit_number++ ) {
1138 if ( ( ( unsigned char * ) operand ) [operand_digit_number]
1139 != ( operand_sign ? UCHAR_MAX : 0 ) ) {
1140 ammunition_overflow_bit = 1;
1141 break;
1142 }
1143 }
1144 ammunition_memmove ( result,
1145 ( char * ) operand + operand_size - result_size,
1146 ( size_x ) result_size );
1147 if ( operand_sign != INTEGER_SIGN ( result ) )
1148 ammunition_overflow_bit = 1;
1149 }
1150 if ( ammunition_overflow_bit )
1151 ammunition_arithmetic_overflow_reaction();
1152}
1153
1154
1155
1156/* This page contains functions for conversion of arbitrary precision
1157 numbers to ascii representation. */
1158
1159/* This function transforms unsigned integer of given size to BASE
1160 ascii representation. BASE should be between 2 and 36 including
1161 them. Digits more 9 are represented by 'a', 'b' etc. Sign is
1162 absent in result string. The function returns the result
1163 string. */
1164
1165char *
1166ammunition_unsigned_integer_to_based_string ( int size, const void *operand,
1167 int base,
1168 char *result )
1169{
1170 int digit_num;
1171 int i;
1172 unsigned long divisable;
1173 unsigned long remainder;
1174 int nonzero_flag;
1175 int length;
1176 int temporary;
1177 unsigned char operand_copy [MAX_INTEGER_OPERAND_SIZE];
1178
1179 ammunition_memcpy ( operand_copy, operand, ( size_x ) size );
1180 length = 0;
1181 _Pragma( "loopbound min 1 max 10" )
1182 do {
1183 nonzero_flag = 0 /* FALSE */;
1184 _Pragma( "loopbound min 2 max 6" )
1185 for ( digit_num = 0, remainder = 0; digit_num < size; digit_num++ ) {
1186 divisable = remainder * ( UCHAR_MAX + 1 ) + operand_copy [digit_num];
1187 remainder = divisable % base;
1188 operand_copy [digit_num] = ( unsigned char ) ( divisable / base );
1189 if ( operand_copy [digit_num] != 0 )
1190 nonzero_flag = 1 /* TRUE */;
1191 }
1192 result [length++] = ( unsigned char ) ( remainder < 10 ? '0' + remainder
1193 : 'a' + remainder - 10 );
1194 } while ( nonzero_flag );
1195 result [length] = '\0';
1196 _Pragma( "loopbound min 0 max 5" )
1197 for ( i = 0; i < length / 2; i++ ) {
1198 temporary = result [i];
1199 result [i] = result [length - i - 1];
1200 result [length - i - 1] = temporary;
1201 }
1202 return result;
1203}
1204
1205
1206/* This function transforms unsigned integer of given size to decimal
1207 ascii representation. Sign is absent in result string. The
1208 function returns the result string. */
1209
1210char *
1211ammunition_unsigned_integer_to_string ( int size, const void *operand,
1212 char *result )
1213{
1214 return ammunition_unsigned_integer_to_based_string ( size, operand, 10,
1215 result );
1216}
1217
1218
1219/* This function transforms integer of given size to BASE ascii
1220 representation. BASE should be between 2 and 36 including them.
1221 Digits more 9 are represented by 'a', 'b' etc. Sign is present in
1222 result string only for negative numbers. The function returns the
1223 result string. */
1224
1225char *
1226ammunition_integer_to_based_string ( int size, const void *operand, int base,
1227 char *result )
1228{
1229 unsigned char operand_copy [MAX_INTEGER_OPERAND_SIZE];
1230
1231 if ( !INTEGER_SIGN ( operand ) )
1232 return ammunition_unsigned_integer_to_based_string ( size, operand, base,
1233 result );
1234 ammunition_memcpy ( operand_copy, operand, ( size_x ) size );
1235 /* May be integer overflow. But result is correct because it is unsigned. */
1236 ammunition_make_complementary_code ( size, operand_copy, operand_copy );
1237 *result = '-';
1238 ammunition_unsigned_integer_to_based_string ( size, operand_copy, base,
1239 result + 1 );
1240 return result;
1241}
1242
1243
1244
1245/* This function transforms integer of given size to decimal ascii
1246 representation. Sign is present in result string only for negative
1247 numbers. The function returns the result string. */
1248
1249char *
1250ammunition_integer_to_string ( int size, const void *operand, char *result )
1251{
1252 return ammunition_integer_to_based_string ( size, operand, 10, result );
1253}
1254
1255/* This page contains functions for conversion of decimal ascii
1256 representation to arbitrary precision numbers. */
1257
1258/* The function adds digit (byte size) to unsigned integer. The
1259 function returns 1 if unsigned integer overflow is fixed, 0
1260 otherwise. */
1261
1262int ammunition_add_digit_to_unsigned_integer_without_overflow_reaction
1263( int size, void *operand, unsigned int digit )
1264{
1265 int digit_num;
1266 unsigned int carry;
1267 unsigned int sum;
1268
1269 _Pragma( "loopbound min 4 max 4" )
1270 for ( digit_num = size - 1, carry = digit; digit_num >= 0;
1271 digit_num-- ) {
1272 sum = ( ( unsigned char * ) operand ) [digit_num] + carry;
1273 if ( sum > UCHAR_MAX ) {
1274 carry = sum / ( UCHAR_MAX + 1 );
1275 sum %= UCHAR_MAX + 1;
1276 } else
1277 carry = 0;
1278 ( ( unsigned char * ) operand ) [digit_num] = sum;
1279 }
1280 return carry != 0;
1281}
1282
1283/* This function transforms source string (decimal ascii
1284 representation without sign) to given size unsigned integer and
1285 returns pointer to first non digit in the source string through a
1286 parameter. If the string started with invalid integer
1287 representation the result will be zero and returns the operand
1288 through the parameter. The function returns 1 if unsigned integer
1289 overflow is fixed, 0 otherwise. */
1290
1291int ammunition_string_to_unsigned_integer_without_overflow_reaction
1292( int size, const char *operand, void *result, char **first_nondigit )
1293{
1294 int overflow_flag;
1295
1296 ammunition_memset ( result, 0, ( size_x ) size );
1297 _Pragma( "loopbound min 0 max 10" )
1298 for ( overflow_flag = 0; ammunition_isdigit ( *operand ); operand++ ) {
1299 overflow_flag
1300 = overflow_flag ||
1301 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
1302 ( size, result, 10 );
1303 overflow_flag
1304 = overflow_flag
1305 || ammunition_add_digit_to_unsigned_integer_without_overflow_reaction
1306 ( size, result, *operand - '0' );
1307 }
1308 *first_nondigit = ( char * ) operand;
1309 return overflow_flag;
1310}
1311
1312/* This function skips all white spaces at the begin of source string
1313 and transforms tail of the source string (decimal ascii
1314 representation without sign) to given size unsigned integer with
1315 the aid of function
1316 `string_to_unsigned_integer_without_overflow_reaction'. If the
1317 string started with invalid unsigned integer representation the
1318 result will be zero. The function fixes overflow when result can
1319 not be represented by number of given size. The function returns
1320 address of the first nondigit in the source string. */
1321
1322char *
1323ammunition_unsigned_integer_from_string ( int size, const char *operand,
1324 void *result )
1325{
1326 char *first_nondigit;
1327
1328 _Pragma( "loopbound min 0 max 0" )
1329 while ( ammunition_isspace ( *operand ) )
1330 operand++;
1331 ammunition_overflow_bit
1332 = ammunition_string_to_unsigned_integer_without_overflow_reaction
1333 ( size, operand, result, &first_nondigit );
1334 if ( ammunition_overflow_bit )
1335 ammunition_arithmetic_unsigned_overflow_reaction();
1336 return first_nondigit;
1337}
1338
1339/* This function skips all white spaces at the begin of source string
1340 and transforms tail of the source string (decimal ascii
1341 representation with possible sign `+' or `-') to given size integer
1342 with the aid of function
1343 `string_to_unsigned_integer_without_overflow_reaction'. If the
1344 string started with invalid integer representation the result will
1345 be zero. The function fixes overflow when result can not be
1346 represented by number of given size. the function returns Address
1347 of the first nondigit in the source string. */
1348
1349char *
1350ammunition_integer_from_string ( int size, const char *operand, void *result )
1351{
1352 int negative_number_flag;
1353 char *first_nondigit;
1354 int unsigned_result_sign;
1355
1356 _Pragma( "loopbound min 0 max 0" )
1357 while ( ammunition_isspace ( *operand ) )
1358 operand++;
1359 negative_number_flag = 0; /* FALSE */
1360 if ( *operand == '+' )
1361 operand++;
1362 else
1363 if ( *operand == '-' ) {
1364 operand++;
1365 negative_number_flag = 1; /* TRUE */
1366 }
1367 ammunition_overflow_bit
1368 = ammunition_string_to_unsigned_integer_without_overflow_reaction
1369 ( size, operand, result, &first_nondigit );
1370 unsigned_result_sign = INTEGER_SIGN ( result );
1371 if ( negative_number_flag )
1372 /* May be integer overflow when `result' is correct. But result
1373 is correct because it is unsigned. */
1374 ammunition_make_complementary_code ( size, result, result );
1375 ammunition_overflow_bit
1376 = ammunition_overflow_bit
1377 || ( unsigned_result_sign
1378 && ( !negative_number_flag
1379 || INTEGER_SIGN ( result ) != unsigned_result_sign ) );
1380 if ( ammunition_overflow_bit )
1381 ammunition_arithmetic_unsigned_overflow_reaction();
1382 return first_nondigit;
1383}
1384
diff --git a/all_pairs/source/ammunition/arithm.h b/all_pairs/source/ammunition/arithm.h
new file mode 100644
index 0000000..8ed78bf
--- /dev/null
+++ b/all_pairs/source/ammunition/arithm.h
@@ -0,0 +1,123 @@
1/*
2 FILE NAME: arithm.h
3
4 TITLE: Include file of package for arbitrary precision integer
5 arithmetic
6
7 DESCRIPTION: This header file contains ANSI C prototype definitions of
8 the package functions and definitions of external
9 variable of the package and C++ classes for arbitrary
10 precision integer arithmetic.
11
12*/
13
14
15#ifndef __ARITHMETIC__
16#define __ARITHMETIC__
17
18#include "ammunition_limits.h"
19
20
21/* This page contains definitions of variables and macros common for
22 all package functions. */
23
24/* The value of macro is suggested to be maximum length of integer operands
25 The length of use integers should be not greater than this value. */
26
27#define MAX_INTEGER_OPERAND_SIZE 128
28
29/* The following macro value is sign of integer number (0 or 1) given
30 as macro parameter. */
31
32#define INTEGER_SIGN(operand) (*(unsigned char *) (operand) >> (CHAR_BIT - 1))
33
34extern int ammunition_overflow_bit;
35
36extern void ammunition_add_unsigned_integer ( int size, const void *op1,
37 const void *op2,
38 void *result );
39extern void ammunition_add_integer ( int size, const void *op1, const void *op2,
40 void *result );
41extern void ammunition_subtract_unsigned_integer ( int size, const void *op1,
42 const void *op2, void *result );
43extern void ammunition_subtract_integer ( int size, const void *op1,
44 const void *op2,
45 void *result );
46extern void ammunition_multiply_unsigned_integer ( int size, const void *op1,
47 const void *op2, void *result );
48extern void ammunition_multiply_integer ( int size, const void *op1,
49 const void *op2,
50 void *result );
51extern void ammunition_divide_unsigned_integer ( int size, const void *op1,
52 const void *op2, void *result );
53extern void ammunition_divide_integer ( int size, const void *op1,
54 const void *op2,
55 void *result );
56extern void ammunition_unsigned_integer_remainder ( int size, const void *op1,
57 const void *op2, void *result );
58
59extern void ammunition_unsigned_integer_shift_right ( int size,
60 const void *operand,
61 int bits, void *result );
62extern void ammunition_integer_shift_right ( int size, const void *operand,
63 int bits, void *result );
64extern void ammunition_integer_shift_left ( int size, const void *operand,
65 int bits, void *result );
66extern void ammunition_unsigned_integer_shift_left ( int size,
67 const void *operand,
68 int bits, void *result );
69
70extern void ammunition_integer_or ( int size, const void *op1,
71 const void *op2, void *result );
72extern void ammunition_unsigned_integer_or ( int size, const void *op1,
73 const void *op2, void *result );
74extern void ammunition_integer_and ( int size, const void *op1,
75 const void *op2, void *result );
76extern void ammunition_unsigned_integer_and ( int size, const void *op1,
77 const void *op2, void *result );
78extern void ammunition_integer_not ( int size, const void *operand,
79 void *result );
80extern void ammunition_unsigned_integer_not ( int size, const void *operand,
81 void *result );
82
83extern int ammunition_eq_unsigned_integer ( int size, const void *op1,
84 const void *op2 );
85extern int ammunition_eq_integer ( int size, const void *op1, const void *op2 );
86extern int ammunition_ne_unsigned_integer ( int size, const void *op1,
87 const void *op2 );
88extern int ammunition_ne_integer ( int size, const void *op1, const void *op2 );
89extern int ammunition_gt_unsigned_integer ( int size, const void *op1,
90 const void *op2 );
91extern int ammunition_gt_integer ( int size, const void *op1, const void *op2 );
92extern int ammunition_lt_unsigned_integer ( int size, const void *op1,
93 const void *op2 );
94extern int ammunition_lt_integer ( int size, const void *op1, const void *op2 );
95extern int ammunition_ge_unsigned_integer ( int size, const void *op1,
96 const void *op2 );
97extern int ammunition_ge_integer ( int size, const void *op1, const void *op2 );
98extern int ammunition_le_unsigned_integer ( int size, const void *op1,
99 const void *op2 );
100extern int ammunition_le_integer ( int size, const void *op1, const void *op2 );
101
102extern void ammunition_change_unsigned_integer_size
103( int operand_size, const void *operand, int result_size, void *result );
104extern void ammunition_change_integer_size ( int operand_size,
105 const void *operand,
106 int result_size, void *result );
107
108extern char *ammunition_unsigned_integer_to_string ( int size,
109 const void *operand,
110 char *result );
111extern char *ammunition_integer_to_string ( int size, const void *operand,
112 char *result );
113
114extern char *ammunition_unsigned_integer_from_string ( int size,
115 const char *operand,
116 void *result );
117extern char *ammunition_integer_from_string ( int size, const char *operand,
118 void *result );
119
120char ammunition_isdigit( unsigned char c );
121int ammunition_isspace( int c );
122
123#endif /* #ifndef __ARITHMETIC__ */
diff --git a/all_pairs/source/ammunition/bits.c b/all_pairs/source/ammunition/bits.c
new file mode 100644
index 0000000..9169656
--- /dev/null
+++ b/all_pairs/source/ammunition/bits.c
@@ -0,0 +1,313 @@
1/*
2
3 FILE NAME: bits.c
4
5 TITLE: Package for work with bits
6
7 DESCRIPTION: This file implements functions of the package for work
8 with bit strings. A bit is given by address (start address) of
9 byte from which counting bits starts and its displacement which
10 is any non negative number of bit from the start address. The
11 most significant bit of the start address byte has number 0.
12 The bit string is given by its first bit and its length in
13 bits.
14
15*/
16
17#include "bits.h"
18
19/* This function determines that given bit string contains only zero
20 bits. The function retruns TRUE if all bits of given bit string
21 are zero or `bit_length' <= 0. Value of `bit_displacement' must be
22 non-negative and can be greater than CHAR_BIT. */
23
24int
25ammunition_is_zero_bit_string ( const void *start_byte, int bit_displacement,
26 int bit_length )
27{
28 const unsigned char *current_byte = ( unsigned const char * )start_byte;
29
30 if ( bit_length <= 0 )
31 return 1 /* TRUE */;
32 current_byte += bit_displacement / CHAR_BIT;
33 bit_displacement %= CHAR_BIT;
34 if ( bit_length < CHAR_BIT - bit_displacement )
35 return ( ( ( *current_byte << bit_displacement )
36 & ( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) )
37 & UCHAR_MAX ) == 0;
38 else
39 if ( bit_displacement != 0 ) {
40 if ( ( ( *current_byte << bit_displacement ) & UCHAR_MAX ) != 0 )
41 return 0 /* FALSE */;
42 current_byte += 1;
43 bit_length -= CHAR_BIT - bit_displacement;
44 }
45 _Pragma( "loopbound min 0 max 7" )
46 while ( bit_length >= CHAR_BIT ) {
47 if ( *current_byte != 0 )
48 return 0 /* FALSE */;
49 current_byte++;
50 bit_length -= CHAR_BIT;
51 }
52 if ( bit_length > 0 && ( *current_byte >> ( CHAR_BIT - bit_length ) ) != 0 )
53 return 0 /* FALSE */;
54 return 1 /* TRUE */;
55}
56
57/* This function sets up new value of all bits of given bit string.
58 This function is analog of standard C function `memset'. Value of
59 `bit_displacement' must be non-negative and can be greater than
60 CHAR_BIT. */
61
62void
63ammunition_bit_string_set ( void *start_byte, int bit_displacement, int bit,
64 int bit_length )
65{
66 unsigned char *current_byte = ( unsigned char * )start_byte;
67 unsigned char filling_byte;
68 int mask;
69
70 if ( bit_length <= 0 )
71 return ;
72 bit = bit != 0; /* 1 or 0 */
73 filling_byte = ( bit ? UCHAR_MAX : 0 );
74 current_byte += bit_displacement / CHAR_BIT;
75 bit_displacement %= CHAR_BIT;
76 if ( bit_displacement != 0 ) {
77 mask = UCHAR_MAX << ( CHAR_BIT - bit_displacement );
78 if ( bit_length < CHAR_BIT - bit_displacement )
79 mask |= UCHAR_MAX >> ( bit_displacement + bit_length );
80 *current_byte = ( *current_byte & mask ) | ( filling_byte & ~mask );
81 current_byte += 1;
82 bit_length -= CHAR_BIT - bit_displacement;
83 }
84 _Pragma( "loopbound min 0 max 8" )
85 while ( bit_length >= CHAR_BIT ) {
86 *current_byte = filling_byte;
87 current_byte++;
88 bit_length -= CHAR_BIT;
89 }
90 if ( bit_length > 0 )
91 *current_byte
92 = ( *current_byte & ~( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) )
93 | ( filling_byte & ( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) );
94}
95
96/* This function copys a bit string to another bit string. This
97 function is analog of standard C function `memcpy'. Values of
98 `to_bit_displacement' and `from_bit_displacement' must be
99 non-negative and can be greater than CHAR_BIT. The bit string must
100 be non-overlapped. */
101
102void
103ammunition_bit_string_copy ( void *to, int to_bit_displacement,
104 const void *from, int from_bit_displacement,
105 int bit_length )
106{
107 unsigned char *current_to_byte = ( unsigned char * )to;
108 const unsigned char *current_from_byte = ( unsigned const char * )from;
109 int byte;
110 int mask;
111
112 if ( bit_length <= 0 )
113 return ;
114 current_to_byte += to_bit_displacement / CHAR_BIT;
115 to_bit_displacement %= CHAR_BIT;
116 current_from_byte += from_bit_displacement / CHAR_BIT;
117 from_bit_displacement %= CHAR_BIT;
118 _Pragma( "loopbound min 1 max 8" )
119 while ( 1 ) {
120 byte = ( ( ( *current_from_byte << from_bit_displacement ) & UCHAR_MAX )
121 | ( from_bit_displacement != 0
122 && bit_length > ( CHAR_BIT - from_bit_displacement )
123 ? current_from_byte [1] >> ( CHAR_BIT - from_bit_displacement )
124 : 0 ) );
125 if ( bit_length <= CHAR_BIT )
126 break;
127 /* Shift is correct when to_bit_displacement == 0 because its
128 value is less than word bit size. */
129 *current_to_byte
130 = ( *current_to_byte
131 & ( UCHAR_MAX << ( CHAR_BIT - to_bit_displacement ) ) )
132 | ( byte >> to_bit_displacement );
133 if ( to_bit_displacement != 0 )
134 current_to_byte [1]
135 = ( current_to_byte [1] & ( UCHAR_MAX >> to_bit_displacement ) )
136 | ( byte << ( CHAR_BIT - to_bit_displacement ) );
137 bit_length -= CHAR_BIT;
138 current_from_byte++;
139 current_to_byte++;
140 }
141 /* Shift is correct when to_bit_displacement == 0 because its
142 value is less than word bit size. */
143 mask = ( ( UCHAR_MAX << ( CHAR_BIT - to_bit_displacement ) )
144 | ( UCHAR_MAX >> ( to_bit_displacement + bit_length ) ) );
145 *current_to_byte
146 = ( *current_to_byte & mask ) | ( ( byte >> to_bit_displacement ) & ~mask );
147 bit_length -= CHAR_BIT - to_bit_displacement;
148 if ( bit_length > 0 )
149 current_to_byte [1]
150 = ( current_to_byte [1] & ( UCHAR_MAX >> bit_length ) )
151 | ( ( byte << ( CHAR_BIT - to_bit_displacement ) )
152 & ( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) );
153}
154
155/* This function copys a bit string to another bit string. Copying
156 starts with the last bits of the bit strings. This function is
157 used by function `bit_string_move'. Values of
158 `to_bit_displacement' and `from_bit_displacement' must be
159 non-negative and can be greater than CHAR_BIT. The bit string must
160 be non-overlapped. */
161
162void ammunition_reverse_bit_string_copy ( void *to, int to_bit_displacement,
163 const void *from, int from_bit_displacement,
164 int bit_length )
165{
166 unsigned char *current_to_byte = ( unsigned char * )to;
167 const unsigned char *current_from_byte = ( unsigned const char * )from;
168 int byte;
169 int mask;
170
171 if ( bit_length <= 0 )
172 return ;
173 to_bit_displacement += bit_length - 1;
174 current_to_byte += to_bit_displacement / CHAR_BIT; /* last byte */
175 to_bit_displacement %= CHAR_BIT; /* last bit */
176 from_bit_displacement += bit_length - 1;
177 current_from_byte += from_bit_displacement / CHAR_BIT; /* last byte */
178 from_bit_displacement %= CHAR_BIT; /* last bit */
179 _Pragma( "loopbound min 1 max 8" )
180 while ( 1 ) {
181 /* Shift is correct when to_bit_displacement == 0 because its
182 value is less than word bit size. */
183 byte = ( ( *current_from_byte >> ( CHAR_BIT - 1 - from_bit_displacement ) )
184 | ( ( from_bit_displacement != CHAR_BIT - 1
185 && bit_length > from_bit_displacement + 1
186 ? current_from_byte [ -1 ] << ( from_bit_displacement + 1 )
187 : 0 )
188 & UCHAR_MAX ) );
189 if ( bit_length <= CHAR_BIT )
190 break;
191 /* Shift is correct when to_bit_displacement == 0 because its
192 value is less than word bit size. */
193 *current_to_byte
194 = ( *current_to_byte & ( UCHAR_MAX >> ( to_bit_displacement + 1 ) ) )
195 | ( byte << ( CHAR_BIT - 1 - to_bit_displacement ) );
196 if ( to_bit_displacement != CHAR_BIT - 1 )
197 current_to_byte [-1]
198 = ( current_to_byte [-1]
199 & ( UCHAR_MAX << ( CHAR_BIT - 1 - to_bit_displacement ) ) )
200 | ( byte >> ( to_bit_displacement + 1 ) );
201 bit_length -= CHAR_BIT;
202 current_from_byte--;
203 current_to_byte--;
204 }
205 /* Shift is correct when to_bit_displacement == 0 because its
206 value is less than word bit size. */
207 mask = ( ( UCHAR_MAX >> ( to_bit_displacement + 1 ) ) |
208 ( UCHAR_MAX << ( CHAR_BIT - 1 - to_bit_displacement
209 + bit_length ) ) );
210 *current_to_byte
211 = ( *current_to_byte & mask )
212 | ( ( byte << ( CHAR_BIT - 1 - to_bit_displacement ) ) & ~mask );
213 bit_length -= to_bit_displacement + 1;
214 if ( bit_length > 0 )
215 current_to_byte [-1]
216 = ( current_to_byte [-1] & ( UCHAR_MAX << bit_length ) )
217 | ( byte >> ( to_bit_displacement + 1 )
218 & ( UCHAR_MAX >> ( CHAR_BIT - bit_length ) ) );
219}
220
221/* This function copys a bit string to another bit string with the aid
222 of functions `bit_string_copy' and `reverse_bit_string_copy'. This
223 function is analog of standard C function `memmove'. Values of
224 `to_bit_displacement' and `from_bit_displacement' must be
225 non-negative and can be greater than CHAR_BIT. The bit string can
226 be overlapped. */
227
228void
229ammunition_bit_string_move ( void *to, int to_bit_displacement,
230 const void *from, int from_bit_displacement,
231 int bit_length )
232{
233 unsigned char *current_to_byte = ( unsigned char * )to;
234 const unsigned char *current_from_byte = ( unsigned const char * )from;
235
236 if ( bit_length <= 0 )
237 return ;
238 current_to_byte += to_bit_displacement / CHAR_BIT;
239 to_bit_displacement %= CHAR_BIT;
240 current_from_byte += from_bit_displacement / CHAR_BIT;
241 from_bit_displacement %= CHAR_BIT;
242 if ( current_from_byte > current_to_byte
243 || ( current_from_byte == current_to_byte
244 && from_bit_displacement > to_bit_displacement ) )
245 ammunition_bit_string_copy ( current_to_byte, to_bit_displacement,
246 current_from_byte, from_bit_displacement,
247 bit_length );
248 else
249 ammunition_reverse_bit_string_copy ( current_to_byte, to_bit_displacement,
250 current_from_byte,
251 from_bit_displacement, bit_length );
252}
253
254/* This function compares bit strings. This function is analog of
255 standard C function `memcmp'. The function returns 0 if the bit
256 strings are equal, 1 if the first bit string is greater than the
257 second, -1 if the first bit string is less than the first. Values
258 of `bit_displacement1' and `bit_displacement2' must be non-negative
259 and can be greater than CHAR_BIT. */
260
261int
262ammunition_bit_string_comparison ( const void *str1, int bit_displacement1,
263 const void *str2, int bit_displacement2,
264 int bit_length )
265{
266 const unsigned char *current_byte1 = ( unsigned const char * )str1;
267 const unsigned char *current_byte2 = ( unsigned const char * )str2;
268 int byte1;
269 int byte2;
270 int mask;
271
272 if ( bit_length <= 0 )
273 return 0;
274 current_byte1 += bit_displacement1 / CHAR_BIT;
275 bit_displacement1 %= CHAR_BIT;
276 current_byte2 += bit_displacement2 / CHAR_BIT;
277 bit_displacement2 %= CHAR_BIT;
278 _Pragma( "loopbound min 1 max 284" )
279 while ( 1 ) {
280 byte1 = ( ( ( *current_byte1 << bit_displacement1 ) & UCHAR_MAX )
281 | ( bit_displacement1 != 0
282 /* Shift is correct when to_bit_displacement == 0
283 because its value is less than word bit size. */
284 && bit_length > CHAR_BIT - bit_displacement1
285 ? current_byte1 [1] >> ( CHAR_BIT - bit_displacement1 )
286 : 0 ) );
287 byte2 = ( ( ( *current_byte2 << bit_displacement2 ) & UCHAR_MAX )
288 | ( bit_displacement2 != 0
289 && bit_length > CHAR_BIT - bit_displacement2
290 ? current_byte2 [1] >> ( CHAR_BIT - bit_displacement2 )
291 : 0 ) );
292 if ( bit_length <= CHAR_BIT )
293 break;
294 if ( byte1 > byte2 )
295 return 1;
296 else
297 if ( byte1 < byte2 )
298 return -1;
299 bit_length -= CHAR_BIT;
300 current_byte2++;
301 current_byte1++;
302 }
303 /* Shift is correct when to_bit_displacement == 0 because its value
304 is less than word bit size. */
305 mask = UCHAR_MAX << ( CHAR_BIT - bit_length );
306 if ( ( byte1 & mask ) > ( byte2 & mask ) )
307 return 1;
308 else
309 if ( ( byte1 & mask ) < ( byte2 & mask ) )
310 return -1;
311 else
312 return 0;
313}
diff --git a/all_pairs/source/ammunition/bits.h b/all_pairs/source/ammunition/bits.h
new file mode 100644
index 0000000..70cf8bd
--- /dev/null
+++ b/all_pairs/source/ammunition/bits.h
@@ -0,0 +1,60 @@
1/*
2 FILE NAME: bits.h
3
4 TITLE: Include file of package for work with bits
5
6 DESCRIPTION:
7 This is header file contains macros and the ANSI C prototype
8 definitions for the package for work with bits and bit strings
9 and C++ class for work with bits and bit strings. A bit is
10 given by address (start address) of byte from which counting
11 bits starts and its displacement which is any non negative
12 number of bit from the start address. The most significant bit
13 of the start address byte has number 0. The bit string is
14 given by its first bit and its length in bits.
15
16*/
17
18#ifndef __BITS__
19#define __BITS__
20
21#include "ammunition_limits.h"
22
23/* This macro value returns bit vlaue (0 or 1) with given bit
24 displacement (0, 1, ...). The macro has side effects! Value of
25 `bit_displacement' must be nonegative and can be greater than
26 CHAR_BIT. */
27
28#define BIT(start_byte, bit_displacement)\
29 ((((const char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
30 >> (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)) & 1)
31
32
33/* This macro value sets up new value (must be `0' or `1') of a given
34 bit (bit displacement starts with 0). The macro has side effects!
35 Value of `bit_displacement' must be nonegative and can be greater
36 than CHAR_BIT. */
37
38#define SET_BIT(start_byte, bit_displacement, bit)\
39 (((char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
40 = (((char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
41 & ~(1 << (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)))\
42 | ((bit) << (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)))
43
44int ammunition_is_zero_bit_string ( const void *start_byte,
45 int bit_displacement,
46 int bit_length );
47void ammunition_bit_string_set ( void *start_byte, int bit_displacement,
48 int bit,
49 int bit_length );
50void ammunition_bit_string_copy ( void *to, int to_bit_displacement,
51 const void *from, int from_bit_displacement,
52 int bit_length );
53void ammunition_bit_string_move ( void *to, int to_bit_displacement,
54 const void *from, int from_bit_displacement,
55 int bit_length );
56int ammunition_bit_string_comparison ( const void *str1, int bit_displacement1,
57 const void *str2, int bit_displacement2,
58 int bit_length );
59
60#endif /* #ifndef __BITS__ */
diff --git a/all_pairs/source/ammunition/gmon.out b/all_pairs/source/ammunition/gmon.out
new file mode 100644
index 0000000..2d07b7f
--- /dev/null
+++ b/all_pairs/source/ammunition/gmon.out
Binary files differ
diff --git a/all_pairs/source/ammunition/timeScript b/all_pairs/source/ammunition/timeScript
new file mode 100644
index 0000000..33ba812
--- /dev/null
+++ b/all_pairs/source/ammunition/timeScript
@@ -0,0 +1,8 @@
1#!/bin/bash
2startTime=$(date +%N)
3echo start time $startTime
4$1
5stopTime=$(date +%N)
6echo stop time $stopTime
7totalTime=`expr $stopTime - $startTime`
8echo total time $totalTime
diff --git a/all_pairs/source/anagram/ChangeLog.txt b/all_pairs/source/anagram/ChangeLog.txt
new file mode 100644
index 0000000..fdba1cc
--- /dev/null
+++ b/all_pairs/source/anagram/ChangeLog.txt
@@ -0,0 +1,125 @@
1File: anagram.c
2Original provenience: unknown
3Source: unknown
4
52017-04-18:
6- Annotated anagram_main as entry-point for timing analysis
7
82016-06-22:
9- Fixed type signature of function anagram_main to conform to TACLeBench
10 standard, i.e. `void anagram_main (void)`.
11
122016-05-24:
13- Changed type of global variables anagram_achPhrase and
14 anagram_dictionary to `char const *[]`.
15- Changed parameter type of function anagram_BuildMask to
16 `char const *`.
17
182016-04-26:
19- Fixed array out-of-bounds access introduced by earlier change.
20
212016-04-20:
22- Fixed some compiler warnings.
23- Return value of anagram_return depends on the computation inside
24 of anagram_main.
25
262016-03-22
27- Added forward declarations for all functions.
28- Renamed function main to anagram_main.
29- Added function anagram_init that calls anagram_ReadDict, removed
30 call to anagram_ReadDict from anagram_main.
31- Added function anagram_return that handles the return value.
32- Added new function main that first calls anagram_init,
33 then anagram_main and finally returns the return value of
34 anagram_return.
35- Added generic TACLeBench header to all files.
36- Introduced comments to split file in sections for type
37 definitions, forward declarations, global variables,
38 initialization-related and return-value-related functions,
39 core benchmark functions, and main routine.
40- Renamed ch2i, DICTWORDS, Quad, MASK_BITS, MAX_QUADS, MAXCAND,
41 MAXSOL, ALPHABET, Word, PWord, PPWord, apwCand, cpwCand, Letter,
42 PLetter, alPhrase, cchPhraseLength, aqMainMask, aqMainSign,
43 cchMinLength, auGlobalFrequency, achByFrequency, pchDictionary,
44 Reset, ReadDict, BuildMask, NewWord, NextWord, BuildWord,
45 AddWords, apwSol, cpwLast, OneStep, DumpWords, FindAnagram and
46 SortCandidates to anagram_ch2i, anagram_DICTWORDS, anagram_Quad,
47 anagram_MASK_BITS, anagram_MAX_QUADS, anagram_MAXCAND,
48 anagram_MAXSOL, anagram_ALPHABET, anagram_Word, anagram_PWord,
49 anagram_PPWord, anagram_apwCand, anagram_cpwCand, anagram_Letter,
50 anagram_PLetter, anagram_alPhrase, anagram_cchPhraseLength,
51 anagram_aqMainMask, anagram_aqMainSign, anagram_cchMinLength,
52 anagram_auGlobalFrequency, anagram_achByFrequency,
53 anagram_pchDictionary, anagram_Reset, anagram_ReadDict,
54 anagram_BuildMask, anagram_NewWord, anagram_NextWord,
55 anagram_BuildWord, anagram_AddWords, anagram_apwSol,
56 anagram_cpwLast, anagram_OneStep, anagram_DumpWords,
57 anagram_FindAnagram and anagram_SortCandidates.
58- Renamed swapi, pivot, qsorts, simulated_heap and freeHeapPos to
59 anagram_swapi, anagram_pivot, anagram_qsorts,
60 anagram_simulated_heap and anagram_freeHeapPos.
61- Renamed achPhrase and dictionary to anagram_achPhrase and
62 anagram_dictionary.
63- Renamed CompareFrequency to anagram_CompareFrequency.
64- Increased simulated heap in anagram_stdlib.c to 18000 bytes to
65 prevent segmentation fault.
66- Changed header guard _WCCMALLOC_H to ANAGRAM_STRINGS_H.
67- Renamed wccmalloc, wccbzero to anagram_malloc, anagram_bzero.
68- Moved declaration of anagram_malloc to header anagram_stdlib.h.
69- Introduced header guard ANAGRAM_CTYPE_H.
70- Renamed wccislower, wccisupper, wccisalpha, wcctolower to
71 anagram_islower, anagram_isupper, anagram_isalpha,
72 anagram_tolower.
73- Removed illegal keyword "inline".
74- Changed header guard _WCCSTDLIB_H to ANAGRAM_STDLIB_H.
75- Renamed wccqsort to anagram_qsort.
76- Fixed compiler warning "no previous extern declaration for
77 non-static variable" for variables simulated_heap and
78 freeHeapPos by declaring them static.
79- Renamed preprocessor define HEAP_SIZE to ANAGRAM_HEAP_SIZE.
80- Fixed compiler warning "no previous prototype for function" by
81 moving includes to the top of the file.
82- Fixed compiler warnings "implicit conversion changes signedness"
83 and "comparison of integers of different signs" by consistenly
84 using the type unsigned long in qsort helper functions.
85- Moved function CompareFrequency to file anagram.c, added
86 declaration for it in file anagram_compare.h and included it in
87 anagram_stdlib.h.
88- Fixed compiler warning "no previous extern declaration for
89 non-static variable" by adding forward declarations.
90- Fixed compiler warning "macro is not used" by removing unused
91 macros MAXWORDS and i2ch.
92- Replaced macro ch2i by proper function.
93- Fixed compiler warning "array subscript is of type 'char' in
94 function CompareFrequency.
95- Fixed compiler warning "unused variable" by removing variable i
96 in function Reset.
97- Fixed compiler warning "no previous extern declaration for
98 non-static variable" by making global variables in file
99 anagram.c static.
100- Replaced macro lPhrase by its expansion.
101- Fixed compiler warnings "implicit conversion loses integer
102 precision" and "implicit conversion changes signedness" by
103 adding explicit casts or using the appropriate type for local
104 variables.
105- Fixed compiler warning "array subscript is of type 'char'" by
106 changing type of some local variables as well as of global
107 variable achByFrequency to int.
108- Changed all //-style comments to /* */-style comments.
109- Moved contents of wccmalloc.c to anagram_stdlib.c.
110- Renamed input.c to anagram_input.c.
111- Renamed wccctype.h to anagram_ctype.h.
112- Renamed wccstdlib.c to anagram_stdlib.c.
113- Renamed wccstdlib.h to anagram_stdlib.h.
114- Renamed wccmalloc.h to anagram_strings.h.
115- Applied TACLeBench formatting rules via
116 astyle --options=doc/example/astylerc.txt
117- Tested conformance to C99 via
118 clang -fsyntax-only -Weverything -Wno-unknown-pragmas -Wno-padded -pedantic -std=c99
119
1202017-06-27
121- Remove static declarations.
122
1232017-07-10:
124- Adjust alignment calculation in anagram_malloc to not add padding on already
125 aligned addresses. This prevents a buffer overflow of anagram_simulated_heap.
diff --git a/all_pairs/source/anagram/anagram.c b/all_pairs/source/anagram/anagram.c
new file mode 100644
index 0000000..8f140a3
--- /dev/null
+++ b/all_pairs/source/anagram/anagram.c
@@ -0,0 +1,670 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram
7
8 Author: Raymond Chen
9
10 Function: A program that computes anagrams.
11
12 Source: See below.
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See below.
19
20*/
21
22/*
23 Anagram program by Raymond Chen,
24 inspired by a similar program by Brian Scearce
25
26 This program is Copyright 1991 by Raymond Chen.
27 (rjc@math.princeton.edu)
28
29 This program may be freely distributed provided all alterations
30 to the original are clearly indicated as such.
31*/
32
33/* There are two tricks. First is the Basic Idea:
34
35 When the user types in a phrase, the phrase is first preprocessed to
36 determine how many of each letter appears. A bit field is then constructed
37 dynamically, such that each field is large enough to hold the next power
38 of two larger than the number of times the character appears. For example,
39 if the phrase is hello, world, the bit field would be
40
41 00 00 00 000 000 00 00
42 d e h l o r w
43
44 The phrase hello, world, itself would be encoded as
45
46 01 01 01 011 010 01 01
47 d e h l o r w
48
49 and the word hollow would be encoded as
50
51 00 00 01 010 010 00 01
52 d e h l o r w
53
54 The top bit of each field is set in a special value called the sign.
55 Here, the sign would be
56
57 10 10 10 100 100 10 10
58 d e h l o r w
59
60
61 The reason for packing the values into a bit field is that the operation
62 of subtracting out the letters of a word from the current phrase can be
63 carried out in parallel. for example, subtracting the word hello from
64 the phrase hello, world, is merely
65
66 d e h l o r w
67 01 01 01 011 010 01 01 (dehllloorw)
68 - 00 00 01 010 010 00 01 (hlloow)
69 ========================
70 01 01 00 001 000 01 00 (delr)
71
72 Since none of the sign bits is set, the word fits, and we can continue.
73 Suppose the next word we tried was hood.
74
75 d e h l o r w
76 01 01 00 001 000 01 00 (delr)
77 - 01 00 01 000 010 00 00 (hood)
78 ========================
79 00 00 11 000 110 01 00
80 ^ ^
81 A sign bit is set. (Two, actually.) This means that hood does not
82 fit in delr, so we skip it and try another word. (Observe that
83 when a sign bit becomes set, it screws up the values for the letters to
84 the left of that bit, but that's not important.)
85
86 The inner loop of an anagram program is testing to see if a
87 word fits in the collection of untried letters. Traditional methods
88 keep an array of 26 integers, which are then compared in turn. This
89 means that there are 26 comparisons per word.
90
91 This method reduces the number of comparisons to MAX_QUAD, typically 2.
92 Instead of looping through an array, we merely perform the indicated
93 subtraction and test if any of the sign bits is set.
94*/
95
96/* The nuts and bolts:
97
98 The dictionary is loaded and preprocessed. The preprocessed dictionary
99 is a concatenation of copies of the structure:
100
101 struct dictword {
102 char bStructureSize; -- size of this structure
103 char cLetters; -- number of letters in the word
104 char achWord[]; -- the word itself (0-terminated)
105 }
106
107 Since this is a variable-sized structure, we keep its size in the structure
108 itself for rapid stepping through the table.
109
110 When a phrase is typed in, it is first preprocessed as described in the
111 Basic Idea. We then go through the dictionary, testing each word. If
112 the word fits in our phrase, we build the bit field for its frequency
113 table and add it to the list of candidates.
114*/
115
116/*
117 The Second Trick:
118
119 Before diving into our anagram search, we then tabulate how many times
120 each letter appears in our list of candidates, and sort the table, with
121 the rarest letter first.
122
123 We then do our anagram search.
124
125 Like most anagram programs, this program does a depth-first search.
126 Although most anagram programs do some sort of heuristics to decide what
127 order to place words in the list_of_candidates, the search itself proceeds
128 according to a greedy algorithm. That is, once you find a word that fits,
129 subtract it and recurse.
130
131 This anagram program exercises some restraint and does not march down
132 every branch that shows itself. Instead, it only goes down branches
133 that use the rarest unused letter. This helps to find dead ends faster.
134
135 FindAnagram(unused_letters, list_of_candidates) {
136 l = the rarest letter as yet unused
137 For word in list_of_candidates {
138 if word does not fit in unused_letters, go on to the next word.
139 if word does not contain l, defer.
140 FindAnagram(unused_letters - word, list_of_candidates[word,...])
141 }
142 }
143
144
145 The heuristic of the Second Trick can probably be improved. I invite
146 anyone willing to improve it to do so.
147*/
148
149/* Before compiling, make sure Quad and MASK_BITS are set properly. For best
150 results, make Quad the largest integer size supported on your machine.
151 So if your machine has long longs, make Quad an unsigned long long.
152 (I called it Quad because on most machines, the largest integer size
153 supported is a four-byte unsigned long.)
154
155 If you need to be able to anagram larger phrases, increase MAX_QUADS.
156 If you increase it beyond 4, you'll have to add a few more loop unrolling
157 steps to FindAnagram.
158*/
159
160#include "../extra.h"
161#include "anagram_ctype.h"
162#include "anagram_stdlib.h"
163#include "anagram_strings.h"
164
165#include "anagram_compare.h"
166
167
168/*
169 Defines
170*/
171
172#define anagram_DICTWORDS 2279
173#define anagram_MASK_BITS 32 /* number of bits in a Quad */
174#define anagram_MAX_QUADS 2 /* controls largest phrase */
175#define anagram_MAXCAND 100 /* candidates */
176#define anagram_MAXSOL 51 /* words in the solution */
177#define anagram_ALPHABET 26 /* letters in the alphabet */
178
179#define anagram_OneStep( i ) \
180 if ( ( aqNext[ i ] = pqMask[ i ] - pw->aqMask[ i ] ) & anagram_aqMainSign[ i ] ) { \
181 ppwStart ++; \
182 continue; \
183 }
184
185
186/*
187 Type definitions
188*/
189
190typedef unsigned int anagram_Quad; /* for building our bit mask */
191
192/* A Word remembers the information about a candidate word. */
193typedef struct {
194 char *pchWord; /* the word itself */
195 anagram_Quad aqMask[ anagram_MAX_QUADS ]; /* the word's mask */
196 unsigned cchLength; /* letters in the word */
197 char padding[4];
198} anagram_Word;
199typedef anagram_Word *anagram_PWord;
200typedef anagram_Word **anagram_PPWord;
201
202/* A Letter remembers information about each letter in the phrase to
203 be anagrammed. */
204typedef struct {
205 unsigned uFrequency; /* how many times it appears */
206 unsigned uShift; /* how to mask */
207 unsigned uBits; /* the bit mask itself */
208 unsigned iq; /* which Quad to inspect? */
209} anagram_Letter;
210typedef anagram_Letter *anagram_PLetter;
211
212
213/*
214 Forward declaration of functions
215*/
216
217void anagram_init( void );
218void anagram_main( void );
219int anagram_return( void );
220int anagram_ch2i( int ch );
221void anagram_AddWords( void );
222void anagram_BuildMask( char const *pchPhrase );
223void anagram_BuildWord( char *pchWord );
224void anagram_DumpWords( void );
225void anagram_FindAnagram( anagram_Quad *pqMask,
226 anagram_PPWord ppwStart,
227 int iLetter );
228anagram_PWord anagram_NewWord( void );
229anagram_PWord anagram_NextWord( void );
230void anagram_ReadDict( void );
231void anagram_Reset( void );
232void anagram_SortCandidates( void );
233
234
235/*
236 Declaration of global variables
237*/
238
239extern char const *anagram_achPhrase[ 3 ];
240extern char const *anagram_dictionary[ anagram_DICTWORDS ];
241
242/* candidates we've found so far */
243static anagram_PWord anagram_apwCand[ anagram_MAXCAND ];
244/* how many of them? */
245static unsigned anagram_cpwCand;
246
247/* statistics on the current phrase */
248static anagram_Letter anagram_alPhrase[ anagram_ALPHABET ];
249
250/* number of letters in phrase */
251static int anagram_cchPhraseLength;
252
253/* the bit field for the full phrase */
254static anagram_Quad anagram_aqMainMask[ anagram_MAX_QUADS ];
255/* where the sign bits are */
256static anagram_Quad anagram_aqMainSign[ anagram_MAX_QUADS ];
257
258static const int anagram_cchMinLength = 3;
259
260/* auGlobalFrequency counts the number of times each letter appears,
261 summed over all candidate words. This is used to decide which letter
262 to attack first. */
263static unsigned anagram_auGlobalFrequency[ anagram_ALPHABET ];
264static int anagram_achByFrequency[ anagram_ALPHABET ]; /* for sorting */
265
266/* the dictionary is read here */
267static char *anagram_pchDictionary;
268
269/* the answers */
270static anagram_PWord anagram_apwSol[ anagram_MAXSOL ];
271static int anagram_cpwLast;
272
273/* buffer to write an answer */
274static char anagram_buffer[30];
275
276/*
277 Initialization- and return-value-related functions
278*/
279
280/* ReadDict -- read the dictionary file into memory and preprocess it
281
282 A word of length cch in the dictionary is encoded as follows:
283
284 byte 0 = cch + 3
285 byte 1 = number of letters in the word
286 byte 2... = the word itself, null-terminated
287
288 Observe that cch+3 is the length of the total encoding. These
289 byte streams are concatenated, and terminated with a 0.
290*/
291void anagram_ReadDict( void )
292{
293 char *pch;
294 char *pchBase;
295 unsigned len;
296 unsigned cWords = 0;
297 unsigned cLetters;
298 int i;
299 volatile char bitmask = 0;
300
301 len = 0;
302 _Pragma( "loopbound min 2279 max 2279" )
303 for ( i = 0; i < anagram_DICTWORDS; i ++ ) {
304 unsigned strlen = 0;
305 _Pragma( "loopbound min 1 max 5" )
306 while ( anagram_dictionary[ i ][ strlen ] != 0 )
307 strlen ++;
308 len += strlen + 2;
309 }
310
311 pchBase = anagram_pchDictionary = ( char * )anagram_malloc( len );
312
313 _Pragma( "loopbound min 2279 max 2279" )
314 for ( i = 0; i < anagram_DICTWORDS; i ++ ) {
315 int index = 0;
316 pch = pchBase + 2; /* reserve for length */
317 cLetters = 0;
318
319 _Pragma( "loopbound min 1 max 5" )
320 while ( anagram_dictionary[ i ][ index ] != '\0' ) {
321 if ( anagram_isalpha( anagram_dictionary[ i ][ index ] ) )
322 cLetters ++;
323 *pch ++ = anagram_dictionary[ i ][ index ];
324 index ++;
325 *( pch - 1 ) ^= bitmask;
326 }
327 *pch ++ = '\0';
328 *pchBase = ( char )( pch - pchBase );
329 pchBase[ 1 ] = ( char )cLetters;
330 pchBase = pch;
331 cWords ++;
332 }
333
334 *pchBase ++ = 0;
335}
336
337
338void anagram_init( void )
339{
340 anagram_ReadDict();
341}
342
343
344int anagram_return( void )
345{
346 int i;
347 char const *answer = "duke rip amy";
348
349 for ( i = 0; i < 12; i++ )
350 if ( answer[ i ] != anagram_buffer[ i ] )
351 return 1;
352
353 return 0;
354}
355
356
357/*
358 Core benchmark functions
359*/
360
361/* convert letter to index */
362int anagram_ch2i( int ch )
363{
364 return ch - 'a';
365}
366
367
368int anagram_CompareFrequency( char *pch1, char *pch2 )
369{
370 return anagram_auGlobalFrequency[ ( (int) *pch1 ) ] <
371 anagram_auGlobalFrequency[ ( (int) *pch2 ) ]
372 ? -1 :
373 anagram_auGlobalFrequency[ ( (int) *pch1 ) ] ==
374 anagram_auGlobalFrequency[ ( (int) *pch2 ) ]
375 ? 0 : 1;
376}
377
378
379void anagram_Reset( void )
380{
381 anagram_bzero( ( char * )anagram_alPhrase,
382 sizeof( anagram_Letter ) * anagram_ALPHABET );
383 anagram_bzero( ( char * )anagram_aqMainMask,
384 sizeof( anagram_Quad ) * anagram_MAX_QUADS );
385 anagram_bzero( ( char * )anagram_aqMainSign,
386 sizeof( anagram_Quad ) * anagram_MAX_QUADS );
387 anagram_bzero( ( char * )anagram_auGlobalFrequency,
388 sizeof( unsigned ) * anagram_ALPHABET );
389 anagram_bzero( ( char * )anagram_achByFrequency,
390 sizeof( int ) * anagram_ALPHABET );
391 anagram_bzero( ( char * )anagram_apwCand,
392 sizeof( anagram_PWord ) * anagram_MAXCAND );
393 anagram_cchPhraseLength = 0;
394 anagram_cpwCand = 0;
395}
396
397
398void anagram_BuildMask( char const *pchPhrase )
399{
400 int i;
401 int ch;
402 unsigned iq; /* which Quad? */
403 unsigned int cbtUsed; /* bits used in the current Quad */
404 unsigned int cbtNeed; /* bits needed for current letter */
405 anagram_Quad qNeed; /* used to build the mask */
406
407 /* Tabulate letter frequencies in the phrase */
408 anagram_cchPhraseLength = 0;
409 _Pragma( "loopbound min 11 max 12" )
410 while ( ( ch = *pchPhrase ++ ) != '\0' ) {
411 if ( anagram_isalpha( ch ) ) {
412 ch = anagram_tolower( ch );
413 anagram_alPhrase[ anagram_ch2i( ch ) ].uFrequency ++;
414 anagram_cchPhraseLength ++;
415 }
416 }
417
418 /* Build masks */
419 iq = 0; /* which quad being used */
420 cbtUsed = 0; /* bits used so far */
421
422 _Pragma( "loopbound min 26 max 26" )
423 for ( i = 0; i < anagram_ALPHABET; i ++ ) {
424 if ( anagram_alPhrase[ i ].uFrequency == 0 ) {
425 anagram_auGlobalFrequency[ i ] = ~0u; /* to make it sort last */
426 } else {
427 anagram_auGlobalFrequency[ i ] = 0u;
428 _Pragma( "loopbound min 1 max 2" )
429 for ( cbtNeed = 1, qNeed = 1;
430 anagram_alPhrase[ i ].uFrequency >= qNeed;
431 cbtNeed ++, qNeed <<= 1 )
432 ;
433 if ( cbtUsed + cbtNeed > anagram_MASK_BITS )
434 cbtUsed = 0;
435 anagram_alPhrase[ i ].uBits = qNeed - 1;
436 if ( cbtUsed )
437 qNeed <<= cbtUsed;
438 anagram_aqMainSign[ iq ] |= qNeed;
439 anagram_aqMainMask[ iq ] |=
440 ( anagram_Quad )anagram_alPhrase[ i ].uFrequency << cbtUsed;
441 anagram_alPhrase[ i ].uShift = cbtUsed;
442 anagram_alPhrase[ i ].iq = iq;
443 cbtUsed += cbtNeed;
444 }
445 }
446}
447
448
449anagram_PWord anagram_NewWord( void )
450{
451 anagram_PWord pw;
452
453 pw = ( anagram_Word * )anagram_malloc( sizeof( anagram_Word ) );
454 return pw;
455}
456
457
458/* NextWord -- get another candidate entry, creating if necessary */
459anagram_PWord anagram_NextWord( void )
460{
461 anagram_PWord pw;
462 pw = anagram_apwCand[ anagram_cpwCand ++ ];
463 if ( pw != 0 )
464 return pw;
465 anagram_apwCand[ anagram_cpwCand - 1 ] = anagram_NewWord();
466 return anagram_apwCand[ anagram_cpwCand - 1 ];
467}
468
469
470/* BuildWord -- build a Word structure from an ASCII word
471 If the word does not fit, then do nothing. */
472void anagram_BuildWord( char *pchWord )
473{
474 unsigned char cchFrequency[ anagram_ALPHABET ];
475 int i;
476 char *pch = pchWord;
477 anagram_PWord pw;
478 unsigned int cchLength = 0;
479
480 anagram_bzero( ( char * )cchFrequency,
481 sizeof( unsigned char ) * anagram_ALPHABET );
482
483 /* Build frequency table */
484 _Pragma( "loopbound min 3 max 636" )
485 while ( ( i = *pch ++ ) != '\0' ) {
486 if ( !anagram_isalpha( i ) )
487 continue;
488 i = anagram_ch2i( anagram_tolower( i ) );
489 if ( ++ cchFrequency[ i ] > anagram_alPhrase[ i ].uFrequency )
490 return ;
491 ++ cchLength;
492 }
493
494 /* Update global count */
495 _Pragma( "loopbound min 26 max 26" )
496 for ( i = 0; i < anagram_ALPHABET; i ++ )
497 anagram_auGlobalFrequency[ i ] += cchFrequency[ i ];
498
499 /* Create a Word structure and fill it in, including building the
500 bitfield of frequencies. */
501 pw = anagram_NextWord();
502 anagram_bzero( ( char * )( pw->aqMask ),
503 sizeof( anagram_Quad ) * anagram_MAX_QUADS );
504
505 pw->pchWord = pchWord;
506 pw->cchLength = cchLength;
507 _Pragma( "loopbound min 26 max 26" )
508 for ( i = 0; i < anagram_ALPHABET; i ++ ) {
509 pw->aqMask[ anagram_alPhrase[i].iq ] |=
510 ( anagram_Quad )cchFrequency[ i ] << anagram_alPhrase[ i ].uShift;
511 }
512}
513
514
515/* AddWords -- build the list of candidates */
516void anagram_AddWords( void )
517{
518 char *pch = anagram_pchDictionary; /* walk through the dictionary */
519
520 anagram_cpwCand = 0;
521
522 _Pragma( "loopbound min 1967 max 1967" )
523 while ( *pch ) {
524 if ( ( pch[ 1 ] >= anagram_cchMinLength &&
525 pch[ 1 ] + anagram_cchMinLength <= anagram_cchPhraseLength )
526 || pch[ 1 ] == anagram_cchPhraseLength )
527 anagram_BuildWord( pch + 2 );
528 pch += *pch;
529 }
530}
531
532
533void anagram_DumpWords( void )
534{
535 int i, j;
536 int offset = 0;
537 _Pragma( "loopbound min 3 max 3" )
538 for ( i = 0; i < anagram_cpwLast; i ++ ) {
539 _Pragma( "loopbound min 3 max 5" )
540 for ( j = 0; anagram_apwSol[ i ]->pchWord[ j ] != '\0'; j ++ )
541 anagram_buffer[ offset + j ] = anagram_apwSol[ i ]->pchWord[ j ];
542 offset += j;
543
544 anagram_buffer[ offset ++ ] = ' ';
545 }
546 anagram_buffer[ offset ++ ] = '\0';
547}
548
549
550void anagram_FindAnagram( anagram_Quad *pqMask, anagram_PPWord ppwStart,
551 int iLetter )
552{
553 anagram_Quad aqNext[ anagram_MAX_QUADS ];
554 register anagram_PWord pw;
555 anagram_Quad qMask;
556 unsigned iq;
557 anagram_PPWord ppwEnd = &anagram_apwCand[ 0 ];
558 ppwEnd += anagram_cpwCand;
559
560 _Pragma( "loopbound min 1 max 7" )
561 while ( 1 ) {
562 iq = anagram_alPhrase[ anagram_achByFrequency[iLetter] ].iq;
563 qMask = anagram_alPhrase[ anagram_achByFrequency[iLetter] ].uBits <<
564 anagram_alPhrase[ anagram_achByFrequency[iLetter] ].uShift;
565 if ( pqMask[ iq ] & qMask )
566 break;
567 iLetter ++;
568 }
569
570 _Pragma( "loopbound min 0 max 114" )
571 while ( ppwStart < ppwEnd ) {
572 pw = *ppwStart;
573
574 #if anagram_MAX_QUADS > 0
575 anagram_OneStep( 0 );
576 #endif
577
578 #if anagram_MAX_QUADS > 1
579 anagram_OneStep( 1 );
580 #endif
581
582 #if anagram_MAX_QUADS > 2
583 anagram_OneStep( 2 );
584 #endif
585
586 #if anagram_MAX_QUADS > 3
587 anagram_OneStep( 3 );
588 #endif
589
590 #if anagram_MAX_QUADS > 4
591 @@"Add more unrolling steps here, please."@@
592 #endif
593
594 /* If the pivot letter isn't present, defer this word until later */
595 if ( ( pw->aqMask[ iq ] & qMask ) == 0 ) {
596 *ppwStart = *( -- ppwEnd );
597 *ppwEnd = pw;
598 continue;
599 }
600
601 /* If we get here, this means the word fits. */
602 anagram_apwSol[ anagram_cpwLast ++ ] = pw;
603 if ( anagram_cchPhraseLength -= pw->cchLength ) { /* recurse */
604 /* The recursive call scrambles the tail, so we have to be
605 pessimistic. */
606 ppwEnd = &anagram_apwCand[ 0 ];
607 ppwEnd += anagram_cpwCand;
608 anagram_FindAnagram( &aqNext[ 0 ], ppwStart, iLetter );
609 } else { /* found one */
610 anagram_DumpWords();
611 }
612 anagram_cchPhraseLength += pw->cchLength;
613 -- anagram_cpwLast;
614 ppwStart ++;
615 continue;
616 }
617}
618
619
620void anagram_SortCandidates( void )
621{
622 int i;
623
624 /* Sort the letters by frequency */
625 _Pragma( "loopbound min 26 max 26" )
626 for ( i = 0; i < anagram_ALPHABET; i ++ )
627 anagram_achByFrequency[ i ] = i;
628 anagram_qsort( anagram_achByFrequency, anagram_ALPHABET, sizeof( int ) );
629}
630
631
632void _Pragma( "entrypoint" ) anagram_main( void )
633{
634 int i;
635
636 _Pragma( "loopbound min 3 max 3" )
637 for ( i = 0; i < 3; i ++ ) {
638 anagram_Reset();
639 anagram_BuildMask( anagram_achPhrase[ i ] );
640 anagram_AddWords();
641 if ( anagram_cpwCand == 0 || anagram_cchPhraseLength == 0 )
642 continue;
643
644 anagram_cpwLast = 0;
645 anagram_SortCandidates();
646 _Pragma( "marker call_find" )
647 anagram_FindAnagram( anagram_aqMainMask, anagram_apwCand, 0 );
648 _Pragma( "flowrestriction 1*anagram_FindAnagram <= 51*call_find" )
649 }
650}
651
652
653/*
654 Main function
655*/
656
657int main(int argc, char **argv)
658{
659 SET_UP
660 //int jobsComplete;
661 //int maxJobs=100;
662 //for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
663 START_LOOP
664 anagram_init();
665 anagram_main();
666 STOP_LOOP
667 //}
668 WRITE_TO_FILE
669 return anagram_return();
670}
diff --git a/all_pairs/source/anagram/anagramTest.txt b/all_pairs/source/anagram/anagramTest.txt
new file mode 100644
index 0000000..21d58d8
--- /dev/null
+++ b/all_pairs/source/anagram/anagramTest.txt
@@ -0,0 +1,100 @@
1anagram none 7 none 100 992260 anagramTest 0 none
2anagram none 7 none 100 32657649 anagramTest 1 none
3anagram none 7 none 100 50 anagramTest 2 none
4anagram none 7 none 100 140726366772064 anagramTest 3 none
5anagram none 7 none 100 140332637564920 anagramTest 4 none
6anagram none 7 none 100 140332637511040 anagramTest 5 none
7anagram none 7 none 100 140726366771844 anagramTest 6 none
8anagram none 7 none 100 140726366772048 anagramTest 7 none
9anagram none 7 none 100 140332643575048 anagramTest 8 none
10anagram none 7 none 100 140724603453440 anagramTest 9 none
11anagram none 7 none 100 3 anagramTest 10 none
12anagram none 7 none 100 140724603453440 anagramTest 11 none
13anagram none 7 none 100 3 anagramTest 12 none
14anagram none 7 none 100 0 anagramTest 13 none
15anagram none 7 none 100 0 anagramTest 14 none
16anagram none 7 none 100 140332643726528 anagramTest 15 none
17anagram none 7 none 100 140726366772208 anagramTest 16 none
18anagram none 7 none 100 140332643575120 anagramTest 17 none
19anagram none 7 none 100 0 anagramTest 18 none
20anagram none 7 none 100 140332643725672 anagramTest 19 none
21anagram none 7 none 100 140726366772248 anagramTest 20 none
22anagram none 7 none 100 140332641512223 anagramTest 21 none
23anagram none 7 none 100 1 anagramTest 22 none
24anagram none 7 none 100 140332643575120 anagramTest 23 none
25anagram none 7 none 100 1 anagramTest 24 none
26anagram none 7 none 100 0 anagramTest 25 none
27anagram none 7 none 100 1 anagramTest 26 none
28anagram none 7 none 100 140332643725672 anagramTest 27 none
29anagram none 7 none 100 1 anagramTest 28 none
30anagram none 7 none 100 140332643723736 anagramTest 29 none
31anagram none 7 none 100 0 anagramTest 30 none
32anagram none 7 none 100 0 anagramTest 31 none
33anagram none 7 none 100 140332643726528 anagramTest 32 none
34anagram none 7 none 100 140726366772064 anagramTest 33 none
35anagram none 7 none 100 7472231616 anagramTest 34 none
36anagram none 7 none 100 140726366772048 anagramTest 35 none
37anagram none 7 none 100 2090089586 anagramTest 36 none
38anagram none 7 none 100 4195443 anagramTest 37 none
39anagram none 7 none 100 4294967295 anagramTest 38 none
40anagram none 7 none 100 140332641470296 anagramTest 39 none
41anagram none 7 none 100 140332637550808 anagramTest 40 none
42anagram none 7 none 100 140332643573760 anagramTest 41 none
43anagram none 7 none 100 140332637522848 anagramTest 42 none
44anagram none 7 none 100 2118 anagramTest 43 none
45anagram none 7 none 100 140332643573760 anagramTest 44 none
46anagram none 7 none 100 140332637511040 anagramTest 45 none
47anagram none 7 none 100 140332637564920 anagramTest 46 none
48anagram none 7 none 100 140332641510987 anagramTest 47 none
49anagram none 7 none 100 2118 anagramTest 48 none
50anagram none 7 none 100 140332637564920 anagramTest 49 none
51anagram none 7 none 100 140332643573760 anagramTest 50 none
52anagram none 7 none 100 140726366772312 anagramTest 51 none
53anagram none 7 none 100 140726366772308 anagramTest 52 none
54anagram none 7 none 100 6316152 anagramTest 53 none
55anagram none 7 none 100 4196240 anagramTest 54 none
56anagram none 7 none 100 140726366773040 anagramTest 55 none
57anagram none 7 none 100 0 anagramTest 56 none
58anagram none 7 none 100 0 anagramTest 57 none
59anagram none 7 none 100 140726366772816 anagramTest 58 none
60anagram none 7 none 100 140332641532614 anagramTest 59 none
61anagram none 7 none 100 1 anagramTest 60 none
62anagram none 7 none 100 0 anagramTest 61 none
63anagram none 7 none 100 140332637564920 anagramTest 62 none
64anagram none 7 none 100 140332637550808 anagramTest 63 none
65anagram none 7 none 100 140726366772528 anagramTest 64 none
66anagram none 7 none 100 140332641566447 anagramTest 65 none
67anagram none 7 none 100 65280 anagramTest 66 none
68anagram none 7 none 100 0 anagramTest 67 none
69anagram none 7 none 100 3399988123389603631 anagramTest 68 none
70anagram none 7 none 100 3399988123389603631 anagramTest 69 none
71anagram none 7 none 100 0 anagramTest 70 none
72anagram none 7 none 100 0 anagramTest 71 none
73anagram none 7 none 100 -72057594037927936 anagramTest 72 none
74anagram none 7 none 100 -72057594037927936 anagramTest 73 none
75anagram none 7 none 100 6872211992017990772 anagramTest 74 none
76anagram none 7 none 100 8387223540636804214 anagramTest 75 none
77anagram none 7 none 100 0 anagramTest 76 none
78anagram none 7 none 100 0 anagramTest 77 none
79anagram none 7 none 100 0 anagramTest 78 none
80anagram none 7 none 100 0 anagramTest 79 none
81anagram none 7 none 100 0 anagramTest 80 none
82anagram none 7 none 100 0 anagramTest 81 none
83anagram none 7 none 100 1 anagramTest 82 none
84anagram none 7 none 100 0 anagramTest 83 none
85anagram none 7 none 100 1 anagramTest 84 none
86anagram none 7 none 100 140332643725672 anagramTest 85 none
87anagram none 7 none 100 0 anagramTest 86 none
88anagram none 7 none 100 140332643727104 anagramTest 87 none
89anagram none 7 none 100 10 anagramTest 88 none
90anagram none 7 none 100 -1 anagramTest 89 none
91anagram none 7 none 100 85603611 anagramTest 90 none
92anagram none 7 none 100 140726366778684 anagramTest 91 none
93anagram none 7 none 100 140726366773128 anagramTest 92 none
94anagram none 7 none 100 140726366772560 anagramTest 93 none
95anagram none 7 none 100 140726366772816 anagramTest 94 none
96anagram none 7 none 100 4196240 anagramTest 95 none
97anagram none 7 none 100 140726366773040 anagramTest 96 none
98anagram none 7 none 100 0 anagramTest 97 none
99anagram none 7 none 100 0 anagramTest 98 none
100anagram none 7 none 100 140332637720208 anagramTest 99 none
diff --git a/all_pairs/source/anagram/anagram_compare.h b/all_pairs/source/anagram/anagram_compare.h
new file mode 100644
index 0000000..31e869a
--- /dev/null
+++ b/all_pairs/source/anagram/anagram_compare.h
@@ -0,0 +1,27 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_compare.h
7
8 Author: Raymond Chen
9
10 Function: This header contains the comparison functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_COMPARE_H
23#define ANAGRAM_COMPARE_H
24
25int anagram_CompareFrequency( char *pch1, char *pch2 );
26
27#endif
diff --git a/all_pairs/source/anagram/anagram_ctype.h b/all_pairs/source/anagram/anagram_ctype.h
new file mode 100644
index 0000000..ebb8232
--- /dev/null
+++ b/all_pairs/source/anagram/anagram_ctype.h
@@ -0,0 +1,45 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_ctype.h
7
8 Author: Raymond Chen
9
10 Function: This header contains some C library functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_CTYPE_H
23#define ANAGRAM_CTYPE_H
24
25int anagram_islower( int c )
26{
27 return 'a' <= c && c <= 'z';
28}
29
30int anagram_isupper( int c )
31{
32 return 'A' <= c && c <= 'Z';
33}
34
35int anagram_isalpha( int c )
36{
37 return anagram_isupper( c ) || anagram_islower( c );
38}
39
40int anagram_tolower( int c )
41{
42 return anagram_isupper( c ) ? c + ( 'a' - 'A' ) : c;
43}
44
45#endif
diff --git a/all_pairs/source/anagram/anagram_input.c b/all_pairs/source/anagram/anagram_input.c
new file mode 100644
index 0000000..e3d5f71
--- /dev/null
+++ b/all_pairs/source/anagram/anagram_input.c
@@ -0,0 +1,2317 @@
1/*
2
3 This file is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_input.c
7
8 Author: Raymond Chen
9
10 Function: This file contains the input data used by anagram.
11
12 Source: anagram
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22/*
23 Forward declaration of global variables
24*/
25
26extern char const *anagram_achPhrase[ 3 ];
27extern char const *anagram_dictionary[ 2279 ];
28
29
30/*
31 Definition of global variables
32*/
33char const *anagram_achPhrase[ 3 ] = { "todd austin",
34 "john alledy",
35 "mary updike"
36 };
37
38char const *anagram_dictionary[ 2279 ] = { "2nd",
39 "4th",
40 "8th",
41 "a",
42 "ABA",
43 "aback",
44 "abash",
45 "abbas",
46 "abbey",
47 "abed",
48 "abet",
49 "abort",
50 "abut",
51 "Accra",
52 "ACM",
53 "acorn",
54 "Acts",
55 "Ada",
56 "adapt",
57 "added",
58 "addle",
59 "Adele",
60 "Aden",
61 "admix",
62 "adore",
63 "adult",
64 "affix",
65 "afire",
66 "aft",
67 "agate",
68 "agave",
69 "Agee",
70 "agent",
71 "agile",
72 "Agnew",
73 "agone",
74 "ahoy",
75 "Aida",
76 "aim",
77 "Ainu",
78 "airy",
79 "Ajax",
80 "Alamo",
81 "alarm",
82 "alb",
83 "Alcoa",
84 "alder",
85 "Aleck",
86 "alert",
87 "algae",
88 "alia",
89 "alike",
90 "alive",
91 "allay",
92 "alley",
93 "Allis",
94 "allow",
95 "ally",
96 "Allyn",
97 "aloe",
98 "aloha",
99 "along",
100 "aloud",
101 "also",
102 "alter",
103 "Alton",
104 "Alva",
105 "amaze",
106 "amber",
107 "ami",
108 "amigo",
109 "amiss",
110 "Amman",
111 "Amoco",
112 "amok",
113 "Amos",
114 "ample",
115 "amra",
116 "amy",
117 "Andes",
118 "angel",
119 "Angie",
120 "angry",
121 "Angus",
122 "Anne",
123 "annex",
124 "annoy",
125 "annul",
126 "ante",
127 "any",
128 "apex",
129 "apple",
130 "apron",
131 "apt",
132 "arch",
133 "argue",
134 "Aries",
135 "arm",
136 "army",
137 "aroma",
138 "array",
139 "arrow",
140 "Artie",
141 "arty",
142 "arum",
143 "a's",
144 "ash",
145 "ashen",
146 "ashy",
147 "askew",
148 "assai",
149 "Assam",
150 "Astor",
151 "ate",
152 "atlas",
153 "atone",
154 "audit",
155 "Aug",
156 "augur",
157 "auk",
158 "aural",
159 "avid",
160 "avoid",
161 "avow",
162 "awash",
163 "awe",
164 "awn",
165 "awry",
166 "axe",
167 "axial",
168 "axis",
169 "axon",
170 "Ayers",
171 "Aztec",
172 "b",
173 "babe",
174 "Bach",
175 "bad",
176 "bait",
177 "baldy",
178 "balm",
179 "balsa",
180 "bam",
181 "ban",
182 "bane",
183 "banjo",
184 "barb",
185 "barn",
186 "baron",
187 "basal",
188 "Basel",
189 "basil",
190 "bassi",
191 "baste",
192 "batch",
193 "Bates",
194 "batik",
195 "Bator",
196 "bawd",
197 "bay",
198 "bayed",
199 "bayou",
200 "be",
201 "beak",
202 "bean",
203 "beard",
204 "beat",
205 "beck",
206 "Becky",
207 "bed",
208 "bedim",
209 "bee",
210 "beech",
211 "beep",
212 "beet",
213 "befit",
214 "beg",
215 "begin",
216 "beige",
217 "Bela",
218 "belch",
219 "belt",
220 "beman",
221 "bench",
222 "Benny",
223 "bent",
224 "Benz",
225 "berth",
226 "beset",
227 "bet",
228 "betel",
229 "Bette",
230 "bevy",
231 "Bible",
232 "bide",
233 "big",
234 "bile",
235 "bilk",
236 "binge",
237 "bit",
238 "bite",
239 "black",
240 "blanc",
241 "bland",
242 "blare",
243 "blat",
244 "blaze",
245 "bled",
246 "blest",
247 "blind",
248 "Blinn",
249 "bliss",
250 "blitz",
251 "blob",
252 "blond",
253 "blood",
254 "bloom",
255 "blot",
256 "blown",
257 "blue",
258 "bluff",
259 "Blum",
260 "blur",
261 "board",
262 "boat",
263 "bock",
264 "bog",
265 "bogy",
266 "boil",
267 "Boise",
268 "bomb",
269 "bon",
270 "bong",
271 "bonus",
272 "bonze",
273 "booby",
274 "book",
275 "booky",
276 "boon",
277 "booze",
278 "bore",
279 "Boris",
280 "boron",
281 "Bosch",
282 "bosom",
283 "bound",
284 "bourn",
285 "bowel",
286 "boy",
287 "Boyce",
288 "bract",
289 "Brady",
290 "brag",
291 "brake",
292 "brant",
293 "brass",
294 "Braun",
295 "bravo",
296 "bread",
297 "bream",
298 "breve",
299 "brew",
300 "briar",
301 "Brice",
302 "brief",
303 "bring",
304 "briny",
305 "broad",
306 "broth",
307 "brunt",
308 "BSTJ",
309 "bub",
310 "buck",
311 "Budd",
312 "buddy",
313 "Buick",
314 "built",
315 "bulge",
316 "bulky",
317 "bum",
318 "bump",
319 "bunch",
320 "bundy",
321 "bunk",
322 "Burch",
323 "burg",
324 "burl",
325 "Burma",
326 "burnt",
327 "Burr",
328 "bury",
329 "bush",
330 "bushy",
331 "bust",
332 "busy",
333 "butte",
334 "butyl",
335 "buyer",
336 "by",
337 "bylaw",
338 "Byrd",
339 "byte",
340 "cab",
341 "cable",
342 "cacao",
343 "cacti",
344 "Cairo",
345 "Caleb",
346 "call",
347 "calm",
348 "canal",
349 "canoe",
350 "canon",
351 "can't",
352 "cap",
353 "caper",
354 "capo",
355 "card",
356 "Carey",
357 "Carib",
358 "Carla",
359 "carol",
360 "carve",
361 "cash",
362 "caste",
363 "catch",
364 "cater",
365 "caulk",
366 "cause",
367 "CBS",
368 "cedar",
369 "cent",
370 "Cetus",
371 "Chad",
372 "chaff",
373 "chair",
374 "champ",
375 "char",
376 "chasm",
377 "chaw",
378 "cheat",
379 "cheer",
380 "chef",
381 "Chen",
382 "chew",
383 "chick",
384 "chief",
385 "Chile",
386 "chill",
387 "chine",
388 "chip",
389 "chock",
390 "choir",
391 "chomp",
392 "chose",
393 "Chris",
394 "chuff",
395 "chum",
396 "chump",
397 "CIA",
398 "cinch",
399 "cite",
400 "city",
401 "clad",
402 "clan",
403 "clank",
404 "Clara",
405 "Claus",
406 "claw",
407 "clean",
408 "cleat",
409 "clerk",
410 "clime",
411 "cling",
412 "clink",
413 "Clio",
414 "clod",
415 "clomp",
416 "cloth",
417 "clove",
418 "cluck",
419 "clump",
420 "clung",
421 "Clyde",
422 "cobra",
423 "coco",
424 "coda",
425 "Cody",
426 "Cohn",
427 "coin",
428 "col",
429 "Colby",
430 "coney",
431 "Congo",
432 "cony",
433 "cool",
434 "coon",
435 "copra",
436 "copy",
437 "Corey",
438 "corn",
439 "corps",
440 "cos",
441 "cosy",
442 "couch",
443 "cough",
444 "count",
445 "coup",
446 "cove",
447 "cowry",
448 "coy",
449 "CPA",
450 "crack",
451 "craft",
452 "Craig",
453 "crank",
454 "crash",
455 "crate",
456 "crawl",
457 "craze",
458 "creak",
459 "cream",
460 "credo",
461 "creek",
462 "Creon",
463 "crept",
464 "crest",
465 "crew",
466 "crib",
467 "crime",
468 "crimp",
469 "crisp",
470 "crock",
471 "croft",
472 "crone",
473 "crook",
474 "crowd",
475 "CRT",
476 "crumb",
477 "crump",
478 "crush",
479 "crux",
480 "cub",
481 "cube",
482 "cuff",
483 "cup",
484 "Cupid",
485 "cur",
486 "curb",
487 "curie",
488 "cusp",
489 "cute",
490 "cycad",
491 "cynic",
492 "d",
493 "daffy",
494 "dairy",
495 "daisy",
496 "dally",
497 "dame",
498 "Damon",
499 "Dan",
500 "dance",
501 "Dane",
502 "dank",
503 "Dante",
504 "Dar",
505 "darn",
506 "dart",
507 "dash",
508 "davit",
509 "day",
510 "De",
511 "deaf",
512 "deal",
513 "death",
514 "debit",
515 "Dec",
516 "decal",
517 "Dee",
518 "Deere",
519 "deify",
520 "deity",
521 "Della",
522 "delta",
523 "demur",
524 "den",
525 "Denny",
526 "dense",
527 "deny",
528 "depth",
529 "desk",
530 "deus",
531 "devil",
532 "dewar",
533 "Dhabi",
534 "diary",
535 "dick",
536 "dicta",
537 "did",
538 "die",
539 "Diego",
540 "diety",
541 "dill",
542 "din",
543 "dine",
544 "dirty",
545 "disc",
546 "ditch",
547 "dive",
548 "DNA",
549 "dock",
550 "Dodd",
551 "doff",
552 "dogma",
553 "dolce",
554 "doll",
555 "dolly",
556 "done",
557 "door",
558 "dope",
559 "Doric",
560 "dose",
561 "dote",
562 "doubt",
563 "Doug",
564 "dove",
565 "dowel",
566 "doze",
567 "Dr",
568 "Draco",
569 "drama",
570 "drape",
571 "drawl",
572 "dread",
573 "dreg",
574 "dress",
575 "drew",
576 "drib",
577 "drier",
578 "drill",
579 "drip",
580 "dross",
581 "drown",
582 "druid",
583 "drunk",
584 "dry",
585 "du",
586 "Duane",
587 "ducat",
588 "duct",
589 "duel",
590 "duff",
591 "Duffy",
592 "Dugan",
593 "duke",
594 "dull",
595 "dulse",
596 "duly",
597 "dump",
598 "dumpy",
599 "dunce",
600 "dunk",
601 "dupe",
602 "dusky",
603 "dwarf",
604 "dwelt",
605 "Dwyer",
606 "dyer",
607 "Dyke",
608 "dyne",
609 "each",
610 "eager",
611 "ear",
612 "earn",
613 "ease",
614 "eat",
615 "eater",
616 "Eben",
617 "Ecole",
618 "Eden",
619 "edge",
620 "edgy",
621 "edict",
622 "Edith",
623 "EDT",
624 "eel",
625 "eft",
626 "egg",
627 "Egypt",
628 "eject",
629 "el",
630 "elan",
631 "elate",
632 "elect",
633 "elfin",
634 "elide",
635 "elk",
636 "Ella",
637 "Ellis",
638 "Elmer",
639 "else",
640 "Elton",
641 "elude",
642 "elves",
643 "ember",
644 "Emile",
645 "Emory",
646 "Eng",
647 "Engle",
648 "Enid",
649 "Enos",
650 "enter",
651 "envoy",
652 "epoxy",
653 "equal",
654 "erase",
655 "ere",
656 "erg",
657 "Erich",
658 "Ernst",
659 "Eros",
660 "err",
661 "Errol",
662 "Ervin",
663 "e's",
664 "essay",
665 "ester",
666 "Ethan",
667 "Ethel",
668 "ethic",
669 "ethos",
670 "etude",
671 "Eva",
672 "Evans",
673 "event",
674 "evict",
675 "exact",
676 "exam",
677 "excel",
678 "exit",
679 "eye",
680 "f",
681 "Faber",
682 "fable",
683 "facet",
684 "fad",
685 "faery",
686 "fag",
687 "fail",
688 "faint",
689 "fairy",
690 "fake",
691 "fang",
692 "fare",
693 "faro",
694 "fatal",
695 "fatty",
696 "fault",
697 "faun",
698 "Faust",
699 "fay",
700 "FBI",
701 "fee",
702 "feed",
703 "feign",
704 "Felix",
705 "Fermi",
706 "ferry",
707 "fest",
708 "fetch",
709 "fetus",
710 "few",
711 "fiend",
712 "fiery",
713 "fifth",
714 "fig",
715 "fight",
716 "filet",
717 "film",
718 "finch",
719 "fine",
720 "finny",
721 "fire",
722 "first",
723 "fish",
724 "Fisk",
725 "fist",
726 "Fitch",
727 "flack",
728 "flak",
729 "flaky",
730 "flame",
731 "flank",
732 "flare",
733 "flat",
734 "flax",
735 "flea",
736 "fled",
737 "flee",
738 "fleet",
739 "flint",
740 "flit",
741 "flock",
742 "flog",
743 "flow",
744 "Floyd",
745 "flub",
746 "fluke",
747 "flute",
748 "Flynn",
749 "FM",
750 "foal",
751 "focal",
752 "Foley",
753 "folk",
754 "fond",
755 "food",
756 "foot",
757 "fop",
758 "fore",
759 "forge",
760 "form",
761 "fort",
762 "forth",
763 "forty",
764 "Foss",
765 "foul",
766 "fowl",
767 "FPC",
768 "frame",
769 "Franz",
770 "Frau",
771 "fray",
772 "freed",
773 "fresh",
774 "friar",
775 "fro",
776 "frog",
777 "from",
778 "frost",
779 "frown",
780 "fry",
781 "fuel",
782 "full",
783 "fun",
784 "fur",
785 "furry",
786 "fussy",
787 "g",
788 "gaff",
789 "gag",
790 "Gail",
791 "Galen",
792 "gall",
793 "game",
794 "gamma",
795 "gap",
796 "gar",
797 "garb",
798 "gas",
799 "gasp",
800 "gate",
801 "gauge",
802 "gaur",
803 "gavel",
804 "gawk",
805 "gay",
806 "gecko",
807 "gel",
808 "gem",
809 "Gemma",
810 "gene",
811 "genie",
812 "genre",
813 "genus",
814 "germ",
815 "Gerry",
816 "get",
817 "giant",
818 "gibby",
819 "gig",
820 "gild",
821 "gilt",
822 "gin",
823 "Gino",
824 "given",
825 "glare",
826 "gleam",
827 "glee",
828 "glib",
829 "glint",
830 "gloat",
831 "glow",
832 "glut",
833 "GMT",
834 "gnaw",
835 "gnome",
836 "GNP",
837 "god",
838 "Goff",
839 "gogo",
840 "golf",
841 "Goode",
842 "goof",
843 "goose",
844 "gore",
845 "gory",
846 "got",
847 "gourd",
848 "GPO",
849 "grace",
850 "Graff",
851 "grape",
852 "grasp",
853 "grate",
854 "gravy",
855 "graze",
856 "grebe",
857 "greed",
858 "Greek",
859 "Gregg",
860 "grew",
861 "grid",
862 "grime",
863 "Grimm",
864 "gripe",
865 "grit",
866 "groan",
867 "gross",
868 "grout",
869 "grow",
870 "grown",
871 "grub",
872 "grunt",
873 "GSA",
874 "guano",
875 "guess",
876 "guide",
877 "guile",
878 "guise",
879 "gules",
880 "gull",
881 "gulp",
882 "gumbo",
883 "gun",
884 "gunky",
885 "guru",
886 "gush",
887 "gust",
888 "gusto",
889 "guy",
890 "Gwyn",
891 "gyp",
892 "gyro",
893 "Habib",
894 "hack",
895 "had",
896 "Hades",
897 "Hagen",
898 "Hahn",
899 "haiku",
900 "hale",
901 "halma",
902 "ham",
903 "Haney",
904 "Hans",
905 "hard",
906 "hare",
907 "hark",
908 "harm",
909 "harsh",
910 "haste",
911 "hasty",
912 "hatch",
913 "hater",
914 "hawk",
915 "Haydn",
916 "hazel",
917 "he",
918 "Healy",
919 "hear",
920 "heart",
921 "heave",
922 "heavy",
923 "hedge",
924 "heel",
925 "hefty",
926 "Heinz",
927 "held",
928 "he'll",
929 "hemp",
930 "hertz",
931 "hew",
932 "hex",
933 "hi",
934 "hick",
935 "Hicks",
936 "hike",
937 "hilum",
938 "hind",
939 "hip",
940 "hippy",
941 "hire",
942 "his",
943 "hive",
944 "hobby",
945 "hoc",
946 "Hoff",
947 "hogan",
948 "Hokan",
949 "hole",
950 "Holm",
951 "holt",
952 "home",
953 "homo",
954 "hondo",
955 "hood",
956 "hook",
957 "hoop",
958 "hoot",
959 "hope",
960 "horn",
961 "hose",
962 "hot",
963 "hound",
964 "hovel",
965 "how",
966 "howdy",
967 "hub",
968 "hubby",
969 "hue",
970 "huff",
971 "huge",
972 "huh",
973 "hull",
974 "human",
975 "Hun",
976 "hung",
977 "hunk",
978 "hurt",
979 "hurty",
980 "hutch",
981 "hydra",
982 "hyena",
983 "hymen",
984 "i",
985 "ibid",
986 "IBM",
987 "icon",
988 "I'd",
989 "Idaho",
990 "ideal",
991 "idiot",
992 "idol",
993 "IEEE",
994 "iffy",
995 "igloo",
996 "iii",
997 "ileum",
998 "Iliad",
999 "ill",
1000 "Ilona",
1001 "image",
1002 "in",
1003 "inapt",
1004 "Inca",
1005 "incur",
1006 "India",
1007 "inert",
1008 "infer",
1009 "infra",
1010 "Inman",
1011 "inn",
1012 "input",
1013 "ionic",
1014 "Iowa",
1015 "ipso",
1016 "IR",
1017 "Iran",
1018 "irate",
1019 "Irene",
1020 "Irish",
1021 "Irma",
1022 "is",
1023 "Ising",
1024 "Islam",
1025 "isle",
1026 "Italy",
1027 "it'd",
1028 "Ito",
1029 "iv",
1030 "ivy",
1031 "j",
1032 "JACM",
1033 "jag",
1034 "James",
1035 "Jane",
1036 "Janos",
1037 "Japan",
1038 "Jason",
1039 "jaw",
1040 "jean",
1041 "jeep",
1042 "Jeres",
1043 "jerky",
1044 "jess",
1045 "jet",
1046 "jewel",
1047 "jig",
1048 "jilt",
1049 "Jo",
1050 "job",
1051 "jog",
1052 "join",
1053 "joke",
1054 "jolt",
1055 "Jonas",
1056 "joule",
1057 "joust",
1058 "joy",
1059 "Juan",
1060 "judge",
1061 "judo",
1062 "Judy",
1063 "juju",
1064 "juke",
1065 "julep",
1066 "jump",
1067 "junco",
1068 "junky",
1069 "junta",
1070 "jure",
1071 "jut",
1072 "Kafka",
1073 "kapok",
1074 "Karp",
1075 "Kathy",
1076 "Kay",
1077 "Keats",
1078 "keel",
1079 "keg",
1080 "kelly",
1081 "Kemp",
1082 "Kent",
1083 "Kenya",
1084 "kerry",
1085 "Kevin",
1086 "keyed",
1087 "khaki",
1088 "Khmer",
1089 "kick",
1090 "Kiev",
1091 "kin",
1092 "Kiowa",
1093 "kirk",
1094 "kiss",
1095 "kite",
1096 "kiva",
1097 "Klan",
1098 "Kline",
1099 "knee",
1100 "Knott",
1101 "Knox",
1102 "koala",
1103 "Kong",
1104 "Korea",
1105 "kraft",
1106 "kraut",
1107 "Kuhn",
1108 "Kurd",
1109 "lac",
1110 "lack",
1111 "lad",
1112 "ladle",
1113 "lag",
1114 "lain",
1115 "laity",
1116 "lam",
1117 "lame",
1118 "lamp",
1119 "lance",
1120 "lane",
1121 "Lange",
1122 "Laos",
1123 "lapel",
1124 "lard",
1125 "Lares",
1126 "Lars",
1127 "last",
1128 "late",
1129 "Latin",
1130 "latus",
1131 "law",
1132 "lay",
1133 "layup",
1134 "lazy",
1135 "leach",
1136 "leafy",
1137 "leak",
1138 "leapt",
1139 "learn",
1140 "leash",
1141 "leave",
1142 "ledge",
1143 "leech",
1144 "left",
1145 "leg",
1146 "leggy",
1147 "Leila",
1148 "lemma",
1149 "Lena",
1150 "lens",
1151 "Leo",
1152 "Leona",
1153 "lest",
1154 "level",
1155 "levy",
1156 "lewd",
1157 "liar",
1158 "lice",
1159 "lick",
1160 "lie",
1161 "lien",
1162 "life",
1163 "lift",
1164 "liken",
1165 "lilac",
1166 "Lilly",
1167 "lily",
1168 "limb",
1169 "limit",
1170 "line",
1171 "lingo",
1172 "link",
1173 "Linus",
1174 "Lise",
1175 "lisp",
1176 "live",
1177 "livre",
1178 "load",
1179 "loam",
1180 "loan",
1181 "lob",
1182 "lobby",
1183 "local",
1184 "lock",
1185 "Loeb",
1186 "Logan",
1187 "logic",
1188 "loin",
1189 "Loki",
1190 "loll",
1191 "Lomb",
1192 "long",
1193 "loon",
1194 "loose",
1195 "loot",
1196 "lope",
1197 "lord",
1198 "Loren",
1199 "lose",
1200 "lossy",
1201 "Lotte",
1202 "loud",
1203 "lousy",
1204 "low",
1205 "Lowe",
1206 "loy",
1207 "l's",
1208 "LTV",
1209 "Lucas",
1210 "lucky",
1211 "luge",
1212 "Luis",
1213 "lumen",
1214 "lumpy",
1215 "lunar",
1216 "Lund",
1217 "Lura",
1218 "lure",
1219 "lurk",
1220 "lusty",
1221 "Lydia",
1222 "lying",
1223 "Lynn",
1224 "Lyon",
1225 "Lyra",
1226 "m",
1227 "Mabel",
1228 "mace",
1229 "macho",
1230 "macro",
1231 "madam",
1232 "magi",
1233 "magna",
1234 "mail",
1235 "main",
1236 "make",
1237 "Malay",
1238 "male",
1239 "mall",
1240 "malt",
1241 "mamma",
1242 "mane",
1243 "mania",
1244 "manic",
1245 "manna",
1246 "Mans",
1247 "Mao",
1248 "map",
1249 "mar",
1250 "Mardi",
1251 "maria",
1252 "Marin",
1253 "Mario",
1254 "Mars",
1255 "Mary",
1256 "mask",
1257 "mast",
1258 "mat",
1259 "mate",
1260 "mater",
1261 "matte",
1262 "maul",
1263 "Mavis",
1264 "maxim",
1265 "Maya",
1266 "Mayer",
1267 "Mayo",
1268 "mayst",
1269 "maze",
1270 "me",
1271 "meal",
1272 "meaty",
1273 "media",
1274 "meet",
1275 "meld",
1276 "melt",
1277 "men",
1278 "Menlo",
1279 "merge",
1280 "Merle",
1281 "merry",
1282 "mesh",
1283 "messy",
1284 "metro",
1285 "mew",
1286 "Meyer",
1287 "mezzo",
1288 "mica",
1289 "midst",
1290 "mien",
1291 "mig",
1292 "mila",
1293 "milk",
1294 "Mills",
1295 "milt",
1296 "Mimi",
1297 "mince",
1298 "mine",
1299 "mini",
1300 "mink",
1301 "minor",
1302 "minot",
1303 "minus",
1304 "Mira",
1305 "mire",
1306 "mirth",
1307 "Missy",
1308 "misty",
1309 "mite",
1310 "mitre",
1311 "mixup",
1312 "mob",
1313 "Mobil",
1314 "mock",
1315 "model",
1316 "Moen",
1317 "Mohr",
1318 "moist",
1319 "molar",
1320 "mole",
1321 "month",
1322 "moody",
1323 "Moore",
1324 "moral",
1325 "Moran",
1326 "morn",
1327 "Moser",
1328 "moss",
1329 "most",
1330 "motel",
1331 "moth",
1332 "motif",
1333 "motor",
1334 "motto",
1335 "mousy",
1336 "Moyer",
1337 "Mrs",
1338 "m's",
1339 "mud",
1340 "muggy",
1341 "Muir",
1342 "mulch",
1343 "mule",
1344 "mull",
1345 "mum",
1346 "mummy",
1347 "muon",
1348 "mural",
1349 "murre",
1350 "mushy",
1351 "musk",
1352 "must",
1353 "Muzo",
1354 "my",
1355 "Myers",
1356 "mynah",
1357 "Myra",
1358 "NAACP",
1359 "Nagy",
1360 "naive",
1361 "name",
1362 "Nancy",
1363 "nap",
1364 "nary",
1365 "nasal",
1366 "natal",
1367 "NATO",
1368 "navy",
1369 "Nazi",
1370 "NBC",
1371 "NCR",
1372 "ne",
1373 "near",
1374 "neath",
1375 "Ned",
1376 "need",
1377 "needy",
1378 "Nehru",
1379 "Nell",
1380 "neon",
1381 "Nero",
1382 "net",
1383 "Neva",
1384 "neve",
1385 "new",
1386 "nice",
1387 "niche",
1388 "Niger",
1389 "night",
1390 "Nikko",
1391 "Nile",
1392 "Niobe",
1393 "nitty",
1394 "NJ",
1395 "no",
1396 "Noah",
1397 "Nobel",
1398 "nodal",
1399 "noise",
1400 "Nolan",
1401 "nolo",
1402 "noon",
1403 "nor",
1404 "nose",
1405 "notch",
1406 "Nov",
1407 "now",
1408 "n's",
1409 "NTIS",
1410 "nude",
1411 "numb",
1412 "nurse",
1413 "NY",
1414 "oaf",
1415 "oaken",
1416 "oar",
1417 "oasis",
1418 "oath",
1419 "obey",
1420 "objet",
1421 "ocean",
1422 "Oct",
1423 "ode",
1424 "o'er",
1425 "off",
1426 "often",
1427 "ogle",
1428 "Okay",
1429 "old",
1430 "oldy",
1431 "olive",
1432 "Olson",
1433 "omit",
1434 "once",
1435 "only",
1436 "onset",
1437 "onus",
1438 "onyx",
1439 "ooze",
1440 "opera",
1441 "opium",
1442 "opt",
1443 "opus",
1444 "orb",
1445 "Orin",
1446 "Orion",
1447 "osier",
1448 "ought",
1449 "our",
1450 "out",
1451 "ovate",
1452 "over",
1453 "Ovid",
1454 "owing",
1455 "ox",
1456 "oxeye",
1457 "oxide",
1458 "Ozark",
1459 "p",
1460 "Pablo",
1461 "pace",
1462 "pack",
1463 "pact",
1464 "padre",
1465 "pagan",
1466 "Paine",
1467 "pale",
1468 "palm",
1469 "pane",
1470 "pansy",
1471 "Paoli",
1472 "papa",
1473 "papaw",
1474 "pappy",
1475 "parch",
1476 "pare",
1477 "Paris",
1478 "park",
1479 "Parks",
1480 "parse",
1481 "Paso",
1482 "passe",
1483 "past",
1484 "path",
1485 "Patsy",
1486 "Paul",
1487 "Pauli",
1488 "pax",
1489 "PBS",
1490 "peace",
1491 "peak",
1492 "Pease",
1493 "peck",
1494 "pedal",
1495 "pee",
1496 "peek",
1497 "peep",
1498 "pen",
1499 "penny",
1500 "pep",
1501 "Pepsi",
1502 "Perez",
1503 "perk",
1504 "Perle",
1505 "Perth",
1506 "peste",
1507 "Pete",
1508 "petri",
1509 "petty",
1510 "pewee",
1511 "PhD",
1512 "phi",
1513 "phon",
1514 "phony",
1515 "phyla",
1516 "piano",
1517 "piece",
1518 "pilot",
1519 "pinch",
1520 "ping",
1521 "pink",
1522 "pinto",
1523 "pious",
1524 "pipe",
1525 "pique",
1526 "piss",
1527 "pithy",
1528 "pity",
1529 "pixy",
1530 "place",
1531 "plain",
1532 "plane",
1533 "plate",
1534 "Plato",
1535 "play",
1536 "plaza",
1537 "plead",
1538 "pluck",
1539 "plug",
1540 "plump",
1541 "plunk",
1542 "plus",
1543 "pod",
1544 "podia",
1545 "Poe",
1546 "poesy",
1547 "pogo",
1548 "poi",
1549 "poise",
1550 "poke",
1551 "polis",
1552 "Polk",
1553 "poll",
1554 "polo",
1555 "Ponce",
1556 "pond",
1557 "pool",
1558 "poop",
1559 "pop",
1560 "porch",
1561 "pork",
1562 "Porte",
1563 "Porto",
1564 "posh",
1565 "posse",
1566 "post",
1567 "pour",
1568 "pow",
1569 "Prado",
1570 "Pratt",
1571 "pray",
1572 "press",
1573 "prey",
1574 "price",
1575 "pride",
1576 "prig",
1577 "prime",
1578 "prior",
1579 "probe",
1580 "Prof",
1581 "prone",
1582 "p's",
1583 "psych",
1584 "pub",
1585 "puck",
1586 "puffy",
1587 "Pugh",
1588 "pull",
1589 "puma",
1590 "pun",
1591 "punky",
1592 "puny",
1593 "pupal",
1594 "puppy",
1595 "pure",
1596 "purl",
1597 "pus",
1598 "PVC",
1599 "Pyle",
1600 "Pyrex",
1601 "Qatar",
1602 "quack",
1603 "quaff",
1604 "quash",
1605 "queen",
1606 "quell",
1607 "query",
1608 "queue",
1609 "quick",
1610 "quill",
1611 "quint",
1612 "quirt",
1613 "quo",
1614 "quote",
1615 "rabat",
1616 "rabbi",
1617 "radar",
1618 "radio",
1619 "radix",
1620 "Rae",
1621 "rag",
1622 "rail",
1623 "rajah",
1624 "Ralph",
1625 "Ramo",
1626 "ran",
1627 "Rand",
1628 "randy",
1629 "Raoul",
1630 "rape",
1631 "rare",
1632 "rasp",
1633 "rata",
1634 "rater",
1635 "rave",
1636 "raven",
1637 "razor",
1638 "R&D",
1639 "reach",
1640 "ready",
1641 "real",
1642 "reb",
1643 "reck",
1644 "reedy",
1645 "reek",
1646 "Reese",
1647 "regal",
1648 "Reid",
1649 "relax",
1650 "reman",
1651 "Rena",
1652 "rend",
1653 "ret",
1654 "retch",
1655 "Rhea",
1656 "rheum",
1657 "rhino",
1658 "Rhoda",
1659 "rib",
1660 "rice",
1661 "rick",
1662 "rid",
1663 "rifle",
1664 "rig",
1665 "rigid",
1666 "rill",
1667 "rim",
1668 "rimy",
1669 "rink",
1670 "Rio",
1671 "rip",
1672 "ripen",
1673 "rise",
1674 "risk",
1675 "rite",
1676 "rival",
1677 "river",
1678 "road",
1679 "roar",
1680 "rob",
1681 "robe",
1682 "robin",
1683 "rodeo",
1684 "roe",
1685 "roil",
1686 "role",
1687 "Roman",
1688 "Rome",
1689 "romp",
1690 "roof",
1691 "room",
1692 "roost",
1693 "Rosen",
1694 "rot",
1695 "rouge",
1696 "round",
1697 "rout",
1698 "rove",
1699 "Roy",
1700 "Royce",
1701 "r's",
1702 "Ruben",
1703 "ruby",
1704 "rude",
1705 "Rudy",
1706 "rug",
1707 "rule",
1708 "rummy",
1709 "run",
1710 "rung",
1711 "runt",
1712 "rupee",
1713 "ruse",
1714 "rusk",
1715 "Russo",
1716 "rusty",
1717 "Ruth",
1718 "rutty",
1719 "Ryan",
1720 "rye",
1721 "sa",
1722 "sabra",
1723 "sad",
1724 "sag",
1725 "sage",
1726 "sake",
1727 "sale",
1728 "Salk",
1729 "salty",
1730 "salve",
1731 "Sam",
1732 "same",
1733 "Samoa",
1734 "sane",
1735 "sank",
1736 "Santa",
1737 "Sao",
1738 "sappy",
1739 "Sarah",
1740 "sari",
1741 "satyr",
1742 "Saudi",
1743 "Sault",
1744 "save",
1745 "savvy",
1746 "SC",
1747 "scald",
1748 "scalp",
1749 "scarf",
1750 "scat",
1751 "SCM",
1752 "scold",
1753 "scoot",
1754 "Scot",
1755 "scram",
1756 "scrub",
1757 "scud",
1758 "scull",
1759 "scum",
1760 "SD",
1761 "seal",
1762 "seamy",
1763 "sect",
1764 "sedge",
1765 "seedy",
1766 "seen",
1767 "seize",
1768 "semi",
1769 "sepal",
1770 "Sepoy",
1771 "septa",
1772 "serge",
1773 "serif",
1774 "servo",
1775 "set",
1776 "Seton",
1777 "setup",
1778 "sewn",
1779 "shad",
1780 "shag",
1781 "shah",
1782 "shaky",
1783 "shall",
1784 "shank",
1785 "shard",
1786 "Shari",
1787 "shaw",
1788 "Shea",
1789 "shed",
1790 "sheer",
1791 "shied",
1792 "shift",
1793 "shill",
1794 "shin",
1795 "shirk",
1796 "shish",
1797 "shoo",
1798 "shore",
1799 "shout",
1800 "shrew",
1801 "shrub",
1802 "shunt",
1803 "SIAM",
1804 "sib",
1805 "sibyl",
1806 "side",
1807 "sigh",
1808 "sigma",
1809 "silk",
1810 "silly",
1811 "silt",
1812 "Simon",
1813 "since",
1814 "sinew",
1815 "singe",
1816 "sinh",
1817 "Sioux",
1818 "sir",
1819 "siva",
1820 "sixty",
1821 "skeet",
1822 "skew",
1823 "skid",
1824 "skimp",
1825 "skulk",
1826 "Skye",
1827 "slab",
1828 "slag",
1829 "slake",
1830 "slap",
1831 "slay",
1832 "sleep",
1833 "sleet",
1834 "slick",
1835 "slim",
1836 "slimy",
1837 "slog",
1838 "slosh",
1839 "sloth",
1840 "slow",
1841 "slug",
1842 "slum",
1843 "slung",
1844 "slurp",
1845 "sly",
1846 "small",
1847 "smile",
1848 "smith",
1849 "smog",
1850 "smoky",
1851 "snack",
1852 "snark",
1853 "sneer",
1854 "snell",
1855 "snip",
1856 "snoop",
1857 "snore",
1858 "snow",
1859 "snub",
1860 "snug",
1861 "so",
1862 "soap",
1863 "soar",
1864 "soft",
1865 "soggy",
1866 "sold",
1867 "sole",
1868 "solid",
1869 "Solon",
1870 "solve",
1871 "some",
1872 "son",
1873 "sonny",
1874 "soon",
1875 "sorb",
1876 "sore",
1877 "sort",
1878 "south",
1879 "sow",
1880 "spa",
1881 "spade",
1882 "spare",
1883 "spark",
1884 "spasm",
1885 "spate",
1886 "spawn",
1887 "spear",
1888 "speed",
1889 "spell",
1890 "Spica",
1891 "spicy",
1892 "spiky",
1893 "spire",
1894 "Spiro",
1895 "splay",
1896 "spoil",
1897 "spook",
1898 "spool",
1899 "spore",
1900 "spout",
1901 "spree",
1902 "sprue",
1903 "spur",
1904 "spy",
1905 "squaw",
1906 "s's",
1907 "St",
1908 "stag",
1909 "staid",
1910 "stair",
1911 "stale",
1912 "stall",
1913 "stamp",
1914 "stand",
1915 "stark",
1916 "stash",
1917 "state",
1918 "stay",
1919 "stead",
1920 "steak",
1921 "steam",
1922 "steed",
1923 "Steen",
1924 "steer",
1925 "stern",
1926 "stew",
1927 "stile",
1928 "stilt",
1929 "stock",
1930 "stole",
1931 "stone",
1932 "stood",
1933 "stool",
1934 "stop",
1935 "storm",
1936 "story",
1937 "stove",
1938 "strap",
1939 "straw",
1940 "strip",
1941 "strum",
1942 "stud",
1943 "study",
1944 "stung",
1945 "stunt",
1946 "Sturm",
1947 "styli",
1948 "suave",
1949 "such",
1950 "sud",
1951 "sue",
1952 "Suez",
1953 "suit",
1954 "sulky",
1955 "sung",
1956 "sunny",
1957 "sup",
1958 "supra",
1959 "surge",
1960 "Sus",
1961 "sushi",
1962 "swank",
1963 "swap",
1964 "swear",
1965 "swelt",
1966 "swig",
1967 "swine",
1968 "swish",
1969 "swiss",
1970 "sword",
1971 "swung",
1972 "Syria",
1973 "syrup",
1974 "tab",
1975 "tabu",
1976 "tacit",
1977 "taffy",
1978 "Tahoe",
1979 "take",
1980 "tale",
1981 "talk",
1982 "tamp",
1983 "tang",
1984 "tango",
1985 "tanh",
1986 "Tanya",
1987 "tap",
1988 "tape",
1989 "tapir",
1990 "tappa",
1991 "tar",
1992 "tardy",
1993 "tarry",
1994 "task",
1995 "tasty",
1996 "tate",
1997 "tawny",
1998 "taxi",
1999 "teach",
2000 "tease",
2001 "tecum",
2002 "Telex",
2003 "tempt",
2004 "tenon",
2005 "tense",
2006 "tepid",
2007 "terry",
2008 "Tess",
2009 "Texas",
2010 "Thai",
2011 "than",
2012 "that",
2013 "Thea",
2014 "thee",
2015 "them",
2016 "then",
2017 "theta",
2018 "they",
2019 "thick",
2020 "thigh",
2021 "thin",
2022 "thing",
2023 "third",
2024 "three",
2025 "threw",
2026 "thug",
2027 "thus",
2028 "ti",
2029 "tibet",
2030 "tic",
2031 "tid",
2032 "tidy",
2033 "tied",
2034 "tift",
2035 "til",
2036 "tile",
2037 "tilt",
2038 "Timex",
2039 "Timon",
2040 "tinge",
2041 "tipsy",
2042 "tire",
2043 "tit",
2044 "tithe",
2045 "title",
2046 "TNT",
2047 "toad",
2048 "today",
2049 "tog",
2050 "Togo",
2051 "toil",
2052 "token",
2053 "told",
2054 "tome",
2055 "tommy",
2056 "tonal",
2057 "tong",
2058 "Toni",
2059 "tonk",
2060 "tony",
2061 "tool",
2062 "tooth",
2063 "top",
2064 "tor",
2065 "torch",
2066 "tori",
2067 "torr",
2068 "torso",
2069 "torus",
2070 "total",
2071 "totem",
2072 "tout",
2073 "tower",
2074 "town",
2075 "toxin",
2076 "track",
2077 "Tracy",
2078 "trag",
2079 "trail",
2080 "trait",
2081 "tramp",
2082 "trap",
2083 "tread",
2084 "tree",
2085 "trend",
2086 "tress",
2087 "trial",
2088 "tribe",
2089 "trill",
2090 "tripe",
2091 "troll",
2092 "troop",
2093 "trout",
2094 "truck",
2095 "Trudy",
2096 "trunk",
2097 "trust",
2098 "TRW",
2099 "t's",
2100 "TTL",
2101 "tub",
2102 "tube",
2103 "tuck",
2104 "Tudor",
2105 "tuft",
2106 "tulle",
2107 "tum",
2108 "tuna",
2109 "tune",
2110 "tunic",
2111 "Turin",
2112 "turk",
2113 "turn",
2114 "tusk",
2115 "tutu",
2116 "tweak",
2117 "twice",
2118 "twill",
2119 "twine",
2120 "twirl",
2121 "twit",
2122 "two",
2123 "tying",
2124 "ugly",
2125 "ultra",
2126 "umbra",
2127 "uncle",
2128 "union",
2129 "unite",
2130 "upend",
2131 "upper",
2132 "upset",
2133 "Upton",
2134 "urban",
2135 "urine",
2136 "us",
2137 "usage",
2138 "use",
2139 "USGS",
2140 "USIA",
2141 "usual",
2142 "usurp",
2143 "Utah",
2144 "utile",
2145 "v",
2146 "vade",
2147 "vague",
2148 "vain",
2149 "valid",
2150 "valve",
2151 "van",
2152 "vase",
2153 "vast",
2154 "Veda",
2155 "veer",
2156 "vein",
2157 "Vella",
2158 "venom",
2159 "Venus",
2160 "verb",
2161 "Verde",
2162 "versa",
2163 "vest",
2164 "vetch",
2165 "vex",
2166 "via",
2167 "vicar",
2168 "Vichy",
2169 "Vida",
2170 "vie",
2171 "Viet",
2172 "vigil",
2173 "viii",
2174 "villa",
2175 "vise",
2176 "visor",
2177 "vitae",
2178 "Vito",
2179 "viva",
2180 "vixen",
2181 "vocal",
2182 "voice",
2183 "Volta",
2184 "vowel",
2185 "v's",
2186 "w",
2187 "wack",
2188 "wacky",
2189 "wad",
2190 "wade",
2191 "wafer",
2192 "wag",
2193 "wah",
2194 "wail",
2195 "wait",
2196 "waive",
2197 "waken",
2198 "wale",
2199 "wally",
2200 "wan",
2201 "war",
2202 "ward",
2203 "ware",
2204 "warm",
2205 "warp",
2206 "warty",
2207 "was",
2208 "washy",
2209 "water",
2210 "watt",
2211 "Watts",
2212 "way",
2213 "Wayne",
2214 "weal",
2215 "wean",
2216 "wear",
2217 "web",
2218 "weber",
2219 "we'd",
2220 "wedge",
2221 "weed",
2222 "week",
2223 "Wei",
2224 "weird",
2225 "Welch",
2226 "well",
2227 "welsh",
2228 "wept",
2229 "were",
2230 "west",
2231 "wet",
2232 "wharf",
2233 "whee",
2234 "whelm",
2235 "when",
2236 "which",
2237 "whim",
2238 "whir",
2239 "whisk",
2240 "white",
2241 "whiz",
2242 "whoa",
2243 "whole",
2244 "whoop",
2245 "whop",
2246 "whose",
2247 "why",
2248 "widen",
2249 "widow",
2250 "wield",
2251 "Wier",
2252 "wile",
2253 "will",
2254 "Wilma",
2255 "wilt",
2256 "win",
2257 "winch",
2258 "wino",
2259 "wipe",
2260 "wise",
2261 "wispy",
2262 "witch",
2263 "withy",
2264 "witty",
2265 "woe",
2266 "wok",
2267 "wolve",
2268 "womb",
2269 "Wong",
2270 "Woods",
2271 "wool",
2272 "wop",
2273 "wordy",
2274 "work",
2275 "worm",
2276 "worse",
2277 "worst",
2278 "wove",
2279 "wow",
2280 "wreck",
2281 "wrest",
2282 "wrist",
2283 "Wu",
2284 "Wyatt",
2285 "Wylie",
2286 "Wyner",
2287 "x",
2288 "xenon",
2289 "x's",
2290 "yacht",
2291 "Yale",
2292 "yam",
2293 "yang",
2294 "yarn",
2295 "Yates",
2296 "year",
2297 "yeast",
2298 "Yeats",
2299 "Yemen",
2300 "yield",
2301 "yip",
2302 "yodel",
2303 "yoga",
2304 "yoke",
2305 "yore",
2306 "you'd",
2307 "y's",
2308 "Yves",
2309 "YWCA",
2310 "Zeiss",
2311 "zest",
2312 "zig",
2313 "zing",
2314 "zip",
2315 "Zoe",
2316 "zoo"
2317 };
diff --git a/all_pairs/source/anagram/anagram_stdlib.c b/all_pairs/source/anagram/anagram_stdlib.c
new file mode 100644
index 0000000..994350b
--- /dev/null
+++ b/all_pairs/source/anagram/anagram_stdlib.c
@@ -0,0 +1,153 @@
1/*
2
3 This file is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_stdlib.c
7
8 Author: Raymond Chen
9
10 Function: This file contains the C standard library functions used by anagram.
11
12 Source: anagram
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#include "anagram_stdlib.h"
23#include "anagram_strings.h"
24
25/* Includes anagram_CompareFrequency */
26/* This function is included here because the WCC does not */
27/* support function pointers */
28#include "anagram_compare.h"
29
30
31void anagram_swapi( char *ii, char *ij, unsigned long es )
32{
33 char *i, *j, c;
34
35 i = ( char * )ii;
36 j = ( char * )ij;
37 _Pragma( "loopbound min 1 max 1" )
38 do {
39 c = *i;
40 *i ++ = *j;
41 *j ++ = c;
42 es -= sizeof( char );
43 } while ( es != 0 );
44}
45
46char *anagram_pivot( char *a, unsigned long n, unsigned long es )
47{
48 unsigned long j;
49 char *pi, *pj, *pk;
50
51 j = n / 6 * es;
52 pi = a + j; /* 1/6 */
53 j += j;
54 pj = pi + j; /* 1/2 */
55 pk = pj + j; /* 5/6 */
56 if ( anagram_CompareFrequency( pi, pj ) < 0 ) {
57 if ( anagram_CompareFrequency( pi, pk ) < 0 ) {
58 if ( anagram_CompareFrequency( pj, pk ) < 0 )
59 return pj;
60 return pk;
61 }
62 return pi;
63 }
64 if ( anagram_CompareFrequency( pj, pk ) < 0 ) {
65 if ( anagram_CompareFrequency( pi, pk ) < 0 )
66 return pi;
67 return pk;
68 }
69 return pj;
70}
71
72void anagram_qsorts( char *a, unsigned long n, unsigned long es )
73{
74 unsigned long j;
75 char *pi, *pj, *pn;
76 volatile unsigned int flowfactdummy = 0;
77
78 _Pragma( "loopbound min 0 max 6" )
79 while ( n > 1 ) {
80 if ( n > 10 )
81 pi = anagram_pivot( a, n, es );
82 else
83 pi = a + ( n >> 1 ) * es;
84
85 anagram_swapi( a, pi, es );
86 pi = a;
87 pn = a + n * es;
88 pj = pn;
89 _Pragma( "loopbound min 1 max 11" )
90 while ( 1 ) {
91 /* wcc note: this assignment expression was added to avoid assignment of
92 multiple loop bound annotations to same loop (cf. Ticket #0002323). */
93 flowfactdummy ++;
94 _Pragma( "loopbound min 1 max 5" )
95 do {
96 pi += es;
97 } while ( pi < pn && anagram_CompareFrequency( pi, a ) < 0 );
98 _Pragma( "loopbound min 1 max 4" )
99 do {
100 pj -= es;
101 } while ( pj > a && anagram_CompareFrequency( pj, a ) > 0 );
102 if ( pj < pi )
103 break;
104 anagram_swapi( pi, pj, es );
105 }
106 anagram_swapi( a, pj, es );
107 j = ( unsigned long )( pj - a ) / es;
108
109 n = n - j - 1;
110 if ( j >= n ) {
111 anagram_qsorts( a, j, es );
112 a += ( j + 1 ) * es;
113 } else {
114 anagram_qsorts( a + ( j + 1 )*es, n, es );
115 n = j;
116 }
117 }
118}
119
120void anagram_qsort( void *va, unsigned long n, unsigned long es )
121{
122 _Pragma( "marker call_qsorts" )
123 anagram_qsorts( ( char * )va, n, es );
124 _Pragma( "flowrestriction 1*anagram_qsorts <= 17*call_qsorts" )
125}
126
127
128/* This must be redefined for each new benchmark */
129#define ANAGRAM_HEAP_SIZE 18000
130
131static char anagram_simulated_heap[ANAGRAM_HEAP_SIZE];
132static unsigned int anagram_freeHeapPos;
133
134void *anagram_malloc( unsigned int numberOfBytes )
135{
136 void *currentPos = ( void * )&anagram_simulated_heap[ anagram_freeHeapPos ];
137 /* Get a 4-byte address for alignment purposes */
138 //anagram_freeHeapPos += ( ( numberOfBytes + 4 ) & ( unsigned int )0xfffffffc );
139 unsigned int rem = (numberOfBytes & ( unsigned int )0x3 );
140 unsigned int adjustment = rem ? 4 - rem : 0;
141 anagram_freeHeapPos += numberOfBytes + adjustment;
142 return currentPos;
143}
144
145void anagram_bzero( char *p, unsigned long len )
146{
147 unsigned long i;
148
149 _Pragma( "loopbound min 8 max 416" )
150 for ( i = 0; i < len; ++ i )
151 *p ++ = '\0';
152}
153
diff --git a/all_pairs/source/anagram/anagram_stdlib.h b/all_pairs/source/anagram/anagram_stdlib.h
new file mode 100644
index 0000000..0e745d5
--- /dev/null
+++ b/all_pairs/source/anagram/anagram_stdlib.h
@@ -0,0 +1,29 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_stdlib.h
7
8 Author: Raymond Chen
9
10 Function: This header contains some C standard library functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_STDLIB_H
23#define ANAGRAM_STDLIB_H
24
25void *anagram_malloc( unsigned int numberOfBytes );
26
27void anagram_qsort( void *va, unsigned long n, unsigned long es );
28
29#endif
diff --git a/all_pairs/source/anagram/anagram_strings.h b/all_pairs/source/anagram/anagram_strings.h
new file mode 100644
index 0000000..1e023fc
--- /dev/null
+++ b/all_pairs/source/anagram/anagram_strings.h
@@ -0,0 +1,27 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_strings.h
7
8 Author: Raymond Chen
9
10 Function: This header contains some C standard library functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_STRINGS_H
23#define ANAGRAM_STRINGS_H
24
25void anagram_bzero( char *p, unsigned long len );
26
27#endif
diff --git a/all_pairs/source/audiobeam/README b/all_pairs/source/audiobeam/README
new file mode 100644
index 0000000..e228eda
--- /dev/null
+++ b/all_pairs/source/audiobeam/README
@@ -0,0 +1,86 @@
1Readme file for Oxygen beamforming source code distribution
2-----------------------------------------------------------
3
4This is a very very beta distribution of beamforming source code from
5MIT LCS.
6
7There is only one source file, main.c, and one header file,
8main.h. You can compile everything using the Makefile included in the
9distribution.
10
11The input to the program is a text file containing floating
12point values for the signal read on each of the microphones. For n
13microphones, each line of the text files represents a temporal sample
14and should contain n floating point values separated by spaces, e.g.:
15
16-1.8569790e-004 -9.0919049e-004 3.6711283e-004 -1.0073081e-005 ...
17
18There are several modes of operation for the program:
19
201. The most basic mode is to process the microphone data and to
21calculate the output based on one beam focused on a particular point
22in space. The coordinates for the microphones and the focus point are
23specified inside main.c (eventually to be moved to a separate file).
24
252. Far field search mode. This mode assumes a far-field source (which
26means we have a planar wavefront) and a linear array, and sweeps over
27180 degrees in the plane of the array. The microphone coordinates are
28specified in main.c, and the NUM_ANGLES constant defines how many
29angle values should be tested (a value of 180 means one beam per each
30degree). The energy of the signal over a particular window
31(ANGLE_ENERGY_WINDOW_SIZE) is computed for each beam. The direction
32with maximum energy is considered the direction that the speech signal
33is coming from, and is printed out by the program.
34
353. Near-field hill climbing mode. This mode accepts a starting
36coordinate and attempts to "hill-climb" through the space seeking the
37maximum energy. Each of the x, y, and z coordinates are perturbed in
38the positive and negative directions at each time interval
39(GRID_ENERGY_WINDOW_SIZE) by a step size (GRID_STEP_SIZE). This
40perturbation, along with the original coordinate, produces seven
41coordinates to be tested. The direction with the maximum energy
42replaces the current reference coordinate. For instance, if we have a
43starting reference coordinate of (1,1,0) and our step size is 0.01, we
44will evaluate the energy for the following seven beams:
45
46(1,1,0)
47(0.99,1,0)
48(1.01,1,0)
49(1,0.99,0)
50(1,1.01,0)
51(1,1,-0.01)
52(1,1,0.01)
53
54Now let's say the beam (1,1.01,0) has the maximum energy; then this
55coordinate will replace the original reference coordinate of (1,1,0).
56
57For methods 2, and 3, we are not outputting anything to disk, we are
58just printing the result. This is because we have just started to work
59with these methods, and have not applied them in real systems. This
60code is currently being ported to RAW.
61
62To get a list of parameters for the delay_and_sum executable that is
63generated when the source is compiled, just type ./delay_and_sum .
64
65There is some sample data included with the program, in the data
66directory. There is some data for a near-field and far-field
67source. The README.txt file in each directory specifies the microphone
68and source position. The data1 file, when processed with a beamformer
69aligned in the proper direction should produce something like a sinc
70function (see
71http://ccrma-www.stanford.edu/~jos/Interpolation/sinc_function.html).
72
73The data2 file should produce an audio signal of a woman saying "the
74simplest method". If the beamformer is aligned properly, the noise
75should be reduced significantly over the source signal from only one
76of the microphones (use print_datafile.pl to isolate one
77microphone). You can convert the data file that the program produces
78to wave files using sox.
79
80
81
82
83
84---------------------------------
85Eugene Weinstein
86ecoder@mit.edu \ No newline at end of file
diff --git a/all_pairs/source/audiobeam/audiobeam.c b/all_pairs/source/audiobeam/audiobeam.c
new file mode 100644
index 0000000..ed5d656
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeam.c
@@ -0,0 +1,594 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeam
7
8 Author: Eugene Weinstein
9
10 Function: Audio beam former
11
12 Source: StreamIt
13 http://groups.csail.mit.edu/cag/streamit/
14
15 Changes: no functional changes
16
17 License: see license.txt
18
19*/
20
21
22/*
23 Include section
24*/
25
26#include "../extra.h"
27#include "audiobeamlibm.h"
28#include "audiobeamlibmalloc.h"
29#include "audiobeam.h"
30
31/*
32 Forward declaration of functions
33*/
34
35void audiobeam_init();
36int audiobeam_return();
37void audiobeam_main( void );
38//int main( void );
39void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays
40 prep_delays[], float *delays );
41float *audiobeam_parse_line( float *float_arr, int num_mic );
42long int audiobeam_find_max_in_arr( float *arr, int size );
43long int audiobeam_find_min_in_arr( float *arr, int size );
44int audiobeam_wrapped_inc_offset( int i, int offset, int max_i );
45int audiobeam_wrapped_dec_offset( int i, int offset, int max_i );
46int audiobeam_wrapped_inc( int i, int max_i );
47int audiobeam_wrapped_dec( int i, int max_i );
48struct audiobeam_DataQueue *audiobeam_init_data_queue( int max_delay,
49 int num_mic );
50struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic );
51void audiobeam_calc_distances( float *source_location,
52 float audiobeam_mic_locations[15][3],
53 float *distances,
54 int num_mic );
55void audiobeam_calc_delays( float *distances, float *delays, int sound_speed,
56 int sampling_rate, int num_mic );
57void audiobeam_adjust_delays( float *delays, int num_mic );
58float *audiobeam_calc_weights_lr ( int num_mic );
59float *audiobeam_calc_weights_left_only ( int num_mic );
60float audiobeam_calculate_energy( float *samples, int num_samples );
61float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays
62 preprocessed_delays[],
63 float **sample_queue,
64 int queue_head,
65 long int max_delay,
66 int num_mic,
67 float *weights );
68int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic,
69 float sampling_rate, float **beamform_results,
70 struct audiobeam_DataQueue *queue,
71 int num_beams, int window, float *weights );
72int audiobeam_calc_beamforming_result( struct audiobeam_Delays *delays,
73 float **beamform_results,
74 float *energies,
75 struct audiobeam_DataQueue *queue,
76 int num_beams, int window,
77 int hamming );
78void audiobeam_calc_single_pos( float source_location[3],
79 float audiobeam_mic_locations[15][3],
80 int hamming );
81
82
83/*
84 Declaration of global variables
85*/
86
87extern float audiobeam_input[5760];
88extern float audiobeam_mic_locations[15][3];
89extern float audiobeam_source_location[3];
90extern float audiobeam_origin_location[3];
91int audiobeam_input_pos;
92int audiobeam_checksum;
93
94
95/*
96 Initialization- and return-value-related functions
97*/
98
99void audiobeam_init()
100{
101 audiobeam_input_pos = 0;
102 audiobeam_checksum = 0;
103
104 unsigned int i;
105 unsigned char *p;
106 volatile char bitmask = 0;
107
108 /*
109 Apply volatile XOR-bitmask to entire input array.
110 */
111 p = ( unsigned char * ) &audiobeam_input[ 0 ];
112 _Pragma( "loopbound min 23040 max 23040" )
113 for ( i = 0; i < sizeof( audiobeam_input ); ++i, ++p )
114 *p ^= bitmask;
115
116 p = ( unsigned char * ) &audiobeam_mic_locations[ 0 ];
117 _Pragma( "loopbound min 180 max 180" )
118 for ( i = 0; i < sizeof( audiobeam_mic_locations ); ++i, ++p )
119 *p ^= bitmask;
120
121 p = ( unsigned char * ) &audiobeam_source_location[ 0 ];
122 _Pragma( "loopbound min 12 max 12" )
123 for ( i = 0; i < sizeof( audiobeam_source_location ); ++i, ++p )
124 *p ^= bitmask;
125
126 p = ( unsigned char * ) &audiobeam_origin_location[ 0 ];
127 _Pragma( "loopbound min 12 max 12" )
128 for ( i = 0; i < sizeof( audiobeam_origin_location ); ++i, ++p )
129 *p ^= bitmask;
130}
131
132
133int audiobeam_return()
134{
135 return ( audiobeam_checksum +1!= 0 );
136}
137
138
139/*
140 Algorithm core functions
141*/
142
143void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays
144 prep_delays[], float *delays )
145{
146 int i;
147
148 _Pragma( "loopbound min 15 max 15" )
149 for ( i = 0; i < 15; i++ ) {
150 prep_delays[i].delay = delays[i];
151 prep_delays[i].high = ( int ) audiobeam_ceil( delays[i] );
152 prep_delays[i].low = ( int ) audiobeam_floor( delays[i] );
153 prep_delays[i].offset = delays[i] - prep_delays[i].low;
154 }
155}
156
157
158float *audiobeam_parse_line( float *float_arr, int num_mic )
159{
160 int i;
161
162 _Pragma( "loopbound min 15 max 15" )
163 for ( i = 0; i < num_mic; i++ )
164 float_arr[i] = audiobeam_input[audiobeam_input_pos++];
165
166 return float_arr;
167}
168
169
170long int audiobeam_find_max_in_arr( float *arr, int size )
171{
172 int i;
173 float max = 0;
174
175 _Pragma( "loopbound min 15 max 15" )
176 for ( i = 0; i < size; i++ ) {
177 if ( arr[i] > max )
178 max = arr[i];
179 }
180
181 return audiobeam_ceil( max );
182}
183
184
185long int audiobeam_find_min_in_arr( float *arr, int size )
186{
187 int i;
188 float min = arr[0];
189
190 _Pragma( "loopbound min 15 max 15" )
191 for ( i = 0; i < size; i++ ) {
192 if ( arr[i] < min )
193 min = arr[i];
194 }
195
196 return audiobeam_floor( min );
197}
198
199
200int audiobeam_wrapped_inc_offset( int i, int offset, int max_i )
201{
202 if ( i + offset > max_i )
203 return ( i + offset - max_i - 1 );
204 else
205 return ( i + offset );
206}
207
208
209int audiobeam_wrapped_dec_offset( int i, int offset, int max_i )
210{
211 if ( i - offset < 0 )
212 return ( max_i - ( offset - i ) + 1 );
213 else
214 return ( i - offset );
215}
216
217
218int audiobeam_wrapped_inc( int i, int max_i )
219{
220 return audiobeam_wrapped_inc_offset( i, 1, max_i );
221}
222
223
224int audiobeam_wrapped_dec( int i, int max_i )
225{
226 return audiobeam_wrapped_dec_offset( i, 1, max_i );
227}
228
229
230struct audiobeam_DataQueue *audiobeam_init_data_queue( int max_delay,
231 int num_mic )
232{
233 int i, j;
234
235 struct audiobeam_DataQueue *queue;
236 queue = ( struct audiobeam_DataQueue * ) audiobeam_malloc( sizeof(
237 struct audiobeam_DataQueue ) );
238 queue->sample_queue = ( float ** ) audiobeam_malloc( ( max_delay + 1 )
239 * sizeof( float * ) );
240
241 _Pragma( "loopbound min 15 max 15" )
242 for ( i = 0; i < ( max_delay + 1 ); i++ ) {
243 ( queue->sample_queue )[i] = ( float * ) audiobeam_malloc( num_mic
244 * sizeof( float ) );
245 _Pragma( "loopbound min 15 max 15" )
246 for ( j = 0; j < num_mic; j++ ) {
247 ( queue->sample_queue )[i][j] = 0.0; // Initialize values to 0
248 }
249 }
250
251 queue->head = 0;
252 queue->tail = 0;
253 queue->full = 0;
254
255 return queue;
256}
257
258
259struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic )
260{
261 struct audiobeam_Delays *delays;
262 int i;
263
264 delays = ( struct audiobeam_Delays * ) audiobeam_malloc( sizeof(
265 struct audiobeam_Delays ) );
266
267 // Initialize the delays array
268 delays->delay_values = ( float ** ) audiobeam_malloc( num_angles
269 * sizeof( float * ) );
270
271 _Pragma( "loopbound min 1 max 1" )
272 for ( i = 0; i < ( num_angles ); i++ ) {
273 delays->delay_values[i] = ( float * ) audiobeam_malloc( num_mic
274 * sizeof( float ) );
275 }
276
277 return delays;
278}
279
280void audiobeam_calc_distances( float *source_location,
281 float audiobeam_mic_locations[15][3],
282 float *distances,
283 int num_mic )
284{
285 int i;
286
287 _Pragma( "loopbound min 15 max 15" )
288 for ( i = 0; i < num_mic; i++ ) {
289 distances[i] = ( audiobeam_sqrt( ( audiobeam_mic_locations[i][0]
290 - source_location[0] ) *
291 ( audiobeam_mic_locations[i][0]
292 - source_location[0] ) +
293 ( audiobeam_mic_locations[i][1]
294 - source_location[1] ) *
295 ( audiobeam_mic_locations[i][1]
296 - source_location[1] ) +
297 ( audiobeam_mic_locations[i][2]
298 - source_location[2] ) *
299 ( audiobeam_mic_locations[i][2]
300 - source_location[2] ) ) );
301 }
302}
303
304
305void audiobeam_calc_delays( float *distances, float *delays, int sound_speed,
306 int sampling_rate, int num_mic )
307{
308 int i;
309
310 _Pragma( "loopbound min 15 max 15" )
311 for ( i = 0; i < num_mic; i++ )
312 delays[i] = ( distances[i] / sound_speed ) * sampling_rate;
313}
314
315
316void audiobeam_adjust_delays( float *delays, int num_mic )
317{
318 int i;
319 long int min_delay = audiobeam_find_min_in_arr ( delays, num_mic ) - 1;
320
321 _Pragma( "loopbound min 15 max 15" )
322 for ( i = 0; i < num_mic; i++ )
323 delays[i] -= min_delay;
324}
325
326
327float *audiobeam_calc_weights_lr ( int num_mic )
328{
329 float *weights = ( float * ) audiobeam_malloc( num_mic * sizeof( float ) );
330 int index = 0;
331 int y, z;
332
333 int half = num_mic / 4;
334
335 _Pragma( "loopbound min 0 max 0" )
336 for ( z = 1; z >= -1; z -= 2 ) {
337 _Pragma( "loopbound min 0 max 0" )
338 for ( y = 0; y < half; y++ ) {
339 weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y
340 / half );
341 index++;
342 }
343 _Pragma( "loopbound min 0 max 0" )
344 for ( y = 0; y < half; y++ ) {
345 weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * ( -y )
346 / half );
347 index++;
348 }
349 }
350
351 return weights;
352}
353
354
355float *audiobeam_calc_weights_left_only ( int num_mic )
356{
357 float *weights = ( float * ) audiobeam_malloc( num_mic * sizeof( float ) );
358 int index = 0;
359 int y;
360
361 int half = num_mic / 2;
362
363 _Pragma( "loopbound min 15 max 15" )
364 for ( y = -half; y <= half; y++ ) {
365 weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y / half );
366 index++;
367 }
368
369 return weights;
370}
371
372
373float audiobeam_calculate_energy( float *samples, int num_samples )
374{
375 int i;
376 float sum = 0.0;
377
378 _Pragma( "loopbound min 0 max 0" )
379 for ( i = 0; i < num_samples; i++ )
380 sum += ( samples[i] * samples[i] );
381
382 return sum;
383}
384
385
386float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays
387 preprocessed_delays[],
388 float **sample_queue,
389 int queue_head,
390 long int max_delay,
391 int num_mic,
392 float *weights )
393{
394 int i;
395 float sum = 0;
396 int delay_floor;
397 int delay_ceil;
398 int low_index;
399 int high_index;
400 float interpolated_value;
401
402 // add up all the num_mic delayed samples
403 _Pragma( "loopbound min 15 max 15" )
404 for ( i = 0; i < num_mic; i++ ) {
405 delay_floor = preprocessed_delays[i].low;
406 delay_ceil = preprocessed_delays[i].high;
407
408 // Inline wrap around here
409 // Low index gets index of sample right before desired sample
410 low_index = queue_head + delay_floor;
411 if ( low_index > max_delay )
412 low_index -= ( max_delay + 1 );
413
414 // High index gets index of sample right after desired sample
415 high_index = queue_head + delay_ceil;
416 if ( high_index > max_delay )
417 high_index -= ( max_delay + 1 );
418
419 // i gives the value of the microphone we want. However, since
420 // the array only has microphones first_mic to last_mic, we
421 // need to offset our index by first_mic
422
423 interpolated_value = ( ( ( sample_queue[high_index][i] -
424 sample_queue[low_index][i] )
425 * ( preprocessed_delays[i].offset ) )
426 + sample_queue[low_index][i] );
427
428 // If we have microphone weights, multiply the value by the weight
429 if ( weights != 0 )
430 sum += ( interpolated_value * weights[i] );
431 else
432 sum += interpolated_value;
433 }
434
435 return sum;
436
437}
438
439
440int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic,
441 float sampling_rate, float **beamform_results,
442 struct audiobeam_DataQueue *queue,
443 int num_beams, int window, float *weights )
444{
445 int i, j;
446 float time_index = 0;
447 float time_index_inc = ( 1.0 / sampling_rate );
448
449 float value;
450
451 int done = 0;
452
453 struct audiobeam_PreprocessedDelays preprocessed_delays[15];
454
455 audiobeam_preprocess_delays( preprocessed_delays, delays->delay_values[0] );
456
457 _Pragma( "loopbound min 13 max 13" )
458 for ( i = 0; i < delays->max_delay - 1; i++ ) {
459 if ( audiobeam_input_pos < 5760 )
460 audiobeam_parse_line( ( queue->sample_queue )[queue->head], 15 );
461 else
462 return -1;
463 queue->head = audiobeam_wrapped_inc( queue->head, delays->max_delay );
464 }
465 _Pragma( "loopbound min 371 max 371" )
466 for ( i = 0; ( i < window ) || ( window < 0 ) ; i++ ) {
467 if ( audiobeam_input_pos < 5760 )
468 audiobeam_parse_line( ( queue->sample_queue )[queue->head], 15 );
469 else {
470 done = 1;
471 break;
472 }
473
474 _Pragma( "loopbound min 1 max 1" )
475 for ( j = 0; j < num_beams; j++ ) {
476 value = audiobeam_do_beamforming( preprocessed_delays,
477 ( queue->sample_queue ),
478 audiobeam_wrapped_inc( queue->head,
479 delays->max_delay ),
480 delays->max_delay, num_mic, weights );
481
482
483 value = value / num_mic;
484
485 if ( beamform_results != 0 )
486 beamform_results[j][i] = value;
487 }
488
489 queue->tail = queue->head;
490 queue->head = audiobeam_wrapped_inc( queue->head, delays->max_delay );
491
492 time_index += time_index_inc;
493 }
494
495 return ( done );
496}
497
498
499int audiobeam_calc_beamforming_result( struct audiobeam_Delays *delays,
500 float **beamform_results,
501 float *energies,
502 struct audiobeam_DataQueue *queue,
503 int num_beams, int window,
504 int hamming )
505{
506 int i;
507 int done;
508 float *weights = 0;
509
510 if ( hamming ) {
511 if ( ( 15 % 2 ) == 1 )
512 weights = audiobeam_calc_weights_left_only( 15 );
513 else
514 weights = audiobeam_calc_weights_lr( 15 );
515 }
516
517 done = audiobeam_process_signal( delays, 15, 16000,
518 beamform_results,
519 queue, num_beams, window, weights );
520
521 if ( beamform_results != 0 ) {
522 _Pragma( "loopbound min 1 max 1" )
523 for ( i = 0; i < num_beams; i++ )
524 energies[i] = audiobeam_calculate_energy( beamform_results[i], window );
525 }
526 return done;
527}
528
529
530void audiobeam_calc_single_pos( float source_location[3],
531 float audiobeam_mic_locations[15][3],
532 int hamming )
533{
534 float mic_distances[15];
535 struct audiobeam_Delays *delays = audiobeam_init_delays( 1, 15 );
536 struct audiobeam_DataQueue *queue;
537
538 float **beamform_results;
539 float *energies;
540
541 beamform_results = ( float ** ) audiobeam_malloc( 1 * sizeof( float * ) );
542 beamform_results[0] = ( float * ) audiobeam_malloc( 384 * sizeof( float ) );
543 energies = ( float * ) audiobeam_malloc( 1 * sizeof( float * ) );
544
545 // Calculate distances from source to each of mics
546 audiobeam_calc_distances( source_location, audiobeam_mic_locations,
547 mic_distances, 15 );
548
549 audiobeam_calc_delays( mic_distances,
550 delays->delay_values[0],
551 342, 16000, 15 );
552
553 audiobeam_adjust_delays( delays->delay_values[0], 15 );
554
555 delays->max_delay = audiobeam_find_max_in_arr ( delays->delay_values[0], 15 );
556
557 queue = audiobeam_init_data_queue( delays->max_delay, 15 );
558
559 audiobeam_calc_beamforming_result( delays, beamform_results,
560 energies, queue, 1, -1, hamming );
561
562 audiobeam_checksum += beamform_results[0][0] * 1000;
563}
564
565
566/*
567 Main functions
568*/
569
570void _Pragma( "entrypoint" ) audiobeam_main( void )
571{
572 char hamming = 1;
573 audiobeam_calc_single_pos( audiobeam_source_location,
574 audiobeam_mic_locations,
575 hamming );
576}
577
578
579int main( int argc, char **argv )
580{
581 //SET_UP
582 int jobsComplete;
583 int maxJobs=100;
584 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
585 // START_LOOP
586 audiobeam_init();
587 audiobeam_main();
588 // STOP_LOOP
589 }
590 //WRITE_TO_FILE
591
592 return ( audiobeam_return() );
593}
594
diff --git a/all_pairs/source/audiobeam/audiobeam.h b/all_pairs/source/audiobeam/audiobeam.h
new file mode 100644
index 0000000..ff2e844
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeam.h
@@ -0,0 +1,50 @@
1#ifndef AUDIOBEAM_MAIN_H
2#define AUDIOBEAM_MAIN_H
3
4struct audiobeam_DataQueue {
5 float **sample_queue;
6 int head;
7 int tail;
8 unsigned char full;
9};
10
11
12struct audiobeam_Delays {
13 float **delay_values;
14 long int max_delay;
15};
16
17
18struct audiobeam_PreprocessedDelays {
19 float delay;
20 int low;
21 int high;
22 float offset;
23};
24
25
26#undef FLT_MAX
27#define FLT_MAX 999e999
28
29#define SOUND_SPEED 342
30#define SAMPLING_RATE 16000
31#define CARTESIAN_DISTANCE(x1,y1,z1,x2,y2,z2) (sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2)));
32
33#define NUM_MIC 15
34#define ANGLE_ENERGY_WINDOW_SIZE 400
35#define GRID_STEP_SIZE 0.003 // .3cm
36#define NUM_DIRS 7
37#define NUM_TILES 16
38
39#define MIC_HORIZ_SPACE 0.038257
40#define MIC_VERT_SPACE 0.015001
41#define TWO23 8388608.0 // 2^23
42#define BUFFER_SIZE 384 // No of input-tupels (each with NUM_MIC elements)
43#define NUM_MIC_IN_CHAIN 32
44#define NUM_BOARDS_IN_CHAIN 16
45#define INPUT_LENGTH 5760
46
47#define INTERPOLATE(low_value, high_value, offset) (((high_value-low_value)*(offset)) + low_value)
48
49#endif
50
diff --git a/all_pairs/source/audiobeam/audiobeaminput.c b/all_pairs/source/audiobeam/audiobeaminput.c
new file mode 100644
index 0000000..efcd067
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeaminput.c
@@ -0,0 +1,5784 @@
1float audiobeam_input[5760] = {
2 -2.1628241e-002,
3 -6.1782300e-002,
4 1.2674258e-002,
5 4.5557573e-002,
6 -3.1999024e-002,
7 1.5042214e-002,
8 -2.2025290e-002,
9 -1.1691264e-001,
10 -1.1481735e-002,
11 -1.4446880e-002,
12 -1.5755706e-002,
13 -8.0576309e-002,
14 2.0622295e-002,
15 -1.9724793e-003,
16 -1.2299200e-001,
17 -8.3279195e-002,
18 -1.0825949e-002,
19 7.5347056e-002,
20 -3.6992287e-003,
21 1.2980213e-002,
22 5.9641118e-002,
23 1.8884644e-002,
24 -5.5868450e-002,
25 4.1899706e-002,
26 -2.0939881e-002,
27 2.0535662e-002,
28 -9.9773254e-002,
29 -1.5328980e-002,
30 2.1354349e-002,
31 1.3485441e-002,
32 6.2665707e-003,
33 -1.0335293e-002,
34 -4.1743319e-002,
35 4.3513189e-002,
36 -4.2254620e-002,
37 -2.7446285e-002,
38 4.5134873e-002,
39 5.6054726e-002,
40 6.2557771e-002,
41 4.2653265e-002,
42 7.6308850e-003,
43 1.4700700e-002,
44 5.4820763e-002,
45 -1.3939644e-002,
46 -8.8708573e-002,
47 1.4383734e-002,
48 4.0463345e-003,
49 3.5856296e-002,
50 2.7271902e-002,
51 2.0721019e-002,
52 3.5167562e-002,
53 -2.7007340e-002,
54 -1.3367771e-002,
55 -6.8606571e-002,
56 -1.1089227e-001,
57 7.3041941e-002,
58 -5.2066383e-002,
59 -5.1117839e-003,
60 -3.7742692e-002,
61 -1.1895006e-002,
62 -5.7323089e-002,
63 -5.4802003e-003,
64 -8.4072455e-003,
65 1.5633496e-002,
66 4.6059069e-002,
67 -6.1861422e-002,
68 -3.3034801e-002,
69 1.7182310e-002,
70 1.1807449e-001,
71 8.2171643e-003,
72 -1.4691311e-002,
73 -7.2660364e-004,
74 4.6637366e-002,
75 -6.9687813e-004,
76 -2.7780373e-002,
77 5.9544506e-002,
78 -5.6050055e-003,
79 -3.5444498e-002,
80 1.2845303e-002,
81 -1.0379076e-001,
82 -8.5864760e-002,
83 1.9192324e-002,
84 -2.6644473e-003,
85 5.4431089e-003,
86 -9.2110237e-003,
87 7.9344657e-002,
88 4.7203951e-002,
89 9.6834909e-002,
90 -1.0553527e-001,
91 -8.5097540e-004,
92 5.9460688e-002,
93 4.4844228e-002,
94 -2.8858692e-002,
95 4.4496937e-002,
96 -3.9902243e-002,
97 5.5557069e-002,
98 -1.1814152e-002,
99 -5.8464847e-002,
100 -1.0753965e-002,
101 5.7336183e-002,
102 2.6582677e-002,
103 2.2119089e-002,
104 -1.4469086e-002,
105 3.2141585e-002,
106 -1.0303352e-001,
107 -1.8856419e-003,
108 3.8161312e-002,
109 -3.7091166e-002,
110 -5.1262587e-003,
111 4.2556931e-002,
112 -5.8465556e-002,
113 4.2193534e-002,
114 -1.4951154e-002,
115 1.7423551e-002,
116 2.7519487e-002,
117 -9.0048353e-002,
118 -2.6206603e-002,
119 -1.1536221e-002,
120 4.5418578e-002,
121 -9.1746774e-002,
122 1.6370112e-002,
123 8.2439024e-003,
124 -1.7961312e-002,
125 -7.5403629e-002,
126 -6.6798880e-003,
127 -9.2569474e-003,
128 -1.8133432e-002,
129 -6.7922929e-002,
130 -3.3209516e-002,
131 4.7587886e-002,
132 -4.4354675e-002,
133 -7.9939507e-002,
134 -1.0312521e-001,
135 -4.6389013e-002,
136 -6.8492137e-002,
137 8.7253275e-003,
138 -1.0040243e-002,
139 -2.3972856e-002,
140 1.9377428e-003,
141 -1.2364076e-002,
142 -3.3033927e-002,
143 6.2238030e-002,
144 -4.7879158e-002,
145 -1.9680886e-002,
146 -3.2198806e-002,
147 -4.0721657e-003,
148 -1.7973043e-002,
149 9.3910391e-003,
150 -9.1117967e-002,
151 3.6036154e-002,
152 -9.3285589e-003,
153 -3.9239303e-002,
154 -1.4022387e-001,
155 1.1102588e-001,
156 -9.1222642e-002,
157 -4.0301199e-002,
158 7.1912258e-002,
159 1.5040754e-002,
160 8.1648312e-002,
161 3.9995645e-002,
162 -1.3388074e-002,
163 1.9629547e-002,
164 3.5710780e-003,
165 1.1166215e-002,
166 -4.0137762e-002,
167 3.6284046e-002,
168 4.1404491e-002,
169 -5.8754380e-002,
170 -7.8104994e-003,
171 -5.3507568e-002,
172 1.3005354e-002,
173 -1.6914462e-002,
174 8.5270739e-002,
175 3.9979512e-002,
176 4.5752537e-002,
177 -3.1159018e-002,
178 4.9213792e-002,
179 6.1313765e-002,
180 4.3386180e-002,
181 -1.1103888e-002,
182 -2.9414395e-002,
183 -1.2976305e-002,
184 6.2751925e-002,
185 2.6120284e-002,
186 -2.4616119e-002,
187 -3.6435894e-002,
188 7.1182254e-002,
189 2.2753153e-002,
190 3.0188200e-002,
191 -3.1009759e-002,
192 -8.5616927e-002,
193 -4.6712075e-002,
194 1.0069141e-002,
195 -1.2036765e-001,
196 3.4740635e-002,
197 1.0916700e-001,
198 -7.5289504e-002,
199 -5.3676914e-002,
200 -1.6396310e-002,
201 5.2259303e-002,
202 -2.2119146e-002,
203 4.3186864e-002,
204 5.1169779e-002,
205 6.6785827e-002,
206 8.4849447e-002,
207 -5.2696816e-002,
208 -6.5414943e-003,
209 8.6775788e-002,
210 8.7802920e-003,
211 2.8938998e-002,
212 -6.8520041e-003,
213 5.1510683e-002,
214 -2.9026553e-002,
215 3.8173521e-002,
216 2.2338277e-002,
217 3.0163548e-002,
218 -4.3077452e-002,
219 7.9805371e-002,
220 4.7317864e-002,
221 -3.1363067e-002,
222 3.0903885e-002,
223 -1.3112581e-002,
224 4.6251235e-002,
225 2.5813919e-002,
226 -5.2188163e-002,
227 5.9587326e-003,
228 1.0092254e-002,
229 1.2104228e-002,
230 2.7865320e-002,
231 3.4901635e-002,
232 -2.5736803e-002,
233 1.3229570e-002,
234 3.6694281e-003,
235 3.3012708e-002,
236 2.9284882e-002,
237 3.0060870e-002,
238 4.5508139e-002,
239 -3.6974026e-002,
240 7.7034396e-002,
241 -6.8227707e-002,
242 5.3618194e-002,
243 -6.1636629e-002,
244 4.1438304e-002,
245 1.1367451e-002,
246 -4.4009108e-002,
247 -2.3843912e-002,
248 -1.6703032e-002,
249 3.7265590e-002,
250 -7.8425072e-003,
251 7.0384481e-002,
252 -2.4218783e-002,
253 -3.5625536e-002,
254 1.8010625e-002,
255 1.1966647e-002,
256 2.5491626e-003,
257 3.1251434e-003,
258 -2.6075724e-002,
259 -4.3802442e-002,
260 -1.2920483e-002,
261 3.3085779e-002,
262 -3.9037317e-003,
263 -2.8269926e-002,
264 4.1542553e-002,
265 -8.2930418e-002,
266 5.6657974e-002,
267 3.4391329e-002,
268 -5.5825221e-002,
269 6.8989268e-002,
270 1.2541652e-003,
271 -7.7722092e-002,
272 -4.6334370e-003,
273 3.1744148e-002,
274 -5.5503811e-002,
275 -3.4445949e-002,
276 -9.4038308e-003,
277 -2.7828988e-002,
278 1.0887660e-001,
279 1.3636863e-002,
280 -3.7585580e-002,
281 4.0418722e-002,
282 -1.3737476e-002,
283 -5.0488197e-003,
284 1.3194491e-001,
285 7.2649277e-002,
286 -3.6200249e-002,
287 -4.1687712e-002,
288 -1.7974402e-001,
289 -9.9629449e-002,
290 -8.8510199e-002,
291 -3.2055261e-002,
292 1.7036375e-002,
293 1.8071052e-002,
294 4.4934493e-002,
295 -1.0864015e-002,
296 9.9226525e-003,
297 -1.6564939e-002,
298 -3.4734325e-002,
299 3.5725355e-002,
300 3.0344723e-002,
301 -3.6905057e-002,
302 1.4666105e-002,
303 -9.1517247e-002,
304 -3.3012325e-002,
305 5.8220711e-002,
306 -6.8047909e-003,
307 3.6517819e-002,
308 8.7157879e-002,
309 -1.4120887e-002,
310 5.4666271e-002,
311 2.0673658e-002,
312 -5.8489896e-002,
313 -1.0321028e-001,
314 1.7051732e-002,
315 -4.4728363e-003,
316 7.1522488e-004,
317 -6.6825032e-002,
318 -3.0624456e-002,
319 5.7023563e-002,
320 -1.1878060e-002,
321 1.7099754e-002,
322 4.3931414e-002,
323 6.1445253e-002,
324 3.9676417e-002,
325 7.7224665e-002,
326 6.4921134e-002,
327 -5.6517669e-003,
328 5.5906816e-002,
329 -2.1154100e-002,
330 2.4198912e-002,
331 1.2288710e-002,
332 3.5640310e-002,
333 -3.7175887e-002,
334 -6.0273241e-002,
335 6.4682700e-003,
336 2.1266448e-002,
337 -6.8591151e-002,
338 1.1184946e-002,
339 4.6699013e-003,
340 -1.0346103e-001,
341 -7.7362572e-002,
342 4.7383361e-003,
343 -1.4630850e-002,
344 3.7812788e-002,
345 1.6292353e-002,
346 -4.8009838e-002,
347 8.0999615e-002,
348 2.1004391e-003,
349 1.5541126e-001,
350 -6.1366286e-003,
351 -7.1757358e-002,
352 -1.8036409e-002,
353 4.4754181e-002,
354 8.4250625e-003,
355 2.0321052e-002,
356 2.3096646e-002,
357 -4.7739081e-002,
358 -3.6540263e-002,
359 -1.3962473e-002,
360 -1.4429499e-002,
361 5.4134628e-002,
362 -3.4826503e-002,
363 -9.5953591e-002,
364 -2.5723076e-003,
365 2.5258029e-002,
366 -1.7985838e-002,
367 -3.2436879e-002,
368 7.4368827e-002,
369 7.8647624e-002,
370 1.0656742e-002,
371 8.4282290e-003,
372 2.5266494e-002,
373 1.0782181e-002,
374 7.0122588e-002,
375 4.5656108e-002,
376 -1.7103947e-002,
377 4.2780530e-002,
378 -9.6794177e-003,
379 -6.4130219e-003,
380 -9.2925547e-002,
381 5.4742908e-002,
382 -7.5128799e-002,
383 -7.3489810e-002,
384 -3.0056779e-003,
385 -7.9295585e-003,
386 -2.1268989e-002,
387 -1.8030581e-002,
388 1.8197354e-002,
389 -9.1941398e-002,
390 -6.5053760e-002,
391 -2.8177888e-002,
392 6.2682028e-002,
393 -2.5915727e-002,
394 -1.5832074e-002,
395 6.8064152e-002,
396 7.3910585e-003,
397 9.9715351e-003,
398 1.4832463e-002,
399 -8.5346638e-004,
400 1.7638664e-002,
401 3.0446443e-002,
402 -1.2396491e-002,
403 -5.8601288e-002,
404 -5.7627198e-003,
405 -7.1554886e-003,
406 -6.3799636e-003,
407 -7.9695655e-002,
408 2.4753204e-002,
409 8.6758471e-003,
410 -4.9728861e-002,
411 2.0786272e-002,
412 -7.6560881e-002,
413 1.8730544e-002,
414 2.1715688e-002,
415 4.1880687e-002,
416 -4.0154045e-002,
417 -3.0255220e-002,
418 7.5668890e-002,
419 2.6577586e-002,
420 6.0758844e-002,
421 4.1263811e-002,
422 -7.2132197e-002,
423 -5.4040115e-002,
424 4.5831681e-002,
425 2.9148772e-002,
426 -9.9761159e-002,
427 -2.4308664e-002,
428 -5.9443444e-002,
429 3.9842573e-002,
430 -4.8058590e-002,
431 -1.6081315e-002,
432 5.2772543e-002,
433 1.9132275e-002,
434 1.3499840e-002,
435 -2.5313375e-002,
436 4.1852174e-002,
437 2.8461234e-002,
438 3.5598046e-002,
439 -4.2019346e-002,
440 3.0022497e-002,
441 1.3199080e-003,
442 8.3394564e-002,
443 2.2949521e-002,
444 4.1566899e-002,
445 1.1383869e-002,
446 -2.6939783e-002,
447 -1.8963007e-002,
448 -6.3268458e-002,
449 5.8324716e-002,
450 4.8789982e-002,
451 5.6035385e-002,
452 -2.0057577e-002,
453 4.8354809e-002,
454 6.4102491e-002,
455 8.5367473e-003,
456 -4.4917671e-003,
457 5.3137245e-002,
458 -3.4406597e-003,
459 -2.5126308e-002,
460 3.6564998e-003,
461 9.6593471e-002,
462 7.4728111e-002,
463 -6.7266129e-002,
464 -4.9014918e-002,
465 7.2046324e-005,
466 1.0162088e-001,
467 3.4409693e-002,
468 7.3462774e-003,
469 -8.0225074e-002,
470 4.8609099e-002,
471 3.2217993e-002,
472 -2.8071970e-002,
473 -3.6815087e-002,
474 3.0467444e-002,
475 4.3287817e-002,
476 -1.3733658e-002,
477 2.5769175e-002,
478 2.6532442e-002,
479 6.3705272e-002,
480 9.0108580e-004,
481 -8.9331571e-003,
482 4.0743375e-002,
483 2.1807528e-002,
484 7.9702732e-002,
485 -7.5750752e-003,
486 7.0674335e-002,
487 3.7582849e-002,
488 3.9334641e-003,
489 -2.5679423e-002,
490 2.2647574e-002,
491 -6.4712014e-002,
492 2.4315794e-002,
493 1.5494849e-002,
494 -3.9942923e-002,
495 3.3496104e-002,
496 -5.9740340e-002,
497 3.5474677e-002,
498 6.6577221e-002,
499 6.8351408e-002,
500 -7.7174045e-002,
501 -3.3267903e-002,
502 -4.3616992e-002,
503 1.2970427e-001,
504 6.0899210e-002,
505 4.3444379e-003,
506 -1.0402039e-001,
507 4.3108587e-002,
508 1.3577371e-002,
509 3.3900628e-002,
510 7.3707838e-003,
511 -1.5925799e-002,
512 6.4439821e-002,
513 1.7075281e-003,
514 1.0684273e-001,
515 1.3675111e-002,
516 -1.8111888e-003,
517 -2.8508186e-002,
518 -6.5596762e-002,
519 1.8536230e-002,
520 2.3318748e-002,
521 4.7302415e-002,
522 7.7239329e-003,
523 -2.4929896e-002,
524 -3.5669784e-002,
525 4.8605025e-002,
526 9.7598834e-002,
527 3.3591893e-002,
528 1.3978895e-002,
529 2.2590039e-002,
530 -5.5155328e-002,
531 -2.3844007e-002,
532 -2.8932963e-002,
533 -4.5784933e-002,
534 -2.5579789e-002,
535 8.6706332e-002,
536 8.5991126e-002,
537 -4.4830492e-002,
538 1.7419718e-002,
539 1.4916965e-002,
540 -6.2744229e-002,
541 -2.1218715e-002,
542 5.9749921e-002,
543 2.6471628e-003,
544 1.4696082e-002,
545 -1.1916464e-001,
546 -7.4054943e-002,
547 3.3702032e-002,
548 -7.2744375e-002,
549 2.0153878e-002,
550 -4.7562683e-002,
551 -3.2418295e-002,
552 1.8784044e-002,
553 9.4509719e-002,
554 8.6064590e-002,
555 -1.2657551e-002,
556 -3.8219708e-002,
557 -5.9906689e-002,
558 3.8677878e-002,
559 3.2909039e-002,
560 1.3356926e-002,
561 -1.9001381e-002,
562 -3.9834512e-002,
563 1.6185466e-002,
564 -2.1554965e-002,
565 -1.0883439e-001,
566 -2.9635956e-002,
567 1.2873885e-002,
568 2.7852743e-002,
569 3.5614484e-003,
570 -4.7306763e-002,
571 -1.0771995e-001,
572 -7.9289260e-004,
573 1.1021590e-001,
574 -6.1261912e-003,
575 5.2735506e-002,
576 -5.0261529e-002,
577 3.2092184e-002,
578 3.1401447e-002,
579 2.6629993e-002,
580 -2.9882337e-003,
581 -6.0317700e-002,
582 -3.0940994e-002,
583 -3.8375379e-002,
584 -1.0663192e-001,
585 -1.1058175e-002,
586 -5.6424824e-002,
587 -7.7026313e-003,
588 -4.1079471e-002,
589 -2.1629167e-002,
590 -2.6973772e-002,
591 -4.5878364e-002,
592 1.5542578e-002,
593 -4.9103021e-002,
594 -1.0554701e-002,
595 -5.0947614e-002,
596 -3.1865395e-002,
597 9.0008999e-002,
598 4.5801038e-002,
599 1.5787324e-002,
600 6.1816926e-002,
601 3.9975029e-002,
602 -8.0101743e-002,
603 3.6589676e-002,
604 -4.0044532e-002,
605 -5.4152676e-003,
606 -2.7100833e-002,
607 2.0669295e-003,
608 4.2072166e-002,
609 -4.8541169e-002,
610 -6.0994910e-002,
611 7.2269246e-002,
612 1.8547974e-002,
613 3.2317037e-002,
614 -3.7668570e-002,
615 2.3090187e-002,
616 -8.4282566e-003,
617 1.2909956e-002,
618 -4.6799208e-003,
619 -7.5882838e-002,
620 -4.5005968e-002,
621 6.0924318e-002,
622 1.5170746e-002,
623 -8.0718858e-003,
624 -3.1913614e-002,
625 2.9448478e-002,
626 5.6982375e-002,
627 -2.2421475e-002,
628 2.7408554e-002,
629 -1.0052456e-001,
630 -3.0342741e-002,
631 -8.0221320e-002,
632 -5.2820631e-002,
633 1.4287569e-002,
634 -3.5261023e-002,
635 -1.2712299e-002,
636 1.0298138e-002,
637 -7.4545734e-002,
638 -7.1662807e-003,
639 -6.3049311e-002,
640 -3.3128714e-003,
641 -3.7018937e-002,
642 -9.2155629e-002,
643 4.4295353e-003,
644 -2.5345078e-002,
645 -5.0175815e-004,
646 -2.2425974e-002,
647 7.0790673e-002,
648 4.6067398e-002,
649 1.3356450e-002,
650 -7.5350427e-002,
651 9.2272647e-002,
652 -6.0388207e-002,
653 6.2880311e-002,
654 -4.6813092e-002,
655 6.4358587e-002,
656 6.5476593e-002,
657 -5.0385005e-002,
658 1.1259635e-002,
659 -2.8642227e-002,
660 6.0591769e-003,
661 7.8259699e-003,
662 -4.0086083e-002,
663 -1.3107082e-002,
664 -2.5073934e-002,
665 1.5301678e-002,
666 -6.1350007e-002,
667 -4.0860320e-002,
668 4.5224779e-002,
669 -4.4892524e-002,
670 8.8006431e-002,
671 -3.3282403e-002,
672 -5.6195537e-002,
673 -1.1931638e-001,
674 -6.8019421e-002,
675 -7.0651820e-003,
676 1.0114029e-001,
677 2.6799939e-002,
678 -4.5414349e-002,
679 7.3662653e-002,
680 2.6023897e-002,
681 -7.7197973e-002,
682 1.8472004e-002,
683 6.4325310e-003,
684 1.0535758e-001,
685 -8.2482506e-002,
686 -1.0868944e-001,
687 8.7186828e-002,
688 4.2331149e-003,
689 6.6302594e-003,
690 5.0652627e-002,
691 -2.6295176e-002,
692 1.1319735e-002,
693 -5.3688488e-002,
694 -8.3685938e-002,
695 3.8054233e-002,
696 -2.5923609e-002,
697 8.7603907e-002,
698 4.4975322e-002,
699 2.0615118e-002,
700 3.7674950e-002,
701 5.6434838e-002,
702 1.0977012e-001,
703 2.1349762e-003,
704 -1.4936346e-004,
705 6.7930892e-002,
706 3.2086590e-003,
707 -4.5878929e-002,
708 -4.4181125e-002,
709 2.4715658e-002,
710 7.9994617e-002,
711 5.2384101e-002,
712 -9.5190518e-003,
713 -3.7239495e-002,
714 1.9883359e-002,
715 4.0730677e-003,
716 -1.1677479e-001,
717 -2.6374780e-002,
718 -7.9398641e-002,
719 -3.5523570e-002,
720 -1.8151457e-002,
721 -3.7191923e-002,
722 -1.0831981e-001,
723 5.5198514e-002,
724 8.2754639e-002,
725 -5.5996264e-002,
726 -6.5431323e-002,
727 1.6211145e-002,
728 -6.8206035e-002,
729 -2.9416838e-002,
730 5.3307249e-002,
731 1.7472763e-002,
732 3.7312882e-003,
733 -5.1498829e-002,
734 -6.2257189e-002,
735 -2.9692831e-002,
736 -2.4493198e-002,
737 -2.7319437e-003,
738 5.8815114e-002,
739 -6.3249182e-002,
740 2.0730820e-002,
741 9.5563463e-003,
742 -2.2720249e-002,
743 2.5296131e-002,
744 -1.9878781e-002,
745 -3.4238910e-002,
746 -2.4677844e-002,
747 6.9236841e-002,
748 -3.4704441e-002,
749 -3.9318071e-002,
750 5.7750083e-002,
751 3.4211433e-002,
752 -5.0475709e-002,
753 2.5174181e-002,
754 -4.6996048e-002,
755 1.6221876e-002,
756 -2.6204170e-002,
757 1.0630488e-002,
758 4.5517196e-003,
759 8.3863415e-002,
760 4.8780028e-002,
761 2.3656142e-002,
762 -8.5385372e-002,
763 -7.6803464e-003,
764 1.3583644e-002,
765 1.0156741e-001,
766 1.1623477e-001,
767 3.0703572e-002,
768 -1.8790478e-002,
769 -2.5434562e-002,
770 2.6081461e-002,
771 -8.0973679e-002,
772 4.7528492e-003,
773 5.1709027e-002,
774 -2.7152886e-002,
775 3.3078882e-002,
776 9.5807816e-002,
777 -1.6742069e-002,
778 5.2847289e-002,
779 7.4190627e-002,
780 8.4661383e-003,
781 -1.7127745e-002,
782 2.5387176e-002,
783 -2.4425657e-002,
784 1.0363293e-002,
785 3.2901544e-002,
786 2.4049224e-002,
787 -3.6364045e-002,
788 -1.8374024e-002,
789 1.9170206e-002,
790 3.5899319e-002,
791 2.2884438e-002,
792 -4.2986435e-004,
793 -3.7263522e-002,
794 -2.4107817e-002,
795 -1.0160656e-002,
796 -5.2244378e-003,
797 8.4713192e-002,
798 -3.3175117e-003,
799 -6.8918873e-002,
800 -1.0757423e-001,
801 1.9995005e-002,
802 1.0018587e-002,
803 -1.0031442e-003,
804 -2.6646668e-002,
805 -1.4140223e-002,
806 -1.9093589e-002,
807 8.2412659e-002,
808 5.0569231e-002,
809 -1.9249580e-003,
810 1.6857775e-002,
811 4.4516048e-002,
812 2.9634803e-002,
813 -7.4675793e-002,
814 6.9128286e-002,
815 1.7838807e-002,
816 -1.5706998e-002,
817 2.3497836e-002,
818 -2.7256676e-002,
819 -1.6892391e-002,
820 -6.2498894e-002,
821 1.8814550e-002,
822 6.7802861e-002,
823 -4.5010985e-002,
824 -7.9693020e-004,
825 -1.6417629e-002,
826 -1.6571552e-002,
827 -3.2170429e-002,
828 -3.1451461e-002,
829 5.9127646e-002,
830 4.2496269e-002,
831 5.8440594e-002,
832 -3.7761868e-002,
833 1.4543937e-001,
834 4.6291259e-003,
835 -8.8031773e-003,
836 -3.7376149e-002,
837 4.4444334e-002,
838 -3.2946165e-002,
839 2.7709611e-002,
840 -4.6454274e-002,
841 -5.4184987e-003,
842 1.9082159e-002,
843 1.1097683e-003,
844 -7.1272377e-002,
845 1.8112885e-003,
846 2.6898226e-003,
847 -3.0686681e-002,
848 -1.9829229e-002,
849 3.0867601e-002,
850 -6.2758817e-002,
851 -2.2846248e-002,
852 6.0573296e-002,
853 3.7414532e-002,
854 3.6169907e-002,
855 -2.3442499e-003,
856 2.5963449e-002,
857 -5.0418274e-002,
858 -7.0858380e-003,
859 2.2793366e-002,
860 -4.5274123e-002,
861 4.4264571e-002,
862 -5.5435866e-002,
863 -6.0444822e-002,
864 -4.4730927e-002,
865 -2.6702128e-003,
866 3.0721521e-002,
867 3.9441000e-003,
868 8.3714830e-002,
869 -1.2824805e-002,
870 8.9065027e-002,
871 -4.1791317e-002,
872 -9.6506591e-004,
873 -2.2150161e-002,
874 -5.4266803e-002,
875 -7.9756811e-002,
876 2.9723999e-003,
877 -5.4652294e-004,
878 -8.3350132e-002,
879 1.0241351e-002,
880 -9.6004506e-002,
881 1.1043342e-002,
882 -1.0036827e-001,
883 5.4166215e-002,
884 5.3435462e-002,
885 1.0602215e-002,
886 2.9868847e-002,
887 -2.4597423e-003,
888 1.1437786e-002,
889 -4.2279579e-002,
890 -8.8732642e-003,
891 -2.9476925e-002,
892 3.6694209e-002,
893 3.3176455e-005,
894 -7.3778252e-003,
895 -3.9144818e-002,
896 -8.3308862e-003,
897 4.6791993e-002,
898 -1.7037485e-003,
899 4.5892237e-002,
900 1.5597981e-002,
901 -5.6087508e-002,
902 -4.1107610e-005,
903 -1.0683418e-002,
904 -2.6103976e-002,
905 -8.4348999e-003,
906 3.2082383e-002,
907 1.4938214e-001,
908 3.9964806e-002,
909 -7.8254583e-003,
910 4.6722479e-002,
911 9.3200915e-002,
912 2.4464994e-002,
913 8.3718835e-004,
914 1.5250387e-002,
915 -1.2400454e-001,
916 -2.8639656e-002,
917 -1.5938766e-002,
918 -2.5676238e-002,
919 -5.1847115e-002,
920 1.7639941e-003,
921 4.9326733e-003,
922 -1.5856443e-002,
923 -9.1307767e-004,
924 -1.5554562e-002,
925 2.5941199e-002,
926 -2.9757970e-002,
927 1.2201936e-001,
928 8.0973215e-002,
929 1.7146982e-002,
930 1.4736881e-002,
931 6.0467585e-002,
932 5.4698972e-002,
933 2.5876279e-002,
934 1.0164087e-002,
935 3.8201202e-002,
936 -6.0518215e-002,
937 -1.3895876e-002,
938 3.4728204e-002,
939 -1.1711300e-001,
940 -1.1216734e-002,
941 -3.9340786e-002,
942 -2.7309751e-002,
943 5.9063770e-003,
944 2.0738498e-002,
945 -1.3812395e-002,
946 -5.7982126e-002,
947 -9.3680977e-002,
948 -4.9666791e-002,
949 -2.6529709e-002,
950 5.2766295e-002,
951 -2.1506279e-002,
952 9.3091830e-002,
953 -3.5081971e-002,
954 1.4449703e-002,
955 5.8269304e-002,
956 1.0329005e-001,
957 -3.4264617e-002,
958 -1.9998674e-002,
959 4.0219340e-002,
960 2.0651887e-002,
961 5.2208561e-003,
962 2.1487670e-002,
963 2.4204968e-002,
964 3.0673837e-002,
965 -8.5293543e-003,
966 -5.3952186e-002,
967 8.9865270e-002,
968 1.0436717e-001,
969 -9.7344984e-003,
970 -9.7393746e-003,
971 5.2162345e-002,
972 6.8291250e-003,
973 -3.3926390e-002,
974 -3.5345884e-002,
975 -2.1419424e-002,
976 2.4503709e-002,
977 4.4872568e-002,
978 -3.6811060e-002,
979 4.6761401e-002,
980 4.9242905e-002,
981 2.9535711e-002,
982 -7.5315008e-003,
983 8.4931550e-003,
984 1.3235857e-001,
985 8.4181971e-002,
986 -6.3526263e-002,
987 4.1655473e-003,
988 6.3417279e-003,
989 -1.3065747e-002,
990 -5.7645495e-002,
991 1.8950407e-002,
992 3.6717958e-002,
993 1.2058270e-001,
994 2.9698808e-002,
995 6.3712863e-002,
996 -7.8927013e-002,
997 -1.1092228e-001,
998 7.5127329e-002,
999 3.6792936e-002,
1000 1.8047426e-002,
1001 1.6372435e-002,
1002 -1.1358573e-002,
1003 -1.1114199e-002,
1004 -3.1011890e-003,
1005 1.2753148e-001,
1006 -1.3063278e-003,
1007 2.9175038e-002,
1008 1.0744000e-002,
1009 8.5396074e-003,
1010 3.0555550e-002,
1011 1.9846964e-002,
1012 -2.0887290e-003,
1013 7.4108765e-004,
1014 -6.8980202e-002,
1015 -6.9539294e-002,
1016 -7.1891402e-002,
1017 2.6483042e-002,
1018 -1.0604522e-001,
1019 1.4946154e-002,
1020 -2.0885875e-002,
1021 8.1620406e-002,
1022 2.2391518e-003,
1023 -4.3108583e-002,
1024 -2.8345459e-002,
1025 2.1767961e-002,
1026 -4.1509277e-002,
1027 5.0332798e-002,
1028 -3.0747398e-003,
1029 8.1280247e-003,
1030 -2.8574311e-002,
1031 -3.7557299e-002,
1032 4.6116535e-002,
1033 -7.5548776e-002,
1034 4.2485208e-002,
1035 -1.2735059e-002,
1036 -4.8713882e-002,
1037 3.4080268e-002,
1038 3.8109829e-002,
1039 -7.9933234e-002,
1040 5.0868655e-003,
1041 -3.6956005e-002,
1042 -6.5608678e-003,
1043 6.1566793e-002,
1044 3.9747615e-002,
1045 -7.0776849e-003,
1046 -1.0039001e-002,
1047 1.0635588e-001,
1048 -3.2262564e-002,
1049 6.6284637e-002,
1050 -1.5602956e-002,
1051 9.8826341e-002,
1052 2.8765472e-002,
1053 4.9988770e-002,
1054 2.8083188e-002,
1055 3.7850396e-003,
1056 3.8099036e-002,
1057 -6.2803094e-002,
1058 -8.0284071e-003,
1059 1.7678623e-002,
1060 1.5384533e-001,
1061 3.0604908e-002,
1062 -2.2938654e-002,
1063 -6.6147444e-003,
1064 8.0228244e-003,
1065 6.3229249e-002,
1066 1.9888120e-002,
1067 -1.2483914e-002,
1068 -3.3020847e-002,
1069 5.4285124e-002,
1070 -2.2046600e-002,
1071 7.6270296e-002,
1072 -3.8125981e-002,
1073 4.2116981e-002,
1074 6.8249119e-002,
1075 4.9569658e-002,
1076 -1.2181580e-002,
1077 -3.3950151e-002,
1078 -3.3512560e-002,
1079 -4.0037716e-002,
1080 3.8517111e-002,
1081 -3.0444190e-002,
1082 -1.8608773e-002,
1083 1.5643509e-002,
1084 4.0250976e-002,
1085 1.9776990e-002,
1086 -3.1560979e-002,
1087 -3.1229293e-003,
1088 -2.5832801e-003,
1089 2.7968081e-002,
1090 -5.6392681e-002,
1091 4.7360525e-002,
1092 3.8619319e-003,
1093 9.9891506e-002,
1094 -1.8199130e-003,
1095 3.1119514e-003,
1096 -9.1106029e-002,
1097 -1.4519250e-002,
1098 3.7010312e-002,
1099 -1.1213690e-002,
1100 2.1256532e-002,
1101 -5.3987387e-002,
1102 5.7866117e-002,
1103 -4.2626330e-002,
1104 -3.3483769e-002,
1105 -5.2898877e-002,
1106 -6.7225352e-002,
1107 5.1417756e-002,
1108 1.3929020e-003,
1109 5.2022234e-002,
1110 1.0592230e-001,
1111 -6.8998892e-002,
1112 -7.3435118e-002,
1113 3.0523655e-002,
1114 -5.7162591e-003,
1115 -3.2771503e-002,
1116 9.2367770e-003,
1117 -6.7747716e-003,
1118 1.0333099e-002,
1119 -1.5577876e-002,
1120 -6.7817347e-002,
1121 -6.6533637e-002,
1122 -6.3984097e-002,
1123 5.6216531e-002,
1124 1.5579751e-002,
1125 -2.7104760e-003,
1126 2.0901166e-002,
1127 -1.1389339e-002,
1128 2.4314314e-002,
1129 9.6320945e-003,
1130 -3.5425250e-002,
1131 2.9816167e-002,
1132 -1.0582802e-001,
1133 7.9031755e-002,
1134 5.8936482e-002,
1135 4.9235081e-002,
1136 -2.0598427e-002,
1137 2.7257218e-002,
1138 8.3473318e-002,
1139 1.0047121e-001,
1140 7.7116867e-002,
1141 3.9518492e-002,
1142 6.3112265e-003,
1143 -6.8158283e-002,
1144 8.2755720e-003,
1145 -1.4671408e-002,
1146 1.0928921e-001,
1147 -5.3580922e-002,
1148 -4.9000311e-002,
1149 9.9920986e-002,
1150 3.5724099e-002,
1151 3.0645803e-002,
1152 2.1810846e-003,
1153 -3.5472111e-002,
1154 -5.8047398e-002,
1155 4.6521237e-002,
1156 5.3030675e-002,
1157 1.6183593e-002,
1158 4.7161315e-002,
1159 1.5496372e-002,
1160 -2.6065334e-002,
1161 5.4108355e-002,
1162 1.1113747e-001,
1163 -4.3256641e-002,
1164 1.6776514e-002,
1165 -9.2777987e-002,
1166 1.0831881e-001,
1167 2.6550297e-002,
1168 5.6809097e-002,
1169 4.1708284e-003,
1170 -9.3188930e-002,
1171 -3.7166019e-002,
1172 7.2595776e-002,
1173 -5.8774162e-002,
1174 -8.4078954e-003,
1175 -8.3732623e-002,
1176 -1.4874571e-002,
1177 4.1882968e-002,
1178 -3.2712401e-002,
1179 -2.7953154e-002,
1180 1.1313205e-002,
1181 4.9524990e-002,
1182 2.0294329e-003,
1183 3.8285760e-002,
1184 -1.4648978e-002,
1185 -3.5010308e-002,
1186 3.2018027e-002,
1187 -1.7151604e-002,
1188 -9.6536966e-002,
1189 -4.6726273e-002,
1190 1.7288478e-002,
1191 1.5788740e-002,
1192 5.2848095e-003,
1193 4.1795447e-002,
1194 4.6331282e-002,
1195 7.0958286e-002,
1196 -3.3004895e-002,
1197 -1.5541634e-002,
1198 -6.4899819e-002,
1199 4.4813983e-002,
1200 2.1314689e-002,
1201 2.5903378e-002,
1202 3.1412995e-002,
1203 2.7655815e-002,
1204 7.0916690e-003,
1205 3.6198660e-002,
1206 -2.9768515e-002,
1207 5.8014817e-002,
1208 -5.8727472e-002,
1209 -1.2787628e-002,
1210 1.2855854e-001,
1211 -7.0659467e-002,
1212 -9.9019211e-002,
1213 -3.2969432e-002,
1214 3.1190632e-002,
1215 6.5956753e-003,
1216 -1.6987652e-002,
1217 4.0088843e-002,
1218 -1.0857916e-001,
1219 1.1385790e-002,
1220 6.8736591e-002,
1221 9.1859027e-003,
1222 -2.2753959e-002,
1223 6.5639798e-002,
1224 4.4619698e-002,
1225 -5.3424194e-004,
1226 3.2475239e-002,
1227 -5.5982848e-002,
1228 -5.9416171e-003,
1229 -2.6137328e-002,
1230 4.7534015e-002,
1231 -4.3905563e-002,
1232 4.7139261e-002,
1233 -5.0539423e-002,
1234 -5.2509019e-003,
1235 -8.4340990e-003,
1236 1.7266091e-002,
1237 -6.5954891e-002,
1238 -1.1344100e-001,
1239 -2.5794929e-002,
1240 5.3678895e-002,
1241 -1.0500180e-002,
1242 5.6847837e-002,
1243 -3.0370988e-002,
1244 -9.2272021e-004,
1245 -1.1716566e-002,
1246 -6.7153889e-002,
1247 -4.9491944e-002,
1248 -2.7151079e-002,
1249 4.9084906e-003,
1250 -3.3137805e-002,
1251 -5.7067625e-002,
1252 -3.5807416e-003,
1253 -1.9012110e-002,
1254 -2.3489886e-002,
1255 -6.6147208e-002,
1256 -1.9730903e-002,
1257 -5.7617192e-002,
1258 -1.7743738e-002,
1259 6.2747755e-002,
1260 3.0746059e-002,
1261 -2.1208817e-002,
1262 1.0724738e-002,
1263 -9.5295048e-002,
1264 -8.3696293e-003,
1265 2.8928609e-002,
1266 7.7547429e-002,
1267 -2.8433474e-002,
1268 3.9000811e-002,
1269 1.8594177e-002,
1270 7.3604845e-002,
1271 -4.0570215e-002,
1272 4.0428101e-002,
1273 5.2162122e-002,
1274 6.9720490e-002,
1275 1.3917348e-003,
1276 -4.1967149e-002,
1277 1.2040326e-002,
1278 -9.0859684e-002,
1279 3.0619641e-002,
1280 7.9828021e-002,
1281 -9.5582231e-002,
1282 4.4977158e-003,
1283 5.3050166e-002,
1284 -3.9280557e-002,
1285 2.1825815e-003,
1286 2.6836286e-002,
1287 -1.0693240e-002,
1288 1.2507669e-002,
1289 8.7551531e-002,
1290 -4.2170924e-002,
1291 7.4021050e-002,
1292 -5.0257861e-002,
1293 4.2440318e-003,
1294 2.8498362e-002,
1295 4.0712278e-002,
1296 1.3630666e-002,
1297 3.7506385e-002,
1298 2.9021782e-002,
1299 9.4969857e-003,
1300 7.3668316e-002,
1301 -1.0430524e-002,
1302 7.8640111e-003,
1303 -1.9579539e-002,
1304 -1.3354780e-002,
1305 4.6553749e-002,
1306 -1.5359398e-002,
1307 -3.6958328e-002,
1308 3.9183126e-002,
1309 9.0763364e-002,
1310 -5.7310947e-002,
1311 6.8567752e-002,
1312 3.0379537e-002,
1313 -1.7131879e-002,
1314 -4.9845297e-002,
1315 6.6236979e-002,
1316 -3.5226094e-002,
1317 4.1319436e-002,
1318 -1.0414640e-002,
1319 -7.3110434e-002,
1320 -6.7060543e-003,
1321 -2.2661736e-003,
1322 5.4214708e-002,
1323 -5.6731971e-002,
1324 8.0169623e-002,
1325 6.8708173e-002,
1326 5.1555900e-002,
1327 -2.3028383e-002,
1328 2.3845756e-003,
1329 4.3290569e-002,
1330 -5.0088302e-003,
1331 -8.5495950e-003,
1332 -2.2929081e-002,
1333 -1.4934858e-002,
1334 -1.9331882e-002,
1335 3.1952820e-002,
1336 2.2837591e-002,
1337 -6.5833588e-003,
1338 9.3564125e-002,
1339 -5.3479061e-002,
1340 -4.7856971e-003,
1341 7.8291548e-002,
1342 -6.4278719e-002,
1343 5.2534052e-002,
1344 -8.4991604e-003,
1345 -2.5331472e-002,
1346 -1.1670703e-004,
1347 -1.6794583e-002,
1348 -3.6946100e-005,
1349 7.9706385e-002,
1350 1.8011858e-002,
1351 4.5273832e-002,
1352 1.9568899e-002,
1353 4.5061760e-002,
1354 -2.6682717e-002,
1355 -1.8814340e-002,
1356 -8.5389413e-003,
1357 -4.6897567e-002,
1358 -7.9016702e-002,
1359 -2.1058150e-005,
1360 5.8849807e-002,
1361 -2.5161493e-002,
1362 6.0245233e-002,
1363 -8.2636501e-002,
1364 -6.9368318e-002,
1365 -1.5064100e-002,
1366 -3.4932382e-002,
1367 4.4579915e-003,
1368 -5.9080060e-003,
1369 8.9889824e-002,
1370 8.1831512e-002,
1371 1.6338686e-002,
1372 -5.4180978e-002,
1373 -5.3267629e-003,
1374 -2.8476462e-003,
1375 1.7450439e-002,
1376 -2.4213885e-002,
1377 7.1383978e-003,
1378 -8.5575620e-002,
1379 -9.7688859e-002,
1380 5.4026353e-002,
1381 6.8738257e-002,
1382 -3.1782928e-002,
1383 2.9354257e-002,
1384 -1.6843133e-002,
1385 -3.4228093e-002,
1386 -4.9087072e-002,
1387 -8.8609944e-003,
1388 -4.2395609e-002,
1389 6.0299570e-002,
1390 -3.9805763e-002,
1391 -3.9969178e-002,
1392 -1.0972287e-002,
1393 -3.1903343e-002,
1394 -2.3021388e-002,
1395 9.5381824e-002,
1396 -3.8131819e-002,
1397 -2.7944014e-002,
1398 7.9797347e-002,
1399 1.5055618e-002,
1400 -6.0223999e-002,
1401 2.1349786e-002,
1402 1.4010766e-001,
1403 -7.0365161e-002,
1404 9.5470745e-002,
1405 -5.5280731e-002,
1406 9.0676740e-002,
1407 8.0165216e-003,
1408 3.8071961e-002,
1409 3.4452332e-002,
1410 1.2608974e-001,
1411 7.4568874e-003,
1412 2.2179776e-002,
1413 -5.1449927e-003,
1414 -1.5259731e-003,
1415 2.4388062e-002,
1416 2.8159902e-002,
1417 6.3528510e-002,
1418 7.2459203e-002,
1419 -6.6724867e-002,
1420 4.9840343e-002,
1421 1.0288982e-002,
1422 -3.7523292e-003,
1423 2.4660586e-002,
1424 1.0905181e-001,
1425 2.0534327e-002,
1426 -1.6624929e-002,
1427 -4.7427409e-002,
1428 7.1932143e-002,
1429 2.4785276e-002,
1430 -1.2656870e-002,
1431 -4.3142163e-003,
1432 -8.5065080e-002,
1433 1.1401731e-002,
1434 4.2186129e-002,
1435 1.7953548e-002,
1436 -9.5471407e-003,
1437 -2.7867915e-002,
1438 7.5845281e-003,
1439 3.6129267e-002,
1440 -1.2896952e-001,
1441 -1.4991468e-002,
1442 3.9146522e-002,
1443 -7.6952239e-002,
1444 2.3154057e-002,
1445 3.2631339e-002,
1446 3.6032235e-003,
1447 2.4348659e-002,
1448 -5.0004772e-003,
1449 -3.9711602e-002,
1450 -2.5957781e-002,
1451 -8.4744957e-003,
1452 -6.8234352e-002,
1453 -2.8744676e-002,
1454 2.3341254e-002,
1455 4.3007108e-002,
1456 1.2712390e-002,
1457 2.8427956e-002,
1458 -1.5923634e-002,
1459 4.4011784e-002,
1460 -1.5711433e-002,
1461 4.4606989e-002,
1462 -1.7483925e-002,
1463 -1.2423254e-001,
1464 6.2454024e-003,
1465 6.6168154e-002,
1466 2.1085300e-002,
1467 9.0749477e-003,
1468 -2.0534154e-002,
1469 6.9048807e-002,
1470 -9.2613632e-003,
1471 -2.7695812e-003,
1472 -4.1107764e-002,
1473 2.1935377e-002,
1474 -8.4933698e-003,
1475 7.9754080e-002,
1476 2.8930188e-002,
1477 -1.5746665e-002,
1478 -5.5368360e-002,
1479 4.8760088e-002,
1480 -2.3262447e-002,
1481 1.9970261e-003,
1482 1.7181455e-002,
1483 -2.6662315e-002,
1484 2.9476649e-003,
1485 3.6398404e-002,
1486 -1.0718664e-002,
1487 -1.3419702e-002,
1488 -1.4303328e-002,
1489 -5.1753021e-002,
1490 -8.8633620e-003,
1491 -6.6385388e-002,
1492 -1.8360778e-002,
1493 4.0996838e-002,
1494 -2.1821426e-002,
1495 1.9446502e-002,
1496 7.8258137e-002,
1497 1.1935359e-003,
1498 1.2671015e-001,
1499 5.4051017e-003,
1500 8.9554422e-002,
1501 5.1612989e-002,
1502 -5.9613506e-002,
1503 1.0465684e-001,
1504 3.5325477e-002,
1505 -7.4798564e-002,
1506 -6.6674861e-002,
1507 2.8210488e-002,
1508 3.9519939e-003,
1509 4.2419282e-002,
1510 4.8733699e-002,
1511 4.9734069e-002,
1512 -8.2263082e-002,
1513 -1.0431084e-003,
1514 6.5382265e-003,
1515 2.7104024e-002,
1516 -6.1504411e-002,
1517 -1.1030328e-001,
1518 -1.1088406e-001,
1519 4.6883361e-002,
1520 -4.8929726e-002,
1521 -1.1842483e-002,
1522 -3.2343663e-002,
1523 2.8083963e-002,
1524 6.5341653e-003,
1525 6.4197433e-003,
1526 -5.1922064e-002,
1527 5.9610106e-002,
1528 -3.0492144e-003,
1529 -2.0038627e-002,
1530 6.6832718e-003,
1531 3.5125897e-002,
1532 4.9157559e-002,
1533 -1.1599903e-002,
1534 -8.6904299e-004,
1535 -8.6599262e-002,
1536 6.2299405e-002,
1537 9.4208251e-003,
1538 7.3197513e-002,
1539 7.5060589e-003,
1540 1.5188546e-002,
1541 8.4467481e-003,
1542 1.6309540e-002,
1543 -3.6380831e-002,
1544 -1.5684802e-002,
1545 -1.2750901e-004,
1546 -3.9540578e-002,
1547 -2.6086647e-002,
1548 5.0982353e-002,
1549 -3.8994541e-002,
1550 -7.8152817e-002,
1551 -2.1288151e-002,
1552 3.2125646e-002,
1553 -4.9028664e-002,
1554 -5.2017685e-002,
1555 4.8786860e-003,
1556 8.7710015e-002,
1557 3.7430190e-002,
1558 3.6962894e-002,
1559 -1.4930609e-003,
1560 -6.6490921e-002,
1561 1.1278370e-001,
1562 1.6259975e-002,
1563 -1.1381280e-001,
1564 3.0235399e-002,
1565 7.9035487e-004,
1566 -3.8638327e-002,
1567 4.3147897e-002,
1568 8.8130106e-002,
1569 -1.4913096e-002,
1570 3.9678262e-003,
1571 3.6966598e-002,
1572 6.3040724e-002,
1573 -4.9035837e-002,
1574 -3.0293084e-003,
1575 7.2467143e-002,
1576 3.3553250e-003,
1577 1.1619490e-002,
1578 2.5048420e-002,
1579 -1.3875509e-003,
1580 4.3384801e-003,
1581 -1.9225635e-002,
1582 -3.4205233e-002,
1583 -6.1043519e-002,
1584 2.7920233e-002,
1585 1.5845125e-002,
1586 -3.1788360e-002,
1587 5.5265277e-003,
1588 -8.8053862e-003,
1589 5.1596808e-002,
1590 -2.6382888e-002,
1591 1.3528723e-002,
1592 9.7188179e-004,
1593 4.5393222e-002,
1594 1.4350879e-001,
1595 -8.3970455e-002,
1596 -5.3058686e-002,
1597 -1.7168532e-002,
1598 5.2123339e-002,
1599 -1.0874975e-001,
1600 -8.4692593e-002,
1601 2.0470836e-002,
1602 1.3786291e-002,
1603 -4.3504389e-002,
1604 -5.5751144e-003,
1605 -9.6933329e-002,
1606 -6.0058163e-002,
1607 -5.0236621e-002,
1608 2.1957145e-002,
1609 4.6918366e-002,
1610 5.4757597e-003,
1611 -1.2851732e-001,
1612 5.3503448e-002,
1613 -7.8722951e-002,
1614 2.5143808e-002,
1615 3.8130327e-002,
1616 1.1190727e-001,
1617 -2.2211112e-003,
1618 3.4395397e-003,
1619 -6.6144203e-002,
1620 -1.3250907e-002,
1621 1.4285490e-002,
1622 -4.7426798e-002,
1623 4.3459402e-002,
1624 1.9567583e-002,
1625 -3.2933903e-002,
1626 7.9884585e-003,
1627 -3.6921691e-002,
1628 -5.2601711e-002,
1629 -3.7588436e-002,
1630 -5.7858993e-002,
1631 -3.9355983e-003,
1632 -1.9668686e-002,
1633 1.7962753e-002,
1634 7.1980552e-002,
1635 -1.2059618e-002,
1636 3.4579944e-002,
1637 -1.8839556e-002,
1638 -1.7604317e-002,
1639 7.8825547e-002,
1640 8.4168663e-003,
1641 -1.6198144e-002,
1642 7.7326058e-003,
1643 -1.4566324e-001,
1644 7.0918323e-002,
1645 2.7943557e-002,
1646 1.5952735e-002,
1647 5.3303709e-002,
1648 -8.3804957e-002,
1649 -6.6985571e-002,
1650 -1.3191151e-002,
1651 -4.2864677e-002,
1652 -5.9477390e-002,
1653 4.9906263e-002,
1654 4.4401362e-002,
1655 4.7588494e-002,
1656 2.5451538e-002,
1657 -3.7015590e-002,
1658 1.8897192e-002,
1659 8.5686801e-002,
1660 5.1878702e-003,
1661 4.3894402e-003,
1662 1.8570041e-002,
1663 5.5022301e-002,
1664 -4.0645765e-002,
1665 -5.0799009e-002,
1666 -2.3060691e-002,
1667 -5.3046714e-002,
1668 -2.9921308e-002,
1669 -4.2374683e-002,
1670 -2.0684933e-003,
1671 -3.1561538e-002,
1672 -2.6520727e-002,
1673 2.2842715e-002,
1674 4.7241369e-002,
1675 1.5938051e-003,
1676 -3.1393040e-002,
1677 -2.2067479e-002,
1678 1.3659794e-002,
1679 -3.1810808e-002,
1680 5.2038109e-002,
1681 5.5282333e-002,
1682 7.3406997e-002,
1683 -8.5669402e-002,
1684 3.0521734e-002,
1685 1.3090940e-005,
1686 -4.7165506e-002,
1687 4.8765186e-003,
1688 -2.9407043e-002,
1689 1.9843096e-002,
1690 -2.7632043e-002,
1691 1.4379705e-002,
1692 3.2263917e-002,
1693 5.4751887e-002,
1694 -3.4032149e-002,
1695 -9.9526757e-003,
1696 2.5634676e-002,
1697 2.5738815e-003,
1698 -5.5256747e-003,
1699 4.1466343e-002,
1700 -2.8007927e-002,
1701 8.2962880e-002,
1702 5.3608424e-002,
1703 -6.6232246e-003,
1704 -1.1529210e-001,
1705 -3.5498392e-002,
1706 2.0099626e-002,
1707 4.5948750e-002,
1708 1.7926143e-002,
1709 -5.9056747e-002,
1710 -9.6797251e-002,
1711 -2.4358114e-002,
1712 -6.1063654e-002,
1713 2.0158520e-003,
1714 8.7163319e-002,
1715 -8.9921518e-002,
1716 -9.8666202e-003,
1717 -9.3794619e-004,
1718 4.5791584e-002,
1719 8.5254269e-003,
1720 3.7372616e-002,
1721 -5.3279812e-002,
1722 7.8030247e-004,
1723 1.1843336e-002,
1724 -7.4212330e-002,
1725 1.1414296e-001,
1726 -4.1485582e-002,
1727 -2.2089769e-003,
1728 -6.1672113e-003,
1729 9.8929283e-003,
1730 -7.8207292e-002,
1731 -4.8161136e-003,
1732 -7.2059255e-002,
1733 -3.5922784e-002,
1734 -1.9786275e-002,
1735 1.5833828e-002,
1736 5.2545743e-002,
1737 9.9962946e-003,
1738 1.0473584e-001,
1739 -2.6380727e-002,
1740 6.2664438e-002,
1741 -1.0710067e-002,
1742 -5.6621248e-002,
1743 -6.2640861e-002,
1744 2.4906349e-002,
1745 4.9470811e-002,
1746 1.5582134e-002,
1747 -1.1034795e-002,
1748 3.7179257e-002,
1749 -7.9083587e-002,
1750 3.1086424e-002,
1751 -1.3685837e-002,
1752 -3.7552842e-002,
1753 -2.9528094e-002,
1754 -1.7008381e-002,
1755 3.7137697e-002,
1756 4.5722891e-002,
1757 -6.7639973e-002,
1758 1.0411136e-002,
1759 -9.5948463e-002,
1760 -7.6491282e-002,
1761 1.0515447e-001,
1762 -7.2395284e-002,
1763 2.6384356e-002,
1764 -9.7803448e-004,
1765 -1.2178894e-002,
1766 -4.3298010e-002,
1767 -1.4118456e-002,
1768 -6.3811250e-003,
1769 3.5987445e-002,
1770 -8.0165530e-003,
1771 -2.0932915e-002,
1772 -1.3187860e-002,
1773 -4.3430054e-002,
1774 -3.0586505e-002,
1775 9.8974586e-002,
1776 5.5685044e-002,
1777 -1.1098877e-001,
1778 3.4420705e-002,
1779 2.6632342e-002,
1780 2.8768821e-002,
1781 -5.6656185e-002,
1782 -2.4035643e-002,
1783 4.4599132e-002,
1784 5.2401286e-002,
1785 -3.1991215e-002,
1786 3.8827361e-003,
1787 4.7437513e-002,
1788 6.7940056e-002,
1789 -2.3003581e-002,
1790 -6.3955657e-002,
1791 1.0081807e-001,
1792 -4.4211577e-003,
1793 -4.1263060e-002,
1794 -5.8970926e-002,
1795 -2.4349696e-002,
1796 3.2867209e-002,
1797 -2.4008048e-004,
1798 6.9810225e-002,
1799 1.5450610e-002,
1800 2.3319726e-002,
1801 -1.0005801e-001,
1802 6.2685066e-003,
1803 3.3200964e-003,
1804 -6.0496946e-002,
1805 -8.8884008e-003,
1806 1.6134449e-003,
1807 -7.2506916e-002,
1808 1.8835241e-003,
1809 -9.1372012e-003,
1810 -3.9166883e-002,
1811 -3.0408037e-002,
1812 1.3371700e-001,
1813 -8.4833604e-002,
1814 -2.0082991e-002,
1815 -6.7833227e-002,
1816 2.8939942e-002,
1817 3.2760884e-002,
1818 -1.1389661e-004,
1819 -4.3484404e-002,
1820 -5.9579661e-002,
1821 8.5932179e-002,
1822 -1.2312202e-001,
1823 4.5080645e-002,
1824 7.8749960e-002,
1825 8.5343585e-002,
1826 8.3452328e-003,
1827 3.8885343e-002,
1828 -5.4756855e-002,
1829 -5.2942923e-002,
1830 -8.5138845e-003,
1831 6.6560990e-002,
1832 -5.8418572e-002,
1833 2.3870988e-002,
1834 1.8931370e-002,
1835 5.9471104e-002,
1836 -8.6742031e-002,
1837 -4.4123808e-002,
1838 1.7375058e-002,
1839 -6.3987147e-002,
1840 6.3031471e-003,
1841 -5.2766788e-002,
1842 1.6462106e-001,
1843 3.4654166e-002,
1844 1.8664640e-002,
1845 2.0932790e-002,
1846 -4.3515283e-003,
1847 -2.2953377e-002,
1848 -4.1758215e-002,
1849 5.7430654e-002,
1850 -5.3591655e-002,
1851 -4.6850896e-002,
1852 4.1910973e-002,
1853 1.1157103e-004,
1854 -2.2629752e-002,
1855 6.5200275e-002,
1856 -2.2924410e-003,
1857 -1.0436647e-002,
1858 -5.9483696e-002,
1859 -3.6216756e-003,
1860 -1.3438807e-002,
1861 1.2187937e-002,
1862 -1.3021007e-002,
1863 3.3878909e-002,
1864 -2.2899083e-002,
1865 -2.3054076e-002,
1866 4.7348343e-002,
1867 2.8499078e-002,
1868 -1.7052032e-003,
1869 -1.3753287e-002,
1870 -2.9609163e-002,
1871 -1.3025597e-002,
1872 -6.1569574e-003,
1873 8.8234767e-003,
1874 -4.4598847e-002,
1875 -7.8588213e-002,
1876 -1.8194816e-002,
1877 -6.0633228e-002,
1878 3.4385559e-003,
1879 5.9361395e-002,
1880 8.2140593e-002,
1881 1.4939745e-002,
1882 -3.1639344e-002,
1883 -1.2825312e-002,
1884 -3.5217707e-002,
1885 -1.9635520e-002,
1886 3.1739325e-002,
1887 -2.7107236e-002,
1888 4.2299225e-002,
1889 1.9675302e-002,
1890 -2.6289167e-002,
1891 -3.7438885e-002,
1892 -6.5984833e-002,
1893 4.2748691e-003,
1894 -3.3482818e-002,
1895 -2.6690228e-002,
1896 -3.6330879e-002,
1897 -4.4149481e-002,
1898 -1.5138292e-002,
1899 2.8942426e-002,
1900 -1.6976163e-002,
1901 -5.9543856e-002,
1902 7.4778255e-002,
1903 2.8451870e-002,
1904 6.2164171e-002,
1905 -4.0415989e-002,
1906 -4.2244492e-002,
1907 4.6573272e-002,
1908 -1.8520798e-002,
1909 -6.9907182e-002,
1910 1.1254468e-002,
1911 7.4484796e-002,
1912 2.3774997e-003,
1913 -1.9725799e-002,
1914 -1.1798209e-002,
1915 -4.5521440e-002,
1916 2.7514728e-002,
1917 -7.2190342e-002,
1918 -2.9948385e-002,
1919 -4.6214661e-003,
1920 -7.9002112e-004,
1921 5.0066640e-002,
1922 5.3029490e-004,
1923 -1.8871680e-002,
1924 -1.9149132e-002,
1925 1.4202910e-002,
1926 3.0816823e-002,
1927 -9.0922658e-002,
1928 2.0531126e-002,
1929 -6.7237163e-002,
1930 3.5264507e-002,
1931 -4.3345885e-002,
1932 4.3736504e-002,
1933 -5.0592953e-002,
1934 -1.9560698e-002,
1935 7.4759581e-002,
1936 -1.5500722e-002,
1937 -3.2266454e-002,
1938 -1.4974813e-002,
1939 -3.1814004e-003,
1940 7.1627759e-002,
1941 -1.0014999e-002,
1942 -4.4711458e-002,
1943 8.7059742e-002,
1944 -6.6573462e-002,
1945 6.3231174e-002,
1946 -3.9306487e-002,
1947 -2.8763870e-002,
1948 -3.4594112e-002,
1949 -1.7333119e-002,
1950 2.7978317e-002,
1951 -4.4558274e-002,
1952 4.0316504e-002,
1953 -9.8056766e-003,
1954 -1.1169830e-001,
1955 2.6367365e-003,
1956 -6.3107346e-002,
1957 -4.7852804e-002,
1958 1.4822515e-002,
1959 -5.5825883e-002,
1960 8.4652163e-002,
1961 3.7276497e-002,
1962 5.8380260e-002,
1963 1.0308762e-003,
1964 -1.7541914e-002,
1965 -8.1294365e-002,
1966 2.6500601e-002,
1967 1.1576202e-002,
1968 -2.8475597e-002,
1969 -3.6427135e-002,
1970 1.0486963e-002,
1971 3.5852026e-002,
1972 1.7207452e-002,
1973 -4.2250927e-002,
1974 9.2791032e-002,
1975 2.0848079e-002,
1976 -1.0474350e-002,
1977 -1.8906142e-002,
1978 -3.9285383e-004,
1979 -1.0622005e-001,
1980 3.0895699e-002,
1981 7.2310785e-002,
1982 -4.9338252e-002,
1983 -6.6112754e-002,
1984 1.7508514e-002,
1985 1.1321926e-003,
1986 -2.4713477e-002,
1987 -4.2692403e-002,
1988 3.6496772e-002,
1989 -8.7503250e-003,
1990 -2.3071223e-002,
1991 6.0697872e-002,
1992 -1.6211612e-002,
1993 2.7467415e-002,
1994 -2.3241079e-002,
1995 7.6276171e-003,
1996 -6.3827211e-002,
1997 6.7257864e-002,
1998 2.2947393e-002,
1999 1.7785758e-002,
2000 4.1818868e-003,
2001 3.5410854e-002,
2002 1.0202987e-003,
2003 -7.0561943e-003,
2004 -2.0778987e-002,
2005 3.2302118e-002,
2006 4.8279751e-003,
2007 -2.3094511e-002,
2008 -5.9461961e-002,
2009 4.2486021e-002,
2010 -8.3970460e-002,
2011 3.1847805e-002,
2012 1.4792567e-002,
2013 8.3035216e-002,
2014 -1.9097569e-002,
2015 -3.7566345e-002,
2016 -1.9294024e-002,
2017 -2.9735991e-002,
2018 -1.6259656e-002,
2019 8.7230220e-003,
2020 1.5761104e-002,
2021 1.1869692e-002,
2022 3.3119792e-002,
2023 -1.4862967e-002,
2024 1.1372784e-002,
2025 -3.2009087e-002,
2026 -2.9738311e-002,
2027 7.4243184e-002,
2028 4.4110110e-002,
2029 -2.6555813e-002,
2030 -1.4281194e-002,
2031 -3.1948659e-002,
2032 2.7573051e-002,
2033 4.3762921e-003,
2034 -1.5129696e-002,
2035 -1.7735857e-002,
2036 -4.4445686e-003,
2037 -5.8616688e-002,
2038 -2.7569930e-002,
2039 -4.5140779e-002,
2040 -7.2200604e-002,
2041 1.3667304e-002,
2042 5.7192972e-002,
2043 -6.3690024e-002,
2044 5.5174808e-003,
2045 -5.8892530e-002,
2046 -3.6233013e-002,
2047 8.6180660e-002,
2048 -6.4381045e-002,
2049 8.1908618e-002,
2050 -8.2615195e-003,
2051 -8.7344886e-002,
2052 -3.6686884e-002,
2053 -4.3487249e-002,
2054 -2.7761943e-002,
2055 -4.3954059e-002,
2056 1.0761718e-001,
2057 -3.3942906e-002,
2058 -5.6751929e-002,
2059 5.3761364e-002,
2060 -8.2361460e-002,
2061 -2.0107493e-002,
2062 -1.3391457e-001,
2063 -2.7865675e-002,
2064 -3.7665218e-003,
2065 2.6626941e-003,
2066 2.1434427e-002,
2067 4.9598442e-002,
2068 -9.1795559e-002,
2069 5.6763841e-002,
2070 -7.2345509e-002,
2071 4.3385691e-002,
2072 -6.4303252e-002,
2073 -2.6067521e-002,
2074 3.1430980e-002,
2075 -4.8380081e-002,
2076 -1.7143742e-003,
2077 3.8524956e-002,
2078 4.7310190e-002,
2079 -8.4985104e-003,
2080 2.5096835e-002,
2081 -2.2478417e-003,
2082 4.8128123e-002,
2083 3.7762949e-002,
2084 1.4420063e-003,
2085 -4.4095518e-002,
2086 4.5456933e-003,
2087 -3.2426183e-003,
2088 -1.2533115e-002,
2089 4.7767545e-002,
2090 -2.8620801e-002,
2091 7.8751032e-002,
2092 -1.6406002e-002,
2093 6.0648681e-002,
2094 -5.7970442e-002,
2095 -1.7637331e-002,
2096 -6.9358645e-002,
2097 -3.7997615e-002,
2098 3.9156091e-002,
2099 1.1321921e-001,
2100 8.4415942e-002,
2101 -1.1387462e-002,
2102 -1.6199663e-002,
2103 -2.9916549e-002,
2104 -2.7917984e-003,
2105 -7.9695543e-002,
2106 8.2671498e-002,
2107 1.3319799e-002,
2108 -1.7930240e-002,
2109 -9.1601668e-003,
2110 4.1019127e-002,
2111 7.5932944e-002,
2112 1.0036314e-001,
2113 3.8966354e-002,
2114 4.6995786e-003,
2115 -4.5149567e-002,
2116 -4.8486656e-002,
2117 -4.1927255e-002,
2118 1.1311800e-002,
2119 3.6819401e-002,
2120 1.7973596e-002,
2121 6.7898952e-003,
2122 1.5963322e-002,
2123 -4.9877456e-002,
2124 -3.7059174e-002,
2125 1.4450399e-002,
2126 2.0093318e-002,
2127 3.4367981e-002,
2128 -5.5058558e-003,
2129 -6.7143431e-002,
2130 -4.8644499e-002,
2131 -6.9472431e-002,
2132 2.5107776e-002,
2133 -4.6781145e-002,
2134 -2.7352285e-002,
2135 -4.7986822e-002,
2136 -7.1934644e-003,
2137 -2.3173127e-002,
2138 6.4055565e-002,
2139 -1.9370286e-002,
2140 -4.9411717e-003,
2141 3.4615802e-002,
2142 -5.2643368e-002,
2143 -3.4227554e-002,
2144 5.9084487e-002,
2145 -6.7507249e-002,
2146 1.4470533e-003,
2147 7.4639509e-002,
2148 -3.9766965e-002,
2149 3.5756960e-002,
2150 -7.0471549e-003,
2151 -3.9222635e-003,
2152 7.3001614e-002,
2153 2.3197043e-002,
2154 -2.5701022e-003,
2155 -6.5877930e-002,
2156 2.7559657e-003,
2157 1.9592050e-002,
2158 -9.3462547e-002,
2159 -1.0871925e-002,
2160 -2.9680792e-002,
2161 -1.9738425e-002,
2162 -2.7152604e-002,
2163 2.3876803e-002,
2164 4.5884118e-002,
2165 -2.4799389e-002,
2166 -2.0581584e-002,
2167 -5.4267497e-002,
2168 -2.6460954e-003,
2169 5.1362202e-002,
2170 -6.9012380e-002,
2171 4.4005296e-002,
2172 6.3975781e-002,
2173 -2.6047622e-003,
2174 1.2042036e-002,
2175 1.6037381e-002,
2176 -5.1284209e-002,
2177 -4.2194785e-002,
2178 -1.6515324e-003,
2179 2.8902550e-002,
2180 2.6850380e-002,
2181 -6.0423448e-002,
2182 5.8605766e-003,
2183 1.2158635e-002,
2184 7.2552454e-002,
2185 3.1314062e-002,
2186 -9.3072204e-002,
2187 3.1162922e-002,
2188 1.3286605e-002,
2189 3.9595454e-002,
2190 4.0202073e-002,
2191 6.5767605e-002,
2192 -1.2155519e-002,
2193 3.3751439e-002,
2194 -3.2171914e-002,
2195 4.8066982e-002,
2196 -3.9282293e-002,
2197 8.3241192e-003,
2198 6.9639890e-002,
2199 2.7334229e-002,
2200 -1.5479579e-001,
2201 1.6788538e-002,
2202 -3.1497022e-002,
2203 -4.2282993e-002,
2204 6.3590085e-002,
2205 2.5116069e-002,
2206 -8.6396723e-003,
2207 3.3260424e-002,
2208 -8.4721611e-002,
2209 -3.3390999e-003,
2210 -1.1246017e-001,
2211 4.1668358e-002,
2212 -5.8633451e-002,
2213 1.8811584e-002,
2214 -2.6955831e-002,
2215 3.4502149e-002,
2216 -1.5140931e-002,
2217 -1.1615508e-001,
2218 1.9473941e-002,
2219 -2.4164678e-002,
2220 -4.7663500e-002,
2221 2.5149605e-002,
2222 -4.2667606e-002,
2223 -3.0691488e-002,
2224 -6.2397484e-002,
2225 -2.2317443e-002,
2226 7.1583564e-002,
2227 -1.7501358e-002,
2228 -7.4035381e-003,
2229 3.6729476e-002,
2230 -1.1245837e-002,
2231 2.6520782e-002,
2232 -8.1593552e-002,
2233 -6.9408470e-002,
2234 1.4619786e-003,
2235 3.8453478e-003,
2236 -6.3397206e-003,
2237 -6.0058523e-002,
2238 -4.8251718e-003,
2239 3.8074781e-002,
2240 -7.8163411e-002,
2241 2.1385600e-002,
2242 -2.1922130e-002,
2243 -4.0160455e-002,
2244 -6.8293755e-002,
2245 9.0554557e-004,
2246 2.6664980e-002,
2247 7.1501149e-004,
2248 2.0586511e-002,
2249 3.8317298e-002,
2250 1.2622402e-002,
2251 3.0425320e-002,
2252 -5.9992562e-003,
2253 -3.2448647e-002,
2254 -8.4599232e-002,
2255 2.0966498e-002,
2256 3.0616978e-002,
2257 -4.1909029e-003,
2258 4.3755380e-002,
2259 3.5853709e-002,
2260 8.2636139e-002,
2261 5.2616538e-002,
2262 -4.4023308e-002,
2263 -4.5906585e-002,
2264 2.5247372e-002,
2265 1.5587727e-002,
2266 -2.8171046e-002,
2267 -3.2571994e-003,
2268 3.1224580e-002,
2269 2.3534457e-002,
2270 2.4495916e-002,
2271 2.3711856e-002,
2272 4.4990479e-002,
2273 2.4656755e-002,
2274 1.2819956e-002,
2275 5.7528241e-002,
2276 -6.3140487e-003,
2277 -9.8533686e-002,
2278 -5.9046861e-002,
2279 4.5919961e-002,
2280 4.9303678e-002,
2281 -5.1366348e-002,
2282 2.4237326e-002,
2283 -3.5253937e-002,
2284 7.6315728e-002,
2285 -6.2809404e-002,
2286 -1.1060411e-002,
2287 1.2072602e-002,
2288 8.1692168e-002,
2289 8.2459510e-002,
2290 1.2056340e-003,
2291 -1.0799649e-001,
2292 -7.2058599e-002,
2293 5.1223849e-002,
2294 1.1635586e-001,
2295 6.3237829e-002,
2296 4.1510274e-002,
2297 -2.9788578e-002,
2298 4.8771019e-002,
2299 -5.6674600e-002,
2300 1.9869930e-002,
2301 -1.2678819e-002,
2302 -2.7919754e-002,
2303 2.8331693e-002,
2304 3.1691790e-002,
2305 1.1562239e-002,
2306 -2.8202192e-002,
2307 2.1270404e-002,
2308 -4.2846202e-002,
2309 -3.2805821e-002,
2310 1.5184402e-002,
2311 5.4017276e-002,
2312 -7.4480916e-003,
2313 3.9322390e-002,
2314 8.8590506e-002,
2315 1.8869046e-002,
2316 -4.8504749e-002,
2317 1.9943452e-002,
2318 -4.0731200e-002,
2319 -1.2975217e-003,
2320 -1.6745164e-003,
2321 4.7281664e-002,
2322 -2.7791569e-002,
2323 8.0857121e-003,
2324 -4.8178120e-002,
2325 -5.8281241e-002,
2326 -3.2593209e-002,
2327 -2.1746188e-002,
2328 -1.0017483e-002,
2329 2.9529554e-002,
2330 -1.4875157e-002,
2331 -4.5985303e-002,
2332 4.9477795e-002,
2333 -2.8808805e-002,
2334 -1.3613209e-002,
2335 -3.2427996e-002,
2336 -7.3709623e-002,
2337 2.9008787e-003,
2338 -2.4949574e-002,
2339 2.9417830e-002,
2340 -5.0911040e-002,
2341 7.2199223e-002,
2342 -3.8502572e-003,
2343 -9.9986041e-002,
2344 -1.0110846e-001,
2345 2.7240523e-002,
2346 3.7231607e-004,
2347 -4.8403626e-002,
2348 -4.2828865e-002,
2349 -4.0941132e-002,
2350 2.1262003e-002,
2351 2.8579653e-002,
2352 -3.8107106e-002,
2353 -2.5403299e-002,
2354 4.0409634e-002,
2355 -1.3506783e-001,
2356 6.7020935e-002,
2357 7.6919909e-002,
2358 -6.2598829e-002,
2359 -4.4526445e-002,
2360 1.2270630e-001,
2361 2.3974241e-002,
2362 -3.6434038e-003,
2363 4.6607563e-002,
2364 8.1524293e-002,
2365 -3.0664049e-002,
2366 4.4022028e-002,
2367 8.6563738e-002,
2368 6.5752991e-002,
2369 -6.7108146e-002,
2370 -1.0342413e-001,
2371 -1.8539076e-002,
2372 -3.0153611e-002,
2373 6.7396260e-003,
2374 -4.4950103e-002,
2375 -1.2515800e-003,
2376 3.0646680e-002,
2377 5.5510478e-002,
2378 -5.2142526e-002,
2379 -6.6687624e-002,
2380 1.5134636e-002,
2381 1.3498064e-002,
2382 -5.4450472e-002,
2383 -8.9529836e-003,
2384 3.0094154e-002,
2385 3.2202481e-002,
2386 1.3948693e-002,
2387 -6.7197034e-002,
2388 -8.5015250e-002,
2389 6.3266660e-002,
2390 4.2798636e-002,
2391 -2.0333357e-002,
2392 -4.0383900e-002,
2393 -1.3841616e-002,
2394 6.3539401e-002,
2395 -1.4953539e-002,
2396 7.3749647e-003,
2397 4.6124894e-002,
2398 -3.3099545e-002,
2399 1.6994609e-003,
2400 3.1756119e-002,
2401 1.1361146e-001,
2402 2.3601853e-002,
2403 -6.1163866e-003,
2404 1.4640892e-002,
2405 -1.3002994e-001,
2406 -5.9991837e-002,
2407 -2.2185968e-002,
2408 -3.5202454e-003,
2409 -3.2725772e-002,
2410 -1.6788319e-002,
2411 -6.9143762e-002,
2412 -3.0097649e-002,
2413 1.2429939e-001,
2414 3.2580395e-002,
2415 -5.0115073e-002,
2416 5.0306592e-003,
2417 -4.4954061e-002,
2418 3.6014498e-002,
2419 -1.3451790e-002,
2420 1.6399117e-002,
2421 1.3923416e-001,
2422 -4.9725951e-003,
2423 6.2052260e-003,
2424 -1.1645022e-001,
2425 -3.5608026e-003,
2426 6.4542089e-002,
2427 2.5646928e-002,
2428 -3.9385217e-002,
2429 3.4619781e-002,
2430 -5.5728973e-002,
2431 -4.1560782e-002,
2432 1.8601185e-003,
2433 -7.7632154e-002,
2434 -1.1198136e-001,
2435 1.7871366e-003,
2436 3.2749909e-002,
2437 6.3402834e-002,
2438 -5.4553077e-002,
2439 -5.3258342e-002,
2440 3.3343720e-002,
2441 5.6556702e-002,
2442 -2.8265688e-002,
2443 -2.3372050e-002,
2444 -7.1953496e-002,
2445 4.9907070e-002,
2446 -2.6195346e-002,
2447 -3.1269328e-002,
2448 -2.2738778e-002,
2449 -3.6952069e-003,
2450 2.3055605e-002,
2451 3.7713246e-002,
2452 -3.3123125e-002,
2453 6.3977198e-002,
2454 1.2888268e-002,
2455 -6.4863602e-002,
2456 -4.6370451e-002,
2457 -1.2762725e-002,
2458 -1.1385579e-002,
2459 5.3278522e-002,
2460 4.0903155e-003,
2461 2.4856544e-003,
2462 2.6887809e-002,
2463 -3.6020834e-002,
2464 1.7437443e-002,
2465 2.0139602e-002,
2466 2.9239905e-002,
2467 3.8038669e-002,
2468 -9.6656754e-002,
2469 1.5283078e-002,
2470 -9.4684237e-002,
2471 3.5509017e-002,
2472 -2.3867173e-002,
2473 4.9278727e-003,
2474 -3.9793551e-002,
2475 -1.1285602e-002,
2476 -1.1809578e-002,
2477 2.7623350e-002,
2478 2.1829332e-003,
2479 2.9116516e-002,
2480 -2.3743110e-002,
2481 -3.6766547e-002,
2482 2.0571789e-002,
2483 5.6084571e-002,
2484 1.3024358e-001,
2485 -7.5886589e-002,
2486 2.7947551e-002,
2487 2.3155403e-002,
2488 -3.1278004e-002,
2489 -1.4436652e-002,
2490 -2.4776289e-002,
2491 -6.8540264e-003,
2492 -1.0098350e-002,
2493 -8.8675200e-002,
2494 1.5859746e-001,
2495 -9.1002037e-002,
2496 1.2604720e-002,
2497 -1.0483836e-002,
2498 -2.8280415e-002,
2499 7.1881441e-002,
2500 -5.6741201e-002,
2501 6.6804943e-002,
2502 6.1990105e-002,
2503 8.1565279e-002,
2504 2.2720394e-002,
2505 -1.2405569e-002,
2506 7.1876233e-002,
2507 -1.0267524e-001,
2508 -3.0958839e-002,
2509 7.9476530e-002,
2510 2.1440879e-002,
2511 -3.6594375e-002,
2512 1.2693478e-002,
2513 -3.5996147e-002,
2514 -4.4807775e-002,
2515 3.0175162e-002,
2516 6.0207188e-002,
2517 -4.4551692e-003,
2518 5.2444239e-002,
2519 -6.7182348e-002,
2520 3.4282089e-002,
2521 1.2050117e-002,
2522 6.7343302e-003,
2523 -3.4597852e-002,
2524 6.2799536e-002,
2525 9.0535361e-002,
2526 4.6750855e-002,
2527 4.5616156e-002,
2528 -4.7775494e-002,
2529 3.3437120e-002,
2530 6.3247569e-002,
2531 -2.5086044e-002,
2532 6.0392800e-002,
2533 -1.0344192e-001,
2534 1.0532757e-002,
2535 8.0919299e-003,
2536 -2.0549100e-002,
2537 7.9851230e-002,
2538 5.9509621e-002,
2539 -1.0304151e-002,
2540 -3.6671778e-003,
2541 1.0290329e-002,
2542 -3.6286054e-002,
2543 -1.1732592e-002,
2544 -8.4237566e-002,
2545 3.3390752e-002,
2546 -5.1523669e-002,
2547 -7.7703392e-002,
2548 7.2951732e-002,
2549 5.5907824e-002,
2550 5.5894272e-003,
2551 5.4254663e-002,
2552 5.1024916e-002,
2553 -5.6879548e-002,
2554 -6.2027367e-002,
2555 -5.6508306e-002,
2556 -4.3199186e-002,
2557 -7.0858160e-002,
2558 -2.7514315e-002,
2559 -1.0304944e-002,
2560 9.7007038e-004,
2561 -6.7224049e-003,
2562 9.2200691e-003,
2563 3.8879401e-003,
2564 -6.5395433e-002,
2565 6.6739257e-002,
2566 6.1434975e-002,
2567 -7.8933867e-002,
2568 -8.4834779e-002,
2569 -2.7405250e-002,
2570 -2.6177970e-002,
2571 -3.3974921e-002,
2572 -3.5379505e-003,
2573 5.0807223e-002,
2574 -6.0485730e-002,
2575 -7.1839018e-003,
2576 2.6693750e-002,
2577 5.3186567e-002,
2578 1.4183779e-002,
2579 -2.2116051e-002,
2580 -1.3741848e-002,
2581 6.1342417e-002,
2582 -3.7993387e-003,
2583 3.7238204e-002,
2584 -1.0739599e-001,
2585 -1.4549117e-002,
2586 4.0386015e-002,
2587 1.2569153e-002,
2588 3.5445067e-002,
2589 -3.8437920e-002,
2590 -1.4546469e-002,
2591 2.3252293e-002,
2592 5.8740276e-002,
2593 -4.5320281e-002,
2594 4.8086444e-002,
2595 -4.6158419e-003,
2596 -5.5124482e-002,
2597 -3.3884263e-002,
2598 -1.6266463e-002,
2599 -1.6153097e-002,
2600 -7.1902422e-004,
2601 4.7423985e-002,
2602 4.5522942e-002,
2603 5.8189486e-002,
2604 -1.6178881e-002,
2605 -8.5068904e-003,
2606 -2.1481593e-002,
2607 5.9052882e-002,
2608 7.6940824e-002,
2609 -4.1182363e-002,
2610 9.3889318e-002,
2611 3.2541071e-002,
2612 -5.0966470e-002,
2613 1.1989934e-002,
2614 1.3485465e-002,
2615 1.1716420e-002,
2616 -3.3544036e-002,
2617 1.0756654e-001,
2618 2.3665782e-002,
2619 5.1632941e-002,
2620 3.3393177e-002,
2621 2.6965276e-002,
2622 -9.3765636e-003,
2623 -4.0374893e-002,
2624 -7.6274872e-002,
2625 1.8358287e-002,
2626 -5.4971891e-002,
2627 -6.1388507e-002,
2628 4.0747836e-002,
2629 -3.0364737e-002,
2630 -3.8176810e-002,
2631 2.1957238e-003,
2632 1.5046955e-002,
2633 -4.6671984e-003,
2634 -3.7148168e-002,
2635 -3.7455685e-002,
2636 3.7180183e-003,
2637 -8.5869921e-003,
2638 3.5823221e-002,
2639 2.0854178e-002,
2640 -5.6165218e-002,
2641 -9.2879840e-002,
2642 1.4952542e-002,
2643 -1.6637472e-002,
2644 2.7553373e-002,
2645 1.1493587e-001,
2646 -3.5352769e-002,
2647 -6.9065396e-002,
2648 7.7929176e-002,
2649 -5.9205594e-002,
2650 -1.8989624e-002,
2651 1.1827864e-002,
2652 -3.8579019e-002,
2653 1.6537438e-002,
2654 -4.5152596e-002,
2655 -8.0801346e-002,
2656 -3.4708707e-002,
2657 -2.0902185e-002,
2658 3.5484478e-002,
2659 -7.2048970e-002,
2660 3.9760809e-002,
2661 -2.1048159e-002,
2662 2.9412146e-003,
2663 -1.2228266e-002,
2664 -1.0549788e-002,
2665 -1.3705371e-002,
2666 -4.2308328e-002,
2667 -8.5322508e-002,
2668 5.6722120e-004,
2669 3.8264621e-002,
2670 4.3257303e-002,
2671 2.8754160e-002,
2672 3.3445727e-003,
2673 2.9282907e-002,
2674 4.8556817e-002,
2675 -3.3795246e-002,
2676 4.0977665e-002,
2677 3.6274969e-002,
2678 3.3552753e-002,
2679 2.9872002e-002,
2680 6.3307072e-002,
2681 1.4992383e-002,
2682 -5.8203262e-002,
2683 -3.0168145e-002,
2684 -3.2352139e-002,
2685 7.6165643e-002,
2686 7.1774864e-002,
2687 -1.7731640e-002,
2688 3.7646033e-002,
2689 5.8535492e-003,
2690 8.3961663e-002,
2691 -7.6352210e-003,
2692 -3.6557713e-003,
2693 -6.1713535e-002,
2694 -4.8057903e-002,
2695 -4.6264109e-002,
2696 -3.4792201e-002,
2697 -2.7416585e-002,
2698 -1.3744116e-003,
2699 -1.9306191e-002,
2700 -5.0539515e-002,
2701 2.7677455e-002,
2702 -2.2617917e-002,
2703 -8.4784776e-002,
2704 7.3259229e-002,
2705 5.9548509e-002,
2706 -7.2282648e-002,
2707 -5.0784237e-002,
2708 9.1028580e-002,
2709 1.6823871e-001,
2710 4.3922313e-002,
2711 2.0660018e-002,
2712 1.2905801e-003,
2713 -5.9644574e-003,
2714 -6.6967719e-003,
2715 2.1111482e-002,
2716 4.5767224e-002,
2717 1.9131948e-002,
2718 2.6813139e-002,
2719 -4.6825266e-002,
2720 1.1768354e-002,
2721 -3.0426377e-002,
2722 -7.0347178e-003,
2723 -7.6017599e-002,
2724 2.1078534e-002,
2725 -9.1780175e-002,
2726 2.7352079e-002,
2727 2.7780454e-002,
2728 8.3826886e-003,
2729 -1.5967673e-002,
2730 -1.0580313e-002,
2731 3.8124734e-002,
2732 3.6951219e-002,
2733 -2.5011240e-002,
2734 2.9019645e-002,
2735 3.3574092e-002,
2736 1.2199007e-002,
2737 -6.3328122e-002,
2738 -1.0293542e-001,
2739 6.2316941e-002,
2740 -1.1529230e-003,
2741 1.0592972e-001,
2742 -2.3803313e-002,
2743 -4.2884377e-002,
2744 -2.3136181e-002,
2745 9.6100002e-003,
2746 -3.8942235e-002,
2747 1.0613309e-001,
2748 1.1584978e-002,
2749 -2.8945108e-002,
2750 1.1978745e-001,
2751 3.3535039e-002,
2752 -3.3192905e-002,
2753 6.4322894e-002,
2754 4.3326082e-002,
2755 2.2661431e-002,
2756 2.1067896e-002,
2757 -1.6775258e-002,
2758 -1.1513173e-001,
2759 1.6050052e-002,
2760 3.6844183e-002,
2761 2.9072793e-002,
2762 -6.7255761e-002,
2763 5.7102385e-002,
2764 7.0546617e-002,
2765 -2.0826937e-002,
2766 -5.7583856e-002,
2767 3.0146035e-002,
2768 -1.9649341e-002,
2769 5.1108010e-002,
2770 -1.2049234e-001,
2771 9.1604975e-003,
2772 -4.4366320e-002,
2773 1.0940581e-002,
2774 -7.4110213e-002,
2775 1.0027252e-001,
2776 8.3559986e-002,
2777 -5.0547965e-002,
2778 3.0123395e-002,
2779 7.0196532e-002,
2780 -8.3469946e-002,
2781 3.3882963e-002,
2782 6.1607561e-002,
2783 4.4793665e-002,
2784 -9.6577712e-002,
2785 -5.0411980e-003,
2786 -1.5066601e-002,
2787 2.4904787e-002,
2788 1.1340361e-002,
2789 2.9052246e-002,
2790 2.6840614e-002,
2791 -1.9931112e-002,
2792 5.2525978e-002,
2793 -4.9751069e-002,
2794 -7.9276887e-002,
2795 2.8081748e-002,
2796 -4.1223168e-002,
2797 1.3105117e-002,
2798 -2.6569475e-003,
2799 -3.2102570e-002,
2800 -2.6357544e-002,
2801 2.2152608e-002,
2802 -3.1539891e-003,
2803 -3.4785718e-002,
2804 -1.0592171e-002,
2805 -4.0300905e-002,
2806 -1.5702723e-002,
2807 -1.8712957e-002,
2808 3.3197549e-002,
2809 -3.6279117e-002,
2810 4.2838238e-002,
2811 -1.6489429e-002,
2812 2.4648914e-002,
2813 5.1252616e-003,
2814 -8.1225473e-002,
2815 -5.6459253e-002,
2816 -5.2348110e-002,
2817 -7.0335906e-002,
2818 -3.3338823e-005,
2819 -3.2311169e-002,
2820 7.4676135e-002,
2821 -3.7143822e-002,
2822 -6.8303532e-002,
2823 -7.0033274e-004,
2824 -3.7552999e-002,
2825 -6.6305361e-002,
2826 1.2196684e-001,
2827 2.2084222e-002,
2828 4.1475857e-002,
2829 -1.0862949e-003,
2830 -4.0143874e-002,
2831 -3.7947485e-002,
2832 2.3605616e-002,
2833 2.3128901e-002,
2834 1.6999557e-001,
2835 8.7507268e-003,
2836 -1.6086519e-002,
2837 1.6438629e-002,
2838 5.3086378e-002,
2839 4.2778341e-002,
2840 -5.1411551e-002,
2841 -9.1155004e-003,
2842 7.1703894e-002,
2843 -6.2919585e-002,
2844 -4.1252239e-003,
2845 -2.7800338e-002,
2846 1.3406385e-002,
2847 -1.9639614e-002,
2848 2.0766865e-002,
2849 -8.0707557e-002,
2850 -7.9126401e-003,
2851 1.2061087e-002,
2852 7.8233420e-002,
2853 2.5787108e-003,
2854 9.6325419e-002,
2855 4.2169871e-002,
2856 4.5779560e-002,
2857 1.1692399e-002,
2858 3.6624616e-002,
2859 -2.1368960e-002,
2860 8.6087403e-002,
2861 -3.9290515e-002,
2862 -9.1694613e-003,
2863 3.1814092e-002,
2864 2.4160765e-002,
2865 -1.1817798e-003,
2866 1.1293805e-001,
2867 3.5901275e-002,
2868 2.3964131e-002,
2869 1.4594516e-002,
2870 8.3442765e-002,
2871 2.7873584e-003,
2872 9.2888387e-002,
2873 5.6597406e-002,
2874 3.3678386e-002,
2875 1.1285883e-002,
2876 -1.3345965e-002,
2877 -3.7971276e-002,
2878 3.8853868e-002,
2879 4.0434589e-002,
2880 -3.5457626e-002,
2881 3.4183998e-002,
2882 9.8248684e-002,
2883 -7.6115939e-002,
2884 -1.1769491e-002,
2885 -3.8386164e-002,
2886 -1.8975843e-002,
2887 -9.3988535e-002,
2888 -5.5576121e-003,
2889 -1.8636003e-002,
2890 2.8386234e-002,
2891 -2.4200578e-002,
2892 4.1252766e-002,
2893 -6.8000375e-002,
2894 -3.7388633e-002,
2895 -3.0010634e-002,
2896 -2.0049886e-002,
2897 2.5499201e-002,
2898 -3.7598273e-002,
2899 -4.4794045e-002,
2900 4.9668753e-002,
2901 2.8526404e-002,
2902 -7.6218361e-003,
2903 -1.0150563e-001,
2904 -3.1635380e-002,
2905 6.0899411e-002,
2906 -4.0702573e-003,
2907 3.6908492e-002,
2908 6.0695811e-002,
2909 -8.5097943e-002,
2910 5.3730269e-002,
2911 3.7528389e-003,
2912 9.3525516e-002,
2913 -1.4898976e-002,
2914 2.7723761e-002,
2915 -1.3087617e-002,
2916 -8.5905788e-003,
2917 -4.0551186e-003,
2918 5.2805805e-003,
2919 6.8736269e-002,
2920 1.5477601e-003,
2921 4.0766710e-003,
2922 2.4948069e-002,
2923 -2.3695927e-002,
2924 2.0778232e-002,
2925 7.7785189e-002,
2926 -6.5214959e-002,
2927 -1.6680307e-002,
2928 -5.1966107e-002,
2929 7.5663630e-003,
2930 -1.3256079e-002,
2931 2.9625848e-002,
2932 -3.9745297e-002,
2933 2.5236371e-002,
2934 -3.2270585e-002,
2935 6.2655107e-002,
2936 3.3731838e-002,
2937 2.2075588e-003,
2938 -2.9591354e-002,
2939 3.1341479e-002,
2940 -7.6083655e-002,
2941 6.1296972e-002,
2942 -5.6695620e-002,
2943 2.2323220e-002,
2944 2.3643317e-003,
2945 2.5031378e-002,
2946 5.5413805e-002,
2947 6.0973843e-002,
2948 -7.3883029e-002,
2949 1.3029020e-002,
2950 6.5448736e-002,
2951 -2.3732566e-002,
2952 -1.6089444e-002,
2953 -2.1074484e-002,
2954 5.7948843e-002,
2955 8.6615559e-002,
2956 -9.1319744e-002,
2957 -1.0161538e-002,
2958 1.9629470e-002,
2959 1.9360651e-002,
2960 -2.8093541e-002,
2961 -4.2935479e-002,
2962 1.0709420e-002,
2963 7.8669934e-002,
2964 2.3835887e-002,
2965 1.8165279e-002,
2966 -5.4214119e-003,
2967 -7.9902014e-003,
2968 4.5058379e-002,
2969 -3.2063499e-002,
2970 -5.8672800e-002,
2971 1.2173177e-002,
2972 5.9993154e-002,
2973 2.3138893e-002,
2974 8.0998931e-003,
2975 -4.4800380e-002,
2976 -2.4859361e-002,
2977 -1.5868492e-002,
2978 -5.2323712e-002,
2979 -4.5973299e-002,
2980 -2.3052455e-003,
2981 8.1582903e-003,
2982 6.8065483e-002,
2983 7.6438296e-004,
2984 4.0392238e-002,
2985 -6.5966937e-002,
2986 -5.0614520e-002,
2987 -5.5301523e-002,
2988 -4.2561773e-003,
2989 5.9937931e-002,
2990 -2.1382190e-002,
2991 -2.0676084e-002,
2992 -3.5839724e-002,
2993 -1.2403270e-002,
2994 -1.8285642e-002,
2995 -4.5681905e-002,
2996 2.5535673e-002,
2997 1.4234783e-002,
2998 -1.9259208e-002,
2999 -2.5661378e-002,
3000 3.0184961e-002,
3001 -5.6818389e-002,
3002 3.2310662e-002,
3003 -2.4301821e-003,
3004 -1.2328487e-002,
3005 -5.4786335e-002,
3006 -4.8916330e-002,
3007 4.8190116e-002,
3008 -6.0850449e-002,
3009 7.7620003e-002,
3010 -6.6473044e-002,
3011 5.1361693e-002,
3012 -4.4367608e-002,
3013 5.9245756e-002,
3014 5.3474787e-003,
3015 3.8059821e-003,
3016 -6.1171918e-002,
3017 -2.9543201e-002,
3018 -8.3560612e-003,
3019 -4.1202373e-002,
3020 -5.3271164e-002,
3021 7.6473415e-002,
3022 1.3747330e-002,
3023 -4.2692942e-002,
3024 -4.7688735e-002,
3025 9.0017757e-002,
3026 -5.5124068e-002,
3027 -4.9430822e-002,
3028 1.9839950e-002,
3029 6.1066303e-002,
3030 -1.3518935e-001,
3031 4.5758030e-002,
3032 2.8061894e-002,
3033 2.2738266e-002,
3034 -9.3128822e-003,
3035 7.9618280e-002,
3036 -1.2187199e-001,
3037 4.5605462e-002,
3038 -3.0479221e-002,
3039 3.8694000e-002,
3040 -1.8124762e-002,
3041 3.7759175e-002,
3042 1.8158014e-003,
3043 -2.7070632e-002,
3044 -2.3634825e-002,
3045 5.2676876e-002,
3046 -5.2016000e-003,
3047 -5.4593248e-002,
3048 -1.6338775e-002,
3049 -8.0919891e-002,
3050 8.7671746e-003,
3051 5.8316283e-002,
3052 -6.9144058e-002,
3053 -4.6936119e-002,
3054 1.6594244e-002,
3055 -7.6784768e-002,
3056 -6.3547981e-003,
3057 4.8236469e-002,
3058 1.6578926e-002,
3059 -2.8223303e-002,
3060 -8.7243754e-002,
3061 5.5790867e-002,
3062 4.5976330e-003,
3063 -4.0593161e-003,
3064 -7.1609202e-002,
3065 3.6451850e-002,
3066 -3.6051938e-002,
3067 1.0343606e-004,
3068 4.0493147e-002,
3069 2.1330427e-002,
3070 -3.3170735e-002,
3071 -4.4584020e-003,
3072 3.1555313e-002,
3073 -1.1414545e-001,
3074 5.6867307e-002,
3075 4.0626699e-002,
3076 -5.8860350e-002,
3077 -1.0003188e-001,
3078 -4.8326893e-002,
3079 -1.2614691e-002,
3080 -2.1586874e-002,
3081 -3.1935606e-002,
3082 2.4103451e-002,
3083 1.4488790e-002,
3084 -8.0859096e-004,
3085 -3.8980020e-003,
3086 7.4909148e-002,
3087 -2.8049185e-002,
3088 -2.0918789e-002,
3089 -2.4711940e-002,
3090 5.3455068e-002,
3091 -9.7517045e-003,
3092 -2.4433675e-002,
3093 3.7640959e-002,
3094 2.4437924e-002,
3095 4.6113770e-003,
3096 -2.1101125e-002,
3097 -2.2852117e-002,
3098 -7.2572348e-002,
3099 3.6761328e-002,
3100 2.6652183e-002,
3101 -4.3100149e-002,
3102 -5.4098286e-002,
3103 8.2220041e-002,
3104 5.5613895e-002,
3105 5.4603855e-002,
3106 -1.3589191e-001,
3107 2.3347518e-002,
3108 4.6453611e-002,
3109 2.2623921e-003,
3110 6.0644536e-002,
3111 -7.5601564e-002,
3112 -8.9194042e-002,
3113 -3.4410351e-002,
3114 -3.4360013e-003,
3115 5.1666691e-002,
3116 1.2464056e-002,
3117 -2.3030505e-003,
3118 -3.9004649e-002,
3119 1.1817405e-002,
3120 -3.4117635e-002,
3121 -2.8693035e-002,
3122 -1.5931261e-002,
3123 8.0677220e-004,
3124 1.8397691e-002,
3125 -3.1052320e-002,
3126 4.9726240e-002,
3127 -2.0747799e-002,
3128 -6.0637710e-003,
3129 -7.9396747e-002,
3130 4.8372461e-002,
3131 -7.1979765e-002,
3132 2.6832942e-002,
3133 2.9273777e-002,
3134 -4.8337996e-003,
3135 4.0391770e-003,
3136 -9.4918066e-002,
3137 6.2066596e-002,
3138 4.9875577e-002,
3139 -3.3753903e-002,
3140 -2.4500392e-002,
3141 9.0658929e-002,
3142 -9.8343476e-002,
3143 -6.2504733e-003,
3144 1.1991216e-001,
3145 2.8944337e-002,
3146 2.6898626e-003,
3147 -6.4267875e-002,
3148 2.9019187e-002,
3149 1.9971213e-002,
3150 8.0684873e-003,
3151 1.3081097e-002,
3152 -3.1283754e-002,
3153 -2.8489269e-002,
3154 -1.1686268e-001,
3155 -1.3745347e-002,
3156 5.3686243e-002,
3157 -5.2197217e-002,
3158 -3.3465705e-002,
3159 -3.5083431e-002,
3160 1.6015164e-002,
3161 2.4493466e-002,
3162 -2.3306198e-002,
3163 -1.9672026e-002,
3164 -7.6748565e-002,
3165 -7.1159132e-002,
3166 -3.6831968e-002,
3167 -1.1592501e-001,
3168 -1.1802673e-001,
3169 2.8843104e-002,
3170 -5.9118430e-002,
3171 -1.1106526e-002,
3172 -4.0643480e-002,
3173 -3.3903934e-002,
3174 6.9026642e-002,
3175 -3.3357058e-002,
3176 3.1574083e-002,
3177 4.0538895e-002,
3178 4.3133551e-002,
3179 3.7814770e-002,
3180 6.4315631e-002,
3181 -5.5887205e-002,
3182 -6.1198396e-002,
3183 7.2376501e-002,
3184 -4.4847288e-002,
3185 4.4972439e-002,
3186 8.9532496e-002,
3187 2.7491210e-002,
3188 3.5765916e-002,
3189 -5.8314299e-002,
3190 -1.5996091e-002,
3191 -4.3521287e-002,
3192 -2.8304205e-002,
3193 -4.3486571e-002,
3194 1.0849438e-001,
3195 2.2361367e-002,
3196 -6.1362009e-003,
3197 5.3111507e-002,
3198 -8.8565282e-002,
3199 8.4842988e-002,
3200 1.0627885e-002,
3201 4.4828472e-003,
3202 7.7250566e-003,
3203 -3.5888413e-002,
3204 4.5405946e-002,
3205 9.5357093e-003,
3206 3.8049221e-002,
3207 1.1798868e-002,
3208 8.5901681e-002,
3209 7.2651393e-002,
3210 -1.0648259e-002,
3211 -3.5412792e-002,
3212 -5.2852119e-003,
3213 -2.8006256e-002,
3214 -5.8455622e-003,
3215 9.2263862e-003,
3216 1.4651709e-002,
3217 -1.1429416e-001,
3218 8.0368439e-002,
3219 2.6278264e-002,
3220 2.0947848e-002,
3221 5.9186459e-002,
3222 3.0967487e-002,
3223 -1.1507298e-001,
3224 -3.4239562e-004,
3225 -2.0939429e-002,
3226 6.9101989e-002,
3227 1.9188787e-002,
3228 -1.7007634e-002,
3229 -1.4226805e-002,
3230 2.0497813e-003,
3231 4.8643630e-003,
3232 -5.0243128e-002,
3233 2.6571757e-002,
3234 -2.5756622e-002,
3235 -6.2136271e-002,
3236 3.0876774e-002,
3237 -3.2966648e-002,
3238 -4.6798326e-002,
3239 -7.2864522e-002,
3240 -7.0620327e-002,
3241 3.1514440e-002,
3242 4.7419175e-002,
3243 -2.9639040e-002,
3244 -7.4872381e-002,
3245 1.0268214e-001,
3246 -6.4408455e-002,
3247 -5.1714244e-002,
3248 -1.4811842e-002,
3249 -2.6652795e-002,
3250 -3.3398841e-002,
3251 -9.1093311e-002,
3252 -2.9613673e-002,
3253 -3.2849316e-002,
3254 -2.1792627e-002,
3255 -4.8905018e-002,
3256 3.8278002e-002,
3257 -1.0578267e-001,
3258 3.9883500e-002,
3259 -4.0322452e-002,
3260 -7.7085856e-002,
3261 -1.1560340e-002,
3262 -9.6078464e-003,
3263 -5.2790120e-003,
3264 -1.7445510e-002,
3265 4.1210396e-002,
3266 -3.1966850e-002,
3267 -4.2623715e-002,
3268 -3.8224686e-002,
3269 -2.3460384e-002,
3270 -1.8322700e-002,
3271 1.5049174e-001,
3272 -3.1993543e-002,
3273 4.3014183e-002,
3274 -4.4366020e-002,
3275 -1.9251396e-002,
3276 -1.2898947e-002,
3277 -6.0899923e-002,
3278 -5.9898591e-002,
3279 -5.6557253e-002,
3280 4.6067919e-002,
3281 2.0882012e-002,
3282 -7.1937529e-002,
3283 -9.5914837e-002,
3284 -1.2626698e-001,
3285 -3.6792717e-002,
3286 2.8022409e-002,
3287 -3.4921767e-002,
3288 -2.2305614e-002,
3289 -3.2328726e-002,
3290 -4.8809030e-002,
3291 -2.6925977e-002,
3292 -4.2114647e-002,
3293 8.7023862e-002,
3294 -3.7654336e-003,
3295 6.9322688e-002,
3296 9.2912513e-003,
3297 5.7435044e-002,
3298 1.9609569e-002,
3299 -1.1570562e-002,
3300 6.1049764e-002,
3301 -6.4977165e-002,
3302 -5.0641683e-002,
3303 -4.9830239e-002,
3304 2.9619165e-002,
3305 -4.3292073e-002,
3306 -6.2860680e-002,
3307 6.3449012e-002,
3308 6.3302743e-002,
3309 -3.7096028e-002,
3310 -4.6860354e-002,
3311 1.6643809e-002,
3312 -2.8812456e-002,
3313 -1.2949017e-004,
3314 -5.0303595e-003,
3315 -5.1531111e-002,
3316 1.0185519e-001,
3317 -8.8467370e-003,
3318 -6.4260237e-002,
3319 2.2972796e-002,
3320 -8.7208177e-003,
3321 2.1703090e-002,
3322 -3.2583688e-002,
3323 1.9180369e-002,
3324 -4.6604492e-002,
3325 5.9620323e-002,
3326 -2.3169309e-002,
3327 1.7923404e-002,
3328 7.0399591e-002,
3329 -6.3632676e-003,
3330 -6.2662420e-002,
3331 -5.0818406e-003,
3332 7.6310034e-002,
3333 3.8440333e-002,
3334 2.3108218e-002,
3335 1.0992061e-001,
3336 -6.6023131e-002,
3337 1.0339039e-002,
3338 -1.2454926e-002,
3339 3.0748449e-002,
3340 3.8733454e-002,
3341 -8.1029526e-002,
3342 -6.3890932e-003,
3343 -1.7310614e-003,
3344 -6.5448180e-002,
3345 -1.3567927e-002,
3346 -1.4651225e-002,
3347 -1.6402517e-003,
3348 -4.0889024e-002,
3349 3.3267739e-002,
3350 -8.7669631e-002,
3351 -1.1762527e-001,
3352 -3.0337637e-003,
3353 -1.0579264e-001,
3354 3.8458061e-002,
3355 6.1506618e-002,
3356 -1.2438319e-002,
3357 -2.0981512e-002,
3358 8.6707387e-003,
3359 4.1305048e-002,
3360 5.8010222e-002,
3361 3.4177414e-002,
3362 6.1614068e-002,
3363 3.7742022e-002,
3364 2.2274616e-003,
3365 -3.3374053e-002,
3366 -1.3841013e-002,
3367 -1.5519456e-002,
3368 -1.1770865e-001,
3369 -4.0589703e-002,
3370 1.1432496e-001,
3371 -2.8665001e-002,
3372 -9.7087434e-002,
3373 2.8739815e-002,
3374 9.2917531e-002,
3375 1.1938896e-001,
3376 -2.9010572e-002,
3377 -3.4721428e-002,
3378 -3.4855927e-002,
3379 -1.2121671e-002,
3380 -1.0158399e-001,
3381 9.7895131e-002,
3382 -7.8712576e-002,
3383 -7.9976995e-002,
3384 7.6185673e-002,
3385 -2.8833935e-002,
3386 1.8354206e-002,
3387 -1.7587259e-001,
3388 -7.8647771e-002,
3389 2.2256759e-002,
3390 -2.1611016e-002,
3391 2.4071583e-002,
3392 4.5227886e-004,
3393 -7.2657111e-002,
3394 -7.2168746e-002,
3395 -1.1452740e-002,
3396 1.6181869e-002,
3397 4.5831060e-002,
3398 -2.3369801e-003,
3399 -2.8727581e-002,
3400 7.5005238e-003,
3401 -8.9739571e-003,
3402 -4.1100109e-002,
3403 -1.6087343e-002,
3404 7.4606898e-003,
3405 2.9933544e-002,
3406 -1.2690286e-001,
3407 -3.9049832e-002,
3408 2.7720568e-002,
3409 1.7947841e-002,
3410 3.4410773e-002,
3411 5.5729818e-003,
3412 -1.8016513e-002,
3413 -4.8830323e-002,
3414 3.2716530e-002,
3415 -3.4232512e-002,
3416 -1.6426973e-002,
3417 5.0795800e-002,
3418 -3.1791729e-002,
3419 3.7707010e-002,
3420 4.5092581e-002,
3421 -4.8603247e-002,
3422 2.9459071e-002,
3423 -4.6422186e-002,
3424 3.9296295e-003,
3425 -2.8900220e-002,
3426 1.1207343e-002,
3427 -3.5131485e-002,
3428 3.0510860e-002,
3429 1.0155622e-001,
3430 6.2187792e-003,
3431 6.7503241e-002,
3432 4.7232070e-002,
3433 -2.1226837e-002,
3434 -8.4154353e-003,
3435 2.0913858e-002,
3436 7.0127327e-003,
3437 -1.2448522e-002,
3438 1.6449412e-002,
3439 4.5151926e-002,
3440 4.6836548e-002,
3441 -2.0687186e-002,
3442 -7.3644538e-002,
3443 -1.0260562e-001,
3444 4.1594354e-004,
3445 2.2962943e-002,
3446 -3.6753478e-002,
3447 -3.6656754e-002,
3448 -3.9912894e-002,
3449 1.1998781e-002,
3450 1.2228691e-002,
3451 6.9910277e-002,
3452 2.4035919e-002,
3453 7.1080248e-003,
3454 3.6471267e-002,
3455 -1.5899153e-003,
3456 -6.2981316e-002,
3457 -4.8019402e-003,
3458 9.9610031e-002,
3459 3.4685502e-002,
3460 -1.4906597e-001,
3461 6.2799402e-002,
3462 -3.8932025e-003,
3463 3.5313345e-002,
3464 6.4080127e-003,
3465 7.7712074e-002,
3466 1.9652177e-002,
3467 3.3529556e-002,
3468 6.7998095e-002,
3469 4.0481914e-002,
3470 -4.5148562e-002,
3471 1.2390995e-001,
3472 6.0472177e-002,
3473 -4.0537793e-002,
3474 -2.9016904e-002,
3475 1.0069785e-002,
3476 -4.3630516e-002,
3477 1.6317010e-002,
3478 -8.1563635e-003,
3479 -2.9428878e-002,
3480 -1.0007097e-002,
3481 1.1748494e-003,
3482 -3.7584384e-003,
3483 -1.0136314e-002,
3484 6.9501199e-002,
3485 -6.2079897e-002,
3486 5.6550846e-002,
3487 -3.1224895e-004,
3488 1.5172074e-002,
3489 3.5494228e-002,
3490 -2.8525286e-002,
3491 7.0934847e-002,
3492 -2.1855207e-002,
3493 -9.0589689e-002,
3494 -5.0420263e-002,
3495 -6.4220854e-002,
3496 8.0572534e-002,
3497 4.4657936e-002,
3498 3.8900053e-002,
3499 2.3038306e-002,
3500 -2.9059798e-002,
3501 4.1790833e-002,
3502 -1.4498459e-003,
3503 -1.4247977e-002,
3504 -7.2557019e-003,
3505 7.0209000e-002,
3506 7.1292433e-002,
3507 -1.0914340e-002,
3508 1.0671194e-001,
3509 -3.9136244e-002,
3510 -1.3175217e-002,
3511 1.3764681e-002,
3512 1.1563616e-001,
3513 -6.3896840e-003,
3514 -6.2527708e-002,
3515 8.8512912e-002,
3516 -2.9045669e-002,
3517 1.5227173e-002,
3518 -5.0667751e-002,
3519 1.2560643e-001,
3520 7.4986299e-002,
3521 3.3825251e-002,
3522 1.5514266e-003,
3523 -5.2532720e-002,
3524 1.7029297e-002,
3525 -3.2944301e-002,
3526 -6.1748947e-002,
3527 2.6402422e-002,
3528 -2.6902014e-002,
3529 -1.1054785e-001,
3530 4.5217579e-002,
3531 7.2634916e-002,
3532 4.7126396e-003,
3533 5.3388646e-002,
3534 1.4724645e-002,
3535 4.8733852e-002,
3536 -2.4509080e-002,
3537 -9.1580431e-002,
3538 5.2106999e-003,
3539 -1.5643665e-001,
3540 -4.8892928e-003,
3541 -5.3026671e-002,
3542 -4.4146053e-004,
3543 3.2444612e-002,
3544 -2.3101994e-003,
3545 9.4890488e-002,
3546 -7.8052719e-002,
3547 6.0338172e-003,
3548 -4.0433742e-002,
3549 -3.9104783e-002,
3550 4.0994343e-002,
3551 7.7513705e-002,
3552 -1.8133412e-002,
3553 -1.8801315e-002,
3554 9.9180571e-002,
3555 5.9051814e-002,
3556 3.2637953e-002,
3557 4.5773237e-002,
3558 9.2868125e-003,
3559 -4.4946634e-002,
3560 -5.0590403e-002,
3561 -3.3365865e-002,
3562 3.5527025e-002,
3563 7.4204867e-003,
3564 1.5004459e-002,
3565 -3.4647091e-003,
3566 5.5465088e-002,
3567 1.1416662e-001,
3568 -2.6462288e-002,
3569 6.8671916e-002,
3570 -6.3002510e-003,
3571 1.1583924e-002,
3572 3.1050102e-003,
3573 -1.0105237e-001,
3574 -1.0657225e-002,
3575 -9.8132990e-002,
3576 -2.8254118e-002,
3577 5.8377956e-002,
3578 -2.3015648e-002,
3579 -1.7437864e-002,
3580 -2.2634945e-002,
3581 -4.8192213e-002,
3582 -4.7584233e-002,
3583 1.9414654e-002,
3584 -2.7057831e-002,
3585 1.7158611e-002,
3586 1.3317117e-001,
3587 -5.5081291e-002,
3588 -5.0017430e-002,
3589 7.6813579e-002,
3590 9.4583304e-002,
3591 -6.9067814e-002,
3592 1.9120563e-002,
3593 2.1258087e-002,
3594 7.2055539e-002,
3595 -4.4266255e-002,
3596 -3.2205709e-002,
3597 -2.8779031e-002,
3598 -2.3481940e-002,
3599 1.7708910e-002,
3600 -1.9311139e-002,
3601 5.3418240e-002,
3602 2.4606925e-002,
3603 5.0846628e-003,
3604 -2.0453302e-002,
3605 3.5461384e-002,
3606 1.3245649e-002,
3607 -1.4856256e-002,
3608 -4.1995487e-002,
3609 -6.8461842e-003,
3610 4.3425178e-002,
3611 -4.2381240e-002,
3612 -1.2470922e-001,
3613 -6.6566711e-002,
3614 -1.5328279e-003,
3615 2.1121820e-002,
3616 -8.9850510e-002,
3617 2.0682240e-004,
3618 -5.8686388e-002,
3619 7.1519107e-002,
3620 2.7049268e-002,
3621 4.3271736e-003,
3622 -1.8990188e-002,
3623 4.1744154e-003,
3624 -6.7617528e-002,
3625 -1.5982309e-002,
3626 -8.6739389e-003,
3627 6.8767245e-003,
3628 -7.0052976e-003,
3629 8.3718019e-002,
3630 5.8127315e-002,
3631 -9.4223672e-002,
3632 -1.3478363e-002,
3633 -3.2457089e-002,
3634 -1.7549472e-001,
3635 2.8493349e-002,
3636 1.0412304e-001,
3637 -1.1173210e-003,
3638 7.1447946e-003,
3639 2.7052018e-002,
3640 2.1816972e-003,
3641 -8.8630176e-002,
3642 -1.0701357e-001,
3643 -4.1207617e-002,
3644 3.7077898e-003,
3645 8.7053488e-002,
3646 1.4283129e-002,
3647 6.4010086e-002,
3648 -3.7679928e-002,
3649 8.3111383e-002,
3650 5.6677718e-002,
3651 1.4063916e-003,
3652 -1.0364232e-001,
3653 3.6312049e-002,
3654 -2.6135054e-002,
3655 3.1703422e-002,
3656 -3.5189144e-002,
3657 1.6030282e-002,
3658 -7.0953448e-002,
3659 -1.6409520e-002,
3660 1.5861113e-002,
3661 -4.0344599e-002,
3662 9.3345150e-002,
3663 -3.2385751e-002,
3664 2.9194015e-002,
3665 -5.3074056e-002,
3666 -5.8395538e-002,
3667 1.4711047e-002,
3668 1.6754312e-002,
3669 -4.1092096e-002,
3670 -5.7509643e-002,
3671 5.8321957e-003,
3672 3.4401437e-002,
3673 3.5235160e-002,
3674 6.4540634e-003,
3675 6.8538944e-003,
3676 -1.0143565e-001,
3677 -2.5820489e-002,
3678 -2.0821741e-002,
3679 4.4652423e-002,
3680 -3.4072854e-002,
3681 -2.6609349e-002,
3682 3.3889860e-002,
3683 -5.3220787e-002,
3684 -2.4894595e-002,
3685 -9.6139329e-002,
3686 -3.3024922e-002,
3687 1.7823306e-002,
3688 -4.2192663e-003,
3689 -5.3704045e-002,
3690 1.1044474e-002,
3691 1.4159169e-002,
3692 5.6261779e-003,
3693 1.4544719e-001,
3694 -4.2079631e-003,
3695 -9.5725344e-002,
3696 -3.6408815e-003,
3697 6.0200088e-002,
3698 2.9998960e-002,
3699 -7.3398314e-002,
3700 -4.8228886e-002,
3701 3.3208412e-002,
3702 -5.6677275e-003,
3703 -6.6855312e-003,
3704 -3.0785426e-002,
3705 4.2126629e-003,
3706 7.0115500e-002,
3707 -3.9919529e-002,
3708 4.0614066e-002,
3709 -3.0371460e-002,
3710 7.2891063e-002,
3711 2.3537099e-002,
3712 2.9755936e-002,
3713 -3.7706444e-002,
3714 -8.3470665e-003,
3715 7.6886063e-003,
3716 -8.4313321e-002,
3717 -2.9399720e-002,
3718 -1.4589921e-002,
3719 1.7944446e-002,
3720 -1.1460170e-001,
3721 -6.2017760e-002,
3722 3.4407222e-002,
3723 -2.7741014e-002,
3724 -4.6295413e-002,
3725 -2.7812656e-002,
3726 -3.0886235e-002,
3727 1.1995511e-002,
3728 -3.2969544e-002,
3729 -6.9191631e-003,
3730 -2.9791556e-002,
3731 2.0392531e-002,
3732 -4.7567313e-003,
3733 -9.8443940e-002,
3734 -1.2686039e-002,
3735 -2.1886631e-002,
3736 -1.5455907e-002,
3737 -1.1782002e-001,
3738 6.1301396e-002,
3739 2.1872915e-002,
3740 -1.0561240e-002,
3741 -2.3193915e-002,
3742 6.9727656e-002,
3743 1.4693869e-003,
3744 -1.3543614e-001,
3745 -4.0815903e-004,
3746 5.6251246e-002,
3747 -9.1505709e-002,
3748 5.7185400e-003,
3749 7.1033142e-002,
3750 -7.9002590e-002,
3751 -4.1318689e-002,
3752 4.9841764e-002,
3753 1.7309114e-002,
3754 5.7136005e-002,
3755 -2.1199613e-002,
3756 -6.1231140e-002,
3757 7.2177738e-002,
3758 2.5816325e-002,
3759 -3.9691591e-002,
3760 -8.4077105e-002,
3761 1.8921121e-002,
3762 4.0273842e-002,
3763 -5.0316912e-002,
3764 -1.2301284e-002,
3765 1.4068218e-003,
3766 3.9074162e-002,
3767 1.1140969e-002,
3768 -9.0100129e-002,
3769 1.6566978e-002,
3770 2.2387085e-002,
3771 -5.5267138e-003,
3772 -1.4053472e-002,
3773 8.5720676e-002,
3774 6.6003080e-003,
3775 -3.4558594e-002,
3776 -2.1528224e-002,
3777 3.4199928e-002,
3778 8.3291659e-003,
3779 -3.4104982e-002,
3780 7.5554591e-003,
3781 1.0701557e-001,
3782 1.3371029e-002,
3783 -5.4777395e-002,
3784 -5.4878162e-002,
3785 -4.1852588e-002,
3786 -4.0276462e-003,
3787 1.0933072e-002,
3788 3.1101256e-002,
3789 -4.6169830e-002,
3790 -7.8623398e-002,
3791 -4.0709650e-002,
3792 -2.2176445e-002,
3793 -6.1230977e-002,
3794 1.6368772e-002,
3795 -1.0741991e-001,
3796 -3.4277843e-002,
3797 6.1009971e-002,
3798 -8.3667710e-002,
3799 1.1309839e-002,
3800 5.4127285e-004,
3801 8.4633157e-002,
3802 -6.3130402e-002,
3803 -1.1137924e-002,
3804 -5.0412645e-002,
3805 -5.4166796e-002,
3806 -4.6504636e-002,
3807 7.8517633e-002,
3808 3.1626107e-002,
3809 -1.8210994e-002,
3810 -3.5098136e-003,
3811 -1.2130004e-002,
3812 -1.3464374e-002,
3813 5.0731507e-002,
3814 -4.3012235e-003,
3815 8.2720477e-002,
3816 -1.3193101e-002,
3817 -1.3778387e-002,
3818 5.5452531e-003,
3819 -9.3586936e-003,
3820 -8.6317405e-003,
3821 -3.6862811e-002,
3822 -3.2830740e-002,
3823 8.4783068e-003,
3824 -1.5330067e-002,
3825 1.1130119e-001,
3826 7.3688984e-003,
3827 -6.4062197e-003,
3828 3.9423451e-002,
3829 8.1626914e-002,
3830 -2.2657562e-002,
3831 7.7429063e-002,
3832 -1.7196394e-003,
3833 -5.1547799e-002,
3834 8.5550269e-002,
3835 1.0233102e-003,
3836 -2.7193777e-002,
3837 5.8490358e-002,
3838 6.2673818e-002,
3839 -3.9346043e-002,
3840 -3.9066234e-002,
3841 -1.2783050e-002,
3842 -6.3166376e-002,
3843 2.7608238e-003,
3844 -4.7437497e-003,
3845 4.1786886e-003,
3846 -3.2351866e-003,
3847 -3.3156438e-002,
3848 -5.4098732e-002,
3849 -5.6553182e-002,
3850 5.8110628e-002,
3851 1.1522620e-002,
3852 -5.4533062e-003,
3853 -1.6040357e-002,
3854 -5.2050007e-002,
3855 1.1068723e-002,
3856 7.0599072e-002,
3857 -8.2637140e-002,
3858 -3.3101999e-002,
3859 -1.7103108e-002,
3860 -5.2723510e-002,
3861 1.1424693e-004,
3862 -2.0451276e-002,
3863 -3.8451163e-002,
3864 -3.9178471e-002,
3865 1.0882970e-001,
3866 -5.9520509e-002,
3867 -1.6406338e-002,
3868 -3.7464624e-002,
3869 -1.5850757e-002,
3870 2.8142632e-003,
3871 8.5106236e-003,
3872 -3.4606452e-002,
3873 2.1538352e-002,
3874 -5.1542008e-002,
3875 -6.0556592e-002,
3876 -3.0525775e-003,
3877 1.0188123e-001,
3878 -1.6159393e-002,
3879 -4.6398817e-003,
3880 -3.4883594e-002,
3881 5.7383438e-003,
3882 7.6872944e-002,
3883 1.6904979e-002,
3884 -3.9974367e-004,
3885 -6.4651835e-002,
3886 2.0519546e-002,
3887 1.4600580e-002,
3888 9.3830207e-002,
3889 1.1815421e-001,
3890 8.2952538e-002,
3891 1.3580903e-004,
3892 -4.5583612e-002,
3893 -8.4369787e-002,
3894 1.0032836e-002,
3895 7.8411529e-002,
3896 4.3200604e-002,
3897 -1.5040485e-001,
3898 -1.2045753e-001,
3899 -3.0628967e-002,
3900 4.6612260e-003,
3901 6.4710750e-002,
3902 -2.6463384e-002,
3903 8.0467496e-002,
3904 1.5772806e-002,
3905 -9.0031337e-002,
3906 3.8140960e-002,
3907 2.4067996e-002,
3908 -1.4456479e-002,
3909 2.5044977e-002,
3910 -5.5023682e-002,
3911 -3.1476503e-002,
3912 4.6154417e-002,
3913 4.1969567e-002,
3914 -2.1537004e-002,
3915 -1.3892791e-002,
3916 -7.9877470e-002,
3917 -6.6130095e-002,
3918 -3.3971108e-002,
3919 4.9723852e-004,
3920 -2.3332777e-002,
3921 4.4957143e-002,
3922 4.5955566e-002,
3923 7.3085106e-002,
3924 1.4327863e-002,
3925 4.4882884e-002,
3926 -4.5453744e-002,
3927 3.2494203e-002,
3928 -3.5223572e-004,
3929 -3.4399985e-002,
3930 -5.9070327e-002,
3931 -2.4763167e-002,
3932 5.4170280e-002,
3933 -9.3797557e-002,
3934 -2.4345173e-002,
3935 7.5789539e-003,
3936 6.5847677e-003,
3937 -1.1035459e-001,
3938 6.4245815e-002,
3939 -6.3677641e-002,
3940 -2.7625955e-002,
3941 -4.9760945e-002,
3942 1.9438298e-002,
3943 -2.0183031e-003,
3944 3.9238472e-002,
3945 7.3801148e-002,
3946 -7.4626808e-003,
3947 -3.5100675e-002,
3948 1.1826910e-002,
3949 -5.0622844e-002,
3950 4.3419831e-002,
3951 -2.2438311e-002,
3952 4.0482870e-002,
3953 -2.5746508e-002,
3954 -4.5886738e-003,
3955 -4.2692344e-002,
3956 6.0214404e-003,
3957 -4.9494823e-002,
3958 -6.9637679e-002,
3959 -6.0074768e-002,
3960 -1.3792535e-002,
3961 5.8374139e-002,
3962 4.0942951e-006,
3963 -4.1381257e-002,
3964 5.5951370e-002,
3965 -2.9628877e-002,
3966 1.2189054e-002,
3967 9.2356783e-003,
3968 1.9097401e-002,
3969 5.8341964e-002,
3970 -5.8640330e-002,
3971 -4.0346416e-002,
3972 -2.0148478e-002,
3973 -7.3979491e-002,
3974 -7.6507173e-003,
3975 -2.6376789e-002,
3976 9.3631448e-003,
3977 5.7075337e-004,
3978 -1.7237147e-002,
3979 -1.4088176e-002,
3980 -6.5722025e-002,
3981 1.7734913e-001,
3982 3.9188355e-002,
3983 -5.3138441e-003,
3984 6.6012838e-004,
3985 -3.7635320e-002,
3986 8.6939560e-002,
3987 2.5457618e-002,
3988 -5.3643902e-003,
3989 -3.5072285e-002,
3990 1.7654459e-002,
3991 -1.7002417e-002,
3992 -1.1934297e-002,
3993 1.0909989e-001,
3994 -4.5341914e-002,
3995 2.9654212e-002,
3996 -7.3979691e-002,
3997 8.1855730e-002,
3998 -4.1111527e-002,
3999 2.8178913e-002,
4000 3.0990023e-002,
4001 -3.8439631e-002,
4002 4.6092851e-002,
4003 2.0499136e-002,
4004 -4.0078674e-002,
4005 -7.5298075e-002,
4006 8.6249420e-002,
4007 2.0413103e-002,
4008 1.4283415e-002,
4009 3.3364666e-003,
4010 4.5625551e-002,
4011 2.8593452e-002,
4012 1.0294208e-001,
4013 4.6237012e-002,
4014 2.3737104e-002,
4015 1.4850043e-003,
4016 4.5627026e-002,
4017 -3.1300170e-002,
4018 2.7232389e-002,
4019 -2.5581725e-002,
4020 -4.2382451e-002,
4021 -4.1639602e-002,
4022 -1.2685580e-002,
4023 -6.8348575e-002,
4024 -3.5070023e-002,
4025 -1.9126421e-002,
4026 -5.1202221e-002,
4027 -2.1697346e-002,
4028 6.3981805e-003,
4029 6.1889782e-002,
4030 -9.5515388e-002,
4031 -3.5099019e-002,
4032 -7.5991979e-003,
4033 2.6608290e-002,
4034 -6.5628332e-003,
4035 4.0519304e-002,
4036 1.8759115e-004,
4037 -8.2745501e-002,
4038 4.8080126e-002,
4039 -9.4334121e-002,
4040 -1.7519517e-002,
4041 8.4578794e-003,
4042 -1.0547960e-002,
4043 -2.9348950e-003,
4044 2.2443020e-002,
4045 -8.3815521e-003,
4046 3.4363193e-002,
4047 3.5010892e-002,
4048 -2.7129950e-002,
4049 -1.8407294e-003,
4050 -2.7794904e-002,
4051 7.5761568e-002,
4052 -5.1005395e-002,
4053 2.2206192e-002,
4054 5.5815959e-003,
4055 1.3179272e-002,
4056 1.3743604e-002,
4057 8.4180570e-002,
4058 -4.5318175e-002,
4059 -4.0369759e-002,
4060 -5.5643911e-002,
4061 1.1111604e-002,
4062 4.9980927e-002,
4063 -5.3328516e-002,
4064 -2.5289654e-002,
4065 -5.3455028e-002,
4066 -4.5115993e-003,
4067 1.2552924e-002,
4068 2.4187614e-002,
4069 -6.5216647e-002,
4070 -6.7184717e-002,
4071 -3.4635282e-002,
4072 2.6037151e-002,
4073 -1.2958051e-002,
4074 -6.4529955e-002,
4075 -4.7775406e-002,
4076 7.7791690e-002,
4077 -4.1840856e-002,
4078 3.5508733e-002,
4079 3.6208672e-002,
4080 2.8883867e-002,
4081 -2.2614722e-002,
4082 -6.2467477e-002,
4083 2.1201398e-002,
4084 -6.4938220e-002,
4085 -2.5718030e-002,
4086 1.0132503e-001,
4087 -1.0989944e-001,
4088 1.7386332e-002,
4089 -1.9848054e-002,
4090 4.6500211e-002,
4091 8.7080916e-002,
4092 6.1051787e-002,
4093 -6.9658176e-002,
4094 1.8448919e-003,
4095 -6.3897477e-002,
4096 9.5246967e-003,
4097 -1.7099063e-002,
4098 8.6762837e-002,
4099 -5.1071138e-002,
4100 -4.1995939e-002,
4101 -1.5112140e-002,
4102 9.4802477e-002,
4103 -3.6319825e-003,
4104 5.6475075e-002,
4105 -5.2649820e-003,
4106 5.5494589e-002,
4107 -3.6195527e-002,
4108 3.0102603e-002,
4109 9.6119308e-002,
4110 2.9804096e-002,
4111 -8.3871467e-002,
4112 -4.6819532e-002,
4113 -6.6699175e-002,
4114 -7.8740356e-002,
4115 2.3100681e-002,
4116 4.0518590e-002,
4117 -5.5249251e-002,
4118 3.4210609e-002,
4119 6.3808433e-003,
4120 2.9561241e-002,
4121 -7.9993851e-002,
4122 -8.6030708e-003,
4123 4.9599184e-002,
4124 -5.3356684e-002,
4125 -4.3441101e-002,
4126 4.6557960e-003,
4127 -5.8349112e-002,
4128 7.0442125e-002,
4129 3.3583231e-002,
4130 3.5326691e-002,
4131 -1.4284013e-003,
4132 3.7155912e-003,
4133 -6.1957730e-002,
4134 -2.5175104e-002,
4135 1.0316170e-004,
4136 1.3785501e-002,
4137 -3.4528343e-002,
4138 9.4718664e-002,
4139 -8.5929124e-003,
4140 6.2353769e-003,
4141 -1.9235982e-002,
4142 -5.0684859e-002,
4143 -9.0890509e-002,
4144 2.9614723e-002,
4145 -5.8904724e-002,
4146 -5.9605704e-002,
4147 1.7332188e-002,
4148 -6.2983369e-004,
4149 7.6762655e-002,
4150 -1.5739418e-001,
4151 4.7428004e-002,
4152 -7.4437002e-003,
4153 3.2753497e-002,
4154 -6.4494291e-003,
4155 -1.0132357e-001,
4156 3.1793509e-002,
4157 -1.9653108e-002,
4158 -1.3986054e-002,
4159 -1.0375110e-001,
4160 5.9341902e-002,
4161 7.4338421e-002,
4162 -7.4336814e-002,
4163 -8.8261702e-004,
4164 8.4239417e-002,
4165 3.6771318e-002,
4166 4.6614615e-003,
4167 -1.0885608e-001,
4168 4.0218429e-002,
4169 -7.3328551e-002,
4170 3.4660924e-002,
4171 -2.2304889e-002,
4172 9.1183611e-003,
4173 -3.1063866e-002,
4174 3.7029187e-002,
4175 -8.5599164e-003,
4176 -3.1378391e-003,
4177 -3.4177850e-002,
4178 -3.6311985e-002,
4179 5.4941612e-002,
4180 -2.5856244e-002,
4181 9.8859541e-002,
4182 -4.1708361e-002,
4183 4.4676996e-002,
4184 1.0012678e-001,
4185 1.2298856e-002,
4186 3.9574107e-002,
4187 -5.4805478e-003,
4188 -2.5335550e-002,
4189 2.0495470e-002,
4190 -2.8777276e-003,
4191 -1.2280951e-002,
4192 -3.6926171e-002,
4193 -6.4637997e-002,
4194 3.1275904e-002,
4195 -4.0724158e-002,
4196 8.2545982e-002,
4197 1.7297459e-002,
4198 1.7103606e-003,
4199 -3.6063372e-002,
4200 -1.9411586e-002,
4201 2.5489285e-002,
4202 5.3618799e-002,
4203 -1.5847040e-003,
4204 -8.2607767e-002,
4205 6.4750926e-002,
4206 3.4155392e-002,
4207 1.2202950e-002,
4208 -6.3849575e-002,
4209 -4.2629288e-002,
4210 -9.3420039e-002,
4211 1.8591964e-002,
4212 -6.2494687e-002,
4213 2.7073439e-002,
4214 -1.6706104e-002,
4215 8.5702929e-004,
4216 5.5338380e-002,
4217 -1.1863343e-002,
4218 2.4120033e-002,
4219 -1.9673309e-002,
4220 -9.0836747e-003,
4221 -8.4090025e-002,
4222 -1.6605994e-002,
4223 1.2509049e-002,
4224 2.9654581e-003,
4225 3.5414725e-002,
4226 -9.1520329e-002,
4227 5.3251481e-004,
4228 -3.9064127e-002,
4229 4.3848196e-002,
4230 -6.5906592e-002,
4231 -6.2694114e-002,
4232 -7.5430627e-002,
4233 -6.9288028e-002,
4234 -7.3831218e-002,
4235 -2.2849271e-003,
4236 4.1968983e-002,
4237 9.1516100e-003,
4238 6.3003994e-002,
4239 4.0825527e-003,
4240 -1.1602298e-002,
4241 3.4062508e-002,
4242 -3.6760665e-002,
4243 -6.6458351e-003,
4244 4.5328593e-002,
4245 1.5333803e-002,
4246 3.1081863e-002,
4247 1.0997856e-003,
4248 4.0172982e-002,
4249 -5.1202051e-002,
4250 3.0204527e-002,
4251 -9.1683008e-002,
4252 6.6885251e-002,
4253 -1.4713293e-002,
4254 -1.8783233e-002,
4255 -2.6727404e-002,
4256 -4.0587117e-002,
4257 1.7352452e-002,
4258 2.4068866e-002,
4259 9.3813608e-002,
4260 1.4593201e-001,
4261 -2.6243684e-002,
4262 4.2410590e-003,
4263 5.7049362e-002,
4264 -1.0495092e-002,
4265 5.5352776e-002,
4266 -1.4966413e-002,
4267 5.8887924e-002,
4268 -2.9432846e-002,
4269 1.5016450e-002,
4270 1.8771912e-002,
4271 2.9731363e-002,
4272 -8.9727906e-002,
4273 -2.8879171e-002,
4274 -2.4530626e-002,
4275 -2.1755227e-002,
4276 2.6372269e-002,
4277 1.6464203e-002,
4278 -2.9595373e-003,
4279 -2.8033224e-002,
4280 -3.8960164e-002,
4281 -1.4500836e-002,
4282 1.2441672e-004,
4283 6.9888338e-002,
4284 -1.3326151e-002,
4285 -4.4177213e-002,
4286 1.0679639e-001,
4287 -7.7540624e-002,
4288 7.3527032e-002,
4289 7.1684818e-002,
4290 2.4447003e-002,
4291 1.3247555e-002,
4292 2.5484911e-002,
4293 -2.0333037e-002,
4294 1.0820256e-001,
4295 -1.5291962e-001,
4296 4.0764107e-002,
4297 -5.3576752e-002,
4298 -3.3726558e-002,
4299 5.9985203e-002,
4300 1.4311757e-002,
4301 1.0872979e-002,
4302 4.8154459e-002,
4303 -9.8724947e-002,
4304 3.5433564e-002,
4305 -3.0296223e-002,
4306 -4.9776503e-002,
4307 6.4312955e-002,
4308 -3.8636806e-002,
4309 4.1001924e-002,
4310 2.8324136e-002,
4311 -2.4954944e-002,
4312 3.0731417e-002,
4313 -4.0748527e-002,
4314 1.0071007e-001,
4315 -4.2444577e-002,
4316 7.4060614e-002,
4317 7.0443088e-002,
4318 -8.5281317e-002,
4319 2.2408837e-002,
4320 -3.0453603e-002,
4321 5.3244534e-002,
4322 -2.7097865e-002,
4323 9.3509025e-002,
4324 -4.0481022e-002,
4325 3.0984921e-002,
4326 6.2120102e-002,
4327 2.5263636e-002,
4328 4.7524005e-002,
4329 -8.3461434e-002,
4330 -4.0450596e-002,
4331 2.4301374e-002,
4332 2.4082281e-002,
4333 2.7165952e-002,
4334 2.5739840e-002,
4335 -4.4498403e-002,
4336 -9.3779267e-002,
4337 1.3230632e-002,
4338 5.6356340e-002,
4339 -3.1721297e-002,
4340 -1.1371059e-001,
4341 5.1330793e-002,
4342 3.9800143e-002,
4343 4.4602902e-002,
4344 4.0186966e-002,
4345 -3.3956201e-002,
4346 -3.4378181e-002,
4347 3.0222123e-002,
4348 1.3392410e-002,
4349 -1.1877032e-001,
4350 -6.1513207e-002,
4351 5.1308971e-002,
4352 -3.4406254e-004,
4353 -5.6836546e-002,
4354 3.1147677e-002,
4355 1.2984031e-001,
4356 6.9255265e-002,
4357 -7.3899471e-002,
4358 4.4113150e-002,
4359 4.1613437e-002,
4360 -8.3330499e-002,
4361 -6.7769626e-002,
4362 9.9577638e-003,
4363 8.5011488e-002,
4364 3.1777824e-002,
4365 -3.0275122e-002,
4366 -1.9721785e-003,
4367 -2.8670666e-002,
4368 -5.1951849e-002,
4369 2.6123845e-002,
4370 -4.6954628e-002,
4371 3.9325561e-002,
4372 -1.4539624e-001,
4373 -4.4989415e-002,
4374 1.2490030e-002,
4375 9.8158554e-002,
4376 -8.8549642e-002,
4377 7.0425741e-002,
4378 1.6289354e-002,
4379 7.6642414e-002,
4380 8.2615082e-002,
4381 1.5188920e-002,
4382 1.0717190e-001,
4383 7.8459410e-003,
4384 -9.8939081e-002,
4385 5.4496988e-002,
4386 -1.9598305e-002,
4387 -4.8340131e-002,
4388 9.1012052e-002,
4389 4.5089162e-002,
4390 2.7001089e-002,
4391 3.9597820e-002,
4392 -2.9912957e-002,
4393 -4.5233127e-002,
4394 -2.6888627e-002,
4395 8.2716012e-002,
4396 4.1938511e-002,
4397 -1.2290728e-002,
4398 -9.1141489e-002,
4399 -9.3716385e-002,
4400 5.0846593e-002,
4401 -6.9747424e-002,
4402 1.5936647e-002,
4403 9.0841003e-003,
4404 -7.9217963e-002,
4405 4.2523607e-002,
4406 -3.4283790e-002,
4407 6.2931211e-002,
4408 1.9054212e-002,
4409 1.0431108e-002,
4410 -1.7512053e-002,
4411 1.5995877e-002,
4412 -6.9853083e-002,
4413 -3.6133865e-002,
4414 5.1883029e-002,
4415 -5.4941971e-002,
4416 2.5099530e-002,
4417 2.1949930e-002,
4418 -7.2924143e-002,
4419 -1.2241689e-002,
4420 -2.5239538e-003,
4421 1.0240874e-002,
4422 -3.5188489e-002,
4423 -1.4637794e-002,
4424 4.2573102e-002,
4425 -4.6954972e-002,
4426 4.9757134e-002,
4427 8.9000907e-002,
4428 -5.7343223e-003,
4429 -9.4659733e-002,
4430 2.2731848e-002,
4431 -6.3526985e-002,
4432 -6.2729748e-002,
4433 -8.5124042e-002,
4434 -2.2742192e-002,
4435 4.9060274e-003,
4436 5.9105851e-002,
4437 6.6593845e-002,
4438 -2.0401971e-002,
4439 -3.4052538e-002,
4440 1.0187912e-001,
4441 -3.9129772e-002,
4442 1.6727491e-002,
4443 7.9581367e-002,
4444 2.3490622e-002,
4445 -8.5225499e-002,
4446 4.5609113e-002,
4447 2.5532693e-002,
4448 -1.3949777e-002,
4449 1.1939908e-001,
4450 3.1136484e-002,
4451 2.1065018e-002,
4452 -7.3998053e-002,
4453 -3.3433899e-002,
4454 6.4825970e-002,
4455 -6.6483460e-003,
4456 2.1878777e-002,
4457 -5.5590218e-002,
4458 6.2132974e-002,
4459 6.0099401e-002,
4460 2.6750906e-002,
4461 -3.2033687e-002,
4462 4.8448643e-002,
4463 -3.8771221e-003,
4464 -4.8090282e-002,
4465 -2.9473176e-002,
4466 -1.6510646e-002,
4467 5.6059374e-003,
4468 -2.8498771e-002,
4469 1.4581678e-001,
4470 7.2382639e-003,
4471 6.9060065e-002,
4472 3.1254099e-002,
4473 1.1295554e-001,
4474 -2.0791262e-002,
4475 2.6272472e-002,
4476 2.3832128e-004,
4477 1.7675185e-004,
4478 2.2985763e-002,
4479 5.8978432e-003,
4480 4.4429730e-003,
4481 7.5305836e-002,
4482 2.7519294e-002,
4483 2.6304737e-003,
4484 -7.5022497e-003,
4485 9.7612623e-002,
4486 -1.1392227e-003,
4487 6.3717011e-002,
4488 4.2435569e-002,
4489 -6.8014182e-002,
4490 7.4854037e-002,
4491 3.2524349e-002,
4492 7.0521866e-002,
4493 2.0297711e-002,
4494 -2.7255480e-002,
4495 -1.3079920e-002,
4496 -1.1988356e-001,
4497 4.2564644e-002,
4498 8.9756674e-002,
4499 1.7220549e-002,
4500 -4.4937423e-002,
4501 -2.9070759e-002,
4502 -4.4538021e-002,
4503 -7.8632839e-002,
4504 -2.8995185e-002,
4505 -1.4328207e-002,
4506 2.6443524e-002,
4507 8.9669124e-002,
4508 1.7624887e-003,
4509 3.2927633e-002,
4510 -3.1535117e-002,
4511 -6.6599096e-003,
4512 1.0186317e-001,
4513 8.9875545e-003,
4514 2.8378610e-002,
4515 -5.5136504e-002,
4516 3.3829370e-002,
4517 7.1374246e-003,
4518 -1.4538378e-002,
4519 3.9237476e-002,
4520 6.8685661e-002,
4521 -3.3057531e-003,
4522 1.1538617e-002,
4523 8.8143388e-003,
4524 -1.9900457e-002,
4525 2.0600418e-002,
4526 3.0249751e-002,
4527 -7.3517395e-003,
4528 6.4648004e-002,
4529 -8.6600526e-004,
4530 8.3511299e-003,
4531 -5.4627039e-002,
4532 -6.4363505e-003,
4533 1.6893141e-002,
4534 5.5401782e-003,
4535 -2.4244983e-003,
4536 -2.0950127e-002,
4537 -2.2956516e-002,
4538 7.8535473e-003,
4539 2.4067483e-002,
4540 6.1367370e-002,
4541 -3.3267227e-002,
4542 -1.7259358e-002,
4543 -7.3612541e-003,
4544 -1.5577290e-002,
4545 8.5933756e-002,
4546 5.0314067e-003,
4547 -5.7691721e-002,
4548 -3.1185546e-002,
4549 -1.0012818e-002,
4550 -9.3068008e-003,
4551 -1.2733027e-001,
4552 -2.4660461e-002,
4553 -6.9689614e-002,
4554 6.7705187e-002,
4555 -9.0527945e-002,
4556 -8.9240761e-003,
4557 -3.6546741e-002,
4558 -7.8518923e-003,
4559 6.0277518e-002,
4560 8.8143610e-002,
4561 -3.6670503e-002,
4562 5.9594768e-002,
4563 -6.2854695e-002,
4564 8.4561367e-003,
4565 4.2531503e-002,
4566 1.2490411e-001,
4567 -1.2983679e-002,
4568 4.8837441e-002,
4569 2.8397759e-002,
4570 4.9265357e-004,
4571 -5.0014029e-002,
4572 -6.4438003e-002,
4573 6.3709335e-002,
4574 -8.3485243e-002,
4575 -1.3662989e-002,
4576 -1.1010182e-002,
4577 -4.1630589e-004,
4578 3.7231066e-002,
4579 5.8354336e-002,
4580 1.4802151e-002,
4581 -9.2736005e-003,
4582 7.0150240e-002,
4583 -7.5624119e-002,
4584 -1.8709434e-002,
4585 8.1817931e-002,
4586 1.0532906e-001,
4587 -6.6715765e-002,
4588 1.1083842e-002,
4589 -7.4493893e-002,
4590 -9.9142748e-003,
4591 6.2718554e-002,
4592 2.7079763e-002,
4593 -2.5876824e-002,
4594 -4.8123789e-002,
4595 6.1857353e-002,
4596 -4.2675136e-002,
4597 -6.2163117e-002,
4598 -7.4268325e-002,
4599 -2.9318352e-002,
4600 -3.3154279e-002,
4601 4.8684897e-002,
4602 -2.4063594e-002,
4603 -8.6147192e-002,
4604 -7.1972623e-003,
4605 -4.4253121e-002,
4606 -2.1162236e-003,
4607 -3.5637316e-002,
4608 -5.0298912e-003,
4609 1.9549988e-002,
4610 -3.1928938e-002,
4611 -4.5581285e-002,
4612 4.7829407e-002,
4613 8.7149645e-002,
4614 4.0640515e-002,
4615 1.4297447e-002,
4616 9.8222629e-003,
4617 3.2853388e-002,
4618 6.8740447e-002,
4619 -1.2177132e-001,
4620 9.4625764e-002,
4621 -1.5776485e-002,
4622 -3.2495760e-002,
4623 3.0796063e-002,
4624 -1.5368625e-002,
4625 -7.9526144e-002,
4626 -6.2453602e-002,
4627 5.9616092e-002,
4628 -6.4260784e-002,
4629 1.5966646e-002,
4630 3.1495482e-002,
4631 6.5589632e-002,
4632 -3.4614182e-002,
4633 -6.9190746e-002,
4634 -2.0874294e-002,
4635 1.3630214e-002,
4636 5.3339825e-002,
4637 1.6147000e-002,
4638 4.2668360e-002,
4639 -2.5662017e-002,
4640 4.5348429e-003,
4641 6.1345954e-002,
4642 4.1541021e-002,
4643 -4.9887559e-002,
4644 -5.8465581e-002,
4645 -2.1207204e-002,
4646 7.9091417e-003,
4647 -1.2334773e-002,
4648 -1.0617181e-001,
4649 8.9782313e-002,
4650 -6.8274917e-002,
4651 2.1132464e-002,
4652 5.7348207e-003,
4653 -9.2561293e-003,
4654 -3.7038110e-002,
4655 -2.8239427e-002,
4656 1.8178841e-002,
4657 -3.9897232e-002,
4658 1.0250394e-002,
4659 6.3382126e-002,
4660 3.1483520e-002,
4661 -1.4611403e-002,
4662 -4.1066531e-003,
4663 5.7642552e-002,
4664 1.2244865e-002,
4665 3.7434406e-002,
4666 2.2822222e-002,
4667 9.2902509e-002,
4668 1.1325867e-002,
4669 -6.2025695e-002,
4670 1.5489679e-002,
4671 -1.6179136e-002,
4672 -1.7726855e-003,
4673 8.7415263e-002,
4674 2.9780528e-002,
4675 -6.5055050e-002,
4676 -1.7262184e-002,
4677 -1.2062737e-002,
4678 4.1904361e-002,
4679 -3.4331618e-002,
4680 1.2164792e-001,
4681 4.9603771e-002,
4682 -1.3061748e-002,
4683 1.1007232e-002,
4684 -1.4216546e-002,
4685 -3.5763228e-002,
4686 1.2025510e-002,
4687 8.2989866e-002,
4688 2.0160053e-002,
4689 -1.6822685e-002,
4690 7.3528826e-003,
4691 2.0923780e-002,
4692 5.2711615e-003,
4693 -2.5691601e-002,
4694 4.5395884e-002,
4695 -1.5802909e-003,
4696 6.8782769e-002,
4697 1.1122473e-001,
4698 1.0025602e-001,
4699 1.3910254e-001,
4700 -8.5937461e-002,
4701 3.2274784e-002,
4702 4.8447219e-002,
4703 -7.6279744e-002,
4704 -9.4932243e-002,
4705 -4.6596008e-002,
4706 6.9567452e-002,
4707 -2.0821944e-002,
4708 2.8782945e-002,
4709 -1.8673196e-002,
4710 -1.0249668e-003,
4711 3.0785039e-003,
4712 7.5883489e-002,
4713 -6.3193813e-003,
4714 7.7764074e-002,
4715 -4.3608077e-002,
4716 -1.3123466e-002,
4717 3.6824621e-003,
4718 -5.9201109e-002,
4719 -2.3113816e-002,
4720 -8.8488271e-002,
4721 -1.1032349e-002,
4722 -2.3364616e-003,
4723 -6.5601368e-002,
4724 1.4329878e-001,
4725 9.5131857e-002,
4726 4.2865722e-002,
4727 -9.6979502e-002,
4728 -3.5638863e-002,
4729 9.0205848e-002,
4730 1.9877782e-002,
4731 -1.2497646e-001,
4732 2.5802125e-002,
4733 4.6840610e-002,
4734 -4.7117859e-002,
4735 -1.0958747e-001,
4736 -4.6687284e-002,
4737 3.3044810e-003,
4738 -4.3352639e-002,
4739 5.5404689e-002,
4740 -1.4901969e-001,
4741 -6.5836290e-003,
4742 -8.3908961e-002,
4743 -8.4786953e-003,
4744 2.6778741e-002,
4745 -7.1364019e-002,
4746 2.9762397e-002,
4747 3.8378977e-002,
4748 -1.3678167e-002,
4749 1.0245114e-002,
4750 -6.8802397e-002,
4751 -7.9396342e-002,
4752 8.9092342e-002,
4753 -2.5071896e-002,
4754 1.6416317e-001,
4755 -3.3416141e-002,
4756 -8.8098549e-002,
4757 -2.8516999e-002,
4758 -2.8171336e-002,
4759 1.4735227e-002,
4760 2.1490528e-002,
4761 1.0996266e-002,
4762 -7.9010073e-002,
4763 1.3973632e-002,
4764 8.5196514e-002,
4765 -3.4922417e-002,
4766 3.4433947e-002,
4767 4.5850060e-002,
4768 -6.6284133e-002,
4769 -1.0572099e-001,
4770 -6.6431349e-002,
4771 6.0325770e-002,
4772 -9.2479536e-003,
4773 -2.2892434e-002,
4774 -3.9861268e-002,
4775 7.7138209e-002,
4776 1.1492915e-002,
4777 3.1465738e-002,
4778 -1.2138307e-002,
4779 4.7630033e-002,
4780 -9.7311603e-003,
4781 1.3770049e-002,
4782 -7.3660639e-003,
4783 7.4335649e-002,
4784 -3.6628135e-003,
4785 1.2752549e-002,
4786 1.3838186e-002,
4787 4.2180077e-004,
4788 -5.4375913e-002,
4789 2.1917738e-002,
4790 -1.2614454e-002,
4791 -2.3342227e-002,
4792 -6.4971690e-002,
4793 1.6110329e-002,
4794 1.4737048e-002,
4795 3.0388287e-002,
4796 -1.6824888e-002,
4797 1.7295248e-002,
4798 1.0812445e-002,
4799 -5.5425021e-002,
4800 -4.9277740e-002,
4801 5.0707632e-002,
4802 4.1922806e-002,
4803 1.8455962e-002,
4804 5.0365924e-002,
4805 4.4298398e-002,
4806 7.6431843e-003,
4807 5.9989537e-002,
4808 -7.6908515e-002,
4809 2.8530229e-002,
4810 9.5653590e-002,
4811 -7.2017798e-002,
4812 -8.0655593e-003,
4813 1.0083818e-001,
4814 4.9232556e-002,
4815 -6.6242009e-002,
4816 2.9556295e-003,
4817 -3.5960545e-002,
4818 1.1419955e-002,
4819 6.6825880e-003,
4820 2.9477422e-002,
4821 -2.9472636e-002,
4822 5.5236681e-002,
4823 2.8874435e-002,
4824 -2.2350145e-002,
4825 -1.4664332e-002,
4826 -6.8185763e-002,
4827 -2.0916584e-003,
4828 -6.2584599e-003,
4829 5.9273963e-003,
4830 9.7345621e-002,
4831 1.7069987e-002,
4832 -3.5800212e-002,
4833 3.8397984e-002,
4834 -4.6760839e-002,
4835 -5.0292748e-002,
4836 -2.1914980e-002,
4837 -1.8316586e-003,
4838 -5.2956111e-002,
4839 -4.4811672e-003,
4840 6.3511854e-002,
4841 -5.7468947e-002,
4842 3.3773578e-003,
4843 -6.2827625e-002,
4844 -1.0672637e-001,
4845 -2.3481169e-002,
4846 -4.9309562e-002,
4847 -9.6720496e-003,
4848 5.8540389e-002,
4849 -1.4927692e-002,
4850 4.5935378e-002,
4851 -1.5630681e-003,
4852 -1.8325545e-002,
4853 3.2884463e-002,
4854 2.3472286e-002,
4855 1.9480110e-002,
4856 -1.5164953e-002,
4857 5.0952861e-004,
4858 3.6924652e-002,
4859 3.9980199e-003,
4860 2.7122068e-002,
4861 4.0586323e-002,
4862 -6.8458269e-004,
4863 2.4214833e-002,
4864 -2.6547884e-002,
4865 -2.4783823e-002,
4866 8.8816623e-002,
4867 5.5882019e-002,
4868 5.3618064e-003,
4869 -1.1671543e-001,
4870 -8.2213149e-002,
4871 -9.6951820e-002,
4872 7.3380548e-002,
4873 -1.2640056e-003,
4874 4.1876563e-002,
4875 2.5405425e-002,
4876 2.4599929e-002,
4877 1.4178532e-002,
4878 5.5594418e-003,
4879 4.2950164e-002,
4880 1.8014601e-003,
4881 -1.2215360e-001,
4882 1.0493101e-001,
4883 3.1735201e-002,
4884 5.5741286e-003,
4885 -3.2479076e-002,
4886 2.6681545e-002,
4887 2.8019414e-002,
4888 -8.0179790e-003,
4889 3.1489206e-002,
4890 4.3033256e-003,
4891 -3.7630185e-002,
4892 5.3039128e-002,
4893 5.1506634e-002,
4894 -1.7820552e-002,
4895 -2.4621551e-002,
4896 -5.5322066e-002,
4897 2.5011123e-002,
4898 -4.7866728e-002,
4899 -1.0796552e-002,
4900 -3.3392282e-002,
4901 -4.7783524e-002,
4902 -1.8094968e-002,
4903 -7.2520784e-002,
4904 -6.5389567e-002,
4905 3.9464487e-002,
4906 -9.8809443e-003,
4907 3.1120895e-002,
4908 -5.4329781e-002,
4909 1.6954674e-002,
4910 -4.8954224e-002,
4911 7.3972200e-002,
4912 4.7640882e-002,
4913 3.0356780e-002,
4914 9.5741578e-003,
4915 -4.1590063e-002,
4916 1.1287435e-001,
4917 -8.6416889e-003,
4918 -2.2674367e-002,
4919 2.1388361e-003,
4920 5.5542441e-002,
4921 1.0045614e-002,
4922 -8.7522721e-002,
4923 8.7719983e-003,
4924 6.7355731e-002,
4925 -1.6159743e-002,
4926 8.7223484e-003,
4927 6.0092014e-002,
4928 -9.4184958e-002,
4929 -3.6268920e-002,
4930 -2.1332232e-002,
4931 -3.1682036e-002,
4932 2.8664908e-002,
4933 2.6541157e-002,
4934 -1.0689359e-001,
4935 -7.0862918e-002,
4936 -1.1433268e-001,
4937 3.4863935e-002,
4938 1.0709581e-002,
4939 -5.5513033e-002,
4940 -1.5617145e-002,
4941 1.9399041e-003,
4942 6.6680970e-002,
4943 -3.5719944e-002,
4944 -5.5335504e-002,
4945 -9.3481167e-002,
4946 2.3589372e-002,
4947 1.2307760e-002,
4948 -4.1853305e-002,
4949 3.2086368e-002,
4950 1.3207910e-002,
4951 -1.2902915e-002,
4952 4.0576229e-002,
4953 -3.1174299e-002,
4954 -4.7359539e-002,
4955 3.2639664e-002,
4956 6.8807350e-002,
4957 3.0052612e-002,
4958 -1.6360841e-002,
4959 7.3692525e-002,
4960 2.3214010e-002,
4961 -1.9279486e-003,
4962 -2.9304762e-002,
4963 1.4092775e-002,
4964 -3.8475139e-002,
4965 4.0205235e-002,
4966 3.5637448e-002,
4967 3.1815236e-002,
4968 5.4193437e-002,
4969 2.7101101e-002,
4970 -7.8492340e-002,
4971 -1.3053183e-002,
4972 9.8943970e-002,
4973 3.2605663e-002,
4974 -5.3326325e-002,
4975 4.7045271e-002,
4976 1.9171127e-002,
4977 -7.0639869e-002,
4978 -2.6942346e-002,
4979 2.1897131e-002,
4980 4.4342108e-002,
4981 2.5419609e-002,
4982 6.5525042e-002,
4983 -6.2924979e-002,
4984 4.2919074e-002,
4985 5.7909339e-002,
4986 -2.0016289e-002,
4987 -7.1844831e-004,
4988 3.3287795e-003,
4989 5.2391582e-002,
4990 5.1351648e-002,
4991 6.9345017e-002,
4992 1.6715079e-002,
4993 1.0245380e-001,
4994 6.5560454e-003,
4995 -4.2978289e-002,
4996 5.1857486e-002,
4997 1.6375558e-002,
4998 -1.1231560e-001,
4999 1.8452057e-002,
5000 2.7196151e-002,
5001 -4.7948818e-002,
5002 3.8838999e-002,
5003 -8.1296721e-002,
5004 -4.4213439e-002,
5005 3.3789367e-002,
5006 -8.9903386e-002,
5007 -4.8309819e-002,
5008 3.0350368e-002,
5009 9.3462798e-003,
5010 -4.3576313e-002,
5011 5.0364033e-002,
5012 -3.3705706e-002,
5013 6.9992170e-002,
5014 9.4421577e-002,
5015 -3.7859282e-002,
5016 -2.4699603e-002,
5017 5.0385013e-002,
5018 -5.4216273e-002,
5019 6.9692784e-002,
5020 1.0150382e-001,
5021 1.7548633e-002,
5022 9.8962282e-003,
5023 -5.6862743e-002,
5024 4.1445815e-002,
5025 1.9635439e-002,
5026 -3.1828877e-002,
5027 -7.5389343e-003,
5028 -2.2662898e-002,
5029 -9.3225720e-003,
5030 3.3794402e-002,
5031 -1.5022139e-002,
5032 -8.3952470e-002,
5033 -4.4638734e-003,
5034 5.0977217e-002,
5035 -5.6868826e-002,
5036 8.2257315e-002,
5037 -3.3527792e-002,
5038 -3.8753182e-002,
5039 -8.9806282e-002,
5040 6.8640832e-004,
5041 7.2265978e-002,
5042 -1.2264922e-001,
5043 1.0964559e-002,
5044 -6.3412284e-002,
5045 1.2106129e-001,
5046 -8.5320894e-002,
5047 -3.7961427e-002,
5048 -4.1350954e-002,
5049 -6.7090729e-002,
5050 4.9718886e-002,
5051 -3.3874055e-002,
5052 -7.1699033e-002,
5053 2.5203129e-002,
5054 2.0350140e-002,
5055 6.4638571e-002,
5056 -7.2804864e-002,
5057 2.3308871e-002,
5058 1.5264191e-003,
5059 -1.1191223e-001,
5060 -6.0619938e-002,
5061 -2.2397074e-003,
5062 6.8646240e-002,
5063 -9.5147638e-003,
5064 -8.9258460e-003,
5065 -2.2587656e-002,
5066 -8.8042374e-003,
5067 2.7917130e-002,
5068 3.0703476e-002,
5069 4.0753823e-002,
5070 -1.9174676e-002,
5071 7.6285732e-002,
5072 5.5310628e-003,
5073 6.7972330e-002,
5074 1.6915582e-002,
5075 -3.3407461e-002,
5076 2.3263797e-002,
5077 3.1563985e-002,
5078 6.0315051e-004,
5079 -3.1286618e-002,
5080 -1.1639905e-002,
5081 -1.2659763e-002,
5082 1.2883340e-003,
5083 -5.0171053e-002,
5084 -4.9900923e-003,
5085 -1.0228083e-001,
5086 -4.8479815e-002,
5087 -2.9928321e-002,
5088 -5.5916163e-002,
5089 4.7735428e-002,
5090 -1.3294429e-003,
5091 -7.5136122e-003,
5092 5.4331339e-002,
5093 -4.2475157e-002,
5094 -3.2342585e-002,
5095 -2.1096262e-002,
5096 4.8946925e-002,
5097 -7.7232620e-002,
5098 4.6424245e-002,
5099 -7.1029625e-002,
5100 -8.3080699e-003,
5101 -1.8848230e-002,
5102 -3.3058342e-002,
5103 2.4301547e-002,
5104 -1.9950837e-002,
5105 -2.6746721e-002,
5106 -3.1244062e-002,
5107 4.9214132e-002,
5108 -4.3837753e-002,
5109 -2.6533780e-002,
5110 -3.2174063e-002,
5111 3.1234554e-002,
5112 1.8396020e-002,
5113 4.2139477e-003,
5114 -6.3624347e-002,
5115 3.8068496e-002,
5116 -7.5273414e-002,
5117 -5.4282683e-002,
5118 1.0378638e-001,
5119 -5.4062955e-002,
5120 1.0025793e-002,
5121 -6.6450371e-003,
5122 8.2632045e-002,
5123 -1.1994389e-001,
5124 3.1022007e-002,
5125 -3.1118158e-002,
5126 5.0953443e-002,
5127 -5.1605376e-002,
5128 -4.8568100e-002,
5129 -7.4390375e-003,
5130 -4.7877758e-002,
5131 -9.4953155e-003,
5132 -2.6931667e-003,
5133 2.3165347e-002,
5134 5.9754385e-003,
5135 2.5900617e-002,
5136 -1.5042605e-002,
5137 -1.4480424e-002,
5138 4.2074657e-002,
5139 8.9476498e-002,
5140 4.5100917e-002,
5141 -5.1593045e-002,
5142 6.0834274e-002,
5143 4.0989664e-002,
5144 -1.7405350e-002,
5145 5.9998834e-002,
5146 1.2416742e-002,
5147 1.8605073e-002,
5148 1.0892550e-001,
5149 -3.2491824e-002,
5150 -3.1135526e-002,
5151 -2.9815887e-002,
5152 2.0205791e-002,
5153 1.6566794e-002,
5154 7.0071566e-002,
5155 -4.9569656e-002,
5156 3.9921784e-002,
5157 -2.8730117e-002,
5158 -1.7587977e-002,
5159 7.1500463e-002,
5160 3.6872018e-002,
5161 -3.4586232e-002,
5162 -1.6970720e-002,
5163 3.4644172e-002,
5164 -2.0901296e-002,
5165 4.2141589e-002,
5166 -7.6319420e-002,
5167 4.5998962e-002,
5168 -7.3399778e-002,
5169 -8.1916522e-002,
5170 3.8464961e-002,
5171 -1.1521599e-002,
5172 7.2694972e-002,
5173 -3.9337982e-002,
5174 5.9084598e-002,
5175 -3.4257913e-002,
5176 -8.6242832e-002,
5177 -2.5477654e-002,
5178 1.5161827e-002,
5179 4.3686125e-003,
5180 -1.1656981e-002,
5181 -1.5563664e-002,
5182 6.2510087e-002,
5183 -1.0836642e-002,
5184 1.2432558e-001,
5185 -2.2959202e-002,
5186 1.3783634e-003,
5187 3.3269441e-002,
5188 3.8750648e-002,
5189 -1.3656516e-002,
5190 5.9833997e-002,
5191 1.4796841e-002,
5192 -2.2627766e-003,
5193 4.9145114e-002,
5194 -1.1354640e-001,
5195 1.3391314e-002,
5196 -1.3806188e-002,
5197 2.7218571e-002,
5198 -3.9102606e-002,
5199 1.0801438e-002,
5200 -3.4971279e-002,
5201 -2.3190242e-002,
5202 -1.6194699e-002,
5203 -1.9332419e-002,
5204 -2.7390066e-003,
5205 1.8022691e-002,
5206 -1.5832667e-002,
5207 -9.2546225e-003,
5208 -6.4699491e-002,
5209 4.7590650e-002,
5210 5.4590011e-002,
5211 -2.0868480e-002,
5212 4.8372708e-003,
5213 3.5635613e-002,
5214 4.9026328e-002,
5215 -2.8886176e-002,
5216 2.4904926e-002,
5217 4.6825265e-002,
5218 -4.1467334e-003,
5219 -7.4816934e-002,
5220 2.4155196e-002,
5221 -1.2145775e-002,
5222 -4.8433817e-002,
5223 -5.1333974e-002,
5224 -7.6611960e-004,
5225 -2.0288664e-003,
5226 4.4132138e-002,
5227 1.3884023e-002,
5228 3.3438764e-002,
5229 -1.7045598e-002,
5230 -1.3981286e-003,
5231 6.0450703e-002,
5232 1.6026951e-002,
5233 -1.0038212e-002,
5234 -5.9082814e-002,
5235 -6.8065244e-003,
5236 -2.0735019e-002,
5237 6.4134665e-002,
5238 8.5071176e-003,
5239 -2.2373060e-002,
5240 4.3619700e-002,
5241 1.5963047e-002,
5242 -3.0249871e-002,
5243 -8.3796187e-002,
5244 -3.4276448e-002,
5245 5.3600630e-002,
5246 -4.6111635e-002,
5247 3.2125595e-002,
5248 5.8851999e-002,
5249 -7.8040384e-002,
5250 5.2267851e-002,
5251 3.4435223e-002,
5252 2.1556971e-002,
5253 -1.7163880e-002,
5254 -5.0843277e-002,
5255 -3.2488185e-002,
5256 -1.7547962e-002,
5257 3.1629302e-003,
5258 1.1087340e-001,
5259 5.8821833e-002,
5260 2.7600291e-003,
5261 -1.8466769e-002,
5262 3.1019364e-002,
5263 6.9714994e-002,
5264 2.6197162e-002,
5265 -2.5002333e-002,
5266 2.1238793e-003,
5267 6.3553430e-002,
5268 -3.4198265e-002,
5269 4.8709571e-002,
5270 -7.2299086e-002,
5271 -4.3035088e-002,
5272 3.5760525e-002,
5273 5.3143565e-002,
5274 2.8080467e-002,
5275 7.4687831e-004,
5276 3.3589299e-002,
5277 -2.7857822e-002,
5278 9.3293970e-002,
5279 -3.1352513e-003,
5280 -1.1227005e-003,
5281 -4.5092687e-002,
5282 -2.5306886e-002,
5283 -1.0822730e-001,
5284 -6.5870362e-002,
5285 5.0646576e-003,
5286 -5.7436235e-002,
5287 3.2011690e-002,
5288 -3.5040739e-003,
5289 -3.9957599e-002,
5290 1.6341870e-002,
5291 -7.6498865e-003,
5292 -2.5256813e-002,
5293 2.8585914e-002,
5294 -6.4304885e-002,
5295 -7.0698223e-002,
5296 -9.2642094e-002,
5297 -5.6328267e-002,
5298 -8.0773935e-002,
5299 -6.5074477e-002,
5300 2.0294178e-003,
5301 -2.4072922e-002,
5302 4.2458044e-002,
5303 4.7875614e-003,
5304 -4.2143264e-002,
5305 -2.8324995e-002,
5306 -2.9328658e-002,
5307 -9.2678479e-002,
5308 4.5617708e-002,
5309 1.2685434e-002,
5310 -5.4340728e-002,
5311 4.2087780e-002,
5312 4.0016732e-002,
5313 -1.2299481e-001,
5314 1.0379559e-001,
5315 5.7020403e-002,
5316 -3.9544599e-002,
5317 -1.8766513e-002,
5318 3.2158071e-002,
5319 7.3924530e-002,
5320 -4.6618108e-003,
5321 -5.5299328e-002,
5322 4.4245720e-002,
5323 3.7174478e-003,
5324 3.4306804e-003,
5325 4.2213951e-002,
5326 -9.1086002e-002,
5327 1.5797797e-003,
5328 -1.0094297e-001,
5329 -3.1042592e-002,
5330 1.6312788e-002,
5331 -5.7643992e-002,
5332 8.5044833e-003,
5333 -5.8166289e-002,
5334 1.9822525e-002,
5335 -1.4404965e-001,
5336 -5.5582362e-002,
5337 -4.5001443e-003,
5338 -8.6256453e-003,
5339 -1.0195382e-002,
5340 -3.5860515e-002,
5341 -6.9432334e-002,
5342 -3.8266022e-002,
5343 -4.0918161e-002,
5344 -1.1863163e-002,
5345 5.0949718e-002,
5346 -8.0206291e-002,
5347 -2.6240511e-002,
5348 7.6676678e-002,
5349 -6.5416559e-002,
5350 -1.4318918e-002,
5351 -4.3958025e-002,
5352 -2.1978148e-002,
5353 -6.4422744e-002,
5354 -2.2733013e-002,
5355 1.2900773e-002,
5356 -1.7819685e-002,
5357 -4.7785428e-003,
5358 3.4686226e-002,
5359 6.4004707e-002,
5360 -5.3322786e-002,
5361 -1.8493916e-002,
5362 4.9290003e-002,
5363 -4.5065517e-002,
5364 -2.9327742e-002,
5365 2.3212884e-002,
5366 -4.8985889e-002,
5367 2.9604806e-003,
5368 -7.0253020e-003,
5369 -9.2397443e-002,
5370 -7.6453564e-002,
5371 -3.4155955e-002,
5372 -1.0082514e-001,
5373 -8.0072913e-002,
5374 5.9487693e-002,
5375 -3.2053752e-002,
5376 -3.4654709e-002,
5377 -4.2857910e-002,
5378 4.3434899e-002,
5379 -6.1610488e-002,
5380 2.3564532e-002,
5381 5.0395882e-002,
5382 -1.0869004e-002,
5383 2.7674042e-002,
5384 4.1961384e-004,
5385 1.1474642e-001,
5386 1.5501309e-002,
5387 5.3729017e-002,
5388 8.2294950e-002,
5389 3.6090309e-002,
5390 3.2405617e-002,
5391 7.8649811e-002,
5392 1.3050292e-002,
5393 -1.6718241e-002,
5394 -4.2514925e-002,
5395 2.0638931e-003,
5396 -1.0261822e-001,
5397 5.5517573e-002,
5398 -2.6256624e-003,
5399 7.3917084e-002,
5400 -3.2038338e-002,
5401 5.9286807e-003,
5402 -4.9553265e-002,
5403 4.0402131e-003,
5404 1.9006069e-002,
5405 1.5037719e-002,
5406 -3.8431930e-002,
5407 -3.4089576e-003,
5408 -2.8898708e-003,
5409 -5.1916447e-002,
5410 -9.3843168e-002,
5411 2.9937678e-002,
5412 -3.9290957e-002,
5413 4.4290160e-002,
5414 -4.2250820e-002,
5415 -1.6616660e-002,
5416 -1.0653179e-002,
5417 -3.4916960e-002,
5418 -3.1852948e-002,
5419 1.8960722e-002,
5420 6.0590194e-002,
5421 1.7919981e-002,
5422 -2.1735260e-002,
5423 2.5431032e-003,
5424 -2.3276711e-003,
5425 4.7679757e-003,
5426 2.6771182e-002,
5427 -8.0137596e-002,
5428 -4.9700338e-002,
5429 2.4445536e-002,
5430 -7.2537218e-002,
5431 -1.8968099e-002,
5432 6.6550477e-002,
5433 6.7579085e-002,
5434 -3.1351180e-002,
5435 1.6129275e-002,
5436 3.6101242e-002,
5437 1.1199196e-002,
5438 7.9145428e-003,
5439 4.0067468e-002,
5440 6.0585461e-003,
5441 -7.4588015e-003,
5442 2.1235782e-002,
5443 6.3041751e-003,
5444 -1.1634076e-003,
5445 2.2258425e-002,
5446 -3.4248029e-002,
5447 -4.5811428e-002,
5448 1.0578831e-002,
5449 -5.5482586e-002,
5450 -6.8507992e-002,
5451 -7.7083934e-002,
5452 -5.3913115e-002,
5453 5.9790071e-002,
5454 -2.0841051e-002,
5455 2.3080531e-002,
5456 1.1187349e-001,
5457 -7.1392621e-002,
5458 2.9668837e-003,
5459 -2.9860507e-002,
5460 4.6683202e-002,
5461 8.5830739e-002,
5462 -2.0897455e-002,
5463 3.2863177e-002,
5464 2.2323987e-002,
5465 4.8358711e-002,
5466 8.7562303e-003,
5467 1.4793712e-002,
5468 -2.5985375e-002,
5469 -4.6720770e-002,
5470 -5.9782514e-002,
5471 -4.2989314e-002,
5472 7.8223798e-002,
5473 1.1501209e-001,
5474 1.2024343e-001,
5475 -5.6786240e-002,
5476 -4.8421534e-002,
5477 -2.5415443e-002,
5478 2.4664879e-002,
5479 1.7783775e-002,
5480 2.0466227e-002,
5481 7.8206669e-002,
5482 -8.2391143e-002,
5483 -1.3995146e-002,
5484 -2.0960454e-002,
5485 -5.6618569e-002,
5486 -2.6705178e-002,
5487 -8.1531358e-002,
5488 6.4664818e-003,
5489 5.6946318e-002,
5490 5.0003662e-002,
5491 3.5673980e-002,
5492 8.0875426e-002,
5493 -4.4495078e-002,
5494 -2.6194380e-002,
5495 4.5188183e-002,
5496 -4.2455744e-002,
5497 5.7249340e-002,
5498 -4.6127242e-002,
5499 -5.4839710e-002,
5500 -5.0448334e-002,
5501 -2.2395030e-004,
5502 -6.2981968e-002,
5503 3.6554485e-002,
5504 4.5243127e-003,
5505 6.8154599e-003,
5506 1.6305659e-001,
5507 3.9595164e-003,
5508 -1.0792651e-002,
5509 -2.8054860e-002,
5510 -9.9706967e-002,
5511 2.3929942e-002,
5512 -3.5658959e-004,
5513 6.6546468e-002,
5514 7.6294884e-002,
5515 -4.0440534e-002,
5516 -8.1371512e-002,
5517 -7.7127876e-002,
5518 3.4857333e-002,
5519 4.3231191e-002,
5520 2.2144645e-002,
5521 -3.8698213e-002,
5522 -5.4129054e-002,
5523 -3.2626325e-002,
5524 -7.0222190e-002,
5525 -5.1754787e-002,
5526 -9.5744838e-002,
5527 -1.7610262e-003,
5528 8.7360648e-003,
5529 -4.6748263e-002,
5530 -4.4850953e-002,
5531 8.2298815e-002,
5532 1.0185814e-002,
5533 -3.0866560e-004,
5534 1.6675645e-002,
5535 -4.2935404e-002,
5536 -3.1656641e-002,
5537 -5.6516863e-002,
5538 -4.7656267e-004,
5539 1.0889961e-001,
5540 1.2029252e-002,
5541 -1.3472583e-002,
5542 3.6157205e-002,
5543 4.4803936e-002,
5544 1.5275167e-002,
5545 -4.7686528e-002,
5546 6.0330901e-002,
5547 1.3728328e-002,
5548 4.8689836e-002,
5549 -3.5294359e-002,
5550 -7.4547708e-002,
5551 3.0394600e-002,
5552 8.6384237e-002,
5553 -4.9979038e-002,
5554 1.3943821e-002,
5555 -8.2317359e-002,
5556 2.6078427e-002,
5557 -4.8139628e-002,
5558 -5.8720671e-002,
5559 5.3289578e-003,
5560 -2.4543964e-002,
5561 -3.1049552e-002,
5562 -6.8795054e-002,
5563 2.6130466e-002,
5564 6.4881211e-003,
5565 -1.7466698e-002,
5566 6.9418212e-002,
5567 9.6543814e-002,
5568 1.6716383e-002,
5569 1.0116932e-001,
5570 3.1515754e-002,
5571 -1.5792490e-001,
5572 -3.1915346e-002,
5573 -4.3203259e-002,
5574 -1.3039328e-002,
5575 1.0861618e-002,
5576 2.0098174e-002,
5577 -5.8931575e-002,
5578 4.5019833e-002,
5579 -4.4827929e-002,
5580 -8.5719969e-002,
5581 4.7105627e-002,
5582 8.1454794e-002,
5583 1.5516734e-002,
5584 -5.0548980e-002,
5585 5.9127415e-003,
5586 -7.5578193e-002,
5587 1.1628813e-001,
5588 4.7500758e-002,
5589 4.9223640e-002,
5590 2.2248040e-002,
5591 -1.7063173e-002,
5592 6.7174653e-002,
5593 -8.8027078e-003,
5594 -7.9122977e-002,
5595 -2.7534155e-002,
5596 1.8033777e-002,
5597 -6.3064595e-002,
5598 -3.2992531e-002,
5599 -1.3414397e-002,
5600 -3.7650237e-002,
5601 -5.4990281e-003,
5602 4.9549050e-002,
5603 -7.8256965e-002,
5604 -4.6347502e-002,
5605 -3.7844657e-002,
5606 -4.6727423e-002,
5607 5.1371291e-002,
5608 -3.1964828e-002,
5609 -1.5232444e-003,
5610 -6.8143489e-002,
5611 -5.5095855e-002,
5612 -1.0895044e-002,
5613 -2.5604041e-003,
5614 2.7027105e-002,
5615 -7.6982878e-003,
5616 -9.5337685e-002,
5617 -1.8635429e-002,
5618 -1.0751357e-001,
5619 -5.6070283e-002,
5620 1.4123461e-002,
5621 -1.8192970e-002,
5622 4.4540436e-002,
5623 1.3600658e-002,
5624 3.2261098e-002,
5625 4.4861229e-002,
5626 -1.5863787e-002,
5627 -1.0092780e-002,
5628 -3.9516555e-003,
5629 3.8360973e-002,
5630 6.1804829e-002,
5631 1.0870303e-001,
5632 4.7383438e-002,
5633 -5.0590863e-002,
5634 -5.2113776e-002,
5635 5.2393207e-002,
5636 1.2177198e-002,
5637 6.2526425e-002,
5638 8.3174224e-003,
5639 -2.4071062e-002,
5640 2.8581013e-002,
5641 -6.0028375e-003,
5642 1.5238535e-002,
5643 5.2025149e-003,
5644 -3.6385591e-002,
5645 -9.3463539e-003,
5646 -9.7549044e-003,
5647 4.1434624e-002,
5648 -3.5638211e-002,
5649 6.1524697e-002,
5650 1.2879217e-002,
5651 -1.1074718e-002,
5652 7.5826917e-003,
5653 -4.3450751e-002,
5654 -3.4027473e-002,
5655 6.3700920e-002,
5656 -5.2272643e-002,
5657 -2.8750180e-002,
5658 4.0041018e-002,
5659 -8.1966458e-002,
5660 -1.0461089e-002,
5661 2.5452300e-002,
5662 6.7107297e-002,
5663 -3.3918191e-002,
5664 -1.0212989e-001,
5665 -6.3527291e-002,
5666 3.1678548e-002,
5667 -6.5778118e-002,
5668 -1.6823229e-002,
5669 2.2988117e-003,
5670 -4.8242461e-002,
5671 -1.4582693e-002,
5672 -4.9060246e-002,
5673 -3.4256626e-003,
5674 4.1172518e-002,
5675 3.2772250e-002,
5676 2.4890066e-002,
5677 3.4522929e-003,
5678 4.4704585e-002,
5679 -5.9967401e-002,
5680 1.4541680e-002,
5681 -7.9411114e-002,
5682 -6.5131143e-002,
5683 -4.2051810e-002,
5684 4.2103006e-002,
5685 -9.8683984e-004,
5686 -5.0962061e-003,
5687 -2.2606406e-002,
5688 -1.2325980e-001,
5689 9.5086419e-002,
5690 -1.9106034e-002,
5691 -5.1992218e-002,
5692 -6.7436377e-002,
5693 -1.5798067e-002,
5694 -7.5885603e-002,
5695 1.7614604e-002,
5696 3.0602185e-002,
5697 -4.5707990e-002,
5698 5.0279499e-002,
5699 1.3599448e-002,
5700 -8.4652879e-002,
5701 1.4275404e-002,
5702 5.3761838e-002,
5703 1.3130364e-002,
5704 -5.7785349e-003,
5705 1.0995249e-001,
5706 3.6117865e-002,
5707 2.2136081e-002,
5708 1.1263325e-002,
5709 -4.9338919e-002,
5710 4.2415991e-002,
5711 -6.3570185e-002,
5712 5.1525003e-002,
5713 8.9408937e-002,
5714 -4.3531507e-002,
5715 2.5382423e-002,
5716 5.7394710e-002,
5717 1.1827633e-001,
5718 -1.4335949e-002,
5719 2.4596850e-002,
5720 -1.8394004e-002,
5721 1.3479964e-002,
5722 -5.5450915e-002,
5723 -1.3887857e-002,
5724 3.7399926e-002,
5725 4.2692709e-002,
5726 -9.1345703e-002,
5727 -6.4179097e-002,
5728 5.1528849e-002,
5729 1.1923834e-001,
5730 8.0392828e-003,
5731 -7.4190647e-003,
5732 1.1158220e-002,
5733 2.3106872e-002,
5734 2.5289633e-002,
5735 -7.8109586e-002,
5736 4.4033891e-002,
5737 2.9868351e-002,
5738 2.5709704e-002,
5739 6.5446252e-003,
5740 1.7279125e-002,
5741 8.8849380e-002,
5742 -4.2399471e-002,
5743 3.2297167e-002,
5744 -3.3758385e-002,
5745 5.3666150e-002,
5746 3.7628322e-002,
5747 -1.3602948e-002,
5748 8.3115154e-002,
5749 -4.4130785e-002,
5750 1.5545953e-002,
5751 -5.7188645e-002,
5752 3.3708440e-002,
5753 7.9527486e-003,
5754 7.2838427e-002,
5755 -8.7159852e-004,
5756 9.8852335e-002,
5757 4.3261724e-002,
5758 -2.2410237e-002,
5759 -1.9969511e-002,
5760 1.3049591e-002,
5761 1.3520410e-001
5762};
5763
5764float audiobeam_mic_locations[15][3] = {
5765 {1.5, 2.79, 0},
5766 {1.5, 2.82, 0},
5767 {1.5, 2.85, 0},
5768 {1.5, 2.88, 0},
5769 {1.5, 2.91, 0},
5770 {1.5, 2.94, 0},
5771 {1.5, 2.97, 0},
5772 {1.5, 3, 0},
5773 {1.5, 3.03, 0},
5774 {1.5, 3.06, 0},
5775 {1.5, 3.09, 0},
5776 {1.5, 3.12, 0},
5777 {1.5, 3.15, 0},
5778 {1.5, 3.18, 0},
5779 {1.5, 3.21, 0}
5780};
5781
5782float audiobeam_source_location[3] = {1.1677, 2.1677, 1};
5783
5784float audiobeam_origin_location[3] = {1.5, 3, 0};
diff --git a/all_pairs/source/audiobeam/audiobeamlibm.c b/all_pairs/source/audiobeam/audiobeamlibm.c
new file mode 100644
index 0000000..259f40b
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeamlibm.c
@@ -0,0 +1,423 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeamlibm.c
7
8 Author: Ian Lance Taylor and J.T. Conklin
9
10 Function: IEEE754 software library routines.
11
12 Source: Sun Microsystems and Cygnus
13
14 Original name: Unknown
15
16 Changes: No major functional changes.
17
18 License: See the terms below.
19
20*/
21
22/*
23 ====================================================
24 Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
25
26 Developed at SunPro, a Sun Microsystems, Inc. business.
27 Permission to use, copy, modify, and distribute this
28 software is freely granted, provided that this notice
29 is preserved.
30 ====================================================
31*/
32
33
34#include "audiobeamlibm.h"
35#include "audiobeamlibmath.h"
36
37
38static const int audiobeam_npio2_hw[] = {
39 0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00,
40 0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00,
41 0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100,
42 0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00,
43 0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00,
44 0x4242c700, 0x42490f00
45};
46
47static const float
48audiobeam_invpio2 = 6.3661980629e-01f, /* 0x3f22f984 */
49audiobeam_pio2_1 = 1.5707855225e+00f, /* 0x3fc90f80 */
50audiobeam_pio2_1t = 1.0804334124e-05f, /* 0x37354443 */
51audiobeam_pio2_2 = 1.0804273188e-05f, /* 0x37354400 */
52audiobeam_pio2_2t = 6.0770999344e-11f, /* 0x2e85a308 */
53audiobeam_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */
54audiobeam_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */
55
56static const float
57audiobeam_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */
58audiobeam_C2 = -1.3888889225e-03f, /* 0xbab60b61 */
59audiobeam_C3 = 2.4801587642e-05f, /* 0x37d00d01 */
60audiobeam_C4 = -2.7557314297e-07f, /* 0xb493f27c */
61audiobeam_C5 = 2.0875723372e-09f, /* 0x310f74f6 */
62audiobeam_C6 = -1.1359647598e-11f; /* 0xad47d74e */
63
64static const float
65audiobeam_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */
66audiobeam_S2 = 8.3333337680e-03f, /* 0x3c088889 */
67audiobeam_S3 = -1.9841270114e-04f, /* 0xb9500d01 */
68audiobeam_S4 = 2.7557314297e-06f, /* 0x3638ef1b */
69audiobeam_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */
70audiobeam_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */
71
72static const float
73audiobeam_two25 = 3.355443200e+07f, /* 0x4c000000 */
74audiobeam_twom25 = 2.9802322388e-08f; /* 0x33000000 */
75
76
77int audiobeam___ieee754_rem_pio2f( float x, float *y )
78{
79 float z, w, t, r, fn;
80 int i, j, n = 0, ix, hx;
81
82 AUDIOBEAM_GET_FLOAT_WORD( hx, x );
83 ix = hx & 0x7fffffff;
84 if ( ix <= 0x3f490fd8 ) {
85 y[0] = x;
86 y[1] = 0;
87 return 0;
88 }
89 if ( ix < 0x4016cbe4 ) {
90 if ( hx > 0 ) {
91 z = x - audiobeam_pio2_1;
92 if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) {
93 y[0] = z - audiobeam_pio2_1t;
94 y[1] = ( z - y[0] ) - audiobeam_pio2_1t;
95 } else {
96 z -= audiobeam_pio2_2;
97 y[0] = z - audiobeam_pio2_2t;
98 y[1] = ( z - y[0] ) - audiobeam_pio2_2t;
99 }
100 return 1;
101 } else {
102 z = x + audiobeam_pio2_1;
103 if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) {
104 y[0] = z + audiobeam_pio2_1t;
105 y[1] = ( z - y[0] ) + audiobeam_pio2_1t;
106 } else {
107 z += audiobeam_pio2_2;
108 y[0] = z + audiobeam_pio2_2t;
109 y[1] = ( z - y[0] ) + audiobeam_pio2_2t;
110 }
111 return -1;
112 }
113 }
114 if ( ix <= 0x43490f80 ) {
115 t = audiobeam_fabsf( x );
116 n = ( int ) ( t * audiobeam_invpio2 + audiobeam_half );
117 fn = ( float )n;
118 r = t - fn * audiobeam_pio2_1;
119 w = fn * audiobeam_pio2_1t;
120 if ( n < 32 && ( int )( ix & 0xffffff00 ) != audiobeam_npio2_hw[n - 1] )
121 y[0] = r - w;
122 else {
123 unsigned int high;
124 j = ix >> 23;
125 y[0] = r - w;
126 AUDIOBEAM_GET_FLOAT_WORD( high, y[0] );
127 i = j - ( ( high >> 23 ) & 0xff );
128 if ( i > 8 ) {
129 t = r;
130 w = fn * audiobeam_pio2_2;
131 r = t - w;
132 w = fn * audiobeam_pio2_2t - ( ( t - r ) - w );
133 y[0] = r - w;
134 AUDIOBEAM_GET_FLOAT_WORD( high, y[0] );
135 i = j - ( ( high >> 23 ) & 0xff );
136 if ( i > 25 ) {
137 t = r;
138 w = fn * audiobeam_pio2_3;
139 r = t - w;
140 w = fn * audiobeam_pio2_3t - ( ( t - r ) - w );
141 y[0] = r - w;
142 }
143 }
144 }
145 y[1] = ( r - y[0] ) - w;
146 if ( hx < 0 ) {
147 y[0] = -y[0];
148 y[1] = -y[1];
149 return -n;
150 } else return n;
151 }
152 if ( ix >= 0x7f800000 ) {
153 y[0] = y[1] = x - x;
154 return 0;
155 }
156
157 return n;
158}
159
160
161float audiobeam___kernel_cosf( float x, float y )
162{
163 float a, hz, z, r, qx;
164 int ix;
165 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
166 ix &= 0x7fffffff;
167 if ( ix < 0x32000000 ) {
168 if ( ( ( int )x ) == 0 ) return audiobeam_one;
169 }
170 z = x * x;
171 r = z * ( audiobeam_C1 + z * ( audiobeam_C2 + z * ( audiobeam_C3 + z *
172 ( audiobeam_C4 + z *
173 ( audiobeam_C5 + z * audiobeam_C6 ) ) ) ) );
174 if ( ix < 0x3e99999a )
175 return audiobeam_one - ( ( float )0.5f * z - ( z * r - x * y ) );
176 else {
177 if ( ix > 0x3f480000 )
178 qx = ( float )0.28125f;
179 else
180 AUDIOBEAM_SET_FLOAT_WORD( qx, ix - 0x01000000 );
181 hz = ( float )0.5f * z - qx;
182 a = audiobeam_one - qx;
183 return a - ( hz - ( z * r - x * y ) );
184 }
185}
186
187
188float audiobeam___kernel_sinf( float x, float y, int iy )
189{
190 float z, r, v;
191 int ix;
192 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
193 ix &= 0x7fffffff;
194 if ( ix < 0x32000000 ) {
195 if ( ( int )x == 0 ) return x;
196 }
197 z = x * x;
198 v = z * x;
199 r = audiobeam_S2 + z * ( audiobeam_S3 + z * ( audiobeam_S4 + z * ( audiobeam_S5 + z * audiobeam_S6 ) ) );
200 if ( iy == 0 ) return x + v * ( audiobeam_S1 + z * r );
201 else return x - ( ( z * ( audiobeam_half * y - v * r ) - y ) - v * audiobeam_S1 );
202}
203
204
205float audiobeam___copysignf( float x, float y )
206{
207 unsigned int ix, iy;
208 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
209 AUDIOBEAM_GET_FLOAT_WORD( iy, y );
210 AUDIOBEAM_SET_FLOAT_WORD( x, ( ix & 0x7fffffff ) | ( iy & 0x80000000 ) );
211 return x;
212}
213
214
215float audiobeam___cosf( float x )
216{
217 float y[2], z = 0.0f;
218 int n, ix;
219
220 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
221
222 ix &= 0x7fffffff;
223 if ( ix <= 0x3f490fd8 ) return audiobeam___kernel_cosf( x, z );
224
225 else
226 if ( ix >= 0x7f800000 ) return x - x;
227
228 else {
229 y[0] = 0.0;
230 y[1] = 0.0;
231 n = audiobeam___ieee754_rem_pio2f( x, y );
232 switch ( n & 3 ) {
233 case 0:
234 return audiobeam___kernel_cosf( y[0], y[1] );
235 case 1:
236 return -audiobeam___kernel_sinf( y[0], y[1], 1 );
237 case 2:
238 return -audiobeam___kernel_cosf( y[0], y[1] );
239 default:
240 return audiobeam___kernel_sinf( y[0], y[1], 1 );
241 }
242 }
243}
244
245
246float audiobeam___fabsf( float x )
247{
248 unsigned int ix;
249 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
250 AUDIOBEAM_SET_FLOAT_WORD( x, ix & 0x7fffffff );
251 return x;
252}
253
254
255float audiobeam___floorf( float x )
256{
257 int i0, j0;
258 unsigned int i;
259 AUDIOBEAM_GET_FLOAT_WORD( i0, x );
260 j0 = ( ( i0 >> 23 ) & 0xff ) - 0x7f;
261 if ( j0 < 23 ) {
262 if ( j0 < 0 ) {
263 if ( audiobeam_huge + x > ( float )0.0f ) {
264 if ( i0 >= 0 )
265 i0 = 0;
266 else
267 if ( ( i0 & 0x7fffffff ) != 0 )
268 i0 = 0xbf800000;
269 }
270 } else {
271 i = ( 0x007fffff ) >> j0;
272 if ( ( i0 & i ) == 0 ) return x;
273 if ( audiobeam_huge + x > ( float )0.0f ) {
274 if ( i0 < 0 ) i0 += ( 0x00800000 ) >> j0;
275 i0 &= ( ~i );
276 }
277 }
278 } else {
279 if ( j0 == 0x80 ) return x + x;
280 else return x;
281 }
282 AUDIOBEAM_SET_FLOAT_WORD( x, i0 );
283 return x;
284}
285
286
287int audiobeam___isinff ( float x )
288{
289 int ix, t;
290 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
291 t = ix & 0x7fffffff;
292 t ^= 0x7f800000;
293 t |= -t;
294 return ~( t >> 31 ) & ( ix >> 30 );
295}
296
297
298float audiobeam___scalbnf ( float x, int n )
299{
300 int k, ix;
301 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
302 k = ( ix & 0x7f800000 ) >> 23;
303 if ( k == 0 ) {
304 if ( ( ix & 0x7fffffff ) == 0 ) return x;
305 x *= audiobeam_two25;
306 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
307 k = ( ( ix & 0x7f800000 ) >> 23 ) - 25;
308 }
309 if ( k == 0xff ) return x + x;
310 k = k + n;
311 if ( n > 50000 || k > 0xfe )
312 return audiobeam_huge * audiobeam___copysignf( audiobeam_huge,
313 x );
314 if ( n < -50000 )
315 return audiobeam_tiny * audiobeam___copysignf( audiobeam_tiny,
316 x );
317 if ( k > 0 ) {
318 AUDIOBEAM_SET_FLOAT_WORD( x, ( ix & 0x807fffff ) | ( k << 23 ) );
319 return x;
320 }
321 if ( k <= -25 )
322 return audiobeam_tiny * audiobeam___copysignf( audiobeam_tiny,
323 x );
324 k += 25;
325 AUDIOBEAM_SET_FLOAT_WORD( x, ( ix & 0x807fffff ) | ( k << 23 ) );
326 return x * audiobeam_twom25;
327}
328
329
330float audiobeam___ceilf( float x )
331{
332 int i0, j0;
333 unsigned int i;
334
335 AUDIOBEAM_GET_FLOAT_WORD( i0, x );
336 j0 = ( ( i0 >> 23 ) & 0xff ) - 0x7f;
337 if ( j0 < 23 ) {
338 if ( j0 < 0 ) {
339 if ( audiobeam_huge + x > ( float )0.0 ) {
340 if ( i0 < 0 )
341 i0 = 0x80000000;
342 else
343 if ( i0 != 0 )
344 i0 = 0x3f800000;
345 }
346 } else {
347 i = ( 0x007fffff ) >> j0;
348 if ( ( i0 & i ) == 0 ) return x;
349 if ( audiobeam_huge + x > ( float )0.0 ) {
350 if ( i0 > 0 ) i0 += ( 0x00800000 ) >> j0;
351 i0 &= ( ~i );
352 }
353 }
354 } else {
355 if ( j0 == 0x80 ) return x + x;
356 else return x;
357 }
358 AUDIOBEAM_SET_FLOAT_WORD( x, i0 );
359 return x;
360}
361
362
363float audiobeam___ieee754_sqrtf( float x )
364{
365 float z;
366 int sign = ( int )0x80000000;
367 int ix, s, q, m, t, i;
368 unsigned int r;
369
370 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
371
372 if ( ( ix & 0x7f800000 ) == 0x7f800000 )
373 return x * x + x;
374 if ( ix <= 0 ) {
375 if ( ( ix & ( ~sign ) ) == 0 ) return x;
376 else
377 if ( ix < 0 )
378 return ( x - x ) / ( x - x );
379 }
380 m = ( ix >> 23 );
381 if ( m == 0 ) {
382 _Pragma( "loopbound min 0 max 0" )
383 for ( i = 0; ( ix & 0x00800000 ) == 0; i++ )
384 ix <<= 1;
385 m -= i - 1;
386 }
387 m -= 127;
388 ix = ( ix & 0x007fffff ) | 0x00800000;
389 if ( m & 1 )
390 ix += ix;
391 m >>= 1;
392
393 ix += ix;
394 q = s = 0;
395 r = 0x01000000;
396
397 _Pragma( "loopbound min 25 max 25" )
398 while ( r != 0 ) {
399 t = s + r;
400 if ( t <= ix ) {
401 s = t + r;
402 ix -= t;
403 q += r;
404 }
405 ix += ix;
406 r >>= 1;
407 }
408
409 if ( ix != 0 ) {
410 z = audiobeam_one - audiobeam_tiny;
411 if ( z >= audiobeam_one ) {
412 z = audiobeam_one + audiobeam_tiny;
413 if ( z > audiobeam_one )
414 q += 2;
415 else
416 q += ( q & 1 );
417 }
418 }
419 ix = ( q >> 1 ) + 0x3f000000;
420 ix += ( m << 23 );
421 AUDIOBEAM_SET_FLOAT_WORD( z, ix );
422 return z;
423}
diff --git a/all_pairs/source/audiobeam/audiobeamlibm.h b/all_pairs/source/audiobeam/audiobeamlibm.h
new file mode 100644
index 0000000..b06b563
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeamlibm.h
@@ -0,0 +1,59 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: quicksortlibm.c
7
8 Author: Ian Lance Taylor
9
10 Function: IEEE754 software library routines.
11
12 Source: Sun Microsystems and Cygnus
13
14 Original name: Unknown
15
16 Changes: No major functional changes.
17
18 License: See audiobeamlibm.c
19
20*/
21
22#ifndef AUDIOBEAM_LIBM
23#define AUDIOBEAM_LIBM
24
25#define audiobeam_M_PI 3.14159265358979323846
26
27static const float
28audiobeam_one = 1.0f,
29audiobeam_tiny = 1.0e-30f,
30audiobeam_half = 5.0000000000e-01, /* 0x3f000000 */
31audiobeam_huge = 1.0e30,
32audiobeam_two8 = 2.5600000000e+02, /* 0x43800000 */
33audiobeam_twon8 = 3.9062500000e-03, /* 0x3b800000 */
34audiobeam_zero = 0.0;
35
36#define audiobeam_cos audiobeam___cosf
37#define audiobeam_fabs audiobeam___fabsf
38#define audiobeam_fabsf audiobeam___fabsf
39#define audiobeam_isinf audiobeam___isinff
40#define audiobeam_sqrt audiobeam___ieee754_sqrtf
41#define audiobeam_ceil audiobeam___ceilf
42#define audiobeam_floor audiobeam___floorf
43
44float audiobeam___copysignf( float x, float y );
45float audiobeam___cosf( float x );
46float audiobeam___fabsf( float x );
47float audiobeam___floorf( float x );
48int audiobeam___ieee754_rem_pio2f( float x, float *y );
49float audiobeam___ieee754_sqrtf( float x );
50int audiobeam___isinff ( float x );
51float audiobeam___kernel_cosf( float x, float y );
52float audiobeam___kernel_sinf( float x, float y, int iy );
53int audiobeam___kernel_rem_pio2f( float *x, float *y, int e0, int nx,
54 int prec, const int *ipio2 );
55float audiobeam___scalbnf ( float x, int n );
56float audiobeam___ceilf( float x );
57float audiobeam___floorf( float x );
58
59#endif // AUDIOBEAM_LIBM
diff --git a/all_pairs/source/audiobeam/audiobeamlibmalloc.c b/all_pairs/source/audiobeam/audiobeamlibmalloc.c
new file mode 100644
index 0000000..50c3073
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeamlibmalloc.c
@@ -0,0 +1,14 @@
1#include "audiobeamlibmalloc.h"
2
3#define AUDIOBEAM_HEAP_SIZE 10000
4
5static char audiobeam_simulated_heap[AUDIOBEAM_HEAP_SIZE];
6static unsigned int audiobeam_freeHeapPos;
7
8void *audiobeam_malloc( unsigned int numberOfBytes )
9{
10 void *currentPos = ( void * )&audiobeam_simulated_heap[ audiobeam_freeHeapPos ];
11 /* Get a 4-byte address for alignment purposes */
12 audiobeam_freeHeapPos += ( ( numberOfBytes + 4 ) & ( unsigned int )0xfffffffc );
13 return currentPos;
14} \ No newline at end of file
diff --git a/all_pairs/source/audiobeam/audiobeamlibmalloc.h b/all_pairs/source/audiobeam/audiobeamlibmalloc.h
new file mode 100644
index 0000000..eccbdb9
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeamlibmalloc.h
@@ -0,0 +1,27 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeamlibmalloc.c
7
8 Author: unkown
9
10 Function: Memory allocation.
11
12 Source: Sun Microsystems and Cygnus
13
14 Original name: Unknown
15
16 Changes: No major functional changes.
17
18 License: see license.txt
19
20*/
21
22#ifndef AUDIOBEAM_MALLOC_H
23#define AUDIOBEAM_MALLOC_H
24
25void *audiobeam_malloc( unsigned int numberOfBytes );
26
27#endif
diff --git a/all_pairs/source/audiobeam/audiobeamlibmath.h b/all_pairs/source/audiobeam/audiobeamlibmath.h
new file mode 100644
index 0000000..77bda0f
--- /dev/null
+++ b/all_pairs/source/audiobeam/audiobeamlibmath.h
@@ -0,0 +1,69 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeamlibmath.h
7
8 Author: Unknown
9
10 Function: IEEE754 software library routines.
11
12 Source: Sun Microsystems
13
14 Original name: math_private.h
15
16 Changes: No major functional changes.
17
18 License: See the terms below.
19
20*/
21
22
23/*
24 ====================================================
25 Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
26
27 Developed at SunPro, a Sun Microsystems, Inc. business.
28 Permission to use, copy, modify, and distribute this
29 software is freely granted, provided that this notice
30 is preserved.
31 ====================================================
32*/
33
34/*
35 from: @(#)fdlibm.h 5.1 93/09/24
36*/
37
38#ifndef AUDIOBEAM_MATH_PRIVATE_H_
39#define AUDIOBEAM_MATH_PRIVATE_H_
40
41#include "audiobeamlibm.h"
42
43/* A union which permits us to convert between a float and a 32 bit
44 int. */
45
46typedef union {
47 float value;
48 unsigned int word;
49} audiobeam_ieee_float_shape_type;
50
51/* Get a 32 bit int from a float. */
52
53#define AUDIOBEAM_GET_FLOAT_WORD(i,d) \
54{ \
55 audiobeam_ieee_float_shape_type gf_u; \
56 gf_u.value = (d); \
57 (i) = gf_u.word; \
58}
59
60/* Set a float from a 32 bit int. */
61
62#define AUDIOBEAM_SET_FLOAT_WORD(d,i) \
63{ \
64 audiobeam_ieee_float_shape_type sf_u; \
65 sf_u.word = (i); \
66 (d) = sf_u.value; \
67}
68
69#endif /* _MATH_PRIVATE_H_ */
diff --git a/all_pairs/source/audiobeam/changeLog.txt b/all_pairs/source/audiobeam/changeLog.txt
new file mode 100644
index 0000000..b9b8933
--- /dev/null
+++ b/all_pairs/source/audiobeam/changeLog.txt
@@ -0,0 +1,36 @@
1File: audiobeam.c
2Original provenience: StreamIt
3 http://groups.csail.mit.edu/cag/streamit/
4
52015-12-29:
6- Removed original header comment, replaced by TACLeBench header.
7- Renamed libraryfiles according to TACLeBench naming scheme.
8- Removed all preprocessor macros, integrated them directly in the source code.
9- Added prefix "audiobeam_" to all global symbols.
10- Added explicit forward declarations of functions.
11- Added an empty init function
12- Added preprocessor command to determine if 32 or 64 bit in audiobeamlibmalloc.h
13- Added new function audiobeam_return producing a checksum as return value.
14- Added new function audiobeam_main according to TACLeBench guidelines.
15 audiobeam_main is annotated as entry-point for timing analysis.
16- Applied code formatting according to the following rules
17 - Lines shall not be wider than 80 characters; whenever possible, appropriate
18 line breaks shall be inserted to keep lines below 80 characters
19 - Indentation is done using whitespaces only, no tabs. Code is indented by
20 two whitespaces
21 - Two empty lines are put between any two functions
22 - In non-empty lists or index expressions, opening '(' and '[' are followed by
23 one whitespace, closing ')' and ']' are preceded by one whitespace
24 - In comma- or colon-separated argument lists, one whitespace is put after
25 each comma/colon
26 - Names of functions and global variables all start with a benchmark-specific
27 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
28 - For pointer types, one whitespace is put before the '*'
29 - Operators within expressions shall be preceded and followed by one
30 whitespace
31 - Code of then- and else-parts of if-then-else statements shall be put in
32 separate lines, not in the same lines as the if-condition or the keyword
33 "else"
34 - Opening braces '{' denoting the beginning of code for some if-else or loop
35 body shall be put at the end of the same line where the keywords "if",
36 "else", "for", "while" etc. occur \ No newline at end of file
diff --git a/all_pairs/source/audiobeam/license.txt b/all_pairs/source/audiobeam/license.txt
new file mode 100644
index 0000000..7029925
--- /dev/null
+++ b/all_pairs/source/audiobeam/license.txt
@@ -0,0 +1,21 @@
1The MIT License
2
3Copyright (c) <year> <copyright holders>
4
5Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
7in the Software without restriction, including without limitation the rights
8to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9copies of the Software, and to permit persons to whom the Software is
10furnished to do so, subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in
13all copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21THE SOFTWARE.
diff --git a/all_pairs/source/cjpeg_transupp/ChangeLog.txt b/all_pairs/source/cjpeg_transupp/ChangeLog.txt
new file mode 100644
index 0000000..df4383c
--- /dev/null
+++ b/all_pairs/source/cjpeg_transupp/ChangeLog.txt
@@ -0,0 +1,36 @@
1File: cjpeg_transupp.c
2Original provenience: MediaBench II benchmark suite,
3 http://euler.slu.edu/~fritts/mediabench (mirror)
4
52015-11-03:
6- Removed original header comment, replaced by TACLeBench header.
7- Removed unnecessary preprocessor macros.
8- Removed unnecessary code parts, simplified header files and include
9 relationships.
10- Added prefix "cjpeg_transupp" to all global symbols.
11- Added explicit forward declarations of functions.
12- Replaced initialization code by TACLeBench-compliant initialization code.
13- Added new function cjpeg_transupp_return producing a checksum as return value.
14- Added new function cjpeg_transupp_main according to TACLeBench guidelines.
15 cjpeg_transupp_main is annotated as entry-point for timing analysis.
16- Applied code formatting according to the following rules
17 - Lines shall not be wider than 80 characters; whenever possible, appropriate
18 line breaks shall be inserted to keep lines below 80 characters
19 - Indentation is done using whitespaces only, no tabs. Code is indented by
20 two whitespaces
21 - Two empty lines are put between any two functions
22 - In non-empty lists or index expressions, opening '(' and '[' are followed by
23 one whitespace, closing ')' and ']' are preceded by one whitespace
24 - In comma- or colon-separated argument lists, one whitespace is put after
25 each comma/colon
26 - Names of functions and global variables all start with a benchmark-specific
27 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
28 - For pointer types, one whitespace is put before the '*'
29 - Operators within expressions shall be preceded and followed by one
30 whitespace
31 - Code of then- and else-parts of if-then-else statements shall be put in
32 separate lines, not in the same lines as the if-condition or the keyword
33 "else"
34 - Opening braces '{' denoting the beginning of code for some if-else or loop
35 body shall be put at the end of the same line where the keywords "if",
36 "else", "for", "while" etc. occur
diff --git a/all_pairs/source/cjpeg_transupp/README b/all_pairs/source/cjpeg_transupp/README
new file mode 100644
index 0000000..8dba954
--- /dev/null
+++ b/all_pairs/source/cjpeg_transupp/README
@@ -0,0 +1,417 @@
1The Independent JPEG Group's JPEG software
2==========================================
3
4README for release 6a of 7-Feb-96
5=================================
6
7This distribution contains the sixth public release of the Independent JPEG
8Group's free JPEG software. You are welcome to redistribute this software and
9to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
10
11Serious users of this software (particularly those incorporating it into
12larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to
13our electronic mailing list. Mailing list members are notified of updates
14and have a chance to participate in technical discussions, etc.
15
16This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, Jim
17Boucher, Lee Crocker, Julian Minguillon, George Phillips, Davide Rossi,
18Ge' Weijers, and other members of the Independent JPEG Group.
19
20IJG is not affiliated with the official ISO JPEG standards committee.
21
22
23DOCUMENTATION ROADMAP
24=====================
25
26This file contains the following sections:
27
28OVERVIEW General description of JPEG and the IJG software.
29LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
30REFERENCES Where to learn more about JPEG.
31ARCHIVE LOCATIONS Where to find newer versions of this software.
32RELATED SOFTWARE Other stuff you should get.
33FILE FORMAT WARS Software *not* to get.
34TO DO Plans for future IJG releases.
35
36Other documentation files in the distribution are:
37
38User documentation:
39 install.doc How to configure and install the IJG software.
40 usage.doc Usage instructions for cjpeg, djpeg, jpegtran,
41 rdjpgcom, and wrjpgcom.
42 *.1 Unix-style man pages for programs (same info as usage.doc).
43 wizard.doc Advanced usage instructions for JPEG wizards only.
44 change.log Version-to-version change highlights.
45Programmer and internal documentation:
46 libjpeg.doc How to use the JPEG library in your own programs.
47 example.c Sample code for calling the JPEG library.
48 structure.doc Overview of the JPEG library's internal structure.
49 filelist.doc Road map of IJG files.
50 coderules.doc Coding style rules --- please read if you contribute code.
51
52Please read at least the files install.doc and usage.doc. Useful information
53can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
54ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
55
56If you want to understand how the JPEG code works, we suggest reading one or
57more of the REFERENCES, then looking at the documentation files (in roughly
58the order listed) before diving into the code.
59
60
61OVERVIEW
62========
63
64This package contains C software to implement JPEG image compression and
65decompression. JPEG (pronounced "jay-peg") is a standardized compression
66method for full-color and gray-scale images. JPEG is intended for compressing
67"real-world" scenes; line drawings, cartoons and other non-realistic images
68are not its strong suit. JPEG is lossy, meaning that the output image is not
69exactly identical to the input image. Hence you must not use JPEG if you
70have to have identical output bits. However, on typical photographic images,
71very good compression levels can be obtained with no visible change, and
72remarkably high compression levels are possible if you can tolerate a
73low-quality image. For more details, see the references, or just experiment
74with various compression settings.
75
76This software implements JPEG baseline, extended-sequential, and progressive
77compression processes. Provision is made for supporting all variants of these
78processes, although some uncommon parameter settings aren't implemented yet.
79For legal reasons, we are not distributing code for the arithmetic-coding
80variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting
81the hierarchical or lossless processes defined in the standard.
82
83We provide a set of library routines for reading and writing JPEG image files,
84plus two sample applications "cjpeg" and "djpeg", which use the library to
85perform conversion between JPEG and some other popular image file formats.
86The library is intended to be reused in other applications.
87
88In order to support file conversion and viewing software, we have included
89considerable functionality beyond the bare JPEG coding/decoding capability;
90for example, the color quantization modules are not strictly part of JPEG
91decoding, but they are essential for output to colormapped file formats or
92colormapped displays. These extra functions can be compiled out of the
93library if not required for a particular application. We have also included
94"jpegtran", a utility for lossless transcoding between different JPEG
95processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
96inserting and extracting textual comments in JFIF files.
97
98The emphasis in designing this software has been on achieving portability and
99flexibility, while also making it fast enough to be useful. In particular,
100the software is not intended to be read as a tutorial on JPEG. (See the
101REFERENCES section for introductory material.) Rather, it is intended to
102be reliable, portable, industrial-strength code. We do not claim to have
103achieved that goal in every aspect of the software, but we strive for it.
104
105We welcome the use of this software as a component of commercial products.
106No royalty is required, but we do ask for an acknowledgement in product
107documentation, as described under LEGAL ISSUES.
108
109Lossless image transformation routines. These routines work on DCT coefficient
110arrays and thus do not require any lossy decompression or recompression of the
111image. Thanks to Guido Vollbeding for the initial design and code of this
112feature.
113
114Horizontal flipping is done in-place, using a single top-to-bottom pass through
115the virtual source array. It will thus be much the fastest option for images
116larger than main memory.
117
118The other routines require a set of destination virtual arrays, so they need
119twice as much memory as jpegtran normally does. The destination arrays are
120always written in normal scan order (top to bottom) because the virtual array
121manager expects this. The source arrays will be scanned in the corresponding
122order, which means multiple passes through the source arrays for most of the
123transforms. That could result in much thrashing if the image is larger than main
124memory.
125
126Some notes about the operating environment of the individual transform routines:
1271. Both the source and destination virtual arrays are allocated from the source
128 JPEG object, and therefore should be manipulated by calling the source's
129 memory manager.
1302. The destination's component count should be used. It may be smaller than the
131 source's when forcing to grayscale.
1323. Likewise the destination's sampling factors should be used. When forcing to
133 grayscale the destination's sampling factors will be all 1, and we may as
134 well take that as the effective iMCU size.
1354. When "trim" is in effect, the destination's dimensions will be the trimmed
136 values but the source's will be untrimmed.
1375. All the routines assume that the source and destination buffers are padded
138 out to a full iMCU boundary. This is true, although for the source buffer it
139 is an undocumented property of jdcoefct.c.
140Notes 2,3,4 boil down to this: generally we should use the destination's
141dimensions and ignore the source's.
142
143
144LEGAL ISSUES
145============
146
147In plain English:
148
1491. We don't promise that this software works. (But if you find any bugs,
150 please let us know!)
1512. You can use this software for whatever you want. You don't have to pay us.
1523. You may not pretend that you wrote this software. If you use it in a
153 program, you must acknowledge somewhere in your documentation that
154 you've used the IJG code.
155
156In legalese:
157
158The authors make NO WARRANTY or representation, either express or implied,
159with respect to this software, its quality, accuracy, merchantability, or
160fitness for a particular purpose. This software is provided "AS IS", and you,
161its user, assume the entire risk as to its quality and accuracy.
162
163This software is copyright (C) 1991-1996, Thomas G. Lane.
164All Rights Reserved except as specified below.
165
166Permission is hereby granted to use, copy, modify, and distribute this
167software (or portions thereof) for any purpose, without fee, subject to these
168conditions:
169(1) If any part of the source code for this software is distributed, then this
170README file must be included, with this copyright and no-warranty notice
171unaltered; and any additions, deletions, or changes to the original files
172must be clearly indicated in accompanying documentation.
173(2) If only executable code is distributed, then the accompanying
174documentation must state that "this software is based in part on the work of
175the Independent JPEG Group".
176(3) Permission for use of this software is granted only if the user accepts
177full responsibility for any undesirable consequences; the authors accept
178NO LIABILITY for damages of any kind.
179
180These conditions apply to any software derived from or based on the IJG code,
181not just to the unmodified library. If you use our work, you ought to
182acknowledge us.
183
184Permission is NOT granted for the use of any IJG author's name or company name
185in advertising or publicity relating to this software or products derived from
186it. This software may be referred to only as "the Independent JPEG Group's
187software".
188
189We specifically permit and encourage the use of this software as the basis of
190commercial products, provided that all warranty or liability claims are
191assumed by the product vendor.
192
193
194ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
195sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
196ansi2knr.c is NOT covered by the above copyright and conditions, but instead
197by the usual distribution terms of the Free Software Foundation; principally,
198that you must include source code if you redistribute it. (See the file
199ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
200of any program generated from the IJG code, this does not limit you more than
201the foregoing paragraphs do.
202
203The configuration script "configure" was produced with GNU Autoconf. It
204is copyright by the Free Software Foundation but is freely distributable.
205
206It appears that the arithmetic coding option of the JPEG spec is covered by
207patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot
208legally be used without obtaining one or more licenses. For this reason,
209support for arithmetic coding has been removed from the free JPEG software.
210(Since arithmetic coding provides only a marginal gain over the unpatented
211Huffman mode, it is unlikely that very many implementations will support it.)
212So far as we are aware, there are no patent restrictions on the remaining
213code.
214
215WARNING: Unisys has begun to enforce their patent on LZW compression against
216GIF encoders and decoders. You will need a license from Unisys to use the
217included rdgif.c or wrgif.c files in a commercial or shareware application.
218At this time, Unisys is not enforcing their patent against freeware, so
219distribution of this package remains legal. However, we intend to remove
220GIF support from the IJG package as soon as a suitable replacement format
221becomes reasonably popular.
222
223We are required to state that
224 "The Graphics Interchange Format(c) is the Copyright property of
225 CompuServe Incorporated. GIF(sm) is a Service Mark property of
226 CompuServe Incorporated."
227
228
229REFERENCES
230==========
231
232We highly recommend reading one or more of these references before trying to
233understand the innards of the JPEG software.
234
235The best short technical introduction to the JPEG compression algorithm is
236 Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
237 Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
238(Adjacent articles in that issue discuss MPEG motion picture compression,
239applications of JPEG, and related topics.) If you don't have the CACM issue
240handy, a PostScript file containing a revised version of Wallace's article
241is available at ftp.uu.net, graphics/jpeg/wallace.ps.gz. The file (actually
242a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
243omits the sample images that appeared in CACM, but it includes corrections
244and some added material. Note: the Wallace article is copyright ACM and
245IEEE, and it may not be used for commercial purposes.
246
247A somewhat less technical, more leisurely introduction to JPEG can be found in
248"The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood
249City, CA), 1991, ISBN 1-55851-216-0. This book provides good explanations and
250example C code for a multitude of compression methods including JPEG. It is
251an excellent source if you are comfortable reading C code but don't know much
252about data compression in general. The book's JPEG sample code is far from
253industrial-strength, but when you are ready to look at a full implementation,
254you've got one here...
255
256The best full description of JPEG is the textbook "JPEG Still Image Data
257Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
258by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp.
259The book includes the complete text of the ISO JPEG standards (DIS 10918-1
260and draft DIS 10918-2). This is by far the most complete exposition of JPEG
261in existence, and we highly recommend it.
262
263The JPEG standard itself is not available electronically; you must order a
264paper copy through ISO or ITU. (Unless you feel a need to own a certified
265official copy, we recommend buying the Pennebaker and Mitchell book instead;
266it's much cheaper and includes a great deal of useful explanatory material.)
267In the USA, copies of the standard may be ordered from ANSI Sales at (212)
268642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI
269doesn't take credit card orders, but Global does.) It's not cheap: as of
2701992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
271shipping/handling. The standard is divided into two parts, Part 1 being the
272actual specification, while Part 2 covers compliance testing methods. Part 1
273is titled "Digital Compression and Coding of Continuous-tone Still Images,
274Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
27510918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
276Continuous-tone Still Images, Part 2: Compliance testing" and has document
277numbers ISO/IEC IS 10918-2, ITU-T T.83.
278
279Extensions to the original JPEG standard are defined in JPEG Part 3, a new ISO
280document. Part 3 is undergoing ISO balloting and is expected to be approved
281by the end of 1995; it will have document numbers ISO/IEC IS 10918-3, ITU-T
282T.84. IJG currently does not support any Part 3 extensions.
283
284The JPEG standard does not specify all details of an interchangeable file
285format. For the omitted details we follow the "JFIF" conventions, revision
2861.02. A copy of the JFIF spec is available from:
287 Literature Department
288 C-Cube Microsystems, Inc.
289 1778 McCarthy Blvd.
290 Milpitas, CA 95035
291 phone (408) 944-6300, fax (408) 944-6314
292A PostScript version of this document is available at ftp.uu.net, file
293graphics/jpeg/jfif.ps.gz. It can also be obtained by e-mail from the C-Cube
294mail server, netlib@c3.pla.ca.us. Send the message "send jfif_ps from jpeg"
295to the server to obtain the JFIF document; send the message "help" if you have
296trouble.
297
298The TIFF 6.0 file format specification can be obtained by FTP from sgi.com
299(192.48.153.1), file graphics/tiff/TIFF6.ps.Z; or you can order a printed
300copy from Aldus Corp. at (206) 628-6593. The JPEG incorporation scheme
301found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
302IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
303Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
304(Compression tag 7). Copies of this Note can be obtained from sgi.com or
305from ftp.uu.net:/graphics/jpeg/. It is expected that the next revision of
306the TIFF spec will replace the 6.0 JPEG design with the Note's design.
307Although IJG's own code does not support TIFF/JPEG, the free libtiff library
308uses our library to implement TIFF/JPEG per the Note. libtiff is available
309from sgi.com:/graphics/tiff/.
310
311
312ARCHIVE LOCATIONS
313=================
314
315The "official" archive site for this software is ftp.uu.net (Internet
316address 192.48.96.9). The most recent released version can always be found
317there in directory graphics/jpeg. This particular version will be archived
318as graphics/jpeg/jpegsrc.v6a.tar.gz. If you are on the Internet, you
319can retrieve files from ftp.uu.net by standard anonymous FTP. If you don't
320have FTP access, UUNET's archives are also available via UUCP; contact
321help@uunet.uu.net for information on retrieving files that way.
322
323Numerous Internet sites maintain copies of the UUNET files. However, only
324ftp.uu.net is guaranteed to have the latest official version.
325
326You can also obtain this software in DOS-compatible "zip" archive format from
327the SimTel archives (ftp.coast.net:/SimTel/msdos/graphics/), or on CompuServe
328in the Graphics Support forum (GO CIS:GRAPHSUP), library 12 "JPEG Tools".
329Again, these versions may sometimes lag behind the ftp.uu.net release.
330
331The JPEG FAQ (Frequently Asked Questions) article is a useful source of
332general information about JPEG. It is updated constantly and therefore is
333not included in this distribution. The FAQ is posted every two weeks to
334Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
335You can always obtain the latest version from the news.answers archive at
336rtfm.mit.edu. By FTP, fetch /pub/usenet/news.answers/jpeg-faq/part1 and
337.../part2. If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu
338with body
339 send usenet/news.answers/jpeg-faq/part1
340 send usenet/news.answers/jpeg-faq/part2
341
342
343RELATED SOFTWARE
344================
345
346Numerous viewing and image manipulation programs now support JPEG. (Quite a
347few of them use this library to do so.) The JPEG FAQ described above lists
348some of the more popular free and shareware viewers, and tells where to
349obtain them on Internet.
350
351If you are on a Unix machine, we highly recommend Jef Poskanzer's free
352PBMPLUS image software, which provides many useful operations on PPM-format
353image files. In particular, it can convert PPM images to and from a wide
354range of other formats. You can obtain this package by FTP from ftp.x.org
355(contrib/pbmplus*.tar.Z) or ftp.ee.lbl.gov (pbmplus*.tar.Z). There is also
356a newer update of this package called NETPBM, available from
357wuarchive.wustl.edu under directory /graphics/graphics/packages/NetPBM/.
358Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software
359is; you are likely to have difficulty making it work on any non-Unix machine.
360
361A different free JPEG implementation, written by the PVRG group at Stanford,
362is available from havefun.stanford.edu in directory pub/jpeg. This program
363is designed for research and experimentation rather than production use;
364it is slower, harder to use, and less portable than the IJG code, but it
365is easier to read and modify. Also, the PVRG code supports lossless JPEG,
366which we do not.
367
368
369FILE FORMAT WARS
370================
371
372Some JPEG programs produce files that are not compatible with our library.
373The root of the problem is that the ISO JPEG committee failed to specify a
374concrete file format. Some vendors "filled in the blanks" on their own,
375creating proprietary formats that no one else could read. (For example, none
376of the early commercial JPEG implementations for the Macintosh were able to
377exchange compressed files.)
378
379The file format we have adopted is called JFIF (see REFERENCES). This format
380has been agreed to by a number of major commercial JPEG vendors, and it has
381become the de facto standard. JFIF is a minimal or "low end" representation.
382We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
383Technical Note #2) for "high end" applications that need to record a lot of
384additional data about an image. TIFF/JPEG is fairly new and not yet widely
385supported, unfortunately.
386
387The upcoming JPEG Part 3 standard defines a file format called SPIFF.
388SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
389be able to read the most common variant of SPIFF. SPIFF has some technical
390advantages over JFIF, but its major claim to fame is simply that it is an
391official standard rather than an informal one. At this point it is unclear
392whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
393standard. IJG intends to support SPIFF once the standard is frozen, but we
394have not decided whether it should become our default output format or not.
395(In any case, our decoder will remain capable of reading JFIF indefinitely.)
396
397Various proprietary file formats incorporating JPEG compression also exist.
398We have little or no sympathy for the existence of these formats. Indeed,
399one of the original reasons for developing this free software was to help
400force convergence on common, open format standards for JPEG files. Don't
401use a proprietary file format!
402
403
404TO DO
405=====
406
407In future versions, we are considering supporting some of the upcoming JPEG
408Part 3 extensions --- principally, variable quantization and the SPIFF file
409format.
410
411Tuning the software for better behavior at low quality/high compression
412settings is also of interest. The current method for scaling the
413quantization tables is known not to be very good at low Q values.
414
415As always, speeding things up is high on our priority list.
416
417Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
diff --git a/all_pairs/source/cjpeg_transupp/cjpeg_transupp.c b/all_pairs/source/cjpeg_transupp/cjpeg_transupp.c
new file mode 100644
index 0000000..e77d15b
--- /dev/null
+++ b/all_pairs/source/cjpeg_transupp/cjpeg_transupp.c
@@ -0,0 +1,718 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: cjpeg_transupp
7
8 Author: Thomas G. Lane
9
10 Function: This file contains image transformation routines and other utility
11 code used by the jpegtran sample application. These are NOT part of the core
12 JPEG library. But we keep these routines separate from jpegtran.c to ease
13 the task of maintaining jpegtran-like programs that have other user
14 interfaces.
15
16 Source: MediaBench II
17 http://euler.slu.edu/~fritts/mediabench (mirror)
18
19 Original name: cjpeg
20
21 Changes: No major functional changes.
22
23 License: See the accompanying README file.
24
25*/
26
27
28/*
29 Include section
30*/
31
32#include "../extra.h"
33#include "jpeglib.h"
34
35
36/*
37 Forward declaration of functions
38*/
39
40void cjpeg_transupp_initSeed( void );
41signed char cjpeg_transupp_randomInteger( void );
42void cjpeg_transupp_init( void );
43int cjpeg_transupp_return( void );
44void cjpeg_transupp_do_flip_v( j_compress_ptr );
45void cjpeg_transupp_do_rot_90( j_compress_ptr );
46void cjpeg_transupp_do_rot_180( j_compress_ptr );
47void cjpeg_transupp_do_rot_270( j_compress_ptr );
48void cjpeg_transupp_do_transverse( j_compress_ptr );
49void cjpeg_transupp_main( void );
50//int main( void );
51
52
53/*
54 Declaration of global variables
55*/
56
57volatile int cjpeg_transupp_seed;
58
59signed char cjpeg_transupp_input[ 256 ];
60signed char cjpeg_transupp_input2[ 80 ];
61signed char cjpeg_transupp_input3[ 65 ];
62signed char cjpeg_transupp_input3_2[ 65 ];
63signed char cjpeg_transupp_input4[ 64 ];
64signed char cjpeg_transupp_input5[ 65 ];
65signed char cjpeg_transupp_input5_2[ 65 ];
66
67/* Output arrays replace writing of results into a file. */
68signed char cjpeg_transupp_output_data[ 512 ];
69signed char cjpeg_transupp_output_data2[ 512 ];
70signed char cjpeg_transupp_output_data3[ 512 ];
71signed char cjpeg_transupp_output_data4[ 512 ];
72signed char cjpeg_transupp_output_data5[ 512 ];
73
74struct jpeg_compress_struct cjpeg_transupp_dstinfo;
75
76
77/*
78 Initialization- and return-value-related functions
79*/
80
81void cjpeg_transupp_initSeed( void )
82{
83 cjpeg_transupp_seed = 0;
84}
85
86
87/*
88 cjpeg_transupp_RandomInteger generates random integers between -128 and 127.
89*/
90signed char cjpeg_transupp_randomInteger( void )
91{
92 cjpeg_transupp_seed = ( ( ( cjpeg_transupp_seed * 133 ) + 81 ) % 256 ) - 128;
93 return( cjpeg_transupp_seed );
94}
95
96
97void cjpeg_transupp_init( void )
98{
99 register int i;
100
101
102 cjpeg_transupp_dstinfo.max_h_samp_factor = 2;
103 cjpeg_transupp_dstinfo.max_v_samp_factor = 2;
104 cjpeg_transupp_dstinfo.num_components = 3;
105
106 cjpeg_transupp_initSeed();
107
108 _Pragma( "loopbound min 256 max 256" )
109 for ( i = 0; i < 256; i++ )
110 cjpeg_transupp_input[ i ] = cjpeg_transupp_randomInteger();
111
112 _Pragma( "loopbound min 80 max 80" )
113 for ( i = 0; i < 80; i++ )
114 cjpeg_transupp_input2[ i ] = cjpeg_transupp_randomInteger();
115
116 _Pragma( "loopbound min 65 max 65" )
117 for ( i = 0; i < 65; i++ )
118 cjpeg_transupp_input3[ i ] = cjpeg_transupp_randomInteger();
119
120 _Pragma( "loopbound min 65 max 65" )
121 for ( i = 0; i < 65; i++ )
122 cjpeg_transupp_input3_2[ i ] = cjpeg_transupp_randomInteger();
123
124 _Pragma( "loopbound min 64 max 64" )
125 for ( i = 0; i < 64; i++ )
126 cjpeg_transupp_input4[ i ] = cjpeg_transupp_randomInteger();
127
128 _Pragma( "loopbound min 65 max 65" )
129 for ( i = 0; i < 65; i++ )
130 cjpeg_transupp_input5[ i ] = cjpeg_transupp_randomInteger();
131
132 _Pragma( "loopbound min 65 max 65" )
133 for ( i = 0; i < 65; i++ )
134 cjpeg_transupp_input5_2[ i ] = cjpeg_transupp_randomInteger();
135}
136
137
138int cjpeg_transupp_return( void )
139{
140 int checksum = 0;
141 unsigned int i;
142
143
144 _Pragma( "loopbound min 512 max 512" )
145 for ( i = 0; i < 512; i++ )
146 checksum += cjpeg_transupp_output_data[ i ];
147
148 _Pragma( "loopbound min 512 max 512" )
149 for ( i = 0; i < 512; i++ )
150 checksum += cjpeg_transupp_output_data2[ i ];
151
152 _Pragma( "loopbound min 512 max 512" )
153 for ( i = 0; i < 512; i++ )
154 checksum += cjpeg_transupp_output_data3[ i ];
155
156 _Pragma( "loopbound min 512 max 512" )
157 for ( i = 0; i < 512; i++ )
158 checksum += cjpeg_transupp_output_data4[ i ];
159
160 _Pragma( "loopbound min 512 max 512" )
161 for ( i = 0; i < 512; i++ )
162 checksum += cjpeg_transupp_output_data5[ i ];
163
164 return( checksum );
165}
166
167
168/*
169 Algorithm core functions
170*/
171
172/*
173 Vertical flip
174*/
175void cjpeg_transupp_do_flip_v( j_compress_ptr dstinfo )
176{
177 unsigned int MCU_rows, comp_height, dst_blk_x, dst_blk_y;
178 int ci, i, j, offset_y;
179 JCOEFPTR src_ptr, dst_ptr;
180
181
182 /*
183 We output into a separate array because we can't touch different rows of the
184 source virtual array simultaneously. Otherwise, this is a pretty
185 straightforward analog of horizontal flip.
186 Within a DCT block, vertical mirroring is done by changing the signs of
187 odd-numbered rows.
188 Partial iMCUs at the bottom edge are copied verbatim.
189 */
190 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
191
192 int compptr_v_samp_factor = 8;
193 unsigned int compptr_height_in_blocks = 19;
194 unsigned int compptr_width_in_blocks = 29;
195
196 _Pragma( "loopbound min 3 max 3" )
197 for ( ci = 0; ci < dstinfo->num_components;
198 ci++, compptr_v_samp_factor = 1, compptr_width_in_blocks = 15 ) {
199 comp_height = MCU_rows * compptr_v_samp_factor;
200
201 compptr_height_in_blocks = 10;
202 _Pragma( "loopbound min 2 max 10" )
203 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
204 dst_blk_y += compptr_v_samp_factor ) {
205
206 _Pragma( "loopbound min 1 max 8" )
207 for ( offset_y = 0; offset_y < compptr_v_samp_factor; offset_y++ ) {
208 if ( dst_blk_y < comp_height ) {
209
210 /* Row is within the mirrorable area. */
211 _Pragma( "loopbound min 15 max 29" )
212 for ( dst_blk_x = 0; dst_blk_x < compptr_width_in_blocks;
213 dst_blk_x++ ) {
214
215 src_ptr = cjpeg_transupp_input;
216 dst_ptr = cjpeg_transupp_output_data;
217
218 _Pragma( "loopbound min 4 max 4" )
219 for ( i = 0; i < DCTSIZE; i += 2 ) {
220
221 /* copy even row */
222 j = 0;
223 _Pragma( "loopbound min 8 max 8" )
224 do {
225 if ( dst_blk_x < comp_height )
226 *dst_ptr++ = *src_ptr++;
227 j++;
228 } while ( j < DCTSIZE );
229
230 /* copy odd row with sign change */
231 j = 0;
232 _Pragma( "loopbound min 8 max 8" )
233 do {
234 if ( dst_blk_x < comp_height )
235 *dst_ptr++ = - *src_ptr++;
236 j++;
237 } while ( j < DCTSIZE );
238 }
239 }
240 }
241 }
242 }
243 }
244}
245
246
247/*
248 90 degree rotation is equivalent to
249 1. Transposing the image;
250 2. Horizontal mirroring.
251 These two steps are merged into a single processing routine.
252*/
253void cjpeg_transupp_do_rot_90( j_compress_ptr dstinfo )
254{
255 unsigned int MCU_cols, comp_width, dst_blk_x, dst_blk_y;
256 int ci, i, j, offset_x, offset_y;
257 JCOEFPTR src_ptr, dst_ptr;
258
259
260 /*
261 Because of the horizontal mirror step, we can't process partial iMCUs at the
262 (output) right edge properly. They just get transposed and not mirrored.
263 */
264 MCU_cols = dstinfo->image_width / ( dstinfo->max_h_samp_factor * DCTSIZE );
265
266 int compptr_h_samp_factor = 2;
267 int compptr_v_samp_factor = 8;
268 unsigned int compptr_height_in_blocks = 29;
269 unsigned int compptr_width_in_blocks = 19;
270
271
272 _Pragma( "loopbound min 3 max 3" )
273 for ( ci = 0; ci < dstinfo->num_components;
274 ci++, compptr_h_samp_factor = compptr_v_samp_factor = 1,
275 compptr_height_in_blocks = 15, compptr_width_in_blocks = 10 ) {
276
277 comp_width = MCU_cols * compptr_h_samp_factor;
278
279 _Pragma( "loopbound min 4 max 15" )
280 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
281 dst_blk_y += compptr_v_samp_factor ) {
282
283 offset_y = 0;
284 _Pragma( "loopbound min 1 max 8" )
285 for ( ; offset_y < compptr_v_samp_factor; offset_y++ ) {
286 dst_blk_x = 0;
287 _Pragma( "loopbound min 10 max 10" )
288 for ( ; dst_blk_x < compptr_width_in_blocks;
289 dst_blk_x += compptr_h_samp_factor ) {
290
291 offset_x = 0;
292 _Pragma( "loopbound min 1 max 2" )
293 for ( ; offset_x < compptr_h_samp_factor; offset_x++ ) {
294
295 src_ptr = cjpeg_transupp_input2;
296
297 if ( dst_blk_x < comp_width ) {
298
299 /* Block is within the mirrorable area. */
300 dst_ptr = cjpeg_transupp_output_data2;
301
302 _Pragma( "loopbound min 4 max 4" )
303 for ( i = 0; i < DCTSIZE; i++ ) {
304 j = 0;
305 _Pragma( "loopbound min 8 max 8" )
306 for ( ; j < DCTSIZE; j++ )
307 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
308
309 i++;
310
311 _Pragma( "loopbound min 8 max 8" )
312 for ( j = 0; j < DCTSIZE; j++ )
313 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
314 }
315 } else {
316 /* Edge blocks are transposed but not mirrored. */
317 dst_ptr = cjpeg_transupp_output_data2;
318
319 _Pragma( "loopbound min 8 max 8" )
320 for ( i = 0; i < DCTSIZE; i++ )
321 j = 0;
322 _Pragma( "loopbound min 8 max 8" )
323 for ( ; j < DCTSIZE; j++ ) {
324 if ( dst_blk_y < comp_width )
325 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
326 }
327 }
328 }
329 }
330 }
331 }
332 }
333}
334
335
336/*
337 270 degree rotation is equivalent to
338 1. Horizontal mirroring;
339 2. Transposing the image.
340 These two steps are merged into a single processing routine.
341*/
342void cjpeg_transupp_do_rot_270( j_compress_ptr dstinfo )
343{
344 unsigned int MCU_rows, comp_height, dst_blk_x, dst_blk_y;
345 int ci, i, j, offset_x, offset_y;
346 JCOEFPTR src_ptr, dst_ptr;
347
348
349 /*
350 Because of the horizontal mirror step, we can't process partial iMCUs at the
351 (output) bottom edge properly. They just get transposed and not mirrored.
352 */
353 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
354
355 int compptr_h_samp_factor = 2;
356 int compptr_v_samp_factor = 8;
357 unsigned int compptr_height_in_blocks = 29;
358 unsigned int compptr_width_in_blocks = 19;
359
360 _Pragma( "loopbound min 3 max 3" )
361 for ( ci = 0; ci < dstinfo->num_components;
362 ci++, compptr_h_samp_factor = compptr_v_samp_factor = 1,
363 compptr_height_in_blocks = 15, compptr_width_in_blocks = 10 ) {
364
365 comp_height = MCU_rows * compptr_v_samp_factor;
366
367 _Pragma( "loopbound min 4 max 15" )
368 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
369 dst_blk_y += compptr_v_samp_factor ) {
370
371 offset_y = 0;
372 _Pragma( "loopbound min 1 max 8" )
373 for ( ; offset_y < compptr_v_samp_factor; offset_y++ ) {
374 dst_blk_x = 0;
375 _Pragma( "loopbound min 10 max 10" )
376 for ( ; dst_blk_x < compptr_width_in_blocks;
377 dst_blk_x += compptr_h_samp_factor ) {
378
379 offset_x = 0;
380 _Pragma( "loopbound min 1 max 2" )
381 for ( ; offset_x < compptr_h_samp_factor; offset_x++ ) {
382
383 dst_ptr = cjpeg_transupp_output_data3;
384
385 if ( dst_blk_y < comp_height ) {
386
387 /* Block is within the mirrorable area. */
388 src_ptr = cjpeg_transupp_input3;
389
390 _Pragma( "loopbound min 8 max 8" )
391 for ( i = 0; i < DCTSIZE; i++ ) {
392 j = 0;
393 _Pragma( "loopbound min 4 max 4" )
394 for ( ; j < DCTSIZE; j++ ) {
395 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
396 j++;
397 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
398 }
399 }
400 } else {
401
402 /* Edge blocks are transposed but not mirrored. */
403 src_ptr = cjpeg_transupp_input3_2;
404
405 _Pragma( "loopbound min 8 max 8" )
406 for ( i = 0; i < DCTSIZE; i++ )
407 j = 0;
408 _Pragma( "loopbound min 8 max 8" )
409 for ( ; j < DCTSIZE; j++ ) {
410 if ( dst_blk_y < comp_height )
411 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
412 }
413 }
414 }
415 }
416 }
417 }
418 }
419}
420
421
422/*
423 180 degree rotation is equivalent to
424 1. Vertical mirroring;
425 2. Horizontal mirroring.
426 These two steps are merged into a single processing routine.
427*/
428void cjpeg_transupp_do_rot_180( j_compress_ptr dstinfo )
429{
430 unsigned int MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x,
431 dst_blk_y;
432 int ci, i, j, offset_y;
433 JCOEFPTR src_ptr, dst_ptr;
434
435 int compptr_h_samp_factor = 2;
436 int compptr_v_samp_factor = 8;
437 unsigned int compptr_width_in_blocks = 29;
438 unsigned int compptr_height_in_blocks = 19;
439
440
441 MCU_cols = dstinfo->image_width / ( dstinfo->max_h_samp_factor * DCTSIZE );
442 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
443
444 _Pragma( "loopbound min 3 max 3" )
445 for ( ci = 0; ci < dstinfo->num_components; ci++,
446 compptr_h_samp_factor = compptr_v_samp_factor = 1,
447 compptr_width_in_blocks = 15, compptr_height_in_blocks = 10 ) {
448
449 comp_width = MCU_cols * compptr_h_samp_factor;
450 comp_height = MCU_rows * compptr_v_samp_factor;
451
452 _Pragma( "loopbound min 3 max 10" )
453 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
454 dst_blk_y += compptr_v_samp_factor ) {
455 offset_y = 0;
456 _Pragma( "loopbound min 1 max 8" )
457 for ( ; offset_y < compptr_v_samp_factor; offset_y++ ) {
458 if ( dst_blk_y < comp_height ) {
459
460 /* Row is within the mirrorable area. */
461
462 /* Process the blocks that can be mirrored both ways. */
463 _Pragma( "loopbound min 14 max 28" )
464 for ( dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++ ) {
465 dst_ptr = cjpeg_transupp_output_data4;
466 src_ptr = cjpeg_transupp_input4;
467
468 _Pragma( "loopbound min 4 max 4" )
469 for ( i = 0; i < DCTSIZE; i += 2 ) {
470 j = 0;
471 /* For even row, negate every odd column. */
472 _Pragma( "loopbound min 4 max 4" )
473 for ( ; j < DCTSIZE; j += 2 ) {
474 if ( dst_blk_x < comp_height ) {
475 *dst_ptr++ = *src_ptr++;
476 *dst_ptr++ = - *src_ptr++;
477 }
478 }
479
480 j = 0;
481 /* For odd row, negate every even column. */
482 _Pragma( "loopbound min 4 max 4" )
483 for ( ; j < DCTSIZE; j += 2 ) {
484 if ( dst_blk_x < comp_height ) {
485 *dst_ptr++ = - *src_ptr++;
486 *dst_ptr++ = *src_ptr++;
487 }
488 }
489 }
490 }
491
492 /* Any remaining right-edge blocks are only mirrored vertically. */
493 _Pragma( "loopbound min 1 max 1" )
494 for ( ; dst_blk_x < compptr_width_in_blocks; dst_blk_x++ ) {
495
496 dst_ptr = cjpeg_transupp_output_data4;
497 src_ptr = cjpeg_transupp_input4;
498 _Pragma( "loopbound min 4 max 4" )
499 for ( i = 0; i < DCTSIZE; i += 2 ) {
500 j = 0;
501 _Pragma( "loopbound min 8 max 8" )
502 for ( ; j < DCTSIZE; j++ )
503 *dst_ptr++ = *src_ptr++;
504 j = 0;
505 _Pragma( "loopbound min 8 max 8" )
506 for ( ; j < DCTSIZE; j++ )
507 *dst_ptr++ = - *src_ptr++;
508 }
509 }
510 } else {
511
512 /* Remaining rows are just mirrored horizontally. */
513 dst_blk_x = 0;
514 /* Process the blocks that can be mirrored. */
515 _Pragma( "loopbound min 14 max 28" )
516 do {
517 dst_ptr = cjpeg_transupp_output_data4;
518 src_ptr = cjpeg_transupp_input4;
519
520 i = 0;
521 _Pragma( "loopbound min 32 max 32" )
522 while ( i < DCTSIZE2 ) {
523 *dst_ptr++ = *src_ptr++;
524 *dst_ptr++ = - *src_ptr++;
525 i += 2;
526 dst_ptr += 0;
527 }
528 dst_blk_x++;
529 dst_ptr += 0;
530 } while ( dst_blk_x < comp_width );
531
532 /* Any remaining right-edge blocks are only copied. */
533 _Pragma( "loopbound min 1 max 1" )
534 for ( ; dst_blk_x < compptr_width_in_blocks; dst_blk_x++ ) {
535
536 dst_ptr = cjpeg_transupp_output_data4;
537 src_ptr = cjpeg_transupp_input4;
538 _Pragma( "loopbound min 64 max 64" )
539 do {
540 *dst_ptr++ = *src_ptr++;
541 i++;
542 } while ( i < DCTSIZE2 );
543 }
544 }
545 }
546 }
547 }
548}
549
550
551/*
552 Transverse transpose is equivalent to
553 1. 180 degree rotation;
554 2. Transposition;
555 or
556 1. Horizontal mirroring;
557 2. Transposition;
558 3. Horizontal mirroring.
559 These steps are merged into a single processing routine.
560*/
561void cjpeg_transupp_do_transverse( j_compress_ptr dstinfo )
562{
563 unsigned int MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x,
564 dst_blk_y;
565 int ci, i, j, offset_x, offset_y;
566 JCOEFPTR src_ptr, dst_ptr;
567
568 int compptr_h_samp_factor = 2;
569 int compptr_v_samp_factor = 8;
570 unsigned int compptr_height_in_blocks = 29;
571 unsigned int compptr_width_in_blocks = 19;
572
573
574 MCU_cols = dstinfo->image_width / ( dstinfo->max_h_samp_factor * DCTSIZE );
575 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
576
577 _Pragma( "loopbound min 3 max 3" )
578 for ( ci = 0; ci < dstinfo->num_components; ci++,
579 compptr_h_samp_factor = compptr_v_samp_factor = 1,
580 compptr_height_in_blocks = 15, compptr_width_in_blocks = 10 ) {
581
582 comp_width = MCU_cols * compptr_h_samp_factor;
583 comp_height = MCU_rows * compptr_v_samp_factor;
584
585 _Pragma( "loopbound min 4 max 15" )
586 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
587 dst_blk_y += compptr_v_samp_factor ) {
588 offset_y = 0;
589 _Pragma( "loopbound min 1 max 8" )
590 do {
591 dst_blk_x = 0;
592 _Pragma( "loopbound min 10 max 10" )
593 do {
594 offset_x = 0;
595 _Pragma( "loopbound min 1 max 2" )
596 for ( ; offset_x < compptr_h_samp_factor; offset_x++ ) {
597
598 if ( dst_blk_y < comp_height ) {
599 src_ptr = cjpeg_transupp_input5;
600
601 if ( dst_blk_x < comp_width ) {
602 /* Block is within the mirrorable area. */
603 dst_ptr = cjpeg_transupp_output_data5;
604
605 _Pragma( "loopbound min 4 max 4" )
606 for ( i = 0; i < DCTSIZE; i++ ) {
607 j = 0;
608 _Pragma( "loopbound min 4 max 4" )
609 for ( ; j < DCTSIZE; j++ ) {
610 if ( dst_blk_y < comp_width )
611 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
612 j++;
613 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
614 }
615 i++;
616 _Pragma( "loopbound min 4 max 4" )
617 for ( j = 0; j < DCTSIZE; j++ ) {
618 if ( dst_blk_y < comp_width )
619 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
620 j++;
621 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
622 }
623 }
624 } else {
625 /* Right-edge blocks are mirrored in y only */
626 dst_ptr = cjpeg_transupp_output_data5;
627 _Pragma( "loopbound min 8 max 8" )
628 for ( i = 0; i < DCTSIZE; i++ ) {
629 j = 0;
630 _Pragma( "loopbound min 4 max 4" )
631 for ( ; j < DCTSIZE; j++ ) {
632 if ( dst_blk_y < comp_width )
633 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
634 j++;
635 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
636 }
637 }
638 }
639 } else {
640 src_ptr = cjpeg_transupp_input5_2;
641
642 if ( dst_blk_x < comp_width ) {
643 /* Bottom-edge blocks are mirrored in x only */
644 dst_ptr = cjpeg_transupp_output_data5;
645
646 _Pragma( "loopbound min 4 max 4" )
647 for ( i = 0; i < DCTSIZE; i++ ) {
648 j = 0;
649 _Pragma( "loopbound min 8 max 8" )
650 for ( ; j < DCTSIZE; j++ )
651 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
652 i++;
653 _Pragma( "loopbound min 8 max 8" )
654 for ( j = 0; j < DCTSIZE; j++ )
655 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
656 }
657 } else {
658 /* At lower right corner, just transpose, no mirroring */
659 dst_ptr = cjpeg_transupp_output_data5;
660 _Pragma( "loopbound min 8 max 8" )
661 for ( i = 0; i < DCTSIZE; i++ )
662 j = 0;
663 _Pragma( "loopbound min 8 max 8" )
664 for ( ; j < DCTSIZE; j++ )
665 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
666 }
667 }
668 dst_blk_x += compptr_h_samp_factor;
669 }
670 } while ( dst_blk_x < compptr_width_in_blocks );
671 offset_y++;
672 } while ( offset_y < compptr_v_samp_factor );
673 }
674 }
675}
676
677
678/*
679 Main functions
680*/
681
682void _Pragma ( "entrypoint" ) cjpeg_transupp_main( void )
683{
684 cjpeg_transupp_dstinfo.image_width = 227;
685 cjpeg_transupp_dstinfo.image_height = 149;
686
687 cjpeg_transupp_do_flip_v( &cjpeg_transupp_dstinfo );
688
689 cjpeg_transupp_dstinfo.image_width = 149;
690 cjpeg_transupp_dstinfo.image_height = 227;
691
692 cjpeg_transupp_do_rot_90( &cjpeg_transupp_dstinfo );
693 cjpeg_transupp_do_rot_270( &cjpeg_transupp_dstinfo );
694
695 cjpeg_transupp_dstinfo.image_width = 227;
696 cjpeg_transupp_dstinfo.image_height = 149;
697
698 cjpeg_transupp_do_rot_180( &cjpeg_transupp_dstinfo );
699
700 cjpeg_transupp_dstinfo.image_width = 149;
701 cjpeg_transupp_dstinfo.image_height = 227;
702
703 cjpeg_transupp_do_transverse( &cjpeg_transupp_dstinfo );
704}
705
706
707int main(int argc, char **argv)
708{
709 SET_UP
710 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
711 START_LOOP
712 cjpeg_transupp_init();
713 cjpeg_transupp_main();
714 STOP_LOOP
715 }
716 WRITE_TO_FILE
717 return ( cjpeg_transupp_return() - 660 != 0 );
718}
diff --git a/all_pairs/source/cjpeg_transupp/jpeglib.h b/all_pairs/source/cjpeg_transupp/jpeglib.h
new file mode 100644
index 0000000..bb4c940
--- /dev/null
+++ b/all_pairs/source/cjpeg_transupp/jpeglib.h
@@ -0,0 +1,757 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: jpeglib
7
8 Author: Thomas G. Lane
9
10 Function: This file defines the application interface for the JPEG library.
11 Most applications using the library need only include this file, and perhaps
12 jerror.h if they want to know the exact error codes.
13
14 Source: MediaBench II
15 http://euler.slu.edu/~fritts/mediabench (mirror)
16
17 Original name: cjpeg
18
19 Changes: No major functional changes.
20
21 License: See the accompanying README file.
22
23*/
24
25
26#ifndef JPEGLIB_H
27#define JPEGLIB_H
28
29/*
30 Various constants determining the sizes of things.
31 All of these are specified by the JPEG standard, so don't change them if you
32 want to be compatible.
33*/
34
35/* The basic DCT block is 8x8 samples */
36#define DCTSIZE 8
37
38/* DCTSIZE squared; # of elements in a block */
39#define DCTSIZE2 64
40
41
42/*
43 Data structures for images (arrays of samples and of DCT coefficients).
44 On 80x86 machines, the image arrays are too big for near pointers, but the
45 pointer arrays can fit in near memory.
46*/
47
48/* ptr to one image row of pixel samples. */
49typedef unsigned char *JSAMPROW;
50
51/* ptr to some rows (a 2-D sample array) */
52typedef JSAMPROW *JSAMPARRAY;
53
54/* one block of coefficients */
55typedef signed char JBLOCK[DCTSIZE2];
56
57/* pointer to one row of coefficient blocks */
58typedef JBLOCK *JBLOCKROW;
59
60/* a 2-D array of coefficient blocks */
61typedef JBLOCKROW *JBLOCKARRAY;
62
63/* useful in a couple of places */
64typedef signed char *JCOEFPTR;
65
66
67/*
68 DCT coefficient quantization tables.
69*/
70
71typedef struct {
72 /* quantization step for each coefficient */
73 /*
74 This array gives the coefficient quantizers in natural array order (not the
75 zigzag order in which they are stored in a JPEG DQT marker).
76 CAUTION: IJG versions prior to v6a kept this array in zigzag order.
77 */
78 unsigned short quantval[ DCTSIZE2 ];
79
80 /* 1 when table has been output */
81 /*
82 This field is used only during compression. It's initialized 0 when the
83 table is created, and set 1 when it's been output to the file. You could
84 suppress output of a table by setting this to 1. (See jpeg_suppress_tables
85 for an example.)
86 */
87 int sent_table;
88} JQUANT_TBL;
89
90
91/*
92 Huffman coding tables.
93*/
94
95typedef struct {
96 /* These two fields directly represent the contents of a JPEG DHT marker */
97
98 /* bits[k] = # of symbols with codes of */
99 /* length k bits; bits[0] is unused */
100 unsigned char bits[ 17 ];
101
102 /* The symbols, in order of incr code length */
103 /*
104 This field is used only during compression. It's initialized 0 when the
105 table is created, and set 1 when it's been output to the file. You could
106 suppress output of a table by setting this to 1. (See jpeg_suppress_tables
107 for an example.)
108 */
109 unsigned char huffval[ 256 ];
110
111 /* 1 when table has been output */
112 int sent_table;
113} JHUFF_TBL;
114
115
116/*
117 Basic info about one component (color channel).
118*/
119
120typedef struct {
121 /*
122 These values are fixed over the whole image. For compression, they must be
123 supplied by parameter setup; for decompression, they are read from the SOF
124 marker.
125 */
126
127 /* identifier for this component (0..255) */
128 int component_id;
129
130 /* its index in SOF or cinfo->comp_info[] */
131 int component_index;
132
133 /* horizontal sampling factor (1..4) */
134 int h_samp_factor;
135
136 /* vertical sampling factor (1..4) */
137 int v_samp_factor;
138
139 /* quantization table selector (0..3) */
140 int quant_tbl_no;
141
142 /*
143 These values may vary between scans. For compression, they must be supplied
144 by parameter setup; for decompression, they are read from the SOS marker.
145 The decompressor output side may not use these variables.
146 */
147
148 /* DC entropy table selector (0..3) */
149 int dc_tbl_no;
150
151 /* AC entropy table selector (0..3) */
152 int ac_tbl_no;
153
154 /* Remaining fields should be treated as private by applications. */
155
156 /*
157 These values are computed during compression or decompression startup:
158 Component's size in DCT blocks. Any dummy blocks added to complete an MCU
159 are not counted; therefore these values do not depend on whether a scan is
160 interleaved or not.
161 */
162 unsigned int width_in_blocks;
163 unsigned int height_in_blocks;
164
165 /*
166 Size of a DCT block in samples. Always DCTSIZE for compression. For
167 decompression this is the size of the output from one DCT block, reflecting
168 any scaling we choose to apply during the IDCT step. Values of 1,2,4,8 are
169 likely to be supported. Note that different components may receive different
170 IDCT scalings.
171 */
172 int DCT_scaled_size;
173
174 /*
175 The downsampled dimensions are the component's actual, unpadded number of
176 samples at the main buffer (preprocessing/compression interface), thus
177 downsampled_width = ceil(image_width * Hi/Hmax) and similarly for height.
178 For decompression, IDCT scaling is included, so
179 downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
180 */
181
182 /* actual width in samples */
183 unsigned int downsampled_width;
184
185 /* actual height in samples */
186 unsigned int downsampled_height;
187
188 /*
189 This flag is used only for decompression. In cases where some of the
190 components will be ignored (eg grayscale output from YCbCr image), we can
191 skip most computations for the unused components.
192 */
193
194 /* do we need the value of this component? */
195 int component_needed;
196
197 /*
198 These values are computed before starting a scan of the component. The
199 decompressor output side may not use these variables.
200 */
201
202 /* number of blocks per MCU, horizontally */
203 int MCU_width;
204
205 /* number of blocks per MCU, vertically */
206 int MCU_height;
207
208 /* MCU_width * MCU_height */
209 int MCU_blocks;
210
211 /* MCU width in samples, MCU_width*DCT_scaled_size */
212 int MCU_sample_width;
213
214 /* # of non-dummy blocks across in last MCU */
215 int last_col_width;
216
217 /* # of non-dummy blocks down in last MCU */
218 int last_row_height;
219
220 /*
221 Saved quantization table for component; (void*)0 if none yet saved. See
222 jdinput.c comments about the need for this information. This field is
223 currently used only for decompression.
224 */
225 JQUANT_TBL *quant_table;
226
227 /* Private per-component storage for DCT or IDCT subsystem. */
228 void *dct_table;
229} jpeg_component_info;
230
231
232/*
233 The script for encoding a multiple-scan file is an array of these:
234*/
235
236typedef struct {
237 /* number of components encoded in this scan */
238 int comps_in_scan;
239
240 /* their SOF/comp_info[] indexes */
241 int component_index[ 4 ];
242
243 /* progressive JPEG spectral selection parms */
244 int Ss, Se;
245
246 /* progressive JPEG successive approx. parms */
247 int Ah, Al;
248} jpeg_scan_info;
249
250
251/*
252 Known color spaces.
253*/
254
255typedef enum {
256 /* error/unspecified */
257 JCS_UNKNOWN,
258
259 /* monochrome */
260 JCS_GRAYSCALE,
261
262 /* red/green/blue */
263 JCS_RGB,
264
265 /* Y/Cb/Cr (also known as YUV) */
266 JCS_YCbCr,
267
268 /* C/M/Y/K */
269 JCS_CMYK,
270
271 /* Y/Cb/Cr/K */
272 JCS_YCCK
273} J_COLOR_SPACE;
274
275
276/*
277 DCT/IDCT algorithm options.
278*/
279
280typedef enum {
281 /* slow but accurate integer algorithm */
282 JDCT_ISLOW,
283
284 /* faster, less accurate integer method */
285 JDCT_IFAST,
286
287 /* floating-point: accurate, fast on fast HW */
288 JDCT_FLOAT
289} J_DCT_METHOD;
290
291
292/*
293 Common fields between JPEG compression and decompression master structs.
294*/
295
296#define jpeg_common_fields \
297 /* Error handler module */\
298 struct jpeg_error_mgr *err; \
299 /* Memory manager module */\
300 struct jpeg_memory_mgr *mem; \
301 /* Progress monitor, or (void*)0 if none */\
302 struct jpeg_progress_mgr *progress; \
303 /* Available for use by application */\
304 void *client_data; \
305 /* So common code can tell which is which */\
306 int is_decompressor; \
307 /* For checking call sequence validity */\
308 int global_state
309
310
311/*
312 Routines that are to be used by both halves of the library are declared to
313 receive a pointer to this structure. There are no actual instances of
314 jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
315*/
316
317struct jpeg_common_struct {
318 /* Fields common to both master struct types */
319 jpeg_common_fields;
320
321 /*
322 Additional fields follow in an actual jpeg_compress_struct or
323 jpeg_decompress_struct. All three structs must agree on these initial
324 fields! (This would be a lot cleaner in C++.)
325 */
326};
327
328typedef struct jpeg_common_struct *j_common_ptr;
329typedef struct jpeg_compress_struct *j_compress_ptr;
330typedef struct jpeg_decompress_struct *j_decompress_ptr;
331
332
333/*
334 Master record for a compression instance
335*/
336
337struct jpeg_compress_struct {
338 /* Fields shared with jpeg_decompress_struct */
339 jpeg_common_fields;
340
341 /* Destination for compressed data */
342 struct jpeg_destination_mgr *dest;
343
344 /*
345 Description of source image --- these fields must be filled in by outer
346 application before starting compression. in_color_space must be correct
347 before you can even call jpeg_set_defaults().
348 */
349
350 /* input image width */
351 unsigned int image_width;
352
353 /* input image height */
354 unsigned int image_height;
355
356 /* # of color components in input image */
357 int input_components;
358
359 /* colorspace of input image */
360 J_COLOR_SPACE in_color_space;
361
362 /* image gamma of input image */
363 double input_gamma;
364
365 /*
366 Compression parameters --- these fields must be set before calling
367 jpeg_start_compress(). We recommend calling jpeg_set_defaults() to
368 initialize everything to reasonable defaults, then changing anything the
369 application specifically wants to change. That way you won't get burnt when
370 new parameters are added. Also note that there are several helper routines
371 to simplify changing parameters.
372 */
373
374 /* bits of precision in image data */
375 int data_precision;
376
377 /* # of color components in JPEG image */
378 int num_components;
379
380 /* colorspace of JPEG image */
381 J_COLOR_SPACE jpeg_color_space;
382
383 /* comp_info[i] describes component that appears i'th in SOF */
384 jpeg_component_info *comp_info;
385
386 /* ptrs to coefficient quantization tables, or (void*)0 if not defined */
387 JQUANT_TBL *quant_tbl_ptrs[ 4 ];
388
389 /* ptrs to Huffman coding tables, or (void*)0 if not defined */
390 JHUFF_TBL *dc_huff_tbl_ptrs[ 4 ];
391 JHUFF_TBL *ac_huff_tbl_ptrs[ 4 ];
392
393 /* L values for DC arith-coding tables */
394 unsigned char arith_dc_L[ 16 ];
395
396 /* U values for DC arith-coding tables */
397 unsigned char arith_dc_U[ 16 ];
398
399 /* Kx values for AC arith-coding tables */
400 unsigned char arith_ac_K[ 16 ];
401
402 /* # of entries in scan_info array */
403 int num_scans;
404
405 /*
406 script for multi-scan file, or (void*)0
407 The default value of scan_info is (void*)0, which causes a single-scan
408 sequential JPEG file to be emitted. To create a multi-scan file, set
409 num_scans and scan_info to point to an array of scan definitions.
410 */
411 const jpeg_scan_info *scan_info;
412
413 /* 1=caller supplies downsampled data */
414 int raw_data_in;
415
416 /* 1=arithmetic coding, 0=Huffman */
417 int arith_code;
418
419 /* 1=optimize entropy encoding parms */
420 int optimize_coding;
421
422 /* 1=first samples are cosited */
423 int CCIR601_sampling;
424
425 /* 1..100, or 0 for no input smoothing */
426 int smoothing_factor;
427
428 /* DCT algorithm selector */
429 J_DCT_METHOD dct_method;
430
431
432 /*
433 The restart interval can be specified in absolute MCUs by setting
434 restart_interval, or in MCU rows by setting restart_in_rows (in which case
435 the correct restart_interval will be figured for each scan).
436 */
437
438 /* MCUs per restart, or 0 for no restart */
439 unsigned int restart_interval;
440
441 /* if > 0, MCU rows per restart interval */
442 int restart_in_rows;
443
444
445 /*
446 Parameters controlling emission of special markers.
447 */
448
449 /* should a JFIF marker be written? */
450 int write_JFIF_header;
451
452 /* What to write for the JFIF version number */
453 unsigned char JFIF_major_version;
454 unsigned char JFIF_minor_version;
455
456 /*
457 These three values are not used by the JPEG code, merely copied into the
458 JFIF APP0 marker. density_unit can be 0 for unknown, 1 for dots/inch, or 2
459 for dots/cm. Note that the pixel aspect ratio is defined by
460 X_density/Y_density even when density_unit=0.
461 */
462
463 /* JFIF code for pixel size units */
464 unsigned char density_unit;
465
466 /* Horizontal pixel density */
467 unsigned short X_density;
468
469 /* Vertical pixel density */
470 unsigned short Y_density;
471
472 /* should an Adobe marker be written? */
473 int write_Adobe_marker;
474
475 /*
476 State variable: index of next scanline to be written to
477 jpeg_write_scanlines(). Application may use this to control its processing
478 loop, e.g., "while (next_scanline < image_height)".
479 */
480
481 /* 0 .. image_height-1 */
482 unsigned int next_scanline;
483
484
485 /*
486 Remaining fields are known throughout compressor, but generally should not
487 be touched by a surrounding application.
488 */
489
490 /*
491 These fields are computed during compression startup
492 */
493
494 /* 1 if scan script uses progressive mode */
495 int progressive_mode;
496
497 /* largest h_samp_factor */
498 int max_h_samp_factor;
499
500 /* largest v_samp_factor */
501 int max_v_samp_factor;
502
503 /*
504 # of iMCU rows to be input to coef ctlr
505 The coefficient controller receives data in units of MCU rows as defined for
506 fully interleaved scans (whether the JPEG file is interleaved or not). There
507 are v_samp_factor * DCTSIZE sample rows of each component in an "iMCU"
508 (interleaved MCU) row.
509 */
510 unsigned int total_iMCU_rows;
511
512 /*
513 These fields are valid during any one scan. They describe the components
514 and MCUs actually appearing in the scan.
515 */
516
517 /* # of JPEG components in this scan */
518 int comps_in_scan;
519
520 /* *cur_comp_info[i] describes component that appears i'th in SOS */
521 jpeg_component_info *cur_comp_info[ 4 ];
522
523 /* # of MCUs across the image */
524 unsigned int MCUs_per_row;
525
526 /* # of MCU rows in the image */
527 unsigned int MCU_rows_in_scan;
528
529 /* # of DCT blocks per MCU */
530 int blocks_in_MCU;
531
532 /*
533 MCU_membership[i] is index in cur_comp_info of component owning i'th block
534 in an MCU
535 */
536 int MCU_membership[ 10 ];
537
538 /* progressive JPEG parameters for scan */
539 int Ss, Se, Ah, Al;
540
541 /*
542 Links to compression subobjects (methods and private variables of modules)
543 */
544
545 struct jpeg_comp_master *master;
546 struct jpeg_c_main_controller *main;
547 struct jpeg_c_prep_controller *prep;
548 struct jpeg_c_coef_controller *coef;
549 struct jpeg_marker_writer *marker;
550 struct jpeg_color_converter *cconvert;
551 struct jpeg_downsampler *downsample;
552 struct jpeg_forward_dct *fdct;
553 struct jpeg_entropy_encoder *entropy;
554
555 /* workspace for jpeg_simple_progression */
556 jpeg_scan_info *script_space;
557
558 int script_space_size;
559};
560
561
562/*
563 "Object" declarations for JPEG modules that may be supplied or called directly
564 by the surrounding application. As with all objects in the JPEG library, these
565 structs only define the publicly visible methods and state variables of a
566 module. Additional private fields may exist after the public ones.
567*/
568
569/*
570 Error handler object
571*/
572
573struct jpeg_error_mgr {
574 /* Error exit handler: does not return to caller */
575 void ( *error_exit ) ( j_common_ptr cinfo );
576
577 /* Conditionally emit a trace or warning message */
578 void ( *emit_message ) ( j_common_ptr cinfo, int msg_level );
579
580 /* Routine that actually outputs a trace or error message */
581 void ( *output_message ) ( j_common_ptr cinfo );
582
583 /* Format a message string for the most recent JPEG error or message */
584 void ( *format_message ) ( j_common_ptr cinfo, char *buffer );
585
586 /* Reset error state variables at start of a new image */
587 void ( *reset_error_mgr ) ( j_common_ptr cinfo );
588
589 /*
590 The message ID code and any parameters are saved here. A message can have
591 one string parameter or up to 8 int parameters.
592 */
593 int msg_code;
594
595 union {
596 int i[ 8 ];
597 char s[ 80 ];
598 } msg_parm;
599
600
601 /*
602 Standard state variables for error facility
603 */
604
605 /* max msg_level that will be displayed */
606 int trace_level;
607
608 /*
609 For recoverable corrupt-data errors, we emit a warning message, but keep
610 going unless emit_message chooses to abort. emit_message should count
611 warnings in num_warnings. The surrounding application can check for bad data
612 by seeing if num_warnings is nonzero at the end of processing.
613 */
614
615 /* number of corrupt-data warnings */
616 long num_warnings;
617
618 /*
619 These fields point to the table(s) of error message strings. An application
620 can change the table pointer to switch to a different message list
621 (typically, to change the language in which errors are reported). Some
622 applications may wish to add additional error codes that will be handled by
623 the JPEG library error mechanism; the second table pointer is used for this
624 purpose.
625
626 First table includes all errors generated by JPEG library itself. Error
627 code 0 is reserved for a "no such error string" message.
628 */
629
630 /* Library errors */
631 const char *const *jpeg_message_table;
632
633 /* Table contains strings 0..last_jpeg_message */
634 int last_jpeg_message;
635
636 /*
637 Second table can be added by application (see cjpeg/djpeg for example). It
638 contains strings numbered first_addon_message..last_addon_message.
639 */
640
641 /* Non-library errors */
642 const char *const *addon_message_table;
643
644 /* code for first string in addon table */
645 int first_addon_message;
646
647 /* code for last string in addon table */
648 int last_addon_message;
649};
650
651
652/*
653 Progress monitor object
654*/
655
656struct jpeg_progress_mgr {
657 void ( *progress_monitor ) ( j_common_ptr cinfo );
658
659 /* work units completed in this pass */
660 long pass_counter;
661
662 /* total number of work units in this pass */
663 long pass_limit;
664
665 /* passes completed so far */
666 int completed_passes;
667
668 /* total number of passes expected */
669 int total_passes;
670};
671
672
673/*
674 Data destination object for compression
675*/
676
677struct jpeg_destination_mgr {
678 /* => next byte to write in buffer */
679 unsigned char *next_output_byte;
680
681 /* # of byte spaces remaining in buffer */
682 long unsigned int free_in_buffer;
683
684 void ( *init_destination ) ( j_compress_ptr cinfo );
685 int ( *empty_output_buffer ) ( j_compress_ptr cinfo );
686 void ( *term_destination ) ( j_compress_ptr cinfo );
687};
688
689
690/*
691 Memory manager object.
692 Allocates "small" objects (a few K total), "large" objects (tens of K), and
693 "really big" objects (virtual arrays with backing store if needed). The memory
694 manager does not allow individual objects to be freed; rather, each created
695 object is assigned to a pool, and whole pools can be freed at once. This is
696 faster and more convenient than remembering exactly what to free, especially
697 where malloc()/free() are not too speedy.
698 NB: alloc routines never return (void*)0. They exit to error_exit if not
699 successful.
700*/
701
702typedef struct jvirt_sarray_control *jvirt_sarray_ptr;
703typedef struct jvirt_barray_control *jvirt_barray_ptr;
704
705struct jpeg_memory_mgr {
706 /*
707 Method pointers
708 */
709 void *( *alloc_small ) (
710 j_common_ptr cinfo, int pool_id, long unsigned int sizeofobject );
711
712 void *( *alloc_large ) (
713 j_common_ptr cinfo, int pool_id, long unsigned int sizeofobject );
714
715 JSAMPARRAY ( *alloc_sarray ) (
716 j_common_ptr cinfo, int pool_id, unsigned int samplesperrow,
717 unsigned int numrows );
718
719 JBLOCKARRAY ( *alloc_barray )(
720 j_common_ptr cinfo, int pool_id, unsigned int blocksperrow,
721 unsigned int numrows );
722
723 jvirt_sarray_ptr ( *request_virt_sarray ) (
724 j_common_ptr cinfo, int pool_id, int pre_zero, unsigned int samplesperrow,
725 unsigned int numrows, unsigned int maxaccess );
726
727 jvirt_barray_ptr ( *request_virt_barray ) (
728 j_common_ptr cinfo, int pool_id, int pre_zero, unsigned int blocksperrow,
729 unsigned int numrows, unsigned int maxaccess );
730
731 void ( *realize_virt_arrays ) ( j_common_ptr cinfo );
732
733 JSAMPARRAY ( *access_virt_sarray ) (
734 j_common_ptr cinfo, jvirt_sarray_ptr ptr, unsigned int start_row,
735 unsigned int num_rows, int writable );
736
737 JBLOCKARRAY ( *access_virt_barray ) (
738 j_common_ptr cinfo, jvirt_barray_ptr ptr, unsigned int start_row,
739 unsigned int num_rows, int writable );
740
741 void ( *free_pool ) ( j_common_ptr cinfo, int pool_id );
742
743 void ( *self_destruct ) ( j_common_ptr cinfo );
744
745 /*
746 Limit on memory allocation for this JPEG object. (Note that this is merely
747 advisory, not a guaranteed maximum; it only affects the space used for
748 virtual-array buffers.) May be changed by outer application after creating
749 the JPEG object.
750 */
751 long max_memory_to_use;
752
753 /* Maximum allocation request accepted by alloc_large. */
754 long max_alloc_chunk;
755};
756
757#endif /* JPEGLIB_H */
diff --git a/all_pairs/source/cjpeg_wrbmp/ChangeLog.txt b/all_pairs/source/cjpeg_wrbmp/ChangeLog.txt
new file mode 100644
index 0000000..df21770
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/ChangeLog.txt
@@ -0,0 +1,104 @@
1File: cjpeg_jpeg6b_wrbmp.c
2Original provenience:
3
42017-04-18:
5- Annotated cjpeg_wrbmp_main as entry-point for timing analysis
6
72015-10-14:
8- Remove comment on line 1
9- Added generic TACLeBench header to line 1
10- Changed struct name to cjpeg_jpeg6b_wrbmp_name
11- Changed the global variable from {name} to cjpeg_jpeg6b_wrbmp_{name}
12- Changed the functions from {name} to cjpeg_jpeg6b_wrbmp_{name}
13- Removed code in comment
14- Added cjpeg_jpeg6b_wrbmp_main()
15- Added cjpeg_jpeg6b_wrbmp_return()
16- Added cjpeg_jpeg6b_wrbmp_init()
17- Added forward declaration of the functions
18- Removed unused variables: test_image[] and color_map[]
19- Applied Code Style
20
21File: input.c
22Original provenience:
23
242015-10-12:
25- Remove comment on line 1
26- Added generic TACLeBench header to line 1
27- Removed _jpeg6b_ from the prefix
28- Changed the global variable from colormap to cjpeg_jpeg6b_wrbmp_colormap
29- Removed unused variables: test_image[] and color_map[]
30- Moved initialization of cjpeg_jpeg6b_wrbmp_colormap to function. This function is called from cjpeg_jpeg6b_wrbmp_init function
31- Applied Code Style
32
33File: cderror.h
34Original provenience:
35
362015-10-12:
37- Remove comment on line 1
38- Added generic TACLeBench header to line 1
39- Removed _jpeg6b_ from the prefix
40- Changed JMESSAGE to CJPEG_JPEG6B_WRBMP_JMESSAGE
41- Changed JMAKE_ENUM_LIST to CJPEG_JPEG6B_WRBMP_JMAKE_ENUM_LIST
42- Applied Code Style
43
44
45File: cdjpeg.h
46Original provenience:
47
482015-10-12:
49- Remove comment on line 1
50- Added generic TACLeBench header to line 1
51- Rename structs and typedef to cjpeg_jpeg6b_wrbmp_{name}
52- Removed unused defines
53
54File: jconfig.h
55Original provenience:
56
572015-10-12:
58- Remove comment on line 1
59- Added generic TACLeBench header to line 1
60- Change defines to CJPEG_JPEG6B_WRBMP_{NAME}
61- Removed _jpeg6b_ from the prefix
62- Applied Code Style
63
64
65File: jerror.h
66Original provenience:
67
682015-10-12:
69- Remove comment on line 1
70- Added generic TACLeBench header to line 1
71- Removed error and warning defines
72- Removed _jpeg6b_ from the prefix
73- Applied Code Style
74
75
76File: jmorecfg.h
77Original provenience:
78
792015-10-12:
80- Remove comment on line 1
81- Added generic TACLeBench header to line 1
82- Removed unused comments
83- Removed _jpeg6b_ from the prefix
84- Removed unused defines
85- Removed unused typedefs
86- Applied Code Style
87
88
89File: jpeglib.h
90Original provenience:
91
922015-10-12:
93- Remove comment on line 1
94- Used define value directly
95- Remove unused typedefs, defines
96- Removed _jpeg6b_ from the prefix
97- Changed struct name to cjpeg_jpeg6b_wrbmp_{name}
98- Changed define {name} to cjpeg_jpeg6b_wrbmp_{name}
99- Added generic TACLeBench header to line 1
100- Applied Code Style
101
102
103
104
diff --git a/all_pairs/source/cjpeg_wrbmp/README b/all_pairs/source/cjpeg_wrbmp/README
new file mode 100644
index 0000000..fa69a18
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/README
@@ -0,0 +1,383 @@
1The Independent JPEG Group's JPEG software
2==========================================
3
4README for release 6a of 7-Feb-96
5=================================
6
7This distribution contains the sixth public release of the Independent JPEG
8Group's free JPEG software. You are welcome to redistribute this software and
9to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
10
11Serious users of this software (particularly those incorporating it into
12larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to
13our electronic mailing list. Mailing list members are notified of updates
14and have a chance to participate in technical discussions, etc.
15
16This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, Jim
17Boucher, Lee Crocker, Julian Minguillon, George Phillips, Davide Rossi,
18Ge' Weijers, and other members of the Independent JPEG Group.
19
20IJG is not affiliated with the official ISO JPEG standards committee.
21
22
23DOCUMENTATION ROADMAP
24=====================
25
26This file contains the following sections:
27
28OVERVIEW General description of JPEG and the IJG software.
29LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
30REFERENCES Where to learn more about JPEG.
31ARCHIVE LOCATIONS Where to find newer versions of this software.
32RELATED SOFTWARE Other stuff you should get.
33FILE FORMAT WARS Software *not* to get.
34TO DO Plans for future IJG releases.
35
36Other documentation files in the distribution are:
37
38User documentation:
39 install.doc How to configure and install the IJG software.
40 usage.doc Usage instructions for cjpeg, djpeg, jpegtran,
41 rdjpgcom, and wrjpgcom.
42 *.1 Unix-style man pages for programs (same info as usage.doc).
43 wizard.doc Advanced usage instructions for JPEG wizards only.
44 change.log Version-to-version change highlights.
45Programmer and internal documentation:
46 libjpeg.doc How to use the JPEG library in your own programs.
47 example.c Sample code for calling the JPEG library.
48 structure.doc Overview of the JPEG library's internal structure.
49 filelist.doc Road map of IJG files.
50 coderules.doc Coding style rules --- please read if you contribute code.
51
52Please read at least the files install.doc and usage.doc. Useful information
53can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
54ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
55
56If you want to understand how the JPEG code works, we suggest reading one or
57more of the REFERENCES, then looking at the documentation files (in roughly
58the order listed) before diving into the code.
59
60
61OVERVIEW
62========
63
64This package contains C software to implement JPEG image compression and
65decompression. JPEG (pronounced "jay-peg") is a standardized compression
66method for full-color and gray-scale images. JPEG is intended for compressing
67"real-world" scenes; line drawings, cartoons and other non-realistic images
68are not its strong suit. JPEG is lossy, meaning that the output image is not
69exactly identical to the input image. Hence you must not use JPEG if you
70have to have identical output bits. However, on typical photographic images,
71very good compression levels can be obtained with no visible change, and
72remarkably high compression levels are possible if you can tolerate a
73low-quality image. For more details, see the references, or just experiment
74with various compression settings.
75
76This software implements JPEG baseline, extended-sequential, and progressive
77compression processes. Provision is made for supporting all variants of these
78processes, although some uncommon parameter settings aren't implemented yet.
79For legal reasons, we are not distributing code for the arithmetic-coding
80variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting
81the hierarchical or lossless processes defined in the standard.
82
83We provide a set of library routines for reading and writing JPEG image files,
84plus two sample applications "cjpeg" and "djpeg", which use the library to
85perform conversion between JPEG and some other popular image file formats.
86The library is intended to be reused in other applications.
87
88In order to support file conversion and viewing software, we have included
89considerable functionality beyond the bare JPEG coding/decoding capability;
90for example, the color quantization modules are not strictly part of JPEG
91decoding, but they are essential for output to colormapped file formats or
92colormapped displays. These extra functions can be compiled out of the
93library if not required for a particular application. We have also included
94"jpegtran", a utility for lossless transcoding between different JPEG
95processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
96inserting and extracting textual comments in JFIF files.
97
98The emphasis in designing this software has been on achieving portability and
99flexibility, while also making it fast enough to be useful. In particular,
100the software is not intended to be read as a tutorial on JPEG. (See the
101REFERENCES section for introductory material.) Rather, it is intended to
102be reliable, portable, industrial-strength code. We do not claim to have
103achieved that goal in every aspect of the software, but we strive for it.
104
105We welcome the use of this software as a component of commercial products.
106No royalty is required, but we do ask for an acknowledgement in product
107documentation, as described under LEGAL ISSUES.
108
109
110LEGAL ISSUES
111============
112
113In plain English:
114
1151. We don't promise that this software works. (But if you find any bugs,
116 please let us know!)
1172. You can use this software for whatever you want. You don't have to pay us.
1183. You may not pretend that you wrote this software. If you use it in a
119 program, you must acknowledge somewhere in your documentation that
120 you've used the IJG code.
121
122In legalese:
123
124The authors make NO WARRANTY or representation, either express or implied,
125with respect to this software, its quality, accuracy, merchantability, or
126fitness for a particular purpose. This software is provided "AS IS", and you,
127its user, assume the entire risk as to its quality and accuracy.
128
129This software is copyright (C) 1991-1996, Thomas G. Lane.
130All Rights Reserved except as specified below.
131
132Permission is hereby granted to use, copy, modify, and distribute this
133software (or portions thereof) for any purpose, without fee, subject to these
134conditions:
135(1) If any part of the source code for this software is distributed, then this
136README file must be included, with this copyright and no-warranty notice
137unaltered; and any additions, deletions, or changes to the original files
138must be clearly indicated in accompanying documentation.
139(2) If only executable code is distributed, then the accompanying
140documentation must state that "this software is based in part on the work of
141the Independent JPEG Group".
142(3) Permission for use of this software is granted only if the user accepts
143full responsibility for any undesirable consequences; the authors accept
144NO LIABILITY for damages of any kind.
145
146These conditions apply to any software derived from or based on the IJG code,
147not just to the unmodified library. If you use our work, you ought to
148acknowledge us.
149
150Permission is NOT granted for the use of any IJG author's name or company name
151in advertising or publicity relating to this software or products derived from
152it. This software may be referred to only as "the Independent JPEG Group's
153software".
154
155We specifically permit and encourage the use of this software as the basis of
156commercial products, provided that all warranty or liability claims are
157assumed by the product vendor.
158
159
160ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
161sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
162ansi2knr.c is NOT covered by the above copyright and conditions, but instead
163by the usual distribution terms of the Free Software Foundation; principally,
164that you must include source code if you redistribute it. (See the file
165ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
166of any program generated from the IJG code, this does not limit you more than
167the foregoing paragraphs do.
168
169The configuration script "configure" was produced with GNU Autoconf. It
170is copyright by the Free Software Foundation but is freely distributable.
171
172It appears that the arithmetic coding option of the JPEG spec is covered by
173patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot
174legally be used without obtaining one or more licenses. For this reason,
175support for arithmetic coding has been removed from the free JPEG software.
176(Since arithmetic coding provides only a marginal gain over the unpatented
177Huffman mode, it is unlikely that very many implementations will support it.)
178So far as we are aware, there are no patent restrictions on the remaining
179code.
180
181WARNING: Unisys has begun to enforce their patent on LZW compression against
182GIF encoders and decoders. You will need a license from Unisys to use the
183included rdgif.c or wrgif.c files in a commercial or shareware application.
184At this time, Unisys is not enforcing their patent against freeware, so
185distribution of this package remains legal. However, we intend to remove
186GIF support from the IJG package as soon as a suitable replacement format
187becomes reasonably popular.
188
189We are required to state that
190 "The Graphics Interchange Format(c) is the Copyright property of
191 CompuServe Incorporated. GIF(sm) is a Service Mark property of
192 CompuServe Incorporated."
193
194
195REFERENCES
196==========
197
198We highly recommend reading one or more of these references before trying to
199understand the innards of the JPEG software.
200
201The best short technical introduction to the JPEG compression algorithm is
202 Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
203 Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
204(Adjacent articles in that issue discuss MPEG motion picture compression,
205applications of JPEG, and related topics.) If you don't have the CACM issue
206handy, a PostScript file containing a revised version of Wallace's article
207is available at ftp.uu.net, graphics/jpeg/wallace.ps.gz. The file (actually
208a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
209omits the sample images that appeared in CACM, but it includes corrections
210and some added material. Note: the Wallace article is copyright ACM and
211IEEE, and it may not be used for commercial purposes.
212
213A somewhat less technical, more leisurely introduction to JPEG can be found in
214"The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood
215City, CA), 1991, ISBN 1-55851-216-0. This book provides good explanations and
216example C code for a multitude of compression methods including JPEG. It is
217an excellent source if you are comfortable reading C code but don't know much
218about data compression in general. The book's JPEG sample code is far from
219industrial-strength, but when you are ready to look at a full implementation,
220you've got one here...
221
222The best full description of JPEG is the textbook "JPEG Still Image Data
223Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
224by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp.
225The book includes the complete text of the ISO JPEG standards (DIS 10918-1
226and draft DIS 10918-2). This is by far the most complete exposition of JPEG
227in existence, and we highly recommend it.
228
229The JPEG standard itself is not available electronically; you must order a
230paper copy through ISO or ITU. (Unless you feel a need to own a certified
231official copy, we recommend buying the Pennebaker and Mitchell book instead;
232it's much cheaper and includes a great deal of useful explanatory material.)
233In the USA, copies of the standard may be ordered from ANSI Sales at (212)
234642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI
235doesn't take credit card orders, but Global does.) It's not cheap: as of
2361992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
237shipping/handling. The standard is divided into two parts, Part 1 being the
238actual specification, while Part 2 covers compliance testing methods. Part 1
239is titled "Digital Compression and Coding of Continuous-tone Still Images,
240Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
24110918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
242Continuous-tone Still Images, Part 2: Compliance testing" and has document
243numbers ISO/IEC IS 10918-2, ITU-T T.83.
244
245Extensions to the original JPEG standard are defined in JPEG Part 3, a new ISO
246document. Part 3 is undergoing ISO balloting and is expected to be approved
247by the end of 1995; it will have document numbers ISO/IEC IS 10918-3, ITU-T
248T.84. IJG currently does not support any Part 3 extensions.
249
250The JPEG standard does not specify all details of an interchangeable file
251format. For the omitted details we follow the "JFIF" conventions, revision
2521.02. A copy of the JFIF spec is available from:
253 Literature Department
254 C-Cube Microsystems, Inc.
255 1778 McCarthy Blvd.
256 Milpitas, CA 95035
257 phone (408) 944-6300, fax (408) 944-6314
258A PostScript version of this document is available at ftp.uu.net, file
259graphics/jpeg/jfif.ps.gz. It can also be obtained by e-mail from the C-Cube
260mail server, netlib@c3.pla.ca.us. Send the message "send jfif_ps from jpeg"
261to the server to obtain the JFIF document; send the message "help" if you have
262trouble.
263
264The TIFF 6.0 file format specification can be obtained by FTP from sgi.com
265(192.48.153.1), file graphics/tiff/TIFF6.ps.Z; or you can order a printed
266copy from Aldus Corp. at (206) 628-6593. The JPEG incorporation scheme
267found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
268IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
269Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
270(Compression tag 7). Copies of this Note can be obtained from sgi.com or
271from ftp.uu.net:/graphics/jpeg/. It is expected that the next revision of
272the TIFF spec will replace the 6.0 JPEG design with the Note's design.
273Although IJG's own code does not support TIFF/JPEG, the free libtiff library
274uses our library to implement TIFF/JPEG per the Note. libtiff is available
275from sgi.com:/graphics/tiff/.
276
277
278ARCHIVE LOCATIONS
279=================
280
281The "official" archive site for this software is ftp.uu.net (Internet
282address 192.48.96.9). The most recent released version can always be found
283there in directory graphics/jpeg. This particular version will be archived
284as graphics/jpeg/jpegsrc.v6a.tar.gz. If you are on the Internet, you
285can retrieve files from ftp.uu.net by standard anonymous FTP. If you don't
286have FTP access, UUNET's archives are also available via UUCP; contact
287help@uunet.uu.net for information on retrieving files that way.
288
289Numerous Internet sites maintain copies of the UUNET files. However, only
290ftp.uu.net is guaranteed to have the latest official version.
291
292You can also obtain this software in DOS-compatible "zip" archive format from
293the SimTel archives (ftp.coast.net:/SimTel/msdos/graphics/), or on CompuServe
294in the Graphics Support forum (GO CIS:GRAPHSUP), library 12 "JPEG Tools".
295Again, these versions may sometimes lag behind the ftp.uu.net release.
296
297The JPEG FAQ (Frequently Asked Questions) article is a useful source of
298general information about JPEG. It is updated constantly and therefore is
299not included in this distribution. The FAQ is posted every two weeks to
300Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
301You can always obtain the latest version from the news.answers archive at
302rtfm.mit.edu. By FTP, fetch /pub/usenet/news.answers/jpeg-faq/part1 and
303.../part2. If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu
304with body
305 send usenet/news.answers/jpeg-faq/part1
306 send usenet/news.answers/jpeg-faq/part2
307
308
309RELATED SOFTWARE
310================
311
312Numerous viewing and image manipulation programs now support JPEG. (Quite a
313few of them use this library to do so.) The JPEG FAQ described above lists
314some of the more popular free and shareware viewers, and tells where to
315obtain them on Internet.
316
317If you are on a Unix machine, we highly recommend Jef Poskanzer's free
318PBMPLUS image software, which provides many useful operations on PPM-format
319image files. In particular, it can convert PPM images to and from a wide
320range of other formats. You can obtain this package by FTP from ftp.x.org
321(contrib/pbmplus*.tar.Z) or ftp.ee.lbl.gov (pbmplus*.tar.Z). There is also
322a newer update of this package called NETPBM, available from
323wuarchive.wustl.edu under directory /graphics/graphics/packages/NetPBM/.
324Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software
325is; you are likely to have difficulty making it work on any non-Unix machine.
326
327A different free JPEG implementation, written by the PVRG group at Stanford,
328is available from havefun.stanford.edu in directory pub/jpeg. This program
329is designed for research and experimentation rather than production use;
330it is slower, harder to use, and less portable than the IJG code, but it
331is easier to read and modify. Also, the PVRG code supports lossless JPEG,
332which we do not.
333
334
335FILE FORMAT WARS
336================
337
338Some JPEG programs produce files that are not compatible with our library.
339The root of the problem is that the ISO JPEG committee failed to specify a
340concrete file format. Some vendors "filled in the blanks" on their own,
341creating proprietary formats that no one else could read. (For example, none
342of the early commercial JPEG implementations for the Macintosh were able to
343exchange compressed files.)
344
345The file format we have adopted is called JFIF (see REFERENCES). This format
346has been agreed to by a number of major commercial JPEG vendors, and it has
347become the de facto standard. JFIF is a minimal or "low end" representation.
348We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
349Technical Note #2) for "high end" applications that need to record a lot of
350additional data about an image. TIFF/JPEG is fairly new and not yet widely
351supported, unfortunately.
352
353The upcoming JPEG Part 3 standard defines a file format called SPIFF.
354SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
355be able to read the most common variant of SPIFF. SPIFF has some technical
356advantages over JFIF, but its major claim to fame is simply that it is an
357official standard rather than an informal one. At this point it is unclear
358whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
359standard. IJG intends to support SPIFF once the standard is frozen, but we
360have not decided whether it should become our default output format or not.
361(In any case, our decoder will remain capable of reading JFIF indefinitely.)
362
363Various proprietary file formats incorporating JPEG compression also exist.
364We have little or no sympathy for the existence of these formats. Indeed,
365one of the original reasons for developing this free software was to help
366force convergence on common, open format standards for JPEG files. Don't
367use a proprietary file format!
368
369
370TO DO
371=====
372
373In future versions, we are considering supporting some of the upcoming JPEG
374Part 3 extensions --- principally, variable quantization and the SPIFF file
375format.
376
377Tuning the software for better behavior at low quality/high compression
378settings is also of interest. The current method for scaling the
379quantization tables is known not to be very good at low Q values.
380
381As always, speeding things up is high on our priority list.
382
383Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
diff --git a/all_pairs/source/cjpeg_wrbmp/cderror.h b/all_pairs/source/cjpeg_wrbmp/cderror.h
new file mode 100644
index 0000000..e479834
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/cderror.h
@@ -0,0 +1,140 @@
1
2/*
3
4 This program is part of the TACLeBench benchmark suite.
5 Version V 1.x
6
7 Name: cderror.h
8
9 Author: Thomas G. Lane.
10
11 This file is part of the Independent JPEG Group's software.
12 For conditions of distribution and use, see the accompanying README file.
13
14 This file defines the error and message codes for the cjpeg/djpeg
15 applications. These strings are not needed as part of the JPEG library
16 proper.
17 Edit this file to add new codes, or to translate the message strings to
18 some other language.
19
20 Source: Independent JPEG Group's software
21
22 Changes: no major functional changes
23
24 License: See the accompanying README file
25
26 */
27
28#ifndef CJPEG_WRBMP_JMESSAGE
29#ifndef CDERROR_H
30#define CDERROR_H
31/*First time through, define the enum list*/
32#define CJPEG_WRBMP_JMAKE_ENUM_LIST
33#else
34/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined*/
35#define CJPEG_WRBMP_JMESSAGE(code,string)
36#endif
37#endif
38
39#ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
40
41typedef enum {
42
43#define CJPEG_WRBMP_JMESSAGE(code,string) code ,
44
45#endif
46
47 CJPEG_WRBMP_JMESSAGE( JMSG_FIRSTADDONCODE = 1000, NULL ) //Must be first entry!
48
49 #ifdef CJPEG_WRBMP_BMP_SUPPORTED
50 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADCMAP, "Unsupported BMP colormap format" )
51 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported" )
52 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADHEADER, "Invalid BMP file: bad header length" )
53 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1" )
54 CJPEG_WRBMP_JMESSAGE( JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB" )
55 CJPEG_WRBMP_JMESSAGE( JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported" )
56 CJPEG_WRBMP_JMESSAGE( JERR_BMP_NOT, "Not a BMP file - does not start with BM" )
57 CJPEG_WRBMP_JMESSAGE( JTRC_BMP, "%ux%u 24-bit BMP image" )
58 CJPEG_WRBMP_JMESSAGE( JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image" )
59 CJPEG_WRBMP_JMESSAGE( JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image" )
60 CJPEG_WRBMP_JMESSAGE( JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image" )
61 #endif
62
63 #ifdef CJPEG_WRBMP_GIF_SUPPORTED
64 CJPEG_WRBMP_JMESSAGE( JERR_GIF_BUG, "GIF output got confused" )
65 CJPEG_WRBMP_JMESSAGE( JERR_GIF_CODESIZE, "Bogus GIF codesize %d" )
66 CJPEG_WRBMP_JMESSAGE( JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB" )
67 CJPEG_WRBMP_JMESSAGE( JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file" )
68 CJPEG_WRBMP_JMESSAGE( JERR_GIF_NOT, "Not a GIF file" )
69 CJPEG_WRBMP_JMESSAGE( JTRC_GIF, "%ux%ux%d GIF image" )
70 CJPEG_WRBMP_JMESSAGE( JTRC_GIF_BADVERSION,
71 "Warning: unexpected GIF version number '%c%c%c'" )
72 CJPEG_WRBMP_JMESSAGE( JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x" )
73 CJPEG_WRBMP_JMESSAGE( JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input" )
74 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_BADDATA, "Corrupt data in GIF file" )
75 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring" )
76 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_ENDCODE, "Premature end of GIF image" )
77 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_NOMOREDATA, "Ran out of GIF bits" )
78 #endif
79
80 #ifdef CJPEG_WRBMP_PPM_SUPPORTED
81 CJPEG_WRBMP_JMESSAGE( JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB" )
82 CJPEG_WRBMP_JMESSAGE( JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file" )
83 CJPEG_WRBMP_JMESSAGE( JERR_PPM_NOT, "Not a PPM/PGM file" )
84 CJPEG_WRBMP_JMESSAGE( JTRC_PGM, "%ux%u PGM image" )
85 CJPEG_WRBMP_JMESSAGE( JTRC_PGM_TEXT, "%ux%u text PGM image" )
86 CJPEG_WRBMP_JMESSAGE( JTRC_PPM, "%ux%u PPM image" )
87 CJPEG_WRBMP_JMESSAGE( JTRC_PPM_TEXT, "%ux%u text PPM image" )
88 #endif
89
90 #ifdef RLE_SUPPORTED
91 CJPEG_WRBMP_JMESSAGE( JERR_RLE_BADERROR, "Bogus error code from RLE library" )
92 CJPEG_WRBMP_JMESSAGE( JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB" )
93 CJPEG_WRBMP_JMESSAGE( JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE" )
94 CJPEG_WRBMP_JMESSAGE( JERR_RLE_EMPTY, "Empty RLE file" )
95 CJPEG_WRBMP_JMESSAGE( JERR_RLE_EOF, "Premature EOF in RLE header" )
96 CJPEG_WRBMP_JMESSAGE( JERR_RLE_MEM, "Insufficient memory for RLE header" )
97 CJPEG_WRBMP_JMESSAGE( JERR_RLE_NOT, "Not an RLE file" )
98 CJPEG_WRBMP_JMESSAGE( JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE" )
99 CJPEG_WRBMP_JMESSAGE( JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup" )
100 CJPEG_WRBMP_JMESSAGE( JTRC_RLE, "%ux%u full-color RLE file" )
101 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d" )
102 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_GRAY, "%ux%u grayscale RLE file" )
103 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d" )
104 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d" )
105 #endif
106
107 #ifdef CJPEG_WRBMP_TARGA_SUPPORTED
108 CJPEG_WRBMP_JMESSAGE( JERR_TGA_BADCMAP, "Unsupported Targa colormap format" )
109 CJPEG_WRBMP_JMESSAGE( JERR_TGA_BADPARMS, "Invalid or unsupported Targa file" )
110 CJPEG_WRBMP_JMESSAGE( JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB" )
111 CJPEG_WRBMP_JMESSAGE( JTRC_TGA, "%ux%u RGB Targa image" )
112 CJPEG_WRBMP_JMESSAGE( JTRC_TGA_GRAY, "%ux%u grayscale Targa image" )
113 CJPEG_WRBMP_JMESSAGE( JTRC_TGA_MAPPED, "%ux%u colormapped Targa image" )
114 #else
115 CJPEG_WRBMP_JMESSAGE( JERR_TGA_NOTCOMP, "Targa support was not compiled" )
116 #endif
117
118 CJPEG_WRBMP_JMESSAGE( JERR_BAD_CMAP_FILE,
119 "Color map file is invalid or of unsupported format" )
120 CJPEG_WRBMP_JMESSAGE( JERR_TOO_MANY_COLORS,
121 "Output file format cannot handle %d colormap entries" )
122 CJPEG_WRBMP_JMESSAGE( JERR_UNGETC_FAILED, "ungetc failed" )
123 #ifdef CJPEG_WRBMP_TARGA_SUPPORTED
124 CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_FORMAT,
125 "Unrecognized input file format --- perhaps you need -targa" )
126 #else
127 CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_FORMAT, "Unrecognized input file format" )
128 #endif
129 CJPEG_WRBMP_JMESSAGE( JERR_UNSUPPORTED_FORMAT, "Unsupported output file format" )
130
131 #ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
132
133 JMSG_LASTADDONCODE
134} CJPEG_WRBMP_ADDON_MESSAGE_CODE;
135
136#undef CJPEG_WRBMP_JMAKE_ENUM_LIST
137 #endif
138
139/* Zap JMESSAGE macro so that future re-inclusions do nothing by default*/
140#undef CJPEG_WRBMP_JMESSAGE
diff --git a/all_pairs/source/cjpeg_wrbmp/cdjpeg.h b/all_pairs/source/cjpeg_wrbmp/cdjpeg.h
new file mode 100644
index 0000000..6c3fc7b
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/cdjpeg.h
@@ -0,0 +1,105 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: cdjpeg.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 This file contains common declarations for the sample applications
14 cjpeg and djpeg. It is NOT used by the core JPEG library.
15
16 Source: Independent JPEG Group's software
17
18 Changes: no major functional changes
19
20 License: See the accompanying README file
21
22*/
23#ifndef CDJPEG_H
24#define CDJPEG_H
25
26#define CJPEG_WRBMP_JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */
27#define CJPEG_WRBMP_JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
28
29#include "jpeglib.h"
30#include "jerror.h" /* get library error codes too */
31#include "cderror.h" /* get application-specific error codes */
32
33typedef struct cjpeg_wrbmp_cjpeg_source_struct
34 *cjpeg_wrbmp_cjpeg_source_ptr;
35
36struct cjpeg_wrbmp_cjpeg_source_struct {
37 CJPEG_WRBMP_JMETHOD( void, start_input,
38 ( cjpeg_wrbmp_j_compress_ptr cinfo,
39 cjpeg_wrbmp_cjpeg_source_ptr sinfo ) );
40 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JDIMENSION, get_pixel_rows,
41 ( cjpeg_wrbmp_j_compress_ptr cinfo,
42 cjpeg_wrbmp_cjpeg_source_ptr sinfo ) );
43 CJPEG_WRBMP_JMETHOD( void, finish_input,
44 ( cjpeg_wrbmp_j_compress_ptr cinfo,
45 cjpeg_wrbmp_cjpeg_source_ptr sinfo ) );
46
47 CJPEG_WRBMP_FILE *input_file;
48
49 CJPEG_WRBMP_JSAMPARRAY buffer;
50 CJPEG_WRBMP_JDIMENSION buffer_height;
51};
52
53
54typedef struct cjpeg_wrbmp_djpeg_dest_struct
55 *cjpeg_wrbmp_djpeg_dest_ptr;
56
57struct cjpeg_wrbmp_djpeg_dest_struct {
58 CJPEG_WRBMP_JMETHOD( void, start_output,
59 ( cjpeg_wrbmp_j_decompress_ptr cinfo,
60 cjpeg_wrbmp_djpeg_dest_ptr dinfo ) );
61 /* Emit the specified number of pixel rows from the buffer. */
62 CJPEG_WRBMP_JMETHOD( void, put_pixel_rows,
63 ( cjpeg_wrbmp_j_decompress_ptr cinfo,
64 cjpeg_wrbmp_djpeg_dest_ptr dinfo,
65 CJPEG_WRBMP_JDIMENSION rows_supplied ) );
66 /* Finish up at the end of the image. */
67 CJPEG_WRBMP_JMETHOD( void, finish_output,
68 ( cjpeg_wrbmp_j_decompress_ptr cinfo,
69 cjpeg_wrbmp_djpeg_dest_ptr dinfo ) );
70
71 /* Target file spec; filled in by djpeg.c after object is created. */
72 CJPEG_WRBMP_FILE *output_file;
73
74 /* Output pixel-row buffer. Created by module init or start_output.
75 Width is cinfo->output_width * cinfo->output_components;
76 height is buffer_height.
77 */
78 CJPEG_WRBMP_JSAMPARRAY buffer;
79 CJPEG_WRBMP_JDIMENSION buffer_height;
80} ;
81
82
83
84/*
85 cjpeg/djpeg may need to perform extra passes to convert to or from
86 the source/destination file format. The JPEG library does not know
87 about these passes, but we'd like them to be counted by the progress
88 monitor. We use an expanded progress monitor object to hold the
89 additional pass count.
90*/
91
92struct cjpeg_wrbmp_cdjpeg_progress_mgr {
93 struct cjpeg_wrbmp_jpeg_progress_mgr
94 pub; /* fields known to JPEG library */
95 int completed_extra_passes; /* extra passes completed */
96 int total_extra_passes; /* total extra */
97 /* last printed percentage stored here to avoid multiple printouts */
98 int percent_done;
99};
100
101typedef struct cjpeg_wrbmp_cdjpeg_progress_mgr
102 *cjpeg_wrbmp_cd_progress_ptr;
103
104#endif
105
diff --git a/all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c b/all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c
new file mode 100644
index 0000000..7bef7ab
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c
@@ -0,0 +1,225 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: cjpeg_jpeg6b_wrbmp.c
7
8 Author: Thomas G. Lane.
9
10 Function: This file contains routines to write output images in Microsoft "BMP"
11 format (MS Windows 3.x and OS/2 1.x flavors).
12 Either 8-bit colormapped or 24-bit full-color format can be written.
13 No compression is supported.
14
15 These routines may need modification for non-Unix environments or
16 specialized applications. As they stand, they assume output to
17 an ordinary stdio stream.
18
19 Source: Independent JPEG Group's software
20
21 Changes: a brief summary of major functional changes (not formatting)
22
23 License: See the accompanying README file
24
25*/
26
27#include "../extra.h"
28#include "cdjpeg.h"
29
30#ifdef CJPEG_WRBMP_BMP_SUPPORTED
31
32/*
33 Declaration of global variables
34*/
35typedef struct {
36 struct cjpeg_wrbmp_djpeg_dest_struct pub; /* public fields */
37 cjpeg_wrbmp_boolean is_os2; /* saves the OS2 format request flag */
38 cjpeg_wrbmp_jvirt_sarray_ptr
39 whole_image; /* needed to reverse row order */
40 CJPEG_WRBMP_JDIMENSION data_width; /* JSAMPLEs per row */
41 CJPEG_WRBMP_JDIMENSION
42 row_width; /* physical width of one row in the BMP file */
43 int pad_bytes; /* number of padding bytes needed per row */
44 CJPEG_WRBMP_JDIMENSION
45 cur_output_row; /* next row# to write to virtual array */
46} cjpeg_wrbmp_bmp_dest_struct;
47
48typedef cjpeg_wrbmp_bmp_dest_struct *cjpeg_wrbmp_bmp_dest_ptr;
49extern unsigned char cjpeg_wrbmp_colormap[3][256];
50unsigned char cjpeg_wrbmp_output_array[6144];
51unsigned char *cjpeg_wrbmp_jpeg_stream /*= cjpeg_jpeg6b_wrbmp_output_array*/;
52int cjpeg_wrbmp_checksum;
53
54struct cjpeg_wrbmp_jpeg_decompress_struct
55 cjpeg_wrbmp_jpeg_dec_1;
56struct cjpeg_wrbmp_jpeg_decompress_struct
57 cjpeg_wrbmp_jpeg_dec_2;
58struct cjpeg_wrbmp_djpeg_dest_struct
59 cjpeg_wrbmp_djpeg_dest;
60cjpeg_wrbmp_bmp_dest_struct cjpeg_wrbmp_bmp_dest;
61
62/*
63 Forward declaration of functions
64*/
65void cjpeg_wrbmp_initInput( void );
66void cjpeg_wrbmp_finish_output_bmp( cjpeg_wrbmp_j_decompress_ptr cinfo);
67void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr
68 cinfo,
69 int map_colors, int map_entry_size,
70 int cMap );
71int cjpeg_wrbmp_putc_modified( int character );
72void cjpeg_wrbmp_init();
73void cjpeg_wrbmp_main();
74int cjpeg_wrbmp_return();
75//int main();
76
77/*
78 Initialization functions
79*/
80void cjpeg_wrbmp_init()
81{
82 cjpeg_wrbmp_initInput();
83
84 cjpeg_wrbmp_jpeg_dec_1.progress = 0;
85 cjpeg_wrbmp_jpeg_dec_1.output_height = 30;
86 cjpeg_wrbmp_jpeg_dec_1.actual_number_of_colors = 256;
87 cjpeg_wrbmp_jpeg_dec_1.out_color_components = 2;
88
89 cjpeg_wrbmp_jpeg_dec_2.progress = 0;
90 cjpeg_wrbmp_jpeg_dec_2.output_height = 30;
91 cjpeg_wrbmp_jpeg_dec_2.actual_number_of_colors = 256;
92 cjpeg_wrbmp_jpeg_dec_2.out_color_components = 3;
93
94 cjpeg_wrbmp_jpeg_stream = cjpeg_wrbmp_output_array;
95
96 cjpeg_wrbmp_checksum = 0;
97}
98
99/*
100 Calculation functions
101*/
102int cjpeg_wrbmp_putc_modified( int character )
103{
104 *( cjpeg_wrbmp_jpeg_stream ) = character;
105
106 ++cjpeg_wrbmp_jpeg_stream;
107
108 cjpeg_wrbmp_checksum += character;
109
110 return character;
111}
112
113void cjpeg_wrbmp_finish_output_bmp( cjpeg_wrbmp_j_decompress_ptr cinfo )
114{
115 CJPEG_WRBMP_JDIMENSION row;
116 cjpeg_wrbmp_cd_progress_ptr progress =
117 ( cjpeg_wrbmp_cd_progress_ptr ) cinfo->progress;
118
119 // Write the file body from our virtual array
120 _Pragma( "loopbound min 30 max 30" )
121 for ( row = cinfo->output_height; row > 0; --row ) {
122 if ( progress != 0 ) {
123 progress->pub.pass_counter = ( long )( cinfo->output_height - row );
124 progress->pub.pass_limit = ( long ) cinfo->output_height;
125 }
126 }
127
128 if ( progress != 0 )
129 progress->completed_extra_passes++;
130 }
131
132void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr
133 cinfo,
134 int map_colors, int map_entry_size, int cMap )
135{
136
137 int num_colors = cinfo->actual_number_of_colors;
138 int i;
139
140 if ( cMap != 0 ) {
141
142 if ( cinfo->out_color_components == 3 ) {
143 // Normal case with RGB colormap
144 _Pragma( "loopbound min 256 max 256" )
145 for ( i = 0; i < num_colors; i++ ) {
146 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
147 cjpeg_wrbmp_colormap[2][i] ) );
148 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
149 cjpeg_wrbmp_colormap[1][i] ) );
150 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
151 cjpeg_wrbmp_colormap[0][i] ) );
152
153 if ( map_entry_size == 4 )
154 cjpeg_wrbmp_putc_modified( 0 );
155 }
156 } else {
157 // Grayscale colormap (only happens with grayscale quantization)
158 _Pragma( "loopbound min 256 max 256" )
159 for ( i = 0; i < num_colors; i++ ) {
160
161 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
162 cjpeg_wrbmp_colormap[2][i] ) );
163 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
164 cjpeg_wrbmp_colormap[1][i] ) );
165 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
166 cjpeg_wrbmp_colormap[0][i] ) );
167
168 if ( map_entry_size == 4 )
169 cjpeg_wrbmp_putc_modified( 0 );
170 }
171 }
172 } else {
173 // If no colormap, must be grayscale data. Generate a linear "map".
174 _Pragma( "loopbound min 256 max 256" )
175 for ( i = 0; i < 256; i++ ) {
176 cjpeg_wrbmp_putc_modified( i );
177 cjpeg_wrbmp_putc_modified( i );
178 cjpeg_wrbmp_putc_modified( i );
179
180 if ( map_entry_size == 4 )
181 cjpeg_wrbmp_putc_modified( 0 );
182 }
183 }
184
185 // Pad colormap with zeros to ensure specified number of colormap entries.
186 _Pragma( "loopbound min 512 max 512" )
187 for ( ; i < map_colors; i++ ) {
188 cjpeg_wrbmp_putc_modified( 0 );
189 cjpeg_wrbmp_putc_modified( 0 );
190 cjpeg_wrbmp_putc_modified( 0 );
191
192 if ( map_entry_size == 4 )
193 cjpeg_wrbmp_putc_modified( 0 );
194 }
195}
196
197void _Pragma( "entrypoint" ) cjpeg_wrbmp_main()
198{
199 cjpeg_wrbmp_finish_output_bmp( &cjpeg_wrbmp_jpeg_dec_1);
200 cjpeg_wrbmp_write_colormap( &cjpeg_wrbmp_jpeg_dec_1, 768, 4, 1 );
201
202 cjpeg_wrbmp_finish_output_bmp( &cjpeg_wrbmp_jpeg_dec_2 );
203 cjpeg_wrbmp_write_colormap( &cjpeg_wrbmp_jpeg_dec_2, 768, 4, 1 );
204}
205
206int cjpeg_wrbmp_return()
207{
208 return (cjpeg_wrbmp_checksum + (-209330) ) != 0;
209}
210
211int main(int argc, char **argv)
212{
213 SET_UP
214 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
215 START_LOOP
216 cjpeg_wrbmp_init();
217 cjpeg_wrbmp_main();
218 STOP_LOOP
219 }
220 WRITE_TO_FILE
221 return ( cjpeg_wrbmp_return() );
222}
223
224#endif /* BMP_SUPPORTED */
225
diff --git a/all_pairs/source/cjpeg_wrbmp/input.c b/all_pairs/source/cjpeg_wrbmp/input.c
new file mode 100644
index 0000000..08dec28
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/input.c
@@ -0,0 +1,79 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: input.c
7
8 Author: Thomas G. Lane.
9
10 Function: Input variables for the cjpeg_jpeg6b_wrbmp.c
11
12 Source: Independent JPEG Group's software
13
14 Changes: no major functional changes
15
16 License: See the accompanying README file
17
18*/
19
20unsigned char cjpeg_wrbmp_colormap[3][256];
21
22void cjpeg_wrbmp_initInput( void )
23{
24 int i, j;
25 volatile unsigned char tmp[3][256] = {{44 , 105 , 153 , 71 , 151 , 160 , 188 , 90 , 209 , 131 ,
26 221 , 114 , 93 , 124 , 208 , 207 , 218 , 54 , 145 , 113 , 153 , 239 , 226 , 83 , 243 , 151 ,
27 98 , 67 , 114 , 153 , 83 , 186 , 116 , 72 , 188 , 190 , 109 , 162 , 218 , 133 , 208 , 209,
28 115 , 251 , 135 , 89 , 143 , 226 , 230 , 246 , 152 , 243 , 152 , 115 , 180 , 78 , 246 , 164,
29 250 , 117 , 76 , 150 , 152 , 188 , 251 , 195 , 127 , 111 , 225 , 208 , 94 , 93 , 143 , 131,
30 201 , 211 , 99 , 93 , 190 , 157 , 121 , 240 , 117 , 185 , 167 , 137 , 152 , 188 , 250 , 59,
31 248 , 245 , 115 , 240 , 192 , 209 , 143 , 136 , 98 , 224 , 167 , 135 , 132 , 189 , 72 , 249,
32 205 , 44 , 106 , 96 , 147 , 247 , 249 , 228 , 224 , 249 , 190 , 112 , 135 , 168 , 95 , 205,
33 171 , 58 , 112 , 79 , 206 , 75 , 242 , 188 , 189 , 225 , 185 , 81 , 221 , 153 , 244 , 198,
34 171 , 163 , 159 , 209 , 240 , 138 , 148 , 207 , 166 , 192 , 188 , 151 , 98 , 190 , 209 , 154,
35 225 , 72 , 96 , 249 , 191 , 223 , 207 , 163 , 207 , 133 , 251 , 183 , 135 , 137 , 159 , 247,
36 167 , 83 , 123 , 199 , 203 , 144 , 142 , 237 , 77 , 128 , 117 , 169 , 202 , 136 , 128 , 188,
37 168 , 55 , 222 , 169 , 116 , 60 , 75 , 175 , 102 , 217 , 168 , 185 , 189 , 225 , 125 , 192,
38 112 , 111 , 168 , 239 , 225 , 168 , 97 , 129 , 190 , 175 , 169 , 225 , 170 , 226 , 225 , 226,
39 224 , 134 , 106 , 250 , 222 , 148 , 241 , 168 , 166 , 160 , 95 , 190 , 102 , 180 , 193 , 111,
40 151 , 165 , 171 , 200 , 52 , 134 , 169 , 223 , 166 , 225 , 169 , 111 , 185 , 109 , 56 , 244,
41 157 , 250 , 226 , 231 , 119 , 188 },{42 , 143 , 46 , 91 , 84 , 201 , 140 , 91 , 82 , 140 , 31,
42 88 , 44 , 171 , 57 , 115 , 206 , 59 , 145 , 117 , 116 , 53 , 232 , 117 , 80 , 60 , 66 , 64,
43 117 , 174 , 89 , 178 , 147 , 63 , 83 , 59 , 103 , 139 , 211 , 64 , 68 , 98 , 118 , 53 , 119,
44 90 , 161 , 232 , 171 , 98 , 176 , 236 , 118 , 157 , 180 , 77 , 114 , 88 , 28 , 119 , 40 , 97,
45 69 , 189 , 252 , 225 , 119 , 96 , 219 , 84 , 82 , 105 , 158 , 49 , 200 , 61 , 117 , 78 , 63,
46 147 , 140 , 69 , 108 , 90 , 161 , 105 , 190 , 114 , 84 , 76 , 70 , 43 , 156 , 222 , 96 , 72,
47 143 , 90 , 105 , 56 , 144 , 78 , 129 , 35 , 66 , 101 , 100 , 49 , 105 , 130 , 160 , 239 , 129,
48 141 , 83 , 43 , 68 , 106 , 132 , 83 , 92 , 130 , 175 , 63 , 131 , 79 , 192 , 105 , 57 , 160,
49 118 , 162 , 141 , 78 , 192 , 128 , 206 , 201 , 203 , 162 , 159 , 163 , 221 , 183 , 157 , 177,
50 189 , 192 , 129 , 130 , 54 , 104 , 45 , 101 , 252 , 52 , 91 , 177 , 49 , 221 , 116 , 111 , 143,
51 92 , 142 , 159 , 131 , 173 , 61 , 159 , 173 , 81 , 129 , 214 , 213 , 145 , 143 , 232 , 67,
52 145 , 130 , 99 , 237 , 110 , 160 , 131 , 67 , 50 , 129 , 131 , 127 , 76 , 92 , 203 , 96 , 206,
53 176 , 180 , 85 , 99 , 162 , 118 , 64 , 78 , 190 , 191 , 45 , 101 , 129 , 58 , 72 , 211 , 49,
54 115 , 115 , 85 , 61 , 100 , 116 , 107 , 143 , 117 , 219 , 154 , 225 , 174 , 160 , 163 , 119,
55 190 , 106 , 186 , 49 , 45 , 177 , 147 , 85 , 138 , 42 , 174 , 59 , 68 , 120 , 71 , 129 , 56,
56 149 , 97 , 68 , 88 , 148 , 60 , 239 , 179 , 149 , 104},{44 , 76 , 37 , 56 , 76 , 152 , 122,
57 153 , 77 , 191 , 41 , 76 , 39 , 97 , 46 , 109 , 172 , 43 , 116 , 91 , 102 , 49 , 201 , 68 , 88,
58 45 , 53 , 95 , 160 , 175 , 102 , 164 , 116 , 50 , 76 , 45 , 86 , 189 , 216 , 50 , 61 , 93 , 196,
59 91 , 100 , 58 , 116 , 223 , 166 , 102 , 126 , 221 , 158 , 86 , 235 , 55 , 113 , 120 , 52 , 115,
60 42 , 86 , 55 , 165 , 247 , 194 , 160 , 108 , 170 , 108 , 98 , 77 , 168 , 42 , 179 , 70 , 96,
61 62 , 71 , 216 , 100 , 71 , 155 , 121 , 146 , 86 , 134 , 105 , 114 , 49 , 100 , 50 , 119 , 218,
62 95 , 81 , 220 , 78 , 102 , 50 , 125 , 68 , 170 , 36 , 62 , 119 , 129 , 44 , 151 , 72 , 143,
63 241 , 131 , 137 , 79 , 73 , 55 , 122 , 204 , 73 , 74 , 131 , 221 , 53 , 89 , 72 , 178 , 60 , 64,
64 145 , 157 , 156 , 177 , 101 , 180 , 112 , 194 , 206 , 178 , 168 , 221 , 153 , 201 , 119 , 222,
65 165 , 188 , 212 , 117 , 180 , 45 , 134 , 42 , 130 , 229 , 47 , 107 , 172 , 40 , 221 , 146,
66 132 , 138 , 110 , 144 , 188 , 112 , 132 , 64 , 162 , 145 , 140 , 200 , 181 , 215 , 139 , 197,
67 183 , 106 , 126 , 116 , 89 , 204 , 152 , 123 , 161 , 52 , 46 , 131 , 167 , 173 , 62 , 70 , 151,
68 151 , 197 , 177 , 184 , 96 , 97 , 101 , 130 , 54 , 63 , 141 , 185 , 45 , 126 , 96 , 46 , 71,
69 172 , 38 , 114 , 100 , 106 , 69 , 118 , 138 , 127 , 99 , 127 , 198 , 204 , 242 , 248 , 197,
70 241 , 74 , 189 , 178 , 252 , 65 , 45 , 148 , 145 , 97 , 168 , 45 , 111 , 43 , 64 , 164 , 80,
71 113 , 47 , 136 , 83 , 42 , 91 , 197 , 95 , 222 , 167 , 92 , 98}};
72
73 for ( i = 0; i < 3; i++ ) {
74 for ( j = 0; j < 256; j++ )
75 {
76 cjpeg_wrbmp_colormap[i][j] = tmp[i][j];
77 }
78 }
79}
diff --git a/all_pairs/source/cjpeg_wrbmp/jconfig.h b/all_pairs/source/cjpeg_wrbmp/jconfig.h
new file mode 100644
index 0000000..9c73988
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/jconfig.h
@@ -0,0 +1,65 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: cderror.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 Source: Independent JPEG Group's software
14
15 Changes: no major functional changes
16
17 License: See the accompanying README files
18*/
19
20#ifndef JCONFIG_H
21#define JCONFIG_H
22
23#define CJPEG_WRBMP_HAVE_PROTOTYPES
24#define CJPEG_WRBMP_HAVE_UNSIGNED_CHAR
25#define CJPEG_WRBMP_HAVE_UNSIGNED_SHORT
26#undef void
27#undef const
28#undef CHAR_IS_UNSIGNED
29#define CJPEG_WRBMP_HAVE_STDDEF_H
30#define CJPEG_WRBMP_HAVE_STDLIB_H
31#undef NEED_BSD_STRINGS
32#undef NEED_SYS_TYPES_H
33#undef CJPEG_JPEG6B_WRBMP_NEED_FAR_POINTERS
34#undef NEED_SHORT_EXTERNAL_NAMES
35/* Define this if you get warnings about undefined structures. */
36#undef INCOMPLETE_TYPES_BROKEN
37
38#ifdef CJPEG_JPEG6B_WRBMP_JPEG_INTERNALS
39
40#undef RIGHT_SHIFT_IS_UNSIGNED
41#define INLINE __inline__
42/* These are for configuring the JPEG memory manager. */
43#undef DEFAULT_MAX_MEM
44#undef NO_MKTEMP
45
46#endif /* JPEG_INTERNALS */
47
48#ifdef CJPEG_WRBMP_JPEG_CJPEG_DJPEG
49
50#define CJPEG_WRBMP_BMP_SUPPORTED /* BMP image file format */
51#define CJPEG_WRBMP_GIF_SUPPORTED /* GIF image file format */
52#define CJPEG_WRBMP_PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */
53#undef RLE_SUPPORTED /* Utah RLE image file format */
54#define CJPEG_WRBMP_TARGA_SUPPORTED /* Targa image file format */
55
56#undef TWO_FILE_COMMANDLINE
57#undef NEED_SIGNAL_CATCHER
58#undef DONT_USE_B_MODE
59
60/* Define this if you want percent-done progress reports from cjpeg/djpeg. */
61#undef PROGRESS_REPORT
62
63#endif /* JPEG_CJPEG_DJPEG */
64
65#endif
diff --git a/all_pairs/source/cjpeg_wrbmp/jerror.h b/all_pairs/source/cjpeg_wrbmp/jerror.h
new file mode 100644
index 0000000..1dc2798
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/jerror.h
@@ -0,0 +1,203 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: jerror.h
7
8 Author: Thomas G. Lane.
9
10 This file defines the error and message codes for the JPEG library.
11 Edit this file to add new codes, or to translate the message strings to
12 some other language.
13 A set of error-reporting macros are defined too. Some applications using
14 the JPEG library may wish to include this file to get the error codes
15 sand/or the macros.
16
17 Source: Independent JPEG Group's software
18
19 Changes: no major functional changes
20
21 License: See the accompanying README file
22 */
23
24/*
25 To define the enum list of message codes, include this file without
26 defining macro JMESSAGE. To create a message string table, include it
27 again with a suitable JMESSAGE definition (see jerror.c for an example).
28*/
29#ifndef CJPEG_WRBMP_JMESSAGE
30#ifndef JERROR_H
31/* First time through, define the enum list */
32#define CJPEG_WRBMP_JMAKE_ENUM_LIST
33#else
34/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
35#define CJPEG_WRBMP_JMESSAGE(code,string)
36#endif /* JERROR_H */
37#endif /* JMESSAGE */
38
39#ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
40
41typedef enum {
42
43#define CJPEG_WRBMP_JMESSAGE(code,string) code ,
44
45#endif /* JMAKE_ENUM_LIST */
46
47 CJPEG_WRBMP_JMESSAGE( JMSG_NOMESSAGE, "Bogus message code %d" ) /* Must be first entry! */
48
49 /* For maintenance convenience, list is alphabetical by message code name */
50 CJPEG_WRBMP_JMESSAGE( JERR_ARITH_NOTIMPL,
51 "Sorry, there are legal restrictions on arithmetic coding" )
52 CJPEG_WRBMP_JMESSAGE( JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix" )
53 CJPEG_WRBMP_JMESSAGE( JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix" )
54 CJPEG_WRBMP_JMESSAGE( JERR_BAD_BUFFER_MODE, "Bogus buffer control mode" )
55 CJPEG_WRBMP_JMESSAGE( JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS" )
56 CJPEG_WRBMP_JMESSAGE( JERR_BAD_DCT_COEF, "DCT coefficient out of range" )
57 CJPEG_WRBMP_JMESSAGE( JERR_BAD_DCTSIZE, "IDCT output block size %d not supported" )
58 CJPEG_WRBMP_JMESSAGE( JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition" )
59 CJPEG_WRBMP_JMESSAGE( JERR_BAD_IN_COLORSPACE, "Bogus input colorspace" )
60 CJPEG_WRBMP_JMESSAGE( JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace" )
61 CJPEG_WRBMP_JMESSAGE( JERR_BAD_LENGTH, "Bogus marker length" )
62 CJPEG_WRBMP_JMESSAGE( JERR_BAD_LIB_VERSION,
63 "Wrong JPEG library version: library is %d, caller expects %d" )
64 CJPEG_WRBMP_JMESSAGE( JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan" )
65 CJPEG_WRBMP_JMESSAGE( JERR_BAD_POOL_ID, "Invalid memory pool code %d" )
66 CJPEG_WRBMP_JMESSAGE( JERR_BAD_PRECISION, "Unsupported JPEG data precision %d" )
67 CJPEG_WRBMP_JMESSAGE( JERR_BAD_PROGRESSION,
68 "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d" )
69 CJPEG_WRBMP_JMESSAGE( JERR_BAD_PROG_SCRIPT,
70 "Invalid progressive parameters at scan script entry %d" )
71 CJPEG_WRBMP_JMESSAGE( JERR_BAD_SAMPLING, "Bogus sampling factors" )
72 CJPEG_WRBMP_JMESSAGE( JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d" )
73 CJPEG_WRBMP_JMESSAGE( JERR_BAD_STATE, "Improper call to JPEG library in state %d" )
74 CJPEG_WRBMP_JMESSAGE( JERR_BAD_STRUCT_SIZE,
75 "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u" )
76 CJPEG_WRBMP_JMESSAGE( JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access" )
77 CJPEG_WRBMP_JMESSAGE( JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small" )
78 CJPEG_WRBMP_JMESSAGE( JERR_CANT_SUSPEND, "Suspension not allowed here" )
79 CJPEG_WRBMP_JMESSAGE( JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet" )
80 CJPEG_WRBMP_JMESSAGE( JERR_COMPONENT_COUNT, "Too many color components: %d, max %d" )
81 CJPEG_WRBMP_JMESSAGE( JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request" )
82 CJPEG_WRBMP_JMESSAGE( JERR_DAC_INDEX, "Bogus DAC index %d" )
83 CJPEG_WRBMP_JMESSAGE( JERR_DAC_VALUE, "Bogus DAC value 0x%x" )
84 CJPEG_WRBMP_JMESSAGE( JERR_DHT_INDEX, "Bogus DHT index %d" )
85 CJPEG_WRBMP_JMESSAGE( JERR_DQT_INDEX, "Bogus DQT index %d" )
86 CJPEG_WRBMP_JMESSAGE( JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)" )
87 CJPEG_WRBMP_JMESSAGE( JERR_EMS_READ, "Read from EMS failed" )
88 CJPEG_WRBMP_JMESSAGE( JERR_EMS_WRITE, "Write to EMS failed" )
89 CJPEG_WRBMP_JMESSAGE( JERR_EOI_EXPECTED, "Didn't expect more than one scan" )
90 CJPEG_WRBMP_JMESSAGE( JERR_FILE_READ, "Input file read error" )
91 CJPEG_WRBMP_JMESSAGE( JERR_FILE_WRITE, "Output file write error --- out of disk space?" )
92 CJPEG_WRBMP_JMESSAGE( JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet" )
93 CJPEG_WRBMP_JMESSAGE( JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow" )
94 CJPEG_WRBMP_JMESSAGE( JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry" )
95 CJPEG_WRBMP_JMESSAGE( JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels" )
96 CJPEG_WRBMP_JMESSAGE( JERR_INPUT_EMPTY, "Empty input file" )
97 CJPEG_WRBMP_JMESSAGE( JERR_INPUT_EOF, "Premature end of input file" )
98 CJPEG_WRBMP_JMESSAGE( JERR_MISMATCHED_QUANT_TABLE,
99 "Cannot transcode due to multiple use of quantization table %d" )
100 CJPEG_WRBMP_JMESSAGE( JERR_MISSING_DATA, "Scan script does not transmit all data" )
101 CJPEG_WRBMP_JMESSAGE( JERR_MODE_CHANGE, "Invalid color quantization mode change" )
102 CJPEG_WRBMP_JMESSAGE( JERR_NOTIMPL, "Not implemented yet" )
103 CJPEG_WRBMP_JMESSAGE( JERR_NOT_COMPILED, "Requested feature was omitted at compile time" )
104 CJPEG_WRBMP_JMESSAGE( JERR_NO_BACKING_STORE, "Backing store not supported" )
105 CJPEG_WRBMP_JMESSAGE( JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined" )
106 CJPEG_WRBMP_JMESSAGE( JERR_NO_IMAGE, "JPEG datastream contains no image" )
107 CJPEG_WRBMP_JMESSAGE( JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined" )
108 CJPEG_WRBMP_JMESSAGE( JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x" )
109 CJPEG_WRBMP_JMESSAGE( JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)" )
110 CJPEG_WRBMP_JMESSAGE( JERR_QUANT_COMPONENTS,
111 "Cannot quantize more than %d color components" )
112 CJPEG_WRBMP_JMESSAGE( JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors" )
113 CJPEG_WRBMP_JMESSAGE( JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors" )
114 CJPEG_WRBMP_JMESSAGE( JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers" )
115 CJPEG_WRBMP_JMESSAGE( JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker" )
116 CJPEG_WRBMP_JMESSAGE( JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x" )
117 CJPEG_WRBMP_JMESSAGE( JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers" )
118 CJPEG_WRBMP_JMESSAGE( JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF" )
119 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_CREATE, "Failed to create temporary file %s" )
120 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_READ, "Read failed on temporary file" )
121 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_SEEK, "Seek failed on temporary file" )
122 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_WRITE,
123 "Write failed on temporary file --- out of disk space?" )
124 CJPEG_WRBMP_JMESSAGE( JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines" )
125 CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x" )
126 CJPEG_WRBMP_JMESSAGE( JERR_VIRTUAL_BUG, "Virtual array controller messed up" )
127 CJPEG_WRBMP_JMESSAGE( JERR_WIDTH_OVERFLOW, "Image too wide for this implementation" )
128 CJPEG_WRBMP_JMESSAGE( JERR_XMS_READ, "Read from XMS failed" )
129 CJPEG_WRBMP_JMESSAGE( JERR_XMS_WRITE, "Write to XMS failed" )
130 CJPEG_WRBMP_JMESSAGE( JMSG_COPYRIGHT, JCOPYRIGHT )
131 CJPEG_WRBMP_JMESSAGE( JMSG_VERSION, JVERSION )
132 CJPEG_WRBMP_JMESSAGE( JTRC_16BIT_TABLES,
133 "Caution: quantization tables are too coarse for baseline JPEG" )
134 CJPEG_WRBMP_JMESSAGE( JTRC_ADOBE,
135 "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d" )
136 CJPEG_WRBMP_JMESSAGE( JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u" )
137 CJPEG_WRBMP_JMESSAGE( JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u" )
138 CJPEG_WRBMP_JMESSAGE( JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x" )
139 CJPEG_WRBMP_JMESSAGE( JTRC_DHT, "Define Huffman Table 0x%02x" )
140 CJPEG_WRBMP_JMESSAGE( JTRC_DQT, "Define Quantization Table %d precision %d" )
141 CJPEG_WRBMP_JMESSAGE( JTRC_DRI, "Define Restart Interval %u" )
142 CJPEG_WRBMP_JMESSAGE( JTRC_EMS_CLOSE, "Freed EMS handle %u" )
143 CJPEG_WRBMP_JMESSAGE( JTRC_EMS_OPEN, "Obtained EMS handle %u" )
144 CJPEG_WRBMP_JMESSAGE( JTRC_EOI, "End Of Image" )
145 CJPEG_WRBMP_JMESSAGE( JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d" )
146 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d" )
147 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_BADTHUMBNAILSIZE,
148 "Warning: thumbnail image size does not match data length %u" )
149 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_EXTENSION,
150 "JFIF extension marker: type 0x%02x, length %u" )
151 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image" )
152 CJPEG_WRBMP_JMESSAGE( JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u" )
153 CJPEG_WRBMP_JMESSAGE( JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x" )
154 CJPEG_WRBMP_JMESSAGE( JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u" )
155 CJPEG_WRBMP_JMESSAGE( JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors" )
156 CJPEG_WRBMP_JMESSAGE( JTRC_QUANT_NCOLORS, "Quantizing to %d colors" )
157 CJPEG_WRBMP_JMESSAGE( JTRC_QUANT_SELECTED, "Selected %d colors for quantization" )
158 CJPEG_WRBMP_JMESSAGE( JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d" )
159 CJPEG_WRBMP_JMESSAGE( JTRC_RST, "RST%d" )
160 CJPEG_WRBMP_JMESSAGE( JTRC_SMOOTH_NOTIMPL,
161 "Smoothing not supported with nonstandard sampling ratios" )
162 CJPEG_WRBMP_JMESSAGE( JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d" )
163 CJPEG_WRBMP_JMESSAGE( JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d" )
164 CJPEG_WRBMP_JMESSAGE( JTRC_SOI, "Start of Image" )
165 CJPEG_WRBMP_JMESSAGE( JTRC_SOS, "Start Of Scan: %d components" )
166 CJPEG_WRBMP_JMESSAGE( JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d" )
167 CJPEG_WRBMP_JMESSAGE( JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d" )
168 CJPEG_WRBMP_JMESSAGE( JTRC_TFILE_CLOSE, "Closed temporary file %s" )
169 CJPEG_WRBMP_JMESSAGE( JTRC_TFILE_OPEN, "Opened temporary file %s" )
170 CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_JPEG,
171 "JFIF extension marker: JPEG-compressed thumbnail image, length %u" )
172 CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_PALETTE,
173 "JFIF extension marker: palette thumbnail image, length %u" )
174 CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_RGB,
175 "JFIF extension marker: RGB thumbnail image, length %u" )
176 CJPEG_WRBMP_JMESSAGE( JTRC_UNKNOWN_IDS,
177 "Unrecognized component IDs %d %d %d, assuming YCbCr" )
178 CJPEG_WRBMP_JMESSAGE( JTRC_XMS_CLOSE, "Freed XMS handle %u" )
179 CJPEG_WRBMP_JMESSAGE( JTRC_XMS_OPEN, "Obtained XMS handle %u" )
180 CJPEG_WRBMP_JMESSAGE( JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d" )
181 CJPEG_WRBMP_JMESSAGE( JWRN_BOGUS_PROGRESSION,
182 "Inconsistent progression sequence for component %d coefficient %d" )
183 CJPEG_WRBMP_JMESSAGE( JWRN_EXTRANEOUS_DATA,
184 "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x" )
185 CJPEG_WRBMP_JMESSAGE( JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment" )
186 CJPEG_WRBMP_JMESSAGE( JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code" )
187 CJPEG_WRBMP_JMESSAGE( JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d" )
188 CJPEG_WRBMP_JMESSAGE( JWRN_JPEG_EOF, "Premature end of JPEG file" )
189 CJPEG_WRBMP_JMESSAGE( JWRN_MUST_RESYNC,
190 "Corrupt JPEG data: found marker 0x%02x instead of RST%d" )
191 CJPEG_WRBMP_JMESSAGE( JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG" )
192 CJPEG_WRBMP_JMESSAGE( JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines" )
193
194 #ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
195
196 JMSG_LASTMSGCODE
197} CJPEG_WRBMP_J_MESSAGE_CODE;
198
199#undef CJPEG_WRBMP_JMAKE_ENUM_LIST
200 #endif /* JMAKE_ENUM_LIST */
201
202/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
203#undef CJPEG_WRBMP_JMESSAGE
diff --git a/all_pairs/source/cjpeg_wrbmp/jmorecfg.h b/all_pairs/source/cjpeg_wrbmp/jmorecfg.h
new file mode 100644
index 0000000..84ee16a
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/jmorecfg.h
@@ -0,0 +1,95 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: jmorecfg.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 This file contains additional configuration options that customize the
14 JPEG software for special applications or support machine-dependent
15 optimizations. Most users will not need to touch this file.
16
17 Source: Independent JPEG Group's software
18
19 Changes: no major functional changes
20
21 License: See the accompanying README file
22*/
23
24#ifndef JMORECFG_H
25#define JMORECFG_H
26
27
28#define CJPEG_WRBMP_GETJSAMPLE(value) ((int) (value))
29
30typedef unsigned char CJPEG_WRBMP_JSAMPLE;
31typedef short CJPEG_WRBMP_JCOEF;
32typedef unsigned char CJPEG_WRBMP_JOCTET;
33
34/* These typedefs are used for various table entries and so forth.
35 They must be at least as wide as specified; but making them too big
36 won't cost a huge amount of memory, so we don't provide special
37 extraction code like we did for JSAMPLE. (In other words, these
38 typedefs live at a different point on the speed/space tradeoff curve.)
39*/
40
41/* UINT8 must hold at least the values 0..255. */
42
43typedef unsigned char CJPEG_WRBMP_UINT8;
44
45
46/* UINT16 must hold at least the values 0..65535. */
47
48typedef unsigned short CJPEG_WRBMP_UINT16;
49
50
51/* INT16 must hold at least the values -32768..32767. */
52
53#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */
54typedef short INT16;
55#endif
56
57/* INT32 must hold at least signed 32-bit values. */
58
59#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
60typedef long INT32;
61#endif
62
63typedef unsigned int CJPEG_WRBMP_JDIMENSION;
64
65/* This macro is used to declare a "method", that is, a function pointer.
66 We want to supply prototype parameters if the compiler can cope.
67 Note that the arglist parameter must be parenthesized!
68 Again, you can customize this if you need special linkage keywords.
69*/
70
71#define EXTERN(type) extern type
72
73#ifdef CJPEG_WRBMP_HAVE_PROTOTYPES
74#define CJPEG_WRBMP_JMETHOD(type,methodname,arglist) type (*methodname) arglist
75#else
76#define CJPEG_WRBMP_JMETHOD(type,methodname,arglist) type (*methodname) ()
77#endif
78
79
80/* Here is the pseudo-keyword for declaring pointers that must be "far"
81 on 80x86 machines. Most of the specialized coding for 80x86 is handled
82 by just saying "FAR *" where such a pointer is needed. In a few places
83 explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
84*/
85
86#ifdef CJPEG_JPEG6B_WRBMP_NEED_FAR_POINTERS
87#define CJPEG_WRBMP_FAR far
88#else
89#define CJPEG_WRBMP_FAR
90#endif
91
92#ifndef CJPEG_JPEG6B_WRBMP_HAVE_BOOLEAN
93typedef int cjpeg_wrbmp_boolean;
94#endif
95#endif
diff --git a/all_pairs/source/cjpeg_wrbmp/jpeglib.h b/all_pairs/source/cjpeg_wrbmp/jpeglib.h
new file mode 100644
index 0000000..ab3fba3
--- /dev/null
+++ b/all_pairs/source/cjpeg_wrbmp/jpeglib.h
@@ -0,0 +1,869 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: jpeglib.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 This file defines the application interface for the JPEG library.
14 Most applications using the library need only include this file,
15 and perhaps jerror.h if they want to know the exact error codes.
16
17 Source: Independent JPEG Group's software
18
19 Changes: no major functional changes
20
21 License: See the accompanying README file
22*/
23
24
25#ifndef JPEGLIB_H
26#define JPEGLIB_H
27
28typedef int CJPEG_WRBMP_FILE;
29typedef unsigned int cjpeg_wrbmp_size_x;
30
31/*
32 First we include the configuration files that record how this
33 installation of the JPEG library is set up. jconfig.h can be
34 generated automatically for many systems. jmorecfg.h contains
35 manual configuration options that most people need not worry about.
36*/
37
38#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */
39#include "jconfig.h" /* widely used configuration options */
40#endif
41#include "jmorecfg.h" /* seldom changed options */
42
43/* Data structures for images (arrays of samples and of DCT coefficients).
44 On 80x86 machines, the image arrays are too big for near pointers,
45 but the pointer arrays can fit in near memory.
46*/
47
48typedef CJPEG_WRBMP_JSAMPLE CJPEG_WRBMP_FAR
49*CJPEG_WRBMP_JSAMPROW; /* ptr to one image row of pixel samples. */
50typedef CJPEG_WRBMP_JSAMPROW
51*CJPEG_WRBMP_JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */
52typedef CJPEG_WRBMP_JSAMPARRAY
53*CJPEG_WRBMP_JSAMPIMAGE; /* a 3-D sample array: top index is color */
54
55typedef CJPEG_WRBMP_JCOEF
56CJPEG_WRBMP_JBLOCK[64]; /* one block of coefficients */
57typedef CJPEG_WRBMP_JBLOCK CJPEG_WRBMP_FAR
58*CJPEG_WRBMP_JBLOCKROW; /* pointer to one row of coefficient blocks */
59typedef CJPEG_WRBMP_JBLOCKROW
60*CJPEG_WRBMP_JBLOCKARRAY; /* a 2-D array of coefficient blocks */
61typedef CJPEG_WRBMP_JBLOCKARRAY
62*CJPEG_WRBMP_JBLOCKIMAGE; /* a 3-D array of coefficient blocks */
63
64typedef CJPEG_WRBMP_JCOEF CJPEG_WRBMP_FAR
65*JCOEFPTR; /* useful in a couple of places */
66
67
68/* Types for JPEG compression parameters and working tables. */
69
70
71/* DCT coefficient quantization tables. */
72
73typedef struct {
74 /* This array gives the coefficient quantizers in natural array order
75 (not the zigzag order in which they are stored in a JPEG DQT marker).
76 CAUTION: IJG versions prior to v6a kept this array in zigzag order.
77 */
78 CJPEG_WRBMP_UINT16
79 quantval[64]; /* quantization step for each coefficient */
80 /* This field is used only during compression. It's initialized FALSE when
81 the table is created, and set TRUE when it's been output to the file.
82 You could suppress output of a table by setting this to TRUE.
83 (See jpeg_suppress_tables for an example.)
84 */
85 cjpeg_wrbmp_boolean sent_table; /* TRUE when table has been output */
86} CJPEG_WRBMP_JQUANT_TBL;
87
88
89/* Huffman coding tables. */
90
91typedef struct {
92 /* These two fields directly represent the contents of a JPEG DHT marker */
93 CJPEG_WRBMP_UINT8 bits[17]; /* bits[k] = # of symbols with codes of */
94 /* length k bits; bits[0] is unused */
95 CJPEG_WRBMP_UINT8
96 huffval[256]; /* The symbols, in order of incr code length */
97 /* This field is used only during compression. It's initialized FALSE when
98 the table is created, and set TRUE when it's been output to the file.
99 You could suppress output of a table by setting this to TRUE.
100 (See jpeg_suppress_tables for an example.)
101 */
102 cjpeg_wrbmp_boolean sent_table; /* TRUE when table has been output */
103} CJPEG_WRBMP_JHUFF_TBL;
104
105
106/* Basic info about one component (color channel). */
107
108typedef struct {
109 /* These values are fixed over the whole image. */
110 /* For compression, they must be supplied by parameter setup; */
111 /* for decompression, they are read from the SOF marker. */
112 int component_id; /* identifier for this component (0..255) */
113 int component_index; /* its index in SOF or cinfo->comp_info[] */
114 int h_samp_factor; /* horizontal sampling factor (1..4) */
115 int v_samp_factor; /* vertical sampling factor (1..4) */
116 int quant_tbl_no; /* quantization table selector (0..3) */
117 /* These values may vary between scans. */
118 /* For compression, they must be supplied by parameter setup; */
119 /* for decompression, they are read from the SOS marker. */
120 /* The decompressor output side may not use these variables. */
121 int dc_tbl_no; /* DC entropy table selector (0..3) */
122 int ac_tbl_no; /* AC entropy table selector (0..3) */
123
124 /* Remaining fields should be treated as private by applications. */
125
126 /* These values are computed during compression or decompression startup: */
127 /* Component's size in DCT blocks.
128 Any dummy blocks added to complete an MCU are not counted; therefore
129 these values do not depend on whether a scan is interleaved or not.
130 */
131 CJPEG_WRBMP_JDIMENSION width_in_blocks;
132 CJPEG_WRBMP_JDIMENSION height_in_blocks;
133 /* Size of a DCT block in samples. Always DCTSIZE for compression.
134 For decompression this is the size of the output from one DCT block,
135 reflecting any scaling we choose to apply during the IDCT step.
136 Values of 1,2,4,8 are likely to be supported. Note that different
137 components may receive different IDCT scalings.
138 */
139 int DCT_scaled_size;
140 /* The downsampled dimensions are the component's actual, unpadded number
141 of samples at the main buffer (preprocessing/compression interface), thus
142 downsampled_width = ceil(image_width * Hi/Hmax)
143 and similarly for height. For decompression, IDCT scaling is included, so
144 downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
145 */
146 CJPEG_WRBMP_JDIMENSION downsampled_width; /* actual width in samples */
147 CJPEG_WRBMP_JDIMENSION downsampled_height; /* actual height in samples */
148 /* This flag is used only for decompression. In cases where some of the
149 components will be ignored (eg grayscale output from YCbCr image),
150 we can skip most computations for the unused components.
151 */
152 cjpeg_wrbmp_boolean
153 component_needed; /* do we need the value of this component? */
154
155 /* These values are computed before starting a scan of the component. */
156 /* The decompressor output side may not use these variables. */
157 int MCU_width; /* number of blocks per MCU, horizontally */
158 int MCU_height; /* number of blocks per MCU, vertically */
159 int MCU_blocks; /* MCU_width * MCU_height */
160 int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */
161 int last_col_width; /* # of non-dummy blocks across in last MCU */
162 int last_row_height; /* # of non-dummy blocks down in last MCU */
163
164 /* Saved quantization table for component; NULL if none yet saved.
165 See jdinput.c comments about the need for this information.
166 This field is currently used only for decompression.
167 */
168 CJPEG_WRBMP_JQUANT_TBL *quant_table;
169
170 /* Private per-component storage for DCT or IDCT subsystem. */
171 void *dct_table;
172} cjpeg_wrbmp_jpeg_component_info;
173
174
175/* The script for encoding a multiple-scan file is an array of these: */
176
177typedef struct {
178 int comps_in_scan; /* number of components encoded in this scan */
179 int component_index[4]; /* their SOF/comp_info[] indexes */
180 int Ss, Se; /* progressive JPEG spectral selection parms */
181 int Ah, Al; /* progressive JPEG successive approx. parms */
182} cjpeg_wrbmp_jpeg_scan_info;
183
184/* The decompressor can save APPn and COM markers in a list of these: */
185
186typedef struct cjpeg_wrbmp_jpeg_marker_struct CJPEG_WRBMP_FAR
187 *jpeg_saved_marker_ptr;
188
189struct cjpeg_wrbmp_jpeg_marker_struct {
190 jpeg_saved_marker_ptr next; /* next in list, or NULL */
191 CJPEG_WRBMP_UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */
192 unsigned int original_length; /* # bytes of data in the file */
193 unsigned int data_length; /* # bytes of data saved at data[] */
194 CJPEG_WRBMP_JOCTET CJPEG_WRBMP_FAR
195 *data; /* the data contained in the marker */
196 /* the marker length word is not counted in data_length or original_length */
197};
198
199/* Known color spaces. */
200
201typedef enum {
202 JCS_UNKNOWN, /* error/unspecified */
203 JCS_GRAYSCALE, /* monochrome */
204 JCS_RGB, /* red/green/blue */
205 JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */
206 JCS_CMYK, /* C/M/Y/K */
207 JCS_YCCK /* Y/Cb/Cr/K */
208} CJPEG_WRBMP_J_COLOR_SPACE;
209
210/* DCT/IDCT algorithm options. */
211
212typedef enum {
213 JDCT_ISLOW, /* slow but accurate integer algorithm */
214 JDCT_IFAST, /* faster, less accurate integer method */
215 JDCT_FLOAT /* floating-point: accurate, fast on fast HW */
216} CJPEG_WRBMP_J_DCT_METHOD;
217
218/* Dithering options for decompression. */
219
220typedef enum {
221 JDITHER_NONE, /* no dithering */
222 JDITHER_ORDERED, /* simple ordered dither */
223 JDITHER_FS /* Floyd-Steinberg error diffusion dither */
224} CJPEG_WRBMP_J_DITHER_MODE;
225
226
227/* Common fields between JPEG compression and decompression master structs. */
228
229#define cjpeg_wrbmp_jpeg_common_fields \
230 struct cjpeg_wrbmp_jpeg_error_mgr * err; /* Error handler module */\
231 struct cjpeg_wrbmp_jpeg_memory_mgr * mem; /* Memory manager module */\
232 struct cjpeg_wrbmp_jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
233 void * client_data; /* Available for use by application */\
234 cjpeg_wrbmp_boolean is_decompressor; /* So common code can tell which is which */\
235 int global_state /* For checking call sequence validity */
236
237/* Routines that are to be used by both halves of the library are declared
238 to receive a pointer to this structure. There are no actual instances of
239 jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
240*/
241struct cjpeg_wrbmp_jpeg_common_struct {
242 cjpeg_wrbmp_jpeg_common_fields; /* Fields common to both master struct types */
243 /* Additional fields follow in an actual jpeg_compress_struct or
244 jpeg_decompress_struct. All three structs must agree on these
245 initial fields! (This would be a lot cleaner in C++.)
246 */
247};
248
249typedef struct cjpeg_wrbmp_jpeg_common_struct
250 *cjpeg_wrbmp_j_common_ptr;
251typedef struct cjpeg_wrbmp_jpeg_compress_struct
252 *cjpeg_wrbmp_j_compress_ptr;
253typedef struct cjpeg_wrbmp_jpeg_decompress_struct
254 *cjpeg_wrbmp_j_decompress_ptr;
255
256
257/* Master record for a compression instance */
258
259struct cjpeg_wrbmp_jpeg_compress_struct {
260 cjpeg_wrbmp_jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */
261
262 /* Destination for compressed data */
263 struct cjpeg_wrbmp_jpeg_destination_mgr *dest;
264
265 /* Description of source image --- these fields must be filled in by
266 outer application before starting compression. in_color_space must
267 be correct before you can even call jpeg_set_defaults().
268 */
269
270 CJPEG_WRBMP_JDIMENSION image_width; /* input image width */
271 CJPEG_WRBMP_JDIMENSION image_height; /* input image height */
272 int input_components; /* # of color components in input image */
273 CJPEG_WRBMP_J_COLOR_SPACE in_color_space; /* colorspace of input image */
274
275 float input_gamma; /* image gamma of input image */
276
277 /* Compression parameters --- these fields must be set before calling
278 jpeg_start_compress(). We recommend calling jpeg_set_defaults() to
279 initialize everything to reasonable defaults, then changing anything
280 the application specifically wants to change. That way you won't get
281 burnt when new parameters are added. Also note that there are several
282 helper routines to simplify changing parameters.
283 */
284
285 int data_precision; /* bits of precision in image data */
286
287 int num_components; /* # of color components in JPEG image */
288 CJPEG_WRBMP_J_COLOR_SPACE
289 jpeg_color_space; /* colorspace of JPEG image */
290
291 cjpeg_wrbmp_jpeg_component_info *comp_info;
292 /* comp_info[i] describes component that appears i'th in SOF */
293
294 CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[4];
295 /* ptrs to coefficient quantization tables, or NULL if not defined */
296
297 CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[4];
298 CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[4];
299 /* ptrs to Huffman coding tables, or NULL if not defined */
300
301 CJPEG_WRBMP_UINT8
302 arith_dc_L[16]; /* L values for DC arith-coding tables */
303 CJPEG_WRBMP_UINT8
304 arith_dc_U[16]; /* U values for DC arith-coding tables */
305 CJPEG_WRBMP_UINT8
306 arith_ac_K[16]; /* Kx values for AC arith-coding tables */
307
308 int num_scans; /* # of entries in scan_info array */
309 const cjpeg_wrbmp_jpeg_scan_info
310 *scan_info; /* script for multi-scan file, or NULL */
311 /* The default value of scan_info is NULL, which causes a single-scan
312 sequential JPEG file to be emitted. To create a multi-scan file,
313 set num_scans and scan_info to point to an array of scan definitions.
314 */
315
316 cjpeg_wrbmp_boolean
317 raw_data_in; /* TRUE=caller supplies downsampled data */
318 cjpeg_wrbmp_boolean
319 arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
320 cjpeg_wrbmp_boolean
321 optimize_coding; /* TRUE=optimize entropy encoding parms */
322 cjpeg_wrbmp_boolean
323 CCIR601_sampling; /* TRUE=first samples are cosited */
324 int smoothing_factor; /* 1..100, or 0 for no input smoothing */
325 CJPEG_WRBMP_J_DCT_METHOD dct_method; /* DCT algorithm selector */
326
327 /* The restart interval can be specified in absolute MCUs by setting
328 restart_interval, or in MCU rows by setting restart_in_rows
329 (in which case the correct restart_interval will be figured
330 for each scan).
331 */
332 unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
333 int restart_in_rows; /* if > 0, MCU rows per restart interval */
334
335 /* Parameters controlling emission of special markers. */
336
337 cjpeg_wrbmp_boolean
338 write_JFIF_header; /* should a JFIF marker be written? */
339 CJPEG_WRBMP_UINT8
340 JFIF_major_version; /* What to write for the JFIF version number */
341 CJPEG_WRBMP_UINT8 JFIF_minor_version;
342 /* These three values are not used by the JPEG code, merely copied */
343 /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */
344 /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */
345 /* ratio is defined by X_density/Y_density even when density_unit=0. */
346 CJPEG_WRBMP_UINT8 density_unit; /* JFIF code for pixel size units */
347 CJPEG_WRBMP_UINT16 X_density; /* Horizontal pixel density */
348 CJPEG_WRBMP_UINT16 Y_density; /* Vertical pixel density */
349 cjpeg_wrbmp_boolean
350 write_Adobe_marker; /* should an Adobe marker be written? */
351
352 /* State variable: index of next scanline to be written to
353 jpeg_write_scanlines(). Application may use this to control its
354 processing loop, e.g., "while (next_scanline < image_height)".
355 */
356
357 CJPEG_WRBMP_JDIMENSION next_scanline; /* 0 .. image_height-1 */
358
359 /* Remaining fields are known throughout compressor, but generally
360 should not be touched by a surrounding application.
361 */
362
363 /*
364 These fields are computed during compression startup
365 */
366 cjpeg_wrbmp_boolean
367 progressive_mode; /* TRUE if scan script uses progressive mode */
368 int max_h_samp_factor; /* largest h_samp_factor */
369 int max_v_samp_factor; /* largest v_samp_factor */
370
371 CJPEG_WRBMP_JDIMENSION
372 total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */
373 /* The coefficient controller receives data in units of MCU rows as defined
374 for fully interleaved scans (whether the JPEG file is interleaved or not).
375 There are v_samp_factor * DCTSIZE sample rows of each component in an
376 "iMCU" (interleaved MCU) row.
377 */
378
379 /*
380 These fields are valid during any one scan.
381 They describe the components and MCUs actually appearing in the scan.
382 */
383 int comps_in_scan; /* # of JPEG components in this scan */
384 cjpeg_wrbmp_jpeg_component_info *cur_comp_info[4];
385 /* *cur_comp_info[i] describes component that appears i'th in SOS */
386
387 CJPEG_WRBMP_JDIMENSION MCUs_per_row; /* # of MCUs across the image */
388 CJPEG_WRBMP_JDIMENSION
389 MCU_rows_in_scan; /* # of MCU rows in the image */
390
391 int blocks_in_MCU; /* # of DCT blocks per MCU */
392 int MCU_membership[10];
393 /* MCU_membership[i] is index in cur_comp_info of component owning */
394 /* i'th block in an MCU */
395
396 int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */
397
398 cjpeg_wrbmp_jpeg_scan_info
399 *script_space; /* workspace for jpeg_simple_progression */
400 int script_space_size;
401};
402
403
404/* Master record for a decompression instance */
405
406struct cjpeg_wrbmp_jpeg_decompress_struct {
407 cjpeg_wrbmp_jpeg_common_fields; /* Fields shared with jpeg_compress_struct */
408
409 /* Source of compressed data */
410 struct cjpeg_wrbmp_jpeg_source_mgr *src;
411
412 /* Basic description of image --- filled in by jpeg_read_header(). */
413 /* Application may inspect these values to decide how to process image. */
414
415 CJPEG_WRBMP_JDIMENSION
416 image_width; /* nominal image width (from SOF marker) */
417 CJPEG_WRBMP_JDIMENSION image_height; /* nominal image height */
418 int num_components; /* # of color components in JPEG image */
419 CJPEG_WRBMP_J_COLOR_SPACE
420 jpeg_color_space; /* colorspace of JPEG image */
421
422 /* Decompression processing parameters --- these fields must be set before
423 calling jpeg_start_decompress(). Note that jpeg_read_header() initializes
424 them to default values.
425 */
426
427 CJPEG_WRBMP_J_COLOR_SPACE out_color_space; /* colorspace for output */
428
429 unsigned int scale_num, scale_denom; /* fraction by which to scale image */
430
431 float output_gamma; /* image gamma wanted in output */
432
433 cjpeg_wrbmp_boolean buffered_image; /* TRUE=multiple output passes */
434 cjpeg_wrbmp_boolean raw_data_out; /* TRUE=downsampled data wanted */
435
436 CJPEG_WRBMP_J_DCT_METHOD dct_method; /* IDCT algorithm selector */
437 cjpeg_wrbmp_boolean
438 do_fancy_upsampling; /* TRUE=apply fancy upsampling */
439 cjpeg_wrbmp_boolean
440 do_block_smoothing; /* TRUE=apply interblock smoothing */
441
442 cjpeg_wrbmp_boolean
443 quantize_colors; /* TRUE=colormapped output wanted */
444 /* the following are ignored if not quantize_colors: */
445 CJPEG_WRBMP_J_DITHER_MODE
446 dither_mode; /* type of color dithering to use */
447 cjpeg_wrbmp_boolean
448 two_pass_quantize; /* TRUE=use two-pass color quantization */
449 int desired_number_of_colors; /* max # colors to use in created colormap */
450 /* these are significant only in buffered-image mode: */
451 cjpeg_wrbmp_boolean
452 enable_1pass_quant; /* enable future use of 1-pass quantizer */
453 cjpeg_wrbmp_boolean
454 enable_EXTERNal_quant;/* enable future use of EXTERNal colormap */
455 cjpeg_wrbmp_boolean
456 enable_2pass_quant; /* enable future use of 2-pass quantizer */
457
458 /* Description of actual output image that will be returned to application.
459 These fields are computed by jpeg_start_decompress().
460 You can also use jpeg_calc_output_dimensions() to determine these values
461 in advance of calling jpeg_start_decompress().
462 */
463
464 CJPEG_WRBMP_JDIMENSION output_width; /* scaled image width */
465 CJPEG_WRBMP_JDIMENSION output_height; /* scaled image height */
466 int out_color_components; /* # of color components in out_color_space */
467 int output_components; /* # of color components returned */
468 /* output_components is 1 (a colormap index) when quantizing colors;
469 otherwise it equals out_color_components.
470 */
471 int rec_outbuf_height; /* min recommended height of scanline buffer */
472 /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
473 high, space and time will be wasted due to unnecessary data copying.
474 Usually rec_outbuf_height will be 1 or 2, at most 4.
475 */
476
477 /* When quantizing colors, the output colormap is described by these fields.
478 The application can supply a colormap by setting colormap non-NULL before
479 calling jpeg_start_decompress; otherwise a colormap is created during
480 jpeg_start_decompress or jpeg_start_output.
481 The map has out_color_components rows and actual_number_of_colors columns.
482 */
483 int actual_number_of_colors; /* number of entries in use */
484 CJPEG_WRBMP_JSAMPARRAY
485 colormap; /* The color map as a 2-D pixel array */
486
487 /* State variables: these variables indicate the progress of decompression.
488 The application may examine these but must not modify them.
489 */
490
491 /* Row index of next scanline to be read from jpeg_read_scanlines().
492 Application may use this to control its processing loop, e.g.,
493 "while (output_scanline < output_height)".
494 */
495 CJPEG_WRBMP_JDIMENSION output_scanline; /* 0 .. output_height-1 */
496
497 /* Current input scan number and number of iMCU rows completed in scan.
498 These indicate the progress of the decompressor input side.
499 */
500 int input_scan_number; /* Number of SOS markers seen so far */
501 CJPEG_WRBMP_JDIMENSION
502 input_iMCU_row; /* Number of iMCU rows completed */
503
504 /* The "output scan number" is the notional scan being displayed by the
505 output side. The decompressor will not allow output scan/row number
506 to get ahead of input scan/row, but it can fall arbitrarily far behind.
507 */
508 int output_scan_number; /* Nominal scan number being displayed */
509 CJPEG_WRBMP_JDIMENSION output_iMCU_row; /* Number of iMCU rows read */
510
511 /* Current progression status. coef_bits[c][i] indicates the precision
512 with which component c's DCT coefficient i (in zigzag order) is known.
513 It is -1 when no data has yet been received, otherwise it is the point
514 transform (shift) value for the most recent scan of the coefficient
515 (thus, 0 at completion of the progression).
516 This pointer is NULL when reading a non-progressive file.
517 */
518 int ( *coef_bits )[64]; /* -1 or current Al value for each coef */
519
520 /* Internal JPEG parameters --- the application usually need not look at
521 these fields. Note that the decompressor output side may not use
522 any parameters that can change between scans.
523 */
524
525 /* Quantization and Huffman tables are carried forward across input
526 datastreams when processing abbreviated JPEG datastreams.
527 */
528
529 CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[4];
530 /* ptrs to coefficient quantization tables, or NULL if not defined */
531
532 CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[4];
533 CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[4];
534 /* ptrs to Huffman coding tables, or NULL if not defined */
535
536 /* These parameters are never carried across datastreams, since they
537 are given in SOF/SOS markers or defined to be reset by SOI.
538 */
539
540 int data_precision; /* bits of precision in image data */
541
542 cjpeg_wrbmp_jpeg_component_info *comp_info;
543 /* comp_info[i] describes component that appears i'th in SOF */
544
545 cjpeg_wrbmp_boolean
546 progressive_mode; /* TRUE if SOFn specifies progressive mode */
547 cjpeg_wrbmp_boolean
548 arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
549
550 CJPEG_WRBMP_UINT8
551 arith_dc_L[16]; /* L values for DC arith-coding tables */
552 CJPEG_WRBMP_UINT8
553 arith_dc_U[16]; /* U values for DC arith-coding tables */
554 CJPEG_WRBMP_UINT8
555 arith_ac_K[16]; /* Kx values for AC arith-coding tables */
556
557 unsigned int
558 restart_interval; /* MCUs per restart interval, or 0 for no restart */
559
560 /* These fields record data obtained from optional markers recognized by
561 the JPEG library.
562 */
563 cjpeg_wrbmp_boolean
564 saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */
565 /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
566 CJPEG_WRBMP_UINT8 JFIF_major_version; /* JFIF version number */
567 CJPEG_WRBMP_UINT8 JFIF_minor_version;
568 CJPEG_WRBMP_UINT8 density_unit; /* JFIF code for pixel size units */
569 CJPEG_WRBMP_UINT16 X_density; /* Horizontal pixel density */
570 CJPEG_WRBMP_UINT16 Y_density; /* Vertical pixel density */
571 cjpeg_wrbmp_boolean
572 saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */
573 CJPEG_WRBMP_UINT8
574 Adobe_transform; /* Color transform code from Adobe marker */
575
576 cjpeg_wrbmp_boolean
577 CCIR601_sampling; /* TRUE=first samples are cosited */
578
579 /* Aside from the specific data retained from APPn markers known to the
580 library, the uninterpreted contents of any or all APPn and COM markers
581 can be saved in a list for examination by the application.
582 */
583 jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
584
585 /* Remaining fields are known throughout decompressor, but generally
586 should not be touched by a surrounding application.
587 */
588
589 /*
590 These fields are computed during decompression startup
591 */
592 int max_h_samp_factor; /* largest h_samp_factor */
593 int max_v_samp_factor; /* largest v_samp_factor */
594
595 int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */
596
597 CJPEG_WRBMP_JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */
598 /* The coefficient controller's input and output progress is measured in
599 units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows
600 in fully interleaved JPEG scans, but are used whether the scan is
601 interleaved or not. We define an iMCU row as v_samp_factor DCT block
602 rows of each component. Therefore, the IDCT output contains
603 v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
604 */
605
606 CJPEG_WRBMP_JSAMPLE
607 *sample_range_limit; /* table for fast range-limiting */
608
609 /*
610 These fields are valid during any one scan.
611 They describe the components and MCUs actually appearing in the scan.
612 Note that the decompressor output side must not use these fields.
613 */
614 int comps_in_scan; /* # of JPEG components in this scan */
615 cjpeg_wrbmp_jpeg_component_info *cur_comp_info[4];
616 /* *cur_comp_info[i] describes component that appears i'th in SOS */
617
618 CJPEG_WRBMP_JDIMENSION MCUs_per_row; /* # of MCUs across the image */
619 CJPEG_WRBMP_JDIMENSION
620 MCU_rows_in_scan; /* # of MCU rows in the image */
621
622 int blocks_in_MCU; /* # of DCT blocks per MCU */
623 int MCU_membership[10];
624 /* MCU_membership[i] is index in cur_comp_info of component owning */
625 /* i'th block in an MCU */
626
627 int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */
628
629 /* This field is shared between entropy decoder and marker parser.
630 It is either zero or the code of a JPEG marker that has been
631 read from the data source, but has not yet been processed.
632 */
633 int unread_marker;
634
635 /*
636 Links to decompression subobjects (methods, private variables of modules)
637 */
638 struct jpeg_decomp_master *master;
639 struct jpeg_d_main_controller *main;
640 struct jpeg_d_coef_controller *coef;
641 struct jpeg_d_post_controller *post;
642 struct jpeg_input_controller *inputctl;
643 struct jpeg_marker_reader *marker;
644 struct jpeg_entropy_decoder *entropy;
645 struct jpeg_inverse_dct *idct;
646 struct jpeg_upsampler *upsample;
647 struct jpeg_color_deconverter *cconvert;
648 struct jpeg_color_quantizer *cquantize;
649};
650
651
652/* "Object" declarations for JPEG modules that may be supplied or called
653 directly by the surrounding application.
654 As with all objects in the JPEG library, these structs only define the
655 publicly visible methods and state variables of a module. Additional
656 private fields may exist after the public ones.
657*/
658
659
660/* Error handler object */
661
662struct cjpeg_wrbmp_jpeg_error_mgr {
663 /* Error exit handler: does not return to caller */
664 CJPEG_WRBMP_JMETHOD( void, error_exit,
665 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
666 /* Conditionally emit a trace or warning message */
667 CJPEG_WRBMP_JMETHOD( void, emit_message,
668 ( cjpeg_wrbmp_j_common_ptr cinfo, int msg_level ) );
669 /* Routine that actually outputs a trace or error message */
670 CJPEG_WRBMP_JMETHOD( void, output_message,
671 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
672 /* Format a message string for the most recent JPEG error or message */
673 CJPEG_WRBMP_JMETHOD( void, format_message,
674 ( cjpeg_wrbmp_j_common_ptr cinfo, char *buffer ) );
675#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */
676 /* Reset error state variables at start of a new image */
677 CJPEG_WRBMP_JMETHOD( void, reset_error_mgr,
678 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
679
680 /* The message ID code and any parameters are saved here.
681 A message can have one string parameter or up to 8 int parameters.
682 */
683 int msg_code;
684#define JMSG_STR_PARM_MAX 80
685 /*
686 union {
687 int i[8];
688 char s[JMSG_STR_PARM_MAX];
689 } msg_parm;
690 */
691 /* Standard state variables for error facility */
692
693 int trace_level; /* max msg_level that will be displayed */
694
695 /* For recoverable corrupt-data errors, we emit a warning message,
696 but keep going unless emit_message chooses to abort. emit_message
697 should count warnings in num_warnings. The surrounding application
698 can check for bad data by seeing if num_warnings is nonzero at the
699 end of processing.
700 */
701 long num_warnings; /* number of corrupt-data warnings */
702
703 /* These fields point to the table(s) of error message strings.
704 An application can change the table pointer to switch to a different
705 message list (typically, to change the language in which errors are
706 reported). Some applications may wish to add additional error codes
707 that will be handled by the JPEG library error mechanism; the second
708 table pointer is used for this purpose.
709
710 First table includes all errors generated by JPEG library itself.
711 Error code 0 is reserved for a "no such error string" message.
712 */
713 const char *const *jpeg_message_table; /* Library errors */
714 int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */
715 /* Second table can be added by application (see cjpeg/djpeg for example).
716 It contains strings numbered first_addon_message..last_addon_message.
717 */
718 const char *const *addon_message_table; /* Non-library errors */
719 int first_addon_message; /* code for first string in addon table */
720 int last_addon_message; /* code for last string in addon table */
721};
722
723
724/* Progress monitor object */
725
726struct cjpeg_wrbmp_jpeg_progress_mgr {
727 CJPEG_WRBMP_JMETHOD( void, progress_monitor,
728 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
729
730 long pass_counter; /* work units completed in this pass */
731 long pass_limit; /* total number of work units in this pass */
732 int completed_passes; /* passes completed so far */
733 int total_passes; /* total number of passes expected */
734};
735
736
737/* Data destination object for compression */
738
739struct cjpeg_wrbmp_jpeg_destination_mgr {
740 CJPEG_WRBMP_JOCTET
741 *next_output_byte; /* => next byte to write in buffer */
742 cjpeg_wrbmp_size_x
743 free_in_buffer; /* # of byte spaces remaining in buffer */
744
745 CJPEG_WRBMP_JMETHOD( void, init_destination,
746 ( cjpeg_wrbmp_j_compress_ptr cinfo ) );
747 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, empty_output_buffer,
748 ( cjpeg_wrbmp_j_compress_ptr cinfo ) );
749 CJPEG_WRBMP_JMETHOD( void, term_destination,
750 ( cjpeg_wrbmp_j_compress_ptr cinfo ) );
751};
752
753
754/* Data source object for decompression */
755
756struct cjpeg_wrbmp_jpeg_source_mgr {
757 const CJPEG_WRBMP_JOCTET
758 *next_input_byte; /* => next byte to read from buffer */
759 cjpeg_wrbmp_size_x bytes_in_buffer; /* # of bytes remaining in buffer */
760
761 CJPEG_WRBMP_JMETHOD( void, init_source,
762 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
763 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, fill_input_buffer,
764 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
765 CJPEG_WRBMP_JMETHOD( void, skip_input_data,
766 ( cjpeg_wrbmp_j_decompress_ptr cinfo, long num_bytes ) );
767 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, resync_to_restart,
768 ( cjpeg_wrbmp_j_decompress_ptr cinfo, int desired ) );
769 CJPEG_WRBMP_JMETHOD( void, term_source,
770 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
771};
772
773
774/* Memory manager object.
775 Allocates "small" objects (a few K total), "large" objects (tens of K),
776 and "really big" objects (virtual arrays with backing store if needed).
777 The memory manager does not allow individual objects to be freed; rather,
778 each created object is assigned to a pool, and whole pools can be freed
779 at once. This is faster and more convenient than remembering exactly what
780 to free, especially where malloc()/free() are not too speedy.
781 NB: alloc routines never return NULL. They exit to error_exit if not
782 successful.
783*/
784
785typedef struct jvirt_sarray_control *cjpeg_wrbmp_jvirt_sarray_ptr;
786typedef struct jvirt_barray_control *cjpeg_wrbmp_jvirt_barray_ptr;
787
788
789struct cjpeg_wrbmp_jpeg_memory_mgr {
790 /* Method pointers */
791 CJPEG_WRBMP_JMETHOD( void *, alloc_small,
792 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
793 cjpeg_wrbmp_size_x sizeofobject ) );
794 CJPEG_WRBMP_JMETHOD( void CJPEG_WRBMP_FAR *, alloc_large,
795 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
796 cjpeg_wrbmp_size_x sizeofobject ) );
797 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JSAMPARRAY, alloc_sarray,
798 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
799 CJPEG_WRBMP_JDIMENSION samplesperrow,
800 CJPEG_WRBMP_JDIMENSION numrows ) );
801 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JBLOCKARRAY, alloc_barray,
802 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
803 CJPEG_WRBMP_JDIMENSION blocksperrow,
804 CJPEG_WRBMP_JDIMENSION numrows ) );
805 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_jvirt_sarray_ptr,
806 request_virt_sarray, ( cjpeg_wrbmp_j_common_ptr cinfo,
807 int pool_id,
808 cjpeg_wrbmp_boolean pre_zero,
809 CJPEG_WRBMP_JDIMENSION samplesperrow,
810 CJPEG_WRBMP_JDIMENSION numrows,
811 CJPEG_WRBMP_JDIMENSION maxaccess ) );
812 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_jvirt_barray_ptr,
813 request_virt_barray, ( cjpeg_wrbmp_j_common_ptr cinfo,
814 int pool_id,
815 cjpeg_wrbmp_boolean pre_zero,
816 CJPEG_WRBMP_JDIMENSION blocksperrow,
817 CJPEG_WRBMP_JDIMENSION numrows,
818 CJPEG_WRBMP_JDIMENSION maxaccess ) );
819 CJPEG_WRBMP_JMETHOD( void, realize_virt_arrays,
820 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
821 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JSAMPARRAY, access_virt_sarray,
822 ( cjpeg_wrbmp_j_common_ptr cinfo,
823 cjpeg_wrbmp_jvirt_sarray_ptr ptr,
824 CJPEG_WRBMP_JDIMENSION start_row,
825 CJPEG_WRBMP_JDIMENSION num_rows,
826 cjpeg_wrbmp_boolean writable ) );
827 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JBLOCKARRAY, access_virt_barray,
828 ( cjpeg_wrbmp_j_common_ptr cinfo,
829 cjpeg_wrbmp_jvirt_barray_ptr ptr,
830 CJPEG_WRBMP_JDIMENSION start_row,
831 CJPEG_WRBMP_JDIMENSION num_rows,
832 cjpeg_wrbmp_boolean writable ) );
833 CJPEG_WRBMP_JMETHOD( void, free_pool,
834 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id ) );
835 CJPEG_WRBMP_JMETHOD( void, self_destruct,
836 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
837
838 /* Limit on memory allocation for this JPEG object. (Note that this is
839 merely advisory, not a guaranteed maximum; it only affects the space
840 used for virtual-array buffers.) May be changed by outer application
841 after creating the JPEG object.
842 */
843 long max_memory_to_use;
844
845 /* Maximum allocation request accepted by alloc_large. */
846 long max_alloc_chunk;
847};
848
849
850/* Routine signature for application-supplied marker processing methods.
851 Need not pass marker code since it is stored in cinfo->unread_marker.
852*/
853typedef CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean,
854 jpeg_marker_parser_method,
855 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
856
857/*
858 The JPEG library modules define JPEG_INTERNALS before including this file.
859 The internal structure declarations are read only when that is true.
860 Applications using the library should not include jpegint.h, but may wish
861 to include jerror.h.
862*/
863
864#ifdef CJPEG_JPEG6B_WRBMP_JPEG_INTERNALS
865#include "jpegint.h" /* fetch private declarations */
866#include "jerror.h" /* fetch error codes too */
867#endif
868
869#endif /* JPEGLIB_H */
diff --git a/all_pairs/source/cleanupSemaphores.c b/all_pairs/source/cleanupSemaphores.c
new file mode 100644
index 0000000..71ff989
--- /dev/null
+++ b/all_pairs/source/cleanupSemaphores.c
@@ -0,0 +1,10 @@
1#include <semaphore.h>
2
3int main(){
4 sem_unlink("/firstTacleSem");
5 sem_unlink("/secondTacleSem");
6 sem_unlink("/thirdTacleSem");
7 sem_unlink("/fourthTacleSem");
8 //no longer in use; delete last line after running once
9 //sem_unlink("/cacheTacleSem");
10}
diff --git a/all_pairs/source/dijkstra/ChangeLog.txt b/all_pairs/source/dijkstra/ChangeLog.txt
new file mode 100644
index 0000000..f96350b
--- /dev/null
+++ b/all_pairs/source/dijkstra/ChangeLog.txt
@@ -0,0 +1,44 @@
1File: dijkstra.c
2Original provenience: network section of MiBench
3
42015-11-30:
5- Replaced "NULL" with "0", remove #include of glibc_common.h
6- Removed commented code referring to variable "qKill"
7- Made ch, i, iPrev, iNode, iCost and iDist local variables
8- Stripped (inconsistently applied) Hungarian notation, replaced
9 prefix "q" with prefix "queue" for global variables, renamed
10 "next_in" to "queueNext" and "qNew" to "newItem"
11- Initialize queueHead statically (like queueCount and queueNext)
12- Prefixed all functions and global variables with "dijkstra_",
13 renaming "dijkstra" to "dijkstra_find"
14- Calculate a checksum in dijkstra_main, return its value in new
15 function dijkstra_return
16- Added (empty) function dijkstra_init and a main function
17- Reordered functions in source code: initialization- and
18 return-value-related functions first, followed by algorithm core
19 functions, followed by main functions
20- Added function prototypes
21- Applied code formatting with astyle as in the example
22- Added general TACLeBench header to beginning of source code
23
242016-03-15:
25- Return 0 if checksum is as expected, -1 otherwise
26- Make all initializations explicit
27- Touch input matrix with volatile to rule out optimizations
28- Add entrypoint pragma
29
302016-06-14:
31- Removed cast to make C++ compiler happy
32
33Files: input.h, input.c
34Original provenience: network section of MiBench
35
362015-11-30:
37- Prefix global variable "AdjMatrix" with "dijkstra_"
38- Applied code formatting with astyle as in the example
39
40File: glibc_common.h
41Original provenience: network section of MiBench
42
432015-11-30:
44- Removed file
diff --git a/all_pairs/source/dijkstra/dijkstra.c b/all_pairs/source/dijkstra/dijkstra.c
new file mode 100644
index 0000000..af86ea6
--- /dev/null
+++ b/all_pairs/source/dijkstra/dijkstra.c
@@ -0,0 +1,204 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: dijkstra
7
8 Author: unknown
9
10 Function: dijkstra finds the shortest path between nodes in a graph
11
12 Source: network section of MiBench
13
14 Changes: Made some variables local, compute checksum
15
16 License: GPL
17
18*/
19
20#include "../extra.h"
21#include "input.h"
22
23/*
24 Definitions of symbolic constants
25*/
26#define NONE 9999
27#define OUT_OF_MEMORY -1
28#define QUEUE_SIZE 1000
29
30/*
31 Type declarations
32*/
33struct _NODE {
34 int dist;
35 int prev;
36};
37
38struct _QITEM {
39 int node;
40 int dist;
41 int prev;
42 struct _QITEM *next;
43};
44
45/*
46 Global variable definitions
47*/
48struct _NODE dijkstra_rgnNodes[NUM_NODES];
49
50int dijkstra_queueCount;
51int dijkstra_queueNext;
52struct _QITEM *dijkstra_queueHead;
53struct _QITEM dijkstra_queueItems[QUEUE_SIZE];
54
55int dijkstra_checksum = 0;
56
57/*
58 Forward declaration of functions
59*/
60void dijkstra_init( void );
61int dijkstra_return( void );
62int dijkstra_enqueue( int node, int dist, int prev );
63void dijkstra_dequeue( int *node, int *dist, int *prev );
64int dijkstra_qcount( void );
65int dijkstra_find( int chStart, int chEnd );
66void dijkstra_main( void );
67//int main( void );
68
69void dijkstra_init( void )
70{
71 int i, k;
72 volatile int x = 0;
73 _Pragma( "loopbound min 100 max 100" )
74 for ( i = 0; i < NUM_NODES; i++ ) {
75 _Pragma( "loopbound min 100 max 100" )
76 for ( k = 0; k < NUM_NODES; k++ ) {
77 dijkstra_AdjMatrix[i][k] ^= x;
78 }
79 }
80
81 dijkstra_queueCount = 0;
82 dijkstra_queueNext = 0;
83 dijkstra_queueHead = ( struct _QITEM * )0;
84
85 dijkstra_checksum = 0;
86}
87
88int dijkstra_return( void )
89{
90 return ( ( dijkstra_checksum == 25 ) ? 0 : -1 );
91}
92
93int dijkstra_enqueue( int node, int dist, int prev )
94{
95 struct _QITEM *newItem = &dijkstra_queueItems[dijkstra_queueNext];
96 struct _QITEM *last = dijkstra_queueHead;
97
98 if ( ++dijkstra_queueNext >= QUEUE_SIZE )
99 return OUT_OF_MEMORY;
100 newItem->node = node;
101 newItem->dist = dist;
102 newItem->prev = prev;
103 newItem->next = 0;
104
105 if ( !last )
106 dijkstra_queueHead = newItem;
107 else {
108 /* TODO: where does this magic loop bound come from? */
109 _Pragma( "loopbound min 0 max 313" )
110 while ( last->next )
111 last = last->next;
112 last->next = newItem;
113 }
114 dijkstra_queueCount++;
115 return 0;
116}
117
118void dijkstra_dequeue( int *node, int *dist, int *prev )
119{
120 if ( dijkstra_queueHead ) {
121 *node = dijkstra_queueHead->node;
122 *dist = dijkstra_queueHead->dist;
123 *prev = dijkstra_queueHead->prev;
124 dijkstra_queueHead = dijkstra_queueHead->next;
125 dijkstra_queueCount--;
126 }
127}
128
129int dijkstra_qcount( void )
130{
131 return ( dijkstra_queueCount );
132}
133
134int dijkstra_find( int chStart, int chEnd )
135{
136 int ch;
137 int prev, node;
138 int cost, dist;
139 int i;
140
141 _Pragma( "loopbound min 100 max 100" )
142 for ( ch = 0; ch < NUM_NODES; ch++ ) {
143 dijkstra_rgnNodes[ch].dist = NONE;
144 dijkstra_rgnNodes[ch].prev = NONE;
145 }
146
147 if ( chStart == chEnd ) {
148 } else {
149 dijkstra_rgnNodes[chStart].dist = 0;
150 dijkstra_rgnNodes[chStart].prev = NONE;
151
152 if ( dijkstra_enqueue ( chStart, 0, NONE ) == OUT_OF_MEMORY )
153 return OUT_OF_MEMORY;
154
155 /* TODO: where does this magic loop bound come from? */
156 _Pragma( "loopbound min 618 max 928" )
157 while ( dijkstra_qcount() > 0 ) {
158 dijkstra_dequeue ( &node, &dist, &prev );
159 _Pragma( "loopbound min 100 max 100" )
160 for ( i = 0; i < NUM_NODES; i++ ) {
161 if ( ( cost = dijkstra_AdjMatrix[node][i] ) != NONE ) {
162 if ( ( NONE == dijkstra_rgnNodes[i].dist ) ||
163 ( dijkstra_rgnNodes[i].dist > ( cost + dist ) ) ) {
164 dijkstra_rgnNodes[i].dist = dist + cost;
165 dijkstra_rgnNodes[i].prev = node;
166 if ( dijkstra_enqueue ( i, dist + cost, node ) == OUT_OF_MEMORY )
167 return OUT_OF_MEMORY;
168 }
169 }
170 }
171 }
172 }
173 return 0;
174}
175
176void _Pragma( "entrypoint" ) dijkstra_main( void )
177{
178 int i, j;
179
180 /* finds 20 shortest paths between nodes */
181 _Pragma( "loopbound min 20 max 20" )
182 for ( i = 0, j = NUM_NODES / 2; i < 20; i++, j++ ) {
183 j = j % NUM_NODES;
184 if ( dijkstra_find( i, j ) == OUT_OF_MEMORY ) {
185 dijkstra_checksum += OUT_OF_MEMORY;
186 return;
187 } else
188 dijkstra_checksum += dijkstra_rgnNodes[j].dist;
189 dijkstra_queueNext = 0;
190 }
191}
192
193int main(int argc, char** argv )
194{
195 SET_UP
196 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
197 START_LOOP
198 dijkstra_init();
199 dijkstra_main();
200 STOP_LOOP
201 }
202 WRITE_TO_FILE
203 return ( dijkstra_return() );
204}
diff --git a/all_pairs/source/dijkstra/input.c b/all_pairs/source/dijkstra/input.c
new file mode 100644
index 0000000..ab7ffd5
--- /dev/null
+++ b/all_pairs/source/dijkstra/input.c
@@ -0,0 +1,105 @@
1#include "input.h"
2
3unsigned char dijkstra_AdjMatrix[NUM_NODES][NUM_NODES] = {
4 {32, 32, 54, 12, 52, 56, 8, 30, 44, 94, 44, 39, 65, 19, 51, 91, 1, 5, 89, 34, 25, 58, 20, 51, 38, 65, 30, 7, 20, 10, 51, 18, 43, 71, 97, 61, 26, 5, 57, 70, 65, 0, 75, 29, 86, 93, 87, 87, 64, 75, 88, 89, 100, 7, 40, 37, 38, 36, 44, 24, 46, 95, 43, 89, 32, 5, 15, 58, 77, 72, 95, 8, 38, 69, 37, 24, 27, 90, 77, 92, 31, 30, 80, 30, 37, 86, 33, 76, 21, 77, 100, 68, 37, 8, 22, 69, 81, 38, 94, 57},
5 {76, 54, 65, 14, 89, 69, 4, 16, 24, 47, 7, 21, 78, 53, 17, 81, 39, 50, 22, 60, 93, 89, 94, 30, 97, 16, 65, 43, 20, 24, 67, 62, 78, 98, 42, 67, 32, 46, 49, 57, 60, 56, 44, 37, 75, 62, 17, 13, 11, 40, 40, 4, 95, 100, 0, 57, 82, 31, 0, 1, 56, 67, 30, 100, 64, 72, 66, 63, 18, 81, 19, 44, 2, 63, 81, 78, 91, 64, 91, 2, 70, 97, 73, 64, 97, 39, 21, 78, 70, 21, 46, 25, 54, 76, 92, 84, 47, 57, 46, 31},
6 {38, 31, 75, 40, 61, 21, 84, 51, 86, 41, 19, 21, 37, 58, 86, 100, 97, 73, 44, 67, 60, 90, 58, 13, 31, 49, 63, 44, 73, 76, 76, 77, 73, 16, 83, 100, 4, 67, 51, 56, 7, 36, 77, 10, 95, 28, 10, 57, 0, 54, 23, 60, 9, 48, 39, 40, 97, 69, 84, 35, 44, 25, 11, 83, 8, 61, 83, 12, 27, 100, 34, 0, 35, 10, 10, 96, 39, 87, 53, 5, 40, 42, 66, 15, 90, 71, 55, 87, 39, 5, 88, 49, 97, 100, 32, 4, 60, 81, 83, 53},
7 {80, 16, 53, 14, 94, 29, 77, 99, 16, 29, 3, 22, 71, 35, 4, 61, 6, 25, 13, 11, 30, 0, 27, 94, 66, 25, 64, 92, 5, 47, 44, 85, 29, 63, 65, 89, 59, 41, 87, 41, 36, 57, 29, 7, 92, 33, 34, 64, 59, 47, 76, 55, 13, 2, 48, 46, 27, 12, 37, 99, 25, 48, 83, 20, 77, 13, 9, 35, 55, 62, 76, 57, 18, 72, 64, 10, 4, 64, 74, 63, 77, 15, 18, 91, 84, 32, 36, 77, 10, 39, 75, 35, 87, 23, 22, 30, 37, 31, 65, 58},
8 {59, 7, 14, 78, 79, 45, 54, 83, 8, 94, 12, 86, 9, 97, 42, 93, 95, 44, 70, 5, 83, 10, 40, 36, 34, 62, 66, 71, 59, 97, 95, 18, 3, 8, 62, 48, 19, 15, 98, 28, 8, 9, 80, 84, 72, 21, 43, 66, 65, 79, 71, 13, 89, 78, 49, 22, 5, 14, 59, 65, 11, 53, 49, 81, 28, 77, 29, 47, 92, 26, 41, 66, 1, 20, 50, 73, 7, 59, 4, 72, 37, 76, 86, 25, 19, 0, 14, 24, 15, 73, 55, 93, 93, 3, 73, 87, 80, 68, 100, 37},
9 {94, 41, 3, 61, 27, 19, 33, 35, 78, 38, 73, 14, 80, 58, 5, 99, 59, 19, 22, 40, 59, 78, 32, 17, 47, 71, 3, 94, 39, 2, 97, 99, 9, 66, 60, 37, 85, 59, 38, 28, 63, 10, 8, 8, 35, 81, 6, 60, 100, 96, 66, 24, 39, 64, 41, 52, 34, 10, 11, 39, 80, 8, 4, 89, 74, 64, 92, 25, 89, 29, 19, 18, 6, 28, 26, 7, 8, 33, 67, 74, 95, 32, 99, 33, 96, 5, 51, 96, 83, 63, 35, 62, 71, 39, 16, 10, 69, 8, 35, 23},
10 {3, 55, 41, 76, 49, 68, 83, 23, 67, 15, 97, 61, 13, 61, 60, 75, 33, 77, 71, 15, 39, 72, 43, 76, 77, 59, 53, 11, 33, 88, 34, 37, 8, 76, 79, 23, 9, 62, 46, 76, 43, 9, 2, 57, 70, 28, 31, 69, 4, 68, 84, 10, 39, 26, 52, 82, 52, 4, 93, 85, 59, 94, 21, 33, 35, 67, 57, 44, 28, 69, 86, 37, 78, 54, 94, 14, 48, 25, 83, 18, 59, 33, 28, 99, 25, 81, 46, 77, 51, 39, 62, 9, 32, 49, 43, 33, 15, 100, 77, 9},
11 {68, 28, 47, 12, 82, 6, 26, 96, 98, 75, 13, 57, 7, 8, 55, 33, 55, 0, 76, 5, 5, 3, 15, 3, 53, 58, 36, 34, 23, 79, 10, 57, 6, 23, 69, 54, 29, 61, 49, 27, 36, 63, 84, 9, 71, 4, 8, 25, 71, 85, 97, 77, 88, 11, 46, 6, 35, 83, 7, 24, 27, 17, 82, 34, 40, 16, 88, 69, 44, 3, 62, 46, 32, 45, 55, 2, 49, 64, 94, 87, 14, 90, 63, 68, 68, 75, 75, 2, 23, 82, 27, 51, 65, 75, 85, 71, 57, 38, 39, 0},
12 {7, 1, 46, 39, 12, 68, 41, 28, 31, 0, 14, 45, 91, 43, 12, 58, 17, 53, 26, 41, 0, 19, 92, 31, 60, 42, 1, 17, 46, 41, 84, 54, 8, 97, 93, 20, 64, 0, 14, 61, 0, 28, 72, 57, 71, 50, 81, 89, 70, 7, 96, 70, 26, 87, 1, 87, 95, 69, 70, 40, 9, 19, 94, 84, 15, 87, 71, 45, 87, 85, 5, 53, 13, 43, 10, 50, 94, 91, 38, 63, 98, 33, 99, 91, 86, 66, 43, 80, 35, 79, 20, 10, 98, 80, 61, 13, 66, 31, 24, 18},
13 {82, 97, 72, 61, 39, 48, 11, 99, 38, 49, 27, 2, 49, 26, 59, 0, 58, 1, 81, 59, 80, 67, 70, 77, 46, 97, 56, 79, 27, 81, 63, 75, 77, 0, 36, 82, 48, 47, 81, 53, 62, 7, 55, 77, 100, 13, 78, 24, 81, 24, 83, 26, 91, 18, 2, 2, 14, 25, 47, 7, 72, 10, 83, 14, 10, 18, 96, 25, 65, 42, 78, 93, 16, 32, 70, 15, 11, 47, 5, 58, 71, 89, 84, 27, 73, 86, 96, 88, 77, 43, 95, 48, 19, 43, 62, 96, 61, 24, 20, 92},
14 {66, 98, 85, 82, 96, 20, 64, 73, 67, 69, 30, 3, 23, 13, 97, 97, 66, 58, 50, 42, 0, 44, 57, 86, 54, 85, 82, 14, 8, 1, 73, 41, 66, 23, 22, 61, 43, 86, 0, 9, 21, 30, 79, 44, 44, 75, 40, 76, 99, 56, 17, 100, 67, 40, 51, 20, 25, 32, 0, 100, 0, 73, 40, 66, 96, 29, 93, 38, 81, 93, 13, 1, 90, 92, 46, 100, 32, 52, 75, 31, 8, 58, 97, 75, 99, 13, 61, 90, 46, 61, 89, 12, 34, 96, 78, 96, 24, 36, 34, 4},
15 {96, 13, 73, 85, 72, 18, 50, 70, 36, 24, 67, 10, 82, 29, 51, 80, 43, 11, 35, 89, 39, 24, 0, 73, 86, 44, 34, 9, 46, 34, 80, 41, 48, 52, 92, 19, 36, 41, 55, 39, 31, 22, 49, 13, 51, 67, 59, 94, 44, 95, 48, 83, 85, 48, 21, 70, 58, 56, 45, 4, 90, 91, 11, 3, 43, 70, 89, 45, 77, 44, 84, 8, 66, 100, 88, 83, 66, 46, 77, 76, 6, 24, 59, 91, 39, 46, 26, 97, 68, 37, 0, 58, 28, 79, 27, 37, 48, 16, 82, 24},
16 {60, 66, 32, 92, 65, 19, 74, 97, 32, 16, 72, 38, 41, 97, 96, 46, 43, 88, 42, 77, 25, 9, 34, 19, 88, 28, 56, 1, 44, 3, 25, 70, 69, 24, 27, 100, 9, 0, 96, 7, 84, 34, 12, 91, 30, 7, 36, 39, 95, 78, 16, 86, 53, 16, 71, 6, 44, 26, 7, 54, 30, 100, 23, 65, 23, 50, 65, 99, 17, 26, 73, 67, 60, 85, 57, 57, 92, 93, 96, 52, 36, 78, 4, 90, 61, 75, 96, 4, 68, 3, 25, 64, 69, 14, 28, 58, 31, 59, 56, 48},
17 {86, 28, 81, 45, 12, 37, 1, 70, 29, 64, 89, 31, 41, 93, 20, 1, 67, 83, 73, 0, 52, 98, 64, 20, 78, 93, 78, 8, 17, 100, 22, 2, 95, 2, 48, 6, 39, 15, 43, 34, 79, 31, 66, 87, 23, 52, 54, 56, 34, 93, 57, 52, 56, 87, 72, 34, 79, 15, 42, 63, 15, 65, 65, 9, 67, 79, 82, 73, 95, 91, 6, 39, 21, 38, 92, 10, 91, 46, 67, 91, 38, 90, 43, 95, 76, 81, 28, 21, 63, 70, 84, 78, 0, 48, 53, 68, 94, 0, 40, 88},
18 {92, 12, 93, 12, 17, 85, 23, 7, 30, 56, 64, 34, 45, 73, 28, 87, 20, 22, 7, 83, 59, 91, 26, 59, 5, 79, 26, 99, 79, 32, 52, 70, 11, 44, 83, 28, 95, 72, 1, 91, 27, 65, 25, 38, 4, 19, 24, 24, 8, 99, 73, 67, 89, 99, 25, 60, 77, 18, 24, 21, 16, 42, 58, 27, 53, 6, 55, 47, 78, 56, 38, 71, 88, 29, 8, 58, 48, 99, 48, 56, 97, 20, 89, 52, 18, 14, 78, 61, 99, 2, 48, 14, 44, 5, 42, 97, 11, 63, 10, 55},
19 {19, 48, 25, 73, 77, 100, 30, 91, 99, 78, 13, 95, 98, 1, 12, 82, 82, 91, 8, 80, 93, 22, 61, 2, 28, 2, 66, 5, 65, 76, 61, 50, 90, 86, 22, 32, 52, 52, 22, 50, 96, 1, 10, 59, 70, 90, 40, 51, 80, 14, 98, 38, 37, 58, 40, 31, 60, 72, 2, 91, 47, 63, 7, 2, 15, 29, 34, 67, 48, 23, 83, 9, 24, 59, 69, 94, 48, 8, 11, 27, 90, 8, 31, 93, 32, 38, 90, 58, 9, 92, 48, 23, 55, 55, 25, 36, 51, 60, 69, 65},
20 {83, 51, 74, 73, 76, 42, 67, 24, 17, 44, 17, 73, 18, 49, 65, 50, 87, 54, 7, 62, 11, 21, 85, 32, 77, 10, 68, 94, 70, 36, 24, 52, 53, 98, 24, 96, 6, 57, 86, 90, 67, 2, 62, 85, 17, 26, 34, 70, 46, 41, 32, 23, 63, 16, 56, 5, 26, 23, 65, 62, 26, 89, 80, 45, 52, 71, 6, 58, 27, 92, 47, 61, 61, 75, 45, 78, 67, 46, 14, 12, 53, 46, 36, 82, 28, 58, 87, 21, 47, 17, 83, 73, 72, 63, 85, 24, 33, 91, 48, 26},
21 {49, 62, 53, 9, 36, 99, 53, 3, 10, 67, 82, 63, 79, 84, 45, 7, 41, 98, 95, 89, 82, 43, 27, 53, 5, 78, 77, 4, 69, 25, 98, 17, 53, 16, 93, 89, 81, 45, 58, 91, 12, 40, 54, 91, 90, 65, 64, 31, 62, 58, 86, 43, 1, 12, 63, 73, 91, 39, 44, 25, 30, 7, 8, 83, 23, 0, 38, 4, 45, 96, 61, 23, 1, 14, 81, 92, 45, 44, 89, 74, 69, 74, 83, 36, 52, 45, 75, 8, 85, 18, 100, 81, 92, 7, 30, 82, 74, 34, 52, 86},
22 {96, 12, 8, 98, 94, 89, 55, 38, 100, 43, 11, 68, 83, 95, 3, 0, 39, 78, 9, 90, 63, 8, 37, 20, 83, 67, 1, 56, 67, 53, 7, 62, 66, 16, 25, 25, 71, 80, 63, 70, 89, 75, 3, 37, 35, 6, 38, 74, 51, 47, 30, 80, 21, 67, 100, 3, 100, 68, 26, 66, 87, 33, 27, 52, 15, 53, 43, 53, 99, 6, 22, 88, 47, 26, 24, 82, 99, 28, 21, 15, 75, 51, 95, 63, 84, 61, 66, 83, 28, 58, 14, 14, 58, 42, 33, 39, 61, 76, 92, 25},
23 {48, 14, 79, 95, 6, 70, 76, 4, 98, 98, 87, 39, 14, 81, 1, 99, 7, 33, 81, 1, 92, 96, 16, 15, 3, 15, 54, 30, 57, 12, 55, 5, 93, 0, 100, 99, 70, 42, 69, 67, 39, 21, 5, 53, 2, 6, 51, 76, 40, 99, 78, 98, 60, 60, 79, 63, 75, 99, 59, 98, 10, 80, 2, 2, 80, 69, 67, 49, 10, 2, 16, 49, 23, 88, 68, 92, 95, 86, 68, 0, 84, 11, 64, 43, 71, 42, 72, 45, 40, 97, 42, 17, 76, 11, 86, 56, 80, 19, 4, 90},
24 {88, 87, 4, 77, 75, 72, 69, 35, 23, 2, 35, 6, 80, 99, 15, 50, 6, 53, 61, 46, 49, 69, 29, 25, 80, 15, 47, 25, 34, 51, 14, 21, 38, 85, 98, 79, 57, 32, 13, 46, 0, 48, 53, 80, 12, 34, 29, 18, 54, 56, 30, 2, 25, 60, 94, 4, 41, 40, 30, 75, 58, 10, 62, 62, 96, 59, 40, 18, 58, 53, 64, 24, 67, 83, 4, 79, 17, 100, 63, 37, 56, 93, 39, 81, 18, 100, 51, 59, 5, 81, 100, 63, 58, 61, 24, 53, 87, 64, 37, 10},
25 {83, 67, 34, 49, 50, 38, 27, 33, 4, 56, 70, 60, 15, 75, 6, 33, 40, 57, 59, 46, 4, 24, 75, 62, 86, 100, 81, 38, 29, 17, 48, 79, 84, 48, 27, 100, 87, 21, 32, 57, 77, 68, 16, 92, 9, 22, 92, 49, 79, 16, 95, 83, 40, 70, 10, 25, 35, 91, 29, 30, 74, 43, 8, 24, 92, 2, 23, 44, 23, 22, 0, 66, 56, 16, 58, 65, 4, 15, 14, 49, 31, 75, 32, 71, 10, 8, 63, 45, 100, 92, 42, 73, 1, 50, 97, 93, 18, 87, 36, 41},
26 {75, 36, 7, 30, 18, 31, 96, 22, 12, 76, 71, 43, 50, 69, 80, 61, 78, 42, 72, 43, 0, 13, 15, 68, 30, 79, 60, 48, 31, 62, 56, 5, 98, 29, 1, 82, 26, 97, 3, 38, 72, 40, 81, 89, 76, 26, 15, 53, 35, 87, 96, 1, 67, 77, 69, 97, 21, 28, 10, 18, 90, 32, 23, 53, 61, 25, 34, 87, 88, 3, 91, 26, 9, 37, 81, 85, 64, 96, 3, 99, 82, 65, 100, 48, 42, 68, 10, 29, 62, 88, 48, 17, 19, 37, 70, 47, 28, 70, 100, 16},
27 {73, 91, 8, 82, 94, 89, 33, 57, 84, 36, 21, 31, 1, 87, 46, 9, 20, 56, 4, 82, 9, 52, 99, 96, 56, 34, 8, 84, 3, 7, 66, 42, 64, 74, 24, 58, 28, 23, 81, 11, 59, 2, 9, 26, 55, 55, 1, 76, 77, 6, 23, 87, 24, 89, 82, 80, 22, 90, 30, 93, 63, 96, 34, 27, 36, 24, 51, 30, 47, 98, 8, 73, 100, 17, 99, 21, 72, 0, 97, 48, 73, 86, 34, 97, 74, 82, 43, 63, 37, 73, 55, 0, 34, 55, 94, 36, 80, 10, 67, 93},
28 {7, 75, 65, 74, 92, 64, 95, 63, 30, 57, 77, 2, 42, 11, 65, 16, 59, 7, 45, 97, 46, 66, 63, 81, 20, 56, 83, 66, 32, 49, 59, 39, 90, 23, 12, 81, 53, 73, 9, 49, 29, 87, 17, 72, 64, 83, 54, 89, 90, 65, 85, 36, 30, 13, 83, 16, 35, 65, 83, 67, 14, 7, 73, 70, 97, 85, 51, 16, 24, 26, 65, 53, 79, 83, 91, 8, 65, 10, 98, 20, 41, 48, 22, 71, 62, 4, 54, 63, 36, 36, 30, 16, 9, 2, 86, 5, 53, 36, 88, 77},
29 {29, 53, 97, 74, 1, 53, 83, 32, 30, 46, 52, 71, 94, 41, 42, 21, 45, 62, 85, 81, 98, 81, 97, 73, 83, 83, 44, 1, 85, 32, 45, 80, 85, 41, 54, 52, 60, 2, 84, 90, 48, 1, 61, 7, 42, 69, 96, 54, 30, 46, 0, 94, 26, 64, 32, 75, 46, 76, 42, 97, 7, 87, 43, 58, 94, 97, 9, 54, 99, 59, 43, 12, 61, 70, 19, 69, 4, 14, 22, 0, 26, 23, 60, 52, 53, 92, 93, 65, 68, 35, 61, 75, 88, 70, 33, 82, 66, 8, 35, 30},
30 {68, 44, 8, 95, 81, 28, 63, 85, 8, 52, 86, 35, 41, 11, 53, 94, 3, 12, 58, 71, 13, 85, 11, 0, 55, 44, 82, 87, 19, 83, 84, 87, 27, 92, 81, 7, 86, 9, 58, 61, 27, 9, 62, 68, 21, 81, 61, 24, 93, 85, 61, 72, 70, 72, 73, 91, 16, 20, 77, 35, 3, 26, 88, 97, 18, 34, 3, 70, 9, 27, 30, 37, 37, 92, 4, 24, 73, 32, 48, 31, 83, 8, 3, 52, 80, 42, 8, 62, 62, 52, 63, 65, 78, 16, 27, 62, 50, 30, 32, 26},
31 {24, 62, 63, 27, 20, 67, 51, 59, 65, 65, 90, 48, 73, 93, 66, 18, 0, 75, 47, 63, 26, 76, 94, 3, 59, 21, 66, 75, 17, 64, 0, 41, 25, 63, 68, 11, 97, 85, 70, 61, 49, 60, 8, 88, 18, 41, 6, 19, 15, 19, 48, 41, 61, 41, 10, 19, 62, 42, 95, 46, 5, 95, 53, 98, 58, 21, 8, 20, 5, 79, 81, 21, 4, 56, 8, 89, 97, 81, 74, 11, 100, 21, 18, 61, 29, 95, 46, 57, 37, 40, 2, 42, 1, 56, 5, 59, 43, 14, 79, 14},
32 {59, 25, 35, 29, 81, 44, 84, 43, 24, 58, 20, 91, 45, 38, 17, 74, 100, 63, 31, 36, 3, 33, 44, 71, 55, 50, 96, 98, 30, 40, 12, 55, 65, 13, 50, 12, 57, 33, 55, 48, 91, 42, 38, 36, 46, 55, 76, 45, 17, 6, 81, 87, 6, 25, 57, 61, 41, 52, 25, 37, 92, 3, 92, 23, 16, 7, 35, 74, 40, 56, 21, 98, 98, 59, 100, 44, 80, 75, 89, 97, 82, 36, 50, 54, 27, 6, 14, 68, 25, 5, 4, 83, 8, 62, 5, 25, 69, 40, 65, 75},
33 {63, 52, 72, 60, 10, 71, 70, 56, 12, 59, 52, 94, 95, 68, 13, 21, 41, 94, 55, 66, 100, 25, 48, 7, 53, 54, 99, 88, 60, 63, 62, 22, 14, 34, 49, 91, 71, 18, 46, 83, 77, 65, 42, 37, 32, 55, 24, 39, 15, 45, 4, 14, 36, 19, 21, 89, 39, 87, 76, 99, 49, 4, 88, 64, 4, 36, 54, 75, 20, 67, 24, 64, 31, 32, 0, 29, 54, 92, 69, 69, 36, 39, 83, 39, 58, 70, 27, 63, 56, 70, 28, 5, 74, 15, 35, 78, 17, 55, 18, 37},
34 {88, 8, 0, 85, 41, 68, 14, 95, 59, 49, 63, 61, 54, 11, 66, 79, 81, 94, 41, 3, 29, 69, 75, 69, 50, 9, 46, 33, 30, 30, 71, 18, 39, 37, 2, 80, 4, 83, 40, 29, 98, 2, 57, 52, 13, 22, 30, 60, 82, 71, 29, 10, 6, 3, 79, 22, 79, 91, 56, 76, 21, 26, 94, 26, 63, 62, 72, 34, 45, 11, 29, 42, 13, 86, 94, 93, 75, 90, 18, 56, 27, 48, 33, 33, 17, 78, 55, 63, 69, 10, 38, 56, 2, 31, 48, 32, 93, 19, 32, 3},
35 {30, 61, 46, 43, 13, 5, 1, 88, 96, 86, 9, 89, 100, 42, 21, 17, 20, 42, 80, 55, 19, 17, 10, 88, 14, 58, 19, 6, 77, 17, 77, 73, 79, 22, 15, 58, 94, 83, 45, 55, 68, 20, 43, 68, 63, 30, 51, 49, 39, 97, 3, 58, 13, 80, 45, 27, 3, 31, 100, 80, 48, 76, 52, 93, 64, 33, 50, 24, 82, 61, 45, 15, 82, 89, 49, 10, 85, 100, 59, 23, 96, 28, 81, 75, 7, 93, 68, 10, 90, 34, 56, 3, 76, 74, 97, 6, 73, 12, 30, 20},
36 {40, 75, 35, 88, 29, 85, 64, 14, 50, 22, 37, 12, 16, 85, 87, 23, 77, 21, 100, 66, 55, 21, 35, 30, 95, 31, 2, 33, 10, 32, 53, 16, 74, 54, 70, 69, 38, 33, 83, 55, 55, 87, 67, 71, 71, 19, 60, 13, 40, 25, 45, 61, 46, 80, 58, 6, 78, 60, 39, 88, 93, 58, 70, 32, 11, 39, 0, 16, 72, 50, 71, 93, 36, 37, 29, 6, 56, 55, 19, 63, 80, 64, 23, 25, 43, 81, 98, 87, 41, 2, 40, 100, 60, 9, 31, 37, 14, 98, 53, 86},
37 {47, 90, 44, 83, 26, 73, 55, 49, 27, 40, 11, 73, 70, 0, 64, 13, 82, 61, 66, 89, 29, 6, 88, 89, 15, 85, 93, 30, 82, 11, 82, 96, 1, 26, 78, 27, 65, 100, 42, 93, 39, 53, 31, 9, 54, 96, 89, 1, 22, 54, 90, 52, 60, 43, 6, 42, 27, 99, 72, 75, 10, 19, 70, 11, 45, 14, 4, 10, 13, 47, 69, 52, 66, 100, 27, 86, 61, 15, 53, 84, 36, 42, 35, 96, 85, 41, 37, 78, 40, 75, 53, 16, 95, 22, 94, 5, 36, 98, 15, 15},
38 {10, 50, 34, 77, 16, 61, 28, 77, 43, 82, 60, 79, 90, 95, 74, 41, 2, 78, 18, 8, 18, 71, 24, 12, 60, 17, 85, 62, 81, 66, 78, 92, 16, 11, 34, 32, 38, 28, 75, 81, 9, 1, 59, 66, 62, 100, 6, 64, 43, 24, 72, 61, 62, 62, 40, 21, 79, 24, 49, 26, 90, 26, 84, 72, 3, 84, 70, 8, 11, 45, 89, 88, 46, 14, 53, 74, 80, 59, 38, 89, 83, 9, 15, 10, 38, 55, 31, 83, 45, 81, 8, 1, 73, 92, 73, 43, 75, 9, 51, 53},
39 {54, 5, 40, 66, 86, 59, 39, 31, 17, 43, 19, 66, 19, 1, 77, 57, 22, 74, 39, 68, 20, 14, 35, 60, 5, 7, 2, 47, 16, 19, 66, 36, 91, 5, 68, 43, 30, 74, 40, 47, 83, 26, 79, 1, 27, 21, 24, 49, 96, 64, 83, 82, 78, 17, 41, 49, 92, 9, 62, 74, 28, 27, 77, 86, 99, 44, 95, 28, 84, 34, 41, 33, 60, 20, 34, 87, 41, 59, 36, 2, 89, 85, 85, 32, 2, 25, 47, 94, 35, 9, 67, 29, 2, 43, 81, 1, 54, 75, 96, 3},
40 {9, 37, 36, 35, 23, 37, 22, 30, 62, 24, 33, 50, 8, 84, 48, 77, 8, 95, 70, 9, 70, 37, 5, 73, 46, 86, 74, 100, 27, 35, 70, 2, 72, 5, 37, 95, 42, 25, 25, 3, 49, 24, 19, 24, 7, 67, 0, 82, 28, 71, 92, 98, 74, 63, 70, 86, 14, 9, 52, 41, 45, 21, 43, 83, 93, 47, 44, 35, 72, 35, 4, 88, 59, 91, 11, 32, 57, 11, 13, 51, 48, 71, 49, 88, 33, 85, 40, 48, 61, 92, 55, 5, 79, 65, 54, 71, 11, 98, 72, 83},
41 {32, 43, 70, 57, 33, 47, 89, 56, 25, 69, 7, 73, 39, 56, 27, 39, 6, 67, 53, 67, 24, 74, 38, 2, 38, 93, 73, 49, 56, 11, 99, 89, 54, 34, 11, 87, 48, 67, 42, 73, 35, 49, 11, 40, 71, 4, 45, 78, 71, 98, 10, 95, 38, 49, 63, 76, 41, 36, 92, 97, 47, 56, 51, 0, 56, 63, 53, 3, 29, 95, 76, 30, 44, 54, 70, 81, 58, 82, 58, 96, 45, 69, 56, 83, 84, 19, 59, 24, 21, 16, 87, 34, 72, 4, 0, 27, 33, 53, 31, 28},
42 {47, 73, 58, 57, 26, 94, 38, 85, 75, 62, 80, 87, 97, 35, 69, 80, 20, 27, 3, 41, 43, 57, 75, 81, 27, 75, 8, 60, 27, 5, 88, 41, 78, 11, 98, 71, 71, 1, 55, 12, 64, 0, 99, 60, 1, 67, 40, 22, 61, 9, 63, 70, 32, 4, 51, 59, 79, 25, 18, 73, 30, 72, 13, 7, 49, 77, 78, 87, 79, 99, 99, 42, 65, 63, 68, 67, 96, 7, 55, 56, 84, 84, 93, 15, 88, 43, 75, 33, 34, 59, 72, 64, 98, 85, 37, 12, 27, 82, 99, 5},
43 {80, 63, 13, 11, 92, 48, 44, 88, 55, 99, 9, 4, 48, 1, 20, 2, 10, 61, 1, 44, 86, 73, 74, 83, 23, 11, 62, 50, 93, 26, 22, 38, 90, 1, 15, 47, 49, 59, 34, 71, 23, 44, 75, 38, 11, 61, 40, 22, 21, 41, 32, 7, 13, 6, 56, 36, 84, 17, 52, 76, 44, 74, 80, 100, 42, 96, 46, 91, 20, 81, 27, 10, 91, 2, 48, 1, 29, 88, 90, 51, 95, 22, 58, 7, 95, 13, 9, 78, 31, 61, 19, 41, 1, 65, 40, 43, 26, 86, 100, 47},
44 {32, 94, 23, 22, 62, 71, 91, 91, 58, 80, 41, 18, 68, 65, 25, 62, 79, 0, 5, 76, 27, 24, 83, 28, 56, 22, 37, 82, 74, 3, 95, 6, 97, 17, 95, 24, 54, 85, 14, 78, 31, 56, 96, 99, 20, 87, 27, 65, 87, 32, 6, 14, 23, 89, 8, 45, 77, 12, 26, 51, 82, 88, 23, 44, 71, 17, 68, 25, 69, 82, 2, 100, 3, 99, 64, 91, 85, 91, 21, 38, 90, 28, 52, 79, 83, 26, 23, 60, 38, 49, 10, 86, 2, 33, 29, 74, 16, 97, 65, 51},
45 {45, 67, 16, 48, 31, 81, 4, 16, 37, 26, 20, 93, 20, 38, 71, 2, 64, 94, 62, 69, 9, 72, 54, 11, 71, 84, 51, 54, 80, 15, 4, 24, 83, 88, 39, 80, 68, 43, 62, 71, 35, 82, 64, 55, 19, 0, 58, 84, 95, 19, 18, 3, 58, 72, 81, 95, 55, 32, 14, 1, 47, 19, 92, 96, 6, 30, 76, 40, 40, 37, 77, 75, 19, 6, 30, 38, 7, 54, 88, 68, 73, 5, 71, 97, 78, 51, 58, 99, 49, 72, 66, 97, 57, 58, 58, 63, 54, 33, 69, 60},
46 {37, 12, 1, 56, 18, 31, 60, 92, 51, 14, 59, 90, 19, 29, 87, 63, 47, 10, 28, 96, 82, 94, 58, 39, 17, 16, 68, 38, 15, 3, 64, 52, 15, 65, 74, 100, 62, 0, 92, 12, 14, 50, 2, 33, 46, 55, 63, 59, 65, 91, 20, 46, 50, 79, 51, 34, 61, 19, 72, 76, 89, 35, 95, 3, 67, 68, 69, 28, 68, 60, 41, 82, 77, 43, 82, 22, 98, 44, 47, 28, 0, 67, 74, 50, 11, 92, 84, 72, 77, 21, 14, 65, 23, 8, 34, 90, 42, 2, 84, 10},
47 {63, 24, 58, 5, 33, 5, 94, 97, 15, 40, 24, 15, 6, 65, 32, 18, 56, 82, 56, 32, 70, 70, 97, 93, 78, 30, 48, 87, 99, 31, 97, 27, 22, 20, 32, 55, 93, 25, 52, 7, 31, 42, 90, 4, 6, 88, 89, 62, 35, 44, 60, 4, 81, 56, 63, 24, 52, 10, 10, 17, 8, 73, 44, 30, 94, 77, 51, 86, 68, 69, 59, 66, 11, 48, 70, 84, 1, 58, 12, 37, 68, 72, 41, 48, 95, 71, 73, 12, 47, 83, 29, 55, 56, 74, 51, 15, 16, 2, 67, 50},
48 {71, 92, 15, 82, 6, 51, 66, 7, 75, 44, 44, 43, 15, 52, 57, 9, 22, 96, 89, 35, 79, 17, 91, 0, 57, 7, 82, 73, 9, 14, 90, 81, 5, 4, 28, 11, 22, 60, 19, 97, 3, 29, 5, 86, 81, 63, 61, 69, 58, 49, 71, 2, 67, 27, 69, 90, 34, 50, 29, 44, 64, 18, 91, 36, 89, 85, 47, 10, 45, 32, 7, 14, 62, 12, 100, 8, 41, 61, 44, 100, 9, 14, 68, 42, 41, 37, 99, 75, 87, 27, 85, 17, 45, 75, 53, 33, 26, 66, 10, 71},
49 {99, 84, 85, 60, 62, 51, 68, 3, 11, 11, 69, 87, 92, 36, 96, 32, 39, 94, 74, 93, 87, 58, 9, 31, 100, 28, 30, 25, 94, 6, 62, 92, 90, 12, 17, 52, 29, 86, 55, 40, 63, 90, 94, 21, 92, 55, 53, 31, 14, 93, 23, 0, 17, 99, 98, 16, 26, 27, 7, 86, 34, 35, 78, 90, 13, 95, 41, 43, 46, 62, 49, 76, 51, 42, 97, 9, 63, 15, 40, 77, 8, 63, 43, 25, 61, 40, 7, 53, 68, 81, 38, 68, 82, 82, 57, 95, 43, 65, 37, 55},
50 {93, 87, 30, 10, 95, 93, 19, 58, 75, 59, 0, 83, 88, 44, 74, 14, 50, 47, 67, 17, 94, 71, 51, 75, 53, 75, 69, 96, 5, 73, 16, 98, 59, 13, 7, 19, 5, 93, 43, 80, 17, 44, 28, 4, 54, 68, 18, 3, 14, 51, 88, 7, 22, 4, 48, 41, 45, 17, 2, 50, 90, 18, 14, 14, 31, 88, 33, 3, 81, 77, 49, 98, 87, 44, 2, 6, 11, 87, 76, 93, 4, 63, 66, 26, 34, 14, 33, 79, 98, 35, 29, 53, 19, 43, 67, 51, 30, 66, 20, 77},
51 {8, 69, 75, 61, 79, 43, 33, 91, 96, 9, 49, 100, 38, 14, 25, 72, 28, 58, 51, 92, 59, 46, 44, 79, 55, 77, 96, 51, 9, 15, 28, 17, 50, 69, 45, 29, 11, 78, 86, 6, 53, 34, 73, 92, 48, 98, 29, 43, 22, 46, 34, 47, 92, 79, 25, 12, 55, 87, 64, 64, 68, 58, 48, 18, 93, 59, 13, 70, 2, 99, 76, 56, 32, 14, 13, 46, 12, 42, 89, 0, 89, 23, 13, 46, 1, 5, 59, 22, 92, 89, 53, 60, 12, 67, 44, 4, 92, 57, 74, 94},
52 {55, 15, 15, 53, 30, 28, 99, 8, 71, 88, 75, 59, 77, 88, 4, 44, 93, 29, 66, 51, 17, 85, 10, 96, 17, 54, 100, 8, 77, 73, 2, 31, 89, 17, 50, 85, 46, 48, 93, 83, 35, 67, 7, 11, 54, 78, 21, 13, 7, 88, 64, 91, 38, 74, 87, 56, 94, 86, 64, 70, 25, 32, 67, 80, 50, 16, 64, 62, 30, 56, 10, 32, 89, 17, 9, 8, 95, 31, 21, 68, 18, 85, 59, 22, 24, 11, 78, 84, 97, 42, 19, 88, 40, 86, 67, 90, 68, 30, 17, 99},
53 {52, 27, 30, 40, 44, 5, 49, 5, 36, 70, 73, 20, 21, 31, 43, 11, 42, 20, 96, 5, 28, 14, 93, 69, 67, 26, 24, 34, 56, 8, 99, 75, 35, 95, 14, 46, 0, 29, 51, 36, 66, 23, 57, 87, 21, 100, 98, 29, 86, 59, 0, 81, 74, 60, 15, 40, 86, 39, 40, 7, 47, 5, 82, 49, 100, 63, 95, 66, 92, 11, 2, 57, 0, 25, 9, 21, 91, 74, 17, 76, 32, 17, 22, 72, 43, 37, 78, 28, 77, 18, 36, 90, 90, 84, 38, 89, 46, 99, 21, 4},
54 {9, 90, 27, 10, 14, 3, 98, 4, 77, 14, 46, 75, 99, 35, 47, 41, 72, 24, 70, 48, 8, 72, 4, 98, 55, 42, 53, 68, 7, 74, 72, 16, 63, 99, 26, 43, 1, 24, 13, 44, 4, 25, 19, 2, 60, 32, 10, 32, 22, 80, 46, 98, 17, 50, 95, 38, 59, 13, 5, 66, 87, 77, 48, 15, 42, 41, 58, 9, 31, 71, 54, 35, 97, 39, 4, 56, 37, 14, 88, 59, 60, 0, 56, 77, 50, 17, 81, 75, 30, 87, 6, 84, 29, 55, 99, 37, 96, 57, 47, 26},
55 {94, 67, 27, 56, 5, 98, 12, 8, 11, 66, 67, 37, 66, 90, 80, 83, 6, 61, 23, 2, 47, 30, 86, 42, 51, 51, 80, 46, 74, 26, 38, 67, 59, 31, 23, 64, 29, 1, 38, 6, 33, 4, 44, 100, 60, 90, 48, 32, 50, 71, 1, 63, 67, 87, 5, 17, 3, 51, 29, 77, 77, 33, 10, 35, 65, 100, 65, 60, 0, 2, 32, 33, 73, 42, 99, 100, 32, 12, 31, 48, 84, 99, 11, 50, 86, 83, 34, 55, 33, 63, 32, 76, 97, 8, 77, 27, 7, 7, 53, 74},
56 {76, 85, 73, 14, 27, 72, 13, 59, 50, 11, 73, 33, 9, 84, 50, 61, 32, 84, 16, 31, 12, 14, 6, 8, 89, 49, 1, 96, 56, 54, 35, 31, 39, 7, 46, 32, 45, 59, 57, 96, 36, 29, 95, 46, 80, 10, 73, 11, 94, 89, 9, 73, 69, 15, 47, 57, 31, 49, 18, 87, 69, 53, 18, 74, 27, 30, 5, 38, 55, 28, 33, 92, 58, 95, 3, 37, 4, 76, 14, 65, 31, 23, 37, 66, 5, 50, 23, 36, 99, 41, 22, 68, 61, 6, 7, 88, 2, 13, 92, 58},
57 {41, 92, 15, 65, 86, 18, 1, 56, 60, 83, 87, 57, 5, 90, 23, 10, 40, 12, 12, 38, 19, 35, 72, 80, 7, 80, 33, 10, 59, 25, 34, 66, 16, 49, 31, 68, 33, 99, 23, 59, 47, 10, 16, 53, 100, 5, 29, 39, 17, 42, 44, 2, 43, 82, 49, 16, 27, 82, 93, 86, 73, 26, 18, 55, 75, 49, 89, 7, 13, 79, 33, 61, 55, 15, 80, 20, 20, 75, 60, 3, 83, 70, 5, 92, 17, 54, 8, 45, 2, 0, 30, 41, 27, 14, 63, 68, 29, 51, 42, 43},
58 {96, 75, 70, 50, 90, 49, 71, 9, 90, 97, 79, 73, 66, 50, 64, 83, 4, 72, 27, 73, 39, 24, 80, 32, 4, 42, 100, 34, 60, 41, 43, 55, 82, 12, 5, 71, 27, 42, 46, 16, 38, 24, 89, 3, 41, 19, 52, 11, 57, 46, 84, 96, 36, 29, 27, 40, 72, 94, 40, 98, 0, 83, 18, 83, 95, 90, 53, 88, 31, 66, 71, 69, 56, 59, 38, 97, 44, 57, 7, 1, 2, 57, 97, 4, 87, 91, 10, 24, 84, 51, 21, 84, 33, 39, 66, 95, 96, 86, 82, 26},
59 {51, 52, 96, 73, 78, 33, 70, 21, 90, 77, 89, 58, 0, 86, 28, 87, 42, 39, 10, 25, 56, 98, 75, 89, 2, 7, 49, 98, 59, 98, 24, 76, 15, 86, 48, 59, 18, 17, 81, 75, 61, 69, 99, 61, 20, 27, 13, 62, 32, 90, 53, 88, 87, 95, 42, 89, 1, 58, 53, 60, 55, 43, 1, 70, 28, 49, 29, 12, 33, 76, 53, 60, 10, 52, 87, 98, 45, 100, 25, 43, 89, 79, 97, 41, 73, 4, 96, 40, 62, 48, 66, 16, 91, 67, 53, 85, 82, 48, 98, 14},
60 {90, 50, 74, 66, 68, 26, 63, 12, 25, 89, 55, 80, 33, 17, 20, 72, 22, 83, 11, 84, 30, 77, 67, 88, 9, 86, 72, 91, 33, 35, 72, 89, 86, 11, 54, 53, 38, 17, 32, 29, 72, 53, 76, 71, 71, 62, 42, 93, 44, 19, 76, 41, 62, 42, 28, 71, 27, 66, 27, 26, 1, 99, 14, 87, 10, 35, 5, 14, 52, 37, 43, 90, 91, 18, 60, 27, 81, 68, 19, 24, 87, 95, 31, 48, 3, 59, 18, 97, 92, 11, 90, 93, 10, 70, 45, 20, 4, 16, 34, 22},
61 {54, 43, 11, 10, 62, 37, 37, 8, 4, 22, 99, 57, 83, 30, 4, 86, 55, 89, 49, 46, 0, 38, 38, 77, 74, 49, 97, 79, 66, 97, 0, 86, 5, 79, 62, 33, 15, 65, 41, 87, 87, 6, 9, 35, 2, 14, 21, 57, 69, 36, 3, 35, 40, 7, 11, 13, 23, 74, 92, 55, 36, 93, 40, 42, 37, 68, 75, 18, 32, 83, 71, 85, 89, 81, 19, 91, 61, 6, 13, 29, 8, 16, 65, 48, 91, 76, 62, 80, 16, 19, 34, 52, 78, 74, 94, 14, 7, 69, 33, 5},
62 {17, 3, 56, 5, 84, 41, 62, 44, 48, 75, 40, 56, 58, 71, 71, 14, 12, 99, 94, 28, 17, 27, 81, 96, 67, 74, 76, 74, 8, 75, 45, 25, 79, 0, 97, 28, 41, 58, 39, 55, 100, 45, 11, 23, 15, 48, 37, 27, 46, 97, 56, 63, 90, 36, 24, 56, 76, 0, 96, 85, 41, 40, 9, 19, 6, 6, 14, 47, 30, 19, 2, 96, 64, 80, 18, 45, 27, 21, 72, 39, 17, 94, 1, 6, 96, 93, 28, 72, 59, 90, 56, 100, 96, 31, 86, 1, 3, 66, 15, 0},
63 {85, 17, 96, 14, 63, 81, 59, 90, 1, 97, 28, 19, 57, 96, 92, 52, 54, 87, 23, 12, 76, 45, 79, 72, 43, 64, 39, 46, 29, 54, 12, 80, 37, 8, 60, 100, 89, 85, 55, 56, 47, 49, 75, 3, 45, 33, 56, 99, 19, 45, 78, 61, 91, 56, 99, 33, 86, 4, 45, 81, 58, 58, 60, 96, 32, 19, 61, 87, 70, 16, 42, 16, 65, 84, 20, 76, 83, 42, 41, 68, 87, 18, 28, 77, 40, 94, 76, 25, 98, 88, 5, 21, 11, 31, 16, 43, 16, 44, 29, 86},
64 {60, 37, 1, 24, 20, 88, 67, 69, 29, 7, 36, 16, 25, 65, 59, 65, 24, 1, 56, 21, 89, 61, 42, 100, 58, 25, 8, 74, 69, 3, 25, 95, 40, 26, 85, 27, 81, 51, 96, 9, 58, 32, 25, 49, 63, 51, 80, 87, 52, 35, 74, 40, 62, 82, 5, 19, 73, 13, 59, 7, 16, 84, 1, 56, 77, 53, 49, 57, 3, 45, 66, 28, 43, 58, 77, 72, 8, 57, 58, 60, 92, 98, 66, 20, 79, 71, 39, 52, 84, 65, 59, 100, 48, 27, 21, 91, 80, 71, 47, 83},
65 {82, 80, 10, 24, 37, 54, 62, 45, 10, 86, 71, 68, 83, 36, 88, 27, 6, 94, 79, 56, 58, 4, 55, 72, 98, 42, 63, 77, 12, 9, 25, 60, 89, 2, 50, 92, 56, 11, 2, 32, 97, 73, 100, 79, 75, 88, 73, 47, 47, 17, 2, 4, 21, 23, 42, 18, 66, 4, 61, 44, 81, 87, 71, 35, 89, 20, 27, 10, 32, 96, 42, 95, 69, 41, 40, 9, 95, 12, 23, 41, 29, 25, 11, 17, 15, 54, 1, 47, 24, 63, 57, 4, 49, 27, 40, 3, 48, 33, 13, 46},
66 {95, 55, 40, 29, 96, 46, 39, 57, 58, 62, 98, 54, 53, 76, 71, 68, 29, 72, 81, 53, 34, 38, 24, 49, 65, 30, 52, 79, 29, 31, 24, 23, 86, 31, 53, 48, 77, 92, 4, 1, 19, 68, 55, 72, 9, 92, 6, 38, 63, 87, 58, 64, 24, 82, 79, 56, 78, 98, 34, 6, 28, 25, 29, 81, 22, 82, 28, 65, 39, 99, 66, 58, 32, 87, 97, 42, 78, 2, 46, 7, 55, 3, 71, 46, 51, 49, 1, 28, 46, 1, 34, 41, 26, 30, 21, 48, 11, 49, 80, 17},
67 {13, 45, 75, 11, 99, 37, 53, 76, 39, 66, 83, 95, 35, 19, 40, 87, 69, 7, 81, 81, 8, 82, 21, 35, 11, 42, 49, 89, 57, 95, 5, 36, 40, 47, 14, 38, 84, 33, 80, 23, 99, 29, 84, 34, 48, 90, 87, 16, 97, 67, 64, 71, 48, 51, 72, 59, 60, 88, 48, 83, 82, 53, 86, 21, 66, 100, 25, 50, 32, 72, 39, 31, 0, 22, 65, 48, 78, 51, 31, 40, 84, 61, 10, 32, 11, 83, 57, 71, 70, 4, 20, 51, 24, 5, 39, 90, 4, 30, 5, 36},
68 {1, 44, 33, 68, 66, 64, 16, 9, 81, 13, 49, 65, 74, 60, 97, 51, 42, 19, 89, 11, 24, 8, 28, 14, 13, 67, 70, 84, 64, 76, 86, 65, 19, 19, 100, 52, 83, 15, 61, 64, 95, 10, 95, 34, 70, 57, 85, 78, 76, 73, 55, 66, 47, 83, 80, 60, 16, 16, 9, 80, 92, 96, 10, 77, 14, 9, 28, 63, 91, 56, 93, 85, 32, 87, 18, 68, 43, 70, 45, 19, 42, 66, 85, 56, 48, 31, 82, 30, 47, 92, 9, 4, 87, 87, 81, 67, 96, 76, 29, 87},
69 {31, 89, 37, 63, 75, 22, 97, 85, 92, 41, 70, 100, 73, 20, 55, 20, 51, 37, 17, 64, 28, 93, 68, 81, 79, 15, 47, 75, 91, 42, 27, 88, 30, 64, 16, 72, 52, 12, 56, 43, 19, 25, 43, 92, 45, 64, 78, 63, 0, 95, 26, 95, 54, 61, 75, 32, 76, 88, 73, 32, 30, 66, 86, 26, 97, 1, 98, 48, 80, 19, 92, 99, 10, 0, 56, 56, 64, 33, 85, 65, 95, 77, 59, 48, 3, 0, 46, 45, 88, 19, 77, 84, 51, 62, 10, 47, 29, 74, 96, 8},
70 {94, 53, 73, 3, 53, 28, 25, 16, 62, 76, 47, 22, 53, 73, 70, 22, 73, 15, 68, 60, 0, 10, 44, 52, 73, 54, 65, 68, 94, 60, 77, 53, 79, 15, 23, 31, 44, 48, 14, 72, 91, 27, 94, 9, 100, 29, 31, 72, 44, 99, 32, 11, 9, 76, 29, 48, 96, 94, 15, 55, 20, 58, 8, 99, 40, 31, 97, 84, 45, 77, 55, 35, 3, 14, 44, 3, 43, 42, 75, 87, 40, 73, 64, 15, 14, 93, 29, 76, 53, 11, 31, 73, 69, 39, 37, 8, 70, 100, 58, 81},
71 {76, 79, 16, 80, 93, 26, 49, 35, 68, 23, 89, 75, 63, 18, 56, 77, 11, 86, 53, 30, 97, 84, 2, 31, 89, 5, 6, 24, 5, 64, 4, 47, 43, 87, 26, 1, 13, 41, 3, 47, 65, 92, 88, 94, 9, 44, 70, 87, 29, 89, 16, 25, 72, 85, 56, 26, 57, 62, 50, 62, 93, 55, 8, 1, 7, 1, 2, 20, 42, 5, 34, 73, 63, 21, 66, 39, 31, 2, 25, 60, 91, 8, 51, 29, 59, 74, 55, 15, 1, 5, 77, 94, 26, 52, 95, 33, 19, 64, 20, 27},
72 {35, 54, 0, 99, 41, 32, 37, 73, 34, 28, 99, 92, 2, 50, 20, 62, 23, 75, 77, 24, 46, 20, 85, 72, 38, 45, 72, 57, 75, 92, 84, 10, 11, 50, 75, 18, 83, 78, 91, 83, 72, 56, 74, 75, 72, 60, 36, 95, 1, 79, 85, 47, 99, 35, 19, 36, 47, 91, 59, 21, 48, 43, 31, 59, 59, 72, 77, 7, 49, 34, 91, 21, 56, 30, 96, 27, 57, 98, 88, 58, 76, 38, 4, 41, 74, 90, 43, 20, 46, 2, 7, 94, 11, 39, 18, 70, 77, 62, 78, 26},
73 {62, 34, 47, 17, 30, 8, 10, 87, 72, 98, 44, 47, 1, 15, 54, 75, 4, 98, 61, 17, 100, 69, 10, 10, 74, 96, 46, 50, 23, 23, 42, 85, 23, 55, 68, 54, 29, 44, 40, 0, 41, 51, 14, 42, 66, 68, 84, 36, 31, 10, 53, 30, 45, 30, 6, 85, 25, 53, 1, 14, 42, 43, 65, 66, 65, 32, 86, 94, 42, 25, 95, 83, 42, 8, 91, 74, 42, 40, 10, 74, 51, 63, 70, 62, 59, 77, 47, 50, 96, 48, 64, 3, 57, 28, 35, 21, 26, 20, 15, 68},
74 {12, 9, 16, 54, 84, 74, 28, 92, 13, 4, 65, 30, 33, 1, 93, 93, 78, 5, 42, 39, 53, 73, 42, 9, 0, 78, 98, 94, 98, 12, 61, 76, 88, 44, 30, 37, 17, 24, 28, 97, 28, 60, 27, 61, 27, 86, 53, 4, 91, 62, 9, 9, 34, 17, 85, 0, 61, 82, 94, 25, 60, 21, 0, 13, 65, 30, 50, 48, 54, 45, 44, 48, 71, 37, 9, 98, 89, 62, 68, 45, 23, 43, 54, 23, 60, 5, 24, 21, 87, 17, 12, 13, 4, 12, 26, 69, 9, 43, 83, 29},
75 {88, 94, 78, 24, 30, 87, 21, 86, 14, 55, 30, 4, 98, 51, 27, 57, 56, 17, 44, 8, 35, 56, 21, 39, 69, 14, 75, 44, 57, 23, 73, 10, 16, 50, 34, 13, 2, 55, 99, 17, 9, 95, 21, 6, 45, 14, 29, 0, 32, 74, 9, 33, 96, 97, 38, 30, 10, 79, 74, 33, 2, 47, 43, 85, 63, 77, 98, 66, 98, 62, 83, 73, 57, 70, 45, 68, 50, 75, 69, 82, 14, 44, 81, 9, 6, 19, 40, 84, 64, 80, 16, 66, 26, 60, 51, 90, 36, 14, 55, 34},
76 {43, 3, 73, 100, 73, 18, 67, 89, 93, 1, 37, 6, 11, 17, 82, 85, 2, 88, 68, 67, 68, 50, 99, 60, 9, 15, 49, 12, 30, 70, 12, 73, 73, 85, 38, 11, 2, 71, 67, 95, 39, 3, 67, 16, 20, 15, 0, 90, 69, 34, 22, 36, 85, 20, 63, 94, 36, 11, 72, 32, 48, 84, 71, 87, 69, 75, 65, 37, 11, 31, 99, 50, 34, 31, 33, 20, 46, 100, 76, 15, 34, 98, 17, 18, 18, 80, 78, 20, 58, 16, 18, 72, 100, 55, 58, 34, 96, 89, 72, 6},
77 {86, 36, 23, 86, 67, 56, 6, 80, 21, 48, 61, 55, 46, 78, 39, 30, 24, 84, 50, 48, 100, 34, 19, 65, 89, 43, 100, 84, 32, 37, 56, 17, 73, 79, 3, 5, 0, 76, 85, 22, 23, 45, 43, 35, 23, 83, 65, 13, 32, 14, 61, 31, 14, 46, 96, 2, 89, 61, 52, 87, 64, 8, 4, 2, 53, 74, 8, 54, 15, 93, 42, 38, 4, 85, 40, 94, 67, 4, 6, 99, 86, 33, 96, 100, 79, 58, 69, 33, 85, 20, 20, 49, 95, 91, 17, 14, 64, 25, 68, 79},
78 {85, 76, 83, 89, 60, 22, 82, 94, 27, 54, 58, 79, 87, 54, 78, 31, 78, 12, 64, 62, 100, 84, 10, 94, 74, 28, 7, 37, 19, 41, 82, 70, 16, 31, 58, 43, 19, 5, 36, 12, 59, 94, 91, 11, 13, 69, 42, 91, 81, 6, 53, 80, 90, 29, 40, 30, 23, 13, 33, 9, 21, 15, 79, 3, 12, 37, 46, 31, 8, 48, 44, 34, 42, 34, 45, 21, 69, 54, 12, 16, 60, 65, 96, 15, 60, 1, 45, 84, 82, 45, 93, 2, 60, 71, 5, 38, 74, 18, 69, 49},
79 {66, 12, 83, 74, 47, 94, 96, 15, 47, 74, 31, 6, 4, 94, 89, 64, 61, 100, 13, 42, 44, 72, 44, 70, 9, 16, 7, 83, 34, 77, 98, 66, 55, 80, 40, 1, 74, 1, 84, 20, 41, 81, 94, 45, 40, 48, 8, 1, 47, 89, 43, 58, 60, 54, 27, 69, 36, 1, 18, 70, 44, 15, 1, 99, 96, 7, 0, 35, 75, 50, 21, 15, 30, 14, 60, 37, 62, 35, 38, 76, 23, 47, 33, 49, 67, 60, 18, 2, 27, 2, 38, 71, 17, 6, 70, 79, 13, 36, 80, 89},
80 {86, 1, 3, 82, 15, 30, 18, 44, 31, 22, 19, 54, 36, 52, 69, 69, 78, 53, 72, 5, 55, 76, 42, 73, 82, 11, 17, 62, 47, 98, 50, 99, 99, 19, 81, 80, 15, 65, 23, 46, 54, 8, 66, 56, 60, 35, 24, 4, 88, 62, 76, 43, 38, 17, 82, 86, 29, 65, 47, 42, 62, 63, 41, 26, 49, 88, 6, 64, 18, 96, 10, 72, 4, 42, 94, 64, 77, 18, 34, 31, 80, 9, 40, 84, 27, 21, 70, 22, 86, 83, 64, 14, 46, 4, 40, 61, 92, 46, 24, 10},
81 {42, 0, 48, 12, 9, 42, 76, 86, 26, 77, 83, 5, 86, 22, 56, 79, 43, 92, 0, 96, 40, 65, 76, 52, 35, 15, 12, 94, 28, 3, 3, 36, 3, 17, 48, 79, 25, 90, 65, 51, 66, 47, 23, 18, 36, 79, 97, 79, 36, 98, 40, 76, 28, 15, 28, 63, 98, 40, 56, 25, 43, 25, 27, 13, 9, 75, 92, 34, 30, 22, 86, 97, 36, 75, 81, 72, 19, 77, 16, 55, 40, 23, 97, 68, 4, 24, 31, 1, 31, 53, 93, 40, 79, 19, 19, 88, 60, 78, 88, 91},
82 {66, 39, 53, 1, 13, 33, 39, 32, 76, 22, 53, 16, 11, 16, 84, 15, 40, 81, 17, 37, 34, 76, 44, 79, 96, 63, 32, 21, 6, 86, 11, 73, 25, 30, 40, 4, 29, 46, 3, 5, 68, 56, 21, 79, 72, 71, 60, 79, 18, 77, 82, 52, 53, 25, 97, 14, 55, 95, 35, 61, 80, 13, 33, 4, 9, 74, 9, 39, 19, 12, 10, 53, 34, 98, 98, 73, 68, 57, 17, 52, 0, 99, 3, 19, 24, 66, 100, 79, 60, 34, 39, 40, 13, 39, 44, 23, 79, 19, 28, 64},
83 {98, 38, 16, 32, 35, 80, 71, 69, 36, 88, 21, 2, 86, 91, 21, 76, 57, 87, 20, 83, 21, 26, 22, 0, 65, 33, 90, 9, 18, 17, 73, 16, 55, 55, 14, 56, 34, 85, 92, 36, 38, 79, 5, 90, 35, 93, 66, 58, 80, 86, 41, 67, 78, 29, 67, 8, 62, 57, 17, 47, 74, 90, 63, 96, 44, 43, 17, 44, 27, 75, 47, 65, 53, 52, 54, 55, 10, 86, 12, 90, 38, 53, 56, 15, 49, 23, 24, 77, 46, 41, 23, 19, 98, 86, 81, 7, 95, 65, 18, 21},
84 {39, 31, 52, 59, 49, 73, 13, 59, 24, 25, 49, 62, 45, 4, 44, 60, 94, 34, 36, 39, 41, 60, 25, 4, 11, 72, 12, 6, 36, 97, 94, 76, 27, 12, 34, 76, 85, 13, 34, 75, 4, 83, 3, 49, 54, 47, 8, 47, 47, 11, 53, 88, 71, 44, 59, 48, 15, 71, 54, 52, 67, 14, 27, 94, 26, 27, 69, 77, 6, 69, 51, 10, 52, 54, 26, 72, 67, 0, 85, 80, 11, 37, 34, 48, 81, 93, 97, 97, 29, 16, 14, 96, 30, 7, 55, 56, 34, 90, 99, 6},
85 {58, 50, 16, 76, 70, 8, 47, 3, 9, 32, 49, 87, 69, 83, 35, 16, 75, 98, 79, 3, 13, 93, 65, 44, 100, 86, 66, 100, 75, 65, 5, 33, 81, 88, 75, 16, 97, 22, 86, 72, 54, 35, 58, 89, 17, 59, 71, 59, 56, 49, 28, 70, 41, 60, 80, 40, 45, 11, 5, 20, 42, 10, 19, 22, 99, 94, 5, 61, 82, 91, 32, 1, 25, 90, 57, 9, 49, 27, 34, 71, 43, 62, 40, 50, 21, 86, 91, 33, 98, 62, 53, 39, 73, 38, 28, 37, 98, 33, 98, 80},
86 {90, 29, 47, 82, 85, 3, 57, 100, 98, 91, 71, 40, 18, 77, 90, 6, 63, 46, 39, 26, 8, 58, 31, 47, 96, 59, 84, 59, 58, 47, 38, 48, 76, 52, 96, 26, 55, 52, 26, 52, 42, 63, 58, 26, 5, 48, 32, 68, 60, 37, 60, 68, 95, 92, 14, 56, 16, 64, 15, 75, 10, 19, 89, 52, 71, 84, 79, 26, 1, 71, 44, 43, 100, 2, 35, 4, 16, 68, 39, 76, 4, 99, 10, 100, 56, 91, 21, 73, 55, 36, 13, 31, 56, 1, 84, 93, 51, 28, 85, 52},
87 {65, 29, 61, 64, 98, 96, 68, 13, 29, 73, 55, 34, 38, 65, 100, 94, 56, 87, 32, 77, 23, 45, 7, 45, 12, 91, 37, 29, 85, 22, 47, 49, 17, 74, 12, 14, 70, 47, 94, 65, 86, 48, 99, 23, 13, 64, 84, 35, 51, 15, 11, 40, 27, 18, 51, 5, 76, 88, 1, 26, 76, 48, 76, 59, 22, 54, 73, 58, 67, 32, 22, 53, 81, 88, 76, 60, 17, 25, 95, 34, 7, 5, 40, 34, 90, 91, 5, 31, 45, 6, 58, 20, 21, 33, 80, 9, 53, 18, 67, 20},
88 {51, 55, 73, 31, 42, 14, 57, 26, 40, 51, 60, 13, 22, 0, 47, 78, 91, 18, 9, 1, 92, 33, 22, 79, 32, 68, 88, 85, 86, 20, 71, 2, 75, 43, 100, 84, 24, 56, 9, 30, 6, 35, 43, 95, 1, 56, 73, 59, 40, 48, 60, 31, 81, 82, 9, 12, 15, 97, 63, 1, 83, 34, 70, 58, 43, 70, 41, 67, 25, 16, 63, 99, 17, 5, 93, 19, 27, 31, 78, 68, 79, 37, 99, 59, 86, 75, 37, 0, 37, 67, 68, 20, 0, 38, 78, 43, 7, 85, 77, 99},
89 {67, 39, 97, 84, 11, 90, 2, 38, 20, 46, 5, 100, 50, 71, 24, 35, 45, 28, 1, 82, 95, 36, 68, 61, 40, 11, 70, 47, 62, 46, 11, 28, 52, 8, 79, 63, 98, 81, 67, 84, 94, 39, 49, 43, 9, 40, 78, 20, 68, 45, 68, 28, 81, 36, 89, 20, 47, 58, 33, 9, 71, 45, 37, 22, 53, 82, 51, 16, 29, 84, 100, 22, 22, 15, 65, 98, 55, 8, 17, 22, 19, 86, 16, 0, 21, 4, 87, 34, 28, 20, 43, 99, 31, 47, 87, 50, 28, 3, 66, 57},
90 {88, 31, 45, 76, 46, 9, 74, 0, 84, 91, 89, 3, 42, 4, 3, 63, 8, 56, 98, 3, 76, 6, 1, 73, 53, 55, 22, 48, 58, 54, 71, 11, 86, 16, 88, 98, 92, 61, 99, 76, 17, 53, 79, 60, 58, 48, 89, 32, 3, 52, 35, 46, 59, 3, 18, 78, 24, 7, 92, 48, 61, 63, 60, 12, 79, 47, 10, 70, 74, 75, 11, 91, 27, 90, 16, 51, 3, 5, 84, 74, 57, 85, 19, 15, 54, 3, 60, 44, 10, 51, 93, 38, 13, 52, 50, 58, 65, 60, 28, 38},
91 {34, 39, 95, 28, 96, 11, 79, 99, 16, 28, 38, 73, 80, 57, 55, 100, 27, 14, 44, 3, 65, 36, 41, 79, 54, 92, 2, 18, 17, 30, 56, 18, 36, 50, 46, 98, 27, 24, 62, 43, 19, 0, 83, 99, 23, 37, 98, 50, 51, 41, 20, 82, 43, 61, 26, 97, 18, 29, 14, 2, 25, 36, 20, 61, 53, 66, 24, 80, 56, 87, 90, 41, 87, 72, 39, 9, 8, 3, 26, 25, 44, 46, 73, 54, 73, 100, 50, 58, 95, 31, 60, 19, 67, 80, 47, 86, 11, 71, 32, 33},
92 {23, 21, 75, 9, 93, 80, 86, 67, 83, 11, 58, 94, 23, 30, 47, 96, 96, 63, 19, 56, 94, 79, 42, 27, 24, 89, 12, 1, 25, 44, 35, 49, 65, 76, 58, 23, 21, 9, 90, 4, 87, 13, 64, 9, 10, 77, 72, 72, 39, 91, 28, 33, 70, 70, 60, 60, 24, 72, 62, 49, 83, 63, 64, 47, 4, 89, 37, 25, 98, 26, 96, 85, 6, 25, 94, 16, 1, 31, 54, 41, 22, 48, 74, 58, 17, 100, 17, 7, 71, 45, 57, 19, 74, 20, 67, 78, 75, 3, 70, 73},
93 {96, 65, 57, 68, 57, 16, 50, 58, 14, 4, 99, 36, 52, 38, 60, 36, 37, 43, 43, 75, 89, 66, 94, 62, 53, 60, 6, 27, 29, 76, 100, 92, 6, 22, 59, 63, 5, 9, 21, 19, 13, 86, 21, 31, 24, 47, 67, 61, 90, 10, 35, 44, 42, 29, 73, 95, 55, 79, 22, 51, 54, 88, 42, 26, 10, 0, 56, 82, 9, 77, 67, 89, 28, 88, 20, 52, 34, 53, 80, 90, 29, 14, 34, 72, 9, 6, 66, 65, 85, 54, 82, 4, 42, 23, 97, 18, 23, 52, 100, 100},
94 {95, 66, 54, 23, 19, 40, 75, 19, 60, 20, 8, 89, 35, 42, 60, 10, 48, 93, 41, 99, 46, 22, 69, 54, 45, 66, 38, 35, 17, 37, 0, 12, 69, 54, 35, 54, 61, 76, 73, 20, 97, 48, 8, 98, 90, 35, 7, 4, 94, 15, 69, 5, 37, 38, 60, 83, 3, 98, 84, 20, 1, 84, 99, 36, 3, 100, 57, 64, 76, 96, 50, 38, 43, 25, 35, 100, 60, 8, 70, 53, 23, 38, 58, 27, 42, 84, 76, 11, 48, 59, 99, 15, 8, 97, 51, 11, 97, 7, 42, 38},
95 {70, 58, 76, 12, 83, 77, 11, 42, 51, 47, 61, 75, 86, 86, 68, 94, 69, 43, 5, 16, 1, 3, 31, 9, 100, 49, 87, 62, 22, 95, 100, 92, 53, 41, 71, 35, 17, 48, 44, 69, 96, 4, 9, 47, 56, 77, 40, 25, 86, 45, 7, 87, 48, 5, 62, 14, 20, 48, 76, 8, 43, 76, 67, 62, 16, 37, 97, 0, 85, 6, 35, 80, 78, 10, 26, 33, 53, 33, 24, 38, 78, 32, 24, 93, 3, 52, 6, 90, 100, 48, 98, 8, 90, 64, 70, 6, 67, 33, 73, 52},
96 {39, 7, 98, 16, 84, 91, 16, 36, 23, 40, 74, 67, 38, 64, 59, 41, 15, 31, 97, 81, 80, 61, 56, 35, 24, 25, 41, 92, 24, 80, 9, 30, 53, 6, 12, 36, 97, 28, 72, 86, 69, 11, 53, 6, 75, 78, 14, 56, 76, 10, 37, 55, 37, 93, 56, 62, 84, 98, 19, 75, 43, 28, 4, 97, 0, 83, 32, 98, 11, 71, 49, 80, 82, 1, 52, 23, 80, 66, 45, 55, 43, 48, 76, 80, 40, 31, 7, 91, 95, 93, 31, 38, 20, 1, 0, 88, 84, 32, 51, 95},
97 {2, 100, 40, 85, 1, 59, 74, 47, 91, 18, 68, 33, 67, 9, 80, 73, 6, 53, 29, 1, 46, 60, 5, 32, 61, 5, 86, 11, 3, 36, 72, 6, 36, 12, 57, 37, 71, 97, 50, 61, 14, 17, 61, 47, 93, 6, 20, 99, 25, 15, 66, 37, 76, 71, 36, 2, 42, 21, 80, 12, 58, 52, 18, 94, 30, 41, 97, 67, 3, 12, 94, 17, 96, 54, 31, 88, 26, 51, 86, 18, 66, 52, 55, 7, 89, 91, 77, 98, 79, 56, 9, 36, 74, 94, 96, 3, 34, 92, 70, 37},
98 {3, 64, 20, 65, 84, 51, 52, 77, 68, 37, 95, 0, 55, 15, 7, 10, 6, 50, 7, 85, 73, 16, 87, 46, 9, 82, 50, 9, 39, 86, 12, 8, 49, 32, 73, 100, 50, 24, 76, 17, 27, 70, 17, 83, 51, 92, 93, 23, 7, 66, 74, 80, 82, 60, 26, 57, 41, 42, 66, 80, 27, 78, 88, 77, 76, 26, 42, 25, 50, 17, 9, 78, 53, 26, 26, 3, 84, 85, 27, 92, 50, 0, 71, 31, 27, 63, 88, 34, 4, 19, 14, 32, 97, 68, 75, 72, 95, 16, 64, 10},
99 {100, 73, 88, 52, 65, 80, 21, 49, 64, 14, 6, 13, 15, 77, 10, 8, 6, 64, 42, 10, 83, 22, 8, 45, 91, 49, 84, 51, 65, 47, 27, 30, 86, 82, 82, 50, 61, 70, 65, 92, 84, 71, 71, 65, 14, 82, 73, 20, 11, 15, 97, 61, 37, 5, 72, 94, 54, 55, 10, 86, 68, 38, 15, 53, 19, 64, 70, 80, 33, 34, 37, 16, 72, 8, 82, 86, 56, 54, 5, 33, 69, 1, 94, 73, 73, 66, 66, 27, 87, 77, 79, 55, 14, 94, 74, 100, 57, 43, 45, 90},
100 {44, 83, 73, 15, 91, 54, 0, 46, 74, 72, 79, 9, 39, 39, 82, 12, 71, 13, 5, 57, 90, 84, 11, 70, 77, 52, 69, 0, 95, 14, 56, 38, 63, 28, 19, 53, 48, 19, 65, 89, 57, 9, 98, 97, 14, 45, 8, 85, 58, 80, 42, 14, 63, 19, 50, 5, 71, 86, 72, 66, 66, 28, 70, 28, 56, 90, 81, 71, 75, 11, 59, 32, 87, 56, 28, 1, 67, 2, 86, 91, 82, 27, 71, 10, 47, 21, 82, 17, 6, 54, 49, 38, 82, 86, 66, 3, 75, 12, 74, 15},
101 {23, 99, 47, 9, 20, 75, 10, 87, 43, 63, 44, 91, 90, 14, 0, 2, 35, 83, 87, 7, 2, 1, 45, 84, 87, 77, 53, 27, 89, 94, 43, 78, 92, 90, 88, 12, 31, 64, 65, 74, 93, 8, 65, 49, 23, 31, 51, 24, 80, 3, 99, 82, 5, 9, 31, 92, 87, 85, 19, 41, 78, 62, 19, 35, 17, 73, 13, 48, 2, 79, 89, 96, 53, 19, 44, 42, 50, 61, 67, 30, 65, 31, 78, 36, 40, 9, 94, 93, 60, 12, 34, 3, 40, 53, 38, 24, 92, 52, 72, 94},
102 {97, 60, 89, 15, 79, 99, 58, 96, 26, 91, 92, 91, 21, 69, 93, 27, 44, 86, 20, 3, 65, 54, 6, 71, 73, 11, 95, 64, 29, 67, 23, 92, 93, 79, 6, 38, 77, 30, 33, 2, 20, 91, 59, 7, 59, 51, 1, 3, 3, 21, 73, 68, 41, 46, 4, 80, 57, 100, 9, 86, 32, 32, 43, 24, 10, 49, 28, 88, 80, 27, 56, 66, 17, 82, 40, 77, 32, 41, 46, 1, 28, 85, 35, 69, 30, 40, 14, 53, 39, 23, 4, 71, 55, 47, 61, 66, 97, 56, 19, 42},
103 {83, 41, 74, 0, 22, 80, 77, 21, 20, 89, 22, 14, 73, 58, 83, 70, 98, 63, 22, 2, 86, 27, 39, 41, 40, 66, 73, 36, 21, 92, 44, 4, 32, 85, 4, 21, 64, 47, 42, 85, 1, 64, 65, 40, 88, 48, 9, 51, 77, 99, 53, 63, 92, 58, 3, 31, 24, 76, 34, 11, 33, 44, 15, 31, 28, 86, 52, 93, 99, 94, 43, 100, 24, 7, 40, 11, 21, 15, 63, 99, 13, 82, 61, 4, 40, 30, 2, 30, 72, 36, 41, 71, 80, 23, 1, 8, 8, 20, 67, 7}
104};
105
diff --git a/all_pairs/source/dijkstra/input.h b/all_pairs/source/dijkstra/input.h
new file mode 100644
index 0000000..9701828
--- /dev/null
+++ b/all_pairs/source/dijkstra/input.h
@@ -0,0 +1,8 @@
1#ifndef INPUT_H
2#define INPUT_H
3
4#define NUM_NODES 100
5
6extern unsigned char dijkstra_AdjMatrix[NUM_NODES][NUM_NODES];
7
8#endif /* INPUT_H */
diff --git a/all_pairs/source/empty.c b/all_pairs/source/empty.c
new file mode 100644
index 0000000..e4fd214
--- /dev/null
+++ b/all_pairs/source/empty.c
@@ -0,0 +1,11 @@
1#include "../extra.h"
2
3int main(int argc, char **argv)
4{
5 SET_UP
6 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
7 START_LOOP
8 STOP_LOOP
9 }
10 WRITE_TO_FILE
11}
diff --git a/all_pairs/source/epic/ChangeLog.txt b/all_pairs/source/epic/ChangeLog.txt
new file mode 100644
index 0000000..5aad4f5
--- /dev/null
+++ b/all_pairs/source/epic/ChangeLog.txt
@@ -0,0 +1,56 @@
1Files: epic.c epic_data.h epic_data.c
2Original provenience: MediaBench benchmark suite,
3 http://euler.slu.edu/~fritts/mediabench/mb1/index.html
4
52016-02-03:
6- Added TACLeBench header, also kept original copyright notice
7- Removed commented-out code
8- Removed seemingly unnecessary empty lines
9- Removed unused function, variable, macro and type declarations except where
10 they may help understanding the program.
11- Slightly changed wording of original comments to keep them in line with the
12 modified/removed code parts.
13- Separated epic.c to epic.c and epic.h
14- Added proper '#ifndef __EPIC_DATA_H_' and friends to epic_data.h
15- Moved around all the following so that they are in the given order just after
16the header
17 - macro definitions
18 - forward declaration of functions
19 - declaration of global variables
20- Added a new main function that first calls init function then the old main
21 function sans init
22- Annotated epic_main() as the entry point of the analysis
23- Applied code formatting according to the following rules
24 - Lines shall not be wider than 80 characters; whenever possible, appropriate
25 line breaks shall be inserted to keep lines below 80 characters
26 - Indentation is done using whitespaces only, no tabs. Code is indented by
27 two whitespaces
28 - Two empty lines are put between any two functions
29 - In non-empty lists or index expressions, opening '(' and '[' are followed by
30 one whitespace, closing ')' and ']' are preceded by one whitespace
31 - In comma- or colon-separated argument lists, one whitespace is put after
32 each comma/colon
33 - Names of functions and global variables all start with a benchmark-specific
34 prefix (here: epic_) followed by lowercase letter
35 - For pointer types, one whitespace is put before the '*'
36 - Operators within expressions shall be preceded and followed by one
37 whitespace
38 - Code of then- and else-parts of if-then-else statements shall be put in
39 separate lines, not in the same lines as the if-condition or the keyword
40 "else"
41 - Opening braces '{' denoting the beginning of code for some if-else or loop
42 body shall be put at the end of the same line where the keywords "if",
43 "else", "for", "while" etc. occur
44
452016-10-10:
46- removed unused parameter 'char *edges' in epic_internal_filter()
47- included input data definition in epic.c, and removed epic_data.c and epic_data.h
48
492016-10-12:
50- added initial value to variable 'rt_edge_res_pos' (in case the first for loop
51at line 775) is not executed)
52- added initial value to variable 'first_col' (in case the first for loop
53at line 775) is not executed)
54
552016-10_14:
56- added epic_return() function
diff --git a/all_pairs/source/epic/epic.c b/all_pairs/source/epic/epic.c
new file mode 100644
index 0000000..13ba442
--- /dev/null
+++ b/all_pairs/source/epic/epic.c
@@ -0,0 +1,1141 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: epic
7
8 Author: Designed by Eero P. Simoncelli and Edward H. Adelson
9 Written by Eero P. Simoncelli
10 Developed at the Vision Science Group, The Media Laboratory
11 Copyright 1989, Massachusetts Institute of Technology
12 All rights reserved.
13
14 Function: Efficient Pyramid Image Coder
15
16 Source: MediaBench
17
18
19 Original name: epic
20
21 Changes: no major functional changes
22
23 License:
24 Permission to use, copy, or modify this software and its documentation
25 for educational and research purposes only and without fee is hereby
26 granted, provided that this copyright notice appear on all copies and
27 supporting documentation. For any other uses of this software, in
28 original or modified form, including but not limited to distribution
29 in whole or in part, specific prior permission must be obtained from
30 M.I.T. and the authors. These programs shall not be used, rewritten,
31 or adapted as the basis of a commercial software or hardware product
32 without first obtaining appropriate licenses from M.I.T. M.I.T. makes
33 no representations about the suitability of this software for any
34 purpose. It is provided "as is" without express or implied warranty.
35*/
36
37
38#include "../extra.h"
39#include "epic.h"
40
41#define X_SIZE 64
42#define Y_SIZE 64
43
44float epic_image[] = {
45 0x89, 0x88, 0x87, 0x86, 0x89, 0x87, 0x84, 0x86,
46 0x83, 0x89, 0x82, 0x83, 0x84, 0x81, 0x80, 0x80,
47 0x81, 0x83, 0x88, 0x8A, 0x8E, 0x90, 0x96, 0x98,
48 0x95, 0x92, 0x93, 0x88, 0x78, 0x7B, 0x60, 0x52,
49 0x41, 0x3F, 0x3A, 0x46, 0x46, 0x48, 0x49, 0x48,
50 0x4F, 0x4A, 0x49, 0x50, 0x4C, 0x4B, 0x4D, 0x4C,
51 0x4E, 0x4E, 0x4A, 0x49, 0x4D, 0x54, 0x50, 0x59,
52 0x51, 0x5A, 0x5E, 0x5A, 0x5D, 0x61, 0x59, 0x65,
53 0x63, 0x65, 0x60, 0x62, 0x68, 0x67, 0x64, 0x61,
54 0x64, 0x5E, 0x66, 0x63, 0x63, 0x61, 0x67, 0x68,
55 0x62, 0x64, 0x66, 0x67, 0x64, 0x63, 0x66, 0x64,
56 0x67, 0x66, 0x65, 0x64, 0x64, 0x6A, 0x66, 0x65,
57 0x68, 0x66, 0x69, 0x67, 0x6A, 0x66, 0x68, 0x66,
58 0x6C, 0x65, 0x69, 0x64, 0x65, 0x64, 0x66, 0x62,
59 0x63, 0x68, 0x68, 0x65, 0x64, 0x64, 0x62, 0x63,
60 0x68, 0x65, 0x66, 0x69, 0x66, 0x65, 0x61, 0x66,
61 0x6E, 0x69, 0x64, 0x61, 0x63, 0x63, 0x66, 0x63,
62 0x62, 0x64, 0x60, 0x68, 0x63, 0x61, 0x62, 0x65,
63 0x60, 0x63, 0x60, 0x62, 0x60, 0x5E, 0x61, 0x62,
64 0x5D, 0x5C, 0x57, 0x5B, 0x58, 0x53, 0x54, 0x47,
65 0x49, 0x54, 0x5C, 0x6B, 0x6F, 0x77, 0x7F, 0x80,
66 0x88, 0x8A, 0x8C, 0x85, 0x7A, 0x7D, 0x7F, 0x7D,
67 0x80, 0x80, 0x81, 0x80, 0x85, 0x82, 0x81, 0x7E,
68 0x80, 0x7F, 0x7F, 0x7E, 0x7D, 0x7E, 0x83, 0x7F,
69 0x81, 0x83, 0x87, 0x82, 0x83, 0x88, 0x84, 0x82,
70 0x82, 0x8A, 0xB3, 0xC5, 0xCD, 0xCF, 0xD4, 0xD3,
71 0xD6, 0xCC, 0xB5, 0x80, 0x4E, 0x48, 0x4D, 0x4D,
72 0x57, 0x5A, 0x59, 0x5C, 0x62, 0x58, 0x5C, 0x5B,
73 0x5B, 0x62, 0x5D, 0x5C, 0x59, 0x5C, 0x5A, 0x59,
74 0x5D, 0x5F, 0x5B, 0x5F, 0x60, 0x5E, 0x5E, 0x57,
75 0x5F, 0x5F, 0x60, 0x61, 0x5C, 0x61, 0x60, 0x5B,
76 0x56, 0x56, 0x57, 0x58, 0x6E, 0x91, 0x96, 0x7E,
77 0x89, 0x88, 0x87, 0x86, 0x8A, 0x87, 0x84, 0x87,
78 0x83, 0x89, 0x82, 0x83, 0x84, 0x81, 0x80, 0x80,
79 0x81, 0x83, 0x88, 0x8A, 0x8E, 0x90, 0x96, 0x98,
80 0x94, 0x93, 0x93, 0x88, 0x78, 0x7B, 0x60, 0x52,
81 0x41, 0x3F, 0x39, 0x46, 0x46, 0x48, 0x49, 0x47,
82 0x50, 0x4A, 0x49, 0x50, 0x4D, 0x4B, 0x4D, 0x4C,
83 0x4E, 0x4E, 0x4A, 0x49, 0x4E, 0x54, 0x4F, 0x59,
84 0x51, 0x5A, 0x5E, 0x5A, 0x5D, 0x61, 0x59, 0x65,
85 0x63, 0x65, 0x5F, 0x62, 0x68, 0x67, 0x64, 0x61,
86 0x64, 0x5E, 0x66, 0x63, 0x63, 0x61, 0x67, 0x69,
87 0x61, 0x63, 0x66, 0x67, 0x65, 0x63, 0x66, 0x64,
88 0x67, 0x67, 0x65, 0x64, 0x64, 0x6A, 0x66, 0x65,
89 0x68, 0x66, 0x69, 0x67, 0x6A, 0x67, 0x69, 0x66,
90 0x6C, 0x65, 0x69, 0x64, 0x65, 0x64, 0x66, 0x62,
91 0x63, 0x68, 0x68, 0x66, 0x64, 0x64, 0x62, 0x63,
92 0x68, 0x65, 0x66, 0x6A, 0x67, 0x65, 0x60, 0x66,
93 0x6F, 0x6A, 0x64, 0x61, 0x64, 0x63, 0x66, 0x63,
94 0x62, 0x64, 0x60, 0x69, 0x64, 0x61, 0x62, 0x65,
95 0x60, 0x63, 0x60, 0x62, 0x60, 0x5E, 0x61, 0x62,
96 0x5D, 0x5C, 0x57, 0x5B, 0x59, 0x53, 0x54, 0x47,
97 0x49, 0x54, 0x5C, 0x6B, 0x6F, 0x77, 0x7F, 0x80,
98 0x88, 0x8A, 0x8C, 0x85, 0x7A, 0x7D, 0x7F, 0x7C,
99 0x80, 0x80, 0x81, 0x80, 0x85, 0x82, 0x81, 0x7E,
100 0x80, 0x7F, 0x7F, 0x7E, 0x7D, 0x7E, 0x83, 0x7F,
101 0x81, 0x83, 0x87, 0x81, 0x83, 0x88, 0x84, 0x82,
102 0x82, 0x8A, 0xB5, 0xC5, 0xCD, 0xCF, 0xD4, 0xD3,
103 0xD6, 0xCC, 0xB4, 0x7E, 0x4D, 0x48, 0x4E, 0x4D,
104 0x57, 0x5A, 0x59, 0x5C, 0x62, 0x58, 0x5C, 0x5B,
105 0x5B, 0x62, 0x5D, 0x5C, 0x59, 0x5C, 0x5A, 0x59,
106 0x5D, 0x5F, 0x5B, 0x5F, 0x60, 0x5E, 0x5E, 0x57,
107 0x5F, 0x5F, 0x60, 0x61, 0x5C, 0x61, 0x60, 0x5B,
108 0x56, 0x56, 0x57, 0x58, 0x6F, 0x94, 0x9A, 0x82,
109 0x88, 0x89, 0x87, 0x86, 0x88, 0x86, 0x84, 0x85,
110 0x82, 0x87, 0x82, 0x81, 0x83, 0x81, 0x7F, 0x80,
111 0x82, 0x82, 0x87, 0x8A, 0x8F, 0x90, 0x95, 0x98,
112 0x95, 0x92, 0x92, 0x88, 0x79, 0x77, 0x5F, 0x51,
113 0x41, 0x3E, 0x3B, 0x44, 0x44, 0x46, 0x49, 0x4A,
114 0x4C, 0x49, 0x49, 0x4E, 0x4A, 0x4A, 0x4E, 0x4A,
115 0x4D, 0x4D, 0x48, 0x4A, 0x4C, 0x52, 0x52, 0x58,
116 0x52, 0x59, 0x5E, 0x5A, 0x5D, 0x5F, 0x59, 0x64,
117 0x64, 0x64, 0x62, 0x61, 0x66, 0x66, 0x64, 0x60,
118 0x62, 0x5F, 0x65, 0x63, 0x62, 0x62, 0x65, 0x66,
119 0x62, 0x65, 0x67, 0x66, 0x64, 0x64, 0x65, 0x65,
120 0x66, 0x65, 0x65, 0x63, 0x63, 0x67, 0x65, 0x64,
121 0x67, 0x67, 0x68, 0x66, 0x6A, 0x66, 0x67, 0x66,
122 0x6C, 0x65, 0x6A, 0x64, 0x64, 0x63, 0x66, 0x62,
123 0x63, 0x67, 0x69, 0x65, 0x64, 0x63, 0x62, 0x63,
124 0x68, 0x65, 0x66, 0x69, 0x66, 0x65, 0x61, 0x65,
125 0x6C, 0x69, 0x64, 0x61, 0x62, 0x62, 0x64, 0x63,
126 0x61, 0x63, 0x60, 0x66, 0x63, 0x61, 0x62, 0x65,
127 0x60, 0x62, 0x60, 0x62, 0x60, 0x5E, 0x60, 0x61,
128 0x5C, 0x5C, 0x59, 0x5B, 0x57, 0x53, 0x52, 0x47,
129 0x48, 0x54, 0x5C, 0x69, 0x6E, 0x77, 0x7D, 0x80,
130 0x88, 0x89, 0x8C, 0x84, 0x7B, 0x7D, 0x7E, 0x7D,
131 0x7F, 0x80, 0x81, 0x7F, 0x85, 0x82, 0x80, 0x7E,
132 0x7F, 0x7E, 0x7F, 0x7F, 0x7E, 0x7F, 0x82, 0x7F,
133 0x81, 0x83, 0x86, 0x82, 0x83, 0x87, 0x84, 0x82,
134 0x81, 0x88, 0xB0, 0xC5, 0xCD, 0xCF, 0xD4, 0xD4,
135 0xD6, 0xCD, 0xB8, 0x86, 0x51, 0x47, 0x4B, 0x4D,
136 0x56, 0x59, 0x59, 0x5B, 0x5F, 0x59, 0x5C, 0x5D,
137 0x5B, 0x62, 0x5D, 0x5B, 0x5B, 0x5C, 0x5B, 0x5A,
138 0x5E, 0x5F, 0x5D, 0x5F, 0x60, 0x5D, 0x5F, 0x58,
139 0x5E, 0x5F, 0x5F, 0x5F, 0x5B, 0x60, 0x60, 0x5C,
140 0x57, 0x56, 0x59, 0x5B, 0x6E, 0x8A, 0x87, 0x6C,
141 0x84, 0x88, 0x86, 0x84, 0x87, 0x85, 0x84, 0x82,
142 0x80, 0x84, 0x82, 0x7E, 0x82, 0x7F, 0x7C, 0x80,
143 0x84, 0x80, 0x84, 0x8B, 0x90, 0x92, 0x93, 0x95,
144 0x97, 0x91, 0x8E, 0x86, 0x79, 0x6F, 0x5B, 0x4F,
145 0x41, 0x3A, 0x3D, 0x3F, 0x40, 0x42, 0x48, 0x4B,
146 0x46, 0x48, 0x47, 0x4A, 0x46, 0x49, 0x4D, 0x48,
147 0x48, 0x4D, 0x46, 0x4C, 0x4B, 0x4F, 0x55, 0x55,
148 0x54, 0x58, 0x5D, 0x5B, 0x5D, 0x5C, 0x5A, 0x61,
149 0x62, 0x60, 0x65, 0x61, 0x63, 0x65, 0x64, 0x5F,
150 0x60, 0x61, 0x63, 0x63, 0x61, 0x63, 0x61, 0x63,
151 0x64, 0x66, 0x67, 0x66, 0x64, 0x65, 0x65, 0x67,
152 0x64, 0x64, 0x66, 0x63, 0x62, 0x64, 0x63, 0x62,
153 0x65, 0x67, 0x66, 0x65, 0x68, 0x65, 0x64, 0x64,
154 0x69, 0x63, 0x69, 0x65, 0x63, 0x61, 0x63, 0x61,
155 0x63, 0x68, 0x6B, 0x65, 0x63, 0x61, 0x62, 0x64,
156 0x66, 0x64, 0x65, 0x66, 0x63, 0x63, 0x63, 0x65,
157 0x65, 0x67, 0x65, 0x60, 0x60, 0x5E, 0x60, 0x64,
158 0x5E, 0x63, 0x60, 0x61, 0x5F, 0x60, 0x61, 0x63,
159 0x62, 0x62, 0x5E, 0x60, 0x61, 0x60, 0x5E, 0x5D,
160 0x5C, 0x5D, 0x5C, 0x5A, 0x54, 0x51, 0x4E, 0x4A,
161 0x46, 0x50, 0x59, 0x62, 0x6A, 0x75, 0x79, 0x80,
162 0x86, 0x86, 0x8B, 0x83, 0x7F, 0x7E, 0x7E, 0x7E,
163 0x7E, 0x81, 0x81, 0x7E, 0x83, 0x82, 0x80, 0x80,
164 0x7F, 0x7F, 0x7F, 0x81, 0x81, 0x81, 0x7F, 0x7E,
165 0x80, 0x82, 0x84, 0x83, 0x81, 0x84, 0x83, 0x82,
166 0x7F, 0x82, 0x9D, 0xBD, 0xC9, 0xCE, 0xD2, 0xD4,
167 0xD6, 0xD2, 0xC4, 0xA1, 0x68, 0x49, 0x48, 0x4D,
168 0x54, 0x56, 0x59, 0x5A, 0x5A, 0x5B, 0x5B, 0x60,
169 0x5B, 0x60, 0x5B, 0x5B, 0x5C, 0x5C, 0x5D, 0x5D,
170 0x60, 0x5C, 0x5E, 0x5E, 0x5E, 0x5B, 0x5E, 0x5C,
171 0x5D, 0x5E, 0x5F, 0x5C, 0x5C, 0x60, 0x61, 0x5E,
172 0x5A, 0x58, 0x5F, 0x62, 0x5F, 0x5D, 0x48, 0x32,
173 0x81, 0x85, 0x85, 0x81, 0x86, 0x83, 0x84, 0x80,
174 0x7F, 0x84, 0x83, 0x7E, 0x80, 0x7E, 0x7D, 0x80,
175 0x82, 0x7F, 0x85, 0x8D, 0x91, 0x93, 0x92, 0x95,
176 0x95, 0x8F, 0x8C, 0x84, 0x76, 0x6B, 0x5D, 0x50,
177 0x41, 0x38, 0x39, 0x3B, 0x41, 0x41, 0x46, 0x47,
178 0x45, 0x47, 0x44, 0x47, 0x45, 0x4A, 0x49, 0x48,
179 0x45, 0x4C, 0x48, 0x4C, 0x4E, 0x4E, 0x51, 0x56,
180 0x56, 0x59, 0x5A, 0x5C, 0x5C, 0x5E, 0x5A, 0x60,
181 0x5D, 0x60, 0x62, 0x61, 0x63, 0x64, 0x62, 0x5F,
182 0x61, 0x62, 0x64, 0x62, 0x61, 0x64, 0x61, 0x64,
183 0x63, 0x65, 0x65, 0x67, 0x63, 0x66, 0x65, 0x64,
184 0x63, 0x65, 0x66, 0x61, 0x60, 0x67, 0x64, 0x62,
185 0x63, 0x65, 0x64, 0x65, 0x65, 0x63, 0x62, 0x63,
186 0x63, 0x61, 0x67, 0x66, 0x63, 0x5F, 0x5E, 0x60,
187 0x63, 0x66, 0x6A, 0x64, 0x62, 0x60, 0x64, 0x63,
188 0x65, 0x62, 0x62, 0x62, 0x60, 0x62, 0x63, 0x63,
189 0x61, 0x64, 0x65, 0x60, 0x60, 0x5D, 0x61, 0x62,
190 0x5D, 0x61, 0x5E, 0x60, 0x5C, 0x60, 0x5F, 0x60,
191 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x5E, 0x5D,
192 0x5D, 0x5B, 0x5A, 0x58, 0x52, 0x51, 0x4E, 0x4D,
193 0x47, 0x4A, 0x51, 0x5B, 0x66, 0x70, 0x76, 0x7C,
194 0x81, 0x84, 0x8A, 0x85, 0x81, 0x80, 0x7F, 0x7C,
195 0x7F, 0x82, 0x82, 0x81, 0x82, 0x82, 0x81, 0x84,
196 0x80, 0x82, 0x81, 0x80, 0x81, 0x81, 0x80, 0x80,
197 0x81, 0x82, 0x81, 0x82, 0x7F, 0x81, 0x80, 0x81,
198 0x7F, 0x7D, 0x86, 0xAB, 0xC1, 0xCB, 0xCF, 0xD2,
199 0xD3, 0xD5, 0xCF, 0xBA, 0x8A, 0x57, 0x48, 0x4D,
200 0x51, 0x52, 0x55, 0x5A, 0x5A, 0x5B, 0x59, 0x5F,
201 0x59, 0x5C, 0x59, 0x5C, 0x5A, 0x5A, 0x5B, 0x5C,
202 0x5F, 0x5C, 0x5D, 0x5B, 0x5D, 0x5C, 0x5C, 0x5E,
203 0x5C, 0x5D, 0x61, 0x5E, 0x5D, 0x5F, 0x62, 0x61,
204 0x61, 0x5F, 0x60, 0x5A, 0x3D, 0x28, 0x19, 0x13,
205 0x82, 0x84, 0x83, 0x7F, 0x84, 0x83, 0x83, 0x81,
206 0x80, 0x83, 0x84, 0x82, 0x7F, 0x7F, 0x80, 0x7F,
207 0x81, 0x83, 0x87, 0x8E, 0x92, 0x91, 0x93, 0x94,
208 0x91, 0x8F, 0x8E, 0x83, 0x72, 0x6A, 0x60, 0x4F,
209 0x3F, 0x36, 0x37, 0x3D, 0x42, 0x3F, 0x43, 0x47,
210 0x45, 0x45, 0x46, 0x46, 0x47, 0x4B, 0x44, 0x46,
211 0x44, 0x47, 0x48, 0x4B, 0x51, 0x4D, 0x4F, 0x56,
212 0x56, 0x5A, 0x5A, 0x5B, 0x5B, 0x5D, 0x5B, 0x5F,
213 0x5C, 0x62, 0x5D, 0x61, 0x62, 0x63, 0x60, 0x63,
214 0x62, 0x63, 0x64, 0x60, 0x61, 0x64, 0x60, 0x66,
215 0x5F, 0x63, 0x65, 0x67, 0x63, 0x63, 0x63, 0x63,
216 0x63, 0x65, 0x63, 0x61, 0x62, 0x66, 0x63, 0x63,
217 0x62, 0x63, 0x61, 0x62, 0x64, 0x61, 0x64, 0x63,
218 0x61, 0x64, 0x66, 0x63, 0x63, 0x5E, 0x5D, 0x5E,
219 0x63, 0x61, 0x64, 0x63, 0x63, 0x60, 0x63, 0x62,
220 0x64, 0x62, 0x63, 0x61, 0x62, 0x61, 0x63, 0x60,
221 0x61, 0x61, 0x63, 0x63, 0x61, 0x62, 0x62, 0x60,
222 0x5E, 0x5F, 0x5F, 0x61, 0x5D, 0x61, 0x5F, 0x5F,
223 0x5F, 0x5E, 0x61, 0x60, 0x5F, 0x5F, 0x62, 0x61,
224 0x5D, 0x5A, 0x56, 0x58, 0x54, 0x52, 0x51, 0x4F,
225 0x4C, 0x47, 0x4B, 0x57, 0x61, 0x6C, 0x72, 0x79,
226 0x7E, 0x82, 0x89, 0x87, 0x82, 0x82, 0x7F, 0x7E,
227 0x80, 0x82, 0x86, 0x84, 0x85, 0x84, 0x83, 0x85,
228 0x82, 0x82, 0x82, 0x80, 0x81, 0x83, 0x82, 0x80,
229 0x80, 0x83, 0x80, 0x81, 0x7F, 0x81, 0x7F, 0x81,
230 0x83, 0x7A, 0x7D, 0x95, 0xB7, 0xC6, 0xCD, 0xD0,
231 0xD3, 0xD5, 0xD4, 0xC9, 0xA9, 0x73, 0x4B, 0x48,
232 0x4D, 0x50, 0x53, 0x57, 0x59, 0x5A, 0x57, 0x5C,
233 0x5B, 0x5A, 0x59, 0x5B, 0x59, 0x58, 0x58, 0x5A,
234 0x5F, 0x5D, 0x5B, 0x58, 0x5D, 0x5A, 0x5C, 0x5D,
235 0x5D, 0x5E, 0x5E, 0x5F, 0x5C, 0x5D, 0x62, 0x65,
236 0x66, 0x65, 0x55, 0x3D, 0x20, 0x13, 0x12, 0x17,
237 0x83, 0x83, 0x80, 0x81, 0x84, 0x82, 0x81, 0x81,
238 0x81, 0x83, 0x81, 0x83, 0x7F, 0x80, 0x80, 0x7E,
239 0x83, 0x8A, 0x8A, 0x90, 0x93, 0x91, 0x92, 0x92,
240 0x8F, 0x90, 0x8D, 0x83, 0x71, 0x69, 0x5D, 0x4D,
241 0x41, 0x37, 0x37, 0x3F, 0x3C, 0x3F, 0x42, 0x48,
242 0x44, 0x46, 0x49, 0x4B, 0x4A, 0x4A, 0x41, 0x45,
243 0x45, 0x44, 0x44, 0x48, 0x50, 0x4C, 0x51, 0x53,
244 0x57, 0x57, 0x5A, 0x5A, 0x5D, 0x5B, 0x5D, 0x5D,
245 0x5C, 0x5E, 0x5E, 0x62, 0x5E, 0x62, 0x60, 0x65,
246 0x63, 0x63, 0x61, 0x5F, 0x61, 0x63, 0x5E, 0x65,
247 0x5E, 0x61, 0x66, 0x63, 0x63, 0x61, 0x63, 0x65,
248 0x61, 0x62, 0x62, 0x64, 0x64, 0x63, 0x62, 0x62,
249 0x60, 0x63, 0x62, 0x61, 0x64, 0x61, 0x64, 0x63,
250 0x62, 0x66, 0x66, 0x63, 0x64, 0x5E, 0x60, 0x5F,
251 0x63, 0x62, 0x60, 0x63, 0x62, 0x60, 0x62, 0x62,
252 0x64, 0x66, 0x66, 0x63, 0x65, 0x61, 0x65, 0x61,
253 0x60, 0x61, 0x61, 0x64, 0x61, 0x63, 0x63, 0x61,
254 0x61, 0x5F, 0x61, 0x61, 0x5F, 0x62, 0x5E, 0x60,
255 0x5F, 0x5B, 0x5F, 0x61, 0x5E, 0x5F, 0x65, 0x60,
256 0x5A, 0x5B, 0x58, 0x59, 0x56, 0x53, 0x52, 0x50,
257 0x4E, 0x4B, 0x47, 0x51, 0x5A, 0x67, 0x6E, 0x77,
258 0x7B, 0x7F, 0x87, 0x87, 0x86, 0x84, 0x82, 0x83,
259 0x83, 0x83, 0x86, 0x87, 0x89, 0x88, 0x87, 0x84,
260 0x84, 0x83, 0x80, 0x80, 0x81, 0x84, 0x81, 0x81,
261 0x80, 0x81, 0x7F, 0x7F, 0x7F, 0x82, 0x80, 0x81,
262 0x84, 0x7C, 0x7E, 0x82, 0xA5, 0xC0, 0xCA, 0xCF,
263 0xD3, 0xD5, 0xD5, 0xD2, 0xBF, 0x96, 0x5C, 0x47,
264 0x4B, 0x4E, 0x50, 0x55, 0x55, 0x58, 0x57, 0x5A,
265 0x5D, 0x5A, 0x5C, 0x59, 0x5C, 0x55, 0x57, 0x5B,
266 0x60, 0x5B, 0x5B, 0x59, 0x5B, 0x5B, 0x5F, 0x5B,
267 0x5D, 0x5E, 0x5B, 0x5D, 0x5D, 0x5D, 0x65, 0x68,
268 0x63, 0x5A, 0x3A, 0x23, 0x19, 0x12, 0x17, 0x19,
269 0x83, 0x83, 0x81, 0x84, 0x82, 0x80, 0x82, 0x81,
270 0x81, 0x81, 0x80, 0x81, 0x80, 0x7F, 0x7E, 0x82,
271 0x86, 0x8C, 0x90, 0x91, 0x91, 0x92, 0x91, 0x92,
272 0x90, 0x8F, 0x87, 0x82, 0x72, 0x69, 0x5D, 0x4E,
273 0x42, 0x39, 0x37, 0x3E, 0x3A, 0x42, 0x44, 0x43,
274 0x46, 0x4B, 0x49, 0x4E, 0x4A, 0x49, 0x42, 0x48,
275 0x48, 0x44, 0x42, 0x45, 0x4C, 0x4D, 0x51, 0x51,
276 0x55, 0x56, 0x5A, 0x5C, 0x5E, 0x5C, 0x5C, 0x5F,
277 0x5D, 0x5C, 0x60, 0x60, 0x5C, 0x62, 0x62, 0x64,
278 0x63, 0x61, 0x61, 0x60, 0x61, 0x61, 0x60, 0x63,
279 0x61, 0x61, 0x65, 0x62, 0x62, 0x65, 0x65, 0x65,
280 0x61, 0x62, 0x64, 0x65, 0x66, 0x63, 0x64, 0x5F,
281 0x5F, 0x62, 0x65, 0x64, 0x64, 0x63, 0x62, 0x65,
282 0x63, 0x64, 0x65, 0x62, 0x65, 0x60, 0x63, 0x60,
283 0x61, 0x66, 0x61, 0x64, 0x5F, 0x60, 0x63, 0x62,
284 0x64, 0x67, 0x66, 0x67, 0x66, 0x61, 0x65, 0x64,
285 0x60, 0x65, 0x61, 0x62, 0x61, 0x60, 0x64, 0x5F,
286 0x63, 0x61, 0x60, 0x5F, 0x5F, 0x5E, 0x5D, 0x60,
287 0x61, 0x5D, 0x60, 0x61, 0x60, 0x60, 0x62, 0x5F,
288 0x59, 0x5D, 0x5B, 0x5A, 0x57, 0x54, 0x51, 0x56,
289 0x4E, 0x4E, 0x48, 0x4C, 0x55, 0x60, 0x6E, 0x75,
290 0x79, 0x7D, 0x84, 0x87, 0x89, 0x89, 0x87, 0x85,
291 0x84, 0x86, 0x87, 0x8A, 0x89, 0x8A, 0x8A, 0x85,
292 0x82, 0x84, 0x82, 0x81, 0x83, 0x83, 0x7D, 0x80,
293 0x80, 0x7E, 0x7F, 0x7C, 0x7E, 0x7F, 0x80, 0x80,
294 0x7F, 0x80, 0x7F, 0x7B, 0x8D, 0xB5, 0xC5, 0xCC,
295 0xD2, 0xD4, 0xD5, 0xD6, 0xCC, 0xB4, 0x7F, 0x4E,
296 0x4C, 0x4B, 0x4F, 0x51, 0x56, 0x55, 0x54, 0x59,
297 0x5C, 0x59, 0x5D, 0x59, 0x5B, 0x57, 0x57, 0x5D,
298 0x5D, 0x58, 0x5D, 0x5D, 0x5A, 0x5F, 0x61, 0x5D,
299 0x5F, 0x5E, 0x5D, 0x60, 0x60, 0x63, 0x69, 0x62,
300 0x50, 0x38, 0x1D, 0x1A, 0x1C, 0x17, 0x19, 0x18,
301 0x81, 0x82, 0x83, 0x82, 0x81, 0x7E, 0x83, 0x83,
302 0x80, 0x82, 0x82, 0x80, 0x80, 0x7D, 0x80, 0x88,
303 0x8A, 0x8D, 0x93, 0x8F, 0x91, 0x91, 0x90, 0x8F,
304 0x90, 0x8C, 0x84, 0x81, 0x71, 0x69, 0x5E, 0x4B,
305 0x40, 0x3A, 0x38, 0x3B, 0x3B, 0x45, 0x44, 0x3E,
306 0x46, 0x4B, 0x4A, 0x4B, 0x45, 0x47, 0x45, 0x49,
307 0x44, 0x45, 0x42, 0x47, 0x4A, 0x4F, 0x52, 0x51,
308 0x53, 0x57, 0x59, 0x5D, 0x5B, 0x5E, 0x5A, 0x60,
309 0x5F, 0x5F, 0x5F, 0x61, 0x5C, 0x61, 0x64, 0x63,
310 0x62, 0x60, 0x62, 0x62, 0x63, 0x60, 0x61, 0x60,
311 0x64, 0x64, 0x66, 0x63, 0x61, 0x68, 0x65, 0x65,
312 0x63, 0x66, 0x65, 0x63, 0x65, 0x63, 0x64, 0x61,
313 0x60, 0x60, 0x62, 0x66, 0x64, 0x61, 0x63, 0x65,
314 0x64, 0x62, 0x66, 0x60, 0x67, 0x63, 0x61, 0x5E,
315 0x5D, 0x66, 0x65, 0x63, 0x60, 0x60, 0x61, 0x62,
316 0x66, 0x68, 0x66, 0x6B, 0x65, 0x62, 0x65, 0x63,
317 0x63, 0x64, 0x63, 0x62, 0x60, 0x61, 0x62, 0x5D,
318 0x62, 0x62, 0x61, 0x5E, 0x5F, 0x5A, 0x5E, 0x5E,
319 0x61, 0x60, 0x62, 0x60, 0x62, 0x5E, 0x5F, 0x60,
320 0x5E, 0x5F, 0x59, 0x5B, 0x56, 0x54, 0x51, 0x59,
321 0x4E, 0x4E, 0x49, 0x47, 0x52, 0x5B, 0x6B, 0x72,
322 0x76, 0x7C, 0x82, 0x86, 0x87, 0x8E, 0x89, 0x85,
323 0x85, 0x87, 0x88, 0x8D, 0x89, 0x89, 0x8A, 0x89,
324 0x82, 0x84, 0x85, 0x86, 0x86, 0x80, 0x7E, 0x7E,
325 0x7E, 0x7F, 0x81, 0x7D, 0x7F, 0x7C, 0x7E, 0x7D,
326 0x7E, 0x80, 0x7D, 0x7C, 0x7B, 0x9F, 0xBD, 0xC9,
327 0xD0, 0xD3, 0xD5, 0xD6, 0xD3, 0xC6, 0xA3, 0x64,
328 0x4C, 0x47, 0x50, 0x4D, 0x58, 0x53, 0x52, 0x58,
329 0x59, 0x5A, 0x5C, 0x59, 0x5B, 0x5E, 0x58, 0x5E,
330 0x5B, 0x5D, 0x5F, 0x5C, 0x5B, 0x60, 0x63, 0x5F,
331 0x62, 0x62, 0x60, 0x64, 0x65, 0x68, 0x63, 0x4F,
332 0x30, 0x17, 0x14, 0x13, 0x17, 0x1A, 0x15, 0x17,
333 0x82, 0x83, 0x83, 0x80, 0x82, 0x7F, 0x83, 0x86,
334 0x83, 0x86, 0x81, 0x81, 0x80, 0x7F, 0x85, 0x88,
335 0x8C, 0x8F, 0x92, 0x8E, 0x93, 0x8F, 0x8E, 0x8B,
336 0x8E, 0x8A, 0x85, 0x7E, 0x71, 0x68, 0x5E, 0x4F,
337 0x42, 0x3E, 0x38, 0x39, 0x3D, 0x45, 0x42, 0x42,
338 0x44, 0x47, 0x4B, 0x49, 0x45, 0x46, 0x47, 0x46,
339 0x42, 0x45, 0x44, 0x48, 0x4A, 0x50, 0x52, 0x51,
340 0x55, 0x54, 0x57, 0x5A, 0x5A, 0x5D, 0x57, 0x5F,
341 0x5E, 0x60, 0x5D, 0x61, 0x5E, 0x61, 0x64, 0x62,
342 0x60, 0x62, 0x62, 0x63, 0x63, 0x62, 0x62, 0x61,
343 0x63, 0x62, 0x65, 0x63, 0x60, 0x65, 0x64, 0x63,
344 0x64, 0x66, 0x64, 0x61, 0x62, 0x64, 0x63, 0x63,
345 0x63, 0x5F, 0x61, 0x67, 0x62, 0x61, 0x64, 0x63,
346 0x63, 0x62, 0x65, 0x61, 0x68, 0x61, 0x63, 0x61,
347 0x5D, 0x65, 0x68, 0x62, 0x60, 0x5E, 0x5E, 0x63,
348 0x67, 0x69, 0x68, 0x69, 0x69, 0x64, 0x65, 0x64,
349 0x65, 0x61, 0x64, 0x64, 0x64, 0x62, 0x62, 0x5C,
350 0x60, 0x62, 0x63, 0x61, 0x61, 0x5B, 0x5C, 0x5C,
351 0x60, 0x60, 0x61, 0x5F, 0x63, 0x5B, 0x5D, 0x60,
352 0x61, 0x5F, 0x5B, 0x5C, 0x5A, 0x53, 0x52, 0x56,
353 0x4E, 0x4C, 0x48, 0x44, 0x4E, 0x5A, 0x65, 0x6F,
354 0x74, 0x7C, 0x81, 0x85, 0x85, 0x8E, 0x88, 0x87,
355 0x88, 0x87, 0x88, 0x8E, 0x89, 0x8A, 0x8A, 0x8B,
356 0x86, 0x83, 0x84, 0x87, 0x86, 0x83, 0x80, 0x7F,
357 0x7F, 0x81, 0x80, 0x7F, 0x7F, 0x7E, 0x7E, 0x7F,
358 0x80, 0x7D, 0x7C, 0x7C, 0x78, 0x84, 0xAD, 0xC3,
359 0xCC, 0xD2, 0xD4, 0xD6, 0xD6, 0xCF, 0xB9, 0x87,
360 0x54, 0x47, 0x51, 0x4D, 0x56, 0x53, 0x54, 0x59,
361 0x57, 0x5B, 0x5E, 0x5B, 0x5E, 0x61, 0x5A, 0x5E,
362 0x5A, 0x63, 0x5D, 0x5D, 0x5F, 0x5E, 0x62, 0x5F,
363 0x62, 0x65, 0x63, 0x68, 0x6A, 0x63, 0x4D, 0x33,
364 0x17, 0x12, 0x1B, 0x11, 0x16, 0x18, 0x14, 0x16,
365 0x84, 0x83, 0x82, 0x7F, 0x83, 0x81, 0x82, 0x86,
366 0x86, 0x85, 0x80, 0x83, 0x7E, 0x80, 0x85, 0x86,
367 0x8C, 0x90, 0x8F, 0x8E, 0x93, 0x8C, 0x8C, 0x8B,
368 0x88, 0x88, 0x84, 0x7C, 0x74, 0x68, 0x62, 0x5B,
369 0x45, 0x3F, 0x38, 0x3A, 0x3F, 0x42, 0x41, 0x45,
370 0x4D, 0x46, 0x49, 0x48, 0x44, 0x47, 0x45, 0x43,
371 0x47, 0x46, 0x45, 0x45, 0x4B, 0x51, 0x50, 0x52,
372 0x57, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x57, 0x5E,
373 0x5B, 0x5E, 0x5E, 0x60, 0x61, 0x60, 0x63, 0x61,
374 0x5E, 0x63, 0x61, 0x63, 0x62, 0x63, 0x63, 0x62,
375 0x61, 0x61, 0x63, 0x64, 0x60, 0x60, 0x64, 0x61,
376 0x63, 0x61, 0x63, 0x61, 0x61, 0x61, 0x63, 0x62,
377 0x64, 0x60, 0x61, 0x64, 0x60, 0x61, 0x61, 0x62,
378 0x63, 0x60, 0x61, 0x62, 0x65, 0x5F, 0x66, 0x63,
379 0x61, 0x63, 0x65, 0x62, 0x5E, 0x5E, 0x5F, 0x62,
380 0x65, 0x66, 0x67, 0x67, 0x6D, 0x64, 0x62, 0x63,
381 0x65, 0x61, 0x62, 0x62, 0x69, 0x61, 0x64, 0x5C,
382 0x5F, 0x61, 0x61, 0x60, 0x61, 0x5C, 0x5B, 0x5E,
383 0x60, 0x5F, 0x60, 0x60, 0x60, 0x5B, 0x5E, 0x5E,
384 0x60, 0x5C, 0x5D, 0x5C, 0x60, 0x57, 0x53, 0x53,
385 0x4E, 0x4D, 0x49, 0x44, 0x4C, 0x55, 0x61, 0x6C,
386 0x74, 0x7B, 0x80, 0x84, 0x86, 0x8B, 0x89, 0x89,
387 0x89, 0x87, 0x87, 0x8D, 0x89, 0x8C, 0x89, 0x8A,
388 0x89, 0x83, 0x83, 0x83, 0x85, 0x86, 0x7F, 0x81,
389 0x80, 0x82, 0x7E, 0x7F, 0x7D, 0x80, 0x7F, 0x81,
390 0x7F, 0x7C, 0x7D, 0x7B, 0x7B, 0x76, 0x95, 0xBA,
391 0xC7, 0xD0, 0xD2, 0xD5, 0xD7, 0xD4, 0xC8, 0xAA,
392 0x70, 0x48, 0x4F, 0x4D, 0x54, 0x52, 0x55, 0x58,
393 0x56, 0x59, 0x5A, 0x5C, 0x5F, 0x5E, 0x59, 0x5D,
394 0x5A, 0x5D, 0x5D, 0x62, 0x63, 0x61, 0x61, 0x62,
395 0x63, 0x66, 0x68, 0x6D, 0x65, 0x4A, 0x31, 0x1C,
396 0x12, 0x1B, 0x22, 0x16, 0x1B, 0x16, 0x16, 0x18,
397 0x84, 0x83, 0x7E, 0x82, 0x83, 0x81, 0x82, 0x85,
398 0x87, 0x84, 0x83, 0x84, 0x7D, 0x80, 0x83, 0x88,
399 0x8E, 0x90, 0x90, 0x8C, 0x8F, 0x8D, 0x8C, 0x88,
400 0x85, 0x86, 0x83, 0x7C, 0x78, 0x6A, 0x63, 0x5A,
401 0x43, 0x3A, 0x39, 0x3D, 0x3F, 0x3E, 0x42, 0x43,
402 0x57, 0x45, 0x48, 0x44, 0x43, 0x4B, 0x43, 0x44,
403 0x48, 0x46, 0x46, 0x46, 0x4C, 0x52, 0x4D, 0x52,
404 0x56, 0x59, 0x55, 0x58, 0x57, 0x5A, 0x5B, 0x5B,
405 0x5D, 0x5C, 0x5D, 0x60, 0x63, 0x62, 0x60, 0x61,
406 0x60, 0x5F, 0x62, 0x63, 0x5F, 0x60, 0x62, 0x62,
407 0x61, 0x61, 0x63, 0x64, 0x61, 0x60, 0x64, 0x63,
408 0x62, 0x60, 0x64, 0x63, 0x60, 0x5F, 0x63, 0x62,
409 0x61, 0x64, 0x5E, 0x61, 0x60, 0x60, 0x5E, 0x62,
410 0x60, 0x5F, 0x60, 0x60, 0x61, 0x5F, 0x61, 0x61,
411 0x61, 0x61, 0x61, 0x61, 0x5D, 0x60, 0x5E, 0x5F,
412 0x63, 0x62, 0x66, 0x66, 0x69, 0x64, 0x61, 0x62,
413 0x64, 0x62, 0x63, 0x61, 0x65, 0x61, 0x60, 0x5F,
414 0x5E, 0x63, 0x5E, 0x5D, 0x5D, 0x5D, 0x5B, 0x60,
415 0x5F, 0x5F, 0x5D, 0x5F, 0x5B, 0x5B, 0x5F, 0x5E,
416 0x5D, 0x5A, 0x5C, 0x5B, 0x5C, 0x58, 0x52, 0x51,
417 0x4E, 0x51, 0x4A, 0x47, 0x4D, 0x51, 0x5E, 0x69,
418 0x74, 0x7B, 0x7E, 0x82, 0x86, 0x89, 0x8B, 0x89,
419 0x88, 0x8A, 0x86, 0x88, 0x88, 0x8C, 0x88, 0x89,
420 0x89, 0x88, 0x85, 0x7F, 0x83, 0x84, 0x80, 0x80,
421 0x80, 0x81, 0x7C, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E,
422 0x7E, 0x7B, 0x7D, 0x7C, 0x78, 0x74, 0x7F, 0xA8,
423 0xC1, 0xCB, 0xD1, 0xD4, 0xD6, 0xD6, 0xD2, 0xC1,
424 0x94, 0x57, 0x49, 0x4C, 0x52, 0x53, 0x57, 0x5A,
425 0x57, 0x59, 0x53, 0x5A, 0x5E, 0x5C, 0x5A, 0x5A,
426 0x5A, 0x57, 0x60, 0x63, 0x65, 0x64, 0x63, 0x64,
427 0x66, 0x69, 0x6A, 0x67, 0x4E, 0x30, 0x1C, 0x12,
428 0x15, 0x19, 0x1F, 0x1A, 0x1A, 0x16, 0x1A, 0x1B,
429 0x81, 0x81, 0x7D, 0x83, 0x85, 0x81, 0x84, 0x84,
430 0x86, 0x83, 0x84, 0x83, 0x7E, 0x84, 0x86, 0x8B,
431 0x8F, 0x8F, 0x94, 0x8D, 0x8D, 0x8B, 0x8C, 0x85,
432 0x85, 0x85, 0x84, 0x7D, 0x79, 0x6B, 0x5C, 0x4F,
433 0x3F, 0x36, 0x36, 0x3A, 0x3E, 0x3B, 0x43, 0x44,
434 0x4E, 0x45, 0x47, 0x42, 0x45, 0x4B, 0x44, 0x44,
435 0x48, 0x44, 0x46, 0x4A, 0x4B, 0x4F, 0x4D, 0x50,
436 0x56, 0x5A, 0x57, 0x59, 0x56, 0x58, 0x5E, 0x5C,
437 0x5F, 0x5F, 0x5C, 0x5F, 0x5D, 0x65, 0x5D, 0x62,
438 0x5F, 0x5C, 0x61, 0x60, 0x5F, 0x5E, 0x61, 0x62,
439 0x61, 0x61, 0x63, 0x60, 0x5F, 0x61, 0x63, 0x63,
440 0x61, 0x61, 0x64, 0x62, 0x60, 0x61, 0x66, 0x63,
441 0x62, 0x64, 0x5E, 0x61, 0x60, 0x5F, 0x5C, 0x5F,
442 0x5C, 0x60, 0x5E, 0x5D, 0x5E, 0x5E, 0x5B, 0x5F,
443 0x60, 0x5D, 0x5E, 0x60, 0x5E, 0x60, 0x5B, 0x5E,
444 0x61, 0x60, 0x63, 0x64, 0x64, 0x65, 0x63, 0x61,
445 0x63, 0x61, 0x64, 0x64, 0x60, 0x62, 0x5C, 0x5F,
446 0x5D, 0x63, 0x5E, 0x5C, 0x5D, 0x5D, 0x5B, 0x5F,
447 0x5E, 0x60, 0x5D, 0x5D, 0x5B, 0x5D, 0x5E, 0x5E,
448 0x5C, 0x5B, 0x5D, 0x59, 0x5A, 0x58, 0x52, 0x4D,
449 0x4F, 0x4F, 0x4A, 0x4B, 0x50, 0x54, 0x5C, 0x66,
450 0x71, 0x79, 0x7C, 0x83, 0x85, 0x89, 0x8B, 0x8A,
451 0x87, 0x8D, 0x86, 0x84, 0x87, 0x89, 0x88, 0x88,
452 0x87, 0x89, 0x86, 0x81, 0x83, 0x84, 0x82, 0x80,
453 0x82, 0x80, 0x7C, 0x7D, 0x7F, 0x7D, 0x7D, 0x7C,
454 0x7F, 0x7C, 0x7C, 0x7D, 0x78, 0x75, 0x75, 0x91,
455 0xB7, 0xC7, 0xCF, 0xD4, 0xD5, 0xD6, 0xD7, 0xCE,
456 0xB2, 0x7C, 0x4A, 0x4A, 0x4F, 0x53, 0x58, 0x5B,
457 0x5B, 0x5C, 0x57, 0x59, 0x5E, 0x5C, 0x5A, 0x58,
458 0x59, 0x5B, 0x5E, 0x60, 0x61, 0x62, 0x63, 0x64,
459 0x69, 0x6B, 0x63, 0x50, 0x2B, 0x27, 0x19, 0x11,
460 0x13, 0x15, 0x15, 0x17, 0x14, 0x18, 0x1E, 0x1A,
461 0x7F, 0x7F, 0x81, 0x82, 0x84, 0x82, 0x85, 0x83,
462 0x83, 0x83, 0x85, 0x82, 0x81, 0x89, 0x8A, 0x8D,
463 0x8F, 0x90, 0x92, 0x8E, 0x8A, 0x87, 0x89, 0x85,
464 0x87, 0x87, 0x85, 0x7D, 0x78, 0x6C, 0x58, 0x4B,
465 0x3B, 0x33, 0x30, 0x36, 0x3E, 0x3D, 0x43, 0x46,
466 0x43, 0x46, 0x46, 0x45, 0x48, 0x47, 0x46, 0x44,
467 0x49, 0x42, 0x46, 0x4A, 0x4B, 0x4B, 0x4F, 0x4F,
468 0x56, 0x5B, 0x57, 0x58, 0x57, 0x5A, 0x5B, 0x5E,
469 0x5F, 0x61, 0x5C, 0x5E, 0x5D, 0x61, 0x5E, 0x62,
470 0x5D, 0x5E, 0x5F, 0x5E, 0x61, 0x61, 0x60, 0x62,
471 0x61, 0x61, 0x60, 0x5F, 0x5D, 0x60, 0x5F, 0x61,
472 0x61, 0x60, 0x62, 0x5E, 0x60, 0x64, 0x65, 0x63,
473 0x66, 0x65, 0x65, 0x60, 0x5F, 0x5C, 0x59, 0x5B,
474 0x5B, 0x5D, 0x59, 0x5C, 0x5B, 0x5D, 0x5E, 0x5F,
475 0x5F, 0x5A, 0x5C, 0x5E, 0x5E, 0x5F, 0x5A, 0x60,
476 0x5D, 0x5F, 0x5F, 0x63, 0x62, 0x64, 0x63, 0x61,
477 0x61, 0x63, 0x64, 0x66, 0x60, 0x61, 0x5E, 0x5D,
478 0x5D, 0x5F, 0x5E, 0x5D, 0x60, 0x5C, 0x5D, 0x5F,
479 0x5D, 0x5E, 0x5E, 0x5D, 0x5C, 0x60, 0x5E, 0x5D,
480 0x5D, 0x5B, 0x5C, 0x59, 0x5C, 0x5B, 0x53, 0x4E,
481 0x50, 0x4A, 0x48, 0x4B, 0x50, 0x56, 0x5C, 0x63,
482 0x6E, 0x74, 0x7E, 0x83, 0x84, 0x88, 0x8B, 0x89,
483 0x89, 0x8B, 0x85, 0x85, 0x87, 0x86, 0x88, 0x85,
484 0x86, 0x87, 0x86, 0x85, 0x82, 0x84, 0x82, 0x81,
485 0x83, 0x80, 0x7F, 0x7E, 0x7D, 0x7F, 0x7F, 0x7C,
486 0x7F, 0x7C, 0x7E, 0x7D, 0x7A, 0x78, 0x75, 0x7C,
487 0xA4, 0xC2, 0xCC, 0xD3, 0xD4, 0xD7, 0xD9, 0xD5,
488 0xC7, 0xA2, 0x60, 0x46, 0x4E, 0x50, 0x54, 0x57,
489 0x5C, 0x5E, 0x5D, 0x5A, 0x5D, 0x5A, 0x5A, 0x59,
490 0x59, 0x5E, 0x5E, 0x5D, 0x5E, 0x61, 0x63, 0x67,
491 0x69, 0x64, 0x4C, 0x2D, 0x12, 0x1C, 0x1B, 0x10,
492 0x0E, 0x14, 0x11, 0x13, 0x12, 0x1B, 0x1D, 0x1A,
493 0x82, 0x81, 0x85, 0x82, 0x83, 0x82, 0x85, 0x85,
494 0x84, 0x84, 0x87, 0x85, 0x84, 0x8C, 0x8C, 0x90,
495 0x91, 0x91, 0x8E, 0x8E, 0x87, 0x84, 0x85, 0x85,
496 0x86, 0x89, 0x86, 0x7F, 0x76, 0x69, 0x59, 0x4D,
497 0x3A, 0x35, 0x31, 0x36, 0x3F, 0x40, 0x42, 0x45,
498 0x45, 0x46, 0x49, 0x44, 0x49, 0x47, 0x48, 0x44,
499 0x47, 0x43, 0x46, 0x49, 0x4B, 0x4B, 0x50, 0x52,
500 0x54, 0x5A, 0x58, 0x58, 0x59, 0x5E, 0x5B, 0x5C,
501 0x5F, 0x5E, 0x5B, 0x5D, 0x62, 0x5F, 0x5F, 0x5F,
502 0x5D, 0x5E, 0x60, 0x5F, 0x63, 0x63, 0x5E, 0x62,
503 0x61, 0x60, 0x5E, 0x61, 0x60, 0x60, 0x5E, 0x62,
504 0x62, 0x5F, 0x5F, 0x5C, 0x60, 0x61, 0x60, 0x65,
505 0x67, 0x68, 0x68, 0x61, 0x5F, 0x5A, 0x58, 0x5A,
506 0x5A, 0x58, 0x57, 0x59, 0x5A, 0x5D, 0x5F, 0x60,
507 0x5D, 0x5C, 0x5C, 0x5C, 0x5B, 0x5D, 0x5C, 0x5F,
508 0x5E, 0x5F, 0x60, 0x60, 0x61, 0x62, 0x63, 0x65,
509 0x62, 0x64, 0x64, 0x64, 0x61, 0x60, 0x60, 0x5C,
510 0x5E, 0x5F, 0x5E, 0x60, 0x5E, 0x5D, 0x5C, 0x5E,
511 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x61, 0x5F, 0x5C,
512 0x5F, 0x5C, 0x5B, 0x5B, 0x57, 0x59, 0x56, 0x52,
513 0x50, 0x4C, 0x49, 0x4B, 0x4E, 0x55, 0x5E, 0x65,
514 0x6D, 0x73, 0x7F, 0x81, 0x85, 0x85, 0x8A, 0x89,
515 0x8A, 0x88, 0x86, 0x86, 0x88, 0x84, 0x89, 0x83,
516 0x88, 0x84, 0x84, 0x84, 0x82, 0x82, 0x82, 0x81,
517 0x83, 0x80, 0x80, 0x7F, 0x7F, 0x85, 0x80, 0x7E,
518 0x7D, 0x7D, 0x7E, 0x7D, 0x79, 0x79, 0x77, 0x73,
519 0x8B, 0xB6, 0xC7, 0xD0, 0xD3, 0xD5, 0xD8, 0xD8,
520 0xD2, 0xBC, 0x86, 0x4A, 0x48, 0x50, 0x52, 0x56,
521 0x58, 0x5A, 0x58, 0x5C, 0x5C, 0x59, 0x5B, 0x5B,
522 0x5A, 0x5E, 0x5E, 0x5E, 0x5F, 0x64, 0x66, 0x69,
523 0x62, 0x49, 0x27, 0x13, 0x0D, 0x14, 0x18, 0x10,
524 0x12, 0x12, 0x12, 0x14, 0x14, 0x1C, 0x19, 0x21,
525 0x82, 0x83, 0x86, 0x83, 0x83, 0x84, 0x84, 0x86,
526 0x86, 0x85, 0x85, 0x89, 0x8A, 0x8F, 0x8F, 0x91,
527 0x92, 0x8F, 0x8E, 0x8D, 0x86, 0x85, 0x84, 0x84,
528 0x85, 0x8A, 0x88, 0x83, 0x76, 0x69, 0x5E, 0x4E,
529 0x3D, 0x39, 0x34, 0x38, 0x3F, 0x40, 0x42, 0x45,
530 0x48, 0x47, 0x4C, 0x45, 0x4B, 0x49, 0x46, 0x44,
531 0x46, 0x43, 0x45, 0x48, 0x4A, 0x4A, 0x4F, 0x51,
532 0x53, 0x55, 0x59, 0x59, 0x5A, 0x5D, 0x5B, 0x59,
533 0x5F, 0x5C, 0x5D, 0x5C, 0x61, 0x61, 0x5F, 0x5D,
534 0x5D, 0x5B, 0x5F, 0x60, 0x61, 0x62, 0x5E, 0x60,
535 0x60, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x61,
536 0x61, 0x5F, 0x60, 0x5E, 0x61, 0x5C, 0x60, 0x65,
537 0x65, 0x64, 0x65, 0x62, 0x60, 0x5F, 0x5B, 0x58,
538 0x59, 0x55, 0x59, 0x57, 0x5B, 0x5A, 0x5C, 0x5F,
539 0x5E, 0x5C, 0x5C, 0x5D, 0x5D, 0x5A, 0x5C, 0x5D,
540 0x5E, 0x5F, 0x64, 0x5E, 0x60, 0x62, 0x61, 0x65,
541 0x67, 0x62, 0x64, 0x60, 0x60, 0x5D, 0x5F, 0x5E,
542 0x60, 0x61, 0x60, 0x60, 0x61, 0x5E, 0x58, 0x5E,
543 0x5C, 0x5A, 0x5D, 0x5B, 0x5B, 0x60, 0x5E, 0x5F,
544 0x5F, 0x61, 0x5A, 0x59, 0x55, 0x55, 0x57, 0x54,
545 0x4F, 0x4D, 0x4B, 0x4A, 0x4A, 0x55, 0x5F, 0x66,
546 0x6A, 0x74, 0x7B, 0x7D, 0x84, 0x84, 0x86, 0x89,
547 0x88, 0x87, 0x86, 0x84, 0x88, 0x82, 0x88, 0x84,
548 0x88, 0x84, 0x83, 0x83, 0x83, 0x82, 0x81, 0x81,
549 0x84, 0x81, 0x7F, 0x7F, 0x82, 0x88, 0x81, 0x83,
550 0x7D, 0x7F, 0x7D, 0x7D, 0x7A, 0x7A, 0x77, 0x72,
551 0x79, 0x9D, 0xBB, 0xCA, 0xD0, 0xD4, 0xD7, 0xD8,
552 0xD8, 0xCD, 0xAE, 0x6D, 0x49, 0x50, 0x50, 0x57,
553 0x55, 0x58, 0x54, 0x5B, 0x59, 0x5B, 0x5C, 0x5C,
554 0x5E, 0x5D, 0x5C, 0x61, 0x62, 0x66, 0x67, 0x65,
555 0x51, 0x27, 0x10, 0x0D, 0x15, 0x14, 0x15, 0x10,
556 0x16, 0x13, 0x15, 0x17, 0x17, 0x18, 0x19, 0x23
557};
558
559
560
561/*
562 Macro definitions
563*/
564
565#define abs(x) (x>=0 ? x : -(x))
566#define FILTER 0
567#define EXPAND 1
568#define IS ==
569#define ISNT !=
570#define AND &&
571#define OR ||
572
573#define NUM_LEVELS 4
574
575
576/*
577 Forward declaration of functions
578*/
579
580void epic_init( void );
581void epic_build_pyr( float *image, int x_size, int y_size, int num_levels,
582 float *lo_filter, float *hi_filter, int filter_size );
583void epic_build_level( float *image, int level_x_size, int level_y_size,
584 float *lo_filter, float *hi_filter,
585 int filter_size, float *result_block );
586void epic_internal_transpose( float *mat, int rows, int cols );
587void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt,
588 float *temp, int x_fdim, int y_fdim,
589 int xgrid_start, int xgrid_step, int ygrid_start,
590 int ygrid_step, float *result );
591void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos,
592 float *result, int f_or_e );
593void epic_main( void );
594//int main( void );
595
596
597/*
598 Declaration of global variables
599*/
600
601float epic_filtertemp[FILTER_SIZE];
602float epic_hi_imagetemp[X_SIZE * Y_SIZE / 2];
603float epic_lo_imagetemp[X_SIZE * Y_SIZE / 2];
604
605static float epic_lo_filter[FILTER_SIZE] = {
606 -0.0012475221, -0.0024950907, 0.0087309530, 0.0199579580,
607 -0.0505290000, -0.1205509700, 0.2930455800,
608 0.7061761600,
609 0.2930455800, -0.1205509700, -0.0505290000,
610 0.0199579580, 0.0087309530, -0.0024950907, -0.0012475221
611};
612
613static float epic_hi_filter[FILTER_SIZE] = {
614 0.0012475221, -0.0024950907, -0.0087309530, 0.0199579580,
615 0.0505290000, -0.1205509700, -0.2930455800,
616 0.7061761600,
617 -0.2930455800, -0.1205509700, 0.0505290000,
618 0.0199579580, -0.0087309530, -0.0024950907, 0.0012475221
619};
620
621
622/*
623 Initialization function
624*/
625
626void epic_init( void )
627{
628 int i;
629
630 _Pragma( "loopbound min 4096 max 9801" )
631 for ( i = 0; i < X_SIZE * Y_SIZE; ++i )
632 epic_image[i] *= SCALE_FACTOR;
633}
634
635
636/*
637 Algorithm core functions
638*/
639
640/*
641 ======================================================================
642 epic_build_pyr() -- builds a separable QMF-style pyramid. The pyramid
643 is written over the original image. NOTE: the image size must be
644 divisible by 2^num_levels, but we do not check this here.
645 ======================================================================
646*/
647void epic_build_pyr( float *image, int x_size, int y_size, int num_levels,
648 float *lo_filter, float *hi_filter, int filter_size )
649{
650 int x_level, y_level, level;
651
652 x_level = x_size;
653 y_level = y_size;
654
655 _Pragma( "loopbound min 4 max 4" )
656 for ( level = 0; level < num_levels; ++level ){
657 epic_build_level( image, x_level, y_level, lo_filter, hi_filter,
658 filter_size, image );
659 x_level /= 2;
660 y_level /= 2;
661 }
662}
663
664
665/*
666 ======================================================================
667 epic_build_level() -- builds a level of the pyramid by computing 4
668 filtered and subsampled images. Since the convolution is separable,
669 image and result-block can point to the same place! Image order is
670 lowpass, horizontal, vertical (transposed), and diagonal.
671 ======================================================================
672*/
673void epic_build_level( float *image, int level_x_size, int level_y_size,
674 float *lo_filter, float *hi_filter,
675 int filter_size, float *result_block )
676{
677 int total_size = level_x_size * level_y_size;
678
679 /* filter and subsample in the X direction */
680 epic_internal_filter ( image, level_x_size, level_y_size,
681 lo_filter, epic_filtertemp, filter_size, 1,
682 0, 2, 0, 1, epic_lo_imagetemp );
683 epic_internal_filter ( image, level_x_size, level_y_size,
684 hi_filter, epic_filtertemp, filter_size, 1,
685 1, 2, 0, 1, epic_hi_imagetemp );
686
687 level_x_size /= 2;
688 /* now filter and subsample in the Y direction */
689 epic_internal_filter ( epic_lo_imagetemp, level_x_size,
690 level_y_size, /* lowpass */
691 lo_filter, epic_filtertemp, 1, filter_size,
692 0, 1, 0, 2, result_block );
693 epic_internal_filter ( epic_lo_imagetemp, level_x_size,
694 level_y_size, /* horizontal */
695 hi_filter, epic_filtertemp, 1, filter_size,
696 0, 1, 1, 2, ( result_block += ( total_size / 4 ) ) );
697 epic_internal_filter ( epic_hi_imagetemp, level_x_size,
698 level_y_size, /* vertical */
699 lo_filter, epic_filtertemp, 1, filter_size,
700 0, 1, 0, 2, ( result_block += ( total_size / 4 ) ) );
701 /* transpose the vertical band for more efficient scanning */
702 epic_internal_transpose( result_block, level_y_size / 2, level_x_size );
703 epic_internal_filter ( epic_hi_imagetemp, level_x_size,
704 level_y_size, /* diagonal */
705 hi_filter, epic_filtertemp, 1, filter_size,
706 0, 1, 1, 2, ( result_block += ( total_size / 4 ) ) );
707}
708
709
710/*
711 ======================================================================
712 In-place matrix tranpose algorithm. Handles non-square matrices,
713 too! Is there a faster algorithm??
714 ======================================================================
715*/
716void epic_internal_transpose( float *mat, int rows, int cols )
717{
718 register int swap_pos;
719 register int modulus = rows * cols - 1;
720 register int current_pos;
721 register float swap_val;
722
723 /* loop, ignoring first and last elements */
724 _Pragma( "loopbound min 1022 max 2399" )
725 for ( current_pos = 1; current_pos < modulus; ++current_pos ) {
726 /* Compute swap position */
727 swap_pos = current_pos;
728
729 _Pragma( "loopbound min 1 max 2" )
730 do {
731 swap_pos = ( swap_pos * cols ) % modulus;
732 } while ( swap_pos < current_pos );
733
734 if ( current_pos != swap_pos ) {
735 swap_val = mat[swap_pos];
736 mat[swap_pos] = mat[current_pos];
737 mat[current_pos] = swap_val;
738 }
739 }
740}
741
742
743/* --------------------------------------------------------------------
744 Correlate FILT with IMAGE, subsampling according to GRID parameters,
745 with values placed into result array. TEMP is a temporary
746 array the size of the filter. EDGES is a string -- see convolve.h.
747 The convolution is done in 9 sections, where the border sections use
748 specially computed edge-handling filters (see edges.c). The origin
749 of the filter is assumed to be (floor(x_fdim/2), floor(y_fdim/2)).
750 10/6/89 - approximately optimized the choice of register vars on SPARCS.
751 ------------------------------------------------------------------------ */
752void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt,
753 float *temp, int x_fdim, int y_fdim,
754 int xgrid_start, int xgrid_step, int ygrid_start,
755 int ygrid_step, float *result )
756{
757 //register double sum;
758 register float sum;
759 register int x_filt, im_pos, y_filt_lin;
760 register int y_im_lin, x_pos, filt_size = x_fdim * y_fdim;
761 register int y_pos, res_pos;
762 register int last_ctr_col = x_dim - x_fdim;
763 int last_ctr_row = ( y_dim - y_fdim ) * x_dim;
764 int first_row, first_col ;
765 int x_fmid = x_fdim / 2;
766 int y_fmid = y_fdim / 2;
767 int x_stop = x_fdim - x_fmid + 1;
768 int y_stop = y_fdim - y_fmid + 1;
769 int ygrid_step_full = ygrid_step * x_dim;
770 int prev_res_pos, x_res_dim = ( x_dim - xgrid_start + xgrid_step - 1 ) /
771 xgrid_step;
772 int rt_edge_res_pos = x_res_dim;
773
774 res_pos = 0;
775 first_col = xgrid_start - x_fmid + xgrid_step;
776
777 _Pragma( "loopbound min 1 max 4" )
778 for ( y_pos = ygrid_start - y_fmid - 1; y_pos < 0; y_pos += ygrid_step ) {
779 _Pragma( "loopbound min 1 max 4" )
780 for ( x_pos = xgrid_start - x_fmid; /* top-left corner */
781 x_pos < 0;
782 x_pos += xgrid_step ) {
783 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
784 sum = 0.0f;
785 x_filt = y_im_lin = 0;
786 _Pragma( "loopbound min 1 max 15" )
787 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
788 y_filt_lin += x_fdim ) {
789 im_pos = y_im_lin;
790
791 _Pragma( "loopbound min 1 max 15" )
792 for ( ; x_filt < y_filt_lin; ++x_filt ) {
793 sum += image[im_pos] * temp[x_filt];
794 ++im_pos;
795 }
796 y_im_lin += x_dim;
797 }
798 result[res_pos] = sum;
799 ++res_pos;
800 }
801 first_col = x_pos + 1;
802 epic_reflect1( filt, x_fdim, y_fdim, 0, y_pos, temp, FILTER );
803 _Pragma( "loopbound min 41 max 46" )
804 for ( x_pos = first_col; /* top edge */
805 x_pos < last_ctr_col;
806 x_pos += xgrid_step ) {
807 sum = 0.0f;
808 x_filt = y_im_lin = 0;
809 _Pragma( "loopbound min 1 max 15" )
810 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
811 y_filt_lin += x_fdim ) {
812 im_pos = x_pos + y_im_lin;
813 _Pragma( "loopbound min 1 max 15" )
814 for ( ; x_filt < y_filt_lin; ++x_filt ) {
815 sum += image[im_pos] * temp[x_filt];
816 ++im_pos;
817 }
818 y_im_lin += x_dim;
819 }
820 result[res_pos] = sum;
821 ++res_pos;
822 }
823 rt_edge_res_pos = res_pos + x_res_dim; /* save this for later ... */
824 _Pragma( "loopbound min 1 max 4" )
825 for ( x_pos += ( 1 - last_ctr_col ); /* top-right corner */
826 x_pos < x_stop;
827 x_pos += xgrid_step ) {
828 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
829 sum = 0.0f;
830 x_filt = y_im_lin = 0;
831 _Pragma( "loopbound min 1 max 15" )
832 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
833 y_filt_lin += x_fdim ) {
834 im_pos = y_im_lin + last_ctr_col;
835
836 _Pragma( "loopbound min 1 max 15" )
837 for ( ; x_filt < y_filt_lin; ++x_filt ) {
838 sum += image[im_pos] * temp[x_filt];
839 ++im_pos;
840 }
841 y_im_lin += x_dim;
842 }
843 result[res_pos] = sum;
844 ++res_pos;
845 }
846 } /* end top */
847
848 first_row = x_dim * ( y_pos + 1 ); /* need this to go down the sides */
849 prev_res_pos = res_pos;
850 _Pragma( "loopbound min 1 max 4" )
851 for ( x_pos = xgrid_start - x_fmid; /* left edge */
852 x_pos < 1;
853 x_pos += xgrid_step ) {
854 res_pos = prev_res_pos;
855 epic_reflect1( filt, x_fdim, y_fdim, x_pos, 0, temp, FILTER );
856 _Pragma( "loopbound min 41 max 97" )
857 for ( y_pos = first_row; y_pos < last_ctr_row;
858 y_pos += ygrid_step_full ) {
859 sum = 0.0f;
860 x_filt = 0, y_im_lin = y_pos;
861 _Pragma( "loopbound min 1 max 15" )
862 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
863 y_filt_lin += x_fdim ) {
864 im_pos = y_im_lin;
865 _Pragma( "loopbound min 1 max 15" )
866 for ( ; x_filt < y_filt_lin; x_filt++ ) {
867 sum += image[im_pos] * temp[x_filt];
868 ++im_pos;
869 }
870 y_im_lin += x_dim;
871 }
872 result[res_pos] = sum;
873 res_pos += x_res_dim;
874 }
875 prev_res_pos++;
876 }
877 epic_reflect1( filt, x_fdim, y_fdim, 0, 0, temp, FILTER );
878 _Pragma( "loopbound min 41 max 97" )
879 for ( y_pos = first_row; /* center region of image */
880 y_pos < last_ctr_row;
881 y_pos += ygrid_step_full ) {
882 res_pos = prev_res_pos;
883 _Pragma( "loopbound min 41 max 46" )
884 for ( x_pos = first_col;
885 x_pos < last_ctr_col;
886 x_pos += xgrid_step ) {
887 sum = 0.0f;
888 x_filt = 0, y_im_lin = y_pos;
889 _Pragma( "loopbound min 1 max 15" )
890 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
891 y_filt_lin += x_fdim ) {
892 im_pos = x_pos + y_im_lin;
893 _Pragma( "loopbound min 1 max 15" )
894 for ( ; x_filt < y_filt_lin; ++x_filt ) {
895 sum += image[im_pos] * temp[x_filt];
896 ++im_pos;
897 }
898 y_im_lin += x_dim;
899 }
900 result[res_pos] = sum;
901 ++res_pos;
902 }
903 prev_res_pos += x_res_dim;
904 }
905 prev_res_pos = rt_edge_res_pos;
906 _Pragma( "loopbound min 1 max 4" )
907 for ( x_pos += ( 1 - last_ctr_col ); /* right edge */
908 x_pos < x_stop;
909 x_pos += xgrid_step ) {
910 res_pos = prev_res_pos;
911 epic_reflect1( filt, x_fdim, y_fdim, x_pos, 0, temp, FILTER );
912 _Pragma( "loopbound min 41 max 97" )
913 for ( y_pos = first_row; y_pos < last_ctr_row;
914 y_pos += ygrid_step_full ) {
915 sum = 0.0f;
916 x_filt = 0, y_im_lin = y_pos;
917 _Pragma( "loopbound min 1 max 15" )
918 for ( y_filt_lin = x_fdim;
919 y_filt_lin <= filt_size;
920 y_filt_lin += x_fdim ) {
921 _Pragma( "loopbound min 1 max 15" )
922 for ( im_pos = y_im_lin + last_ctr_col;
923 x_filt < y_filt_lin;
924 ++x_filt ) {
925 sum += image[im_pos] * temp[x_filt];
926 ++im_pos;
927 }
928 y_im_lin += x_dim;
929 }
930 result[res_pos] = sum;
931 res_pos += x_res_dim;
932 }
933 prev_res_pos++;
934 } /* end mid */
935
936 res_pos -= ( x_res_dim - 1 ); /* go to lower left corner */
937 _Pragma( "loopbound min 1 max 4" )
938 for ( y_pos = ( ( y_pos - last_ctr_row ) / x_dim ) + 1; /* bottom */
939 y_pos < y_stop;
940 y_pos += ygrid_step ) {
941 _Pragma( "loopbound min 1 max 4" )
942 for ( x_pos = xgrid_start - x_fmid; /* bottom-left corner */
943 x_pos < 1;
944 x_pos += xgrid_step ) {
945 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
946 sum = 0.0f;
947 x_filt = 0, y_im_lin = last_ctr_row;
948 _Pragma( "loopbound min 1 max 15" )
949 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
950 y_filt_lin += x_fdim ) {
951 _Pragma( "loopbound min 1 max 15" )
952 for ( im_pos = y_im_lin;
953 x_filt < y_filt_lin;
954 ++x_filt ) {
955 sum += image[im_pos] * temp[x_filt];
956 ++im_pos;
957 }
958 y_im_lin += x_dim;
959 }
960 result[res_pos] = sum;
961 ++res_pos;
962 }
963 epic_reflect1( filt, x_fdim, y_fdim, 0, y_pos, temp, FILTER );
964 _Pragma( "loopbound min 41 max 46" )
965 for ( x_pos = first_col; /* bottom edge */
966 x_pos < last_ctr_col;
967 x_pos += xgrid_step ) {
968 sum = 0.0f;
969 x_filt = 0, y_im_lin = last_ctr_row;
970 _Pragma( "loopbound min 1 max 15" )
971 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
972 y_filt_lin += x_fdim ) {
973 _Pragma( "loopbound min 1 max 15" )
974 for ( im_pos = x_pos + y_im_lin;
975 x_filt < y_filt_lin;
976 ++x_filt ) {
977 sum += image[im_pos] * temp[x_filt];
978 ++im_pos;
979 }
980 y_im_lin += x_dim;
981 }
982 result[res_pos] = sum;
983 ++res_pos;
984 }
985 _Pragma( "loopbound min 1 max 4" )
986 for ( x_pos += 1 - last_ctr_col; /* bottom-right corner */
987 x_pos < x_stop;
988 x_pos += xgrid_step ) {
989 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
990 sum = 0.0f;
991 x_filt = 0, y_im_lin = last_ctr_row;
992 _Pragma( "loopbound min 1 max 15" )
993 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
994 y_filt_lin += x_fdim ) {
995 _Pragma( "loopbound min 1 max 15" )
996 for ( im_pos = y_im_lin + last_ctr_col;
997 x_filt < y_filt_lin;
998 ++x_filt ) {
999 sum += image[im_pos] * temp[x_filt];
1000 ++im_pos;
1001 }
1002 y_im_lin += x_dim;
1003 }
1004 result[res_pos] = sum;
1005 ++res_pos;
1006 }
1007 } /* end bottom */
1008
1009} /* end of epic_internal_filter */
1010
1011
1012/*
1013 The following function determine how edges are to be handled
1014 when performing convolutions of images with linear filters.
1015 Any edge handling function which is local and linear may be defined,
1016 except (unfortunately) constants cannot be added. So to treat the
1017 edges as if the image is surrounded by a gray field, you must paste it
1018 into a gray image, convolve, and crop it out...
1019 The main convolution function is called epic_internal_filter. The idea
1020 is that the convolution function calls the edge handling function which
1021 computes a new filter based on the old filter and the distance to the
1022 edge of the image. For example, reflection is done by reflecting the
1023 filter through the appropriate axis and summing.
1024*/
1025
1026/*
1027 ---------------- EDGE HANDLER ARGUMENTS ------------------------
1028 filt - floating point array of filter taps.
1029 x_dim, y_dim - x and y dimensions of filt.
1030 x_pos - position of filter relative to the horizontal image edges. Negative
1031 values indicate left edge, positive indicate right edge. Zero
1032 indicates that the filter is not touching either edge. An absolute
1033 value of 1 indicates that the edge tap of the filter is over the
1034 edge pixel of the image.
1035 y_pos - analogous to x_pos.
1036 result - floating point array where the resulting filter will go. The edge
1037 of this filter will be aligned with the image for application...
1038 f_or_e - equal to one of the two constants EXPAND or FILTER.
1039 --------------------------------------------------------------------
1040*/
1041
1042/* --------------------------------------------------------------------
1043 epic_reflect1() - Reflection through the edge pixels. This is the right
1044 thing to do if you are subsampling by 2, since it maintains parity (even
1045 pixels positions remain even, odd ones remain odd). (note: procedure differs
1046 depending on f_or_e parameter). */
1047void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos,
1048 float *result, int f_or_e )
1049{
1050 int filt_sz = x_dim * y_dim;
1051 register int x_start = 0, y_start = 0, x_stop = x_dim, y_stop = filt_sz;
1052 register int y_filt, x_filt, y_edge, x_edge;
1053 register int x_base = ( x_pos > 0 ) ? ( x_dim - 1 ) : 0;
1054 register int y_base = ( y_pos > 0 ) ? ( x_dim * ( y_dim - 1 ) ) : 0;
1055 int x_edge_dist = ( x_pos > 0 ) ? ( x_pos - x_dim ) : ( ( x_pos < -1 ) ?
1056 ( x_pos + 1 ) : 0 );
1057 int y_edge_dist = x_dim * ( ( y_pos > 0 ) ? ( y_pos - y_dim ) : ( (
1058 y_pos < -1 ) ? ( y_pos + 1 ) : 0 ) );
1059 int i;
1060 int mx_pos = ( x_dim / 2 ) + 1;
1061 int my_pos = ( y_dim / 2 ) + 1;
1062
1063 _Pragma( "loopbound min 15 max 15" )
1064 for ( i = 0; i < filt_sz; ++i ) result[i] = 0.0f;
1065
1066 /* if EXPAND and filter is centered on image edge, do not reflect */
1067 if ( f_or_e IS EXPAND ) {
1068 if ( x_pos IS mx_pos ) x_stop = ( x_dim + 1 ) / 2;
1069 else
1070 if ( x_pos IS - mx_pos ) {
1071 x_start = x_dim / 2;
1072 x_edge_dist = 0;
1073 }
1074
1075 if ( y_pos IS my_pos ) y_stop = x_dim * ( ( y_dim + 1 ) / 2 );
1076 else
1077 if ( y_pos IS - my_pos ) {
1078 y_start = x_dim * ( y_dim / 2 );
1079 y_edge_dist = 0;
1080 }
1081 }
1082
1083 y_edge = y_edge_dist;
1084 /* reflect at boundary of image */
1085 _Pragma( "loopbound min 1 max 15" )
1086 for ( y_filt = y_start; y_filt < y_stop; y_filt += x_dim ) {
1087 x_edge = x_edge_dist;
1088 _Pragma( "loopbound min 1 max 15" )
1089 for ( x_filt = y_filt + x_start; x_filt < y_filt + x_stop; ++x_filt ) {
1090 result[abs( y_base - abs( y_edge ) ) + abs( x_base - abs( x_edge ) )]
1091 += filt[x_filt];
1092 ++x_edge;
1093 }
1094 y_edge += x_dim;
1095 }
1096
1097 /* if EXPAND and filter is not centered on image edge, mult edge by 2 */
1098 if ( f_or_e IS EXPAND ) {
1099 if ( ( abs( x_pos ) ISNT mx_pos ) AND ( x_pos ISNT 0 ) )
1100 _Pragma( "loopbound min 0 max 0" )
1101 for ( y_filt = x_base; y_filt < filt_sz; y_filt += x_dim )
1102 result[y_filt] += result[y_filt];
1103 if ( ( abs( y_pos ) ISNT my_pos ) AND ( y_pos ISNT 0 ) )
1104 _Pragma( "loopbound min 0 max 0" )
1105 for ( x_filt = y_base; x_filt < y_base + x_dim; ++x_filt )
1106 result[x_filt] += result[x_filt];
1107 }
1108}
1109
1110
1111/*
1112 Main functions
1113*/
1114
1115void _Pragma( "entrypoint" ) epic_main( void )
1116{
1117 epic_build_pyr( epic_image, X_SIZE, Y_SIZE, NUM_LEVELS, epic_lo_filter,
1118 epic_hi_filter, FILTER_SIZE );
1119}
1120
1121int epic_return(){
1122 int i;
1123 int checksum = 0;
1124 for ( i=0 ; i<X_SIZE*Y_SIZE ; i+=Y_SIZE+1 ){
1125 checksum += epic_image[i];
1126 }
1127 return ( checksum == 43968 ? 0 : 1);
1128}
1129
1130int main( int argc, char **argv )
1131{
1132 SET_UP
1133 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
1134 START_LOOP
1135 epic_init();
1136 epic_main();
1137 STOP_LOOP
1138 }
1139 WRITE_TO_FILE
1140 return epic_return();
1141}
diff --git a/all_pairs/source/epic/epic.h b/all_pairs/source/epic/epic.h
new file mode 100644
index 0000000..5e5675f
--- /dev/null
+++ b/all_pairs/source/epic/epic.h
@@ -0,0 +1,72 @@
1#ifndef __EPIC_H_
2#define __EPIC_H_
3
4#define EPIC_VERSION 1.1
5
6/* ============= FUNDAMENTAL LIMITATIONS ============= */
7
8/* Maximum x- or y-size of image */
9#define MAX_IMAGE_DIM 16384
10
11/* Maximum number of pyramid levels (value 3*levs+1 stored in 5 bits).
12 This doesn't need to be larger than log2(MAX_IMAGE_DIM/FILTER_SIZE). */
13#define MAX_LEVELS 10
14
15/* Maximum number of quantization bins. This essentially determines
16 the maximum depth image to be represented. */
17#define MAX_BINS 511
18
19/* ============= SECONDARY (derived) LIMITATIONS ============= */
20
21/* This number determines the precision of the stored binsizes:
22 stored coefficients are accurate to +/- (1/SCALE_FACTOR).
23 On the other hand, this number also will limit the maximum amount
24 of compression.
25 It should not be more than [2^(8*sizeof(BinValueType))]/256. */
26#define SCALE_FACTOR 128
27
28/* This number must be consistent with the filters that are
29 hardwired into epic.c */
30#define FILTER_SIZE 15
31
32/* Log (base 2) of MAX_IMAGE_DIM^2: (bits required to store the dimensions) */
33#define LOG_MAX_IMAGE_SIZE 32
34
35/* The type of the quantized images. Must be SIGNED, and capable of holding
36 values in the range [-MAX_BINS, MAX_BINS] */
37typedef short BinIndexType;
38
39/* The type used to represent the binsizes. Should be UNSIGNED. If this is
40 changed, be sure to change the places in epic.c and unepic.c where
41 binsizes are written or read from files. */
42typedef unsigned short BinValueType;
43
44/* Number of possible values for a symbol. This must be at least
45 (MAX_BINS * 4) (one sign bit, one tag bit)... */
46#define NUM_SYMBOL_VALUES 65536
47
48/* Function prototypes. */
49void epic_build_pyr( float *image, int x_size, int y_size, int num_levels,
50 float *lo_filter, float *hi_filter, int filter_size );
51
52void epic_build_level( float *image, int level_x_size, int level_y_size,
53 float *lo_filter, float *hi_filter,
54 int filter_size, float *result_block );
55
56void epic_internal_transpose( register float *mat, int rows,
57 register int cols );
58
59void epic_reflect1( register float *filt, register int x_dim, int y_dim,
60 int x_pos, int y_pos, register float *result, int f_or_e );
61
62void epic_internal_filter( register float *image, register int x_dim,
63 register int y_dim, float *filt,
64 register float *temp, register int x_fdim,
65 register int y_fdim, int xgrid_start,
66 int xgrid_step, int ygrid_start, int ygrid_step,
67 register float *result );
68
69void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos,
70 float *result, int f_or_e );
71
72#endif // __EPIC_H_
diff --git a/rtss19/extra.h b/all_pairs/source/extra.h
index b96671c..bdbd1f5 100644
--- a/rtss19/extra.h
+++ b/all_pairs/source/extra.h
@@ -39,14 +39,14 @@
39 exit(1);\ 39 exit(1);\
40 }\ 40 }\
41 char * thisProgram = argv[1];\ 41 char * thisProgram = argv[1];\
42 unsigned int maxJobs = atoi(argv[2]);\ 42 int maxJobs = atoi(argv[2]);\
43 char * thisCore = argv[3];\ 43 char * thisCore = argv[3];\
44 char * otherCore = argv[4];\ 44 char * otherCore = argv[4];\
45 char * otherProgram = argv[5];\ 45 char * otherProgram = argv[5];\
46 char * runID = argv[6];\ 46 char * runID = argv[6];\
47 int lockID = atoi(argv[7]);\ 47 int lockID = atoi(argv[7]);\
48 struct timespec start, end;\ 48 struct timespec start, end;\
49 unsigned int jobsComplete = 0;\ 49 int jobsComplete;\
50 long * startS = malloc(sizeof(long) *maxJobs);\ 50 long * startS = malloc(sizeof(long) *maxJobs);\
51 long * startN = malloc(sizeof(long) *maxJobs);\ 51 long * startN = malloc(sizeof(long) *maxJobs);\
52 long * endS = malloc(sizeof(long) *maxJobs);\ 52 long * endS = malloc(sizeof(long) *maxJobs);\
@@ -84,7 +84,7 @@
84 int error;\ 84 int error;\
85 int val; 85 int val;
86 86
87#define SAVE_RESULTS if (jobsComplete > 0){\ 87#define SAVE_RESULTS if (jobsComplete > -1){\
88 startS[jobsComplete]=start.tv_sec;\ 88 startS[jobsComplete]=start.tv_sec;\
89 startN[jobsComplete]=start.tv_nsec;\ 89 startN[jobsComplete]=start.tv_nsec;\
90 endS[jobsComplete]=end.tv_sec;\ 90 endS[jobsComplete]=end.tv_sec;\
@@ -120,7 +120,10 @@
120 exit(1);\ 120 exit(1);\
121 }\ 121 }\
122 char dummy;\ 122 char dummy;\
123 fread(&dummy, 1, 1, fp);\ 123 if (fread(&dummy, 1, 1, fp) == 0) {\
124 perror("Unable to access cache flush module interface");\
125 exit(1);\
126 }\
124 fclose(fp); 127 fclose(fp);
125 128
126// These timers should just be aliases to the hardware counters w/ some small adjustments 129// These timers should just be aliases to the hardware counters w/ some small adjustments
diff --git a/all_pairs/source/fmref/Changelog.txt b/all_pairs/source/fmref/Changelog.txt
new file mode 100644
index 0000000..e9e7055
--- /dev/null
+++ b/all_pairs/source/fmref/Changelog.txt
@@ -0,0 +1,5 @@
12017-06-27
2- Remove unused variables
3- Introduce fmref_init and fmref_return functions.
4- Add prefix fmref_ to global variables.
5- Introduce dummy initialization in ieee754_rem_pio2f to please linter.
diff --git a/all_pairs/source/fmref/fmref.c b/all_pairs/source/fmref/fmref.c
new file mode 100644
index 0000000..6be1436
--- /dev/null
+++ b/all_pairs/source/fmref/fmref.c
@@ -0,0 +1,283 @@
1/*
2* fmref.c: C reference implementation of FM Radio
3* David Maze <dmaze@cag.lcs.mit.edu>
4* $Id: fmref.c,v 1.2 2010-10-04 21:21:26 garus Exp $
5*/
6
7
8#include "../extra.h"
9#include "wcclibm.h"
10#ifndef M_PI
11#define M_PI 3.1415926535897932384626433832795
12#endif
13
14// Defines
15#define SAMPLING_RATE 250000000
16#define CUTOFF_FREQUENCY 108000000
17#define NUM_TAPS 64
18#define MAX_AMPLITUDE 27000.0
19#define BANDWIDTH 10000
20#define DECIMATION 4
21/* Must be at least NUM_TAPS+1: */
22#define IN_BUFFER_LEN 200
23#define EQUALIZER_BANDS 10
24
25
26// Type declarations
27typedef struct FloatBuffer
28{
29 float buff[IN_BUFFER_LEN];
30 int rpos, rlen;
31}
32FloatBuffer;
33/* Low pass filter: */
34typedef struct LPFData
35{
36 float coeff[NUM_TAPS];
37 float freq;
38 int taps, decimation;
39}
40LPFData;
41typedef struct EqualizerData
42{
43 LPFData lpf[EQUALIZER_BANDS + 1];
44 FloatBuffer fb[EQUALIZER_BANDS + 1];
45 float gain[EQUALIZER_BANDS];
46}
47EqualizerData;
48
49// Global vars
50float fmref_lpf_coeff[NUM_TAPS];
51float fmref_eq_cutoffs[EQUALIZER_BANDS + 1] =
52 { 55.000004f, 77.78174f, 110.00001f, 155.56354f, 220.00002f, 311.12695f,
53 440.00003f, 622.25415f, 880.00006f, 1244.5078f, 1760.0001f };
54static int fmref_numiters = 2;
55
56// Forward declarations
57void fmref_fb_compact(FloatBuffer *fb);
58int fmref_fb_ensure_writable(FloatBuffer *fb, int amount);
59void fmref_get_floats(FloatBuffer *fb);
60void fmref_init_lpf_data(LPFData *data, float freq, int taps, int decimation);
61void fmref_run_lpf(FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data);
62void fmref_run_demod(FloatBuffer *fbin, FloatBuffer *fbout);
63void fmref_init_equalizer(EqualizerData *data);
64void fmref_run_equalizer(FloatBuffer *fbin, FloatBuffer *fbout, EqualizerData *data);
65void fmref_main(void);
66
67void fmref_init(void)
68{
69 // dummy init function
70}
71
72int fmref_return(void)
73{
74 // dummy return value
75 return 0;
76}
77
78int main(int argc, char **argv){
79
80 SET_UP
81 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
82 START_LOOP
83 fmref_init();
84 fmref_main();
85 STOP_LOOP
86 }
87 WRITE_TO_FILE
88 return fmref_return();
89}
90
91FloatBuffer fmref_fb1, fmref_fb2, fmref_fb3, fmref_fb4;
92LPFData fmref_lpf_data;
93
94void fmref_main(void)
95{
96 int i;
97 EqualizerData eq_data;
98
99 fmref_fb1.rpos = fmref_fb1.rlen = 0;
100 fmref_fb2.rpos = fmref_fb2.rlen = 0;
101 fmref_fb3.rpos = fmref_fb3.rlen = 0;
102 fmref_fb4.rpos = fmref_fb4.rlen = 0;
103
104 fmref_init_lpf_data(&fmref_lpf_data, CUTOFF_FREQUENCY, NUM_TAPS, DECIMATION);
105 fmref_init_equalizer(&eq_data);
106
107 /* Startup: */
108 fmref_get_floats(&fmref_fb1);
109 /* LPF needs at least NUM_TAPS+1 inputs; fmref_get_floats is fine. */
110 fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data);
111 /* run_demod needs 1 input, OK here. */
112 /* run_equalizer needs 51 inputs (same reason as for LPF). This means
113 * running the pipeline up to demod 50 times in advance: */
114 _Pragma( "loopbound min 64 max 64" )
115 for (i = 0; i < 64; i++) {
116 if (fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1)
117 fmref_get_floats(&fmref_fb1);
118 fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data);
119 fmref_run_demod(&fmref_fb2, &fmref_fb3);
120 }
121
122 /* Main loop: */
123 _Pragma( "loopbound min 2 max 2" )
124 while (fmref_numiters-- > 0) {
125 /* The low-pass filter will need NUM_TAPS+1 items; read them if we
126 * need to. */
127 if (fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1)
128 fmref_get_floats(&fmref_fb1);
129 fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data);
130 fmref_run_demod(&fmref_fb2, &fmref_fb3);
131 fmref_run_equalizer(&fmref_fb3, &fmref_fb4, &eq_data);
132
133 }
134}
135
136void fmref_fb_compact(FloatBuffer *fb)
137{
138
139 int i;
140 char *source;
141 char *target;
142 target = (char*)(fb->buff);
143 source = (char*)(fb->buff + fb->rpos);
144 _Pragma( "loopbound min 0 max 60" )
145 for (i = 0; i < fb->rlen - fb->rpos; i++) {
146 target[i] = source[i];
147 }
148 fb->rlen -= fb->rpos;
149 fb->rpos = 0;
150}
151
152int fmref_fb_ensure_writable(FloatBuffer *fb, int amount)
153{
154 int available = IN_BUFFER_LEN - fb->rlen;
155 if (available >= amount)
156 return 1;
157
158 /* Nope, not enough room, move current contents back to the beginning. */
159 fmref_fb_compact(fb);
160
161 available = IN_BUFFER_LEN - fb->rlen;
162 if (available >= amount)
163 return 1;
164
165 return 0;
166}
167
168void fmref_get_floats(FloatBuffer *fb)
169{
170 static int x = 0;
171 fmref_fb_compact(fb);
172
173 /* Fill the remaining space in fb with 1.0. */
174 _Pragma( "loopbound min 200 max 200" )
175 while (fb->rlen < IN_BUFFER_LEN) {
176 fb->buff[fb->rlen++] = (float)x;
177 x++;
178 }
179}
180
181void fmref_init_lpf_data(LPFData *data, float freq, int taps, int decimation)
182{
183 /* Assume that CUTOFF_FREQUENCY is non-zero. See comments in
184 * StreamIt LowPassFilter.java for origin. */
185 float w = 2 * M_PI * freq / SAMPLING_RATE;
186 int i;
187 float m = taps - 1.0f;
188
189 data->freq = freq;
190 data->taps = taps;
191 data->decimation = decimation;
192
193 _Pragma( "loopbound min 64 max 64" )
194 for (i = 0; i < taps; i++) {
195 if (i - m / 2 == 0.0f)
196 data->coeff[i] = w / M_PI;
197 else
198 data->coeff[i] = sin(w * (i - m / 2)) / M_PI / (i - m / 2) *
199 (0.54f - 0.46f * cos(2 * M_PI * i / m));
200 }
201}
202
203void fmref_run_lpf(FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data)
204{
205 float sum = 0.0f;
206 int i = 0;
207
208 _Pragma( "loopbound min 64 max 64" )
209 for (i = 0; i < data->taps; i++) {
210 sum += fbin->buff[fbin->rpos + i] * data->coeff[i];
211 }
212
213 fbin->rpos += data->decimation + 1;
214
215 /* Check that there's room in the output buffer; move data if necessary. */
216 fmref_fb_ensure_writable(fbout, 1);
217 fbout->buff[fbout->rlen++] = sum;
218}
219
220void fmref_run_demod(FloatBuffer *fbin, FloatBuffer *fbout)
221{
222 float temp, gain;
223 gain = MAX_AMPLITUDE * SAMPLING_RATE / (BANDWIDTH * M_PI);
224 temp = fbin->buff[fbin->rpos] * fbin->buff[fbin->rpos + 1];
225 temp = gain * atan(temp);
226 fbin->rpos++;
227 fmref_fb_ensure_writable(fbout, 1);
228 fbout->buff[fbout->rlen++] = temp;
229}
230
231void fmref_init_equalizer(EqualizerData *data)
232{
233 int i;
234
235 /* Equalizer structure: there are ten band-pass filters, with
236 * cutoffs as shown below. The outputs of these filters get added
237 * together. Each band-pass filter is LPF(high)-LPF(low). */
238 _Pragma( "loopbound min 11 max 11" )
239 for (i = 0; i < EQUALIZER_BANDS + 1; i++)
240 fmref_init_lpf_data(&data->lpf[i], fmref_eq_cutoffs[i], 64, 0);
241
242 /* Also initialize member buffers. */
243 _Pragma( "loopbound min 11 max 11" )
244 for (i = 0; i < EQUALIZER_BANDS + 1; i++)
245 data->fb[i].rpos = data->fb[i].rlen = 0;
246
247 _Pragma( "loopbound min 10 max 10" )
248 for (i = 0; i < EQUALIZER_BANDS; i++) {
249 // the gain amplifies the middle bands the most
250 float val = (((float)i) - (((float)(EQUALIZER_BANDS - 1)) / 2.0f)) / 5.0f;
251 data->gain[i] = val > 0 ? 2.0f - val : 2.0f + val;
252 }
253}
254
255void fmref_run_equalizer(FloatBuffer *fbin, FloatBuffer *fbout, EqualizerData *data)
256{
257 int i, rpos;
258 float lpf_out[EQUALIZER_BANDS + 1];
259 float sum = 0.0;
260
261 /* Save the input read location; we can reuse the same input data on all
262 * of the LPFs. */
263 rpos = fbin->rpos;
264
265 /* Run the child filters. */
266 _Pragma( "loopbound min 11 max 11" )
267 for (i = 0; i < EQUALIZER_BANDS + 1; i++) {
268 fbin->rpos = rpos;
269 fmref_run_lpf(fbin, &data->fb[i], &data->lpf[i]);
270 lpf_out[i] = data->fb[i].buff[data->fb[i].rpos++];
271 }
272
273 /* Now process the results of the filters. Remember that each band is
274 * output(hi)-output(lo). */
275 _Pragma( "loopbound min 10 max 10" )
276 for (i = 0; i < EQUALIZER_BANDS; i++)
277 sum += (lpf_out[i + 1] - lpf_out[i]) * data->gain[i];
278
279 /* Write that result. */
280 fmref_fb_ensure_writable(fbout, 1);
281 fbout->buff[fbout->rlen++] = sum;
282}
283
diff --git a/all_pairs/source/fmref/license.txt b/all_pairs/source/fmref/license.txt
new file mode 100644
index 0000000..7029925
--- /dev/null
+++ b/all_pairs/source/fmref/license.txt
@@ -0,0 +1,21 @@
1The MIT License
2
3Copyright (c) <year> <copyright holders>
4
5Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
7in the Software without restriction, including without limitation the rights
8to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9copies of the Software, and to permit persons to whom the Software is
10furnished to do so, subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in
13all copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21THE SOFTWARE.
diff --git a/all_pairs/source/fmref/math_private.h b/all_pairs/source/fmref/math_private.h
new file mode 100644
index 0000000..58d4354
--- /dev/null
+++ b/all_pairs/source/fmref/math_private.h
@@ -0,0 +1,178 @@
1/*
2 * ====================================================
3 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
4 *
5 * Developed at SunPro, a Sun Microsystems, Inc. business.
6 * Permission to use, copy, modify, and distribute this
7 * software is freely granted, provided that this notice
8 * is preserved.
9 * ====================================================
10 */
11
12/*
13 * from: @(#)fdlibm.h 5.1 93/09/24
14 */
15
16#ifndef _MATH_PRIVATE_H_
17#define _MATH_PRIVATE_H_
18
19#include "wcclibm.h"
20
21//#include <endian.h>
22//#include <sys/types.h>
23
24/* A representation of a double as a union. */
25union ieee754_double
26{
27 double d;
28
29 /* This is the IEEE 754 double-precision format. */
30 struct {
31 /* Together these comprise the mantissa. */
32 unsigned int mantissa1:32;
33 unsigned int mantissa0:20;
34 unsigned int exponent:11;
35 unsigned int negative:1;
36 } ieee;
37
38 /* This format makes it easier to see if a NaN is a signalling NaN. */
39 struct {
40 /* Together these comprise the mantissa. */
41 unsigned int mantissa1:32;
42 unsigned int mantissa0:19;
43 unsigned int quiet_nan:1;
44 unsigned int exponent:11;
45 unsigned int negative:1;
46 } ieee_nan;
47};
48
49/* The original fdlibm code used statements like:
50 n0 = ((*(int*)&one)>>29)^1; * index of high word *
51 ix0 = *(n0+(int*)&x); * high word of x *
52 ix1 = *((1-n0)+(int*)&x); * low word of x *
53 to dig two 32 bit words out of the 64 bit IEEE floating point
54 value. That is non-ANSI, and, moreover, the gcc instruction
55 scheduler gets it wrong. We instead use the following macros.
56 Unlike the original code, we determine the endianness at compile
57 time, not at run time; I don't see much benefit to selecting
58 endianness at run time. */
59
60/* A union which permits us to convert between a double and two 32 bit
61 ints. */
62
63/* #if __FLOAT_WORD_ORDER == BIG_ENDIAN */
64/* #warning USING Big Endian float word order */
65/* typedef union */
66/* { */
67/* double value; */
68/* struct */
69/* { */
70/* u_int16_t msw; */
71/* u_int16_t lsw; */
72/* } parts; */
73/* } ieeeDoubleShapeType; */
74
75/* #endif */
76
77/* #if __FLOAT_WORD_ORDER == LITTLE_ENDIAN */
78/* #warning USING Little Endian float word order */
79
80typedef union
81{
82 double value;
83 struct
84 {
85 u_int16_t lsw;
86 u_int16_t msw;
87 } parts;
88} ieeeDoubleShapeType;
89
90/* #endif */
91
92/* Get two 32 bit ints from a double. */
93
94#define EXTRACT_WORDS(ix0,ix1,d) \
95{ \
96 ieeeDoubleShapeType ew_u; \
97 ew_u.value = (d); \
98 (ix0) = ew_u.parts.msw; \
99 (ix1) = ew_u.parts.lsw; \
100}
101
102/* Get the more significant 32 bit int from a double. */
103
104#define GET_HIGH_WORD(i,d) \
105{ \
106 ieeeDoubleShapeType gh_u; \
107 gh_u.value = (d); \
108 (i) = gh_u.parts.msw; \
109}
110
111/* Get the less significant 32 bit int from a double. */
112
113#define GET_LOW_WORD(i,d) \
114{ \
115 ieeeDoubleShapeType gl_u; \
116 gl_u.value = (d); \
117 (i) = gl_u.parts.lsw; \
118}
119
120/* Set a double from two 32 bit ints. */
121
122#define INSERT_WORDS(d,ix0,ix1) \
123{ \
124 ieeeDoubleShapeType iw_u; \
125 iw_u.parts.msw = (ix0); \
126 iw_u.parts.lsw = (ix1); \
127 (d) = iw_u.value; \
128}
129
130/* Set the more significant 32 bits of a double from an int. */
131
132#define SET_HIGH_WORD(d,v) \
133{ \
134 ieeeDoubleShapeType sh_u; \
135 sh_u.value = (d); \
136 sh_u.parts.msw = (v); \
137 (d) = sh_u.value; \
138}
139
140/* Set the less significant 32 bits of a double from an int. */
141
142#define SET_LOW_WORD(d,v) \
143{ \
144 ieeeDoubleShapeType sl_u; \
145 sl_u.value = (d); \
146 sl_u.parts.lsw = (v); \
147 (d) = sl_u.value; \
148}
149
150/* A union which permits us to convert between a float and a 32 bit
151 int. */
152
153typedef union
154{
155 float value;
156 u_int32_t word;
157} ieee_float_shape_type;
158
159/* Get a 32 bit int from a float. */
160
161#define GET_FLOAT_WORD(i,d) \
162{ \
163 ieee_float_shape_type gf_u; \
164 gf_u.value = (d); \
165 (i) = gf_u.word; \
166}
167
168/* Set a float from a 32 bit int. */
169
170#define SET_FLOAT_WORD(d,i) \
171{ \
172 ieee_float_shape_type sf_u; \
173 sf_u.word = (i); \
174 (d) = sf_u.value; \
175}
176
177
178#endif /* _MATH_PRIVATE_H_ */
diff --git a/all_pairs/source/fmref/wcclibm.c b/all_pairs/source/fmref/wcclibm.c
new file mode 100644
index 0000000..39b8cbe
--- /dev/null
+++ b/all_pairs/source/fmref/wcclibm.c
@@ -0,0 +1,522 @@
1#include "math_private.h"
2#include "wcclibm.h"
3
4
5
6/* e_rem_pio2f.c -- float version of e_rem_pio2.c
7 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
8 */
9
10/*
11 * ====================================================
12 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
13 *
14 * Developed at SunPro, a Sun Microsystems, Inc. business.
15 * Permission to use, copy, modify, and distribute this
16 * software is freely granted, provided that this notice
17 * is preserved.
18 * ====================================================
19 */
20
21#if defined(LIBM_SCCS) && !defined(lint)
22static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $";
23#endif
24
25/* __ieee754_rem_pio2f(x,y)
26 *
27 * return the remainder of x rem pi/2 in y[0]+y[1]
28 * use __kernel_rem_pio2f()
29 */
30
31/* This array is like the one in e_rem_pio2.c, but the numbers are
32 single precision and the last 8 bits are forced to 0. */
33#ifdef __STDC__
34static const int32_t fmref_npio2_hw[] = {
35#else
36static int32_t fmref_npio2_hw[] = {
37#endif
380x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00,
390x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00,
400x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100,
410x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00,
420x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00,
430x4242c700, 0x42490f00
44};
45
46/*
47 * invpio2: 24 bits of 2/pi
48 * pio2_1: first 17 bit of pi/2
49 * pio2_1t: pi/2 - pio2_1
50 * pio2_2: second 17 bit of pi/2
51 * pio2_2t: pi/2 - (pio2_1+pio2_2)
52 * pio2_3: third 17 bit of pi/2
53 * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
54 */
55
56#ifdef __STDC__
57static const float
58#else
59static float
60#endif
61/* zero = 0.0000000000e+00f, /\* 0x00000000 *\/ */
62/* half = 5.0000000000e-01f, /\* 0x3f000000 *\/ */
63/* two8 = 2.5600000000e+02f, /\* 0x43800000 *\/ */
64fmref_invpio2 = 6.3661980629e-01f, /* 0x3f22f984 */
65fmref_pio2_1 = 1.5707855225e+00f, /* 0x3fc90f80 */
66fmref_pio2_1t = 1.0804334124e-05f, /* 0x37354443 */
67fmref_pio2_2 = 1.0804273188e-05f, /* 0x37354400 */
68fmref_pio2_2t = 6.0770999344e-11f, /* 0x2e85a308 */
69fmref_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */
70fmref_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */
71
72#ifdef __STDC__
73 int32_t fmref___ieee754_rem_pio2f(float x, float *y)
74#else
75 int32_t fmref___ieee754_rem_pio2f(x,y)
76 float x,y[];
77#endif
78{
79 float z,w,t,r,fn;
80 int32_t i,j,n,ix,hx;
81
82 GET_FLOAT_WORD(hx,x);
83 ix = hx&0x7fffffff;
84 if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */
85 {y[0] = x; y[1] = 0; return 0;}
86 if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */
87 if(hx>0) {
88 z = x - fmref_pio2_1;
89 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
90 y[0] = z - fmref_pio2_1t;
91 y[1] = (z-y[0])-fmref_pio2_1t;
92 } else { /* near pi/2, use 24+24+24 bit pi */
93 z -= fmref_pio2_2;
94 y[0] = z - fmref_pio2_2t;
95 y[1] = (z-y[0])-fmref_pio2_2t;
96 }
97 return 1;
98 } else { /* negative x */
99 z = x + fmref_pio2_1;
100 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
101 y[0] = z + fmref_pio2_1t;
102 y[1] = (z-y[0])+fmref_pio2_1t;
103 } else { /* near pi/2, use 24+24+24 bit pi */
104 z += fmref_pio2_2;
105 y[0] = z + fmref_pio2_2t;
106 y[1] = (z-y[0])+fmref_pio2_2t;
107 }
108 return -1;
109 }
110 }
111 if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */
112 t = fabsf(x);
113 n = (int32_t) (t*fmref_invpio2+fmref_half);
114 fn = (float)n;
115 r = t-fn*fmref_pio2_1;
116 w = fn*fmref_pio2_1t; /* 1st round good to 40 bit */
117 if(n<32&&(int32_t)(ix&0xffffff00)!=fmref_npio2_hw[n-1]) {
118 y[0] = r-w; /* quick check no cancellation */
119 } else {
120 u_int32_t high;
121 j = ix>>23;
122 y[0] = r-w;
123 GET_FLOAT_WORD(high,y[0]);
124 i = j-((high>>23)&0xff);
125 if(i>8) { /* 2nd iteration needed, good to 57 */
126 t = r;
127 w = fn*fmref_pio2_2;
128 r = t-w;
129 w = fn*fmref_pio2_2t-((t-r)-w);
130 y[0] = r-w;
131 GET_FLOAT_WORD(high,y[0]);
132 i = j-((high>>23)&0xff);
133 if(i>25) { /* 3rd iteration need, 74 bits acc */
134 t = r; /* will cover all possible cases */
135 w = fn*fmref_pio2_3;
136 r = t-w;
137 w = fn*fmref_pio2_3t-((t-r)-w);
138 y[0] = r-w;
139 }
140 }
141 }
142 y[1] = (r-y[0])-w;
143 if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
144 else return n;
145 }
146 /*
147 * all other (large) arguments
148 */
149 if(ix>=0x7f800000) { /* x is inf or NaN */
150 y[0]=y[1]=x-x; return 0;
151 }
152
153 y[0]=y[1]=x-x; /* dummy initialization */
154 return 0; /* doesn't happen for our input */
155}
156
157/* k_cosf.c -- float version of k_cos.c
158 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
159 */
160
161/*
162 * ====================================================
163 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
164 *
165 * Developed at SunPro, a Sun Microsystems, Inc. business.
166 * Permission to use, copy, modify, and distribute this
167 * software is freely granted, provided that this notice
168 * is preserved.
169 * ====================================================
170 */
171
172#if defined(LIBM_SCCS) && !defined(lint)
173static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $";
174#endif
175
176
177#ifdef __STDC__
178static const float
179#else
180static float
181#endif
182/* one = 1.0000000000e+00, /\* 0x3f800000 *\/ */
183fmref_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */
184fmref_C2 = -1.3888889225e-03f, /* 0xbab60b61 */
185fmref_C3 = 2.4801587642e-05f, /* 0x37d00d01 */
186fmref_C4 = -2.7557314297e-07f, /* 0xb493f27c */
187fmref_C5 = 2.0875723372e-09f, /* 0x310f74f6 */
188fmref_C6 = -1.1359647598e-11f; /* 0xad47d74e */
189
190#ifdef __STDC__
191 float fmref___kernel_cosf(float x, float y)
192#else
193 float fmref___kernel_cosf(x, y)
194 float x,y;
195#endif
196{
197 float a,hz,z,r,qx;
198 int32_t ix;
199 GET_FLOAT_WORD(ix,x);
200 ix &= 0x7fffffff; /* ix = |x|'s high word*/
201 if(ix<0x32000000) { /* if x < 2**27 */
202 if(((int)x)==0) return fmref_one; /* generate inexact */
203 }
204 z = x*x;
205 r = z*(fmref_C1+z*(fmref_C2+z*(fmref_C3+z*(fmref_C4+z*(fmref_C5+z*fmref_C6)))));
206 if(ix < 0x3e99999a) /* if |x| < 0.3 */
207 return fmref_one - ((float)0.5f*z - (z*r - x*y));
208 else {
209 if(ix > 0x3f480000) { /* x > 0.78125 */
210 qx = (float)0.28125f;
211 } else {
212 SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */
213 }
214 hz = (float)0.5f*z-qx;
215 a = fmref_one-qx;
216 return a - (hz - (z*r-x*y));
217 }
218}
219
220/* k_sinf.c -- float version of k_sin.c
221 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
222 */
223
224/*
225 * ====================================================
226 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
227 *
228 * Developed at SunPro, a Sun Microsystems, Inc. business.
229 * Permission to use, copy, modify, and distribute this
230 * software is freely granted, provided that this notice
231 * is preserved.
232 * ====================================================
233 */
234
235#if defined(LIBM_SCCS) && !defined(lint)
236static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $";
237#endif
238
239
240#ifdef __STDC__
241static const float
242#else
243static float
244#endif
245/* half = 5.0000000000e-01f,/\* 0x3f000000 *\/ */
246fmref_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */
247fmref_S2 = 8.3333337680e-03f, /* 0x3c088889 */
248fmref_S3 = -1.9841270114e-04f, /* 0xb9500d01 */
249fmref_S4 = 2.7557314297e-06f, /* 0x3638ef1b */
250fmref_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */
251fmref_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */
252
253#ifdef __STDC__
254 float fmref___kernel_sinf(float x, float y, int iy)
255#else
256 float fmref___kernel_sinf(x, y, iy)
257 float x,y; int iy; /* iy=0 if y is zero */
258#endif
259{
260 float z,r,v;
261 int32_t ix;
262 GET_FLOAT_WORD(ix,x);
263 ix &= 0x7fffffff; /* high word of x */
264 if(ix<0x32000000) /* |x| < 2**-27 */
265 {if((int)x==0) return x;} /* generate inexact */
266 z = x*x;
267 v = z*x;
268 r = fmref_S2+z*(fmref_S3+z*(fmref_S4+z*(fmref_S5+z*fmref_S6)));
269 if(iy==0) return x+v*(fmref_S1+z*r);
270 else return x-((z*(fmref_half*y-v*r)-y)-v*fmref_S1);
271}
272/* s_atanf.c -- float version of s_atan.c.
273 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
274 */
275
276/*
277 * ====================================================
278 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
279 *
280 * Developed at SunPro, a Sun Microsystems, Inc. business.
281 * Permission to use, copy, modify, and distribute this
282 * software is freely granted, provided that this notice
283 * is preserved.
284 * ====================================================
285 */
286
287#if defined(LIBM_SCCS) && !defined(lint)
288static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $";
289#endif
290
291
292#ifdef __STDC__
293static const float fmref_atanhi[] = {
294#else
295static float fmref_atanhi[] = {
296#endif
297 4.6364760399e-01f, /* atan(0.5)hi 0x3eed6338 */
298 7.8539812565e-01f, /* atan(1.0)hi 0x3f490fda */
299 9.8279368877e-01f, /* atan(1.5)hi 0x3f7b985e */
300 1.5707962513e+00f, /* atan(inf)hi 0x3fc90fda */
301};
302
303#ifdef __STDC__
304static const float fmref_atanlo[] = {
305#else
306static float fmref_atanlo[] = {
307#endif
308 5.0121582440e-09f, /* atan(0.5)lo 0x31ac3769 */
309 3.7748947079e-08f, /* atan(1.0)lo 0x33222168 */
310 3.4473217170e-08f, /* atan(1.5)lo 0x33140fb4 */
311 7.5497894159e-08f, /* atan(inf)lo 0x33a22168 */
312};
313
314#ifdef __STDC__
315static const float fmref_aT[] = {
316#else
317static float fmref_aT[] = {
318#endif
319 3.3333334327e-01f, /* 0x3eaaaaaa */
320 -2.0000000298e-01f, /* 0xbe4ccccd */
321 1.4285714924e-01f, /* 0x3e124925 */
322 -1.1111110449e-01f, /* 0xbde38e38 */
323 9.0908870101e-02f, /* 0x3dba2e6e */
324 -7.6918758452e-02f, /* 0xbd9d8795 */
325 6.6610731184e-02f, /* 0x3d886b35 */
326 -5.8335702866e-02f, /* 0xbd6ef16b */
327 4.9768779427e-02f, /* 0x3d4bda59 */
328 -3.6531571299e-02f, /* 0xbd15a221 */
329 1.6285819933e-02f, /* 0x3c8569d7 */
330};
331
332/* #ifdef __STDC__ */
333/* static const float */
334/* #else */
335/* static float */
336/* #endif */
337/* one = 1.0, */
338/* huge = 1.0e30; */
339
340#ifdef __STDC__
341 float fmref___atanf(float x)
342#else
343 float fmref___atanf(x)
344 float x;
345#endif
346{
347 float w,s1,s2,z;
348 int32_t ix,hx,id;
349
350 GET_FLOAT_WORD(hx,x);
351 ix = hx&0x7fffffff;
352 if(ix>=0x50800000) { /* if |x| >= 2^34 */
353 if(ix>0x7f800000)
354 return x+x; /* NaN */
355 if(hx>0) return fmref_atanhi[3]+fmref_atanlo[3];
356 else return -fmref_atanhi[3]-fmref_atanlo[3];
357 } if (ix < 0x3ee00000) { /* |x| < 0.4375 */
358 if (ix < 0x31000000) { /* |x| < 2^-29 */
359 if(fmref_huge+x>fmref_one) return x; /* raise inexact */
360 }
361 id = -1;
362 } else {
363 x = fabsf(x);
364 if (ix < 0x3f980000) { /* |x| < 1.1875 */
365 if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */
366 id = 0; x = ((float)2.0f*x-fmref_one)/((float)2.0f+x);
367 } else { /* 11/16<=|x|< 19/16 */
368 id = 1; x = (x-fmref_one)/(x+fmref_one);
369 }
370 } else {
371 if (ix < 0x401c0000) { /* |x| < 2.4375 */
372 id = 2; x = (x-(float)1.5f)/(fmref_one+(float)1.5f*x);
373 } else { /* 2.4375 <= |x| < 2^66 */
374 id = 3; x = -(float)1.0f/x;
375 }
376 }}
377 /* end of argument reduction */
378 z = x*x;
379 w = z*z;
380 /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
381 s1 = z*(fmref_aT[0]+w*(fmref_aT[2]+w*(fmref_aT[4]+w*(fmref_aT[6]+w*(fmref_aT[8]+w*fmref_aT[10])))));
382 s2 = w*(fmref_aT[1]+w*(fmref_aT[3]+w*(fmref_aT[5]+w*(fmref_aT[7]+w*fmref_aT[9]))));
383 if (id<0) return x - x*(s1+s2);
384 else {
385 z = fmref_atanhi[id] - ((x*(s1+s2) - fmref_atanlo[id]) - x);
386 return (hx<0)? -z:z;
387 }
388}
389//weak_alias (__atanf, atanf)
390
391/* s_cosf.c -- float version of s_cos.c.
392 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
393 */
394
395/*
396 * ====================================================
397 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
398 *
399 * Developed at SunPro, a Sun Microsystems, Inc. business.
400 * Permission to use, copy, modify, and distribute this
401 * software is freely granted, provided that this notice
402 * is preserved.
403 * ====================================================
404 */
405
406/* #ifdef __STDC__ */
407/* static const float one=1.0; */
408/* #else */
409/* static float one=1.0; */
410/* #endif */
411
412#ifdef __STDC__
413 float fmref___cosf(float x)
414#else
415 float fmref___cosf(x)
416 float x;
417#endif
418{
419 float y[2],z=0.0f;
420 int32_t n,ix;
421
422 GET_FLOAT_WORD(ix,x);
423
424 /* |x| ~< pi/4 */
425 ix &= 0x7fffffff;
426 if(ix <= 0x3f490fd8) return fmref___kernel_cosf(x,z);
427
428 /* cos(Inf or NaN) is NaN */
429 else if (ix>=0x7f800000) return x-x;
430
431 /* argument reduction needed */
432 else {
433 n = fmref___ieee754_rem_pio2f(x,y);
434 switch(n&3) {
435 case 0: return fmref___kernel_cosf(y[0],y[1]);
436 case 1: return -fmref___kernel_sinf(y[0],y[1],1);
437 case 2: return -fmref___kernel_cosf(y[0],y[1]);
438 default:
439 return fmref___kernel_sinf(y[0],y[1],1);
440 }
441 }
442}
443
444/* s_sinf.c -- float version of s_sin.c.
445 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
446 */
447
448/*
449 * ====================================================
450 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
451 *
452 * Developed at SunPro, a Sun Microsystems, Inc. business.
453 * Permission to use, copy, modify, and distribute this
454 * software is freely granted, provided that this notice
455 * is preserved.
456 * ====================================================
457 */
458
459 #ifdef __STDC__
460 float fmref___sinf(float x)
461#else
462 float fmref___sinf(x)
463 float x;
464#endif
465{
466 float y[2],z=0.0;
467 int32_t n, ix;
468
469 GET_FLOAT_WORD(ix,x);
470
471 /* |x| ~< pi/4 */
472 ix &= 0x7fffffff;
473 if(ix <= 0x3f490fd8) return fmref___kernel_sinf(x,z,0);
474
475 /* sin(Inf or NaN) is NaN */
476 else if (ix>=0x7f800000) return x-x;
477
478 /* argument reduction needed */
479 else {
480 n = fmref___ieee754_rem_pio2f(x,y);
481 switch(n&3) {
482 case 0: return fmref___kernel_sinf(y[0],y[1],1);
483 case 1: return fmref___kernel_cosf(y[0],y[1]);
484 case 2: return -fmref___kernel_sinf(y[0],y[1],1);
485 default:
486 return -fmref___kernel_cosf(y[0],y[1]);
487 }
488 }
489}
490
491/* s_fabsf.c -- float version of s_fabs.c.
492 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
493 */
494
495/*
496 * ====================================================
497 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
498 *
499 * Developed at SunPro, a Sun Microsystems, Inc. business.
500 * Permission to use, copy, modify, and distribute this
501 * software is freely granted, provided that this notice
502 * is preserved.
503 * ====================================================
504 */
505
506/*
507 * fabsf(x) returns the absolute value of x.
508 */
509
510
511#ifdef __STDC__
512 float fmref___fabsf(float x)
513#else
514 float fmref___fabsf(x)
515 float x;
516#endif
517{
518 u_int32_t ix;
519 GET_FLOAT_WORD(ix,x);
520 SET_FLOAT_WORD(x,ix&0x7fffffff);
521 return x;
522}
diff --git a/all_pairs/source/fmref/wcclibm.h b/all_pairs/source/fmref/wcclibm.h
new file mode 100644
index 0000000..c00738b
--- /dev/null
+++ b/all_pairs/source/fmref/wcclibm.h
@@ -0,0 +1,54 @@
1#ifndef _WCCLIBM
2#define _WCCLIBM
3
4#define size_x unsigned long
5#define int32_t int
6#define uint32_t unsigned int
7#define u_int16_t unsigned short
8#define u_int32_t unsigned int
9
10// Often used variables/consts
11#ifdef __STDC__
12static const float
13#else
14static float
15#endif
16fmref_one = 1.0f,
17fmref_half = 5.0000000000e-01f, /* 0x3f000000 */
18fmref_zero = 0.0f,
19fmref_huge = 1.0e30,
20fmref_two8 = 2.5600000000e+02f, /* 0x43800000 */
21fmref_twon8 = 3.9062500000e-03f; /* 0x3b800000 */
22
23// The following defines map the math functions to specialized calls
24#define acos fmref___ieee754_acosf
25#define atan fmref___atanf
26#define cos fmref___cosf
27#define fabs fmref___fabsf
28#define fabsf fmref___fabsf
29#define isinf fmref___isinff
30#define pow fmref___ieee754_powf
31#define sqrt fmref___ieee754_sqrtf
32#define log10 fmref___ieee754_log10f
33#define log fmref___ieee754_logf
34#define sin fmref___sinf
35
36float fmref___atanf(float x);
37float fmref___copysignf(float x, float y);
38float fmref___cosf(float x);
39float fmref___fabsf(float x);
40float fmref___floorf(float x);
41float fmref___ieee754_acosf(float x);
42float fmref___ieee754_powf(float x, float y);
43int32_t fmref___ieee754_rem_pio2f(float x, float *y);
44float fmref___ieee754_sqrtf(float x);
45int fmref___isinff (float x);
46float fmref___kernel_cosf(float x, float y);
47float fmref___kernel_sinf(float x, float y, int iy);
48int fmref___kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2);
49float fmref___scalbnf (float x, int n);
50float fmref___ieee754_logf(float x);
51float fmref___ieee754_log10f(float x);
52float fmref___sinf(float x);
53
54#endif // _WCCLIBM
diff --git a/all_pairs/source/g723_enc/ChangeLog.txt b/all_pairs/source/g723_enc/ChangeLog.txt
new file mode 100644
index 0000000..8657026
--- /dev/null
+++ b/all_pairs/source/g723_enc/ChangeLog.txt
@@ -0,0 +1,34 @@
1File: g723_enc.c
2Original provenience: SUN Microsystems
3
42016-03-02:
5 - Renamed file to g723_enc and removed all g721 dead code
6 - Added TACLeBench header to line 1
7 - Moved SUN license to license.txt
8 - Deleted unused code that was commented out
9 - Renamed functions prepended g723_enc to all function names
10 - Renamed function main to g723_enc_main
11 - Created new function main, calling g723_enc_init, g723_enc_main and
12 returning g723_enc_return
13 - Reordered functions in source code: initialization- and
14 return-value-related functions first, followed by algorithm core
15 functions, followed by main functions
16 - Applied code formatting with astyle as in the example
17
18 2016-03-09:
19 - Renamed global variables, prepended g723_enc_
20 - Removed static keyword from global variables
21 - Renamed datatype from g723_enc_g72x_state to g723_enc_state
22 - Renamed function g723_enc_g72x_init_state to g723_enc_init_state
23
24 2016-05-23:
25 - Added initialization with volatile int
26 - Added check_sum and comparison with expected result
27
282016-05-25
29 - Changed name of struct g723_enc_state to g723_enc_state_t
30 - Changed name of variable state to g723_enc_state
31
322017-07-10
33 - Fixed undefined behaviour introduced by accessing the result of a pointer
34 type cast.
diff --git a/all_pairs/source/g723_enc/g723_enc.c b/all_pairs/source/g723_enc/g723_enc.c
new file mode 100644
index 0000000..6f31210
--- /dev/null
+++ b/all_pairs/source/g723_enc/g723_enc.c
@@ -0,0 +1,887 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: g723_enc
7
8 Author: Unknown
9
10 Function: g723 encoder.
11
12 Source: SUN Microsystems
13
14 Changes: The benchmark was changed to use the g723 encoder
15
16 License: "Unrestricted use" (see license.txt)
17
18*/
19
20/*
21 Declaration of data types
22*/
23
24/*
25 The following is the definition of the state structure
26 used by the G.721/G.723 encoder and decoder to preserve their internal
27 state between successive calls. The meanings of the majority
28 of the state structure fields are explained in detail in the
29 CCITT Recommendation G.721. The field names are essentially indentical
30 to variable names in the bit level description of the coding algorithm
31 included in this Recommendation.
32*/
33
34#include "../extra.h"
35struct g723_enc_state_t {
36 long yl; /* Locked or steady state step size multiplier. */
37 short yu; /* Unlocked or non-steady state step size multiplier. */
38 short dms; /* Short term energy estimate. */
39 short dml; /* Long term energy estimate. */
40 short ap; /* Linear weighting coefficient of 'yl' and 'yu'. */
41
42 short a[2]; /* Coefficients of pole portion of prediction filter. */
43 short b[6]; /* Coefficients of zero portion of prediction filter. */
44 short pk[2]; /*
45 Signs of previous two samples of a partially
46 reconstructed signal.
47*/
48 short dq[6]; /*
49 Previous 6 samples of the quantized difference
50 signal represented in an internal floating point
51 format.
52*/
53 short sr[2]; /*
54 Previous 2 samples of the quantized difference
55 signal represented in an internal floating point
56 format.
57*/
58 char td; /* delayed tone detect, new in 1988 version */
59};
60
61
62/*
63 Forward declaration of functions
64*/
65
66int g723_enc_abs( int num );
67void g723_enc_init_state( struct g723_enc_state_t *state_ptr );
68int g723_enc_predictor_zero( struct g723_enc_state_t *state_ptr );
69int g723_enc_fmult( int an, int srn );
70int g723_enc_predictor_pole( struct g723_enc_state_t *state_ptr );
71int g723_enc_step_size( struct g723_enc_state_t *state_ptr );
72int g723_enc_quantize(
73 int d, /* Raw difference signal sample */
74 int y, /* Step size multiplier */
75 short *table, /* quantization table */
76 int size ); /* table size of short integers */
77int g723_enc_reconstruct(
78 int sign, /* 0 for non-negative value */
79 int dqln, /* G.72x codeword */
80 int y ); /* Step size multiplier */
81void g723_enc_update(
82 int code_size, /* distinguish 723_40 with others */
83 int y, /* quantizer step size */
84 int wi, /* scale factor multiplier */
85 int fi, /* for long/short term energies */
86 int dq, /* quantized prediction difference */
87 int sr, /* reconstructed signal */
88 int dqsez, /* difference from 2-pole predictor */
89 struct g723_enc_state_t *state_ptr ); /* coder state pointer */
90int g723_enc_quan(
91 int val,
92 short *table,
93 int size );
94int g723_enc_search(
95 int val,
96 short *table,
97 int size );
98int g723_enc_alaw2linear( unsigned char a_val );
99int g723_enc_ulaw2linear( unsigned char u_val );
100int g723_enc_g723_24_encoder(
101 int sample,
102 int in_coding,
103 struct g723_enc_state_t *state_ptr );
104int g723_enc_pack_output(
105 unsigned char code,
106 int bits );
107
108void g723_enc_init();
109int g723_enc_return();
110void g723_enc_main();
111//int main( void );
112
113/*
114 Declaration of global variables
115*/
116
117struct g723_enc_state_t g723_enc_state;
118
119unsigned int g723_enc_INPUT[256] = {
120 51, 17, 31, 53, 95, 17, 70, 22, 49, 12, 8, 39, 28, 37, 99, 54,
121 77, 65, 77, 78, 83, 15, 63, 31, 35, 92, 52, 40, 61, 79, 94, 87,
122 87, 68, 76, 58, 39, 35, 20, 83, 42, 46, 98, 12, 21, 96, 74, 41,
123 78, 76, 96, 2, 32, 76, 24, 59, 4, 96, 32, 5, 44, 92, 57, 12,
124 57, 25, 50, 23, 48, 41, 88, 43, 36, 38, 4, 16, 52, 70, 9, 40,
125 78, 24, 34, 23, 30, 30, 89, 3, 65, 40, 68, 73, 94, 23, 84, 97,
126 78, 43, 68, 81, 16, 28, 13, 87, 75, 21, 14, 29, 81, 22, 56, 72,
127 19, 99, 25, 43, 76, 86, 90, 98, 39, 43, 12, 46, 24, 99, 65, 61,
128 24, 45, 79, 7, 48, 15, 24, 95, 62, 99, 48, 80, 75, 38, 48, 53,
129 9, 60, 35, 14, 78, 71, 45, 71, 9, 97, 55, 74, 58, 64, 78, 18,
130 30, 28, 69, 29, 57, 42, 30, 44, 57, 49, 61, 42, 13, 25, 3, 98,
131 11, 38, 65, 35, 55, 36, 57, 48, 16, 62, 17, 56, 29, 88, 84, 85,
132 90, 60, 54, 16, 66, 69, 26, 10, 82, 19, 42, 35, 84, 13, 26, 17,
133 48, 38, 50, 50, 35, 53, 12, 52, 61, 74, 56, 34, 80, 59, 26, 67,
134 55, 79, 89, 89, 6, 80, 91, 65, 16, 30, 16, 28, 85, 54, 3, 20,
135 2, 36, 62, 52, 55, 15, 83, 3, 2, 38, 62, 2, 63, 92, 37, 73
136};
137
138
139
140unsigned int g723_enc_OUTPUT[256];
141
142short g723_enc_power2[15] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80,
143 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000
144 };
145
146
147/*
148 Maps G.723_24 code word to reconstructed scale factor normalized log
149 magnitude values.
150*/
151
152short g723_enc_qtab_723_24[3] = {8, 218, 331};
153
154/*
155 Maps G.721 code word to reconstructed scale factor normalized log
156 magnitude values.
157*/
158short g723_enc_dqlntab[16] = { -2048, 4, 135, 213, 273, 323, 373, 425,
159 425, 373, 323, 273, 213, 135, 4, -2048
160 };
161
162/* Maps G.721 code word to log of scale factor multiplier. */
163short g723_enc_witab[16] = { -12, 18, 41, 64, 112, 198, 355, 1122,
164 1122, 355, 198, 112, 64, 41, 18, -12
165 };
166/*
167 Maps G.721 code words to a set of values whose long and short
168 term averages are computed and then compared to give an indication
169 how stationary (steady state) the signal is.
170*/
171short g723_enc_fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00,
172 0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0
173 };
174
175
176/*
177 Declaration of macros
178*/
179
180
181#define AUDIO_ENCODING_ULAW (1) /* ISDN u-law */
182#define AUDIO_ENCODING_ALAW (2) /* ISDN A-law */
183#define AUDIO_ENCODING_LINEAR (3) /* PCM 2's-complement (0-center) */
184
185#define BIAS (0x84) /* Bias for linear code. */
186
187#define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */
188#define QUANT_MASK (0xf) /* Quantization field mask. */
189#define SEG_SHIFT (4) /* Left shift for segment number. */
190#define SEG_MASK (0x70) /* Segment field mask. */
191
192/*
193 Arithmetic math functions
194*/
195
196/*
197 g723_enc_fmult()
198
199 returns the integer product of the 14-bit integer "an" and
200 "floating point" representation (4-bit exponent, 6-bit mantessa) "srn".
201*/
202int g723_enc_fmult(
203 int an,
204 int srn )
205{
206 short anmag, anexp, anmant;
207 short wanexp, wanmant;
208 short retval;
209
210 anmag = ( an > 0 ) ? an : ( ( -an ) & 0x1FFF );
211 anexp = g723_enc_quan( anmag, g723_enc_power2, 3 ) - 6;
212 anmant = ( anmag == 0 ) ? 32 :
213 ( anexp >= 0 ) ? anmag >> anexp : anmag << -anexp;
214 wanexp = anexp + ( ( srn >> 6 ) & 0xF ) - 13;
215
216 wanmant = ( anmant * ( srn & 077 ) + 0x30 ) >> 4;
217 retval = ( wanexp >= 0 ) ? ( ( wanmant << wanexp ) & 0x7FFF ) :
218 ( wanmant >> -wanexp );
219
220 return ( ( ( an ^ srn ) < 0 ) ? -retval : retval );
221}
222
223
224/* Manish Verma */
225int g723_enc_abs( int num )
226{
227 return ( num < 0 ) ? -num : num;
228}
229
230
231/*
232 Algorithm core functions
233*/
234
235
236/*
237 g723_enc_quan()
238
239 quantizes the input val against the table of size short integers.
240 It returns i if table[i - 1] <= val < table[i].
241
242 Using linear search for simple coding.
243*/
244int g723_enc_quan(
245 int val,
246 short *table,
247 int size )
248{
249 int i,
250 j = 0,
251 k = 1;
252
253 _Pragma( "loopbound min 3 max 15" )
254 for ( i = 0; i < size; ++i ) {
255
256 if ( k ) {
257 if ( val < *table++ ) {
258 j = i;
259 k = 0;
260 }
261 }
262 }
263
264 return ( j );
265}
266
267
268/*
269 g723_enc_predictor_zero()
270
271 computes the estimated signal from 6-zero predictor.
272
273*/
274int
275g723_enc_predictor_zero(
276 struct g723_enc_state_t *state_ptr )
277{
278 int i;
279 int sezi;
280
281 sezi = g723_enc_fmult( state_ptr->b[0] >> 2, state_ptr->dq[0] );
282 _Pragma( "loopbound min 5 max 5" )
283 for ( i = 1; i < 6; i++ ) /* ACCUM */
284 sezi += g723_enc_fmult( state_ptr->b[i] >> 2, state_ptr->dq[i] );
285
286 return ( sezi );
287}
288
289
290/*
291 g723_enc_predictor_pole()
292
293 computes the estimated signal from 2-pole predictor.
294
295*/
296int
297g723_enc_predictor_pole(
298 struct g723_enc_state_t *state_ptr )
299{
300 return ( g723_enc_fmult( state_ptr->a[1] >> 2, state_ptr->sr[1] ) +
301 g723_enc_fmult( state_ptr->a[0] >> 2, state_ptr->sr[0] ) );
302}
303
304/*
305 g723_enc_step_size()
306
307 computes the quantization step size of the adaptive quantizer.
308
309*/
310int
311g723_enc_step_size(
312 struct g723_enc_state_t *state_ptr )
313{
314 int y;
315 int dif;
316 int al;
317
318 if ( state_ptr->ap >= 256 )
319 return ( state_ptr->yu );
320 else {
321 y = state_ptr->yl >> 6;
322 dif = state_ptr->yu - y;
323 al = state_ptr->ap >> 2;
324 if ( dif > 0 )
325 y += ( dif * al ) >> 6;
326 else
327 if ( dif < 0 )
328 y += ( dif * al + 0x3F ) >> 6;
329
330 return ( y );
331 }
332}
333
334/*
335 g723_enc_quantize()
336
337 Given a raw sample, 'd', of the difference signal and a
338 quantization step size scale factor, 'y', this routine returns the
339 ADPCM codeword to which that sample gets quantized. The step
340 size scale factor division operation is done in the log base 2 domain
341 as a subtraction.
342*/
343int
344g723_enc_quantize(
345 int d, /* Raw difference signal sample */
346 int y, /* Step size multiplier */
347 short *table, /* quantization table */
348 int size ) /* table size of short integers */
349{
350 short dqm; /* Magnitude of 'd' */
351 short exp; /* Integer part of base 2 log of 'd' */
352 short mant; /* Fractional part of base 2 log */
353 short dl; /* Log of magnitude of 'd' */
354 short dln; /* Step size scale factor normalized log */
355 int i;
356
357 /*
358 LOG
359
360 Compute base 2 log of 'd', and store in 'dl'.
361 */
362 dqm = g723_enc_abs( d );
363 exp = g723_enc_quan( dqm >> 1, g723_enc_power2, 15 );
364 mant = ( ( dqm << 7 ) >> exp ) & 0x7F; /* Fractional portion. */
365 dl = ( exp << 7 ) + mant;
366
367 /*
368 SUBTB
369
370 "Divide" by step size multiplier.
371 */
372 dln = dl - ( y >> 2 );
373
374 /*
375 QUAN
376
377 Obtain codword i for 'd'.
378 */
379 i = g723_enc_quan( dln, table, size );
380
381 if ( d < 0 ) /* take 1's complement of i */
382 return ( ( size << 1 ) + 1 - i );
383 else
384 if ( i == 0 ) /* take 1's complement of 0 */
385 return ( ( size << 1 ) + 1 ); /* new in 1988 */
386 else
387 return ( i );
388}
389/*
390 g723_enc_reconstruct()
391
392 Returns reconstructed difference signal 'dq' obtained from
393 codeword 'i' and quantization step size scale factor 'y'.
394 Multiplication is performed in log base 2 domain as addition.
395*/
396int
397g723_enc_reconstruct(
398 int sign, /* 0 for non-negative value */
399 int dqln, /* G.72x codeword */
400 int y ) /* Step size multiplier */
401{
402 short dql; /* Log of 'dq' magnitude */
403 short dex; /* Integer part of log */
404 short dqt;
405 short dq; /* Reconstructed difference signal sample */
406
407 dql = dqln + ( y >> 2 ); /* ADDA */
408
409 if ( dql < 0 )
410 return ( ( sign ) ? -0x8000 : 0 );
411 else { /* ANTILOG */
412 dex = ( dql >> 7 ) & 15;
413 dqt = 128 + ( dql & 127 );
414 dq = ( dqt << 7 ) >> ( 14 - dex );
415 return ( ( sign ) ? ( dq - 0x8000 ) : dq );
416 }
417}
418
419
420/*
421 g723_enc_update()
422
423 updates the state variables for each output code
424*/
425void
426g723_enc_update(
427 int code_size, /* distinguish 723_40 with others */
428 int y, /* quantizer step size */
429 int wi, /* scale factor multiplier */
430 int fi, /* for long/short term energies */
431 int dq, /* quantized prediction difference */
432 int sr, /* reconstructed signal */
433 int dqsez, /* difference from 2-pole predictor */
434 struct g723_enc_state_t *state_ptr ) /* coder state pointer */
435{
436 int cnt;
437 short mag, exp; /* Adaptive predictor, FLOAT A */
438 short a2p; /* LIMC */
439 short a1ul; /* UPA1 */
440 short pks1; /* UPA2 */
441 short fa1;
442 char tr; /* tone/transition detector */
443 short ylint, thr2, dqthr;
444 short ylfrac, thr1;
445 short pk0;
446
447 pk0 = ( dqsez < 0 ) ? 1 : 0; /* needed in updating predictor poles */
448
449 mag = dq & 0x7FFF; /* prediction difference magnitude */
450 /* TRANS */
451 ylint = state_ptr->yl >> 15; /* exponent part of yl */
452 ylfrac = ( state_ptr->yl >> 10 ) & 0x1F; /* fractional part of yl */
453 thr1 = ( 32 + ylfrac ) << ylint; /* threshold */
454 thr2 = ( ylint > 9 ) ? 31 << 10 : thr1; /* limit thr2 to 31 << 10 */
455 dqthr = ( thr2 + ( thr2 >> 1 ) ) >> 1; /* dqthr = 0.75 * thr2 */
456 if ( state_ptr->td == 0 ) /* signal supposed voice */
457 tr = 0;
458 else
459 if ( mag <= dqthr ) /* supposed data, but small mag */
460 tr = 0; /* treated as voice */
461 else /* signal is data (modem) */
462 tr = 1;
463
464 /*
465 Quantizer scale factor adaptation.
466 */
467
468 /* FUNCTW & FILTD & DELAY */
469 /* update non-steady state step size multiplier */
470 state_ptr->yu = y + ( ( wi - y ) >> 5 );
471
472 /* LIMB */
473 if ( state_ptr->yu < 544 ) /* 544 <= yu <= 5120 */
474 state_ptr->yu = 544;
475 else
476 if ( state_ptr->yu > 5120 )
477 state_ptr->yu = 5120;
478
479 /* FILTE & DELAY */
480 /* update steady state step size multiplier */
481 state_ptr->yl += state_ptr->yu + ( ( -state_ptr->yl ) >> 6 );
482
483 /*
484 Adaptive predictor coefficients.
485 */
486 if ( tr == 1 ) { /* reset a's and b's for modem signal */
487 state_ptr->a[0] = 0;
488 state_ptr->a[1] = 0;
489 state_ptr->b[0] = 0;
490 state_ptr->b[1] = 0;
491 state_ptr->b[2] = 0;
492 state_ptr->b[3] = 0;
493 state_ptr->b[4] = 0;
494 state_ptr->b[5] = 0;
495 } else { /* update a's and b's */
496 pks1 = pk0 ^ state_ptr->pk[0]; /* UPA2 */
497
498 /* update predictor pole a[1] */
499 a2p = state_ptr->a[1] - ( state_ptr->a[1] >> 7 );
500 if ( dqsez != 0 ) {
501 fa1 = ( pks1 ) ? state_ptr->a[0] : -state_ptr->a[0];
502 if ( fa1 < -8191 ) /* a2p = function of fa1 */
503 a2p -= 0x100;
504 else
505 if ( fa1 > 8191 )
506 a2p += 0xFF;
507 else
508 a2p += fa1 >> 5;
509 if ( pk0 ^ state_ptr->pk[1] )
510 /* LIMC */
511 if ( a2p <= -12160 )
512 a2p = -12288;
513 else
514 if ( a2p >= 12416 )
515 a2p = 12288;
516 else
517 a2p -= 0x80;
518 else
519 if ( a2p <= -12416 )
520 a2p = -12288;
521 else
522 if ( a2p >= 12160 )
523 a2p = 12288;
524 else
525 a2p += 0x80;
526
527 }
528
529 /* TRIGB & DELAY */
530 state_ptr->a[1] = a2p;
531
532 /* UPA1 */
533 /* update predictor pole a[0] */
534 state_ptr->a[0] -= state_ptr->a[0] >> 8;
535 if ( dqsez != 0 ) {
536 if ( pks1 == 0 )
537 state_ptr->a[0] += 192;
538 else
539 state_ptr->a[0] -= 192;
540 }
541
542 /* LIMD */
543 a1ul = 15360 - a2p;
544 if ( state_ptr->a[0] < -a1ul )
545 state_ptr->a[0] = -a1ul;
546 else
547 if ( state_ptr->a[0] > a1ul )
548 state_ptr->a[0] = a1ul;
549
550 /* UPB : update predictor zeros b[6] */
551 _Pragma( "loopbound min 6 max 6" )
552 for ( cnt = 0; cnt < 6; cnt++ ) {
553 if ( code_size == 5 ) /* for 40Kbps G.723 */
554 state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9;
555 else /* for G.721 and 24Kbps G.723 */
556 state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8;
557 if ( dq & 0x7FFF ) { /* XOR */
558 if ( ( dq ^ state_ptr->dq[cnt] ) >= 0 )
559 state_ptr->b[cnt] += 128;
560 else
561 state_ptr->b[cnt] -= 128;
562 }
563
564 }
565 }
566
567 _Pragma( "loopbound min 5 max 5" )
568 for ( cnt = 5; cnt > 0; cnt-- )
569 state_ptr->dq[cnt] = state_ptr->dq[cnt - 1];
570 /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
571 if ( mag == 0 )
572 state_ptr->dq[0] = ( dq >= 0 ) ? 0x20 : 0xFC20;
573 else {
574 exp = g723_enc_quan( mag, g723_enc_power2, 15 );
575 state_ptr->dq[0] = ( dq >= 0 ) ?
576 ( exp << 6 ) + ( ( mag << 6 ) >> exp ) :
577 ( exp << 6 ) + ( ( mag << 6 ) >> exp ) - 0x400;
578
579 }
580
581 state_ptr->sr[1] = state_ptr->sr[0];
582 /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
583 if ( sr == 0 )
584 state_ptr->sr[0] = 0x20;
585 else
586 if ( sr > 0 ) {
587 exp = g723_enc_quan( sr, g723_enc_power2, 15 );
588 state_ptr->sr[0] = ( exp << 6 ) + ( ( sr << 6 ) >> exp );
589 } else
590 if ( sr > -32768 ) {
591 mag = -sr;
592 exp = g723_enc_quan( mag, g723_enc_power2, 15 );
593 state_ptr->sr[0] = ( exp << 6 ) + ( ( mag << 6 ) >> exp ) - 0x400;
594 } else
595 state_ptr->sr[0] = 0xFC20;
596
597 /* DELAY A */
598 state_ptr->pk[1] = state_ptr->pk[0];
599 state_ptr->pk[0] = pk0;
600
601 /* TONE */
602 if ( tr == 1 ) /* this sample has been treated as data */
603 state_ptr->td = 0; /* next one will be treated as voice */
604 else
605 if ( a2p < -11776 ) /* small sample-to-sample correlation */
606 state_ptr->td = 1; /* signal may be data */
607 else /* signal is voice */
608 state_ptr->td = 0;
609
610 /*
611 Adaptation speed control.
612 */
613 state_ptr->dms += ( fi - state_ptr->dms ) >> 5; /* FILTA */
614 state_ptr->dml += ( ( ( fi << 2 ) - state_ptr->dml ) >> 7 ); /* FILTB */
615
616 if ( tr == 1 )
617 state_ptr->ap = 256;
618 else
619 if ( y < 1536 ) /* SUBTC */
620 state_ptr->ap += ( 0x200 - state_ptr->ap ) >> 4;
621 else
622 if ( state_ptr->td == 1 )
623 state_ptr->ap += ( 0x200 - state_ptr->ap ) >> 4;
624 else
625 if ( g723_enc_abs( ( state_ptr->dms << 2 ) - state_ptr->dml ) >=
626 ( state_ptr->dml >> 3 ) )
627 state_ptr->ap += ( 0x200 - state_ptr->ap ) >> 4;
628 else
629 state_ptr->ap += ( -state_ptr->ap ) >> 4;
630
631}
632
633
634/*
635 g723_enc_alaw2linear() - Convert an A-law value to 16-bit linear PCM
636
637*/
638int
639g723_enc_alaw2linear(
640 unsigned char a_val )
641{
642 int t;
643 int seg;
644
645 a_val ^= 0x55;
646
647 t = ( a_val & QUANT_MASK ) << 4;
648 seg = ( ( unsigned )a_val & SEG_MASK ) >> SEG_SHIFT;
649 switch ( seg ) {
650 case 0:
651 t += 8;
652 break;
653 case 1:
654 t += 0x108;
655 break;
656 default:
657 t += 0x108;
658 t <<= seg - 1;
659 }
660 return ( ( a_val & SIGN_BIT ) ? t : -t );
661}
662
663
664/*
665 g723_enc_ulaw2linear() - Convert a u-law value to 16-bit linear PCM
666
667 First, a biased linear code is derived from the code word. An unbiased
668 output can then be obtained by subtracting 33 from the biased code.
669
670 Note that this function expects to be passed the complement of the
671 original code word. This is in keeping with ISDN conventions.
672*/
673int
674g723_enc_ulaw2linear(
675 unsigned char u_val )
676{
677 int t;
678
679 /* Complement to obtain normal u-law value. */
680 u_val = ~u_val;
681
682 /*
683 Extract and bias the quantization bits. Then
684 shift up by the segment number and subtract out the bias.
685 */
686 t = ( ( u_val & QUANT_MASK ) << 3 ) + BIAS;
687 t <<= ( ( unsigned int )u_val & SEG_MASK ) >> SEG_SHIFT;
688
689 return ( ( u_val & SIGN_BIT ) ? ( BIAS - t ) : ( t - BIAS ) );
690}
691
692
693/*
694 g723_enc_g723_24_encoder()
695
696 Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code.
697 Returns -1 if invalid input coding value.
698*/
699int
700g723_enc_g723_24_encoder(
701 int sl,
702 int in_coding,
703 struct g723_enc_state_t *state_ptr )
704{
705 short sei, sezi, se, sez; /* ACCUM */
706 short d; /* SUBTA */
707 short y; /* MIX */
708 short sr; /* ADDB */
709 short dqsez; /* ADDC */
710 short dq, i;
711
712 switch ( in_coding ) { /* linearize input sample to 14-bit PCM */
713 case AUDIO_ENCODING_ALAW:
714 sl = g723_enc_alaw2linear( sl ) >> 2;
715 break;
716 case AUDIO_ENCODING_ULAW:
717 sl = g723_enc_ulaw2linear( sl ) >> 2;
718 break;
719 case AUDIO_ENCODING_LINEAR:
720 sl >>= 2; /* sl of 14-bit dynamic range */
721 break;
722 default:
723 return ( -1 );
724 }
725
726 sezi = g723_enc_predictor_zero( state_ptr );
727 sez = sezi >> 1;
728 sei = sezi + g723_enc_predictor_pole( state_ptr );
729 se = sei >> 1; /* se = estimated signal */
730
731 d = sl - se; /* d = estimation diff. */
732
733 /* quantize prediction difference d */
734 y = g723_enc_step_size( state_ptr ); /* quantizer step size */
735 i = g723_enc_quantize( d, y, g723_enc_qtab_723_24, 3 ); /* i = ADPCM code */
736 dq = g723_enc_reconstruct( i & 4, g723_enc_dqlntab[i], y ); /* quantized diff. */
737
738 sr = ( dq < 0 ) ? se - ( dq & 0x3FFF ) : se + dq; /* reconstructed signal */
739
740 dqsez = sr + sez - se; /* pole prediction diff. */
741
742 g723_enc_update( 3, y, g723_enc_witab[i], g723_enc_fitab[i], dq, sr, dqsez, state_ptr );
743
744 return ( i );
745}
746
747/*
748 Pack output codes into bytes and write them to stdout.
749 Returns 1 if there is residual output, else returns 0.
750*/
751int
752g723_enc_pack_output(
753 unsigned char code,
754 int bits )
755{
756 static unsigned int out_buffer = 0;
757 static int out_bits = 0;
758 unsigned char out_byte;
759 static int i = 0;
760
761 out_buffer |= ( code << out_bits );
762 out_bits += bits;
763 if ( out_bits >= 8 ) {
764 out_byte = out_buffer & 0xff;
765 out_bits -= 8;
766 out_buffer >>= 8;
767 //fwrite(&out_byte, sizeof (char), 1, fp_out);
768 //fwrite(&out_byte, 1, 1, fp_out);
769 g723_enc_OUTPUT[i] = out_byte;
770 i = i + 1;
771 }
772
773 return ( out_bits > 0 );
774}
775
776/*
777 Initialization- and return-value-related functions
778*/
779
780/*
781 g723_enc_init_state()
782
783 This routine initializes and/or resets the g72x_state structure
784 pointed to by 'state_ptr'.
785 All the initial state values are specified in the CCITT G.721 document.
786*/
787void
788g723_enc_init_state(
789 struct g723_enc_state_t *state_ptr )
790{
791 int cnta;
792
793 state_ptr->yl = 34816;
794 state_ptr->yu = 544;
795 state_ptr->dms = 0;
796 state_ptr->dml = 0;
797 state_ptr->ap = 0;
798
799 _Pragma( "loopbound min 2 max 2" )
800 for ( cnta = 0; cnta < 2; cnta++ ) {
801 state_ptr->a[cnta] = 0;
802 state_ptr->pk[cnta] = 0;
803 state_ptr->sr[cnta] = 32;
804 }
805 _Pragma( "loopbound min 6 max 6" )
806 for ( cnta = 0; cnta < 6; cnta++ ) {
807 state_ptr->b[cnta] = 0;
808 state_ptr->dq[cnta] = 32;
809 }
810 state_ptr->td = 0;
811}
812
813
814void g723_enc_init()
815{
816 int i;
817 volatile int x = 0;
818 g723_enc_init_state( &g723_enc_state );
819
820 _Pragma( "loopbound min 256 max 256" )
821 for ( i = 0; i < 256; i++ ) {
822 g723_enc_INPUT[i] += x;
823 }
824}
825
826
827int g723_enc_return()
828{
829 int i;
830 int check_sum = 0;
831
832 _Pragma( "loopbound min 256 max 256" )
833 for ( i = 0; i < 256; i++ ) {
834 check_sum += g723_enc_OUTPUT[i];
835 }
836
837 return ( check_sum != 24284 );
838}
839
840/*
841 Main functions
842*/
843
844void _Pragma( "entrypoint" ) g723_enc_main()
845{
846// struct g72x_state state;
847 short sample_short; //mv
848 unsigned char code;
849 int resid;
850 int in_coding;
851 short *in_buf;
852 int enc_bits;
853 int i = 0;
854
855 enc_bits = 3;
856 in_coding = AUDIO_ENCODING_ALAW;
857 in_buf = &sample_short;
858
859 _Pragma( "loopbound min 256 max 256" )
860 for ( i = 0; i < 256; i++ ) {
861 *in_buf = g723_enc_INPUT[i];
862 code = g723_enc_g723_24_encoder( sample_short, in_coding, &g723_enc_state );
863 resid = g723_enc_pack_output( code, enc_bits );
864 }
865
866 /* Write zero codes until all residual codes are written out */
867 _Pragma( "loopbound min 0 max 0" )
868 while ( resid )
869 resid = g723_enc_pack_output( 0, enc_bits );
870}
871
872
873int main( int argc, char **argv )
874{
875 //SET_UP
876 int jobsComplete;
877 int maxJobs=9;
878 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
879 // START_LOOP
880 g723_enc_init();
881 g723_enc_main();
882 // STOP_LOOP
883 }
884 //WRITE_TO_FILE
885 return ( g723_enc_return() );
886}
887
diff --git a/all_pairs/source/g723_enc/license.txt b/all_pairs/source/g723_enc/license.txt
new file mode 100644
index 0000000..80cf21f
--- /dev/null
+++ b/all_pairs/source/g723_enc/license.txt
@@ -0,0 +1,23 @@
1This source code is a product of Sun Microsystems, Inc. and is provided
2for unrestricted use. Users may copy or modify this source code without
3charge.
4
5SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
6THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
7PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
8
9Sun source code is provided with no support and without any obligation on
10the part of Sun Microsystems, Inc. to assist in its use, correction,
11modification or enhancement.
12
13SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
14INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
15OR ANY PART THEREOF.
16
17In no event will Sun Microsystems, Inc. be liable for any lost revenue
18or profits or other special, indirect and consequential damages, even if
19Sun has been advised of the possibility of such damages.
20
21Sun Microsystems, Inc.
222550 Garcia Avenue
23Mountain View, California 94043 \ No newline at end of file
diff --git a/all_pairs/source/gsm_dec/COPYRIGHT b/all_pairs/source/gsm_dec/COPYRIGHT
new file mode 100644
index 0000000..eba0e52
--- /dev/null
+++ b/all_pairs/source/gsm_dec/COPYRIGHT
@@ -0,0 +1,16 @@
1Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
2Technische Universitaet Berlin
3
4Any use of this software is permitted provided that this notice is not
5removed and that neither the authors nor the Technische Universitaet Berlin
6are deemed to have made any representations as to the suitability of this
7software for any purpose nor are held responsible for any defects of
8this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
9
10As a matter of courtesy, the authors request to be informed about uses
11this software has found, about bugs in this software, and about any
12improvements that may be of general interest.
13
14Berlin, 28.11.1994
15Jutta Degener
16Carsten Bormann
diff --git a/all_pairs/source/gsm_dec/ChangeLog.txt b/all_pairs/source/gsm_dec/ChangeLog.txt
new file mode 100644
index 0000000..3d03d86
--- /dev/null
+++ b/all_pairs/source/gsm_dec/ChangeLog.txt
@@ -0,0 +1,87 @@
1File: gsm_dec.c
2Original provenience: Jutta Degener and Carsten Bormann,
3 Technische Universitaet Berlin
4
52017-04-18:
6- Annotated gsm_dec_main as entry-point for timing analysis
7
82016-03-07:
9- Add generic TACLeBench header
10- Split code into gsm.h, data.h, config.h, private.h, proto.h
11- Remove code undefined through macros and unnecessay include guards
12- Rename function 'decode' to 'gsm_decode_main'
13- Add functions 'gsm_decode_init', 'gsm_decode_return'
14- Remove line: /* lpc.c */
15- Remove line: #undef P
162016-04-27:
17- Rename benchmark to from 'gsm_decode' to 'gsm_dec'
18- Remove unused content of proto.h and config.h
19- Remove usages of prototype macros 'P' and 'GSM_P' and checks if standard
20 prototypes are availables: use standard prototypes
21- Remove functions only defined for debugging purpose
22- Remove block around "#ifndef GSM_TABLE_C", since 'GSM_TABLE_C' is defined,
23 remove define of 'GSM_TABLE_C'
24- Define 'SASR' macro once, remove blocks if 'SASR' is not defined
25- Remove variables 'f_fast' and 'f_verbose' (both set to 0). Consequently,
26 remove unused 'function gsm_option' and the defines 'GSM_OPT_VERBOSE' and
27 'GSM_OPT_FAST' only used inside 'gsm_option'
28- Remove unused variables 'verbose' and 'fast' from 'struct gsm_state'
29- Remove unused function declarations 'gsm_explode' and 'gsm_implode'
30- Remove unused defines 'GSM_PATCHLEVEL', 'GSM_MINOR', and 'GSM_MAJOR'
31- Remove irrelevant comment "// OK" in line calling function 'create'
32- Remove unused variable 'd' of type 'word*' from 'gsm_dec_main'
33- Remove unused parameter 'struct gsm_state * S' of function 'Gsm_RPE_Decoding'
34- Remove block in function 'Gsm_Short_Term_Synthesis_Filter' that is compiled
35 when 'FAST' macro is defined (per default not activated)
36- Replace macro 'FILTER' by its expanded value 'Short_term_synthesis_filtering'
37 in function 'Gsm_Short_Term_Synthesis_Filter'
38- Remove unused 'int j' in function 'Short_term_synthesis_filtering'
39- Make iteration variable 'i' in function 'create' type 'unsigned int' to avoid
40 compiler warnings
41- Use rewritten Duff's device for WCET analysis, remove commented original
42 varinat, keep comment in code marking this change
43- Remove unused variable 'temp_sat' of type 'longword' in function
44 'APCM_inverse_quantization'
45- Remove unused parameter 'S' of type 'struct gsm_state*' in function
46 'Gsm_RPE_Decoding' and the respective calls of this function
47- Remove unused function
48 'Gsm_Update_of_reconstructed_short_time_residual_signal'
49- Remove code block activatable by defining 'USE_TABLE_MUL', since macro never
50 defined
51- Rename global variable 'gsmstate' to 'gsm_dec_state'
52- Remove lines with #undef GSM_P
53- Update function 'create': add void parameter to defintion
54- Introduce 'gsm_dec_state_ptr' that points to 'gsm_dec_state', which is
55 initialized in function 'create'. This is required to maintain the void-void
56 signature for 'gsm_dec_init' and 'gsm_dec_main'.
57- Remove unused commented version of 'GSM_MULT_R'
58- Move macros 'GSM_MULT|ADD|SUB' into separate header
59- Give include guards unique names: prefix with 'GSM_DEC_'
60- Remove unused functions 'gsm_div', 'gsm_add', 'gsm_mult', 'gsm_mult_r',
61 'gsm_abs', 'gsm_L_mult', 'gsm_L_add', 'gsm_L_sub', 'gsm_norm' (and array
62 'bitoff' used in this function), 'gsm_L_asl', 'gsm_L_asr'
63- Rename 'Gsm_Short_Term_Synthesis_Filter' to
64 'gsm_dec_Short_Term_Synthesis_Filter'
65- Rename 'Gsm_RPE_Decoding' to 'gsm_dec_RPE_Decoding'
66- Rename 'Gsm_Long_Term_Synthesis_Filtering' to
67 'gsm_dec_Long_Term_Synthesis_Filtering'
68- Rename 'Gsm_Decoder' to 'gsm_dec_Decoder'
69- Remove unused function declaration of 'decode'
70- Prefix all global symbols with benchmark name
71- Store return value of in introduced variable 'gsm_dec_result', which is
72 volatile to avoid optimizations on this variable
73- Avoid constant propagation through addition with volatile variable on each
74 element of the 'gsm_dec_state' structure
752016-05-10:
76- Change coefficients for variable 'B' of 'STEP' macro in function
77 'gsm_dec_Decoding_of_the_coded_Log_Area_Ratios' from negative to positive,
78 since bit shifts of signed values are undefined
79- Fix comment why variable 'long ltmp' ist required in function
80 'gsm_dec_Decoding_of_the_coded_Log_Area_Ratios'
81- Apply code formatting with with astyle
82- Manual text formattings: removal of empty lines in function prototypes,
83- Indent all multi-line block comments by two spaces
842016-05-10:
85- Remove 'static' declaration of global variables and functions
86- Remove unused global variables 'gsm_DLB', 'gsm_INVA', 'gsm_MAC', 'gsm_MIC',
87 'gsm_A', 'gsm_B', 'gsm_H'
diff --git a/all_pairs/source/gsm_dec/add.h b/all_pairs/source/gsm_dec/add.h
new file mode 100644
index 0000000..ffe79b7
--- /dev/null
+++ b/all_pairs/source/gsm_dec/add.h
@@ -0,0 +1,55 @@
1#ifndef GSM_DEC_ADD_H
2#define GSM_DEC_ADD_H
3
4#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \
5 (SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
6
7# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \
8 (SASR( ((longword)(a) * (longword)(b)), 15 ))
9
10# define GSM_L_MULT(a, b) /* word a, word b */ \
11 (((longword)(a) * (longword)(b)) << 1)
12
13# define GSM_L_ADD(a, b) \
14 ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
15 : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
16 >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
17 : ((b) <= 0 ? (a) + (b) \
18 : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \
19 ? MAX_LONGWORD : utmp))
20
21/*
22 # define GSM_ADD(a, b) \
23 ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \
24 ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
25*/
26/* Nonportable, but faster: */
27
28#define GSM_ADD(a, b) \
29 ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \
30 MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
31
32# define GSM_SUB(a, b) \
33 ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \
34 ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
35
36# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
37
38#define saturate(x) \
39 ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
40
41/* Use these if necessary:
42
43 # define GSM_MULT_R(a, b) gsm_mult_r(a, b)
44 # define GSM_MULT(a, b) gsm_mult(a, b)
45 # define GSM_L_MULT(a, b) gsm_L_mult(a, b)
46
47 # define GSM_L_ADD(a, b) gsm_L_add(a, b)
48 # define GSM_ADD(a, b) gsm_add(a, b)
49 # define GSM_SUB(a, b) gsm_sub(a, b)
50
51 # define GSM_ABS(a) gsm_abs(a)
52
53*/
54
55#endif /* GSM_DEC_ADD_H */
diff --git a/all_pairs/source/gsm_dec/data.h b/all_pairs/source/gsm_dec/data.h
new file mode 100644
index 0000000..81bf20d
--- /dev/null
+++ b/all_pairs/source/gsm_dec/data.h
@@ -0,0 +1,865 @@
1#ifndef GSM_DEC_DATA_H
2#define GSM_DEC_DATA_H
3
4gsm_signal gsm_dec_pcmdata[] = {
5 ( short )0x0000, ( short )0x0000, ( short )0x0010, ( short )0x0010,
6 ( short )0x0010, ( short )0x0020, ( short )0x0020, ( short )0x0018,
7 ( short )0x0028, ( short )0x0020, ( short )0x0020, ( short )0x0028,
8 ( short )0x0028, ( short )0x0020, ( short )0x0030, ( short )0x0030,
9 ( short )0x0028, ( short )0x0010, ( short )0x0008, ( short )0x0000,
10 ( short )0x0050, ( short )0x0060, ( short )0x0058, ( short )0x00D0,
11 ( short )0x00E0, ( short )0x00D0, ( short )0x0118, ( short )0x0128,
12 ( short )0x0118, ( short )0x0128, ( short )0x0110, ( short )0x0100,
13 ( short )0x00A0, ( short )0x0058, ( short )0x0048, ( short )0x0058,
14 ( short )0x0060, ( short )0x0058, ( short )0x0050, ( short )0x0048,
15 ( short )0x0040, ( short )0x0030, ( short )0x0020, ( short )0x0010,
16 ( short )0x0008, ( short )0xFFF8, ( short )0xFFE8, ( short )0xFFE0,
17 ( short )0xFFD8, ( short )0xFFC8, ( short )0xFFC0, ( short )0xFFC0,
18 ( short )0xFF98, ( short )0xFF78, ( short )0xFF78, ( short )0xFFC8,
19 ( short )0x0000, ( short )0x0010, ( short )0x0040, ( short )0x0060,
20 ( short )0x0068, ( short )0x0078, ( short )0x0078, ( short )0x0070,
21 ( short )0x00A8, ( short )0x00C8, ( short )0x00C8, ( short )0x00E0,
22 ( short )0x00F0, ( short )0x00E8, ( short )0x00F8, ( short )0x00F8,
23 ( short )0x00F0, ( short )0x00E0, ( short )0x00C8, ( short )0x00B8,
24 ( short )0x00E8, ( short )0x0100, ( short )0x00F8, ( short )0x00E8,
25 ( short )0x00D8, ( short )0x00C0, ( short )0x00A8, ( short )0x0020,
26 ( short )0xFFC0, ( short )0xFFA0, ( short )0xFFA0, ( short )0xFFA8,
27 ( short )0xFFB0, ( short )0xFFD0, ( short )0xFFF8, ( short )0x0000,
28 ( short )0x0020, ( short )0x0030, ( short )0x0030, ( short )0x0030,
29 ( short )0x0028, ( short )0x0020, ( short )0xFFF0, ( short )0xFFD0,
30 ( short )0xFFC8, ( short )0xFFC8, ( short )0xFFD0, ( short )0xFFD8,
31 ( short )0xFFE8, ( short )0xFFF8, ( short )0xFFF8, ( short )0x0008,
32 ( short )0x0018, ( short )0x0018, ( short )0x0078, ( short )0x00B8,
33 ( short )0x00C0, ( short )0x0100, ( short )0x0130, ( short )0x0128,
34 ( short )0x0108, ( short )0x00D8, ( short )0x00C0, ( short )0x0078,
35 ( short )0x0038, ( short )0x0020, ( short )0x0020, ( short )0x0000,
36 ( short )0xFFE0, ( short )0xFFE0, ( short )0xFFD8, ( short )0xFFC8,
37 ( short )0xFFC8, ( short )0xFFA0, ( short )0xFF88, ( short )0xFF98,
38 ( short )0xFF80, ( short )0xFF70, ( short )0xFF80, ( short )0xFF78,
39 ( short )0xFF78, ( short )0xFF90, ( short )0xFF80, ( short )0xFF78,
40 ( short )0xFF78, ( short )0xFF50, ( short )0xFF30, ( short )0xFF50,
41 ( short )0xFF38, ( short )0xFF30, ( short )0xFF40, ( short )0xFF58,
42 ( short )0xFF70, ( short )0xFF80, ( short )0xFF50, ( short )0xFF38,
43 ( short )0xFF40, ( short )0xFF18, ( short )0xFF00, ( short )0xFF08,
44 ( short )0xFF40, ( short )0xFF68, ( short )0xFF80, ( short )0xFF88,
45 ( short )0xFF88, ( short )0xFF88, ( short )0xFF88, ( short )0xFFB8,
46 ( short )0xFFE0, ( short )0xFFF0, ( short )0xFFD0, ( short )0xFFB8,
47 ( short )0xFFB8, ( short )0xFF90, ( short )0xFF70, ( short )0xFF70,
48 ( short )0xFF50, ( short )0xFF40, ( short )0xFF40, ( short )0xFF58,
49 ( short )0xFF70, ( short )0xFF80, ( short )0xFFC8, ( short )0x0000,
50 ( short )0x0018, ( short )0x0030, ( short )0x0048, ( short )0x0048,
51 ( short )0x0028, ( short )0x0008, ( short )0xFFF8, ( short )0xFFD8,
52 ( short )0xFFC8, ( short )0xFFB8, ( short )0xFF98, ( short )0xFF78,
53 ( short )0xFF70, ( short )0xFFF0, ( short )0x0058, ( short )0x0088,
54 ( short )0x00B8, ( short )0x00D0, ( short )0x00D8, ( short )0x00E8,
55 ( short )0x0138, ( short )0x0160, ( short )0x0158, ( short )0x0170,
56 ( short )0x0178, ( short )0x0160, ( short )0x0168, ( short )0x0160,
57 ( short )0x0140, ( short )0x0118, ( short )0x00F0, ( short )0x00C8,
58 ( short )0x0098, ( short )0x0078, ( short )0x0060, ( short )0x0018,
59 ( short )0xFFC0, ( short )0xFF90, ( short )0xFF48, ( short )0xFF00,
60 ( short )0xFEE8, ( short )0xFEC8, ( short )0xFEB8, ( short )0xFEB8,
61 ( short )0xFEA0, ( short )0xFE88, ( short )0xFE80, ( short )0xFEB8,
62 ( short )0xFEF8, ( short )0xFF38, ( short )0xFFA0, ( short )0xFFE8,
63 ( short )0x0008, ( short )0x0030, ( short )0x0058, ( short )0x0068,
64 ( short )0x0068, ( short )0x0070, ( short )0x0068, ( short )0x0050,
65 ( short )0x0040, ( short )0x0040, ( short )0x0020, ( short )0x0000,
66 ( short )0xFFE8, ( short )0xFFF0, ( short )0xFFF8, ( short )0xFFF8,
67 ( short )0x0038, ( short )0x0068, ( short )0x0078, ( short )0x0038,
68 ( short )0x0008, ( short )0xFFF0, ( short )0xFFE0, ( short )0xFFD8,
69 ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFD0, ( short )0xFFC8,
70 ( short )0x0000, ( short )0x0030, ( short )0x0048, ( short )0x0068,
71 ( short )0x0080, ( short )0x0088, ( short )0x0088, ( short )0x0088,
72 ( short )0x0088, ( short )0x0088, ( short )0x0088, ( short )0x0078,
73 ( short )0x0098, ( short )0x00B0, ( short )0x00B8, ( short )0x0098,
74 ( short )0x0070, ( short )0x0058, ( short )0x0060, ( short )0x0078,
75 ( short )0x00A8, ( short )0x00B8, ( short )0x00A8, ( short )0x00A0,
76 ( short )0x0080, ( short )0x0068, ( short )0x0060, ( short )0x0058,
77 ( short )0x0048, ( short )0x0030, ( short )0x0038, ( short )0x0038,
78 ( short )0x0030, ( short )0x0050, ( short )0x0058, ( short )0x0060,
79 ( short )0x0030, ( short )0x0008, ( short )0xFFF8, ( short )0xFF90,
80 ( short )0xFF48, ( short )0xFF28, ( short )0xFF10, ( short )0xFEF8,
81 ( short )0xFEF0, ( short )0xFED8, ( short )0xFEB0, ( short )0xFEB0,
82 ( short )0xFEA8, ( short )0xFEB8, ( short )0xFED8, ( short )0xFEF8,
83 ( short )0xFF10, ( short )0xFF20, ( short )0xFF40, ( short )0xFF58,
84 ( short )0xFF80, ( short )0xFFA0, ( short )0xFFB8, ( short )0xFFC8,
85 ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFF0, ( short )0x0048,
86 ( short )0x0098, ( short )0x00B0, ( short )0x0068, ( short )0x0018,
87 ( short )0xFFF8, ( short )0xFFE8, ( short )0xFFF0, ( short )0xFFF8,
88 ( short )0x0020, ( short )0x0038, ( short )0x0038, ( short )0x0050,
89 ( short )0x0068, ( short )0x0070, ( short )0x0068, ( short )0x0060,
90 ( short )0x0060, ( short )0x0038, ( short )0x0020, ( short )0x0018,
91 ( short )0x0040, ( short )0x0060, ( short )0x0068, ( short )0x0040,
92 ( short )0x0010, ( short )0x0000, ( short )0xFFB0, ( short )0xFF78,
93 ( short )0xFF70, ( short )0xFF90, ( short )0xFFA8, ( short )0xFFC8,
94 ( short )0xFF98, ( short )0xFF50, ( short )0xFF50, ( short )0xFF50,
95 ( short )0xFF58, ( short )0xFF68, ( short )0xFF48, ( short )0xFF20,
96 ( short )0xFF18, ( short )0xFF38, ( short )0xFF60, ( short )0xFF70,
97 ( short )0xFF80, ( short )0xFF98, ( short )0xFFA0, ( short )0xFFB8,
98 ( short )0xFFD0, ( short )0xFFE0, ( short )0x0018, ( short )0x0048,
99 ( short )0x0058, ( short )0x00B0, ( short )0x00F8, ( short )0x0108,
100 ( short )0x0118, ( short )0x0120, ( short )0x0118, ( short )0x0130,
101 ( short )0x0148, ( short )0x0140, ( short )0x0130, ( short )0x0120,
102 ( short )0x0108, ( short )0x0098, ( short )0x0038, ( short )0x0018,
103 ( short )0xFFD0, ( short )0xFF90, ( short )0xFF80, ( short )0xFF58,
104 ( short )0xFF38, ( short )0xFF30, ( short )0xFF48, ( short )0xFF68,
105 ( short )0xFF78, ( short )0xFF88, ( short )0xFFB8, ( short )0xFFD8,
106 ( short )0xFFE8, ( short )0xFFD8, ( short )0xFFF0, ( short )0x0010,
107 ( short )0x0020, ( short )0x0020, ( short )0x0018, ( short )0x0028,
108 ( short )0x0030, ( short )0x0030, ( short )0x0038, ( short )0x0060,
109 ( short )0x0080, ( short )0x0080, ( short )0x00B0, ( short )0x00D8,
110 ( short )0x00D0, ( short )0x00B8, ( short )0x00A8, ( short )0x00A8,
111 ( short )0x00A0, ( short )0x0090, ( short )0x0078, ( short )0x0070,
112 ( short )0x0068, ( short )0x0048, ( short )0x0018, ( short )0x0008,
113 ( short )0x0008, ( short )0x0000, ( short )0x0000, ( short )0xFFE8,
114 ( short )0xFFB0, ( short )0xFF90, ( short )0xFF88, ( short )0xFF70,
115 ( short )0xFF60, ( short )0xFF60, ( short )0xFF90, ( short )0xFFC0,
116 ( short )0xFFD0, ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFE8,
117 ( short )0x0018, ( short )0x0050, ( short )0x0058, ( short )0x0030,
118 ( short )0x0008, ( short )0x0000, ( short )0x0018, ( short )0x0038,
119 ( short )0x0038, ( short )0x0048, ( short )0x0050, ( short )0x0050,
120 ( short )0x0020, ( short )0x0000, ( short )0xFFF8, ( short )0xFFB0,
121 ( short )0xFF70, ( short )0xFF68, ( short )0xFFB0, ( short )0xFFE8,
122 ( short )0xFFF8, ( short )0xFFF8, ( short )0xFFF8, ( short )0xFFF0,
123 ( short )0x0030, ( short )0x0070, ( short )0x0090, ( short )0x0098,
124 ( short )0x0098, ( short )0x0090, ( short )0x00A0, ( short )0x00B0,
125 ( short )0x00B8, ( short )0x00C0, ( short )0x00C0, ( short )0x00A8,
126 ( short )0x0098, ( short )0x0088, ( short )0x0078, ( short )0x0050,
127 ( short )0x0030, ( short )0x0020, ( short )0xFFD8, ( short )0xFF98,
128 ( short )0xFF88, ( short )0xFF50, ( short )0xFF20, ( short )0xFF18,
129 ( short )0xFEF8, ( short )0xFEE0, ( short )0xFEE8, ( short )0xFE70,
130 ( short )0xFE08, ( short )0xFE00, ( short )0xFE48, ( short )0xFE98,
131 ( short )0xFEB8, ( short )0xFEE8, ( short )0xFF10, ( short )0xFF28,
132 ( short )0xFF18, ( short )0xFF10, ( short )0xFF18, ( short )0xFF48,
133 ( short )0xFF70, ( short )0xFF88, ( short )0xFFE0, ( short )0x0028,
134 ( short )0x0040, ( short )0x0058, ( short )0x0068, ( short )0x0070,
135 ( short )0x0078, ( short )0x0070, ( short )0x0068, ( short )0x0068,
136 ( short )0x0078, ( short )0x0080, ( short )0x0080, ( short )0x0088,
137 ( short )0x0088, ( short )0x0080, ( short )0x0058, ( short )0x0030,
138 ( short )0x0020, ( short )0x0018, ( short )0x0018, ( short )0x0018,
139 ( short )0x0050, ( short )0x0090, ( short )0x00A0, ( short )0x0080,
140 ( short )0x0060, ( short )0x0050, ( short )0x0030, ( short )0x0018,
141 ( short )0x0010, ( short )0x0028, ( short )0x0038, ( short )0x0038,
142 ( short )0x0018, ( short )0xFFF8, ( short )0xFFF0, ( short )0x0000,
143 ( short )0x0020, ( short )0x0020, ( short )0x0030, ( short )0x0030,
144 ( short )0x0030, ( short )0x0040, ( short )0x0050, ( short )0x0050,
145 ( short )0x0050, ( short )0x0048, ( short )0x0048, ( short )0x0048,
146 ( short )0x0048, ( short )0x0048, ( short )0x0078, ( short )0x00A0,
147 ( short )0x00A8, ( short )0x00C0, ( short )0x00C8, ( short )0x00C0,
148 ( short )0x00D0, ( short )0x00E0, ( short )0x00D8, ( short )0x00E8,
149 ( short )0x00F0, ( short )0x00E0, ( short )0x0100, ( short )0x0118,
150 ( short )0x0110, ( short )0x0100, ( short )0x00F0, ( short )0x00D8,
151 ( short )0x0090, ( short )0x0048, ( short )0x0028, ( short )0x0020,
152 ( short )0x0020, ( short )0x0020, ( short )0x0038, ( short )0x0050,
153 ( short )0x0050, ( short )0x0050, ( short )0x0048, ( short )0x0040,
154 ( short )0x0050, ( short )0x0060, ( short )0x0060, ( short )0x0040,
155 ( short )0xFFC0, ( short )0xFF58, ( short )0xFF40, ( short )0xFF90,
156 ( short )0xFFE8, ( short )0x0000, ( short )0x0020, ( short )0x0030,
157 ( short )0x0030, ( short )0x0068, ( short )0x0098, ( short )0x00A8,
158 ( short )0x0110, ( short )0x0168, ( short )0x0170, ( short )0x0148,
159 ( short )0x0118, ( short )0x00F0, ( short )0x00E8, ( short )0x00E0,
160 ( short )0x00D0, ( short )0x0098, ( short )0x0060, ( short )0x0040,
161 ( short )0x0000, ( short )0xFFD8, ( short )0xFFD8, ( short )0xFFC0,
162 ( short )0xFFB0, ( short )0xFFB0, ( short )0xFF78, ( short )0xFF30,
163 ( short )0xFF10, ( short )0xFEF0, ( short )0xFEE8, ( short )0xFEF0,
164 ( short )0xFEC8, ( short )0xFED0, ( short )0xFEF8, ( short )0xFF00,
165 ( short )0xFF10, ( short )0xFF20, ( short )0xFF50, ( short )0xFF78,
166 ( short )0xFF90, ( short )0xFF80, ( short )0xFF70, ( short )0xFF70,
167 ( short )0xFF80, ( short )0xFF98, ( short )0xFFA0, ( short )0xFFB8,
168 ( short )0xFFD0, ( short )0xFFD8, ( short )0xFFF0, ( short )0x0000,
169 ( short )0x0008, ( short )0x0028, ( short )0x0048, ( short )0x0058,
170 ( short )0x0078, ( short )0x0070, ( short )0x0058, ( short )0x0068,
171 ( short )0x0098, ( short )0x00B8, ( short )0x00D8, ( short )0x00F0,
172 ( short )0x00F0, ( short )0x00E8, ( short )0x00F8, ( short )0x0100,
173 ( short )0x00D8, ( short )0x00D0, ( short )0x00C8, ( short )0x00E8,
174 ( short )0x0100, ( short )0x00F0, ( short )0x00E0, ( short )0x00C8,
175 ( short )0x00B8, ( short )0x00A0, ( short )0x0078, ( short )0x0058,
176 ( short )0x0038, ( short )0x0020, ( short )0x0010, ( short )0x0010,
177 ( short )0x0018, ( short )0x0010, ( short )0x0010, ( short )0x0010,
178 ( short )0x0018, ( short )0x0028, ( short )0x0008, ( short )0xFFE0,
179 ( short )0xFFC8, ( short )0xFF80, ( short )0xFF48, ( short )0xFF38,
180 ( short )0xFF40, ( short )0xFF48, ( short )0xFF48, ( short )0xFF70,
181 ( short )0xFF90, ( short )0xFFA8, ( short )0xFFB8, ( short )0xFFC0,
182 ( short )0xFFC8, ( short )0xFFC0, ( short )0xFFC0, ( short )0xFFC0,
183 ( short )0xFFB0, ( short )0xFFA0, ( short )0xFFA0, ( short )0xFFA0,
184 ( short )0xFFA8, ( short )0xFFB0, ( short )0xFF68, ( short )0xFF28,
185 ( short )0xFF08, ( short )0xFEF8, ( short )0xFEF8, ( short )0xFEE8,
186 ( short )0xFEE0, ( short )0xFED8, ( short )0xFEA8, ( short )0xFE98,
187 ( short )0xFEA8, ( short )0xFEA8, ( short )0xFEA0, ( short )0xFEA0,
188 ( short )0xFED0, ( short )0xFF00, ( short )0xFF30, ( short )0xFF28,
189 ( short )0xFF38, ( short )0xFF58, ( short )0xFF48, ( short )0xFF40,
190 ( short )0xFF48, ( short )0xFFB0, ( short )0x0010, ( short )0x0038,
191 ( short )0x0028, ( short )0x0010, ( short )0x0008, ( short )0x0050,
192 ( short )0x00A0, ( short )0x00B8, ( short )0x00A0, ( short )0x0080,
193 ( short )0x0070, ( short )0x0090, ( short )0x00B0, ( short )0x00B0,
194 ( short )0x00B8, ( short )0x00B8, ( short )0x00B0, ( short )0x00C0,
195 ( short )0x00D0, ( short )0x00C8, ( short )0x00A0, ( short )0x0068,
196 ( short )0x0038, ( short )0xFFF0, ( short )0xFFB0, ( short )0xFF88,
197 ( short )0xFF78, ( short )0xFF68, ( short )0xFF60, ( short )0xFF90,
198 ( short )0xFFC0, ( short )0xFFE0, ( short )0x0000, ( short )0x0020,
199 ( short )0x0030, ( short )0x00A0, ( short )0x0110, ( short )0x0138,
200 ( short )0x0140, ( short )0x0148, ( short )0x0148, ( short )0x0110,
201 ( short )0x00E8, ( short )0x00C0, ( short )0x00A0, ( short )0x0088,
202 ( short )0x0068, ( short )0x0008, ( short )0xFFB0, ( short )0xFF88,
203 ( short )0xFF58, ( short )0xFF30, ( short )0xFF20, ( short )0xFEF8,
204 ( short )0xFED8, ( short )0xFED8, ( short )0xFF00, ( short )0xFF20,
205 ( short )0xFF38, ( short )0xFF50, ( short )0xFF68, ( short )0xFF88,
206 ( short )0xFFA0, ( short )0xFFB8, ( short )0x0020, ( short )0x0080,
207 ( short )0x00A0, ( short )0x00D8, ( short )0x0100, ( short )0x0100,
208 ( short )0x0138, ( short )0x0168, ( short )0x0148, ( short )0x0128,
209 ( short )0x0120, ( short )0x00F8, ( short )0x00E8, ( short )0x00E0,
210 ( short )0x00C0, ( short )0x00A8, ( short )0x00B0, ( short )0x0098,
211 ( short )0x0070, ( short )0x0048, ( short )0x0030, ( short )0xFFD0,
212 ( short )0xFF60, ( short )0xFF48, ( short )0xFF10, ( short )0xFEA8,
213 ( short )0xFEA8, ( short )0xFEC0, ( short )0xFEC0, ( short )0xFEE8,
214 ( short )0xFEB0, ( short )0xFE58, ( short )0xFE88, ( short )0xFED0,
215 ( short )0xFEB8, ( short )0xFE48, ( short )0xFE58, ( short )0xFEE8,
216 ( short )0xFF28, ( short )0xFF18, ( short )0xFF60, ( short )0x00A0,
217 ( short )0x01A0, ( short )0x0188, ( short )0x0178, ( short )0x0208,
218 ( short )0x0208, ( short )0x0100, ( short )0x0018, ( short )0xFFE0,
219 ( short )0xFEE0, ( short )0xFD68, ( short )0xFD00, ( short )0xFD60,
220 ( short )0xFD70, ( short )0xFDA8, ( short )0xFF00, ( short )0x00A0,
221 ( short )0x0170, ( short )0x0210, ( short )0x02D8, ( short )0x0310,
222 ( short )0x0218, ( short )0x00A0, ( short )0xFFA0, ( short )0xFDF0,
223 ( short )0xFBD8, ( short )0xFB08, ( short )0xF9C0, ( short )0xF830,
224 ( short )0xF8D8, ( short )0xFCC0, ( short )0x0038, ( short )0x01A0,
225 ( short )0x0380, ( short )0x0A18, ( short )0x0F50, ( short )0x0DB0,
226 ( short )0x0C30, ( short )0x0E18, ( short )0x0CA8, ( short )0x0570,
227 ( short )0xFF98, ( short )0xFE38, ( short )0xFBA0, ( short )0xF700,
228 ( short )0xF5D0, ( short )0xF7C8, ( short )0xF9A8, ( short )0xFB48,
229 ( short )0xFBB0, ( short )0xFC78, ( short )0xFF00, ( short )0xFE98,
230 ( short )0xFB20, ( short )0xFA48, ( short )0xFAC0, ( short )0xF8C8,
231 ( short )0xF6E0, ( short )0xF9C0, ( short )0xFE08, ( short )0xFF80,
232 ( short )0x0428, ( short )0x0B70, ( short )0x0E18, ( short )0x0D38,
233 ( short )0x0D38, ( short )0x0C28, ( short )0x01D0, ( short )0xF578,
234 ( short )0xF108, ( short )0xFB50, ( short )0x0498, ( short )0x0428,
235 ( short )0x0CE8, ( short )0x2190, ( short )0x29F0, ( short )0x22E0,
236 ( short )0x1F68, ( short )0x2050, ( short )0x1810, ( short )0x0710,
237 ( short )0xFA98, ( short )0xF438, ( short )0xEE68, ( short )0xE950,
238 ( short )0xEBC8, ( short )0xF538, ( short )0xFEB8, ( short )0x0240,
239 ( short )0x0460, ( short )0x09D0, ( short )0x0978, ( short )0xFFF8,
240 ( short )0xF810, ( short )0xF190, ( short )0xE8D0, ( short )0xE290,
241 ( short )0xDF60, ( short )0xDFF0, ( short )0xE668, ( short )0xEC20,
242 ( short )0xF138, ( short )0xFAC0, ( short )0x04F0, ( short )0x08D0,
243 ( short )0x08C8, ( short )0x0B18, ( short )0x09F8, ( short )0x0230,
244 ( short )0xFA38, ( short )0xFA68, ( short )0xFC78, ( short )0xF9B8,
245 ( short )0xF850, ( short )0xFEA8, ( short )0x05B8, ( short )0x0690,
246 ( short )0x02E8, ( short )0x0268, ( short )0x0498, ( short )0xFCB0,
247 ( short )0xF018, ( short )0xEDF8, ( short )0x0090, ( short )0x0F48,
248 ( short )0x0C70, ( short )0x1278, ( short )0x27B8, ( short )0x2EA0,
249 ( short )0x21F8, ( short )0x1920, ( short )0x1918, ( short )0x1530,
250 ( short )0x0638, ( short )0xF858, ( short )0xF720, ( short )0xF9F8,
251 ( short )0xF600, ( short )0xF850, ( short )0x0590, ( short )0x0EE0,
252 ( short )0x1000, ( short )0x10D8, ( short )0x1460, ( short )0x10F8,
253 ( short )0x0500, ( short )0xFBC0, ( short )0xF7A8, ( short )0xF250,
254 ( short )0xEC00, ( short )0xEB30, ( short )0xF1C8, ( short )0xF920,
255 ( short )0xFC90, ( short )0x0190, ( short )0x0A60, ( short )0x0E80,
256 ( short )0x0DB0, ( short )0x0AD8, ( short )0x0690, ( short )0x0168,
257 ( short )0xFF20, ( short )0xFBD0, ( short )0xF6F8, ( short )0xF660,
258 ( short )0xF680, ( short )0xF5B0, ( short )0xF7C0, ( short )0xF120,
259 ( short )0xEA90, ( short )0xF030, ( short )0xEC18, ( short )0xE190,
260 ( short )0xE558, ( short )0xFF20, ( short )0x1090, ( short )0x0C50,
261 ( short )0x1248, ( short )0x2788, ( short )0x2AD0, ( short )0x1628,
262 ( short )0x08F0, ( short )0x0BA8, ( short )0x0538, ( short )0xEF48,
263 ( short )0xE410, ( short )0xEB10, ( short )0xEF68, ( short )0xEA28,
264 ( short )0xEC40, ( short )0xFC18, ( short )0x08A8, ( short )0x0818,
265 ( short )0x0778, ( short )0x0858, ( short )0x02F8, ( short )0xF8E8,
266 ( short )0xF1F0, ( short )0xEF40, ( short )0xECD0, ( short )0xE958,
267 ( short )0xEA70, ( short )0xF260, ( short )0xFAF0, ( short )0xFFA0,
268 ( short )0x04A0, ( short )0x0CF8, ( short )0x10F8, ( short )0x0EA0,
269 ( short )0x0D48, ( short )0x0BE8, ( short )0x05E0, ( short )0x03B0,
270 ( short )0x0358, ( short )0xFF18, ( short )0xFB40, ( short )0xF9B0,
271 ( short )0xF9C0, ( short )0xF7C0, ( short )0xEE90, ( short )0xEAA0,
272 ( short )0xEE00, ( short )0xE888, ( short )0xE200, ( short )0xEF00,
273 ( short )0x0948, ( short )0x1400, ( short )0x1270, ( short )0x1D88,
274 ( short )0x2CD8, ( short )0x2488, ( short )0x0DA8, ( short )0x04B8,
275 ( short )0x0548, ( short )0xF7B0, ( short )0xE3F0, ( short )0xE268,
276 ( short )0xEFF8, ( short )0xF5A0, ( short )0xF320, ( short )0xFC68,
277 ( short )0x0BF0, ( short )0x0FA0, ( short )0x0A50, ( short )0x01F8,
278 ( short )0xFE60, ( short )0xFC48, ( short )0xF340, ( short )0xEB28,
279 ( short )0xED58, ( short )0xF3C0, ( short )0xF5B8, ( short )0xF738,
280 ( short )0x00F8, ( short )0x0C70, ( short )0x0E90, ( short )0x0DE8,
281 ( short )0x1190, ( short )0x12B0, ( short )0x1058, ( short )0x0B98,
282 ( short )0x0638, ( short )0x0868, ( short )0x0998, ( short )0x02B0,
283 ( short )0xFE50, ( short )0x0120, ( short )0x02A0, ( short )0xFC90,
284 ( short )0xF810, ( short )0xF9D0, ( short )0xF818, ( short )0xF290,
285 ( short )0xF240, ( short )0xF6D0, ( short )0x0A48, ( short )0x1AD8,
286 ( short )0x1840, ( short )0x1C18, ( short )0x2B18, ( short )0x29F0,
287 ( short )0x1608, ( short )0x08B8, ( short )0x0778, ( short )0x0128,
288 ( short )0xF118, ( short )0xE868, ( short )0xEDA0, ( short )0xF310,
289 ( short )0xF248, ( short )0xF558, ( short )0x0058, ( short )0x0970,
290 ( short )0x0688, ( short )0x0108, ( short )0xFD08, ( short )0xF988,
291 ( short )0xF558, ( short )0xF0A0, ( short )0xF0B0, ( short )0xF540,
292 ( short )0xF6E8, ( short )0xFCA0, ( short )0x0758, ( short )0x0CD0,
293 ( short )0x0F60, ( short )0x1338, ( short )0x1458, ( short )0x1278,
294 ( short )0x0FD0, ( short )0x0CA8, ( short )0x0D50, ( short )0x0D10,
295 ( short )0x0798, ( short )0x0398, ( short )0x0428, ( short )0x04F0,
296 ( short )0x0278, ( short )0xFF98, ( short )0x0178, ( short )0x0088,
297 ( short )0xFB08, ( short )0xF660, ( short )0xF1A8, ( short )0xEF18,
298 ( short )0xF9E8, ( short )0x0C00, ( short )0x11C8, ( short )0x1260,
299 ( short )0x1B60, ( short )0x21B0, ( short )0x18E0, ( short )0x0B08,
300 ( short )0x04C8, ( short )0x0078, ( short )0xF730, ( short )0xEF60,
301 ( short )0xEB18, ( short )0xEC10, ( short )0xF290, ( short )0xF800,
302 ( short )0xFB60, ( short )0xFF60, ( short )0x0080, ( short )0xFFA8,
303 ( short )0xFB08, ( short )0xF1A8, ( short )0xED10, ( short )0xEFF0,
304 ( short )0xEED0, ( short )0xEB10, ( short )0xEFE8, ( short )0xF8F0,
305 ( short )0xFDE0, ( short )0x0298, ( short )0x0528, ( short )0x0598,
306 ( short )0x0928, ( short )0x0A30, ( short )0x0670, ( short )0x08E8,
307 ( short )0x0BC0, ( short )0x0698, ( short )0x0210, ( short )0x0390,
308 ( short )0x0560, ( short )0x0288, ( short )0xF910, ( short )0xF468,
309 ( short )0xF560, ( short )0xF3E0, ( short )0xEE10, ( short )0xE8B0,
310 ( short )0xE508, ( short )0xEED0, ( short )0x03E0, ( short )0x0638,
311 ( short )0xFFA8, ( short )0x0BB8, ( short )0x2078, ( short )0x1FA8,
312 ( short )0x0EF0, ( short )0x0648, ( short )0x05C8, ( short )0xFF18,
313 ( short )0xF588, ( short )0xEE20, ( short )0xED88, ( short )0xF5A0,
314 ( short )0xFBA8, ( short )0xFBC0, ( short )0xFA98, ( short )0xFA20,
315 ( short )0xF7D8, ( short )0xF2D0, ( short )0xEF48, ( short )0xE998,
316 ( short )0xE378, ( short )0xE530, ( short )0xE868, ( short )0xE890,
317 ( short )0xEDD0, ( short )0xF798, ( short )0xFBC0, ( short )0xFD20,
318 ( short )0x0178, ( short )0x0490, ( short )0x04A0, ( short )0x0758,
319 ( short )0x0858, ( short )0x0490, ( short )0x04F8, ( short )0x0858,
320 ( short )0x06F0, ( short )0x05F8, ( short )0x0450, ( short )0x0098,
321 ( short )0xFE60, ( short )0xFDA0, ( short )0xF9E0, ( short )0xF358,
322 ( short )0xEDC0, ( short )0xF308, ( short )0xFFE0, ( short )0x0018,
323 ( short )0xFB80, ( short )0x0948, ( short )0x1DB8, ( short )0x1D08,
324 ( short )0x0F88, ( short )0x0B48, ( short )0x0C50, ( short )0x09C0,
325 ( short )0xFF78, ( short )0xF1A0, ( short )0xEF28, ( short )0xF6B8,
326 ( short )0xF9F0, ( short )0xF6F0, ( short )0xF688, ( short )0xF9E0,
327 ( short )0xF9C0, ( short )0xF4C8, ( short )0xEBD8, ( short )0xE7E8,
328 ( short )0xEBE0, ( short )0xE8C8, ( short )0xE100, ( short )0xE518,
329 ( short )0xF0B8, ( short )0xF728, ( short )0xF770, ( short )0xF878,
330 ( short )0xFF58, ( short )0x06B0, ( short )0x0430, ( short )0x0060,
331 ( short )0x0390, ( short )0x0A18, ( short )0x0B98, ( short )0x06C8,
332 ( short )0x0710, ( short )0x0CF0, ( short )0x08D0, ( short )0x01F8,
333 ( short )0x0280, ( short )0x0238, ( short )0xFD78, ( short )0xF868,
334 ( short )0xF198, ( short )0xF670, ( short )0x0930, ( short )0x0A78,
335 ( short )0xFB38, ( short )0x04F0, ( short )0x1EB8, ( short )0x1E98,
336 ( short )0x0F68, ( short )0x0EC8, ( short )0x1548, ( short )0x1480,
337 ( short )0x0C60, ( short )0x00B0, ( short )0xFEF8, ( short )0x0830,
338 ( short )0x0838, ( short )0x0160, ( short )0x0380, ( short )0x07E8,
339 ( short )0x0270, ( short )0xFBA0, ( short )0xF9C0, ( short )0xF450,
340 ( short )0xEE08, ( short )0xED08, ( short )0xEE10, ( short )0xEF20,
341 ( short )0xF1C0, ( short )0xF800, ( short )0xFE70, ( short )0x00B0,
342 ( short )0x02D8, ( short )0x07C8, ( short )0x09F0, ( short )0x09A8,
343 ( short )0x0A60, ( short )0x0B28, ( short )0x0C80, ( short )0x0D58,
344 ( short )0x0BD0, ( short )0x0A48, ( short )0x0900, ( short )0x0768,
345 ( short )0x03D0, ( short )0x00E0, ( short )0xFFF8, ( short )0xFBD8,
346 ( short )0xF5E8, ( short )0xFE18, ( short )0x0FE8, ( short )0x1060,
347 ( short )0x05C8, ( short )0x1078, ( short )0x2638, ( short )0x2580,
348 ( short )0x1740, ( short )0x14E8, ( short )0x19D0, ( short )0x17D8,
349 ( short )0x0E10, ( short )0x0270, ( short )0x0120, ( short )0x0900,
350 ( short )0x0870, ( short )0x0290, ( short )0x03A0, ( short )0x0600,
351 ( short )0x0100, ( short )0xFE28, ( short )0xFF28, ( short )0xF838,
352 ( short )0xF0B8, ( short )0xF238, ( short )0xF530, ( short )0xF440,
353 ( short )0xF440, ( short )0xFA38, ( short )0x0198, ( short )0x03A8,
354 ( short )0x03D0, ( short )0x0780, ( short )0x0AB8, ( short )0x0B58,
355 ( short )0x0B10, ( short )0x0AD8, ( short )0x0A08, ( short )0x0878,
356 ( short )0x07C8, ( short )0x0648, ( short )0x01A0, ( short )0xFF48,
357 ( short )0xFE58, ( short )0xFA68, ( short )0xF7D0, ( short )0xF758,
358 ( short )0xF470, ( short )0xF5B0, ( short )0x02A8, ( short )0x0A58,
359 ( short )0x0448, ( short )0x07C8, ( short )0x1708, ( short )0x1970,
360 ( short )0x0EC8, ( short )0x0A40, ( short )0x0CD0, ( short )0x0D28,
361 ( short )0x0838, ( short )0x0010, ( short )0xFAE0, ( short )0xFCB0,
362 ( short )0xFEB8, ( short )0xFCE8, ( short )0xFBA8, ( short )0xFD10,
363 ( short )0xFBC8, ( short )0xF910, ( short )0xF960, ( short )0xF830,
364 ( short )0xF4D8, ( short )0xF500, ( short )0xF860, ( short )0xF9F0,
365 ( short )0xFB58, ( short )0xFE48, ( short )0x0050, ( short )0x0418,
366 ( short )0x0910, ( short )0x0940, ( short )0x0830, ( short )0x0AC8,
367 ( short )0x0C88, ( short )0x0A50, ( short )0x07C0, ( short )0x0700,
368 ( short )0x0590, ( short )0x0268, ( short )0xFFF0, ( short )0xFBA8,
369 ( short )0xF720, ( short )0xF698, ( short )0xF2E0, ( short )0xEB68,
370 ( short )0xEDA0, ( short )0xFC00, ( short )0x0358, ( short )0xFF30,
371 ( short )0x0398, ( short )0x1220, ( short )0x1860, ( short )0x1368,
372 ( short )0x10C0, ( short )0x12F0, ( short )0x12A0, ( short )0x0E08,
373 ( short )0x0780, ( short )0x0010, ( short )0xFAD8, ( short )0xF990,
374 ( short )0xF7E0, ( short )0xF278, ( short )0xEE10, ( short )0xEB98,
375 ( short )0xE7A0, ( short )0xE6F8, ( short )0xEA30, ( short )0xE980,
376 ( short )0xE420, ( short )0xE440, ( short )0xEBA8, ( short )0xEF98,
377 ( short )0xEF68, ( short )0xF288, ( short )0xF7A8, ( short )0xFC90,
378 ( short )0x01F8, ( short )0x0528, ( short )0x0630, ( short )0x08E8,
379 ( short )0x0C98, ( short )0x0D50, ( short )0x0B98, ( short )0x0920,
380 ( short )0x0678, ( short )0x03F0, ( short )0x0260, ( short )0xFE00,
381 ( short )0xF810, ( short )0xF4B8, ( short )0xF0C0, ( short )0xEB68,
382 ( short )0xEF58, ( short )0xFAE8, ( short )0xFDE0, ( short )0xF680,
383 ( short )0xF910, ( short )0x06E0, ( short )0x0C20, ( short )0x05D8,
384 ( short )0x0408, ( short )0x05C8, ( short )0x0450, ( short )0x02D0,
385 ( short )0x0128, ( short )0xFB78, ( short )0xF668, ( short )0xF430,
386 ( short )0xF150, ( short )0xED90, ( short )0xE870, ( short )0xE448,
387 ( short )0xE2E0, ( short )0xE048, ( short )0xDDD0, ( short )0xDF08,
388 ( short )0xE0E0, ( short )0xE098, ( short )0xE258, ( short )0xE520,
389 ( short )0xE6A8, ( short )0xEA28, ( short )0xEF88, ( short )0xF2A8,
390 ( short )0xF548, ( short )0xFBA8, ( short )0x01C8, ( short )0x03F8,
391 ( short )0x0748, ( short )0x0C88, ( short )0x0E98, ( short )0x0DB8,
392 ( short )0x0D98, ( short )0x0D50, ( short )0x0B68, ( short )0x0970,
393 ( short )0x06C0, ( short )0x0238, ( short )0xFE18, ( short )0xFB08,
394 ( short )0xF820, ( short )0xF780, ( short )0xF970, ( short )0xF9B0,
395 ( short )0xF880, ( short )0xFA28, ( short )0x0028, ( short )0x0698,
396 ( short )0x0948, ( short )0x08D0, ( short )0x09E0, ( short )0x0DD0,
397 ( short )0x1010, ( short )0x0D40, ( short )0x0958, ( short )0x0728,
398 ( short )0x0308, ( short )0xFDA0, ( short )0xF9F8, ( short )0xF418,
399 ( short )0xEC98, ( short )0xE8B8, ( short )0xE618, ( short )0xE200,
400 ( short )0xDED0, ( short )0xDF48, ( short )0xE100, ( short )0xE180,
401 ( short )0xE160, ( short )0xE3C8, ( short )0xE898, ( short )0xEDD8,
402 ( short )0xF250, ( short )0xF558, ( short )0xFB00, ( short )0x02F8,
403 ( short )0x07B0, ( short )0x0B80, ( short )0x1108, ( short )0x1518,
404 ( short )0x1660, ( short )0x1770, ( short )0x1870, ( short )0x16F8,
405 ( short )0x1300, ( short )0x0F78, ( short )0x0FC0, ( short )0x1070,
406 ( short )0x0CE8, ( short )0x0AF8, ( short )0x0BD8, ( short )0x0D28,
407 ( short )0x10A8, ( short )0x1370, ( short )0x10A0, ( short )0x1040,
408 ( short )0x1518, ( short )0x1740, ( short )0x1550, ( short )0x1398,
409 ( short )0x10E0, ( short )0x0AC8, ( short )0x0640, ( short )0x0348,
410 ( short )0xFD18, ( short )0xF658, ( short )0xF1D8, ( short )0xEC20,
411 ( short )0xE760, ( short )0xE550, ( short )0xE4B8, ( short )0xE418,
412 ( short )0xE438, ( short )0xE508, ( short )0xE738, ( short )0xEB18,
413 ( short )0xF0C8, ( short )0xF618, ( short )0xF988, ( short )0xFEC8,
414 ( short )0x0518, ( short )0x09D8, ( short )0x1118, ( short )0x17F0,
415 ( short )0x1BB0, ( short )0x1E28, ( short )0x2120, ( short )0x23D8,
416 ( short )0x2638, ( short )0x2418, ( short )0x2080, ( short )0x1D30,
417 ( short )0x1CE8, ( short )0x1D98, ( short )0x1CA8, ( short )0x1AD8,
418 ( short )0x1960, ( short )0x17F8, ( short )0x1A40, ( short )0x1CF8,
419 ( short )0x1D38, ( short )0x1C30, ( short )0x1A68, ( short )0x1860,
420 ( short )0x1480, ( short )0x1020, ( short )0x0B68, ( short )0x03E8,
421 ( short )0xFBA8, ( short )0xF508, ( short )0xEE40, ( short )0xE820,
422 ( short )0xE338, ( short )0xDE88, ( short )0xDA30, ( short )0xD7D0,
423 ( short )0xD728, ( short )0xD7D8, ( short )0xD998, ( short )0xDC10,
424 ( short )0xDFB0, ( short )0xE470, ( short )0xE948, ( short )0xEF98,
425 ( short )0xF5F0, ( short )0xFC38, ( short )0x0228, ( short )0x0798,
426 ( short )0x0D98, ( short )0x1320, ( short )0x1760, ( short )0x1A70,
427 ( short )0x1BE0, ( short )0x1CC0, ( short )0x1D98, ( short )0x1A88,
428 ( short )0x1658, ( short )0x12A0, ( short )0x1180, ( short )0x10A8,
429 ( short )0x0ED0, ( short )0x0CC8, ( short )0x0AD8, ( short )0x0920,
430 ( short )0x0B70, ( short )0x0E30, ( short )0x0EE8, ( short )0x0D80,
431 ( short )0x0BE0, ( short )0x0AC0, ( short )0x09B8, ( short )0x0890,
432 ( short )0x0690, ( short )0x01F8, ( short )0xFD30, ( short )0xF9F0,
433 ( short )0xF5B0, ( short )0xF188, ( short )0xEE38, ( short )0xE9E8,
434 ( short )0xE5E8, ( short )0xE3E0, ( short )0xE4A0, ( short )0xE608,
435 ( short )0xE738, ( short )0xE858, ( short )0xE980, ( short )0xEC20,
436 ( short )0xF030, ( short )0xF450, ( short )0xF878, ( short )0xFC68,
437 ( short )0xFF68, ( short )0x03C8, ( short )0x08B8, ( short )0x0D00,
438 ( short )0x1038, ( short )0x12D8, ( short )0x1490, ( short )0x1648,
439 ( short )0x16B8, ( short )0x1468, ( short )0x1160, ( short )0x0FA8,
440 ( short )0x1038, ( short )0x1058, ( short )0x0F88, ( short )0x0E50,
441 ( short )0x0CC8, ( short )0x0CC0, ( short )0x0FC0, ( short )0x1220,
442 ( short )0x12A0, ( short )0x10F8, ( short )0x0F20, ( short )0x0D28,
443 ( short )0x0C78, ( short )0x0BB8, ( short )0x08D0, ( short )0x01C8,
444 ( short )0xFB38, ( short )0xF660, ( short )0xF330, ( short )0xF078,
445 ( short )0xEC28, ( short )0xE6C8, ( short )0xE2C0, ( short )0xE050,
446 ( short )0xDFC8, ( short )0xE038, ( short )0xE160, ( short )0xE300,
447 ( short )0xE568, ( short )0xE6B8, ( short )0xE9A0, ( short )0xED50,
448 ( short )0xF238, ( short )0xF6D8, ( short )0xFB08, ( short )0xFF10,
449 ( short )0x02E8, ( short )0x06A0, ( short )0x0AC0, ( short )0x0DC8,
450 ( short )0x1010, ( short )0x1168, ( short )0x1018, ( short )0x0E90,
451 ( short )0x0BF8, ( short )0x0B08, ( short )0x0A50, ( short )0x09F0,
452 ( short )0x0960, ( short )0x0888, ( short )0x0808, ( short )0x09C8,
453 ( short )0x0BA8, ( short )0x0EE8, ( short )0x1070, ( short )0x10D0,
454 ( short )0x0F58, ( short )0x0D60, ( short )0x0BA0, ( short )0x0A60,
455 ( short )0x08F0, ( short )0x0608, ( short )0xFFB0, ( short )0xF938,
456 ( short )0xF360, ( short )0xF030, ( short )0xEE20, ( short )0xEB70,
457 ( short )0xE7A8, ( short )0xE410, ( short )0xE140, ( short )0xDFC8,
458 ( short )0xDFF8, ( short )0xE1F0, ( short )0xE448, ( short )0xE6D0,
459 ( short )0xE780, ( short )0xE9E8, ( short )0xECF0, ( short )0xF248,
460 ( short )0xF730, ( short )0xFBC0, ( short )0xFF80, ( short )0x0310,
461 ( short )0x0670, ( short )0x0A98, ( short )0x0D88, ( short )0x0FD8,
462 ( short )0x10C0, ( short )0x0EB0, ( short )0x0C48, ( short )0x08B8,
463 ( short )0x0998, ( short )0x0AC0, ( short )0x0C68, ( short )0x0B78,
464 ( short )0x09C8, ( short )0x0838, ( short )0x08F8, ( short )0x0A80,
465 ( short )0x0CA0, ( short )0x0E10, ( short )0x0E48, ( short )0x0D58,
466 ( short )0x0A28, ( short )0x0750, ( short )0x04F0, ( short )0x0228,
467 ( short )0xFEE8, ( short )0xFA80, ( short )0xF468, ( short )0xEED0,
468 ( short )0xEAE0, ( short )0xE8B8, ( short )0xE718, ( short )0xE5B0,
469 ( short )0xE4A8, ( short )0xE410, ( short )0xE480, ( short )0xE548,
470 ( short )0xE738, ( short )0xE9B0, ( short )0xED80, ( short )0xF0B8,
471 ( short )0xF480, ( short )0xF7B0, ( short )0xFB70, ( short )0xFED0,
472 ( short )0x0328, ( short )0x0720, ( short )0x0A98, ( short )0x0E00,
473 ( short )0x10F8, ( short )0x12E0, ( short )0x12A8, ( short )0x11B0,
474 ( short )0x0F58, ( short )0x0F38, ( short )0x0E88, ( short )0x0F08,
475 ( short )0x0FC0, ( short )0x0FF0, ( short )0x10B8, ( short )0x1138,
476 ( short )0x1198, ( short )0x13D0, ( short )0x1638, ( short )0x17E8,
477 ( short )0x1758, ( short )0x1628, ( short )0x1460, ( short )0x10E8,
478 ( short )0x0CA0, ( short )0x0848, ( short )0x0280, ( short )0xFC90,
479 ( short )0xF700, ( short )0xF0F8, ( short )0xEB18, ( short )0xE638,
480 ( short )0xE1B8, ( short )0xDE78, ( short )0xDC58, ( short )0xDBB8,
481 ( short )0xDC28, ( short )0xDDB0, ( short )0xE030, ( short )0xE330,
482 ( short )0xE6F0, ( short )0xEC20, ( short )0xF210, ( short )0xF7C0,
483 ( short )0xFCE0, ( short )0x0150, ( short )0x0570, ( short )0x08F0,
484 ( short )0x0C70, ( short )0x0F50, ( short )0x12B8, ( short )0x1560,
485 ( short )0x16E0, ( short )0x1630, ( short )0x14E8, ( short )0x1298,
486 ( short )0x11B8, ( short )0x1170, ( short )0x11B8, ( short )0x11C0,
487 ( short )0x0FE8, ( short )0x0E58, ( short )0x0CB8, ( short )0x0C50,
488 ( short )0x0D68, ( short )0x0E98, ( short )0x0E30, ( short )0x0C28,
489 ( short )0x0A10, ( short )0x06D8, ( short )0x02E0, ( short )0xFEA0,
490 ( short )0xFA18, ( short )0xF4E8, ( short )0xF018, ( short )0xEB68,
491 ( short )0xE6E8, ( short )0xE310, ( short )0xDFC8, ( short )0xDD38,
492 ( short )0xDBF8, ( short )0xDC38, ( short )0xDDD0, ( short )0xE070,
493 ( short )0xE390, ( short )0xE760, ( short )0xEB88, ( short )0xEF20,
494 ( short )0xF378, ( short )0xF830, ( short )0xFCE0, ( short )0x00F8,
495 ( short )0x0480, ( short )0x0768, ( short )0x0968, ( short )0x0AE0,
496 ( short )0x0BB8, ( short )0x0C10, ( short )0x0BB0, ( short )0x0A78,
497 ( short )0x08E0, ( short )0x06E8, ( short )0x0540, ( short )0x0870,
498 ( short )0x0BE0, ( short )0x0ED0, ( short )0x0E40, ( short )0x0D10,
499 ( short )0x0CC8, ( short )0x0E28, ( short )0x0FA0, ( short )0x0FB0,
500 ( short )0x0F18, ( short )0x0DD0, ( short )0x0BC8, ( short )0x08E8,
501 ( short )0x0628, ( short )0x0300, ( short )0xFF18, ( short )0xFB40,
502 ( short )0xF780, ( short )0xF388, ( short )0xF028, ( short )0xED80,
503 ( short )0xEB18, ( short )0xE968, ( short )0xE8C0, ( short )0xE738,
504 ( short )0xE658, ( short )0xE698, ( short )0xE888, ( short )0xEB38,
505 ( short )0xEDA0, ( short )0xF178, ( short )0xF5B8, ( short )0xFA28,
506 ( short )0xFEA8, ( short )0x0300, ( short )0x06C8, ( short )0x0960,
507 ( short )0x0B70, ( short )0x0CE0, ( short )0x0D70, ( short )0x0D50,
508 ( short )0x0C60, ( short )0x0890, ( short )0x0418, ( short )0x0028,
509 ( short )0x01D0, ( short )0x03F8, ( short )0x05A8, ( short )0x0700,
510 ( short )0x0808, ( short )0x09A0, ( short )0x0B18, ( short )0x0CC8,
511 ( short )0x0D90, ( short )0x0E68, ( short )0x0EC0, ( short )0x0E30,
512 ( short )0x0C28, ( short )0x09D8, ( short )0x0730, ( short )0x0308,
513 ( short )0xFED8, ( short )0xFAC0, ( short )0xF598, ( short )0xF0D8,
514 ( short )0xECE0, ( short )0xEAA8, ( short )0xE948, ( short )0xE8D0,
515 ( short )0xE850, ( short )0xE888, ( short )0xE910, ( short )0xEAD0,
516 ( short )0xED68, ( short )0xF018, ( short )0xF350, ( short )0xF6B8,
517 ( short )0xFAE0, ( short )0xFF00, ( short )0x02D8, ( short )0x05E8,
518 ( short )0x0830, ( short )0x09F8, ( short )0x0B08, ( short )0x0B80,
519 ( short )0x0B60, ( short )0x0988, ( short )0x0648, ( short )0x02D0,
520 ( short )0x0150, ( short )0x01E8, ( short )0x0270, ( short )0x03E0,
521 ( short )0x0538, ( short )0x0658, ( short )0x0918, ( short )0x0C00,
522 ( short )0x0E88, ( short )0x10B8, ( short )0x12A0, ( short )0x13E0,
523 ( short )0x1488, ( short )0x1448, ( short )0x1368, ( short )0x1120,
524 ( short )0x0DD0, ( short )0x0A40, ( short )0x0608, ( short )0x0148,
525 ( short )0xFC80, ( short )0xF860, ( short )0xF4D8, ( short )0xF1C0,
526 ( short )0xF008, ( short )0xEF38, ( short )0xEE78, ( short )0xEE98,
527 ( short )0xEF90, ( short )0xF170, ( short )0xF390, ( short )0xF5C0,
528 ( short )0xF888, ( short )0xFB48, ( short )0xFDF0, ( short )0x0078,
529 ( short )0x03D0, ( short )0x06C8, ( short )0x08F8, ( short )0x0AA0,
530 ( short )0x0BC8, ( short )0x0C48, ( short )0x0B30, ( short )0x0978,
531 ( short )0x06A8, ( short )0x0530, ( short )0x03F0, ( short )0x0438,
532 ( short )0x03C0, ( short )0x0350, ( short )0x0360, ( short )0x04E8,
533 ( short )0x0698, ( short )0x07D0, ( short )0x08D0, ( short )0x0998,
534 ( short )0x0A70, ( short )0x0B48, ( short )0x0B70, ( short )0x0AD0,
535 ( short )0x09C0, ( short )0x0890, ( short )0x0730, ( short )0x0588,
536 ( short )0x0358, ( short )0x0140, ( short )0xFF58, ( short )0xFD40,
537 ( short )0xFB68, ( short )0xF9E8, ( short )0xF828, ( short )0xF6D0,
538 ( short )0xF608, ( short )0xF5D8, ( short )0xF610, ( short )0xF668,
539 ( short )0xF778, ( short )0xF8E8, ( short )0xFA48, ( short )0xFCC8,
540 ( short )0xFF50, ( short )0x01C8, ( short )0x0428, ( short )0x0640,
541 ( short )0x07D0, ( short )0x09D0, ( short )0x0B40, ( short )0x0BF8,
542 ( short )0x0C30, ( short )0x0C08, ( short )0x0B08, ( short )0x0988,
543 ( short )0x07C0, ( short )0x0670, ( short )0x0608, ( short )0x0590,
544 ( short )0x0588, ( short )0x05B0, ( short )0x05E0, ( short )0x06B8,
545 ( short )0x0748, ( short )0x0758, ( short )0x0700, ( short )0x06A8,
546 ( short )0x0620, ( short )0x05D8, ( short )0x0590, ( short )0x0528,
547 ( short )0x03A8, ( short )0x0240, ( short )0x0108, ( short )0xFF38,
548 ( short )0xFD50, ( short )0xFBA0, ( short )0xFA38, ( short )0xF920,
549 ( short )0xF860, ( short )0xF6E8, ( short )0xF640, ( short )0xF628,
550 ( short )0xF680, ( short )0xF720, ( short )0xF800, ( short )0xF8E0,
551 ( short )0xF9A0, ( short )0xFA78, ( short )0xFB88, ( short )0xFD20,
552 ( short )0xFEA0, ( short )0x0008, ( short )0x0110, ( short )0x0200,
553 ( short )0x0360, ( short )0x04E0, ( short )0x0608, ( short )0x0738,
554 ( short )0x0838, ( short )0x08D8, ( short )0x0828, ( short )0x0738,
555 ( short )0x0600, ( short )0x04A8, ( short )0x02E0, ( short )0x0130,
556 ( short )0xFFA0, ( short )0xFF48, ( short )0xFF10, ( short )0xFEF0,
557 ( short )0xFF30, ( short )0xFFD0, ( short )0x0090, ( short )0x0090,
558 ( short )0x0070, ( short )0x0060, ( short )0xFFE8, ( short )0xFF50,
559 ( short )0xFEB8, ( short )0xFE98, ( short )0xFE88, ( short )0xFE80,
560 ( short )0xFE58, ( short )0xFE50, ( short )0xFE58, ( short )0xFDB0,
561 ( short )0xFD08, ( short )0xFC80, ( short )0xFAF8, ( short )0xF988,
562 ( short )0xF860, ( short )0xF798, ( short )0xF720, ( short )0xF6E8,
563 ( short )0xF728, ( short )0xF7C0, ( short )0xF8A8, ( short )0xF8F8,
564 ( short )0xF960, ( short )0xFA18, ( short )0xFAC0, ( short )0xFB58,
565 ( short )0xFC18, ( short )0xFCE0, ( short )0xFDA0, ( short )0xFE20,
566 ( short )0xFE88, ( short )0xFEF8, ( short )0xFEF0, ( short )0xFEC8,
567 ( short )0xFEA8, ( short )0xFDE0, ( short )0xFD10, ( short )0xFC70,
568 ( short )0xFBA8, ( short )0xFB10, ( short )0xFAB8, ( short )0xFAA0,
569 ( short )0xFAD0, ( short )0xFB18, ( short )0xFA90, ( short )0xFA18,
570 ( short )0xFA10, ( short )0xFA80, ( short )0xFB10, ( short )0xFB88,
571 ( short )0xFC90, ( short )0xFDB8, ( short )0xFEB8, ( short )0xFF80,
572 ( short )0x0058, ( short )0x0138, ( short )0x0118, ( short )0x00C8,
573 ( short )0x00C0, ( short )0xFF98, ( short )0xFE30, ( short )0xFD38,
574 ( short )0xFC68, ( short )0xFB78, ( short )0xFAB8, ( short )0xFAE8,
575 ( short )0xFB78, ( short )0xFBD0, ( short )0xFBE8, ( short )0xFC18,
576 ( short )0xFC98, ( short )0xFD28, ( short )0xFD48, ( short )0xFD68,
577 ( short )0xFD68, ( short )0xFD90, ( short )0xFDB8, ( short )0xFD90,
578 ( short )0xFD68, ( short )0xFD78, ( short )0xFCA0, ( short )0xFB70,
579 ( short )0xFAD0, ( short )0xF9F0, ( short )0xF870, ( short )0xF748,
580 ( short )0xF748, ( short )0xF770, ( short )0xF748, ( short )0xF720,
581 ( short )0xF7A8, ( short )0xF878, ( short )0xF930, ( short )0xF998,
582 ( short )0xFA38, ( short )0xFC10, ( short )0xFDA0, ( short )0xFE70,
583 ( short )0x0030, ( short )0x0248, ( short )0x03A0, ( short )0x0568,
584 ( short )0x0738, ( short )0x0870, ( short )0x0960, ( short )0x0A10,
585 ( short )0x0A40, ( short )0x0A28, ( short )0x09B8, ( short )0x08E8,
586 ( short )0x07E8, ( short )0x06E0, ( short )0x0588, ( short )0x0430,
587 ( short )0x0300, ( short )0x0260, ( short )0x01D0, ( short )0x0118,
588 ( short )0xFFB0, ( short )0xFE98, ( short )0xFE18, ( short )0xFDA0,
589 ( short )0xFD08, ( short )0xFCB8, ( short )0xFCF8, ( short )0xFD60,
590 ( short )0xFD90, ( short )0xFD90, ( short )0xFDD8, ( short )0xFE50,
591 ( short )0xFDA0, ( short )0xFCE0, ( short )0xFCC0, ( short )0xFCE8,
592 ( short )0xFCB0, ( short )0xFC60, ( short )0xFC70, ( short )0xFCB8,
593 ( short )0xFCE0, ( short )0xFD40, ( short )0xFDD8, ( short )0xFE68,
594 ( short )0xFF78, ( short )0x0068, ( short )0x0108, ( short )0x0278,
595 ( short )0x03A0, ( short )0x0420, ( short )0x0590, ( short )0x0708,
596 ( short )0x07B8, ( short )0x07D8, ( short )0x0808, ( short )0x0838,
597 ( short )0x07D8, ( short )0x06E8, ( short )0x0600, ( short )0x05B0,
598 ( short )0x0518, ( short )0x0410, ( short )0x02A0, ( short )0x0198,
599 ( short )0x00D0, ( short )0x00C8, ( short )0x00B0, ( short )0x0068,
600 ( short )0x00C0, ( short )0x0150, ( short )0x0180, ( short )0x0220,
601 ( short )0x02D8, ( short )0x0340, ( short )0x0360, ( short )0x0380,
602 ( short )0x0380, ( short )0x0338, ( short )0x02C8, ( short )0x02B8,
603 ( short )0x0280, ( short )0x0200, ( short )0x0100, ( short )0x0098,
604 ( short )0x0080, ( short )0x0020, ( short )0xFFF0, ( short )0x0000,
605 ( short )0x0020, ( short )0x0098, ( short )0x0120, ( short )0x0170,
606 ( short )0x0230, ( short )0x02F0, ( short )0x0350, ( short )0x0480,
607 ( short )0x05B8, ( short )0x0650, ( short )0x06A8, ( short )0x0738,
608 ( short )0x0798, ( short )0x07B0, ( short )0x07C0, ( short )0x0798,
609 ( short )0x0668, ( short )0x0598, ( short )0x0530, ( short )0x04C8,
610 ( short )0x0410, ( short )0x0350, ( short )0x0278, ( short )0x01D8,
611 ( short )0x0148, ( short )0x0080, ( short )0x0000, ( short )0xFFC0,
612 ( short )0xFFD8, ( short )0xFFA8, ( short )0xFF60, ( short )0xFF80,
613 ( short )0x0018, ( short )0x0070, ( short )0xFFE0, ( short )0xFF88,
614 ( short )0xFFC0, ( short )0xFF38, ( short )0xFE98, ( short )0xFE50,
615 ( short )0xFE10, ( short )0xFDD8, ( short )0xFD90, ( short )0xFD30,
616 ( short )0xFDB8, ( short )0xFE68, ( short )0xFE70, ( short )0xFE60,
617 ( short )0xFE70, ( short )0xFED0, ( short )0xFF90, ( short )0xFFE0,
618 ( short )0xFFF0, ( short )0x00A8, ( short )0x0168, ( short )0x01D0,
619 ( short )0x01F8, ( short )0x0210, ( short )0x0278, ( short )0x0268,
620 ( short )0x0208, ( short )0x0220, ( short )0x01F8, ( short )0x0198,
621 ( short )0x0158, ( short )0x0100, ( short )0x00C0, ( short )0x00A0,
622 ( short )0x0018, ( short )0xFF98, ( short )0xFF28, ( short )0xFEC0,
623 ( short )0xFE80, ( short )0xFE60, ( short )0xFD88, ( short )0xFCF0,
624 ( short )0xFCC8, ( short )0xFC70, ( short )0xFC10, ( short )0xFBC8,
625 ( short )0xFBB0, ( short )0xFBE8, ( short )0xFBE8, ( short )0xFB80,
626 ( short )0xFB88, ( short )0xFB40, ( short )0xFB18, ( short )0xFB20,
627 ( short )0xFAB8, ( short )0xFA50, ( short )0xFA50, ( short )0xFAB8,
628 ( short )0xFAF8, ( short )0xFB18, ( short )0xFBB0, ( short )0xFC88,
629 ( short )0xFD10, ( short )0xFD40, ( short )0xFD98, ( short )0xFE38,
630 ( short )0xFEE0, ( short )0xFEF8, ( short )0xFEF0, ( short )0xFF18,
631 ( short )0xFF18, ( short )0xFF18, ( short )0xFF68, ( short )0xFF98,
632 ( short )0xFF98, ( short )0xFFD0, ( short )0xFFF8, ( short )0x0048,
633 ( short )0x0038, ( short )0x0008, ( short )0x0008, ( short )0xFFE0,
634 ( short )0xFFB0, ( short )0xFFB8, ( short )0xFED0, ( short )0xFE18,
635 ( short )0xFE18, ( short )0xFDF0, ( short )0xFE38, ( short )0xFE90,
636 ( short )0xFE90, ( short )0xFDA8, ( short )0xFD48, ( short )0xFD70,
637 ( short )0xFD68, ( short )0xFD00, ( short )0xFCB8, ( short )0xFCB8,
638 ( short )0xFCF8, ( short )0xFD00, ( short )0xFC30, ( short )0xFBD0,
639 ( short )0xFC10, ( short )0xFC20, ( short )0xFBE0, ( short )0xFBA8,
640 ( short )0xFC30, ( short )0xFD00, ( short )0xFD50, ( short )0xFD90,
641 ( short )0xFE10, ( short )0xFEA8, ( short )0xFF40, ( short )0xFFA0,
642 ( short )0xFFD0, ( short )0xFFC8, ( short )0xFFC8, ( short )0xFFD8,
643 ( short )0xFFA0, ( short )0xFF98, ( short )0xFFB8, ( short )0x0050,
644 ( short )0x00B8, ( short )0x00B0, ( short )0x01B0, ( short )0x02E0,
645 ( short )0x0318, ( short )0x0330, ( short )0x02E0, ( short )0x02C8,
646 ( short )0x0278, ( short )0x0150, ( short )0x0050, ( short )0xFFC0,
647 ( short )0xFF88, ( short )0xFF18, ( short )0xFE90, ( short )0xFE40,
648 ( short )0xFE30, ( short )0xFDE8, ( short )0xFDD0, ( short )0xFD70,
649 ( short )0xFD48, ( short )0xFD10, ( short )0xFC98, ( short )0xFC38,
650 ( short )0xFC38, ( short )0xFC78, ( short )0xFC98, ( short )0xFCF0,
651 ( short )0xFDA8, ( short )0xFE48, ( short )0xFEC8, ( short )0xFF30,
652 ( short )0xFF98, ( short )0x0000, ( short )0x0050, ( short )0x0058,
653 ( short )0x00A8, ( short )0x00E8, ( short )0x00D0, ( short )0x0138,
654 ( short )0x01E0, ( short )0x0218, ( short )0x0208, ( short )0x0230,
655 ( short )0x0258, ( short )0x0248, ( short )0x02B0, ( short )0x0318,
656 ( short )0x0330, ( short )0x0358, ( short )0x0380, ( short )0x0378,
657 ( short )0x0408, ( short )0x0480, ( short )0x0460, ( short )0x03C8,
658 ( short )0x0318, ( short )0x02B0, ( short )0x01E8, ( short )0x00B8,
659 ( short )0xFFD8, ( short )0xFF30, ( short )0xFEC8, ( short )0xFE60,
660 ( short )0xFE60, ( short )0xFE78, ( short )0xFE78, ( short )0xFDC0,
661 ( short )0xFD70, ( short )0xFD50, ( short )0xFD08, ( short )0xFC88,
662 ( short )0xFC28, ( short )0xFC98, ( short )0xFD18, ( short )0xFD60,
663 ( short )0xFD60, ( short )0xFDD8, ( short )0xFE90, ( short )0xFEE8,
664 ( short )0xFF10, ( short )0xFF58, ( short )0xFF90, ( short )0xFFB8,
665 ( short )0xFFE0, ( short )0xFFF0, ( short )0xFFF0, ( short )0x00D0,
666 ( short )0x0190, ( short )0x01C8, ( short )0x0180, ( short )0x0188,
667 ( short )0x01B0, ( short )0x0238, ( short )0x0298, ( short )0x02B8,
668 ( short )0x0268, ( short )0x0258, ( short )0x0258, ( short )0x0230,
669 ( short )0x0228, ( short )0x0230, ( short )0x0258, ( short )0x0248,
670 ( short )0x01F8, ( short )0x0150, ( short )0x00C8, ( short )0x0058,
671 ( short )0x0058, ( short )0x0038, ( short )0x0000, ( short )0xFF50,
672 ( short )0xFF00, ( short )0xFEF8, ( short )0xFE80, ( short )0xFDB8,
673 ( short )0xFD70, ( short )0xFD00, ( short )0xFC90, ( short )0xFC40,
674 ( short )0xFC28, ( short )0xFC58, ( short )0xFC98, ( short )0xFD10,
675 ( short )0xFD78, ( short )0xFDE0, ( short )0xFE80, ( short )0xFF08,
676 ( short )0xFF60, ( short )0xFFD0, ( short )0x0030, ( short )0x0068,
677 ( short )0x0110, ( short )0x0198, ( short )0x01C0, ( short )0x0208,
678 ( short )0x0260, ( short )0x0280, ( short )0x0320, ( short )0x0390,
679 ( short )0x0398, ( short )0x0410, ( short )0x0488, ( short )0x04A0,
680 ( short )0x0448, ( short )0x0408, ( short )0x03E0, ( short )0x03C8,
681 ( short )0x0398, ( short )0x0350, ( short )0x0308, ( short )0x02C8,
682 ( short )0x0278, ( short )0x01D8, ( short )0x0148, ( short )0x00E8,
683 ( short )0x0040, ( short )0xFFA0, ( short )0xFF50, ( short )0xFDC0,
684 ( short )0xFC88, ( short )0xFC30, ( short )0xFB88, ( short )0xFAA8,
685 ( short )0xFA50, ( short )0xFA30, ( short )0xFA40, ( short )0xFA70,
686 ( short )0xFAB8, ( short )0xFAE0, ( short )0xFB28, ( short )0xFB58,
687 ( short )0xFB80, ( short )0xFBB0, ( short )0xFC00, ( short )0xFC80,
688 ( short )0xFCF0, ( short )0xFDB8, ( short )0xFE58, ( short )0xFED8,
689 ( short )0x0008, ( short )0x0100, ( short )0x0180, ( short )0x01D0,
690 ( short )0x0210, ( short )0x0248, ( short )0x0238, ( short )0x0200,
691 ( short )0x01D0, ( short )0x02D0, ( short )0x03A0, ( short )0x03D8,
692 ( short )0x03C0, ( short )0x03D8, ( short )0x03F8, ( short )0x0370,
693 ( short )0x02C0, ( short )0x0258, ( short )0x01B8, ( short )0x0120,
694 ( short )0x0090, ( short )0x0088, ( short )0x00A8, ( short )0x00A8,
695 ( short )0x0088, ( short )0x0068, ( short )0x0060, ( short )0xFFE0,
696 ( short )0xFF00, ( short )0xFE50, ( short )0xFDC8, ( short )0xFCF0,
697 ( short )0xFC30, ( short )0xFBB0, ( short )0xFBD8, ( short )0xFC20,
698 ( short )0xFC58, ( short )0xFC30, ( short )0xFC40, ( short )0xFC78,
699 ( short )0xFCC0, ( short )0xFCE8, ( short )0xFD10, ( short )0xFD48,
700 ( short )0xFD88, ( short )0xFDE8, ( short )0xFF10, ( short )0x0020,
701 ( short )0x0110, ( short )0x01B8, ( short )0x0248, ( short )0x02C0,
702 ( short )0x0358, ( short )0x03B8, ( short )0x03C8, ( short )0x0320,
703 ( short )0x0288, ( short )0x0280, ( short )0x0300, ( short )0x0340,
704 ( short )0x0320, ( short )0x0380, ( short )0x03F8, ( short )0x0418,
705 ( short )0x0378, ( short )0x02E0, ( short )0x0288, ( short )0x0280,
706 ( short )0x0238, ( short )0x01D0, ( short )0x0168, ( short )0x0138,
707 ( short )0x0110, ( short )0x0140, ( short )0x0148, ( short )0x0150,
708 ( short )0x00A8, ( short )0x0010, ( short )0xFFB0, ( short )0xFEB8,
709 ( short )0xFDE0, ( short )0xFD48, ( short )0xFCE8, ( short )0xFCA8,
710 ( short )0xFC78, ( short )0xFC48, ( short )0xFC50, ( short )0xFC70,
711 ( short )0xFCA8, ( short )0xFCE8, ( short )0xFD28, ( short )0xFDD0,
712 ( short )0xFE70, ( short )0xFED8, ( short )0x0040, ( short )0x0188,
713 ( short )0x0258, ( short )0x03C0, ( short )0x04F0, ( short )0x05B8,
714 ( short )0x0638, ( short )0x0670, ( short )0x0690, ( short )0x0708,
715 ( short )0x0708, ( short )0x06B8, ( short )0x0660, ( short )0x0650,
716 ( short )0x0630, ( short )0x05C8, ( short )0x0578, ( short )0x0548,
717 ( short )0x0508, ( short )0x0470, ( short )0x03D0, ( short )0x0350,
718 ( short )0x0278, ( short )0x01A0, ( short )0x00F8, ( short )0x00B0,
719 ( short )0x0078, ( short )0x0030, ( short )0xFFE8, ( short )0xFFC8,
720 ( short )0xFFB8, ( short )0xFED0, ( short )0xFE08, ( short )0xFD98,
721 ( short )0xFC70, ( short )0xFB60, ( short )0xFAA8, ( short )0xFA10,
722 ( short )0xF9B8, ( short )0xF980, ( short )0xF9A0, ( short )0xFA00,
723 ( short )0xFA68, ( short )0xFB90, ( short )0xFCB8, ( short )0xFD98,
724 ( short )0xFE68, ( short )0xFF18, ( short )0xFFC0, ( short )0x0078,
725 ( short )0x00F8, ( short )0x0218, ( short )0x0320, ( short )0x03C0,
726 ( short )0x0478, ( short )0x0510, ( short )0x0570, ( short )0x05D8,
727 ( short )0x05E0, ( short )0x05B8, ( short )0x0508, ( short )0x0468,
728 ( short )0x03E0, ( short )0x02F0, ( short )0x0218, ( short )0x0168,
729 ( short )0x00F0, ( short )0x0060, ( short )0xFFD0, ( short )0xFF58,
730 ( short )0xFEC0, ( short )0xFE48, ( short )0xFDB0, ( short )0xFD58,
731 ( short )0xFD38, ( short )0xFCD8, ( short )0xFC80, ( short )0xFC50,
732 ( short )0xFC08, ( short )0xFB48, ( short )0xFA98, ( short )0xF9F8,
733 ( short )0xF8F8, ( short )0xF810, ( short )0xF7F8, ( short )0xF818,
734 ( short )0xF848, ( short )0xF8E8, ( short )0xF9E0, ( short )0xFB08,
735 ( short )0xFC38, ( short )0xFD10, ( short )0xFDE8, ( short )0xFF10,
736 ( short )0xFFD0, ( short )0x0048, ( short )0x00E0, ( short )0x0160,
737 ( short )0x01B8, ( short )0x01C8, ( short )0x01E0, ( short )0x0200,
738 ( short )0x0228, ( short )0x0240, ( short )0x0240, ( short )0x0240,
739 ( short )0x0260, ( short )0x0280, ( short )0x0280, ( short )0x02F0,
740 ( short )0x0370, ( short )0x03C8, ( short )0x03C8, ( short )0x03A8,
741 ( short )0x03A0, ( short )0x02F8, ( short )0x0220, ( short )0x0150,
742 ( short )0x0098, ( short )0xFFE0, ( short )0xFF20, ( short )0xFEA0,
743 ( short )0xFE50, ( short )0xFE18, ( short )0xFD38, ( short )0xFC60,
744 ( short )0xFBE0, ( short )0xFAC8, ( short )0xF9A0, ( short )0xF8B8,
745 ( short )0xF830, ( short )0xF888, ( short )0xF8B8, ( short )0xF908,
746 ( short )0xFA80, ( short )0xFBF8, ( short )0xFD48, ( short )0xFEC8,
747 ( short )0x0040, ( short )0x01B0, ( short )0x0298, ( short )0x0338,
748 ( short )0x03C0, ( short )0x0470, ( short )0x0520, ( short )0x0588,
749 ( short )0x0610, ( short )0x0688, ( short )0x06C8, ( short )0x0670,
750 ( short )0x05E8, ( short )0x0578, ( short )0x0580, ( short )0x0578,
751 ( short )0x0528, ( short )0x0498, ( short )0x0408, ( short )0x0390,
752 ( short )0x03F8, ( short )0x0458, ( short )0x0488, ( short )0x0468,
753 ( short )0x0450, ( short )0x0458, ( short )0x03A8, ( short )0x02D0,
754 ( short )0x0210, ( short )0x0158, ( short )0x0088, ( short )0xFFA8,
755 ( short )0xFF00, ( short )0xFE88, ( short )0xFE30, ( short )0xFD88,
756 ( short )0xFCB8, ( short )0xFC28, ( short )0xFB30, ( short )0xF9F0,
757 ( short )0xF8E8, ( short )0xF890, ( short )0xF890, ( short )0xF8C0,
758 ( short )0xF978, ( short )0xFA78, ( short )0xFBE8, ( short )0xFD20,
759 ( short )0xFE28, ( short )0xFF60, ( short )0x00D8, ( short )0x0220,
760 ( short )0x02F8, ( short )0x0378, ( short )0x03E0, ( short )0x0438,
761 ( short )0x0488, ( short )0x0498, ( short )0x04A8, ( short )0x0480,
762 ( short )0x0440, ( short )0x03C0, ( short )0x02D8, ( short )0x01E8,
763 ( short )0x0140, ( short )0x00D8, ( short )0x0068, ( short )0xFFE0,
764 ( short )0x0068, ( short )0x0130, ( short )0x0228, ( short )0x0260,
765 ( short )0x0278, ( short )0x02D0, ( short )0x02D8, ( short )0x0290,
766 ( short )0x01E0, ( short )0x00D0, ( short )0xFFE0, ( short )0xFEF8,
767 ( short )0xFE08, ( short )0xFD28, ( short )0xFC88, ( short )0xFBE0,
768 ( short )0xFB60, ( short )0xFAD8, ( short )0xFA08, ( short )0xF978,
769 ( short )0xF8E8, ( short )0xF8B0, ( short )0xF8B0, ( short )0xF8D0,
770 ( short )0xF9D0, ( short )0xFAF8, ( short )0xFC18, ( short )0xFDB0,
771 ( short )0xFF38, ( short )0x00A0, ( short )0x01F8, ( short )0x02F8,
772 ( short )0x03C0, ( short )0x0460, ( short )0x04B8, ( short )0x04C8,
773 ( short )0x04C8, ( short )0x04C0, ( short )0x0498, ( short )0x0490,
774 ( short )0x0478, ( short )0x0448, ( short )0x0420, ( short )0x03F8,
775 ( short )0x0328, ( short )0x0238, ( short )0x01B0, ( short )0x0170,
776 ( short )0x0128, ( short )0x0090, ( short )0x00E8, ( short )0x01B8,
777 ( short )0x02B8, ( short )0x0280, ( short )0x0218, ( short )0x0218,
778 ( short )0x01F0, ( short )0x0148, ( short )0x0000, ( short )0xFEC0,
779 ( short )0xFE08, ( short )0xFD70, ( short )0xFCA0, ( short )0xFBF0,
780 ( short )0xFBC0, ( short )0xFBA0, ( short )0xFB80, ( short )0xFB18,
781 ( short )0xFB28, ( short )0xFB98, ( short )0xFBC0, ( short )0xFBD0,
782 ( short )0xFC08, ( short )0xFC78, ( short )0xFDC8, ( short )0xFEC8,
783 ( short )0xFF78, ( short )0x00D0, ( short )0x0238, ( short )0x0360,
784 ( short )0x0398, ( short )0x0360, ( short )0x0368, ( short )0x0380,
785 ( short )0x0318, ( short )0x0250, ( short )0x0208, ( short )0x0220,
786 ( short )0x0218, ( short )0x01F0, ( short )0x01C8, ( short )0x0210,
787 ( short )0x0270, ( short )0x0270, ( short )0x0240, ( short )0x0290,
788 ( short )0x0310, ( short )0x0360, ( short )0x0340, ( short )0x0310,
789 ( short )0x0318, ( short )0x0320, ( short )0x02D8, ( short )0x0240,
790 ( short )0x0158, ( short )0x00A0, ( short )0x0008, ( short )0xFF30,
791 ( short )0xFE50, ( short )0xFDA8, ( short )0xFD28, ( short )0xFCC8,
792 ( short )0xFC60, ( short )0xFBA8, ( short )0xFB40, ( short )0xFB10,
793 ( short )0xFB18, ( short )0xFB28, ( short )0xFB48, ( short )0xFB68,
794 ( short )0xFBA8, ( short )0xFBF8, ( short )0xFCB8, ( short )0xFD78,
795 ( short )0xFE00, ( short )0xFE88, ( short )0xFF30, ( short )0xFF98,
796 ( short )0xFFC8, ( short )0xFFE8, ( short )0x0050, ( short )0x00B0,
797 ( short )0x00E0, ( short )0x0040, ( short )0xFF68, ( short )0xFED8,
798 ( short )0xFEE8, ( short )0xFEE0, ( short )0xFE90, ( short )0xFEA8,
799 ( short )0xFF88, ( short )0x0080, ( short )0x0188, ( short )0x0208,
800 ( short )0x0290, ( short )0x0390, ( short )0x0438, ( short )0x0450,
801 ( short )0x0428, ( short )0x03F8, ( short )0x03E0, ( short )0x0388,
802 ( short )0x02E0, ( short )0x0240, ( short )0x0190, ( short )0x00D0,
803 ( short )0x0000, ( short )0x0000, ( short )0x0018, ( short )0x00FF,
804 ( short )0x0068, ( short )0x00FE, ( short )0x00F8, ( short )0x00FD
805};
806
807gsm_byte gsm_dec_gsmdata[] = {
808 0xD5, 0x1F, 0x74, 0x21, 0xA0, 0x50, 0x40, 0xC9, 0x24, 0x7B, 0xFA, 0x6B,
809 0x52, 0xE0, 0xB6, 0xD6, 0x8E, 0xB9, 0x2B, 0xAE, 0xE0, 0x8B, 0x23, 0x52,
810 0x3B, 0x13, 0x86, 0xE0, 0x14, 0x4A, 0x41, 0x44, 0x32, 0xD3, 0xA1, 0x83,
811 0xA1, 0x1D, 0xA6, 0x80, 0xBA, 0xD2, 0x96, 0x26, 0xFB, 0x84, 0x80, 0x6D,
812 0x9C, 0x25, 0x1D, 0x9B, 0xAA, 0xC0, 0xBB, 0x4C, 0x95, 0xB9, 0x53, 0xAE,
813 0xA0, 0xB6, 0xE4, 0x46, 0x37, 0x1B, 0xD4, 0xA5, 0x7B, 0x1D, 0x22, 0x97,
814 0x00, 0xBA, 0xA5, 0x6D, 0xD2, 0xA1, 0x7E, 0xC0, 0xB9, 0x25, 0xD2, 0xB4,
815 0x94, 0x9E, 0xE0, 0x3E, 0xDE, 0xED, 0xD6, 0xD2, 0xE2, 0xC0, 0xD7, 0x5D,
816 0x8D, 0x59, 0xAC, 0xD3, 0xE4, 0x83, 0x95, 0x59, 0xC0, 0xA1, 0x48, 0xD2,
817 0x66, 0xC7, 0x2C, 0x9E, 0xA0, 0x2A, 0xD3, 0xEE, 0x45, 0x1C, 0x80, 0xE0,
818 0x6B, 0x34, 0x8C, 0x4B, 0x29, 0xCB, 0x00, 0xBA, 0xF6, 0x0D, 0x26, 0x9A,
819 0xD3, 0xA4, 0x82, 0x9D, 0x63, 0x7A, 0xC0, 0x67, 0x24, 0xBA, 0xD6, 0x7C,
820 0xC2, 0xC0, 0x37, 0x20, 0x4F, 0x10, 0xE0, 0xC7, 0x80, 0x6A, 0x77, 0x63,
821 0xBE, 0x6B, 0x5A, 0xC0, 0xB5, 0x34, 0xD1, 0x34, 0x9C, 0xD4, 0xE8, 0x56,
822 0xB2, 0x58, 0x5F, 0x00, 0xB7, 0xAF, 0x92, 0x12, 0x90, 0xD5, 0xA4, 0x39,
823 0x23, 0x4E, 0x46, 0x87, 0x51, 0xAC, 0xD8, 0xDB, 0x6D, 0xCB, 0x17, 0x50,
824 0x89, 0x7B, 0x44, 0x28, 0x03, 0x6B, 0xD5, 0xA9, 0x36, 0x36, 0xD9, 0x6B,
825 0xA8, 0x93, 0x3A, 0x96, 0xEE, 0xFF, 0x67, 0x8B, 0x36, 0xDA, 0x09, 0xB4,
826 0x99, 0x67, 0x2B, 0x88, 0xE4, 0xB5, 0xA5, 0xDA, 0x65, 0x47, 0xDA, 0x1E,
827 0x96, 0xFA, 0xEC, 0xD5, 0xA9, 0x45, 0x63, 0x1A, 0xCB, 0xC9, 0x48, 0x9D,
828 0x83, 0x5F, 0x6F, 0xCB, 0x08, 0x1B, 0x97, 0xC9, 0x18, 0x0A, 0x63, 0xCB,
829 0xA6, 0xE1, 0x84, 0xF5, 0x62, 0x61, 0x6A, 0x84, 0xDC, 0xB6, 0x37, 0x9E,
830 0xD6, 0xAB, 0x3C, 0x53, 0x93, 0xC1, 0x2A, 0xAA, 0x81, 0x8D, 0x6B, 0x65,
831 0x60, 0xA8, 0xFB, 0x2E, 0x22, 0x59, 0x74, 0x61, 0xA6, 0x5D, 0x73, 0x94,
832 0xF8, 0xE4, 0xC1, 0x46, 0x26, 0x5E, 0x8A, 0x86, 0xED, 0xD4, 0xA6, 0x2D,
833 0x57, 0x6B, 0xBE, 0xE8, 0x58, 0xDA, 0x3D, 0x98, 0x99, 0xBE, 0xA8, 0xC2,
834 0xDB, 0x6A, 0x2E, 0x51, 0x62, 0xE5, 0x80, 0x58, 0x76, 0xB8, 0xE4, 0x6C,
835 0x84, 0xCA, 0x98, 0x06, 0x0B, 0xFC, 0xD2, 0x66, 0x7C, 0x62, 0x3A, 0x5B,
836 0xC5, 0xDF, 0x7D, 0x75, 0x49, 0x1E, 0x52, 0xC7, 0x55, 0xF7, 0x84, 0xA6,
837 0xDA, 0x5D, 0x43, 0x26, 0x85, 0x98, 0xD8, 0x8F, 0xB6, 0xC5, 0x28, 0xEB,
838 0x3E, 0x75, 0x04, 0xD2, 0x27, 0xBA, 0x2A, 0x2B, 0xB7, 0x03, 0x13, 0x45,
839 0x35, 0x1B, 0x78, 0x5F, 0xC3, 0xBA, 0xDB, 0xAE, 0x27, 0xC2, 0x5E, 0xA4,
840 0x50, 0x8C, 0x8A, 0xBB, 0x4F, 0x60, 0xC3, 0xEE, 0x41, 0x46, 0x4A, 0xDF,
841 0xD2, 0x27, 0xB2, 0xAD, 0xEB, 0x5F, 0x43, 0x4C, 0x6A, 0x09, 0x2A, 0xCC,
842 0xB7, 0x47, 0x2A, 0xB9, 0x91, 0xB6, 0xD4, 0x5B, 0x25, 0x58, 0xD8, 0xFD,
843 0x46, 0x95, 0x5A, 0xC3, 0x27, 0x5B, 0x3F, 0xFB, 0x12, 0xD2, 0x26, 0xC3,
844 0xA9, 0xA1, 0xB6, 0xA2, 0xCB, 0x1B, 0xD0, 0x73, 0xE4, 0xBA, 0xA1, 0xE9,
845 0x05, 0xBE, 0x79, 0x23, 0xA4, 0xC2, 0x3A, 0x4B, 0x11, 0xE5, 0x68, 0xC4,
846 0xC1, 0xBA, 0xC1, 0xCC, 0x8B, 0x02, 0xD2, 0x63, 0x6C, 0xEE, 0x19, 0x5E,
847 0xE1, 0xB6, 0x4C, 0x1A, 0xB4, 0x5E, 0xF0, 0xC2, 0x27, 0x20, 0x55, 0xBD,
848 0x6D, 0x64, 0xE1, 0xC7, 0x45, 0xA9, 0x65, 0x6D, 0x7D, 0x42, 0x56, 0xD8,
849 0xB2, 0xB6, 0xEC, 0xD3, 0x61, 0x5B, 0x62, 0x61, 0x60, 0xA1, 0x5B, 0xD6,
850 0x15, 0x29, 0x09, 0x6C, 0xA1, 0x3E, 0xAD, 0x65, 0x34, 0xC3, 0xC0, 0xC1,
851 0x22, 0x6D, 0x4C, 0x57, 0x10, 0xDB, 0x41, 0xD2, 0xE1, 0x77, 0x64, 0xF7,
852 0xD3, 0x21, 0x73, 0xA9, 0x29, 0x58, 0xC1, 0xA1, 0x5A, 0x52, 0xB7, 0x32,
853 0x64, 0xC1, 0x67, 0x42, 0x74, 0x2C, 0xDC, 0x61, 0x61, 0x65, 0x8B, 0xCB,
854 0x04, 0xE5, 0x60, 0xC1, 0xC9, 0x5E, 0x8E, 0x36, 0x83, 0xD2, 0xA2, 0x83,
855 0xA9, 0xD9, 0xCD, 0x21, 0xB9, 0x25, 0xCD, 0xE6, 0x1D, 0x60, 0xA1, 0xB4,
856 0xAA, 0x8F, 0xBA, 0x75, 0xC3, 0x01, 0x0B, 0x3B, 0x51, 0xDB, 0xEC, 0x62,
857 0xE1, 0x38, 0xCD, 0x40, 0x3B, 0xD3, 0xD2, 0x26, 0x94, 0x29, 0xD2, 0x61,
858 0x21, 0x6B, 0x4A, 0x8D, 0x24, 0xB5, 0xBB, 0x21, 0x12, 0xA5, 0x99, 0xA5,
859 0x1A, 0xCA, 0xA1, 0xEF, 0x5D, 0xAA, 0xAE, 0xD3, 0x64, 0xE1, 0xA3, 0x6B,
860 0xAE, 0x35, 0x39, 0xD2, 0x66, 0x73, 0xB6, 0x90, 0xC6, 0xC1, 0x32, 0xD1,
861 0xBA, 0xC9, 0x25, 0x65, 0x81, 0xA8, 0xD2, 0xB1, 0xE7, 0x18, 0xBE, 0xC0,
862 0xFC, 0xE4, 0x85, 0xB5, 0x06, 0xB4, 0x81, 0x35, 0x46, 0xB6, 0xC8, 0x9B
863};
864
865#endif /* GSM_DEC_DATA_H */
diff --git a/all_pairs/source/gsm_dec/gsm.h b/all_pairs/source/gsm_dec/gsm.h
new file mode 100644
index 0000000..1d89577
--- /dev/null
+++ b/all_pairs/source/gsm_dec/gsm.h
@@ -0,0 +1,14 @@
1#ifndef GSM_DEC_GSM_H
2#define GSM_DEC_GSM_H
3
4/*
5 Interface
6*/
7typedef struct gsm_state *gsm;
8typedef short gsm_signal; /* signed 16 bit */
9typedef unsigned char gsm_byte;
10typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */
11
12#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */
13
14#endif /* GSM_DEC_GSM_H */
diff --git a/all_pairs/source/gsm_dec/gsm_dec.c b/all_pairs/source/gsm_dec/gsm_dec.c
new file mode 100644
index 0000000..7a0a1bd
--- /dev/null
+++ b/all_pairs/source/gsm_dec/gsm_dec.c
@@ -0,0 +1,764 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: gsm_dec
7
8 Author: Jutta Degener and Carsten Bormann,
9 Technische Universitaet Berlin
10
11 Function: Decoding of GSM data
12
13 Source: included in MediaBench/gsm
14
15 Original name: gsm_decode
16
17 Changes: no major functional changes
18
19 License: see the accompanying COPYRIGHT file
20
21*/
22
23
24#include "../extra.h"
25#include "gsm.h"
26#include "add.h"
27#include "data.h"
28#include "private.h"
29
30#define SAMPLES 20
31
32/*
33 Forward declaration of global variables
34*/
35
36struct gsm_state gsm_dec_state;
37gsm gsm_dec_state_ptr;
38volatile int gsm_dec_result;
39
40/*
41 Forward declaration of functions
42*/
43
44extern word gsm_dec_sub( word a, word b );
45extern word gsm_dec_asl( word a, int n );
46void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios(
47 word *LARc, /* coded log area ratio [0..7] IN */
48 word *LARpp ); /* out: decoded .. */
49
50void gsm_dec_Coefficients_0_12( word *LARpp_j_1, word *LARpp_j, word *LARp );
51
52void gsm_dec_LARp_to_rp( word *LARp ); /* [0..7] IN/OUT */
53
54extern int gsm_dec_decode( gsm, gsm_byte *, gsm_signal * );
55
56extern void gsm_dec_Decoder( struct gsm_state *S,
57 word *LARcr, /* [0..7] IN */
58 word *Ncr, /* [0..3] IN */
59 word *bcr, /* [0..3] IN */
60 word *Mcr, /* [0..3] IN */
61 word *xmaxcr, /* [0..3] IN */
62 word *xMcr, /* [0..13*4] IN */
63 word *s ); /* [0..159] OUT */
64
65extern void gsm_dec_Long_Term_Synthesis_Filtering(
66 struct gsm_state *S, word Ncr, word bcr,
67 word *erp, /* [0..39] IN */
68 word *drp ); /* [-120..-1] IN, [0..40] OUT */
69
70void gsm_dec_RPE_Decoding( word xmaxcr, word Mcr,
71 word *xMcr, /* [0..12], 3 bits IN */
72 word *erp ); /* [0..39] OUT */
73
74void gsm_dec_RPE_grid_positioning( word Mc, /* grid position IN */
75 word *xMp, /* [0..12] IN */
76 word *ep /* [0..39] OUT */
77 );
78
79void gsm_dec_APCM_inverse_quantization( word *xMc, /* [0..12] IN */
80 word mant, word exp,
81 word *xMp ); /* [0..12] OUT */
82
83extern word gsm_dec_asr( word a, int n );
84
85void gsm_dec_APCM_quantization_xmaxc_to_exp_mant(
86 word xmaxc, /* IN */
87 word *exp_out, /* OUT */
88 word *mant_out ); /* OUT */
89
90void gsm_dec_Postprocessing( struct gsm_state *S, word *s );
91
92void gsm_dec_Coefficients_13_26( word *LARpp_j_1, word *LARpp_j,
93 word *LARp );
94
95void gsm_dec_Coefficients_40_159( word *LARpp_j, word *LARp );
96
97void gsm_dec_Short_term_synthesis_filtering( struct gsm_state *S,
98 word *rrp, /* [0..7] IN */
99 int k, /* k_end - k_start */
100 word *wt, /* [0..k-1] IN */
101 word *sr /* [0..k-1] OUT */
102 );
103
104void gsm_dec_Short_Term_Synthesis_Filter(
105 struct gsm_state *S, word *LARcr, /* received log area ratios [0..7] IN */
106 word *wt, /* received d [0..159] IN */
107 word *s /* signal s [0..159] OUT */
108);
109
110void gsm_dec_Coefficients_27_39( word *LARpp_j_1, word *LARpp_j, word *LARp );
111
112gsm gsm_dec_create( void );
113void gsm_dec_init( void );
114void gsm_dec_main( void );
115//int main( void );
116
117/* add.c */
118
119word gsm_dec_sub( word a, word b )
120{
121 longword diff = ( longword )a - ( longword )b;
122 return saturate( diff );
123}
124
125word gsm_dec_asl( word a, int n )
126{
127 if ( n >= 16 )
128 return 0;
129 if ( n <= -16 )
130 return -( a < 0 );
131 if ( n < 0 )
132 return gsm_dec_asr( a, -n );
133 return a << n;
134}
135
136/* short_term.c */
137/*
138 SHORT TERM ANALYSIS FILTERING SECTION
139*/
140
141/* 4.2.8 */
142
143void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios(
144 word *LARc, /* coded log area ratio [0..7] IN */
145 word *LARpp ) /* out: decoded .. */
146{
147 word temp1 /* for STEP */;
148 long ltmp; /* for GSM_ADD */
149
150 /* This procedure requires for efficient implementation
151 two tables.
152
153 INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
154 MIC[1..8] = minimum value of the LARc[1..8]
155 */
156
157 /* Compute the LARpp[1..8]
158 */
159
160 /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) {
161
162 temp1 = GSM_ADD( *LARc, *MIC ) << 10;
163 temp2 = *B << 1;
164 temp1 = GSM_SUB( temp1, temp2 );
165
166 temp1 = GSM_MULT_R( *INVA, temp1 );
167 LARpp = GSM_ADD( temp1, temp1 );
168 }
169 */
170
171#undef STEP
172#define STEP(B, MIC, INVA) \
173 temp1 = GSM_ADD(*LARc++, MIC) << 10; \
174 temp1 = GSM_SUB(temp1, B << 1); \
175 temp1 = GSM_MULT_R(INVA, temp1); \
176 *LARpp++ = GSM_ADD(temp1, temp1);
177
178 STEP( 0, -32, 13107 );
179 STEP( 0, -32, 13107 );
180 STEP( 2048, -16, 13107 );
181 STEP( 2560, -16, 13107 );
182
183 STEP( 94, -8, 19223 );
184 STEP( 1792, -8, 17476 );
185 STEP( 341, -4, 31454 );
186 STEP( 1144, -4, 29708 );
187
188 /* NOTE: the addition of *MIC is used to restore the sign of *LARc.
189 */
190}
191
192/* 4.2.9 */
193/* Computation of the quantized reflection coefficients
194*/
195
196/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8]
197*/
198
199/*
200 Within each frame of 160 analyzed speech samples the short term
201 analysis and synthesis filters operate with four different sets of
202 coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
203 and the actual set of decoded LARs (LARpp(j))
204
205 (Initial value: LARpp(j-1)[1..8] = 0.)
206*/
207
208
209void gsm_dec_Coefficients_0_12( word *LARpp_j_1, word *LARpp_j, word *LARp )
210{
211 int i;
212 longword ltmp;
213
214 _Pragma( "loopbound min 8 max 8" )
215 for ( i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++ ) {
216 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ) );
217 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1 ) );
218 }
219}
220
221/* 4.2.9.2 */
222
223void gsm_dec_LARp_to_rp( word *LARp ) /* [0..7] IN/OUT */
224/*
225 The input of this procedure is the interpolated LARp[0..7] array.
226 The reflection coefficients, rp[i], are used in the analysis
227 filter and in the synthesis filter.
228*/
229{
230 int i;
231 word temp;
232 longword ltmp;
233
234 _Pragma( "loopbound min 8 max 8" )
235 for ( i = 1; i <= 8; i++, LARp++ ) {
236
237 /* temp = GSM_ABS( *LARp );
238
239 if (temp < 11059) temp <<= 1;
240 else if (temp < 20070) temp += 11059;
241 else temp = GSM_ADD( temp >> 2, 26112 );
242
243 * *LARp = *LARp < 0 ? -temp : temp;
244 */
245
246 if ( *LARp < 0 ) {
247 temp = *LARp == MIN_WORD ? MAX_WORD : -( *LARp );
248 *LARp = -( ( temp < 11059 ) ? temp << 1
249 : ( ( temp < 20070 ) ? temp + 11059
250 : GSM_ADD( temp >> 2, 26112 ) ) );
251 } else {
252 temp = *LARp;
253 *LARp = ( temp < 11059 )
254 ? temp << 1
255 : ( ( temp < 20070 ) ? temp + 11059 : GSM_ADD( temp >> 2, 26112 ) );
256 }
257 }
258}
259
260void gsm_dec_Decoder( struct gsm_state *S,
261 word *LARcr, /* [0..7] IN */
262 word *Ncr, /* [0..3] IN */
263 word *bcr, /* [0..3] IN */
264 word *Mcr, /* [0..3] IN */
265 word *xmaxcr, /* [0..3] IN */
266 word *xMcr, /* [0..13*4] IN */
267 word *s ) /* [0..159] OUT */
268{
269 int j, k;
270 word erp[40], wt[160];
271 word *drp = S->dp0 + 120;
272
273 _Pragma( "loopbound min 4 max 4" )
274 for ( j = 0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13 ) {
275
276 gsm_dec_RPE_Decoding( *xmaxcr, *Mcr, xMcr, erp );
277 gsm_dec_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp );
278
279 _Pragma( "loopbound min 40 max 40" )
280 for ( k = 0; k <= 39; k++ )
281 wt[j * 40 + k] = drp[k];
282 }
283
284 gsm_dec_Short_Term_Synthesis_Filter( S, LARcr, wt, s );
285 gsm_dec_Postprocessing( S, s );
286}
287
288/* 4.3.2 */
289void gsm_dec_Long_Term_Synthesis_Filtering(
290 struct gsm_state *S,
291 word Ncr, word bcr, word *erp, /* [0..39] IN */
292 word *drp /* [-120..-1] IN, [0..40] OUT */
293)
294/*
295 This procedure uses the bcr and Ncr parameter to realize the
296 long term synthesis filtering. The decoding of bcr needs
297 table 4.3b.
298*/
299{
300 longword ltmp; /* for ADD */
301 int k;
302 word brp, drpp, Nr;
303
304 /* Check the limits of Nr.
305 */
306 Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr;
307 S->nrp = Nr;
308
309 /* Decoding of the LTP gain bcr
310 */
311 brp = gsm_dec_QLB[bcr];
312
313 /* Computation of the reconstructed short term residual
314 signal drp[0..39]
315 */
316
317 _Pragma( "loopbound min 40 max 40" )
318 for ( k = 0; k <= 39; k++ ) {
319 drpp = GSM_MULT_R( brp, drp[k - Nr] );
320 drp[k] = GSM_ADD( erp[k], drpp );
321 }
322
323 /*
324 Update of the reconstructed short term residual signal
325 drp[ -1..-120 ]
326 */
327
328 _Pragma( "loopbound min 120 max 120" )
329 for ( k = 0; k <= 119; k++ )
330 drp[-120 + k] = drp[-80 + k];
331}
332
333void gsm_dec_RPE_Decoding( word xmaxcr, word Mcr,
334 word *xMcr, /* [0..12], 3 bits IN */
335 word *erp ) /* [0..39] OUT */
336{
337 word exp, mant;
338 word xMp[13];
339
340 gsm_dec_APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant );
341 gsm_dec_APCM_inverse_quantization( xMcr, mant, exp, xMp );
342 gsm_dec_RPE_grid_positioning( Mcr, xMp, erp );
343}
344
345/* 4.2.17 */
346void gsm_dec_RPE_grid_positioning(
347 word Mc, /* grid position IN */
348 word *xMp, /* [0..12] IN */
349 word *ep /* [0..39] OUT */ )
350/*
351 This procedure computes the reconstructed long term residual signal
352 ep[0..39] for the LTP analysis filter. The inputs are the Mc
353 which is the grid position selection and the xMp[0..12] decoded
354 RPE samples which are upsampled by a factor of 3 by inserting zero
355 values.
356*/
357{
358 int i = 13;
359
360 /* Rewritten Duff's device for WCET analysis! */
361 switch ( Mc ) {
362 case 3:
363 *ep++ = 0;
364 case 2:
365 *ep++ = 0;
366 case 1:
367 *ep++ = 0;
368 case 0:
369 *ep++ = *xMp++;
370 i--;
371 }
372
373 _Pragma( "loopbound min 12 max 12" )
374 do {
375 *ep++ = 0;
376 *ep++ = 0;
377 *ep++ = *xMp++;
378 } while ( --i );
379
380 _Pragma( "loopbound min 0 max 2" )
381 while ( ++Mc < 4 )
382 *ep++ = 0;
383
384}
385
386/* 4.2.16 */
387void gsm_dec_APCM_inverse_quantization( word *xMc, /* [0..12] IN */
388 word mant,
389 word exp,
390 word *xMp ) /* [0..12] OUT */
391/*
392 This part is for decoding the RPE sequence of coded xMc[0..12]
393 samples to obtain the xMp[0..12] array. Table 4.6 is used to get
394 the mantissa of xmaxc (FAC[0..7]).
395*/
396{
397 int i;
398 word temp, temp1, temp2, temp3;
399 longword ltmp;
400
401 temp1 = gsm_dec_FAC[mant]; /* see 4.2-15 for mant */
402 temp2 = gsm_dec_sub( 6, exp ); /* see 4.2-15 for exp */
403 temp3 = gsm_dec_asl( 1, gsm_dec_sub( temp2, 1 ) );
404
405 _Pragma( "loopbound min 13 max 13" )
406 for ( i = 13; i--; ) {
407
408 /* temp = gsm_sub( *xMc++ << 1, 7 ); */
409 temp = ( *xMc++ << 1 ) - 7; /* restore sign */
410
411 temp <<= 12; /* 16 bit signed */
412 temp = GSM_MULT_R( temp1, temp );
413 temp = GSM_ADD( temp, temp3 );
414 *xMp++ = gsm_dec_asr( temp, temp2 );
415 }
416}
417
418/*
419 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
420*/
421word gsm_dec_asr( word a, int n )
422{
423 if ( n >= 16 )
424 return -( a < 0 );
425 if ( n <= -16 )
426 return 0;
427 if ( n < 0 )
428 return a << -n;
429
430 return a >> n;
431}
432
433/* rpe.c */
434/* 4.12.15 */
435void gsm_dec_APCM_quantization_xmaxc_to_exp_mant( word xmaxc, /* IN */
436 word *exp_out, /* OUT */
437 word *mant_out ) /* OUT */
438{
439 word exp, mant;
440
441 /* Compute exponent and mantissa of the decoded version of xmaxc
442 */
443 exp = 0;
444 if ( xmaxc > 15 )
445 exp = SASR( xmaxc, 3 ) - 1;
446 mant = xmaxc - ( exp << 3 );
447
448 if ( mant == 0 ) {
449 exp = -4;
450 mant = 7;
451 } else {
452 _Pragma( "loopbound min 0 max 3" )
453 while ( mant <= 7 ) {
454 mant = mant << 1 | 1;
455 exp--;
456 }
457 mant -= 8;
458 }
459
460 *exp_out = exp;
461 *mant_out = mant;
462}
463
464/* decode.c */
465/*
466 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER
467*/
468void gsm_dec_Postprocessing( struct gsm_state *S, word *s )
469{
470 int k;
471 word msr = S->msr;
472 longword ltmp; /* for GSM_ADD */
473 word tmp;
474
475 _Pragma( "loopbound min 159 max 159" )
476 for ( k = 160; --k; ++s ) {
477 tmp = GSM_MULT_R( msr, 28180 );
478 msr = GSM_ADD( *s, tmp ); /* Deemphasis */
479 *s = GSM_ADD( msr, msr ) & 0xFFF8; /* Truncation & Upscaling */
480 }
481 S->msr = msr;
482}
483
484void gsm_dec_Coefficients_13_26( word *LARpp_j_1, word *LARpp_j, word *LARp )
485{
486 int i;
487 longword ltmp;
488 _Pragma( "loopbound min 8 max 8" )
489 for ( i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++ )
490 *LARp = GSM_ADD( SASR( *LARpp_j_1, 1 ), SASR( *LARpp_j, 1 ) );
491}
492
493void gsm_dec_Coefficients_40_159( word *LARpp_j, word *LARp )
494{
495 int i;
496
497 _Pragma( "loopbound min 8 max 8" )
498 for ( i = 1; i <= 8; i++, LARp++, LARpp_j++ )
499 *LARp = *LARpp_j;
500}
501
502void gsm_dec_Short_term_synthesis_filtering( struct gsm_state *S,
503 word *rrp, /* [0..7] IN */
504 int k, /* k_end - k_start */
505 word *wt, /* [0..k-1] IN */
506 word *sr ) /* [0..k-1] OUT */
507{
508 word *v = S->v;
509 int i;
510 word sri, tmp1, tmp2;
511 longword ltmp; /* for GSM_ADD & GSM_SUB */
512
513 _Pragma( "loopbound min 12 max 118" )
514 while ( --k ) {
515 sri = *wt++;
516 _Pragma( "loopbound min 8 max 8" )
517 for ( i = 8; i--; ) {
518
519 /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) );
520 */
521 tmp1 = rrp[i];
522 tmp2 = v[i];
523 tmp2 =
524 ( tmp1 == MIN_WORD && tmp2 == MIN_WORD
525 ? MAX_WORD
526 : 0x0FFFF & ( ( ( longword )tmp1 * ( longword )tmp2 + 16384 ) >> 15 ) );
527
528 sri = GSM_SUB( sri, tmp2 );
529
530 /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) );
531 */
532 tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD
533 ? MAX_WORD
534 : 0x0FFFF & ( ( ( longword )tmp1 * ( longword )sri + 16384 ) >> 15 ) );
535
536 v[i + 1] = GSM_ADD( v[i], tmp1 );
537 }
538 *sr++ = v[0] = sri;
539 }
540}
541
542void gsm_dec_Short_Term_Synthesis_Filter(
543 struct gsm_state *S,
544 word *LARcr, /* received log area ratios [0..7] IN */
545 word *wt, /* received d [0..159] IN */
546 word *s /* signal s [0..159] OUT */
547)
548{
549 word *LARpp_j = S->LARpp[S->j];
550 word *LARpp_j_1 = S->LARpp[S->j ^= 1];
551
552 word LARp[8];
553
554 gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j );
555
556 gsm_dec_Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
557 gsm_dec_LARp_to_rp( LARp );
558 gsm_dec_Short_term_synthesis_filtering( S, LARp, 13, wt, s );
559
560 gsm_dec_Coefficients_13_26( LARpp_j_1, LARpp_j, LARp );
561 gsm_dec_LARp_to_rp( LARp );
562 gsm_dec_Short_term_synthesis_filtering( S, LARp, 14, wt + 13, s + 13 );
563
564 gsm_dec_Coefficients_27_39( LARpp_j_1, LARpp_j, LARp );
565 gsm_dec_LARp_to_rp( LARp );
566 gsm_dec_Short_term_synthesis_filtering( S, LARp, 13, wt + 27, s + 27 );
567
568 gsm_dec_Coefficients_40_159( LARpp_j, LARp );
569 gsm_dec_LARp_to_rp( LARp );
570 gsm_dec_Short_term_synthesis_filtering( S, LARp, 120, wt + 40, s + 40 );
571}
572
573void gsm_dec_Coefficients_27_39( word *LARpp_j_1, word *LARpp_j, word *LARp )
574{
575 int i;
576 longword ltmp;
577
578 _Pragma( "loopbound min 8 max 8" )
579 for ( i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++ ) {
580 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ) );
581 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 ) );
582 }
583}
584
585/*
586 Initialization- and return-value-related functions
587*/
588
589gsm gsm_dec_create( void )
590{
591 unsigned int i;
592 gsm r;
593 volatile char x = 0;
594
595 r = &gsm_dec_state;
596
597 _Pragma( "loopbound min 648 max 648" )
598 for ( i = 0; i < sizeof( *r ); i++ )
599 ( ( char * )r )[i] = 0 + x;
600
601 r->nrp = 40;
602
603 return r;
604}
605
606void gsm_dec_init( void )
607{
608 gsm_dec_state_ptr = gsm_dec_create();
609}
610
611int gsm_dec_return( void )
612{
613 return gsm_dec_result;
614}
615
616/*
617 Main functions
618*/
619
620/* gsm_decode.c */
621int gsm_dec_decode( gsm s, gsm_byte *c, gsm_signal *target )
622{
623 word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13 * 4];
624
625 /* GSM_MAGIC = (*c >> 4) & 0xF; */
626
627 if ( ( ( *c >> 4 ) & 0x0F ) != GSM_MAGIC )
628 return -1;
629
630 LARc[0] = ( *c++ & 0xF ) << 2; /* 1 */
631 LARc[0] |= ( *c >> 6 ) & 0x3;
632 LARc[1] = *c++ & 0x3F;
633 LARc[2] = ( *c >> 3 ) & 0x1F;
634 LARc[3] = ( *c++ & 0x7 ) << 2;
635 LARc[3] |= ( *c >> 6 ) & 0x3;
636 LARc[4] = ( *c >> 2 ) & 0xF;
637 LARc[5] = ( *c++ & 0x3 ) << 2;
638 LARc[5] |= ( *c >> 6 ) & 0x3;
639 LARc[6] = ( *c >> 3 ) & 0x7;
640 LARc[7] = *c++ & 0x7;
641 Nc[0] = ( *c >> 1 ) & 0x7F;
642 bc[0] = ( *c++ & 0x1 ) << 1;
643 bc[0] |= ( *c >> 7 ) & 0x1;
644 Mc[0] = ( *c >> 5 ) & 0x3;
645 xmaxc[0] = ( *c++ & 0x1F ) << 1;
646 xmaxc[0] |= ( *c >> 7 ) & 0x1;
647 xmc[0] = ( *c >> 4 ) & 0x7;
648 xmc[1] = ( *c >> 1 ) & 0x7;
649 xmc[2] = ( *c++ & 0x1 ) << 2;
650 xmc[2] |= ( *c >> 6 ) & 0x3;
651 xmc[3] = ( *c >> 3 ) & 0x7;
652 xmc[4] = *c++ & 0x7;
653 xmc[5] = ( *c >> 5 ) & 0x7;
654 xmc[6] = ( *c >> 2 ) & 0x7;
655 xmc[7] = ( *c++ & 0x3 ) << 1; /* 10 */
656 xmc[7] |= ( *c >> 7 ) & 0x1;
657 xmc[8] = ( *c >> 4 ) & 0x7;
658 xmc[9] = ( *c >> 1 ) & 0x7;
659 xmc[10] = ( *c++ & 0x1 ) << 2;
660 xmc[10] |= ( *c >> 6 ) & 0x3;
661 xmc[11] = ( *c >> 3 ) & 0x7;
662 xmc[12] = *c++ & 0x7;
663 Nc[1] = ( *c >> 1 ) & 0x7F;
664 bc[1] = ( *c++ & 0x1 ) << 1;
665 bc[1] |= ( *c >> 7 ) & 0x1;
666 Mc[1] = ( *c >> 5 ) & 0x3;
667 xmaxc[1] = ( *c++ & 0x1F ) << 1;
668 xmaxc[1] |= ( *c >> 7 ) & 0x1;
669 xmc[13] = ( *c >> 4 ) & 0x7;
670 xmc[14] = ( *c >> 1 ) & 0x7;
671 xmc[15] = ( *c++ & 0x1 ) << 2;
672 xmc[15] |= ( *c >> 6 ) & 0x3;
673 xmc[16] = ( *c >> 3 ) & 0x7;
674 xmc[17] = *c++ & 0x7;
675 xmc[18] = ( *c >> 5 ) & 0x7;
676 xmc[19] = ( *c >> 2 ) & 0x7;
677 xmc[20] = ( *c++ & 0x3 ) << 1;
678 xmc[20] |= ( *c >> 7 ) & 0x1;
679 xmc[21] = ( *c >> 4 ) & 0x7;
680 xmc[22] = ( *c >> 1 ) & 0x7;
681 xmc[23] = ( *c++ & 0x1 ) << 2;
682 xmc[23] |= ( *c >> 6 ) & 0x3;
683 xmc[24] = ( *c >> 3 ) & 0x7;
684 xmc[25] = *c++ & 0x7;
685 Nc[2] = ( *c >> 1 ) & 0x7F;
686 bc[2] = ( *c++ & 0x1 ) << 1; /* 20 */
687 bc[2] |= ( *c >> 7 ) & 0x1;
688 Mc[2] = ( *c >> 5 ) & 0x3;
689 xmaxc[2] = ( *c++ & 0x1F ) << 1;
690 xmaxc[2] |= ( *c >> 7 ) & 0x1;
691 xmc[26] = ( *c >> 4 ) & 0x7;
692 xmc[27] = ( *c >> 1 ) & 0x7;
693 xmc[28] = ( *c++ & 0x1 ) << 2;
694 xmc[28] |= ( *c >> 6 ) & 0x3;
695 xmc[29] = ( *c >> 3 ) & 0x7;
696 xmc[30] = *c++ & 0x7;
697 xmc[31] = ( *c >> 5 ) & 0x7;
698 xmc[32] = ( *c >> 2 ) & 0x7;
699 xmc[33] = ( *c++ & 0x3 ) << 1;
700 xmc[33] |= ( *c >> 7 ) & 0x1;
701 xmc[34] = ( *c >> 4 ) & 0x7;
702 xmc[35] = ( *c >> 1 ) & 0x7;
703 xmc[36] = ( *c++ & 0x1 ) << 2;
704 xmc[36] |= ( *c >> 6 ) & 0x3;
705 xmc[37] = ( *c >> 3 ) & 0x7;
706 xmc[38] = *c++ & 0x7;
707 Nc[3] = ( *c >> 1 ) & 0x7F;
708 bc[3] = ( *c++ & 0x1 ) << 1;
709 bc[3] |= ( *c >> 7 ) & 0x1;
710 Mc[3] = ( *c >> 5 ) & 0x3;
711 xmaxc[3] = ( *c++ & 0x1F ) << 1;
712 xmaxc[3] |= ( *c >> 7 ) & 0x1;
713 xmc[39] = ( *c >> 4 ) & 0x7;
714 xmc[40] = ( *c >> 1 ) & 0x7;
715 xmc[41] = ( *c++ & 0x1 ) << 2;
716 xmc[41] |= ( *c >> 6 ) & 0x3;
717 xmc[42] = ( *c >> 3 ) & 0x7;
718 xmc[43] = *c++ & 0x7; /* 30 */
719 xmc[44] = ( *c >> 5 ) & 0x7;
720 xmc[45] = ( *c >> 2 ) & 0x7;
721 xmc[46] = ( *c++ & 0x3 ) << 1;
722 xmc[46] |= ( *c >> 7 ) & 0x1;
723 xmc[47] = ( *c >> 4 ) & 0x7;
724 xmc[48] = ( *c >> 1 ) & 0x7;
725 xmc[49] = ( *c++ & 0x1 ) << 2;
726 xmc[49] |= ( *c >> 6 ) & 0x3;
727 xmc[50] = ( *c >> 3 ) & 0x7;
728 xmc[51] = *c & 0x7; /* 33 */
729
730 gsm_dec_Decoder( s, LARc, Nc, bc, Mc, xmaxc, xmc, target );
731
732 return 0;
733}
734
735void _Pragma( "entrypoint" ) gsm_dec_main( void )
736{
737 gsm r;
738 unsigned i;
739 gsm_dec_result = 0;
740
741 r = gsm_dec_state_ptr;
742
743 _Pragma( "loopbound min 1 max 1" )
744 for ( i = 0; i < SAMPLES; i++ ) {
745 if ( gsm_dec_decode( r, gsm_dec_gsmdata + i * sizeof( gsm_frame ),
746 gsm_dec_pcmdata + i * 160 ) ) {
747 gsm_dec_result = 1;
748 return;
749 }
750 }
751}
752
753int main( int argc, char **argv)
754{
755 SET_UP
756 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
757 START_LOOP
758 gsm_dec_init();
759 gsm_dec_main();
760 STOP_LOOP
761 }
762 WRITE_TO_FILE
763 return ( gsm_dec_return() );
764}
diff --git a/all_pairs/source/gsm_dec/private.h b/all_pairs/source/gsm_dec/private.h
new file mode 100644
index 0000000..80b5c83
--- /dev/null
+++ b/all_pairs/source/gsm_dec/private.h
@@ -0,0 +1,44 @@
1#ifndef GSM_DEC_PRIVATE_H
2#define GSM_DEC_PRIVATE_H
3
4typedef short word; /* 16 bit signed int */
5typedef long longword; /* 32 bit signed int */
6
7typedef unsigned short uword; /* unsigned word */
8typedef unsigned long ulongword; /* unsigned longword */
9
10/* Table 4.6 Normalized direct mantissa used to compute xM/xmax
11*/
12/* i 0 1 2 3 4 5 6 7 */
13word gsm_dec_FAC[8] = {
14 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 };
15
16struct gsm_state {
17 word dp0[ 280 ];
18 word z1; /* preprocessing.c, Offset_com. */
19 longword L_z2; /* Offset_com. */
20 int mp; /* Preemphasis */
21 word u[8]; /* short_term_aly_filter.c */
22 word LARpp[2][8]; /* */
23 word j; /* */
24 word nrp; /* 40 */ /* long_term.c, synthesis */
25 word v[9]; /* short_term.c, synthesis */
26 word msr; /* decoder.c, Postprocessing */
27};
28
29
30#define MIN_WORD ((-32767)-1)
31#define MAX_WORD ( 32767)
32
33#define MIN_LONGWORD ((-2147483647)-1)
34#define MAX_LONGWORD ( 2147483647)
35
36/* >> is a signed arithmetic shift right */
37#define SASR(x, by) ((x) >> (by))
38
39/* Table 4.3b Quantization levels of the LTP gain quantizer
40*/
41/* bc 0 1 2 3 */
42word gsm_dec_QLB[4] = { 3277, 11469, 21299, 32767 };
43
44#endif /* GSM_DEC_PRIVATE_H */
diff --git a/all_pairs/source/gsm_enc/COPYRIGHT b/all_pairs/source/gsm_enc/COPYRIGHT
new file mode 100644
index 0000000..eba0e52
--- /dev/null
+++ b/all_pairs/source/gsm_enc/COPYRIGHT
@@ -0,0 +1,16 @@
1Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
2Technische Universitaet Berlin
3
4Any use of this software is permitted provided that this notice is not
5removed and that neither the authors nor the Technische Universitaet Berlin
6are deemed to have made any representations as to the suitability of this
7software for any purpose nor are held responsible for any defects of
8this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
9
10As a matter of courtesy, the authors request to be informed about uses
11this software has found, about bugs in this software, and about any
12improvements that may be of general interest.
13
14Berlin, 28.11.1994
15Jutta Degener
16Carsten Bormann
diff --git a/all_pairs/source/gsm_enc/ChangeLog.txt b/all_pairs/source/gsm_enc/ChangeLog.txt
new file mode 100644
index 0000000..4dbeeda
--- /dev/null
+++ b/all_pairs/source/gsm_enc/ChangeLog.txt
@@ -0,0 +1,8 @@
12017-06-28:
2- Rename benchmark to gsm_enc.
3- Add prefix 'gsm_enc_'.
4- Introduce gsm_enc_init and gsm_enc_return functions.
5- Rewrite negative shifts to avoid undefined behavior.
6- Fix comparisons between signed and unsigned types.
7- Remove unused variables and parameters.
8- Fix memory corruption in gsm_enc_Short_term_analysis_filtering.
diff --git a/all_pairs/source/gsm_enc/data.h b/all_pairs/source/gsm_enc/data.h
new file mode 100644
index 0000000..e656335
--- /dev/null
+++ b/all_pairs/source/gsm_enc/data.h
@@ -0,0 +1,452 @@
1#ifndef DATA_H
2#define DATA_H
3
4gsm_signal gsm_enc_pcmdata[] = {
5 (short)0x0000, (short)0x0000, (short)0x0010, (short)0x0010, (short)0x0010, (short)0x0020, (short)0x0020, (short)0x0018,
6 (short)0x0028, (short)0x0020, (short)0x0020, (short)0x0028, (short)0x0028, (short)0x0020, (short)0x0030, (short)0x0030,
7 (short)0x0028, (short)0x0010, (short)0x0008, (short)0x0000, (short)0x0050, (short)0x0060, (short)0x0058, (short)0x00D0,
8 (short)0x00E0, (short)0x00D0, (short)0x0118, (short)0x0128, (short)0x0118, (short)0x0128, (short)0x0110, (short)0x0100,
9 (short)0x00A0, (short)0x0058, (short)0x0048, (short)0x0058, (short)0x0060, (short)0x0058, (short)0x0050, (short)0x0048,
10 (short)0x0040, (short)0x0030, (short)0x0020, (short)0x0010, (short)0x0008, (short)0xFFF8, (short)0xFFE8, (short)0xFFE0,
11 (short)0xFFD8, (short)0xFFC8, (short)0xFFC0, (short)0xFFC0, (short)0xFF98, (short)0xFF78, (short)0xFF78, (short)0xFFC8,
12 (short)0x0000, (short)0x0010, (short)0x0040, (short)0x0060, (short)0x0068, (short)0x0078, (short)0x0078, (short)0x0070,
13 (short)0x00A8, (short)0x00C8, (short)0x00C8, (short)0x00E0, (short)0x00F0, (short)0x00E8, (short)0x00F8, (short)0x00F8,
14 (short)0x00F0, (short)0x00E0, (short)0x00C8, (short)0x00B8, (short)0x00E8, (short)0x0100, (short)0x00F8, (short)0x00E8,
15 (short)0x00D8, (short)0x00C0, (short)0x00A8, (short)0x0020, (short)0xFFC0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA8,
16 (short)0xFFB0, (short)0xFFD0, (short)0xFFF8, (short)0x0000, (short)0x0020, (short)0x0030, (short)0x0030, (short)0x0030,
17 (short)0x0028, (short)0x0020, (short)0xFFF0, (short)0xFFD0, (short)0xFFC8, (short)0xFFC8, (short)0xFFD0, (short)0xFFD8,
18 (short)0xFFE8, (short)0xFFF8, (short)0xFFF8, (short)0x0008, (short)0x0018, (short)0x0018, (short)0x0078, (short)0x00B8,
19 (short)0x00C0, (short)0x0100, (short)0x0130, (short)0x0128, (short)0x0108, (short)0x00D8, (short)0x00C0, (short)0x0078,
20 (short)0x0038, (short)0x0020, (short)0x0020, (short)0x0000, (short)0xFFE0, (short)0xFFE0, (short)0xFFD8, (short)0xFFC8,
21 (short)0xFFC8, (short)0xFFA0, (short)0xFF88, (short)0xFF98, (short)0xFF80, (short)0xFF70, (short)0xFF80, (short)0xFF78,
22 (short)0xFF78, (short)0xFF90, (short)0xFF80, (short)0xFF78, (short)0xFF78, (short)0xFF50, (short)0xFF30, (short)0xFF50,
23 (short)0xFF38, (short)0xFF30, (short)0xFF40, (short)0xFF58, (short)0xFF70, (short)0xFF80, (short)0xFF50, (short)0xFF38,
24 (short)0xFF40, (short)0xFF18, (short)0xFF00, (short)0xFF08, (short)0xFF40, (short)0xFF68, (short)0xFF80, (short)0xFF88,
25 (short)0xFF88, (short)0xFF88, (short)0xFF88, (short)0xFFB8, (short)0xFFE0, (short)0xFFF0, (short)0xFFD0, (short)0xFFB8,
26 (short)0xFFB8, (short)0xFF90, (short)0xFF70, (short)0xFF70, (short)0xFF50, (short)0xFF40, (short)0xFF40, (short)0xFF58,
27 (short)0xFF70, (short)0xFF80, (short)0xFFC8, (short)0x0000, (short)0x0018, (short)0x0030, (short)0x0048, (short)0x0048,
28 (short)0x0028, (short)0x0008, (short)0xFFF8, (short)0xFFD8, (short)0xFFC8, (short)0xFFB8, (short)0xFF98, (short)0xFF78,
29 (short)0xFF70, (short)0xFFF0, (short)0x0058, (short)0x0088, (short)0x00B8, (short)0x00D0, (short)0x00D8, (short)0x00E8,
30 (short)0x0138, (short)0x0160, (short)0x0158, (short)0x0170, (short)0x0178, (short)0x0160, (short)0x0168, (short)0x0160,
31 (short)0x0140, (short)0x0118, (short)0x00F0, (short)0x00C8, (short)0x0098, (short)0x0078, (short)0x0060, (short)0x0018,
32 (short)0xFFC0, (short)0xFF90, (short)0xFF48, (short)0xFF00, (short)0xFEE8, (short)0xFEC8, (short)0xFEB8, (short)0xFEB8,
33 (short)0xFEA0, (short)0xFE88, (short)0xFE80, (short)0xFEB8, (short)0xFEF8, (short)0xFF38, (short)0xFFA0, (short)0xFFE8,
34 (short)0x0008, (short)0x0030, (short)0x0058, (short)0x0068, (short)0x0068, (short)0x0070, (short)0x0068, (short)0x0050,
35 (short)0x0040, (short)0x0040, (short)0x0020, (short)0x0000, (short)0xFFE8, (short)0xFFF0, (short)0xFFF8, (short)0xFFF8,
36 (short)0x0038, (short)0x0068, (short)0x0078, (short)0x0038, (short)0x0008, (short)0xFFF0, (short)0xFFE0, (short)0xFFD8,
37 (short)0xFFD8, (short)0xFFE0, (short)0xFFD0, (short)0xFFC8, (short)0x0000, (short)0x0030, (short)0x0048, (short)0x0068,
38 (short)0x0080, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0078,
39 (short)0x0098, (short)0x00B0, (short)0x00B8, (short)0x0098, (short)0x0070, (short)0x0058, (short)0x0060, (short)0x0078,
40 (short)0x00A8, (short)0x00B8, (short)0x00A8, (short)0x00A0, (short)0x0080, (short)0x0068, (short)0x0060, (short)0x0058,
41 (short)0x0048, (short)0x0030, (short)0x0038, (short)0x0038, (short)0x0030, (short)0x0050, (short)0x0058, (short)0x0060,
42 (short)0x0030, (short)0x0008, (short)0xFFF8, (short)0xFF90, (short)0xFF48, (short)0xFF28, (short)0xFF10, (short)0xFEF8,
43 (short)0xFEF0, (short)0xFED8, (short)0xFEB0, (short)0xFEB0, (short)0xFEA8, (short)0xFEB8, (short)0xFED8, (short)0xFEF8,
44 (short)0xFF10, (short)0xFF20, (short)0xFF40, (short)0xFF58, (short)0xFF80, (short)0xFFA0, (short)0xFFB8, (short)0xFFC8,
45 (short)0xFFD8, (short)0xFFE0, (short)0xFFF0, (short)0x0048, (short)0x0098, (short)0x00B0, (short)0x0068, (short)0x0018,
46 (short)0xFFF8, (short)0xFFE8, (short)0xFFF0, (short)0xFFF8, (short)0x0020, (short)0x0038, (short)0x0038, (short)0x0050,
47 (short)0x0068, (short)0x0070, (short)0x0068, (short)0x0060, (short)0x0060, (short)0x0038, (short)0x0020, (short)0x0018,
48 (short)0x0040, (short)0x0060, (short)0x0068, (short)0x0040, (short)0x0010, (short)0x0000, (short)0xFFB0, (short)0xFF78,
49 (short)0xFF70, (short)0xFF90, (short)0xFFA8, (short)0xFFC8, (short)0xFF98, (short)0xFF50, (short)0xFF50, (short)0xFF50,
50 (short)0xFF58, (short)0xFF68, (short)0xFF48, (short)0xFF20, (short)0xFF18, (short)0xFF38, (short)0xFF60, (short)0xFF70,
51 (short)0xFF80, (short)0xFF98, (short)0xFFA0, (short)0xFFB8, (short)0xFFD0, (short)0xFFE0, (short)0x0018, (short)0x0048,
52 (short)0x0058, (short)0x00B0, (short)0x00F8, (short)0x0108, (short)0x0118, (short)0x0120, (short)0x0118, (short)0x0130,
53 (short)0x0148, (short)0x0140, (short)0x0130, (short)0x0120, (short)0x0108, (short)0x0098, (short)0x0038, (short)0x0018,
54 (short)0xFFD0, (short)0xFF90, (short)0xFF80, (short)0xFF58, (short)0xFF38, (short)0xFF30, (short)0xFF48, (short)0xFF68,
55 (short)0xFF78, (short)0xFF88, (short)0xFFB8, (short)0xFFD8, (short)0xFFE8, (short)0xFFD8, (short)0xFFF0, (short)0x0010,
56 (short)0x0020, (short)0x0020, (short)0x0018, (short)0x0028, (short)0x0030, (short)0x0030, (short)0x0038, (short)0x0060,
57 (short)0x0080, (short)0x0080, (short)0x00B0, (short)0x00D8, (short)0x00D0, (short)0x00B8, (short)0x00A8, (short)0x00A8,
58 (short)0x00A0, (short)0x0090, (short)0x0078, (short)0x0070, (short)0x0068, (short)0x0048, (short)0x0018, (short)0x0008,
59 (short)0x0008, (short)0x0000, (short)0x0000, (short)0xFFE8, (short)0xFFB0, (short)0xFF90, (short)0xFF88, (short)0xFF70,
60 (short)0xFF60, (short)0xFF60, (short)0xFF90, (short)0xFFC0, (short)0xFFD0, (short)0xFFD8, (short)0xFFE0, (short)0xFFE8,
61 (short)0x0018, (short)0x0050, (short)0x0058, (short)0x0030, (short)0x0008, (short)0x0000, (short)0x0018, (short)0x0038,
62 (short)0x0038, (short)0x0048, (short)0x0050, (short)0x0050, (short)0x0020, (short)0x0000, (short)0xFFF8, (short)0xFFB0,
63 (short)0xFF70, (short)0xFF68, (short)0xFFB0, (short)0xFFE8, (short)0xFFF8, (short)0xFFF8, (short)0xFFF8, (short)0xFFF0,
64 (short)0x0030, (short)0x0070, (short)0x0090, (short)0x0098, (short)0x0098, (short)0x0090, (short)0x00A0, (short)0x00B0,
65 (short)0x00B8, (short)0x00C0, (short)0x00C0, (short)0x00A8, (short)0x0098, (short)0x0088, (short)0x0078, (short)0x0050,
66 (short)0x0030, (short)0x0020, (short)0xFFD8, (short)0xFF98, (short)0xFF88, (short)0xFF50, (short)0xFF20, (short)0xFF18,
67 (short)0xFEF8, (short)0xFEE0, (short)0xFEE8, (short)0xFE70, (short)0xFE08, (short)0xFE00, (short)0xFE48, (short)0xFE98,
68 (short)0xFEB8, (short)0xFEE8, (short)0xFF10, (short)0xFF28, (short)0xFF18, (short)0xFF10, (short)0xFF18, (short)0xFF48,
69 (short)0xFF70, (short)0xFF88, (short)0xFFE0, (short)0x0028, (short)0x0040, (short)0x0058, (short)0x0068, (short)0x0070,
70 (short)0x0078, (short)0x0070, (short)0x0068, (short)0x0068, (short)0x0078, (short)0x0080, (short)0x0080, (short)0x0088,
71 (short)0x0088, (short)0x0080, (short)0x0058, (short)0x0030, (short)0x0020, (short)0x0018, (short)0x0018, (short)0x0018,
72 (short)0x0050, (short)0x0090, (short)0x00A0, (short)0x0080, (short)0x0060, (short)0x0050, (short)0x0030, (short)0x0018,
73 (short)0x0010, (short)0x0028, (short)0x0038, (short)0x0038, (short)0x0018, (short)0xFFF8, (short)0xFFF0, (short)0x0000,
74 (short)0x0020, (short)0x0020, (short)0x0030, (short)0x0030, (short)0x0030, (short)0x0040, (short)0x0050, (short)0x0050,
75 (short)0x0050, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0078, (short)0x00A0,
76 (short)0x00A8, (short)0x00C0, (short)0x00C8, (short)0x00C0, (short)0x00D0, (short)0x00E0, (short)0x00D8, (short)0x00E8,
77 (short)0x00F0, (short)0x00E0, (short)0x0100, (short)0x0118, (short)0x0110, (short)0x0100, (short)0x00F0, (short)0x00D8,
78 (short)0x0090, (short)0x0048, (short)0x0028, (short)0x0020, (short)0x0020, (short)0x0020, (short)0x0038, (short)0x0050,
79 (short)0x0050, (short)0x0050, (short)0x0048, (short)0x0040, (short)0x0050, (short)0x0060, (short)0x0060, (short)0x0040,
80 (short)0xFFC0, (short)0xFF58, (short)0xFF40, (short)0xFF90, (short)0xFFE8, (short)0x0000, (short)0x0020, (short)0x0030,
81 (short)0x0030, (short)0x0068, (short)0x0098, (short)0x00A8, (short)0x0110, (short)0x0168, (short)0x0170, (short)0x0148,
82 (short)0x0118, (short)0x00F0, (short)0x00E8, (short)0x00E0, (short)0x00D0, (short)0x0098, (short)0x0060, (short)0x0040,
83 (short)0x0000, (short)0xFFD8, (short)0xFFD8, (short)0xFFC0, (short)0xFFB0, (short)0xFFB0, (short)0xFF78, (short)0xFF30,
84 (short)0xFF10, (short)0xFEF0, (short)0xFEE8, (short)0xFEF0, (short)0xFEC8, (short)0xFED0, (short)0xFEF8, (short)0xFF00,
85 (short)0xFF10, (short)0xFF20, (short)0xFF50, (short)0xFF78, (short)0xFF90, (short)0xFF80, (short)0xFF70, (short)0xFF70,
86 (short)0xFF80, (short)0xFF98, (short)0xFFA0, (short)0xFFB8, (short)0xFFD0, (short)0xFFD8, (short)0xFFF0, (short)0x0000,
87 (short)0x0008, (short)0x0028, (short)0x0048, (short)0x0058, (short)0x0078, (short)0x0070, (short)0x0058, (short)0x0068,
88 (short)0x0098, (short)0x00B8, (short)0x00D8, (short)0x00F0, (short)0x00F0, (short)0x00E8, (short)0x00F8, (short)0x0100,
89 (short)0x00D8, (short)0x00D0, (short)0x00C8, (short)0x00E8, (short)0x0100, (short)0x00F0, (short)0x00E0, (short)0x00C8,
90 (short)0x00B8, (short)0x00A0, (short)0x0078, (short)0x0058, (short)0x0038, (short)0x0020, (short)0x0010, (short)0x0010,
91 (short)0x0018, (short)0x0010, (short)0x0010, (short)0x0010, (short)0x0018, (short)0x0028, (short)0x0008, (short)0xFFE0,
92 (short)0xFFC8, (short)0xFF80, (short)0xFF48, (short)0xFF38, (short)0xFF40, (short)0xFF48, (short)0xFF48, (short)0xFF70,
93 (short)0xFF90, (short)0xFFA8, (short)0xFFB8, (short)0xFFC0, (short)0xFFC8, (short)0xFFC0, (short)0xFFC0, (short)0xFFC0,
94 (short)0xFFB0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA8, (short)0xFFB0, (short)0xFF68, (short)0xFF28,
95 (short)0xFF08, (short)0xFEF8, (short)0xFEF8, (short)0xFEE8, (short)0xFEE0, (short)0xFED8, (short)0xFEA8, (short)0xFE98,
96 (short)0xFEA8, (short)0xFEA8, (short)0xFEA0, (short)0xFEA0, (short)0xFED0, (short)0xFF00, (short)0xFF30, (short)0xFF28,
97 (short)0xFF38, (short)0xFF58, (short)0xFF48, (short)0xFF40, (short)0xFF48, (short)0xFFB0, (short)0x0010, (short)0x0038,
98 (short)0x0028, (short)0x0010, (short)0x0008, (short)0x0050, (short)0x00A0, (short)0x00B8, (short)0x00A0, (short)0x0080,
99 (short)0x0070, (short)0x0090, (short)0x00B0, (short)0x00B0, (short)0x00B8, (short)0x00B8, (short)0x00B0, (short)0x00C0,
100 (short)0x00D0, (short)0x00C8, (short)0x00A0, (short)0x0068, (short)0x0038, (short)0xFFF0, (short)0xFFB0, (short)0xFF88,
101 (short)0xFF78, (short)0xFF68, (short)0xFF60, (short)0xFF90, (short)0xFFC0, (short)0xFFE0, (short)0x0000, (short)0x0020,
102 (short)0x0030, (short)0x00A0, (short)0x0110, (short)0x0138, (short)0x0140, (short)0x0148, (short)0x0148, (short)0x0110,
103 (short)0x00E8, (short)0x00C0, (short)0x00A0, (short)0x0088, (short)0x0068, (short)0x0008, (short)0xFFB0, (short)0xFF88,
104 (short)0xFF58, (short)0xFF30, (short)0xFF20, (short)0xFEF8, (short)0xFED8, (short)0xFED8, (short)0xFF00, (short)0xFF20,
105 (short)0xFF38, (short)0xFF50, (short)0xFF68, (short)0xFF88, (short)0xFFA0, (short)0xFFB8, (short)0x0020, (short)0x0080,
106 (short)0x00A0, (short)0x00D8, (short)0x0100, (short)0x0100, (short)0x0138, (short)0x0168, (short)0x0148, (short)0x0128,
107 (short)0x0120, (short)0x00F8, (short)0x00E8, (short)0x00E0, (short)0x00C0, (short)0x00A8, (short)0x00B0, (short)0x0098,
108 (short)0x0070, (short)0x0048, (short)0x0030, (short)0xFFD0, (short)0xFF60, (short)0xFF48, (short)0xFF10, (short)0xFEA8,
109 (short)0xFEA8, (short)0xFEC0, (short)0xFEC0, (short)0xFEE8, (short)0xFEB0, (short)0xFE58, (short)0xFE88, (short)0xFED0,
110 (short)0xFEB8, (short)0xFE48, (short)0xFE58, (short)0xFEE8, (short)0xFF28, (short)0xFF18, (short)0xFF60, (short)0x00A0,
111 (short)0x01A0, (short)0x0188, (short)0x0178, (short)0x0208, (short)0x0208, (short)0x0100, (short)0x0018, (short)0xFFE0,
112 (short)0xFEE0, (short)0xFD68, (short)0xFD00, (short)0xFD60, (short)0xFD70, (short)0xFDA8, (short)0xFF00, (short)0x00A0,
113 (short)0x0170, (short)0x0210, (short)0x02D8, (short)0x0310, (short)0x0218, (short)0x00A0, (short)0xFFA0, (short)0xFDF0,
114 (short)0xFBD8, (short)0xFB08, (short)0xF9C0, (short)0xF830, (short)0xF8D8, (short)0xFCC0, (short)0x0038, (short)0x01A0,
115 (short)0x0380, (short)0x0A18, (short)0x0F50, (short)0x0DB0, (short)0x0C30, (short)0x0E18, (short)0x0CA8, (short)0x0570,
116 (short)0xFF98, (short)0xFE38, (short)0xFBA0, (short)0xF700, (short)0xF5D0, (short)0xF7C8, (short)0xF9A8, (short)0xFB48,
117 (short)0xFBB0, (short)0xFC78, (short)0xFF00, (short)0xFE98, (short)0xFB20, (short)0xFA48, (short)0xFAC0, (short)0xF8C8,
118 (short)0xF6E0, (short)0xF9C0, (short)0xFE08, (short)0xFF80, (short)0x0428, (short)0x0B70, (short)0x0E18, (short)0x0D38,
119 (short)0x0D38, (short)0x0C28, (short)0x01D0, (short)0xF578, (short)0xF108, (short)0xFB50, (short)0x0498, (short)0x0428,
120 (short)0x0CE8, (short)0x2190, (short)0x29F0, (short)0x22E0, (short)0x1F68, (short)0x2050, (short)0x1810, (short)0x0710,
121 (short)0xFA98, (short)0xF438, (short)0xEE68, (short)0xE950, (short)0xEBC8, (short)0xF538, (short)0xFEB8, (short)0x0240,
122 (short)0x0460, (short)0x09D0, (short)0x0978, (short)0xFFF8, (short)0xF810, (short)0xF190, (short)0xE8D0, (short)0xE290,
123 (short)0xDF60, (short)0xDFF0, (short)0xE668, (short)0xEC20, (short)0xF138, (short)0xFAC0, (short)0x04F0, (short)0x08D0,
124 (short)0x08C8, (short)0x0B18, (short)0x09F8, (short)0x0230, (short)0xFA38, (short)0xFA68, (short)0xFC78, (short)0xF9B8,
125 (short)0xF850, (short)0xFEA8, (short)0x05B8, (short)0x0690, (short)0x02E8, (short)0x0268, (short)0x0498, (short)0xFCB0,
126 (short)0xF018, (short)0xEDF8, (short)0x0090, (short)0x0F48, (short)0x0C70, (short)0x1278, (short)0x27B8, (short)0x2EA0,
127 (short)0x21F8, (short)0x1920, (short)0x1918, (short)0x1530, (short)0x0638, (short)0xF858, (short)0xF720, (short)0xF9F8,
128 (short)0xF600, (short)0xF850, (short)0x0590, (short)0x0EE0, (short)0x1000, (short)0x10D8, (short)0x1460, (short)0x10F8,
129 (short)0x0500, (short)0xFBC0, (short)0xF7A8, (short)0xF250, (short)0xEC00, (short)0xEB30, (short)0xF1C8, (short)0xF920,
130 (short)0xFC90, (short)0x0190, (short)0x0A60, (short)0x0E80, (short)0x0DB0, (short)0x0AD8, (short)0x0690, (short)0x0168,
131 (short)0xFF20, (short)0xFBD0, (short)0xF6F8, (short)0xF660, (short)0xF680, (short)0xF5B0, (short)0xF7C0, (short)0xF120,
132 (short)0xEA90, (short)0xF030, (short)0xEC18, (short)0xE190, (short)0xE558, (short)0xFF20, (short)0x1090, (short)0x0C50,
133 (short)0x1248, (short)0x2788, (short)0x2AD0, (short)0x1628, (short)0x08F0, (short)0x0BA8, (short)0x0538, (short)0xEF48,
134 (short)0xE410, (short)0xEB10, (short)0xEF68, (short)0xEA28, (short)0xEC40, (short)0xFC18, (short)0x08A8, (short)0x0818,
135 (short)0x0778, (short)0x0858, (short)0x02F8, (short)0xF8E8, (short)0xF1F0, (short)0xEF40, (short)0xECD0, (short)0xE958,
136 (short)0xEA70, (short)0xF260, (short)0xFAF0, (short)0xFFA0, (short)0x04A0, (short)0x0CF8, (short)0x10F8, (short)0x0EA0,
137 (short)0x0D48, (short)0x0BE8, (short)0x05E0, (short)0x03B0, (short)0x0358, (short)0xFF18, (short)0xFB40, (short)0xF9B0,
138 (short)0xF9C0, (short)0xF7C0, (short)0xEE90, (short)0xEAA0, (short)0xEE00, (short)0xE888, (short)0xE200, (short)0xEF00,
139 (short)0x0948, (short)0x1400, (short)0x1270, (short)0x1D88, (short)0x2CD8, (short)0x2488, (short)0x0DA8, (short)0x04B8,
140 (short)0x0548, (short)0xF7B0, (short)0xE3F0, (short)0xE268, (short)0xEFF8, (short)0xF5A0, (short)0xF320, (short)0xFC68,
141 (short)0x0BF0, (short)0x0FA0, (short)0x0A50, (short)0x01F8, (short)0xFE60, (short)0xFC48, (short)0xF340, (short)0xEB28,
142 (short)0xED58, (short)0xF3C0, (short)0xF5B8, (short)0xF738, (short)0x00F8, (short)0x0C70, (short)0x0E90, (short)0x0DE8,
143 (short)0x1190, (short)0x12B0, (short)0x1058, (short)0x0B98, (short)0x0638, (short)0x0868, (short)0x0998, (short)0x02B0,
144 (short)0xFE50, (short)0x0120, (short)0x02A0, (short)0xFC90, (short)0xF810, (short)0xF9D0, (short)0xF818, (short)0xF290,
145 (short)0xF240, (short)0xF6D0, (short)0x0A48, (short)0x1AD8, (short)0x1840, (short)0x1C18, (short)0x2B18, (short)0x29F0,
146 (short)0x1608, (short)0x08B8, (short)0x0778, (short)0x0128, (short)0xF118, (short)0xE868, (short)0xEDA0, (short)0xF310,
147 (short)0xF248, (short)0xF558, (short)0x0058, (short)0x0970, (short)0x0688, (short)0x0108, (short)0xFD08, (short)0xF988,
148 (short)0xF558, (short)0xF0A0, (short)0xF0B0, (short)0xF540, (short)0xF6E8, (short)0xFCA0, (short)0x0758, (short)0x0CD0,
149 (short)0x0F60, (short)0x1338, (short)0x1458, (short)0x1278, (short)0x0FD0, (short)0x0CA8, (short)0x0D50, (short)0x0D10,
150 (short)0x0798, (short)0x0398, (short)0x0428, (short)0x04F0, (short)0x0278, (short)0xFF98, (short)0x0178, (short)0x0088,
151 (short)0xFB08, (short)0xF660, (short)0xF1A8, (short)0xEF18, (short)0xF9E8, (short)0x0C00, (short)0x11C8, (short)0x1260,
152 (short)0x1B60, (short)0x21B0, (short)0x18E0, (short)0x0B08, (short)0x04C8, (short)0x0078, (short)0xF730, (short)0xEF60,
153 (short)0xEB18, (short)0xEC10, (short)0xF290, (short)0xF800, (short)0xFB60, (short)0xFF60, (short)0x0080, (short)0xFFA8,
154 (short)0xFB08, (short)0xF1A8, (short)0xED10, (short)0xEFF0, (short)0xEED0, (short)0xEB10, (short)0xEFE8, (short)0xF8F0,
155 (short)0xFDE0, (short)0x0298, (short)0x0528, (short)0x0598, (short)0x0928, (short)0x0A30, (short)0x0670, (short)0x08E8,
156 (short)0x0BC0, (short)0x0698, (short)0x0210, (short)0x0390, (short)0x0560, (short)0x0288, (short)0xF910, (short)0xF468,
157 (short)0xF560, (short)0xF3E0, (short)0xEE10, (short)0xE8B0, (short)0xE508, (short)0xEED0, (short)0x03E0, (short)0x0638,
158 (short)0xFFA8, (short)0x0BB8, (short)0x2078, (short)0x1FA8, (short)0x0EF0, (short)0x0648, (short)0x05C8, (short)0xFF18,
159 (short)0xF588, (short)0xEE20, (short)0xED88, (short)0xF5A0, (short)0xFBA8, (short)0xFBC0, (short)0xFA98, (short)0xFA20,
160 (short)0xF7D8, (short)0xF2D0, (short)0xEF48, (short)0xE998, (short)0xE378, (short)0xE530, (short)0xE868, (short)0xE890,
161 (short)0xEDD0, (short)0xF798, (short)0xFBC0, (short)0xFD20, (short)0x0178, (short)0x0490, (short)0x04A0, (short)0x0758,
162 (short)0x0858, (short)0x0490, (short)0x04F8, (short)0x0858, (short)0x06F0, (short)0x05F8, (short)0x0450, (short)0x0098,
163 (short)0xFE60, (short)0xFDA0, (short)0xF9E0, (short)0xF358, (short)0xEDC0, (short)0xF308, (short)0xFFE0, (short)0x0018,
164 (short)0xFB80, (short)0x0948, (short)0x1DB8, (short)0x1D08, (short)0x0F88, (short)0x0B48, (short)0x0C50, (short)0x09C0,
165 (short)0xFF78, (short)0xF1A0, (short)0xEF28, (short)0xF6B8, (short)0xF9F0, (short)0xF6F0, (short)0xF688, (short)0xF9E0,
166 (short)0xF9C0, (short)0xF4C8, (short)0xEBD8, (short)0xE7E8, (short)0xEBE0, (short)0xE8C8, (short)0xE100, (short)0xE518,
167 (short)0xF0B8, (short)0xF728, (short)0xF770, (short)0xF878, (short)0xFF58, (short)0x06B0, (short)0x0430, (short)0x0060,
168 (short)0x0390, (short)0x0A18, (short)0x0B98, (short)0x06C8, (short)0x0710, (short)0x0CF0, (short)0x08D0, (short)0x01F8,
169 (short)0x0280, (short)0x0238, (short)0xFD78, (short)0xF868, (short)0xF198, (short)0xF670, (short)0x0930, (short)0x0A78,
170 (short)0xFB38, (short)0x04F0, (short)0x1EB8, (short)0x1E98, (short)0x0F68, (short)0x0EC8, (short)0x1548, (short)0x1480,
171 (short)0x0C60, (short)0x00B0, (short)0xFEF8, (short)0x0830, (short)0x0838, (short)0x0160, (short)0x0380, (short)0x07E8,
172 (short)0x0270, (short)0xFBA0, (short)0xF9C0, (short)0xF450, (short)0xEE08, (short)0xED08, (short)0xEE10, (short)0xEF20,
173 (short)0xF1C0, (short)0xF800, (short)0xFE70, (short)0x00B0, (short)0x02D8, (short)0x07C8, (short)0x09F0, (short)0x09A8,
174 (short)0x0A60, (short)0x0B28, (short)0x0C80, (short)0x0D58, (short)0x0BD0, (short)0x0A48, (short)0x0900, (short)0x0768,
175 (short)0x03D0, (short)0x00E0, (short)0xFFF8, (short)0xFBD8, (short)0xF5E8, (short)0xFE18, (short)0x0FE8, (short)0x1060,
176 (short)0x05C8, (short)0x1078, (short)0x2638, (short)0x2580, (short)0x1740, (short)0x14E8, (short)0x19D0, (short)0x17D8,
177 (short)0x0E10, (short)0x0270, (short)0x0120, (short)0x0900, (short)0x0870, (short)0x0290, (short)0x03A0, (short)0x0600,
178 (short)0x0100, (short)0xFE28, (short)0xFF28, (short)0xF838, (short)0xF0B8, (short)0xF238, (short)0xF530, (short)0xF440,
179 (short)0xF440, (short)0xFA38, (short)0x0198, (short)0x03A8, (short)0x03D0, (short)0x0780, (short)0x0AB8, (short)0x0B58,
180 (short)0x0B10, (short)0x0AD8, (short)0x0A08, (short)0x0878, (short)0x07C8, (short)0x0648, (short)0x01A0, (short)0xFF48,
181 (short)0xFE58, (short)0xFA68, (short)0xF7D0, (short)0xF758, (short)0xF470, (short)0xF5B0, (short)0x02A8, (short)0x0A58,
182 (short)0x0448, (short)0x07C8, (short)0x1708, (short)0x1970, (short)0x0EC8, (short)0x0A40, (short)0x0CD0, (short)0x0D28,
183 (short)0x0838, (short)0x0010, (short)0xFAE0, (short)0xFCB0, (short)0xFEB8, (short)0xFCE8, (short)0xFBA8, (short)0xFD10,
184 (short)0xFBC8, (short)0xF910, (short)0xF960, (short)0xF830, (short)0xF4D8, (short)0xF500, (short)0xF860, (short)0xF9F0,
185 (short)0xFB58, (short)0xFE48, (short)0x0050, (short)0x0418, (short)0x0910, (short)0x0940, (short)0x0830, (short)0x0AC8,
186 (short)0x0C88, (short)0x0A50, (short)0x07C0, (short)0x0700, (short)0x0590, (short)0x0268, (short)0xFFF0, (short)0xFBA8,
187 (short)0xF720, (short)0xF698, (short)0xF2E0, (short)0xEB68, (short)0xEDA0, (short)0xFC00, (short)0x0358, (short)0xFF30,
188 (short)0x0398, (short)0x1220, (short)0x1860, (short)0x1368, (short)0x10C0, (short)0x12F0, (short)0x12A0, (short)0x0E08,
189 (short)0x0780, (short)0x0010, (short)0xFAD8, (short)0xF990, (short)0xF7E0, (short)0xF278, (short)0xEE10, (short)0xEB98,
190 (short)0xE7A0, (short)0xE6F8, (short)0xEA30, (short)0xE980, (short)0xE420, (short)0xE440, (short)0xEBA8, (short)0xEF98,
191 (short)0xEF68, (short)0xF288, (short)0xF7A8, (short)0xFC90, (short)0x01F8, (short)0x0528, (short)0x0630, (short)0x08E8,
192 (short)0x0C98, (short)0x0D50, (short)0x0B98, (short)0x0920, (short)0x0678, (short)0x03F0, (short)0x0260, (short)0xFE00,
193 (short)0xF810, (short)0xF4B8, (short)0xF0C0, (short)0xEB68, (short)0xEF58, (short)0xFAE8, (short)0xFDE0, (short)0xF680,
194 (short)0xF910, (short)0x06E0, (short)0x0C20, (short)0x05D8, (short)0x0408, (short)0x05C8, (short)0x0450, (short)0x02D0,
195 (short)0x0128, (short)0xFB78, (short)0xF668, (short)0xF430, (short)0xF150, (short)0xED90, (short)0xE870, (short)0xE448,
196 (short)0xE2E0, (short)0xE048, (short)0xDDD0, (short)0xDF08, (short)0xE0E0, (short)0xE098, (short)0xE258, (short)0xE520,
197 (short)0xE6A8, (short)0xEA28, (short)0xEF88, (short)0xF2A8, (short)0xF548, (short)0xFBA8, (short)0x01C8, (short)0x03F8,
198 (short)0x0748, (short)0x0C88, (short)0x0E98, (short)0x0DB8, (short)0x0D98, (short)0x0D50, (short)0x0B68, (short)0x0970,
199 (short)0x06C0, (short)0x0238, (short)0xFE18, (short)0xFB08, (short)0xF820, (short)0xF780, (short)0xF970, (short)0xF9B0,
200 (short)0xF880, (short)0xFA28, (short)0x0028, (short)0x0698, (short)0x0948, (short)0x08D0, (short)0x09E0, (short)0x0DD0,
201 (short)0x1010, (short)0x0D40, (short)0x0958, (short)0x0728, (short)0x0308, (short)0xFDA0, (short)0xF9F8, (short)0xF418,
202 (short)0xEC98, (short)0xE8B8, (short)0xE618, (short)0xE200, (short)0xDED0, (short)0xDF48, (short)0xE100, (short)0xE180,
203 (short)0xE160, (short)0xE3C8, (short)0xE898, (short)0xEDD8, (short)0xF250, (short)0xF558, (short)0xFB00, (short)0x02F8,
204 (short)0x07B0, (short)0x0B80, (short)0x1108, (short)0x1518, (short)0x1660, (short)0x1770, (short)0x1870, (short)0x16F8,
205 (short)0x1300, (short)0x0F78, (short)0x0FC0, (short)0x1070, (short)0x0CE8, (short)0x0AF8, (short)0x0BD8, (short)0x0D28,
206 (short)0x10A8, (short)0x1370, (short)0x10A0, (short)0x1040, (short)0x1518, (short)0x1740, (short)0x1550, (short)0x1398,
207 (short)0x10E0, (short)0x0AC8, (short)0x0640, (short)0x0348, (short)0xFD18, (short)0xF658, (short)0xF1D8, (short)0xEC20,
208 (short)0xE760, (short)0xE550, (short)0xE4B8, (short)0xE418, (short)0xE438, (short)0xE508, (short)0xE738, (short)0xEB18,
209 (short)0xF0C8, (short)0xF618, (short)0xF988, (short)0xFEC8, (short)0x0518, (short)0x09D8, (short)0x1118, (short)0x17F0,
210 (short)0x1BB0, (short)0x1E28, (short)0x2120, (short)0x23D8, (short)0x2638, (short)0x2418, (short)0x2080, (short)0x1D30,
211 (short)0x1CE8, (short)0x1D98, (short)0x1CA8, (short)0x1AD8, (short)0x1960, (short)0x17F8, (short)0x1A40, (short)0x1CF8,
212 (short)0x1D38, (short)0x1C30, (short)0x1A68, (short)0x1860, (short)0x1480, (short)0x1020, (short)0x0B68, (short)0x03E8,
213 (short)0xFBA8, (short)0xF508, (short)0xEE40, (short)0xE820, (short)0xE338, (short)0xDE88, (short)0xDA30, (short)0xD7D0,
214 (short)0xD728, (short)0xD7D8, (short)0xD998, (short)0xDC10, (short)0xDFB0, (short)0xE470, (short)0xE948, (short)0xEF98,
215 (short)0xF5F0, (short)0xFC38, (short)0x0228, (short)0x0798, (short)0x0D98, (short)0x1320, (short)0x1760, (short)0x1A70,
216 (short)0x1BE0, (short)0x1CC0, (short)0x1D98, (short)0x1A88, (short)0x1658, (short)0x12A0, (short)0x1180, (short)0x10A8,
217 (short)0x0ED0, (short)0x0CC8, (short)0x0AD8, (short)0x0920, (short)0x0B70, (short)0x0E30, (short)0x0EE8, (short)0x0D80,
218 (short)0x0BE0, (short)0x0AC0, (short)0x09B8, (short)0x0890, (short)0x0690, (short)0x01F8, (short)0xFD30, (short)0xF9F0,
219 (short)0xF5B0, (short)0xF188, (short)0xEE38, (short)0xE9E8, (short)0xE5E8, (short)0xE3E0, (short)0xE4A0, (short)0xE608,
220 (short)0xE738, (short)0xE858, (short)0xE980, (short)0xEC20, (short)0xF030, (short)0xF450, (short)0xF878, (short)0xFC68,
221 (short)0xFF68, (short)0x03C8, (short)0x08B8, (short)0x0D00, (short)0x1038, (short)0x12D8, (short)0x1490, (short)0x1648,
222 (short)0x16B8, (short)0x1468, (short)0x1160, (short)0x0FA8, (short)0x1038, (short)0x1058, (short)0x0F88, (short)0x0E50,
223 (short)0x0CC8, (short)0x0CC0, (short)0x0FC0, (short)0x1220, (short)0x12A0, (short)0x10F8, (short)0x0F20, (short)0x0D28,
224 (short)0x0C78, (short)0x0BB8, (short)0x08D0, (short)0x01C8, (short)0xFB38, (short)0xF660, (short)0xF330, (short)0xF078,
225 (short)0xEC28, (short)0xE6C8, (short)0xE2C0, (short)0xE050, (short)0xDFC8, (short)0xE038, (short)0xE160, (short)0xE300,
226 (short)0xE568, (short)0xE6B8, (short)0xE9A0, (short)0xED50, (short)0xF238, (short)0xF6D8, (short)0xFB08, (short)0xFF10,
227 (short)0x02E8, (short)0x06A0, (short)0x0AC0, (short)0x0DC8, (short)0x1010, (short)0x1168, (short)0x1018, (short)0x0E90,
228 (short)0x0BF8, (short)0x0B08, (short)0x0A50, (short)0x09F0, (short)0x0960, (short)0x0888, (short)0x0808, (short)0x09C8,
229 (short)0x0BA8, (short)0x0EE8, (short)0x1070, (short)0x10D0, (short)0x0F58, (short)0x0D60, (short)0x0BA0, (short)0x0A60,
230 (short)0x08F0, (short)0x0608, (short)0xFFB0, (short)0xF938, (short)0xF360, (short)0xF030, (short)0xEE20, (short)0xEB70,
231 (short)0xE7A8, (short)0xE410, (short)0xE140, (short)0xDFC8, (short)0xDFF8, (short)0xE1F0, (short)0xE448, (short)0xE6D0,
232 (short)0xE780, (short)0xE9E8, (short)0xECF0, (short)0xF248, (short)0xF730, (short)0xFBC0, (short)0xFF80, (short)0x0310,
233 (short)0x0670, (short)0x0A98, (short)0x0D88, (short)0x0FD8, (short)0x10C0, (short)0x0EB0, (short)0x0C48, (short)0x08B8,
234 (short)0x0998, (short)0x0AC0, (short)0x0C68, (short)0x0B78, (short)0x09C8, (short)0x0838, (short)0x08F8, (short)0x0A80,
235 (short)0x0CA0, (short)0x0E10, (short)0x0E48, (short)0x0D58, (short)0x0A28, (short)0x0750, (short)0x04F0, (short)0x0228,
236 (short)0xFEE8, (short)0xFA80, (short)0xF468, (short)0xEED0, (short)0xEAE0, (short)0xE8B8, (short)0xE718, (short)0xE5B0,
237 (short)0xE4A8, (short)0xE410, (short)0xE480, (short)0xE548, (short)0xE738, (short)0xE9B0, (short)0xED80, (short)0xF0B8,
238 (short)0xF480, (short)0xF7B0, (short)0xFB70, (short)0xFED0, (short)0x0328, (short)0x0720, (short)0x0A98, (short)0x0E00,
239 (short)0x10F8, (short)0x12E0, (short)0x12A8, (short)0x11B0, (short)0x0F58, (short)0x0F38, (short)0x0E88, (short)0x0F08,
240 (short)0x0FC0, (short)0x0FF0, (short)0x10B8, (short)0x1138, (short)0x1198, (short)0x13D0, (short)0x1638, (short)0x17E8,
241 (short)0x1758, (short)0x1628, (short)0x1460, (short)0x10E8, (short)0x0CA0, (short)0x0848, (short)0x0280, (short)0xFC90,
242 (short)0xF700, (short)0xF0F8, (short)0xEB18, (short)0xE638, (short)0xE1B8, (short)0xDE78, (short)0xDC58, (short)0xDBB8,
243 (short)0xDC28, (short)0xDDB0, (short)0xE030, (short)0xE330, (short)0xE6F0, (short)0xEC20, (short)0xF210, (short)0xF7C0,
244 (short)0xFCE0, (short)0x0150, (short)0x0570, (short)0x08F0, (short)0x0C70, (short)0x0F50, (short)0x12B8, (short)0x1560,
245 (short)0x16E0, (short)0x1630, (short)0x14E8, (short)0x1298, (short)0x11B8, (short)0x1170, (short)0x11B8, (short)0x11C0,
246 (short)0x0FE8, (short)0x0E58, (short)0x0CB8, (short)0x0C50, (short)0x0D68, (short)0x0E98, (short)0x0E30, (short)0x0C28,
247 (short)0x0A10, (short)0x06D8, (short)0x02E0, (short)0xFEA0, (short)0xFA18, (short)0xF4E8, (short)0xF018, (short)0xEB68,
248 (short)0xE6E8, (short)0xE310, (short)0xDFC8, (short)0xDD38, (short)0xDBF8, (short)0xDC38, (short)0xDDD0, (short)0xE070,
249 (short)0xE390, (short)0xE760, (short)0xEB88, (short)0xEF20, (short)0xF378, (short)0xF830, (short)0xFCE0, (short)0x00F8,
250 (short)0x0480, (short)0x0768, (short)0x0968, (short)0x0AE0, (short)0x0BB8, (short)0x0C10, (short)0x0BB0, (short)0x0A78,
251 (short)0x08E0, (short)0x06E8, (short)0x0540, (short)0x0870, (short)0x0BE0, (short)0x0ED0, (short)0x0E40, (short)0x0D10,
252 (short)0x0CC8, (short)0x0E28, (short)0x0FA0, (short)0x0FB0, (short)0x0F18, (short)0x0DD0, (short)0x0BC8, (short)0x08E8,
253 (short)0x0628, (short)0x0300, (short)0xFF18, (short)0xFB40, (short)0xF780, (short)0xF388, (short)0xF028, (short)0xED80,
254 (short)0xEB18, (short)0xE968, (short)0xE8C0, (short)0xE738, (short)0xE658, (short)0xE698, (short)0xE888, (short)0xEB38,
255 (short)0xEDA0, (short)0xF178, (short)0xF5B8, (short)0xFA28, (short)0xFEA8, (short)0x0300, (short)0x06C8, (short)0x0960,
256 (short)0x0B70, (short)0x0CE0, (short)0x0D70, (short)0x0D50, (short)0x0C60, (short)0x0890, (short)0x0418, (short)0x0028,
257 (short)0x01D0, (short)0x03F8, (short)0x05A8, (short)0x0700, (short)0x0808, (short)0x09A0, (short)0x0B18, (short)0x0CC8,
258 (short)0x0D90, (short)0x0E68, (short)0x0EC0, (short)0x0E30, (short)0x0C28, (short)0x09D8, (short)0x0730, (short)0x0308,
259 (short)0xFED8, (short)0xFAC0, (short)0xF598, (short)0xF0D8, (short)0xECE0, (short)0xEAA8, (short)0xE948, (short)0xE8D0,
260 (short)0xE850, (short)0xE888, (short)0xE910, (short)0xEAD0, (short)0xED68, (short)0xF018, (short)0xF350, (short)0xF6B8,
261 (short)0xFAE0, (short)0xFF00, (short)0x02D8, (short)0x05E8, (short)0x0830, (short)0x09F8, (short)0x0B08, (short)0x0B80,
262 (short)0x0B60, (short)0x0988, (short)0x0648, (short)0x02D0, (short)0x0150, (short)0x01E8, (short)0x0270, (short)0x03E0,
263 (short)0x0538, (short)0x0658, (short)0x0918, (short)0x0C00, (short)0x0E88, (short)0x10B8, (short)0x12A0, (short)0x13E0,
264 (short)0x1488, (short)0x1448, (short)0x1368, (short)0x1120, (short)0x0DD0, (short)0x0A40, (short)0x0608, (short)0x0148,
265 (short)0xFC80, (short)0xF860, (short)0xF4D8, (short)0xF1C0, (short)0xF008, (short)0xEF38, (short)0xEE78, (short)0xEE98,
266 (short)0xEF90, (short)0xF170, (short)0xF390, (short)0xF5C0, (short)0xF888, (short)0xFB48, (short)0xFDF0, (short)0x0078,
267 (short)0x03D0, (short)0x06C8, (short)0x08F8, (short)0x0AA0, (short)0x0BC8, (short)0x0C48, (short)0x0B30, (short)0x0978,
268 (short)0x06A8, (short)0x0530, (short)0x03F0, (short)0x0438, (short)0x03C0, (short)0x0350, (short)0x0360, (short)0x04E8,
269 (short)0x0698, (short)0x07D0, (short)0x08D0, (short)0x0998, (short)0x0A70, (short)0x0B48, (short)0x0B70, (short)0x0AD0,
270 (short)0x09C0, (short)0x0890, (short)0x0730, (short)0x0588, (short)0x0358, (short)0x0140, (short)0xFF58, (short)0xFD40,
271 (short)0xFB68, (short)0xF9E8, (short)0xF828, (short)0xF6D0, (short)0xF608, (short)0xF5D8, (short)0xF610, (short)0xF668,
272 (short)0xF778, (short)0xF8E8, (short)0xFA48, (short)0xFCC8, (short)0xFF50, (short)0x01C8, (short)0x0428, (short)0x0640,
273 (short)0x07D0, (short)0x09D0, (short)0x0B40, (short)0x0BF8, (short)0x0C30, (short)0x0C08, (short)0x0B08, (short)0x0988,
274 (short)0x07C0, (short)0x0670, (short)0x0608, (short)0x0590, (short)0x0588, (short)0x05B0, (short)0x05E0, (short)0x06B8,
275 (short)0x0748, (short)0x0758, (short)0x0700, (short)0x06A8, (short)0x0620, (short)0x05D8, (short)0x0590, (short)0x0528,
276 (short)0x03A8, (short)0x0240, (short)0x0108, (short)0xFF38, (short)0xFD50, (short)0xFBA0, (short)0xFA38, (short)0xF920,
277 (short)0xF860, (short)0xF6E8, (short)0xF640, (short)0xF628, (short)0xF680, (short)0xF720, (short)0xF800, (short)0xF8E0,
278 (short)0xF9A0, (short)0xFA78, (short)0xFB88, (short)0xFD20, (short)0xFEA0, (short)0x0008, (short)0x0110, (short)0x0200,
279 (short)0x0360, (short)0x04E0, (short)0x0608, (short)0x0738, (short)0x0838, (short)0x08D8, (short)0x0828, (short)0x0738,
280 (short)0x0600, (short)0x04A8, (short)0x02E0, (short)0x0130, (short)0xFFA0, (short)0xFF48, (short)0xFF10, (short)0xFEF0,
281 (short)0xFF30, (short)0xFFD0, (short)0x0090, (short)0x0090, (short)0x0070, (short)0x0060, (short)0xFFE8, (short)0xFF50,
282 (short)0xFEB8, (short)0xFE98, (short)0xFE88, (short)0xFE80, (short)0xFE58, (short)0xFE50, (short)0xFE58, (short)0xFDB0,
283 (short)0xFD08, (short)0xFC80, (short)0xFAF8, (short)0xF988, (short)0xF860, (short)0xF798, (short)0xF720, (short)0xF6E8,
284 (short)0xF728, (short)0xF7C0, (short)0xF8A8, (short)0xF8F8, (short)0xF960, (short)0xFA18, (short)0xFAC0, (short)0xFB58,
285 (short)0xFC18, (short)0xFCE0, (short)0xFDA0, (short)0xFE20, (short)0xFE88, (short)0xFEF8, (short)0xFEF0, (short)0xFEC8,
286 (short)0xFEA8, (short)0xFDE0, (short)0xFD10, (short)0xFC70, (short)0xFBA8, (short)0xFB10, (short)0xFAB8, (short)0xFAA0,
287 (short)0xFAD0, (short)0xFB18, (short)0xFA90, (short)0xFA18, (short)0xFA10, (short)0xFA80, (short)0xFB10, (short)0xFB88,
288 (short)0xFC90, (short)0xFDB8, (short)0xFEB8, (short)0xFF80, (short)0x0058, (short)0x0138, (short)0x0118, (short)0x00C8,
289 (short)0x00C0, (short)0xFF98, (short)0xFE30, (short)0xFD38, (short)0xFC68, (short)0xFB78, (short)0xFAB8, (short)0xFAE8,
290 (short)0xFB78, (short)0xFBD0, (short)0xFBE8, (short)0xFC18, (short)0xFC98, (short)0xFD28, (short)0xFD48, (short)0xFD68,
291 (short)0xFD68, (short)0xFD90, (short)0xFDB8, (short)0xFD90, (short)0xFD68, (short)0xFD78, (short)0xFCA0, (short)0xFB70,
292 (short)0xFAD0, (short)0xF9F0, (short)0xF870, (short)0xF748, (short)0xF748, (short)0xF770, (short)0xF748, (short)0xF720,
293 (short)0xF7A8, (short)0xF878, (short)0xF930, (short)0xF998, (short)0xFA38, (short)0xFC10, (short)0xFDA0, (short)0xFE70,
294 (short)0x0030, (short)0x0248, (short)0x03A0, (short)0x0568, (short)0x0738, (short)0x0870, (short)0x0960, (short)0x0A10,
295 (short)0x0A40, (short)0x0A28, (short)0x09B8, (short)0x08E8, (short)0x07E8, (short)0x06E0, (short)0x0588, (short)0x0430,
296 (short)0x0300, (short)0x0260, (short)0x01D0, (short)0x0118, (short)0xFFB0, (short)0xFE98, (short)0xFE18, (short)0xFDA0,
297 (short)0xFD08, (short)0xFCB8, (short)0xFCF8, (short)0xFD60, (short)0xFD90, (short)0xFD90, (short)0xFDD8, (short)0xFE50,
298 (short)0xFDA0, (short)0xFCE0, (short)0xFCC0, (short)0xFCE8, (short)0xFCB0, (short)0xFC60, (short)0xFC70, (short)0xFCB8,
299 (short)0xFCE0, (short)0xFD40, (short)0xFDD8, (short)0xFE68, (short)0xFF78, (short)0x0068, (short)0x0108, (short)0x0278,
300 (short)0x03A0, (short)0x0420, (short)0x0590, (short)0x0708, (short)0x07B8, (short)0x07D8, (short)0x0808, (short)0x0838,
301 (short)0x07D8, (short)0x06E8, (short)0x0600, (short)0x05B0, (short)0x0518, (short)0x0410, (short)0x02A0, (short)0x0198,
302 (short)0x00D0, (short)0x00C8, (short)0x00B0, (short)0x0068, (short)0x00C0, (short)0x0150, (short)0x0180, (short)0x0220,
303 (short)0x02D8, (short)0x0340, (short)0x0360, (short)0x0380, (short)0x0380, (short)0x0338, (short)0x02C8, (short)0x02B8,
304 (short)0x0280, (short)0x0200, (short)0x0100, (short)0x0098, (short)0x0080, (short)0x0020, (short)0xFFF0, (short)0x0000,
305 (short)0x0020, (short)0x0098, (short)0x0120, (short)0x0170, (short)0x0230, (short)0x02F0, (short)0x0350, (short)0x0480,
306 (short)0x05B8, (short)0x0650, (short)0x06A8, (short)0x0738, (short)0x0798, (short)0x07B0, (short)0x07C0, (short)0x0798,
307 (short)0x0668, (short)0x0598, (short)0x0530, (short)0x04C8, (short)0x0410, (short)0x0350, (short)0x0278, (short)0x01D8,
308 (short)0x0148, (short)0x0080, (short)0x0000, (short)0xFFC0, (short)0xFFD8, (short)0xFFA8, (short)0xFF60, (short)0xFF80,
309 (short)0x0018, (short)0x0070, (short)0xFFE0, (short)0xFF88, (short)0xFFC0, (short)0xFF38, (short)0xFE98, (short)0xFE50,
310 (short)0xFE10, (short)0xFDD8, (short)0xFD90, (short)0xFD30, (short)0xFDB8, (short)0xFE68, (short)0xFE70, (short)0xFE60,
311 (short)0xFE70, (short)0xFED0, (short)0xFF90, (short)0xFFE0, (short)0xFFF0, (short)0x00A8, (short)0x0168, (short)0x01D0,
312 (short)0x01F8, (short)0x0210, (short)0x0278, (short)0x0268, (short)0x0208, (short)0x0220, (short)0x01F8, (short)0x0198,
313 (short)0x0158, (short)0x0100, (short)0x00C0, (short)0x00A0, (short)0x0018, (short)0xFF98, (short)0xFF28, (short)0xFEC0,
314 (short)0xFE80, (short)0xFE60, (short)0xFD88, (short)0xFCF0, (short)0xFCC8, (short)0xFC70, (short)0xFC10, (short)0xFBC8,
315 (short)0xFBB0, (short)0xFBE8, (short)0xFBE8, (short)0xFB80, (short)0xFB88, (short)0xFB40, (short)0xFB18, (short)0xFB20,
316 (short)0xFAB8, (short)0xFA50, (short)0xFA50, (short)0xFAB8, (short)0xFAF8, (short)0xFB18, (short)0xFBB0, (short)0xFC88,
317 (short)0xFD10, (short)0xFD40, (short)0xFD98, (short)0xFE38, (short)0xFEE0, (short)0xFEF8, (short)0xFEF0, (short)0xFF18,
318 (short)0xFF18, (short)0xFF18, (short)0xFF68, (short)0xFF98, (short)0xFF98, (short)0xFFD0, (short)0xFFF8, (short)0x0048,
319 (short)0x0038, (short)0x0008, (short)0x0008, (short)0xFFE0, (short)0xFFB0, (short)0xFFB8, (short)0xFED0, (short)0xFE18,
320 (short)0xFE18, (short)0xFDF0, (short)0xFE38, (short)0xFE90, (short)0xFE90, (short)0xFDA8, (short)0xFD48, (short)0xFD70,
321 (short)0xFD68, (short)0xFD00, (short)0xFCB8, (short)0xFCB8, (short)0xFCF8, (short)0xFD00, (short)0xFC30, (short)0xFBD0,
322 (short)0xFC10, (short)0xFC20, (short)0xFBE0, (short)0xFBA8, (short)0xFC30, (short)0xFD00, (short)0xFD50, (short)0xFD90,
323 (short)0xFE10, (short)0xFEA8, (short)0xFF40, (short)0xFFA0, (short)0xFFD0, (short)0xFFC8, (short)0xFFC8, (short)0xFFD8,
324 (short)0xFFA0, (short)0xFF98, (short)0xFFB8, (short)0x0050, (short)0x00B8, (short)0x00B0, (short)0x01B0, (short)0x02E0,
325 (short)0x0318, (short)0x0330, (short)0x02E0, (short)0x02C8, (short)0x0278, (short)0x0150, (short)0x0050, (short)0xFFC0,
326 (short)0xFF88, (short)0xFF18, (short)0xFE90, (short)0xFE40, (short)0xFE30, (short)0xFDE8, (short)0xFDD0, (short)0xFD70,
327 (short)0xFD48, (short)0xFD10, (short)0xFC98, (short)0xFC38, (short)0xFC38, (short)0xFC78, (short)0xFC98, (short)0xFCF0,
328 (short)0xFDA8, (short)0xFE48, (short)0xFEC8, (short)0xFF30, (short)0xFF98, (short)0x0000, (short)0x0050, (short)0x0058,
329 (short)0x00A8, (short)0x00E8, (short)0x00D0, (short)0x0138, (short)0x01E0, (short)0x0218, (short)0x0208, (short)0x0230,
330 (short)0x0258, (short)0x0248, (short)0x02B0, (short)0x0318, (short)0x0330, (short)0x0358, (short)0x0380, (short)0x0378,
331 (short)0x0408, (short)0x0480, (short)0x0460, (short)0x03C8, (short)0x0318, (short)0x02B0, (short)0x01E8, (short)0x00B8,
332 (short)0xFFD8, (short)0xFF30, (short)0xFEC8, (short)0xFE60, (short)0xFE60, (short)0xFE78, (short)0xFE78, (short)0xFDC0,
333 (short)0xFD70, (short)0xFD50, (short)0xFD08, (short)0xFC88, (short)0xFC28, (short)0xFC98, (short)0xFD18, (short)0xFD60,
334 (short)0xFD60, (short)0xFDD8, (short)0xFE90, (short)0xFEE8, (short)0xFF10, (short)0xFF58, (short)0xFF90, (short)0xFFB8,
335 (short)0xFFE0, (short)0xFFF0, (short)0xFFF0, (short)0x00D0, (short)0x0190, (short)0x01C8, (short)0x0180, (short)0x0188,
336 (short)0x01B0, (short)0x0238, (short)0x0298, (short)0x02B8, (short)0x0268, (short)0x0258, (short)0x0258, (short)0x0230,
337 (short)0x0228, (short)0x0230, (short)0x0258, (short)0x0248, (short)0x01F8, (short)0x0150, (short)0x00C8, (short)0x0058,
338 (short)0x0058, (short)0x0038, (short)0x0000, (short)0xFF50, (short)0xFF00, (short)0xFEF8, (short)0xFE80, (short)0xFDB8,
339 (short)0xFD70, (short)0xFD00, (short)0xFC90, (short)0xFC40, (short)0xFC28, (short)0xFC58, (short)0xFC98, (short)0xFD10,
340 (short)0xFD78, (short)0xFDE0, (short)0xFE80, (short)0xFF08, (short)0xFF60, (short)0xFFD0, (short)0x0030, (short)0x0068,
341 (short)0x0110, (short)0x0198, (short)0x01C0, (short)0x0208, (short)0x0260, (short)0x0280, (short)0x0320, (short)0x0390,
342 (short)0x0398, (short)0x0410, (short)0x0488, (short)0x04A0, (short)0x0448, (short)0x0408, (short)0x03E0, (short)0x03C8,
343 (short)0x0398, (short)0x0350, (short)0x0308, (short)0x02C8, (short)0x0278, (short)0x01D8, (short)0x0148, (short)0x00E8,
344 (short)0x0040, (short)0xFFA0, (short)0xFF50, (short)0xFDC0, (short)0xFC88, (short)0xFC30, (short)0xFB88, (short)0xFAA8,
345 (short)0xFA50, (short)0xFA30, (short)0xFA40, (short)0xFA70, (short)0xFAB8, (short)0xFAE0, (short)0xFB28, (short)0xFB58,
346 (short)0xFB80, (short)0xFBB0, (short)0xFC00, (short)0xFC80, (short)0xFCF0, (short)0xFDB8, (short)0xFE58, (short)0xFED8,
347 (short)0x0008, (short)0x0100, (short)0x0180, (short)0x01D0, (short)0x0210, (short)0x0248, (short)0x0238, (short)0x0200,
348 (short)0x01D0, (short)0x02D0, (short)0x03A0, (short)0x03D8, (short)0x03C0, (short)0x03D8, (short)0x03F8, (short)0x0370,
349 (short)0x02C0, (short)0x0258, (short)0x01B8, (short)0x0120, (short)0x0090, (short)0x0088, (short)0x00A8, (short)0x00A8,
350 (short)0x0088, (short)0x0068, (short)0x0060, (short)0xFFE0, (short)0xFF00, (short)0xFE50, (short)0xFDC8, (short)0xFCF0,
351 (short)0xFC30, (short)0xFBB0, (short)0xFBD8, (short)0xFC20, (short)0xFC58, (short)0xFC30, (short)0xFC40, (short)0xFC78,
352 (short)0xFCC0, (short)0xFCE8, (short)0xFD10, (short)0xFD48, (short)0xFD88, (short)0xFDE8, (short)0xFF10, (short)0x0020,
353 (short)0x0110, (short)0x01B8, (short)0x0248, (short)0x02C0, (short)0x0358, (short)0x03B8, (short)0x03C8, (short)0x0320,
354 (short)0x0288, (short)0x0280, (short)0x0300, (short)0x0340, (short)0x0320, (short)0x0380, (short)0x03F8, (short)0x0418,
355 (short)0x0378, (short)0x02E0, (short)0x0288, (short)0x0280, (short)0x0238, (short)0x01D0, (short)0x0168, (short)0x0138,
356 (short)0x0110, (short)0x0140, (short)0x0148, (short)0x0150, (short)0x00A8, (short)0x0010, (short)0xFFB0, (short)0xFEB8,
357 (short)0xFDE0, (short)0xFD48, (short)0xFCE8, (short)0xFCA8, (short)0xFC78, (short)0xFC48, (short)0xFC50, (short)0xFC70,
358 (short)0xFCA8, (short)0xFCE8, (short)0xFD28, (short)0xFDD0, (short)0xFE70, (short)0xFED8, (short)0x0040, (short)0x0188,
359 (short)0x0258, (short)0x03C0, (short)0x04F0, (short)0x05B8, (short)0x0638, (short)0x0670, (short)0x0690, (short)0x0708,
360 (short)0x0708, (short)0x06B8, (short)0x0660, (short)0x0650, (short)0x0630, (short)0x05C8, (short)0x0578, (short)0x0548,
361 (short)0x0508, (short)0x0470, (short)0x03D0, (short)0x0350, (short)0x0278, (short)0x01A0, (short)0x00F8, (short)0x00B0,
362 (short)0x0078, (short)0x0030, (short)0xFFE8, (short)0xFFC8, (short)0xFFB8, (short)0xFED0, (short)0xFE08, (short)0xFD98,
363 (short)0xFC70, (short)0xFB60, (short)0xFAA8, (short)0xFA10, (short)0xF9B8, (short)0xF980, (short)0xF9A0, (short)0xFA00,
364 (short)0xFA68, (short)0xFB90, (short)0xFCB8, (short)0xFD98, (short)0xFE68, (short)0xFF18, (short)0xFFC0, (short)0x0078,
365 (short)0x00F8, (short)0x0218, (short)0x0320, (short)0x03C0, (short)0x0478, (short)0x0510, (short)0x0570, (short)0x05D8,
366 (short)0x05E0, (short)0x05B8, (short)0x0508, (short)0x0468, (short)0x03E0, (short)0x02F0, (short)0x0218, (short)0x0168,
367 (short)0x00F0, (short)0x0060, (short)0xFFD0, (short)0xFF58, (short)0xFEC0, (short)0xFE48, (short)0xFDB0, (short)0xFD58,
368 (short)0xFD38, (short)0xFCD8, (short)0xFC80, (short)0xFC50, (short)0xFC08, (short)0xFB48, (short)0xFA98, (short)0xF9F8,
369 (short)0xF8F8, (short)0xF810, (short)0xF7F8, (short)0xF818, (short)0xF848, (short)0xF8E8, (short)0xF9E0, (short)0xFB08,
370 (short)0xFC38, (short)0xFD10, (short)0xFDE8, (short)0xFF10, (short)0xFFD0, (short)0x0048, (short)0x00E0, (short)0x0160,
371 (short)0x01B8, (short)0x01C8, (short)0x01E0, (short)0x0200, (short)0x0228, (short)0x0240, (short)0x0240, (short)0x0240,
372 (short)0x0260, (short)0x0280, (short)0x0280, (short)0x02F0, (short)0x0370, (short)0x03C8, (short)0x03C8, (short)0x03A8,
373 (short)0x03A0, (short)0x02F8, (short)0x0220, (short)0x0150, (short)0x0098, (short)0xFFE0, (short)0xFF20, (short)0xFEA0,
374 (short)0xFE50, (short)0xFE18, (short)0xFD38, (short)0xFC60, (short)0xFBE0, (short)0xFAC8, (short)0xF9A0, (short)0xF8B8,
375 (short)0xF830, (short)0xF888, (short)0xF8B8, (short)0xF908, (short)0xFA80, (short)0xFBF8, (short)0xFD48, (short)0xFEC8,
376 (short)0x0040, (short)0x01B0, (short)0x0298, (short)0x0338, (short)0x03C0, (short)0x0470, (short)0x0520, (short)0x0588,
377 (short)0x0610, (short)0x0688, (short)0x06C8, (short)0x0670, (short)0x05E8, (short)0x0578, (short)0x0580, (short)0x0578,
378 (short)0x0528, (short)0x0498, (short)0x0408, (short)0x0390, (short)0x03F8, (short)0x0458, (short)0x0488, (short)0x0468,
379 (short)0x0450, (short)0x0458, (short)0x03A8, (short)0x02D0, (short)0x0210, (short)0x0158, (short)0x0088, (short)0xFFA8,
380 (short)0xFF00, (short)0xFE88, (short)0xFE30, (short)0xFD88, (short)0xFCB8, (short)0xFC28, (short)0xFB30, (short)0xF9F0,
381 (short)0xF8E8, (short)0xF890, (short)0xF890, (short)0xF8C0, (short)0xF978, (short)0xFA78, (short)0xFBE8, (short)0xFD20,
382 (short)0xFE28, (short)0xFF60, (short)0x00D8, (short)0x0220, (short)0x02F8, (short)0x0378, (short)0x03E0, (short)0x0438,
383 (short)0x0488, (short)0x0498, (short)0x04A8, (short)0x0480, (short)0x0440, (short)0x03C0, (short)0x02D8, (short)0x01E8,
384 (short)0x0140, (short)0x00D8, (short)0x0068, (short)0xFFE0, (short)0x0068, (short)0x0130, (short)0x0228, (short)0x0260,
385 (short)0x0278, (short)0x02D0, (short)0x02D8, (short)0x0290, (short)0x01E0, (short)0x00D0, (short)0xFFE0, (short)0xFEF8,
386 (short)0xFE08, (short)0xFD28, (short)0xFC88, (short)0xFBE0, (short)0xFB60, (short)0xFAD8, (short)0xFA08, (short)0xF978,
387 (short)0xF8E8, (short)0xF8B0, (short)0xF8B0, (short)0xF8D0, (short)0xF9D0, (short)0xFAF8, (short)0xFC18, (short)0xFDB0,
388 (short)0xFF38, (short)0x00A0, (short)0x01F8, (short)0x02F8, (short)0x03C0, (short)0x0460, (short)0x04B8, (short)0x04C8,
389 (short)0x04C8, (short)0x04C0, (short)0x0498, (short)0x0490, (short)0x0478, (short)0x0448, (short)0x0420, (short)0x03F8,
390 (short)0x0328, (short)0x0238, (short)0x01B0, (short)0x0170, (short)0x0128, (short)0x0090, (short)0x00E8, (short)0x01B8,
391 (short)0x02B8, (short)0x0280, (short)0x0218, (short)0x0218, (short)0x01F0, (short)0x0148, (short)0x0000, (short)0xFEC0,
392 (short)0xFE08, (short)0xFD70, (short)0xFCA0, (short)0xFBF0, (short)0xFBC0, (short)0xFBA0, (short)0xFB80, (short)0xFB18,
393 (short)0xFB28, (short)0xFB98, (short)0xFBC0, (short)0xFBD0, (short)0xFC08, (short)0xFC78, (short)0xFDC8, (short)0xFEC8,
394 (short)0xFF78, (short)0x00D0, (short)0x0238, (short)0x0360, (short)0x0398, (short)0x0360, (short)0x0368, (short)0x0380,
395 (short)0x0318, (short)0x0250, (short)0x0208, (short)0x0220, (short)0x0218, (short)0x01F0, (short)0x01C8, (short)0x0210,
396 (short)0x0270, (short)0x0270, (short)0x0240, (short)0x0290, (short)0x0310, (short)0x0360, (short)0x0340, (short)0x0310,
397 (short)0x0318, (short)0x0320, (short)0x02D8, (short)0x0240, (short)0x0158, (short)0x00A0, (short)0x0008, (short)0xFF30,
398 (short)0xFE50, (short)0xFDA8, (short)0xFD28, (short)0xFCC8, (short)0xFC60, (short)0xFBA8, (short)0xFB40, (short)0xFB10,
399 (short)0xFB18, (short)0xFB28, (short)0xFB48, (short)0xFB68, (short)0xFBA8, (short)0xFBF8, (short)0xFCB8, (short)0xFD78,
400 (short)0xFE00, (short)0xFE88, (short)0xFF30, (short)0xFF98, (short)0xFFC8, (short)0xFFE8, (short)0x0050, (short)0x00B0,
401 (short)0x00E0, (short)0x0040, (short)0xFF68, (short)0xFED8, (short)0xFEE8, (short)0xFEE0, (short)0xFE90, (short)0xFEA8,
402 (short)0xFF88, (short)0x0080, (short)0x0188, (short)0x0208, (short)0x0290, (short)0x0390, (short)0x0438, (short)0x0450,
403 (short)0x0428, (short)0x03F8, (short)0x03E0, (short)0x0388, (short)0x02E0, (short)0x0240, (short)0x0190, (short)0x00D0,
404 (short)0x0000, (short)0x0000, (short)0x0018, (short)0x00FF, (short)0x0068, (short)0x00FE, (short)0x00F8, (short)0x00FD
405};
406
407gsm_byte gsm_enc_gsmdata[] = {
408 0xD5, 0x1F, 0x74, 0x21, 0xA0, 0x50, 0x40, 0xC9, 0x24, 0x7B, 0xFA, 0x6B, 0x52, 0xE0, 0xB6, 0xD6,
409 0x8E, 0xB9, 0x2B, 0xAE, 0xE0, 0x8B, 0x23, 0x52, 0x3B, 0x13, 0x86, 0xE0, 0x14, 0x4A, 0x41, 0x44,
410 0x32, 0xD3, 0xA1, 0x83, 0xA1, 0x1D, 0xA6, 0x80, 0xBA, 0xD2, 0x96, 0x26, 0xFB, 0x84, 0x80, 0x6D,
411 0x9C, 0x25, 0x1D, 0x9B, 0xAA, 0xC0, 0xBB, 0x4C, 0x95, 0xB9, 0x53, 0xAE, 0xA0, 0xB6, 0xE4, 0x46,
412 0x37, 0x1B, 0xD4, 0xA5, 0x7B, 0x1D, 0x22, 0x97, 0x00, 0xBA, 0xA5, 0x6D, 0xD2, 0xA1, 0x7E, 0xC0,
413 0xB9, 0x25, 0xD2, 0xB4, 0x94, 0x9E, 0xE0, 0x3E, 0xDE, 0xED, 0xD6, 0xD2, 0xE2, 0xC0, 0xD7, 0x5D,
414 0x8D, 0x59, 0xAC, 0xD3, 0xE4, 0x83, 0x95, 0x59, 0xC0, 0xA1, 0x48, 0xD2, 0x66, 0xC7, 0x2C, 0x9E,
415 0xA0, 0x2A, 0xD3, 0xEE, 0x45, 0x1C, 0x80, 0xE0, 0x6B, 0x34, 0x8C, 0x4B, 0x29, 0xCB, 0x00, 0xBA,
416 0xF6, 0x0D, 0x26, 0x9A, 0xD3, 0xA4, 0x82, 0x9D, 0x63, 0x7A, 0xC0, 0x67, 0x24, 0xBA, 0xD6, 0x7C,
417 0xC2, 0xC0, 0x37, 0x20, 0x4F, 0x10, 0xE0, 0xC7, 0x80, 0x6A, 0x77, 0x63, 0xBE, 0x6B, 0x5A, 0xC0,
418 0xB5, 0x34, 0xD1, 0x34, 0x9C, 0xD4, 0xE8, 0x56, 0xB2, 0x58, 0x5F, 0x00, 0xB7, 0xAF, 0x92, 0x12,
419 0x90, 0xD5, 0xA4, 0x39, 0x23, 0x4E, 0x46, 0x87, 0x51, 0xAC, 0xD8, 0xDB, 0x6D, 0xCB, 0x17, 0x50,
420 0x89, 0x7B, 0x44, 0x28, 0x03, 0x6B, 0xD5, 0xA9, 0x36, 0x36, 0xD9, 0x6B, 0xA8, 0x93, 0x3A, 0x96,
421 0xEE, 0xFF, 0x67, 0x8B, 0x36, 0xDA, 0x09, 0xB4, 0x99, 0x67, 0x2B, 0x88, 0xE4, 0xB5, 0xA5, 0xDA,
422 0x65, 0x47, 0xDA, 0x1E, 0x96, 0xFA, 0xEC, 0xD5, 0xA9, 0x45, 0x63, 0x1A, 0xCB, 0xC9, 0x48, 0x9D,
423 0x83, 0x5F, 0x6F, 0xCB, 0x08, 0x1B, 0x97, 0xC9, 0x18, 0x0A, 0x63, 0xCB, 0xA6, 0xE1, 0x84, 0xF5,
424 0x62, 0x61, 0x6A, 0x84, 0xDC, 0xB6, 0x37, 0x9E, 0xD6, 0xAB, 0x3C, 0x53, 0x93, 0xC1, 0x2A, 0xAA,
425 0x81, 0x8D, 0x6B, 0x65, 0x60, 0xA8, 0xFB, 0x2E, 0x22, 0x59, 0x74, 0x61, 0xA6, 0x5D, 0x73, 0x94,
426 0xF8, 0xE4, 0xC1, 0x46, 0x26, 0x5E, 0x8A, 0x86, 0xED, 0xD4, 0xA6, 0x2D, 0x57, 0x6B, 0xBE, 0xE8,
427 0x58, 0xDA, 0x3D, 0x98, 0x99, 0xBE, 0xA8, 0xC2, 0xDB, 0x6A, 0x2E, 0x51, 0x62, 0xE5, 0x80, 0x58,
428 0x76, 0xB8, 0xE4, 0x6C, 0x84, 0xCA, 0x98, 0x06, 0x0B, 0xFC, 0xD2, 0x66, 0x7C, 0x62, 0x3A, 0x5B,
429 0xC5, 0xDF, 0x7D, 0x75, 0x49, 0x1E, 0x52, 0xC7, 0x55, 0xF7, 0x84, 0xA6, 0xDA, 0x5D, 0x43, 0x26,
430 0x85, 0x98, 0xD8, 0x8F, 0xB6, 0xC5, 0x28, 0xEB, 0x3E, 0x75, 0x04, 0xD2, 0x27, 0xBA, 0x2A, 0x2B,
431 0xB7, 0x03, 0x13, 0x45, 0x35, 0x1B, 0x78, 0x5F, 0xC3, 0xBA, 0xDB, 0xAE, 0x27, 0xC2, 0x5E, 0xA4,
432 0x50, 0x8C, 0x8A, 0xBB, 0x4F, 0x60, 0xC3, 0xEE, 0x41, 0x46, 0x4A, 0xDF, 0xD2, 0x27, 0xB2, 0xAD,
433 0xEB, 0x5F, 0x43, 0x4C, 0x6A, 0x09, 0x2A, 0xCC, 0xB7, 0x47, 0x2A, 0xB9, 0x91, 0xB6, 0xD4, 0x5B,
434 0x25, 0x58, 0xD8, 0xFD, 0x46, 0x95, 0x5A, 0xC3, 0x27, 0x5B, 0x3F, 0xFB, 0x12, 0xD2, 0x26, 0xC3,
435 0xA9, 0xA1, 0xB6, 0xA2, 0xCB, 0x1B, 0xD0, 0x73, 0xE4, 0xBA, 0xA1, 0xE9, 0x05, 0xBE, 0x79, 0x23,
436 0xA4, 0xC2, 0x3A, 0x4B, 0x11, 0xE5, 0x68, 0xC4, 0xC1, 0xBA, 0xC1, 0xCC, 0x8B, 0x02, 0xD2, 0x63,
437 0x6C, 0xEE, 0x19, 0x5E, 0xE1, 0xB6, 0x4C, 0x1A, 0xB4, 0x5E, 0xF0, 0xC2, 0x27, 0x20, 0x55, 0xBD,
438 0x6D, 0x64, 0xE1, 0xC7, 0x45, 0xA9, 0x65, 0x6D, 0x7D, 0x42, 0x56, 0xD8, 0xB2, 0xB6, 0xEC, 0xD3,
439 0x61, 0x5B, 0x62, 0x61, 0x60, 0xA1, 0x5B, 0xD6, 0x15, 0x29, 0x09, 0x6C, 0xA1, 0x3E, 0xAD, 0x65,
440 0x34, 0xC3, 0xC0, 0xC1, 0x22, 0x6D, 0x4C, 0x57, 0x10, 0xDB, 0x41, 0xD2, 0xE1, 0x77, 0x64, 0xF7,
441 0xD3, 0x21, 0x73, 0xA9, 0x29, 0x58, 0xC1, 0xA1, 0x5A, 0x52, 0xB7, 0x32, 0x64, 0xC1, 0x67, 0x42,
442 0x74, 0x2C, 0xDC, 0x61, 0x61, 0x65, 0x8B, 0xCB, 0x04, 0xE5, 0x60, 0xC1, 0xC9, 0x5E, 0x8E, 0x36,
443 0x83, 0xD2, 0xA2, 0x83, 0xA9, 0xD9, 0xCD, 0x21, 0xB9, 0x25, 0xCD, 0xE6, 0x1D, 0x60, 0xA1, 0xB4,
444 0xAA, 0x8F, 0xBA, 0x75, 0xC3, 0x01, 0x0B, 0x3B, 0x51, 0xDB, 0xEC, 0x62, 0xE1, 0x38, 0xCD, 0x40,
445 0x3B, 0xD3, 0xD2, 0x26, 0x94, 0x29, 0xD2, 0x61, 0x21, 0x6B, 0x4A, 0x8D, 0x24, 0xB5, 0xBB, 0x21,
446 0x12, 0xA5, 0x99, 0xA5, 0x1A, 0xCA, 0xA1, 0xEF, 0x5D, 0xAA, 0xAE, 0xD3, 0x64, 0xE1, 0xA3, 0x6B,
447 0xAE, 0x35, 0x39, 0xD2, 0x66, 0x73, 0xB6, 0x90, 0xC6, 0xC1, 0x32, 0xD1, 0xBA, 0xC9, 0x25, 0x65,
448 0x81, 0xA8, 0xD2, 0xB1, 0xE7, 0x18, 0xBE, 0xC0, 0xFC, 0xE4, 0x85, 0xB5, 0x06, 0xB4, 0x81, 0x35,
449 0x46, 0xB6, 0xC8, 0x9B
450};
451
452#endif /* end of include guard: DATA_H */
diff --git a/all_pairs/source/gsm_enc/gsm_enc.c b/all_pairs/source/gsm_enc/gsm_enc.c
new file mode 100644
index 0000000..cdac899
--- /dev/null
+++ b/all_pairs/source/gsm_enc/gsm_enc.c
@@ -0,0 +1,2072 @@
1/* gsm_enc_encode.c */
2/*
3 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
4 * Universitaet Berlin. See the accompanying file "COPYRIGHT" for
5 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
6 */
7
8#include "../extra.h"
9#include "private.h"
10
11/*
12 * Prototypes from add.c
13 */
14
15extern word gsm_enc_div (word num, word denum);
16
17extern word gsm_enc_sub (word a, word b);
18
19extern word gsm_enc_norm ( longword a );
20
21extern word gsm_enc_asl (word a, int n);
22
23extern word gsm_enc_asr (word a, int n);
24
25/*
26 * Inlined functions from add.h
27 */
28
29#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \
30 (SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
31
32# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \
33 (SASR( ((longword)(a) * (longword)(b)), 15 ))
34
35# define GSM_L_ADD(a, b) \
36 ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
37 : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
38 >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
39 : ((b) <= 0 ? (a) + (b) \
40 : (utmp = (ulongword)(a) + (ulongword)(b)) >= (ulongword)MAX_LONGWORD \
41 ? MAX_LONGWORD : a + b))
42
43#define GSM_ADD(a, b) \
44 ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \
45 MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
46
47# define GSM_SUB(a, b) \
48 ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \
49 ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
50
51# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
52
53#define saturate(x) \
54 ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
55
56/* Use these if necessary:
57
58# define GSM_MULT_R(a, b) gsm_enc_mult_r(a, b)
59# define GSM_MULT(a, b) gsm_enc_mult(a, b)
60# define GSM_L_MULT(a, b) gsm_enc_L_mult(a, b)
61
62# define GSM_L_ADD(a, b) gsm_enc_L_add(a, b)
63# define GSM_ADD(a, b) gsm_enc_add(a, b)
64# define GSM_SUB(a, b) gsm_enc_sub(a, b)
65
66# define GSM_ABS(a) gsm_enc_abs(a)
67*/
68
69/*
70 * More prototypes from implementations..
71 */
72extern void gsm_enc_Gsm_Coder (
73 struct gsm_state * S,
74 word * s, /* [0..159] samples IN */
75 word * LARc, /* [0..7] LAR coefficients OUT */
76 word * Nc, /* [0..3] LTP lag OUT */
77 word * bc, /* [0..3] coded LTP gain OUT */
78 word * Mc, /* [0..3] RPE grid selection OUT */
79 word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
80 word * xMc /* [13*4] normalized RPE samples OUT */);
81
82extern void gsm_enc_Gsm_Long_Term_Predictor ( /* 4x for 160 samples */
83 word * d, /* [0..39] residual signal IN */
84 word * dp, /* [-120..-1] d' IN */
85 word * e, /* [0..40] OUT */
86 word * dpp, /* [0..40] OUT */
87 word * Nc, /* correlation lag OUT */
88 word * bc /* gain factor OUT */);
89
90extern void gsm_enc_Gsm_LPC_Analysis (
91 word * s, /* 0..159 signals IN/OUT */
92 word * LARc); /* 0..7 LARc's OUT */
93
94extern void gsm_enc_Gsm_Preprocess (
95 struct gsm_state * S,
96 word * s, word * so);
97
98extern void gsm_enc_Gsm_Short_Term_Analysis_Filter (
99 struct gsm_state * S,
100 word * LARc, /* coded log area ratio [0..7] IN */
101 word * d /* st res. signal [0..159] IN/OUT */);
102
103void gsm_enc_Gsm_RPE_Encoding (
104 word * e, /* -5..-1][0..39][40..44 IN/OUT */
105 word * xmaxc, /* OUT */
106 word * Mc, /* OUT */
107 word * xMc); /* [0..12] OUT */
108
109
110/**************** end #include "private.h" **********************************/
111
112/*
113 * Interface
114 */
115
116typedef struct gsm_state * gsm;
117typedef short gsm_signal; /* signed 16 bit */
118typedef unsigned char gsm_byte;
119typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */
120
121#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */
122
123#define GSM_PATCHLEVEL 6
124#define GSM_MINOR 0
125#define GSM_MAJOR 1
126
127#include "data.h"
128
129extern void gsm_enc_encode (gsm, gsm_signal *, gsm_byte *);
130
131extern int gsm_enc_explode (gsm, gsm_byte *, gsm_signal *);
132extern void gsm_enc_implode (gsm, gsm_signal *, gsm_byte *);
133
134
135/******************* end #include "gsm.h" **********************************/
136
137#define SAMPLES 20
138
139/*
140 Forward declaration of global variables
141*/
142
143struct gsm_state gsm_enc_state;
144gsm gsm_enc_state_ptr;
145volatile int gsm_enc_result;
146
147
148/* add.c */
149
150word gsm_enc_sub (word a, word b)
151{
152 longword diff = (longword)a - (longword)b;
153 return saturate(diff);
154}
155
156
157unsigned char gsm_enc_bitoff[ 256 ] = {
158 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
159 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
160 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
161 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
162 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
163 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
164 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
165 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
166 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
170 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
171 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
172 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
173 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
174};
175
176void gsm_enc_encode (gsm s, gsm_signal * source, gsm_byte * c)
177{
178 word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
179
180 gsm_enc_Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc);
181
182
183 /* variable size
184
185 GSM_MAGIC 4
186
187 LARc[0] 6
188 LARc[1] 6
189 LARc[2] 5
190 LARc[3] 5
191 LARc[4] 4
192 LARc[5] 4
193 LARc[6] 3
194 LARc[7] 3
195
196 Nc[0] 7
197 bc[0] 2
198 Mc[0] 2
199 xmaxc[0] 6
200 xmc[0] 3
201 xmc[1] 3
202 xmc[2] 3
203 xmc[3] 3
204 xmc[4] 3
205 xmc[5] 3
206 xmc[6] 3
207 xmc[7] 3
208 xmc[8] 3
209 xmc[9] 3
210 xmc[10] 3
211 xmc[11] 3
212 xmc[12] 3
213
214 Nc[1] 7
215 bc[1] 2
216 Mc[1] 2
217 xmaxc[1] 6
218 xmc[13] 3
219 xmc[14] 3
220 xmc[15] 3
221 xmc[16] 3
222 xmc[17] 3
223 xmc[18] 3
224 xmc[19] 3
225 xmc[20] 3
226 xmc[21] 3
227 xmc[22] 3
228 xmc[23] 3
229 xmc[24] 3
230 xmc[25] 3
231
232 Nc[2] 7
233 bc[2] 2
234 Mc[2] 2
235 xmaxc[2] 6
236 xmc[26] 3
237 xmc[27] 3
238 xmc[28] 3
239 xmc[29] 3
240 xmc[30] 3
241 xmc[31] 3
242 xmc[32] 3
243 xmc[33] 3
244 xmc[34] 3
245 xmc[35] 3
246 xmc[36] 3
247 xmc[37] 3
248 xmc[38] 3
249
250 Nc[3] 7
251 bc[3] 2
252 Mc[3] 2
253 xmaxc[3] 6
254 xmc[39] 3
255 xmc[40] 3
256 xmc[41] 3
257 xmc[42] 3
258 xmc[43] 3
259 xmc[44] 3
260 xmc[45] 3
261 xmc[46] 3
262 xmc[47] 3
263 xmc[48] 3
264 xmc[49] 3
265 xmc[50] 3
266 xmc[51] 3
267 */
268
269
270 *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */
271 | ((LARc[0] >> 2) & 0xF);
272 *c++ = ((LARc[0] & 0x3) << 6)
273 | (LARc[1] & 0x3F);
274 *c++ = ((LARc[2] & 0x1F) << 3)
275 | ((LARc[3] >> 2) & 0x7);
276 *c++ = ((LARc[3] & 0x3) << 6)
277 | ((LARc[4] & 0xF) << 2)
278 | ((LARc[5] >> 2) & 0x3);
279 *c++ = ((LARc[5] & 0x3) << 6)
280 | ((LARc[6] & 0x7) << 3)
281 | (LARc[7] & 0x7);
282 *c++ = ((Nc[0] & 0x7F) << 1)
283 | ((bc[0] >> 1) & 0x1);
284 *c++ = ((bc[0] & 0x1) << 7)
285 | ((Mc[0] & 0x3) << 5)
286 | ((xmaxc[0] >> 1) & 0x1F);
287 *c++ = ((xmaxc[0] & 0x1) << 7)
288 | ((xmc[0] & 0x7) << 4)
289 | ((xmc[1] & 0x7) << 1)
290 | ((xmc[2] >> 2) & 0x1);
291 *c++ = ((xmc[2] & 0x3) << 6)
292 | ((xmc[3] & 0x7) << 3)
293 | (xmc[4] & 0x7);
294 *c++ = ((xmc[5] & 0x7) << 5) /* 10 */
295 | ((xmc[6] & 0x7) << 2)
296 | ((xmc[7] >> 1) & 0x3);
297 *c++ = ((xmc[7] & 0x1) << 7)
298 | ((xmc[8] & 0x7) << 4)
299 | ((xmc[9] & 0x7) << 1)
300 | ((xmc[10] >> 2) & 0x1);
301 *c++ = ((xmc[10] & 0x3) << 6)
302 | ((xmc[11] & 0x7) << 3)
303 | (xmc[12] & 0x7);
304 *c++ = ((Nc[1] & 0x7F) << 1)
305 | ((bc[1] >> 1) & 0x1);
306 *c++ = ((bc[1] & 0x1) << 7)
307 | ((Mc[1] & 0x3) << 5)
308 | ((xmaxc[1] >> 1) & 0x1F);
309 *c++ = ((xmaxc[1] & 0x1) << 7)
310 | ((xmc[13] & 0x7) << 4)
311 | ((xmc[14] & 0x7) << 1)
312 | ((xmc[15] >> 2) & 0x1);
313 *c++ = ((xmc[15] & 0x3) << 6)
314 | ((xmc[16] & 0x7) << 3)
315 | (xmc[17] & 0x7);
316 *c++ = ((xmc[18] & 0x7) << 5)
317 | ((xmc[19] & 0x7) << 2)
318 | ((xmc[20] >> 1) & 0x3);
319 *c++ = ((xmc[20] & 0x1) << 7)
320 | ((xmc[21] & 0x7) << 4)
321 | ((xmc[22] & 0x7) << 1)
322 | ((xmc[23] >> 2) & 0x1);
323 *c++ = ((xmc[23] & 0x3) << 6)
324 | ((xmc[24] & 0x7) << 3)
325 | (xmc[25] & 0x7);
326 *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */
327 | ((bc[2] >> 1) & 0x1);
328 *c++ = ((bc[2] & 0x1) << 7)
329 | ((Mc[2] & 0x3) << 5)
330 | ((xmaxc[2] >> 1) & 0x1F);
331 *c++ = ((xmaxc[2] & 0x1) << 7)
332 | ((xmc[26] & 0x7) << 4)
333 | ((xmc[27] & 0x7) << 1)
334 | ((xmc[28] >> 2) & 0x1);
335 *c++ = ((xmc[28] & 0x3) << 6)
336 | ((xmc[29] & 0x7) << 3)
337 | (xmc[30] & 0x7);
338 *c++ = ((xmc[31] & 0x7) << 5)
339 | ((xmc[32] & 0x7) << 2)
340 | ((xmc[33] >> 1) & 0x3);
341 *c++ = ((xmc[33] & 0x1) << 7)
342 | ((xmc[34] & 0x7) << 4)
343 | ((xmc[35] & 0x7) << 1)
344 | ((xmc[36] >> 2) & 0x1);
345 *c++ = ((xmc[36] & 0x3) << 6)
346 | ((xmc[37] & 0x7) << 3)
347 | (xmc[38] & 0x7);
348 *c++ = ((Nc[3] & 0x7F) << 1)
349 | ((bc[3] >> 1) & 0x1);
350 *c++ = ((bc[3] & 0x1) << 7)
351 | ((Mc[3] & 0x3) << 5)
352 | ((xmaxc[3] >> 1) & 0x1F);
353 *c++ = ((xmaxc[3] & 0x1) << 7)
354 | ((xmc[39] & 0x7) << 4)
355 | ((xmc[40] & 0x7) << 1)
356 | ((xmc[41] >> 2) & 0x1);
357 *c++ = ((xmc[41] & 0x3) << 6) /* 30 */
358 | ((xmc[42] & 0x7) << 3)
359 | (xmc[43] & 0x7);
360 *c++ = ((xmc[44] & 0x7) << 5)
361 | ((xmc[45] & 0x7) << 2)
362 | ((xmc[46] >> 1) & 0x3);
363 *c++ = ((xmc[46] & 0x1) << 7)
364 | ((xmc[47] & 0x7) << 4)
365 | ((xmc[48] & 0x7) << 1)
366 | ((xmc[49] >> 2) & 0x1);
367 *c++ = ((xmc[49] & 0x3) << 6)
368 | ((xmc[50] & 0x7) << 3)
369 | (xmc[51] & 0x7);
370
371}
372
373/* decode.c */
374/*
375 * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER
376 */
377
378/* code.c */
379void gsm_enc_Gsm_Coder (
380
381 struct gsm_state * S,
382
383 word * s, /* [0..159] samples IN */
384
385/*
386 * The RPE-LTD coder works on a frame by frame basis. The length of
387 * the frame is equal to 160 samples. Some computations are done
388 * once per frame to produce at the output of the coder the
389 * LARc[1..8] parameters which are the coded LAR coefficients and
390 * also to realize the inverse filtering operation for the entire
391 * frame (160 samples of signal d[0..159]). These parts produce at
392 * the output of the coder:
393 */
394
395 word * LARc, /* [0..7] LAR coefficients OUT */
396
397/*
398 * Procedure 4.2.11 to 4.2.18 are to be executed four times per
399 * frame. That means once for each sub-segment RPE-LTP analysis of
400 * 40 samples. These parts produce at the output of the coder:
401 */
402
403 word * Nc, /* [0..3] LTP lag OUT */
404 word * bc, /* [0..3] coded LTP gain OUT */
405 word * Mc, /* [0..3] RPE grid selection OUT */
406 word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
407 word * xMc /* [13*4] normalized RPE samples OUT */
408)
409{
410 int k;
411 word * dp = S->dp0 + 120; /* [ -120...-1 ] */
412 word * dpp = dp; /* [ 0...39 ] */
413
414 static word e [50] = {0};
415
416 word so[160];
417
418 gsm_enc_Gsm_Preprocess (S, s, so);
419 gsm_enc_Gsm_LPC_Analysis (so, LARc);
420 gsm_enc_Gsm_Short_Term_Analysis_Filter (S, LARc, so);
421
422 _Pragma("loopbound min 4 max 4")
423 for (k = 0; k <= 3; k++, xMc += 13) {
424
425 gsm_enc_Gsm_Long_Term_Predictor (
426 so+k*40, /* d [0..39] IN */
427 dp, /* dp [-120..-1] IN */
428 e + 5, /* e [0..39] OUT */
429 dpp, /* dpp [0..39] OUT */
430 Nc++,
431 bc++);
432
433 gsm_enc_Gsm_RPE_Encoding (
434 e + 5, /* e ][0..39][ IN/OUT */
435 xmaxc++, Mc++, xMc );
436 /*
437 * gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal
438 * ( dpp, e + 5, dp );
439 */
440
441 { int i;
442 longword ltmp;
443 _Pragma("loopbound min 40 max 40")
444 for (i = 0; i <= 39; i++) {
445 dp[ i ] = GSM_ADD( e[5 + i], dpp[i] );
446 }
447 }
448
449 dp += 40;
450 dpp += 40;
451
452 }
453// //(void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160),
454// // 120 * sizeof(*S->dp0) );
455}
456
457/* rpe.c */
458/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION
459 */
460
461/* 4.2.13 */
462
463void gsm_enc_Weighting_filter (
464 word * e, /* signal [-5..0.39.44] IN */
465 word * x /* signal [0..39] OUT */
466)
467/*
468 * The coefficients of the weighting filter are stored in a table
469 * (see table 4.4). The following scaling is used:
470 *
471 * H[0..10] = integer( real_H[ 0..10] * 8192 );
472 */
473{
474 /* word wt[ 50 ]; */
475
476 longword L_result;
477 int k /* , i */ ;
478
479 /* Initialization of a temporary working array wt[0...49]
480 */
481
482 /* for (k = 0; k <= 4; k++) wt[k] = 0;
483 * for (k = 5; k <= 44; k++) wt[k] = *e++;
484 * for (k = 45; k <= 49; k++) wt[k] = 0;
485 *
486 * (e[-5..-1] and e[40..44] are allocated by the caller,
487 * are initially zero and are not written anywhere.)
488 */
489 e -= 5;
490
491 /* Compute the signal x[0..39]
492 */
493 _Pragma("loopbound min 40 max 40")
494 for (k = 0; k <= 39; k++) {
495
496 L_result = 8192 >> 1;
497
498 /* for (i = 0; i <= 10; i++) {
499 * L_temp = GSM_L_MULT( wt[k+i], gsm_enc_H[i] );
500 * L_result = GSM_L_ADD( L_result, L_temp );
501 * }
502 */
503
504#undef STEP
505#define STEP( i, H ) (e[ k + i ] * (longword)H)
506
507 /* Every one of these multiplications is done twice --
508 * but I don't see an elegant way to optimize this.
509 * Do you?
510 */
511
512#ifdef STUPID_COMPILER
513 L_result += STEP( 0, -134 ) ;
514 L_result += STEP( 1, -374 ) ;
515 /* + STEP( 2, 0 ) */
516 L_result += STEP( 3, 2054 ) ;
517 L_result += STEP( 4, 5741 ) ;
518 L_result += STEP( 5, 8192 ) ;
519 L_result += STEP( 6, 5741 ) ;
520 L_result += STEP( 7, 2054 ) ;
521 /* + STEP( 8, 0 ) */
522 L_result += STEP( 9, -374 ) ;
523 L_result += STEP( 10, -134 ) ;
524#else
525 L_result +=
526 STEP( 0, -134 )
527 + STEP( 1, -374 )
528 /* + STEP( 2, 0 ) */
529 + STEP( 3, 2054 )
530 + STEP( 4, 5741 )
531 + STEP( 5, 8192 )
532 + STEP( 6, 5741 )
533 + STEP( 7, 2054 )
534 /* + STEP( 8, 0 ) */
535 + STEP( 9, -374 )
536 + STEP(10, -134 )
537 ;
538#endif
539 /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *)
540 * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *)
541 *
542 * x[k] = SASR( L_result, 16 );
543 */
544
545 /* 2 adds vs. >>16 => 14, minus one shift to compensate for
546 * those we lost when replacing L_MULT by '*'.
547 */
548
549 L_result = SASR( L_result, 13 );
550 x[k] = ( L_result < MIN_WORD ? MIN_WORD
551 : (L_result > MAX_WORD ? MAX_WORD : L_result ));
552 }
553}
554
555/* 4.2.14 */
556
557void gsm_enc_RPE_grid_selection (
558 word * x, /* [0..39] IN */
559 word * xM, /* [0..12] OUT */
560 word * Mc_out /* OUT */
561)
562/*
563 * The signal x[0..39] is used to select the RPE grid which is
564 * represented by Mc.
565 */
566{
567 /* word temp1; */
568 int /* m, */ i;
569 longword L_result, L_temp;
570 longword EM; /* xxx should be L_EM? */
571 word Mc;
572
573 longword L_common_0_3;
574
575 Mc = 0;
576
577#undef STEP
578#define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \
579 L_result += L_temp * L_temp;
580
581 /* common part of 0 and 3 */
582
583 L_result = 0;
584 STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 );
585 STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 );
586 STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12);
587 L_common_0_3 = L_result;
588
589 /* i = 0 */
590
591 STEP( 0, 0 );
592 L_result <<= 1; /* implicit in L_MULT */
593 EM = L_result;
594
595 /* i = 1 */
596
597 L_result = 0;
598 STEP( 1, 0 );
599 STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 );
600 STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 );
601 STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12);
602 L_result <<= 1;
603 if (L_result > EM) {
604 Mc = 1;
605 EM = L_result;
606 }
607
608 /* i = 2 */
609
610 L_result = 0;
611 STEP( 2, 0 );
612 STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 );
613 STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 );
614 STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12);
615 L_result <<= 1;
616 if (L_result > EM) {
617 Mc = 2;
618 EM = L_result;
619 }
620
621 /* i = 3 */
622
623 L_result = L_common_0_3;
624 STEP( 3, 12 );
625 L_result <<= 1;
626 if (L_result > EM) {
627 Mc = 3;
628 }
629
630 /**/
631
632 /* Down-sampling by a factor 3 to get the selected xM[0..12]
633 * RPE sequence.
634 */
635 _Pragma("loopbound min 13 max 13")
636 for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i];
637 *Mc_out = Mc;
638
639}
640
641/* 4.12.15 */
642
643void gsm_enc_APCM_quantization_xmaxc_to_exp_mant (
644 word xmaxc, /* IN */
645 word * exp_out, /* OUT */
646 word * mant_out ) /* OUT */
647{
648 word exp, mant;
649
650 /* Compute exponent and mantissa of the decoded version of xmaxc
651 */
652 exp = 0;
653 if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1;
654 mant = xmaxc - (exp << 3);
655
656 if (mant == 0) {
657 exp = -4;
658 mant = 7;
659 }
660 else {
661 _Pragma("loopbound min 0 max 3")
662 while (mant <= 7) {
663 mant = mant << 1 | 1;
664 exp--;
665 }
666 mant -= 8;
667 }
668
669 *exp_out = exp;
670 *mant_out = mant;
671
672}
673
674void gsm_enc_APCM_quantization (
675 word * xM, /* [0..12] IN */
676
677 word * xMc, /* [0..12] OUT */
678 word * mant_out, /* OUT */
679 word * exp_out, /* OUT */
680 word * xmaxc_out /* OUT */
681)
682{
683 int i, itest;
684
685 word xmax, xmaxc, temp, temp1, temp2;
686 word exp, mant;
687
688
689 /* Find the maximum absolute value xmax of xM[0..12].
690 */
691
692 xmax = 0;
693
694 _Pragma("loopbound min 13 max 13")
695 for (i = 0; i <= 12; i++) {
696 temp = xM[i];
697 temp = GSM_ABS(temp);
698 if (temp > xmax) xmax = temp;
699 }
700
701 /* Qantizing and coding of xmax to get xmaxc.
702 */
703
704 exp = 0;
705 temp = SASR( xmax, 9 );
706 itest = 0;
707
708 _Pragma("loopbound min 6 max 6")
709 for (i = 0; i <= 5; i++) {
710
711 itest |= (temp <= 0);
712 temp = SASR( temp, 1 );
713
714 if (itest == 0) exp++; // exp = add (exp, 1)
715 }
716
717 temp = exp + 5;
718
719 //xmaxc = gsm_enc_add( SASR(xmax, temp), exp << 3 );
720 xmaxc = saturate( ( SASR(xmax, temp) + (exp << 3) ));
721
722 /* Quantizing and coding of the xM[0..12] RPE sequence
723 * to get the xMc[0..12]
724 */
725
726 gsm_enc_APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant );
727
728 /* This computation uses the fact that the decoded version of xmaxc
729 * can be calculated by using the exponent and the mantissa part of
730 * xmaxc (logarithmic table).
731 * So, this method avoids any division and uses only a scaling
732 * of the RPE samples by a function of the exponent. A direct
733 * multiplication by the inverse of the mantissa (NRFAC[0..7]
734 * found in table 4.5) gives the 3 bit coded version xMc[0..12]
735 * of the RPE samples.
736 */
737
738
739 /* Direct computation of xMc[0..12] using table 4.5
740 */
741
742
743 temp1 = 6 - exp; /* normalization by the exponent */
744 temp2 = gsm_enc_NRFAC[ mant ]; /* inverse mantissa */
745
746 _Pragma("loopbound min 13 max 13")
747 for (i = 0; i <= 12; i++) {
748
749 temp = xM[i] << temp1;
750 temp = GSM_MULT( temp, temp2 );
751 temp = SASR(temp, 12);
752 xMc[i] = temp + 4; /* see note below */
753 }
754
755 /* NOTE: This equation is used to make all the xMc[i] positive.
756 */
757
758 *mant_out = mant;
759 *exp_out = exp;
760 *xmaxc_out = xmaxc;
761
762}
763
764/* 4.2.16 */
765
766void gsm_enc_APCM_inverse_quantization (
767 word * xMc, /* [0..12] IN */
768 word mant,
769 word exp,
770 word * xMp) /* [0..12] OUT */
771/*
772 * This part is for decoding the RPE sequence of coded xMc[0..12]
773 * samples to obtain the xMp[0..12] array. Table 4.6 is used to get
774 * the mantissa of xmaxc (FAC[0..7]).
775 */
776{
777 int i;
778 word temp, temp1, temp2, temp3;
779 longword ltmp;
780
781 temp1 = gsm_enc_FAC[ mant ]; /* see 4.2-15 for mant */
782 temp2 = gsm_enc_sub( 6, exp ); /* see 4.2-15 for exp */
783 temp3 = gsm_enc_asl( 1, gsm_enc_sub( temp2, 1 ));
784
785 _Pragma("loopbound min 13 max 13")
786 for (i = 13; i--;) {
787
788 /* temp = gsm_enc_sub( *xMc++ << 1, 7 ); */
789 temp = (*xMc++ << 1) - 7; /* restore sign */
790
791 temp <<= 12; /* 16 bit signed */
792 temp = GSM_MULT_R( temp1, temp );
793 temp = GSM_ADD( temp, temp3 );
794 *xMp++ = gsm_enc_asr( temp, temp2 );
795 }
796}
797
798/* 4.2.17 */
799
800void gsm_enc_RPE_grid_positioning (
801 word Mc, /* grid position IN */
802 word * xMp, /* [0..12] IN */
803 word * ep /* [0..39] OUT */
804)
805/*
806 * This procedure computes the reconstructed long term residual signal
807 * ep[0..39] for the LTP analysis filter. The inputs are the Mc
808 * which is the grid position selection and the xMp[0..12] decoded
809 * RPE samples which are upsampled by a factor of 3 by inserting zero
810 * values.
811 */
812{
813 int i = 13;
814
815 //
816 // TODO: rewritten Duff's device for WCET analysis!
817 //
818 switch (Mc) {
819 case 3: *ep++ = 0;
820 case 2: *ep++ = 0;
821 case 1: *ep++ = 0;
822 case 0: *ep++ = *xMp++;
823 i--;
824 }
825
826 _Pragma("loopbound min 12 max 12")
827 do {
828 *ep++ = 0;
829 *ep++ = 0;
830 *ep++ = *xMp++;
831 } while (--i);
832
833 _Pragma("loopbound min 0 max 3")
834 while (++Mc < 4) *ep++ = 0;
835
836}
837/*
838{
839 int i = 13;
840
841 //
842 //TODO: removed for WCET analysis
843//_Pragma("marker outside")
844 switch (Mc) {
845 case 3: *ep++ = 0;
846 case 2:
847 _Pragma("loopbound min 13 max 13")
848 do {
849 *ep++ = 0;
850 case 1: *ep++ = 0;
851 case 0:
852 //_Pragma("marker inside")
853 *ep++ = *xMp++;
854 } while (--i);
855 }
856
857 //_Pragma("flowrestriction 1*inside <= 13*outside")
858
859 _Pragma("loopbound min 0 max 3")
860 while (++Mc < 4) *ep++ = 0;
861
862}
863*/
864
865/* 4.2.18 */
866
867/* This procedure adds the reconstructed long term residual signal
868 * ep[0..39] to the estimated signal dpp[0..39] from the long term
869 * analysis filter to compute the reconstructed short term residual
870 * signal dp[-40..-1]; also the reconstructed short term residual
871 * array dp[-120..-41] is updated.
872 */
873
874#if 0 /* Has been inlined in code.c */
875void gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp),
876 word * dpp, /* [0...39] IN */
877 word * ep, /* [0...39] IN */
878 word * dp) /* [-120...-1] IN/OUT */
879{
880 int k;
881
882 for (k = 0; k <= 79; k++)
883 dp[ -120 + k ] = dp[ -80 + k ];
884
885 for (k = 0; k <= 39; k++)
886 dp[ -40 + k ] = gsm_enc_add( ep[k], dpp[k] );
887}
888#endif /* Has been inlined in code.c */
889
890void gsm_enc_Gsm_RPE_Encoding (
891
892 word * e, /* -5..-1][0..39][40..44 IN/OUT */
893 word * xmaxc, /* OUT */
894 word * Mc, /* OUT */
895 word * xMc) /* [0..12] OUT */
896{
897 word x[40];
898 word xM[13], xMp[13];
899 word mant, exp;
900
901 gsm_enc_Weighting_filter(e, x);
902 gsm_enc_RPE_grid_selection(x, xM, Mc);
903
904 gsm_enc_APCM_quantization( xM, xMc, &mant, &exp, xmaxc);
905 gsm_enc_APCM_inverse_quantization( xMc, mant, exp, xMp);
906
907 gsm_enc_RPE_grid_positioning( *Mc, xMp, e );
908
909}
910
911/* long_term.c */
912#ifdef USE_TABLE_MUL
913
914unsigned int umul_table[ 513 ][ 256 ];
915
916# define umul(x9, x15) \
917 ((int)(umul_table[x9][x15 & 0x0FF] + (umul_table[x9][ x15 >> 8 ] << 8)))
918
919# define table_mul(a, b) \
920 ( (a < 0) ? ((b < 0) ? umul(-a, -b) : -umul(-a, b)) \
921 : ((b < 0) ? -umul(a, -b) : umul(a, b)))
922
923#endif /* USE_TABLE_MUL */
924
925
926
927/*
928 * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION
929 */
930
931
932/*
933 * This procedure computes the LTP gain (bc) and the LTP lag (Nc)
934 * for the long term analysis filter. This is done by calculating a
935 * maximum of the cross-correlation function between the current
936 * sub-segment short term residual signal d[0..39] (output of
937 * the short term analysis filter; for simplification the index
938 * of this array begins at 0 and ends at 39 for each sub-segment of the
939 * RPE-LTP analysis) and the previous reconstructed short term
940 * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be
941 * performed to avoid overflow.
942 */
943
944 /* This procedure exists in four versions. First, the two integer
945 * versions with or without table-multiplication (as one function);
946 * then, the two floating point versions (as another function), with
947 * or without scaling.
948 */
949
950#ifndef USE_FLOAT_MUL
951
952void gsm_enc_Calculation_of_the_LTP_parameters (
953 word * d, /* [0..39] IN */
954 word * dp, /* [-120..-1] IN */
955 word * bc_out, /* OUT */
956 word * Nc_out /* OUT */
957)
958{
959 int k, lambda;
960 word Nc, bc;
961 word wt[40];
962
963 longword L_max, L_power;
964 word R, S, dmax, scal;
965 word temp;
966
967 /* Search of the optimum scaling of d[0..39].
968 */
969 dmax = 0;
970
971 _Pragma("loopbound min 40 max 40")
972 for (k = 0; k <= 39; k++) {
973 temp = d[k];
974 temp = GSM_ABS( temp );
975 if (temp > dmax) dmax = temp;
976 }
977
978 temp = 0;
979 if (dmax != 0)
980 temp = gsm_enc_norm( (longword)dmax << 16 );
981
982 if (temp > 6) scal = 0;
983 else scal = 6 - temp;
984
985
986 /* Initialization of a working array wt
987 */
988
989 _Pragma("loopbound min 40 max 40")
990 for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal );
991
992 /* Search for the maximum cross-correlation and coding of the LTP lag
993 */
994 L_max = 0;
995 Nc = 40; /* index for the maximum cross-correlation */
996
997 _Pragma("loopbound min 81 max 81")
998 for (lambda = 40; lambda <= 120; lambda++) {
999
1000# undef STEP
1001# ifdef USE_TABLE_MUL
1002# define STEP(k) (table_mul(wt[k], dp[k - lambda]))
1003# else
1004# define STEP(k) (wt[k] * dp[k - lambda])
1005# endif
1006
1007 longword L_result;
1008
1009 L_result = STEP(0) ; L_result += STEP(1) ;
1010 L_result += STEP(2) ; L_result += STEP(3) ;
1011 L_result += STEP(4) ; L_result += STEP(5) ;
1012 L_result += STEP(6) ; L_result += STEP(7) ;
1013 L_result += STEP(8) ; L_result += STEP(9) ;
1014 L_result += STEP(10) ; L_result += STEP(11) ;
1015 L_result += STEP(12) ; L_result += STEP(13) ;
1016 L_result += STEP(14) ; L_result += STEP(15) ;
1017 L_result += STEP(16) ; L_result += STEP(17) ;
1018 L_result += STEP(18) ; L_result += STEP(19) ;
1019 L_result += STEP(20) ; L_result += STEP(21) ;
1020 L_result += STEP(22) ; L_result += STEP(23) ;
1021 L_result += STEP(24) ; L_result += STEP(25) ;
1022 L_result += STEP(26) ; L_result += STEP(27) ;
1023 L_result += STEP(28) ; L_result += STEP(29) ;
1024 L_result += STEP(30) ; L_result += STEP(31) ;
1025 L_result += STEP(32) ; L_result += STEP(33) ;
1026 L_result += STEP(34) ; L_result += STEP(35) ;
1027 L_result += STEP(36) ; L_result += STEP(37) ;
1028 L_result += STEP(38) ; L_result += STEP(39) ;
1029
1030 if (L_result > L_max) {
1031
1032 Nc = lambda;
1033 L_max = L_result;
1034 }
1035 }
1036
1037 *Nc_out = Nc;
1038
1039 L_max <<= 1;
1040
1041 /* Rescaling of L_max
1042 */
1043 L_max = L_max >> (6 - scal); /* sub(6, scal) */
1044
1045 /* Compute the power of the reconstructed short term residual
1046 * signal dp[..]
1047 */
1048 L_power = 0;
1049 _Pragma("loopbound min 40 max 40")
1050 for (k = 0; k <= 39; k++) {
1051
1052 longword L_temp;
1053
1054 L_temp = SASR( dp[k - Nc], 3 );
1055 L_power += L_temp * L_temp;
1056 }
1057 L_power <<= 1; /* from L_MULT */
1058
1059 /* Normalization of L_max and L_power
1060 */
1061
1062 if (L_max <= 0) {
1063 *bc_out = 0;
1064 return;
1065 }
1066 if (L_max >= L_power) {
1067 *bc_out = 3;
1068 return;
1069 }
1070
1071 temp = gsm_enc_norm( L_power );
1072
1073 R = SASR( L_max << temp, 16 );
1074 S = SASR( L_power << temp, 16 );
1075
1076 /* Coding of the LTP gain
1077 */
1078
1079 /* Table 4.3a must be used to obtain the level DLB[i] for the
1080 * quantization of the LTP gain b to get the coded version bc.
1081 */
1082 _Pragma("loopbound min 3 max 3")
1083 for (bc = 0; bc <= 2; bc++)
1084 /* Replaced by macro function. */
1085 //if (R <= gsm_enc_mult(S, gsm_enc_DLB[bc]))
1086 if (R <= GSM_MULT(S, gsm_enc_DLB[bc]))
1087 break;
1088
1089 *bc_out = bc;
1090}
1091
1092#else /* USE_FLOAT_MUL */
1093
1094void gsm_enc_Calculation_of_the_LTP_parameters (
1095 word * d, /* [0..39] IN */
1096 word * dp, /* [-120..-1] IN */
1097 word * bc_out, /* OUT */
1098 word * Nc_out /* OUT */
1099)
1100{
1101 int k, lambda;
1102 word Nc, bc;
1103
1104 float wt_float[40];
1105 float dp_float_base[120], * dp_float = dp_float_base + 120;
1106
1107 longword L_max, L_power;
1108 word R, S, dmax, scal;
1109 word temp;
1110
1111 /* Search of the optimum scaling of d[0..39].
1112 */
1113 dmax = 0;
1114
1115 for (k = 0; k <= 39; k++) {
1116 temp = d[k];
1117 temp = GSM_ABS( temp );
1118 if (temp > dmax) dmax = temp;
1119 }
1120
1121 temp = 0;
1122 if (dmax == 0) scal = 0;
1123 else {
1124 temp = gsm_enc_norm( (longword)dmax << 16 );
1125 }
1126
1127 if (temp > 6) scal = 0;
1128 else scal = 6 - temp;
1129
1130 /* Initialization of a working array wt
1131 */
1132
1133 for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal );
1134 for (k = -120; k < 0; k++) dp_float[k] = dp[k];
1135
1136 /* Search for the maximum cross-correlation and coding of the LTP lag
1137 */
1138 L_max = 0;
1139 Nc = 40; /* index for the maximum cross-correlation */
1140
1141 for (lambda = 40; lambda <= 120; lambda += 9) {
1142
1143 /* Calculate L_result for l = lambda .. lambda + 9.
1144 */
1145 float *lp = dp_float - lambda;
1146
1147 float W;
1148 float a = lp[-8], b = lp[-7], c = lp[-6],
1149 d = lp[-5], e = lp[-4], f = lp[-3],
1150 g = lp[-2], h = lp[-1];
1151 float E;
1152 float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
1153 S5 = 0, S6 = 0, S7 = 0, S8 = 0;
1154
1155# undef STEP
1156# define STEP(K, a, b, c, d, e, f, g, h) \
1157 W = wt_float[K]; \
1158 E = W * a; S8 += E; \
1159 E = W * b; S7 += E; \
1160 E = W * c; S6 += E; \
1161 E = W * d; S5 += E; \
1162 E = W * e; S4 += E; \
1163 E = W * f; S3 += E; \
1164 E = W * g; S2 += E; \
1165 E = W * h; S1 += E; \
1166 a = lp[K]; \
1167 E = W * a; S0 += E
1168
1169# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h)
1170# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a)
1171# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b)
1172# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c)
1173# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d)
1174# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e)
1175# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f)
1176# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g)
1177
1178 STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
1179 STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
1180
1181 STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
1182 STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
1183
1184 STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
1185 STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
1186
1187 STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
1188 STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
1189
1190 STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
1191 STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
1192
1193 if (S0 > L_max) { L_max = S0; Nc = lambda; }
1194 if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
1195 if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
1196 if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
1197 if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
1198 if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
1199 if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
1200 if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
1201 if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
1202 }
1203 *Nc_out = Nc;
1204
1205 L_max <<= 1;
1206
1207 /* Rescaling of L_max
1208 */
1209 L_max = L_max >> (6 - scal); /* sub(6, scal) */
1210
1211 /* Compute the power of the reconstructed short term residual
1212 * signal dp[..]
1213 */
1214 L_power = 0;
1215 for (k = 0; k <= 39; k++) {
1216
1217 longword L_temp;
1218
1219 L_temp = SASR( dp[k - Nc], 3 );
1220 L_power += L_temp * L_temp;
1221 }
1222 L_power <<= 1; /* from L_MULT */
1223
1224 /* Normalization of L_max and L_power
1225 */
1226
1227 if (L_max <= 0) {
1228 *bc_out = 0;
1229 return;
1230 }
1231 if (L_max >= L_power) {
1232 *bc_out = 3;
1233 return;
1234 }
1235
1236 temp = gsm_enc_norm( L_power );
1237
1238 R = SASR( L_max << temp, 16 );
1239 S = SASR( L_power << temp, 16 );
1240
1241 /* Coding of the LTP gain
1242 */
1243
1244 /* Table 4.3a must be used to obtain the level DLB[i] for the
1245 * quantization of the LTP gain b to get the coded version bc.
1246 */
1247 // Replaced by macro function.
1248 //for (bc = 0; bc <= 2; bc++) if (R <= gsm_enc_mult(S, gsm_enc_DLB[bc])) break;
1249 for (bc = 0; bc <= 2; bc++) if (R <= GSM_MULT(S, gsm_enc_DLB[bc])) break;
1250 *bc_out = bc;
1251}
1252
1253#endif /* USE_FLOAT_MUL */
1254
1255
1256/* 4.2.12 */
1257
1258void gsm_enc_Long_term_analysis_filtering (
1259 word bc, /* IN */
1260 word Nc, /* IN */
1261 word * dp, /* previous d [-120..-1] IN */
1262 word * d, /* d [0..39] IN */
1263 word * dpp, /* estimate [0..39] OUT */
1264 word * e /* long term res. signal [0..39] OUT */
1265)
1266/*
1267 * In this part, we have to decode the bc parameter to compute
1268 * the samples of the estimate dpp[0..39]. The decoding of bc needs the
1269 * use of table 4.3b. The long term residual signal e[0..39]
1270 * is then calculated to be fed to the RPE encoding section.
1271 */
1272{
1273 int k;
1274 longword ltmp;
1275
1276# undef STEP
1277# define STEP(BP) \
1278 _Pragma("loopbound min 40 max 40") \
1279 for (k = 0; k <= 39; k++) { \
1280 dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \
1281 e[k] = GSM_SUB( d[k], dpp[k] ); \
1282 }
1283
1284 switch (bc) {
1285 case 0: STEP( 3277 ); break;
1286 case 1: STEP( 11469 ); break;
1287 case 2: STEP( 21299 ); break;
1288 case 3: STEP( 32767 ); break;
1289 }
1290}
1291
1292void gsm_enc_Gsm_Long_Term_Predictor (
1293
1294 word * d, /* [0..39] residual signal IN */
1295 word * dp, /* [-120..-1] d' IN */
1296
1297 word * e, /* [0..39] OUT */
1298 word * dpp, /* [0..39] OUT */
1299 word * Nc, /* correlation lag OUT */
1300 word * bc /* gain factor OUT */
1301)
1302{
1303
1304 gsm_enc_Calculation_of_the_LTP_parameters( d, dp, bc, Nc );
1305
1306 gsm_enc_Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e );
1307}
1308
1309/* short_term.c */
1310/*
1311 * SHORT TERM ANALYSIS FILTERING SECTION
1312 */
1313
1314/* 4.2.8 */
1315
1316void gsm_enc_Decoding_of_the_coded_Log_Area_Ratios (
1317 word * LARc, /* coded log area ratio [0..7] IN */
1318 word * LARpp) /* out: decoded .. */
1319{
1320 word temp1 /* , temp2 */;
1321 long ltmp; /* for GSM_ADD */
1322
1323 /* This procedure requires for efficient implementation
1324 * two tables.
1325 *
1326 * INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
1327 * MIC[1..8] = minimum value of the LARc[1..8]
1328 */
1329
1330 /* Compute the LARpp[1..8]
1331 */
1332
1333#undef STEP
1334#define STEP( B, MIC, INVA ) \
1335 temp1 = GSM_ADD( *LARc++, MIC ) << 10; \
1336 temp1 = GSM_SUB( temp1, (B >= 0 ? B << 1 : -((-B) << 1))); \
1337 temp1 = GSM_MULT_R( INVA, temp1 ); \
1338 *LARpp++ = GSM_ADD( temp1, temp1 );
1339
1340 STEP( 0, -32, 13107 );
1341 STEP( 0, -32, 13107 );
1342 STEP( 2048, -16, 13107 );
1343 STEP( -2560, -16, 13107 );
1344
1345 STEP( 94, -8, 19223 );
1346 STEP( -1792, -8, 17476 );
1347 STEP( -341, -4, 31454 );
1348 STEP( -1144, -4, 29708 );
1349
1350 /* NOTE: the addition of *MIC is used to restore
1351 * the sign of *LARc.
1352 */
1353}
1354
1355/* 4.2.9 */
1356/* Computation of the quantized reflection coefficients
1357 */
1358
1359/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8]
1360 */
1361
1362/*
1363 * Within each frame of 160 analyzed speech samples the short term
1364 * analysis and synthesis filters operate with four different sets of
1365 * coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
1366 * and the actual set of decoded LARs (LARpp(j))
1367 *
1368 * (Initial value: LARpp(j-1)[1..8] = 0.)
1369 */
1370
1371void gsm_enc_Coefficients_0_12 (
1372 word * LARpp_j_1,
1373 word * LARpp_j,
1374 word * LARp)
1375{
1376 int i;
1377 longword ltmp;
1378
1379 _Pragma("loopbound min 8 max 8")
1380 for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) {
1381 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ));
1382 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1));
1383 }
1384}
1385
1386void gsm_enc_Coefficients_13_26 (
1387 word * LARpp_j_1,
1388 word * LARpp_j,
1389 word * LARp)
1390{
1391 int i;
1392 longword ltmp;
1393 _Pragma("loopbound min 8 max 8")
1394 for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
1395 *LARp = GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 ));
1396 }
1397}
1398
1399void gsm_enc_Coefficients_27_39 (
1400 word * LARpp_j_1,
1401 word * LARpp_j,
1402 word * LARp)
1403{
1404 int i;
1405 longword ltmp;
1406
1407 _Pragma("loopbound min 8 max 8")
1408 for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
1409 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ));
1410 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 ));
1411 }
1412}
1413
1414
1415void gsm_enc_Coefficients_40_159 (
1416 word * LARpp_j,
1417 word * LARp)
1418{
1419 int i;
1420
1421 _Pragma("loopbound min 8 max 8")
1422 for (i = 1; i <= 8; i++, LARp++, LARpp_j++) {
1423 *LARp = *LARpp_j;
1424 }
1425}
1426
1427/* 4.2.9.2 */
1428
1429void gsm_enc_LARp_to_rp (
1430 word * LARp) /* [0..7] IN/OUT */
1431/*
1432 * The input of this procedure is the interpolated LARp[0..7] array.
1433 * The reflection coefficients, rp[i], are used in the analysis
1434 * filter and in the synthesis filter.
1435 */
1436{
1437 int i;
1438 word temp;
1439 longword ltmp;
1440
1441 _Pragma("loopbound min 8 max 8")
1442 for (i = 1; i <= 8; i++, LARp++) {
1443
1444 /* temp = GSM_ABS( *LARp );
1445 *
1446 * if (temp < 11059) temp <<= 1;
1447 * else if (temp < 20070) temp += 11059;
1448 * else temp = GSM_ADD( temp >> 2, 26112 );
1449 *
1450 * *LARp = *LARp < 0 ? -temp : temp;
1451 */
1452
1453 if (*LARp < 0) {
1454 temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp);
1455 *LARp = - ((temp < 11059) ? temp << 1
1456 : ((temp < 20070) ? temp + 11059
1457 : GSM_ADD( temp >> 2, 26112 )));
1458 } else {
1459 temp = *LARp;
1460 *LARp = (temp < 11059) ? temp << 1
1461 : ((temp < 20070) ? temp + 11059
1462 : GSM_ADD( temp >> 2, 26112 ));
1463 }
1464 }
1465}
1466
1467
1468/* 4.2.10 */
1469void gsm_enc_Short_term_analysis_filtering (
1470 struct gsm_state * S,
1471 word * rp, /* [0..7] IN */
1472 int k_n, /* k_end - k_start */
1473 word * s /* [0..n-1] IN/OUT */
1474)
1475/*
1476 * This procedure computes the short term residual signal d[..] to be fed
1477 * to the RPE-LTP loop from the s[..] signal and from the local rp[..]
1478 * array (quantized reflection coefficients). As the call of this
1479 * procedure can be done in many ways (see the interpolation of the LAR
1480 * coefficient), it is assumed that the computation begins with index
1481 * k_start (for arrays d[..] and s[..]) and stops with index k_end
1482 * (k_start and k_end are defined in 4.2.9.1). This procedure also
1483 * needs to keep the array u[0..7] in memory for each call.
1484 */
1485{
1486 word * u = S->u;
1487 int i;
1488 word di, zzz, ui, sav, rpi;
1489 longword ltmp;
1490 int j;
1491
1492 _Pragma("loopbound min 13 max 120")
1493 for (j=0; j<k_n; ++j) {
1494
1495 di = sav = *s;
1496
1497 _Pragma("loopbound min 8 max 8")
1498 for (i = 0; i < 8; i++) { /* YYY */
1499
1500 ui = u[i];
1501 rpi = rp[i];
1502 u[i] = sav;
1503
1504 zzz = GSM_MULT_R(rpi, di);
1505 sav = GSM_ADD( ui, zzz);
1506
1507 zzz = GSM_MULT_R(rpi, ui);
1508 di = GSM_ADD( di, zzz );
1509
1510 }
1511
1512 *s = di;
1513 }
1514}
1515
1516void gsm_enc_Gsm_Short_Term_Analysis_Filter (
1517
1518 struct gsm_state * S,
1519
1520 word * LARc, /* coded log area ratio [0..7] IN */
1521 word * s /* signal [0..159] IN/OUT */
1522)
1523{
1524 word * LARpp_j = S->LARpp[ S->j ];
1525 word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ];
1526
1527 word LARp[8];
1528
1529#undef FILTER
1530# define FILTER gsm_enc_Short_term_analysis_filtering
1531
1532 gsm_enc_Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j );
1533
1534 gsm_enc_Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
1535 gsm_enc_LARp_to_rp( LARp );
1536 FILTER( S, LARp, 13, s);
1537
1538 gsm_enc_Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
1539 gsm_enc_LARp_to_rp( LARp );
1540 FILTER( S, LARp, 14, s + 13);
1541
1542 gsm_enc_Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
1543 gsm_enc_LARp_to_rp( LARp );
1544 FILTER( S, LARp, 13, s + 27);
1545
1546 gsm_enc_Coefficients_40_159( LARpp_j, LARp);
1547 gsm_enc_LARp_to_rp( LARp );
1548 FILTER( S, LARp, 120, s + 40);
1549}
1550
1551/* lpc.c */
1552#undef P
1553
1554/*
1555 * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
1556 */
1557
1558/* 4.2.4 */
1559
1560
1561void gsm_enc_Autocorrelation (
1562 word * s, /* [0..159] IN/OUT */
1563 longword * L_ACF) /* [0..8] OUT */
1564/*
1565 * The goal is to compute the array L_ACF[k]. The signal s[i] must
1566 * be scaled in order to avoid an overflow situation.
1567 */
1568{
1569 int k, i;
1570
1571 word temp, smax, scalauto;
1572
1573 /* Dynamic scaling of the array s[0..159]
1574 */
1575
1576 /* Search for the maximum.
1577 */
1578 smax = 0;
1579
1580 _Pragma("loopbound min 160 max 160")
1581 for (k = 0; k <= 159; k++) {
1582 temp = GSM_ABS( s[k] );
1583 if (temp > smax) smax = temp;
1584 }
1585
1586 /* Computation of the scaling factor.
1587 */
1588 if (smax == 0) scalauto = 0;
1589 else {
1590 scalauto = 4 - gsm_enc_norm( (longword)smax << 16 );/* sub(4,..) */
1591 }
1592
1593 /* Scaling of the array s[0...159]
1594 */
1595
1596 if (scalauto > 0) {
1597
1598# define SCALE(n) \
1599 case n: \
1600 _Pragma("loopbound min 160 max 160") \
1601 for (k = 0; k <= 159; k++) \
1602 s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\
1603 break;
1604
1605 switch (scalauto) {
1606 SCALE(1)
1607 SCALE(2)
1608 SCALE(3)
1609 SCALE(4)
1610 }
1611# undef SCALE
1612 }
1613
1614 /* Compute the L_ACF[..].
1615 */
1616 {
1617 word * sp = s;
1618 word sl = *sp;
1619#undef STEP
1620# define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]);
1621
1622# define NEXTI sl = *++sp
1623
1624
1625 _Pragma("loopbound min 9 max 9")
1626 for (k = 9; k--; L_ACF[k] = 0) ;
1627
1628 STEP (0);
1629 NEXTI;
1630 STEP(0); STEP(1);
1631 NEXTI;
1632 STEP(0); STEP(1); STEP(2);
1633 NEXTI;
1634 STEP(0); STEP(1); STEP(2); STEP(3);
1635 NEXTI;
1636 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4);
1637 NEXTI;
1638 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5);
1639 NEXTI;
1640 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6);
1641 NEXTI;
1642 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7);
1643
1644 _Pragma("loopbound min 152 max 152")
1645 for (i = 8; i <= 159; i++) {
1646
1647 NEXTI;
1648
1649 STEP(0);
1650 STEP(1); STEP(2); STEP(3); STEP(4);
1651 STEP(5); STEP(6); STEP(7); STEP(8);
1652 }
1653
1654 _Pragma("loopbound min 9 max 9")
1655 for (k = 9; k--; L_ACF[k] <<= 1) ;
1656
1657 }
1658 /* Rescaling of the array s[0..159]
1659 */
1660 if (scalauto > 0) {
1661 _Pragma("loopbound min 160 max 160")
1662 for (k = 160; k--; *s++ <<= scalauto) ;
1663 }
1664}
1665
1666/* 4.2.5 */
1667
1668void gsm_enc_Reflection_coefficients (
1669 longword * L_ACF, /* 0...8 IN */
1670 word * r /* 0...7 OUT */
1671)
1672{
1673 int i, m, n;
1674 word temp;
1675 longword ltmp;
1676 word ACF[9]; /* 0..8 */
1677 word P[ 9]; /* 0..8 */
1678 word K[ 9]; /* 2..8 */
1679
1680 /* Schur recursion with 16 bits arithmetic.
1681 */
1682
1683 if (L_ACF[0] == 0) {
1684 _Pragma("loopbound min 8 max 8")
1685 for (i = 8; i--; *r++ = 0) ;
1686 return;
1687 }
1688
1689 temp = gsm_enc_norm( L_ACF[0] );
1690
1691 /* ? overflow ? */
1692 _Pragma("loopbound min 9 max 9")
1693 for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 );
1694
1695 /* Initialize array P[..] and K[..] for the recursion.
1696 */
1697
1698 _Pragma("loopbound min 7 max 7")
1699 for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ];
1700
1701 _Pragma("loopbound min 9 max 9")
1702 for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ];
1703
1704 /* Compute reflection coefficients
1705 */
1706 _Pragma("loopbound min 8 max 8")
1707 for (n = 1; n <= 8; n++, r++) {
1708
1709 temp = P[1];
1710 temp = GSM_ABS(temp);
1711 if (P[0] < temp) {
1712 _Pragma("loopbound min 8 max 8")
1713 for (i = n; i <= 8; i++) *r++ = 0;
1714 return;
1715 }
1716
1717 *r = gsm_enc_div( temp, P[0] );
1718
1719 if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */
1720 if (n == 8) return;
1721
1722 /* Schur recursion
1723 */
1724 temp = GSM_MULT_R( P[1], *r );
1725 P[0] = GSM_ADD( P[0], temp );
1726
1727 _Pragma("loopbound min 1 max 7")
1728 for (m = 1; m <= 8 - n; ++m) {
1729 temp = GSM_MULT_R( K[ m ], *r );
1730 P[m] = GSM_ADD( P[ m+1 ], temp );
1731
1732 temp = GSM_MULT_R( P[ m+1 ], *r );
1733 K[m] = GSM_ADD( K[ m ], temp );
1734 }
1735 }
1736}
1737
1738/* 4.2.6 */
1739
1740void gsm_enc_Transformation_to_Log_Area_Ratios (
1741 word * r /* 0..7 IN/OUT */
1742)
1743/*
1744 * The following scaling for r[..] and LAR[..] has been used:
1745 *
1746 * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1.
1747 * LAR[..] = integer( real_LAR[..] * 16384 );
1748 * with -1.625 <= real_LAR <= 1.625
1749 */
1750{
1751 word temp;
1752 int i;
1753
1754
1755 /* Computation of the LAR[0..7] from the r[0..7]
1756 */
1757 _Pragma("loopbound min 8 max 8")
1758 for (i = 1; i <= 8; i++, r++) {
1759
1760 temp = *r;
1761 temp = GSM_ABS(temp);
1762
1763 if (temp < 22118) {
1764 temp >>= 1;
1765 } else if (temp < 31130) {
1766 temp -= 11059;
1767 } else {
1768 temp -= 26112;
1769 temp <<= 2;
1770 }
1771
1772 *r = *r < 0 ? -temp : temp;
1773 }
1774}
1775
1776/* 4.2.7 */
1777
1778void gsm_enc_Quantization_and_coding (
1779 word * LAR /* [0..7] IN/OUT */
1780)
1781{
1782 word temp;
1783 longword ltmp;
1784
1785
1786 /* This procedure needs four tables; the following equations
1787 * give the optimum scaling for the constants:
1788 *
1789 * A[0..7] = integer( real_A[0..7] * 1024 )
1790 * B[0..7] = integer( real_B[0..7] * 512 )
1791 * MAC[0..7] = maximum of the LARc[0..7]
1792 * MIC[0..7] = minimum of the LARc[0..7]
1793 */
1794
1795# undef STEP
1796# define STEP( A, B, MAC, MIC ) \
1797 temp = GSM_MULT( A, *LAR ); \
1798 temp = GSM_ADD( temp, B ); \
1799 temp = GSM_ADD( temp, 256 ); \
1800 temp = SASR( temp, 9 ); \
1801 *LAR = temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \
1802 LAR++;
1803
1804 STEP( 20480, 0, 31, -32 );
1805 STEP( 20480, 0, 31, -32 );
1806 STEP( 20480, 2048, 15, -16 );
1807 STEP( 20480, -2560, 15, -16 );
1808
1809 STEP( 13964, 94, 7, -8 );
1810 STEP( 15360, -1792, 7, -8 );
1811 STEP( 8534, -341, 3, -4 );
1812 STEP( 9036, -1144, 3, -4 );
1813
1814# undef STEP
1815}
1816
1817void gsm_enc_Gsm_LPC_Analysis (
1818 word * s, /* 0..159 signals IN/OUT */
1819 word * LARc) /* 0..7 LARc's OUT */
1820{
1821 longword L_ACF[9];
1822
1823 gsm_enc_Autocorrelation (s, L_ACF );
1824 gsm_enc_Reflection_coefficients (L_ACF, LARc );
1825 gsm_enc_Transformation_to_Log_Area_Ratios (LARc);
1826 gsm_enc_Quantization_and_coding (LARc);
1827}
1828
1829/* preprocess.c */
1830/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION
1831 *
1832 * After A-law to linear conversion (or directly from the
1833 * Ato D converter) the following scaling is assumed for
1834 * input to the RPE-LTP algorithm:
1835 *
1836 * in: 0.1.....................12
1837 * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.*
1838 *
1839 * Where S is the sign bit, v a valid bit, and * a "don't care" bit.
1840 * The original signal is called sop[..]
1841 *
1842 * out: 0.1................... 12
1843 * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0
1844 */
1845
1846
1847void gsm_enc_Gsm_Preprocess (
1848 struct gsm_state * S,
1849 word * s,
1850 word * so ) /* [0..159] IN/OUT */
1851{
1852
1853 word z1 = S->z1;
1854 longword L_z2 = S->L_z2;
1855 word mp = S->mp;
1856
1857 word s1;
1858 longword L_s2;
1859
1860 longword L_temp;
1861
1862 word msp, lsp;
1863 word SO;
1864
1865 longword ltmp; /* for ADD */
1866 ulongword utmp; /* for L_ADD */
1867
1868 int k = 160;
1869
1870 _Pragma("loopbound min 160 max 160")
1871 while (k--) {
1872
1873 /* 4.2.1 Downscaling of the input signal
1874 */
1875 SO = SASR( *s, 3 ) << 2;
1876 s++;
1877
1878 /* 4.2.2 Offset compensation
1879 *
1880 * This part implements a high-pass filter and requires extended
1881 * arithmetic precision for the recursive part of this filter.
1882 * The input of this procedure is the array so[0...159] and the
1883 * output the array sof[ 0...159 ].
1884 */
1885 /* Compute the non-recursive part
1886 */
1887
1888 s1 = SO - z1; /* s1 = gsm_enc_sub( *so, z1 ); */
1889 z1 = SO;
1890
1891 /* Compute the recursive part
1892 */
1893 L_s2 = s1;
1894 L_s2 <<= 15;
1895
1896 /* Execution of a 31 bv 16 bits multiplication
1897 */
1898
1899 msp = SASR( L_z2, 15 );
1900 lsp = L_z2-((longword)msp<<15); /* gsm_enc_L_sub(L_z2,(msp<<15)); */
1901
1902 L_s2 += GSM_MULT_R( lsp, 32735 );
1903 L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/
1904 L_z2 = GSM_L_ADD( L_temp, L_s2 );
1905
1906 /* Compute sof[k] with rounding
1907 */
1908 L_temp = GSM_L_ADD( L_z2, 16384 );
1909
1910 /* 4.2.3 Preemphasis
1911 */
1912
1913 msp = GSM_MULT_R( mp, -28180 );
1914 mp = SASR( L_temp, 15 );
1915 *so++ = GSM_ADD( mp, msp );
1916 }
1917
1918 S->z1 = z1;
1919 S->L_z2 = L_z2;
1920 S->mp = mp;
1921}
1922
1923/* gsm_enc_bench.c */
1924
1925word gsm_enc_norm (longword a )
1926/*
1927 * the number of left shifts needed to normalize the 32 bit
1928 * variable L_var1 for positive values on the interval
1929 *
1930 * with minimum of
1931 * minimum of 1073741824 (01000000000000000000000000000000) and
1932 * maximum of 2147483647 (01111111111111111111111111111111)
1933 *
1934 *
1935 * and for negative values on the interval with
1936 * minimum of -2147483648 (-10000000000000000000000000000000) and
1937 * maximum of -1073741824 ( -1000000000000000000000000000000).
1938 *
1939 * in order to normalize the result, the following
1940 * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 );
1941 *
1942 * (That's 'ffs', only from the left, not the right..)
1943 */
1944{
1945 if (a < 0) {
1946 if (a <= -1073741824) return 0;
1947 a = ~a;
1948 }
1949
1950 return a & 0xffff0000
1951 ? ( a & 0xff000000
1952 ? -1 + gsm_enc_bitoff[ 0xFF & (a >> 24) ]
1953 : 7 + gsm_enc_bitoff[ 0xFF & (a >> 16) ] )
1954 : ( a & 0xff00
1955 ? 15 + gsm_enc_bitoff[ 0xFF & (a >> 8) ]
1956 : 23 + gsm_enc_bitoff[ 0xFF & a ] );
1957}
1958
1959word gsm_enc_asl (word a, int n)
1960{
1961 if (n >= 16) return 0;
1962 if (n <= -16) return -(a < 0);
1963 if (n < 0) return gsm_enc_asr(a, -n);
1964 return a << n;
1965}
1966
1967word gsm_enc_asr (word a, int n)
1968{
1969 if (n >= 16) return -(a < 0);
1970 if (n <= -16) return 0;
1971 if (n < 0) return a << -n;
1972
1973# ifdef SASR
1974 return a >> n;
1975# else
1976 if (a >= 0) return a >> n;
1977 else return -(word)( -(uword)a >> n );
1978# endif
1979}
1980
1981/*
1982 * (From p. 46, end of section 4.2.5)
1983 *
1984 * NOTE: The following lines gives [sic] one correct implementation
1985 * of the div(num, denum) arithmetic operation. Compute div
1986 * which is the integer division of num by denum: with denum
1987 * >= num > 0
1988 */
1989
1990word gsm_enc_div ( word num, word denum)
1991{
1992 longword L_num = num;
1993 longword L_denum = denum;
1994 word div = 0;
1995 int k = 15;
1996
1997 /* The parameter num sometimes becomes zero.
1998 * Although this is explicitly guarded against in 4.2.5,
1999 * we assume that the result should then be zero as well.
2000 */
2001
2002 if (num == 0)
2003 return 0;
2004
2005 _Pragma("loopbound min 15 max 15")
2006 while (k--) {
2007 div <<= 1;
2008 L_num <<= 1;
2009
2010 if (L_num >= L_denum) {
2011 L_num -= L_denum;
2012 div++;
2013 }
2014 }
2015
2016 return div;
2017}
2018
2019
2020
2021gsm gsm_enc_create( void )
2022{
2023 unsigned int i;
2024 gsm r;
2025
2026 r = &gsm_enc_state;
2027
2028 _Pragma("loopbound min 648 max 648")
2029 for(i=0; i < sizeof(*r); i++)
2030 ((char *)r)[i]=0;
2031
2032 r->nrp = 40;
2033
2034 return r;
2035}
2036
2037void gsm_enc_init( void )
2038{
2039 gsm_enc_state_ptr = gsm_enc_create();
2040}
2041
2042int gsm_enc_return( void )
2043{
2044 return gsm_enc_result;
2045}
2046
2047void gsm_enc_main( void )
2048{
2049 gsm r;
2050 unsigned i;
2051 gsm_enc_result = 0;
2052
2053 r = gsm_enc_state_ptr;
2054
2055 _Pragma("loopbound min 20 max 20")
2056 for (i=0; i < SAMPLES; i++) {
2057 gsm_enc_encode(r, gsm_enc_pcmdata + i * 160, gsm_enc_gsmdata + i * sizeof(gsm_frame));
2058 }
2059}
2060
2061int main( int argc, char** argv )
2062{
2063 SET_UP
2064 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
2065 START_LOOP
2066 gsm_enc_init();
2067 gsm_enc_main();
2068 STOP_LOOP
2069 }
2070 WRITE_TO_FILE
2071 return ( gsm_enc_return() );
2072}
diff --git a/all_pairs/source/gsm_enc/private.h b/all_pairs/source/gsm_enc/private.h
new file mode 100644
index 0000000..48786b3
--- /dev/null
+++ b/all_pairs/source/gsm_enc/private.h
@@ -0,0 +1,56 @@
1#ifndef PRIVATE_H
2#define PRIVATE_H
3
4typedef short word; /* 16 bit signed int */
5typedef long longword; /* 32 bit signed int */
6
7typedef unsigned short uword; /* unsigned word */
8typedef unsigned long ulongword; /* unsigned longword */
9
10struct gsm_state {
11
12 word dp0[ 280 ];
13
14 word z1; /* preprocessing.c, Offset_com. */
15 longword L_z2; /* Offset_com. */
16 int mp; /* Preemphasis */
17
18 word u[8]; /* short_term_aly_filter.c */
19 word LARpp[2][8]; /* */
20 word j; /* */
21
22 word nrp; /* 40 */ /* long_term.c, synthesis */
23 word v[9]; /* short_term.c, synthesis */
24 word msr; /* decoder.c, Postprocessing */
25
26 char verbose; /* only used if !NDEBUG */
27 char fast; /* only used if FAST */
28
29};
30
31
32#define MIN_WORD ((-32767)-1)
33#define MAX_WORD ( 32767)
34
35#define MIN_LONGWORD ((-2147483647)-1)
36#define MAX_LONGWORD ( 2147483647)
37
38#define SASR(x, by) ((x) >> (by))
39
40/* Table 4.3a Decision level of the LTP gain quantizer
41 */
42/* bc 0 1 2 3 */
43word gsm_enc_DLB[4] = { 6554, 16384, 26214, 32767 };
44
45
46/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax
47 */
48/* i 0 1 2 3 4 5 6 7 */
49word gsm_enc_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 };
50
51
52/* Table 4.6 Normalized direct mantissa used to compute xM/xmax
53 */
54/* i 0 1 2 3 4 5 6 7 */
55word gsm_enc_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 };
56#endif /* PRIVATE_H */
diff --git a/all_pairs/source/h264_dec/changeLog.txt b/all_pairs/source/h264_dec/changeLog.txt
new file mode 100644
index 0000000..2d5d97f
--- /dev/null
+++ b/all_pairs/source/h264_dec/changeLog.txt
@@ -0,0 +1,41 @@
1File: h264dec_ldecode_macroblock.c
2Original provenience:
3
42015-12-21:
5- Filename changed to h264dec.c
6- global.h renamed to h264dec.h
7- Removed commented out includes
8- Removed all obsolete typedefs, enums and structs. Only remaining ones are
9 struct img_par and
10 enum SliceType
11- Renamed function decode_one_macroblock to h264dec_decode_one_macroblock
12- Function h264dec_decode_one_macroblock changed to void (i.e., removed statement return 0;)
13- Added functions h264dec_init, h264dec_return and main
14- Added forward declarations of all functions before the declarations of global
15 variables
16- Struct 'ImageParameters' renamed to 'h264dec_ImageParameters'
17- Re-ordered functions to fit template-order
18- Applied code formatting according to the following rules
19 (incomplete, to be discussed; I basically used astyle with the attached
20 options file):
21 - Lines shall not be wider than 80 characters; whenever possible, appropriate
22 line breaks shall be inserted to keep lines below 80 characters
23 - Indentation is done using whitespaces only, no tabs. Code is indented by
24 two whitespaces
25 - Two empty lines are put between any two functions
26 - In non-empty lists or index expressions, opening '(' and '[' are followed by
27 one whitespace, closing ')' and ']' are preceded by one whitespace
28 - In comma- or colon-separated argument lists, one whitespace is put after
29 each comma/colon
30 - Names of functions and global variables all start with a benchmark-specific
31 prefix (here: st_) followed by lowercase letter (e.g., st_square)
32 - For pointer types, one whitespace is put before the '*'
33 - Operators within expressions shall be preceded and followed by one
34 whitespace
35 - Code of then- and else-parts of if-then-else statements shall be put in
36 separate lines, not in the same lines as the if-condition or the keyword
37 "else"
38 - Opening braces '{' denoting the beginning of code for some if-else or loop
39 body shall be put at the end of the same line where the keywords "if",
40 "else", "for", "while" etc. occur
41- Added general TACLeBench header to beginning of source code \ No newline at end of file
diff --git a/all_pairs/source/h264_dec/copyright.txt b/all_pairs/source/h264_dec/copyright.txt
new file mode 100644
index 0000000..fe3eece
--- /dev/null
+++ b/all_pairs/source/h264_dec/copyright.txt
@@ -0,0 +1,32 @@
1/*
2***********************************************************************
3* COPYRIGHT AND WARRANTY INFORMATION
4*
5* Copyright 2001, International Telecommunications Union, Geneva
6*
7* DISCLAIMER OF WARRANTY
8*
9* These software programs are available to the user without any
10* license fee or royalty on an "as is" basis. The ITU disclaims
11* any and all warranties, whether express, implied, or
12* statutory, including any implied warranties of merchantability
13* or of fitness for a particular purpose. In no event shall the
14* contributor or the ITU be liable for any incidental, punitive, or
15* consequential damages of any kind whatsoever arising from the
16* use of these programs.
17*
18* This disclaimer of warranty extends to the user of these programs
19* and user's customers, employees, agents, transferees, successors,
20* and assigns.
21*
22* The ITU does not represent or warrant that the programs furnished
23* hereunder are free of infringement of any third-party patents.
24* Commercial implementations of ITU-T Recommendations, including
25* shareware, may be subject to royalty fees to patent holders.
26* Information regarding the ITU-T patent policy is available from
27* the ITU Web site at http://www.itu.int.
28*
29* THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE ITU-T PATENT POLICY.
30************************************************************************
31*/
32
diff --git a/all_pairs/source/h264_dec/h264_dec.c b/all_pairs/source/h264_dec/h264_dec.c
new file mode 100644
index 0000000..76af705
--- /dev/null
+++ b/all_pairs/source/h264_dec/h264_dec.c
@@ -0,0 +1,610 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: h264_dec_ldecode_macroblock.c
7
8 Author: Inge Lille-Langoy et al.
9
10 Function: H.264 decoder
11
12 Source: MediaBench II
13 http://euler.slu.edu/~fritts/mediabench (mirror)
14
15 Original name: h264_dec_ldecode_macroblock.c
16
17 Changes: no functional changes
18
19 License: see copyright.txt
20
21*/
22
23
24/*
25 Include section
26*/
27
28#include "../extra.h"
29#include "h264_dec.h"
30
31
32/*
33 Forward declaration of functions
34*/
35
36void h264_dec_init ();
37int h264_dec_return ();
38void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img );
39void h264_dec_main( void );
40//int main( void );
41
42
43/*
44 Declaration of global variables
45*/
46
47extern signed char h264_dec_mv_array[65][65][2];
48extern short h264_dec_list_imgUV[2][45][45];
49extern int h264_dec_img_m7[16][16];
50
51char h264_dec_img_mpr[7][7];
52char h264_dec_dec_picture_imgUV[2][64][54];
53struct h264_dec_img_par h264_dec_img;
54
55
56/*
57 Initialization- and return-value-related functions
58*/
59
60int h264_dec_return ()
61{
62 return ( h264_dec_img_mpr[0][0] + h264_dec_dec_picture_imgUV[0][0][0] + 128 !=
63 0 );
64}
65
66void h264_dec_init ()
67{
68 unsigned int i;
69 unsigned char *p;
70 volatile char bitmask = 0;
71
72 /*
73 Apply volatile XOR-bitmask to entire input array.
74 */
75 p = ( unsigned char * ) &h264_dec_mv_array[ 0 ];
76 _Pragma( "loopbound min 33800 max 33800" )
77 for ( i = 0; i < sizeof( h264_dec_mv_array ); ++i, ++p )
78 *p ^= bitmask;
79
80 p = ( unsigned char * ) &h264_dec_list_imgUV[ 0 ];
81 _Pragma( "loopbound min 16200 max 16200" )
82 for ( i = 0; i < sizeof( h264_dec_list_imgUV ); ++i, ++p )
83 *p ^= bitmask;
84
85 p = ( unsigned char * ) &h264_dec_img_m7[ 0 ];
86 _Pragma( "loopbound min 1024 max 1024" )
87 for ( i = 0; i < sizeof( h264_dec_img_m7 ); ++i, ++p )
88 *p ^= bitmask;
89
90 h264_dec_img.mb_cr_size_x = 8;
91 h264_dec_img.mb_cr_size_y = 8;
92 h264_dec_img.num_blk8x8_uv = 2;
93 h264_dec_img.pix_c_x = 256;
94 h264_dec_img.pix_c_y = 256;
95 h264_dec_img.width_cr = 352;
96 h264_dec_img.apply_weights = 0;
97 h264_dec_img.direct_spatial_mv_pred_flag = 1;
98 h264_dec_img.type = 1;
99 h264_dec_img.wp_round_chroma = 0;
100 h264_dec_img.chroma_log2_weight_denom = 0;
101}
102
103
104/*
105 Algorithm core functions
106*/
107
108void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img )
109{
110 int i = 0, j = 0, ii = 0, jj = 0, i1 = 0, j1 = 0, j4 = 0, i4 = 0;
111 int uv;
112 int ioff, joff;
113 int bw_pred = 0, fw_pred = 0, ifx;
114 int ii0, jj0, ii1, jj1, if1, jf1, if0, jf0;
115 int f1_x, f1_y, f2_x, f2_y, f3, f4;
116
117 short fw_refframe = -1, bw_refframe = -1;
118 int mv_mode, pred_dir, intra_prediction; // = currMB->ref_frame;
119 short fw_ref_idx = -1, bw_ref_idx = -1;
120
121 int mb_nr = 0;
122 short dec_picture_ref_idx = 0;
123
124 short active_sps_chroma_format_idc = 1;
125 short active_pps_weighted_pred_flag = 0;
126 short active_pps_weighted_bipred_idc = 0;
127
128 int smb = 0;
129 int max_y_cr = 287;
130
131 int jf;
132
133 int direct_pdir = -1;
134
135 int curr_mb_field = 0;
136
137 int b8, b4;
138
139 int residue_transform_flag = 0;
140
141 if ( 1 ) {
142 f1_x = 64 / img->mb_cr_size_x;
143 f2_x = f1_x - 1;
144
145 f1_y = 64 / img->mb_cr_size_y;
146 f2_y = f1_y - 1;
147
148 f3 = f1_x * f1_y;
149 f4 = f3 >> 1;
150
151 _Pragma( "loopbound min 2 max 2" )
152 for ( uv = 0; uv < 2; uv++ ) {
153 intra_prediction = 0;
154
155
156 _Pragma( "loopbound min 1 max 1" )
157 for ( b8 = 0; b8 < ( img->num_blk8x8_uv / 2 ); b8++ ) {
158 _Pragma( "loopbound min 4 max 4" )
159 for ( b4 = 0; b4 < 4; b4++ ) {
160 joff = 0;
161 j4 = img->pix_c_y + joff;
162 ioff = 0;
163 i4 = img->pix_c_x + ioff;
164
165 mv_mode = 1;
166 pred_dir = -1;
167
168 if ( !intra_prediction ) {
169 if ( pred_dir != 2 ) {
170
171 _Pragma( "loopbound min 4 max 4" )
172 for ( jj = 0; jj < 4; jj++ ) {
173 jf = ( ( j4 + jj ) / ( img->mb_cr_size_y / 4 ) ) % 64;
174 _Pragma( "loopbound min 4 max 4" )
175 for ( ii = 0; ii < 4; ii++ ) {
176 ifx = ( ( i4 + ii ) / ( img->mb_cr_size_x / 4 ) ) % 64;
177 i1 = ( i4 + ii ) * f1_x + h264_dec_mv_array[jf][ifx][0];
178
179 if ( !curr_mb_field )
180 j1 = ( j4 + jj ) * f1_y + h264_dec_mv_array[jf][ifx][1];
181 else {
182 if ( mb_nr % 2 == 0 ) {
183 j1 = ( ( img->pix_c_y / 2 ) + jj + joff ) * f1_y +
184 h264_dec_mv_array[jf][ifx][1];
185 } else {
186 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2
187 + jj + joff ) * f1_y +
188 h264_dec_mv_array[jf][ifx][1];
189 }
190 ++mb_nr;
191 }
192
193 if ( active_sps_chroma_format_idc == 1 )
194 j1 += 0;
195
196 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
197 img->width_cr - 1 : i1 / f1_x ) ) ?
198 ( ( i1 / f1_x > img->width_cr - 1 ) ?
199 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
200 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
201 max_y_cr : j1 / f1_y ) ) ?
202 ( ( j1 / f1_y > max_y_cr ) ?
203 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
204 ii1 = ( ( ( 0 < (
205 ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
206 ? img->width_cr - 1 : ( i1 + f2_x ) / f1_x ) )
207 ? ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
208 ? img->width_cr - 1 :
209 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
210 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr )
211 ? max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
212 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
213 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 ) ) % 45;
214
215 if1 = ( i1 & f2_x );
216 jf1 = ( j1 & f2_y );
217 if0 = f1_x - if1;
218 jf0 = f1_y - jf1;
219
220 if ( img->apply_weights ) {
221 } else {
222 h264_dec_img_mpr[ii + ioff][jj + joff]
223 = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0]
224 + if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1]
225 + if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0]
226 + if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1]
227 + f4 ) / f3;
228 }
229 }
230 }
231 } else {
232
233 _Pragma( "loopbound min 4 max 4" )
234 for ( jj = 0; jj < 4; jj++ ) {
235 jf = ( j4 + jj ) / ( img->mb_cr_size_y / 4 );
236 _Pragma( "loopbound min 4 max 4" )
237 for ( ii = 0; ii < 4; ii++ ) {
238 ifx = ( i4 + ii ) / ( img->mb_cr_size_x / 4 );
239 direct_pdir = 2;
240
241 if ( mv_mode == 0 && img->direct_spatial_mv_pred_flag ) {
242 if ( dec_picture_ref_idx != -1 ) {
243 fw_refframe = 0;
244 fw_ref_idx = fw_refframe;
245 }
246 if ( dec_picture_ref_idx != -1 ) {
247 bw_refframe = 0;
248 bw_ref_idx = bw_refframe;
249 }
250
251 if ( dec_picture_ref_idx == -1 ) direct_pdir = 0;
252 else
253 if ( dec_picture_ref_idx == -1 ) direct_pdir = 1;
254
255 if ( direct_pdir == 0 || direct_pdir == 2 ) {
256 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
257 h264_dec_mv_array[jf][ifx][0];
258
259 if ( !curr_mb_field ) {
260 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
261 h264_dec_mv_array[jf][ifx][1];
262 } else {
263 if ( mb_nr % 2 == 0 ) {
264 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) *
265 f1_y + h264_dec_mv_array[jf][ifx][1];
266 } else {
267 j1 = ( ( img->pix_c_y - img->mb_cr_size_y )
268 / 2 + jj + joff ) * f1_y
269 + h264_dec_mv_array[jf][ifx][1];
270 }
271 }
272
273 if ( active_sps_chroma_format_idc == 1 )
274 j1 += 0;
275
276 ii0 = ( (
277 ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
278 img->width_cr - 1 : i1 / f1_x ) ) ?
279 ( ( i1 / f1_x > img->width_cr - 1 ) ?
280 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
281 jj0 = ( (
282 ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
283 max_y_cr : j1 / f1_y ) ) ? ( (
284 j1 / f1_y > max_y_cr ) ?
285 max_y_cr : j1 / f1_y ) : 0 )
286 ) % 45;
287 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
288 f1_x > img->width_cr - 1 ) ?
289 img->width_cr - 1 :
290 ( i1 + f2_x ) / f1_x ) ) ?
291 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
292 ? img->width_cr - 1 :
293 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
294 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
295 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
296 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
297 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 )
298 ) % 45;
299
300
301 if1 = ( i1 & f2_x );
302 jf1 = ( j1 & f2_y );
303 if0 = f1_x - if1;
304 jf0 = f1_y - jf1;
305
306 fw_pred = ( if0 * jf0 *
307 h264_dec_list_imgUV[uv][jj0][ii0] +
308 if1 * jf0 *
309 h264_dec_list_imgUV[uv][jj0][ii1] +
310 if0 * jf1 *
311 h264_dec_list_imgUV[uv][jj1][ii0] +
312 if1 * jf1 *
313 h264_dec_list_imgUV[uv][jj1][ii1] +
314 f4 ) / f3;
315 }
316 if ( direct_pdir == 1 || direct_pdir == 2 ) {
317 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
318 h264_dec_mv_array[jf][ifx][0];
319
320 if ( !curr_mb_field ) {
321 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
322 h264_dec_mv_array[jf][ifx][1];
323 } else {
324 if ( mb_nr % 2 == 0 ) {
325 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y
326 + h264_dec_mv_array[jf][ifx][1];
327 } else {
328 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2
329 + jj + joff ) * f1_y
330 + h264_dec_mv_array[jf][ifx][1];
331 }
332 }
333 if ( active_sps_chroma_format_idc == 1 )
334 j1 += 0;
335
336 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
337 img->width_cr - 1 : i1 / f1_x ) ) ?
338 ( ( i1 / f1_x > img->width_cr - 1 ) ?
339 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
340 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
341 max_y_cr : j1 / f1_y ) ) ?
342 ( ( j1 / f1_y > max_y_cr ) ?
343 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
344 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
345 f1_x > img->width_cr - 1 ) ?
346 img->width_cr - 1 :
347 ( i1 + f2_x ) / f1_x ) ) ?
348 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
349 ? img->width_cr - 1 :
350 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
351 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
352 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
353 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
354 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 ) )
355 % 45;
356
357 if1 = ( i1 & f2_x );
358 jf1 = ( j1 & f2_y );
359 if0 = f1_x - if1;
360 jf0 = f1_y - jf1;
361
362 bw_pred = ( if0 * jf0 *
363 h264_dec_list_imgUV[uv][jj0][ii0] +
364 if1 * jf0 *
365 h264_dec_list_imgUV[uv][jj0][ii1] +
366 if0 * jf1 *
367 h264_dec_list_imgUV[uv][jj1][ii0] +
368 if1 * jf1 *
369 h264_dec_list_imgUV[uv][jj1][ii1] +
370 f4 ) / f3;
371 }
372
373 } else {
374 fw_refframe = 0;
375 bw_refframe = 0;
376
377 fw_ref_idx = fw_refframe;
378 bw_ref_idx = bw_refframe;
379
380 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
381 h264_dec_mv_array[jf][ifx][0];
382
383 if ( !curr_mb_field ) {
384 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
385 h264_dec_mv_array[jf][ifx][1];
386 } else {
387 if ( mb_nr % 2 == 0 ) {
388 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y +
389 h264_dec_mv_array[jf][ifx][1];
390 } else {
391 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2
392 + jj + joff ) * f1_y
393 + h264_dec_mv_array[jf][ifx][1];
394 }
395 }
396
397 if ( active_sps_chroma_format_idc == 1 )
398 j1 += 0;
399
400 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
401 img->width_cr - 1 : i1 / f1_x ) ) ?
402 ( ( i1 / f1_x > img->width_cr - 1 ) ?
403 img->width_cr - 1 : i1 / f1_x ) : 0 ) )
404 % 45;
405 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
406 max_y_cr : j1 / f1_y ) ) ?
407 ( ( j1 / f1_y > max_y_cr ) ?
408 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
409 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
410 f1_x > img->width_cr - 1 ) ?
411 img->width_cr - 1 :
412 ( i1 + f2_x ) / f1_x ) ) ?
413 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 ) ?
414 img->width_cr - 1 :
415 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
416 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
417 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
418 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
419 max_y_cr :
420 ( j1 + f2_y ) / f1_y ) : 0 ) ) % 45;
421
422 if1 = ( i1 & f2_x );
423 jf1 = ( j1 & f2_y );
424 if0 = f1_x - if1;
425 jf0 = f1_y - jf1;
426
427 fw_pred = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0] +
428 if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1] +
429 if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0] +
430 if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1] +
431 f4 ) / f3;
432
433 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
434 h264_dec_mv_array[jf][ifx][0];
435
436 if ( !curr_mb_field ) {
437 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
438 h264_dec_mv_array[jf][ifx][1];
439 } else {
440 if ( mb_nr % 2 == 0 ) {
441 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y
442 + h264_dec_mv_array[jf][ifx][1];
443 } else {
444 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2 + jj
445 + joff ) * f1_y
446 + h264_dec_mv_array[jf][ifx][1];
447 }
448 }
449
450 if ( active_sps_chroma_format_idc == 1 )
451 j1 += 0;
452
453 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
454 img->width_cr - 1 : i1 / f1_x ) ) ?
455 ( ( i1 / f1_x > img->width_cr - 1 ) ?
456 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
457 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
458 max_y_cr : j1 / f1_y ) ) ?
459 ( ( j1 / f1_y > max_y_cr ) ?
460 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
461 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
462 f1_x > img->width_cr - 1 ) ?
463 img->width_cr - 1 :
464 ( i1 + f2_x ) / f1_x ) ) ?
465 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 ) ?
466 img->width_cr - 1 :
467 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
468 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
469 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
470 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
471 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 ) ) % 45;
472
473 if1 = ( i1 & f2_x );
474 jf1 = ( j1 & f2_y );
475 if0 = f1_x - if1;
476 jf0 = f1_y - jf1;
477
478 bw_pred = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0] +
479 if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1] +
480 if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0] +
481 if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1] +
482 f4 ) / f3;
483 }
484
485 if ( img->apply_weights ) {
486 if ( ( ( active_pps_weighted_pred_flag &&
487 ( img->type == P_SLICE || img->type == SP_SLICE ) )
488 || ( active_pps_weighted_bipred_idc == 1 &&
489 ( img->type == B_SLICE ) ) )
490 && curr_mb_field ) {
491 fw_ref_idx >>= 1;
492 bw_ref_idx >>= 1;
493 }
494
495 if ( img->direct_spatial_mv_pred_flag
496 && direct_pdir == 1 ) {
497 img->mpr[ii + ioff][jj + joff] =
498 ( ( ( img->wp_round_chroma ) >>
499 img->chroma_log2_weight_denom ) < 0 ? 0 :
500 ( ( img->wp_round_chroma ) >>
501 img->chroma_log2_weight_denom ) ) + 0;
502 } else
503 if ( img->direct_spatial_mv_pred_flag
504 && direct_pdir == 0 ) {
505 img->mpr[ii + ioff][jj + joff] =
506 ( ( ( ( img->wp_round_chroma ) >>
507 img->chroma_log2_weight_denom ) ) < 0 ?
508 0 :
509 ( ( ( img->wp_round_chroma ) >>
510 img->chroma_log2_weight_denom ) ) ) ;
511 } else {
512
513 int alpha_fw = 0;
514 int alpha_bw = 0;
515
516 img->mpr[ii + ioff][jj + joff] =
517 ( ( ( alpha_fw * fw_pred + alpha_bw *
518 bw_pred +
519 ( 1 << img->chroma_log2_weight_denom ) ) >> (
520 img->chroma_log2_weight_denom + 1 ) ) < 0 ?
521 0 : ( ( alpha_fw * fw_pred + alpha_bw *
522 bw_pred +
523 ( 1 << img->chroma_log2_weight_denom ) ) >>
524 ( img->chroma_log2_weight_denom + 1 ) ) );
525 }
526 } else {
527 if ( img->direct_spatial_mv_pred_flag
528 && direct_pdir == 1 )
529 img->mpr[ii + ioff][jj + joff] = bw_pred;
530 else
531 if ( img->direct_spatial_mv_pred_flag
532 && direct_pdir == 0 )
533 img->mpr[ii + ioff][jj + joff] = fw_pred;
534 else {
535 img->mpr[ii + ioff][jj + joff] = ( fw_pred + bw_pred
536 +
537 1 ) / 2;
538 }
539 }
540 }
541 }
542 }
543 }
544
545 if ( !smb ) {
546 _Pragma( "loopbound min 4 max 4" )
547 for ( ii = 0; ii < 4; ii++ ) {
548 jj = 0;
549 _Pragma( "loopbound min 4 max 4" )
550 for ( ; jj < 4; jj++ ) {
551 if ( !residue_transform_flag ) {
552 h264_dec_dec_picture_imgUV[uv][( j4 + jj ) % 64]
553 [( i4 + ii ) % 54]
554 = h264_dec_img_m7[ii][jj];
555 }
556 }
557 }
558 }
559 }
560 }
561
562 if ( smb ) {
563 _Pragma( "loopbound min 2 max 2" )
564 for ( j = 4; j < 6; j++ ) {
565 joff = ( j - 4 ) * 4;
566 j4 = img->pix_c_y + joff;
567 _Pragma( "loopbound min 2 max 2" )
568 for ( i = 0; i < 2; i++ ) {
569 ioff = i * 4;
570 i4 = img->pix_c_x + ioff;
571
572 _Pragma( "loopbound min 4 max 4" )
573 for ( ii = 0; ii < 4; ii++ )
574 _Pragma( "loopbound min 4 max 4" )
575 for ( jj = 0; jj < 4; jj++ ) {
576 h264_dec_dec_picture_imgUV[uv][( j4 + jj ) % 64]
577 [( i4 + ii ) % 54]
578 = h264_dec_img_m7[ii][jj];
579 }
580 }
581 }
582 }
583 }
584 }
585}
586
587
588/*
589 Main functions
590*/
591
592void _Pragma( "entrypoint" ) h264_dec_main( void )
593{
594 h264_dec_decode_one_macroblock( &h264_dec_img );
595}
596
597
598int main( int argc, char** argv )
599{
600 SET_UP
601 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
602 START_LOOP
603 h264_dec_init();
604 h264_dec_main();
605 STOP_LOOP
606 }
607 WRITE_TO_FILE
608
609 return ( h264_dec_return() );
610}
diff --git a/all_pairs/source/h264_dec/h264_dec.h b/all_pairs/source/h264_dec/h264_dec.h
new file mode 100644
index 0000000..ad33a25
--- /dev/null
+++ b/all_pairs/source/h264_dec/h264_dec.h
@@ -0,0 +1,29 @@
1#ifndef __H264DEC_H
2#define __H264DEC_H
3
4typedef enum {
5 P_SLICE = 0,
6 B_SLICE,
7 I_SLICE,
8 SP_SLICE,
9 SI_SLICE
10} h264_dec_SliceType;
11
12// image parameters
13typedef struct h264_dec_img_par {
14 int direct_spatial_mv_pred_flag;
15 int type;
16 int width_cr;
17 int pix_c_y;
18 int pix_c_x;
19 unsigned short mpr[16][16];
20 unsigned int chroma_log2_weight_denom;
21 int wp_round_chroma;
22 unsigned int apply_weights;
23 int num_blk8x8_uv;
24 int mb_cr_size_x;
25 int mb_cr_size_y;
26
27} h264_dec_ImageParameters;
28
29#endif
diff --git a/all_pairs/source/h264_dec/h264_decinput.c b/all_pairs/source/h264_dec/h264_decinput.c
new file mode 100644
index 0000000..5055179
--- /dev/null
+++ b/all_pairs/source/h264_dec/h264_decinput.c
@@ -0,0 +1,801 @@
1signed char h264_dec_mv_array[65][65][2] = {
2 { {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},
3 {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},
4 {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},
5 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
6 },
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},
8 {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},
9 {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},
10 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
11 },
12 { {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},
13 {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},
14 {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},
15 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
16 },
17 { {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},
18 {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},
19 {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},
20 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
21 },
22 { {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},
23 {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},
24 {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},
25 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
26 },
27 { {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},
28 {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},
29 {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},
30 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
31 },
32 { {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},
33 {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},
34 {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},
35 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
36 },
37 { {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},
38 {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},
39 {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},
40 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
41 },
42 { {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},
43 {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},
44 {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},
45 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
46 },
47 { {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},
48 {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},
49 {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},
50 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
51 },
52 { {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},
53 {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},
54 {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},
55 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
56 },
57 { {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},
58 {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},
59 {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},
60 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
61 },
62 { {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},
63 {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},
64 {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},
65 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
66 },
67 { {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},
68 {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},
69 {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},
70 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
71 },
72 { {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},
73 {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},
74 {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},
75 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
76 },
77 { {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},
78 {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},
79 {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},
80 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
81 },
82 { {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},
83 {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},
84 {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},
85 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
86 },
87 { {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},
88 {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},
89 {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},
90 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
91 },
92 { {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},
93 {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},
94 {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},
95 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
96 },
97 { {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},
98 {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},
99 {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},
100 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
101 },
102 { {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},
103 {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},
104 {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},
105 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
106 },
107 { {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},
108 {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},
109 {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},
110 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
111 },
112 { {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},
113 {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},
114 {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},
115 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
116 },
117 { {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},
118 {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},
119 {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},
120 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
121 },
122 { {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},
123 {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},
124 {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},
125 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
126 },
127 { {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},
128 {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},
129 {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},
130 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
131 },
132 { {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},
133 {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},
134 {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},
135 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
136 },
137 { {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},
138 {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},
139 {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},
140 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
141 },
142 { {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},
143 {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},
144 {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},
145 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
146 },
147 { {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},
148 {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},
149 {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},
150 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
151 },
152 { {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},
153 {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},
154 {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},
155 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
156 },
157 { {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},
158 {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},
159 {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},
160 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
161 },
162 { {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},
163 {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},
164 {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},
165 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
166 },
167 { {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},
168 {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},
169 {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},
170 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
171 },
172 { {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},
173 {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},
174 {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},
175 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
176 },
177 { {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},
178 {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},
179 {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},
180 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
181 },
182 { {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},
183 {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},
184 {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},
185 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
186 },
187 { {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},
188 {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},
189 {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},
190 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
191 },
192 { {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},
193 {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},
194 {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},
195 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
196 },
197 { {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},
198 {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},
199 {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},
200 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
201 },
202 { {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},
203 {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},
204 {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},
205 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
206 },
207 { {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},
208 {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},
209 {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},
210 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
211 },
212 { {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},
213 {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},
214 {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},
215 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
216 },
217 { {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},
218 {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},
219 {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},
220 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
221 },
222 { {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},
223 {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},
224 {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},
225 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
226 },
227 { {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},
228 {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},
229 {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},
230 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
231 },
232 { {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},
233 {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},
234 {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},
235 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
236 },
237 { {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},
238 {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},
239 {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},
240 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
241 },
242 { {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},
243 {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},
244 {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},
245 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
246 },
247 { {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},
248 {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},
249 {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},
250 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
251 },
252 { {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},
253 {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},
254 {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},
255 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
256 },
257 { {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},
258 {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},
259 {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},
260 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
261 },
262 { {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},
263 {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},
264 {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},
265 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
266 },
267 { {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},
268 {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},
269 {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},
270 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
271 },
272 { {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},
273 {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},
274 {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},
275 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
276 },
277 { {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},
278 {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},
279 {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},
280 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
281 },
282 { {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},
283 {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},
284 {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},
285 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
286 },
287 { {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},
288 {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},
289 {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},
290 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
291 },
292 { {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},
293 {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},
294 {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},
295 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
296 },
297 { {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},
298 {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},
299 {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},
300 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
301 },
302 { {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},
303 {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},
304 {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},
305 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
306 },
307 { {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},
308 {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},
309 {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},
310 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
311 },
312 { {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},
313 {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},
314 {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},
315 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
316 },
317 { {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},
318 {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},
319 {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},
320 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
321 },
322 { {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},
323 {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},
324 {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},
325 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
326 }
327};
328
329short h264_dec_list_imgUV[2][45][45] = {{
330 {
331 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124,
332 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
333 124, 125, 126, 126, 126, 126, 126, 126, 126, 125, 123, 122, 122, 122, 122
334 },
335 {
336 122, 122, 122, 122, 122, 122, 123, 123, 124, 124, 124, 124, 124, 124, 124,
337 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 122,
338 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 120, 121, 121
339 },
340 {
341 121, 121, 121, 121, 121, 121, 120, 120, 120, 122, 122, 124, 124, 124, 123,
342 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
343 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
344 },
345 {
346 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
347 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
348 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121
349 },
350 {
351 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
352 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
353 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121
354 },
355 {
356 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
357 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
358 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125, 125, 125, 125
359 },
360 {
361 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128, 128, 128, 127,
362 130, 135, 137, 139, 140, 140, 140, 140, 140, 140, 141, 142, 143, 143, 143,
363 143, 143, 143, 143, 142, 142, 142, 141, 141, 140, 140, 139, 138, 137, 137
364 },
365 {
366 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135, 135, 135, 135,
367 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134,
368 134, 134, 134, 134, 134, 134, 134, 123, 123, 123, 123, 123, 123, 123, 123
369 },
370 {
371 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
372 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
373 124, 124, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123
374 },
375 {
376 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
377 124, 124, 124, 124, 123, 122, 122, 121, 121, 120, 120, 120, 119, 119, 119,
378 119, 119, 119, 119, 120, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120
379 },
380 {
381 120, 122, 122, 124, 124, 124, 123, 122, 122, 122, 122, 122, 122, 122, 121,
382 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
383 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
384 },
385 {
386 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
387 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
388 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
389 },
390 {
391 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
392 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122,
393 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121
394 },
395 {
396 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122,
397 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
398 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 127
399 },
400 {
401 127, 127, 128, 128, 128, 128, 127, 130, 135, 137, 139, 140, 140, 140, 140,
402 140, 140, 141, 142, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141,
403 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135, 135, 134, 133, 133
404 },
405 {
406 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134,
407 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 123,
408 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
409 },
410 {
411 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
412 124, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
413 122, 122, 122, 122, 122, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
414 },
415 {
416 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 122, 121,
417 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 120, 121, 121, 121,
418 121, 121, 121, 121, 121, 120, 120, 120, 122, 122, 124, 124, 124, 123, 122
419 },
420 {
421 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121,
422 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
423 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122
424 },
425 {
426 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
427 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
428 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
429 },
430 {
431 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
432 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121,
433 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122
434 },
435 {
436 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123,
437 123, 123, 123, 123, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
438 125, 126, 126, 127, 127, 127, 128, 128, 128, 128, 127, 130, 135, 137, 139
439 },
440 {
441 140, 140, 140, 140, 140, 140, 141, 142, 143, 143, 143, 143, 143, 143, 143,
442 142, 142, 142, 141, 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135,
443 135, 134, 133, 133, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135
444 },
445 {
446 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
447 134, 134, 134, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125,
448 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124
449 },
450 {
451 124, 124, 124, 124, 123, 123, 122, 122, 122, 122, 122, 122, 122, 123, 123,
452 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
453 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
454 },
455 {
456 123, 122, 122, 121, 121, 120, 120, 120, 119, 118, 118, 118, 118, 118, 118,
457 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 121, 121, 123,
458 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121
459 },
460 {
461 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
462 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122,
463 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123
464 },
465 {
466 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122,
467 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
468 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
469 },
470 {
471 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
472 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
473 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122
474 },
475 {
476 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125,
477 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128,
478 128, 128, 128, 130, 134, 136, 138, 139, 139, 139, 139, 139, 139, 140, 142
479 },
480 {
481 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 141, 141, 140, 140, 139,
482 138, 137, 137, 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135,
483 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134
484 },
485 {
486 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 124, 124, 124, 124, 124,
487 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
488 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 122, 122, 122
489 },
490 {
491 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
492 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124,
493 124, 124, 124, 124, 124, 124, 124, 123, 122, 122, 121, 121, 120, 120, 119
494 },
495 {
496 118, 118, 118, 118, 118, 118, 118, 118, 119, 120, 120, 120, 120, 120, 120,
497 120, 119, 119, 119, 121, 121, 123, 123, 123, 122, 122, 122, 122, 122, 122,
498 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
499 },
500 {
501 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
502 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
503 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123
504 },
505 {
506 123, 123, 123, 123, 123, 123, 122, 121, 121, 121, 121, 121, 121, 121, 121,
507 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
508 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
509 },
510 {
511 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 125, 124, 123,
512 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
513 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122
514 },
515 {
516 122, 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125, 125, 125,
517 125, 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128, 128, 129,
518 128, 131, 134, 136, 138, 139, 139, 139, 139, 139, 139, 140, 142, 143, 143
519 },
520 {
521 142, 141, 140, 140, 141, 142, 142, 142, 141, 141, 140, 140, 139, 138, 137,
522 137, 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135, 135, 135,
523 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134
524 },
525 {
526 134, 134, 134, 134, 134, 134, 134, 134, 125, 125, 125, 125, 125, 125, 125,
527 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
528 126, 126, 125, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123
529 },
530 {
531 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123,
532 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 124, 124, 124,
533 124, 124, 124, 124, 124, 123, 122, 122, 121, 121, 120, 120, 119, 118, 117
534 },
535 {
536 117, 117, 117, 117, 117, 118, 119, 119, 119, 119, 119, 119, 119, 119, 118,
537 118, 118, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
538 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
539 },
540 {
541 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
542 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
543 122, 122, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124
544 },
545 {
546 124, 124, 124, 123, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
547 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
548 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122
549 },
550 {
551 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
552 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122,
553 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123
554 }
555 },
556 { {
557 123, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126,
558 127, 127, 127, 128, 128, 128, 129, 129, 131, 133, 135, 137, 138, 138, 138,
559 138, 138, 138, 139, 142, 143, 143, 142, 140, 139, 139, 140, 141, 142, 142
560 },
561 {
562 141, 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135, 135, 134, 133,
563 133, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134,
564 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134
565 },
566 {
567 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126,
568 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 124, 124, 124, 124, 124,
569 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124
570 },
571 {
572 124, 124, 124, 124, 124, 124, 123, 123, 122, 122, 122, 122, 122, 122, 122,
573 122, 122, 122, 123, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 122,
574 121, 121, 120, 120, 119, 118, 117, 117, 117, 117, 117, 117, 118, 119, 119
575 },
576 {
577 119, 119, 119, 119, 119, 119, 118, 118, 118, 120, 120, 122, 122, 122, 122,
578 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
579 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
580 },
581 {
582 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
583 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 124, 124, 124, 124, 124,
584 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 121, 121, 121
585 },
586 {
587 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
588 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
589 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121
590 },
591 {
592 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
593 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
594 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125, 125, 125, 125
595 },
596 {
597 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129,
598 131, 133, 135, 137, 138, 138, 138, 138, 138, 138, 139, 142, 143, 143, 142,
599 140, 139, 139, 140, 141, 142, 142, 141, 141, 140, 140, 139, 138, 137, 137
600 },
601 {
602 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135, 135, 135, 135,
603 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134,
604 134, 134, 134, 134, 134, 134, 134, 125, 125, 125, 125, 125, 125, 125, 125
605 },
606 {
607 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
608 126, 125, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123,
609 123, 123, 124, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123
610 },
611 {
612 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124,
613 124, 124, 124, 124, 122, 121, 121, 120, 120, 119, 119, 118, 117, 116, 116,
614 117, 117, 117, 117, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119
615 },
616 {
617 119, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121,
618 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122,
619 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
620 },
621 {
622 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
623 122, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
624 124, 124, 124, 123, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121
625 },
626 {
627 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
628 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122,
629 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121
630 },
631 {
632 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122,
633 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
634 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127
635 },
636 {
637 127, 127, 128, 128, 128, 129, 129, 131, 132, 134, 137, 138, 138, 138, 138,
638 138, 138, 139, 142, 142, 142, 141, 140, 139, 139, 140, 141, 141, 141, 141,
639 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135, 135, 134, 133, 133
640 },
641 {
642 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 133,
643 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 125,
644 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125
645 },
646 {
647 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 123, 121, 121,
648 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122,
649 122, 122, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
650 },
651 {
652 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 121, 119, 119, 118,
653 118, 117, 117, 116, 116, 115, 115, 116, 116, 117, 117, 118, 119, 119, 120,
654 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122
655 },
656 {
657 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 122, 122, 122, 123, 123,
658 123, 123, 123, 123, 123, 123, 123, 122, 121, 121, 121, 121, 121, 121, 121,
659 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
660 },
661 {
662 121, 121, 121, 121, 122, 122, 123, 123, 124, 125, 125, 125, 125, 125, 125,
663 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 123, 123, 122, 122,
664 121, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
665 },
666 {
667 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121,
668 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
669 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
670 },
671 {
672 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 123,
673 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125,
674 125, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 130
675 },
676 {
677 131, 133, 136, 137, 137, 138, 138, 139, 139, 140, 141, 141, 141, 140, 140,
678 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 139, 138, 137, 137, 136,
679 136, 135, 135, 135, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135
680 },
681 {
682 135, 135, 135, 135, 134, 133, 132, 132, 133, 133, 134, 134, 134, 134, 134,
683 134, 134, 134, 134, 134, 134, 125, 125, 125, 125, 125, 125, 125, 125, 125,
684 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125
685 },
686 {
687 125, 125, 125, 123, 122, 120, 120, 121, 122, 123, 123, 123, 123, 123, 123,
688 123, 122, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 124,
689 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124
690 },
691 {
692 124, 124, 123, 120, 118, 118, 117, 117, 116, 116, 115, 115, 114, 114, 115,
693 116, 117, 117, 118, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120,
694 120, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121
695 },
696 {
697 121, 121, 122, 122, 122, 123, 124, 124, 124, 124, 123, 123, 123, 123, 122,
698 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
699 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 123, 123
700 },
701 {
702 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
703 125, 125, 124, 123, 123, 122, 122, 121, 120, 120, 121, 121, 121, 121, 121,
704 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122
705 },
706 {
707 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122,
708 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121,
709 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122
710 },
711 {
712 122, 122, 122, 122, 122, 122, 123, 124, 124, 124, 124, 124, 124, 124, 124,
713 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128,
714 128, 128, 128, 128, 129, 129, 130, 130, 132, 135, 136, 137, 138, 138, 139
715 },
716 {
717 139, 139, 140, 140, 140, 139, 139, 138, 138, 138, 139, 139, 139, 139, 139,
718 139, 139, 139, 138, 137, 136, 136, 135, 135, 134, 134, 134, 134, 134, 134,
719 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 133, 132, 131, 131
720 },
721 {
722 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 125, 125,
723 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
724 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 122, 120, 120, 121
725 },
726 {
727 122, 123, 123, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121,
728 121, 122, 122, 122, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124,
729 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 120, 118, 117, 117, 116
730 },
731 {
732 116, 115, 115, 114, 114, 114, 115, 116, 117, 117, 118, 119, 120, 120, 120,
733 120, 121, 121, 121, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122,
734 122, 122, 122, 122, 122, 121, 121, 121, 121, 122, 122, 122, 123, 124, 124
735 },
736 {
737 124, 124, 123, 123, 123, 123, 122, 121, 121, 121, 121, 121, 121, 121, 121,
738 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
739 121, 121, 121, 122, 122, 123, 123, 124, 125, 125, 125, 125, 125, 125, 125
740 },
741 {
742 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 123, 123, 122, 122, 121,
743 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
744 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121
745 },
746 {
747 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
748 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
749 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 123, 124
750 },
751 {
752 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
753 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 130, 130,
754 132, 135, 136, 136, 137, 138, 139, 139, 139, 140, 140, 140, 139, 139, 138
755 },
756 {
757 138, 138, 139, 139, 139, 139, 139, 139, 139, 138, 137, 136, 135, 135, 134,
758 134, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133,
759 133, 133, 133, 133, 132, 131, 131, 132, 132, 133, 132, 132, 133, 133, 133
760 },
761 {
762 133, 133, 133, 133, 133, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
763 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
764 124, 124, 123, 121, 120, 120, 121, 122, 122, 122, 122, 122, 122, 122, 122
765 },
766 {
767 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 124, 124,
768 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123,
769 123, 122, 118, 116, 116, 115, 115, 114, 114, 114, 114, 114, 115, 116, 117
770 },
771 {
772 117, 117, 118, 120, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120,
773 121, 121, 121, 122, 122, 121, 121, 121, 122, 122, 122, 122, 121, 121, 121,
774 121, 122, 122, 122, 123, 124, 124, 124, 124, 123, 123, 123, 123, 122, 121
775 },
776 {
777 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122,
778 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 124, 124, 124,
779 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125
780 }
781 }
782};
783
784int h264_dec_img_m7[16][16] = {
785 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
786 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
787 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
788 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
789 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
790 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
791 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
792 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
793 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
794 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
795 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
796 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
797 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
798 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
799 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
800 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
801};
diff --git a/all_pairs/source/huff_dec/ChangeLog.txt b/all_pairs/source/huff_dec/ChangeLog.txt
new file mode 100644
index 0000000..865c263
--- /dev/null
+++ b/all_pairs/source/huff_dec/ChangeLog.txt
@@ -0,0 +1,20 @@
1File: huff_dec.c
2Original provenience: David Bourgin (David.Bourgin@ufrima.imag.fr)
3
42016-03-23:
5- Replaced dynamic memory allocation by a fixed array with 514 entries
6- Replaced memset() with loops
7- Replaced file I/O by reading and writing to char arrays
8- Added huff_dec_main(), huff_dec_init() and huff_dec_return()
9- Added huff_dec_ prefix to all functions, types and global variables
10- Changed function arguments to ANSI style
11- Replaced macro definitions
12- Added generic TACLeBench header replacing previous header
13- Included license from compress.txt
14- Corrected loop bounds in huff_dec_read_header()
15
162016-05-24:
17- static removed and huff_dec prefix added
18
192016-05-25:
20- added const to void g++ warning
diff --git a/all_pairs/source/huff_dec/compress.txt b/all_pairs/source/huff_dec/compress.txt
new file mode 100644
index 0000000..5966bcf
--- /dev/null
+++ b/all_pairs/source/huff_dec/compress.txt
@@ -0,0 +1,1107 @@
1+===========================================================+
2| Introduction to the losslessy compression schemes |
3| Description of the codec source codes |
4+-----------------------------------------------------------+
5| From David Bourgin (E-mail: david.bourgin@ufrima.imag.fr) |
6| Date: 22/9/94 |
7+===========================================================+
8
9 ------ BE CARE ------
10This file (compress.txt) is copyrighted. (c) David Bourgin - 1994
11Permission to use this documentation for any purpose other than
12its incorporation into a commercial product is hereby granted without fee.
13Permission to copy and distribute this documentation only for non-commercial use
14is also granted without fee, provided, however, that the above copyright notice
15appears in all copies, that both that copyright notice and this permission notice appear in supporting documentation. The author makes no representations about
16the suitability of this documentation for any purpose. It is provided "as is"
17without express or implied warranty.
18
19The source codes you obtain with this file are *NOT* covered by the same
20copyright, because you can include them for both commercial and non-commercial
21use. See below for more infos.
22
23The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
24dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
25They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
26on 22/5/94 and have been modified on 22/9/94.
27(c) David Bourgin - 1994
28The source codes I provide have no buggs (!) but being that I make them
29available for free I have some notes to make. They can change at any time
30without notice. I assume no responsability or liability for any errors or
31inaccurracies, make no warranty of any kind (express, implied or statutory)
32with respect to this publication and expressly disclaim any and all warranties
33of merchantability, fitness for particular purposes. Of course, if you have
34some problems to use the information presented here, I will try to help you if
35I can.
36
37If you include the source codes in your application, here are the conditions:
38- You have to put my name in the header of your source file (not in the
39excutable program if you don't want) (this item is a must)
40- I would like to see your resulting application, if possible (this item is not
41a must, because some applications must remain secret)
42- Whenever you gain money with your application, I would like to receive a very
43little part in order to be encouraged to update my source codes and to develop
44new schemes (this item is not a must)
45 ---------------------
46
47There are several means to compress data. Here, we are only going to deal with
48the losslessy schemes. These schemes are also called non-destructive because
49you always recover the initial data you had, and this, as soon as you need them.
50With losslessy schemes, you won't never lose any informations (except perhaps
51when you store or transmit your data but this is another problem...).
52
53In this introduction, we are going to see:
54- The RLE scheme (with different possible algorithms)
55- The Huffman schemes (dynamical scheme)
56- And the LZW scheme
57
58For the novice, a compresser is a program able to read several data (e.g. bytes)
59in input and to write several data in output. The data you obtain from the
60output (also called compressed data) will - of course - take less space than
61the the input data. This is true in most of cases, if the compresser works
62and if the type of the data is correct to be compressed with the given scheme.
63The codec (coder-decoder) enables you to save space on your hard disk and/or
64to save the communication costs because you always store/transmit the compressed
65data. You'll use the decompresser as soon as you need to recover your initial
66useful data. Note that the compressed data are useless if you have not
67the decoder...
68
69You are doubtless asking "How can I reduce the data size without losing some
70informations?". It's easy to answer to this question. I'll only take an example.
71I'm sure you have heard about the morse. This system established in the 19th
72century use a scheme very close to the huffman one. In the morse you encode
73the letters to transmit with two kinds of signs. If you encode these two sign
74possibilities in one bit, the symbol 'e' is transmitted in a single bit and
75the symbols 'y' and 'z' need four bits. Look at the symbols in the text you are
76reading, you'll fast understand the compression ratio...
77
78Important: The source codes associated to the algorithms I present are
79completely adaptative on what you need to compress. They all use basical
80macros on the top of the file. Usually the macros to change are:
81
82- beginning_of_data
83- end_of_data
84- read_byte
85- read_block
86- write_byte
87- write_block
88
89These allow the programmer to modify only a little part of the header
90of the source codes in order to compress as well memory as files.
91
92beginning_of_data(): Macro used to set the program so that the next read_byte()
93call will read the first byte to compress.
94end_of_data(): Returns a boolean to know whether there is no more bytes to read
95from the input stream. Return 0 if there is no more byte to compress, another
96non-zero value otherwise.
97read_byte(): Returns a byte read from the input stream if available.
98write_byte(x): Writes the byte 'x' to the output stream.
99read_block(...) and write_block(...): Same use as read_byte and write_byte(x)
100but these macros work on blocks of bytes and not only on a single byte.
101
102If you want to compress *from* the memory, before entering in a xxxcoding
103procedure ('xxx' is the actual extension to replace with a given codec), you
104have to add a pointer set up to the beginning of the zone to compress. Note
105that the following pointer 'source_memory_base' is not to add, it is just given
106here to specify a name to the address of the memory zone you are going to
107encode or decode. That is the same about source_memory_end which can be either
108a pointer to create or an existing pointer.
109
110unsigned char *source_memory_base, /* Base of the source memory */
111 *source_memory_end, /* Last address to read.
112 source_memory_end=source_memory_base+source_zone_length-1 */
113 *source_ptr; /* Used in the xxxcoding procedure */
114void pre_start()
115{ source_ptr=source_memory_base;
116 xxxcoding();
117}
118
119end_of_data() and read_byte() are also to modify to compress *from* memory:
120
121#define end_of_data() (source_ptr>source_memory_end)
122#define read_byte() (*(source_ptr++))
123
124If you want to compress *to* memory, before entering in a xxxcoding procedure
125('xxx' is the actual extension to replace with a given codec), you have to add
126a pointer. Note that the pointer 'dest_memory_base' is not to add, it is just
127given there to specify the address of the destination memory zone you are
128going to encode or decode.
129
130unsigned char *dest_memory_base, /* Base of the destination memory */
131 *dest_ptr; /* Used in the xxxcoding procedure */
132void pre_start()
133{ dest_ptr=dest_memory_base;
134 xxxcoding();
135}
136
137Of course, you can combine both from and to memory in the pre_start() procedure.
138The files dest_file and source_file handled in the main() function are
139to remove...
140
141void pre_start()
142{ source_ptr=source_memory_base;
143 dest_ptr=dest_memory_base;
144 xxxcoding();
145}
146
147In fact, to write to memory, the problem is in the write_byte(x) procedure.
148This problem exists because your destination zone can either be a static
149zone or a dynamically allocated zone. In the two cases, you have to check
150if there is no overflow, especially if the coder is not efficient and must
151produce more bytes than you reserved in memory.
152
153In the first case, with a *static* zone, write_byte(x) macro should look like
154that:
155
156unsigned long int dest_zone_length,
157 current_size;
158
159#define write_byte(x) { if (current_size==dest_zone_length) \
160 exit(1); \
161 dest_ptr[current_size++]=(unsigned char)(x); \
162 }
163
164In the static version, the pre_start() procedure is to modify as following:
165
166void pre_start()
167{ source_ptr=source_memory_base;
168 dest_ptr=dest_memory_base;
169 dest_zone_length=...; /* Set up to the actual destination zone length */
170 current_size=0; /* Number of written bytes */
171 xxxcoding();
172}
173Otherwise, dest_ptr is a zone created by the malloc instruction and you can try
174to resize the allocated zone with the realloc instruction. Note that I increment
175the zone one kilo-bytes by one kylo-bytes. You have to add two other variables:
176
177unsigned long int dest_zone_length,
178 current_size;
179
180#define write_byte(x) { if (current_size==dest_zone_length) \
181 { dest_zone_length += 1024; \
182 if ((dest_ptr=(unsigned char *)realloc(dest_ptr,dest_zone_length*sizeof(unsigned char)))==NULL) \
183 exit(1); /* You can't compress in memory \
184 => I exit but *you* can make a routine to swap on disk */ \
185 } \
186 dest_ptr[current_size++]=(unsigned char)(x); \
187 }
188
189With the dynamically allocated version, change the pre_start() routine as following:
190
191void pre_start()
192{ source_ptr=source_memory_base;
193 dest_ptr=dest_memory_base;
194 dest_zone_length=1024;
195 if ((dest_ptr=(unsigned char *)malloc(dest_zone_length*sizeof(unsigned char)))==NULL)
196 exit(1); /* You need at least 1 kb in the dynamical memory ! */
197 current_size=0; /* Number of written bytes */
198 xxxcoding();
199 /* Handle the bytes in dest_ptr but don't forget to free these bytes with:
200 free(dest_ptr);
201 */
202}
203
204The previously given macros work as:
205
206void demo() /* The file opening, closing and variables
207 must be set up by the calling procedure */
208{ unsigned char byte;
209 /* And not 'char byte' (!) */
210 while (!end_of_data())
211 { byte=read_byte();
212 printf("Byte read=%c\n",byte);
213 }
214}
215
216You must not change the rest of the program unless you're really sure and
217really need to do it!
218
219+==========================================================+
220| The RLE encoding |
221+==========================================================+
222
223RLE is an acronym that stands for Run Length Encoding. You may encounter it
224as an other acronym: RLC, Run Length Coding.
225
226The idea in this scheme is to recode your data with regard to the repetition
227frames. A frame is one or more bytes that occurr one or several times.
228
229There are several means to encode occurrences. So, you'll have several codecs.
230For example, you may have a sequence such as:
2310,0,0,0,0,0,255,255,255,2,3,4,2,3,4,5,8,11
232
233Some codecs will only deal with the repetitions of '0' and '255' but some other
234will deal with the repetitions of '0', '255', and '2,3,4'.
235
236You have to keep in your mind something important based on this example. A codec
237won't work on all the data you will try to compress. So, in case of non
238existence of sequence repetitions, the codecs based on RLE schemes must not
239display a message to say: "Bye bye". Actually, they will try to encode these
240non repeted data with a value that says "Sorry, I only make a copy of the inital
241input". Of course, a copy of the input data with an header in front of this copy
242will make a biggest output data but if you consider the whole data to compress,
243the encoding of repeated frames will take less space than the encoding
244of non-repeated frames.
245
246All of the algorithms with the name of RLE have the following look with three
247or four values:
248- Value saying if there's a repetition
249- Value saying how many repetitions (or non repetition)
250- Value of the length of the frame (useless if you just encode frame
251with one byte as maximum length)
252- Value of the frame to repeat (or not)
253
254I gave four algorithms to explain what I say.
255
256*** First RLE scheme ***
257
258The first scheme is the simpliest I know, and looks like the one used in MAC
259system (MacPackBit) and some image file formats such as Targa, PCX, TIFF, ...
260
261Here, all compressed blocks begin with a byte, named header, which description
262is:
263
264Bits 7 6 5 4 3 2 1 0
265Header X X X X X X X X
266
267Bits 7: Compression status (1=Compression applied)
268 0 to 6: Number of bytes to handle
269
270So, if the bit 7 is set up to 0, the 0 to 6 bits give the number of bytes
271that follow (minus 1, to gain more over compress) and that were not compressed
272(native bytes). If the bit 7 is set up to 1, the same 0 to 6 bits give
273the number of repetition (minus 2) of the following byte.
274
275As you see, this method only handle frame with one byte.
276
277Additional note: You have 'minus 1' for non-repeated frames because you must
278have at least one byte to compress and 'minus 2' for repeated frames because the
279repetition must be 2, at least.
280
281Compression scheme:
282
283 First byte=Next
284 /\
285 / \
286Count the byte Count the occurrence of NON identical
287occurrences bytes (maximum 128 times)
288(maximum 129 times) and store them in an array
289 | |
290 | |
291 1 bit '1' 1 bit '0'
292+ 7 bits giving + 7 bits giving
293 the number (-2) the number (-1)
294 of repetitions of non repetition
295+ repeated byte + n non repeated bytes
296 | |
297 1xxxxxxx,yyyyyyyy 0xxxxxxx,n bytes
298[-----------------] [----------------]
299
300Example:
301
302Sequence of bytes to encode | Coded values | Differences with compression
303 | | (unit: byte)
304-------------------------------------------------------------------------
305 255,15, | 1,255,15, | -1
306 255,255, | 128,255, | 0
307 15,15, | 128,15, | 0
308 255,255,255, | 129,255, | +1
309 15,15,15, | 129,15, | +1
310 255,255,255,255, | 130,255, | +2
311 15,15,15,15 | 130,15 | +2
312
313See codecs source codes: codrle1.c and dcodrle1.c
314
315*** Second RLE scheme ***
316
317In the second scheme of RLE compression you look for the less frequent byte
318in the source to compress and use it as an header for all compressed block.
319
320In the best cases, the occurrence of this byte is zero in the data to compress.
321
322Two possible schemes, firstly with handling frames with only one byte,
323secondly with handling frames with one byte *and* more. The first case is
324the subject of this current compression scheme, the second is the subject
325of next compression scheme.
326
327For the frame of one byte, header byte is written in front of all repetition
328with at least 4 bytes. It is then followed by the repetition number minus 1 and
329the repeated byte.
330Header byte, Occurrence number-1, repeated byte
331
332If a byte don't repeat more than tree times, the three bytes are written without
333changes in the destination stream (no header nor length, nor repetition in front
334or after theses bytes).
335
336An exception: If the header byte appears in the source one, two, three and up
337times, it'll be respectively encoded as following:
338- Header byte, 0
339- Header byte, 1
340- Header byte, 2
341- Header byte, Occurrence number-1, Header byte
342
343Example, let's take the previous example. A non frequent byte is zero-ASCII
344because it never appears.
345
346Sequence of bytes to encode | Coded values | Differences with compression
347 | | (unit: byte)
348-------------------------------------------------------------------------
349 255,15, | 255,15, | -1
350 255,255, | 255,255, | 0
351 15,15, | 15,15, | 0
352 255,255,255, | 255,255,255, | 0
353 15,15,15, | 15,15,15, | 0
354 255,255,255,255, | 0,3,255, | -1
355 15,15,15,15 | 0,3,15 | -1
356
357If the header would appear, we would see:
358
359Sequence of bytes to encode | Coded values | Differences with compression
360 | | (unit: byte)
361-------------------------------------------------------------------------
362 0, | 0,0, | +1
363 255, | 255, | 0
364 0,0, | 0,1, | 0
365 15, | 15, | 0
366 0,0,0, | 0,2, | -1
367 255, | 255, | 0
368 0,0,0,0 | 0,3,0 | -1
369
370See codecs source codes: codrle2.c and dcodrle2.c
371
372*** Third RLE scheme ***
373
374It's the same idea as the second scheme but we can encode frames with
375more than one byte. So we have three cases:
376
377- If it was the header byte, whatever is its occurrence, you encode it with:
378Header byte,0,number of occurrence-1
379- For frames which (repetition-1)*length>3, encode it as:
380Header byte, Number of frame repetition-1, frame length-1,bytes of frame
381- If no previous cases were detected, you write them as originally (no header,
382nor length, nor repetition in front or after theses bytes).
383
384Example based on the previous examples:
385
386Sequence of bytes to encode | Coded values | Differences with compression
387 | | (unit: byte)
388-----------------------------------------------------------------------------
389 255,15, | 255,15, | 0
390 255,255, | 255,255, | 0
391 15,15, | 15,15, | 0
392 255,255,255, | 255,255,255, | 0
393 15,15,15, | 15,15,15, | 0
394 255,255,255,255, | 255,255,255,255, | 0
395 15,15,15,15, | 15,15,15,15, | 0
396 16,17,18,16,17,18, |16,17,18,16,17,18,| 0
397 255,255,255,255,255, | 0,4,0,255, | -1
398 15,15,15,15,15, | 0,4,0,15, | -1
399 16,17,18,16,17,18,16,17,18,| 0,2,2,16,17,18, | -3
400 16,17,18,19,16,17,18,19 |0,1,3,16,17,18,19 | -1
401
402If the header (value 0) would be met, we would see:
403
404Sequence of bytes to encode | Coded values | Differences with compression
405 | | (unit: byte)
406--------------------------------------------------------------------------
407 0, | 0,0,0, | +2
408 255, | 255, | 0
409 0,0, | 0,0,1, | +1
410 15, | 15, | 0
411 0,0,0, | 0,0,2, | 0
412 255, | 255, | 0
413 0,0,0,0 | 0,0,3 | -1
414
415See codecs source codes: codrle3.c and dcodrle3.c
416
417*** Fourth RLE scheme ***
418
419This last RLE algorithm better handles repetitions of any kind (one byte
420and more) and non repetitions, including few non repetitions, and does not
421read the source by twice as RLE type 3.
422
423Compression scheme is:
424
425 First byte=Next byte?
426 /\
427 Yes / \ No
428 / \
429 1 bit '0' 1 bit '1'
430 / \
431 / \
432 Count the Motif of several
433 occurrences repeated byte?
434 of 1 repeated ( 65 bytes repeated
435 byte (maximum 257 times maxi)
436 16449 times) /\
437 /\ / \
438 / \ / \
439 / \ / \
440 / \ / \
441 1 bit '0' 1 bit '1' 1 bit '0' 1 bit '1'
442+ 6 bits + 14 bits + 6 bits of |
443giving the giving the the length Number of non repetition
444length (-2) length (-66) of the motif (maximum 8224)
445of the of the + 8 bits of /\
446repeated byte repeated byte the number (-2) < 33 / \ > 32
447+ repeated byte + repeated byte of repetition / \
448 | | + bytes of the 1 bit '0' 1 bit '1'
449 | | motif + 5 bits of + 13 bits
450 | | | the numer (-1) of the
451 | | | of non number (-33)
452 | | | repetition of repetition
453 | | | + non + non
454 | | | repeated repeated
455 | | | bytes bytes
456 | | | | |
457 | | | | 111xxxxx,xxxxxxxx,n bytes
458 | | | | [-------------------------]
459 | | | |
460 | | | 110xxxxx,n bytes
461 | | | [----------------]
462 | | |
463 | | 10xxxxxx,yyyyyyyy,n bytes
464 | | [-------------------------]
465 | |
466 | 01xxxxxx,xxxxxxxx,1 byte
467 | [------------------------]
468 |
469 00xxxxxx,1 byte
470[---------------]
471
472Example, same as previously:
473
474Sequence of bytes to encode | Coded values | Differences with compression
475 | | (unit: byte)
476--------------------------------------------------------------------------
477 255,15 | 11000001b,255,15, | +1
478 255,255 | 00000000b,255, | 0
479 15,15 | 00000000b,15, | 0
480 255,255,255 | 00000001b,255, | -1
481 15,15,15 | 00000001b,15, | -1
482 255,255,255,255 | 00000010b,255, | -2
483 15,15,15,15 | 00000010b,15, | -2
484 16,17,18,16,17,18 |10000001b,0,16,17,18,| -1
485 255,255,255,255,255 | 00000011b,255, | -3
486 15,15,15,15,15 | 00000011b,15, | -3
487 16,17,18,16,17,18,16,17,18 | 10000001b,16,17,18, | -4
488 16,17,18,19,16,17,18,19 |10000010b,16,17,18,19| -2
489
490+==========================================================+
491| The Huffman encoding |
492+==========================================================+
493
494This method comes from the searcher who established the algorithm in 1952.
495This method allows both a dynamic and static statistic schemes. A statistic
496scheme works on the data occurrences. It is not as with RLE where you had
497a consideration of the current occurrence of a frame but rather a consideration
498of the global occurrences of each data in the input stream. In this last case,
499frames can be any kinds of sequences you want. On the other hand, Huffman
500static encoding appears in some compressers such as ARJ on PCs. This enforces
501the encoder to consider every statistic as the same for all the data you have.
502Of course, the results are not as good as if it were a dynamic encoding.
503The static encoding is faster than the dynamic encoding but the dynamic encoding
504will be adapted to the statistic of the bytes of the input stream and will
505of course become more efficient by producing shortest output.
506
507The main idea in Huffman encoding is to re-code every byte with regard to its
508occurrence. The more frequent bytes in the data to compress will be encoded with
509less than 8 bits and the others could need 8 bits see even more to be encoded.
510You immediately see that the codes associated to the different bytes won't have
511identical size. The Huffman method will actually require that the binary codes
512have not a fixed size. We speak then about variable length codes.
513
514The dynamical Huffman scheme needs the binary trees for the encoding. This
515enables you to obtain the best codes, adapted to the source data.
516The demonstration won't be given there. To help the neophyt, I will just explain
517what is a binary tree.
518
519A binary tree is special fashion to represent the data. A binary tree is
520a structure with an associated value with two pointers. The term of binary has
521been given because of the presence of two pointers. Because of some conventions,
522one of the pointer is called left pointer and the second pointer is called right
523pointer. Here is a visual representation of a binary tree.
524
525 Value
526 / \
527 / \
528 Value Value
529 / \ / \
530... ... ... ...
531
532One problem with a binary encoding is a prefix problem. A prefix is the first
533part of the representation of a value, e.g. "h" and "he" are prefixes of "hello"
534but not "el". To understand the problem, let's code the letters "A", "B", "C",
535"D", and "E" respectively as 00b, 01b, 10b, 11b, and 100b. When you read
536the binary sequence 00100100b, you are unable to say if this comes from "ACBA"
537or "AEE". To avoid such situations, the codes must have a prefix property.
538And the letter "E" mustn't begin with the sequence of an other code. With "A",
539"B", "C", "D", and "E" respectively affected with 1b, 01b, 001b, 0001b, and
5400000b, the sequence 1001011b will only be decoded as "ACBA".
541
542 1 0
543<- /\ ->
544 / \
545 "A" /\
546 "B" \
547 /\
548 "C" \
549 /\
550 "D" "E"
551
552As you see, with this tree, an encoding will have the prefix property
553if the bytes are at the end of each "branch" and you have no byte at the "node".
554You also see that if you try to reach a character by the right pointer you add
555a bit set to 0 and by the left pointer, you add a bit set to 1 to the current
556code. The previous *bad* encoding provide the following bad tree:
557
558 /\
559 / \
560 / \
561 /\ /\
562 / \ "B" "A"
563 / \
564"D" "C"\
565 / \
566 "E"
567
568You see here that the coder shouldn't put the "C" at a node...
569
570As you see, the largest binary code are those with the longest distance
571from the top of the tree. Finally, the more frequent bytes will be the highest
572in the tree in order you have the shortest encoding and the less frequent bytes
573will be the lowest in the tree.
574
575From an algorithmic point of view, you make a list of each byte you encountered
576in the stream to compress. This list will always be sorted. The zero-occurrence
577bytes are removed from this list. You take the two bytes with the smallest
578occurrences in the list. Whenever two bytes have the same "weight", you take two
579of them regardless to their ASCII value. You join them in a node. This node will
580have a fictive byte value (256 will be a good one!) and its weight will be
581the sum of the two joined bytes. You replace then the two joined bytes with
582the fictive byte. And you continue so until you have one byte (fictive or not)
583in the list. Of course, this process will produce the shortest codes if the list
584remains sorted. I will not explain with arcana hard maths why the result
585is a set of the shortest bytes...
586
587Important: I use as convention that the right sub-trees have a weight greater
588or equal to the weight of the left sub-trees.
589
590Example: Let's take a file to compress where we notice the following
591occurrences:
592
593Listed bytes | Frequences (Weight)
594----------------------------------
595 0 | 338
596 255 | 300
597 31 | 280
598 77 | 24
599 115 | 21
600 83 | 20
601 222 | 5
602
603We will begin by joining the bytes 83 and 222. This will produce a fictive node
6041 with a weight of 20+5=25.
605
606(Fictive 1,25)
607 /\
608 / \
609(222,5) (83,20)
610
611Listed bytes | Frequences (Weight)
612----------------------------------
613 0 | 338
614 255 | 300
615 31 | 280
616 Fictive 1 | 25
617 77 | 24
618 115 | 21
619
620Note that the list is sorted... The smallest values in the frequences are 21 and
62124. That is why we will take the bytes 77 and 115 to build the fictive node 2.
622
623(Fictive 2,45)
624 /\
625 / \
626(115,21) (77,25)
627
628Listed bytes | Frequences (Weight)
629----------------------------------
630 0 | 338
631 255 | 300
632 31 | 280
633 Fictive 2 | 45
634 Fictive 1 | 25
635
636The nodes with smallest weights are the fictive 1 and 2 nodes. These are joined
637to build the fictive node 3 whose weight is 40+25=70.
638
639 (Fictive 3,70)
640 / \
641 / \
642 / \
643 /\ / \
644 / \ / \
645(222,5) (83,20) (115,21) (77,25)
646
647Listed bytes | Frequences (Weight)
648----------------------------------
649 0 | 338
650 255 | 300
651 31 | 280
652 Fictive 3 | 70
653
654The fictive node 3 is linked to the byte 31. Total weight: 280+70=350.
655
656 (Fictive 4,350)
657 / \
658 / \
659 / \
660 / \ (31,280)
661 / \
662 / \
663 /\ / \
664 / \ / \
665(222,5) (83,20) (115,21) (77,25)
666
667Listed bytes | Frequences (Weight)
668----------------------------------
669 Fictive 4 | 350
670 0 | 338
671 255 | 300
672
673As you see, being that we sort the list, the fictive node 4 has become the first
674of the list. We join the bytes 0 and 255 in a same fictive node, the number 5
675whose weight is 338+300=638.
676
677(Fictive 5,638)
678 /\
679 / \
680(255,300) (0,338)
681
682Listed bytes | Frequences (Weight)
683----------------------------------
684 Fictive 5 | 638
685 Fictive 4 | 350
686
687The fictive nodes 4 and 5 are finally joined. Final weight: 638+350=998 bytes.
688It is actually the total byte number in the initial file: 338+300+24+21+20+5.
689
690 (Tree,998)
691 1 / \ 0
692 <- / \ ->
693 / \
694 / \
695 / \
696 / \ / \
697 / \ / \
698 / \ / \
699 / \ (31,280) (255,300) (0,338)
700 / \
701 / \
702 /\ / \
703 / \ / \
704(222,5) (83,20) (115,21) (77,25)
705
706Bytes | Huffman codes | Frequences | Binary length*Frequence
707------------------------------------------------------------
708 0 | 00b | 338 | 676
709 255 | 01b | 300 | 600
710 31 | 10b | 280 | 560
711 77 | 1101b | 24 | 96
712 115 | 1100b | 21 | 84
713 83 | 1110b | 20 | 80
714 222 | 1111b | 5 | 20
715
716Results: Original file size: (338+300+280+24+21+20+5)*8=7904 bits (=998 bytes)
717versus 676+600+560+96+84+80+20=2116 bits, i.e. 2116/8=265 bytes.
718
719Now you know how to code an input stream. The last problem is to decode all this
720stuff. Actually, when you meet a binary sequence you can't say whether it comes
721from such byte list or such other one. Furthermore, if you change the occurrence
722of one or two bytes, you won't obtain the same resulting binary tree. Try for
723example to encode the previous list but with the following occurrences:
724
725Listed bytes | Frequences (Weight)
726----------------------------------
727 255 | 418
728 0 | 300
729 31 | 100
730 77 | 24
731 115 | 21
732 83 | 20
733 222 | 5
734
735As you can observe it, the resulting binary tree is quite different, we had yet
736the same initial bytes. To not be in such a situation we will put an header
737in front of all data. I can't comment longly this header but I can say
738I minimize it as much as I could. The header is divided into two parts.
739The first part of this header looks closely to a boolean table (coded more or
740less in binary to save space) and the second part provide to the decoder
741the binary code associated to each byte encountered in the original input
742stream.
743
744Here is a summary of the header:
745
746First part
747----------
748 First bit
749 / \
750 1 / \ 0
751 / \
752 256 bits set to 0 or 1 5 bits for the number n (minus 1)
753 depending whether the of bytes encountered
754 corresponding byte was in the file to compres
755 in the file to compress |
756 (=> n bits set to 1, \ /
757 n>32) n values of 8-bits (n<=32)
758 \ /
759 \ /
760 \ /
761Second part |
762----------- |
763 |
764 +------------->|
765(n+1) times | |
766(n bytes of | First bit?
767the values | / \
768encountered | 1 / \ 0
769in the | / \
770source file | 8 bits of 5 bits of the
771+ the code | the length length (-1)
772of a | (-1) of the of the following
773fictive | following binary
774byte | binary code code
775to stop the | (length>32) (length<=32)
776decoding. | \ /
777The fictive | \ /
778is set to | \ /
779256 in the | |
780Huffman | binary code
781-tree of | |
782encoding) +--------------|
783 |
784 Binary encoding of the source file
785 |
786 Code of end of encoding
787 |
788
789
790With my codecs I can handle binary sequences with a length of 256 bits.
791This correspond to encode all the input stream from one byte to infinite length.
792In fact if a byte had a range from 0 to 257 instead of 0 to 255, I would have a
793bug with my codecs with an input stream of at least 370,959,230,771,131,880,927,
794453,318,055,001,997,489,772,178,180,790,105 bytes !!!
795
796Where come this explosive number? In fact, to have a severe bug, I must have
797a completely unbalanced tree:
798
799 Tree
800 /\
801 \
802 /\
803 \
804 /\
805 \
806 ...
807 /\
808 \
809 /\
810
811Let's take the following example:
812
813Listed bytes | Frequences (Weight)
814----------------------------------
815 32 | 5
816 101 | 3
817 97 | 2
818 100 | 1
819 115 | 1
820
821This produces the following unbalanced tree:
822
823 Tree
824 /\
825(32,5) \
826 /\
827 (101,3) \
828 /\
829 (97,2) \
830 /\
831 (115,1) (100,1)
832
833Let's speak about a mathematical series: The Fibonacci series. It is defined as
834following:
835
836{ Fib(0)=0
837{ Fib(1)=1
838{ Fib(n)=Fib(n-2)+Fib(n-1)
839
840Fib(0)=0, Fib(1)=1, Fib(2)=1, Fib(3)=2, Fib(4)=3, Fib(5)=5, Fib(6)=8, Fib(7)=13,
841etc.
842
843But 1, 1, 2, 3, 5, 8 are the occurrences of our list! We can actually
844demonstrate that to have an unbalanced tree, we have to take a list with
845an occurrence based on the Fibonacci series (these values are minimal).
846If the data to compress have m different bytes, when the tree is unbalanced,
847the longest code need m-1 bits. In our little previous example where m=5,
848the longest codes are associated to the bytes 100 and 115, respectively coded
8490001b and 0000b. We can also say that to have an unbalanced tree we must have
850at least 5+3+2+1+1=12=Fib(7)-1. To conclude about all that, with a coder that
851uses m-1 bits, you must never have an input stream size over than Fib(m+2)-1,
852otherwise, there could be a bug in the output stream. Of course, with my codecs
853there will never be a bug because I can deal with binary code sizes of 1 to 256
854bits. Some encoder could use that with m=31, Fib(31+2)-1=3,524,577 and m=32,
855Fib(32+2)-1=5,702,886. And an encoder that uses unisgned integer of 32 bits
856shouldn't have a bug until about 4 Gb...
857
858+==========================================================+
859| The LZW encoding |
860+==========================================================+
861
862The LZW scheme is due to three searchers, i.e. Abraham Lempel and Jacob Ziv
863worked on it in 1977, and Terry Welch achieved this scheme in 1984.
864
865LZW is patented in USA. This patent, number 4,558,302, is covered by Unisys
866Corporation. You can usually write (without fees) software codecs which use
867the LZW scheme but hardware companies can't do so. You may get a limited
868licence by writting to:
869Welch Licencing Department
870Office of the General Counsel
871M/S C1SW19
872Unisys corporation
873Blue Bell
874Pennsylvania, 19424 (USA)
875
876If you're occidental, you are surely using an LZW encoding every time you are
877speaking, especially when you use a dictionary. Let's consider, for example,
878the word "Cirrus". As you read a dictionary, you begin with "A", "Aa", and so
879on. But a computer has no experience and it must suppose that some words
880already exist. That is why with "Cirrus", it supposes that "C", "Ci", "Cir",
881"Cirr", "Cirru", and "Cirrus" exist. Of course, being that this is a computer,
882all these words are encoded as index numbers. Every time you go forward, you add
883a new number associated to the new word. Being that a computer is byte-based
884and not alphabetic-based, you have an initial dictionary of 256 letters instead
885of our 26 ('A' to 'Z') letters.
886
887Example: Let's code "XYXYZ". First step, "X" is recognized in the initial
888dictionary of 256 letters as the 89th. Second step, "Y" is read. Does "XY"
889exist? No, then "XY" is stored as the word 256. You write in the output stream
890the ASCII of "X", i.e. 88. Now "YX" is tested as not referenced in the current
891dictionary. It is stored as the word 257. You write now in the output stream 89
892(ASCII of "Y"). "XY" is now met. But now "XY" is known as the reference 256.
893Being that "XY" exists, you test the sequence with one more letter, i.e. "XYZ".
894This last word is not referenced in the current dictionary. You write then the
895value 256. Finally, you reach the last letter ("Z"). You add "YZ" as the
896reference 258 but it is the last letter. That is why you just write the value
89790 (ASCII of "Z").
898
899Another encoding sample with the string "ABADABCCCABCEABCECCA".
900
901+----+-----+---------------+------+----------+-------------------------+------+
902|Step|Input|Dictionary test|Prefix|New symbol|Dictionary |Output|
903| | | | | |D0=ASCII with 256 letters| |
904+----+-----+---------------+------+----------+-------------------------+------+
905| 1 | "A" |"A" in D0 | "A" | "B" | D1=D0 | 65 |
906| | "B" |"AB" not in D0 | | | and "AB"=256 | |
907+----+-----+---------------+------+----------+-------------------------+------+
908| 2 | "A" |"B" in D1 | "B" | "A" | D2=D1 | 66 |
909| | |"BA" not in D1 | | | and "BA"=257 | |
910+----+-----+---------------+------+----------+-------------------------+------+
911| 3 | "D" |"A" in D2 | "A" | "D" | D3=D2 | 65 |
912| | |"AD" not in D2 | | | and "AD"=258 | |
913+----+-----+---------------+------+----------+-------------------------+------+
914| 4 | "A" |"D" in D3 | "D" | "A" | D4=D3 | 68 |
915| | |"DA" not in D3 | | | and "DA"=259 | |
916+----+-----+---------------+------+----------+-------------------------+------+
917| 5 | "B" |"A" in D4 | "AB" | "C" | D5=D4 | 256 |
918| | "C" |"AB" in D4 | | | and "ABC"=260 | |
919| | |"ABC" not in D4| | | | |
920+----+-----+---------------+------+----------+-------------------------+------+
921| 6 | "C" |"C" in D5 | "C" | "C" | D6=D5 | 67 |
922| | |"CC" not in D5 | | | and "CC"=261 | |
923+----+-----+---------------+------+----------+-------------------------+------+
924| 7 | "C" |"C" in D6 | "CC" | "A" | D7=D6 | 261 |
925| | "A" |"CC" in D6 | | | and "CCA"=262 | |
926| | |"CCA" not in D6| | | | |
927+----+-----+---------------+------+----------+-------------------------+------+
928| 8 | "B" |"A" in D7 | "ABC"| "E" | D8=D7 | 260 |
929| | "C" |"AB" in D7 | | | and "ABCE"=263 | |
930| | "E" |"ABC" in D7 | | | | |
931| | <"ABCE" not in D7| | | | |
932+----+-----+---------------+------+----------+-------------------------+------+
933| 9 | "A" |"E" in D8 | "E" | "A" | D9=D8 | 69 |
934| | |"EA" not in D8 | | | and "EA"=264 | |
935+----+-----+---------------+------+----------+-------------------------+------+
936| 10 | "B" |"A" in D9 |"ABCE"| "C" | D10=D9 | 263 |
937| | "C" |"AB" in D9 | | | and "ABCEC"=265 | |
938| | "E" |"ABC" in D9 | | | | |
939| | "C" |"ABCE" in D9 | | | | |
940| | <"ABCEC" not in D9> | | | |
941+----+-----+---------------+------+----------+-------------------------+------+
942| 11 | "C" |"C" in D10 | "CCA"| | | 262 |
943| | "A" |"CC" in D10 | | | | |
944| | <"CCA" not in D10| | | | |
945+----+-----+---------------+------+----------+-------------------------+------+
946
947You will notice a problem with the above output: How to write a code of 256
948(for example) on 8 bits? It's simple to solve this problem. You just say that
949the encoding starts with 9 bits and as you reach the 512th word, you use a
95010-bits encoding. With 1024 words, you use 11 bits; with 2048 words, 12 bits;
951and so on with all numbers of 2^n (n is positive). To better synchronize
952the coder and the decoder with all that, most of implementations use two
953additional references. The word 256 is a code of reinitialisation (the codec
954must reinitialize completely the current dictionary to its 256 initial letters)
955and the word 257 is a code of end of information (no more data to read).
956Of course, you start your first new word as the code number 258.
957
958You can also do so as in the GIF file format and start with an initial
959dictionary of 18 words to code an input stream with only letters coded on 4 bits
960(you start with codes of 5 bits in the output stream!). The 18 initial words
961are: 0 to 15 (initial letters), 16 (reinit the dictionary), and 17 (end of
962information). First new word has code 18, second word, code 19, ...
963
964Important: You can consider that your dictionary is limited to 4096 different
965words (as in GIF and TIFF file formats). But if your dictionary is full, you
966can decide to send old codes *without* reinitializing the dictionary. All the
967decoders must be compliant with this. This enables you to consider that it is
968not efficient to reinitialize the full dictionary. Instead of this, you don't
969change the dictionary and you send/receive (depending if it's a coder or a
970decoder) existing codes in the full dictionary.
971
972My codecs are able to deal as well with most of initial size of data in the
973initial dictionary as with full dictionary.
974
975Let's see how to decode an LZW encoding. We saw with true dynamical Huffman
976scheme that you needed an header in the encoding codes. Any header is useless
977in LZW scheme. When two successive bytes are read, the first must exist in the
978dictionary. This code can be immediately decoded and written in the output
979stream. If the second code is equal or less than the word number in the current
980dictionary, this code is decoded as the first one. At the opposite, if the
981second code is equal to the word number in dictionary plus one, this means you
982have to write a word composed with the word (the sentence, not the code number)
983of the last code plus the first character of the last code. In between, you make
984appear a new word. This new word is the one you just sent to the output stream,
985it means composed by all the letters of the word associated to the first code
986and the first letter of the word of the second code. You continue the processing
987with the second and third codes read in the input stream (of codes)...
988
989Example: Let's decode the previous encoding given a bit more above.
990
991+------+-------+----------------+----------+------------------+--------+
992| Step | Input | Code to decode | New code | Dictionary | Output |
993+------+-------+----------------+----------+------------------+--------+
994| 1 | 65 | 65 | 66 | 65,66=256 | "A" |
995| | 66 | | | | |
996+------+-------+----------------+----------+------------------+--------+
997| 2 | 65 | 66 | 65 | 66,65=257 | "B" |
998+------+-------+----------------+----------+------------------+--------+
999| 3 | 68 | 65 | 68 | 65,68=258 | "A" |
1000+------+-------+----------------+----------+------------------+--------+
1001| 4 | 256 | 68 | 256 | 68,65=259 | "D" |
1002+------+-------+----------------+----------+------------------+--------+
1003| 5 | 67 | 256 | 67 | 65,66,67=260 | "AB" |
1004+------+-------+----------------+----------+------------------+--------+
1005| 6 | 261 | 67 | 261 | 67,67=261 | "C" |
1006+------+-------+----------------+----------+------------------+--------+
1007| 7 | 260 | 261 | 260 | 67,67,65=262 | "CC" |
1008+------+-------+----------------+----------+------------------+--------+
1009| 8 | 69 | 260 | 69 | 65,66,67,69=263 | "ABC" |
1010+------+-------+----------------+----------+------------------+--------+
1011| 9 | 263 | 69 | 263 | 69,65=264 | "E" |
1012+------+-------+----------------+----------+------------------+--------+
1013| 10 | 262 | 263 | 262 |65,66,67,69,67=256| "ABCE" |
1014+------+-------+----------------+----------+------------------+--------+
1015| 11 | | 262 | | | "CCA" |
1016+------+-------+----------------+----------+------------------+--------+
1017
1018Summary: The step 4 is an explicit example. The code to decode is 68 ("D" in
1019ASCII) and the new code is 256. The new word to add to the dictionary is the
1020letters of the first word plus the the first letter of the second code (code
1021256), i.e. 65 ("A" in ASCII) plus 68 ("D"). So the new word has the letters 68
1022and 65 ("AD").
1023
1024The step 6 is quite special. The first code to decode is referenced but the
1025second new code is not referenced being that the dictionary is limited to 260
1026referenced words. We have to make it as the second previously given case, it
1027means you must take the word to decode plus its first letter, i.e. "C"+"C"="CC".
1028Be care, if any encountered code is *upper* than the dictionary size plus 1, it
1029means you have a problem in your data and/or your codecs are...bad!
1030
1031Tricks to improve LZW encoding (but it becomes a non-standard encoding):
1032- To limit the dictionary to an high amount of words (4096 words maximum enable
1033you to encode a stream of a maximmum 7,370,880 letters with the same dictionary)
1034- To use a dictionary of less than 258 if possible (example, with 16 color
1035pictures, you start with a dictionary of 18 words)
1036- To not reinitialize a dictionary when it is full
1037- To reinitialize a dictionary with the most frequent of the previous dictionary
1038- To use the codes from (current dictionary size+1) to (maximum dictionary size)
1039because these codes are not used in the standard LZW scheme.
1040Such a compression scheme has been used (successfully) by Robin Watts
1041<ct93008@ox.ac.uk>.
1042
1043+==========================================================+
1044| Summary |
1045+==========================================================+
1046
1047-------------------------------------------------
1048RLE type 1:
1049Fastest compression. Good ratio for general purpose.
1050Doesn't need to read the data by twice.
1051Decoding fast.
1052-------------------------------------------------
1053RLE type 2:
1054Fast compression. Very good ratio in general (even for general purposes).
1055Need to read the data by twice.
1056Decoding fast.
1057-------------------------------------------------
1058RLE type 3:
1059Slowest compression. Good ratio on image file,quite middle for general purposes.
1060Need to read the data by twice.
1061Change line:
1062#define MAX_RASTER_SIZE 256
1063into:
1064#define MAX_RASTER_SIZE 16
1065to speed up the encoding (but the result decreases in ratio). If you compress
1066with memory buffers, do not modify this line...
1067Decoding fast.
1068-------------------------------------------------
1069RLE type 4:
1070Slow compression. Good ratio on image file, middle in general purposes.
1071Change line:
1072#define MAX_RASTER_SIZE 66
1073into:
1074#define MAX_RASTER_SIZE 16
1075to speed up the encoding (but the result decreases in ratio). If you compress
1076with memory buffers, do not modify this line...
1077Decoding fast.
1078-------------------------------------------------
1079Huffman:
1080Fast compression. Good ratio on text files and similar, middle for general
1081purposes. Interesting method to use to compress a buffer already compressed by
1082RLE types 1 or 2 methods...
1083Decoding fast.
1084-------------------------------------------------
1085LZW:
1086Quite fast compression. Good, see even very good ratio, for general purposes.
1087Bigger the data are, better the compression ratio is.
1088Decoding quite fast.
1089-------------------------------------------------
1090
1091The source codes work on all kinds of computers with a C compiler.
1092With the compiler, optimize the speed run option instead of space option.
1093With UNIX system, it's better to compile them with option -O.
1094If you don't use a GNU compiler, the source file MUST NOT have a size
1095over 4 Gb for RLE 2, 3, and Huffman, because I count the number
1096of occurrences of the bytes.
1097So, with GNU compilers, 'unsigned lont int' is 8 bytes instead of 4 bytes
1098(as normal C UNIX compilers and PCs' compilers, such as Microsoft C++
1099and Borland C++).
1100Actually:
1101* Normal UNIX compilers, => 4 Gb (unsigned long int = 4 bytes)
1102 Microsoft C++ and Borland C++ for PCs
1103* GNU UNIX compilers => 17179869184 Gb (unsigned long int = 8 bytes)
1104
1105+==========================================================+
1106| END |
1107+==========================================================+
diff --git a/all_pairs/source/huff_dec/huff_dec.c b/all_pairs/source/huff_dec/huff_dec.c
new file mode 100644
index 0000000..48bdf4b
--- /dev/null
+++ b/all_pairs/source/huff_dec/huff_dec.c
@@ -0,0 +1,393 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: huff_dec
7
8 Author: David Bourgin (David.Bourgin@ufrima.imag.fr)
9
10 Function: Example of Huffman decoding
11
12 Source: ftp://turing.imag.fr/pub/compression/ (1994-09-26)
13
14 Original name: dcodhuff.c
15
16 Changes: I/O to char arrays instead of file i/o.
17 Dynamic memory allocation replaced by array.
18
19 License:
20
21The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
22dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
23They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
24on 22/5/94 and have been modified on 22/9/94.
25(c) David Bourgin - 1994
26The source codes I provide have no buggs (!) but being that I make them
27available for free I have some notes to make. They can change at any time
28without notice. I assume no responsability or liability for any errors or
29inaccurracies, make no warranty of any kind (express, implied or statutory)
30with respect to this publication and expressly disclaim any and all warranties
31of merchantability, fitness for particular purposes. Of course, if you have
32some problems to use the information presented here, I will try to help you if
33I can.
34
35If you include the source codes in your application, here are the conditions:
36- You have to put my name in the header of your source file (not in the
37excutable program if you don't want) (this item is a must)
38- I would like to see your resulting application, if possible (this item is not
39a must, because some applications must remain secret)
40- Whenever you gain money with your application, I would like to receive a very
41little part in order to be encouraged to update my source codes and to develop
42new schemes (this item is not a must)
43
44*/
45
46
47/*
48 Declaration of types
49*/
50
51
52#include "../extra.h"
53typedef struct s_tree {
54 unsigned int byte; /* A byte has to be coded as an unsigned integer to
55 allow a node to have a value over 255 */
56 struct s_tree *left_ptr;
57 struct s_tree *right_ptr;
58} huff_dec_t_tree;
59
60typedef struct {
61 unsigned char bits[32];
62 unsigned int bits_nb;
63 unsigned char presence;
64} t_bin_val;
65
66
67/*
68 Forward declaration of functions
69*/
70
71void huff_dec_init( void );
72int huff_dec_return( void );
73int huff_dec_end_of_data();
74int huff_dec_read_byte();
75void huff_dec_write_byte( char ch );
76unsigned char huff_dec_read_code_1_bit();
77unsigned int huff_dec_read_code_n_bits( unsigned int n );
78void huff_dec_read_header( t_bin_val codes_table[257] );
79huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[257],
80 huff_dec_t_tree heap[514] );
81void huff_dec_main( void );
82//int main( void );
83
84
85/*
86 Declaration of global variables
87*/
88
89static int huff_dec_input_pos;
90static int huff_dec_output_pos;
91static char huff_dec_output[1024];
92unsigned char huff_dec_byte_nb_to_read = 0;
93unsigned int huff_dec_val_to_read = 0;
94
95
96/*
97 Initialization- and return-value-related functions
98*/
99
100#define huff_dec_plaintext_len 600
101static const char *huff_dec_plaintext =
102 "You are doubtless asking \"How can I reduce the data size without losing "
103 "some informations?\". It's easy to answer to this question. I'll only take "
104 "an example. I'm sure you have heard about the morse. This system established "
105 "in the 19th century use a scheme very close to the huffman one. In the morse "
106 "you encode the letters to transmit with two kinds of signs. If you encode "
107 "these two sign possibilities in one bit, the symbol 'e' is transmitted in a "
108 "single bit and the symbols 'y' and 'z' need four bits. Look at the symbols "
109 "in the text you are reading, you'll fast understand the compression ratio...";
110
111#define huff_dec_encoded_len 419
112static unsigned char huff_dec_encoded[huff_dec_encoded_len] = {
113 128, 0, 0, 0, 80, 133, 32, 32, 128, 100, 4, 32, 63, 239, 255, 240,
114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
115 4, 7, 167, 21, 129, 232, 69, 120, 132, 217, 20, 162, 19, 164, 39, 133,
116 252, 138, 105, 20, 194, 19, 129, 240, 172, 138, 248, 150, 11, 11, 240, 201,
117 68, 64, 114, 53, 17, 42, 37, 195, 128, 212, 116, 194, 41, 98, 52, 51,
118 12, 132, 112, 244, 3, 36, 33, 52, 39, 135, 164, 33, 62, 156, 87, 14,
119 110, 22, 87, 50, 85, 198, 99, 142, 140, 194, 81, 78, 158, 84, 129, 254,
120 129, 248, 110, 179, 159, 192, 145, 133, 184, 184, 28, 210, 96, 146, 73, 10,
121 226, 21, 83, 152, 74, 13, 111, 132, 199, 202, 219, 241, 74, 193, 167, 105,
122 222, 31, 147, 6, 55, 31, 129, 40, 232, 52, 153, 160, 148, 18, 36, 197,
123 45, 216, 202, 86, 30, 31, 177, 90, 133, 138, 248, 23, 81, 195, 160, 100,
124 215, 93, 50, 185, 225, 251, 23, 6, 230, 225, 229, 112, 71, 80, 96, 141,
125 205, 176, 230, 85, 196, 9, 24, 93, 90, 121, 225, 76, 68, 152, 63, 25,
126 107, 140, 101, 204, 214, 77, 26, 194, 96, 18, 48, 77, 210, 137, 1, 253,
127 4, 230, 248, 56, 240, 224, 111, 163, 95, 10, 12, 223, 7, 234, 167, 129,
128 40, 36, 96, 135, 125, 245, 250, 2, 198, 120, 127, 0, 145, 133, 213, 167,
129 135, 149, 195, 67, 235, 108, 9, 24, 87, 17, 102, 152, 37, 4, 222, 131,
130 188, 144, 73, 36, 128, 73, 20, 81, 152, 177, 133, 248, 28, 165, 131, 120,
131 127, 240, 242, 184, 104, 125, 109, 129, 35, 30, 4, 145, 65, 202, 88, 9,
132 138, 103, 44, 205, 100, 167, 24, 152, 11, 24, 51, 37, 66, 9, 24, 31,
133 174, 202, 212, 49, 152, 18, 96, 155, 208, 119, 146, 45, 97, 48, 56, 28,
134 194, 90, 224, 204, 144, 232, 176, 36, 96, 126, 187, 43, 83, 12, 121, 129,
135 209, 96, 197, 35, 2, 54, 176, 249, 92, 208, 204, 145, 188, 41, 170, 180,
136 71, 16, 36, 96, 126, 187, 43, 83, 19, 0, 145, 129, 100, 209, 15, 43,
137 135, 55, 6, 238, 180, 194, 90, 17, 229, 115, 21, 168, 251, 140, 131, 162,
138 217, 166, 93, 22, 4, 140, 31, 91, 166, 55, 25, 202, 192, 111, 20, 171,
139 207, 39, 192,
140};
141
142
143void huff_dec_init( void )
144{
145 huff_dec_input_pos = 0;
146 huff_dec_output_pos = 0;
147}
148
149
150int huff_dec_return( void )
151{
152 int i;
153 _Pragma( "loopbound min 1 max 600" )
154 for ( i = 0; i < huff_dec_plaintext_len; i++ ) {
155 if ( huff_dec_plaintext[i] != huff_dec_output[i] ) return i + 1;
156 }
157 return 0;
158}
159
160
161/*
162 Input / output functions
163*/
164
165int huff_dec_end_of_data()
166{
167 return huff_dec_input_pos >= huff_dec_encoded_len;
168}
169
170
171int huff_dec_read_byte()
172{
173 return huff_dec_encoded[huff_dec_input_pos++];
174}
175
176
177void huff_dec_write_byte( char ch )
178{
179 huff_dec_output[huff_dec_output_pos++] = ch;
180}
181
182
183unsigned char huff_dec_read_code_1_bit()
184/* Returned parameters: Returns an unsigned integer with the 0-bit (on the
185 right of the integer) valid
186 Action: Reads the next bit in the stream of data to compress
187 Errors: An input/output error could disturb the running of the program
188 The source must have enough bits to read
189*/
190{
191 if ( huff_dec_byte_nb_to_read ) {
192 huff_dec_byte_nb_to_read--;
193 return ( ( huff_dec_val_to_read >> huff_dec_byte_nb_to_read ) & 1 );
194 } else {
195 huff_dec_val_to_read = huff_dec_read_byte();
196 huff_dec_byte_nb_to_read = 7;
197 return ( ( huff_dec_val_to_read >> 7 ) & 1 );
198 }
199}
200
201
202unsigned int huff_dec_read_code_n_bits( unsigned int n )
203/* Returned parameters: Returns an unsigned integer with the n-bits (on the
204 right of the integer) valid
205 Action: Reads the next n bits in the stream of data to compress
206 Errors: An input/output error could disturb the running of the program
207 The source must have enough bits to read
208*/
209{
210 unsigned int result = 0;
211 unsigned i = n;
212
213 _Pragma ( "loopbound min 1 max 1" )
214 while ( i ) {
215 _Pragma ( "loopbound min 0 max 2" )
216 while ( ( huff_dec_byte_nb_to_read < 9 ) && ( !huff_dec_end_of_data() ) ) {
217 huff_dec_val_to_read = ( huff_dec_val_to_read << 8 ) + huff_dec_read_byte();
218 huff_dec_byte_nb_to_read += 8;
219 }
220 if ( i >= huff_dec_byte_nb_to_read ) {
221 result = ( result << huff_dec_byte_nb_to_read ) + huff_dec_val_to_read;
222 i -= huff_dec_byte_nb_to_read;
223 huff_dec_byte_nb_to_read = 0;
224 } else {
225 result = ( result << i ) + ( ( huff_dec_val_to_read >>
226 ( huff_dec_byte_nb_to_read - i ) ) & ( ( 1 << i ) - 1 ) );
227 huff_dec_byte_nb_to_read -= i;
228 i = 0;
229 }
230 }
231 return ( result );
232}
233
234
235void huff_dec_read_header( t_bin_val codes_table[257] )
236/* Returned parameters: The contain of 'codes_table' is modified
237 Action: Rebuilds the binary encoding array by using the header
238 Errors: An input/output error could disturb the running of the program
239*/
240{
241 unsigned int i, j;
242 unsigned num_byte;
243
244 _Pragma ( "loopbound min 257 max 257" )
245 for ( i = 0; i < 257; i++ ) {
246 codes_table[i].bits_nb = 0;
247 _Pragma ( "loopbound min 32 max 32" )
248 for ( j = 0; j < 32; j++ ) {
249 codes_table[i].bits[j] = 0;
250 }
251 }
252
253 /* == Decoding of the first part of the header === */
254 if ( huff_dec_read_code_1_bit() )
255 /* First bit=0 => Present bytes coded on n*8 bits
256 =1 => Present bytes coded on 256 bits */
257 _Pragma ( "loopbound min 256 max 256" )
258 for ( i = 0; i <= 255; i++ )
259 codes_table[i].presence = huff_dec_read_code_1_bit();
260 else {
261 i = huff_dec_read_code_n_bits( 5 ) + 1;
262 _Pragma ( "loopbound min 1 max 32" )
263 while ( i ) {
264 codes_table[huff_dec_read_code_n_bits( 8 )].presence = 1;
265 i--;
266 }
267 }
268 codes_table[256].presence = 1;
269 /* Presence of a fictive 256-byte is enforced! */
270
271 /* == Decoding the second part of the header == */
272 _Pragma ( "loopbound min 257 max 257" )
273 for ( i = 0; i <= 256; i++ )
274 if ( codes_table[i].presence ) {
275 if ( huff_dec_read_code_1_bit() )
276 /* First bit=0 => 5 bits of binary length-1 followed by a binary word
277 =1 => 8 bits of binary length-1 followed by a binary word */
278 j = huff_dec_read_code_n_bits( 8 ) + 1;
279 else j = huff_dec_read_code_n_bits( 5 ) + 1;
280 codes_table[i].bits_nb = j;
281 /* Reading of a binary word */
282 num_byte = ( j - 1 ) >> 3;
283 if ( j & 7 ) {
284 /* Reads the bits that takes less than one byte */
285 codes_table[i].bits[num_byte] =
286 ( unsigned char )huff_dec_read_code_n_bits( j & 7 );
287 j -= j & 7;
288 num_byte--;
289 }
290
291 _Pragma ( "loopbound min 0 max 1" )
292 while ( j >= 8 ) {
293 /* Reads the bits that takes one byte, at least */
294 codes_table[i].bits[num_byte] =
295 ( unsigned char )huff_dec_read_code_n_bits( 8 );
296 j -= 8;
297 num_byte--;
298 }
299 }
300}
301
302
303huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[257],
304 huff_dec_t_tree heap[514] )
305/* Returned parameters: A binary tree is returned
306 Action: Returns the decoding binary tree built from 'codes_table'
307 Errors: None
308*/
309{
310 unsigned int i;
311 unsigned int j;
312 unsigned int heap_top = 0;
313 huff_dec_t_tree *ptr_tree;
314 huff_dec_t_tree *current_node;
315
316 ptr_tree = &heap[heap_top++];
317 ptr_tree->byte = 257;
318 ptr_tree->left_ptr = 0;
319 ptr_tree->right_ptr = 0;
320 _Pragma ( "loopbound min 257 max 257" )
321 for ( i = 0; i <= 256; i++ ) {
322 _Pragma ( "loopbound min 0 max 9" )
323 for ( current_node = ptr_tree, j = codes_table[i].bits_nb; j; j-- ) {
324 if ( codes_table[i].bits[( j - 1 ) >> 3] & ( 1 << ( (
325 j - 1 ) & 7 ) ) )
326 if ( current_node->left_ptr == 0 ) {
327 current_node->left_ptr = &heap[heap_top++];
328 current_node = current_node->left_ptr;
329 current_node->left_ptr = 0;
330 current_node->right_ptr = 0;
331 } else current_node = current_node->left_ptr;
332 else
333 if ( current_node->right_ptr == 0 ) {
334 current_node->right_ptr = &heap[heap_top++];
335 current_node = current_node->right_ptr;
336 current_node->left_ptr = 0;
337 current_node->right_ptr = 0;
338 } else current_node = current_node->right_ptr;
339 if ( j == 1 )
340 current_node->byte = i;
341 else current_node->byte = 257;
342 }
343 };
344 return ( ptr_tree );
345}
346
347
348void _Pragma( "entrypoint" ) huff_dec_main( void )
349/* Returned parameters: None
350 Action: Decompresses with Huffman method all bytes read by the function
351 'read_code_1_bit' and 'read_code_n_bits'
352 Errors: An input/output error could disturb the running of the program
353*/
354{
355 t_bin_val encoding_table[257];
356 huff_dec_t_tree heap[514]; /* space for dynamically allocated nodes */
357 huff_dec_t_tree *ptr_tree;
358 huff_dec_t_tree *current_node;
359
360 if ( !huff_dec_end_of_data() ) { /* Are there data to compress? */
361 huff_dec_read_header( encoding_table );
362 ptr_tree = huff_dec_tree_encoding( encoding_table, heap );
363 _Pragma ( "loopbound min 602 max 602" )
364 do {
365 current_node = ptr_tree;
366 _Pragma ( "loopbound min 3 max 9" )
367 while ( current_node->byte == 257 )
368 if ( huff_dec_read_code_1_bit() )
369 /* Bit=1 => Got to left in the node of the tree
370 =0 => Got to right in the node of the tree */
371 current_node = current_node->left_ptr;
372 else current_node = current_node->right_ptr;
373 if ( current_node->byte <= 255 )
374 huff_dec_write_byte( current_node->byte );
375 } while ( current_node->byte != 256 );
376 }
377}
378
379
380int main( int argc, char **argv )
381{
382 //SET_UP
383 int jobsComplete;
384 int maxJobs=5;
385 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
386 // START_LOOP
387 huff_dec_init();
388 huff_dec_main();
389 // STOP_LOOP
390 }
391 //WRITE_TO_FILE
392 return ( huff_dec_return() );
393}
diff --git a/all_pairs/source/huff_enc/ChangeLog.txt b/all_pairs/source/huff_enc/ChangeLog.txt
new file mode 100644
index 0000000..020dc4f
--- /dev/null
+++ b/all_pairs/source/huff_enc/ChangeLog.txt
@@ -0,0 +1,27 @@
1File: huff_enc.c
2Original provenience: David Bourgin (David.Bourgin@ufrima.imag.fr)
3
42017-04-18:
5- Annotated huff_enc_main as entry-point for timing analysis
6
72016-03-24:
8- Replaced dynamic memory allocation by a fixed array with 514 entries
9- Replaced memset() with loops
10- Added source code for a special qsort() implementation without
11 function pointer
12- Replaced file I/O by reading and writing to char arrays
13- Added huff_dec_main(), huff_dec_init() and huff_dec_return()
14- Added huff_dec_ prefix to all functions, types and global variables
15- Changed function arguments to ANSI style
16- Replaced macro definitions
17- Added forward declarations of all functions
18- Added generic TACLeBench header replacing previous header
19- Included license from compress.txt
20- Applied code formatting with astyle
21
222016-05-24:
23- Changed type of j to unsigned to avoid warning
24- Removed static declarations
25
262016-05-25:
27- Precise types to avoid gcc++ warnings
diff --git a/all_pairs/source/huff_enc/compress.txt b/all_pairs/source/huff_enc/compress.txt
new file mode 100644
index 0000000..5966bcf
--- /dev/null
+++ b/all_pairs/source/huff_enc/compress.txt
@@ -0,0 +1,1107 @@
1+===========================================================+
2| Introduction to the losslessy compression schemes |
3| Description of the codec source codes |
4+-----------------------------------------------------------+
5| From David Bourgin (E-mail: david.bourgin@ufrima.imag.fr) |
6| Date: 22/9/94 |
7+===========================================================+
8
9 ------ BE CARE ------
10This file (compress.txt) is copyrighted. (c) David Bourgin - 1994
11Permission to use this documentation for any purpose other than
12its incorporation into a commercial product is hereby granted without fee.
13Permission to copy and distribute this documentation only for non-commercial use
14is also granted without fee, provided, however, that the above copyright notice
15appears in all copies, that both that copyright notice and this permission notice appear in supporting documentation. The author makes no representations about
16the suitability of this documentation for any purpose. It is provided "as is"
17without express or implied warranty.
18
19The source codes you obtain with this file are *NOT* covered by the same
20copyright, because you can include them for both commercial and non-commercial
21use. See below for more infos.
22
23The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
24dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
25They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
26on 22/5/94 and have been modified on 22/9/94.
27(c) David Bourgin - 1994
28The source codes I provide have no buggs (!) but being that I make them
29available for free I have some notes to make. They can change at any time
30without notice. I assume no responsability or liability for any errors or
31inaccurracies, make no warranty of any kind (express, implied or statutory)
32with respect to this publication and expressly disclaim any and all warranties
33of merchantability, fitness for particular purposes. Of course, if you have
34some problems to use the information presented here, I will try to help you if
35I can.
36
37If you include the source codes in your application, here are the conditions:
38- You have to put my name in the header of your source file (not in the
39excutable program if you don't want) (this item is a must)
40- I would like to see your resulting application, if possible (this item is not
41a must, because some applications must remain secret)
42- Whenever you gain money with your application, I would like to receive a very
43little part in order to be encouraged to update my source codes and to develop
44new schemes (this item is not a must)
45 ---------------------
46
47There are several means to compress data. Here, we are only going to deal with
48the losslessy schemes. These schemes are also called non-destructive because
49you always recover the initial data you had, and this, as soon as you need them.
50With losslessy schemes, you won't never lose any informations (except perhaps
51when you store or transmit your data but this is another problem...).
52
53In this introduction, we are going to see:
54- The RLE scheme (with different possible algorithms)
55- The Huffman schemes (dynamical scheme)
56- And the LZW scheme
57
58For the novice, a compresser is a program able to read several data (e.g. bytes)
59in input and to write several data in output. The data you obtain from the
60output (also called compressed data) will - of course - take less space than
61the the input data. This is true in most of cases, if the compresser works
62and if the type of the data is correct to be compressed with the given scheme.
63The codec (coder-decoder) enables you to save space on your hard disk and/or
64to save the communication costs because you always store/transmit the compressed
65data. You'll use the decompresser as soon as you need to recover your initial
66useful data. Note that the compressed data are useless if you have not
67the decoder...
68
69You are doubtless asking "How can I reduce the data size without losing some
70informations?". It's easy to answer to this question. I'll only take an example.
71I'm sure you have heard about the morse. This system established in the 19th
72century use a scheme very close to the huffman one. In the morse you encode
73the letters to transmit with two kinds of signs. If you encode these two sign
74possibilities in one bit, the symbol 'e' is transmitted in a single bit and
75the symbols 'y' and 'z' need four bits. Look at the symbols in the text you are
76reading, you'll fast understand the compression ratio...
77
78Important: The source codes associated to the algorithms I present are
79completely adaptative on what you need to compress. They all use basical
80macros on the top of the file. Usually the macros to change are:
81
82- beginning_of_data
83- end_of_data
84- read_byte
85- read_block
86- write_byte
87- write_block
88
89These allow the programmer to modify only a little part of the header
90of the source codes in order to compress as well memory as files.
91
92beginning_of_data(): Macro used to set the program so that the next read_byte()
93call will read the first byte to compress.
94end_of_data(): Returns a boolean to know whether there is no more bytes to read
95from the input stream. Return 0 if there is no more byte to compress, another
96non-zero value otherwise.
97read_byte(): Returns a byte read from the input stream if available.
98write_byte(x): Writes the byte 'x' to the output stream.
99read_block(...) and write_block(...): Same use as read_byte and write_byte(x)
100but these macros work on blocks of bytes and not only on a single byte.
101
102If you want to compress *from* the memory, before entering in a xxxcoding
103procedure ('xxx' is the actual extension to replace with a given codec), you
104have to add a pointer set up to the beginning of the zone to compress. Note
105that the following pointer 'source_memory_base' is not to add, it is just given
106here to specify a name to the address of the memory zone you are going to
107encode or decode. That is the same about source_memory_end which can be either
108a pointer to create or an existing pointer.
109
110unsigned char *source_memory_base, /* Base of the source memory */
111 *source_memory_end, /* Last address to read.
112 source_memory_end=source_memory_base+source_zone_length-1 */
113 *source_ptr; /* Used in the xxxcoding procedure */
114void pre_start()
115{ source_ptr=source_memory_base;
116 xxxcoding();
117}
118
119end_of_data() and read_byte() are also to modify to compress *from* memory:
120
121#define end_of_data() (source_ptr>source_memory_end)
122#define read_byte() (*(source_ptr++))
123
124If you want to compress *to* memory, before entering in a xxxcoding procedure
125('xxx' is the actual extension to replace with a given codec), you have to add
126a pointer. Note that the pointer 'dest_memory_base' is not to add, it is just
127given there to specify the address of the destination memory zone you are
128going to encode or decode.
129
130unsigned char *dest_memory_base, /* Base of the destination memory */
131 *dest_ptr; /* Used in the xxxcoding procedure */
132void pre_start()
133{ dest_ptr=dest_memory_base;
134 xxxcoding();
135}
136
137Of course, you can combine both from and to memory in the pre_start() procedure.
138The files dest_file and source_file handled in the main() function are
139to remove...
140
141void pre_start()
142{ source_ptr=source_memory_base;
143 dest_ptr=dest_memory_base;
144 xxxcoding();
145}
146
147In fact, to write to memory, the problem is in the write_byte(x) procedure.
148This problem exists because your destination zone can either be a static
149zone or a dynamically allocated zone. In the two cases, you have to check
150if there is no overflow, especially if the coder is not efficient and must
151produce more bytes than you reserved in memory.
152
153In the first case, with a *static* zone, write_byte(x) macro should look like
154that:
155
156unsigned long int dest_zone_length,
157 current_size;
158
159#define write_byte(x) { if (current_size==dest_zone_length) \
160 exit(1); \
161 dest_ptr[current_size++]=(unsigned char)(x); \
162 }
163
164In the static version, the pre_start() procedure is to modify as following:
165
166void pre_start()
167{ source_ptr=source_memory_base;
168 dest_ptr=dest_memory_base;
169 dest_zone_length=...; /* Set up to the actual destination zone length */
170 current_size=0; /* Number of written bytes */
171 xxxcoding();
172}
173Otherwise, dest_ptr is a zone created by the malloc instruction and you can try
174to resize the allocated zone with the realloc instruction. Note that I increment
175the zone one kilo-bytes by one kylo-bytes. You have to add two other variables:
176
177unsigned long int dest_zone_length,
178 current_size;
179
180#define write_byte(x) { if (current_size==dest_zone_length) \
181 { dest_zone_length += 1024; \
182 if ((dest_ptr=(unsigned char *)realloc(dest_ptr,dest_zone_length*sizeof(unsigned char)))==NULL) \
183 exit(1); /* You can't compress in memory \
184 => I exit but *you* can make a routine to swap on disk */ \
185 } \
186 dest_ptr[current_size++]=(unsigned char)(x); \
187 }
188
189With the dynamically allocated version, change the pre_start() routine as following:
190
191void pre_start()
192{ source_ptr=source_memory_base;
193 dest_ptr=dest_memory_base;
194 dest_zone_length=1024;
195 if ((dest_ptr=(unsigned char *)malloc(dest_zone_length*sizeof(unsigned char)))==NULL)
196 exit(1); /* You need at least 1 kb in the dynamical memory ! */
197 current_size=0; /* Number of written bytes */
198 xxxcoding();
199 /* Handle the bytes in dest_ptr but don't forget to free these bytes with:
200 free(dest_ptr);
201 */
202}
203
204The previously given macros work as:
205
206void demo() /* The file opening, closing and variables
207 must be set up by the calling procedure */
208{ unsigned char byte;
209 /* And not 'char byte' (!) */
210 while (!end_of_data())
211 { byte=read_byte();
212 printf("Byte read=%c\n",byte);
213 }
214}
215
216You must not change the rest of the program unless you're really sure and
217really need to do it!
218
219+==========================================================+
220| The RLE encoding |
221+==========================================================+
222
223RLE is an acronym that stands for Run Length Encoding. You may encounter it
224as an other acronym: RLC, Run Length Coding.
225
226The idea in this scheme is to recode your data with regard to the repetition
227frames. A frame is one or more bytes that occurr one or several times.
228
229There are several means to encode occurrences. So, you'll have several codecs.
230For example, you may have a sequence such as:
2310,0,0,0,0,0,255,255,255,2,3,4,2,3,4,5,8,11
232
233Some codecs will only deal with the repetitions of '0' and '255' but some other
234will deal with the repetitions of '0', '255', and '2,3,4'.
235
236You have to keep in your mind something important based on this example. A codec
237won't work on all the data you will try to compress. So, in case of non
238existence of sequence repetitions, the codecs based on RLE schemes must not
239display a message to say: "Bye bye". Actually, they will try to encode these
240non repeted data with a value that says "Sorry, I only make a copy of the inital
241input". Of course, a copy of the input data with an header in front of this copy
242will make a biggest output data but if you consider the whole data to compress,
243the encoding of repeated frames will take less space than the encoding
244of non-repeated frames.
245
246All of the algorithms with the name of RLE have the following look with three
247or four values:
248- Value saying if there's a repetition
249- Value saying how many repetitions (or non repetition)
250- Value of the length of the frame (useless if you just encode frame
251with one byte as maximum length)
252- Value of the frame to repeat (or not)
253
254I gave four algorithms to explain what I say.
255
256*** First RLE scheme ***
257
258The first scheme is the simpliest I know, and looks like the one used in MAC
259system (MacPackBit) and some image file formats such as Targa, PCX, TIFF, ...
260
261Here, all compressed blocks begin with a byte, named header, which description
262is:
263
264Bits 7 6 5 4 3 2 1 0
265Header X X X X X X X X
266
267Bits 7: Compression status (1=Compression applied)
268 0 to 6: Number of bytes to handle
269
270So, if the bit 7 is set up to 0, the 0 to 6 bits give the number of bytes
271that follow (minus 1, to gain more over compress) and that were not compressed
272(native bytes). If the bit 7 is set up to 1, the same 0 to 6 bits give
273the number of repetition (minus 2) of the following byte.
274
275As you see, this method only handle frame with one byte.
276
277Additional note: You have 'minus 1' for non-repeated frames because you must
278have at least one byte to compress and 'minus 2' for repeated frames because the
279repetition must be 2, at least.
280
281Compression scheme:
282
283 First byte=Next
284 /\
285 / \
286Count the byte Count the occurrence of NON identical
287occurrences bytes (maximum 128 times)
288(maximum 129 times) and store them in an array
289 | |
290 | |
291 1 bit '1' 1 bit '0'
292+ 7 bits giving + 7 bits giving
293 the number (-2) the number (-1)
294 of repetitions of non repetition
295+ repeated byte + n non repeated bytes
296 | |
297 1xxxxxxx,yyyyyyyy 0xxxxxxx,n bytes
298[-----------------] [----------------]
299
300Example:
301
302Sequence of bytes to encode | Coded values | Differences with compression
303 | | (unit: byte)
304-------------------------------------------------------------------------
305 255,15, | 1,255,15, | -1
306 255,255, | 128,255, | 0
307 15,15, | 128,15, | 0
308 255,255,255, | 129,255, | +1
309 15,15,15, | 129,15, | +1
310 255,255,255,255, | 130,255, | +2
311 15,15,15,15 | 130,15 | +2
312
313See codecs source codes: codrle1.c and dcodrle1.c
314
315*** Second RLE scheme ***
316
317In the second scheme of RLE compression you look for the less frequent byte
318in the source to compress and use it as an header for all compressed block.
319
320In the best cases, the occurrence of this byte is zero in the data to compress.
321
322Two possible schemes, firstly with handling frames with only one byte,
323secondly with handling frames with one byte *and* more. The first case is
324the subject of this current compression scheme, the second is the subject
325of next compression scheme.
326
327For the frame of one byte, header byte is written in front of all repetition
328with at least 4 bytes. It is then followed by the repetition number minus 1 and
329the repeated byte.
330Header byte, Occurrence number-1, repeated byte
331
332If a byte don't repeat more than tree times, the three bytes are written without
333changes in the destination stream (no header nor length, nor repetition in front
334or after theses bytes).
335
336An exception: If the header byte appears in the source one, two, three and up
337times, it'll be respectively encoded as following:
338- Header byte, 0
339- Header byte, 1
340- Header byte, 2
341- Header byte, Occurrence number-1, Header byte
342
343Example, let's take the previous example. A non frequent byte is zero-ASCII
344because it never appears.
345
346Sequence of bytes to encode | Coded values | Differences with compression
347 | | (unit: byte)
348-------------------------------------------------------------------------
349 255,15, | 255,15, | -1
350 255,255, | 255,255, | 0
351 15,15, | 15,15, | 0
352 255,255,255, | 255,255,255, | 0
353 15,15,15, | 15,15,15, | 0
354 255,255,255,255, | 0,3,255, | -1
355 15,15,15,15 | 0,3,15 | -1
356
357If the header would appear, we would see:
358
359Sequence of bytes to encode | Coded values | Differences with compression
360 | | (unit: byte)
361-------------------------------------------------------------------------
362 0, | 0,0, | +1
363 255, | 255, | 0
364 0,0, | 0,1, | 0
365 15, | 15, | 0
366 0,0,0, | 0,2, | -1
367 255, | 255, | 0
368 0,0,0,0 | 0,3,0 | -1
369
370See codecs source codes: codrle2.c and dcodrle2.c
371
372*** Third RLE scheme ***
373
374It's the same idea as the second scheme but we can encode frames with
375more than one byte. So we have three cases:
376
377- If it was the header byte, whatever is its occurrence, you encode it with:
378Header byte,0,number of occurrence-1
379- For frames which (repetition-1)*length>3, encode it as:
380Header byte, Number of frame repetition-1, frame length-1,bytes of frame
381- If no previous cases were detected, you write them as originally (no header,
382nor length, nor repetition in front or after theses bytes).
383
384Example based on the previous examples:
385
386Sequence of bytes to encode | Coded values | Differences with compression
387 | | (unit: byte)
388-----------------------------------------------------------------------------
389 255,15, | 255,15, | 0
390 255,255, | 255,255, | 0
391 15,15, | 15,15, | 0
392 255,255,255, | 255,255,255, | 0
393 15,15,15, | 15,15,15, | 0
394 255,255,255,255, | 255,255,255,255, | 0
395 15,15,15,15, | 15,15,15,15, | 0
396 16,17,18,16,17,18, |16,17,18,16,17,18,| 0
397 255,255,255,255,255, | 0,4,0,255, | -1
398 15,15,15,15,15, | 0,4,0,15, | -1
399 16,17,18,16,17,18,16,17,18,| 0,2,2,16,17,18, | -3
400 16,17,18,19,16,17,18,19 |0,1,3,16,17,18,19 | -1
401
402If the header (value 0) would be met, we would see:
403
404Sequence of bytes to encode | Coded values | Differences with compression
405 | | (unit: byte)
406--------------------------------------------------------------------------
407 0, | 0,0,0, | +2
408 255, | 255, | 0
409 0,0, | 0,0,1, | +1
410 15, | 15, | 0
411 0,0,0, | 0,0,2, | 0
412 255, | 255, | 0
413 0,0,0,0 | 0,0,3 | -1
414
415See codecs source codes: codrle3.c and dcodrle3.c
416
417*** Fourth RLE scheme ***
418
419This last RLE algorithm better handles repetitions of any kind (one byte
420and more) and non repetitions, including few non repetitions, and does not
421read the source by twice as RLE type 3.
422
423Compression scheme is:
424
425 First byte=Next byte?
426 /\
427 Yes / \ No
428 / \
429 1 bit '0' 1 bit '1'
430 / \
431 / \
432 Count the Motif of several
433 occurrences repeated byte?
434 of 1 repeated ( 65 bytes repeated
435 byte (maximum 257 times maxi)
436 16449 times) /\
437 /\ / \
438 / \ / \
439 / \ / \
440 / \ / \
441 1 bit '0' 1 bit '1' 1 bit '0' 1 bit '1'
442+ 6 bits + 14 bits + 6 bits of |
443giving the giving the the length Number of non repetition
444length (-2) length (-66) of the motif (maximum 8224)
445of the of the + 8 bits of /\
446repeated byte repeated byte the number (-2) < 33 / \ > 32
447+ repeated byte + repeated byte of repetition / \
448 | | + bytes of the 1 bit '0' 1 bit '1'
449 | | motif + 5 bits of + 13 bits
450 | | | the numer (-1) of the
451 | | | of non number (-33)
452 | | | repetition of repetition
453 | | | + non + non
454 | | | repeated repeated
455 | | | bytes bytes
456 | | | | |
457 | | | | 111xxxxx,xxxxxxxx,n bytes
458 | | | | [-------------------------]
459 | | | |
460 | | | 110xxxxx,n bytes
461 | | | [----------------]
462 | | |
463 | | 10xxxxxx,yyyyyyyy,n bytes
464 | | [-------------------------]
465 | |
466 | 01xxxxxx,xxxxxxxx,1 byte
467 | [------------------------]
468 |
469 00xxxxxx,1 byte
470[---------------]
471
472Example, same as previously:
473
474Sequence of bytes to encode | Coded values | Differences with compression
475 | | (unit: byte)
476--------------------------------------------------------------------------
477 255,15 | 11000001b,255,15, | +1
478 255,255 | 00000000b,255, | 0
479 15,15 | 00000000b,15, | 0
480 255,255,255 | 00000001b,255, | -1
481 15,15,15 | 00000001b,15, | -1
482 255,255,255,255 | 00000010b,255, | -2
483 15,15,15,15 | 00000010b,15, | -2
484 16,17,18,16,17,18 |10000001b,0,16,17,18,| -1
485 255,255,255,255,255 | 00000011b,255, | -3
486 15,15,15,15,15 | 00000011b,15, | -3
487 16,17,18,16,17,18,16,17,18 | 10000001b,16,17,18, | -4
488 16,17,18,19,16,17,18,19 |10000010b,16,17,18,19| -2
489
490+==========================================================+
491| The Huffman encoding |
492+==========================================================+
493
494This method comes from the searcher who established the algorithm in 1952.
495This method allows both a dynamic and static statistic schemes. A statistic
496scheme works on the data occurrences. It is not as with RLE where you had
497a consideration of the current occurrence of a frame but rather a consideration
498of the global occurrences of each data in the input stream. In this last case,
499frames can be any kinds of sequences you want. On the other hand, Huffman
500static encoding appears in some compressers such as ARJ on PCs. This enforces
501the encoder to consider every statistic as the same for all the data you have.
502Of course, the results are not as good as if it were a dynamic encoding.
503The static encoding is faster than the dynamic encoding but the dynamic encoding
504will be adapted to the statistic of the bytes of the input stream and will
505of course become more efficient by producing shortest output.
506
507The main idea in Huffman encoding is to re-code every byte with regard to its
508occurrence. The more frequent bytes in the data to compress will be encoded with
509less than 8 bits and the others could need 8 bits see even more to be encoded.
510You immediately see that the codes associated to the different bytes won't have
511identical size. The Huffman method will actually require that the binary codes
512have not a fixed size. We speak then about variable length codes.
513
514The dynamical Huffman scheme needs the binary trees for the encoding. This
515enables you to obtain the best codes, adapted to the source data.
516The demonstration won't be given there. To help the neophyt, I will just explain
517what is a binary tree.
518
519A binary tree is special fashion to represent the data. A binary tree is
520a structure with an associated value with two pointers. The term of binary has
521been given because of the presence of two pointers. Because of some conventions,
522one of the pointer is called left pointer and the second pointer is called right
523pointer. Here is a visual representation of a binary tree.
524
525 Value
526 / \
527 / \
528 Value Value
529 / \ / \
530... ... ... ...
531
532One problem with a binary encoding is a prefix problem. A prefix is the first
533part of the representation of a value, e.g. "h" and "he" are prefixes of "hello"
534but not "el". To understand the problem, let's code the letters "A", "B", "C",
535"D", and "E" respectively as 00b, 01b, 10b, 11b, and 100b. When you read
536the binary sequence 00100100b, you are unable to say if this comes from "ACBA"
537or "AEE". To avoid such situations, the codes must have a prefix property.
538And the letter "E" mustn't begin with the sequence of an other code. With "A",
539"B", "C", "D", and "E" respectively affected with 1b, 01b, 001b, 0001b, and
5400000b, the sequence 1001011b will only be decoded as "ACBA".
541
542 1 0
543<- /\ ->
544 / \
545 "A" /\
546 "B" \
547 /\
548 "C" \
549 /\
550 "D" "E"
551
552As you see, with this tree, an encoding will have the prefix property
553if the bytes are at the end of each "branch" and you have no byte at the "node".
554You also see that if you try to reach a character by the right pointer you add
555a bit set to 0 and by the left pointer, you add a bit set to 1 to the current
556code. The previous *bad* encoding provide the following bad tree:
557
558 /\
559 / \
560 / \
561 /\ /\
562 / \ "B" "A"
563 / \
564"D" "C"\
565 / \
566 "E"
567
568You see here that the coder shouldn't put the "C" at a node...
569
570As you see, the largest binary code are those with the longest distance
571from the top of the tree. Finally, the more frequent bytes will be the highest
572in the tree in order you have the shortest encoding and the less frequent bytes
573will be the lowest in the tree.
574
575From an algorithmic point of view, you make a list of each byte you encountered
576in the stream to compress. This list will always be sorted. The zero-occurrence
577bytes are removed from this list. You take the two bytes with the smallest
578occurrences in the list. Whenever two bytes have the same "weight", you take two
579of them regardless to their ASCII value. You join them in a node. This node will
580have a fictive byte value (256 will be a good one!) and its weight will be
581the sum of the two joined bytes. You replace then the two joined bytes with
582the fictive byte. And you continue so until you have one byte (fictive or not)
583in the list. Of course, this process will produce the shortest codes if the list
584remains sorted. I will not explain with arcana hard maths why the result
585is a set of the shortest bytes...
586
587Important: I use as convention that the right sub-trees have a weight greater
588or equal to the weight of the left sub-trees.
589
590Example: Let's take a file to compress where we notice the following
591occurrences:
592
593Listed bytes | Frequences (Weight)
594----------------------------------
595 0 | 338
596 255 | 300
597 31 | 280
598 77 | 24
599 115 | 21
600 83 | 20
601 222 | 5
602
603We will begin by joining the bytes 83 and 222. This will produce a fictive node
6041 with a weight of 20+5=25.
605
606(Fictive 1,25)
607 /\
608 / \
609(222,5) (83,20)
610
611Listed bytes | Frequences (Weight)
612----------------------------------
613 0 | 338
614 255 | 300
615 31 | 280
616 Fictive 1 | 25
617 77 | 24
618 115 | 21
619
620Note that the list is sorted... The smallest values in the frequences are 21 and
62124. That is why we will take the bytes 77 and 115 to build the fictive node 2.
622
623(Fictive 2,45)
624 /\
625 / \
626(115,21) (77,25)
627
628Listed bytes | Frequences (Weight)
629----------------------------------
630 0 | 338
631 255 | 300
632 31 | 280
633 Fictive 2 | 45
634 Fictive 1 | 25
635
636The nodes with smallest weights are the fictive 1 and 2 nodes. These are joined
637to build the fictive node 3 whose weight is 40+25=70.
638
639 (Fictive 3,70)
640 / \
641 / \
642 / \
643 /\ / \
644 / \ / \
645(222,5) (83,20) (115,21) (77,25)
646
647Listed bytes | Frequences (Weight)
648----------------------------------
649 0 | 338
650 255 | 300
651 31 | 280
652 Fictive 3 | 70
653
654The fictive node 3 is linked to the byte 31. Total weight: 280+70=350.
655
656 (Fictive 4,350)
657 / \
658 / \
659 / \
660 / \ (31,280)
661 / \
662 / \
663 /\ / \
664 / \ / \
665(222,5) (83,20) (115,21) (77,25)
666
667Listed bytes | Frequences (Weight)
668----------------------------------
669 Fictive 4 | 350
670 0 | 338
671 255 | 300
672
673As you see, being that we sort the list, the fictive node 4 has become the first
674of the list. We join the bytes 0 and 255 in a same fictive node, the number 5
675whose weight is 338+300=638.
676
677(Fictive 5,638)
678 /\
679 / \
680(255,300) (0,338)
681
682Listed bytes | Frequences (Weight)
683----------------------------------
684 Fictive 5 | 638
685 Fictive 4 | 350
686
687The fictive nodes 4 and 5 are finally joined. Final weight: 638+350=998 bytes.
688It is actually the total byte number in the initial file: 338+300+24+21+20+5.
689
690 (Tree,998)
691 1 / \ 0
692 <- / \ ->
693 / \
694 / \
695 / \
696 / \ / \
697 / \ / \
698 / \ / \
699 / \ (31,280) (255,300) (0,338)
700 / \
701 / \
702 /\ / \
703 / \ / \
704(222,5) (83,20) (115,21) (77,25)
705
706Bytes | Huffman codes | Frequences | Binary length*Frequence
707------------------------------------------------------------
708 0 | 00b | 338 | 676
709 255 | 01b | 300 | 600
710 31 | 10b | 280 | 560
711 77 | 1101b | 24 | 96
712 115 | 1100b | 21 | 84
713 83 | 1110b | 20 | 80
714 222 | 1111b | 5 | 20
715
716Results: Original file size: (338+300+280+24+21+20+5)*8=7904 bits (=998 bytes)
717versus 676+600+560+96+84+80+20=2116 bits, i.e. 2116/8=265 bytes.
718
719Now you know how to code an input stream. The last problem is to decode all this
720stuff. Actually, when you meet a binary sequence you can't say whether it comes
721from such byte list or such other one. Furthermore, if you change the occurrence
722of one or two bytes, you won't obtain the same resulting binary tree. Try for
723example to encode the previous list but with the following occurrences:
724
725Listed bytes | Frequences (Weight)
726----------------------------------
727 255 | 418
728 0 | 300
729 31 | 100
730 77 | 24
731 115 | 21
732 83 | 20
733 222 | 5
734
735As you can observe it, the resulting binary tree is quite different, we had yet
736the same initial bytes. To not be in such a situation we will put an header
737in front of all data. I can't comment longly this header but I can say
738I minimize it as much as I could. The header is divided into two parts.
739The first part of this header looks closely to a boolean table (coded more or
740less in binary to save space) and the second part provide to the decoder
741the binary code associated to each byte encountered in the original input
742stream.
743
744Here is a summary of the header:
745
746First part
747----------
748 First bit
749 / \
750 1 / \ 0
751 / \
752 256 bits set to 0 or 1 5 bits for the number n (minus 1)
753 depending whether the of bytes encountered
754 corresponding byte was in the file to compres
755 in the file to compress |
756 (=> n bits set to 1, \ /
757 n>32) n values of 8-bits (n<=32)
758 \ /
759 \ /
760 \ /
761Second part |
762----------- |
763 |
764 +------------->|
765(n+1) times | |
766(n bytes of | First bit?
767the values | / \
768encountered | 1 / \ 0
769in the | / \
770source file | 8 bits of 5 bits of the
771+ the code | the length length (-1)
772of a | (-1) of the of the following
773fictive | following binary
774byte | binary code code
775to stop the | (length>32) (length<=32)
776decoding. | \ /
777The fictive | \ /
778is set to | \ /
779256 in the | |
780Huffman | binary code
781-tree of | |
782encoding) +--------------|
783 |
784 Binary encoding of the source file
785 |
786 Code of end of encoding
787 |
788
789
790With my codecs I can handle binary sequences with a length of 256 bits.
791This correspond to encode all the input stream from one byte to infinite length.
792In fact if a byte had a range from 0 to 257 instead of 0 to 255, I would have a
793bug with my codecs with an input stream of at least 370,959,230,771,131,880,927,
794453,318,055,001,997,489,772,178,180,790,105 bytes !!!
795
796Where come this explosive number? In fact, to have a severe bug, I must have
797a completely unbalanced tree:
798
799 Tree
800 /\
801 \
802 /\
803 \
804 /\
805 \
806 ...
807 /\
808 \
809 /\
810
811Let's take the following example:
812
813Listed bytes | Frequences (Weight)
814----------------------------------
815 32 | 5
816 101 | 3
817 97 | 2
818 100 | 1
819 115 | 1
820
821This produces the following unbalanced tree:
822
823 Tree
824 /\
825(32,5) \
826 /\
827 (101,3) \
828 /\
829 (97,2) \
830 /\
831 (115,1) (100,1)
832
833Let's speak about a mathematical series: The Fibonacci series. It is defined as
834following:
835
836{ Fib(0)=0
837{ Fib(1)=1
838{ Fib(n)=Fib(n-2)+Fib(n-1)
839
840Fib(0)=0, Fib(1)=1, Fib(2)=1, Fib(3)=2, Fib(4)=3, Fib(5)=5, Fib(6)=8, Fib(7)=13,
841etc.
842
843But 1, 1, 2, 3, 5, 8 are the occurrences of our list! We can actually
844demonstrate that to have an unbalanced tree, we have to take a list with
845an occurrence based on the Fibonacci series (these values are minimal).
846If the data to compress have m different bytes, when the tree is unbalanced,
847the longest code need m-1 bits. In our little previous example where m=5,
848the longest codes are associated to the bytes 100 and 115, respectively coded
8490001b and 0000b. We can also say that to have an unbalanced tree we must have
850at least 5+3+2+1+1=12=Fib(7)-1. To conclude about all that, with a coder that
851uses m-1 bits, you must never have an input stream size over than Fib(m+2)-1,
852otherwise, there could be a bug in the output stream. Of course, with my codecs
853there will never be a bug because I can deal with binary code sizes of 1 to 256
854bits. Some encoder could use that with m=31, Fib(31+2)-1=3,524,577 and m=32,
855Fib(32+2)-1=5,702,886. And an encoder that uses unisgned integer of 32 bits
856shouldn't have a bug until about 4 Gb...
857
858+==========================================================+
859| The LZW encoding |
860+==========================================================+
861
862The LZW scheme is due to three searchers, i.e. Abraham Lempel and Jacob Ziv
863worked on it in 1977, and Terry Welch achieved this scheme in 1984.
864
865LZW is patented in USA. This patent, number 4,558,302, is covered by Unisys
866Corporation. You can usually write (without fees) software codecs which use
867the LZW scheme but hardware companies can't do so. You may get a limited
868licence by writting to:
869Welch Licencing Department
870Office of the General Counsel
871M/S C1SW19
872Unisys corporation
873Blue Bell
874Pennsylvania, 19424 (USA)
875
876If you're occidental, you are surely using an LZW encoding every time you are
877speaking, especially when you use a dictionary. Let's consider, for example,
878the word "Cirrus". As you read a dictionary, you begin with "A", "Aa", and so
879on. But a computer has no experience and it must suppose that some words
880already exist. That is why with "Cirrus", it supposes that "C", "Ci", "Cir",
881"Cirr", "Cirru", and "Cirrus" exist. Of course, being that this is a computer,
882all these words are encoded as index numbers. Every time you go forward, you add
883a new number associated to the new word. Being that a computer is byte-based
884and not alphabetic-based, you have an initial dictionary of 256 letters instead
885of our 26 ('A' to 'Z') letters.
886
887Example: Let's code "XYXYZ". First step, "X" is recognized in the initial
888dictionary of 256 letters as the 89th. Second step, "Y" is read. Does "XY"
889exist? No, then "XY" is stored as the word 256. You write in the output stream
890the ASCII of "X", i.e. 88. Now "YX" is tested as not referenced in the current
891dictionary. It is stored as the word 257. You write now in the output stream 89
892(ASCII of "Y"). "XY" is now met. But now "XY" is known as the reference 256.
893Being that "XY" exists, you test the sequence with one more letter, i.e. "XYZ".
894This last word is not referenced in the current dictionary. You write then the
895value 256. Finally, you reach the last letter ("Z"). You add "YZ" as the
896reference 258 but it is the last letter. That is why you just write the value
89790 (ASCII of "Z").
898
899Another encoding sample with the string "ABADABCCCABCEABCECCA".
900
901+----+-----+---------------+------+----------+-------------------------+------+
902|Step|Input|Dictionary test|Prefix|New symbol|Dictionary |Output|
903| | | | | |D0=ASCII with 256 letters| |
904+----+-----+---------------+------+----------+-------------------------+------+
905| 1 | "A" |"A" in D0 | "A" | "B" | D1=D0 | 65 |
906| | "B" |"AB" not in D0 | | | and "AB"=256 | |
907+----+-----+---------------+------+----------+-------------------------+------+
908| 2 | "A" |"B" in D1 | "B" | "A" | D2=D1 | 66 |
909| | |"BA" not in D1 | | | and "BA"=257 | |
910+----+-----+---------------+------+----------+-------------------------+------+
911| 3 | "D" |"A" in D2 | "A" | "D" | D3=D2 | 65 |
912| | |"AD" not in D2 | | | and "AD"=258 | |
913+----+-----+---------------+------+----------+-------------------------+------+
914| 4 | "A" |"D" in D3 | "D" | "A" | D4=D3 | 68 |
915| | |"DA" not in D3 | | | and "DA"=259 | |
916+----+-----+---------------+------+----------+-------------------------+------+
917| 5 | "B" |"A" in D4 | "AB" | "C" | D5=D4 | 256 |
918| | "C" |"AB" in D4 | | | and "ABC"=260 | |
919| | |"ABC" not in D4| | | | |
920+----+-----+---------------+------+----------+-------------------------+------+
921| 6 | "C" |"C" in D5 | "C" | "C" | D6=D5 | 67 |
922| | |"CC" not in D5 | | | and "CC"=261 | |
923+----+-----+---------------+------+----------+-------------------------+------+
924| 7 | "C" |"C" in D6 | "CC" | "A" | D7=D6 | 261 |
925| | "A" |"CC" in D6 | | | and "CCA"=262 | |
926| | |"CCA" not in D6| | | | |
927+----+-----+---------------+------+----------+-------------------------+------+
928| 8 | "B" |"A" in D7 | "ABC"| "E" | D8=D7 | 260 |
929| | "C" |"AB" in D7 | | | and "ABCE"=263 | |
930| | "E" |"ABC" in D7 | | | | |
931| | <"ABCE" not in D7| | | | |
932+----+-----+---------------+------+----------+-------------------------+------+
933| 9 | "A" |"E" in D8 | "E" | "A" | D9=D8 | 69 |
934| | |"EA" not in D8 | | | and "EA"=264 | |
935+----+-----+---------------+------+----------+-------------------------+------+
936| 10 | "B" |"A" in D9 |"ABCE"| "C" | D10=D9 | 263 |
937| | "C" |"AB" in D9 | | | and "ABCEC"=265 | |
938| | "E" |"ABC" in D9 | | | | |
939| | "C" |"ABCE" in D9 | | | | |
940| | <"ABCEC" not in D9> | | | |
941+----+-----+---------------+------+----------+-------------------------+------+
942| 11 | "C" |"C" in D10 | "CCA"| | | 262 |
943| | "A" |"CC" in D10 | | | | |
944| | <"CCA" not in D10| | | | |
945+----+-----+---------------+------+----------+-------------------------+------+
946
947You will notice a problem with the above output: How to write a code of 256
948(for example) on 8 bits? It's simple to solve this problem. You just say that
949the encoding starts with 9 bits and as you reach the 512th word, you use a
95010-bits encoding. With 1024 words, you use 11 bits; with 2048 words, 12 bits;
951and so on with all numbers of 2^n (n is positive). To better synchronize
952the coder and the decoder with all that, most of implementations use two
953additional references. The word 256 is a code of reinitialisation (the codec
954must reinitialize completely the current dictionary to its 256 initial letters)
955and the word 257 is a code of end of information (no more data to read).
956Of course, you start your first new word as the code number 258.
957
958You can also do so as in the GIF file format and start with an initial
959dictionary of 18 words to code an input stream with only letters coded on 4 bits
960(you start with codes of 5 bits in the output stream!). The 18 initial words
961are: 0 to 15 (initial letters), 16 (reinit the dictionary), and 17 (end of
962information). First new word has code 18, second word, code 19, ...
963
964Important: You can consider that your dictionary is limited to 4096 different
965words (as in GIF and TIFF file formats). But if your dictionary is full, you
966can decide to send old codes *without* reinitializing the dictionary. All the
967decoders must be compliant with this. This enables you to consider that it is
968not efficient to reinitialize the full dictionary. Instead of this, you don't
969change the dictionary and you send/receive (depending if it's a coder or a
970decoder) existing codes in the full dictionary.
971
972My codecs are able to deal as well with most of initial size of data in the
973initial dictionary as with full dictionary.
974
975Let's see how to decode an LZW encoding. We saw with true dynamical Huffman
976scheme that you needed an header in the encoding codes. Any header is useless
977in LZW scheme. When two successive bytes are read, the first must exist in the
978dictionary. This code can be immediately decoded and written in the output
979stream. If the second code is equal or less than the word number in the current
980dictionary, this code is decoded as the first one. At the opposite, if the
981second code is equal to the word number in dictionary plus one, this means you
982have to write a word composed with the word (the sentence, not the code number)
983of the last code plus the first character of the last code. In between, you make
984appear a new word. This new word is the one you just sent to the output stream,
985it means composed by all the letters of the word associated to the first code
986and the first letter of the word of the second code. You continue the processing
987with the second and third codes read in the input stream (of codes)...
988
989Example: Let's decode the previous encoding given a bit more above.
990
991+------+-------+----------------+----------+------------------+--------+
992| Step | Input | Code to decode | New code | Dictionary | Output |
993+------+-------+----------------+----------+------------------+--------+
994| 1 | 65 | 65 | 66 | 65,66=256 | "A" |
995| | 66 | | | | |
996+------+-------+----------------+----------+------------------+--------+
997| 2 | 65 | 66 | 65 | 66,65=257 | "B" |
998+------+-------+----------------+----------+------------------+--------+
999| 3 | 68 | 65 | 68 | 65,68=258 | "A" |
1000+------+-------+----------------+----------+------------------+--------+
1001| 4 | 256 | 68 | 256 | 68,65=259 | "D" |
1002+------+-------+----------------+----------+------------------+--------+
1003| 5 | 67 | 256 | 67 | 65,66,67=260 | "AB" |
1004+------+-------+----------------+----------+------------------+--------+
1005| 6 | 261 | 67 | 261 | 67,67=261 | "C" |
1006+------+-------+----------------+----------+------------------+--------+
1007| 7 | 260 | 261 | 260 | 67,67,65=262 | "CC" |
1008+------+-------+----------------+----------+------------------+--------+
1009| 8 | 69 | 260 | 69 | 65,66,67,69=263 | "ABC" |
1010+------+-------+----------------+----------+------------------+--------+
1011| 9 | 263 | 69 | 263 | 69,65=264 | "E" |
1012+------+-------+----------------+----------+------------------+--------+
1013| 10 | 262 | 263 | 262 |65,66,67,69,67=256| "ABCE" |
1014+------+-------+----------------+----------+------------------+--------+
1015| 11 | | 262 | | | "CCA" |
1016+------+-------+----------------+----------+------------------+--------+
1017
1018Summary: The step 4 is an explicit example. The code to decode is 68 ("D" in
1019ASCII) and the new code is 256. The new word to add to the dictionary is the
1020letters of the first word plus the the first letter of the second code (code
1021256), i.e. 65 ("A" in ASCII) plus 68 ("D"). So the new word has the letters 68
1022and 65 ("AD").
1023
1024The step 6 is quite special. The first code to decode is referenced but the
1025second new code is not referenced being that the dictionary is limited to 260
1026referenced words. We have to make it as the second previously given case, it
1027means you must take the word to decode plus its first letter, i.e. "C"+"C"="CC".
1028Be care, if any encountered code is *upper* than the dictionary size plus 1, it
1029means you have a problem in your data and/or your codecs are...bad!
1030
1031Tricks to improve LZW encoding (but it becomes a non-standard encoding):
1032- To limit the dictionary to an high amount of words (4096 words maximum enable
1033you to encode a stream of a maximmum 7,370,880 letters with the same dictionary)
1034- To use a dictionary of less than 258 if possible (example, with 16 color
1035pictures, you start with a dictionary of 18 words)
1036- To not reinitialize a dictionary when it is full
1037- To reinitialize a dictionary with the most frequent of the previous dictionary
1038- To use the codes from (current dictionary size+1) to (maximum dictionary size)
1039because these codes are not used in the standard LZW scheme.
1040Such a compression scheme has been used (successfully) by Robin Watts
1041<ct93008@ox.ac.uk>.
1042
1043+==========================================================+
1044| Summary |
1045+==========================================================+
1046
1047-------------------------------------------------
1048RLE type 1:
1049Fastest compression. Good ratio for general purpose.
1050Doesn't need to read the data by twice.
1051Decoding fast.
1052-------------------------------------------------
1053RLE type 2:
1054Fast compression. Very good ratio in general (even for general purposes).
1055Need to read the data by twice.
1056Decoding fast.
1057-------------------------------------------------
1058RLE type 3:
1059Slowest compression. Good ratio on image file,quite middle for general purposes.
1060Need to read the data by twice.
1061Change line:
1062#define MAX_RASTER_SIZE 256
1063into:
1064#define MAX_RASTER_SIZE 16
1065to speed up the encoding (but the result decreases in ratio). If you compress
1066with memory buffers, do not modify this line...
1067Decoding fast.
1068-------------------------------------------------
1069RLE type 4:
1070Slow compression. Good ratio on image file, middle in general purposes.
1071Change line:
1072#define MAX_RASTER_SIZE 66
1073into:
1074#define MAX_RASTER_SIZE 16
1075to speed up the encoding (but the result decreases in ratio). If you compress
1076with memory buffers, do not modify this line...
1077Decoding fast.
1078-------------------------------------------------
1079Huffman:
1080Fast compression. Good ratio on text files and similar, middle for general
1081purposes. Interesting method to use to compress a buffer already compressed by
1082RLE types 1 or 2 methods...
1083Decoding fast.
1084-------------------------------------------------
1085LZW:
1086Quite fast compression. Good, see even very good ratio, for general purposes.
1087Bigger the data are, better the compression ratio is.
1088Decoding quite fast.
1089-------------------------------------------------
1090
1091The source codes work on all kinds of computers with a C compiler.
1092With the compiler, optimize the speed run option instead of space option.
1093With UNIX system, it's better to compile them with option -O.
1094If you don't use a GNU compiler, the source file MUST NOT have a size
1095over 4 Gb for RLE 2, 3, and Huffman, because I count the number
1096of occurrences of the bytes.
1097So, with GNU compilers, 'unsigned lont int' is 8 bytes instead of 4 bytes
1098(as normal C UNIX compilers and PCs' compilers, such as Microsoft C++
1099and Borland C++).
1100Actually:
1101* Normal UNIX compilers, => 4 Gb (unsigned long int = 4 bytes)
1102 Microsoft C++ and Borland C++ for PCs
1103* GNU UNIX compilers => 17179869184 Gb (unsigned long int = 8 bytes)
1104
1105+==========================================================+
1106| END |
1107+==========================================================+
diff --git a/all_pairs/source/huff_enc/huff_enc.c b/all_pairs/source/huff_enc/huff_enc.c
new file mode 100644
index 0000000..2e739e6
--- /dev/null
+++ b/all_pairs/source/huff_enc/huff_enc.c
@@ -0,0 +1,589 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: huff_enc
7
8 Author: David Bourgin (David.Bourgin@ufrima.imag.fr)
9
10 Function: Example of Huffman encoding
11
12 Source: ftp://turing.imag.fr/pub/compression/ (1994-09-22)
13
14 Original name: codhuff.c
15
16 Changes: I/O to char arrays instead of file i/o.
17 Dynamic memory allocation replaced by array.
18 Explicit sorting algorithm.
19
20 License:
21
22The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
23dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
24They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
25on 22/5/94 and have been modified on 22/9/94.
26(c) David Bourgin - 1994
27The source codes I provide have no buggs (!) but being that I make them
28available for free I have some notes to make. They can change at any time
29without notice. I assume no responsability or liability for any errors or
30inaccurracies, make no warranty of any kind (express, implied or statutory)
31with respect to this publication and expressly disclaim any and all warranties
32of merchantability, fitness for particular purposes. Of course, if you have
33some problems to use the information presented here, I will try to help you if
34I can.
35
36If you include the source codes in your application, here are the conditions:
37- You have to put my name in the header of your source file (not in the
38excutable program if you don't want) (this item is a must)
39- I would like to see your resulting application, if possible (this item is not
40a must, because some applications must remain secret)
41- Whenever you gain money with your application, I would like to receive a very
42little part in order to be encouraged to update my source codes and to develop
43new schemes (this item is not a must)
44
45*/
46
47
48/*
49 Declaration of types
50*/
51
52
53#include "../extra.h"
54typedef struct huff_enc_s_tree {
55 unsigned int byte; /* A byte has to be coded as an unsigned integer to
56 allow a node to have a value over 255 */
57 unsigned long int weight;
58 struct huff_enc_s_tree *left_ptr;
59 struct huff_enc_s_tree *right_ptr;
60} huff_enc_t_tree;
61
62typedef struct {
63 unsigned char bits[32];
64 unsigned int bits_nb;
65} huff_enc_t_bin_val;
66
67
68/*
69 Forward declaration of functions
70*/
71
72void huff_enc_init( void );
73int huff_enc_return( void );
74void huff_enc_beginning_of_data();
75int huff_enc_end_of_data();
76int huff_enc_read_byte();
77void huff_enc_write_byte( char ch );
78void huff_enc_write_bin_val( huff_enc_t_bin_val bin_val );
79void huff_enc_fill_encoding( void );
80void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] );
81int huff_enc_weighhuff_enc_t_tree_comp( const void *t1, const void *t2 );
82void huff_enc_swapi( char *ii, char *ij, unsigned long es );
83char *huff_enc_pivot( char *a, unsigned long n, unsigned long es );
84void huff_enc_qsort( char *a, unsigned long n, unsigned long es );
85huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] );
86void huff_enc_encode_codes_table( huff_enc_t_tree *tree,
87 huff_enc_t_bin_val codes_table[257], huff_enc_t_bin_val *code_val );
88void huff_enc_create_codes_table( huff_enc_t_tree *tree,
89 huff_enc_t_bin_val codes_table[257] );
90void huff_enc_main();
91//int main( void );
92
93
94/*
95 Declaration of global variables
96*/
97
98static int huff_enc_input_pos;
99static int huff_enc_output_pos;
100static unsigned char huff_enc_output[1024];
101static unsigned char huff_enc_byte_nb_to_write = 0;
102static unsigned char huff_enc_val_to_write = 0;
103
104
105/*
106 Initialization- and return-value-related functions
107*/
108
109#define huff_enc_plaintext_len 600
110static const char *huff_enc_plaintext =
111 "You are doubtless asking \"How can I reduce the data size without losing "
112 "some informations?\". It's easy to answer to this question. I'll only take "
113 "an example. I'm sure you have heard about the morse. This system established "
114 "in the 19th century use a scheme very close to the huffman one. In the morse "
115 "you encode the letters to transmit with two kinds of signs. If you encode "
116 "these two sign possibilities in one bit, the symbol 'e' is transmitted in a "
117 "single bit and the symbols 'y' and 'z' need four bits. Look at the symbols "
118 "in the text you are reading, you'll fast understand the compression ratio...";
119
120#define huff_enc_encoded_len 419
121static unsigned char huff_enc_encoded[huff_enc_encoded_len] = {
122 128, 0, 0, 0, 80, 133, 32, 32, 128, 100, 4, 32, 63, 239, 255, 240,
123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124 4, 7, 167, 21, 129, 232, 69, 120, 132, 217, 20, 162, 19, 164, 39, 133,
125 252, 138, 105, 20, 194, 19, 129, 240, 172, 138, 248, 150, 11, 11, 240, 201,
126 68, 64, 114, 53, 17, 42, 37, 195, 128, 212, 116, 194, 41, 98, 52, 51,
127 12, 132, 112, 244, 3, 36, 33, 52, 39, 135, 164, 33, 62, 156, 87, 14,
128 110, 22, 87, 50, 85, 198, 99, 142, 140, 194, 81, 78, 158, 84, 129, 254,
129 129, 248, 110, 179, 159, 192, 145, 133, 184, 184, 28, 210, 96, 146, 73, 10,
130 226, 21, 83, 152, 74, 13, 111, 132, 199, 202, 219, 241, 74, 193, 167, 105,
131 222, 31, 147, 6, 55, 31, 129, 40, 232, 52, 153, 160, 148, 18, 36, 197,
132 45, 216, 202, 86, 30, 31, 177, 90, 133, 138, 248, 23, 81, 195, 160, 100,
133 215, 93, 50, 185, 225, 251, 23, 6, 230, 225, 229, 112, 71, 80, 96, 141,
134 205, 176, 230, 85, 196, 9, 24, 93, 90, 121, 225, 76, 68, 152, 63, 25,
135 107, 140, 101, 204, 214, 77, 26, 194, 96, 18, 48, 77, 210, 137, 1, 253,
136 4, 230, 248, 56, 240, 224, 111, 163, 95, 10, 12, 223, 7, 234, 167, 129,
137 40, 36, 96, 135, 125, 245, 250, 2, 198, 120, 127, 0, 145, 133, 213, 167,
138 135, 149, 195, 67, 235, 108, 9, 24, 87, 17, 102, 152, 37, 4, 222, 131,
139 188, 144, 73, 36, 128, 73, 20, 81, 152, 177, 133, 248, 28, 165, 131, 120,
140 127, 240, 242, 184, 104, 125, 109, 129, 35, 30, 4, 145, 65, 202, 88, 9,
141 138, 103, 44, 205, 100, 167, 24, 152, 11, 24, 51, 37, 66, 9, 24, 31,
142 174, 202, 212, 49, 152, 18, 96, 155, 208, 119, 146, 45, 97, 48, 56, 28,
143 194, 90, 224, 204, 144, 232, 176, 36, 96, 126, 187, 43, 83, 12, 121, 129,
144 209, 96, 197, 35, 2, 54, 176, 249, 92, 208, 204, 145, 188, 41, 170, 180,
145 71, 16, 36, 96, 126, 187, 43, 83, 19, 0, 145, 129, 100, 209, 15, 43,
146 135, 55, 6, 238, 180, 194, 90, 17, 229, 115, 21, 168, 251, 140, 131, 162,
147 217, 166, 93, 22, 4, 140, 31, 91, 166, 55, 25, 202, 192, 111, 20, 171,
148 207, 39, 192,
149};
150
151
152void huff_enc_init( void )
153{
154 huff_enc_input_pos = 0;
155 huff_enc_output_pos = 0;
156}
157
158
159int huff_enc_return( void )
160{
161 int i;
162 _Pragma( "loopbound min 1 max 419" )
163 for ( i = 0; i < huff_enc_encoded_len; i++ ) {
164 if ( huff_enc_encoded[i] != huff_enc_output[i] ) return i + 1;
165 }
166 return 0;
167}
168
169
170/*
171 Input / output functions
172*/
173
174void huff_enc_beginning_of_data()
175{
176 huff_enc_input_pos = 0;
177}
178
179
180int huff_enc_end_of_data()
181{
182 return huff_enc_input_pos >= huff_enc_plaintext_len;
183}
184
185
186int huff_enc_read_byte()
187{
188 return huff_enc_plaintext[huff_enc_input_pos++];
189}
190
191
192void huff_enc_write_byte( char ch )
193{
194 huff_enc_output[huff_enc_output_pos++] = ch;
195}
196
197
198void huff_enc_write_bin_val( huff_enc_t_bin_val bin_val )
199/* Returned parameters: None
200 Action: Writes in the output stream the value binary-coded into 'bin_val'
201 Errors: An input/output error could disturb the running of the program
202*/
203{
204 unsigned char bit_indice;
205 unsigned char bin_pos = ( bin_val.bits_nb - 1 ) & 7;
206 unsigned int pos_byte = ( bin_val.bits_nb - 1 ) >> 3;
207
208 for ( bit_indice = 1;
209 bit_indice <= bin_val.bits_nb;
210 bit_indice++ ) {
211 /* Watch for the current bit to write */
212 huff_enc_val_to_write = ( huff_enc_val_to_write << 1 ) |
213 ( ( bin_val.bits[pos_byte] >> bin_pos ) & 1 );
214 /* Move to the next bit to write */
215 if ( !bin_pos ) {
216 pos_byte--;
217 bin_pos = 7;
218 } else bin_pos--;
219 if ( huff_enc_byte_nb_to_write == 7 ) {
220 /* Are already 8 bits written? */
221 huff_enc_write_byte( huff_enc_val_to_write );
222 huff_enc_byte_nb_to_write = 0;
223 huff_enc_val_to_write = 0;
224 } else /* No, then the next writting will be in the next bit */
225 huff_enc_byte_nb_to_write++;
226 }
227}
228
229
230void huff_enc_fill_encoding( void )
231/* Returned parameters: None
232 Action: Fills the last byte to write in the output stream with zero values
233 Errors: An input/output error could disturb the running of the program
234*/
235{
236 if ( huff_enc_byte_nb_to_write )
237 huff_enc_write_byte( huff_enc_val_to_write <<
238 ( 8 - huff_enc_byte_nb_to_write ) );
239}
240
241
242void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] )
243/* Returned parameters: None
244 Action: Writes the header in the stream of codes
245 Errors: An input/output error could disturb the running of the program
246*/
247{
248 unsigned int i, j;
249 huff_enc_t_bin_val bin_val_to_0;
250 huff_enc_t_bin_val bin_val_to_1;
251 huff_enc_t_bin_val bin_val;
252 /* Is used to send in binary mode via huff_enc_write_bin_val */
253
254 *bin_val_to_0.bits = 0;
255 bin_val_to_0.bits_nb = 1;
256 *bin_val_to_1.bits = 1;
257 bin_val_to_1.bits_nb = 1;
258 for ( i = 0, j = 0; j <= 255; j++ )
259 if ( codes_table[j].bits_nb ) i++;
260 /* From there, i contains the number of bytes of the several
261 non 0 occurrences to encode.
262 First part of the header: Specifies the bytes that appear
263 in the source of encoding */
264 if ( i < 32 ) {
265 /* Encoding of the appeared bytes with a block of bytes */
266 huff_enc_write_bin_val( bin_val_to_0 );
267 bin_val.bits_nb = 5;
268 *bin_val.bits = ( unsigned char )( i - 1 );
269 huff_enc_write_bin_val( bin_val );
270 bin_val.bits_nb = 8;
271 for ( j = 0; j <= 255; j++ )
272 if ( codes_table[j].bits_nb ) {
273 *bin_val.bits = ( unsigned char )j;
274 huff_enc_write_bin_val( bin_val );
275 }
276 } else {
277 /* Encoding of the appeared bytes with a block of bits */
278 huff_enc_write_bin_val( bin_val_to_1 );
279 for ( j = 0; j <= 255; j++ )
280 if ( codes_table[j].bits_nb )
281 huff_enc_write_bin_val( bin_val_to_1 );
282 else huff_enc_write_bin_val( bin_val_to_0 );
283 };
284 /* Second part of the header: Specifies the encoding of the bytes
285 (fictive or not) that appear in the source of encoding */
286 for ( i = 0; i <= 256; i++ )
287 if ( ( j = codes_table[i].bits_nb ) != 0 ) {
288 if ( j < 33 ) {
289 huff_enc_write_bin_val( bin_val_to_0 );
290 bin_val.bits_nb = 5;
291 } else {
292 huff_enc_write_bin_val( bin_val_to_1 );
293 bin_val.bits_nb = 8;
294 }
295 *bin_val.bits = ( unsigned char )( j - 1 );
296 huff_enc_write_bin_val( bin_val );
297 huff_enc_write_bin_val( codes_table[i] );
298 }
299}
300
301
302int huff_enc_weighhuff_enc_t_tree_comp( const void *t1, const void *t2 )
303/* Returned parameters: Returns a comparison status
304 Action: Returns a negative, zero or positive integer depending on the weight
305 of 'tree2' is less than, equal to, or greater than the weight of
306 'tree1'
307 Errors: None
308*/
309{
310 huff_enc_t_tree *const *tree1 = ( huff_enc_t_tree *const * ) t1;
311 huff_enc_t_tree *const *tree2 = ( huff_enc_t_tree *const * ) t2;
312 return ( ( *tree2 )->weight ^ ( *tree1 )->weight )
313 ? ( ( ( *tree2 )->weight < ( *tree1 )->weight ) ? -1 : 1 ) : 0;
314}
315
316
317void huff_enc_swapi( char *ii, char *ij, unsigned long es )
318{
319 char *i, *j, c;
320
321 i = ( char * )ii;
322 j = ( char * )ij;
323 _Pragma( "loopbound min 4 max 4" )
324 do {
325 c = *i;
326 *i++ = *j;
327 *j++ = c;
328 es -= sizeof( char );
329 } while ( es != 0 );
330}
331
332
333char *huff_enc_pivot( char *a, unsigned long n, unsigned long es )
334{
335 long j;
336 char *pi, *pj, *pk;
337
338 j = n / 6 * es;
339 pi = a + j; /* 1/6 */
340 j += j;
341 pj = pi + j; /* 1/2 */
342 pk = pj + j; /* 5/6 */
343 if ( huff_enc_weighhuff_enc_t_tree_comp( pi, pj ) < 0 ) {
344 if ( huff_enc_weighhuff_enc_t_tree_comp( pi, pk ) < 0 ) {
345 if ( huff_enc_weighhuff_enc_t_tree_comp( pj, pk ) < 0 )
346 return pj;
347 return pk;
348 }
349 return pi;
350 }
351 if ( huff_enc_weighhuff_enc_t_tree_comp( pj, pk ) < 0 ) {
352 if ( huff_enc_weighhuff_enc_t_tree_comp( pi, pk ) < 0 )
353 return pi;
354 return pk;
355 }
356 return pj;
357}
358
359
360void huff_enc_qsort( char *a, unsigned long n, unsigned long es )
361{
362 unsigned long j;
363 char *pi, *pj, *pn;
364 unsigned int flowfactdummy = 0;
365
366 _Pragma( "loopbound min 0 max 8" )
367 while ( n > 1 ) {
368 if ( n > 10 ) {
369 pi = huff_enc_pivot( a, n, es );
370 } else {
371 pi = a + ( n >> 1 ) * es;
372 }
373
374 huff_enc_swapi( a, pi, es );
375 pi = a;
376 pn = a + n * es;
377 pj = pn;
378 _Pragma( "loopbound min 1 max 110" )
379 while ( 1 ) {
380 /* wcc note: this assignment expression was added to avoid assignment of
381 * multiple loop bound annotations to same loop (cf. Ticket #0002323). */
382 flowfactdummy++;
383 _Pragma( "loopbound min 1 max 19" )
384 do {
385 pi += es;
386 } while ( pi < pn && huff_enc_weighhuff_enc_t_tree_comp( pi, a ) < 0 );
387 _Pragma( "loopbound min 1 max 25" )
388 do {
389 pj -= es;
390 } while ( pj > a && huff_enc_weighhuff_enc_t_tree_comp( pj, a ) > 0 );
391 if ( pj < pi )
392 break;
393 huff_enc_swapi( pi, pj, es );
394 }
395 huff_enc_swapi( a, pj, es );
396 j = ( pj - a ) / es;
397
398 n = n - j - 1;
399 if ( j >= n ) {
400 huff_enc_qsort( a, j, es );
401 a += ( j + 1 ) * es;
402 } else {
403 huff_enc_qsort( a + ( j + 1 )*es, n, es );
404 n = j;
405 }
406 }
407}
408
409
410huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] )
411/* Returned parameters: Returns a tree of encoding
412 Action: Generates an Huffman encoding tree based on the data from
413 the stream to compress
414 Errors: None
415*/
416{
417 unsigned int i;
418 unsigned int heap_top = 0;
419 huff_enc_t_tree *occurrences_table[257];
420 huff_enc_t_tree *ptr_fictive_tree;
421
422 /* Sets up the occurrences number of all bytes to 0 */
423 for ( i = 0; i <= 256; i++ ) {
424 occurrences_table[i] = &heap[heap_top++];
425 occurrences_table[i]->byte = i;
426 occurrences_table[i]->weight = 0;
427 occurrences_table[i]->left_ptr = 0;
428 occurrences_table[i]->right_ptr = 0;
429 }
430 /* Valids the occurrences of 'occurrences_table' with regard to the data to
431 compress */
432 if ( !huff_enc_end_of_data() ) {
433 while ( !huff_enc_end_of_data() ) {
434 i = huff_enc_read_byte();
435 occurrences_table[i]->weight++;
436 }
437 occurrences_table[256]->weight = 1;
438
439 /* Sorts the occurrences table depending on the weight of each character */
440 huff_enc_qsort( ( char * )occurrences_table, 257, sizeof( huff_enc_t_tree * ) );
441
442 for ( i = 256; ( i != 0 ) && ( !occurrences_table[i]->weight ); i-- )
443 ;
444 i++;
445 /* From there, 'i' gives the number of different bytes with a 0 occurrence
446 in the stream to compress */
447 while ( i > 0 ) {
448 /* Looks up (i+1)/2 times the occurrence table to link the nodes in an
449 unique tree */
450 ptr_fictive_tree = &heap[heap_top++];
451 ptr_fictive_tree->byte = 257;
452 ptr_fictive_tree->weight = occurrences_table[--i]->weight;
453 ptr_fictive_tree->left_ptr = occurrences_table[i];
454 if ( i ) {
455 i--;
456 ptr_fictive_tree->weight += occurrences_table[i]->weight;
457 ptr_fictive_tree->right_ptr = occurrences_table[i];
458 } else ptr_fictive_tree->right_ptr = 0;
459 occurrences_table[i] = ptr_fictive_tree;
460
461 //qsort( ( char * )occurrences_table, i + 1, sizeof( *huff_enc_t_tree ),
462 //huff_enc_weighhuff_enc_t_tree_comp );
463 huff_enc_qsort( ( char * )occurrences_table, i + 1,
464 sizeof( huff_enc_t_tree * ) );
465
466 if ( i ) /* Is there an other node in the occurrence tables? */
467 i++; /* Yes, then takes care to the fictive node */
468 }
469 }
470 return ( *occurrences_table );
471}
472
473
474void huff_enc_encode_codes_table( huff_enc_t_tree *tree,
475 huff_enc_t_bin_val codes_table[257],
476 huff_enc_t_bin_val *code_val )
477/* Returned parameters: The data of 'codes_table' can have been modified
478 Action: Stores the encoding tree as a binary encoding table to speed up the
479 access. 'val_code' gives the encoding for the current node of the tree
480 Errors: None
481*/
482{
483 unsigned int i;
484 huff_enc_t_bin_val tmp_code_val;
485
486 if ( tree->byte == 257 ) {
487 if ( tree->left_ptr != 0 )
488 /* The sub-trees on left begin with an bit set to 1 */
489 {
490 tmp_code_val = *code_val;
491 for ( i = 31; i > 0; i-- )
492 code_val->bits[i] = ( code_val->bits[i] << 1 ) |
493 ( code_val->bits[i - 1] >> 7 );
494 *code_val->bits = ( *code_val->bits << 1 ) | 1;
495 code_val->bits_nb++;
496 huff_enc_encode_codes_table( tree->left_ptr, codes_table, code_val );
497 *code_val = tmp_code_val;
498 };
499 if ( tree->right_ptr != 0 )
500 /* The sub-trees on right begin with an bit set to 0 */
501 {
502 tmp_code_val = *code_val;
503 for ( i = 31; i > 0; i-- )
504 code_val->bits[i] = ( code_val->bits[i] << 1 ) |
505 ( code_val->bits[i - 1] >> 7 );
506 *code_val->bits <<= 1;
507 code_val->bits_nb++;
508 huff_enc_encode_codes_table( tree->right_ptr, codes_table, code_val );
509 *code_val = tmp_code_val;
510 };
511 } else codes_table[tree->byte] = *code_val;
512}
513
514
515void huff_enc_create_codes_table( huff_enc_t_tree *tree,
516 huff_enc_t_bin_val codes_table[257] )
517/* Returned parameters: The data in 'codes_table' will be modified
518 Action: Stores the encoding tree as a binary encoding table to speed up
519 the access by calling encode_codes_table
520 Errors: None
521*/
522{
523 unsigned int i, j;
524 huff_enc_t_bin_val code_val;
525
526 _Pragma( "loopbound min 32 max 32" )
527 for ( i = 0; i < 32; i++ ) {
528 code_val.bits[i] = 0;
529 }
530 code_val.bits_nb = 0;
531 _Pragma( "loopbound min 257 max 257" )
532 for ( j = 0; j < 257; j++ ) {
533 _Pragma( "loopbound min 32 max 32" )
534 for ( i = 0; i < 32; i++ ) {
535 codes_table[j].bits[i] = 0;
536 }
537 codes_table[j].bits_nb = 0;
538 }
539 _Pragma( "marker call_encode" )
540 _Pragma( "flowrestriction 1*huff_enc_encode_codes_table <= 77*call_encode" )
541 huff_enc_encode_codes_table( tree, codes_table, &code_val );
542}
543
544
545void _Pragma( "entrypoint" ) huff_enc_main()
546/* Returned parameters: None
547 Action: Compresses with Huffman method all bytes read by the function
548 'huff_enc_read_byte'
549 Errors: None
550*/
551{
552 huff_enc_t_tree *tree;
553 huff_enc_t_tree heap[514];
554 huff_enc_t_bin_val encoding_table[257];
555 unsigned char byte_read;
556
557 if ( !huff_enc_end_of_data() ) {
558 /* Generates only whether there are data */
559 tree = huff_enc_build_tree_encoding( heap );
560 /* Creation of the best adapted tree */
561 huff_enc_create_codes_table( tree, encoding_table );
562 /* Obtains the binary encoding in an array to speed up the accesses */
563 huff_enc_write_header( encoding_table );
564 /* Writes the defintion of the encoding */
565 huff_enc_beginning_of_data(); /* Real compression of the data */
566 while ( !huff_enc_end_of_data() ) {
567 byte_read = huff_enc_read_byte();
568 huff_enc_write_bin_val( encoding_table[byte_read] );
569 }
570 huff_enc_write_bin_val( encoding_table[256] );
571 /* Code of the end of encoding */
572 huff_enc_fill_encoding();
573 /* Fills the last byte before closing file, if any */
574 }
575}
576
577
578int main( int argc, char **argv )
579{
580 SET_UP
581 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
582 START_LOOP
583 huff_enc_init();
584 huff_enc_main();
585 STOP_LOOP
586 }
587 WRITE_TO_FILE
588 return ( huff_enc_return() );
589}
diff --git a/all_pairs/source/mpeg2/ChangeLog.txt b/all_pairs/source/mpeg2/ChangeLog.txt
new file mode 100644
index 0000000..f644576
--- /dev/null
+++ b/all_pairs/source/mpeg2/ChangeLog.txt
@@ -0,0 +1,35 @@
1File: mpeg2.c
2Original provenience: MediaBench II benchmark suite,
3 http://euler.slu.edu/~fritts/mediabench (mirror)
4
52015-11-05:
6- Removed original header comment, replaced by TACLeBench header.
7- Removed unnecessary preprocessor macros, integrated required preprocessor
8 macros directly in the source code.
9- Added prefix "mpeg2_" to all global symbols.
10- Added explicit forward declarations of functions.
11- Added TACLeBench-compliant initialization code.
12- Added new function mpeg2_return producing a checksum as return value.
13- Added new function mpeg2_main according to TACLeBench guidelines.
14 mpeg2_main is annotated as entry-point for timing analysis.
15- Applied code formatting according to the following rules
16 - Lines shall not be wider than 80 characters; whenever possible, appropriate
17 line breaks shall be inserted to keep lines below 80 characters
18 - Indentation is done using whitespaces only, no tabs. Code is indented by
19 two whitespaces
20 - Two empty lines are put between any two functions
21 - In non-empty lists or index expressions, opening '(' and '[' are followed by
22 one whitespace, closing ')' and ']' are preceded by one whitespace
23 - In comma- or colon-separated argument lists, one whitespace is put after
24 each comma/colon
25 - Names of functions and global variables all start with a benchmark-specific
26 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
27 - For pointer types, one whitespace is put before the '*'
28 - Operators within expressions shall be preceded and followed by one
29 whitespace
30 - Code of then- and else-parts of if-then-else statements shall be put in
31 separate lines, not in the same lines as the if-condition or the keyword
32 "else"
33 - Opening braces '{' denoting the beginning of code for some if-else or loop
34 body shall be put at the end of the same line where the keywords "if",
35 "else", "for", "while" etc. occur
diff --git a/all_pairs/source/mpeg2/mpeg2.c b/all_pairs/source/mpeg2/mpeg2.c
new file mode 100644
index 0000000..e89e1f9
--- /dev/null
+++ b/all_pairs/source/mpeg2/mpeg2.c
@@ -0,0 +1,13218 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: mpeg2
7
8 Author: MPEG Software Simulation Group
9
10 Function: This file contains MPEG 2 motion estimation code.
11
12 Source: MediaBench II
13 http://euler.slu.edu/~fritts/mediabench (mirror)
14
15 Original name: MPEG-2
16
17 Changes: For TACLeBench, the code has been changed such that input and
18 output arrays are scaled down so that the code plus its data fits to the
19 memories of typical resource-constrained embedded devices.
20
21 License: See the following disclaimer from the original source codes.
22
23 Disclaimer of Warranty
24
25 These software programs are available to the user without any license fee or
26 royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
27 any and all warranties, whether express, implied, or statuary, including any
28 implied warranties or merchantability or of fitness for a particular
29 purpose. In no event shall the copyright-holder be liable for any
30 incidental, punitive, or consequential damages of any kind whatsoever
31 arising from the use of these programs.
32
33 This disclaimer of warranty extends to the user of these programs and user's
34 customers, employees, agents, transferees, successors, and assigns.
35
36 The MPEG Software Simulation Group does not represent or warrant that the
37 programs furnished hereunder are free of infringement of any third-party
38 patents.
39
40 Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
41 are subject to royalty fees to patent holders. Many of these patents are
42 general enough such that they are unavoidable regardless of implementation
43 design.
44
45*/
46
47
48/*
49 Forward declaration of data types
50*/
51#include "../extra.h"
52struct mbinfo;
53
54
55/*
56 Forward declaration of functions
57*/
58
59void mpeg2_init( void );
60int mpeg2_return( void );
61void mpeg2_motion_estimation( unsigned char *, unsigned char *, unsigned char *,
62 unsigned char *, unsigned char *, unsigned char *,
63 int, int, int, int, struct mbinfo *, int, int );
64void mpeg2_frame_ME( unsigned char *, unsigned char *, unsigned char *,
65 unsigned char *, unsigned char *, int, int, int, int, int,
66 int, struct mbinfo * );
67void mpeg2_field_ME( unsigned char *, unsigned char *, unsigned char *,
68 unsigned char *, unsigned char *, unsigned char *, int,
69 int, int, int, int, int, struct mbinfo *, int, int );
70void mpeg2_frame_estimate( unsigned char *, unsigned char *, unsigned char *,
71 int, int, int, int, int *, int *, int *, int *,
72 int *, int *, int *, int *, int *, int *,
73 int[ 2 ][ 2 ], int[ 2 ][ 2 ] );
74void mpeg2_field_estimate( unsigned char *, unsigned char *, unsigned char *,
75 unsigned char *, unsigned char *, int, int, int, int,
76 int, int *, int *, int *, int *, int *, int *, int *,
77 int *, int *, int *, int *, int *, int *, int * );
78void mpeg2_dpframe_estimate( unsigned char *, unsigned char *, int, int,
79 int[ 2 ][ 2 ], int[ 2 ][ 2 ], int *, int *, int *,
80 int *, int *, int * );
81void mpeg2_dpfield_estimate( unsigned char *, unsigned char *, unsigned char *,
82 int, int, int, int, int *, int *, int *, int * );
83int mpeg2_fullsearch( unsigned char *, unsigned char *, unsigned char *, int,
84 int, int, int, int, int, int, int, int *, int * );
85int mpeg2_dist1( unsigned char *, unsigned char *, int, int, int, int, int );
86int mpeg2_dist2( unsigned char *, unsigned char *, int, int, int, int );
87int mpeg2_bdist1( unsigned char *, unsigned char *, unsigned char *, int, int,
88 int, int, int, int );
89int mpeg2_bdist2( unsigned char *, unsigned char *, unsigned char *, int, int,
90 int, int, int, int );
91int mpeg2_variance( unsigned char *, int );
92void mpeg2_main( void );
93//int main( void );
94
95
96/*
97 Declaration of global variables
98*/
99
100struct mbinfo {
101 int mb_type;
102 int motion_type;
103 int dct_type;
104 int mquant;
105 int cbp;
106 int skipped;
107 int MV[ 2 ][ 2 ][ 2 ];
108 int mv_field_sel[ 2 ][ 2 ];
109 int dmvector[ 2 ];
110 double act;
111 int var;
112};
113
114volatile int mpeg2_width = 352;
115volatile int mpeg2_height = 256;
116volatile int mpeg2_width2 = 352;
117volatile int mpeg2_height2 = 256;
118volatile int mpeg2_M = 3;
119volatile int mpeg2_pict_type = 3;
120volatile int mpeg2_pict_struct = 3;
121volatile int mpeg2_topfirst = 1;
122volatile int mpeg2_frame_pred_dct = 0;
123struct mbinfo mpeg2_mbinfo[ 352 ];
124
125unsigned char mpeg2_oldorgframe[] = {
126 0x9f, 0x9d, 0x9b, 0x9d, 0x9f, 0xa1, 0xa2, 0xa3,
127 0x9e, 0xa2, 0xa5, 0xa5, 0xa2, 0xa1, 0xa4, 0xa7,
128 0xa3, 0xa3, 0xa5, 0xa6, 0xa5, 0xa5, 0xa3, 0xa2,
129 0x9d, 0xa1, 0xa5, 0xa8, 0xa6, 0xa1, 0x9a, 0x95,
130 0x8e, 0x7e, 0x7a, 0x78, 0x70, 0x76, 0x7c, 0x73,
131 0x7d, 0x7a, 0x7a, 0x79, 0x7b, 0x83, 0x82, 0x74,
132 0x64, 0x57, 0x48, 0x5e, 0x7e, 0x84, 0x6f, 0x4a,
133 0x31, 0x43, 0x61, 0x81, 0x9b, 0xac, 0xb6, 0xb9,
134 0xb0, 0xa8, 0x9e, 0x9a, 0x9b, 0xa1, 0xaa, 0xb1,
135 0x9d, 0x83, 0x65, 0x49, 0x33, 0x30, 0x34, 0x32,
136 0x4b, 0x54, 0x68, 0x83, 0x99, 0x9f, 0x94, 0x87,
137 0x4f, 0x5e, 0x72, 0x7f, 0x75, 0x52, 0x23, 0x02,
138 0x1a, 0x24, 0x24, 0x1b, 0x14, 0x13, 0x1e, 0x30,
139 0x43, 0x60, 0x7b, 0x8a, 0x96, 0x9c, 0x97, 0x90,
140 0x99, 0x99, 0x92, 0x88, 0x7f, 0x80, 0x97, 0xb5,
141 0xa0, 0x94, 0x9a, 0x96, 0x66, 0x2d, 0x14, 0x12,
142 0x15, 0x17, 0x27, 0x1c, 0x15, 0x1e, 0x25, 0x3b,
143 0x7a, 0xa2, 0xbe, 0xbf, 0xb2, 0x9f, 0x9e, 0xaf,
144 0xba, 0x7b, 0x64, 0x8a, 0xa9, 0xa7, 0xa4, 0xaa,
145 0xa8, 0xab, 0xad, 0xab, 0xa7, 0xa6, 0xaa, 0xaf,
146 0xa4, 0xa6, 0xa9, 0xab, 0xac, 0xac, 0xaa, 0xa9,
147 0xa7, 0xaf, 0xba, 0xbc, 0xaf, 0x94, 0x75, 0x60,
148 0x7a, 0x85, 0x90, 0x9a, 0xa7, 0xa2, 0x7c, 0x50,
149 0x2f, 0x48, 0x65, 0x77, 0x7e, 0x8b, 0xa3, 0xb7,
150 0xae, 0x95, 0x7a, 0x6f, 0x75, 0x79, 0x73, 0x69,
151 0x56, 0x63, 0x6e, 0x6e, 0x6a, 0x6b, 0x72, 0x78,
152 0x65, 0x67, 0x61, 0x51, 0x3f, 0x36, 0x3b, 0x43,
153 0x33, 0x24, 0x25, 0x3d, 0x4d, 0x4b, 0x48, 0x4d,
154 0x57, 0x4b, 0x42, 0x47, 0x56, 0x62, 0x63, 0x5f,
155 0x60, 0x6d, 0x6f, 0x5b, 0x3f, 0x38, 0x4d, 0x67,
156 0x4c, 0x3c, 0x2d, 0x2f, 0x3a, 0x3e, 0x33, 0x25,
157 0x3b, 0x4e, 0x6d, 0x84, 0x82, 0x75, 0x71, 0x78,
158 0x7f, 0x78, 0x6c, 0x61, 0x5a, 0x58, 0x5a, 0x5d,
159 0x69, 0x64, 0x59, 0x4c, 0x41, 0x3c, 0x3f, 0x43,
160 0x32, 0x3c, 0x26, 0x26, 0x2f, 0x2b, 0x2e, 0x1f,
161 0x34, 0x8e, 0xbb, 0xaf, 0xae, 0xb0, 0xa7, 0xa8,
162 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
163 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
164 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
165 0xa8, 0xa5, 0xa4, 0xa5, 0xa7, 0xa7, 0xa5, 0xa4,
166 0xa0, 0xac, 0xa1, 0x97, 0xa7, 0xac, 0xa5, 0xa9,
167 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
168 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
169 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
170 0x8b, 0x86, 0x87, 0x8e, 0x95, 0x94, 0x90, 0x8d,
171 0x92, 0x94, 0x97, 0x9b, 0x9f, 0xa0, 0x9e, 0x9d,
172 0x99, 0x9b, 0x9e, 0x9d, 0x98, 0x8e, 0x83, 0x7c,
173 0x80, 0x7b, 0x76, 0x74, 0x78, 0x83, 0x8f, 0x97,
174 0x92, 0x8f, 0x99, 0xaf, 0xb8, 0xa8, 0x99, 0x9b,
175 0x97, 0xb9, 0xc0, 0xb5, 0xb2, 0x9e, 0x8a, 0x90,
176 0xa7, 0xc1, 0x9d, 0x6a, 0x56, 0x4a, 0x48, 0x4c,
177 0x58, 0x86, 0xb9, 0xca, 0xb8, 0xa1, 0x9c, 0xa1,
178 0xbd, 0xc1, 0xba, 0x99, 0x63, 0x30, 0x11, 0x06,
179 0x1b, 0x33, 0x5d, 0x7f, 0x91, 0xa7, 0xbf, 0xcb,
180 0xbb, 0xb5, 0xb1, 0xb2, 0xb5, 0xb0, 0xa2, 0x95,
181 0xca, 0xc3, 0xa6, 0x74, 0x4f, 0x5d, 0x99, 0xd1,
182 0xcb, 0xbb, 0xb0, 0x95, 0x69, 0x54, 0x52, 0x48,
183 0x5a, 0x51, 0x3d, 0x42, 0x5d, 0x64, 0x73, 0x9c,
184 0x9d, 0x91, 0x96, 0x9f, 0x9b, 0x98, 0x91, 0x7f,
185 0x64, 0x41, 0x15, 0x12, 0x39, 0x5f, 0x74, 0x83,
186 0x86, 0x80, 0x7b, 0x84, 0x8a, 0x7c, 0x5e, 0x41,
187 0x36, 0x42, 0x6f, 0xa7, 0xbb, 0xa8, 0x91, 0x89,
188 0x88, 0x98, 0xb2, 0xbc, 0xb2, 0xae, 0xb3, 0xb4,
189 0xb6, 0xb4, 0xb3, 0xb5, 0xb9, 0xbb, 0xbc, 0xbb,
190 0xb6, 0xb6, 0xb6, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2,
191 0x9d, 0x80, 0x61, 0x5e, 0x79, 0x9c, 0xb3, 0xbb,
192 0xca, 0xc1, 0xaf, 0xa3, 0xac, 0xb9, 0xaf, 0x98,
193 0x6e, 0x48, 0x2b, 0x41, 0x7a, 0xa5, 0xa7, 0x96,
194 0x9d, 0x87, 0x6e, 0x65, 0x6c, 0x72, 0x6e, 0x67,
195 0x66, 0x78, 0x7d, 0x76, 0x7f, 0x96, 0x99, 0x89,
196 0x6a, 0x78, 0x87, 0x8a, 0x80, 0x72, 0x6a, 0x68,
197 0x56, 0x5a, 0x59, 0x55, 0x55, 0x59, 0x5e, 0x60,
198 0x5a, 0x86, 0xb2, 0xb6, 0x92, 0x69, 0x57, 0x57,
199 0x6a, 0x59, 0x46, 0x3b, 0x39, 0x34, 0x29, 0x1f,
200 0x26, 0x25, 0x23, 0x21, 0x21, 0x26, 0x2e, 0x35,
201 0x5c, 0x6e, 0x7a, 0x74, 0x6c, 0x6f, 0x77, 0x7c,
202 0x6a, 0x67, 0x62, 0x5d, 0x5b, 0x5b, 0x5d, 0x5f,
203 0x54, 0x50, 0x4c, 0x4d, 0x4f, 0x49, 0x3c, 0x31,
204 0x35, 0x24, 0x2d, 0x2f, 0x2e, 0x2a, 0x22, 0x3a,
205 0x87, 0xaf, 0xb9, 0xab, 0xac, 0xb0, 0xac, 0xad,
206 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
207 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
208 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
209 0xac, 0xa6, 0xa2, 0xa5, 0xad, 0xb0, 0xac, 0xa6,
210 0xb1, 0xaa, 0x9d, 0x99, 0xa5, 0xad, 0xaa, 0xa7,
211 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
212 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
213 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
214 0x97, 0xa2, 0xa5, 0x9b, 0x93, 0x94, 0x97, 0x96,
215 0x8c, 0x84, 0x7c, 0x76, 0x73, 0x6f, 0x69, 0x63,
216 0x68, 0x6e, 0x79, 0x87, 0x94, 0x9e, 0xa6, 0xa9,
217 0xaa, 0xac, 0xaf, 0xb3, 0xb5, 0xb6, 0xb7, 0xb6,
218 0xaa, 0xab, 0x98, 0x90, 0xa3, 0xab, 0xa5, 0xa7,
219 0x9e, 0x91, 0x82, 0x7a, 0x85, 0xa2, 0xbb, 0xc0,
220 0xba, 0x79, 0x34, 0x26, 0x35, 0x53, 0x73, 0x75,
221 0x82, 0x83, 0x87, 0x8b, 0x89, 0x7d, 0x69, 0x59,
222 0x27, 0x1c, 0x0f, 0x0c, 0x17, 0x29, 0x39, 0x41,
223 0x3e, 0x3a, 0x3c, 0x39, 0x2d, 0x25, 0x21, 0x18,
224 0x2b, 0x29, 0x2e, 0x42, 0x60, 0x7b, 0x89, 0x8d,
225 0xae, 0x89, 0x6b, 0x7a, 0xab, 0xd3, 0xd9, 0xce,
226 0x92, 0x7e, 0x99, 0xba, 0xb8, 0xb8, 0xa3, 0x6e,
227 0x59, 0x67, 0x79, 0x76, 0x5d, 0x4f, 0x4c, 0x46,
228 0x5d, 0x6c, 0x73, 0x86, 0x99, 0x7c, 0x48, 0x34,
229 0x4c, 0x6d, 0x82, 0x81, 0x7b, 0x6d, 0x63, 0x67,
230 0x8d, 0x87, 0x77, 0x91, 0xa9, 0xa0, 0x8a, 0x61,
231 0x39, 0x1f, 0x32, 0x64, 0x79, 0x6e, 0x59, 0x46,
232 0x54, 0x74, 0x9f, 0xb7, 0xb8, 0xb8, 0xb6, 0xac,
233 0xad, 0xb7, 0xba, 0xa8, 0x8b, 0x79, 0x7c, 0x86,
234 0x83, 0x83, 0x84, 0x85, 0x88, 0x8c, 0x90, 0x92,
235 0x95, 0xa7, 0xbe, 0xcb, 0xcb, 0xc3, 0xbb, 0xb7,
236 0x9e, 0xa8, 0xaf, 0xb7, 0xc6, 0xce, 0xba, 0x9d,
237 0x5f, 0x55, 0x54, 0x6a, 0x8c, 0x9d, 0x95, 0x85,
238 0x79, 0x68, 0x56, 0x53, 0x5f, 0x6a, 0x6d, 0x6b,
239 0x85, 0x7c, 0x6b, 0x5c, 0x59, 0x56, 0x45, 0x31,
240 0x5f, 0x67, 0x6e, 0x70, 0x6c, 0x69, 0x6a, 0x6d,
241 0x6a, 0x79, 0x76, 0x5c, 0x52, 0x64, 0x76, 0x7a,
242 0x6a, 0x63, 0x5d, 0x5f, 0x63, 0x62, 0x58, 0x4e,
243 0x3e, 0x3b, 0x37, 0x36, 0x37, 0x37, 0x34, 0x31,
244 0x3d, 0x3a, 0x3e, 0x53, 0x6d, 0x7c, 0x78, 0x6f,
245 0x67, 0x66, 0x5e, 0x58, 0x5b, 0x62, 0x5d, 0x52,
246 0x56, 0x57, 0x58, 0x57, 0x54, 0x50, 0x4b, 0x48,
247 0x4a, 0x4d, 0x4e, 0x45, 0x39, 0x30, 0x30, 0x34,
248 0x22, 0x2d, 0x23, 0x29, 0x30, 0x1c, 0x3d, 0x8f,
249 0xb2, 0xb3, 0xb0, 0xad, 0xad, 0xaf, 0xad, 0xaa,
250 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
251 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
252 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
253 0xa9, 0xad, 0xab, 0xa4, 0xa3, 0xa9, 0xa6, 0x9e,
254 0xa4, 0xa4, 0xa1, 0xa3, 0xa8, 0xa8, 0xa8, 0xb0,
255 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
256 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
257 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
258 0xa6, 0xa3, 0xa0, 0x9f, 0xa2, 0xa4, 0xa0, 0x9b,
259 0x89, 0x90, 0x9d, 0xab, 0xb5, 0xb6, 0xb1, 0xab,
260 0xa7, 0xa6, 0xa3, 0x9c, 0x92, 0x86, 0x7c, 0x75,
261 0x78, 0x79, 0x7b, 0x7c, 0x7c, 0x7a, 0x79, 0x78,
262 0x8d, 0x95, 0x87, 0x79, 0x89, 0xa3, 0xae, 0xb2,
263 0x9e, 0x86, 0x88, 0x95, 0x97, 0x98, 0x7a, 0x42,
264 0x12, 0x2d, 0x4a, 0x85, 0xba, 0xbd, 0xac, 0x9f,
265 0xaf, 0x8c, 0x58, 0x2a, 0x18, 0x23, 0x3e, 0x54,
266 0x6e, 0x8b, 0xaa, 0xb5, 0xb5, 0xbb, 0xca, 0xd6,
267 0xca, 0xc1, 0xc3, 0xcc, 0xce, 0xc9, 0xb6, 0x9f,
268 0x88, 0x77, 0x61, 0x52, 0x48, 0x3d, 0x2e, 0x22,
269 0x24, 0x32, 0x51, 0x7d, 0xa2, 0xa9, 0x94, 0x7d,
270 0x9d, 0x8d, 0x93, 0x93, 0x7b, 0x75, 0x75, 0x5f,
271 0x33, 0x3f, 0x2c, 0x2d, 0x61, 0x7e, 0x74, 0x73,
272 0x52, 0x5f, 0x82, 0x7e, 0x48, 0x3f, 0x78, 0xa7,
273 0xa4, 0x94, 0x83, 0x6a, 0x52, 0x5a, 0x78, 0x8a,
274 0x85, 0x84, 0x7a, 0x7f, 0x83, 0x82, 0x86, 0x7f,
275 0x6a, 0x4c, 0x39, 0x3f, 0x51, 0x69, 0x79, 0x7a,
276 0x71, 0x6e, 0x77, 0x81, 0x80, 0x78, 0x69, 0x57,
277 0x4a, 0x4a, 0x54, 0x70, 0x94, 0xae, 0xb7, 0xb6,
278 0xb1, 0xb0, 0xb0, 0xb1, 0xb4, 0xb9, 0xbe, 0xc0,
279 0xba, 0xc3, 0xbe, 0x9f, 0x7a, 0x71, 0x8b, 0xab,
280 0xc3, 0xc2, 0xb6, 0xa7, 0xa4, 0xa6, 0x97, 0x80,
281 0x6c, 0x6f, 0x64, 0x49, 0x37, 0x4c, 0x85, 0xb8,
282 0xc4, 0xae, 0x91, 0x7b, 0x6f, 0x68, 0x5f, 0x58,
283 0x4a, 0x2c, 0x26, 0x3f, 0x46, 0x33, 0x32, 0x46,
284 0x57, 0x62, 0x72, 0x7e, 0x83, 0x82, 0x7e, 0x7b,
285 0x89, 0x92, 0x8f, 0x7a, 0x68, 0x60, 0x59, 0x51,
286 0x2c, 0x3f, 0x48, 0x37, 0x22, 0x2c, 0x59, 0x86,
287 0x71, 0x57, 0x42, 0x4b, 0x70, 0x96, 0xa7, 0xa9,
288 0x7d, 0x7d, 0x7e, 0x7d, 0x7b, 0x79, 0x76, 0x74,
289 0x73, 0x5c, 0x4a, 0x4d, 0x57, 0x5a, 0x58, 0x57,
290 0x53, 0x51, 0x4e, 0x4c, 0x4b, 0x4c, 0x4d, 0x4e,
291 0x50, 0x45, 0x37, 0x2d, 0x2a, 0x2a, 0x2c, 0x2c,
292 0x20, 0x27, 0x28, 0x26, 0x1d, 0x41, 0x91, 0xb8,
293 0xad, 0xa5, 0xab, 0xb2, 0xac, 0xaa, 0xac, 0xa6,
294 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
295 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
296 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
297 0xae, 0xa4, 0xa5, 0xaf, 0xb0, 0xa8, 0xa8, 0xb1,
298 0xa9, 0xa6, 0x9e, 0xa4, 0xb0, 0xa9, 0xa0, 0xa7,
299 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
300 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
301 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
302 0xa8, 0x9c, 0x9a, 0xa1, 0x9b, 0x8b, 0x86, 0x8f,
303 0xa6, 0xa6, 0xa6, 0xa3, 0xa0, 0xa0, 0xa3, 0xa6,
304 0xad, 0xa9, 0xa4, 0xa1, 0xa3, 0xa9, 0xb2, 0xb7,
305 0xaf, 0xaf, 0xad, 0xa9, 0xa4, 0x9e, 0x99, 0x96,
306 0x88, 0x75, 0x70, 0x73, 0x6f, 0x72, 0x81, 0x89,
307 0x94, 0xb7, 0xbf, 0x8e, 0x4b, 0x27, 0x31, 0x4d,
308 0x85, 0xa9, 0xb4, 0xb0, 0x99, 0x69, 0x48, 0x3d,
309 0x37, 0x49, 0x6b, 0x95, 0xb8, 0xca, 0xcc, 0xc7,
310 0xc3, 0xc4, 0xbd, 0xb0, 0xa9, 0xab, 0xac, 0xa9,
311 0xa4, 0xa0, 0xa4, 0xa9, 0xa9, 0xab, 0xab, 0xa4,
312 0x90, 0x8d, 0x8d, 0x96, 0xa2, 0xa6, 0xa0, 0x97,
313 0x7e, 0x7c, 0x67, 0x3d, 0x1d, 0x28, 0x5d, 0x8f,
314 0x6f, 0x6e, 0x75, 0x84, 0x8d, 0x82, 0x64, 0x4a,
315 0x3e, 0x35, 0x33, 0x38, 0x35, 0x27, 0x26, 0x33,
316 0x73, 0x6c, 0x3e, 0x21, 0x3d, 0x62, 0x79, 0x90,
317 0x80, 0x75, 0x6c, 0x5e, 0x51, 0x5e, 0x74, 0x7c,
318 0x7d, 0x81, 0x8b, 0x7e, 0x71, 0x73, 0x7a, 0x8d,
319 0x9c, 0x87, 0x60, 0x4c, 0x5e, 0x7a, 0x89, 0x8f,
320 0x92, 0x8b, 0x92, 0x97, 0x82, 0x6a, 0x6a, 0x74,
321 0x85, 0x85, 0x82, 0x7e, 0x79, 0x72, 0x6c, 0x68,
322 0x73, 0x71, 0x6d, 0x6a, 0x67, 0x64, 0x63, 0x63,
323 0x6b, 0x64, 0x61, 0x6a, 0x76, 0x79, 0x6f, 0x63,
324 0x58, 0x55, 0x46, 0x38, 0x42, 0x5c, 0x6a, 0x68,
325 0x6f, 0x75, 0x79, 0x76, 0x71, 0x73, 0x7f, 0x8b,
326 0x7c, 0x6e, 0x5c, 0x51, 0x4e, 0x51, 0x54, 0x55,
327 0x57, 0x44, 0x47, 0x5e, 0x5d, 0x4b, 0x57, 0x79,
328 0xb3, 0xb0, 0xab, 0xa5, 0x9d, 0x94, 0x8a, 0x83,
329 0x8a, 0x73, 0x5e, 0x58, 0x52, 0x48, 0x45, 0x49,
330 0x5d, 0x4f, 0x3f, 0x3b, 0x43, 0x4b, 0x4b, 0x48,
331 0x47, 0x58, 0x74, 0x8e, 0x92, 0x77, 0x48, 0x23,
332 0x44, 0x46, 0x4a, 0x51, 0x5b, 0x66, 0x70, 0x75,
333 0x5a, 0x56, 0x57, 0x5d, 0x5d, 0x5a, 0x5f, 0x6a,
334 0x66, 0x66, 0x66, 0x61, 0x58, 0x4c, 0x40, 0x39,
335 0x34, 0x30, 0x2c, 0x2b, 0x2c, 0x2c, 0x29, 0x27,
336 0x26, 0x1d, 0x30, 0x1c, 0x3c, 0x9c, 0xb4, 0xa9,
337 0xb0, 0xa7, 0xae, 0xb2, 0xa6, 0xa8, 0xae, 0xa6,
338 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
339 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
340 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
341 0xa3, 0xac, 0xb0, 0xac, 0xa8, 0xaa, 0xaf, 0xb1,
342 0xaf, 0xa4, 0xa3, 0xaa, 0xac, 0xa9, 0xaa, 0xab,
343 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
344 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
345 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
346 0x91, 0x9d, 0xa0, 0x93, 0x85, 0x88, 0x99, 0xa8,
347 0xa1, 0xa5, 0xa7, 0xa5, 0xa1, 0x9f, 0xa2, 0xa6,
348 0x98, 0x97, 0x97, 0x99, 0xa0, 0xa9, 0xb2, 0xb8,
349 0xb2, 0xb3, 0xb4, 0xb5, 0xb5, 0xb4, 0xb2, 0xb1,
350 0xbd, 0x9f, 0x9c, 0xa8, 0xa2, 0x92, 0x7a, 0x5d,
351 0x5e, 0x38, 0x1b, 0x1b, 0x3f, 0x82, 0xb5, 0xbe,
352 0x90, 0x80, 0x62, 0x48, 0x35, 0x49, 0x82, 0x9f,
353 0xc5, 0xc6, 0xc4, 0xbd, 0xb4, 0xac, 0xa9, 0xa8,
354 0xa0, 0xa7, 0xa6, 0x9e, 0x9c, 0xa4, 0xa7, 0xa4,
355 0x9e, 0x9e, 0xa6, 0xa9, 0xa3, 0xa2, 0xa6, 0xa3,
356 0x88, 0x85, 0x85, 0x8e, 0x99, 0x9b, 0x93, 0x8a,
357 0x9a, 0x9e, 0xa1, 0x99, 0x84, 0x65, 0x47, 0x33,
358 0x36, 0x53, 0x69, 0x6d, 0x64, 0x50, 0x44, 0x49,
359 0x3e, 0x37, 0x2c, 0x27, 0x2f, 0x42, 0x60, 0x7a,
360 0x4c, 0x2d, 0x34, 0x49, 0x3d, 0x34, 0x45, 0x54,
361 0x67, 0x6f, 0x62, 0x51, 0x5b, 0x6c, 0x71, 0x73,
362 0x78, 0x75, 0x81, 0x75, 0x6d, 0x73, 0x6e, 0x7c,
363 0x79, 0x68, 0x4d, 0x50, 0x77, 0x8e, 0x8f, 0x91,
364 0x81, 0x8e, 0x8a, 0x6c, 0x5d, 0x75, 0x8e, 0x8c,
365 0x85, 0x88, 0x8b, 0x8d, 0x8b, 0x89, 0x86, 0x85,
366 0x85, 0x86, 0x86, 0x85, 0x82, 0x7e, 0x79, 0x76,
367 0x70, 0x75, 0x79, 0x77, 0x70, 0x6b, 0x6b, 0x6e,
368 0x60, 0x6b, 0x6e, 0x68, 0x69, 0x71, 0x6e, 0x61,
369 0x6e, 0x68, 0x67, 0x73, 0x82, 0x82, 0x6f, 0x5b,
370 0x69, 0x5e, 0x4e, 0x41, 0x3b, 0x3c, 0x41, 0x45,
371 0x5b, 0x68, 0x6d, 0x66, 0x62, 0x6f, 0x81, 0x8c,
372 0x82, 0x77, 0x6c, 0x69, 0x71, 0x7d, 0x85, 0x89,
373 0x6c, 0x50, 0x42, 0x4f, 0x5a, 0x57, 0x58, 0x62,
374 0x32, 0x30, 0x31, 0x38, 0x44, 0x4d, 0x50, 0x50,
375 0x46, 0x50, 0x53, 0x45, 0x32, 0x30, 0x43, 0x59,
376 0x2b, 0x45, 0x62, 0x69, 0x59, 0x41, 0x31, 0x2b,
377 0x3d, 0x4a, 0x54, 0x57, 0x59, 0x5e, 0x5c, 0x56,
378 0x58, 0x5b, 0x5d, 0x5c, 0x55, 0x49, 0x3d, 0x35,
379 0x25, 0x2c, 0x31, 0x2e, 0x25, 0x20, 0x22, 0x26,
380 0x23, 0x20, 0x27, 0x37, 0x81, 0xbb, 0xad, 0xb0,
381 0xab, 0xa5, 0xaa, 0xae, 0xa8, 0xac, 0xaf, 0xa4,
382 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
383 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
384 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
385 0xac, 0xac, 0xa5, 0x9e, 0xa7, 0xb2, 0xab, 0x99,
386 0x8e, 0x7d, 0x88, 0x9a, 0x9a, 0xa7, 0xb3, 0xa6,
387 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
388 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
389 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
390 0x97, 0x9a, 0x91, 0x82, 0x87, 0x9d, 0xa6, 0x9f,
391 0xa3, 0xa1, 0x9f, 0x9d, 0x9d, 0x9f, 0xa3, 0xa7,
392 0xac, 0xae, 0xb0, 0xab, 0x9d, 0x89, 0x75, 0x68,
393 0x68, 0x65, 0x61, 0x62, 0x69, 0x76, 0x84, 0x8d,
394 0x9f, 0x9f, 0xa9, 0xaf, 0x9b, 0x71, 0x44, 0x26,
395 0x20, 0x2b, 0x73, 0xb5, 0xc1, 0xc5, 0xa8, 0x62,
396 0x51, 0x64, 0x59, 0x6b, 0xa2, 0xbe, 0xbe, 0xb8,
397 0xa6, 0xa6, 0xa4, 0xa2, 0xa1, 0xa3, 0xa5, 0xa7,
398 0xa5, 0xa7, 0x9f, 0x92, 0x93, 0xa2, 0xaa, 0xa7,
399 0x9b, 0x98, 0x9d, 0xa2, 0xa1, 0xa6, 0xab, 0xa8,
400 0x92, 0x85, 0x76, 0x6f, 0x71, 0x71, 0x6c, 0x65,
401 0x75, 0x82, 0x91, 0x95, 0x89, 0x72, 0x5a, 0x4c,
402 0x36, 0x36, 0x41, 0x48, 0x42, 0x3c, 0x34, 0x26,
403 0x1f, 0x38, 0x24, 0x32, 0x80, 0x87, 0x44, 0x24,
404 0x1a, 0x37, 0x3c, 0x2f, 0x2d, 0x2e, 0x2f, 0x36,
405 0x45, 0x5a, 0x5f, 0x58, 0x5c, 0x61, 0x63, 0x69,
406 0x53, 0x4f, 0x50, 0x53, 0x5b, 0x65, 0x67, 0x69,
407 0x71, 0x5e, 0x4f, 0x59, 0x73, 0x84, 0x87, 0x87,
408 0x80, 0x68, 0x6b, 0x84, 0x87, 0x7a, 0x7b, 0x85,
409 0x81, 0x83, 0x86, 0x8a, 0x8e, 0x8d, 0x89, 0x85,
410 0x84, 0x89, 0x90, 0x95, 0x96, 0x92, 0x8c, 0x88,
411 0x7e, 0x6f, 0x63, 0x67, 0x76, 0x7e, 0x78, 0x6e,
412 0x6f, 0x79, 0x79, 0x6b, 0x65, 0x69, 0x65, 0x5a,
413 0x71, 0x7b, 0x86, 0x8b, 0x87, 0x7f, 0x78, 0x75,
414 0x7e, 0x73, 0x61, 0x4c, 0x3d, 0x38, 0x3b, 0x3f,
415 0x4c, 0x5c, 0x5a, 0x4b, 0x51, 0x6d, 0x7c, 0x76,
416 0x7a, 0x7b, 0x80, 0x8c, 0x96, 0x94, 0x88, 0x7b,
417 0x67, 0x70, 0x81, 0x8f, 0x8c, 0x77, 0x5d, 0x4d,
418 0x3b, 0x45, 0x4e, 0x4c, 0x40, 0x34, 0x2e, 0x2e,
419 0x34, 0x38, 0x41, 0x4d, 0x52, 0x4b, 0x3a, 0x2c,
420 0x48, 0x43, 0x3f, 0x40, 0x45, 0x4b, 0x50, 0x52,
421 0x50, 0x4c, 0x41, 0x3b, 0x43, 0x51, 0x53, 0x4c,
422 0x59, 0x51, 0x45, 0x3a, 0x32, 0x30, 0x31, 0x33,
423 0x36, 0x2c, 0x22, 0x20, 0x23, 0x25, 0x22, 0x1d,
424 0x24, 0x20, 0x48, 0x80, 0x99, 0xa6, 0xb3, 0xb6,
425 0xa2, 0xa0, 0xa5, 0xad, 0xad, 0xac, 0xac, 0xaa,
426 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
427 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
428 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
429 0xa9, 0xa7, 0xad, 0xad, 0x92, 0x74, 0x7a, 0x95,
430 0x99, 0x9d, 0x9b, 0x8e, 0x84, 0x8a, 0x9b, 0xa9,
431 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
432 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
433 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
434 0x8b, 0x7f, 0x81, 0x95, 0xa5, 0xa5, 0xa2, 0xa4,
435 0xa3, 0xa3, 0xa5, 0xa8, 0xa8, 0xa2, 0x96, 0x8d,
436 0x5c, 0x56, 0x4f, 0x4d, 0x55, 0x66, 0x78, 0x84,
437 0x8f, 0x90, 0x90, 0x8e, 0x86, 0x7b, 0x70, 0x69,
438 0x6a, 0x73, 0x75, 0x68, 0x42, 0x1e, 0x41, 0x8e,
439 0x9a, 0x98, 0xa1, 0xa8, 0xa7, 0xaa, 0xa0, 0x86,
440 0x9d, 0x87, 0x80, 0xa5, 0xba, 0xac, 0xa6, 0xa4,
441 0xa5, 0xa5, 0xa5, 0xa4, 0xa3, 0xa3, 0xa4, 0xa6,
442 0xa4, 0xa2, 0x97, 0x8c, 0x93, 0xa5, 0xa8, 0x9f,
443 0xa2, 0xa3, 0xaa, 0xac, 0xa3, 0xa1, 0xa3, 0xa0,
444 0x8d, 0x76, 0x57, 0x43, 0x3e, 0x40, 0x40, 0x3e,
445 0x47, 0x43, 0x42, 0x4a, 0x55, 0x57, 0x4e, 0x43,
446 0x38, 0x28, 0x36, 0x3a, 0x22, 0x27, 0x35, 0x25,
447 0x3a, 0x29, 0x84, 0xaa, 0x52, 0x55, 0x94, 0x7c,
448 0x89, 0x77, 0x6e, 0x69, 0x54, 0x39, 0x2c, 0x29,
449 0x2e, 0x22, 0x26, 0x33, 0x35, 0x38, 0x3f, 0x3e,
450 0x40, 0x45, 0x3e, 0x4c, 0x56, 0x58, 0x66, 0x61,
451 0x5e, 0x53, 0x51, 0x52, 0x53, 0x67, 0x7f, 0x84,
452 0x6d, 0x6d, 0x6f, 0x6e, 0x6f, 0x7a, 0x7f, 0x76,
453 0x69, 0x68, 0x6d, 0x78, 0x86, 0x8c, 0x88, 0x82,
454 0x7b, 0x81, 0x8a, 0x8f, 0x8e, 0x87, 0x7d, 0x76,
455 0x75, 0x7d, 0x86, 0x88, 0x84, 0x80, 0x80, 0x82,
456 0x61, 0x71, 0x78, 0x72, 0x73, 0x7c, 0x7e, 0x76,
457 0x6f, 0x80, 0x8d, 0x85, 0x71, 0x6a, 0x79, 0x8b,
458 0x7b, 0x72, 0x62, 0x50, 0x42, 0x3e, 0x43, 0x49,
459 0x3c, 0x37, 0x34, 0x40, 0x5a, 0x75, 0x84, 0x87,
460 0x87, 0x82, 0x7f, 0x84, 0x89, 0x85, 0x77, 0x69,
461 0x62, 0x76, 0x7e, 0x6d, 0x60, 0x60, 0x5e, 0x55,
462 0x44, 0x49, 0x48, 0x3c, 0x2d, 0x2c, 0x3a, 0x4a,
463 0x52, 0x50, 0x49, 0x3e, 0x35, 0x36, 0x41, 0x4b,
464 0x3d, 0x4a, 0x54, 0x4e, 0x3f, 0x39, 0x43, 0x51,
465 0x51, 0x44, 0x3a, 0x37, 0x35, 0x31, 0x36, 0x3f,
466 0x39, 0x3a, 0x3c, 0x3b, 0x38, 0x34, 0x2e, 0x2b,
467 0x25, 0x26, 0x26, 0x23, 0x21, 0x22, 0x26, 0x2a,
468 0x1e, 0x36, 0x8c, 0x9f, 0x9c, 0xae, 0xa0, 0xab,
469 0xab, 0xaa, 0xab, 0xaf, 0xab, 0xa4, 0xaa, 0xba,
470 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
471 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
472 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
473 0xa1, 0xa7, 0xa9, 0xa7, 0xad, 0xb9, 0xbb, 0xb3,
474 0xb0, 0x8e, 0x41, 0x36, 0x89, 0xb6, 0xa7, 0xa6,
475 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
476 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
477 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
478 0x65, 0x7d, 0x9b, 0xab, 0xaa, 0xa4, 0xa1, 0xa3,
479 0xa2, 0x9a, 0x88, 0x6f, 0x5b, 0x54, 0x5c, 0x66,
480 0x82, 0x9e, 0xac, 0xb3, 0xbc, 0xb3, 0xb0, 0xc3,
481 0xb0, 0xac, 0xb7, 0xb2, 0xa6, 0xbf, 0xc1, 0x94,
482 0x4e, 0x4c, 0x53, 0x57, 0x44, 0x5b, 0xa5, 0xc8,
483 0xb9, 0xab, 0xa2, 0x8f, 0x8d, 0x84, 0x6f, 0x83,
484 0x97, 0x8a, 0x91, 0xa2, 0xa6, 0xa7, 0xa6, 0x9d,
485 0xa6, 0xa5, 0xa4, 0xa2, 0xa1, 0x9f, 0x9e, 0x9d,
486 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2,
487 0xa1, 0xaa, 0x99, 0xa8, 0xab, 0xa1, 0xa9, 0x8c,
488 0xa8, 0xaf, 0xa2, 0x6b, 0x35, 0x32, 0x40, 0x39,
489 0x30, 0x32, 0x33, 0x31, 0x30, 0x34, 0x3e, 0x46,
490 0x43, 0x40, 0x3b, 0x35, 0x31, 0x3e, 0x6d, 0xa2,
491 0xc2, 0xb3, 0x77, 0x50, 0x84, 0xc4, 0xb3, 0x7d,
492 0x99, 0xa7, 0x93, 0xab, 0xcc, 0xc0, 0xb5, 0xa6,
493 0x77, 0x71, 0x64, 0x4f, 0x36, 0x22, 0x18, 0x15,
494 0x25, 0x28, 0x2f, 0x35, 0x33, 0x30, 0x36, 0x3f,
495 0x45, 0x46, 0x4f, 0x5b, 0x5e, 0x56, 0x50, 0x4f,
496 0x4a, 0x53, 0x5a, 0x5b, 0x5d, 0x64, 0x69, 0x69,
497 0x5a, 0x60, 0x69, 0x72, 0x78, 0x7b, 0x7c, 0x7c,
498 0x83, 0x8b, 0x7b, 0x6d, 0x76, 0x74, 0x64, 0x5f,
499 0x74, 0x82, 0x81, 0x75, 0x70, 0x6f, 0x69, 0x62,
500 0x55, 0x62, 0x75, 0x84, 0x8a, 0x84, 0x79, 0x70,
501 0x7a, 0x7e, 0x83, 0x87, 0x89, 0x88, 0x85, 0x83,
502 0x7b, 0x7e, 0x7b, 0x6a, 0x51, 0x3f, 0x3a, 0x3c,
503 0x37, 0x38, 0x3e, 0x4b, 0x5c, 0x69, 0x6f, 0x70,
504 0x79, 0x82, 0x86, 0x7d, 0x6c, 0x64, 0x69, 0x72,
505 0x86, 0x87, 0x80, 0x6c, 0x52, 0x40, 0x3b, 0x3d,
506 0x35, 0x42, 0x41, 0x35, 0x3b, 0x5b, 0x78, 0x83,
507 0x63, 0x54, 0x43, 0x39, 0x3a, 0x3f, 0x42, 0x42,
508 0x3e, 0x39, 0x34, 0x33, 0x34, 0x34, 0x30, 0x2c,
509 0x2b, 0x30, 0x38, 0x3e, 0x40, 0x3f, 0x3c, 0x3a,
510 0x35, 0x34, 0x31, 0x2e, 0x2a, 0x27, 0x24, 0x23,
511 0x22, 0x23, 0x27, 0x24, 0x1d, 0x1e, 0x23, 0x20,
512 0x2f, 0x84, 0x97, 0x90, 0x9d, 0xa2, 0xaa, 0xaf,
513 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
514 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
515 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
516 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
517 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
518 0xa9, 0xa2, 0xa3, 0xac, 0xae, 0xa8, 0xa9, 0xb0,
519 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
520 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3, 0xa3,
521 0xa2, 0xa0, 0x9f, 0xa0, 0xa6, 0x94, 0x1b, 0x06,
522 0x7f, 0x89, 0x95, 0x99, 0x92, 0x83, 0x73, 0x6a,
523 0x4c, 0x5b, 0x6f, 0x82, 0x92, 0xa3, 0xb5, 0xc2,
524 0xb8, 0xa9, 0xa6, 0xad, 0xa9, 0x9e, 0xa0, 0xa8,
525 0x98, 0xa8, 0xa0, 0xa3, 0xb2, 0x8c, 0x52, 0x46,
526 0x51, 0x5b, 0x81, 0xa4, 0x83, 0x5d, 0x6f, 0x7c,
527 0x8b, 0x8f, 0xa0, 0xb2, 0xa7, 0x95, 0xa3, 0xb8,
528 0x99, 0x88, 0x8a, 0x9a, 0xa3, 0xaa, 0xaa, 0xa2,
529 0xa7, 0xa6, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1,
530 0x9e, 0x9f, 0xa0, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7,
531 0xa6, 0x9d, 0xa5, 0xaa, 0xa8, 0x9f, 0x91, 0x8f,
532 0xbc, 0xa7, 0x85, 0x8e, 0xa0, 0x6b, 0x42, 0x62,
533 0x3a, 0x5f, 0x59, 0x48, 0x4e, 0x42, 0x43, 0x6d,
534 0x72, 0x74, 0x7a, 0x87, 0xa8, 0xd5, 0xe3, 0xd1,
535 0x7e, 0x3a, 0x67, 0xbc, 0xba, 0xae, 0xa0, 0x6a,
536 0x88, 0x92, 0x7f, 0x74, 0x84, 0x9b, 0xb4, 0xc4,
537 0xc9, 0xcd, 0xcf, 0xcb, 0xc2, 0xba, 0xb6, 0xb6,
538 0xaa, 0x95, 0x6e, 0x4a, 0x3c, 0x3a, 0x2f, 0x1e,
539 0x20, 0x29, 0x2f, 0x31, 0x35, 0x3e, 0x40, 0x3d,
540 0x3c, 0x47, 0x4f, 0x4c, 0x49, 0x4f, 0x58, 0x5d,
541 0x5f, 0x62, 0x63, 0x61, 0x5f, 0x63, 0x6d, 0x76,
542 0x6e, 0x62, 0x65, 0x72, 0x6d, 0x5f, 0x64, 0x76,
543 0x68, 0x74, 0x76, 0x6f, 0x6e, 0x6f, 0x6a, 0x63,
544 0x6a, 0x69, 0x67, 0x67, 0x67, 0x69, 0x6a, 0x6c,
545 0x7d, 0x7f, 0x81, 0x81, 0x7f, 0x7a, 0x74, 0x71,
546 0x7f, 0x82, 0x83, 0x7c, 0x6f, 0x62, 0x5a, 0x57,
547 0x6a, 0x5d, 0x4d, 0x47, 0x4e, 0x5d, 0x6d, 0x75,
548 0x77, 0x79, 0x74, 0x69, 0x61, 0x6c, 0x87, 0x9f,
549 0xa5, 0x90, 0x71, 0x56, 0x4a, 0x4b, 0x52, 0x58,
550 0x48, 0x49, 0x51, 0x60, 0x69, 0x68, 0x62, 0x5e,
551 0x3f, 0x45, 0x53, 0x66, 0x77, 0x7b, 0x75, 0x6c,
552 0x4b, 0x4f, 0x51, 0x4b, 0x41, 0x3c, 0x3e, 0x43,
553 0x40, 0x42, 0x43, 0x41, 0x3d, 0x39, 0x38, 0x38,
554 0x37, 0x35, 0x32, 0x2d, 0x27, 0x23, 0x1f, 0x1d,
555 0x28, 0x1e, 0x20, 0x24, 0x1e, 0x1e, 0x21, 0x1c,
556 0x7f, 0xaa, 0xaf, 0x99, 0x97, 0xa6, 0xaf, 0xa8,
557 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
558 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
559 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
560 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
561 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
562 0xa1, 0x74, 0x68, 0x92, 0xb3, 0xab, 0x9f, 0xa4,
563 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
564 0xa6, 0xa6, 0xa6, 0xa5, 0xa4, 0xa4, 0xa3, 0xa3,
565 0xa2, 0xa0, 0x9f, 0xa0, 0xa7, 0x95, 0x1b, 0x06,
566 0x74, 0x6c, 0x60, 0x59, 0x5f, 0x73, 0x8c, 0x9e,
567 0xad, 0xb3, 0xb7, 0xb5, 0xaf, 0xa9, 0xa9, 0xab,
568 0xa1, 0xa8, 0xae, 0xa9, 0xa1, 0xa2, 0xa3, 0xa0,
569 0x9c, 0xae, 0xaf, 0x81, 0x4a, 0x4a, 0x81, 0xb1,
570 0x78, 0xa3, 0xbd, 0xae, 0x8a, 0x89, 0x97, 0x7e,
571 0x6c, 0x6e, 0x7a, 0x9d, 0x9d, 0x94, 0xa7, 0x9c,
572 0x8f, 0x90, 0x9b, 0xa4, 0xa1, 0xa1, 0xa7, 0xab,
573 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
574 0x97, 0x99, 0x9c, 0xa1, 0xa5, 0xaa, 0xad, 0xaf,
575 0xaa, 0xa2, 0xae, 0xa7, 0xa3, 0xa5, 0x98, 0xa3,
576 0x95, 0x7e, 0x9c, 0xa2, 0x77, 0x8c, 0xb6, 0xa2,
577 0x81, 0x9f, 0x88, 0x90, 0xcf, 0xc8, 0x9c, 0xab,
578 0xb9, 0xbb, 0xb8, 0xac, 0x9a, 0x7c, 0x4b, 0x1c,
579 0x46, 0xa0, 0xca, 0xb4, 0xab, 0xaf, 0xa1, 0x93,
580 0x79, 0x98, 0xaf, 0x9f, 0x95, 0xa0, 0xa1, 0xa1,
581 0xab, 0xac, 0xad, 0xad, 0xae, 0xb2, 0xb9, 0xbf,
582 0xc4, 0xc9, 0xce, 0xca, 0xbd, 0xaf, 0xaa, 0xac,
583 0xa0, 0x89, 0x60, 0x39, 0x28, 0x2a, 0x2f, 0x2e,
584 0x2e, 0x31, 0x32, 0x31, 0x32, 0x34, 0x2e, 0x25,
585 0x2e, 0x33, 0x39, 0x3e, 0x42, 0x46, 0x4a, 0x4d,
586 0x46, 0x4d, 0x54, 0x58, 0x5d, 0x64, 0x62, 0x59,
587 0x64, 0x66, 0x65, 0x5e, 0x5c, 0x61, 0x63, 0x5f,
588 0x63, 0x65, 0x68, 0x6a, 0x6a, 0x69, 0x67, 0x65,
589 0x5f, 0x62, 0x66, 0x69, 0x6a, 0x68, 0x65, 0x62,
590 0x72, 0x73, 0x75, 0x77, 0x74, 0x68, 0x57, 0x4a,
591 0x45, 0x38, 0x32, 0x44, 0x66, 0x80, 0x85, 0x80,
592 0x7e, 0x7c, 0x72, 0x60, 0x54, 0x5b, 0x75, 0x8c,
593 0x8c, 0x81, 0x75, 0x72, 0x73, 0x6d, 0x5d, 0x4f,
594 0x67, 0x64, 0x71, 0x83, 0x7a, 0x57, 0x40, 0x3f,
595 0x3f, 0x5c, 0x77, 0x73, 0x57, 0x3d, 0x38, 0x3e,
596 0x46, 0x3e, 0x32, 0x2a, 0x2a, 0x30, 0x38, 0x3d,
597 0x3d, 0x35, 0x2b, 0x28, 0x2c, 0x30, 0x30, 0x2e,
598 0x2f, 0x2e, 0x2d, 0x2a, 0x28, 0x26, 0x24, 0x23,
599 0x23, 0x24, 0x1f, 0x24, 0x2a, 0x21, 0x30, 0x5b,
600 0xa7, 0xa9, 0xa9, 0x90, 0x89, 0xa7, 0xb0, 0x9f,
601 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
602 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
603 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
604 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
605 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
606 0xa7, 0xb0, 0xb4, 0xad, 0xa8, 0xaa, 0xae, 0xae,
607 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
608 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4,
609 0xa2, 0xa1, 0x9f, 0xa1, 0xa7, 0x95, 0x1b, 0x06,
610 0x74, 0x88, 0xa1, 0xb1, 0xb4, 0xb1, 0xb0, 0xb1,
611 0xaa, 0xab, 0xa9, 0xa5, 0x9f, 0x9e, 0xa2, 0xa6,
612 0x9e, 0xa9, 0xa7, 0xa2, 0xab, 0xad, 0xa1, 0x99,
613 0xb9, 0xb4, 0x72, 0x40, 0x71, 0xac, 0x98, 0x67,
614 0x79, 0x9b, 0xac, 0xa1, 0x8a, 0x92, 0xae, 0xa8,
615 0xa7, 0x8a, 0x67, 0x6c, 0x8a, 0xaa, 0xb2, 0x90,
616 0x9a, 0x94, 0x94, 0x9a, 0xa1, 0xa5, 0xa5, 0xa1,
617 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa7, 0xa7, 0xa7,
618 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa1,
619 0xa1, 0x9d, 0xa2, 0xae, 0xaf, 0x9f, 0x98, 0xa4,
620 0x7d, 0xb4, 0x81, 0x4d, 0x8e, 0xb6, 0x96, 0x8d,
621 0x53, 0x86, 0xa2, 0xaf, 0xbc, 0xa6, 0x91, 0xa1,
622 0xba, 0x9e, 0xa4, 0xd1, 0xb6, 0x4c, 0x3a, 0x92,
623 0xbf, 0xb8, 0xaa, 0x9d, 0xa1, 0xab, 0xa2, 0x8b,
624 0x95, 0xab, 0xb6, 0xa3, 0x91, 0x9d, 0xab, 0xa8,
625 0xa3, 0xa5, 0xa8, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8,
626 0xac, 0xa9, 0xac, 0xb3, 0xb1, 0xa9, 0xa8, 0xaf,
627 0xc6, 0xaf, 0xa4, 0xb6, 0xc9, 0xbd, 0x97, 0x76,
628 0x61, 0x5f, 0x59, 0x51, 0x4d, 0x49, 0x3e, 0x32,
629 0x1e, 0x19, 0x18, 0x20, 0x2c, 0x33, 0x30, 0x2b,
630 0x29, 0x2d, 0x2e, 0x31, 0x35, 0x37, 0x44, 0x5a,
631 0x58, 0x4c, 0x45, 0x45, 0x46, 0x4c, 0x4c, 0x40,
632 0x49, 0x4d, 0x52, 0x57, 0x5a, 0x5a, 0x58, 0x56,
633 0x59, 0x5c, 0x61, 0x66, 0x68, 0x67, 0x65, 0x64,
634 0x78, 0x75, 0x75, 0x7a, 0x7b, 0x6e, 0x54, 0x3f,
635 0x4b, 0x2e, 0x1c, 0x34, 0x69, 0x93, 0x9b, 0x91,
636 0x55, 0x62, 0x6f, 0x71, 0x6e, 0x71, 0x80, 0x8e,
637 0x9a, 0x89, 0x73, 0x63, 0x5c, 0x59, 0x56, 0x53,
638 0x71, 0x71, 0x71, 0x69, 0x57, 0x54, 0x70, 0x94,
639 0x77, 0x6a, 0x5b, 0x55, 0x55, 0x54, 0x4d, 0x45,
640 0x23, 0x2c, 0x3e, 0x58, 0x70, 0x7d, 0x7d, 0x79,
641 0x5c, 0x52, 0x44, 0x38, 0x33, 0x33, 0x36, 0x39,
642 0x3b, 0x39, 0x34, 0x2f, 0x29, 0x23, 0x1f, 0x1c,
643 0x21, 0x24, 0x26, 0x29, 0x21, 0x20, 0x54, 0x9f,
644 0xa2, 0x99, 0x9f, 0x90, 0x92, 0xb5, 0xb6, 0xa6,
645 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
646 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
647 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
648 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
649 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
650 0xa7, 0xab, 0xab, 0xa7, 0xa8, 0xac, 0xad, 0xa9,
651 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
652 0xa7, 0xa7, 0xa7, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4,
653 0xa3, 0xa1, 0xa0, 0xa1, 0xa8, 0x96, 0x1c, 0x07,
654 0xa1, 0xa7, 0xac, 0xab, 0xa5, 0xa2, 0xa3, 0xa7,
655 0x9d, 0xa0, 0xa3, 0xa4, 0xa4, 0xa4, 0xa6, 0xa8,
656 0xa3, 0x9c, 0xa7, 0xaa, 0x99, 0x9b, 0xac, 0xb0,
657 0xa6, 0x5f, 0x4e, 0x8d, 0xb0, 0x8f, 0x77, 0x83,
658 0x9b, 0xa3, 0xa8, 0xac, 0x95, 0x83, 0x9c, 0xaf,
659 0xac, 0xb2, 0xa9, 0x83, 0x74, 0x7c, 0x83, 0x97,
660 0xae, 0xa4, 0x98, 0x97, 0xa4, 0xac, 0xaa, 0xa5,
661 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
662 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
663 0xa5, 0xae, 0x8f, 0x5f, 0x60, 0x83, 0x91, 0x8b,
664 0x9d, 0x33, 0x54, 0xb5, 0xa7, 0x85, 0x92, 0x90,
665 0x77, 0x88, 0xb8, 0xc3, 0x9b, 0x91, 0xa3, 0x9f,
666 0xb4, 0xb2, 0xb0, 0x6f, 0x28, 0x5b, 0xb4, 0xbe,
667 0xb0, 0xa7, 0xb7, 0xad, 0x90, 0xa8, 0xaf, 0x75,
668 0x97, 0xa9, 0xa5, 0xa2, 0x93, 0x90, 0xac, 0xaa,
669 0xaa, 0xaa, 0xaa, 0xab, 0xab, 0xaa, 0xa8, 0xa6,
670 0xab, 0xae, 0xac, 0xa9, 0xad, 0xb0, 0xa4, 0x93,
671 0x69, 0x7e, 0x9f, 0xb7, 0xba, 0xb0, 0xad, 0xb2,
672 0x81, 0xa0, 0xc2, 0xd3, 0xd6, 0xd4, 0xd0, 0xcc,
673 0xc2, 0xbd, 0xb7, 0xb2, 0xa7, 0x92, 0x74, 0x5f,
674 0x37, 0x25, 0x22, 0x28, 0x2c, 0x37, 0x37, 0x23,
675 0x32, 0x2c, 0x35, 0x35, 0x26, 0x26, 0x33, 0x33,
676 0x36, 0x31, 0x2a, 0x28, 0x2c, 0x38, 0x45, 0x4e,
677 0x4e, 0x51, 0x55, 0x59, 0x5a, 0x58, 0x55, 0x53,
678 0x68, 0x67, 0x69, 0x71, 0x75, 0x6b, 0x54, 0x3f,
679 0x38, 0x46, 0x64, 0x88, 0x9a, 0x86, 0x55, 0x2c,
680 0x56, 0x68, 0x79, 0x79, 0x6b, 0x5c, 0x57, 0x59,
681 0x51, 0x53, 0x51, 0x4a, 0x42, 0x40, 0x47, 0x4e,
682 0x3e, 0x5e, 0x79, 0x79, 0x71, 0x72, 0x77, 0x78,
683 0x67, 0x5f, 0x4d, 0x36, 0x27, 0x2b, 0x3f, 0x51,
684 0x88, 0x93, 0x9e, 0xa0, 0x99, 0x8f, 0x88, 0x86,
685 0x7c, 0x78, 0x6a, 0x52, 0x38, 0x2b, 0x2f, 0x38,
686 0x35, 0x35, 0x33, 0x31, 0x2f, 0x2d, 0x2c, 0x2b,
687 0x25, 0x1f, 0x27, 0x26, 0x1e, 0x3e, 0x7a, 0x9d,
688 0x98, 0x99, 0xa0, 0x96, 0xa1, 0xb7, 0xae, 0xa9,
689 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
690 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
691 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
692 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
693 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
694 0xa9, 0xa7, 0xaa, 0xad, 0xa7, 0x9e, 0xa1, 0xab,
695 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
696 0xa8, 0xa8, 0xa7, 0xa7, 0xa6, 0xa5, 0xa5, 0xa5,
697 0xa3, 0xa2, 0xa1, 0xa2, 0xa8, 0x96, 0x1d, 0x08,
698 0xa4, 0xa2, 0xa1, 0xa4, 0xa7, 0xa8, 0xa5, 0xa1,
699 0xa2, 0xa3, 0xa4, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
700 0x9a, 0x96, 0xb0, 0xaa, 0x8c, 0xa7, 0xb8, 0x88,
701 0x45, 0x5d, 0xaa, 0xc5, 0x91, 0x88, 0x9e, 0x8d,
702 0x6d, 0x8c, 0x9e, 0xa5, 0x99, 0x8f, 0x9d, 0xa0,
703 0xa7, 0xa4, 0xa9, 0x9b, 0x92, 0x7a, 0x56, 0x67,
704 0xa2, 0xa4, 0x9c, 0x99, 0xa1, 0xa6, 0xa4, 0xa2,
705 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa3, 0xa3, 0xa3,
706 0xa9, 0xa8, 0xa7, 0xa6, 0xa4, 0xa3, 0xa2, 0xa1,
707 0xa5, 0xa0, 0xac, 0xaa, 0xa7, 0x8a, 0x5d, 0x64,
708 0x2c, 0x8f, 0x92, 0x6c, 0x99, 0xc1, 0xb7, 0xbb,
709 0xa5, 0x7c, 0x92, 0xa4, 0x8b, 0xa8, 0xcc, 0xad,
710 0xbe, 0x9f, 0x49, 0x3d, 0x90, 0xa9, 0x94, 0xaa,
711 0xa2, 0xa6, 0xa5, 0xad, 0xbd, 0xb5, 0x99, 0x88,
712 0x99, 0xb0, 0xa9, 0xb0, 0xa1, 0x8b, 0xa5, 0xab,
713 0xaf, 0xaa, 0xa5, 0xa4, 0xa6, 0xa9, 0xaa, 0xaa,
714 0xa9, 0xae, 0xaf, 0xab, 0xa5, 0xa3, 0xa6, 0xa8,
715 0xba, 0xaa, 0x97, 0x94, 0xa4, 0xaf, 0xa2, 0x8c,
716 0x91, 0xa0, 0xad, 0xad, 0xaa, 0xad, 0xb2, 0xb5,
717 0xbc, 0xbf, 0xc2, 0xc5, 0xc6, 0xc8, 0xcb, 0xce,
718 0xd4, 0xd1, 0xd4, 0xa0, 0x53, 0x60, 0x9b, 0xa5,
719 0x6c, 0x40, 0x2a, 0x2c, 0x2b, 0x34, 0x36, 0x23,
720 0x21, 0x22, 0x23, 0x25, 0x28, 0x2b, 0x2e, 0x2f,
721 0x2f, 0x34, 0x3c, 0x44, 0x4b, 0x4e, 0x4f, 0x4f,
722 0x45, 0x49, 0x52, 0x5d, 0x63, 0x60, 0x56, 0x4d,
723 0x4c, 0x59, 0x64, 0x5f, 0x4d, 0x41, 0x42, 0x49,
724 0x41, 0x54, 0x6a, 0x74, 0x71, 0x6f, 0x76, 0x7e,
725 0x53, 0x52, 0x4c, 0x41, 0x3b, 0x46, 0x5f, 0x75,
726 0x50, 0x54, 0x4e, 0x43, 0x4d, 0x5f, 0x5a, 0x46,
727 0x4b, 0x36, 0x26, 0x35, 0x5b, 0x79, 0x7f, 0x79,
728 0x9d, 0xa0, 0xa2, 0x9f, 0x96, 0x8a, 0x7f, 0x78,
729 0x63, 0x59, 0x4b, 0x3e, 0x36, 0x31, 0x2b, 0x28,
730 0x41, 0x3f, 0x3b, 0x36, 0x30, 0x2b, 0x27, 0x24,
731 0x1b, 0x2d, 0x1f, 0x20, 0x58, 0x87, 0x8d, 0x8e,
732 0x91, 0x9d, 0x9b, 0x94, 0xa3, 0xab, 0xa2, 0xa8,
733 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
734 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
735 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
736 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
737 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
738 0xa5, 0xab, 0xa9, 0xa4, 0xa8, 0xb2, 0xb1, 0xa7,
739 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
740 0xa8, 0xa8, 0xa8, 0xa7, 0xa7, 0xa6, 0xa6, 0xa5,
741 0xa4, 0xa2, 0xa1, 0xa3, 0xa9, 0x97, 0x1d, 0x08,
742 0xaa, 0xa5, 0x9f, 0x9f, 0xa2, 0xa4, 0xa3, 0xa0,
743 0xa5, 0xa3, 0xa0, 0x9e, 0x9e, 0xa0, 0xa1, 0xa2,
744 0xaf, 0xa7, 0xa0, 0x9d, 0xa5, 0xb0, 0x8a, 0x47,
745 0x75, 0xb4, 0xbd, 0x93, 0x80, 0x80, 0x82, 0x8d,
746 0x88, 0x95, 0x93, 0x94, 0x89, 0x81, 0x9b, 0xb1,
747 0xab, 0x9e, 0x9e, 0xa8, 0xa6, 0x93, 0x87, 0x91,
748 0x75, 0x76, 0x6e, 0x75, 0x94, 0xab, 0xad, 0xad,
749 0xa9, 0xa8, 0xa7, 0xa6, 0xa5, 0xa4, 0xa4, 0xa3,
750 0xa1, 0xa2, 0xa3, 0xa5, 0xa6, 0xa8, 0xa9, 0xa9,
751 0xad, 0xa9, 0xa9, 0xac, 0xa6, 0x7f, 0x60, 0x72,
752 0xaf, 0x7d, 0x88, 0xaa, 0xa3, 0xa7, 0xb9, 0xae,
753 0x99, 0x82, 0x90, 0x95, 0x7e, 0x8d, 0xa9, 0x9c,
754 0x3e, 0x14, 0x57, 0xbd, 0xc0, 0xa7, 0xad, 0xaa,
755 0xaa, 0xa5, 0xa4, 0x9e, 0x9e, 0xae, 0xa5, 0x7e,
756 0x94, 0xac, 0xac, 0xaf, 0xa8, 0x94, 0x9b, 0xab,
757 0xac, 0xaa, 0xab, 0xae, 0xb1, 0xb0, 0xaa, 0xa5,
758 0xaf, 0xa9, 0xa9, 0xb0, 0xaf, 0xa6, 0xa4, 0xa9,
759 0xab, 0xb4, 0xb3, 0xa1, 0x91, 0x92, 0x9e, 0xa7,
760 0xaf, 0xb0, 0xad, 0xa8, 0xaa, 0xaf, 0xaf, 0xaa,
761 0xa6, 0xac, 0xb0, 0xae, 0xa9, 0xa6, 0xa8, 0xab,
762 0xb3, 0xa7, 0xb3, 0xb5, 0x89, 0x68, 0x85, 0xb7,
763 0x94, 0x3b, 0x08, 0x21, 0x5e, 0xaa, 0xd2, 0xc7,
764 0xc9, 0xc8, 0xc0, 0xae, 0x8e, 0x67, 0x42, 0x2c,
765 0x27, 0x29, 0x2d, 0x2f, 0x2f, 0x2c, 0x28, 0x26,
766 0x3b, 0x44, 0x4f, 0x55, 0x56, 0x56, 0x58, 0x5a,
767 0x4d, 0x4d, 0x44, 0x32, 0x27, 0x36, 0x5b, 0x7c,
768 0x9c, 0xa4, 0xa5, 0x94, 0x76, 0x5d, 0x52, 0x52,
769 0x3e, 0x42, 0x46, 0x45, 0x3f, 0x37, 0x30, 0x2d,
770 0x41, 0x3a, 0x39, 0x48, 0x60, 0x67, 0x53, 0x3a,
771 0x38, 0x47, 0x5b, 0x6b, 0x75, 0x7d, 0x88, 0x90,
772 0x9c, 0x92, 0x86, 0x81, 0x81, 0x80, 0x7a, 0x74,
773 0x69, 0x5f, 0x56, 0x59, 0x60, 0x60, 0x56, 0x4a,
774 0x39, 0x38, 0x36, 0x33, 0x30, 0x2e, 0x2c, 0x2b,
775 0x16, 0x2f, 0x21, 0x3c, 0x94, 0xaa, 0x8b, 0x90,
776 0x95, 0xa4, 0x9b, 0x9b, 0xa8, 0xa7, 0xa7, 0xad,
777 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
778 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
779 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
780 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
781 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
782 0xaa, 0xa8, 0xa7, 0xaa, 0xab, 0xa9, 0xa9, 0xaa,
783 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
784 0xa9, 0xa9, 0xa8, 0xa8, 0xa7, 0xa6, 0xa6, 0xa6,
785 0xa4, 0xa3, 0xa2, 0xa3, 0xa9, 0x97, 0x1e, 0x09,
786 0xa0, 0xa1, 0xa2, 0xa1, 0xa0, 0xa1, 0xa3, 0xa5,
787 0xa9, 0xa8, 0xa6, 0xa6, 0xa7, 0xa6, 0xa4, 0xa2,
788 0x9e, 0xa7, 0x97, 0xa5, 0xb5, 0x73, 0x4e, 0x8a,
789 0xb4, 0xb3, 0x9a, 0x82, 0x8d, 0xa5, 0xa8, 0x9e,
790 0x9e, 0xad, 0xa9, 0xa3, 0x93, 0x84, 0x94, 0xa2,
791 0xa6, 0x9f, 0x97, 0xa4, 0x99, 0x92, 0xa9, 0xa5,
792 0x9d, 0x9b, 0x83, 0x6d, 0x73, 0x83, 0x92, 0xa1,
793 0xad, 0xac, 0xab, 0xa9, 0xa8, 0xa6, 0xa5, 0xa4,
794 0xa7, 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4,
795 0xad, 0xaa, 0x79, 0x72, 0x6d, 0x56, 0x75, 0x94,
796 0x82, 0xa9, 0xbf, 0xbd, 0xb4, 0xa4, 0x9f, 0xae,
797 0xaf, 0x87, 0x65, 0x6a, 0x81, 0x77, 0x40, 0x0a,
798 0x4f, 0x9e, 0xc4, 0xb1, 0xaa, 0xad, 0xaa, 0xa9,
799 0xa9, 0xa7, 0xa9, 0xa3, 0xa1, 0xb1, 0xa6, 0x7c,
800 0x99, 0xaa, 0xad, 0xa7, 0xaa, 0x9c, 0x8f, 0xa1,
801 0xac, 0xa8, 0xa5, 0xa6, 0xac, 0xaf, 0xae, 0xac,
802 0xa6, 0xaa, 0xab, 0xa8, 0xaa, 0xae, 0xae, 0xa9,
803 0xa6, 0xa9, 0xaf, 0xb0, 0xa4, 0x96, 0x96, 0x9f,
804 0xae, 0xb2, 0xb0, 0xa9, 0xa6, 0xa9, 0xab, 0xaa,
805 0xab, 0xaa, 0xa8, 0xa6, 0xa6, 0xa8, 0xaa, 0xad,
806 0xa5, 0xb3, 0xa9, 0xb4, 0xbd, 0x75, 0x3a, 0x55,
807 0x7d, 0x80, 0xb1, 0xd7, 0xcb, 0xc3, 0xc8, 0xbd,
808 0xb9, 0xbe, 0xc5, 0xcb, 0xce, 0xcb, 0xc7, 0xc4,
809 0xa9, 0xa4, 0x98, 0x86, 0x70, 0x59, 0x46, 0x3b,
810 0x2b, 0x35, 0x3d, 0x3b, 0x33, 0x31, 0x38, 0x40,
811 0x4a, 0x50, 0x5c, 0x69, 0x6e, 0x68, 0x5a, 0x4e,
812 0x61, 0x71, 0x7f, 0x7c, 0x6b, 0x5a, 0x53, 0x54,
813 0x51, 0x43, 0x35, 0x37, 0x47, 0x5b, 0x67, 0x6b,
814 0x68, 0x5b, 0x5f, 0x77, 0x81, 0x72, 0x5e, 0x57,
815 0x69, 0x75, 0x82, 0x85, 0x7a, 0x6b, 0x5f, 0x5a,
816 0x60, 0x6f, 0x83, 0x8d, 0x88, 0x79, 0x68, 0x5e,
817 0x58, 0x60, 0x64, 0x5e, 0x4e, 0x40, 0x3b, 0x3b,
818 0x3b, 0x39, 0x36, 0x32, 0x2e, 0x29, 0x26, 0x25,
819 0x25, 0x15, 0x2c, 0x6d, 0x97, 0x90, 0x83, 0x87,
820 0x99, 0xa6, 0x9a, 0xa1, 0xa9, 0xa3, 0xaa, 0xa8,
821 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
822 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
823 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
824 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
825 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
826 0xab, 0xa5, 0xa5, 0xab, 0xac, 0xa7, 0xa7, 0xab,
827 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
828 0xa9, 0xa9, 0xa8, 0xa8, 0xa7, 0xa7, 0xa6, 0xa6,
829 0xa5, 0xa3, 0xa2, 0xa3, 0xa9, 0x97, 0x1e, 0x09,
830 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
831 0xa3, 0xa0, 0xac, 0xa7, 0xa6, 0xa5, 0x97, 0x9e,
832 0x99, 0xa8, 0xb5, 0xa4, 0x5e, 0x4d, 0x8e, 0xa9,
833 0xb6, 0x99, 0x81, 0x91, 0xae, 0xa9, 0xa1, 0xb0,
834 0x9c, 0xa3, 0xa8, 0xad, 0xa3, 0x8b, 0x8f, 0xaf,
835 0xaa, 0x9c, 0x8e, 0x8d, 0x9a, 0xa6, 0xab, 0xaa,
836 0xab, 0xa4, 0xa1, 0x9e, 0x8e, 0x74, 0x61, 0x5b,
837 0x6a, 0x7f, 0x94, 0x9e, 0xa7, 0xb2, 0xb5, 0xb2,
838 0xa2, 0xb5, 0xb7, 0xad, 0xae, 0xaf, 0xb0, 0xb7,
839 0xb2, 0xab, 0x91, 0x4f, 0x54, 0x86, 0x8e, 0xa5,
840 0xb0, 0xb0, 0xaa, 0xa3, 0xa6, 0xac, 0xaa, 0xa5,
841 0xaa, 0x9f, 0x7b, 0x73, 0x6f, 0x3f, 0x49, 0xa1,
842 0xb9, 0xb6, 0xb1, 0xac, 0xa8, 0xa5, 0xa4, 0xa3,
843 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
844 0x9b, 0xa4, 0xa9, 0xa7, 0xa5, 0xa4, 0x9c, 0x92,
845 0xaa, 0xaf, 0xac, 0xa4, 0xa3, 0xaa, 0xab, 0xa5,
846 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
847 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
848 0x87, 0x9b, 0xab, 0xab, 0xa7, 0xa9, 0xac, 0xac,
849 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
850 0xb2, 0xaa, 0xa1, 0xab, 0xad, 0x86, 0x58, 0x4d,
851 0x6c, 0xaa, 0xc3, 0xac, 0xa3, 0xab, 0xab, 0xa7,
852 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb0, 0xb1,
853 0xb7, 0xbf, 0xca, 0xd2, 0xd2, 0xca, 0xbf, 0xb7,
854 0x85, 0x5c, 0x2a, 0x0f, 0x12, 0x1e, 0x24, 0x23,
855 0x2f, 0x36, 0x3a, 0x3a, 0x3f, 0x42, 0x37, 0x26,
856 0x41, 0x4f, 0x60, 0x6b, 0x6a, 0x5e, 0x50, 0x46,
857 0x48, 0x4f, 0x58, 0x5d, 0x63, 0x72, 0x88, 0x9a,
858 0x9a, 0x94, 0x8f, 0x91, 0x94, 0x8c, 0x7a, 0x6a,
859 0x79, 0x70, 0x64, 0x5a, 0x56, 0x5a, 0x62, 0x68,
860 0x76, 0x83, 0x7e, 0x67, 0x61, 0x6c, 0x69, 0x58,
861 0x5a, 0x5b, 0x5c, 0x5a, 0x55, 0x4d, 0x45, 0x3f,
862 0x3e, 0x34, 0x2a, 0x27, 0x2c, 0x2f, 0x2c, 0x27,
863 0x1c, 0x5f, 0x97, 0x89, 0x95, 0x9c, 0x7c, 0x90,
864 0xaa, 0x9b, 0xa2, 0xac, 0xa5, 0xa6, 0xac, 0xa6,
865 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
866 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
867 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
868 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
869 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
870 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
871 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
872 0xa9, 0xa9, 0xa8, 0xa7, 0xa7, 0xa6, 0xa5, 0xa5,
873 0xa4, 0xa3, 0xa1, 0xa2, 0xab, 0x9e, 0x16, 0x07,
874 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
875 0xa3, 0xa6, 0x97, 0xaf, 0xb1, 0x9a, 0xa9, 0xaa,
876 0x9f, 0xa8, 0xa5, 0x58, 0x4b, 0x96, 0xb4, 0xbc,
877 0x9a, 0x88, 0x91, 0xa8, 0xaa, 0xa6, 0xa7, 0xa2,
878 0x9d, 0xa3, 0xa8, 0xac, 0xa4, 0x8d, 0x8f, 0xac,
879 0xa6, 0x9b, 0x90, 0x91, 0x9d, 0xa7, 0xaa, 0xa8,
880 0xa5, 0xaa, 0xae, 0xaf, 0xae, 0xaa, 0xa3, 0x9d,
881 0x99, 0x8e, 0x7e, 0x72, 0x6a, 0x66, 0x67, 0x6a,
882 0x7e, 0x75, 0x82, 0x8e, 0x88, 0x87, 0x7d, 0x61,
883 0x5c, 0x87, 0x83, 0x6a, 0x8e, 0x87, 0x4f, 0x5e,
884 0xa3, 0xa4, 0x9e, 0x9f, 0xac, 0xad, 0xa3, 0x9f,
885 0xae, 0xbe, 0xa9, 0x7d, 0x5a, 0x8a, 0xcc, 0xb0,
886 0xb2, 0xb0, 0xad, 0xaa, 0xa8, 0xa7, 0xa8, 0xa8,
887 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
888 0x9d, 0xa6, 0xaa, 0xa8, 0xa7, 0xa6, 0x9f, 0x95,
889 0xa4, 0xab, 0xad, 0xa7, 0xa5, 0xaa, 0xab, 0xa7,
890 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
891 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
892 0xa2, 0x99, 0x98, 0xa4, 0xac, 0xab, 0xa9, 0xab,
893 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
894 0xa8, 0xa2, 0xb1, 0xab, 0x94, 0xa4, 0xac, 0x88,
895 0x62, 0x8f, 0xa9, 0xaa, 0xae, 0xae, 0xa6, 0xa3,
896 0xab, 0xab, 0xac, 0xac, 0xad, 0xae, 0xaf, 0xaf,
897 0xb8, 0xb4, 0xae, 0xaa, 0xaa, 0xae, 0xb4, 0xb8,
898 0xb9, 0xbd, 0xc5, 0xcf, 0xcf, 0xbd, 0x9e, 0x86,
899 0x5f, 0x40, 0x3c, 0x5a, 0x6c, 0x68, 0x74, 0x90,
900 0x8d, 0x7e, 0x6e, 0x69, 0x6a, 0x65, 0x58, 0x4b,
901 0x74, 0x77, 0x78, 0x72, 0x6d, 0x71, 0x7e, 0x8b,
902 0x8a, 0x74, 0x56, 0x40, 0x3b, 0x42, 0x4c, 0x54,
903 0x57, 0x54, 0x4e, 0x48, 0x42, 0x3d, 0x3b, 0x39,
904 0x51, 0x5d, 0x66, 0x67, 0x66, 0x64, 0x59, 0x4c,
905 0x4c, 0x4f, 0x53, 0x57, 0x57, 0x55, 0x52, 0x50,
906 0x28, 0x2c, 0x30, 0x2f, 0x2a, 0x27, 0x28, 0x2a,
907 0x16, 0x61, 0x91, 0x93, 0xa3, 0x9c, 0x85, 0xa2,
908 0xb1, 0xa1, 0x9b, 0xa0, 0xa2, 0xa6, 0xad, 0xaf,
909 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
910 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
911 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
912 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
913 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
914 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
915 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
916 0xa9, 0xa9, 0xa8, 0xa8, 0xa7, 0xa6, 0xa6, 0xa5,
917 0xa4, 0xa3, 0xa2, 0xa3, 0xab, 0x9e, 0x17, 0x07,
918 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
919 0xa6, 0x9a, 0xa2, 0xa3, 0x9f, 0xac, 0xac, 0x9b,
920 0xb1, 0x9c, 0x55, 0x4b, 0x91, 0xb1, 0xa9, 0xaf,
921 0x83, 0x88, 0xa0, 0xaf, 0xa6, 0xa3, 0xa6, 0x9f,
922 0x9d, 0xa4, 0xa7, 0xab, 0xa5, 0x91, 0x90, 0xa6,
923 0xa1, 0x9a, 0x94, 0x98, 0xa2, 0xa9, 0xa8, 0xa5,
924 0xa0, 0xa8, 0xaa, 0xa4, 0xa4, 0xaa, 0xa8, 0x9f,
925 0x8d, 0x8a, 0x95, 0xaa, 0xb6, 0xaf, 0xa5, 0xa3,
926 0x99, 0x9e, 0x9d, 0x95, 0x90, 0x93, 0xa3, 0xb6,
927 0xcb, 0x91, 0x62, 0x75, 0xa8, 0xb0, 0xa6, 0xb9,
928 0xac, 0xa5, 0xa2, 0xa2, 0xa1, 0xa5, 0xa8, 0xa6,
929 0xc1, 0x8a, 0x54, 0x3d, 0x81, 0xc0, 0xaa, 0xa4,
930 0xaa, 0xa9, 0xa7, 0xa7, 0xa7, 0xa9, 0xab, 0xad,
931 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
932 0xa0, 0xa8, 0xad, 0xaa, 0xa9, 0xa9, 0xa2, 0x9a,
933 0x9b, 0xa6, 0xad, 0xac, 0xa8, 0xaa, 0xab, 0xaa,
934 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
935 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
936 0xb1, 0xa0, 0x95, 0x9c, 0xa7, 0xaa, 0xa9, 0xaa,
937 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
938 0xa5, 0xb0, 0xaf, 0x9c, 0x93, 0xa5, 0xb6, 0xb5,
939 0xb9, 0xba, 0xb3, 0xae, 0xaf, 0xaa, 0xa8, 0xaf,
940 0xaa, 0xaa, 0xaa, 0xab, 0xab, 0xac, 0xac, 0xad,
941 0xb1, 0xac, 0xa5, 0xa1, 0xa1, 0xa5, 0xac, 0xb1,
942 0xb4, 0xb5, 0xb6, 0xb6, 0xb8, 0xbc, 0xc2, 0xc6,
943 0xc4, 0xaf, 0x80, 0x52, 0x49, 0x59, 0x5a, 0x49,
944 0x45, 0x4d, 0x53, 0x4d, 0x43, 0x43, 0x4f, 0x5c,
945 0x71, 0x6a, 0x64, 0x65, 0x6d, 0x75, 0x79, 0x7a,
946 0x64, 0x72, 0x82, 0x88, 0x7f, 0x6e, 0x5e, 0x54,
947 0x5f, 0x56, 0x48, 0x3f, 0x40, 0x4a, 0x58, 0x62,
948 0x51, 0x50, 0x52, 0x57, 0x57, 0x52, 0x50, 0x52,
949 0x48, 0x49, 0x49, 0x48, 0x45, 0x41, 0x3d, 0x3a,
950 0x36, 0x34, 0x2e, 0x25, 0x20, 0x24, 0x31, 0x3c,
951 0x48, 0x9d, 0x9f, 0x8b, 0xa3, 0xa2, 0x8b, 0x89,
952 0xaa, 0xa1, 0x98, 0xa0, 0xae, 0xae, 0xa8, 0xaa,
953 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
954 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
955 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
956 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
957 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
958 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
959 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
960 0xaa, 0xaa, 0xa9, 0xa8, 0xa8, 0xa7, 0xa6, 0xa6,
961 0xa5, 0xa4, 0xa2, 0xa3, 0xac, 0x9f, 0x17, 0x08,
962 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
963 0xa7, 0xa1, 0xa0, 0x98, 0xab, 0xab, 0x96, 0xb6,
964 0xa0, 0x57, 0x52, 0xa5, 0xb4, 0xa3, 0xa7, 0x76,
965 0x85, 0xa0, 0xa7, 0xa1, 0xa5, 0xa4, 0xa2, 0xa9,
966 0x9f, 0xa5, 0xa7, 0xa9, 0xa7, 0x96, 0x90, 0x9f,
967 0x9c, 0x99, 0x99, 0x9e, 0xa6, 0xa9, 0xa7, 0xa3,
968 0xa6, 0xaa, 0xaa, 0xa6, 0xa7, 0xac, 0xae, 0xab,
969 0xb7, 0xa7, 0x99, 0x96, 0x99, 0xa0, 0xaa, 0xb5,
970 0xaa, 0xbb, 0xb7, 0xae, 0xb3, 0xb2, 0xb0, 0xba,
971 0x7c, 0x53, 0x6e, 0xb7, 0xc3, 0xb2, 0xb2, 0xa7,
972 0xbc, 0xb5, 0xba, 0xb5, 0xaa, 0xb8, 0xbd, 0xa3,
973 0x53, 0x2d, 0x77, 0x96, 0x7d, 0x99, 0xa8, 0xa3,
974 0xa7, 0xa6, 0xa5, 0xa5, 0xa6, 0xa9, 0xab, 0xad,
975 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
976 0xa3, 0xab, 0xae, 0xac, 0xab, 0xab, 0xa7, 0x9e,
977 0x95, 0xa1, 0xac, 0xae, 0xab, 0xa9, 0xaa, 0xac,
978 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
979 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
980 0xaa, 0xad, 0xa8, 0x9d, 0x9b, 0xa4, 0xaa, 0xa8,
981 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
982 0xb6, 0xa8, 0xab, 0xa3, 0x8c, 0x9b, 0xb0, 0xa4,
983 0xae, 0xa7, 0xa2, 0xa7, 0xad, 0xab, 0xaa, 0xb0,
984 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
985 0xaa, 0xab, 0xab, 0xac, 0xac, 0xab, 0xab, 0xaa,
986 0xa1, 0xa6, 0xaa, 0xaa, 0xa7, 0xa5, 0xa8, 0xab,
987 0xaa, 0xa1, 0x75, 0x43, 0x44, 0x6a, 0x75, 0x60,
988 0x59, 0x4c, 0x3b, 0x33, 0x39, 0x4d, 0x65, 0x76,
989 0x7a, 0x68, 0x59, 0x5f, 0x73, 0x7e, 0x76, 0x69,
990 0x77, 0x79, 0x75, 0x65, 0x50, 0x44, 0x46, 0x4d,
991 0x4c, 0x5c, 0x71, 0x81, 0x83, 0x76, 0x62, 0x54,
992 0x59, 0x54, 0x49, 0x3e, 0x39, 0x3b, 0x3f, 0x41,
993 0x3c, 0x3d, 0x3d, 0x3e, 0x3e, 0x3d, 0x3c, 0x3c,
994 0x55, 0x4c, 0x41, 0x38, 0x34, 0x33, 0x32, 0x31,
995 0x56, 0x97, 0x87, 0x88, 0x8c, 0x5d, 0x6d, 0xa5,
996 0xaf, 0xa5, 0x91, 0x94, 0xac, 0xaf, 0xaa, 0xb3,
997 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
998 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
999 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1000 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1001 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1002 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1003 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1004 0xab, 0xaa, 0xaa, 0xa9, 0xa8, 0xa8, 0xa7, 0xa7,
1005 0xa5, 0xa4, 0xa3, 0xa4, 0xad, 0x9f, 0x18, 0x09,
1006 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
1007 0xa1, 0xac, 0xa2, 0xa7, 0xa4, 0xa5, 0xb5, 0x9f,
1008 0x5f, 0x5a, 0xab, 0xc3, 0xa0, 0xa5, 0x99, 0x7c,
1009 0x9a, 0xaf, 0xac, 0x9f, 0xa4, 0xa9, 0xa6, 0xa7,
1010 0xa0, 0xa6, 0xa6, 0xa7, 0xa9, 0x9c, 0x91, 0x97,
1011 0x99, 0x9a, 0x9c, 0xa2, 0xa7, 0xa9, 0xa7, 0xa4,
1012 0xa4, 0x9f, 0x9f, 0xa3, 0xa5, 0xa4, 0xa7, 0xae,
1013 0xa8, 0xab, 0xa7, 0x9d, 0x98, 0x9c, 0xa0, 0xa1,
1014 0xaf, 0xa3, 0x9f, 0x9b, 0x9a, 0xa7, 0x9f, 0x7d,
1015 0x59, 0x80, 0xab, 0xc2, 0xb4, 0x9d, 0x91, 0x84,
1016 0x6f, 0x78, 0x8e, 0xae, 0xc6, 0xb4, 0x6c, 0x22,
1017 0x6c, 0x9c, 0x99, 0xa0, 0x91, 0x77, 0x9c, 0xb0,
1018 0xaa, 0xa9, 0xa7, 0xa6, 0xa6, 0xa7, 0xa9, 0xaa,
1019 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1020 0xa5, 0xac, 0xaf, 0xac, 0xab, 0xad, 0xaa, 0xa2,
1021 0x96, 0x9d, 0xa8, 0xae, 0xad, 0xaa, 0xa9, 0xac,
1022 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1023 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1024 0xa5, 0xaf, 0xb2, 0xa6, 0x9d, 0x9f, 0xa4, 0xa5,
1025 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1026 0xb2, 0xaa, 0xa1, 0x99, 0x9c, 0xaf, 0xb2, 0xa0,
1027 0xa1, 0xa4, 0xab, 0xb0, 0xb1, 0xaf, 0xaa, 0xa3,
1028 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9,
1029 0xac, 0xaa, 0xa8, 0xa7, 0xa7, 0xa8, 0xaa, 0xac,
1030 0xb1, 0xaf, 0xad, 0xaa, 0xaa, 0xaa, 0xab, 0xac,
1031 0xa5, 0xa1, 0x8b, 0x67, 0x4e, 0x48, 0x45, 0x40,
1032 0x42, 0x4f, 0x5a, 0x58, 0x4e, 0x4b, 0x55, 0x62,
1033 0x6b, 0x63, 0x5d, 0x62, 0x6e, 0x75, 0x73, 0x6d,
1034 0x67, 0x71, 0x79, 0x75, 0x68, 0x5e, 0x5d, 0x62,
1035 0x72, 0x68, 0x59, 0x4c, 0x44, 0x44, 0x48, 0x4c,
1036 0x5e, 0x76, 0x84, 0x7f, 0x7b, 0x78, 0x64, 0x48,
1037 0x4e, 0x4c, 0x4a, 0x47, 0x44, 0x42, 0x41, 0x41,
1038 0x37, 0x31, 0x28, 0x22, 0x22, 0x28, 0x30, 0x36,
1039 0x6d, 0xb2, 0x94, 0x89, 0x8e, 0x73, 0x91, 0xb6,
1040 0xac, 0xa3, 0x90, 0x95, 0xad, 0xb1, 0xab, 0xb4,
1041 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1042 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1043 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1044 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1045 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1046 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1047 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1048 0xab, 0xab, 0xaa, 0xaa, 0xa9, 0xa8, 0xa8, 0xa7,
1049 0xa6, 0xa5, 0xa4, 0xa5, 0xad, 0xa0, 0x19, 0x09,
1050 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
1051 0x9f, 0xa5, 0xab, 0xa4, 0xa1, 0xb4, 0x9e, 0x52,
1052 0x69, 0xa7, 0xbc, 0xab, 0xa8, 0x90, 0x82, 0xac,
1053 0xa9, 0xa9, 0xb1, 0xad, 0xa4, 0xac, 0xae, 0x9b,
1054 0xa1, 0xa7, 0xa5, 0xa5, 0xab, 0xa1, 0x91, 0x90,
1055 0x9a, 0x9b, 0x9f, 0xa2, 0xa6, 0xa8, 0xa8, 0xa7,
1056 0xb2, 0xa9, 0xa6, 0xab, 0xa9, 0xa1, 0xa1, 0xa8,
1057 0xa2, 0xad, 0xaf, 0xa5, 0xa0, 0xa6, 0xab, 0xa9,
1058 0xa1, 0x9e, 0xa1, 0xab, 0xb4, 0xa9, 0x7b, 0x49,
1059 0x8b, 0x92, 0x7e, 0x58, 0x52, 0x68, 0x80, 0x98,
1060 0x97, 0x9c, 0x81, 0x5a, 0x37, 0x1e, 0x4f, 0xb1,
1061 0xae, 0xa6, 0x93, 0xaf, 0xa4, 0x76, 0x8b, 0xad,
1062 0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa7, 0xa8, 0xa9,
1063 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1064 0xa6, 0xac, 0xae, 0xaa, 0xaa, 0xad, 0xab, 0xa5,
1065 0x9e, 0x9d, 0xa1, 0xaa, 0xad, 0xaa, 0xa8, 0xaa,
1066 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1067 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1068 0xad, 0xa9, 0xaa, 0xae, 0xab, 0xa1, 0x9e, 0xa2,
1069 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1070 0xaa, 0xa5, 0x8d, 0x91, 0xb4, 0xb2, 0xa4, 0xb2,
1071 0xa4, 0xa6, 0xab, 0xa8, 0xa4, 0xad, 0xb2, 0xaa,
1072 0xad, 0xac, 0xac, 0xab, 0xab, 0xaa, 0xaa, 0xaa,
1073 0xad, 0xad, 0xab, 0xab, 0xab, 0xab, 0xad, 0xad,
1074 0xac, 0xa8, 0xa4, 0xa5, 0xaa, 0xaf, 0xb1, 0xb0,
1075 0xb1, 0xb5, 0xa6, 0x7d, 0x53, 0x45, 0x52, 0x63,
1076 0x54, 0x3c, 0x2a, 0x33, 0x4e, 0x5e, 0x56, 0x45,
1077 0x59, 0x65, 0x6f, 0x6e, 0x66, 0x66, 0x71, 0x7c,
1078 0x81, 0x84, 0x84, 0x7b, 0x6d, 0x5e, 0x55, 0x51,
1079 0x68, 0x64, 0x5e, 0x57, 0x50, 0x4c, 0x49, 0x48,
1080 0xa4, 0xab, 0x99, 0x74, 0x66, 0x70, 0x6e, 0x5b,
1081 0x58, 0x54, 0x4c, 0x44, 0x3d, 0x38, 0x35, 0x34,
1082 0x2f, 0x30, 0x2c, 0x20, 0x1a, 0x27, 0x44, 0x5d,
1083 0xa2, 0xa6, 0x7a, 0x92, 0xa4, 0x79, 0x84, 0xa0,
1084 0xa0, 0x9a, 0x96, 0xa2, 0xb3, 0xb3, 0xab, 0xac,
1085 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1086 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1087 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1088 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1089 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1090 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1091 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1092 0xac, 0xac, 0xab, 0xaa, 0xaa, 0xa9, 0xa8, 0xa8,
1093 0xa7, 0xa6, 0xa4, 0xa5, 0xae, 0xa1, 0x19, 0x0a,
1094 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
1095 0xa7, 0xa1, 0xa1, 0xa0, 0xb4, 0x92, 0x51, 0x6a,
1096 0xb0, 0xac, 0x9b, 0xb1, 0xa0, 0x80, 0xa0, 0xad,
1097 0xa6, 0xa5, 0xae, 0xaf, 0xa4, 0xa8, 0xab, 0x9f,
1098 0xa2, 0xa8, 0xa4, 0xa4, 0xad, 0xa5, 0x92, 0x8a,
1099 0x9c, 0x9d, 0xa0, 0xa1, 0xa3, 0xa6, 0xa9, 0xac,
1100 0xa8, 0xa7, 0xa7, 0xa8, 0xa8, 0xa5, 0xa3, 0xa4,
1101 0xac, 0xa8, 0xa0, 0x98, 0x96, 0x9b, 0xa3, 0xa7,
1102 0xa9, 0xaa, 0xa4, 0xad, 0xb5, 0x8c, 0x55, 0x42,
1103 0x1e, 0x4b, 0x9d, 0xbe, 0xc0, 0xc0, 0xb5, 0xc0,
1104 0xd2, 0xc7, 0x77, 0x29, 0x4a, 0xa4, 0xca, 0xc0,
1105 0xb1, 0x8f, 0x9c, 0xae, 0xab, 0x8f, 0x7a, 0xa1,
1106 0xaf, 0xad, 0xab, 0xa9, 0xa8, 0xa9, 0xaa, 0xab,
1107 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1108 0xa5, 0xab, 0xac, 0xa9, 0xa9, 0xad, 0xac, 0xa6,
1109 0xa7, 0x9d, 0x9b, 0xa5, 0xad, 0xab, 0xa8, 0xa8,
1110 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1111 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1112 0xb0, 0xa8, 0xa6, 0xad, 0xad, 0xa5, 0x9f, 0xa0,
1113 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1114 0xae, 0x89, 0x93, 0xb1, 0xa9, 0xa2, 0xac, 0xac,
1115 0xb1, 0xab, 0xaf, 0xaf, 0xa9, 0xaf, 0xb2, 0xa5,
1116 0xaf, 0xaf, 0xae, 0xad, 0xac, 0xac, 0xab, 0xab,
1117 0xab, 0xad, 0xb1, 0xb3, 0xb3, 0xb1, 0xad, 0xab,
1118 0xaf, 0xac, 0xaa, 0xa9, 0xaa, 0xa9, 0xa7, 0xa4,
1119 0xac, 0xa8, 0xae, 0xac, 0x85, 0x4d, 0x37, 0x42,
1120 0x51, 0x57, 0x60, 0x69, 0x6b, 0x66, 0x5d, 0x56,
1121 0x78, 0x82, 0x88, 0x82, 0x75, 0x6e, 0x73, 0x7c,
1122 0x61, 0x65, 0x6c, 0x72, 0x70, 0x63, 0x4f, 0x40,
1123 0x36, 0x39, 0x3c, 0x3e, 0x3e, 0x3c, 0x39, 0x36,
1124 0x36, 0x44, 0x4b, 0x47, 0x48, 0x4d, 0x47, 0x39,
1125 0x3f, 0x3d, 0x39, 0x36, 0x36, 0x38, 0x3c, 0x3e,
1126 0x3c, 0x41, 0x3e, 0x30, 0x20, 0x20, 0x32, 0x45,
1127 0x8d, 0xa4, 0x8b, 0x81, 0x82, 0x81, 0x97, 0x97,
1128 0xa2, 0x96, 0x98, 0xa4, 0xa9, 0xae, 0xb2, 0xb3,
1129 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1130 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1131 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1132 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1133 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1134 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1135 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1136 0xad, 0xac, 0xac, 0xab, 0xaa, 0xaa, 0xa9, 0xa9,
1137 0xa7, 0xa6, 0xa5, 0xa6, 0xaf, 0xa1, 0x1a, 0x0b,
1138 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
1139 0xaf, 0x9b, 0xa7, 0xbf, 0x87, 0x4d, 0x79, 0xb3,
1140 0xb0, 0x96, 0xa6, 0x9d, 0x8d, 0xa7, 0xb1, 0xa6,
1141 0x9e, 0xaa, 0xa6, 0xa1, 0xa5, 0xa2, 0xa1, 0xaf,
1142 0xa2, 0xa9, 0xa4, 0xa3, 0xad, 0xa7, 0x92, 0x87,
1143 0x9d, 0x9f, 0xa0, 0xa0, 0xa1, 0xa4, 0xaa, 0xae,
1144 0xa3, 0xaa, 0xab, 0xa5, 0xa3, 0xa6, 0xa2, 0x9a,
1145 0x95, 0x8e, 0x90, 0x9e, 0xa8, 0xa9, 0xa9, 0xac,
1146 0x9d, 0xa3, 0xbf, 0xc0, 0x88, 0x56, 0x61, 0x83,
1147 0x6c, 0x92, 0xc5, 0xb6, 0xaa, 0xb1, 0xac, 0xce,
1148 0x86, 0x2b, 0x2c, 0x8e, 0xc8, 0xc2, 0xb1, 0xa3,
1149 0xa2, 0x93, 0x97, 0xae, 0xb4, 0x9a, 0x81, 0x84,
1150 0xae, 0xad, 0xab, 0xaa, 0xaa, 0xab, 0xad, 0xaf,
1151 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1152 0xa5, 0xaa, 0xab, 0xa7, 0xa8, 0xac, 0xab, 0xa6,
1153 0xae, 0x9e, 0x97, 0xa1, 0xac, 0xab, 0xa7, 0xa6,
1154 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1155 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1156 0xaa, 0xaf, 0xae, 0xa6, 0xa5, 0xa8, 0xa6, 0x9f,
1157 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1158 0x99, 0x9a, 0xae, 0xb9, 0xad, 0xaa, 0xb0, 0xac,
1159 0xb5, 0xa5, 0xa6, 0xac, 0xa9, 0xaf, 0xb3, 0xa7,
1160 0xb1, 0xb0, 0xb0, 0xaf, 0xae, 0xad, 0xac, 0xab,
1161 0xaa, 0xaa, 0xab, 0xac, 0xac, 0xab, 0xaa, 0xaa,
1162 0xab, 0xad, 0xaf, 0xaf, 0xad, 0xac, 0xab, 0xac,
1163 0xb9, 0xaa, 0xa8, 0xb1, 0x9d, 0x6c, 0x47, 0x3f,
1164 0x4d, 0x5b, 0x69, 0x6c, 0x65, 0x62, 0x68, 0x71,
1165 0x6e, 0x6c, 0x6c, 0x72, 0x7b, 0x7f, 0x7d, 0x78,
1166 0x76, 0x6e, 0x67, 0x67, 0x68, 0x60, 0x4e, 0x3e,
1167 0x59, 0x4e, 0x3d, 0x30, 0x2e, 0x36, 0x43, 0x4c,
1168 0x37, 0x37, 0x3a, 0x3f, 0x3f, 0x3c, 0x3a, 0x3b,
1169 0x48, 0x44, 0x3f, 0x3a, 0x39, 0x3a, 0x3d, 0x40,
1170 0x4e, 0x45, 0x37, 0x28, 0x23, 0x2d, 0x41, 0x52,
1171 0x9d, 0xa0, 0x88, 0x79, 0x79, 0x89, 0xa4, 0x9e,
1172 0x98, 0x8f, 0x9f, 0xb1, 0xae, 0xaf, 0xb2, 0xaa,
1173 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1174 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1175 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1176 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1177 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1178 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1179 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1180 0xad, 0xad, 0xac, 0xab, 0xab, 0xaa, 0xa9, 0xa9,
1181 0xa8, 0xa7, 0xa5, 0xa6, 0xaf, 0xa2, 0x1a, 0x0b,
1182 0xac, 0xad, 0x9f, 0xa6, 0xa8, 0xa2, 0xa9, 0x9e,
1183 0xa5, 0xa5, 0xb6, 0x85, 0x52, 0x77, 0xa7, 0xb5,
1184 0xab, 0xa6, 0x95, 0x8b, 0x98, 0xaa, 0xab, 0xa4,
1185 0xa6, 0xa6, 0xa7, 0xa7, 0xa6, 0xa4, 0xa1, 0x9f,
1186 0xa3, 0x9b, 0xa1, 0xa1, 0xac, 0xa2, 0x7e, 0x8c,
1187 0x9b, 0x98, 0xa0, 0xa3, 0x9b, 0x9f, 0xa9, 0xa7,
1188 0xa2, 0xa3, 0xa5, 0xa6, 0xa7, 0xa6, 0xa5, 0xa4,
1189 0xa1, 0xa9, 0xac, 0xa7, 0xa6, 0xac, 0xb2, 0xb2,
1190 0xb4, 0xa1, 0x7d, 0x5b, 0x46, 0x71, 0xb8, 0xbc,
1191 0xbb, 0x88, 0x48, 0x7c, 0xb1, 0xb9, 0xaa, 0x44,
1192 0x15, 0x85, 0xc0, 0xbd, 0xb3, 0xad, 0xaf, 0xab,
1193 0x96, 0x74, 0x95, 0xa5, 0xab, 0xba, 0x9b, 0x87,
1194 0xa2, 0xb4, 0xad, 0xaa, 0xac, 0xa7, 0xaa, 0xa7,
1195 0xa9, 0xac, 0xa6, 0xa5, 0xa8, 0xb4, 0x90, 0x85,
1196 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
1197 0xab, 0xab, 0x9a, 0x93, 0xa3, 0xa9, 0xa8, 0xb2,
1198 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1199 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1200 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1201 0x9b, 0xa7, 0xa5, 0xa5, 0xb0, 0xab, 0x9f, 0xa1,
1202 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1203 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1204 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1205 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1206 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1207 0xb0, 0xac, 0xac, 0xaf, 0xa2, 0x7c, 0x4b, 0x28,
1208 0x47, 0x55, 0x60, 0x5e, 0x58, 0x59, 0x62, 0x68,
1209 0x64, 0x67, 0x6b, 0x6c, 0x68, 0x60, 0x57, 0x51,
1210 0x5e, 0x5c, 0x55, 0x4a, 0x41, 0x44, 0x52, 0x5e,
1211 0x34, 0x3f, 0x4b, 0x4f, 0x49, 0x40, 0x3c, 0x3b,
1212 0x40, 0x3b, 0x36, 0x36, 0x3a, 0x3c, 0x3a, 0x37,
1213 0x3d, 0x3a, 0x36, 0x31, 0x2f, 0x2e, 0x2f, 0x30,
1214 0x39, 0x32, 0x30, 0x28, 0x31, 0x35, 0x31, 0x4e,
1215 0xa2, 0xac, 0x88, 0x7c, 0x85, 0x8c, 0xa4, 0xa4,
1216 0x8c, 0x9a, 0x9e, 0xa4, 0xb3, 0xb2, 0xaa, 0xb1,
1217 0xad, 0xae, 0xaf, 0xb0, 0xb0, 0xae, 0xac, 0xab,
1218 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1219 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1220 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1221 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1222 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1223 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1224 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1225 0xaa, 0xab, 0xad, 0xb0, 0xb8, 0xa8, 0x1c, 0x0a,
1226 0xa4, 0x9b, 0xae, 0xae, 0xa5, 0xa5, 0x9d, 0xa3,
1227 0xa6, 0xb7, 0x7f, 0x56, 0x7b, 0xae, 0xbb, 0x9f,
1228 0xab, 0xa1, 0x88, 0x8b, 0xa9, 0xab, 0x9f, 0xa9,
1229 0xa5, 0xa6, 0xa6, 0xa5, 0xa3, 0xa4, 0xa8, 0xab,
1230 0xad, 0xa8, 0xa5, 0xa5, 0xad, 0x9f, 0x87, 0x8f,
1231 0x96, 0x98, 0xa7, 0xaf, 0xa7, 0xa6, 0xaa, 0xa4,
1232 0xaa, 0xa9, 0xa8, 0xa7, 0xa7, 0xa8, 0xa9, 0xaa,
1233 0xa7, 0xaa, 0xaf, 0xb6, 0xb7, 0xaa, 0x8f, 0x77,
1234 0x67, 0x91, 0xaa, 0x82, 0x87, 0xaf, 0xac, 0xb6,
1235 0xac, 0x7d, 0x60, 0x84, 0x5c, 0x0f, 0x1a, 0x1e,
1236 0x92, 0xaf, 0xb1, 0xaf, 0xab, 0xa1, 0xa4, 0xa3,
1237 0xb0, 0x8d, 0xad, 0xbd, 0xb5, 0xaf, 0x92, 0x8c,
1238 0x9f, 0xb2, 0xab, 0xa9, 0xac, 0xa7, 0xab, 0xa8,
1239 0xa9, 0xac, 0xa6, 0xa6, 0xa9, 0xb3, 0x90, 0x86,
1240 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
1241 0xa8, 0xac, 0xa2, 0x96, 0x9d, 0xa9, 0xad, 0xad,
1242 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1243 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1244 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1245 0x90, 0x9d, 0xa7, 0xa8, 0xa9, 0xaf, 0xab, 0x9c,
1246 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1247 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1248 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1249 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1250 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1251 0xaf, 0xb0, 0xb3, 0xb6, 0xb1, 0x9a, 0x72, 0x52,
1252 0x56, 0x60, 0x67, 0x66, 0x60, 0x60, 0x66, 0x6c,
1253 0x5f, 0x63, 0x69, 0x6f, 0x72, 0x71, 0x6f, 0x6e,
1254 0x5c, 0x4f, 0x46, 0x4d, 0x61, 0x73, 0x78, 0x76,
1255 0x65, 0x69, 0x6a, 0x65, 0x5e, 0x5c, 0x60, 0x66,
1256 0x6c, 0x5c, 0x47, 0x39, 0x35, 0x38, 0x3b, 0x3c,
1257 0x3c, 0x38, 0x31, 0x2b, 0x2a, 0x32, 0x41, 0x4c,
1258 0x49, 0x34, 0x30, 0x28, 0x24, 0x2c, 0x46, 0x79,
1259 0x99, 0xaa, 0x8d, 0x75, 0x77, 0x8b, 0xa6, 0x9d,
1260 0x8c, 0x99, 0x9e, 0xa5, 0xb3, 0xb2, 0xac, 0xb1,
1261 0xac, 0xad, 0xaf, 0xb0, 0xb0, 0xaf, 0xad, 0xac,
1262 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1263 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1264 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1265 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1266 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1267 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1268 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1269 0xaa, 0xac, 0xad, 0xb0, 0xb8, 0xa7, 0x1c, 0x0a,
1270 0xa3, 0xa3, 0xa3, 0x9c, 0xae, 0xb6, 0xa1, 0xa9,
1271 0xb8, 0x7b, 0x52, 0x83, 0xb0, 0xa9, 0xa8, 0xa4,
1272 0xab, 0x8f, 0x80, 0x97, 0xaf, 0xa8, 0x9f, 0xa7,
1273 0xa4, 0xa9, 0xac, 0xaa, 0xa4, 0xa3, 0xa8, 0xad,
1274 0xac, 0xaf, 0xa4, 0xa9, 0xae, 0x9e, 0x97, 0x96,
1275 0x9b, 0x98, 0x9f, 0xa2, 0x9a, 0xa0, 0xab, 0xab,
1276 0xa7, 0xa6, 0xa5, 0xa5, 0xa8, 0xad, 0xb3, 0xb6,
1277 0xae, 0xa8, 0x97, 0x7b, 0x66, 0x6d, 0x91, 0xb4,
1278 0xc0, 0xb8, 0x7e, 0x65, 0x93, 0xb5, 0xb2, 0xaa,
1279 0xa0, 0x7f, 0x6a, 0x7b, 0x7c, 0x87, 0xb7, 0xcb,
1280 0xc2, 0xb3, 0xa6, 0xaf, 0xae, 0xa9, 0xb3, 0xae,
1281 0x71, 0x5f, 0x73, 0x74, 0x80, 0xa3, 0x9b, 0x89,
1282 0x9b, 0xae, 0xa8, 0xa7, 0xab, 0xa8, 0xac, 0xaa,
1283 0xaa, 0xac, 0xa7, 0xa8, 0xaa, 0xb1, 0x8f, 0x89,
1284 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1285 0xa5, 0xab, 0xaa, 0x9d, 0x97, 0xa7, 0xb1, 0xa8,
1286 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1287 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1288 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1289 0xa4, 0x9a, 0xa1, 0xab, 0xaa, 0xaf, 0xa9, 0x8f,
1290 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1291 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1292 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1293 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1294 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1295 0xa8, 0xae, 0xb2, 0xb1, 0xb2, 0xac, 0x91, 0x73,
1296 0x45, 0x4a, 0x53, 0x5d, 0x63, 0x69, 0x74, 0x7d,
1297 0x70, 0x6f, 0x6d, 0x6b, 0x67, 0x63, 0x60, 0x5e,
1298 0x5d, 0x5f, 0x5f, 0x5d, 0x5b, 0x5a, 0x5d, 0x60,
1299 0x5d, 0x63, 0x6a, 0x6c, 0x6d, 0x72, 0x7c, 0x85,
1300 0x71, 0x62, 0x4e, 0x43, 0x44, 0x4d, 0x56, 0x5b,
1301 0x2e, 0x38, 0x44, 0x46, 0x41, 0x3c, 0x3e, 0x42,
1302 0x29, 0x1d, 0x20, 0x25, 0x31, 0x37, 0x4e, 0x8c,
1303 0xa6, 0xa1, 0x79, 0x61, 0x75, 0xa2, 0xad, 0x81,
1304 0x8d, 0x98, 0x9f, 0xa7, 0xb2, 0xb3, 0xae, 0xb1,
1305 0xab, 0xad, 0xaf, 0xb0, 0xb0, 0xaf, 0xad, 0xac,
1306 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1307 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1308 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1309 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1310 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1311 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1312 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1313 0xab, 0xac, 0xae, 0xb0, 0xb8, 0xa7, 0x1b, 0x09,
1314 0xa7, 0xa6, 0x9a, 0xa9, 0xaa, 0x9a, 0xaa, 0xb9,
1315 0x82, 0x55, 0x83, 0xb7, 0xaf, 0xa3, 0xa2, 0xa8,
1316 0xa6, 0x7e, 0x8a, 0xa8, 0xa3, 0xa3, 0xac, 0xa1,
1317 0xa4, 0xac, 0xb3, 0xb1, 0xa9, 0xa3, 0xa4, 0xa8,
1318 0xa1, 0xaa, 0x9c, 0xa6, 0xa9, 0x9e, 0xa7, 0xa0,
1319 0x8b, 0x90, 0xa2, 0xae, 0xac, 0xb0, 0xb7, 0xb4,
1320 0xad, 0xae, 0xaf, 0xac, 0xa1, 0x92, 0x83, 0x79,
1321 0x6c, 0x74, 0x89, 0xa5, 0xb7, 0xb8, 0xb1, 0xac,
1322 0xc0, 0x8f, 0x63, 0x8b, 0xb0, 0xad, 0xb1, 0xa3,
1323 0x9c, 0x95, 0xa5, 0xb8, 0xbd, 0xc2, 0xbe, 0xb2,
1324 0xb1, 0xa5, 0xa1, 0xa9, 0xa5, 0xac, 0xb5, 0x95,
1325 0x32, 0x43, 0x69, 0x75, 0x8c, 0xb5, 0xac, 0x90,
1326 0x98, 0xac, 0xa6, 0xa6, 0xab, 0xa8, 0xad, 0xab,
1327 0xaa, 0xac, 0xa8, 0xab, 0xab, 0xaf, 0x8e, 0x8c,
1328 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1329 0xa8, 0xa7, 0xae, 0xa8, 0x99, 0xa2, 0xaf, 0xa7,
1330 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1331 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1332 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1333 0xae, 0x98, 0x9b, 0xb0, 0xb3, 0xac, 0xaa, 0xab,
1334 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1335 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1336 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1337 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1338 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1339 0xa7, 0xb0, 0xb0, 0xaa, 0xac, 0xb0, 0x9f, 0x85,
1340 0x57, 0x52, 0x54, 0x60, 0x69, 0x6d, 0x73, 0x7b,
1341 0x74, 0x72, 0x6e, 0x6a, 0x65, 0x61, 0x5f, 0x5d,
1342 0x82, 0x80, 0x75, 0x63, 0x53, 0x54, 0x65, 0x75,
1343 0x69, 0x72, 0x7a, 0x78, 0x6c, 0x5f, 0x56, 0x53,
1344 0x4d, 0x51, 0x58, 0x60, 0x62, 0x58, 0x47, 0x39,
1345 0x35, 0x47, 0x5b, 0x5f, 0x52, 0x3e, 0x2f, 0x2a,
1346 0x2d, 0x26, 0x1b, 0x1b, 0x3d, 0x51, 0x61, 0x9b,
1347 0x8a, 0x95, 0x86, 0x61, 0x57, 0x7f, 0x9b, 0x8a,
1348 0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb2, 0xb0, 0xb0,
1349 0xaa, 0xac, 0xae, 0xb0, 0xb0, 0xb0, 0xae, 0xad,
1350 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1351 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1352 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1353 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1354 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1355 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1356 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1357 0xac, 0xad, 0xae, 0xb1, 0xb8, 0xa6, 0x1a, 0x08,
1358 0xa7, 0xa4, 0xa5, 0xab, 0x9b, 0xa0, 0xac, 0x85,
1359 0x4f, 0x7f, 0xb7, 0xb1, 0xa3, 0xb1, 0xae, 0xab,
1360 0x96, 0x87, 0x9c, 0xaa, 0x99, 0xa1, 0xb1, 0xa2,
1361 0xa6, 0xaa, 0xad, 0xac, 0xa7, 0xa5, 0xa9, 0xae,
1362 0xa6, 0xb2, 0xab, 0xb4, 0xad, 0x9f, 0xa5, 0x95,
1363 0x8c, 0x8c, 0x97, 0x99, 0x8a, 0x82, 0x7f, 0x75,
1364 0x7a, 0x79, 0x78, 0x7c, 0x86, 0x95, 0xa4, 0xae,
1365 0xb0, 0xb8, 0xbe, 0xb9, 0xac, 0xa2, 0xa3, 0xa8,
1366 0xa7, 0x73, 0x87, 0xa4, 0xa7, 0xa7, 0x9c, 0xa5,
1367 0x93, 0x9a, 0xb5, 0xb9, 0xac, 0xa7, 0xa5, 0xae,
1368 0xab, 0xa6, 0xa9, 0xb1, 0xa8, 0xaa, 0x9c, 0x5e,
1369 0x7e, 0xc1, 0xcd, 0x7e, 0x5f, 0x95, 0x9d, 0x70,
1370 0x99, 0xac, 0xa7, 0xa7, 0xac, 0xa9, 0xae, 0xac,
1371 0xab, 0xac, 0xa9, 0xae, 0xac, 0xad, 0x8d, 0x8f,
1372 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1373 0xad, 0xa3, 0xac, 0xb1, 0xa2, 0x9d, 0xa7, 0xa8,
1374 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1375 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1376 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1377 0xa6, 0xa5, 0xa8, 0xb4, 0xb4, 0x9c, 0x8f, 0x9c,
1378 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1379 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1380 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1381 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1382 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1383 0xaf, 0xb7, 0xb5, 0xad, 0xb0, 0xb9, 0xb0, 0x9b,
1384 0x75, 0x65, 0x60, 0x70, 0x7d, 0x7f, 0x82, 0x8a,
1385 0x7c, 0x7c, 0x7a, 0x78, 0x74, 0x6f, 0x6b, 0x69,
1386 0x5d, 0x56, 0x54, 0x5e, 0x6d, 0x76, 0x71, 0x6a,
1387 0x5f, 0x6a, 0x76, 0x79, 0x72, 0x69, 0x65, 0x64,
1388 0x64, 0x58, 0x48, 0x40, 0x42, 0x49, 0x4e, 0x50,
1389 0x57, 0x5b, 0x5a, 0x51, 0x43, 0x39, 0x36, 0x38,
1390 0x2f, 0x23, 0x24, 0x1e, 0x30, 0x59, 0x78, 0x96,
1391 0x89, 0x90, 0x84, 0x5e, 0x55, 0x77, 0x90, 0x92,
1392 0x95, 0x99, 0xa4, 0xad, 0xb0, 0xb1, 0xb0, 0xac,
1393 0xa9, 0xab, 0xae, 0xb0, 0xb1, 0xb0, 0xaf, 0xae,
1394 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1395 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1396 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1397 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1398 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1399 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1400 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1401 0xad, 0xae, 0xaf, 0xb1, 0xb8, 0xa6, 0x19, 0x07,
1402 0xa4, 0xa6, 0xa9, 0x9d, 0xa9, 0xac, 0x7d, 0x5d,
1403 0x8b, 0xaa, 0xab, 0xad, 0xad, 0xa8, 0xae, 0xa4,
1404 0x89, 0xa1, 0xa8, 0x9e, 0x9c, 0xa4, 0xa8, 0xaa,
1405 0xa8, 0xa5, 0xa2, 0xa1, 0xa4, 0xaa, 0xaf, 0xb3,
1406 0xa9, 0x9f, 0x88, 0x73, 0x60, 0x66, 0x7d, 0x7b,
1407 0x75, 0x78, 0x8a, 0x97, 0x98, 0xa2, 0xb0, 0xb0,
1408 0xbb, 0xbc, 0xbd, 0xbc, 0xb9, 0xb4, 0xaf, 0xab,
1409 0xb2, 0xb3, 0xac, 0xa2, 0xa2, 0xac, 0xb1, 0xaf,
1410 0x7f, 0x88, 0x9c, 0xa3, 0xab, 0xb5, 0xab, 0x9c,
1411 0x9d, 0xaa, 0xb3, 0xa6, 0xa3, 0xb2, 0xb3, 0xaf,
1412 0xab, 0xaa, 0xaf, 0xb9, 0xb0, 0xb1, 0xae, 0x82,
1413 0x89, 0x86, 0x85, 0x8f, 0xa8, 0xbc, 0xb2, 0x9a,
1414 0x9d, 0xb0, 0xaa, 0xa9, 0xad, 0xaa, 0xae, 0xac,
1415 0xac, 0xab, 0xaa, 0xb1, 0xad, 0xab, 0x8c, 0x93,
1416 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1417 0xb0, 0xa4, 0xa9, 0xb4, 0xac, 0x9e, 0x9f, 0xa7,
1418 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1419 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1420 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1421 0xaa, 0xa3, 0x89, 0x7f, 0x95, 0xa1, 0x9e, 0xa1,
1422 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1423 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1424 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1425 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1426 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1427 0xad, 0xb2, 0xb2, 0xad, 0xb2, 0xbb, 0xb8, 0xac,
1428 0x7e, 0x64, 0x5a, 0x6e, 0x81, 0x82, 0x83, 0x8a,
1429 0x71, 0x75, 0x7a, 0x7c, 0x7a, 0x75, 0x6e, 0x69,
1430 0x6a, 0x6d, 0x74, 0x7b, 0x7d, 0x79, 0x6f, 0x67,
1431 0x57, 0x5e, 0x65, 0x67, 0x68, 0x6d, 0x77, 0x80,
1432 0x6e, 0x69, 0x64, 0x64, 0x65, 0x63, 0x5d, 0x58,
1433 0x61, 0x59, 0x4c, 0x43, 0x40, 0x42, 0x46, 0x4a,
1434 0x3b, 0x25, 0x3b, 0x2e, 0x14, 0x42, 0x74, 0x79,
1435 0x7d, 0x8f, 0x84, 0x54, 0x4e, 0x6e, 0x80, 0x97,
1436 0x9c, 0x9d, 0xa8, 0xb0, 0xae, 0xae, 0xae, 0xa7,
1437 0xa8, 0xaa, 0xad, 0xaf, 0xb1, 0xb1, 0xb0, 0xaf,
1438 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1439 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1440 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1441 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1442 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1443 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1444 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1445 0xae, 0xaf, 0xaf, 0xb1, 0xb7, 0xa5, 0x19, 0x06,
1446 0xa4, 0xa1, 0xa8, 0xae, 0xa8, 0x77, 0x5d, 0x98,
1447 0xbd, 0xb3, 0xa5, 0xab, 0xa7, 0xa8, 0xad, 0x8c,
1448 0x8f, 0xae, 0xaa, 0x98, 0xa0, 0xa7, 0xa5, 0xad,
1449 0xaa, 0xa5, 0xa2, 0xa6, 0xac, 0xad, 0xa4, 0x9b,
1450 0x7b, 0x83, 0x9e, 0xa3, 0xa1, 0xb5, 0xbe, 0xb9,
1451 0x90, 0x97, 0xad, 0xba, 0xb3, 0xb0, 0xae, 0xa4,
1452 0xa9, 0xaa, 0xab, 0xac, 0xac, 0xab, 0xaa, 0xa9,
1453 0xab, 0xb1, 0xac, 0xa2, 0xa8, 0xb4, 0xaa, 0x93,
1454 0x79, 0xaa, 0xab, 0xad, 0xaf, 0xa9, 0xae, 0x95,
1455 0xa3, 0xae, 0xb2, 0xb2, 0xb0, 0xad, 0xad, 0xac,
1456 0xae, 0xae, 0xa9, 0xac, 0xaa, 0xb2, 0xb8, 0x9b,
1457 0x95, 0xa3, 0xa8, 0xae, 0xb4, 0xb2, 0xa5, 0x92,
1458 0xa2, 0xb5, 0xae, 0xac, 0xaf, 0xab, 0xae, 0xab,
1459 0xac, 0xab, 0xaa, 0xb3, 0xae, 0xaa, 0x8c, 0x95,
1460 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1461 0xaf, 0xab, 0xa8, 0xaf, 0xb2, 0xa5, 0x9c, 0xa1,
1462 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1463 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1464 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1465 0xba, 0xaf, 0x9c, 0x98, 0xaf, 0xc1, 0xb3, 0x9b,
1466 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1467 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1468 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1469 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1470 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1471 0xac, 0xad, 0xac, 0xad, 0xb1, 0xb5, 0xb3, 0xaf,
1472 0x94, 0x6f, 0x5a, 0x68, 0x75, 0x6d, 0x65, 0x69,
1473 0x55, 0x5f, 0x6e, 0x7c, 0x81, 0x7f, 0x77, 0x71,
1474 0x78, 0x76, 0x6b, 0x55, 0x41, 0x3e, 0x4d, 0x5d,
1475 0x40, 0x4a, 0x57, 0x60, 0x69, 0x75, 0x85, 0x91,
1476 0x8d, 0x84, 0x7a, 0x73, 0x6f, 0x6a, 0x63, 0x5c,
1477 0x58, 0x4e, 0x45, 0x46, 0x4e, 0x52, 0x4b, 0x43,
1478 0x34, 0x1e, 0x2f, 0x27, 0x1d, 0x50, 0x8b, 0xa3,
1479 0x9b, 0xa7, 0x84, 0x4d, 0x6c, 0x9d, 0x93, 0x97,
1480 0xa3, 0xa0, 0xab, 0xb3, 0xac, 0xab, 0xac, 0xa1,
1481 0xa8, 0xaa, 0xad, 0xaf, 0xb1, 0xb1, 0xb1, 0xb0,
1482 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1483 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1484 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1485 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1486 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1487 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1488 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1489 0xae, 0xaf, 0xb0, 0xb1, 0xb7, 0xa5, 0x18, 0x05,
1490 0xa8, 0xa6, 0xad, 0xae, 0x7a, 0x61, 0x95, 0xb7,
1491 0xaa, 0xa5, 0xb0, 0xa3, 0xa3, 0xb6, 0xa4, 0x8b,
1492 0x9e, 0xaa, 0xa8, 0x9d, 0x9e, 0xa8, 0xab, 0xa8,
1493 0xab, 0xa9, 0xac, 0xb5, 0xba, 0xad, 0x90, 0x78,
1494 0x9a, 0x99, 0xb7, 0xac, 0x9d, 0xac, 0xa5, 0x9e,
1495 0x8d, 0x90, 0xa0, 0xaa, 0xa3, 0xa4, 0xa8, 0xa3,
1496 0xaa, 0xa9, 0xa7, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8,
1497 0x9c, 0xae, 0xb1, 0xa7, 0xab, 0xb3, 0x9e, 0x79,
1498 0x9d, 0x9c, 0xab, 0xac, 0xb1, 0xb2, 0x9b, 0x98,
1499 0xa6, 0xb7, 0xb0, 0xaa, 0xaa, 0xaa, 0xb1, 0xab,
1500 0xa7, 0xaf, 0xab, 0xb2, 0xb8, 0xaf, 0x83, 0x3a,
1501 0x8f, 0xb1, 0xac, 0x96, 0x9b, 0xae, 0xa8, 0x84,
1502 0xa6, 0xb8, 0xb1, 0xae, 0xb0, 0xab, 0xae, 0xab,
1503 0xac, 0xab, 0xab, 0xb4, 0xae, 0xa9, 0x8b, 0x96,
1504 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1505 0xac, 0xb2, 0xaa, 0xa9, 0xb4, 0xac, 0x9b, 0x9c,
1506 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1507 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1508 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1509 0x99, 0x86, 0x7d, 0x79, 0x78, 0x8c, 0xa1, 0xa1,
1510 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1511 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1512 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1513 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1514 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1515 0xb6, 0xb2, 0xb1, 0xb3, 0xb4, 0xb2, 0xaf, 0xaf,
1516 0x99, 0x70, 0x5a, 0x6a, 0x7a, 0x73, 0x6a, 0x6e,
1517 0x69, 0x74, 0x82, 0x8c, 0x8c, 0x81, 0x71, 0x67,
1518 0x41, 0x42, 0x48, 0x52, 0x5b, 0x59, 0x4d, 0x41,
1519 0x72, 0x7b, 0x83, 0x81, 0x74, 0x66, 0x5d, 0x5a,
1520 0x67, 0x65, 0x65, 0x68, 0x6c, 0x6b, 0x64, 0x5d,
1521 0x5c, 0x4e, 0x42, 0x46, 0x52, 0x56, 0x4a, 0x3b,
1522 0x35, 0x2f, 0x2d, 0x28, 0x3b, 0x4e, 0x5a, 0x7d,
1523 0x72, 0xa3, 0x8c, 0x3d, 0x4e, 0x7f, 0x7e, 0x96,
1524 0xa7, 0xa2, 0xae, 0xb4, 0xab, 0xaa, 0xaa, 0x9e,
1525 0xa7, 0xa9, 0xac, 0xaf, 0xb1, 0xb1, 0xb1, 0xb0,
1526 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1527 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1528 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1529 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1530 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1531 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1532 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1533 0xaf, 0xb0, 0xb0, 0xb1, 0xb7, 0xa5, 0x18, 0x05,
1534 0xa7, 0xb0, 0xa9, 0x7a, 0x5e, 0x8a, 0xb5, 0xa9,
1535 0xa9, 0xa2, 0xae, 0xa7, 0xa7, 0xaa, 0x97, 0x99,
1536 0xa7, 0xab, 0xab, 0xa2, 0x98, 0x99, 0xa5, 0xb2,
1537 0xab, 0xa7, 0xb0, 0xb5, 0x96, 0x70, 0x79, 0xa0,
1538 0xa8, 0xb3, 0xa2, 0x97, 0xaa, 0xae, 0xa6, 0xad,
1539 0x8c, 0x81, 0xad, 0xad, 0x9e, 0xaf, 0xa7, 0xa7,
1540 0xab, 0xa5, 0xa5, 0xab, 0xab, 0xa7, 0xa8, 0xae,
1541 0xa7, 0xb8, 0xa8, 0xa1, 0xb6, 0x9d, 0x7f, 0x9d,
1542 0xad, 0x9a, 0xa7, 0xae, 0xb0, 0xa9, 0x97, 0xa4,
1543 0xb3, 0xb3, 0xb1, 0xb0, 0xaf, 0xae, 0xae, 0xad,
1544 0xb1, 0xad, 0xa6, 0xad, 0xb4, 0xa4, 0xa1, 0xbc,
1545 0xc7, 0xb0, 0xa8, 0xa0, 0xa5, 0xb1, 0xa6, 0x9d,
1546 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1547 0xb2, 0xb2, 0xaa, 0xb1, 0xaf, 0xa7, 0x8a, 0xa2,
1548 0xb0, 0xb0, 0xaf, 0xae, 0xae, 0xad, 0xac, 0xac,
1549 0xaf, 0xae, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9,
1550 0x97, 0xae, 0xb0, 0xa9, 0xb0, 0xaf, 0xa8, 0xac,
1551 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1552 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1553 0x97, 0x4d, 0x28, 0x59, 0x98, 0xa5, 0x96, 0x8e,
1554 0xa2, 0xab, 0xb0, 0xac, 0xaa, 0xad, 0xae, 0xab,
1555 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1556 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1557 0xae, 0xae, 0xaf, 0xb0, 0xb0, 0xb1, 0xb2, 0xb2,
1558 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1559 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1560 0x95, 0x6e, 0x54, 0x5f, 0x71, 0x74, 0x76, 0x7d,
1561 0x77, 0x7b, 0x82, 0x85, 0x81, 0x75, 0x66, 0x5b,
1562 0x63, 0x5a, 0x57, 0x5f, 0x6d, 0x6f, 0x63, 0x54,
1563 0x65, 0x6f, 0x6f, 0x5b, 0x3f, 0x33, 0x40, 0x53,
1564 0x6a, 0x6f, 0x75, 0x78, 0x74, 0x6a, 0x5e, 0x56,
1565 0x55, 0x55, 0x54, 0x51, 0x4c, 0x45, 0x3e, 0x3a,
1566 0x2c, 0x37, 0x34, 0x27, 0x52, 0x64, 0x49, 0x66,
1567 0x80, 0x9c, 0x74, 0x4f, 0x68, 0x79, 0x82, 0xa4,
1568 0xa5, 0x9c, 0xa5, 0xb3, 0xb0, 0xa9, 0xa8, 0xa5,
1569 0xa2, 0xa9, 0xb1, 0xb4, 0xb3, 0xb0, 0xaf, 0xaf,
1570 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1571 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1572 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1573 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1574 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1575 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1576 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1577 0xaf, 0xae, 0xae, 0xb3, 0xbc, 0xaa, 0x19, 0x02,
1578 0xab, 0xac, 0x7b, 0x61, 0x96, 0xbf, 0xb0, 0x9e,
1579 0xa5, 0xaa, 0xaa, 0xa6, 0xac, 0xa4, 0x94, 0xa0,
1580 0xa7, 0xab, 0xad, 0xa9, 0xa1, 0x9d, 0xa1, 0xa6,
1581 0xac, 0xa7, 0x8d, 0x6f, 0x76, 0x9e, 0xb9, 0xba,
1582 0xb3, 0xab, 0x9f, 0x9d, 0x9f, 0xa0, 0xaa, 0xbc,
1583 0x96, 0x7c, 0x9f, 0xac, 0xab, 0xb8, 0xab, 0xaa,
1584 0xab, 0xad, 0xad, 0xaa, 0xa5, 0xa3, 0xa9, 0xb1,
1585 0xaa, 0xa9, 0xad, 0xad, 0xab, 0x92, 0x89, 0xba,
1586 0xab, 0x9d, 0xaa, 0xb0, 0xae, 0xa7, 0x99, 0xa7,
1587 0xb0, 0xac, 0xa8, 0xa5, 0xa5, 0xa9, 0xaf, 0xb3,
1588 0xb2, 0xae, 0xae, 0xb5, 0xb3, 0xa3, 0xa2, 0xb5,
1589 0xb9, 0xab, 0xae, 0xae, 0xb3, 0xb6, 0xa0, 0x92,
1590 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1591 0xb2, 0xb2, 0xab, 0xb1, 0xaf, 0xa7, 0x8b, 0xa3,
1592 0xb0, 0xb0, 0xaf, 0xaf, 0xae, 0xad, 0xad, 0xac,
1593 0xaf, 0xae, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xaa,
1594 0x9a, 0xab, 0xb0, 0xac, 0xad, 0xaf, 0xab, 0xab,
1595 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1596 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1597 0xba, 0xc2, 0xcb, 0xcb, 0xbf, 0xad, 0xa0, 0x9a,
1598 0xa3, 0xac, 0xb0, 0xac, 0xaa, 0xad, 0xae, 0xab,
1599 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1600 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1601 0xae, 0xaf, 0xaf, 0xb0, 0xb1, 0xb1, 0xb2, 0xb2,
1602 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1603 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1604 0xa6, 0x82, 0x67, 0x6b, 0x74, 0x70, 0x6d, 0x70,
1605 0x6a, 0x75, 0x7e, 0x79, 0x6a, 0x5f, 0x60, 0x66,
1606 0x63, 0x63, 0x66, 0x6a, 0x6d, 0x68, 0x5e, 0x56,
1607 0x69, 0x65, 0x5e, 0x57, 0x55, 0x5c, 0x69, 0x72,
1608 0x6d, 0x70, 0x73, 0x73, 0x6e, 0x63, 0x58, 0x51,
1609 0x5b, 0x5b, 0x5b, 0x59, 0x54, 0x4e, 0x48, 0x45,
1610 0x26, 0x29, 0x31, 0x38, 0x65, 0x7b, 0x62, 0x6e,
1611 0x9e, 0xa9, 0x86, 0x61, 0x5c, 0x7d, 0xa4, 0x99,
1612 0xa1, 0xa2, 0xae, 0xb3, 0xa7, 0xa1, 0xa8, 0xaa,
1613 0xa3, 0xa9, 0xb1, 0xb4, 0xb3, 0xb0, 0xaf, 0xb0,
1614 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1615 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1616 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1617 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1618 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1619 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1620 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1621 0xb2, 0xb0, 0xb1, 0xb5, 0xbe, 0xac, 0x1b, 0x03,
1622 0xa2, 0x79, 0x6a, 0x94, 0xbc, 0xb3, 0xa5, 0xaf,
1623 0xa2, 0xb1, 0xa6, 0xa7, 0xaf, 0x9b, 0x95, 0xa8,
1624 0xa7, 0xaa, 0xae, 0xae, 0xab, 0xa5, 0x9e, 0x9a,
1625 0xb2, 0xa6, 0x9e, 0xa5, 0xb4, 0xb9, 0xb1, 0xa5,
1626 0xac, 0xa9, 0xa6, 0xa1, 0xa5, 0xb8, 0xc0, 0xb4,
1627 0x83, 0x65, 0x7f, 0x91, 0x94, 0x9e, 0x99, 0xa3,
1628 0xa4, 0xa9, 0xae, 0xae, 0xac, 0xac, 0xae, 0xb1,
1629 0xac, 0xb3, 0xa7, 0xb7, 0x8f, 0x7d, 0xbd, 0xb7,
1630 0xa6, 0xa1, 0xae, 0xb2, 0xab, 0xa2, 0x9c, 0xac,
1631 0xb4, 0xb1, 0xad, 0xaa, 0xab, 0xae, 0xb2, 0xb5,
1632 0xab, 0xa6, 0xad, 0xb2, 0xa7, 0x9f, 0xa9, 0xb6,
1633 0xb0, 0xaa, 0xb2, 0xb6, 0xbb, 0xb6, 0x9b, 0x91,
1634 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1635 0xb2, 0xb2, 0xab, 0xb2, 0xb0, 0xa7, 0x8b, 0xa3,
1636 0xb1, 0xb1, 0xb0, 0xaf, 0xaf, 0xae, 0xad, 0xad,
1637 0xae, 0xae, 0xae, 0xad, 0xad, 0xac, 0xac, 0xab,
1638 0xa0, 0xa6, 0xaf, 0xb0, 0xab, 0xae, 0xb0, 0xaa,
1639 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1640 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1641 0xa5, 0xb7, 0xbc, 0xb0, 0xaa, 0xaf, 0xab, 0x9e,
1642 0xa3, 0xac, 0xb1, 0xad, 0xab, 0xae, 0xaf, 0xac,
1643 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1644 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1645 0xaf, 0xaf, 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3,
1646 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1647 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1648 0xad, 0x8a, 0x69, 0x60, 0x64, 0x67, 0x6e, 0x77,
1649 0x6c, 0x77, 0x82, 0x83, 0x7b, 0x71, 0x6c, 0x6c,
1650 0x6f, 0x6d, 0x68, 0x61, 0x5d, 0x62, 0x6c, 0x75,
1651 0x62, 0x5c, 0x58, 0x5b, 0x64, 0x6c, 0x70, 0x6f,
1652 0x6b, 0x6f, 0x73, 0x75, 0x70, 0x67, 0x5c, 0x55,
1653 0x58, 0x59, 0x59, 0x58, 0x55, 0x50, 0x4b, 0x48,
1654 0x4c, 0x30, 0x2a, 0x38, 0x62, 0x82, 0x75, 0x6e,
1655 0x52, 0x70, 0x84, 0x65, 0x52, 0x7a, 0x99, 0x96,
1656 0xa3, 0xa7, 0xb0, 0xad, 0xa0, 0xa1, 0xaa, 0xa8,
1657 0xa5, 0xaa, 0xb1, 0xb4, 0xb2, 0xb0, 0xb0, 0xb1,
1658 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1659 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1660 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1661 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1662 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1663 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1664 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1665 0xb4, 0xb3, 0xb2, 0xb6, 0xc0, 0xad, 0x1c, 0x04,
1666 0x72, 0x75, 0xa0, 0xbc, 0xa8, 0xa1, 0xaf, 0xab,
1667 0xa4, 0xb1, 0xa5, 0xac, 0xaa, 0x93, 0x9e, 0xac,
1668 0xa9, 0xa9, 0xaa, 0xae, 0xb0, 0xac, 0xa2, 0x9a,
1669 0xad, 0xb0, 0xab, 0x9e, 0x9c, 0xa7, 0xaf, 0xae,
1670 0xb0, 0xa7, 0x99, 0x9b, 0xb3, 0xb2, 0x73, 0x29,
1671 0x55, 0x64, 0x9b, 0xaf, 0x9f, 0x98, 0x9f, 0xb6,
1672 0xb3, 0xab, 0xa6, 0xa9, 0xab, 0xac, 0xb0, 0xb6,
1673 0xad, 0xa8, 0xc1, 0x9d, 0x84, 0xac, 0xb0, 0xa1,
1674 0xa3, 0xa6, 0xb2, 0xb4, 0xa9, 0x9f, 0xa2, 0xb1,
1675 0xb3, 0xb4, 0xb5, 0xb6, 0xb4, 0xb2, 0xaf, 0xad,
1676 0xb8, 0xb0, 0xb6, 0xb4, 0xa0, 0xa0, 0xb1, 0xb6,
1677 0xb3, 0xad, 0xb2, 0xb2, 0xb7, 0xb1, 0x9b, 0x9d,
1678 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1679 0xb3, 0xb3, 0xac, 0xb3, 0xb0, 0xa8, 0x8c, 0xa4,
1680 0xb2, 0xb1, 0xb1, 0xb0, 0xaf, 0xaf, 0xae, 0xae,
1681 0xae, 0xae, 0xae, 0xae, 0xae, 0xad, 0xad, 0xad,
1682 0xa7, 0xa2, 0xad, 0xb2, 0xa9, 0xae, 0xb4, 0xaa,
1683 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1684 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1685 0xac, 0xae, 0xad, 0xab, 0xac, 0xae, 0xa7, 0x9d,
1686 0xa4, 0xad, 0xb1, 0xad, 0xab, 0xae, 0xaf, 0xac,
1687 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1688 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1689 0xb0, 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4,
1690 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1691 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1692 0xbb, 0x9e, 0x7b, 0x65, 0x5f, 0x62, 0x6b, 0x74,
1693 0x74, 0x7b, 0x80, 0x7e, 0x72, 0x62, 0x54, 0x4e,
1694 0x5f, 0x64, 0x6a, 0x6d, 0x6f, 0x72, 0x77, 0x7b,
1695 0x77, 0x7d, 0x84, 0x88, 0x85, 0x7c, 0x71, 0x6a,
1696 0x7c, 0x81, 0x85, 0x82, 0x74, 0x5e, 0x47, 0x38,
1697 0x4d, 0x4e, 0x4f, 0x4f, 0x4c, 0x48, 0x43, 0x40,
1698 0x3f, 0x39, 0x4a, 0x4f, 0x43, 0x51, 0x70, 0x85,
1699 0x92, 0x6f, 0x87, 0x72, 0x66, 0x8e, 0x86, 0x78,
1700 0xaa, 0xa9, 0xaa, 0xa4, 0x9e, 0xa8, 0xac, 0xa0,
1701 0xa7, 0xac, 0xb1, 0xb3, 0xb2, 0xb0, 0xb1, 0xb3,
1702 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1703 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1704 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1705 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1706 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1707 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1708 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1709 0xb4, 0xb2, 0xb2, 0xb6, 0xbf, 0xac, 0x1a, 0x02,
1710 0x6d, 0xa0, 0xbc, 0xae, 0xa6, 0xaf, 0xaf, 0xa2,
1711 0xab, 0xaa, 0xa7, 0xb0, 0x9f, 0x93, 0xab, 0xaa,
1712 0xac, 0xa8, 0xa5, 0xa8, 0xae, 0xb0, 0xab, 0xa5,
1713 0x8c, 0xa1, 0xa9, 0x9d, 0x9b, 0xaa, 0xaf, 0xa7,
1714 0xab, 0xad, 0xa3, 0xa6, 0xb1, 0x96, 0x65, 0x50,
1715 0x9f, 0x98, 0xa2, 0xa9, 0xad, 0xb4, 0xae, 0xa8,
1716 0xb3, 0xab, 0xac, 0xb3, 0xb0, 0xa4, 0xa6, 0xb2,
1717 0xb5, 0xad, 0xa0, 0x7e, 0x99, 0xbd, 0xa3, 0xa3,
1718 0xa1, 0xab, 0xb3, 0xb4, 0xa8, 0x9e, 0xa8, 0xb4,
1719 0xaa, 0xac, 0xaf, 0xb1, 0xb1, 0xaf, 0xac, 0xaa,
1720 0xad, 0xaa, 0xb2, 0xae, 0x9e, 0xa4, 0xb4, 0xb2,
1721 0xb5, 0xb0, 0xb2, 0xaf, 0xb5, 0xac, 0x9b, 0xa9,
1722 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1723 0xb4, 0xb4, 0xad, 0xb3, 0xb1, 0xa9, 0x8d, 0xa5,
1724 0xb2, 0xb2, 0xb1, 0xb1, 0xb0, 0xaf, 0xaf, 0xae,
1725 0xae, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf,
1726 0xab, 0xa2, 0xaa, 0xb2, 0xab, 0xae, 0xb4, 0xac,
1727 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1728 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1729 0xab, 0xab, 0xaf, 0xb3, 0xb3, 0xac, 0xa5, 0xa1,
1730 0xa5, 0xae, 0xb2, 0xae, 0xac, 0xaf, 0xb0, 0xad,
1731 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1732 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1733 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
1734 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1735 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1736 0xb6, 0xab, 0x97, 0x82, 0x78, 0x79, 0x7e, 0x80,
1737 0x70, 0x7a, 0x80, 0x78, 0x66, 0x5b, 0x5e, 0x66,
1738 0x79, 0x6d, 0x60, 0x5c, 0x63, 0x73, 0x82, 0x8c,
1739 0x85, 0x89, 0x90, 0x95, 0x93, 0x87, 0x75, 0x68,
1740 0x6c, 0x69, 0x65, 0x60, 0x5c, 0x59, 0x57, 0x56,
1741 0x4a, 0x4b, 0x4b, 0x4a, 0x47, 0x42, 0x3d, 0x3a,
1742 0x31, 0x26, 0x3b, 0x56, 0x50, 0x55, 0x6d, 0x6d,
1743 0x94, 0x74, 0x87, 0x98, 0x86, 0x8b, 0x9a, 0x92,
1744 0xa8, 0xa7, 0xa8, 0xa3, 0x9e, 0xa8, 0xad, 0xa0,
1745 0xa9, 0xad, 0xb1, 0xb3, 0xb1, 0xb1, 0xb3, 0xb5,
1746 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1747 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1748 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1749 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1750 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1751 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1752 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1753 0xb3, 0xb2, 0xb1, 0xb4, 0xbd, 0xaa, 0x18, 0x00,
1754 0xa5, 0xaf, 0xaa, 0xaa, 0xb6, 0xb1, 0xa7, 0xac,
1755 0xb0, 0xa6, 0xaa, 0xac, 0x97, 0x9b, 0xb2, 0xa8,
1756 0xae, 0xa9, 0xa4, 0xa6, 0xac, 0xb0, 0xb0, 0xae,
1757 0xa8, 0x98, 0x97, 0xab, 0xb7, 0xb2, 0xaf, 0xb4,
1758 0xaa, 0xad, 0x9d, 0xa0, 0xb2, 0x90, 0x53, 0x3b,
1759 0x93, 0x99, 0xa0, 0xa4, 0xa8, 0xae, 0xae, 0xac,
1760 0xa4, 0xa6, 0xac, 0xb1, 0xaa, 0xa4, 0xad, 0xbd,
1761 0xb2, 0x9e, 0x72, 0x9c, 0xb4, 0xa6, 0xbb, 0xa0,
1762 0xa1, 0xb0, 0xb2, 0xb4, 0xa9, 0xa0, 0xae, 0xb5,
1763 0xad, 0xad, 0xad, 0xae, 0xb0, 0xb3, 0xb5, 0xb7,
1764 0xac, 0xb1, 0xb3, 0xaa, 0xa3, 0xac, 0xb2, 0xa9,
1765 0xb0, 0xb1, 0xb4, 0xb3, 0xb8, 0xab, 0x98, 0xae,
1766 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1767 0xb5, 0xb5, 0xad, 0xb4, 0xb2, 0xaa, 0x8d, 0xa5,
1768 0xb3, 0xb3, 0xb2, 0xb1, 0xb1, 0xb0, 0xaf, 0xaf,
1769 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1,
1770 0xae, 0xa5, 0xa7, 0xaf, 0xaf, 0xaf, 0xb1, 0xaf,
1771 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1772 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1773 0xb6, 0xb6, 0xaf, 0xa8, 0xa9, 0xad, 0xa8, 0x9e,
1774 0xa5, 0xae, 0xb3, 0xaf, 0xad, 0xb0, 0xb1, 0xae,
1775 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1776 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1777 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5,
1778 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
1779 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
1780 0xb7, 0xb3, 0x9c, 0x78, 0x62, 0x61, 0x67, 0x68,
1781 0x67, 0x6e, 0x77, 0x7c, 0x7e, 0x7e, 0x81, 0x84,
1782 0x76, 0x72, 0x6e, 0x6f, 0x73, 0x75, 0x73, 0x71,
1783 0x73, 0x6c, 0x69, 0x71, 0x7e, 0x7f, 0x71, 0x62,
1784 0x5e, 0x6b, 0x7d, 0x88, 0x85, 0x74, 0x5e, 0x4e,
1785 0x55, 0x55, 0x54, 0x51, 0x4c, 0x46, 0x3f, 0x3c,
1786 0x30, 0x30, 0x41, 0x5c, 0x4e, 0x44, 0x63, 0x6c,
1787 0x94, 0xb1, 0x65, 0x79, 0xbb, 0x9f, 0x8e, 0x86,
1788 0x9e, 0xa2, 0xac, 0xaa, 0x9e, 0xa1, 0xaa, 0xa8,
1789 0xab, 0xae, 0xb2, 0xb2, 0xb1, 0xb1, 0xb4, 0xb7,
1790 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1791 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1792 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1793 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1794 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1795 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1796 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1797 0xb6, 0xb4, 0xb3, 0xb6, 0xbe, 0xab, 0x18, 0x00,
1798 0xb9, 0xad, 0xa9, 0xaa, 0xaa, 0xae, 0xaf, 0xa9,
1799 0xb1, 0xa9, 0xad, 0x9f, 0x95, 0xa8, 0xb1, 0xa9,
1800 0xaf, 0xac, 0xa9, 0xa9, 0xab, 0xae, 0xaf, 0xaf,
1801 0xaf, 0x9f, 0x93, 0x9a, 0xa7, 0xaf, 0xb3, 0xb5,
1802 0xa6, 0xa7, 0x9f, 0xa3, 0xb4, 0xb1, 0x9f, 0x98,
1803 0xb1, 0xa4, 0x94, 0x98, 0xa3, 0xa8, 0xae, 0xb0,
1804 0xab, 0xad, 0xa7, 0x9d, 0x9f, 0xae, 0xb6, 0xb4,
1805 0x98, 0x7a, 0x9f, 0xc0, 0xba, 0xb9, 0xab, 0x96,
1806 0xa3, 0xb2, 0xaf, 0xb2, 0xaa, 0xa3, 0xb3, 0xb4,
1807 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4,
1808 0xc1, 0xc6, 0xb6, 0xa0, 0xa3, 0xb1, 0xb3, 0xad,
1809 0xae, 0xb1, 0xb5, 0xb5, 0xba, 0xa9, 0x96, 0xb2,
1810 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1811 0xb5, 0xb5, 0xae, 0xb5, 0xb2, 0xaa, 0x8e, 0xa6,
1812 0xb4, 0xb3, 0xb3, 0xb2, 0xb1, 0xb1, 0xb0, 0xb0,
1813 0xad, 0xae, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb2,
1814 0xaf, 0xa9, 0xa4, 0xab, 0xb4, 0xb1, 0xad, 0xb4,
1815 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1816 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1817 0xa4, 0xb0, 0xb5, 0xad, 0xa9, 0xad, 0xae, 0xa9,
1818 0xa6, 0xaf, 0xb3, 0xaf, 0xad, 0xb0, 0xb1, 0xae,
1819 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1820 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1821 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6,
1822 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1823 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1824 0xbe, 0xbd, 0xa3, 0x77, 0x60, 0x6c, 0x80, 0x88,
1825 0x82, 0x7f, 0x81, 0x8c, 0x98, 0x98, 0x8c, 0x7f,
1826 0x7c, 0x79, 0x73, 0x6b, 0x66, 0x68, 0x72, 0x7a,
1827 0x75, 0x70, 0x6e, 0x74, 0x7d, 0x7d, 0x74, 0x69,
1828 0x5b, 0x5a, 0x5a, 0x5b, 0x5c, 0x5e, 0x61, 0x62,
1829 0x60, 0x5f, 0x5d, 0x58, 0x51, 0x49, 0x41, 0x3c,
1830 0x4e, 0x3d, 0x31, 0x55, 0x64, 0x5a, 0x68, 0x61,
1831 0x71, 0xc5, 0x60, 0x23, 0x7a, 0x87, 0x75, 0x98,
1832 0x99, 0x9b, 0xa8, 0xaf, 0xa4, 0xa1, 0xa8, 0xab,
1833 0xac, 0xaf, 0xb2, 0xb2, 0xb0, 0xb1, 0xb5, 0xb9,
1834 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1835 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1836 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1837 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1838 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1839 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1840 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1841 0xbc, 0xba, 0xb9, 0xbb, 0xc3, 0xaf, 0x1d, 0x05,
1842 0xad, 0xa9, 0xa6, 0xa7, 0xa9, 0xa9, 0xa8, 0xa5,
1843 0xb0, 0xae, 0xaf, 0x95, 0x96, 0xb1, 0xac, 0xaa,
1844 0xb0, 0xaf, 0xae, 0xad, 0xac, 0xab, 0xab, 0xab,
1845 0xae, 0xad, 0xa8, 0x9e, 0x98, 0x99, 0xa1, 0xa8,
1846 0xb9, 0x98, 0x90, 0xa7, 0xb2, 0xae, 0xb4, 0xc1,
1847 0xba, 0xad, 0x9f, 0xad, 0xb7, 0xac, 0xac, 0xb1,
1848 0xa9, 0xb4, 0xb3, 0xac, 0xb8, 0xc2, 0xa1, 0x70,
1849 0x7f, 0xa7, 0xba, 0xad, 0xad, 0xb5, 0xaa, 0xa1,
1850 0xa5, 0xb4, 0xad, 0xb1, 0xac, 0xa5, 0xb6, 0xb3,
1851 0xb8, 0xb9, 0xbb, 0xb9, 0xb4, 0xab, 0xa1, 0x9b,
1852 0xa4, 0xa8, 0x8d, 0x76, 0x8c, 0xae, 0xbc, 0xc2,
1853 0xb1, 0xb4, 0xb4, 0xb1, 0xb7, 0xa6, 0x97, 0xb9,
1854 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1855 0xb5, 0xb5, 0xae, 0xb5, 0xb3, 0xaa, 0x8e, 0xa6,
1856 0xb4, 0xb4, 0xb3, 0xb2, 0xb2, 0xb1, 0xb0, 0xb0,
1857 0xad, 0xae, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3,
1858 0xaf, 0xad, 0xa3, 0xa8, 0xb8, 0xb2, 0xaa, 0xb6,
1859 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1860 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1861 0xb6, 0xb0, 0xaa, 0xaa, 0xae, 0xaf, 0xaa, 0xa5,
1862 0xa6, 0xaf, 0xb4, 0xb0, 0xae, 0xb1, 0xb2, 0xaf,
1863 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1864 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1865 0xb2, 0xb2, 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6,
1866 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
1867 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1868 0xb8, 0xbd, 0xa8, 0x7d, 0x66, 0x73, 0x88, 0x8f,
1869 0x79, 0x76, 0x74, 0x74, 0x76, 0x76, 0x73, 0x70,
1870 0x66, 0x72, 0x7a, 0x76, 0x6a, 0x67, 0x71, 0x7e,
1871 0x7e, 0x89, 0x93, 0x92, 0x86, 0x77, 0x6e, 0x6b,
1872 0x66, 0x6d, 0x75, 0x79, 0x73, 0x65, 0x55, 0x4a,
1873 0x64, 0x63, 0x60, 0x5a, 0x51, 0x47, 0x3e, 0x39,
1874 0x32, 0x38, 0x3b, 0x6b, 0x7d, 0x69, 0x73, 0x73,
1875 0x7f, 0xac, 0x8a, 0x1d, 0x50, 0xb5, 0x9a, 0x98,
1876 0x9c, 0x94, 0x9e, 0xae, 0xad, 0xa8, 0xa8, 0xa7,
1877 0xad, 0xb0, 0xb2, 0xb1, 0xb0, 0xb1, 0xb5, 0xb9,
1878 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1879 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1880 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1881 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1882 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1883 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1884 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
1885 0xc1, 0xbf, 0xbe, 0xc0, 0xc8, 0xb4, 0x21, 0x09,
1886 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1887 0xab, 0xb9, 0x9e, 0x95, 0xaa, 0xae, 0xad, 0xad,
1888 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1889 0xae, 0xb2, 0xb3, 0xaf, 0xa6, 0x9d, 0x99, 0x98,
1890 0xaf, 0x9a, 0xa4, 0xb4, 0xac, 0xac, 0xb1, 0xa5,
1891 0xae, 0xa7, 0x9b, 0xa8, 0xb0, 0xac, 0xb1, 0xad,
1892 0xb6, 0xa4, 0xb1, 0xcb, 0xb1, 0x79, 0x79, 0xa6,
1893 0xc6, 0xac, 0xab, 0xac, 0xb7, 0xb5, 0x99, 0x99,
1894 0xb3, 0xaf, 0xb0, 0xa8, 0x9e, 0xac, 0xba, 0xb2,
1895 0xb6, 0xb2, 0xb1, 0xb5, 0xb2, 0x99, 0x6e, 0x4c,
1896 0x77, 0x97, 0xae, 0xae, 0xb0, 0xbb, 0xbc, 0xb1,
1897 0xb7, 0xb3, 0xab, 0xbf, 0xb3, 0x93, 0xa7, 0xbf,
1898 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1899 0xb3, 0xb4, 0xb9, 0xb1, 0xb6, 0xaa, 0x96, 0xb9,
1900 0xb5, 0xb5, 0xb4, 0xb3, 0xb3, 0xb2, 0xb1, 0xb1,
1901 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1902 0xae, 0xb4, 0xa8, 0xa0, 0xae, 0xb5, 0xb0, 0xb2,
1903 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1904 0xae, 0xaf, 0xb0, 0xb1, 0xb1, 0xaf, 0xad, 0xac,
1905 0xb2, 0xae, 0xac, 0xaf, 0xb4, 0xb1, 0xa5, 0x9a,
1906 0x98, 0xa9, 0xb1, 0xaa, 0xab, 0xb6, 0xb8, 0xae,
1907 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1908 0xb0, 0xb0, 0xb1, 0xb2, 0xb2, 0xb3, 0xb4, 0xb4,
1909 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7,
1910 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1911 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
1912 0xc0, 0xb1, 0xa1, 0x80, 0x70, 0x74, 0x6e, 0x70,
1913 0x77, 0x75, 0x78, 0x7d, 0x7c, 0x78, 0x7c, 0x85,
1914 0x77, 0x79, 0x7b, 0x7a, 0x78, 0x78, 0x7b, 0x7e,
1915 0x7b, 0x7a, 0x82, 0x8b, 0x83, 0x71, 0x6f, 0x7a,
1916 0x82, 0x79, 0x6d, 0x62, 0x5d, 0x5c, 0x5c, 0x5d,
1917 0x59, 0x54, 0x51, 0x51, 0x53, 0x51, 0x4b, 0x45,
1918 0x40, 0x43, 0x2f, 0x48, 0x77, 0x55, 0x31, 0x58,
1919 0x7a, 0x8e, 0x7e, 0x31, 0x3e, 0x68, 0x97, 0x8d,
1920 0x98, 0x9e, 0xa3, 0xac, 0xa6, 0xa0, 0xae, 0xaf,
1921 0xb7, 0xb2, 0xad, 0xae, 0xb3, 0xb6, 0xb4, 0xb1,
1922 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7,
1923 0xb9, 0xb8, 0xb6, 0xb4, 0xb4, 0xb5, 0xb6, 0xb7,
1924 0xb8, 0xb7, 0xb4, 0xb2, 0xb2, 0xb5, 0xb8, 0xba,
1925 0xc6, 0xc3, 0xbe, 0xb9, 0xb7, 0xb7, 0xb9, 0xba,
1926 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2,
1927 0xb6, 0xb8, 0xbb, 0xbf, 0xc4, 0xc8, 0xcc, 0xcd,
1928 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0xcb, 0xcb, 0xcb,
1929 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
1930 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1931 0xab, 0xb8, 0x9e, 0x97, 0xab, 0xae, 0xae, 0xae,
1932 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1933 0xb4, 0xaf, 0xa9, 0xaa, 0xad, 0xac, 0xa4, 0x9c,
1934 0x90, 0x84, 0x98, 0xb2, 0xb1, 0xb4, 0xb8, 0xab,
1935 0xb1, 0xa8, 0x99, 0xa5, 0xae, 0xae, 0xb8, 0xb7,
1936 0xbc, 0xbe, 0xa1, 0x73, 0x70, 0x99, 0xb5, 0xb2,
1937 0xaf, 0xb2, 0xa9, 0xaf, 0xb6, 0xa0, 0x94, 0xa2,
1938 0xb2, 0xae, 0xaf, 0xa8, 0xa0, 0xad, 0xb9, 0xb3,
1939 0xb4, 0xb1, 0xaf, 0xb1, 0xb4, 0xb2, 0xa9, 0xa2,
1940 0xc0, 0xc9, 0xc4, 0xb1, 0xa5, 0xaa, 0xb2, 0xb2,
1941 0xb5, 0xb3, 0xb1, 0xbe, 0xad, 0x95, 0xac, 0xbe,
1942 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1943 0xb4, 0xb5, 0xb9, 0xb2, 0xb6, 0xa9, 0x99, 0xba,
1944 0xb5, 0xb5, 0xb4, 0xb4, 0xb3, 0xb2, 0xb2, 0xb1,
1945 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1946 0xaf, 0xb4, 0xa9, 0xa2, 0xae, 0xb5, 0xb1, 0xb2,
1947 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1948 0xad, 0xae, 0xb0, 0xb1, 0xb1, 0xb0, 0xae, 0xad,
1949 0xac, 0xab, 0xac, 0xaf, 0xb2, 0xb3, 0xb1, 0xaf,
1950 0x9c, 0xa7, 0xb0, 0xb2, 0xb2, 0xb4, 0xb3, 0xb1,
1951 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1952 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
1953 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb7,
1954 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1955 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
1956 0xbd, 0xb4, 0xac, 0x90, 0x81, 0x83, 0x7c, 0x7e,
1957 0x78, 0x72, 0x73, 0x7c, 0x81, 0x7f, 0x7c, 0x7e,
1958 0x92, 0x86, 0x75, 0x69, 0x68, 0x70, 0x7b, 0x83,
1959 0x80, 0x7b, 0x7b, 0x7d, 0x75, 0x69, 0x6c, 0x78,
1960 0x77, 0x64, 0x50, 0x4c, 0x54, 0x5b, 0x57, 0x50,
1961 0x43, 0x41, 0x43, 0x47, 0x4c, 0x4a, 0x42, 0x3a,
1962 0x3e, 0x53, 0x46, 0x45, 0x63, 0x56, 0x37, 0x3f,
1963 0x88, 0x93, 0x7f, 0x5e, 0x47, 0x4a, 0x51, 0x5f,
1964 0x84, 0xa5, 0xb5, 0xac, 0x99, 0x9b, 0xb0, 0xae,
1965 0xb1, 0xae, 0xad, 0xaf, 0xb4, 0xb6, 0xb4, 0xb0,
1966 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb7,
1967 0xb9, 0xb8, 0xb6, 0xb4, 0xb4, 0xb5, 0xb7, 0xb8,
1968 0xb9, 0xb7, 0xb6, 0xb5, 0xb6, 0xb9, 0xbc, 0xbe,
1969 0xc3, 0xc1, 0xbe, 0xbb, 0xb8, 0xb7, 0xb7, 0xb7,
1970 0xb4, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba,
1971 0xbe, 0xbf, 0xc1, 0xc4, 0xc7, 0xca, 0xcc, 0xcd,
1972 0xcd, 0xcd, 0xcd, 0xcc, 0xcb, 0xcb, 0xca, 0xca,
1973 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
1974 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1975 0xac, 0xb5, 0x9d, 0x9a, 0xac, 0xae, 0xaf, 0xae,
1976 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1977 0xae, 0xae, 0xae, 0xac, 0xab, 0xac, 0xae, 0xb0,
1978 0xad, 0x93, 0x89, 0x88, 0x81, 0x8e, 0xa4, 0xa7,
1979 0xa9, 0xa8, 0xa3, 0xb2, 0xb6, 0xa6, 0x9d, 0x90,
1980 0x6c, 0x6c, 0x80, 0xa5, 0xbf, 0xc0, 0xb7, 0xb4,
1981 0xa2, 0xb2, 0xad, 0xb7, 0xac, 0x91, 0xa0, 0xac,
1982 0xb2, 0xad, 0xac, 0xa8, 0xa4, 0xae, 0xb8, 0xb3,
1983 0xab, 0xb1, 0xb7, 0xb8, 0xb7, 0xb8, 0xbd, 0xc2,
1984 0xbb, 0xbb, 0xb8, 0xaf, 0xa9, 0xac, 0xb6, 0xbe,
1985 0xb3, 0xb4, 0xb9, 0xbc, 0xa4, 0x9a, 0xb4, 0xbb,
1986 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
1987 0xb5, 0xb6, 0xb8, 0xb4, 0xb6, 0xa8, 0x9e, 0xbb,
1988 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb3, 0xb2, 0xb2,
1989 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1990 0xb0, 0xb4, 0xac, 0xa4, 0xac, 0xb3, 0xb2, 0xb2,
1991 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1992 0xac, 0xae, 0xb0, 0xb1, 0xb1, 0xb0, 0xae, 0xad,
1993 0xb5, 0xb5, 0xb4, 0xb1, 0xae, 0xad, 0xb0, 0xb3,
1994 0x98, 0x9e, 0xaa, 0xb4, 0xb5, 0xb1, 0xaf, 0xb2,
1995 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1996 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5,
1997 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8,
1998 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
1999 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2000 0xbc, 0xb5, 0xad, 0x91, 0x81, 0x86, 0x85, 0x8c,
2001 0x84, 0x89, 0x8f, 0x8e, 0x80, 0x72, 0x74, 0x7e,
2002 0x86, 0x78, 0x6a, 0x67, 0x71, 0x7e, 0x86, 0x89,
2003 0x7d, 0x80, 0x87, 0x8d, 0x86, 0x76, 0x6f, 0x70,
2004 0x6a, 0x64, 0x61, 0x65, 0x69, 0x61, 0x4d, 0x3b,
2005 0x39, 0x46, 0x4d, 0x44, 0x36, 0x36, 0x4b, 0x61,
2006 0x4c, 0x44, 0x39, 0x43, 0x51, 0x46, 0x46, 0x60,
2007 0x80, 0xa6, 0x86, 0x68, 0x57, 0x84, 0x76, 0x6b,
2008 0x8d, 0xc6, 0xae, 0x9e, 0x9f, 0x9d, 0xb5, 0xac,
2009 0xa9, 0xa9, 0xac, 0xb1, 0xb6, 0xb7, 0xb3, 0xb0,
2010 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8,
2011 0xb9, 0xb7, 0xb6, 0xb5, 0xb5, 0xb6, 0xb8, 0xb9,
2012 0xba, 0xb9, 0xb9, 0xba, 0xbc, 0xbf, 0xc2, 0xc4,
2013 0xc0, 0xc0, 0xc0, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4,
2014 0xb6, 0xb7, 0xb8, 0xba, 0xbc, 0xbe, 0xbf, 0xc0,
2015 0xc5, 0xc6, 0xc7, 0xc8, 0xca, 0xcb, 0xcd, 0xcd,
2016 0xce, 0xcd, 0xcc, 0xcc, 0xcb, 0xca, 0xc9, 0xc9,
2017 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2018 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
2019 0xad, 0xb1, 0x9d, 0x9f, 0xae, 0xae, 0xb1, 0xaf,
2020 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
2021 0xab, 0xae, 0xaf, 0xac, 0xa7, 0xa9, 0xb0, 0xb8,
2022 0xa6, 0xa3, 0xaf, 0xb7, 0xab, 0xa0, 0x95, 0x84,
2023 0x8d, 0x82, 0x70, 0x7a, 0x86, 0x8b, 0x9c, 0xa0,
2024 0xb9, 0xc2, 0xc0, 0xb4, 0xb3, 0xba, 0xb3, 0xa1,
2025 0xad, 0xab, 0xb3, 0xb6, 0x99, 0x9a, 0xb8, 0xae,
2026 0xb1, 0xac, 0xa9, 0xa7, 0xa9, 0xb0, 0xb5, 0xb4,
2027 0xab, 0xb5, 0xbf, 0xc0, 0xb8, 0xb2, 0xb1, 0xb3,
2028 0xb2, 0xb0, 0xb3, 0xb8, 0xb4, 0xad, 0xb0, 0xb8,
2029 0xb1, 0xb5, 0xbe, 0xb7, 0x9d, 0xa2, 0xba, 0xb9,
2030 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2031 0xb7, 0xb7, 0xb6, 0xb7, 0xb6, 0xa7, 0xa5, 0xbd,
2032 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb3, 0xb3,
2033 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2034 0xb1, 0xb4, 0xaf, 0xa7, 0xaa, 0xb1, 0xb3, 0xb2,
2035 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2036 0xab, 0xad, 0xaf, 0xb1, 0xb1, 0xb1, 0xaf, 0xae,
2037 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb2, 0xb3, 0xb3,
2038 0x91, 0x9b, 0xa9, 0xb2, 0xb4, 0xb3, 0xb2, 0xb1,
2039 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2040 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6,
2041 0xb5, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9,
2042 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2043 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2044 0xc0, 0xaf, 0x97, 0x6b, 0x51, 0x56, 0x5a, 0x67,
2045 0x73, 0x6b, 0x69, 0x71, 0x77, 0x76, 0x74, 0x75,
2046 0x88, 0x7a, 0x6c, 0x6c, 0x77, 0x7f, 0x7d, 0x77,
2047 0x78, 0x7f, 0x8b, 0x93, 0x8f, 0x82, 0x75, 0x6f,
2048 0x79, 0x76, 0x6d, 0x5c, 0x46, 0x35, 0x2c, 0x2a,
2049 0x4c, 0x41, 0x35, 0x33, 0x3b, 0x44, 0x49, 0x48,
2050 0x3a, 0x44, 0x44, 0x38, 0x3a, 0x54, 0x67, 0x64,
2051 0x75, 0xa7, 0x7f, 0x4a, 0x62, 0xaf, 0x96, 0x5c,
2052 0x91, 0xa5, 0xbd, 0x9d, 0x94, 0xaf, 0xac, 0xb0,
2053 0xa3, 0xa7, 0xad, 0xb4, 0xb8, 0xb7, 0xb3, 0xb0,
2054 0xb5, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9,
2055 0xb8, 0xb7, 0xb6, 0xb5, 0xb6, 0xb8, 0xba, 0xbb,
2056 0xbb, 0xbc, 0xbe, 0xc0, 0xc3, 0xc6, 0xc9, 0xca,
2057 0xc2, 0xc3, 0xc5, 0xc5, 0xc3, 0xbe, 0xb9, 0xb6,
2058 0xba, 0xbb, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xbf,
2059 0xc6, 0xc6, 0xc8, 0xc9, 0xcb, 0xcd, 0xce, 0xcf,
2060 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc8, 0xc7, 0xc7,
2061 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2062 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
2063 0xad, 0xad, 0x9d, 0xa4, 0xb0, 0xae, 0xb2, 0xaf,
2064 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
2065 0xb4, 0xad, 0xa6, 0xa6, 0xab, 0xb0, 0xaf, 0xad,
2066 0x97, 0x9d, 0xac, 0xb7, 0xb9, 0xbc, 0xbd, 0xb6,
2067 0xb9, 0xb3, 0xa8, 0xb4, 0xbc, 0xb8, 0xbc, 0xb8,
2068 0xb0, 0xae, 0xae, 0xaf, 0xad, 0xa9, 0xaa, 0xad,
2069 0xb8, 0xa8, 0xb0, 0x9e, 0x8f, 0xae, 0xbd, 0xac,
2070 0xb0, 0xab, 0xa6, 0xa7, 0xaf, 0xb2, 0xb2, 0xb5,
2071 0xb3, 0xb7, 0xba, 0xb9, 0xb7, 0xb7, 0xb9, 0xbc,
2072 0xbc, 0xb3, 0xaf, 0xb0, 0xa9, 0x9d, 0x9d, 0xa7,
2073 0xb2, 0xb7, 0xbf, 0xaf, 0x9d, 0xab, 0xbb, 0xb9,
2074 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2075 0xb9, 0xb9, 0xb5, 0xb9, 0xb5, 0xa6, 0xac, 0xbf,
2076 0xb7, 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb3,
2077 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2078 0xb3, 0xb4, 0xb2, 0xab, 0xa8, 0xb0, 0xb5, 0xb2,
2079 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2080 0xaa, 0xac, 0xaf, 0xb1, 0xb2, 0xb1, 0xb0, 0xaf,
2081 0xb1, 0xae, 0xad, 0xb1, 0xb6, 0xb5, 0xac, 0xa4,
2082 0xa2, 0xb3, 0xbc, 0xb7, 0xb4, 0xb8, 0xb4, 0xaa,
2083 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2084 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb6,
2085 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xb9,
2086 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2087 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2088 0xca, 0xb6, 0x9c, 0x72, 0x60, 0x6c, 0x76, 0x86,
2089 0x7d, 0x6e, 0x65, 0x6e, 0x7b, 0x7e, 0x7c, 0x7a,
2090 0x84, 0x73, 0x62, 0x60, 0x6b, 0x76, 0x79, 0x75,
2091 0x78, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x78, 0x74,
2092 0x7a, 0x7d, 0x7b, 0x72, 0x67, 0x64, 0x6c, 0x75,
2093 0x60, 0x68, 0x6e, 0x67, 0x57, 0x45, 0x3b, 0x38,
2094 0x2e, 0x41, 0x52, 0x4d, 0x4a, 0x5f, 0x65, 0x50,
2095 0x71, 0x8b, 0x74, 0x4a, 0x86, 0xa8, 0x8f, 0x59,
2096 0x78, 0xb6, 0x9a, 0x84, 0xa3, 0xab, 0xb1, 0xb7,
2097 0xa2, 0xa8, 0xaf, 0xb5, 0xb7, 0xb6, 0xb4, 0xb2,
2098 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xb9,
2099 0xb8, 0xb7, 0xb6, 0xb6, 0xb7, 0xb9, 0xbb, 0xbd,
2100 0xbe, 0xc0, 0xc2, 0xc5, 0xc8, 0xcb, 0xcc, 0xcd,
2101 0xc6, 0xc8, 0xca, 0xca, 0xc7, 0xc3, 0xbe, 0xba,
2102 0xc0, 0xbf, 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xbb,
2103 0xc2, 0xc3, 0xc5, 0xc8, 0xcb, 0xce, 0xd0, 0xd1,
2104 0xce, 0xcd, 0xcc, 0xcb, 0xc9, 0xc7, 0xc6, 0xc5,
2105 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2106 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
2107 0xae, 0xa9, 0x9d, 0xa8, 0xb2, 0xaf, 0xb4, 0xb0,
2108 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2109 0xb0, 0xae, 0xab, 0xab, 0xab, 0xad, 0xad, 0xac,
2110 0x9b, 0xa3, 0xa9, 0xa9, 0xa7, 0xaa, 0xab, 0xa8,
2111 0xad, 0xa7, 0x9d, 0xa9, 0xb0, 0xa9, 0xab, 0xa4,
2112 0xa0, 0xa9, 0xae, 0xac, 0xb0, 0xb5, 0xad, 0x9e,
2113 0xb5, 0xad, 0xa5, 0x88, 0x94, 0xb5, 0xad, 0xac,
2114 0xaf, 0xaa, 0xa3, 0xa7, 0xb4, 0xb4, 0xb0, 0xb5,
2115 0xb1, 0xb1, 0xb1, 0xb3, 0xb7, 0xba, 0xbd, 0xbe,
2116 0xc0, 0xb8, 0xb7, 0xbc, 0xbb, 0xb4, 0xb5, 0xbd,
2117 0xb6, 0xba, 0xbb, 0xa5, 0xa3, 0xb5, 0xb7, 0xba,
2118 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2119 0xbb, 0xba, 0xb4, 0xbc, 0xb5, 0xa5, 0xb3, 0xc0,
2120 0xb8, 0xb8, 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4,
2121 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2122 0xb4, 0xb4, 0xb5, 0xae, 0xa6, 0xae, 0xb6, 0xb2,
2123 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2124 0xa9, 0xab, 0xae, 0xb0, 0xb2, 0xb2, 0xb1, 0xb0,
2125 0xb8, 0xb3, 0xb0, 0xb3, 0xb7, 0xb3, 0xa5, 0x98,
2126 0x91, 0xa4, 0xae, 0xa8, 0xaa, 0xb7, 0xb9, 0xaf,
2127 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2128 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7,
2129 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba,
2130 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2131 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2132 0xbd, 0xab, 0x96, 0x73, 0x66, 0x6f, 0x6f, 0x76,
2133 0x7c, 0x77, 0x77, 0x7d, 0x81, 0x80, 0x83, 0x8a,
2134 0x82, 0x7a, 0x74, 0x78, 0x83, 0x8d, 0x8f, 0x8d,
2135 0x7b, 0x7d, 0x7b, 0x76, 0x79, 0x7d, 0x79, 0x6f,
2136 0x78, 0x76, 0x75, 0x74, 0x72, 0x6d, 0x66, 0x61,
2137 0x5a, 0x4e, 0x47, 0x51, 0x61, 0x61, 0x4d, 0x38,
2138 0x37, 0x37, 0x46, 0x58, 0x5f, 0x62, 0x64, 0x61,
2139 0x71, 0x87, 0x78, 0x52, 0x97, 0xa9, 0x9f, 0x84,
2140 0x6e, 0xc3, 0xa7, 0xa0, 0xb3, 0xa3, 0xb2, 0xb2,
2141 0xa7, 0xad, 0xb3, 0xb6, 0xb6, 0xb5, 0xb5, 0xb6,
2142 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba,
2143 0xb8, 0xb7, 0xb6, 0xb6, 0xb8, 0xba, 0xbd, 0xbf,
2144 0xc1, 0xc3, 0xc6, 0xca, 0xcc, 0xcd, 0xcc, 0xcc,
2145 0xca, 0xca, 0xca, 0xc9, 0xc6, 0xc3, 0xc0, 0xbe,
2146 0xc4, 0xc3, 0xc2, 0xc0, 0xbe, 0xbc, 0xbb, 0xba,
2147 0xc3, 0xc4, 0xc6, 0xc9, 0xcc, 0xcf, 0xd2, 0xd3,
2148 0xce, 0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4, 0xc3,
2149 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2150 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2151 0xaf, 0xa6, 0x9d, 0xac, 0xb3, 0xaf, 0xb5, 0xb0,
2152 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
2153 0xa9, 0xb0, 0xb6, 0xb5, 0xaf, 0xab, 0xaf, 0xb4,
2154 0x8d, 0x9f, 0xac, 0xaf, 0xb0, 0xb0, 0xab, 0xa6,
2155 0xb1, 0xab, 0xa0, 0xad, 0xb4, 0xae, 0xb1, 0xac,
2156 0xb5, 0xb0, 0xaa, 0xaa, 0xb0, 0xb5, 0xb4, 0xb1,
2157 0xae, 0xb1, 0xa0, 0x91, 0xa1, 0xa9, 0xa4, 0xae,
2158 0xaf, 0xaa, 0xa0, 0xa7, 0xb8, 0xb5, 0xae, 0xb6,
2159 0xaf, 0xb1, 0xb4, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4,
2160 0xb3, 0xb2, 0xb6, 0xbd, 0xbf, 0xbb, 0xb8, 0xb8,
2161 0xb9, 0xbd, 0xb4, 0x9c, 0xab, 0xbd, 0xb1, 0xbc,
2162 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2163 0xbd, 0xbb, 0xb3, 0xbe, 0xb5, 0xa5, 0xb8, 0xc2,
2164 0xb9, 0xb8, 0xb8, 0xb7, 0xb6, 0xb6, 0xb5, 0xb5,
2165 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2166 0xb5, 0xb4, 0xb8, 0xb1, 0xa5, 0xad, 0xb8, 0xb2,
2167 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2168 0xa9, 0xab, 0xae, 0xb0, 0xb2, 0xb2, 0xb2, 0xb1,
2169 0xaf, 0xae, 0xae, 0xb2, 0xb6, 0xb7, 0xb2, 0xad,
2170 0xba, 0xc2, 0xc2, 0xb8, 0xb2, 0xb5, 0xb5, 0xb0,
2171 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2172 0xb4, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7, 0xb8,
2173 0xb7, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb,
2174 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2175 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2176 0xba, 0xa9, 0x99, 0x7e, 0x76, 0x7c, 0x6f, 0x6b,
2177 0x76, 0x6e, 0x6d, 0x74, 0x76, 0x6d, 0x62, 0x5d,
2178 0x70, 0x6e, 0x6b, 0x6b, 0x6c, 0x6d, 0x6d, 0x6d,
2179 0x84, 0x87, 0x82, 0x7a, 0x7b, 0x7e, 0x74, 0x63,
2180 0x64, 0x61, 0x5d, 0x58, 0x55, 0x55, 0x56, 0x57,
2181 0x62, 0x61, 0x5c, 0x51, 0x47, 0x44, 0x48, 0x4d,
2182 0x3a, 0x4a, 0x4a, 0x45, 0x59, 0x74, 0x74, 0x65,
2183 0x75, 0x97, 0x76, 0x50, 0x86, 0xaa, 0x94, 0x7c,
2184 0x80, 0x6f, 0xd4, 0xe6, 0xab, 0xad, 0xa8, 0xa8,
2185 0xaf, 0xb3, 0xb7, 0xb6, 0xb3, 0xb3, 0xb6, 0xba,
2186 0xb7, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb,
2187 0xb8, 0xb7, 0xb6, 0xb7, 0xb8, 0xbb, 0xbe, 0xc0,
2188 0xc4, 0xc6, 0xca, 0xcc, 0xcd, 0xcc, 0xcb, 0xc9,
2189 0xcb, 0xc9, 0xc6, 0xc3, 0xc0, 0xbf, 0xbf, 0xbf,
2190 0xc6, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0,
2191 0xca, 0xcb, 0xcc, 0xce, 0xd0, 0xd1, 0xd2, 0xd3,
2192 0xcf, 0xce, 0xcc, 0xca, 0xc7, 0xc5, 0xc3, 0xc2,
2193 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2194 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2195 0xaf, 0xa5, 0x9d, 0xae, 0xb4, 0xaf, 0xb6, 0xb1,
2196 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
2197 0xaf, 0xae, 0xb0, 0xb5, 0xba, 0xba, 0xb5, 0xb0,
2198 0x9a, 0xab, 0xb2, 0xad, 0xae, 0xb1, 0xb0, 0xae,
2199 0xb3, 0xac, 0x9e, 0xaa, 0xb3, 0xb1, 0xb9, 0xb7,
2200 0xb4, 0xb8, 0xb7, 0xb2, 0xb0, 0xb1, 0xae, 0xa8,
2201 0xac, 0xb0, 0xa3, 0xab, 0xa9, 0x9a, 0xa9, 0xb0,
2202 0xae, 0xa9, 0x9f, 0xa7, 0xba, 0xb6, 0xad, 0xb6,
2203 0xb9, 0xbb, 0xbc, 0xb8, 0xb4, 0xb3, 0xb7, 0xbc,
2204 0xb4, 0xb4, 0xb4, 0xb5, 0xb8, 0xb9, 0xb7, 0xb5,
2205 0xbc, 0xbe, 0xaf, 0x97, 0xb1, 0xc2, 0xad, 0xbe,
2206 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2207 0xbe, 0xbc, 0xb2, 0xbf, 0xb5, 0xa4, 0xbb, 0xc3,
2208 0xb9, 0xb9, 0xb8, 0xb7, 0xb7, 0xb6, 0xb5, 0xb5,
2209 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2210 0xb6, 0xb4, 0xb9, 0xb2, 0xa4, 0xac, 0xb8, 0xb2,
2211 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2212 0xa8, 0xaa, 0xad, 0xb0, 0xb2, 0xb2, 0xb2, 0xb1,
2213 0xb5, 0xb6, 0xb5, 0xb3, 0xb2, 0xb2, 0xb4, 0xb6,
2214 0xb5, 0xb4, 0xb4, 0xb2, 0xaf, 0xaf, 0xb3, 0xb9,
2215 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2216 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8,
2217 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb,
2218 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2219 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2220 0xc4, 0xae, 0x97, 0x77, 0x69, 0x65, 0x4d, 0x3f,
2221 0x5d, 0x6c, 0x81, 0x8b, 0x81, 0x72, 0x72, 0x7a,
2222 0x71, 0x6b, 0x61, 0x58, 0x59, 0x66, 0x79, 0x87,
2223 0x91, 0x8b, 0x78, 0x63, 0x61, 0x6c, 0x6a, 0x5e,
2224 0x4b, 0x5e, 0x6f, 0x6d, 0x5a, 0x48, 0x42, 0x45,
2225 0x34, 0x39, 0x40, 0x43, 0x45, 0x4a, 0x54, 0x5b,
2226 0x52, 0x51, 0x4b, 0x59, 0x70, 0x6a, 0x59, 0x59,
2227 0x6f, 0x90, 0x66, 0x67, 0x95, 0xbb, 0x82, 0x6a,
2228 0x97, 0x65, 0x6a, 0xca, 0xd0, 0xa7, 0xbc, 0xa7,
2229 0xb4, 0xb7, 0xb9, 0xb6, 0xb2, 0xb1, 0xb7, 0xbc,
2230 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb,
2231 0xb7, 0xb7, 0xb6, 0xb7, 0xb9, 0xbc, 0xbf, 0xc1,
2232 0xc6, 0xc8, 0xcb, 0xcd, 0xce, 0xcc, 0xc9, 0xc7,
2233 0xca, 0xc6, 0xc1, 0xbd, 0xba, 0xbb, 0xbc, 0xbe,
2234 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8,
2235 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3,
2236 0xcf, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc2, 0xc1,
2237 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2238 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2239 0xba, 0xa3, 0xa0, 0xae, 0xb1, 0xb0, 0xb2, 0xb2,
2240 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2241 0xad, 0x97, 0x8a, 0x87, 0x87, 0x8a, 0x84, 0x75,
2242 0x9d, 0xa8, 0xb3, 0xb5, 0xb0, 0xad, 0xb2, 0xb9,
2243 0xba, 0xb3, 0x94, 0x9e, 0xb2, 0xac, 0xb2, 0xb5,
2244 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2245 0xb0, 0xb0, 0xaf, 0xae, 0xac, 0xab, 0xac, 0xaf,
2246 0xbc, 0x9e, 0x9d, 0xb2, 0xb5, 0xb2, 0xb4, 0xb3,
2247 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2248 0xbc, 0xbd, 0xbe, 0xbe, 0xbc, 0xb9, 0xb5, 0xb2,
2249 0xc5, 0xb4, 0xa0, 0xa7, 0xbe, 0xbf, 0xb7, 0xbe,
2250 0xb9, 0xb9, 0xba, 0xbb, 0xbb, 0xbc, 0xbd, 0xbd,
2251 0xbf, 0xba, 0xbd, 0xb9, 0xab, 0xac, 0xba, 0xc1,
2252 0xbb, 0xbb, 0xba, 0xb9, 0xb9, 0xb8, 0xb7, 0xb7,
2253 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2254 0xbb, 0xb9, 0xb7, 0xbe, 0xa6, 0x9a, 0xb8, 0xb8,
2255 0xb6, 0xb5, 0xb4, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
2256 0xb0, 0xa2, 0xa9, 0xb5, 0xb2, 0xb3, 0xb8, 0xb2,
2257 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5,
2258 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2259 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2260 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb,
2261 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2262 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2263 0xbc, 0xbb, 0xbd, 0xc1, 0xc5, 0xc3, 0xba, 0xb2,
2264 0xc2, 0xb4, 0xab, 0x7c, 0x5c, 0x63, 0x59, 0x53,
2265 0x66, 0x6b, 0x69, 0x64, 0x6c, 0x7b, 0x7f, 0x79,
2266 0x78, 0x75, 0x78, 0x82, 0x8c, 0x8a, 0x7a, 0x6b,
2267 0x57, 0x5a, 0x5f, 0x66, 0x6a, 0x6c, 0x6a, 0x68,
2268 0x7a, 0x78, 0x77, 0x73, 0x65, 0x57, 0x58, 0x61,
2269 0x63, 0x5c, 0x51, 0x4a, 0x4a, 0x4f, 0x57, 0x5c,
2270 0x55, 0x46, 0x3d, 0x42, 0x70, 0x5f, 0x54, 0x5a,
2271 0x69, 0x7e, 0x65, 0x6e, 0x9f, 0xa5, 0x8f, 0x7b,
2272 0x73, 0x88, 0x94, 0x69, 0xac, 0xab, 0xa8, 0xb3,
2273 0xb2, 0xb2, 0xb6, 0xb9, 0xb7, 0xb4, 0xb2, 0xb0,
2274 0xbf, 0xaa, 0xbd, 0xc1, 0xcb, 0xc3, 0xbe, 0xb6,
2275 0xac, 0xbf, 0xb5, 0xc1, 0xb8, 0xbf, 0xc4, 0xbf,
2276 0xc5, 0xbf, 0xcc, 0xca, 0xce, 0xd4, 0xc6, 0xc9,
2277 0xc8, 0xcd, 0xcc, 0xc0, 0xb2, 0xb0, 0xbe, 0xcd,
2278 0xcd, 0xcb, 0xc8, 0xc6, 0xc4, 0xc4, 0xc5, 0xc6,
2279 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
2280 0xc6, 0xcd, 0xd2, 0xce, 0xc5, 0xc1, 0xc5, 0xcc,
2281 0xbe, 0xc4, 0xcb, 0xce, 0xd1, 0xb7, 0x1f, 0x03,
2282 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2283 0xba, 0xa3, 0xa1, 0xaf, 0xb2, 0xb0, 0xb3, 0xb3,
2284 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2285 0xb5, 0xb0, 0xc1, 0xc1, 0xa4, 0xa1, 0xac, 0xa4,
2286 0xab, 0xa7, 0xa4, 0xa8, 0xaf, 0xb4, 0xb2, 0xaf,
2287 0xbd, 0xbd, 0xa8, 0xa3, 0xb0, 0xb1, 0xb2, 0xb3,
2288 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2289 0xbc, 0xaf, 0xa7, 0xab, 0xb0, 0xae, 0xaa, 0xa9,
2290 0xb4, 0xa0, 0xa4, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4,
2291 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2292 0xb9, 0xb8, 0xb6, 0xb5, 0xb7, 0xba, 0xbe, 0xc0,
2293 0xbb, 0xa2, 0xa5, 0xba, 0xbb, 0xb4, 0xb9, 0xbd,
2294 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbd,
2295 0xbe, 0xbb, 0xbd, 0xb9, 0xab, 0xad, 0xbb, 0xc1,
2296 0xbb, 0xbb, 0xba, 0xba, 0xb9, 0xb8, 0xb8, 0xb7,
2297 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2298 0xb1, 0xc0, 0xb7, 0xb8, 0xaf, 0x9d, 0xaa, 0xb5,
2299 0xb4, 0xb6, 0xb8, 0xb9, 0xb7, 0xb2, 0xac, 0xa8,
2300 0xb0, 0xa3, 0xa9, 0xb4, 0xb2, 0xb3, 0xb7, 0xb3,
2301 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6,
2302 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2303 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2304 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb, 0xbb,
2305 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2306 0xba, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2307 0xbe, 0xbd, 0xbd, 0xc0, 0xc3, 0xc1, 0xbb, 0xb5,
2308 0xb7, 0xb6, 0xb4, 0x80, 0x53, 0x5c, 0x6b, 0x7c,
2309 0x77, 0x6f, 0x6e, 0x76, 0x7c, 0x78, 0x74, 0x74,
2310 0x85, 0x74, 0x5f, 0x52, 0x50, 0x53, 0x55, 0x54,
2311 0x57, 0x5a, 0x60, 0x67, 0x6d, 0x72, 0x75, 0x76,
2312 0x77, 0x6b, 0x63, 0x63, 0x62, 0x5a, 0x55, 0x56,
2313 0x44, 0x49, 0x50, 0x58, 0x5b, 0x57, 0x4d, 0x45,
2314 0x56, 0x4e, 0x5c, 0x54, 0x61, 0x67, 0x77, 0x65,
2315 0x83, 0x82, 0x6b, 0x64, 0x93, 0xa1, 0x80, 0x84,
2316 0x78, 0x9f, 0xd0, 0x81, 0x7c, 0xae, 0x9f, 0xab,
2317 0xae, 0xb1, 0xba, 0xb9, 0xb1, 0xb6, 0xbd, 0xb9,
2318 0xb4, 0xc0, 0xd6, 0xd2, 0xdf, 0xda, 0xd9, 0xce,
2319 0xd0, 0xc0, 0xc4, 0xbe, 0xb3, 0xc3, 0xb0, 0xc4,
2320 0xc2, 0xcd, 0xc6, 0xcb, 0xc7, 0xbf, 0xcb, 0xc8,
2321 0xce, 0xcb, 0xc6, 0xc0, 0xbd, 0xbf, 0xc3, 0xc6,
2322 0xcb, 0xc9, 0xc7, 0xc6, 0xc5, 0xc6, 0xc7, 0xc8,
2323 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
2324 0xd4, 0xcc, 0xc4, 0xc2, 0xc5, 0xc8, 0xc6, 0xc2,
2325 0xc0, 0xc2, 0xbb, 0xc0, 0xd8, 0xc1, 0x1f, 0x03,
2326 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2327 0xb8, 0xa4, 0xa3, 0xb2, 0xb4, 0xb1, 0xb4, 0xb5,
2328 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2329 0xb3, 0xb4, 0xc0, 0x97, 0x4a, 0x4d, 0x97, 0xc3,
2330 0xb8, 0xad, 0xa3, 0xa5, 0xaf, 0xb6, 0xb4, 0xae,
2331 0xb5, 0xb2, 0xad, 0xa4, 0xab, 0xb2, 0xad, 0xb5,
2332 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2333 0xbc, 0xaf, 0xa6, 0xaa, 0xb1, 0xb1, 0xae, 0xae,
2334 0xa7, 0xa5, 0xae, 0xb6, 0xb5, 0xb8, 0xba, 0xb5,
2335 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2336 0xb8, 0xb6, 0xb5, 0xb4, 0xb6, 0xb9, 0xbc, 0xbf,
2337 0xa7, 0xa2, 0xb2, 0xc1, 0xb8, 0xb2, 0xb8, 0xba,
2338 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe,
2339 0xbe, 0xbb, 0xbd, 0xb8, 0xac, 0xb0, 0xbd, 0xc0,
2340 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9, 0xb8, 0xb8,
2341 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2342 0xba, 0xbb, 0xb3, 0xb8, 0xb3, 0xa7, 0xb2, 0xbb,
2343 0xb4, 0xb7, 0xba, 0xbc, 0xba, 0xb6, 0xb0, 0xac,
2344 0xb0, 0xa5, 0xa8, 0xb2, 0xb2, 0xb3, 0xb6, 0xb5,
2345 0xb3, 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7,
2346 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2347 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2348 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc,
2349 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2350 0xbb, 0xbc, 0xbc, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe,
2351 0xc1, 0xbf, 0xbd, 0xbd, 0xbf, 0xbf, 0xbd, 0xba,
2352 0xc5, 0xc0, 0xb9, 0x8b, 0x61, 0x62, 0x6d, 0x77,
2353 0x7f, 0x6d, 0x62, 0x68, 0x71, 0x72, 0x73, 0x77,
2354 0x78, 0x7e, 0x85, 0x88, 0x83, 0x74, 0x62, 0x55,
2355 0x6e, 0x6d, 0x70, 0x77, 0x7c, 0x79, 0x6e, 0x63,
2356 0x59, 0x50, 0x4d, 0x55, 0x5c, 0x59, 0x56, 0x56,
2357 0x60, 0x66, 0x6a, 0x64, 0x54, 0x45, 0x3d, 0x3b,
2358 0x49, 0x46, 0x5e, 0x5a, 0x64, 0x6b, 0x7c, 0x62,
2359 0x7a, 0x71, 0x66, 0x63, 0x95, 0x9c, 0x6a, 0x7b,
2360 0x96, 0x95, 0x9b, 0x81, 0x76, 0xb0, 0xe2, 0xb7,
2361 0xb4, 0xbc, 0xba, 0xb4, 0xb6, 0xba, 0xb6, 0xb2,
2362 0xb3, 0xd2, 0xc4, 0x84, 0x6e, 0x72, 0xb2, 0xe5,
2363 0xe7, 0xda, 0xc3, 0xcf, 0xca, 0xcb, 0xbe, 0xba,
2364 0xc0, 0xc7, 0xbf, 0xc9, 0xcc, 0xc7, 0xd0, 0xc9,
2365 0xc3, 0xc2, 0xc4, 0xc8, 0xcd, 0xcd, 0xc9, 0xc5,
2366 0xc9, 0xc8, 0xc6, 0xc6, 0xc6, 0xc8, 0xca, 0xcb,
2367 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
2368 0xce, 0xce, 0xcb, 0xc3, 0xbb, 0xba, 0xc1, 0xc8,
2369 0xba, 0xa7, 0xa8, 0xc2, 0xd4, 0xb2, 0x14, 0x00,
2370 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2371 0xb6, 0xa4, 0xa6, 0xb5, 0xb6, 0xb2, 0xb5, 0xb8,
2372 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2373 0xb9, 0xac, 0xb4, 0xb6, 0xa9, 0xb2, 0xc5, 0xc0,
2374 0xb8, 0xb7, 0xb6, 0xb4, 0xb2, 0xb3, 0xb5, 0xb8,
2375 0xba, 0xad, 0xb2, 0xab, 0xaf, 0xb7, 0xae, 0xbb,
2376 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2377 0xb1, 0xb3, 0xb2, 0xae, 0xae, 0xb4, 0xb8, 0xb9,
2378 0x9e, 0xab, 0xb7, 0xb8, 0xb6, 0xbb, 0xbd, 0xb7,
2379 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2380 0xbb, 0xbc, 0xbc, 0xbc, 0xb9, 0xb5, 0xb1, 0xae,
2381 0x9d, 0xba, 0xc0, 0xb5, 0xb8, 0xbc, 0xb7, 0xb6,
2382 0xbb, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2383 0xbe, 0xbc, 0xbd, 0xb6, 0xac, 0xb4, 0xc0, 0xbf,
2384 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9, 0xb9,
2385 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2386 0xb5, 0xb5, 0xb1, 0xbe, 0xc2, 0xae, 0xaa, 0xbb,
2387 0xc1, 0xbf, 0xbd, 0xb9, 0xb7, 0xb5, 0xb3, 0xb3,
2388 0xb1, 0xa8, 0xa7, 0xaf, 0xb3, 0xb3, 0xb5, 0xb7,
2389 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
2390 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2391 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2392 0xb9, 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd,
2393 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2394 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2395 0xc3, 0xc1, 0xbe, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe,
2396 0xb8, 0xbd, 0xb7, 0x89, 0x52, 0x46, 0x58, 0x68,
2397 0x6d, 0x6b, 0x6c, 0x73, 0x7f, 0x86, 0x7f, 0x73,
2398 0x77, 0x7b, 0x7e, 0x7e, 0x7a, 0x76, 0x74, 0x73,
2399 0x6e, 0x63, 0x5a, 0x5e, 0x69, 0x6a, 0x5e, 0x50,
2400 0x48, 0x4b, 0x55, 0x61, 0x61, 0x58, 0x55, 0x59,
2401 0x56, 0x53, 0x4e, 0x49, 0x46, 0x47, 0x4c, 0x50,
2402 0x41, 0x3e, 0x4c, 0x57, 0x7c, 0x71, 0x6a, 0x5f,
2403 0x79, 0x7b, 0x64, 0x73, 0xab, 0xa3, 0x7c, 0x8d,
2404 0x91, 0x9a, 0x90, 0xa3, 0x90, 0x6f, 0xc8, 0xd2,
2405 0xa8, 0xba, 0xb7, 0xb2, 0xbe, 0xba, 0xb6, 0xc7,
2406 0xcb, 0xc5, 0x95, 0x71, 0x7e, 0x58, 0x38, 0x29,
2407 0x62, 0x96, 0xb9, 0xef, 0xeb, 0xd9, 0xd1, 0xc5,
2408 0xcc, 0xc3, 0xcc, 0xc5, 0xc6, 0xce, 0xc6, 0xcd,
2409 0xcc, 0xcb, 0xca, 0xc6, 0xc3, 0xc3, 0xc7, 0xca,
2410 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xca, 0xcc, 0xce,
2411 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2412 0xc5, 0xce, 0xd3, 0xc9, 0xb8, 0xb2, 0xbc, 0xc9,
2413 0xc6, 0xba, 0xad, 0xbc, 0xd8, 0xba, 0x18, 0x06,
2414 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2415 0xb4, 0xa4, 0xa9, 0xb9, 0xb8, 0xb3, 0xb7, 0xba,
2416 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2417 0xba, 0xbb, 0xbb, 0xbd, 0xc0, 0xbe, 0xb8, 0xb6,
2418 0xb3, 0xba, 0xc1, 0xbf, 0xb7, 0xb2, 0xb5, 0xb9,
2419 0xba, 0xb1, 0xb6, 0xa7, 0xa7, 0xb8, 0xb2, 0xb4,
2420 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2421 0xb1, 0xbc, 0xbd, 0xb1, 0xaf, 0xba, 0xbb, 0xb1,
2422 0x9e, 0xb2, 0xbd, 0xb9, 0xb8, 0xbd, 0xbd, 0xba,
2423 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2424 0xc0, 0xc0, 0xc0, 0xbd, 0xb9, 0xb4, 0xae, 0xab,
2425 0xae, 0xc6, 0xc4, 0xb3, 0xb7, 0xc0, 0xbb, 0xb5,
2426 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf,
2427 0xbe, 0xbd, 0xbd, 0xb4, 0xad, 0xb8, 0xc4, 0xbe,
2428 0xbd, 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9,
2429 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2430 0xba, 0xc3, 0xbd, 0xbc, 0xc0, 0xa6, 0xa0, 0xcf,
2431 0xc3, 0xc1, 0xbd, 0xb8, 0xb3, 0xb0, 0xad, 0xac,
2432 0xb1, 0xaa, 0xa6, 0xac, 0xb3, 0xb3, 0xb3, 0xba,
2433 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba,
2434 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2435 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2436 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbd,
2437 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2438 0xbf, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2439 0xc3, 0xc2, 0xc0, 0xbe, 0xbd, 0xbd, 0xbe, 0xc0,
2440 0xbb, 0xb9, 0xa8, 0x81, 0x55, 0x4e, 0x69, 0x78,
2441 0x79, 0x73, 0x6f, 0x72, 0x78, 0x78, 0x71, 0x69,
2442 0x76, 0x76, 0x75, 0x71, 0x6c, 0x68, 0x68, 0x69,
2443 0x6e, 0x6f, 0x6b, 0x5e, 0x4d, 0x43, 0x43, 0x48,
2444 0x42, 0x47, 0x57, 0x68, 0x6a, 0x5c, 0x50, 0x4c,
2445 0x61, 0x54, 0x49, 0x48, 0x50, 0x51, 0x48, 0x3d,
2446 0x44, 0x40, 0x50, 0x56, 0x74, 0x71, 0x74, 0x66,
2447 0x81, 0x91, 0x53, 0x69, 0xa6, 0x91, 0x89, 0x95,
2448 0x9e, 0x9b, 0x8a, 0xa0, 0xa8, 0x8a, 0x73, 0xc1,
2449 0xbd, 0xc2, 0xc5, 0xbf, 0xb2, 0xa8, 0xb3, 0xc9,
2450 0xa5, 0x82, 0x57, 0x5d, 0x98, 0x78, 0x46, 0x39,
2451 0x1c, 0x29, 0x35, 0x35, 0x52, 0xa7, 0xbc, 0xca,
2452 0xf6, 0xe3, 0xde, 0xce, 0xcc, 0xd3, 0xc8, 0xcd,
2453 0xca, 0xcb, 0xca, 0xc7, 0xc4, 0xc4, 0xc7, 0xcb,
2454 0xc8, 0xc7, 0xc7, 0xc7, 0xc8, 0xca, 0xcd, 0xcf,
2455 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2456 0xcd, 0xc9, 0xc6, 0xc7, 0xca, 0xc7, 0xbf, 0xb8,
2457 0xc0, 0xd7, 0xc1, 0xb9, 0xe1, 0xc8, 0x15, 0x00,
2458 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2459 0xb2, 0xa5, 0xac, 0xbc, 0xba, 0xb4, 0xb8, 0xbd,
2460 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2461 0xba, 0xc1, 0xb9, 0xb5, 0xbe, 0xba, 0xb1, 0xb7,
2462 0xb4, 0xb7, 0xbb, 0xbd, 0xbb, 0xb8, 0xb5, 0xb3,
2463 0xb1, 0xb8, 0xbc, 0xa6, 0x9f, 0xb9, 0xc4, 0xbd,
2464 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2465 0xb9, 0xbe, 0xba, 0xb2, 0xb6, 0xbd, 0xb1, 0x9d,
2466 0xa6, 0xb9, 0xbd, 0xb8, 0xba, 0xbd, 0xbc, 0xbc,
2467 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2468 0xc1, 0xbf, 0xbb, 0xb8, 0xb6, 0xb7, 0xb8, 0xba,
2469 0xc7, 0xbe, 0xbf, 0xbe, 0xb5, 0xb9, 0xbf, 0xb7,
2470 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf, 0xc0, 0xc0,
2471 0xbe, 0xbe, 0xbd, 0xb3, 0xad, 0xbc, 0xc7, 0xbd,
2472 0xbe, 0xbe, 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba,
2473 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2474 0xc0, 0xbc, 0xc5, 0xaf, 0x86, 0x74, 0x7a, 0x90,
2475 0xaf, 0xb2, 0xb6, 0xb8, 0xb8, 0xb4, 0xaf, 0xac,
2476 0xb1, 0xad, 0xa5, 0xa9, 0xb3, 0xb3, 0xb2, 0xbc,
2477 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb, 0xbb,
2478 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2479 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2480 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe,
2481 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2482 0xc1, 0xc0, 0xc0, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe,
2483 0xc0, 0xc2, 0xc4, 0xc2, 0xbf, 0xbd, 0xbe, 0xc0,
2484 0xb6, 0xad, 0x96, 0x81, 0x66, 0x5e, 0x71, 0x70,
2485 0x72, 0x6c, 0x78, 0x93, 0x96, 0x81, 0x73, 0x77,
2486 0x91, 0x87, 0x79, 0x6f, 0x6c, 0x70, 0x77, 0x7b,
2487 0x8b, 0x6e, 0x4e, 0x42, 0x4c, 0x5c, 0x63, 0x62,
2488 0x64, 0x5d, 0x60, 0x6f, 0x75, 0x63, 0x47, 0x33,
2489 0x3a, 0x3d, 0x40, 0x3e, 0x3b, 0x39, 0x3c, 0x3f,
2490 0x3c, 0x3b, 0x5e, 0x50, 0x46, 0x60, 0x85, 0x5f,
2491 0x77, 0x99, 0x4a, 0x60, 0x9d, 0x7e, 0x7b, 0x79,
2492 0xa8, 0x9f, 0x91, 0xa7, 0x92, 0xb9, 0x67, 0x87,
2493 0xc5, 0xae, 0xb5, 0xbd, 0xaf, 0xb8, 0xc5, 0xb6,
2494 0x8a, 0x61, 0x47, 0x4c, 0x8c, 0x85, 0x69, 0x7a,
2495 0x5d, 0x3d, 0x2d, 0x3d, 0x2f, 0x25, 0x26, 0x4d,
2496 0x74, 0xa1, 0xc8, 0xea, 0xe9, 0xd3, 0xd1, 0xc7,
2497 0xd6, 0xd0, 0xc9, 0xc6, 0xc8, 0xca, 0xca, 0xc8,
2498 0xcb, 0xca, 0xc8, 0xc8, 0xc8, 0xca, 0xcc, 0xce,
2499 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
2500 0xd1, 0xc8, 0xc3, 0xca, 0xd5, 0xd5, 0xc6, 0xb5,
2501 0xcc, 0xcc, 0xd4, 0xcf, 0xbc, 0x9f, 0x1a, 0x0e,
2502 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2503 0xb0, 0xa5, 0xaf, 0xbf, 0xbc, 0xb5, 0xb9, 0xbf,
2504 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2505 0xb5, 0xbd, 0xbf, 0xbd, 0xbd, 0xb7, 0xb4, 0xb8,
2506 0xba, 0xb8, 0xb7, 0xb9, 0xbd, 0xbe, 0xbb, 0xb8,
2507 0xb9, 0xc0, 0xc0, 0xb1, 0x98, 0x9c, 0xbb, 0xc3,
2508 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2509 0xb0, 0xae, 0xaf, 0xb7, 0xbc, 0xb5, 0xa6, 0x9a,
2510 0xb2, 0xbe, 0xbb, 0xb6, 0xbc, 0xbc, 0xb9, 0xbf,
2511 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2512 0xbe, 0xbc, 0xba, 0xb9, 0xba, 0xbc, 0xc0, 0xc2,
2513 0xc5, 0xba, 0xbd, 0xc0, 0xb6, 0xb6, 0xbd, 0xbb,
2514 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xc0, 0xc0, 0xc1,
2515 0xbe, 0xbe, 0xbd, 0xb2, 0xae, 0xbf, 0xc9, 0xbd,
2516 0xbf, 0xbe, 0xbe, 0xbd, 0xbc, 0xbc, 0xbb, 0xbb,
2517 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2518 0xbe, 0xc2, 0xd0, 0xb4, 0xa1, 0xb6, 0xb7, 0xad,
2519 0xb0, 0xb3, 0xb7, 0xba, 0xbb, 0xb8, 0xb3, 0xb0,
2520 0xb1, 0xae, 0xa5, 0xa7, 0xb4, 0xb2, 0xb1, 0xbe,
2521 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb, 0xbc, 0xbc,
2522 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2523 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2524 0xbb, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2525 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2526 0xc2, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbe, 0xbd,
2527 0xbc, 0xc1, 0xc7, 0xc7, 0xc2, 0xbe, 0xbd, 0xbe,
2528 0xb2, 0xba, 0xb2, 0xa2, 0x7a, 0x63, 0x79, 0x7e,
2529 0x8f, 0x7c, 0x75, 0x7b, 0x72, 0x60, 0x64, 0x79,
2530 0x7f, 0x76, 0x6c, 0x6a, 0x6d, 0x70, 0x6d, 0x69,
2531 0x5e, 0x70, 0x7c, 0x70, 0x54, 0x43, 0x48, 0x55,
2532 0x42, 0x3a, 0x3e, 0x54, 0x64, 0x5f, 0x4c, 0x3d,
2533 0x39, 0x43, 0x4a, 0x45, 0x3a, 0x38, 0x43, 0x51,
2534 0x32, 0x36, 0x60, 0x52, 0x42, 0x5b, 0x7d, 0x50,
2535 0x76, 0xa1, 0x5e, 0x67, 0xa7, 0x91, 0x7d, 0x79,
2536 0x8e, 0x88, 0x91, 0xab, 0x9d, 0xd5, 0xaf, 0x70,
2537 0xae, 0xaa, 0xb0, 0xb3, 0xb6, 0xbe, 0xa9, 0x7a,
2538 0x75, 0x71, 0x84, 0x6b, 0x84, 0x81, 0x61, 0x75,
2539 0x99, 0xa5, 0x80, 0x7d, 0x69, 0x5c, 0x4d, 0x29,
2540 0x33, 0x2c, 0x1e, 0x43, 0x7c, 0xb0, 0xdf, 0xe7,
2541 0xde, 0xda, 0xd4, 0xcd, 0xc9, 0xca, 0xcd, 0xd0,
2542 0xce, 0xcd, 0xcb, 0xc9, 0xc8, 0xc9, 0xca, 0xcb,
2543 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
2544 0xcd, 0xcc, 0xcd, 0xd1, 0xd3, 0xd2, 0xcd, 0xc8,
2545 0xc0, 0xbd, 0xec, 0xf4, 0xb8, 0x92, 0x1e, 0x04,
2546 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2547 0xaf, 0xa5, 0xb0, 0xc0, 0xbc, 0xb5, 0xba, 0xc0,
2548 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2549 0xb6, 0xb6, 0xbf, 0xc2, 0xba, 0xba, 0xbe, 0xbb,
2550 0xc0, 0xbe, 0xbc, 0xbb, 0xbc, 0xbf, 0xc3, 0xc5,
2551 0xbf, 0xb5, 0xac, 0xaa, 0x7a, 0x57, 0x7f, 0xa0,
2552 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2553 0x9d, 0x9a, 0xa7, 0xbd, 0xbe, 0xaa, 0xa1, 0xa8,
2554 0xba, 0xc1, 0xb9, 0xb5, 0xbe, 0xbb, 0xb7, 0xc0,
2555 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2556 0xba, 0xbc, 0xbf, 0xc1, 0xc1, 0xc0, 0xbe, 0xbc,
2557 0xb2, 0xc2, 0xbf, 0xb5, 0xb8, 0xb9, 0xb7, 0xbc,
2558 0xbd, 0xbd, 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1,
2559 0xbd, 0xbf, 0xbc, 0xb1, 0xae, 0xc1, 0xca, 0xbc,
2560 0xbf, 0xbf, 0xbe, 0xbd, 0xbd, 0xbc, 0xbb, 0xbb,
2561 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2562 0xb6, 0xd0, 0x9b, 0x58, 0x90, 0xc8, 0xb5, 0xc3,
2563 0xcf, 0xcb, 0xc6, 0xbf, 0xb7, 0xb2, 0xad, 0xab,
2564 0xb1, 0xaf, 0xa4, 0xa6, 0xb4, 0xb2, 0xb1, 0xbf,
2565 0xb9, 0xb9, 0xba, 0xbb, 0xbb, 0xbc, 0xbd, 0xbd,
2566 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2567 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2568 0xbb, 0xbb, 0xbc, 0xbd, 0xbd, 0xbe, 0xbf, 0xbf,
2569 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2570 0xc3, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbe, 0xbd,
2571 0xb9, 0xc1, 0xc9, 0xca, 0xc4, 0xbe, 0xbc, 0xbc,
2572 0xbb, 0xbb, 0xaa, 0x9e, 0x7e, 0x6b, 0x83, 0x85,
2573 0x83, 0x76, 0x68, 0x5f, 0x59, 0x60, 0x78, 0x92,
2574 0x81, 0x77, 0x6d, 0x6d, 0x71, 0x6f, 0x64, 0x58,
2575 0x84, 0x7f, 0x72, 0x5f, 0x50, 0x4d, 0x57, 0x62,
2576 0x67, 0x60, 0x60, 0x67, 0x66, 0x5a, 0x4c, 0x47,
2577 0x4b, 0x45, 0x40, 0x45, 0x4d, 0x4e, 0x44, 0x39,
2578 0x36, 0x3c, 0x5e, 0x63, 0x6f, 0x6c, 0x6d, 0x4c,
2579 0x78, 0x9a, 0x5e, 0x53, 0x98, 0x9c, 0x82, 0x8d,
2580 0x9d, 0x95, 0xb1, 0x8c, 0xa7, 0xb9, 0xbf, 0x88,
2581 0x6b, 0xa7, 0xb9, 0xaf, 0xbd, 0xb5, 0x84, 0x5f,
2582 0x60, 0x6c, 0x91, 0x64, 0x79, 0x93, 0x74, 0x7a,
2583 0x79, 0x81, 0x91, 0x96, 0x86, 0x8a, 0x74, 0x7c,
2584 0x4d, 0x48, 0x4d, 0x3b, 0x2f, 0x33, 0x32, 0x42,
2585 0x9c, 0xba, 0xdf, 0xf2, 0xf0, 0xe4, 0xdd, 0xdc,
2586 0xd0, 0xcf, 0xcc, 0xc9, 0xc8, 0xc8, 0xc9, 0xca,
2587 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
2588 0xcf, 0xd0, 0xd0, 0xd1, 0xd1, 0xd2, 0xd3, 0xd4,
2589 0xc9, 0xdb, 0xd2, 0xa6, 0x94, 0x9b, 0x24, 0x09,
2590 0xc3, 0xb9, 0xc0, 0xb3, 0xb2, 0xbc, 0xb5, 0xc1,
2591 0xa9, 0xa0, 0xb8, 0xb6, 0xbf, 0xc0, 0xc0, 0xb9,
2592 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2593 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2594 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2595 0xb5, 0xbe, 0xa8, 0x6c, 0x5f, 0xa5, 0xcc, 0xa6,
2596 0xbb, 0xbb, 0xba, 0xb9, 0xb9, 0xb8, 0xb7, 0xb7,
2597 0x92, 0x81, 0x91, 0xba, 0xc1, 0xa7, 0xa2, 0xb8,
2598 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2599 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2600 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2601 0xc0, 0xbf, 0xbd, 0xbc, 0xbc, 0xbd, 0xbf, 0xc0,
2602 0xbd, 0xbd, 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1,
2603 0xc5, 0xc2, 0xb9, 0xbb, 0xaf, 0xca, 0xc2, 0xc8,
2604 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2605 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2606 0xbd, 0xc0, 0xc6, 0xcd, 0xcf, 0xc7, 0xb7, 0xaa,
2607 0x86, 0xb9, 0xcc, 0xbb, 0xb7, 0xba, 0xb7, 0xb6,
2608 0xbb, 0xaf, 0xa6, 0xa7, 0xa7, 0xb2, 0xb9, 0xb7,
2609 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2610 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2611 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2612 0xbe, 0xbe, 0xbf, 0xc0, 0xc0, 0xc1, 0xc2, 0xc2,
2613 0xc2, 0xc2, 0xc3, 0xc4, 0xc4, 0xc5, 0xc6, 0xc6,
2614 0xc1, 0xc2, 0xc3, 0xc3, 0xc1, 0xbf, 0xbc, 0xbb,
2615 0xbb, 0xbe, 0xc6, 0xc6, 0xc2, 0xc5, 0xbf, 0xab,
2616 0xb5, 0xb6, 0xb6, 0xa4, 0x85, 0x75, 0x76, 0x73,
2617 0x5a, 0x5f, 0x65, 0x6a, 0x6c, 0x6c, 0x6d, 0x6e,
2618 0x64, 0x5d, 0x65, 0x74, 0x6c, 0x56, 0x5b, 0x75,
2619 0x7b, 0x68, 0x5d, 0x65, 0x6a, 0x64, 0x5d, 0x5c,
2620 0x50, 0x69, 0x7f, 0x7c, 0x64, 0x4e, 0x4b, 0x51,
2621 0x47, 0x4b, 0x51, 0x59, 0x5d, 0x58, 0x4c, 0x43,
2622 0x3f, 0x44, 0x5d, 0x66, 0x7f, 0x76, 0x7d, 0x7b,
2623 0x6f, 0x85, 0x5c, 0x65, 0x94, 0x76, 0x67, 0x94,
2624 0xa3, 0x9d, 0xa1, 0xa2, 0x9c, 0xb1, 0xa9, 0xbd,
2625 0x86, 0x89, 0xc3, 0xb0, 0x8e, 0x8c, 0x65, 0x5e,
2626 0x88, 0x80, 0x85, 0x76, 0x67, 0x89, 0x62, 0x5b,
2627 0x8f, 0x7e, 0x78, 0x85, 0x72, 0x70, 0x95, 0x94,
2628 0x9b, 0x9a, 0x7c, 0x70, 0x5d, 0x2f, 0x52, 0x2f,
2629 0x1b, 0x27, 0x35, 0x5e, 0xa1, 0xba, 0xe6, 0xfa,
2630 0xee, 0xe0, 0xd7, 0xcb, 0xc9, 0xcd, 0xc7, 0xc8,
2631 0xd3, 0xce, 0xcf, 0xd6, 0xd4, 0xcb, 0xc6, 0xc9,
2632 0xd8, 0xd6, 0xd7, 0xd7, 0xcc, 0xcb, 0xd7, 0xd8,
2633 0xf4, 0xe6, 0x96, 0x63, 0x51, 0x52, 0x2f, 0x0a,
2634 0xbf, 0xb3, 0xbd, 0xbc, 0xbf, 0xc3, 0xb8, 0xc1,
2635 0xad, 0xa4, 0xbd, 0xba, 0xc2, 0xc1, 0xc0, 0xb9,
2636 0xbf, 0xbf, 0xbe, 0xbe, 0xbd, 0xbc, 0xbc, 0xbb,
2637 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2638 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2639 0xd0, 0xc7, 0x8a, 0x64, 0x8c, 0xb6, 0xbe, 0xc9,
2640 0xbc, 0xbb, 0xbb, 0xba, 0xb9, 0xb9, 0xb8, 0xb8,
2641 0xae, 0x9b, 0x95, 0xa1, 0xa4, 0x9c, 0xa5, 0xba,
2642 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2643 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2644 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2645 0xc0, 0xbe, 0xbd, 0xbb, 0xbb, 0xbd, 0xbe, 0xc0,
2646 0xbe, 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1, 0xc2,
2647 0xcb, 0xc5, 0xd5, 0xb5, 0x9e, 0xcf, 0xbe, 0xcc,
2648 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2649 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2650 0xc2, 0xc2, 0xc3, 0xc6, 0xc9, 0xc5, 0xbd, 0xb5,
2651 0x9f, 0xc0, 0xc9, 0xbd, 0xbd, 0xc0, 0xb8, 0xb3,
2652 0xb2, 0xb7, 0xa1, 0xb0, 0xa9, 0xb6, 0xb2, 0xb5,
2653 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2654 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2655 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2656 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1, 0xc2, 0xc2,
2657 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6, 0xc6,
2658 0xc3, 0xc4, 0xc4, 0xc4, 0xc2, 0xbf, 0xbc, 0xba,
2659 0xb6, 0xb8, 0xc0, 0xc3, 0xc3, 0xca, 0xc8, 0xb7,
2660 0xac, 0xb5, 0xb0, 0xb0, 0x8a, 0x64, 0x6c, 0x68,
2661 0x66, 0x6e, 0x75, 0x77, 0x74, 0x71, 0x71, 0x72,
2662 0x6f, 0x6f, 0x65, 0x5b, 0x67, 0x7f, 0x85, 0x7a,
2663 0x71, 0x72, 0x79, 0x82, 0x81, 0x74, 0x64, 0x5c,
2664 0x58, 0x64, 0x6c, 0x63, 0x52, 0x49, 0x51, 0x5d,
2665 0x55, 0x58, 0x5b, 0x59, 0x54, 0x4f, 0x4c, 0x4b,
2666 0x3c, 0x3d, 0x5b, 0x63, 0x74, 0x6d, 0x7a, 0x73,
2667 0x61, 0x7b, 0x58, 0x62, 0x93, 0x82, 0x7a, 0xa1,
2668 0x9c, 0x90, 0x96, 0xa9, 0xad, 0xbb, 0xa8, 0xb4,
2669 0xab, 0x77, 0xa9, 0xcd, 0x72, 0x3c, 0x60, 0x6d,
2670 0x7e, 0x82, 0x78, 0x7c, 0x6b, 0x89, 0x85, 0x5c,
2671 0x85, 0x6f, 0x71, 0x87, 0x90, 0x83, 0x7a, 0x86,
2672 0x79, 0x86, 0x8c, 0x98, 0xa6, 0x83, 0x81, 0x64,
2673 0x62, 0x3b, 0x3e, 0x2d, 0x26, 0x24, 0x3e, 0x5b,
2674 0xaa, 0xce, 0xdb, 0xeb, 0xe4, 0xd3, 0xdb, 0xcd,
2675 0xd2, 0xd8, 0xdd, 0xdb, 0xd6, 0xd0, 0xcb, 0xc7,
2676 0xda, 0xd2, 0xcd, 0xd3, 0xdf, 0xd0, 0xd0, 0xfd,
2677 0xe9, 0xab, 0x8e, 0x8f, 0x90, 0x7d, 0x1f, 0x04,
2678 0xc2, 0xc4, 0xc9, 0xbb, 0xbc, 0xcb, 0xc8, 0xc7,
2679 0xb1, 0xa7, 0xbc, 0xb6, 0xbc, 0xbe, 0xc2, 0xbf,
2680 0xc2, 0xc1, 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, 0xbd,
2681 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2682 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2683 0xbe, 0xc4, 0xc9, 0xd2, 0xd3, 0xc2, 0xb6, 0xbb,
2684 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9, 0xb9,
2685 0xc3, 0xc2, 0xa9, 0x87, 0x87, 0xa8, 0xc0, 0xc1,
2686 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2687 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2688 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2689 0xbf, 0xbe, 0xbc, 0xbb, 0xbb, 0xbc, 0xbe, 0xbf,
2690 0xbf, 0xbf, 0xc0, 0xc0, 0xc1, 0xc2, 0xc2, 0xc3,
2691 0xb4, 0xbf, 0xb3, 0xc2, 0xaf, 0xb3, 0xc9, 0xbd,
2692 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2693 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2694 0xc7, 0xc3, 0xc0, 0xc0, 0xc2, 0xc4, 0xc4, 0xc3,
2695 0xc5, 0xce, 0xca, 0xc1, 0xc2, 0xbf, 0xb3, 0xac,
2696 0xb7, 0xc5, 0x98, 0xa9, 0xa0, 0xb2, 0xb1, 0xc0,
2697 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2698 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2699 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2700 0xbf, 0xbf, 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3,
2701 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7,
2702 0xc7, 0xc7, 0xc7, 0xc5, 0xc2, 0xbf, 0xbb, 0xb9,
2703 0xc1, 0xbe, 0xc2, 0xc3, 0xc0, 0xc6, 0xc5, 0xb8,
2704 0xab, 0xb6, 0xad, 0xb6, 0x8d, 0x5a, 0x6a, 0x69,
2705 0x63, 0x6f, 0x7c, 0x7f, 0x79, 0x74, 0x77, 0x7c,
2706 0x64, 0x62, 0x64, 0x6b, 0x72, 0x74, 0x6f, 0x6a,
2707 0x66, 0x68, 0x64, 0x5a, 0x55, 0x58, 0x5c, 0x5d,
2708 0x56, 0x62, 0x70, 0x71, 0x69, 0x60, 0x5d, 0x5f,
2709 0x5e, 0x5f, 0x5c, 0x53, 0x48, 0x43, 0x47, 0x4d,
2710 0x39, 0x39, 0x5c, 0x61, 0x65, 0x63, 0x77, 0x6b,
2711 0x72, 0x8b, 0x67, 0x65, 0x89, 0x7d, 0x76, 0x8e,
2712 0x9d, 0x99, 0x98, 0x9f, 0xa2, 0xb6, 0xa5, 0xa3,
2713 0xc7, 0xb7, 0x81, 0xcf, 0xc0, 0x51, 0x7a, 0x98,
2714 0x8e, 0x84, 0x6f, 0x75, 0x5e, 0x77, 0x8d, 0x5e,
2715 0x88, 0x7c, 0x8c, 0x8d, 0x85, 0x77, 0x66, 0x80,
2716 0x96, 0x8b, 0x7e, 0x79, 0x8a, 0x7a, 0x85, 0x9f,
2717 0x9e, 0x7f, 0x84, 0x67, 0x4f, 0x35, 0x2e, 0x30,
2718 0x28, 0x21, 0x4f, 0x73, 0xab, 0xe1, 0xdf, 0xf1,
2719 0xeb, 0xeb, 0xe3, 0xda, 0xda, 0xde, 0xd5, 0xc4,
2720 0xb8, 0xc2, 0xe5, 0xe3, 0xc6, 0xd4, 0xe3, 0xcb,
2721 0x80, 0x7e, 0x8e, 0x5f, 0x41, 0x62, 0x25, 0x04,
2722 0xd8, 0xcc, 0xc9, 0xcb, 0xcd, 0xca, 0xc4, 0xc5,
2723 0xb4, 0xad, 0xc6, 0xbf, 0xc2, 0xbe, 0xbf, 0xba,
2724 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2725 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2726 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2727 0xc6, 0xaf, 0xbb, 0xc7, 0xb8, 0xbb, 0xc7, 0xbc,
2728 0xbe, 0xbe, 0xbd, 0xbd, 0xbc, 0xbb, 0xbb, 0xba,
2729 0xbb, 0xbb, 0xc0, 0xca, 0xcb, 0xc4, 0xc0, 0xc1,
2730 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2731 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2732 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2733 0xbf, 0xbe, 0xbc, 0xbb, 0xbb, 0xbc, 0xbe, 0xbf,
2734 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4, 0xc4,
2735 0xc3, 0xc1, 0xcd, 0xc2, 0xb4, 0xc8, 0xcd, 0xd0,
2736 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2737 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2738 0xc6, 0xc3, 0xc0, 0xbf, 0xc2, 0xc5, 0xc8, 0xca,
2739 0xc8, 0xc5, 0xc0, 0xc0, 0xc5, 0xc5, 0xc1, 0xc0,
2740 0xab, 0xc3, 0xa1, 0xad, 0xb2, 0xb0, 0xac, 0xb7,
2741 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2742 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2743 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2744 0xc0, 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4,
2745 0xc4, 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8,
2746 0xc9, 0xc9, 0xc9, 0xc7, 0xc4, 0xc0, 0xbc, 0xb9,
2747 0xbc, 0xb7, 0xbb, 0xc1, 0xc2, 0xc9, 0xcd, 0xc5,
2748 0xc0, 0xb3, 0xa4, 0xa7, 0x90, 0x71, 0x70, 0x65,
2749 0x67, 0x74, 0x7f, 0x7c, 0x6e, 0x64, 0x66, 0x6c,
2750 0x60, 0x43, 0x44, 0x6d, 0x85, 0x6f, 0x50, 0x46,
2751 0x48, 0x5b, 0x6b, 0x73, 0x7e, 0x89, 0x86, 0x7b,
2752 0x71, 0x75, 0x79, 0x77, 0x6e, 0x63, 0x5a, 0x55,
2753 0x5b, 0x58, 0x51, 0x49, 0x44, 0x41, 0x43, 0x44,
2754 0x3b, 0x3e, 0x63, 0x62, 0x5d, 0x5c, 0x77, 0x69,
2755 0x77, 0x8b, 0x6b, 0x65, 0x7f, 0x7c, 0x7c, 0x87,
2756 0x8a, 0x93, 0x95, 0xa0, 0x9f, 0xb2, 0xab, 0xac,
2757 0xc7, 0xaa, 0x51, 0x96, 0xdd, 0x96, 0x71, 0x5f,
2758 0x6f, 0x71, 0x84, 0x87, 0x68, 0x6e, 0x7e, 0x72,
2759 0x84, 0x77, 0x7f, 0x76, 0x6d, 0x81, 0x8d, 0x90,
2760 0x77, 0x7c, 0x77, 0x76, 0x82, 0x7d, 0x78, 0x75,
2761 0x6d, 0x87, 0x8e, 0x94, 0xa8, 0x8c, 0x74, 0x4d,
2762 0x41, 0x44, 0x24, 0x34, 0x33, 0x2d, 0x68, 0x7e,
2763 0xbf, 0xdb, 0xf7, 0xfb, 0xf1, 0xe7, 0xe2, 0xdf,
2764 0xc8, 0xce, 0xd2, 0xdf, 0xd5, 0xe3, 0xe8, 0x96,
2765 0x90, 0x72, 0x40, 0x43, 0x7b, 0x77, 0x14, 0x0f,
2766 0xcc, 0xd3, 0xd6, 0xd7, 0xd2, 0xd2, 0xde, 0xe6,
2767 0xbb, 0xb3, 0xc9, 0xbf, 0xbe, 0xbb, 0xbf, 0xbd,
2768 0xbc, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2,
2769 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2770 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2771 0xca, 0xc0, 0xb7, 0xbc, 0xc9, 0xcb, 0xc4, 0xc0,
2772 0xc0, 0xbf, 0xbf, 0xbe, 0xbd, 0xbd, 0xbc, 0xbc,
2773 0xbe, 0xb3, 0xb3, 0xbd, 0xbf, 0xb8, 0xbb, 0xc7,
2774 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2775 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2776 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2777 0xc1, 0xc0, 0xbe, 0xbd, 0xbd, 0xbe, 0xc0, 0xc1,
2778 0xc2, 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6,
2779 0xd0, 0xdc, 0xe5, 0xb5, 0xa7, 0xc6, 0xd1, 0xda,
2780 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2781 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2782 0xc1, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc9, 0xcb,
2783 0xc8, 0xc1, 0xc0, 0xc2, 0xc1, 0xc1, 0xc5, 0xc9,
2784 0xa8, 0xba, 0xb0, 0xa7, 0xc0, 0xa9, 0xad, 0xb1,
2785 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2786 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2787 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2788 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4, 0xc4,
2789 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2790 0xca, 0xca, 0xca, 0xc8, 0xc6, 0xc2, 0xbe, 0xbc,
2791 0xbb, 0xb4, 0xb9, 0xc1, 0xc2, 0xc8, 0xcc, 0xc7,
2792 0xb1, 0xb7, 0xca, 0xac, 0x77, 0x5f, 0x59, 0x68,
2793 0x5b, 0x67, 0x72, 0x71, 0x66, 0x62, 0x68, 0x72,
2794 0x63, 0x69, 0x74, 0x7e, 0x80, 0x7a, 0x79, 0x7c,
2795 0x77, 0x75, 0x6a, 0x60, 0x65, 0x72, 0x70, 0x63,
2796 0x67, 0x69, 0x6b, 0x6a, 0x64, 0x5c, 0x54, 0x4e,
2797 0x57, 0x4e, 0x47, 0x49, 0x4f, 0x50, 0x47, 0x3e,
2798 0x3e, 0x4c, 0x6f, 0x64, 0x5c, 0x5b, 0x76, 0x6e,
2799 0x73, 0x7e, 0x63, 0x5f, 0x70, 0x72, 0x7a, 0x7d,
2800 0x97, 0x99, 0x92, 0xa5, 0xa7, 0xb4, 0xb3, 0xb7,
2801 0xb4, 0xa0, 0x5e, 0x52, 0xd0, 0xe9, 0x7a, 0x71,
2802 0x86, 0x7b, 0x73, 0x6c, 0x71, 0x7b, 0x7b, 0x63,
2803 0x5a, 0x73, 0x83, 0x89, 0x7c, 0x78, 0x7d, 0x69,
2804 0x63, 0x8b, 0x8f, 0x87, 0x7a, 0x87, 0x93, 0x70,
2805 0x6f, 0x86, 0x83, 0x78, 0x88, 0x85, 0x9b, 0x9a,
2806 0xa1, 0x7d, 0x7b, 0x54, 0x43, 0x44, 0x20, 0x2a,
2807 0x2a, 0x2b, 0x46, 0x82, 0xc4, 0xef, 0xff, 0xff,
2808 0xf4, 0xd4, 0xe0, 0xdf, 0xf9, 0xe2, 0x8a, 0x9f,
2809 0x94, 0x54, 0x69, 0x98, 0x8a, 0x75, 0x2d, 0x04,
2810 0xe1, 0xde, 0xdb, 0xe7, 0xdb, 0xba, 0xaf, 0xab,
2811 0xa2, 0xa6, 0xcc, 0xce, 0xd0, 0xc6, 0xc2, 0xbc,
2812 0xbf, 0xc0, 0xc0, 0xc1, 0xc1, 0xc2, 0xc2, 0xc3,
2813 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2814 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2815 0xc4, 0xc8, 0xc3, 0xc2, 0xc5, 0xb8, 0xb4, 0xc9,
2816 0xc1, 0xc1, 0xc0, 0xc0, 0xbf, 0xbe, 0xbe, 0xbd,
2817 0xbd, 0xc6, 0xc6, 0xbd, 0xbd, 0xc6, 0xc6, 0xbc,
2818 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2819 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2820 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2821 0xc4, 0xc2, 0xc0, 0xbf, 0xbf, 0xc0, 0xc2, 0xc4,
2822 0xc3, 0xc4, 0xc4, 0xc5, 0xc6, 0xc6, 0xc7, 0xc7,
2823 0xc1, 0x7f, 0x40, 0x44, 0x8e, 0xaa, 0xb8, 0xc2,
2824 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2825 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2826 0xc0, 0xc4, 0xc9, 0xcb, 0xc9, 0xc8, 0xc8, 0xc9,
2827 0xd0, 0xca, 0xca, 0xc7, 0xbb, 0xb9, 0xbf, 0xc1,
2828 0xb4, 0xb2, 0xba, 0x9d, 0xb8, 0xa4, 0xb0, 0xb7,
2829 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2830 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2831 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2832 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5,
2833 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9,
2834 0xc8, 0xc9, 0xc9, 0xc9, 0xc8, 0xc5, 0xc2, 0xc0,
2835 0xbf, 0xb6, 0xbb, 0xc4, 0xc3, 0xc1, 0xc2, 0xbc,
2836 0xb2, 0xaa, 0xc6, 0xaf, 0x93, 0x8e, 0x71, 0x71,
2837 0x6c, 0x71, 0x74, 0x6d, 0x62, 0x5f, 0x65, 0x6e,
2838 0x76, 0x71, 0x69, 0x67, 0x6f, 0x78, 0x76, 0x6e,
2839 0x6f, 0x6a, 0x65, 0x67, 0x72, 0x7a, 0x72, 0x65,
2840 0x62, 0x64, 0x66, 0x63, 0x5d, 0x55, 0x4f, 0x4c,
2841 0x56, 0x4d, 0x48, 0x50, 0x5d, 0x5f, 0x51, 0x42,
2842 0x3e, 0x5d, 0x79, 0x61, 0x5f, 0x5a, 0x71, 0x74,
2843 0x87, 0x83, 0x6d, 0x73, 0x7c, 0x7d, 0x8e, 0x90,
2844 0x82, 0x96, 0x90, 0xa0, 0xa7, 0xb6, 0xa0, 0x7b,
2845 0x69, 0x65, 0x7f, 0x70, 0x77, 0xcd, 0xcb, 0x62,
2846 0x5e, 0x81, 0x8a, 0x84, 0x82, 0x78, 0x8d, 0x78,
2847 0x70, 0x94, 0x89, 0x82, 0x7c, 0x69, 0x78, 0x88,
2848 0x8f, 0x92, 0x7e, 0x81, 0x6c, 0x7b, 0x99, 0x8f,
2849 0x83, 0x66, 0x7b, 0x7f, 0x8d, 0x8b, 0x86, 0x82,
2850 0x6d, 0x97, 0x97, 0xa5, 0xa0, 0x89, 0x80, 0x52,
2851 0x4b, 0x44, 0x39, 0x2a, 0x1d, 0x2a, 0x5a, 0x8b,
2852 0xc4, 0xf5, 0xef, 0xff, 0xc2, 0x66, 0x86, 0x8a,
2853 0x52, 0x67, 0x72, 0x4e, 0x57, 0x6e, 0x17, 0x04,
2854 0xe8, 0xdd, 0xd8, 0xe7, 0xbf, 0x85, 0xa3, 0xdb,
2855 0xd0, 0xcd, 0xea, 0xe1, 0xdd, 0xd5, 0xd6, 0xd4,
2856 0xcb, 0xcb, 0xc9, 0xc7, 0xc6, 0xc4, 0xc2, 0xc2,
2857 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2858 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2859 0xc4, 0xb9, 0xba, 0xc0, 0xbc, 0xbd, 0xc6, 0xcb,
2860 0xc2, 0xc2, 0xc1, 0xc1, 0xc0, 0xbf, 0xbf, 0xbe,
2861 0xc0, 0xbc, 0xbe, 0xc6, 0xc6, 0xbc, 0xb9, 0xbd,
2862 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2863 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2864 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2865 0xc6, 0xc5, 0xc3, 0xc2, 0xc2, 0xc3, 0xc5, 0xc6,
2866 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2867 0xc5, 0xb5, 0xb1, 0x50, 0x85, 0xc4, 0x82, 0x7d,
2868 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
2869 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
2870 0xc3, 0xc8, 0xcc, 0xcc, 0xc8, 0xc6, 0xc8, 0xca,
2871 0xca, 0xc6, 0xca, 0xc8, 0xbe, 0xc3, 0xcc, 0xc6,
2872 0xb6, 0xaa, 0xc0, 0xa5, 0xaf, 0xab, 0xab, 0xb6,
2873 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2874 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2875 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2876 0xc2, 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6,
2877 0xc6, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9, 0xca,
2878 0xc6, 0xc7, 0xc8, 0xca, 0xc9, 0xc8, 0xc6, 0xc5,
2879 0xb4, 0xac, 0xb5, 0xc5, 0xc6, 0xc3, 0xc3, 0xbe,
2880 0xb0, 0xa9, 0xbd, 0xab, 0x87, 0x71, 0x58, 0x5a,
2881 0x6f, 0x70, 0x6d, 0x68, 0x65, 0x6a, 0x75, 0x7e,
2882 0x7b, 0x72, 0x6e, 0x6e, 0x64, 0x59, 0x5f, 0x6e,
2883 0x68, 0x68, 0x72, 0x82, 0x8c, 0x89, 0x7f, 0x79,
2884 0x7f, 0x7b, 0x71, 0x61, 0x52, 0x4a, 0x4d, 0x51,
2885 0x55, 0x4f, 0x4d, 0x54, 0x5e, 0x5f, 0x54, 0x47,
2886 0x3a, 0x6a, 0x7c, 0x59, 0x60, 0x57, 0x67, 0x78,
2887 0x65, 0x55, 0x47, 0x5c, 0x66, 0x68, 0x83, 0x8b,
2888 0x97, 0xa4, 0x8e, 0x99, 0xa0, 0xb2, 0xa9, 0x89,
2889 0x6b, 0x91, 0x86, 0x75, 0x62, 0x8a, 0xd5, 0xb9,
2890 0x78, 0x73, 0x7f, 0x75, 0x68, 0x56, 0x6f, 0x6a,
2891 0x5c, 0x70, 0x65, 0x64, 0x7d, 0x83, 0x7b, 0x7f,
2892 0x8e, 0x75, 0x68, 0x8d, 0x91, 0x8f, 0x77, 0x76,
2893 0x7e, 0x70, 0x93, 0x92, 0x86, 0x73, 0x7c, 0x92,
2894 0x92, 0x8a, 0x8f, 0x78, 0x79, 0x94, 0x97, 0xa5,
2895 0xa7, 0x87, 0x60, 0x4a, 0x45, 0x3f, 0x33, 0x28,
2896 0x31, 0x22, 0x72, 0x83, 0x7a, 0x87, 0x51, 0x34,
2897 0x66, 0x64, 0x75, 0x80, 0x8a, 0x83, 0x24, 0x03,
2898 0xe0, 0xef, 0xe6, 0xee, 0xf8, 0xf9, 0xf7, 0xd9,
2899 0x49, 0x66, 0xb3, 0xd8, 0xee, 0xe9, 0xe1, 0xd5,
2900 0xd6, 0xd5, 0xd2, 0xce, 0xc9, 0xc5, 0xc2, 0xc0,
2901 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2902 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2903 0xbf, 0xc4, 0xc5, 0xc0, 0xbe, 0xc2, 0xc1, 0xbc,
2904 0xc3, 0xc3, 0xc2, 0xc1, 0xc1, 0xc0, 0xbf, 0xbf,
2905 0xbc, 0xbc, 0xbd, 0xbf, 0xc0, 0xbf, 0xbf, 0xc0,
2906 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2907 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2908 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2909 0xc8, 0xc7, 0xc5, 0xc4, 0xc4, 0xc5, 0xc7, 0xc8,
2910 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9,
2911 0xb9, 0x86, 0x7e, 0x6d, 0xa5, 0x90, 0x73, 0xca,
2912 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
2913 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2914 0xc7, 0xcb, 0xcd, 0xcb, 0xc6, 0xc4, 0xc8, 0xcd,
2915 0xce, 0xc9, 0xcd, 0xca, 0xc1, 0xca, 0xcf, 0xc2,
2916 0xc5, 0xac, 0xbb, 0x9f, 0x97, 0xae, 0xab, 0xc4,
2917 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2918 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2919 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2920 0xc2, 0xc2, 0xc3, 0xc4, 0xc4, 0xc5, 0xc6, 0xc6,
2921 0xc6, 0xc6, 0xc7, 0xc8, 0xc8, 0xc9, 0xca, 0xca,
2922 0xc4, 0xc5, 0xc8, 0xca, 0xcb, 0xca, 0xc9, 0xc8,
2923 0xb8, 0xaf, 0xb8, 0xc8, 0xc6, 0xbe, 0xb9, 0xb3,
2924 0xac, 0xa8, 0xb3, 0xb0, 0x8c, 0x6d, 0x6a, 0x74,
2925 0x7a, 0x75, 0x6d, 0x66, 0x65, 0x6c, 0x77, 0x7f,
2926 0x85, 0x72, 0x62, 0x60, 0x63, 0x64, 0x6a, 0x73,
2927 0x74, 0x75, 0x81, 0x8e, 0x87, 0x70, 0x5f, 0x5d,
2928 0x5b, 0x65, 0x6f, 0x6e, 0x64, 0x5b, 0x58, 0x5a,
2929 0x51, 0x4f, 0x4e, 0x51, 0x55, 0x54, 0x4f, 0x49,
2930 0x35, 0x70, 0x7c, 0x53, 0x60, 0x54, 0x5e, 0x79,
2931 0x74, 0x59, 0x49, 0x5e, 0x5e, 0x58, 0x72, 0x7a,
2932 0x8c, 0x89, 0x89, 0xc1, 0xbb, 0x8f, 0x72, 0x6a,
2933 0x73, 0x72, 0x76, 0x8b, 0x8d, 0x72, 0x98, 0xfe,
2934 0xa7, 0x68, 0x90, 0x8d, 0x76, 0x5c, 0x60, 0x78,
2935 0x68, 0x7b, 0x8f, 0x7d, 0x7f, 0x8d, 0x6f, 0x55,
2936 0x8d, 0x91, 0x8f, 0x84, 0x71, 0x7e, 0x6a, 0x8f,
2937 0xa1, 0x94, 0x78, 0x72, 0x89, 0x7c, 0x8b, 0x8e,
2938 0x86, 0x7e, 0x7c, 0x8e, 0x8f, 0x7e, 0x7e, 0x84,
2939 0x6b, 0x86, 0xa0, 0xa3, 0x97, 0x81, 0x66, 0x50,
2940 0x39, 0x46, 0x20, 0x48, 0x92, 0x77, 0x5f, 0x82,
2941 0x84, 0x8b, 0x74, 0x75, 0x6b, 0x5e, 0x32, 0x08,
2942 0xf1, 0xeb, 0xe4, 0xf6, 0xb8, 0x65, 0x7a, 0x96,
2943 0x89, 0x75, 0x7d, 0x83, 0xb4, 0xe4, 0xd8, 0xe3,
2944 0xe2, 0xe2, 0xe0, 0xdf, 0xdd, 0xdb, 0xda, 0xd9,
2945 0xdb, 0xd9, 0xd6, 0xd1, 0xcc, 0xc7, 0xc3, 0xc1,
2946 0xbe, 0xbf, 0xc1, 0xc3, 0xc5, 0xc7, 0xc8, 0xc9,
2947 0xc5, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2948 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2,
2949 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2950 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc7,
2951 0xc7, 0xc7, 0xc8, 0xc9, 0xc9, 0xca, 0xcb, 0xcb,
2952 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2953 0xc6, 0xca, 0xcc, 0xc9, 0xc3, 0xc0, 0xc2, 0xc6,
2954 0xc4, 0xc9, 0xcf, 0xcf, 0xcb, 0xc9, 0xcb, 0xce,
2955 0xc6, 0xa0, 0x74, 0xc7, 0xec, 0xb3, 0xc3, 0xdb,
2956 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
2957 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
2958 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2959 0xcc, 0xcb, 0xc9, 0xc8, 0xc8, 0xc9, 0xcb, 0xcc,
2960 0xae, 0xb8, 0xb6, 0x8a, 0x9e, 0x9d, 0x95, 0xc1,
2961 0xc5, 0xc6, 0xc9, 0xcb, 0xcb, 0xcb, 0xca, 0xc9,
2962 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
2963 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2964 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2965 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2966 0xbe, 0xc4, 0xc9, 0xca, 0xc7, 0xc6, 0xc9, 0xcd,
2967 0xc1, 0xa8, 0xa0, 0xcc, 0xcb, 0xca, 0xbb, 0xc7,
2968 0xa6, 0xa1, 0xbf, 0xbd, 0x9c, 0x7f, 0x65, 0x62,
2969 0x6a, 0x6b, 0x6f, 0x75, 0x7d, 0x84, 0x87, 0x88,
2970 0x73, 0x69, 0x5d, 0x5a, 0x64, 0x75, 0x84, 0x8d,
2971 0x8d, 0x8a, 0x87, 0x86, 0x84, 0x7c, 0x70, 0x66,
2972 0x7d, 0x74, 0x69, 0x63, 0x61, 0x62, 0x61, 0x5f,
2973 0x64, 0x56, 0x48, 0x46, 0x4d, 0x53, 0x51, 0x4c,
2974 0x48, 0x85, 0x74, 0x5d, 0x5d, 0x56, 0x6b, 0x7b,
2975 0x63, 0x4b, 0x5b, 0x4e, 0x5f, 0x83, 0x80, 0xa5,
2976 0x93, 0x84, 0xa1, 0xcf, 0xa9, 0x60, 0x5d, 0x7d,
2977 0x88, 0x7b, 0x87, 0x7f, 0x67, 0x5c, 0x71, 0xa8,
2978 0xde, 0x80, 0x65, 0x73, 0x7e, 0x7a, 0x6d, 0x7f,
2979 0x69, 0x79, 0x89, 0x7c, 0x66, 0x73, 0x8b, 0x8f,
2980 0x7b, 0x7b, 0x86, 0x71, 0x79, 0x95, 0x83, 0x79,
2981 0x79, 0x84, 0x80, 0x80, 0x8b, 0x85, 0x76, 0x77,
2982 0x88, 0x8e, 0x96, 0x8a, 0x90, 0x78, 0x5a, 0x8c,
2983 0x8f, 0x94, 0x84, 0x84, 0x79, 0x7c, 0xa1, 0x9e,
2984 0x94, 0x6b, 0x46, 0x57, 0x76, 0x67, 0x54, 0x62,
2985 0x5f, 0x6a, 0x66, 0x6c, 0x6d, 0x78, 0x26, 0x10,
2986 0xe8, 0xf8, 0xeb, 0xf4, 0xd4, 0x95, 0xb5, 0xf2,
2987 0xfd, 0xff, 0xf0, 0x92, 0x8c, 0xd8, 0xe9, 0xea,
2988 0xeb, 0xea, 0xe9, 0xe7, 0xe6, 0xe4, 0xe3, 0xe2,
2989 0xe8, 0xe6, 0xe3, 0xe0, 0xdc, 0xd8, 0xd5, 0xd3,
2990 0xcd, 0xcb, 0xca, 0xc7, 0xc4, 0xc2, 0xc0, 0xbf,
2991 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2992 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2993 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2994 0xc4, 0xc4, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2995 0xc8, 0xc8, 0xc9, 0xc9, 0xca, 0xcb, 0xcb, 0xcc,
2996 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2997 0xcc, 0xcb, 0xc9, 0xc8, 0xc7, 0xc6, 0xc4, 0xc3,
2998 0xc5, 0xca, 0xcf, 0xcf, 0xcc, 0xca, 0xcc, 0xce,
2999 0xd8, 0xc8, 0xc8, 0xcc, 0x7e, 0x6c, 0xc5, 0xd4,
3000 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3001 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3002 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3003 0xcf, 0xcf, 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca,
3004 0xab, 0xaa, 0xbd, 0x8f, 0xa1, 0xaa, 0x97, 0xbd,
3005 0xc6, 0xc7, 0xca, 0xcc, 0xcc, 0xcc, 0xcb, 0xca,
3006 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3007 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
3008 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
3009 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3010 0xd0, 0xcc, 0xc6, 0xc3, 0xc3, 0xc5, 0xc7, 0xc8,
3011 0xd4, 0xbb, 0xa9, 0xc2, 0xba, 0xba, 0xb6, 0xca,
3012 0xd6, 0xb8, 0xcd, 0xc0, 0x83, 0x67, 0x66, 0x6b,
3013 0x74, 0x7f, 0x89, 0x85, 0x76, 0x6a, 0x68, 0x6c,
3014 0x6e, 0x7b, 0x87, 0x86, 0x7c, 0x75, 0x79, 0x80,
3015 0x80, 0x75, 0x6c, 0x6d, 0x76, 0x7b, 0x75, 0x6d,
3016 0x68, 0x64, 0x5e, 0x5c, 0x5c, 0x5a, 0x54, 0x4f,
3017 0x58, 0x4e, 0x45, 0x46, 0x4d, 0x4f, 0x49, 0x42,
3018 0x3d, 0x7d, 0x78, 0x67, 0x66, 0x5a, 0x62, 0x67,
3019 0x5b, 0x4e, 0x51, 0x35, 0x48, 0x70, 0x73, 0xa1,
3020 0x97, 0x98, 0xab, 0xa0, 0x74, 0x5f, 0x6f, 0x88,
3021 0x6b, 0x71, 0x8a, 0x8b, 0x85, 0x80, 0x72, 0x7a,
3022 0xd1, 0xc7, 0x84, 0x6d, 0x74, 0x62, 0x6a, 0x7d,
3023 0x73, 0x66, 0x75, 0x80, 0x8c, 0x9b, 0x8a, 0x72,
3024 0x79, 0x73, 0x8c, 0x9f, 0x93, 0x75, 0x6b, 0x84,
3025 0x77, 0x80, 0x9b, 0x96, 0x73, 0x75, 0x8c, 0x8a,
3026 0x92, 0x74, 0x82, 0x7f, 0x7d, 0x93, 0x8b, 0x7f,
3027 0x89, 0x6b, 0x78, 0x8d, 0x8d, 0x91, 0x8d, 0x7c,
3028 0x73, 0x95, 0xb8, 0x87, 0x3c, 0x56, 0x8e, 0x86,
3029 0x79, 0x80, 0x74, 0x71, 0x6b, 0x72, 0x1f, 0x09,
3030 0xec, 0xf3, 0xe5, 0xef, 0xf0, 0xee, 0xfe, 0xf0,
3031 0x67, 0xa8, 0xec, 0xeb, 0xec, 0xfa, 0xe6, 0xe6,
3032 0xef, 0xef, 0xee, 0xed, 0xeb, 0xea, 0xe9, 0xe9,
3033 0xf0, 0xef, 0xee, 0xec, 0xe9, 0xe7, 0xe6, 0xe5,
3034 0xe4, 0xe3, 0xdf, 0xdb, 0xd6, 0xd2, 0xcf, 0xcd,
3035 0xcd, 0xcd, 0xcc, 0xca, 0xc9, 0xc8, 0xc7, 0xc6,
3036 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5,
3037 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6,
3038 0xc7, 0xc7, 0xc8, 0xc8, 0xc9, 0xc9, 0xca, 0xca,
3039 0xca, 0xca, 0xca, 0xcb, 0xcc, 0xcd, 0xcd, 0xcd,
3040 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3041 0xd2, 0xcd, 0xc8, 0xc8, 0xcb, 0xcc, 0xc7, 0xc1,
3042 0xc7, 0xcb, 0xcf, 0xd0, 0xce, 0xcc, 0xcd, 0xce,
3043 0xd0, 0xd4, 0xdd, 0xd0, 0xa5, 0xb7, 0xe6, 0xcf,
3044 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3045 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3046 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3047 0xd3, 0xd4, 0xd5, 0xd5, 0xd3, 0xcf, 0xca, 0xc7,
3048 0xc4, 0xb4, 0xd0, 0x9f, 0xa6, 0xb8, 0xa1, 0xbe,
3049 0xc8, 0xc9, 0xcb, 0xcd, 0xce, 0xce, 0xcc, 0xcb,
3050 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3051 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
3052 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
3053 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3054 0xce, 0xca, 0xc6, 0xc7, 0xcb, 0xcb, 0xc5, 0xbf,
3055 0xc9, 0xbc, 0xb0, 0xbe, 0xb8, 0xb6, 0xb3, 0xc4,
3056 0xba, 0xa2, 0xca, 0xc2, 0x77, 0x59, 0x5f, 0x63,
3057 0x69, 0x6f, 0x72, 0x6b, 0x63, 0x65, 0x72, 0x80,
3058 0x85, 0x87, 0x89, 0x87, 0x83, 0x7f, 0x7d, 0x7d,
3059 0x85, 0x6f, 0x59, 0x56, 0x65, 0x76, 0x7d, 0x7c,
3060 0x68, 0x62, 0x5c, 0x5b, 0x5d, 0x5e, 0x5c, 0x5a,
3061 0x4a, 0x46, 0x44, 0x47, 0x4a, 0x46, 0x39, 0x2d,
3062 0x30, 0x72, 0x76, 0x62, 0x62, 0x61, 0x61, 0x58,
3063 0x5a, 0x53, 0x43, 0x2f, 0x69, 0x9c, 0x8b, 0xa2,
3064 0x9a, 0x86, 0x88, 0x68, 0x5d, 0x7f, 0x85, 0x89,
3065 0x92, 0x7f, 0x70, 0x5d, 0x71, 0x95, 0x86, 0x72,
3066 0x81, 0xbf, 0xa9, 0x84, 0x7c, 0x6e, 0x62, 0x4e,
3067 0x69, 0x69, 0x93, 0x92, 0x7c, 0x78, 0x6f, 0x7c,
3068 0x8e, 0x84, 0x72, 0x75, 0x78, 0x79, 0x8a, 0x93,
3069 0x85, 0x7e, 0x7c, 0x85, 0x89, 0x81, 0x83, 0x93,
3070 0x84, 0x6d, 0x8d, 0x98, 0x86, 0x90, 0x88, 0x69,
3071 0x73, 0x86, 0x94, 0x80, 0x8b, 0x88, 0x6b, 0x90,
3072 0x8a, 0x93, 0x6d, 0x60, 0x93, 0xa1, 0x8a, 0x8e,
3073 0x63, 0x6d, 0x65, 0x68, 0x67, 0x71, 0x20, 0x0a,
3074 0xea, 0xf6, 0xf3, 0xed, 0xe5, 0xef, 0xf2, 0xc5,
3075 0x8a, 0xb5, 0xe9, 0xf4, 0xfa, 0xfb, 0xe8, 0xee,
3076 0xed, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8, 0xe8,
3077 0xee, 0xed, 0xed, 0xec, 0xec, 0xeb, 0xeb, 0xea,
3078 0xee, 0xee, 0xec, 0xeb, 0xe9, 0xe7, 0xe6, 0xe5,
3079 0xdd, 0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd3, 0xd2,
3080 0xcb, 0xcb, 0xca, 0xca, 0xc9, 0xc9, 0xc8, 0xc8,
3081 0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcc, 0xcc, 0xcb,
3082 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
3083 0xcc, 0xcc, 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0,
3084 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3085 0xd3, 0xd0, 0xcc, 0xcb, 0xcc, 0xcb, 0xc8, 0xc4,
3086 0xc9, 0xcc, 0xcf, 0xd0, 0xd0, 0xcf, 0xcf, 0xcf,
3087 0xc7, 0xd1, 0xd1, 0xcd, 0xdc, 0xe8, 0xde, 0xd2,
3088 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3089 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3090 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3091 0xd3, 0xd6, 0xd8, 0xd9, 0xd5, 0xce, 0xc7, 0xc2,
3092 0xc1, 0xab, 0xc1, 0x9b, 0x9e, 0xb3, 0xb3, 0xc6,
3093 0xca, 0xcb, 0xce, 0xd0, 0xd0, 0xd0, 0xcf, 0xce,
3094 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3095 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3096 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
3097 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3098 0xd3, 0xcb, 0xc1, 0xbc, 0xc0, 0xc8, 0xcf, 0xd3,
3099 0xd6, 0xca, 0xb6, 0xb0, 0xaf, 0xae, 0xac, 0xb6,
3100 0x8c, 0x95, 0xc7, 0xbb, 0x79, 0x5d, 0x5a, 0x5e,
3101 0x71, 0x67, 0x5a, 0x54, 0x58, 0x64, 0x72, 0x7b,
3102 0x77, 0x6a, 0x5f, 0x60, 0x6e, 0x7c, 0x83, 0x84,
3103 0x6e, 0x69, 0x67, 0x6c, 0x74, 0x74, 0x6a, 0x5f,
3104 0x74, 0x6f, 0x68, 0x64, 0x63, 0x60, 0x5a, 0x55,
3105 0x44, 0x46, 0x4b, 0x53, 0x56, 0x4f, 0x41, 0x35,
3106 0x51, 0x91, 0x94, 0x69, 0x64, 0x77, 0x70, 0x54,
3107 0x54, 0x6c, 0x5c, 0x3e, 0x6d, 0x95, 0x8a, 0xa9,
3108 0x9f, 0x80, 0x92, 0x78, 0x69, 0x7e, 0x77, 0x8a,
3109 0x69, 0x7d, 0x94, 0x81, 0x79, 0x84, 0x73, 0x69,
3110 0x5a, 0x96, 0xe1, 0xb7, 0x69, 0x65, 0x6f, 0x71,
3111 0x7d, 0x59, 0x69, 0x6d, 0x70, 0x7f, 0x77, 0x84,
3112 0x6e, 0x80, 0x6c, 0x6e, 0x81, 0x94, 0x9d, 0x76,
3113 0x75, 0x85, 0x85, 0x89, 0x95, 0x83, 0x6b, 0x70,
3114 0x97, 0x86, 0x81, 0x83, 0x80, 0x73, 0x74, 0x8d,
3115 0x89, 0x73, 0x85, 0x73, 0x65, 0x9d, 0xa1, 0x65,
3116 0x79, 0x56, 0x5f, 0x7d, 0x6f, 0x55, 0x5b, 0x6c,
3117 0x7a, 0x86, 0x80, 0x82, 0x7a, 0x79, 0x1c, 0x00,
3118 0xeb, 0xfb, 0xf3, 0xf0, 0xf6, 0xef, 0xf1, 0xfc,
3119 0xf8, 0xff, 0xff, 0xec, 0xed, 0xf5, 0xf0, 0xf4,
3120 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xe9, 0xe9, 0xe9,
3121 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea,
3122 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
3123 0xe8, 0xe7, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdd,
3124 0xd7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd3, 0xd2,
3125 0xd1, 0xd1, 0xd0, 0xcf, 0xce, 0xcd, 0xcd, 0xcc,
3126 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xce, 0xce, 0xce,
3127 0xce, 0xcf, 0xcf, 0xd0, 0xd1, 0xd1, 0xd2, 0xd2,
3128 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3129 0xd1, 0xd3, 0xd3, 0xcf, 0xca, 0xc6, 0xc6, 0xc8,
3130 0xcc, 0xcd, 0xcf, 0xd1, 0xd3, 0xd3, 0xd1, 0xcf,
3131 0xd2, 0xcd, 0xd7, 0xd7, 0xd4, 0xd3, 0xca, 0xce,
3132 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3133 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3134 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3135 0xd3, 0xd5, 0xd8, 0xd7, 0xd4, 0xcc, 0xc4, 0xbf,
3136 0xc8, 0xb6, 0xbb, 0xa4, 0x9d, 0x9e, 0xb1, 0xb8,
3137 0xcc, 0xce, 0xd0, 0xd2, 0xd3, 0xd2, 0xd1, 0xd0,
3138 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3139 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3140 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3141 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3142 0xc4, 0xc8, 0xcc, 0xcd, 0xca, 0xc8, 0xc9, 0xca,
3143 0xd4, 0xd0, 0xbe, 0xb0, 0xbd, 0xbd, 0xb3, 0xac,
3144 0xa1, 0xbd, 0xd2, 0xa9, 0x7a, 0x67, 0x5e, 0x6d,
3145 0x65, 0x61, 0x5e, 0x5f, 0x65, 0x6e, 0x76, 0x7a,
3146 0x80, 0x78, 0x6d, 0x66, 0x66, 0x68, 0x68, 0x68,
3147 0x65, 0x6e, 0x7a, 0x81, 0x7d, 0x71, 0x62, 0x59,
3148 0x5e, 0x5c, 0x5c, 0x60, 0x63, 0x62, 0x5c, 0x57,
3149 0x60, 0x62, 0x64, 0x65, 0x60, 0x53, 0x41, 0x35,
3150 0x5f, 0x9c, 0xa0, 0x64, 0x58, 0x77, 0x63, 0x33,
3151 0x37, 0x67, 0x6a, 0x5b, 0x86, 0x9e, 0x92, 0xaa,
3152 0x76, 0x55, 0x74, 0x73, 0x71, 0x80, 0x6f, 0x81,
3153 0x83, 0x72, 0x6e, 0x63, 0x6f, 0x88, 0x85, 0x89,
3154 0x68, 0x59, 0xad, 0xd5, 0xa1, 0x7d, 0x6d, 0x66,
3155 0x77, 0x69, 0x81, 0x81, 0x6b, 0x65, 0x64, 0x77,
3156 0x76, 0x8f, 0x8e, 0x90, 0x79, 0x63, 0x7f, 0x8a,
3157 0x86, 0x80, 0x7d, 0x6c, 0x64, 0x87, 0x9c, 0x84,
3158 0x83, 0x87, 0x77, 0x83, 0x97, 0x7e, 0x6e, 0x85,
3159 0x82, 0x74, 0x77, 0xa3, 0x98, 0x60, 0x78, 0xb6,
3160 0x73, 0x5d, 0x56, 0x56, 0x5a, 0x76, 0x8d, 0x86,
3161 0x85, 0x84, 0x6b, 0x5f, 0x57, 0x63, 0x1a, 0x0a,
3162 0xfb, 0xf5, 0xea, 0xe9, 0xef, 0xf1, 0xee, 0xed,
3163 0xf6, 0xf4, 0xee, 0xef, 0xf3, 0xeb, 0xe8, 0xf5,
3164 0xee, 0xee, 0xee, 0xee, 0xee, 0xed, 0xed, 0xed,
3165 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3166 0xe9, 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe6,
3167 0xea, 0xe9, 0xe8, 0xe7, 0xe6, 0xe4, 0xe3, 0xe3,
3168 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe0, 0xdf, 0xdf,
3169 0xd3, 0xd3, 0xd2, 0xd0, 0xcf, 0xce, 0xcd, 0xcc,
3170 0xd3, 0xd3, 0xd2, 0xd2, 0xd1, 0xd1, 0xd0, 0xd0,
3171 0xd1, 0xd1, 0xd1, 0xd2, 0xd3, 0xd4, 0xd4, 0xd4,
3172 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3173 0xd0, 0xd3, 0xd5, 0xd0, 0xc8, 0xc3, 0xc5, 0xc8,
3174 0xcf, 0xce, 0xcf, 0xd2, 0xd5, 0xd6, 0xd2, 0xcf,
3175 0xd6, 0xcf, 0xd2, 0xd3, 0xd9, 0xdc, 0xd1, 0xcd,
3176 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3177 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3178 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3179 0xd5, 0xd6, 0xd6, 0xd5, 0xd2, 0xcc, 0xc6, 0xc3,
3180 0xb8, 0xb0, 0xb4, 0xb1, 0xac, 0x9a, 0xb5, 0xc4,
3181 0xce, 0xd0, 0xd2, 0xd4, 0xd5, 0xd4, 0xd3, 0xd2,
3182 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3183 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3184 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3185 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3186 0xd1, 0xd3, 0xd1, 0xc9, 0xc2, 0xc0, 0xc5, 0xcc,
3187 0xc0, 0xcc, 0xc6, 0xb8, 0xd4, 0xd5, 0xc4, 0xb0,
3188 0xb0, 0xc7, 0xc9, 0x9d, 0x83, 0x74, 0x61, 0x75,
3189 0x7d, 0x7f, 0x7c, 0x6f, 0x62, 0x61, 0x6d, 0x7b,
3190 0x78, 0x6e, 0x65, 0x64, 0x6b, 0x70, 0x6f, 0x6c,
3191 0x64, 0x6b, 0x70, 0x6e, 0x67, 0x62, 0x62, 0x65,
3192 0x64, 0x5c, 0x53, 0x50, 0x56, 0x5f, 0x66, 0x69,
3193 0x65, 0x65, 0x63, 0x5e, 0x55, 0x49, 0x3c, 0x34,
3194 0x3b, 0x6c, 0x80, 0x53, 0x4e, 0x6f, 0x53, 0x23,
3195 0x35, 0x54, 0x51, 0x54, 0x84, 0x9e, 0x9c, 0xab,
3196 0x92, 0x74, 0x81, 0x7f, 0x86, 0x98, 0x82, 0x75,
3197 0x7b, 0x77, 0x89, 0x8a, 0x81, 0x75, 0x61, 0x69,
3198 0x8e, 0x69, 0x77, 0xc7, 0xb8, 0x63, 0x55, 0x62,
3199 0x8f, 0x74, 0x64, 0x68, 0x6b, 0x77, 0x88, 0x85,
3200 0x9e, 0x82, 0x67, 0x74, 0x86, 0x88, 0x90, 0x91,
3201 0x7e, 0x74, 0x77, 0x86, 0x8e, 0x8f, 0x8e, 0x8b,
3202 0x71, 0x89, 0x8e, 0x95, 0x8f, 0x7a, 0x74, 0x6a,
3203 0x90, 0x88, 0x84, 0x87, 0x68, 0x78, 0x9d, 0x61,
3204 0x55, 0x92, 0x96, 0x82, 0x90, 0x85, 0x6a, 0x72,
3205 0x60, 0x75, 0x7e, 0x8c, 0x8b, 0x89, 0x28, 0x06,
3206 0xf1, 0xed, 0xf9, 0xf5, 0xeb, 0xf9, 0xfd, 0xeb,
3207 0xe9, 0xf4, 0xef, 0xed, 0xf3, 0xf3, 0xf4, 0xf6,
3208 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3209 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec,
3210 0xec, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea,
3211 0xe9, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3212 0xec, 0xeb, 0xea, 0xe9, 0xe7, 0xe5, 0xe4, 0xe4,
3213 0xdb, 0xda, 0xd9, 0xd8, 0xd6, 0xd5, 0xd3, 0xd3,
3214 0xd6, 0xd6, 0xd5, 0xd4, 0xd3, 0xd3, 0xd2, 0xd2,
3215 0xd2, 0xd3, 0xd3, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6,
3216 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3217 0xd2, 0xd2, 0xd0, 0xcd, 0xc9, 0xc5, 0xc4, 0xc3,
3218 0xd1, 0xcf, 0xcf, 0xd2, 0xd7, 0xd8, 0xd4, 0xcf,
3219 0xd0, 0xd9, 0xcd, 0xc6, 0xd0, 0xd4, 0xd4, 0xd9,
3220 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3221 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3222 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3223 0xd9, 0xd9, 0xd7, 0xd5, 0xd2, 0xcf, 0xcd, 0xcc,
3224 0xb8, 0xab, 0xb3, 0xae, 0xa7, 0x89, 0x9c, 0xc1,
3225 0xd0, 0xd2, 0xd4, 0xd6, 0xd7, 0xd6, 0xd5, 0xd4,
3226 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3227 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3228 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3229 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3230 0xca, 0xce, 0xd3, 0xd4, 0xd0, 0xc9, 0xc1, 0xbc,
3231 0xc2, 0xd3, 0xcb, 0xac, 0xcb, 0xd0, 0xca, 0xba,
3232 0xa9, 0xa4, 0xab, 0xa0, 0x91, 0x7b, 0x63, 0x72,
3233 0x7c, 0x7c, 0x77, 0x6a, 0x60, 0x64, 0x77, 0x88,
3234 0x6f, 0x64, 0x59, 0x57, 0x5d, 0x64, 0x66, 0x65,
3235 0x79, 0x7c, 0x7e, 0x7d, 0x79, 0x76, 0x75, 0x76,
3236 0x7d, 0x70, 0x60, 0x57, 0x56, 0x5c, 0x61, 0x63,
3237 0x4b, 0x4b, 0x4b, 0x49, 0x48, 0x48, 0x4a, 0x4c,
3238 0x3c, 0x4d, 0x68, 0x58, 0x5a, 0x72, 0x5a, 0x42,
3239 0x58, 0x5e, 0x44, 0x34, 0x41, 0x54, 0x73, 0x92,
3240 0x72, 0x72, 0x84, 0x84, 0x7b, 0x84, 0x8a, 0x86,
3241 0x88, 0x6b, 0x64, 0x64, 0x74, 0x85, 0x80, 0x8a,
3242 0x76, 0x66, 0x56, 0x9c, 0xda, 0xb8, 0x85, 0x64,
3243 0x7f, 0x80, 0x70, 0x84, 0x87, 0x7d, 0x81, 0x55,
3244 0x78, 0x84, 0x96, 0x8f, 0x84, 0x7e, 0x6c, 0x67,
3245 0x8c, 0x8c, 0x84, 0x8a, 0x8f, 0x70, 0x6b, 0x96,
3246 0x94, 0x96, 0x85, 0x7d, 0x67, 0x63, 0x85, 0x84,
3247 0x76, 0x96, 0x72, 0x54, 0x74, 0x7a, 0x54, 0x3c,
3248 0x80, 0x5b, 0x64, 0x6f, 0x57, 0x66, 0x87, 0x7d,
3249 0x86, 0x85, 0x6d, 0x63, 0x5d, 0x6c, 0x24, 0x15,
3250 0xf6, 0xf3, 0xf2, 0xf0, 0xf7, 0xf3, 0xe8, 0xf4,
3251 0xfa, 0xfa, 0xea, 0xe9, 0xef, 0xea, 0xec, 0xf0,
3252 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3253 0xee, 0xee, 0xee, 0xed, 0xec, 0xeb, 0xeb, 0xeb,
3254 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xec, 0xed, 0xee,
3255 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xec, 0xec, 0xed,
3256 0xea, 0xea, 0xe8, 0xe7, 0xe5, 0xe3, 0xe2, 0xe1,
3257 0xe5, 0xe4, 0xe3, 0xe1, 0xe0, 0xde, 0xdd, 0xdc,
3258 0xd8, 0xd7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd3,
3259 0xd3, 0xd3, 0xd4, 0xd5, 0xd5, 0xd6, 0xd7, 0xd7,
3260 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
3261 0xd6, 0xd0, 0xcb, 0xc9, 0xca, 0xc9, 0xc3, 0xbe,
3262 0xd2, 0xd0, 0xcf, 0xd2, 0xd8, 0xd9, 0xd5, 0xcf,
3263 0xcc, 0xd2, 0xd4, 0xda, 0xd3, 0xd3, 0xe0, 0xd9,
3264 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3265 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3266 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3267 0xdd, 0xdb, 0xd8, 0xd5, 0xd3, 0xd2, 0xd2, 0xd3,
3268 0xc0, 0xa9, 0xb8, 0xad, 0xa8, 0x8d, 0x9b, 0xda,
3269 0xd1, 0xd3, 0xd5, 0xd7, 0xd8, 0xd7, 0xd6, 0xd5,
3270 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3271 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3272 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3273 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3274 0xc9, 0xc9, 0xca, 0xcf, 0xd3, 0xd1, 0xc8, 0xc0,
3275 0xa6, 0xc5, 0xc9, 0xaa, 0xcb, 0xd1, 0xcf, 0xc0,
3276 0xbb, 0x91, 0x99, 0xa6, 0x95, 0x79, 0x66, 0x73,
3277 0x82, 0x7d, 0x75, 0x6f, 0x69, 0x65, 0x60, 0x5d,
3278 0x5d, 0x6b, 0x75, 0x70, 0x63, 0x60, 0x6e, 0x7e,
3279 0x81, 0x76, 0x68, 0x5f, 0x5f, 0x64, 0x69, 0x6b,
3280 0x57, 0x5a, 0x60, 0x69, 0x70, 0x6f, 0x67, 0x60,
3281 0x5e, 0x5a, 0x53, 0x4a, 0x44, 0x44, 0x49, 0x4d,
3282 0x5d, 0x4c, 0x5d, 0x59, 0x58, 0x61, 0x4d, 0x4e,
3283 0x68, 0x59, 0x3f, 0x44, 0x55, 0x59, 0x5b, 0x56,
3284 0x73, 0x68, 0x6b, 0x7e, 0x7c, 0x77, 0x7a, 0x6d,
3285 0x6c, 0x6f, 0x87, 0x88, 0x84, 0x7e, 0x68, 0x67,
3286 0x83, 0x8b, 0x78, 0x59, 0x8e, 0xc2, 0x8e, 0x5b,
3287 0x79, 0x8b, 0x6c, 0x74, 0x6a, 0x65, 0x8e, 0x6e,
3288 0x67, 0x60, 0x72, 0x6d, 0x74, 0x84, 0x7a, 0x84,
3289 0x81, 0x77, 0x70, 0x6b, 0x77, 0x97, 0x9c, 0x7d,
3290 0x7d, 0x76, 0x6b, 0x90, 0x9b, 0x81, 0x80, 0x71,
3291 0x58, 0x75, 0x8d, 0x93, 0xa2, 0x73, 0x3a, 0x6a,
3292 0x72, 0x7c, 0x78, 0x7b, 0x88, 0x7c, 0x69, 0x6c,
3293 0x65, 0x73, 0x72, 0x7b, 0x7c, 0x84, 0x2f, 0x16,
3294 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3295 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3296 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3297 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3298 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3299 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3300 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3301 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3302 0xe5, 0xe5, 0xe4, 0xe3, 0xe3, 0xe2, 0xe1, 0xe1,
3303 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3304 0xdb, 0xda, 0xda, 0xd9, 0xd8, 0xd8, 0xd7, 0xd7,
3305 0xd9, 0xd4, 0xd2, 0xcc, 0xc5, 0xcb, 0xcc, 0xc0,
3306 0xcd, 0xd8, 0xc5, 0xcf, 0xdd, 0xd3, 0xd8, 0xd8,
3307 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3308 0xd7, 0xd8, 0xd9, 0xdb, 0xdd, 0xdf, 0xe0, 0xe1,
3309 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3310 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3311 0xdd, 0xd9, 0xdc, 0xe3, 0xe0, 0xd5, 0xcf, 0xd1,
3312 0xc6, 0xa7, 0xad, 0xb5, 0xbb, 0x83, 0xaa, 0xcd,
3313 0xcd, 0xd6, 0xda, 0xd5, 0xd3, 0xd7, 0xd8, 0xd5,
3314 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3315 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3316 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3317 0xd1, 0xd2, 0xd2, 0xd2, 0xd0, 0xcd, 0xca, 0xc8,
3318 0xc6, 0xdc, 0xca, 0xcd, 0xd5, 0xbc, 0xbc, 0xd0,
3319 0xc2, 0xbc, 0xb1, 0xa7, 0xb6, 0xa8, 0xb7, 0xa8,
3320 0xbe, 0xa2, 0xab, 0xc1, 0x95, 0x73, 0x7f, 0x6b,
3321 0x76, 0x71, 0x69, 0x62, 0x65, 0x6c, 0x6d, 0x69,
3322 0x7b, 0x76, 0x6c, 0x65, 0x6a, 0x71, 0x6d, 0x62,
3323 0x5d, 0x5c, 0x5e, 0x67, 0x72, 0x77, 0x75, 0x70,
3324 0x6d, 0x69, 0x64, 0x5f, 0x5b, 0x56, 0x51, 0x4d,
3325 0x53, 0x48, 0x4f, 0x52, 0x45, 0x43, 0x43, 0x33,
3326 0x50, 0x5e, 0x55, 0x43, 0x4e, 0x61, 0x55, 0x3b,
3327 0x51, 0x54, 0x50, 0x53, 0x58, 0x45, 0x2f, 0x2e,
3328 0x5f, 0x61, 0x69, 0x74, 0x76, 0x75, 0x80, 0x8f,
3329 0x75, 0x68, 0x65, 0x72, 0x7c, 0x7b, 0x7a, 0x7f,
3330 0x71, 0x69, 0x71, 0x71, 0x59, 0x94, 0xc7, 0x72,
3331 0x65, 0x76, 0x71, 0x7b, 0x90, 0x88, 0x79, 0x7c,
3332 0x7b, 0x59, 0x7e, 0x77, 0x87, 0x7f, 0x80, 0x81,
3333 0x67, 0x84, 0x92, 0x9c, 0x81, 0x6f, 0x7d, 0x61,
3334 0x84, 0x94, 0x80, 0x6b, 0x76, 0x74, 0x6d, 0x7b,
3335 0x85, 0x5c, 0x4c, 0x7e, 0x71, 0x5d, 0x92, 0x94,
3336 0x89, 0x70, 0x72, 0x6f, 0x57, 0x63, 0x77, 0x68,
3337 0x84, 0x8f, 0x87, 0x8a, 0x87, 0x83, 0x1d, 0x00,
3338 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3339 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3340 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3341 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3342 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3343 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3344 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3345 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3346 0xe6, 0xe5, 0xe5, 0xe4, 0xe3, 0xe3, 0xe2, 0xe2,
3347 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3348 0xdf, 0xdf, 0xdf, 0xde, 0xdd, 0xdc, 0xdc, 0xdc,
3349 0xd7, 0xda, 0xdb, 0xd0, 0xc6, 0xcd, 0xce, 0xbe,
3350 0xc3, 0xd5, 0xcb, 0xd0, 0xda, 0xd3, 0xd8, 0xd7,
3351 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3352 0xd8, 0xd9, 0xda, 0xdc, 0xdd, 0xdf, 0xe0, 0xe1,
3353 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3354 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3355 0xda, 0xdd, 0xe0, 0xdf, 0xdc, 0xd9, 0xd3, 0xce,
3356 0xd1, 0xb5, 0x96, 0xb1, 0xc1, 0x88, 0x95, 0xc7,
3357 0xcc, 0xd5, 0xdb, 0xd7, 0xd5, 0xd8, 0xd7, 0xd4,
3358 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3359 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3360 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3361 0xd2, 0xd2, 0xd3, 0xd3, 0xd1, 0xce, 0xcb, 0xc9,
3362 0xba, 0xbc, 0xcf, 0xd2, 0xd4, 0xca, 0xb5, 0xc1,
3363 0xdc, 0xc4, 0xc0, 0x98, 0x9c, 0xd3, 0xc9, 0xc9,
3364 0xa1, 0xa7, 0xc1, 0xd2, 0x9c, 0x6a, 0x76, 0x76,
3365 0x78, 0x7a, 0x7d, 0x80, 0x81, 0x7c, 0x6f, 0x63,
3366 0x7a, 0x7c, 0x76, 0x6d, 0x6c, 0x74, 0x79, 0x77,
3367 0x80, 0x7c, 0x75, 0x6d, 0x67, 0x65, 0x67, 0x6a,
3368 0x6a, 0x60, 0x58, 0x5a, 0x62, 0x64, 0x5c, 0x52,
3369 0x59, 0x50, 0x56, 0x58, 0x4d, 0x4b, 0x4a, 0x3e,
3370 0x4c, 0x61, 0x58, 0x40, 0x49, 0x5f, 0x5b, 0x48,
3371 0x66, 0x74, 0x69, 0x56, 0x56, 0x54, 0x48, 0x43,
3372 0x76, 0x72, 0x79, 0x89, 0x8d, 0x80, 0x70, 0x69,
3373 0x84, 0x8d, 0x8c, 0x7f, 0x76, 0x74, 0x6c, 0x60,
3374 0x8c, 0x7e, 0x89, 0x93, 0x74, 0x76, 0xa4, 0xac,
3375 0x75, 0x68, 0x60, 0x57, 0x84, 0x8b, 0x5e, 0x89,
3376 0x7b, 0x74, 0x81, 0x69, 0x81, 0x6e, 0x6f, 0x98,
3377 0x98, 0x94, 0x73, 0x80, 0x8e, 0x7d, 0x89, 0x98,
3378 0x92, 0x77, 0x73, 0x6d, 0x60, 0x7d, 0x97, 0x83,
3379 0x56, 0x7b, 0xae, 0x5d, 0x59, 0x91, 0x5f, 0x6d,
3380 0x5a, 0x66, 0x7c, 0x87, 0x88, 0x96, 0x98, 0x84,
3381 0x78, 0x58, 0x4e, 0x75, 0x82, 0x81, 0x29, 0x13,
3382 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3383 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3384 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3385 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3386 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3387 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3388 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3389 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3390 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3, 0xe3,
3391 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3392 0xe5, 0xe5, 0xe4, 0xe3, 0xe3, 0xe2, 0xe1, 0xe1,
3393 0xdb, 0xda, 0xdd, 0xd9, 0xce, 0xcc, 0xc9, 0xbc,
3394 0xb4, 0xd0, 0xd2, 0xd3, 0xd6, 0xd4, 0xd9, 0xd5,
3395 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3396 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xe0, 0xe1, 0xe1,
3397 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3398 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3399 0xd8, 0xe1, 0xe3, 0xdc, 0xd9, 0xdc, 0xd7, 0xcc,
3400 0xd8, 0xe2, 0x96, 0x92, 0xaf, 0xa1, 0xa7, 0xc9,
3401 0xca, 0xd5, 0xdc, 0xda, 0xd8, 0xd9, 0xd7, 0xd2,
3402 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3403 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3404 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3405 0xd2, 0xd3, 0xd4, 0xd4, 0xd2, 0xd0, 0xcd, 0xcb,
3406 0xbf, 0xb0, 0xc1, 0xc7, 0xc9, 0xd1, 0xca, 0xcd,
3407 0xd2, 0xe4, 0xd9, 0xb9, 0x98, 0xcc, 0xd1, 0xc1,
3408 0x5a, 0xaf, 0xd3, 0xb4, 0x7c, 0x67, 0x73, 0x65,
3409 0x7a, 0x6f, 0x64, 0x62, 0x69, 0x74, 0x7d, 0x83,
3410 0x7d, 0x81, 0x7b, 0x6a, 0x60, 0x65, 0x6f, 0x75,
3411 0x87, 0x87, 0x86, 0x82, 0x7c, 0x77, 0x74, 0x72,
3412 0x5d, 0x62, 0x67, 0x69, 0x68, 0x6a, 0x6f, 0x74,
3413 0x5e, 0x58, 0x59, 0x56, 0x49, 0x43, 0x41, 0x38,
3414 0x45, 0x6a, 0x73, 0x67, 0x6d, 0x70, 0x60, 0x52,
3415 0x40, 0x5d, 0x66, 0x5d, 0x5f, 0x66, 0x72, 0x85,
3416 0x7e, 0x6e, 0x64, 0x6a, 0x74, 0x79, 0x7f, 0x87,
3417 0x75, 0x6f, 0x63, 0x5f, 0x6f, 0x83, 0x83, 0x74,
3418 0x79, 0x5d, 0x5e, 0x6e, 0x6f, 0x69, 0x8d, 0xd9,
3419 0xc2, 0x7e, 0x72, 0x6e, 0x7b, 0x82, 0x6f, 0x95,
3420 0x7a, 0x65, 0x6b, 0x63, 0x8b, 0xa3, 0x8f, 0x65,
3421 0x71, 0x80, 0x72, 0x7b, 0x8f, 0x87, 0x7c, 0x70,
3422 0x7e, 0x72, 0x77, 0x8b, 0x84, 0x67, 0x69, 0x89,
3423 0x96, 0xa0, 0x4e, 0x4d, 0x74, 0x6f, 0x84, 0x84,
3424 0x85, 0x90, 0x82, 0x69, 0x64, 0x5d, 0x4d, 0x45,
3425 0x7a, 0x7b, 0x88, 0x8a, 0x5b, 0x53, 0x11, 0x00,
3426 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3427 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3428 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3429 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3430 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3431 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3432 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3433 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3434 0xe8, 0xe8, 0xe7, 0xe7, 0xe6, 0xe5, 0xe5, 0xe4,
3435 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3436 0xe7, 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3,
3437 0xe3, 0xd5, 0xd6, 0xdd, 0xd6, 0xcc, 0xc3, 0xb8,
3438 0xa8, 0xc8, 0xd9, 0xd5, 0xd2, 0xd7, 0xdb, 0xd5,
3439 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3440 0xdd, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe1, 0xe2,
3441 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3442 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3443 0xdc, 0xe1, 0xe1, 0xdd, 0xda, 0xda, 0xd6, 0xd0,
3444 0xb3, 0xe3, 0xa5, 0x87, 0xad, 0xb3, 0xc1, 0xc8,
3445 0xc9, 0xd5, 0xdd, 0xdc, 0xda, 0xda, 0xd7, 0xd2,
3446 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3447 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3448 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3449 0xd3, 0xd3, 0xd4, 0xd5, 0xd4, 0xd2, 0xcf, 0xce,
3450 0xc5, 0xc6, 0xc3, 0xd4, 0xd6, 0xca, 0xc6, 0xaf,
3451 0xb7, 0xd4, 0xcb, 0xd2, 0xbc, 0xca, 0xd9, 0xaf,
3452 0x86, 0xd0, 0xdf, 0xba, 0x84, 0x59, 0x5d, 0x68,
3453 0x70, 0x6e, 0x75, 0x80, 0x83, 0x77, 0x68, 0x61,
3454 0x6e, 0x73, 0x6d, 0x60, 0x5b, 0x66, 0x76, 0x7e,
3455 0x8c, 0x8a, 0x89, 0x89, 0x87, 0x81, 0x78, 0x72,
3456 0x5c, 0x67, 0x6e, 0x68, 0x5a, 0x54, 0x5b, 0x66,
3457 0x60, 0x5f, 0x5f, 0x5a, 0x4f, 0x49, 0x48, 0x45,
3458 0x4e, 0x69, 0x6f, 0x6c, 0x6d, 0x5d, 0x50, 0x5e,
3459 0x41, 0x34, 0x2e, 0x4a, 0x6e, 0x6d, 0x62, 0x6a,
3460 0x65, 0x6c, 0x7b, 0x87, 0x82, 0x71, 0x6a, 0x6d,
3461 0x71, 0x73, 0x7d, 0x87, 0x80, 0x71, 0x6e, 0x76,
3462 0x79, 0x84, 0x9c, 0x8b, 0x74, 0x61, 0x64, 0xa2,
3463 0xdd, 0x9d, 0x68, 0x69, 0x72, 0x73, 0x7c, 0x81,
3464 0x83, 0x67, 0x7b, 0x8e, 0x7e, 0x6b, 0x75, 0x7f,
3465 0x6e, 0x87, 0x9c, 0x8b, 0x64, 0x67, 0x86, 0x8b,
3466 0x86, 0x9c, 0x80, 0x6a, 0x83, 0x7d, 0x5b, 0x59,
3467 0x6a, 0x5a, 0x5c, 0x87, 0x92, 0x7a, 0x7a, 0x7c,
3468 0x67, 0x71, 0x61, 0x60, 0x7a, 0x78, 0x75, 0x95,
3469 0x8f, 0x66, 0x5f, 0x6d, 0x4a, 0x4b, 0x18, 0x0e,
3470 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3471 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3472 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3473 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3474 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3475 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3476 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3477 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3478 0xea, 0xe9, 0xe9, 0xe8, 0xe7, 0xe7, 0xe6, 0xe6,
3479 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3480 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3, 0xe3,
3481 0xe2, 0xd8, 0xd5, 0xd6, 0xd5, 0xd5, 0xc7, 0xaf,
3482 0xa3, 0xc0, 0xdb, 0xd7, 0xd1, 0xda, 0xde, 0xd9,
3483 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3484 0xdf, 0xe0, 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
3485 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3486 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
3487 0xe2, 0xde, 0xdd, 0xe0, 0xde, 0xd6, 0xd4, 0xd6,
3488 0xc4, 0xd3, 0xab, 0x85, 0x9e, 0x87, 0xb0, 0xca,
3489 0xcb, 0xd6, 0xde, 0xdc, 0xd9, 0xdb, 0xd9, 0xd4,
3490 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3491 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
3492 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3493 0xd3, 0xd4, 0xd5, 0xd6, 0xd6, 0xd4, 0xd2, 0xd0,
3494 0xbf, 0xba, 0x9f, 0xaa, 0xc4, 0xcd, 0xd3, 0xc6,
3495 0xae, 0xb9, 0xd4, 0xd0, 0xb7, 0x9d, 0xb9, 0xc5,
3496 0x98, 0xc9, 0xc0, 0xa0, 0x81, 0x61, 0x69, 0x7e,
3497 0x86, 0x77, 0x70, 0x75, 0x74, 0x6a, 0x65, 0x68,
3498 0x7f, 0x7d, 0x72, 0x62, 0x5d, 0x67, 0x70, 0x72,
3499 0x85, 0x86, 0x84, 0x7e, 0x77, 0x76, 0x7c, 0x82,
3500 0x90, 0x8b, 0x82, 0x77, 0x6b, 0x60, 0x57, 0x52,
3501 0x4a, 0x4f, 0x4f, 0x49, 0x44, 0x3f, 0x40, 0x46,
3502 0x5b, 0x6a, 0x6d, 0x78, 0x78, 0x4e, 0x3b, 0x61,
3503 0x48, 0x47, 0x4b, 0x5f, 0x6c, 0x61, 0x66, 0x86,
3504 0x78, 0x76, 0x7a, 0x7f, 0x7b, 0x76, 0x7e, 0x8b,
3505 0x7e, 0x67, 0x5b, 0x69, 0x7e, 0x86, 0x87, 0x89,
3506 0x70, 0x6b, 0x78, 0x6b, 0x72, 0x85, 0x6c, 0x60,
3507 0x9f, 0xbe, 0x8b, 0x56, 0x6b, 0x7b, 0x7c, 0x8e,
3508 0x84, 0x75, 0x5a, 0x6d, 0x82, 0x79, 0x79, 0x9b,
3509 0x91, 0x73, 0x78, 0x88, 0x88, 0x8b, 0x8f, 0x8d,
3510 0x81, 0x76, 0x8b, 0x9b, 0x88, 0x84, 0x97, 0xa0,
3511 0x71, 0x5b, 0x8f, 0x7d, 0x5a, 0x6a, 0x61, 0x6f,
3512 0x91, 0x8d, 0x7f, 0x8a, 0x96, 0x6e, 0x57, 0x7a,
3513 0x57, 0x68, 0x7a, 0x82, 0x6f, 0x82, 0x37, 0x08,
3514 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3515 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3516 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3517 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3518 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3519 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3520 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3521 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3522 0xeb, 0xeb, 0xea, 0xea, 0xe9, 0xe8, 0xe8, 0xe7,
3523 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3524 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3, 0xe3,
3525 0xdd, 0xe1, 0xdd, 0xce, 0xcd, 0xde, 0xd4, 0xaf,
3526 0xa6, 0xb8, 0xd9, 0xd9, 0xd2, 0xde, 0xe1, 0xe1,
3527 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
3528 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3529 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3530 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3531 0xe6, 0xde, 0xdc, 0xe1, 0xdf, 0xd5, 0xd3, 0xd9,
3532 0xc9, 0xc6, 0xc4, 0xa5, 0xb0, 0x80, 0x98, 0xb0,
3533 0xd0, 0xd9, 0xdd, 0xd9, 0xd6, 0xda, 0xdb, 0xd8,
3534 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3535 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3536 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3537 0xd4, 0xd5, 0xd6, 0xd7, 0xd7, 0xd6, 0xd4, 0xd3,
3538 0xd4, 0xdb, 0xdb, 0xb7, 0xa4, 0xad, 0xbb, 0xe0,
3539 0xeb, 0xd8, 0xcc, 0xd0, 0xce, 0x9a, 0xb9, 0xcd,
3540 0xae, 0xda, 0xc4, 0x96, 0x79, 0x6a, 0x74, 0x78,
3541 0x77, 0x6b, 0x6b, 0x7a, 0x7b, 0x6b, 0x61, 0x64,
3542 0x6f, 0x6f, 0x69, 0x5f, 0x60, 0x6d, 0x77, 0x79,
3543 0x7d, 0x89, 0x90, 0x88, 0x79, 0x73, 0x7c, 0x88,
3544 0x94, 0x91, 0x8b, 0x82, 0x77, 0x6e, 0x68, 0x65,
3545 0x59, 0x60, 0x5a, 0x4d, 0x44, 0x3a, 0x37, 0x42,
3546 0x62, 0x71, 0x75, 0x86, 0x8b, 0x54, 0x36, 0x5e,
3547 0x67, 0x60, 0x4e, 0x47, 0x52, 0x53, 0x56, 0x66,
3548 0x82, 0x78, 0x76, 0x7f, 0x83, 0x7c, 0x74, 0x72,
3549 0x71, 0x7e, 0x84, 0x79, 0x70, 0x6e, 0x68, 0x5e,
3550 0x91, 0x84, 0x85, 0x73, 0x65, 0x72, 0x70, 0x61,
3551 0x75, 0x9d, 0xa9, 0x5a, 0x54, 0x8a, 0x73, 0x64,
3552 0x5d, 0x85, 0x84, 0x8d, 0x82, 0x85, 0x76, 0x61,
3553 0x80, 0x89, 0x90, 0x86, 0x85, 0x78, 0x61, 0x70,
3554 0x8f, 0x8e, 0x93, 0x84, 0x77, 0x94, 0x97, 0x65,
3555 0x50, 0x67, 0x60, 0x75, 0x7d, 0x80, 0x9d, 0x8a,
3556 0x8b, 0x74, 0x60, 0x66, 0x69, 0x55, 0x58, 0x7a,
3557 0x76, 0x7d, 0x60, 0x42, 0x2b, 0x3c, 0x0c, 0x18,
3558 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3559 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3560 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3561 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3562 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3563 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3564 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3565 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3566 0xec, 0xec, 0xeb, 0xeb, 0xea, 0xe9, 0xe9, 0xe8,
3567 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3568 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5, 0xe5,
3569 0xe0, 0xe4, 0xe4, 0xd7, 0xcf, 0xda, 0xd9, 0xc4,
3570 0xad, 0xb2, 0xd4, 0xd9, 0xd4, 0xe1, 0xe4, 0xe9,
3571 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3572 0xe4, 0xe4, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3573 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3574 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3575 0xe4, 0xe1, 0xdf, 0xde, 0xdb, 0xd8, 0xd7, 0xd8,
3576 0xc5, 0xc3, 0xc4, 0xa8, 0xb4, 0xa3, 0xa0, 0xb3,
3577 0xd5, 0xdb, 0xdc, 0xd5, 0xd3, 0xd8, 0xdd, 0xdd,
3578 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3579 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3580 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
3581 0xd4, 0xd5, 0xd7, 0xd8, 0xd9, 0xd7, 0xd6, 0xd5,
3582 0xd4, 0xce, 0xdb, 0xcf, 0xc2, 0xbf, 0xa4, 0x91,
3583 0xba, 0xcb, 0xd0, 0xf5, 0xfd, 0xc7, 0xc4, 0xd6,
3584 0xa1, 0xbd, 0xb9, 0xa7, 0x7e, 0x59, 0x6a, 0x82,
3585 0x84, 0x75, 0x75, 0x84, 0x82, 0x6b, 0x5c, 0x5f,
3586 0x6e, 0x76, 0x75, 0x68, 0x60, 0x65, 0x6e, 0x73,
3587 0x8f, 0x92, 0x92, 0x8b, 0x7d, 0x70, 0x66, 0x63,
3588 0x7a, 0x7e, 0x80, 0x7d, 0x76, 0x73, 0x75, 0x79,
3589 0x5a, 0x63, 0x59, 0x47, 0x3c, 0x2e, 0x2a, 0x38,
3590 0x67, 0x78, 0x6a, 0x68, 0x75, 0x53, 0x3d, 0x63,
3591 0x59, 0x5e, 0x58, 0x53, 0x56, 0x57, 0x6b, 0x8f,
3592 0x71, 0x69, 0x6b, 0x79, 0x82, 0x7e, 0x78, 0x78,
3593 0x72, 0x71, 0x6b, 0x6a, 0x7a, 0x8e, 0x8f, 0x83,
3594 0x75, 0x6d, 0x6a, 0x7d, 0x88, 0x8d, 0x8d, 0x76,
3595 0x5b, 0x7d, 0xe7, 0xc3, 0x59, 0x60, 0x7b, 0x80,
3596 0x8b, 0x78, 0x5f, 0x80, 0x63, 0x6f, 0x8c, 0x90,
3597 0x78, 0x81, 0x81, 0x66, 0x74, 0x90, 0x89, 0x99,
3598 0x78, 0x8b, 0x75, 0x69, 0x77, 0x61, 0x52, 0x76,
3599 0x7a, 0x92, 0x91, 0x7b, 0x7a, 0x7d, 0x6b, 0x5e,
3600 0x53, 0x60, 0x7d, 0x8a, 0x79, 0x62, 0x45, 0x22,
3601 0x20, 0x2d, 0x5c, 0xd8, 0xff, 0xbf, 0x19, 0x18,
3602 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3603 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3604 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3605 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3606 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3607 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3608 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3609 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3610 0xed, 0xed, 0xec, 0xeb, 0xeb, 0xea, 0xe9, 0xe9,
3611 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3612 0xeb, 0xeb, 0xea, 0xea, 0xe9, 0xe8, 0xe8, 0xe7,
3613 0xe9, 0xe0, 0xe4, 0xe7, 0xd7, 0xce, 0xd5, 0xdd,
3614 0xb3, 0xae, 0xd1, 0xda, 0xd6, 0xe3, 0xe5, 0xee,
3615 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3616 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe3,
3617 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3618 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3619 0xe1, 0xe6, 0xe3, 0xda, 0xd7, 0xdc, 0xdb, 0xd5,
3620 0xc7, 0xc4, 0xc0, 0xb2, 0xbb, 0xb4, 0x86, 0x97,
3621 0xd8, 0xdc, 0xdb, 0xd2, 0xd0, 0xd8, 0xdf, 0xe0,
3622 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3623 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3624 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3625 0xd4, 0xd5, 0xd7, 0xd9, 0xd9, 0xd8, 0xd7, 0xd6,
3626 0xd4, 0xd3, 0xd7, 0xdd, 0xc9, 0xca, 0xdb, 0xbb,
3627 0x73, 0x4f, 0x43, 0x3f, 0x5e, 0x8d, 0x7a, 0xc5,
3628 0xa6, 0xe3, 0xf0, 0xc5, 0x85, 0x69, 0x79, 0x77,
3629 0x6c, 0x5c, 0x5f, 0x73, 0x76, 0x63, 0x5a, 0x62,
3630 0x6b, 0x7c, 0x84, 0x78, 0x6a, 0x6d, 0x7b, 0x85,
3631 0x93, 0x7f, 0x6b, 0x68, 0x6f, 0x70, 0x61, 0x51,
3632 0x60, 0x56, 0x4e, 0x50, 0x59, 0x5c, 0x54, 0x4a,
3633 0x4e, 0x5c, 0x55, 0x47, 0x44, 0x3b, 0x3b, 0x4e,
3634 0x61, 0x82, 0x77, 0x6e, 0x82, 0x6b, 0x4d, 0x62,
3635 0x73, 0x59, 0x4a, 0x61, 0x76, 0x68, 0x68, 0x86,
3636 0x88, 0x86, 0x88, 0x88, 0x7d, 0x6e, 0x6c, 0x74,
3637 0x74, 0x6c, 0x6d, 0x78, 0x7c, 0x75, 0x74, 0x79,
3638 0x7c, 0x8d, 0x7e, 0x80, 0x79, 0x68, 0x74, 0x6f,
3639 0x67, 0x50, 0x98, 0xda, 0xa0, 0x6d, 0x7b, 0x73,
3640 0x79, 0x82, 0x5d, 0x87, 0x8a, 0x84, 0x72, 0x71,
3641 0x71, 0x67, 0x92, 0x9c, 0x8c, 0x88, 0x78, 0x7c,
3642 0x63, 0x92, 0x83, 0x84, 0xb4, 0x91, 0x5e, 0x7f,
3643 0x78, 0x60, 0x58, 0x64, 0x6f, 0x70, 0x77, 0x8c,
3644 0x6f, 0x5a, 0x3f, 0x13, 0x09, 0x54, 0x97, 0x8f,
3645 0xbc, 0xff, 0xff, 0xe9, 0xf9, 0xd5, 0x2a, 0x00,
3646 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3647 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3648 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3649 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3650 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3651 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3652 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3653 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3654 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3655 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3656 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3657 0xed, 0xea, 0xe6, 0xe0, 0xdb, 0xda, 0xdc, 0xdf,
3658 0xc6, 0xac, 0xbb, 0xc2, 0xdb, 0xe8, 0xe9, 0xe6,
3659 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe5, 0xe5, 0xe4,
3660 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3661 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3662 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3663 0xe4, 0xe3, 0xe2, 0xe0, 0xde, 0xdd, 0xdd, 0xde,
3664 0xcf, 0xc6, 0xd4, 0xa2, 0xc3, 0xc1, 0x94, 0xa3,
3665 0xcf, 0xde, 0xce, 0xcf, 0xcc, 0xd7, 0xde, 0xe3,
3666 0xd8, 0xd9, 0xdb, 0xdc, 0xdb, 0xda, 0xd8, 0xd7,
3667 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3668 0xdd, 0xdd, 0xdc, 0xdc, 0xdb, 0xdb, 0xda, 0xda,
3669 0xd9, 0xd9, 0xd8, 0xd7, 0xd6, 0xd5, 0xd5, 0xd5,
3670 0xe6, 0xd1, 0xce, 0xce, 0xd3, 0xdc, 0xad, 0x63,
3671 0x6d, 0x72, 0x48, 0x4d, 0x2a, 0x2e, 0x48, 0x51,
3672 0x3e, 0x6d, 0x8e, 0x83, 0x6b, 0x67, 0x6f, 0x72,
3673 0x73, 0x6b, 0x70, 0x7b, 0x74, 0x5f, 0x5a, 0x66,
3674 0x6b, 0x79, 0x7c, 0x6d, 0x60, 0x5e, 0x5c, 0x57,
3675 0x4a, 0x4a, 0x53, 0x65, 0x70, 0x6c, 0x66, 0x65,
3676 0x6a, 0x69, 0x64, 0x5d, 0x5b, 0x5b, 0x52, 0x46,
3677 0x4f, 0x50, 0x4c, 0x48, 0x41, 0x37, 0x47, 0x69,
3678 0x7b, 0x77, 0x6e, 0x70, 0x73, 0x60, 0x56, 0x66,
3679 0x68, 0x49, 0x69, 0x51, 0x57, 0x78, 0x85, 0x86,
3680 0x7f, 0x7d, 0x75, 0x6f, 0x74, 0x7e, 0x7e, 0x77,
3681 0x82, 0x62, 0x5c, 0x5d, 0x75, 0x8a, 0x7e, 0x82,
3682 0x7a, 0x70, 0x61, 0x5b, 0x69, 0x7e, 0x82, 0x7a,
3683 0x6c, 0x5c, 0x62, 0xaf, 0xcf, 0xa0, 0x83, 0x77,
3684 0x81, 0x90, 0x7c, 0x53, 0x74, 0x88, 0x69, 0x80,
3685 0x7d, 0x96, 0x84, 0x65, 0x6c, 0x7b, 0x80, 0x8a,
3686 0xa4, 0x6f, 0x6b, 0x96, 0x76, 0x55, 0x6a, 0x51,
3687 0x87, 0x7d, 0x7f, 0x8a, 0x79, 0x49, 0x1f, 0x0f,
3688 0x39, 0x7a, 0xce, 0xff, 0xff, 0xff, 0xfa, 0xfe,
3689 0xd3, 0xcc, 0xbf, 0x97, 0x5d, 0x64, 0x2e, 0x00,
3690 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3691 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3692 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3693 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3694 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3695 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3696 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3697 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3698 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3699 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3700 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3701 0xea, 0xe8, 0xe6, 0xe3, 0xdf, 0xdb, 0xd6, 0xd3,
3702 0xd6, 0xbe, 0xbf, 0xc6, 0xe6, 0xec, 0xe8, 0xe1,
3703 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5, 0xe5,
3704 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3705 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3706 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3707 0xe1, 0xe4, 0xe6, 0xe2, 0xdd, 0xda, 0xdd, 0xe1,
3708 0xd3, 0xc1, 0xcc, 0xc2, 0xc4, 0xad, 0x82, 0xa0,
3709 0xcf, 0xd2, 0xce, 0xd9, 0xca, 0xd0, 0xdd, 0xdf,
3710 0xd9, 0xda, 0xdc, 0xdd, 0xdd, 0xdc, 0xda, 0xd9,
3711 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3712 0xdd, 0xdd, 0xdd, 0xdc, 0xdb, 0xdb, 0xda, 0xda,
3713 0xd9, 0xd9, 0xd8, 0xd8, 0xd7, 0xd6, 0xd6, 0xd5,
3714 0xd9, 0xd0, 0xda, 0xcc, 0xe8, 0xd6, 0x6a, 0x4f,
3715 0x8c, 0x67, 0x49, 0x5f, 0x58, 0x67, 0x6c, 0x7d,
3716 0x44, 0x3e, 0x36, 0x3a, 0x4d, 0x61, 0x67, 0x62,
3717 0x53, 0x5a, 0x67, 0x72, 0x71, 0x69, 0x65, 0x67,
3718 0x78, 0x82, 0x81, 0x72, 0x66, 0x67, 0x6b, 0x6b,
3719 0x79, 0x6d, 0x65, 0x67, 0x6b, 0x6c, 0x6f, 0x75,
3720 0x63, 0x65, 0x63, 0x5f, 0x61, 0x65, 0x5f, 0x55,
3721 0x48, 0x46, 0x41, 0x43, 0x43, 0x39, 0x40, 0x5a,
3722 0x75, 0x6e, 0x6a, 0x6e, 0x69, 0x59, 0x59, 0x69,
3723 0x4e, 0x59, 0x66, 0x3c, 0x54, 0x75, 0x70, 0x61,
3724 0x6c, 0x7a, 0x84, 0x83, 0x80, 0x81, 0x80, 0x7d,
3725 0x7c, 0x78, 0x70, 0x87, 0x85, 0x6a, 0x71, 0x74,
3726 0x70, 0x87, 0x93, 0x81, 0x68, 0x60, 0x68, 0x71,
3727 0x6b, 0x71, 0x67, 0x73, 0xd7, 0xd8, 0x6c, 0x70,
3728 0x82, 0x68, 0x75, 0x79, 0x7c, 0x87, 0x87, 0x9b,
3729 0x65, 0x79, 0x87, 0x7c, 0x7b, 0x94, 0x8f, 0x65,
3730 0x6e, 0x94, 0x76, 0x40, 0x5d, 0x8c, 0x91, 0x97,
3731 0x75, 0x49, 0x15, 0x10, 0x56, 0xbb, 0xfa, 0xff,
3732 0xff, 0xfc, 0xf8, 0xf6, 0xe9, 0xc2, 0x8b, 0x61,
3733 0x51, 0x2f, 0x2d, 0x49, 0x3f, 0x3e, 0x16, 0x13,
3734 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3735 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3736 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3737 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3738 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3739 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3740 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3741 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3742 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3743 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3744 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3745 0xe8, 0xe6, 0xe5, 0xe6, 0xe5, 0xde, 0xd2, 0xc8,
3746 0xd7, 0xbc, 0xad, 0xc7, 0xf1, 0xe0, 0xe0, 0xee,
3747 0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6,
3748 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3749 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3750 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3751 0xe0, 0xe5, 0xe9, 0xe5, 0xdd, 0xda, 0xdd, 0xe3,
3752 0xd9, 0xc5, 0xb9, 0xcc, 0xb5, 0xae, 0x86, 0x8d,
3753 0xdd, 0xd0, 0xce, 0xe2, 0xca, 0xce, 0xdc, 0xd7,
3754 0xdb, 0xdc, 0xdd, 0xdf, 0xdf, 0xde, 0xdc, 0xdb,
3755 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3756 0xde, 0xdd, 0xdd, 0xdc, 0xdc, 0xdb, 0xdb, 0xdb,
3757 0xd9, 0xd9, 0xd9, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7,
3758 0xdd, 0xdb, 0xdb, 0xef, 0xa6, 0x63, 0x82, 0x6f,
3759 0x84, 0x5f, 0x7c, 0xa8, 0x99, 0x7d, 0x49, 0x50,
3760 0x61, 0x49, 0x3d, 0x52, 0x73, 0x82, 0x77, 0x67,
3761 0x61, 0x6e, 0x7a, 0x7b, 0x76, 0x6f, 0x66, 0x5e,
3762 0x74, 0x79, 0x76, 0x68, 0x5e, 0x62, 0x6c, 0x71,
3763 0x76, 0x6a, 0x62, 0x61, 0x5c, 0x51, 0x49, 0x48,
3764 0x5e, 0x61, 0x60, 0x5e, 0x60, 0x64, 0x60, 0x57,
3765 0x4b, 0x4a, 0x45, 0x44, 0x44, 0x3f, 0x4e, 0x6f,
3766 0x77, 0x7c, 0x7d, 0x84, 0x81, 0x62, 0x4e, 0x5b,
3767 0x55, 0x5e, 0x4b, 0x33, 0x69, 0x7a, 0x7d, 0x8e,
3768 0x72, 0x7a, 0x7b, 0x75, 0x74, 0x7e, 0x89, 0x8e,
3769 0x68, 0x73, 0x60, 0x5f, 0x71, 0x88, 0x9a, 0x85,
3770 0x85, 0x7a, 0x68, 0x61, 0x6f, 0x85, 0x8b, 0x83,
3771 0x77, 0x68, 0x6d, 0x63, 0xa5, 0xe7, 0xab, 0x7c,
3772 0x64, 0x82, 0x85, 0x6f, 0x7c, 0x7e, 0x6d, 0x85,
3773 0x96, 0x77, 0x7c, 0x8d, 0x77, 0x65, 0x79, 0x91,
3774 0x9e, 0x8b, 0x82, 0x63, 0x58, 0x41, 0x10, 0x18,
3775 0x90, 0xd0, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf9,
3776 0xe0, 0xb2, 0x71, 0x41, 0x33, 0x40, 0x57, 0x67,
3777 0x4c, 0x3d, 0x34, 0x50, 0x69, 0x71, 0x21, 0x00,
3778 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3779 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3780 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3781 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3782 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3783 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3784 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3785 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3786 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3787 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3788 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3789 0xea, 0xe6, 0xe4, 0xe7, 0xe9, 0xe4, 0xd6, 0xcb,
3790 0xd0, 0xd1, 0xb4, 0xb2, 0xde, 0xdd, 0xe3, 0xe5,
3791 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7,
3792 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3793 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3794 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3795 0xe2, 0xe5, 0xe7, 0xe6, 0xe1, 0xde, 0xdf, 0xe0,
3796 0xda, 0xbf, 0xa4, 0xcf, 0x94, 0x8a, 0x7c, 0x8b,
3797 0xc7, 0xbf, 0xc3, 0xde, 0xd2, 0xda, 0xe1, 0xd4,
3798 0xdc, 0xdd, 0xdf, 0xe0, 0xe1, 0xe0, 0xdf, 0xde,
3799 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3800 0xde, 0xde, 0xde, 0xdd, 0xdc, 0xdc, 0xdb, 0xdb,
3801 0xda, 0xda, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3802 0xda, 0xd1, 0xed, 0xd4, 0x6c, 0x54, 0x87, 0x87,
3803 0x9a, 0x5f, 0x67, 0x7d, 0x71, 0x6b, 0x69, 0x8a,
3804 0x9e, 0x90, 0x7d, 0x6f, 0x6b, 0x6d, 0x70, 0x71,
3805 0x6c, 0x72, 0x7a, 0x7a, 0x73, 0x68, 0x61, 0x5e,
3806 0x68, 0x6b, 0x6a, 0x61, 0x59, 0x5b, 0x66, 0x6f,
3807 0x6e, 0x6b, 0x70, 0x7c, 0x7f, 0x74, 0x67, 0x62,
3808 0x6d, 0x71, 0x6f, 0x69, 0x66, 0x66, 0x61, 0x59,
3809 0x4b, 0x4d, 0x4f, 0x54, 0x54, 0x48, 0x4d, 0x65,
3810 0x76, 0x9b, 0x89, 0x64, 0x6f, 0x79, 0x63, 0x52,
3811 0x57, 0x76, 0x59, 0x32, 0x65, 0x76, 0x70, 0x60,
3812 0x7d, 0x80, 0x80, 0x7d, 0x7d, 0x7a, 0x6c, 0x5c,
3813 0x7f, 0x7c, 0x87, 0x78, 0x72, 0x78, 0x69, 0x6d,
3814 0x71, 0x80, 0x87, 0x7e, 0x74, 0x73, 0x74, 0x73,
3815 0x7b, 0x67, 0x6a, 0x77, 0x66, 0xa8, 0xf3, 0xaf,
3816 0x6a, 0x63, 0x6b, 0x6b, 0x72, 0x90, 0x8c, 0x67,
3817 0x68, 0x69, 0x60, 0x6a, 0x91, 0xa3, 0x7c, 0x4c,
3818 0x31, 0x30, 0x1b, 0x27, 0x94, 0xee, 0xf5, 0xff,
3819 0xf5, 0xff, 0xff, 0xff, 0xd7, 0x91, 0x57, 0x3c,
3820 0x31, 0x29, 0x25, 0x2e, 0x41, 0x50, 0x54, 0x51,
3821 0x3f, 0x64, 0x5e, 0x48, 0x48, 0x5e, 0x22, 0x06,
3822 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3823 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3824 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3825 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3826 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3827 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3828 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3829 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3830 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3831 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3832 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3833 0xed, 0xe8, 0xe4, 0xe6, 0xea, 0xe8, 0xdf, 0xd7,
3834 0xd7, 0xd7, 0xaf, 0xa5, 0xda, 0xe3, 0xeb, 0xeb,
3835 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3836 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3837 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3838 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3839 0xe7, 0xe5, 0xe4, 0xe5, 0xe7, 0xe6, 0xe0, 0xdc,
3840 0xde, 0xd5, 0xae, 0xc5, 0x97, 0xbe, 0xba, 0x8e,
3841 0xbb, 0xc0, 0xbc, 0xc9, 0xc0, 0xd1, 0xe0, 0xdd,
3842 0xdb, 0xdd, 0xdf, 0xe1, 0xe1, 0xe1, 0xe0, 0xdf,
3843 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3844 0xdf, 0xdf, 0xde, 0xde, 0xdd, 0xdc, 0xdc, 0xdc,
3845 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3846 0xd2, 0xe9, 0xa8, 0x65, 0x74, 0x88, 0x79, 0x69,
3847 0x77, 0x51, 0x69, 0x8f, 0x90, 0x7f, 0x76, 0x6a,
3848 0x74, 0x7b, 0x71, 0x58, 0x53, 0x6d, 0x8f, 0xa0,
3849 0x87, 0x7f, 0x7e, 0x82, 0x78, 0x66, 0x62, 0x6c,
3850 0x68, 0x6b, 0x6e, 0x6b, 0x64, 0x62, 0x6a, 0x75,
3851 0x75, 0x6c, 0x68, 0x6d, 0x6d, 0x66, 0x60, 0x60,
3852 0x6b, 0x70, 0x6e, 0x66, 0x5f, 0x5d, 0x59, 0x51,
3853 0x53, 0x4c, 0x44, 0x44, 0x45, 0x3a, 0x3c, 0x51,
3854 0x7c, 0x5d, 0x53, 0x66, 0x6c, 0x5b, 0x55, 0x5f,
3855 0x51, 0x60, 0x4e, 0x35, 0x64, 0x83, 0x92, 0x80,
3856 0x6e, 0x70, 0x6f, 0x6e, 0x77, 0x82, 0x82, 0x7a,
3857 0x8c, 0x73, 0x69, 0x59, 0x69, 0x89, 0x89, 0x90,
3858 0x82, 0x75, 0x63, 0x5c, 0x6b, 0x82, 0x88, 0x81,
3859 0x7a, 0x93, 0x6c, 0x73, 0x61, 0x5c, 0xb7, 0xc7,
3860 0x8e, 0x69, 0x67, 0x7e, 0x72, 0x66, 0x83, 0x9c,
3861 0x73, 0x79, 0x92, 0x9c, 0x6f, 0x34, 0x36, 0x60,
3862 0xb6, 0xe3, 0xfc, 0xfe, 0xf1, 0xfb, 0xff, 0xe6,
3863 0xaf, 0x73, 0x43, 0x3b, 0x34, 0x1f, 0x1a, 0x28,
3864 0x31, 0x30, 0x31, 0x36, 0x41, 0x4f, 0x5c, 0x63,
3865 0x47, 0x3f, 0x27, 0x31, 0x4c, 0x5c, 0x17, 0x02,
3866 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3867 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3868 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3869 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3870 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3871 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3872 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3873 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3874 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3875 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3876 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3877 0xef, 0xea, 0xe6, 0xe6, 0xe8, 0xe8, 0xe4, 0xe0,
3878 0xdf, 0xc6, 0x9f, 0xa1, 0xdc, 0xe2, 0xe6, 0xf1,
3879 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xea, 0xea, 0xea,
3880 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3881 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3882 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3883 0xe9, 0xe5, 0xe3, 0xe6, 0xeb, 0xea, 0xe2, 0xd9,
3884 0xcc, 0xc9, 0xba, 0xcd, 0x9e, 0xb0, 0xc1, 0x9c,
3885 0xbc, 0xcb, 0xc8, 0xcb, 0xba, 0xca, 0xe0, 0xe4,
3886 0xda, 0xdc, 0xde, 0xe0, 0xe1, 0xe1, 0xe0, 0xe0,
3887 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3888 0xdf, 0xdf, 0xdf, 0xde, 0xde, 0xdd, 0xdd, 0xdc,
3889 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdd, 0xdd, 0xdd,
3890 0xec, 0xd7, 0x73, 0x5d, 0x7a, 0x85, 0x96, 0x75,
3891 0x8a, 0x60, 0x6c, 0x76, 0x72, 0x6e, 0x82, 0x78,
3892 0x79, 0x83, 0x7f, 0x70, 0x76, 0x92, 0xa2, 0x9f,
3893 0x80, 0x72, 0x6f, 0x74, 0x69, 0x55, 0x54, 0x64,
3894 0x6b, 0x6b, 0x6e, 0x6e, 0x68, 0x62, 0x6a, 0x77,
3895 0x6d, 0x63, 0x5e, 0x64, 0x67, 0x65, 0x65, 0x68,
3896 0x6b, 0x72, 0x73, 0x6c, 0x66, 0x65, 0x63, 0x5e,
3897 0x5f, 0x5e, 0x55, 0x4a, 0x3e, 0x38, 0x53, 0x7e,
3898 0x80, 0x68, 0x74, 0x78, 0x64, 0x74, 0x7b, 0x50,
3899 0x5a, 0x50, 0x5d, 0x5f, 0x76, 0x70, 0x69, 0x5b,
3900 0x83, 0x8a, 0x88, 0x7b, 0x71, 0x70, 0x71, 0x70,
3901 0x54, 0x82, 0x8b, 0x83, 0x6d, 0x63, 0x70, 0x64,
3902 0x5d, 0x74, 0x88, 0x8a, 0x82, 0x79, 0x6b, 0x5e,
3903 0x61, 0x80, 0x60, 0x64, 0x7f, 0x5b, 0x6c, 0xc1,
3904 0xe5, 0xa9, 0x52, 0x55, 0x7d, 0x6c, 0x64, 0x7c,
3905 0x86, 0x70, 0x73, 0x72, 0x7d, 0xca, 0xff, 0xf4,
3906 0xff, 0xfd, 0xff, 0xe6, 0x89, 0x76, 0x8c, 0x39,
3907 0x17, 0x11, 0x18, 0x28, 0x2a, 0x24, 0x33, 0x4d,
3908 0x58, 0x64, 0x70, 0x6e, 0x5f, 0x4d, 0x43, 0x40,
3909 0x5a, 0x52, 0x4d, 0x60, 0x62, 0x5e, 0x1e, 0x10,
3910 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3911 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3912 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3913 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3914 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3915 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3916 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3917 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3918 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3919 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3920 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3921 0xed, 0xeb, 0xe9, 0xe7, 0xe5, 0xe4, 0xe1, 0xe0,
3922 0xd8, 0xd2, 0xb9, 0x9d, 0xc8, 0xe5, 0xe3, 0xdc,
3923 0xe7, 0xe8, 0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xeb,
3924 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3925 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3926 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3927 0xe8, 0xe6, 0xe6, 0xe9, 0xec, 0xe9, 0xe2, 0xdb,
3928 0xcf, 0xce, 0xcd, 0xc1, 0xa0, 0xa7, 0xba, 0x7e,
3929 0xa9, 0xb3, 0xc4, 0xde, 0xcd, 0xd9, 0xe8, 0xdf,
3930 0xd8, 0xda, 0xdc, 0xdf, 0xe0, 0xe0, 0xe0, 0xdf,
3931 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3932 0xe0, 0xe0, 0xdf, 0xdf, 0xde, 0xdd, 0xdd, 0xdd,
3933 0xdb, 0xdb, 0xdc, 0xdc, 0xdd, 0xde, 0xde, 0xdf,
3934 0xb7, 0x5c, 0x77, 0x7f, 0x63, 0x71, 0x6e, 0x77,
3935 0x84, 0x4b, 0x6c, 0x6a, 0x6c, 0x79, 0x8f, 0x94,
3936 0x7e, 0x7a, 0x6d, 0x60, 0x64, 0x72, 0x77, 0x71,
3937 0x6e, 0x6b, 0x6e, 0x74, 0x70, 0x67, 0x69, 0x73,
3938 0x6e, 0x69, 0x67, 0x66, 0x5e, 0x59, 0x65, 0x77,
3939 0x7c, 0x73, 0x71, 0x75, 0x73, 0x68, 0x5e, 0x5b,
3940 0x62, 0x6b, 0x6e, 0x66, 0x60, 0x60, 0x60, 0x5d,
3941 0x49, 0x53, 0x57, 0x52, 0x43, 0x35, 0x48, 0x70,
3942 0x89, 0x6d, 0x73, 0x77, 0x5a, 0x56, 0x63, 0x58,
3943 0x54, 0x50, 0x66, 0x51, 0x6a, 0x83, 0x84, 0x7f,
3944 0x74, 0x78, 0x73, 0x69, 0x69, 0x79, 0x8c, 0x95,
3945 0x80, 0x78, 0x65, 0x6d, 0x63, 0x52, 0x72, 0x8a,
3946 0x8a, 0x8b, 0x7e, 0x66, 0x5b, 0x68, 0x7d, 0x8a,
3947 0x85, 0x71, 0x70, 0x76, 0x87, 0x69, 0x41, 0x6f,
3948 0xd7, 0xcb, 0x8d, 0x5f, 0x56, 0x6f, 0x87, 0x67,
3949 0x7d, 0x87, 0x9b, 0x85, 0x71, 0xb2, 0xdf, 0xb4,
3950 0x69, 0x39, 0x10, 0x1c, 0x1b, 0x01, 0x39, 0xa4,
3951 0x58, 0x3e, 0x30, 0x42, 0x5c, 0x68, 0x6a, 0x6c,
3952 0x6f, 0x63, 0x57, 0x58, 0x62, 0x67, 0x61, 0x59,
3953 0x61, 0x51, 0x49, 0x50, 0x50, 0x6a, 0x31, 0x03,
3954 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3955 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3956 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3957 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3958 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3959 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3960 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3961 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3962 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3963 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3964 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3965 0xeb, 0xec, 0xeb, 0xe8, 0xe3, 0xdf, 0xdc, 0xdb,
3966 0xd0, 0xd6, 0xd2, 0xad, 0xc7, 0xe5, 0xe8, 0xe6,
3967 0xe7, 0xe8, 0xe8, 0xe9, 0xea, 0xeb, 0xeb, 0xec,
3968 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3969 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3970 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3971 0xe5, 0xe7, 0xea, 0xeb, 0xeb, 0xe7, 0xe2, 0xde,
3972 0xd4, 0xcc, 0xdf, 0xd1, 0xb4, 0xa0, 0xc2, 0xa0,
3973 0xb3, 0x9f, 0xab, 0xd1, 0xc2, 0xd5, 0xeb, 0xd9,
3974 0xd7, 0xd9, 0xdb, 0xde, 0xdf, 0xe0, 0xdf, 0xdf,
3975 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3976 0xe0, 0xe0, 0xdf, 0xdf, 0xde, 0xde, 0xdd, 0xdd,
3977 0xdb, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xdf, 0xdf,
3978 0x70, 0x5c, 0x68, 0x85, 0x8f, 0x7f, 0x70, 0x78,
3979 0xab, 0x55, 0x84, 0x80, 0x8a, 0x8f, 0x73, 0x65,
3980 0x77, 0x74, 0x70, 0x6a, 0x64, 0x63, 0x6c, 0x76,
3981 0x6d, 0x75, 0x79, 0x76, 0x6f, 0x6a, 0x66, 0x63,
3982 0x76, 0x6d, 0x66, 0x62, 0x5a, 0x56, 0x66, 0x7c,
3983 0x71, 0x68, 0x65, 0x6a, 0x6a, 0x61, 0x59, 0x58,
3984 0x66, 0x6f, 0x72, 0x69, 0x61, 0x60, 0x5f, 0x5c,
3985 0x69, 0x5d, 0x50, 0x50, 0x53, 0x45, 0x3f, 0x4c,
3986 0x72, 0x77, 0x7c, 0x84, 0x7b, 0x59, 0x4f, 0x6b,
3987 0x60, 0x45, 0x58, 0x48, 0x5f, 0x66, 0x61, 0x81,
3988 0x74, 0x7b, 0x7e, 0x7e, 0x7e, 0x7a, 0x69, 0x56,
3989 0x6d, 0x73, 0x92, 0x94, 0x8a, 0x7f, 0x69, 0x71,
3990 0x6e, 0x75, 0x7b, 0x80, 0x89, 0x8e, 0x81, 0x6f,
3991 0x7c, 0x55, 0x66, 0x7f, 0x92, 0x8b, 0x62, 0x61,
3992 0xa2, 0xfd, 0xcd, 0x74, 0x67, 0x7a, 0x8b, 0x82,
3993 0x87, 0x70, 0x73, 0x80, 0x77, 0x6d, 0x69, 0x60,
3994 0x60, 0x55, 0x4a, 0x32, 0x37, 0x39, 0x3b, 0x77,
3995 0x74, 0x67, 0x6b, 0x7c, 0x7b, 0x65, 0x59, 0x5e,
3996 0x78, 0x8b, 0x9d, 0x9c, 0x84, 0x66, 0x51, 0x48,
3997 0x38, 0x3f, 0x5e, 0x6e, 0x4f, 0x55, 0x28, 0x04,
3998 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
3999 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4000 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4001 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4002 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4003 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4004 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4005 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4006 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4007 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4008 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4009 0xe9, 0xe9, 0xea, 0xea, 0xe9, 0xe6, 0xe4, 0xe2,
4010 0xe4, 0xdd, 0xda, 0x9a, 0xa0, 0xc9, 0xec, 0xe3,
4011 0xe2, 0xe5, 0xe8, 0xeb, 0xed, 0xec, 0xeb, 0xea,
4012 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4013 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4014 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4015 0xed, 0xe7, 0xe9, 0xec, 0xe7, 0xe4, 0xe2, 0xdc,
4016 0xe3, 0xa5, 0xb2, 0xb9, 0x8a, 0x83, 0xb6, 0xa5,
4017 0xbf, 0xa8, 0xad, 0xb6, 0xbd, 0xdc, 0xe0, 0xdb,
4018 0xd7, 0xe2, 0xe2, 0xe3, 0xed, 0xe8, 0xdf, 0xe4,
4019 0xdc, 0xdd, 0xe0, 0xe2, 0xe2, 0xe2, 0xe1, 0xe1,
4020 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
4021 0xdf, 0xe1, 0xd8, 0xdf, 0xe1, 0xea, 0xc3, 0x41,
4022 0x46, 0x79, 0x8d, 0x7c, 0x71, 0x94, 0x8d, 0x95,
4023 0x88, 0x57, 0x82, 0x8d, 0x6c, 0x7a, 0x71, 0x4c,
4024 0x6d, 0x6c, 0x6a, 0x66, 0x67, 0x70, 0x7d, 0x86,
4025 0x68, 0x6f, 0x74, 0x6e, 0x65, 0x62, 0x69, 0x72,
4026 0x7a, 0x6f, 0x67, 0x6d, 0x7e, 0x89, 0x89, 0x84,
4027 0x7a, 0x72, 0x71, 0x77, 0x77, 0x69, 0x5b, 0x54,
4028 0x64, 0x68, 0x6a, 0x68, 0x65, 0x5f, 0x54, 0x4a,
4029 0x53, 0x56, 0x56, 0x4b, 0x3b, 0x3b, 0x58, 0x78,
4030 0x83, 0x79, 0x69, 0x6e, 0x7a, 0x67, 0x55, 0x5f,
4031 0x5c, 0x58, 0x64, 0x50, 0x59, 0x7f, 0x7f, 0x8a,
4032 0x6f, 0x6c, 0x75, 0x75, 0x70, 0x82, 0x8d, 0x7a,
4033 0x93, 0x7c, 0x7a, 0x68, 0x6a, 0x7a, 0x72, 0x7d,
4034 0x82, 0x7c, 0x77, 0x65, 0x68, 0x63, 0x82, 0x7f,
4035 0x69, 0x65, 0x81, 0x4b, 0x31, 0x10, 0x16, 0x2f,
4036 0x47, 0xa0, 0xef, 0xac, 0x5a, 0x65, 0x6d, 0x67,
4037 0x8d, 0x8a, 0x8c, 0x7b, 0x7e, 0x7e, 0x6e, 0x90,
4038 0x84, 0x8e, 0x9c, 0x88, 0x6e, 0x67, 0x5a, 0x4f,
4039 0x59, 0x63, 0x5a, 0x49, 0x76, 0xa5, 0xaa, 0x8d,
4040 0x65, 0x3b, 0x23, 0x33, 0x43, 0x3d, 0x36, 0x3b,
4041 0x4e, 0x4f, 0x4e, 0x3e, 0x47, 0x45, 0x1a, 0x0b,
4042 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4043 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4044 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4045 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4046 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4047 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4048 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4049 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4050 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4051 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4052 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4053 0xe9, 0xea, 0xea, 0xea, 0xe9, 0xe7, 0xe4, 0xe3,
4054 0xda, 0xdc, 0xd3, 0x80, 0x8f, 0xd1, 0xdd, 0xed,
4055 0xe3, 0xe5, 0xe8, 0xeb, 0xec, 0xec, 0xeb, 0xea,
4056 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4057 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4058 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4059 0xec, 0xe7, 0xe9, 0xeb, 0xe7, 0xe7, 0xe1, 0xd5,
4060 0xea, 0xcc, 0xc0, 0xc7, 0x96, 0x8f, 0xdb, 0xa7,
4061 0xc0, 0xc1, 0x96, 0xa9, 0xda, 0xda, 0xe7, 0xe3,
4062 0xdf, 0xe1, 0xde, 0xdb, 0xde, 0xde, 0xdc, 0xe0,
4063 0xdf, 0xe0, 0xe1, 0xe3, 0xe3, 0xe3, 0xe1, 0xe0,
4064 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
4065 0xd8, 0xdc, 0xd4, 0xd9, 0xf3, 0xcc, 0x78, 0x64,
4066 0x7d, 0x91, 0x91, 0x85, 0x77, 0x85, 0x73, 0x7f,
4067 0x71, 0x49, 0x68, 0x85, 0x8f, 0x97, 0x88, 0x8f,
4068 0x85, 0x7b, 0x6b, 0x60, 0x66, 0x74, 0x78, 0x73,
4069 0x78, 0x79, 0x78, 0x74, 0x6f, 0x6d, 0x6e, 0x70,
4070 0x5f, 0x64, 0x6d, 0x76, 0x79, 0x73, 0x65, 0x59,
4071 0x76, 0x73, 0x75, 0x77, 0x6f, 0x5e, 0x53, 0x53,
4072 0x5a, 0x59, 0x57, 0x53, 0x4d, 0x4a, 0x4f, 0x56,
4073 0x55, 0x4d, 0x47, 0x43, 0x40, 0x43, 0x52, 0x63,
4074 0x77, 0x80, 0x81, 0x7d, 0x70, 0x50, 0x40, 0x50,
4075 0x69, 0x58, 0x54, 0x37, 0x43, 0x70, 0x75, 0x80,
4076 0x7d, 0x7e, 0x84, 0x85, 0x7f, 0x7e, 0x79, 0x6c,
4077 0x72, 0x70, 0x81, 0x7b, 0x7c, 0x7f, 0x65, 0x5e,
4078 0x6b, 0x71, 0x8f, 0x70, 0x78, 0x6c, 0x4d, 0x4f,
4079 0x23, 0x4d, 0xa1, 0xb5, 0xf1, 0xff, 0xf4, 0xc2,
4080 0x88, 0x59, 0x9f, 0xd6, 0xa5, 0x78, 0x77, 0x8f,
4081 0x65, 0x7c, 0x7d, 0x65, 0x73, 0x8c, 0x87, 0x87,
4082 0x96, 0x83, 0x74, 0x6a, 0x6e, 0x79, 0x72, 0x66,
4083 0x69, 0x6e, 0x78, 0x91, 0x5c, 0x18, 0x1c, 0x3d,
4084 0x23, 0x2c, 0x45, 0x5d, 0x5a, 0x48, 0x46, 0x54,
4085 0x67, 0x5c, 0x52, 0x48, 0x5e, 0x5d, 0x22, 0x02,
4086 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4087 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4088 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4089 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4090 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4091 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4092 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4093 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4094 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4095 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4096 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4097 0xea, 0xea, 0xeb, 0xeb, 0xe9, 0xe7, 0xe5, 0xe3,
4098 0xe1, 0xc7, 0xd7, 0x94, 0x84, 0xe8, 0xe5, 0xd9,
4099 0xe5, 0xe6, 0xe8, 0xea, 0xeb, 0xeb, 0xeb, 0xea,
4100 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4101 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4102 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4103 0xea, 0xe8, 0xea, 0xe9, 0xe8, 0xeb, 0xe0, 0xca,
4104 0xe5, 0xd4, 0xbf, 0xdd, 0xb5, 0x7b, 0xbe, 0xae,
4105 0xaf, 0xb1, 0x81, 0x9c, 0xe5, 0xca, 0xd5, 0xd9,
4106 0xd9, 0xd7, 0xdb, 0xdd, 0xda, 0xd9, 0xda, 0xd5,
4107 0xe2, 0xe3, 0xe4, 0xe5, 0xe4, 0xe3, 0xe1, 0xe0,
4108 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
4109 0xe8, 0xd5, 0xcf, 0xfd, 0xc7, 0x59, 0x63, 0x90,
4110 0x8b, 0x79, 0x6c, 0x7d, 0x8b, 0x95, 0x72, 0x77,
4111 0x70, 0x77, 0x9c, 0x97, 0x89, 0x7e, 0x61, 0x6c,
4112 0x74, 0x80, 0x84, 0x7a, 0x6e, 0x6c, 0x6d, 0x6c,
4113 0x66, 0x64, 0x63, 0x65, 0x69, 0x6c, 0x6b, 0x69,
4114 0x5b, 0x63, 0x6c, 0x6f, 0x6a, 0x62, 0x5c, 0x59,
4115 0x66, 0x67, 0x6c, 0x6e, 0x64, 0x58, 0x57, 0x5f,
4116 0x63, 0x5b, 0x5e, 0x6c, 0x71, 0x64, 0x56, 0x52,
4117 0x58, 0x49, 0x3c, 0x3a, 0x3f, 0x4c, 0x62, 0x75,
4118 0x8b, 0x7d, 0x69, 0x67, 0x70, 0x66, 0x52, 0x4b,
4119 0x5a, 0x51, 0x5c, 0x4e, 0x61, 0x87, 0x7c, 0x7a,
4120 0x7f, 0x77, 0x6a, 0x69, 0x74, 0x78, 0x7b, 0x85,
4121 0x7a, 0x7c, 0x7f, 0x68, 0x61, 0x72, 0x7a, 0x85,
4122 0x7a, 0x7b, 0x57, 0x53, 0x60, 0x5f, 0xb4, 0xc7,
4123 0xdc, 0xfc, 0xf2, 0xd0, 0xfb, 0xe3, 0xc3, 0xeb,
4124 0xff, 0x89, 0x7e, 0xce, 0xdb, 0x88, 0x3c, 0x3b,
4125 0x57, 0x54, 0x5a, 0x84, 0x92, 0x70, 0x68, 0x7b,
4126 0x5c, 0x84, 0x97, 0x87, 0x75, 0x74, 0x74, 0x6d,
4127 0x94, 0xb2, 0xa7, 0xbe, 0x60, 0x2d, 0x4c, 0x5f,
4128 0x68, 0x60, 0x58, 0x51, 0x47, 0x3c, 0x36, 0x37,
4129 0x4f, 0x4b, 0x4b, 0x49, 0x61, 0x60, 0x24, 0x04,
4130 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4131 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4132 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4133 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4134 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4135 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4136 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4137 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4138 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4139 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4140 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4141 0xea, 0xeb, 0xeb, 0xeb, 0xea, 0xe8, 0xe5, 0xe4,
4142 0xef, 0xd8, 0xdd, 0xa7, 0x8b, 0xef, 0xe9, 0xe9,
4143 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xea, 0xea, 0xea,
4144 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4145 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4146 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4147 0xe9, 0xe9, 0xea, 0xe8, 0xe9, 0xee, 0xe0, 0xc4,
4148 0xe9, 0xe1, 0xbb, 0xc7, 0xbe, 0x78, 0x98, 0xb9,
4149 0x81, 0x8e, 0xa3, 0xa4, 0xda, 0xd7, 0xe1, 0xe6,
4150 0xca, 0xc6, 0xd3, 0xdd, 0xda, 0xe0, 0xe6, 0xdf,
4151 0xe4, 0xe5, 0xe6, 0xe6, 0xe5, 0xe4, 0xe2, 0xe0,
4152 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
4153 0xdf, 0xdd, 0xf6, 0xcb, 0x71, 0x64, 0x80, 0x7e,
4154 0x90, 0x87, 0x80, 0x87, 0x82, 0x86, 0x7a, 0x9b,
4155 0x7a, 0x6d, 0x7e, 0x6c, 0x67, 0x80, 0x78, 0x79,
4156 0x93, 0x81, 0x6d, 0x64, 0x66, 0x6e, 0x7b, 0x86,
4157 0x7c, 0x7c, 0x7c, 0x7a, 0x78, 0x74, 0x71, 0x6f,
4158 0x79, 0x79, 0x78, 0x74, 0x6e, 0x6b, 0x6b, 0x6d,
4159 0x7d, 0x76, 0x70, 0x6b, 0x61, 0x56, 0x58, 0x60,
4160 0x6b, 0x5f, 0x5a, 0x5a, 0x4f, 0x42, 0x4c, 0x62,
4161 0x4e, 0x4e, 0x4f, 0x4d, 0x45, 0x45, 0x58, 0x6e,
4162 0x83, 0x85, 0x81, 0x7a, 0x74, 0x67, 0x53, 0x46,
4163 0x52, 0x49, 0x51, 0x3b, 0x46, 0x6b, 0x65, 0x6a,
4164 0x74, 0x81, 0x83, 0x87, 0x89, 0x74, 0x6b, 0x80,
4165 0x66, 0x7b, 0x8a, 0x7f, 0x70, 0x64, 0x4d, 0x3a,
4166 0x31, 0x50, 0x9e, 0xa5, 0xed, 0xff, 0xdd, 0xe5,
4167 0xf4, 0xa7, 0x7b, 0x65, 0x40, 0x11, 0x12, 0x2c,
4168 0x5a, 0x70, 0x58, 0x5b, 0xab, 0xd3, 0xcd, 0xe8,
4169 0x9c, 0x8f, 0x59, 0x40, 0x39, 0x42, 0x72, 0x86,
4170 0x97, 0x94, 0x7a, 0x7e, 0x9a, 0xad, 0xb7, 0xb2,
4171 0xb9, 0xc2, 0xa7, 0xf4, 0x90, 0x45, 0x57, 0x5a,
4172 0x4c, 0x3f, 0x32, 0x33, 0x43, 0x4c, 0x42, 0x32,
4173 0x35, 0x49, 0x5e, 0x57, 0x59, 0x4c, 0x1c, 0x0d,
4174 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4175 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4176 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4177 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4178 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4179 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4180 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4181 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4182 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4183 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4184 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4185 0xeb, 0xeb, 0xec, 0xec, 0xea, 0xe8, 0xe6, 0xe4,
4186 0xe7, 0xd7, 0xe1, 0xcf, 0x9c, 0xe4, 0xef, 0xed,
4187 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xea, 0xeb,
4188 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4189 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4190 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4191 0xe9, 0xe9, 0xeb, 0xe8, 0xe9, 0xef, 0xe2, 0xc5,
4192 0xc1, 0xe4, 0xc1, 0xb0, 0xc0, 0x95, 0x95, 0xa3,
4193 0xab, 0xb3, 0xd4, 0xa7, 0xc2, 0xdf, 0xe2, 0xd1,
4194 0xda, 0xd1, 0xd6, 0xd9, 0xd4, 0xdc, 0xe7, 0xe3,
4195 0xe3, 0xe4, 0xe5, 0xe6, 0xe5, 0xe4, 0xe2, 0xe1,
4196 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
4197 0xdf, 0xff, 0xd6, 0x62, 0x4a, 0x8b, 0x9b, 0x86,
4198 0x71, 0x81, 0x8e, 0x96, 0x87, 0x80, 0x65, 0x79,
4199 0x63, 0x55, 0x74, 0x81, 0x89, 0x8c, 0x6f, 0x73,
4200 0x7f, 0x71, 0x72, 0x82, 0x84, 0x74, 0x6e, 0x75,
4201 0x63, 0x6d, 0x76, 0x78, 0x73, 0x71, 0x75, 0x7b,
4202 0x78, 0x7b, 0x81, 0x88, 0x8d, 0x8d, 0x87, 0x82,
4203 0x7f, 0x70, 0x65, 0x65, 0x68, 0x69, 0x6e, 0x75,
4204 0x73, 0x5c, 0x50, 0x58, 0x5c, 0x53, 0x50, 0x56,
4205 0x48, 0x48, 0x47, 0x40, 0x37, 0x40, 0x63, 0x87,
4206 0x79, 0x7a, 0x78, 0x75, 0x78, 0x79, 0x65, 0x48,
4207 0x38, 0x3f, 0x57, 0x48, 0x50, 0x73, 0x73, 0x7f,
4208 0x73, 0x71, 0x64, 0x66, 0x75, 0x71, 0x73, 0x8d,
4209 0x85, 0x5f, 0x2a, 0x1c, 0x47, 0x8f, 0xcc, 0xe2,
4210 0xf7, 0xff, 0xac, 0xb9, 0xf3, 0x8f, 0x53, 0x3c,
4211 0x37, 0x3e, 0x28, 0x3b, 0x54, 0x36, 0x14, 0x27,
4212 0x4b, 0x3a, 0x27, 0x5b, 0xb1, 0xc1, 0xa7, 0xa0,
4213 0xad, 0xcd, 0xe2, 0xf8, 0xd5, 0x8d, 0x69, 0x45,
4214 0x23, 0x3a, 0x53, 0x9e, 0xcd, 0xb7, 0xb0, 0xb6,
4215 0x9c, 0xa2, 0x94, 0xff, 0xb4, 0x4d, 0x5a, 0x63,
4216 0x59, 0x5c, 0x58, 0x4c, 0x40, 0x39, 0x35, 0x31,
4217 0x4d, 0x6a, 0x84, 0x72, 0x60, 0x46, 0x17, 0x10,
4218 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4219 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4220 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4221 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4222 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4223 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4224 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4225 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4226 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4227 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4228 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4229 0xeb, 0xec, 0xec, 0xec, 0xeb, 0xe9, 0xe6, 0xe5,
4230 0xeb, 0xc3, 0xba, 0xba, 0x86, 0xc4, 0xe9, 0xe1,
4231 0xea, 0xe9, 0xe8, 0xe7, 0xe7, 0xe8, 0xea, 0xeb,
4232 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4233 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4234 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4235 0xe9, 0xe8, 0xea, 0xea, 0xea, 0xee, 0xe4, 0xcf,
4236 0xcd, 0xeb, 0xc9, 0xb3, 0xb2, 0x7b, 0x88, 0xae,
4237 0x81, 0x8d, 0xb1, 0xad, 0xca, 0xd6, 0xdd, 0xdc,
4238 0xe3, 0xdf, 0xde, 0xdd, 0xd9, 0xdb, 0xdf, 0xdd,
4239 0xdf, 0xe1, 0xe3, 0xe4, 0xe5, 0xe4, 0xe3, 0xe3,
4240 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
4241 0xf3, 0xc8, 0x7f, 0x6d, 0x7b, 0x7e, 0x88, 0x87,
4242 0x92, 0x8c, 0x7c, 0x78, 0x79, 0x8f, 0x80, 0x91,
4243 0x74, 0x7e, 0x8c, 0x7a, 0x80, 0x82, 0x66, 0x7a,
4244 0x86, 0x7d, 0x7e, 0x81, 0x75, 0x63, 0x67, 0x79,
4245 0x69, 0x75, 0x7f, 0x7d, 0x71, 0x6a, 0x6c, 0x71,
4246 0x7a, 0x7c, 0x82, 0x8a, 0x90, 0x90, 0x8a, 0x85,
4247 0x81, 0x71, 0x64, 0x64, 0x66, 0x63, 0x61, 0x62,
4248 0x4e, 0x54, 0x64, 0x72, 0x6b, 0x58, 0x50, 0x54,
4249 0x40, 0x40, 0x40, 0x3e, 0x37, 0x38, 0x4b, 0x62,
4250 0x81, 0x87, 0x86, 0x72, 0x62, 0x65, 0x5b, 0x3e,
4251 0x42, 0x48, 0x5c, 0x43, 0x41, 0x60, 0x65, 0x76,
4252 0x75, 0x85, 0x90, 0x8d, 0x78, 0x4e, 0x2b, 0x22,
4253 0x59, 0xa1, 0xe8, 0xff, 0xff, 0xe1, 0xde, 0xdf,
4254 0xe3, 0x81, 0x5e, 0x34, 0x40, 0x2e, 0x13, 0x3b,
4255 0x26, 0x31, 0x50, 0x74, 0x3d, 0x2b, 0x2e, 0x17,
4256 0x41, 0x3e, 0x3e, 0x31, 0x36, 0x98, 0xd1, 0x80,
4257 0x1d, 0x3b, 0x60, 0x86, 0xa0, 0xc2, 0xe8, 0xe8,
4258 0xd5, 0xbb, 0x6d, 0x73, 0xa9, 0xb7, 0xba, 0xa7,
4259 0xae, 0xbf, 0xa6, 0xf3, 0xb0, 0x5d, 0x67, 0x59,
4260 0x70, 0x6a, 0x5d, 0x48, 0x33, 0x2d, 0x3e, 0x54,
4261 0x5a, 0x6d, 0x7e, 0x6f, 0x68, 0x53, 0x1f, 0x0f,
4262 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4263 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4264 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4265 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4266 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4267 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4268 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4269 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4270 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4271 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4272 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4273 0xec, 0xec, 0xed, 0xed, 0xeb, 0xe9, 0xe7, 0xe5,
4274 0xeb, 0xe4, 0xc4, 0xb8, 0xaf, 0xcb, 0xce, 0xe5,
4275 0xec, 0xea, 0xe8, 0xe7, 0xe6, 0xe8, 0xea, 0xeb,
4276 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4277 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4278 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4279 0xeb, 0xe7, 0xea, 0xed, 0xeb, 0xeb, 0xe7, 0xdb,
4280 0xc3, 0xce, 0xcc, 0xc4, 0xc7, 0x83, 0x7f, 0xd7,
4281 0xb2, 0x7f, 0x74, 0x9c, 0xca, 0xd0, 0xcc, 0xd1,
4282 0xd6, 0xdb, 0xdc, 0xdd, 0xe3, 0xe4, 0xe2, 0xe5,
4283 0xdb, 0xdd, 0xdf, 0xe2, 0xe4, 0xe5, 0xe4, 0xe4,
4284 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
4285 0xe1, 0x6c, 0x5f, 0x76, 0x86, 0x92, 0x7a, 0x82,
4286 0x85, 0x8a, 0x84, 0x7b, 0x6c, 0x76, 0x6f, 0x8e,
4287 0x62, 0x6b, 0x78, 0x61, 0x73, 0x98, 0x89, 0x8b,
4288 0x96, 0x89, 0x77, 0x6c, 0x6c, 0x6f, 0x6c, 0x66,
4289 0x5c, 0x65, 0x6f, 0x73, 0x70, 0x6d, 0x6d, 0x6f,
4290 0x87, 0x86, 0x82, 0x7a, 0x73, 0x71, 0x75, 0x7a,
4291 0x6f, 0x6c, 0x6f, 0x78, 0x79, 0x71, 0x6b, 0x6c,
4292 0x6d, 0x63, 0x59, 0x57, 0x5b, 0x60, 0x63, 0x66,
4293 0x59, 0x51, 0x49, 0x45, 0x44, 0x4d, 0x66, 0x7e,
4294 0x79, 0x74, 0x72, 0x70, 0x78, 0x88, 0x6a, 0x2b,
4295 0x30, 0x3e, 0x5e, 0x52, 0x53, 0x69, 0x5c, 0x60,
4296 0x8a, 0x5a, 0x36, 0x46, 0x86, 0xd2, 0xf9, 0xf7,
4297 0xf8, 0xff, 0xff, 0xff, 0xd6, 0x83, 0x4e, 0x2a,
4298 0x1f, 0x31, 0x44, 0x47, 0x4e, 0x66, 0x94, 0x53,
4299 0x20, 0x46, 0x3b, 0x65, 0x61, 0x42, 0x2d, 0x45,
4300 0x58, 0x51, 0x46, 0x2c, 0x18, 0x74, 0xe0, 0xc4,
4301 0x7c, 0x26, 0x18, 0x3e, 0x39, 0x1e, 0x2f, 0x66,
4302 0x8b, 0xd7, 0xd3, 0xcf, 0xc7, 0xa7, 0xb0, 0xaf,
4303 0xaf, 0xa6, 0x92, 0xdd, 0xb7, 0x43, 0x3a, 0x39,
4304 0x42, 0x35, 0x31, 0x38, 0x38, 0x33, 0x3f, 0x54,
4305 0x50, 0x58, 0x62, 0x5a, 0x62, 0x57, 0x22, 0x0c,
4306 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4307 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4308 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4309 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4310 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4311 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4312 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4313 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4314 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4315 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4316 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4317 0xec, 0xed, 0xed, 0xed, 0xec, 0xe9, 0xe7, 0xe5,
4318 0xed, 0xf4, 0xe3, 0xc4, 0xad, 0xba, 0xc0, 0xe9,
4319 0xed, 0xeb, 0xe8, 0xe6, 0xe6, 0xe7, 0xea, 0xeb,
4320 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4321 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4322 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4323 0xec, 0xe6, 0xea, 0xef, 0xeb, 0xe9, 0xe9, 0xe4,
4324 0xc8, 0xcc, 0xce, 0x9d, 0xb9, 0x9b, 0x68, 0xc8,
4325 0xb5, 0x98, 0xb1, 0xd3, 0xd1, 0xcd, 0xca, 0xdd,
4326 0xe2, 0xe6, 0xdc, 0xd6, 0xde, 0xdd, 0xdc, 0xe6,
4327 0xd8, 0xda, 0xdd, 0xe1, 0xe3, 0xe5, 0xe5, 0xe5,
4328 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
4329 0x68, 0x64, 0x6c, 0x7a, 0x8d, 0x94, 0x88, 0x82,
4330 0x7f, 0x82, 0x83, 0x88, 0x7d, 0x7e, 0x6c, 0x88,
4331 0x62, 0x5c, 0x88, 0x80, 0x62, 0x6c, 0x6b, 0x6e,
4332 0x79, 0x8a, 0x8a, 0x75, 0x6b, 0x71, 0x6c, 0x5b,
4333 0x5b, 0x5e, 0x63, 0x69, 0x6b, 0x68, 0x62, 0x5d,
4334 0x65, 0x6d, 0x72, 0x6e, 0x68, 0x6c, 0x7c, 0x8c,
4335 0x7c, 0x84, 0x94, 0x9f, 0x98, 0x86, 0x7b, 0x7b,
4336 0x6a, 0x68, 0x62, 0x59, 0x55, 0x58, 0x5d, 0x5e,
4337 0x53, 0x50, 0x4c, 0x48, 0x42, 0x45, 0x5b, 0x72,
4338 0x71, 0x7b, 0x82, 0x75, 0x6d, 0x7f, 0x75, 0x48,
4339 0x4f, 0x4e, 0x5d, 0x46, 0x49, 0x64, 0x5a, 0x5d,
4340 0x7b, 0x98, 0xcf, 0xf6, 0xff, 0xff, 0xf3, 0xcd,
4341 0xbe, 0x7c, 0x26, 0x18, 0x1e, 0x23, 0x49, 0x5b,
4342 0x2d, 0x3d, 0x54, 0x59, 0x8a, 0x7a, 0x4a, 0x2e,
4343 0x20, 0x48, 0x37, 0x61, 0x5f, 0x4f, 0x3e, 0x49,
4344 0x54, 0x53, 0x2a, 0x2f, 0x49, 0x5a, 0x95, 0xc3,
4345 0xc8, 0x5a, 0x33, 0x33, 0x28, 0x1f, 0x22, 0x48,
4346 0x3f, 0x2f, 0x03, 0x57, 0xbb, 0xbc, 0xc0, 0xbe,
4347 0xb4, 0xa5, 0x9c, 0xdc, 0xb9, 0x29, 0x1d, 0x34,
4348 0x42, 0x37, 0x3c, 0x4c, 0x47, 0x36, 0x3e, 0x58,
4349 0x55, 0x5b, 0x62, 0x55, 0x5a, 0x4f, 0x1b, 0x06,
4350 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4351 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4352 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4353 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4354 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4355 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4356 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4357 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4358 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4359 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4360 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4361 0xee, 0xee, 0xe9, 0xe6, 0xea, 0xef, 0xe9, 0xdd,
4362 0xd7, 0xf0, 0xeb, 0xc4, 0xb3, 0xb8, 0xba, 0xde,
4363 0xf4, 0xeb, 0xd9, 0xf5, 0xe8, 0xe8, 0xee, 0xed,
4364 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4365 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4366 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4367 0xeb, 0xec, 0xed, 0xeb, 0xe9, 0xe9, 0xec, 0xf0,
4368 0xcd, 0xbc, 0xe0, 0xba, 0x9c, 0x95, 0x90, 0xaa,
4369 0xad, 0xa6, 0xa7, 0xcb, 0xd2, 0xb8, 0xc5, 0xe2,
4370 0xd2, 0xc9, 0xd0, 0xd8, 0xd9, 0xe4, 0xe7, 0xd5,
4371 0xd9, 0xe8, 0xdd, 0xe0, 0xe6, 0xe2, 0xe6, 0xdd,
4372 0xe1, 0xdf, 0xe1, 0xe8, 0xd2, 0xf7, 0xe4, 0x67,
4373 0x64, 0x8e, 0x93, 0x90, 0x91, 0x83, 0x84, 0x93,
4374 0x9f, 0x8b, 0x69, 0x62, 0x7c, 0x86, 0x7a, 0x76,
4375 0x4a, 0x67, 0x7b, 0x84, 0x85, 0x75, 0x69, 0x6f,
4376 0x82, 0x82, 0x7b, 0x6d, 0x65, 0x69, 0x74, 0x7d,
4377 0x74, 0x6e, 0x6f, 0x76, 0x73, 0x65, 0x5d, 0x5f,
4378 0x60, 0x62, 0x63, 0x65, 0x6b, 0x7a, 0x8d, 0x9b,
4379 0x90, 0x76, 0x66, 0x6f, 0x7b, 0x77, 0x6a, 0x63,
4380 0x57, 0x58, 0x4d, 0x3e, 0x3f, 0x50, 0x5c, 0x5d,
4381 0x42, 0x47, 0x46, 0x3d, 0x3e, 0x53, 0x73, 0x8a,
4382 0x89, 0x64, 0x69, 0x60, 0x68, 0x7f, 0x61, 0x4c,
4383 0x54, 0x61, 0x55, 0x2b, 0x4b, 0x57, 0x55, 0xcd,
4384 0xff, 0xf3, 0xf6, 0xed, 0x84, 0x3b, 0x43, 0x1b,
4385 0x24, 0x31, 0x2e, 0x2f, 0x2e, 0x2f, 0x28, 0x48,
4386 0x62, 0x3e, 0x5f, 0x71, 0x5f, 0x5d, 0x4a, 0x32,
4387 0x48, 0x51, 0x5e, 0x6e, 0x6e, 0x52, 0x44, 0x55,
4388 0x58, 0x41, 0x2f, 0x52, 0x67, 0x30, 0x30, 0x8f,
4389 0xe3, 0xe3, 0x5c, 0x12, 0x22, 0x2b, 0x3c, 0x2a,
4390 0x15, 0x0c, 0x07, 0x39, 0xbe, 0xce, 0xba, 0xbc,
4391 0xab, 0xab, 0x9d, 0xe8, 0xff, 0x71, 0x4b, 0x62,
4392 0x4b, 0x38, 0x2e, 0x3a, 0x4a, 0x50, 0x52, 0x55,
4393 0x43, 0x5b, 0x59, 0x6d, 0x60, 0x47, 0x1f, 0x11,
4394 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4395 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4396 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4397 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4398 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4399 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4400 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4401 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4402 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4403 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4404 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4405 0xf0, 0xec, 0xe9, 0xe9, 0xe9, 0xe6, 0xe3, 0xe2,
4406 0xd8, 0xe7, 0xf4, 0xc2, 0x9b, 0xc0, 0xcb, 0xd1,
4407 0xd6, 0xea, 0xda, 0xe7, 0xe7, 0xed, 0xea, 0xea,
4408 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4409 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4410 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4411 0xeb, 0xec, 0xed, 0xeb, 0xe8, 0xe8, 0xec, 0xef,
4412 0xd6, 0xa2, 0xe0, 0xcf, 0x8a, 0x7b, 0x80, 0xab,
4413 0x9a, 0x94, 0x8e, 0xc6, 0xcc, 0xbb, 0xcb, 0xea,
4414 0xd2, 0xd4, 0xe2, 0xe7, 0xde, 0xdf, 0xe0, 0xd3,
4415 0xd3, 0xdc, 0xdd, 0xe5, 0xe7, 0xdc, 0xdd, 0xe5,
4416 0xdf, 0xe1, 0xe2, 0xe6, 0xfb, 0xce, 0x66, 0x5c,
4417 0x5f, 0x50, 0x46, 0x52, 0x47, 0x44, 0x50, 0x30,
4418 0x2b, 0x4c, 0x65, 0x74, 0x7f, 0x79, 0x76, 0x83,
4419 0x64, 0x72, 0x88, 0x87, 0x81, 0x96, 0x91, 0x62,
4420 0x6c, 0x7e, 0x85, 0x7a, 0x73, 0x74, 0x6c, 0x5c,
4421 0x61, 0x5f, 0x64, 0x6f, 0x71, 0x6a, 0x68, 0x6b,
4422 0x74, 0x79, 0x7b, 0x73, 0x69, 0x68, 0x74, 0x80,
4423 0x7b, 0x77, 0x79, 0x80, 0x7b, 0x6e, 0x69, 0x6d,
4424 0x5c, 0x61, 0x5f, 0x56, 0x54, 0x59, 0x58, 0x51,
4425 0x41, 0x43, 0x42, 0x3d, 0x3c, 0x48, 0x61, 0x76,
4426 0x8c, 0x7d, 0x8d, 0x77, 0x5d, 0x5e, 0x4b, 0x46,
4427 0x4a, 0x57, 0x48, 0x28, 0x48, 0x5a, 0x5f, 0xb4,
4428 0x8e, 0x4a, 0x13, 0x42, 0x56, 0x27, 0x28, 0x3f,
4429 0x41, 0x39, 0x51, 0x58, 0x3e, 0x48, 0x63, 0x85,
4430 0x90, 0x7d, 0x86, 0x86, 0x80, 0x69, 0x47, 0x51,
4431 0x65, 0x8d, 0x8d, 0x84, 0x8f, 0x79, 0x51, 0x4d,
4432 0x43, 0x37, 0x52, 0x66, 0x46, 0x2f, 0x35, 0x34,
4433 0x9a, 0xdc, 0xbd, 0x3e, 0x12, 0x3f, 0x3d, 0x17,
4434 0x1b, 0x16, 0x11, 0x3b, 0xb3, 0xb4, 0x92, 0x8a,
4435 0xa1, 0xbc, 0xaa, 0xca, 0xe3, 0x6d, 0x48, 0x44,
4436 0x39, 0x47, 0x4e, 0x41, 0x2e, 0x29, 0x37, 0x47,
4437 0x48, 0x51, 0x3d, 0x42, 0x3d, 0x37, 0x14, 0x04,
4438 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4439 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4440 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4441 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4442 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4443 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4444 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4445 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4446 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4447 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4448 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4449 0xf1, 0xeb, 0xea, 0xec, 0xe8, 0xdf, 0xde, 0xe4,
4450 0xc9, 0xce, 0xf9, 0xe3, 0xad, 0xc1, 0xbe, 0xd0,
4451 0xc6, 0xdf, 0xdb, 0xe6, 0xec, 0xf4, 0xf0, 0xee,
4452 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4453 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4454 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4455 0xeb, 0xec, 0xed, 0xea, 0xe8, 0xe8, 0xeb, 0xee,
4456 0xe9, 0xa1, 0xc7, 0xd5, 0xb3, 0xa5, 0x8e, 0xbd,
4457 0xa6, 0x9c, 0x89, 0xc3, 0xcb, 0xbe, 0xd0, 0xde,
4458 0xde, 0xe5, 0xda, 0xce, 0xda, 0xe6, 0xdd, 0xd1,
4459 0xec, 0xe8, 0xe6, 0xe3, 0xe4, 0xe1, 0xde, 0xed,
4460 0xe9, 0xf9, 0xfd, 0xff, 0x9c, 0x1e, 0x43, 0x82,
4461 0xa0, 0xbf, 0xc9, 0xd3, 0xe0, 0xfc, 0xee, 0x92,
4462 0x45, 0x5c, 0x6d, 0x7e, 0x90, 0x8b, 0x7c, 0x7d,
4463 0x63, 0x6a, 0x7e, 0x7f, 0x6c, 0x6a, 0x6a, 0x5b,
4464 0x6d, 0x6c, 0x70, 0x74, 0x70, 0x67, 0x65, 0x6a,
4465 0x64, 0x67, 0x6d, 0x6f, 0x68, 0x5e, 0x5c, 0x62,
4466 0x6a, 0x71, 0x74, 0x6a, 0x5d, 0x5d, 0x6d, 0x7d,
4467 0x7a, 0x7d, 0x83, 0x84, 0x78, 0x6b, 0x6a, 0x73,
4468 0x78, 0x79, 0x74, 0x69, 0x63, 0x63, 0x60, 0x5a,
4469 0x52, 0x58, 0x50, 0x3e, 0x3b, 0x4e, 0x63, 0x6b,
4470 0x5b, 0x43, 0x48, 0x5b, 0x95, 0xce, 0xa8, 0x64,
4471 0x59, 0x69, 0x5e, 0x54, 0x68, 0x5e, 0x34, 0x2e,
4472 0x39, 0x55, 0x47, 0x2c, 0x32, 0x5c, 0x67, 0x2d,
4473 0x54, 0x2e, 0x5e, 0x95, 0x95, 0x73, 0x5e, 0x71,
4474 0x54, 0x5e, 0x87, 0x8e, 0x74, 0x53, 0x4a, 0x77,
4475 0x98, 0xa5, 0x97, 0x77, 0x66, 0x62, 0x5e, 0x5a,
4476 0x37, 0x55, 0x5a, 0x41, 0x37, 0x45, 0x48, 0x39,
4477 0x64, 0xae, 0xcc, 0x8d, 0x32, 0x1c, 0x35, 0x2d,
4478 0x25, 0x1c, 0x0f, 0x31, 0xae, 0xc4, 0xb8, 0xbd,
4479 0xc1, 0xb9, 0x98, 0xbe, 0xe7, 0x7c, 0x5b, 0x67,
4480 0x64, 0x74, 0x76, 0x5e, 0x46, 0x41, 0x43, 0x43,
4481 0x60, 0x6d, 0x60, 0x60, 0x54, 0x4a, 0x1c, 0x08,
4482 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4483 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4484 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4485 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4486 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4487 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4488 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4489 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4490 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4491 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4492 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4493 0xee, 0xeb, 0xeb, 0xed, 0xea, 0xe2, 0xdd, 0xdd,
4494 0xcf, 0xc5, 0xe3, 0xdf, 0xbe, 0xc3, 0xad, 0xe5,
4495 0xd6, 0xd2, 0xd8, 0xe9, 0xea, 0xee, 0xef, 0xe5,
4496 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4497 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4498 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4499 0xeb, 0xec, 0xec, 0xea, 0xe7, 0xe7, 0xea, 0xed,
4500 0xea, 0xbc, 0xcc, 0xe1, 0xbc, 0x98, 0x84, 0xad,
4501 0xa0, 0x9e, 0x9a, 0xc8, 0xdf, 0xcc, 0xe0, 0xd0,
4502 0xea, 0xea, 0xca, 0xb9, 0xc3, 0xb9, 0xb6, 0xd7,
4503 0xe1, 0xe7, 0xee, 0xde, 0xe0, 0xef, 0xef, 0xff,
4504 0xd7, 0x90, 0x45, 0x67, 0xc7, 0xf4, 0xff, 0xe3,
4505 0xa5, 0x99, 0x8b, 0x7d, 0x67, 0x5b, 0x58, 0x4c,
4506 0x55, 0x6b, 0x76, 0x7a, 0x81, 0x7f, 0x7f, 0x8e,
4507 0x4d, 0x6b, 0x72, 0x74, 0x7e, 0x6f, 0x69, 0x87,
4508 0xa2, 0x7c, 0x63, 0x6b, 0x74, 0x6e, 0x6a, 0x70,
4509 0x73, 0x6b, 0x65, 0x68, 0x6c, 0x69, 0x5f, 0x56,
4510 0x56, 0x60, 0x6a, 0x6c, 0x69, 0x6b, 0x75, 0x7e,
4511 0x76, 0x6f, 0x6a, 0x6b, 0x6f, 0x72, 0x76, 0x79,
4512 0x80, 0x80, 0x7b, 0x73, 0x6c, 0x67, 0x62, 0x5d,
4513 0x4e, 0x4f, 0x4c, 0x3f, 0x30, 0x38, 0x60, 0x89,
4514 0xb6, 0xe5, 0xfa, 0xc7, 0x9a, 0xa1, 0x8d, 0x59,
4515 0x33, 0x60, 0x69, 0x5b, 0x51, 0x4e, 0x53, 0x4e,
4516 0x6b, 0x4f, 0x41, 0x4a, 0x50, 0x5c, 0x67, 0x5a,
4517 0x55, 0x61, 0x69, 0x2b, 0x28, 0x32, 0x2b, 0x3f,
4518 0x51, 0x2d, 0x5b, 0x7d, 0x6c, 0x6c, 0x78, 0x88,
4519 0x88, 0x71, 0x94, 0x9e, 0x67, 0x60, 0x79, 0x62,
4520 0x61, 0x51, 0x41, 0x41, 0x4c, 0x4c, 0x40, 0x37,
4521 0x25, 0x85, 0xe5, 0xec, 0x81, 0x29, 0x2d, 0x32,
4522 0x24, 0x25, 0x1d, 0x3b, 0xb3, 0xc6, 0xb5, 0xb4,
4523 0xb0, 0x99, 0x8c, 0xd2, 0xff, 0x94, 0x4c, 0x4c,
4524 0x4b, 0x51, 0x55, 0x5b, 0x67, 0x74, 0x75, 0x6f,
4525 0x54, 0x50, 0x44, 0x50, 0x57, 0x56, 0x21, 0x0f,
4526 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4527 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4528 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4529 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4530 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4531 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4532 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4533 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4534 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4535 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4536 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4537 0xea, 0xec, 0xec, 0xec, 0xee, 0xec, 0xe1, 0xd4,
4538 0xd4, 0xcd, 0xd1, 0xc5, 0xb4, 0xc8, 0xa0, 0xd1,
4539 0xd7, 0xc3, 0xc8, 0xd6, 0xe5, 0xee, 0xee, 0xe4,
4540 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4541 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4542 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4543 0xec, 0xed, 0xec, 0xea, 0xe6, 0xe6, 0xe8, 0xeb,
4544 0xf8, 0xc5, 0xc0, 0xec, 0xc2, 0x84, 0x8c, 0x8b,
4545 0x9b, 0x86, 0x9f, 0xc8, 0xdc, 0xaa, 0xdc, 0xf1,
4546 0xdb, 0xe9, 0xd0, 0xac, 0xaf, 0xc4, 0xd0, 0xd7,
4547 0xc9, 0xca, 0xd7, 0xda, 0xe1, 0xc9, 0x80, 0x54,
4548 0x94, 0xd5, 0xff, 0xeb, 0xb7, 0xcb, 0xf5, 0xeb,
4549 0x98, 0x8f, 0xa3, 0xa7, 0xaf, 0xbf, 0x97, 0x62,
4550 0x6b, 0x83, 0x8e, 0x8c, 0x89, 0x7b, 0x74, 0x80,
4551 0x5a, 0x84, 0x7c, 0x6c, 0x8b, 0x97, 0x83, 0x7f,
4552 0x80, 0x77, 0x6c, 0x68, 0x6b, 0x6d, 0x6a, 0x66,
4553 0x66, 0x6a, 0x6e, 0x6d, 0x6b, 0x6b, 0x6c, 0x6c,
4554 0x68, 0x6e, 0x78, 0x7f, 0x81, 0x7c, 0x72, 0x6b,
4555 0x66, 0x60, 0x5b, 0x5f, 0x6f, 0x7f, 0x85, 0x84,
4556 0x70, 0x74, 0x7b, 0x7f, 0x79, 0x6a, 0x5b, 0x52,
4557 0x4c, 0x4f, 0x40, 0x37, 0x66, 0xbb, 0xf3, 0xfc,
4558 0xf5, 0xe4, 0xae, 0x67, 0x44, 0x59, 0x65, 0x44,
4559 0x50, 0x62, 0x58, 0x4d, 0x54, 0x5e, 0x54, 0x2e,
4560 0x72, 0x7d, 0x6a, 0x58, 0x64, 0x56, 0x42, 0x5b,
4561 0x42, 0x6e, 0x95, 0x3c, 0x3e, 0x55, 0x47, 0x40,
4562 0x6d, 0x45, 0x64, 0x72, 0x56, 0x5b, 0x6f, 0x82,
4563 0x5a, 0x41, 0x71, 0x8f, 0x69, 0x6f, 0x7e, 0x4d,
4564 0x5b, 0x70, 0x69, 0x59, 0x57, 0x4a, 0x43, 0x54,
4565 0x49, 0x2c, 0x8e, 0xfa, 0xeb, 0x75, 0x17, 0x2b,
4566 0x36, 0x39, 0x2c, 0x3c, 0xab, 0xc0, 0xb1, 0xaf,
4567 0xcd, 0xbe, 0xa9, 0xc6, 0xfa, 0x9d, 0x5c, 0x59,
4568 0x3c, 0x3a, 0x3e, 0x44, 0x44, 0x3e, 0x3e, 0x43,
4569 0x50, 0x4c, 0x57, 0x73, 0x7d, 0x70, 0x25, 0x10,
4570 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4571 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4572 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4573 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4574 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4575 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4576 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4577 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4578 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4579 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4580 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4581 0xea, 0xec, 0xec, 0xea, 0xef, 0xf2, 0xe6, 0xd6,
4582 0xbf, 0xc4, 0xd3, 0xd8, 0xbc, 0xd4, 0xb3, 0xd5,
4583 0xd8, 0xc9, 0xc5, 0xc4, 0xe9, 0xf5, 0xed, 0xe9,
4584 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4585 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4586 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4587 0xec, 0xed, 0xec, 0xe9, 0xe5, 0xe5, 0xe7, 0xea,
4588 0xe8, 0xd2, 0xbd, 0xe8, 0xdb, 0x7c, 0xa0, 0xb2,
4589 0x86, 0x78, 0x8e, 0x99, 0xc2, 0xcb, 0xe9, 0xcd,
4590 0xac, 0x9a, 0xb8, 0xea, 0xf1, 0xe7, 0xea, 0xed,
4591 0xeb, 0xe9, 0xe9, 0xe8, 0xea, 0xe6, 0xe1, 0xef,
4592 0xbe, 0xaf, 0xba, 0xde, 0xd8, 0xf3, 0xfa, 0xe3,
4593 0xac, 0xb6, 0xc4, 0xc2, 0xca, 0xb9, 0x7d, 0x5e,
4594 0x5f, 0x75, 0x7e, 0x80, 0x83, 0x7a, 0x75, 0x80,
4595 0x50, 0x66, 0x6d, 0x65, 0x64, 0x63, 0x57, 0x4c,
4596 0x67, 0x6a, 0x70, 0x77, 0x79, 0x77, 0x75, 0x74,
4597 0x75, 0x7e, 0x80, 0x74, 0x67, 0x62, 0x64, 0x65,
4598 0x85, 0x7e, 0x76, 0x75, 0x76, 0x76, 0x6f, 0x69,
4599 0x75, 0x7c, 0x7f, 0x7d, 0x7f, 0x86, 0x8b, 0x8b,
4600 0x7c, 0x7c, 0x81, 0x86, 0x81, 0x72, 0x66, 0x63,
4601 0x62, 0x63, 0x4d, 0x3c, 0x62, 0x9a, 0x95, 0x67,
4602 0x31, 0x1f, 0x15, 0x34, 0x4f, 0x62, 0x6f, 0x55,
4603 0x54, 0x64, 0x63, 0x4f, 0x5c, 0x7d, 0x86, 0x86,
4604 0x7d, 0x4f, 0x43, 0x52, 0x6b, 0x76, 0x71, 0x87,
4605 0x9c, 0x84, 0xad, 0x51, 0x3f, 0x4d, 0x56, 0x55,
4606 0x43, 0x5e, 0x87, 0x78, 0x51, 0x37, 0x34, 0x5d,
4607 0x8a, 0x82, 0x76, 0x65, 0x6a, 0x8c, 0x84, 0x4f,
4608 0x66, 0x7a, 0x63, 0x50, 0x6c, 0x73, 0x64, 0x6a,
4609 0x5d, 0x48, 0x58, 0x9a, 0xcb, 0xae, 0x5a, 0x1b,
4610 0x3d, 0x3f, 0x2a, 0x2f, 0x9f, 0xc2, 0xc4, 0xcb,
4611 0xa2, 0xa1, 0xa9, 0xc6, 0xf1, 0x90, 0x47, 0x4c,
4612 0x36, 0x31, 0x34, 0x3c, 0x39, 0x30, 0x34, 0x41,
4613 0x7e, 0x5e, 0x4f, 0x5b, 0x71, 0x75, 0x22, 0x03,
4614 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4615 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4616 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4617 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4618 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4619 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4620 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4621 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4622 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4623 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4624 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4625 0xee, 0xec, 0xea, 0xea, 0xed, 0xee, 0xea, 0xe5,
4626 0xcc, 0xc3, 0xc3, 0xd1, 0xa5, 0xb6, 0xa1, 0xc2,
4627 0xe7, 0xcf, 0xcd, 0xca, 0xed, 0xef, 0xe4, 0xe8,
4628 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4629 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4630 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4631 0xec, 0xed, 0xec, 0xe9, 0xe5, 0xe4, 0xe6, 0xe9,
4632 0xf0, 0xe2, 0xae, 0xb9, 0xe6, 0x88, 0xa0, 0xb3,
4633 0x90, 0x75, 0x9b, 0xc9, 0xbe, 0xaa, 0xa6, 0xbb,
4634 0xc1, 0xba, 0xd3, 0xeb, 0xdd, 0xd1, 0xdc, 0xe3,
4635 0xe2, 0xe7, 0xe2, 0xe4, 0xe6, 0xe1, 0xec, 0xfc,
4636 0xff, 0xc2, 0xaf, 0x73, 0x25, 0xbc, 0xff, 0xe0,
4637 0x9b, 0xb5, 0xae, 0xbc, 0xc8, 0x94, 0x63, 0x5b,
4638 0x78, 0x94, 0x9d, 0x8e, 0x7b, 0x6c, 0x73, 0x8f,
4639 0x56, 0x6f, 0x83, 0x8d, 0x8a, 0x74, 0x6d, 0x7f,
4640 0x84, 0x6d, 0x5f, 0x6a, 0x79, 0x79, 0x6c, 0x61,
4641 0x6c, 0x67, 0x61, 0x64, 0x75, 0x84, 0x7e, 0x6f,
4642 0x7f, 0x77, 0x6c, 0x67, 0x69, 0x6f, 0x75, 0x79,
4643 0x8b, 0x98, 0x9a, 0x8c, 0x81, 0x84, 0x8a, 0x8c,
4644 0x90, 0x88, 0x85, 0x88, 0x82, 0x75, 0x6f, 0x72,
4645 0x7d, 0x65, 0x54, 0x4d, 0x38, 0x22, 0x2e, 0x4d,
4646 0x49, 0x59, 0x64, 0x7d, 0x74, 0x62, 0x6c, 0x54,
4647 0x4e, 0x57, 0x60, 0x4d, 0x61, 0x6b, 0x3b, 0x32,
4648 0x4f, 0x3c, 0x7f, 0x97, 0x7a, 0x8b, 0x96, 0x8a,
4649 0x5b, 0x8a, 0xef, 0x7a, 0x4f, 0x54, 0x4f, 0x39,
4650 0x39, 0x53, 0x78, 0x71, 0x66, 0x5c, 0x3c, 0x38,
4651 0x6f, 0x7c, 0x75, 0x5f, 0x65, 0x7b, 0x66, 0x33,
4652 0x6b, 0x52, 0x5c, 0x70, 0x65, 0x5b, 0x61, 0x62,
4653 0x53, 0x65, 0x39, 0x55, 0xa5, 0xdd, 0xcf, 0x56,
4654 0x3c, 0x47, 0x37, 0x37, 0x9c, 0xb3, 0xa7, 0xa3,
4655 0xac, 0xa3, 0xa5, 0xbc, 0xf6, 0xad, 0x5f, 0x5b,
4656 0x5a, 0x54, 0x4b, 0x44, 0x3d, 0x37, 0x36, 0x38,
4657 0x3b, 0x5d, 0x7b, 0x67, 0x4a, 0x4a, 0x12, 0x12,
4658 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4659 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4660 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4661 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4662 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4663 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4664 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4665 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4666 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4667 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4668 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4669 0xf2, 0xec, 0xe9, 0xeb, 0xea, 0xe7, 0xec, 0xf4,
4670 0xdc, 0xc7, 0xac, 0xbe, 0xaa, 0xca, 0xb3, 0xc6,
4671 0xde, 0xb0, 0xc1, 0xd2, 0xec, 0xe7, 0xeb, 0xf5,
4672 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4673 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4674 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4675 0xec, 0xed, 0xec, 0xe9, 0xe5, 0xe3, 0xe6, 0xe8,
4676 0xeb, 0xe7, 0xcc, 0xad, 0xc7, 0x7b, 0xac, 0xbb,
4677 0x8f, 0x73, 0x80, 0xb0, 0xac, 0xe1, 0xc9, 0xcd,
4678 0xd5, 0xe5, 0xe7, 0xe1, 0xe6, 0xe8, 0xe3, 0xe0,
4679 0xe1, 0xf2, 0xe8, 0xe7, 0xe9, 0xe4, 0xec, 0xe7,
4680 0xf7, 0xb3, 0x23, 0x41, 0x66, 0xcb, 0xfe, 0xe4,
4681 0xa7, 0xb6, 0xae, 0xcd, 0xb2, 0x66, 0x65, 0x63,
4682 0x71, 0x78, 0x74, 0x78, 0x88, 0x86, 0x7a, 0x7a,
4683 0x4d, 0x86, 0x81, 0x75, 0x9a, 0x94, 0x6e, 0x72,
4684 0x7c, 0x86, 0x82, 0x6e, 0x68, 0x73, 0x78, 0x71,
4685 0x74, 0x7e, 0x7e, 0x70, 0x65, 0x65, 0x68, 0x66,
4686 0x68, 0x6f, 0x77, 0x7b, 0x7a, 0x79, 0x7a, 0x7b,
4687 0x83, 0x8b, 0x87, 0x77, 0x71, 0x7d, 0x8a, 0x8e,
4688 0x85, 0x80, 0x82, 0x89, 0x82, 0x6e, 0x61, 0x61,
4689 0x5f, 0x66, 0x67, 0x5a, 0x44, 0x37, 0x3a, 0x43,
4690 0x51, 0x6e, 0x69, 0x68, 0x60, 0x69, 0x76, 0x45,
4691 0x33, 0x4a, 0x66, 0x46, 0x4e, 0x5a, 0x39, 0x5e,
4692 0x6f, 0x4f, 0x75, 0x8a, 0x85, 0x83, 0x6c, 0x6c,
4693 0x7b, 0x9e, 0xda, 0x51, 0x45, 0x49, 0x44, 0x55,
4694 0x42, 0x40, 0x68, 0x5c, 0x3e, 0x57, 0x5a, 0x41,
4695 0x30, 0x3d, 0x6a, 0x7a, 0x65, 0x6b, 0x6e, 0x4b,
4696 0x53, 0x6c, 0x6a, 0x5b, 0x5f, 0x63, 0x5e, 0x61,
4697 0x68, 0x6d, 0x59, 0x53, 0x74, 0xb4, 0xcd, 0x9d,
4698 0x65, 0x6a, 0x4b, 0x3d, 0x9a, 0xb4, 0xb0, 0xb0,
4699 0xa1, 0xb7, 0xba, 0xb3, 0xff, 0xe2, 0x69, 0x11,
4700 0x2e, 0x3b, 0x3d, 0x33, 0x2e, 0x3a, 0x49, 0x4f,
4701 0x52, 0x70, 0x82, 0x5f, 0x4e, 0x63, 0x1e, 0x01,
4702 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5,
4703 0xf3, 0xf3, 0xf3, 0xf3, 0xf2, 0xf2, 0xf2, 0xf2,
4704 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4705 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4706 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4707 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4708 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4709 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4710 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4711 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4712 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed,
4713 0xeb, 0xef, 0xf0, 0xe6, 0xe7, 0xf0, 0xf0, 0xf2,
4714 0xe7, 0xe4, 0xc0, 0xbc, 0xa5, 0xb4, 0xb7, 0x9d,
4715 0xcf, 0xb3, 0xad, 0xc2, 0xe6, 0xe8, 0xf1, 0xef,
4716 0xec, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xeb, 0xeb,
4717 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4718 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4719 0xea, 0xe8, 0xeb, 0xf1, 0xed, 0xe2, 0xde, 0xe1,
4720 0xe5, 0xdb, 0xd3, 0xd5, 0xc1, 0x84, 0xad, 0xc9,
4721 0x97, 0xa1, 0x9c, 0x97, 0x7d, 0xae, 0xbc, 0xcc,
4722 0xef, 0xea, 0xe5, 0xe4, 0xe6, 0xe8, 0xe7, 0xe5,
4723 0xe7, 0xe8, 0xe6, 0xdd, 0xea, 0xe3, 0xff, 0xea,
4724 0xf6, 0xb8, 0x7e, 0x96, 0xcc, 0xf9, 0xff, 0xd8,
4725 0xa2, 0xb6, 0xc0, 0xbe, 0x71, 0x67, 0x5b, 0x75,
4726 0x94, 0x9a, 0x90, 0x83, 0x69, 0x62, 0x73, 0x61,
4727 0x42, 0x74, 0x79, 0x87, 0x79, 0x8c, 0x7b, 0x8a,
4728 0x86, 0x76, 0x62, 0x57, 0x5d, 0x69, 0x6f, 0x6f,
4729 0x6c, 0x69, 0x61, 0x61, 0x74, 0x89, 0x86, 0x75,
4730 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, 0x80,
4731 0x9c, 0x93, 0x85, 0x7a, 0x77, 0x7c, 0x85, 0x8c,
4732 0x79, 0x76, 0x7c, 0x88, 0x86, 0x77, 0x6d, 0x6f,
4733 0x52, 0x62, 0x67, 0x50, 0x34, 0x38, 0x62, 0x8c,
4734 0x95, 0x8b, 0x5d, 0x51, 0x63, 0x71, 0x7b, 0x6e,
4735 0x40, 0x4b, 0x46, 0x44, 0x53, 0x5b, 0x5c, 0x66,
4736 0x5f, 0x61, 0x7a, 0x7f, 0x7b, 0x75, 0x6f, 0x88,
4737 0x8d, 0x93, 0xbf, 0x70, 0x49, 0x53, 0x50, 0x53,
4738 0x61, 0x37, 0x4f, 0x6a, 0x57, 0x3a, 0x33, 0x54,
4739 0x58, 0x43, 0x3e, 0x5e, 0x56, 0x3d, 0x20, 0x63,
4740 0x78, 0x65, 0x5e, 0x5c, 0x57, 0x61, 0x6b, 0x64,
4741 0x65, 0x5b, 0x5e, 0x4c, 0x4d, 0x7c, 0xb4, 0xe8,
4742 0x89, 0x4b, 0x4f, 0x42, 0xa8, 0xcb, 0xb8, 0xcd,
4743 0xbf, 0xbd, 0xa9, 0xb5, 0xf1, 0xf1, 0x85, 0x13,
4744 0x24, 0x3b, 0x33, 0x32, 0x2e, 0x3d, 0x38, 0x45,
4745 0x32, 0x3e, 0x52, 0x47, 0x57, 0x5d, 0x26, 0x0f,
4746 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
4747 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4748 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4749 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4750 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4751 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4752 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4753 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4754 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4755 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4756 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4757 0xf3, 0xf1, 0xea, 0xe9, 0xe2, 0xec, 0xfb, 0xe3,
4758 0xf8, 0xdc, 0xbb, 0xb6, 0x8e, 0x91, 0x9e, 0x92,
4759 0xd5, 0xc6, 0xa7, 0xb2, 0xe7, 0xe7, 0xea, 0xea,
4760 0xec, 0xec, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4761 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4762 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4763 0xea, 0xe9, 0xea, 0xee, 0xed, 0xe6, 0xe1, 0xdf,
4764 0xed, 0xe0, 0xd2, 0xd4, 0xc5, 0x84, 0xa3, 0xcf,
4765 0x84, 0x7b, 0x8b, 0xd0, 0xa9, 0xb0, 0xe8, 0xe9,
4766 0xe4, 0xe6, 0xe7, 0xe4, 0xe1, 0xe0, 0xe4, 0xe8,
4767 0xe1, 0xe6, 0xdf, 0xe8, 0xfd, 0xc4, 0xd3, 0xf3,
4768 0xff, 0xb5, 0xa9, 0xd6, 0xd3, 0xf9, 0xf8, 0xe1,
4769 0xa4, 0xaf, 0xc5, 0x9e, 0x64, 0x5a, 0x65, 0x70,
4770 0x86, 0x77, 0x73, 0x8b, 0x83, 0x70, 0x7d, 0x78,
4771 0x4c, 0xac, 0x78, 0x4a, 0x69, 0x80, 0x59, 0x87,
4772 0x79, 0x6a, 0x59, 0x55, 0x5f, 0x6c, 0x6f, 0x6d,
4773 0x6e, 0x65, 0x60, 0x6d, 0x87, 0x96, 0x8a, 0x74,
4774 0x6f, 0x7a, 0x83, 0x80, 0x74, 0x6c, 0x6d, 0x72,
4775 0x87, 0x7f, 0x75, 0x6e, 0x6e, 0x71, 0x74, 0x75,
4776 0x73, 0x78, 0x88, 0x95, 0x8f, 0x78, 0x67, 0x63,
4777 0x68, 0x5c, 0x50, 0x50, 0x56, 0x55, 0x49, 0x3c,
4778 0x46, 0x5b, 0x60, 0x6c, 0x71, 0x75, 0x82, 0x71,
4779 0x41, 0x6a, 0x5f, 0x34, 0x44, 0x76, 0x80, 0x6d,
4780 0x5e, 0x3d, 0x73, 0x94, 0x72, 0x69, 0x80, 0x97,
4781 0x72, 0x75, 0x9b, 0x51, 0x33, 0x44, 0x45, 0x44,
4782 0x55, 0x37, 0x48, 0x50, 0x4b, 0x57, 0x61, 0x77,
4783 0x5a, 0x39, 0x38, 0x72, 0x82, 0x6a, 0x36, 0x60,
4784 0x86, 0x75, 0x6b, 0x63, 0x58, 0x5f, 0x6c, 0x6b,
4785 0x60, 0x70, 0x62, 0x72, 0x70, 0x65, 0xa4, 0xdf,
4786 0xb8, 0x6a, 0x39, 0x3a, 0xa2, 0xb4, 0xa3, 0x9b,
4787 0xb3, 0xb8, 0xad, 0xba, 0xe9, 0xe6, 0x8e, 0x37,
4788 0x3d, 0x33, 0x39, 0x62, 0x71, 0x8a, 0x7d, 0x68,
4789 0x7d, 0x7d, 0x72, 0x66, 0x95, 0x91, 0x2e, 0x06,
4790 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
4791 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
4792 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4793 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4794 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4795 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4796 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4797 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4798 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4799 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4800 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xea,
4801 0xea, 0xf0, 0xe8, 0xf1, 0xe1, 0xd8, 0xf1, 0xdd,
4802 0xf0, 0xe5, 0xcf, 0xb9, 0xa0, 0xba, 0xb8, 0x8b,
4803 0xd0, 0xce, 0xa5, 0xa9, 0xd3, 0xc9, 0xde, 0xed,
4804 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4805 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4806 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4807 0xeb, 0xeb, 0xea, 0xe9, 0xec, 0xec, 0xe5, 0xdc,
4808 0xe1, 0xf2, 0xd9, 0xb1, 0xa9, 0x8f, 0xa2, 0xc1,
4809 0x64, 0x8d, 0x9d, 0xcb, 0xb3, 0xaf, 0xe1, 0xce,
4810 0xdd, 0xe0, 0xe4, 0xe4, 0xe1, 0xdf, 0xe1, 0xe3,
4811 0xdd, 0xec, 0xdd, 0xff, 0xd3, 0x5d, 0xc5, 0xff,
4812 0xff, 0xb4, 0x3a, 0x2d, 0x12, 0xa3, 0xff, 0xe0,
4813 0xa9, 0xc7, 0xa9, 0x70, 0x5f, 0x5f, 0x7b, 0x91,
4814 0x84, 0x7b, 0x6e, 0x75, 0x74, 0x79, 0x87, 0x71,
4815 0x92, 0x6e, 0x48, 0x74, 0x8f, 0x7e, 0x60, 0x86,
4816 0x76, 0x6c, 0x5f, 0x55, 0x51, 0x55, 0x5e, 0x66,
4817 0x66, 0x5a, 0x59, 0x6a, 0x7a, 0x77, 0x65, 0x55,
4818 0x67, 0x75, 0x84, 0x87, 0x7e, 0x74, 0x6f, 0x70,
4819 0x70, 0x6b, 0x68, 0x6c, 0x77, 0x7f, 0x81, 0x80,
4820 0x7b, 0x7a, 0x79, 0x74, 0x64, 0x52, 0x4c, 0x4f,
4821 0x6e, 0x6a, 0x61, 0x54, 0x47, 0x3d, 0x3a, 0x3a,
4822 0x4b, 0x5d, 0x6f, 0x7a, 0x64, 0x60, 0x72, 0x59,
4823 0x43, 0x54, 0x4f, 0x45, 0x4f, 0x55, 0x50, 0x51,
4824 0x74, 0x57, 0x6b, 0x82, 0x84, 0x7d, 0x7b, 0x96,
4825 0x85, 0x5f, 0x81, 0x6f, 0x64, 0x4a, 0x35, 0x39,
4826 0x41, 0x45, 0x68, 0x69, 0x64, 0x72, 0x5c, 0x43,
4827 0x57, 0x52, 0x51, 0x61, 0x5d, 0x69, 0x59, 0x85,
4828 0x63, 0x66, 0x73, 0x79, 0x70, 0x68, 0x63, 0x59,
4829 0x57, 0x5e, 0x61, 0x65, 0x66, 0x51, 0x60, 0xa4,
4830 0xd5, 0xa7, 0x34, 0x1d, 0xa1, 0xcf, 0xc6, 0xb6,
4831 0xbc, 0xbf, 0xae, 0xb4, 0xe1, 0xee, 0xbc, 0x87,
4832 0x9a, 0xa1, 0x9b, 0x93, 0x74, 0x7d, 0x6e, 0x55,
4833 0x67, 0x71, 0x68, 0x43, 0x4f, 0x4b, 0x14, 0x17,
4834 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2,
4835 0xf2, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf5,
4836 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4837 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4838 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4839 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4840 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4841 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4842 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4843 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4844 0xed, 0xed, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xeb,
4845 0xe2, 0xea, 0xe1, 0xed, 0xe7, 0xd0, 0xd9, 0xda,
4846 0xe3, 0xdd, 0xcb, 0xae, 0xa2, 0xc0, 0xbc, 0x8b,
4847 0xc0, 0xc7, 0xaa, 0xb8, 0xd4, 0xc2, 0xe8, 0xf8,
4848 0xe9, 0xe9, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb,
4849 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4850 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4851 0xec, 0xed, 0xe9, 0xe6, 0xeb, 0xf0, 0xe8, 0xdb,
4852 0xe5, 0xe5, 0xd8, 0xd5, 0xd4, 0x9c, 0x90, 0xd2,
4853 0x5b, 0x3f, 0x8a, 0xef, 0xcc, 0xa3, 0xe1, 0xec,
4854 0xeb, 0xe4, 0xdc, 0xd9, 0xdc, 0xe1, 0xe4, 0xe4,
4855 0xe1, 0xe3, 0xff, 0xce, 0x50, 0x4d, 0xe8, 0xf8,
4856 0xfb, 0xcf, 0x30, 0x5c, 0x7e, 0xe6, 0xf9, 0xda,
4857 0xa6, 0xc8, 0x85, 0x71, 0x6b, 0x70, 0x76, 0x78,
4858 0x69, 0x7f, 0x8a, 0x91, 0x7e, 0x64, 0x49, 0x0f,
4859 0x2f, 0x76, 0x8f, 0x86, 0x85, 0x85, 0x76, 0x7a,
4860 0x7c, 0x71, 0x63, 0x59, 0x53, 0x53, 0x5f, 0x6c,
4861 0x75, 0x65, 0x5e, 0x64, 0x64, 0x5b, 0x5d, 0x68,
4862 0x79, 0x73, 0x6c, 0x69, 0x6b, 0x6c, 0x6b, 0x68,
4863 0x6b, 0x66, 0x65, 0x6e, 0x7f, 0x8c, 0x91, 0x90,
4864 0x85, 0x7f, 0x74, 0x64, 0x57, 0x56, 0x63, 0x72,
4865 0x6c, 0x6c, 0x67, 0x5a, 0x49, 0x3f, 0x3e, 0x40,
4866 0x46, 0x4c, 0x63, 0x77, 0x64, 0x6d, 0x89, 0x67,
4867 0x54, 0x5f, 0x55, 0x4b, 0x5a, 0x67, 0x6d, 0x77,
4868 0x74, 0x72, 0x7a, 0x77, 0x87, 0x90, 0x82, 0x8e,
4869 0x85, 0x6e, 0x75, 0x49, 0x54, 0x6a, 0x5e, 0x36,
4870 0x42, 0x45, 0x5f, 0x55, 0x50, 0x65, 0x52, 0x34,
4871 0x3f, 0x55, 0x4f, 0x3c, 0x41, 0x84, 0x7a, 0x75,
4872 0x7b, 0x69, 0x5b, 0x5f, 0x6c, 0x74, 0x6c, 0x5e,
4873 0x60, 0x5f, 0x65, 0x5b, 0x65, 0x6a, 0x5c, 0x7a,
4874 0xbb, 0xf2, 0x94, 0x31, 0x80, 0xb3, 0xa4, 0xb6,
4875 0xae, 0xa7, 0xb4, 0xda, 0xd9, 0x95, 0x5e, 0x63,
4876 0x1b, 0x2f, 0x28, 0x33, 0x3b, 0x47, 0x2e, 0x26,
4877 0x40, 0x4d, 0x6f, 0x62, 0x53, 0x48, 0x1b, 0x0f,
4878 0xf5, 0xf4, 0xf4, 0xf3, 0xf2, 0xf2, 0xf1, 0xf1,
4879 0xf0, 0xf0, 0xf1, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4,
4880 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4881 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4882 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4883 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4884 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4885 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4886 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4887 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4888 0xf0, 0xef, 0xef, 0xee, 0xed, 0xed, 0xec, 0xec,
4889 0xed, 0xe5, 0xdd, 0xde, 0xe3, 0xdf, 0xd4, 0xd0,
4890 0xd7, 0xf0, 0xec, 0xaf, 0x8a, 0xb6, 0xc7, 0x7c,
4891 0xb2, 0xc5, 0xa1, 0xa1, 0xc5, 0xc3, 0xec, 0xfb,
4892 0xe8, 0xe8, 0xe9, 0xe9, 0xea, 0xeb, 0xeb, 0xec,
4893 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4894 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4895 0xed, 0xed, 0xe9, 0xe5, 0xea, 0xf1, 0xea, 0xde,
4896 0xe1, 0xe0, 0xd2, 0xc8, 0xd0, 0xb6, 0xa8, 0xf9,
4897 0x8d, 0x5c, 0x8b, 0xbb, 0x92, 0x77, 0xd9, 0xe5,
4898 0xe8, 0xe5, 0xe2, 0xe2, 0xe5, 0xe5, 0xe2, 0xdf,
4899 0xe6, 0xf0, 0xcf, 0x8d, 0x6f, 0x7c, 0xe2, 0xf5,
4900 0xfe, 0xd9, 0x7b, 0xad, 0xb2, 0xfc, 0xf0, 0xf2,
4901 0xcb, 0x9c, 0x69, 0x66, 0x64, 0x86, 0x95, 0x88,
4902 0x84, 0x79, 0x74, 0x83, 0x71, 0x5d, 0x6e, 0x6d,
4903 0x70, 0x6e, 0x6d, 0x7d, 0x9d, 0x8f, 0x7a, 0x7a,
4904 0x6e, 0x68, 0x69, 0x72, 0x74, 0x6b, 0x61, 0x60,
4905 0x5a, 0x59, 0x67, 0x7e, 0x7f, 0x70, 0x70, 0x7d,
4906 0x70, 0x6b, 0x67, 0x6a, 0x72, 0x76, 0x73, 0x6f,
4907 0x75, 0x6e, 0x68, 0x6a, 0x73, 0x7d, 0x83, 0x85,
4908 0x81, 0x80, 0x7a, 0x6d, 0x63, 0x62, 0x67, 0x6c,
4909 0x70, 0x69, 0x5d, 0x51, 0x48, 0x44, 0x45, 0x47,
4910 0x43, 0x53, 0x74, 0x8a, 0x6d, 0x65, 0x70, 0x44,
4911 0x5a, 0x5e, 0x50, 0x45, 0x4e, 0x52, 0x53, 0x5f,
4912 0x3f, 0x4f, 0x94, 0x98, 0x68, 0x6e, 0x85, 0x8b,
4913 0x84, 0x59, 0x58, 0x43, 0x45, 0x3e, 0x46, 0x43,
4914 0x5d, 0x5d, 0x7d, 0x7c, 0x6f, 0x71, 0x56, 0x3e,
4915 0x56, 0x70, 0x68, 0x3e, 0x29, 0x6a, 0x63, 0x52,
4916 0x6d, 0x79, 0x7f, 0x79, 0x6d, 0x63, 0x63, 0x69,
4917 0x68, 0x71, 0x60, 0x66, 0x6d, 0x69, 0x6d, 0x53,
4918 0x86, 0xc8, 0xb7, 0x5b, 0x75, 0xc1, 0xb2, 0xd0,
4919 0xaa, 0xc6, 0xa8, 0x79, 0x92, 0xbc, 0xa0, 0x63,
4920 0x6a, 0xb6, 0xa7, 0x63, 0x4e, 0x81, 0x6e, 0x3e,
4921 0x49, 0x42, 0x5a, 0x50, 0x45, 0x42, 0x1b, 0x0d,
4922 0xf5, 0xf4, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, 0xef,
4923 0xed, 0xee, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3,
4924 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4925 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4926 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4927 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4928 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4929 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4930 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4931 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4932 0xf0, 0xef, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea,
4933 0xf4, 0xe8, 0xeb, 0xdd, 0xce, 0xda, 0xdb, 0xcb,
4934 0xda, 0xd2, 0xd6, 0xc1, 0x91, 0x95, 0xc3, 0x92,
4935 0x98, 0xd2, 0xac, 0x89, 0xb0, 0xb3, 0xce, 0xe8,
4936 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xeb, 0xec,
4937 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4938 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4939 0xee, 0xec, 0xe9, 0xe7, 0xeb, 0xee, 0xea, 0xe3,
4940 0xe7, 0xe1, 0xd9, 0xcb, 0xc8, 0xb6, 0x96, 0xe4,
4941 0x9d, 0x87, 0xba, 0xff, 0xee, 0x8d, 0xce, 0xd5,
4942 0xe1, 0xe5, 0xea, 0xea, 0xe6, 0xe4, 0xe4, 0xe5,
4943 0xfb, 0xe8, 0x63, 0x4e, 0x81, 0x79, 0xe4, 0xfc,
4944 0xf9, 0xd5, 0x86, 0x9c, 0x87, 0xca, 0xf1, 0xff,
4945 0xcb, 0x68, 0x6b, 0x5a, 0x77, 0x87, 0x7a, 0x72,
4946 0x8c, 0x8b, 0x85, 0x87, 0x73, 0x69, 0x80, 0x7d,
4947 0x69, 0x74, 0x83, 0x76, 0x82, 0x78, 0x78, 0x6c,
4948 0x67, 0x5f, 0x5f, 0x67, 0x67, 0x63, 0x6c, 0x7c,
4949 0x7b, 0x6d, 0x68, 0x6f, 0x6d, 0x63, 0x68, 0x78,
4950 0x61, 0x62, 0x63, 0x62, 0x60, 0x60, 0x62, 0x64,
4951 0x79, 0x76, 0x71, 0x6d, 0x6d, 0x72, 0x7a, 0x7f,
4952 0x8a, 0x8b, 0x85, 0x79, 0x71, 0x6d, 0x65, 0x5c,
4953 0x67, 0x68, 0x61, 0x4e, 0x3a, 0x36, 0x44, 0x53,
4954 0x2c, 0x4f, 0x74, 0x86, 0x69, 0x5a, 0x66, 0x4c,
4955 0x42, 0x49, 0x47, 0x4d, 0x5c, 0x5c, 0x5b, 0x68,
4956 0x6e, 0x4e, 0x6a, 0x8e, 0x9d, 0x9c, 0x77, 0x5a,
4957 0x4e, 0x66, 0x79, 0x47, 0x39, 0x4a, 0x6b, 0x59,
4958 0x60, 0x56, 0x6f, 0x67, 0x50, 0x4e, 0x42, 0x41,
4959 0x3c, 0x48, 0x57, 0x51, 0x39, 0x6c, 0x77, 0x88,
4960 0x7b, 0x75, 0x68, 0x64, 0x6e, 0x6f, 0x67, 0x64,
4961 0x62, 0x61, 0x64, 0x6d, 0x6c, 0x66, 0x60, 0x4f,
4962 0x5c, 0x82, 0xd1, 0xc2, 0x99, 0xc2, 0xa0, 0xa3,
4963 0xbc, 0xbd, 0xbe, 0xd9, 0xfc, 0xe7, 0xa5, 0x77,
4964 0x8a, 0x82, 0x6a, 0x53, 0x2e, 0x3c, 0x39, 0x2c,
4965 0x32, 0x3d, 0x56, 0x4b, 0x49, 0x3a, 0x0b, 0x0f,
4966 0xf5, 0xf5, 0xf4, 0xf2, 0xf1, 0xf0, 0xef, 0xee,
4967 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
4968 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4969 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4970 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4971 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4972 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4973 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4974 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4975 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4976 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe7, 0xe7, 0xe6,
4977 0xeb, 0xec, 0xf1, 0xe8, 0xc8, 0xbe, 0xcb, 0xc5,
4978 0xd5, 0xda, 0xcb, 0xb5, 0x94, 0x89, 0xc8, 0xac,
4979 0x7f, 0xca, 0xbf, 0x9d, 0xbb, 0xb1, 0xbb, 0xe0,
4980 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xeb, 0xec, 0xec,
4981 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4982 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4983 0xee, 0xeb, 0xe9, 0xeb, 0xeb, 0xe9, 0xe8, 0xea,
4984 0xd4, 0xeb, 0xe5, 0xae, 0xa6, 0xd0, 0xb3, 0xdd,
4985 0x91, 0x59, 0xa8, 0xf1, 0xdc, 0x88, 0xda, 0xd8,
4986 0xe6, 0xe5, 0xe1, 0xdc, 0xdb, 0xe2, 0xee, 0xf7,
4987 0xd9, 0x66, 0x52, 0x73, 0x6b, 0x6b, 0xd9, 0xf7,
4988 0xf6, 0xdb, 0x91, 0xc8, 0xf0, 0xe7, 0xe9, 0xff,
4989 0xb2, 0x5a, 0x6b, 0x65, 0x90, 0x8c, 0x75, 0x80,
4990 0x6c, 0x7c, 0x79, 0x74, 0x67, 0x6b, 0x77, 0x59,
4991 0x64, 0x8c, 0x8b, 0x70, 0x95, 0x5e, 0x40, 0x59,
4992 0x7d, 0x6e, 0x69, 0x72, 0x74, 0x6c, 0x6b, 0x73,
4993 0x66, 0x64, 0x6a, 0x71, 0x6e, 0x67, 0x6d, 0x7a,
4994 0x8d, 0x81, 0x6f, 0x60, 0x5a, 0x5c, 0x65, 0x6b,
4995 0x7b, 0x7f, 0x80, 0x79, 0x6f, 0x6b, 0x71, 0x78,
4996 0x88, 0x88, 0x82, 0x7d, 0x83, 0x8a, 0x83, 0x75,
4997 0x5c, 0x5e, 0x5e, 0x56, 0x4c, 0x46, 0x48, 0x4d,
4998 0x44, 0x64, 0x6f, 0x72, 0x61, 0x55, 0x60, 0x54,
4999 0x48, 0x5e, 0x50, 0x34, 0x41, 0x5e, 0x66, 0x62,
5000 0x51, 0x50, 0x5a, 0x5d, 0x66, 0x5b, 0x3e, 0x4d,
5001 0x4b, 0x47, 0x5c, 0x56, 0x4f, 0x48, 0x84, 0xa3,
5002 0x32, 0x42, 0x76, 0x79, 0x60, 0x59, 0x49, 0x43,
5003 0x48, 0x2d, 0x36, 0x5a, 0x66, 0x93, 0x7a, 0x67,
5004 0x6d, 0x6d, 0x62, 0x5f, 0x6a, 0x6b, 0x64, 0x68,
5005 0x63, 0x5a, 0x6a, 0x64, 0x68, 0x6d, 0x56, 0x65,
5006 0x45, 0x77, 0xc6, 0xe1, 0xb2, 0xd8, 0xe6, 0xff,
5007 0xff, 0xfc, 0xd0, 0x9b, 0x6f, 0x44, 0x32, 0x3f,
5008 0x2f, 0x36, 0x3e, 0x43, 0x1d, 0x21, 0x30, 0x43,
5009 0x3a, 0x38, 0x4b, 0x46, 0x4b, 0x41, 0x13, 0x12,
5010 0xf5, 0xf5, 0xf4, 0xf2, 0xf1, 0xef, 0xee, 0xee,
5011 0xe8, 0xe9, 0xea, 0xeb, 0xed, 0xee, 0xef, 0xf0,
5012 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
5013 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
5014 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
5015 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
5016 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
5017 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
5018 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
5019 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5020 0xe9, 0xe9, 0xe8, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2,
5021 0xe5, 0xec, 0xe2, 0xef, 0xd9, 0xab, 0xb0, 0xb7,
5022 0xcd, 0xf1, 0xd7, 0xc2, 0xa6, 0x6e, 0xa1, 0xae,
5023 0x7f, 0xa9, 0xa6, 0x96, 0xb7, 0xb3, 0xc7, 0xf7,
5024 0xe5, 0xe5, 0xe6, 0xe8, 0xe9, 0xeb, 0xec, 0xec,
5025 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5026 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5027 0xef, 0xe9, 0xe9, 0xed, 0xeb, 0xe6, 0xe7, 0xee,
5028 0xdd, 0xdd, 0xdf, 0xbb, 0xa7, 0xb5, 0x88, 0xbb,
5029 0x72, 0x4a, 0xb5, 0xeb, 0xf7, 0xa6, 0xc4, 0xd8,
5030 0xd9, 0xd9, 0xdb, 0xe2, 0xea, 0xee, 0xee, 0xeb,
5031 0x6a, 0x59, 0x84, 0x94, 0x7e, 0x93, 0xfc, 0xf7,
5032 0xe7, 0xd7, 0xcf, 0xc3, 0xcc, 0xf3, 0xff, 0xfc,
5033 0xae, 0x63, 0x60, 0x7b, 0x7d, 0x7c, 0x81, 0x86,
5034 0x93, 0x82, 0x75, 0x83, 0x78, 0x65, 0x68, 0x55,
5035 0x77, 0x33, 0x39, 0x58, 0x97, 0xb6, 0xf8, 0xff,
5036 0xff, 0xbd, 0x79, 0x67, 0x71, 0x6f, 0x63, 0x5a,
5037 0x53, 0x61, 0x72, 0x75, 0x66, 0x57, 0x5d, 0x6b,
5038 0x70, 0x6a, 0x69, 0x72, 0x7f, 0x83, 0x79, 0x6d,
5039 0x83, 0x8b, 0x8e, 0x81, 0x6b, 0x5b, 0x59, 0x5e,
5040 0x5d, 0x5e, 0x5c, 0x5d, 0x69, 0x72, 0x64, 0x4d,
5041 0x60, 0x62, 0x5e, 0x51, 0x44, 0x48, 0x5b, 0x6e,
5042 0x6d, 0x81, 0x72, 0x6d, 0x6b, 0x5d, 0x54, 0x41,
5043 0x43, 0x3b, 0x37, 0x49, 0x59, 0x4e, 0x51, 0x6f,
5044 0x5e, 0x4a, 0x58, 0x43, 0x2f, 0x52, 0x64, 0x5a,
5045 0x47, 0x40, 0x51, 0x51, 0x4d, 0x38, 0x5b, 0x61,
5046 0x53, 0x60, 0x81, 0x67, 0x42, 0x47, 0x4a, 0x4d,
5047 0x5b, 0x3b, 0x33, 0x41, 0x49, 0x88, 0x7d, 0x68,
5048 0x70, 0x77, 0x6f, 0x6a, 0x70, 0x69, 0x5f, 0x64,
5049 0x64, 0x6e, 0x4c, 0x3e, 0x44, 0x34, 0x2e, 0x31,
5050 0x5b, 0x99, 0x9f, 0xca, 0xd0, 0xc1, 0x64, 0x2f,
5051 0x1c, 0x13, 0x0b, 0x22, 0x47, 0x4c, 0x45, 0x50,
5052 0x4a, 0x49, 0x2f, 0x34, 0x38, 0x45, 0x3e, 0x4e,
5053 0x4c, 0x37, 0x54, 0x4d, 0x35, 0x31, 0x19, 0x12,
5054 0xfb, 0xf6, 0xf7, 0xe5, 0xf0, 0xea, 0xec, 0xf3,
5055 0xef, 0xe9, 0xf4, 0xf7, 0xec, 0xe5, 0xe7, 0xf2,
5056 0xe8, 0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xec, 0xec,
5057 0xf1, 0xf1, 0xf0, 0xef, 0xef, 0xee, 0xed, 0xed,
5058 0xef, 0xf0, 0xf1, 0xf1, 0xf0, 0xed, 0xeb, 0xe9,
5059 0xed, 0xec, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xeb,
5060 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xec, 0xeb,
5061 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
5062 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5063 0xf4, 0xed, 0xe8, 0xe9, 0xeb, 0xe9, 0xe7, 0xe8,
5064 0xde, 0xde, 0xea, 0xea, 0xd6, 0xde, 0xd2, 0xe0,
5065 0xdf, 0xdf, 0xe3, 0xe8, 0xe0, 0xbe, 0xac, 0xc0,
5066 0xcc, 0xc4, 0xfc, 0xde, 0xb9, 0x95, 0x92, 0x87,
5067 0x95, 0xab, 0xae, 0x8b, 0xc4, 0xbc, 0xc8, 0xd8,
5068 0xe1, 0xee, 0xef, 0xed, 0xf4, 0xed, 0xe6, 0xef,
5069 0xe4, 0xdb, 0xe3, 0xef, 0xec, 0xe7, 0xea, 0xeb,
5070 0xf4, 0xeb, 0xef, 0xf1, 0xe7, 0xea, 0xf0, 0xe9,
5071 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5072 0xe7, 0xc9, 0xea, 0xeb, 0xdd, 0xaf, 0x7b, 0xf4,
5073 0xaa, 0x2c, 0xa8, 0xfb, 0xee, 0xb2, 0xc9, 0xef,
5074 0xf5, 0xd3, 0xdd, 0xe8, 0xdf, 0xf0, 0xd6, 0x7b,
5075 0x79, 0x92, 0x98, 0x77, 0x78, 0xc2, 0xf3, 0xde,
5076 0xd0, 0xec, 0xf6, 0xf8, 0xff, 0xe0, 0x91, 0x50,
5077 0x58, 0x73, 0x78, 0x90, 0x8d, 0x78, 0x81, 0x74,
5078 0x7f, 0x75, 0x7d, 0x55, 0x37, 0x25, 0x1c, 0x5f,
5079 0xab, 0xff, 0xfd, 0xff, 0xd8, 0xa0, 0xe9, 0xa3,
5080 0x5e, 0x5d, 0x5d, 0x63, 0x6d, 0x6f, 0x62, 0x52,
5081 0x69, 0x64, 0x6f, 0x86, 0x8d, 0x7d, 0x6c, 0x68,
5082 0x61, 0x5d, 0x65, 0x7b, 0x88, 0x82, 0x76, 0x6f,
5083 0x68, 0x63, 0x66, 0x70, 0x73, 0x6f, 0x70, 0x77,
5084 0x68, 0x54, 0x49, 0x55, 0x67, 0x6c, 0x67, 0x61,
5085 0x5b, 0x5f, 0x5a, 0x4f, 0x46, 0x41, 0x51, 0x6c,
5086 0x48, 0x4b, 0x74, 0x72, 0x66, 0x69, 0x4e, 0x45,
5087 0x3b, 0x30, 0x4b, 0x6f, 0x72, 0x6c, 0x60, 0x49,
5088 0x56, 0x61, 0x5c, 0x58, 0x38, 0x34, 0x65, 0x6b,
5089 0x5f, 0x39, 0x35, 0x3a, 0x32, 0x4c, 0x64, 0x53,
5090 0x32, 0x26, 0x66, 0x7b, 0x31, 0x55, 0x44, 0x2f,
5091 0x43, 0x64, 0x7a, 0x79, 0x7b, 0x94, 0x7e, 0x6b,
5092 0x71, 0x78, 0x76, 0x6b, 0x62, 0x5e, 0x57, 0x4e,
5093 0x3f, 0x37, 0x46, 0x7e, 0xc6, 0xf6, 0xfd, 0xf3,
5094 0xe5, 0x9d, 0x67, 0xab, 0xdb, 0xc5, 0x82, 0x00,
5095 0x21, 0x3b, 0x35, 0x39, 0x37, 0x32, 0x42, 0x36,
5096 0x38, 0x34, 0x3b, 0x42, 0x37, 0x28, 0x32, 0x4c,
5097 0x54, 0x53, 0x4e, 0x5f, 0x4e, 0x40, 0x1f, 0x14,
5098 0xfb, 0xea, 0xed, 0xee, 0xf3, 0xe3, 0xeb, 0xe3,
5099 0xef, 0xf2, 0xe4, 0xdf, 0xe8, 0xec, 0xed, 0xef,
5100 0xe7, 0xe8, 0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xeb,
5101 0xe8, 0xe8, 0xe8, 0xe7, 0xe6, 0xe5, 0xe5, 0xe5,
5102 0xeb, 0xec, 0xee, 0xef, 0xf0, 0xef, 0xed, 0xec,
5103 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xec, 0xec,
5104 0xf0, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xec, 0xeb,
5105 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5106 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5107 0xf2, 0xe5, 0xe9, 0xef, 0xe8, 0xe9, 0xe7, 0xd7,
5108 0xe9, 0xeb, 0xdf, 0xe3, 0xc7, 0xd6, 0xed, 0xe1,
5109 0xe6, 0xb8, 0xe7, 0xe6, 0xc6, 0xcb, 0xae, 0x9c,
5110 0x95, 0xce, 0xdb, 0xde, 0xd7, 0x8e, 0x7f, 0x94,
5111 0x8e, 0x9e, 0xc4, 0x93, 0xb7, 0xb7, 0xb3, 0xc3,
5112 0xf0, 0xee, 0xed, 0xeb, 0xe7, 0xe7, 0xeb, 0xeb,
5113 0xed, 0xe1, 0xe4, 0xee, 0xea, 0xe8, 0xeb, 0xea,
5114 0xed, 0xe6, 0xeb, 0xee, 0xe7, 0xeb, 0xf1, 0xeb,
5115 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5116 0xeb, 0xd3, 0xea, 0xe9, 0xd7, 0xb3, 0x4c, 0x7c,
5117 0xab, 0x53, 0xad, 0xf8, 0xff, 0xb0, 0xbf, 0xea,
5118 0xe8, 0xff, 0xdc, 0xd7, 0xff, 0xdc, 0x71, 0x54,
5119 0x69, 0x89, 0x9e, 0x86, 0x7d, 0xbf, 0xff, 0xff,
5120 0xf7, 0xea, 0xa6, 0x60, 0x5d, 0x72, 0x64, 0x49,
5121 0x46, 0x5c, 0x75, 0x77, 0x7b, 0x84, 0x7b, 0x6f,
5122 0x5f, 0x40, 0x31, 0x7c, 0xd2, 0xf3, 0xff, 0xf2,
5123 0xff, 0xfa, 0xd1, 0x7a, 0x64, 0x45, 0x21, 0x00,
5124 0x14, 0x35, 0x5e, 0x73, 0x75, 0x6f, 0x6d, 0x6e,
5125 0x80, 0x81, 0x88, 0x8c, 0x7e, 0x6c, 0x6c, 0x79,
5126 0x7f, 0x6a, 0x62, 0x74, 0x88, 0x86, 0x74, 0x65,
5127 0x5b, 0x5b, 0x65, 0x74, 0x76, 0x6b, 0x64, 0x65,
5128 0x6b, 0x62, 0x5f, 0x68, 0x6c, 0x64, 0x58, 0x52,
5129 0x60, 0x62, 0x54, 0x4a, 0x4b, 0x40, 0x36, 0x3e,
5130 0x47, 0x34, 0x38, 0x5a, 0x77, 0x5c, 0x3c, 0x56,
5131 0x3e, 0x30, 0x2b, 0x2a, 0x37, 0x5d, 0x69, 0x4d,
5132 0x63, 0x60, 0x53, 0x31, 0x46, 0x61, 0x43, 0x3e,
5133 0x3e, 0x3e, 0x5b, 0x5f, 0x39, 0x31, 0x3d, 0x31,
5134 0x48, 0x29, 0x6b, 0x94, 0x53, 0x60, 0x4e, 0x4d,
5135 0x36, 0x50, 0x43, 0x43, 0x5a, 0x76, 0x7a, 0x71,
5136 0x75, 0x5c, 0x40, 0x38, 0x4c, 0x75, 0xa4, 0xc5,
5137 0xee, 0xee, 0xed, 0xd2, 0x8a, 0x39, 0x19, 0x22,
5138 0x22, 0x24, 0x19, 0x4d, 0x93, 0xd5, 0xdf, 0x74,
5139 0x1a, 0x2a, 0x32, 0x32, 0x3d, 0x3d, 0x2e, 0x2d,
5140 0x3e, 0x36, 0x39, 0x40, 0x39, 0x2d, 0x35, 0x49,
5141 0x38, 0x34, 0x2e, 0x43, 0x3c, 0x36, 0x1a, 0x11,
5142 0xf9, 0xf2, 0xee, 0xe2, 0xe0, 0xec, 0xff, 0xcb,
5143 0xf0, 0xf3, 0xe7, 0xf3, 0xf0, 0xe0, 0xea, 0xe7,
5144 0xe6, 0xe7, 0xe7, 0xe8, 0xe9, 0xe9, 0xea, 0xea,
5145 0xe9, 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5,
5146 0xe7, 0xe8, 0xeb, 0xee, 0xef, 0xef, 0xee, 0xee,
5147 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
5148 0xef, 0xee, 0xee, 0xed, 0xed, 0xec, 0xec, 0xec,
5149 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5150 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5151 0xf0, 0xdc, 0xe5, 0xee, 0xda, 0xd7, 0xe4, 0xe1,
5152 0xf6, 0xe8, 0xd3, 0xd2, 0xb5, 0xd7, 0xf7, 0xdd,
5153 0xd9, 0xab, 0xce, 0xe7, 0xba, 0xbc, 0xde, 0xd8,
5154 0xaf, 0xdd, 0xc6, 0xd8, 0xe8, 0xbd, 0x95, 0xa2,
5155 0xb5, 0x8a, 0x90, 0x81, 0xaa, 0xa7, 0xce, 0xed,
5156 0xf4, 0xe7, 0xe9, 0xeb, 0xe1, 0xe7, 0xef, 0xe5,
5157 0xec, 0xdf, 0xe0, 0xe8, 0xe9, 0xeb, 0xed, 0xe8,
5158 0xea, 0xe6, 0xea, 0xec, 0xe7, 0xe9, 0xed, 0xe8,
5159 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5160 0xef, 0xdf, 0xe3, 0xe4, 0xd7, 0xe3, 0x90, 0xbd,
5161 0x72, 0x37, 0x88, 0xe1, 0xff, 0xae, 0xc1, 0xdd,
5162 0xf0, 0xe9, 0xe7, 0xeb, 0xc6, 0x76, 0x5b, 0x85,
5163 0x80, 0x85, 0x82, 0x6a, 0x67, 0x93, 0x9f, 0x76,
5164 0x6a, 0x62, 0x4b, 0x36, 0x22, 0x0b, 0x16, 0x3c,
5165 0x68, 0x68, 0x89, 0x73, 0x4c, 0x40, 0x46, 0x80,
5166 0xde, 0xfd, 0xf1, 0xf1, 0xfb, 0xfc, 0xdf, 0x8e,
5167 0x24, 0x00, 0x0d, 0x0e, 0x5c, 0x5d, 0x35, 0x6c,
5168 0x5d, 0x5e, 0x60, 0x62, 0x65, 0x6e, 0x80, 0x90,
5169 0xa3, 0x95, 0x88, 0x83, 0x7c, 0x73, 0x71, 0x75,
5170 0x6c, 0x62, 0x62, 0x70, 0x7b, 0x7c, 0x7c, 0x7f,
5171 0x7f, 0x78, 0x76, 0x7a, 0x77, 0x6d, 0x69, 0x6d,
5172 0x7a, 0x71, 0x6b, 0x6a, 0x65, 0x5b, 0x57, 0x5a,
5173 0x5a, 0x53, 0x4b, 0x4b, 0x44, 0x2b, 0x24, 0x39,
5174 0x48, 0x5e, 0x68, 0x67, 0x56, 0x52, 0x5b, 0x4b,
5175 0x43, 0x2b, 0x21, 0x29, 0x38, 0x56, 0x74, 0x7d,
5176 0x81, 0x5f, 0x42, 0x27, 0x3c, 0x50, 0x42, 0x5c,
5177 0x4a, 0x34, 0x3e, 0x51, 0x52, 0x58, 0x4e, 0x2a,
5178 0x4a, 0x2f, 0x74, 0x91, 0x4f, 0x52, 0x4e, 0x5e,
5179 0x3f, 0x40, 0x34, 0x51, 0x84, 0xa3, 0x9d, 0x60,
5180 0x6d, 0xb2, 0xec, 0xf8, 0xf5, 0xe5, 0xab, 0x67,
5181 0x2d, 0x19, 0x15, 0x28, 0x33, 0x29, 0x22, 0x26,
5182 0x24, 0x2d, 0x25, 0x3c, 0x5b, 0x9b, 0xdf, 0xc5,
5183 0x43, 0x23, 0x33, 0x38, 0x38, 0x38, 0x26, 0x3a,
5184 0x3d, 0x35, 0x37, 0x40, 0x3a, 0x28, 0x20, 0x25,
5185 0x29, 0x29, 0x2b, 0x4b, 0x4c, 0x44, 0x1c, 0x09,
5186 0xe8, 0xe1, 0xdf, 0xe2, 0xe6, 0xee, 0xe7, 0x73,
5187 0x96, 0xe5, 0xeb, 0xe3, 0xe2, 0xdf, 0xf0, 0xe5,
5188 0xe5, 0xe5, 0xe6, 0xe6, 0xe7, 0xe8, 0xe8, 0xe9,
5189 0xeb, 0xeb, 0xea, 0xe9, 0xe9, 0xe8, 0xe7, 0xe7,
5190 0xe7, 0xe8, 0xeb, 0xed, 0xed, 0xed, 0xec, 0xeb,
5191 0xed, 0xed, 0xee, 0xee, 0xef, 0xef, 0xf0, 0xf0,
5192 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xec,
5193 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xea, 0xea, 0xea,
5194 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5195 0xe8, 0xe5, 0xe0, 0xc7, 0xab, 0xb6, 0xd9, 0xec,
5196 0xf5, 0xe7, 0xec, 0xda, 0xb4, 0xd6, 0xe5, 0xe8,
5197 0xd6, 0xdc, 0xc6, 0xb8, 0xb5, 0xd4, 0xfd, 0xed,
5198 0x82, 0x88, 0xad, 0xcb, 0xaf, 0xba, 0x8c, 0x77,
5199 0xb3, 0x94, 0x83, 0x97, 0xb2, 0x95, 0xe5, 0xe8,
5200 0xea, 0xe3, 0xe6, 0xea, 0xe7, 0xea, 0xea, 0xe2,
5201 0xe1, 0xd8, 0xdc, 0xe6, 0xe9, 0xee, 0xee, 0xe4,
5202 0xed, 0xec, 0xed, 0xed, 0xea, 0xe9, 0xe8, 0xe5,
5203 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5204 0xe2, 0xdf, 0xdd, 0xec, 0xdb, 0xdb, 0x79, 0xab,
5205 0x9f, 0x4a, 0x96, 0xe0, 0xe7, 0xae, 0xda, 0xe8,
5206 0xdd, 0xd2, 0xff, 0xef, 0x7b, 0x50, 0x79, 0x85,
5207 0xa9, 0x74, 0x74, 0x9c, 0x9a, 0x78, 0x5a, 0x45,
5208 0x23, 0x22, 0x23, 0x44, 0x7a, 0x91, 0x89, 0x87,
5209 0x66, 0x46, 0x5b, 0x96, 0xe1, 0xff, 0xfd, 0xfc,
5210 0xff, 0xeb, 0xac, 0x4c, 0x18, 0x0c, 0x06, 0x17,
5211 0x3b, 0x43, 0x45, 0x50, 0x90, 0x7e, 0x6a, 0x78,
5212 0x78, 0x66, 0x5b, 0x64, 0x78, 0x8d, 0xa2, 0xb1,
5213 0xa3, 0x88, 0x6a, 0x5a, 0x5c, 0x65, 0x6f, 0x76,
5214 0x60, 0x60, 0x67, 0x6f, 0x6f, 0x6a, 0x70, 0x7b,
5215 0x80, 0x75, 0x6f, 0x6f, 0x6b, 0x64, 0x65, 0x6c,
5216 0x7c, 0x71, 0x69, 0x68, 0x66, 0x60, 0x61, 0x66,
5217 0x6d, 0x54, 0x43, 0x42, 0x59, 0x82, 0x87, 0x65,
5218 0x86, 0xa7, 0x8d, 0x63, 0x37, 0x28, 0x4c, 0x52,
5219 0x32, 0x3b, 0x56, 0x6b, 0x60, 0x4b, 0x4b, 0x57,
5220 0x51, 0x40, 0x3a, 0x66, 0x78, 0x70, 0x69, 0x39,
5221 0x3a, 0x32, 0x3d, 0x44, 0x3b, 0x3c, 0x3f, 0x31,
5222 0x4e, 0x4e, 0x95, 0x88, 0x3f, 0x49, 0x55, 0x64,
5223 0x3a, 0x31, 0x43, 0x44, 0x5c, 0x8a, 0xa5, 0x73,
5224 0x9d, 0x8e, 0x6c, 0x41, 0x21, 0x19, 0x22, 0x2c,
5225 0x23, 0x2c, 0x2f, 0x29, 0x27, 0x2e, 0x32, 0x31,
5226 0x17, 0x32, 0x2d, 0x20, 0x29, 0x74, 0xda, 0xec,
5227 0xca, 0x50, 0x21, 0x34, 0x45, 0x4c, 0x38, 0x28,
5228 0x49, 0x38, 0x2b, 0x2e, 0x32, 0x33, 0x38, 0x41,
5229 0x48, 0x3e, 0x34, 0x4e, 0x4f, 0x4c, 0x27, 0x15,
5230 0xed, 0xed, 0xe2, 0xd8, 0xdd, 0xe9, 0xe2, 0x6c,
5231 0x9c, 0xff, 0xf4, 0xd8, 0xe6, 0xdf, 0xe1, 0xe1,
5232 0xe3, 0xe4, 0xe4, 0xe5, 0xe6, 0xe6, 0xe7, 0xe7,
5233 0xe7, 0xe7, 0xe6, 0xe5, 0xe5, 0xe4, 0xe3, 0xe3,
5234 0xe9, 0xea, 0xeb, 0xec, 0xeb, 0xe9, 0xe7, 0xe5,
5235 0xeb, 0xec, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf0,
5236 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec,
5237 0xed, 0xed, 0xec, 0xeb, 0xeb, 0xea, 0xe9, 0xe9,
5238 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5239 0xea, 0xed, 0xf0, 0xf1, 0xd9, 0xaa, 0xa0, 0xc0,
5240 0xf8, 0xea, 0xe7, 0xdf, 0xc7, 0xd1, 0xc1, 0xc3,
5241 0xea, 0xd3, 0xab, 0x9f, 0xdb, 0xf9, 0xdd, 0xe9,
5242 0xc1, 0x72, 0x8b, 0xcb, 0xb5, 0xda, 0xaa, 0x55,
5243 0x72, 0x96, 0xad, 0xa1, 0xa0, 0x97, 0xf5, 0xe2,
5244 0xe7, 0xeb, 0xe6, 0xe3, 0xe8, 0xe4, 0xde, 0xe2,
5245 0xe2, 0xde, 0xe5, 0xeb, 0xeb, 0xed, 0xea, 0xdd,
5246 0xe9, 0xec, 0xed, 0xee, 0xef, 0xed, 0xe9, 0xe9,
5247 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5248 0xf1, 0xea, 0xcf, 0xdf, 0xe7, 0xeb, 0x7f, 0xa5,
5249 0xbe, 0x5d, 0xb4, 0xe8, 0xd1, 0xa0, 0xd7, 0xed,
5250 0xf1, 0xff, 0xd1, 0x7e, 0x69, 0x84, 0x84, 0x6a,
5251 0x70, 0x81, 0x93, 0x6c, 0x1d, 0x07, 0x31, 0x53,
5252 0x73, 0x93, 0x9a, 0x7b, 0x4e, 0x39, 0x62, 0xa7,
5253 0xf5, 0xff, 0xf2, 0xf8, 0xff, 0xf6, 0x9e, 0x26,
5254 0x03, 0x23, 0x26, 0x21, 0x32, 0x36, 0x45, 0x74,
5255 0x73, 0x79, 0x6a, 0x70, 0x87, 0x6b, 0x7b, 0x60,
5256 0x79, 0x6c, 0x6b, 0x77, 0x7e, 0x7c, 0x81, 0x8c,
5257 0x72, 0x79, 0x7a, 0x72, 0x6a, 0x6c, 0x76, 0x7f,
5258 0x5c, 0x58, 0x5d, 0x6e, 0x79, 0x78, 0x74, 0x76,
5259 0x77, 0x73, 0x76, 0x7f, 0x7e, 0x74, 0x70, 0x73,
5260 0x72, 0x69, 0x67, 0x6f, 0x73, 0x6b, 0x61, 0x5d,
5261 0x54, 0x4a, 0x54, 0x4c, 0x4a, 0x9a, 0xe4, 0xdb,
5262 0xbb, 0xae, 0x91, 0x83, 0x65, 0x60, 0x67, 0x2c,
5263 0x3e, 0x66, 0x80, 0x7a, 0x6d, 0x65, 0x5c, 0x54,
5264 0x7d, 0x82, 0x62, 0x46, 0x38, 0x4e, 0x67, 0x38,
5265 0x25, 0x40, 0x62, 0x65, 0x46, 0x35, 0x3c, 0x42,
5266 0x4b, 0x52, 0x98, 0x76, 0x36, 0x35, 0x37, 0x36,
5267 0x43, 0x35, 0x43, 0x20, 0x4c, 0x7b, 0x8e, 0x7e,
5268 0x3e, 0x2a, 0x23, 0x2c, 0x2e, 0x23, 0x22, 0x2d,
5269 0x24, 0x27, 0x21, 0x1c, 0x26, 0x35, 0x32, 0x22,
5270 0x23, 0x2a, 0x2a, 0x2a, 0x25, 0x45, 0x91, 0xc0,
5271 0xd8, 0x97, 0x4d, 0x45, 0x54, 0x5c, 0x6d, 0x66,
5272 0x4a, 0x38, 0x26, 0x22, 0x26, 0x28, 0x2b, 0x2e,
5273 0x3b, 0x3a, 0x3d, 0x5e, 0x5d, 0x4e, 0x1b, 0x00,
5274 0xe7, 0xdf, 0xdf, 0xec, 0xf5, 0xce, 0x9d, 0x45,
5275 0x64, 0xc0, 0xf4, 0xfa, 0xe9, 0xdd, 0xe7, 0xde,
5276 0xe2, 0xe2, 0xe3, 0xe3, 0xe4, 0xe5, 0xe5, 0xe6,
5277 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5, 0xe5,
5278 0xe9, 0xea, 0xeb, 0xeb, 0xe9, 0xe7, 0xe4, 0xe2,
5279 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xee, 0xef, 0xef,
5280 0xe9, 0xea, 0xea, 0xeb, 0xeb, 0xec, 0xec, 0xec,
5281 0xee, 0xee, 0xed, 0xec, 0xea, 0xe9, 0xe8, 0xe8,
5282 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5283 0xee, 0xe9, 0xe5, 0xf5, 0xf4, 0xbf, 0xa0, 0xbb,
5284 0xcf, 0xda, 0xd1, 0xe7, 0xdc, 0xd4, 0xcf, 0xc6,
5285 0xcd, 0xdf, 0xb3, 0x9a, 0xc4, 0xda, 0xcd, 0xc6,
5286 0xc9, 0x81, 0x74, 0xb7, 0xb4, 0xba, 0xb9, 0x76,
5287 0x69, 0x7d, 0xb0, 0x84, 0x88, 0xa5, 0xec, 0xf7,
5288 0xee, 0xf5, 0xe7, 0xda, 0xdd, 0xd8, 0xd6, 0xe6,
5289 0xea, 0xeb, 0xf1, 0xef, 0xe6, 0xe7, 0xe6, 0xda,
5290 0xe0, 0xe7, 0xe9, 0xeb, 0xf2, 0xef, 0xea, 0xed,
5291 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5292 0xe5, 0xee, 0xd9, 0xdb, 0xeb, 0xfb, 0x96, 0x9a,
5293 0xbe, 0x6e, 0xc8, 0xf5, 0xda, 0x9a, 0xc8, 0xef,
5294 0xfd, 0xd7, 0x7c, 0x4e, 0x75, 0x91, 0x88, 0x8e,
5295 0x7c, 0x7f, 0x87, 0x7e, 0x7a, 0x95, 0x99, 0x73,
5296 0x4d, 0x52, 0x77, 0xc7, 0xff, 0xff, 0xf2, 0xff,
5297 0xf5, 0xe9, 0x83, 0x24, 0x00, 0x12, 0x55, 0x58,
5298 0x79, 0xaa, 0x76, 0x65, 0x54, 0x3c, 0x74, 0x83,
5299 0x5f, 0x5a, 0x80, 0x97, 0x95, 0x87, 0xbb, 0xc3,
5300 0xa7, 0x85, 0x6e, 0x73, 0x77, 0x69, 0x5d, 0x5c,
5301 0x43, 0x52, 0x5e, 0x62, 0x64, 0x68, 0x65, 0x5d,
5302 0x53, 0x59, 0x69, 0x7a, 0x7e, 0x7a, 0x80, 0x8c,
5303 0x8b, 0x82, 0x7c, 0x7c, 0x77, 0x6c, 0x69, 0x6e,
5304 0x77, 0x6a, 0x64, 0x69, 0x6b, 0x65, 0x5c, 0x59,
5305 0x5f, 0x47, 0x49, 0x4c, 0x69, 0xbf, 0xd1, 0x7f,
5306 0xa4, 0xd3, 0x8e, 0x43, 0x3d, 0x23, 0x26, 0x63,
5307 0x43, 0x52, 0x55, 0x56, 0x61, 0x61, 0x5c, 0x60,
5308 0x50, 0x6a, 0x79, 0x51, 0x41, 0x42, 0x30, 0x45,
5309 0x30, 0x3a, 0x49, 0x4f, 0x49, 0x3e, 0x34, 0x2d,
5310 0x37, 0x3c, 0x8d, 0x7c, 0x5d, 0x58, 0x54, 0x4d,
5311 0x59, 0x56, 0x56, 0x4c, 0xa7, 0x9e, 0x87, 0x80,
5312 0x56, 0x3d, 0x2a, 0x31, 0x42, 0x44, 0x33, 0x23,
5313 0x25, 0x29, 0x31, 0x38, 0x39, 0x39, 0x3d, 0x44,
5314 0x59, 0x43, 0x48, 0x63, 0x58, 0x3b, 0x4e, 0x7c,
5315 0xb9, 0xce, 0x7a, 0x3f, 0x4b, 0x4f, 0x4b, 0x35,
5316 0x36, 0x31, 0x2f, 0x34, 0x3b, 0x3d, 0x39, 0x34,
5317 0x3b, 0x39, 0x37, 0x53, 0x50, 0x46, 0x1d, 0x09,
5318 0xe9, 0xe5, 0xe4, 0xd2, 0xa7, 0x49, 0x32, 0x4e,
5319 0x5e, 0x33, 0x69, 0xdf, 0xff, 0xe7, 0xdb, 0xd6,
5320 0xe1, 0xe1, 0xe2, 0xe2, 0xe3, 0xe4, 0xe4, 0xe5,
5321 0xe9, 0xe9, 0xe9, 0xe8, 0xe7, 0xe6, 0xe6, 0xe6,
5322 0xe5, 0xe6, 0xe8, 0xe9, 0xe9, 0xe7, 0xe5, 0xe4,
5323 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xec, 0xed, 0xee,
5324 0xe8, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xec, 0xed,
5325 0xef, 0xef, 0xed, 0xec, 0xea, 0xe9, 0xe7, 0xe7,
5326 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5327 0xe3, 0xf9, 0xf2, 0xdf, 0xe0, 0xd5, 0xb3, 0x99,
5328 0xb9, 0xdc, 0xee, 0xf9, 0xcd, 0xc3, 0xd3, 0xd3,
5329 0xcd, 0xd9, 0xb5, 0xd1, 0xe1, 0xc9, 0xed, 0xff,
5330 0xad, 0x83, 0x66, 0x89, 0xc6, 0xd3, 0xc2, 0x79,
5331 0x85, 0x7e, 0xae, 0x83, 0x94, 0xa7, 0xcc, 0xe3,
5332 0xe6, 0xeb, 0xe8, 0xdd, 0xd4, 0xd3, 0xde, 0xec,
5333 0xe6, 0xe9, 0xed, 0xe3, 0xd6, 0xdc, 0xe6, 0xe2,
5334 0xdf, 0xe9, 0xe7, 0xe7, 0xee, 0xe7, 0xde, 0xe1,
5335 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5336 0xe3, 0xec, 0xea, 0xd5, 0xd0, 0xe9, 0xaa, 0x98,
5337 0xb3, 0x62, 0x9f, 0xdd, 0xe0, 0xa2, 0xdd, 0xff,
5338 0xb3, 0x79, 0x6d, 0x8d, 0x90, 0x7f, 0x7e, 0x85,
5339 0x9d, 0x6f, 0x71, 0x86, 0x6f, 0x65, 0x9c, 0xdb,
5340 0xf6, 0xff, 0xff, 0xfe, 0xf7, 0xc3, 0x68, 0x26,
5341 0x02, 0x0c, 0x17, 0x2f, 0x47, 0x4d, 0x41, 0x29,
5342 0x4d, 0x48, 0x28, 0x5a, 0x51, 0x39, 0x87, 0x88,
5343 0xa2, 0xb6, 0xde, 0xc7, 0xa1, 0x96, 0xc4, 0xb8,
5344 0x97, 0x70, 0x5b, 0x6e, 0x82, 0x7b, 0x6e, 0x6b,
5345 0x6a, 0x67, 0x5d, 0x57, 0x64, 0x77, 0x79, 0x6d,
5346 0x66, 0x72, 0x81, 0x81, 0x6f, 0x63, 0x72, 0x8a,
5347 0xa2, 0x92, 0x84, 0x7c, 0x74, 0x6c, 0x6f, 0x79,
5348 0x75, 0x6b, 0x63, 0x61, 0x5d, 0x57, 0x58, 0x5f,
5349 0x5a, 0x55, 0x42, 0x38, 0x7a, 0xea, 0xee, 0x91,
5350 0x95, 0x33, 0x48, 0x65, 0x32, 0x3b, 0x64, 0x59,
5351 0x58, 0x5c, 0x60, 0x75, 0x82, 0x67, 0x4e, 0x58,
5352 0x88, 0x56, 0x3a, 0x2d, 0x38, 0x30, 0x24, 0x57,
5353 0x5e, 0x59, 0x4e, 0x45, 0x42, 0x3d, 0x39, 0x39,
5354 0x40, 0x56, 0xa2, 0x6a, 0x3f, 0x38, 0x3b, 0x30,
5355 0x4b, 0x59, 0x6b, 0x96, 0xc7, 0x6a, 0x87, 0x92,
5356 0x7a, 0x49, 0x2c, 0x3b, 0x49, 0x41, 0x42, 0x52,
5357 0x3b, 0x4a, 0x5f, 0x6b, 0x69, 0x60, 0x55, 0x4e,
5358 0x62, 0x6a, 0x6e, 0x63, 0x5f, 0x5a, 0x46, 0x3a,
5359 0x82, 0xd2, 0xce, 0x7c, 0x47, 0x41, 0x47, 0x47,
5360 0x47, 0x3f, 0x32, 0x27, 0x26, 0x2b, 0x2f, 0x30,
5361 0x30, 0x39, 0x45, 0x65, 0x5e, 0x4b, 0x1c, 0x06,
5362 0xea, 0xe4, 0x97, 0x22, 0x0f, 0x10, 0x1c, 0x34,
5363 0x2e, 0x24, 0x0e, 0x1a, 0x76, 0xd0, 0xe4, 0xde,
5364 0xe0, 0xe0, 0xe1, 0xe2, 0xe2, 0xe3, 0xe4, 0xe4,
5365 0xe1, 0xe1, 0xe0, 0xdf, 0xdf, 0xde, 0xdd, 0xdd,
5366 0xe1, 0xe3, 0xe5, 0xe8, 0xe9, 0xe9, 0xe8, 0xe7,
5367 0xe3, 0xe4, 0xe5, 0xe7, 0xe9, 0xeb, 0xec, 0xed,
5368 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xec, 0xed,
5369 0xf0, 0xef, 0xee, 0xec, 0xea, 0xe8, 0xe7, 0xe6,
5370 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5371 0xec, 0xe9, 0xe7, 0xe8, 0xe9, 0xe7, 0xe3, 0xdf,
5372 0x9d, 0xa4, 0xcb, 0xd3, 0xb6, 0xd6, 0xd9, 0xcc,
5373 0xdf, 0xc0, 0xad, 0xce, 0xf1, 0xe8, 0xe4, 0xf6,
5374 0xdf, 0xcb, 0xb7, 0x7e, 0xb9, 0xe4, 0xc7, 0x8a,
5375 0x77, 0x97, 0xb5, 0x82, 0x92, 0xa5, 0xdf, 0xe8,
5376 0xd4, 0xd7, 0xe6, 0xe7, 0xd5, 0xd7, 0xea, 0xf1,
5377 0xd8, 0xdc, 0xdf, 0xd3, 0xc6, 0xd4, 0xe9, 0xed,
5378 0xe7, 0xf0, 0xea, 0xe5, 0xe8, 0xdc, 0xcd, 0xd0,
5379 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5380 0xf4, 0xeb, 0xf7, 0xde, 0xcc, 0xe4, 0xbc, 0x99,
5381 0xcc, 0x6a, 0x8a, 0xdc, 0xec, 0xa6, 0xde, 0xe1,
5382 0x86, 0x88, 0x83, 0x7b, 0x7b, 0x80, 0x72, 0x5b,
5383 0x4d, 0x6c, 0x8d, 0x96, 0xa8, 0xdf, 0xf0, 0xc6,
5384 0xda, 0x8e, 0x31, 0x13, 0x30, 0x3b, 0x27, 0x19,
5385 0x48, 0x5f, 0x84, 0x71, 0x66, 0x6b, 0x46, 0x35,
5386 0x44, 0x36, 0x4d, 0x61, 0x40, 0x6a, 0xc5, 0xbb,
5387 0xc8, 0xba, 0xb1, 0xbe, 0xb0, 0x85, 0xb8, 0xac,
5388 0x9e, 0x7f, 0x6b, 0x6a, 0x61, 0x51, 0x5a, 0x72,
5389 0x6a, 0x81, 0x90, 0x8c, 0x87, 0x87, 0x80, 0x73,
5390 0x71, 0x6f, 0x70, 0x71, 0x6b, 0x67, 0x73, 0x85,
5391 0x6f, 0x69, 0x68, 0x6d, 0x6d, 0x68, 0x68, 0x6f,
5392 0x5f, 0x61, 0x67, 0x69, 0x60, 0x53, 0x54, 0x5d,
5393 0x60, 0x59, 0x53, 0x54, 0x47, 0x27, 0x16, 0x1e,
5394 0x35, 0x45, 0x46, 0x31, 0x4a, 0x4e, 0x28, 0x40,
5395 0x59, 0x75, 0x74, 0x68, 0x6f, 0x6e, 0x67, 0x6f,
5396 0x68, 0x45, 0x2f, 0x4c, 0x42, 0x29, 0x3e, 0x3b,
5397 0x56, 0x49, 0x35, 0x33, 0x44, 0x4e, 0x4a, 0x48,
5398 0x2e, 0x6a, 0xba, 0x53, 0x17, 0x29, 0x4c, 0x47,
5399 0x3d, 0x32, 0x57, 0xc8, 0xcc, 0x3b, 0x8b, 0x75,
5400 0x65, 0x68, 0x67, 0x60, 0x5e, 0x64, 0x68, 0x68,
5401 0x42, 0x5f, 0x69, 0x56, 0x4b, 0x55, 0x58, 0x4d,
5402 0x61, 0x64, 0x64, 0x59, 0x60, 0x65, 0x4c, 0x3c,
5403 0x6a, 0x96, 0xd4, 0x96, 0x35, 0x31, 0x3c, 0x37,
5404 0x4a, 0x45, 0x39, 0x2c, 0x27, 0x2d, 0x33, 0x36,
5405 0x39, 0x41, 0x4b, 0x66, 0x59, 0x45, 0x1a, 0x09,
5406 0xf3, 0xf7, 0xd2, 0xa4, 0xbe, 0xad, 0x8a, 0x84,
5407 0x5f, 0x56, 0x9b, 0xa0, 0xd3, 0xe2, 0xec, 0xd5,
5408 0xde, 0xde, 0xdf, 0xe0, 0xe0, 0xe1, 0xe2, 0xe2,
5409 0xdf, 0xe0, 0xe1, 0xe2, 0xe4, 0xe5, 0xe6, 0xe7,
5410 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
5411 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5412 0xf0, 0xd4, 0xf4, 0xe9, 0xe1, 0xe5, 0xf2, 0xe7,
5413 0xea, 0xec, 0xee, 0xef, 0xee, 0xeb, 0xe7, 0xe5,
5414 0xef, 0xe8, 0xe3, 0xe6, 0xe9, 0xe4, 0xe1, 0xe3,
5415 0xe1, 0xda, 0xe0, 0xe8, 0xd1, 0xb2, 0xe4, 0xf1,
5416 0xda, 0xcb, 0xd9, 0xc6, 0xcf, 0xd1, 0xd9, 0xc6,
5417 0xec, 0xc1, 0xb8, 0xd2, 0xea, 0xec, 0xd1, 0xd5,
5418 0xd3, 0xd9, 0xda, 0x9f, 0x91, 0xba, 0xd8, 0x9d,
5419 0x83, 0x62, 0x88, 0x87, 0x6d, 0x8c, 0xe3, 0xe7,
5420 0xe1, 0xf1, 0xd4, 0xcc, 0xd5, 0xd7, 0xea, 0xf5,
5421 0xcb, 0xd9, 0xee, 0xf4, 0xd3, 0xcd, 0xe8, 0xd8,
5422 0xdb, 0xea, 0xea, 0xe9, 0xe2, 0xc7, 0xc4, 0xe4,
5423 0xeb, 0xef, 0xeb, 0xe0, 0xdf, 0xe8, 0xe9, 0xe3,
5424 0xe9, 0xef, 0xe7, 0xee, 0xe4, 0xc8, 0xc8, 0xa9,
5425 0xad, 0x4f, 0x5e, 0xb6, 0xe5, 0xac, 0xbb, 0x7b,
5426 0x77, 0x66, 0x67, 0x60, 0x4e, 0x70, 0xc3, 0xfe,
5427 0xf8, 0xff, 0xcd, 0x92, 0x85, 0x6f, 0x4b, 0x41,
5428 0x1a, 0x24, 0x21, 0x1f, 0x3f, 0x6b, 0x74, 0x64,
5429 0x4a, 0x4f, 0x40, 0x34, 0x36, 0x33, 0x49, 0x78,
5430 0x54, 0x2b, 0x38, 0x7b, 0x54, 0x49, 0xac, 0xb2,
5431 0xb4, 0xb3, 0xaf, 0xb6, 0xa0, 0x7e, 0xbf, 0xb3,
5432 0x8d, 0x71, 0x5d, 0x64, 0x72, 0x73, 0x6b, 0x66,
5433 0x73, 0x7c, 0x81, 0x7f, 0x82, 0x87, 0x81, 0x75,
5434 0x62, 0x6f, 0x76, 0x72, 0x70, 0x75, 0x78, 0x76,
5435 0x64, 0x6d, 0x7a, 0x83, 0x82, 0x78, 0x6b, 0x61,
5436 0x58, 0x5a, 0x5f, 0x65, 0x67, 0x62, 0x57, 0x4d,
5437 0x54, 0x51, 0x54, 0x5f, 0x4a, 0x42, 0x6d, 0x86,
5438 0x7d, 0x66, 0x57, 0x44, 0x2c, 0x37, 0x53, 0x59,
5439 0x4f, 0x5b, 0x68, 0x6b, 0x63, 0x5a, 0x57, 0x59,
5440 0x71, 0x43, 0x3f, 0x40, 0x4e, 0x52, 0x34, 0x3d,
5441 0x3c, 0x44, 0x3f, 0x2e, 0x2d, 0x48, 0x6b, 0x7f,
5442 0x59, 0x76, 0x95, 0x65, 0x58, 0x5e, 0x32, 0x3f,
5443 0x48, 0x31, 0x50, 0xe2, 0x87, 0x41, 0x87, 0x76,
5444 0x5b, 0x50, 0x5a, 0x4c, 0x42, 0x55, 0x5b, 0x5d,
5445 0x5d, 0x58, 0x63, 0x4e, 0x49, 0x57, 0x47, 0x4a,
5446 0x4f, 0x6c, 0x6b, 0x52, 0x4e, 0x57, 0x5b, 0x5e,
5447 0x42, 0x4c, 0x9b, 0xca, 0x89, 0x47, 0x46, 0x50,
5448 0x2e, 0x40, 0x37, 0x38, 0x37, 0x36, 0x42, 0x34,
5449 0x2a, 0x3c, 0x29, 0x3e, 0x4f, 0x46, 0x1d, 0x11,
5450 0xe7, 0xeb, 0xdb, 0xbf, 0xdb, 0xd7, 0xda, 0xfa,
5451 0xe2, 0xf2, 0xe7, 0xc8, 0xec, 0xe3, 0xe3, 0xd3,
5452 0xde, 0xde, 0xdf, 0xdf, 0xe0, 0xe1, 0xe1, 0xe2,
5453 0xdf, 0xe0, 0xe1, 0xe3, 0xe4, 0xe6, 0xe7, 0xe7,
5454 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
5455 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5456 0xee, 0xdd, 0xe8, 0xef, 0xe1, 0xe8, 0xec, 0xec,
5457 0xea, 0xeb, 0xed, 0xee, 0xed, 0xeb, 0xe8, 0xe5,
5458 0xe8, 0xef, 0xea, 0xe6, 0xed, 0xec, 0xe5, 0xe7,
5459 0xc8, 0xdf, 0xdd, 0xe3, 0xcf, 0x95, 0xc3, 0xea,
5460 0xd8, 0xdb, 0xce, 0xba, 0xe5, 0xe0, 0xce, 0xc9,
5461 0xf0, 0xa3, 0xdf, 0xf6, 0xed, 0xd9, 0xc2, 0xbe,
5462 0xc5, 0xf7, 0xd7, 0xd1, 0xa9, 0x6a, 0xaf, 0x86,
5463 0x79, 0x82, 0x9f, 0x95, 0x9c, 0xb5, 0xe7, 0xea,
5464 0xcb, 0xcb, 0xd6, 0xde, 0xc8, 0xd7, 0xfa, 0xdf,
5465 0xd8, 0xf2, 0xdc, 0xe2, 0xd6, 0xcd, 0xee, 0xd2,
5466 0xc8, 0xe0, 0xe3, 0xeb, 0xdc, 0xd3, 0xf0, 0xf2,
5467 0xf2, 0xeb, 0xe8, 0xee, 0xf0, 0xeb, 0xe7, 0xe8,
5468 0xe4, 0xea, 0xe2, 0xea, 0xf1, 0xe5, 0xc4, 0xb7,
5469 0xae, 0x4f, 0x7f, 0xc1, 0xd5, 0x87, 0x4b, 0x3a,
5470 0x64, 0x75, 0xb4, 0xef, 0xfa, 0xf9, 0xf9, 0xec,
5471 0xaa, 0x86, 0x43, 0x26, 0x3e, 0x43, 0x38, 0x43,
5472 0x64, 0x4e, 0x4d, 0x76, 0x89, 0x5f, 0x38, 0x3f,
5473 0x61, 0x3b, 0x30, 0x49, 0x56, 0x4c, 0x41, 0x40,
5474 0x44, 0x56, 0x64, 0x76, 0x4e, 0x5d, 0xc3, 0xce,
5475 0xb1, 0xb6, 0xc5, 0xd4, 0xb6, 0x89, 0xc1, 0xb4,
5476 0x84, 0x6f, 0x65, 0x72, 0x7f, 0x7a, 0x6a, 0x5f,
5477 0x6b, 0x6e, 0x6b, 0x68, 0x6e, 0x76, 0x70, 0x61,
5478 0x5e, 0x78, 0x8b, 0x84, 0x74, 0x70, 0x76, 0x7c,
5479 0x81, 0x7f, 0x7b, 0x75, 0x6d, 0x66, 0x5f, 0x5b,
5480 0x71, 0x72, 0x74, 0x76, 0x76, 0x6e, 0x61, 0x57,
5481 0x5f, 0x43, 0x4f, 0x66, 0x37, 0x15, 0x2b, 0x29,
5482 0x0e, 0x3d, 0x58, 0x53, 0x42, 0x27, 0x23, 0x3d,
5483 0x6a, 0x66, 0x6b, 0x72, 0x6a, 0x5b, 0x5d, 0x6b,
5484 0x73, 0x3c, 0x34, 0x3b, 0x40, 0x38, 0x2c, 0x4f,
5485 0x36, 0x36, 0x46, 0x59, 0x54, 0x3d, 0x38, 0x45,
5486 0x11, 0x54, 0x8c, 0x66, 0x43, 0x3d, 0x30, 0x4f,
5487 0x67, 0x33, 0x9d, 0xf7, 0x6f, 0x2b, 0x66, 0x83,
5488 0x67, 0x52, 0x62, 0x64, 0x59, 0x55, 0x48, 0x48,
5489 0x59, 0x45, 0x49, 0x56, 0x5c, 0x56, 0x4b, 0x55,
5490 0x5c, 0x51, 0x5e, 0x5f, 0x4d, 0x5a, 0x6c, 0x5c,
5491 0x55, 0x49, 0x6f, 0xbc, 0xc1, 0x69, 0x28, 0x2d,
5492 0x47, 0x31, 0x28, 0x27, 0x41, 0x48, 0x37, 0x4f,
5493 0x60, 0x59, 0x49, 0x58, 0x50, 0x49, 0x24, 0x07,
5494 0xe1, 0xe1, 0xda, 0xba, 0xc3, 0xb0, 0xa2, 0xb4,
5495 0xaf, 0xda, 0xb8, 0xc2, 0xeb, 0xe0, 0xe9, 0xe1,
5496 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0, 0xe1, 0xe1,
5497 0xe0, 0xe1, 0xe2, 0xe3, 0xe5, 0xe6, 0xe7, 0xe8,
5498 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
5499 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5500 0xe9, 0xeb, 0xdb, 0xf0, 0xe2, 0xea, 0xe8, 0xef,
5501 0xea, 0xeb, 0xec, 0xec, 0xec, 0xea, 0xe8, 0xe7,
5502 0xdd, 0xed, 0xed, 0xe7, 0xec, 0xee, 0xe8, 0xe7,
5503 0xdb, 0xe1, 0xdf, 0xea, 0xd6, 0xaf, 0xe3, 0xec,
5504 0xd9, 0xd4, 0xd9, 0xcd, 0xd1, 0xd5, 0xe6, 0xe2,
5505 0xc6, 0xcb, 0xf3, 0xc9, 0xe9, 0xd8, 0xc8, 0xe4,
5506 0xe9, 0xc2, 0xd7, 0xd0, 0xc3, 0xae, 0xae, 0xa2,
5507 0x8e, 0x7e, 0x73, 0x61, 0x83, 0xa6, 0xd8, 0xe9,
5508 0xd9, 0xcd, 0xd6, 0xe4, 0xd5, 0xde, 0xf2, 0xd5,
5509 0xd7, 0xe3, 0xc9, 0xdb, 0xd7, 0xbb, 0xdd, 0xec,
5510 0xde, 0xd9, 0xe9, 0xf2, 0xd7, 0xd7, 0xec, 0xda,
5511 0xe6, 0xe3, 0xe7, 0xef, 0xee, 0xe3, 0xe0, 0xe5,
5512 0xe7, 0xda, 0xe2, 0xf0, 0xe3, 0xf4, 0xbc, 0x96,
5513 0xd4, 0x61, 0x6e, 0xdf, 0xbc, 0x67, 0xaa, 0xff,
5514 0xff, 0xef, 0xff, 0xf9, 0x9f, 0x3c, 0x1a, 0x1e,
5515 0x1f, 0x29, 0x36, 0x4f, 0x5f, 0x51, 0x54, 0x78,
5516 0x57, 0x69, 0x62, 0x45, 0x46, 0x67, 0x66, 0x40,
5517 0x68, 0x3c, 0x3b, 0x4d, 0x3a, 0x2f, 0x49, 0x5f,
5518 0x57, 0x61, 0x64, 0x56, 0x22, 0x50, 0xcb, 0xd4,
5519 0xcd, 0xce, 0xc5, 0xac, 0x96, 0x95, 0xd6, 0xb8,
5520 0x8f, 0x78, 0x68, 0x70, 0x7c, 0x7b, 0x74, 0x70,
5521 0x72, 0x6e, 0x67, 0x69, 0x7b, 0x8e, 0x8b, 0x7c,
5522 0x80, 0x85, 0x82, 0x7b, 0x7b, 0x84, 0x88, 0x84,
5523 0x6f, 0x72, 0x76, 0x77, 0x75, 0x6f, 0x68, 0x63,
5524 0x69, 0x69, 0x6a, 0x6b, 0x6b, 0x63, 0x57, 0x4d,
5525 0x4e, 0x4b, 0x50, 0x54, 0x52, 0x93, 0xf4, 0xff,
5526 0xfc, 0xee, 0xb5, 0x73, 0x4a, 0x30, 0x2f, 0x49,
5527 0x4e, 0x6f, 0x7b, 0x68, 0x60, 0x6a, 0x60, 0x44,
5528 0x42, 0x3c, 0x46, 0x42, 0x4a, 0x5c, 0x5b, 0x65,
5529 0x4d, 0x4c, 0x4f, 0x57, 0x62, 0x60, 0x4c, 0x36,
5530 0x31, 0x7e, 0xa3, 0x6b, 0x2f, 0x29, 0x4e, 0x80,
5531 0x5a, 0x1e, 0xcf, 0xd5, 0x4d, 0x3e, 0x65, 0x8d,
5532 0x76, 0x4d, 0x53, 0x5f, 0x5c, 0x57, 0x50, 0x5c,
5533 0x4f, 0x5e, 0x60, 0x5e, 0x53, 0x49, 0x50, 0x4e,
5534 0x48, 0x50, 0x40, 0x3d, 0x53, 0x4d, 0x42, 0x55,
5535 0x2d, 0x30, 0x3f, 0x8f, 0xdd, 0xb7, 0x7a, 0x88,
5536 0x82, 0x92, 0x8d, 0x6a, 0x6b, 0x61, 0x35, 0x36,
5537 0x2f, 0x32, 0x30, 0x3c, 0x2d, 0x2d, 0x17, 0x0e,
5538 0xdd, 0xe0, 0xe0, 0xb4, 0xb9, 0xb3, 0xa5, 0xb2,
5539 0xb9, 0xce, 0xb4, 0xe2, 0xe9, 0xdb, 0xe6, 0xde,
5540 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0, 0xe0,
5541 0xe1, 0xe1, 0xe2, 0xe4, 0xe5, 0xe7, 0xe8, 0xe9,
5542 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5543 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5544 0xe2, 0xf3, 0xda, 0xe3, 0xe6, 0xea, 0xec, 0xed,
5545 0xe9, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xe9, 0xe8,
5546 0xda, 0xdd, 0xe7, 0xeb, 0xe7, 0xe7, 0xe9, 0xe5,
5547 0xd1, 0xc2, 0xd9, 0xf6, 0xe5, 0xbc, 0xd5, 0xd4,
5548 0xef, 0xe7, 0xcd, 0xbd, 0xc1, 0xc6, 0xd9, 0xe1,
5549 0xbf, 0xdb, 0xfa, 0xdc, 0xd5, 0xbb, 0xd2, 0xdc,
5550 0xa9, 0xcd, 0xff, 0xff, 0xf0, 0xc0, 0xa5, 0x9f,
5551 0xae, 0x7c, 0x7e, 0x91, 0xb2, 0xc2, 0xe4, 0xe2,
5552 0xcc, 0xe4, 0xcb, 0xc2, 0xea, 0xf0, 0xd1, 0xc4,
5553 0xfc, 0xe9, 0xe4, 0xee, 0xe0, 0xbd, 0xbf, 0xe7,
5554 0xe2, 0xb7, 0xde, 0xeb, 0xde, 0xeb, 0xe0, 0xdf,
5555 0xd9, 0xe4, 0xeb, 0xe8, 0xe1, 0xdf, 0xe3, 0xe5,
5556 0xf0, 0xee, 0xec, 0xf3, 0xe0, 0xff, 0xbf, 0x86,
5557 0xdd, 0x60, 0x4d, 0xd7, 0xff, 0xcd, 0xa5, 0xdc,
5558 0x8a, 0x3b, 0x2b, 0x51, 0x40, 0x1b, 0x32, 0x63,
5559 0x62, 0x57, 0x50, 0x5c, 0x66, 0x5a, 0x4e, 0x51,
5560 0x6f, 0x67, 0x87, 0x9b, 0x88, 0x89, 0x95, 0x84,
5561 0x43, 0x27, 0x2a, 0x43, 0x46, 0x3f, 0x41, 0x42,
5562 0x31, 0x37, 0x34, 0x3f, 0x3f, 0x5d, 0xa8, 0xbf,
5563 0xaa, 0x7a, 0x74, 0x97, 0xa9, 0x90, 0xb8, 0xb8,
5564 0x91, 0x7a, 0x69, 0x6e, 0x77, 0x78, 0x77, 0x79,
5565 0x73, 0x67, 0x57, 0x54, 0x67, 0x7a, 0x74, 0x61,
5566 0x61, 0x6f, 0x71, 0x61, 0x51, 0x51, 0x59, 0x5f,
5567 0x62, 0x69, 0x71, 0x77, 0x74, 0x6a, 0x5e, 0x55,
5568 0x5a, 0x5a, 0x5b, 0x5e, 0x60, 0x5b, 0x52, 0x4a,
5569 0x58, 0x4d, 0x50, 0x98, 0xe9, 0xfd, 0xd1, 0x8a,
5570 0x47, 0x2a, 0x20, 0x24, 0x27, 0x3b, 0x47, 0x3a,
5571 0x53, 0x5a, 0x68, 0x74, 0x6e, 0x59, 0x46, 0x3f,
5572 0x73, 0x82, 0x81, 0x66, 0x62, 0x71, 0x67, 0x51,
5573 0x58, 0x6a, 0x68, 0x47, 0x2d, 0x33, 0x46, 0x50,
5574 0x2e, 0x53, 0x55, 0x47, 0x4a, 0x5a, 0x5f, 0x48,
5575 0x36, 0x3c, 0xef, 0x96, 0x25, 0x48, 0x68, 0x81,
5576 0x6b, 0x43, 0x4b, 0x5e, 0x62, 0x60, 0x55, 0x5a,
5577 0x45, 0x62, 0x5b, 0x58, 0x51, 0x50, 0x65, 0x59,
5578 0x52, 0x4c, 0x51, 0x55, 0x51, 0x5a, 0x64, 0x60,
5579 0x8f, 0x7f, 0x57, 0x65, 0xb7, 0xd9, 0xa2, 0x68,
5580 0x58, 0x5f, 0x45, 0x41, 0x38, 0x1f, 0x2f, 0x44,
5581 0x65, 0x6d, 0x65, 0x78, 0x88, 0x75, 0x20, 0x02,
5582 0xe2, 0xe7, 0xed, 0xba, 0xaa, 0x88, 0x6a, 0x85,
5583 0xb8, 0xb8, 0xb0, 0xe2, 0xdc, 0xe2, 0xdd, 0xd0,
5584 0xdc, 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0,
5585 0xe1, 0xe2, 0xe3, 0xe5, 0xe6, 0xe8, 0xe9, 0xe9,
5586 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5587 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5588 0xde, 0xf2, 0xdf, 0xd0, 0xe9, 0xe7, 0xf2, 0xe7,
5589 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xea,
5590 0xe4, 0xcf, 0xdf, 0xf3, 0xe5, 0xe1, 0xeb, 0xe7,
5591 0xc5, 0xc1, 0xe1, 0xef, 0xdf, 0xa3, 0xaa, 0xdf,
5592 0xe1, 0xd6, 0xd1, 0xdc, 0xca, 0xd2, 0xf2, 0xea,
5593 0xb4, 0xe5, 0xff, 0xd7, 0x9f, 0xb9, 0xdc, 0xb4,
5594 0xd7, 0xef, 0xeb, 0xca, 0xef, 0xd6, 0xa6, 0xa4,
5595 0x5c, 0x49, 0x63, 0x70, 0x81, 0x94, 0xce, 0xe4,
5596 0xe5, 0xe3, 0xba, 0xbc, 0xf1, 0xdd, 0xb8, 0xde,
5597 0xe8, 0xd4, 0xdc, 0xe9, 0xe8, 0xe0, 0xd6, 0xd9,
5598 0xf0, 0xcb, 0xe1, 0xe2, 0xdb, 0xe2, 0xd1, 0xdd,
5599 0xe6, 0xe6, 0xe5, 0xe5, 0xe5, 0xe6, 0xea, 0xed,
5600 0xde, 0xed, 0xd4, 0xe3, 0xca, 0xaa, 0x67, 0x75,
5601 0xc6, 0x6e, 0x56, 0xde, 0xe5, 0x82, 0x33, 0x1d,
5602 0x18, 0x00, 0x21, 0x64, 0x76, 0x6b, 0x68, 0x68,
5603 0x67, 0x64, 0x5e, 0x57, 0x60, 0x7c, 0x8e, 0x8a,
5604 0x68, 0x81, 0x7f, 0x5d, 0x4e, 0x5b, 0x4c, 0x21,
5605 0x22, 0x40, 0x54, 0x5d, 0x61, 0x51, 0x41, 0x43,
5606 0x48, 0x5b, 0x36, 0x2a, 0x3e, 0x2d, 0x26, 0x42,
5607 0x4f, 0x2b, 0x2c, 0x54, 0x79, 0x4f, 0x4d, 0x51,
5608 0x77, 0x69, 0x65, 0x70, 0x77, 0x71, 0x68, 0x66,
5609 0x6b, 0x61, 0x55, 0x58, 0x70, 0x89, 0x87, 0x77,
5610 0x5c, 0x77, 0x8e, 0x8f, 0x85, 0x7f, 0x7c, 0x78,
5611 0x76, 0x78, 0x79, 0x79, 0x77, 0x72, 0x6d, 0x6a,
5612 0x6a, 0x68, 0x67, 0x69, 0x6a, 0x66, 0x5e, 0x57,
5613 0x3c, 0x4e, 0x43, 0x3e, 0x3f, 0x46, 0x5e, 0x67,
5614 0x92, 0x84, 0x7b, 0x5f, 0x34, 0x2c, 0x40, 0x46,
5615 0x6f, 0x5b, 0x5c, 0x70, 0x6d, 0x51, 0x48, 0x57,
5616 0x6d, 0x64, 0x52, 0x50, 0x55, 0x59, 0x5d, 0x57,
5617 0x37, 0x27, 0x27, 0x38, 0x42, 0x3a, 0x36, 0x3b,
5618 0x67, 0x5b, 0x62, 0x81, 0x71, 0x41, 0x37, 0x40,
5619 0x21, 0x82, 0xf8, 0x77, 0x25, 0x45, 0x78, 0x9f,
5620 0x72, 0x4c, 0x4b, 0x4f, 0x51, 0x59, 0x52, 0x54,
5621 0x62, 0x4f, 0x31, 0x47, 0x57, 0x4b, 0x50, 0x43,
5622 0x4c, 0x5b, 0x6a, 0x64, 0x5f, 0x75, 0x89, 0x84,
5623 0x85, 0x72, 0x56, 0x45, 0x75, 0xd3, 0xd7, 0x81,
5624 0x10, 0x12, 0x24, 0x56, 0x66, 0x6a, 0x88, 0x89,
5625 0x75, 0x78, 0x76, 0x88, 0x99, 0x87, 0x28, 0x09,
5626 0xeb, 0xe0, 0xea, 0xca, 0xb7, 0x5a, 0x00, 0x18,
5627 0x58, 0x9c, 0xd1, 0xee, 0xd9, 0xdb, 0xcf, 0xd9,
5628 0xdb, 0xdb, 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf,
5629 0xe2, 0xe3, 0xe4, 0xe5, 0xe7, 0xe8, 0xe9, 0xea,
5630 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5631 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5632 0xdf, 0xe7, 0xdf, 0xc8, 0xe6, 0xe5, 0xf0, 0xe5,
5633 0xe8, 0xe7, 0xe6, 0xe6, 0xe6, 0xe8, 0xea, 0xeb,
5634 0xf1, 0xd2, 0xdb, 0xf3, 0xea, 0xe3, 0xec, 0xec,
5635 0xc3, 0xcb, 0xe7, 0xd6, 0xb8, 0x9f, 0xc0, 0xe7,
5636 0xf2, 0xcf, 0xd5, 0xef, 0xb7, 0xc9, 0xff, 0xe8,
5637 0xd0, 0xeb, 0xe9, 0xc4, 0xb5, 0xca, 0xd0, 0xf3,
5638 0xe6, 0xd3, 0xeb, 0xe5, 0xe6, 0xd8, 0xca, 0xb1,
5639 0x8a, 0x82, 0x76, 0x5c, 0x81, 0xb1, 0xe2, 0xe6,
5640 0xfa, 0xd8, 0xcd, 0xdb, 0xe0, 0xc1, 0xb1, 0xda,
5641 0xdd, 0xd7, 0xd3, 0xe9, 0xe4, 0xcf, 0xd1, 0xc4,
5642 0xe1, 0xe3, 0xd8, 0xd7, 0xd9, 0xde, 0xed, 0xf0,
5643 0xf1, 0xd8, 0xcf, 0xe1, 0xec, 0xe6, 0xe4, 0xed,
5644 0xeb, 0xed, 0xca, 0xa6, 0x61, 0x41, 0x36, 0x5a,
5645 0x5e, 0x4b, 0x57, 0xde, 0x9f, 0x50, 0x8b, 0x77,
5646 0x6e, 0x76, 0x7b, 0x65, 0x51, 0x66, 0x6f, 0x4f,
5647 0x3a, 0x56, 0x70, 0x61, 0x46, 0x55, 0x6d, 0x66,
5648 0x76, 0x8b, 0x8c, 0xa5, 0xc5, 0x92, 0x4b, 0x45,
5649 0x2b, 0x42, 0x39, 0x2e, 0x40, 0x40, 0x2e, 0x2c,
5650 0x24, 0x2e, 0x3b, 0x31, 0x28, 0x44, 0x58, 0x45,
5651 0x45, 0x5a, 0x55, 0x4a, 0x7f, 0x76, 0x71, 0x7f,
5652 0x6d, 0x60, 0x5a, 0x62, 0x67, 0x63, 0x61, 0x64,
5653 0x72, 0x6c, 0x61, 0x5e, 0x6c, 0x7a, 0x74, 0x62,
5654 0x6a, 0x7b, 0x8b, 0x92, 0x96, 0x97, 0x8d, 0x7f,
5655 0x7b, 0x7c, 0x7e, 0x7e, 0x7b, 0x77, 0x71, 0x6e,
5656 0x72, 0x6e, 0x6a, 0x68, 0x65, 0x60, 0x56, 0x4f,
5657 0x4d, 0x55, 0x51, 0x53, 0x60, 0x86, 0xa0, 0x81,
5658 0x64, 0x52, 0x33, 0x3a, 0x69, 0x7c, 0x6e, 0x68,
5659 0x67, 0x5b, 0x59, 0x65, 0x66, 0x57, 0x4e, 0x50,
5660 0x5d, 0x62, 0x51, 0x52, 0x5a, 0x5f, 0x64, 0x4f,
5661 0x59, 0x47, 0x32, 0x26, 0x27, 0x32, 0x45, 0x55,
5662 0x42, 0x56, 0x5e, 0x3d, 0x2f, 0x4d, 0x51, 0x36,
5663 0x30, 0xa4, 0xa8, 0x50, 0x34, 0x35, 0x6a, 0x9b,
5664 0x77, 0x4f, 0x47, 0x42, 0x40, 0x50, 0x58, 0x64,
5665 0x52, 0x46, 0x38, 0x4a, 0x63, 0x6b, 0x6c, 0x5f,
5666 0x7d, 0xa2, 0x95, 0x70, 0x6d, 0x6c, 0x64, 0x6c,
5667 0x47, 0x37, 0x3a, 0x31, 0x3d, 0x9d, 0xe7, 0xd1,
5668 0x98, 0x7a, 0x89, 0x80, 0x6a, 0x75, 0x6e, 0x5f,
5669 0x6b, 0x5f, 0x67, 0x67, 0x54, 0x51, 0x18, 0x0a,
5670 0xe4, 0xd1, 0xdd, 0xdb, 0xf1, 0x95, 0x28, 0x4a,
5671 0xdb, 0xf6, 0xe9, 0xd9, 0xda, 0xe8, 0xdf, 0xe1,
5672 0xda, 0xdb, 0xdb, 0xdc, 0xdd, 0xdd, 0xde, 0xde,
5673 0xe3, 0xe3, 0xe4, 0xe6, 0xe7, 0xe9, 0xea, 0xeb,
5674 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5675 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5676 0xe5, 0xd9, 0xd4, 0xcf, 0xde, 0xe5, 0xe3, 0xe9,
5677 0xe8, 0xe7, 0xe5, 0xe4, 0xe5, 0xe7, 0xea, 0xed,
5678 0xf4, 0xe0, 0xd5, 0xe2, 0xee, 0xe8, 0xe5, 0xed,
5679 0xcb, 0xdd, 0xeb, 0xe2, 0xc4, 0xbb, 0xf0, 0xdf,
5680 0xfb, 0xd5, 0xa5, 0xc1, 0xbc, 0xd4, 0xf2, 0xe0,
5681 0xc1, 0xe9, 0xdc, 0xa0, 0xb7, 0xd7, 0xd9, 0xe1,
5682 0xc9, 0xc2, 0xb2, 0xdd, 0xbb, 0x8f, 0xde, 0x8f,
5683 0x85, 0xb5, 0xdd, 0xa7, 0x7d, 0x89, 0xc6, 0xd1,
5684 0xab, 0xae, 0xcc, 0xd2, 0xcf, 0xd6, 0xcf, 0xd3,
5685 0xe8, 0xea, 0xde, 0xe5, 0xe4, 0xcf, 0xce, 0xd4,
5686 0xdd, 0xdf, 0xca, 0xd6, 0xe3, 0xe5, 0xf7, 0xec,
5687 0xe4, 0xd0, 0xce, 0xe2, 0xe9, 0xde, 0xdd, 0xea,
5688 0xe7, 0x98, 0x6e, 0x4e, 0x5a, 0xb2, 0xb7, 0x81,
5689 0x6b, 0x57, 0x43, 0x62, 0x73, 0x87, 0x94, 0x88,
5690 0x62, 0x65, 0x75, 0x84, 0x9d, 0xba, 0x98, 0x46,
5691 0x78, 0x61, 0x60, 0x5f, 0x56, 0x6b, 0x7f, 0x71,
5692 0x76, 0x7b, 0x89, 0xaf, 0xb9, 0x7a, 0x40, 0x43,
5693 0x32, 0x46, 0x4d, 0x3f, 0x30, 0x2c, 0x38, 0x49,
5694 0x40, 0x41, 0x70, 0x61, 0x31, 0x5d, 0x75, 0x33,
5695 0x44, 0x4f, 0x3f, 0x44, 0x8c, 0x5d, 0x42, 0x87,
5696 0x79, 0x69, 0x5e, 0x60, 0x64, 0x64, 0x6b, 0x75,
5697 0x6c, 0x70, 0x70, 0x6f, 0x79, 0x84, 0x80, 0x72,
5698 0x6b, 0x81, 0x8d, 0x7e, 0x67, 0x5f, 0x63, 0x67,
5699 0x7b, 0x78, 0x73, 0x6c, 0x65, 0x5e, 0x58, 0x55,
5700 0x6b, 0x66, 0x60, 0x5d, 0x5a, 0x55, 0x4c, 0x45,
5701 0x5c, 0x49, 0x42, 0x5f, 0x71, 0x75, 0x80, 0x72,
5702 0x56, 0x67, 0x63, 0x5b, 0x5c, 0x50, 0x47, 0x54,
5703 0x6d, 0x4b, 0x4b, 0x70, 0x74, 0x52, 0x47, 0x5c,
5704 0x44, 0x65, 0x5e, 0x5c, 0x5c, 0x60, 0x68, 0x48,
5705 0x4d, 0x4c, 0x42, 0x3e, 0x51, 0x64, 0x55, 0x34,
5706 0x34, 0x3f, 0x79, 0x71, 0x43, 0x3c, 0x48, 0x6f,
5707 0x80, 0xd8, 0x78, 0x50, 0x56, 0x43, 0x69, 0x96,
5708 0x6d, 0x48, 0x51, 0x5d, 0x55, 0x4e, 0x4d, 0x60,
5709 0x36, 0x41, 0x4c, 0x43, 0x46, 0x53, 0x46, 0x37,
5710 0x37, 0x33, 0x41, 0x3b, 0x25, 0x34, 0x47, 0x36,
5711 0x65, 0x50, 0x45, 0x45, 0x4d, 0x71, 0xab, 0xd2,
5712 0xc0, 0x76, 0x61, 0x5e, 0x54, 0x53, 0x54, 0x68,
5713 0x73, 0x5b, 0x64, 0x6f, 0x6e, 0x70, 0x22, 0x02,
5714 0xd9, 0xd1, 0xda, 0xcd, 0xe5, 0x8c, 0x1d, 0x46,
5715 0xd0, 0xe5, 0xdc, 0xd6, 0xd6, 0xd4, 0xd9, 0xda,
5716 0xda, 0xda, 0xdb, 0xdc, 0xdc, 0xdd, 0xde, 0xde,
5717 0xe3, 0xe4, 0xe5, 0xe6, 0xe8, 0xe9, 0xea, 0xeb,
5718 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
5719 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5720 0xeb, 0xcf, 0xc8, 0xda, 0xd7, 0xe7, 0xd7, 0xee,
5721 0xe8, 0xe6, 0xe4, 0xe3, 0xe4, 0xe7, 0xeb, 0xed,
5722 0xee, 0xea, 0xcf, 0xce, 0xed, 0xea, 0xdb, 0xea,
5723 0xd0, 0xe5, 0xcb, 0xd8, 0xcd, 0x9d, 0xd8, 0xdd,
5724 0xf5, 0xd7, 0xc3, 0xf7, 0xe3, 0xe4, 0xe4, 0xaf,
5725 0xc1, 0xfe, 0xd5, 0x97, 0xdd, 0xe3, 0xf1, 0xe9,
5726 0xed, 0xe4, 0xdc, 0xbf, 0xc5, 0xca, 0xe6, 0xe8,
5727 0x75, 0x78, 0xa9, 0x87, 0x50, 0x73, 0xd5, 0xd8,
5728 0xdc, 0xc7, 0xc5, 0xc5, 0xca, 0xba, 0xac, 0xd8,
5729 0xe4, 0xea, 0xde, 0xbe, 0xd8, 0xf1, 0xd6, 0xdc,
5730 0xe9, 0xc9, 0xc0, 0xdb, 0xf1, 0xf1, 0xe5, 0xd5,
5731 0xd4, 0xda, 0xe5, 0xec, 0xe7, 0xde, 0xe3, 0xf0,
5732 0xec, 0x7f, 0x8e, 0x94, 0x7f, 0x72, 0x52, 0x55,
5733 0x66, 0x66, 0x42, 0x5e, 0x7d, 0x85, 0x9e, 0x8b,
5734 0xbe, 0xac, 0xbd, 0xd6, 0xcc, 0xb1, 0x8b, 0x5f,
5735 0x5e, 0x47, 0x57, 0x66, 0x4e, 0x59, 0x8c, 0xa8,
5736 0x5a, 0x51, 0x79, 0x8c, 0x60, 0x4c, 0x57, 0x4d,
5737 0x64, 0x3e, 0x33, 0x3e, 0x42, 0x52, 0x5f, 0x56,
5738 0x52, 0x65, 0x5d, 0x2f, 0x29, 0x46, 0x3f, 0x2c,
5739 0x31, 0x3e, 0x22, 0x27, 0x8f, 0x6a, 0x45, 0x95,
5740 0x7b, 0x72, 0x71, 0x7a, 0x7d, 0x76, 0x75, 0x7a,
5741 0x81, 0x8a, 0x8d, 0x8a, 0x8c, 0x90, 0x89, 0x7c,
5742 0x6a, 0x7a, 0x85, 0x82, 0x7c, 0x7b, 0x75, 0x6e,
5743 0x87, 0x7b, 0x69, 0x5d, 0x5c, 0x68, 0x78, 0x84,
5744 0x6c, 0x67, 0x63, 0x62, 0x62, 0x5f, 0x59, 0x54,
5745 0x53, 0x61, 0x49, 0x45, 0x55, 0x51, 0x50, 0x4e,
5746 0x5a, 0x57, 0x64, 0x63, 0x4e, 0x51, 0x64, 0x66,
5747 0x7a, 0x6b, 0x5f, 0x5f, 0x66, 0x6b, 0x6c, 0x6d,
5748 0x5e, 0x6a, 0x5e, 0x6e, 0x65, 0x50, 0x6a, 0x70,
5749 0x48, 0x41, 0x3f, 0x42, 0x3c, 0x2d, 0x27, 0x2c,
5750 0x18, 0x44, 0x85, 0x4c, 0x22, 0x48, 0x30, 0x12,
5751 0x6f, 0xc8, 0x4b, 0x3b, 0x41, 0x35, 0x65, 0x9a,
5752 0x8a, 0x58, 0x5c, 0x69, 0x55, 0x3c, 0x3b, 0x5e,
5753 0x4e, 0x3e, 0x52, 0x5a, 0x5f, 0x58, 0x33, 0x2f,
5754 0x38, 0x3c, 0x3b, 0x43, 0x57, 0x5e, 0x61, 0x6e,
5755 0x64, 0x7d, 0x81, 0x83, 0x7f, 0x5f, 0x7b, 0xd7,
5756 0xeb, 0xa0, 0x42, 0x35, 0x4f, 0x5f, 0x71, 0x67,
5757 0x80, 0x79, 0x7c, 0x80, 0x8f, 0x86, 0x23, 0x10,
5758 0xd9, 0xd9, 0xd3, 0xd9, 0xe0, 0x96, 0x1a, 0x69,
5759 0xe0, 0xda, 0xd4, 0xd1, 0xd2, 0xd4, 0xd5, 0xd4,
5760 0xd5, 0xd6, 0xd7, 0xd7, 0xd9, 0xda, 0xda, 0xdb,
5761 0xdc, 0xdd, 0xde, 0xe0, 0xe2, 0xe4, 0xe5, 0xe6,
5762 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5763 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5764 0xe7, 0xef, 0xcd, 0xd0, 0xe4, 0xd1, 0xca, 0xd5,
5765 0xed, 0xe2, 0xdb, 0xce, 0xdf, 0xf2, 0xdf, 0xde,
5766 0xdc, 0xf2, 0xc8, 0xcb, 0xdb, 0xed, 0xd1, 0xd2,
5767 0xd7, 0xde, 0xb9, 0xe5, 0xc5, 0xb9, 0xef, 0xec,
5768 0xe3, 0xc8, 0xbf, 0xf9, 0xdb, 0xcf, 0xf6, 0x90,
5769 0xc8, 0xfb, 0x95, 0xc3, 0xf1, 0xe7, 0xf4, 0xde,
5770 0xe2, 0xf1, 0xe9, 0xcf, 0xd1, 0xc3, 0xbd, 0xf1,
5771 0x9f, 0x83, 0xa0, 0xad, 0x98, 0x9c, 0xac, 0xbe,
5772 0xed, 0xe7, 0xda, 0xcd, 0xe2, 0xe0, 0xcb, 0xef,
5773 0xeb, 0xf3, 0xef, 0xe1, 0xd2, 0xc5, 0xcd, 0xe2,
5774 0xe6, 0xaa, 0xbc, 0xec, 0xe5, 0xd8, 0xdd, 0xd9,
5775 0xcb, 0xe9, 0xff, 0xd3, 0xef, 0xe6, 0xd3, 0xdb,
5776 0xd7, 0xe6, 0x9b, 0x56, 0x55, 0x56, 0x61, 0x79,
5777 0x81, 0x6a, 0x42, 0x45, 0x71, 0x82, 0x86, 0x9f,
5778 0xbd, 0xbd, 0xb4, 0xc8, 0xaf, 0x6d, 0x53, 0x40,
5779 0x68, 0x5e, 0x5e, 0x60, 0x58, 0x60, 0x86, 0xaa,
5780 0x74, 0x5c, 0x79, 0x60, 0x63, 0x79, 0x47, 0x46,
5781 0x47, 0x46, 0x45, 0x45, 0x46, 0x44, 0x3e, 0x38,
5782 0x28, 0x28, 0x29, 0x2c, 0x32, 0x38, 0x3d, 0x3f,
5783 0x29, 0x1a, 0x3d, 0x6a, 0x96, 0x83, 0x9d, 0xc1,
5784 0x86, 0x73, 0x70, 0x81, 0x85, 0x78, 0x76, 0x82,
5785 0x90, 0x96, 0x93, 0x8e, 0x96, 0x9b, 0x80, 0x5a,
5786 0x6d, 0x6e, 0x68, 0x58, 0x4c, 0x52, 0x6b, 0x81,
5787 0x6b, 0x67, 0x63, 0x64, 0x68, 0x69, 0x66, 0x61,
5788 0x4b, 0x4a, 0x4a, 0x51, 0x58, 0x5a, 0x55, 0x4e,
5789 0x59, 0x5f, 0x59, 0x47, 0x42, 0x51, 0x62, 0x6a,
5790 0x54, 0x5b, 0x5d, 0x58, 0x56, 0x5d, 0x67, 0x6b,
5791 0x6c, 0x5e, 0x47, 0x5c, 0x69, 0x5e, 0x60, 0x54,
5792 0x56, 0x60, 0x66, 0x66, 0x6a, 0x6d, 0x63, 0x53,
5793 0x41, 0x41, 0x3f, 0x3d, 0x38, 0x32, 0x2b, 0x26,
5794 0x1b, 0x58, 0xa3, 0x64, 0x1f, 0x45, 0x47, 0x21,
5795 0xae, 0xa1, 0x2a, 0x53, 0x47, 0x3c, 0x4e, 0x95,
5796 0x7d, 0x58, 0x38, 0x33, 0x35, 0x34, 0x41, 0x56,
5797 0x51, 0x39, 0x35, 0x47, 0x5a, 0x6a, 0x70, 0x69,
5798 0x85, 0x8d, 0x70, 0x5a, 0x74, 0x8c, 0x8d, 0x93,
5799 0x80, 0x9e, 0x66, 0x4e, 0x82, 0x68, 0x53, 0xa6,
5800 0xe2, 0xee, 0x92, 0x29, 0x2f, 0x59, 0x67, 0x76,
5801 0x6d, 0x49, 0x70, 0x7d, 0x77, 0x65, 0x22, 0x0f,
5802 0xd3, 0xd4, 0xd2, 0xd4, 0xe7, 0xa3, 0x2d, 0x8f,
5803 0xe3, 0xdd, 0xd6, 0xd3, 0xd4, 0xd6, 0xd7, 0xd6,
5804 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdb,
5805 0xdd, 0xdd, 0xdf, 0xe0, 0xe2, 0xe3, 0xe5, 0xe5,
5806 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5807 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5808 0xe4, 0xe7, 0xde, 0xdc, 0xed, 0xe8, 0xcc, 0xc7,
5809 0xdc, 0xe1, 0xe7, 0xda, 0xd9, 0xef, 0xf3, 0xeb,
5810 0xec, 0xf4, 0xdf, 0xc4, 0xd9, 0xd6, 0xc0, 0xc0,
5811 0xe4, 0xdf, 0xc8, 0xf0, 0xc0, 0xcc, 0xf0, 0xde,
5812 0xdc, 0xcd, 0xc7, 0xea, 0xd3, 0xd9, 0xd5, 0xa4,
5813 0xe1, 0x9c, 0xab, 0xee, 0xf2, 0xde, 0xeb, 0xd7,
5814 0xd7, 0xcd, 0xe9, 0xe1, 0xbd, 0xb9, 0xb6, 0xab,
5815 0x95, 0x93, 0x68, 0x63, 0x74, 0x9c, 0xe6, 0xf6,
5816 0xc1, 0xc5, 0xc4, 0xbd, 0xd4, 0xd4, 0xc3, 0xeb,
5817 0xf3, 0xe8, 0xe9, 0xf3, 0xe7, 0xc8, 0xc6, 0xe0,
5818 0xbb, 0xac, 0xee, 0xda, 0xc4, 0xdf, 0xa2, 0x72,
5819 0x25, 0x90, 0xff, 0xff, 0xec, 0xdd, 0xdd, 0xda,
5820 0xad, 0x4e, 0x4c, 0x88, 0x7d, 0x73, 0x8e, 0x86,
5821 0x61, 0x5d, 0x50, 0x60, 0x83, 0x84, 0x7b, 0x8b,
5822 0xbd, 0xaa, 0x98, 0xa2, 0x99, 0x9d, 0xa7, 0x72,
5823 0x6c, 0x8c, 0x80, 0x6b, 0x67, 0x51, 0x60, 0xa7,
5824 0x78, 0x4c, 0x5b, 0x60, 0x50, 0x57, 0x48, 0x2b,
5825 0x41, 0x42, 0x43, 0x42, 0x41, 0x3f, 0x40, 0x41,
5826 0x41, 0x46, 0x44, 0x35, 0x26, 0x2e, 0x4c, 0x69,
5827 0x65, 0x49, 0x34, 0x4c, 0x96, 0x62, 0x3a, 0x4e,
5828 0x6f, 0x67, 0x61, 0x61, 0x66, 0x6b, 0x6e, 0x70,
5829 0x6b, 0x52, 0x53, 0x72, 0x7d, 0x69, 0x62, 0x70,
5830 0x5c, 0x5c, 0x63, 0x71, 0x81, 0x85, 0x7f, 0x76,
5831 0x7e, 0x75, 0x6a, 0x64, 0x65, 0x67, 0x66, 0x64,
5832 0x5d, 0x5b, 0x5c, 0x62, 0x69, 0x6a, 0x65, 0x5e,
5833 0x5f, 0x5d, 0x53, 0x4c, 0x58, 0x6e, 0x75, 0x6f,
5834 0x6b, 0x66, 0x67, 0x6e, 0x70, 0x67, 0x5b, 0x53,
5835 0x5a, 0x61, 0x5d, 0x63, 0x44, 0x28, 0x58, 0x8c,
5836 0x6f, 0x6b, 0x5e, 0x52, 0x55, 0x5f, 0x5e, 0x53,
5837 0x3a, 0x3a, 0x3d, 0x42, 0x44, 0x3e, 0x31, 0x27,
5838 0x19, 0x5f, 0x91, 0x54, 0x2c, 0x3a, 0x28, 0x29,
5839 0xd9, 0x82, 0x27, 0x54, 0x59, 0x35, 0x40, 0x87,
5840 0x99, 0x4c, 0x58, 0x72, 0x4b, 0x55, 0x6b, 0x3b,
5841 0x6b, 0x71, 0x6c, 0x59, 0x58, 0x75, 0x8d, 0x8c,
5842 0x78, 0x92, 0x93, 0x92, 0x9e, 0x8c, 0x6a, 0x61,
5843 0x7c, 0x7a, 0x74, 0x68, 0x47, 0x27, 0x3b, 0x72,
5844 0xc3, 0xe0, 0xbe, 0x85, 0x72, 0x64, 0x6b, 0x95,
5845 0x8d, 0x6f, 0x8b, 0x66, 0x6b, 0x80, 0x19, 0x00,
5846 0xd8, 0xd9, 0xd7, 0xcc, 0xe4, 0x9b, 0x25, 0x9d,
5847 0xe6, 0xe0, 0xd9, 0xd6, 0xd8, 0xda, 0xda, 0xda,
5848 0xd8, 0xd8, 0xd9, 0xd9, 0xda, 0xdb, 0xdb, 0xdb,
5849 0xde, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe4,
5850 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
5851 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
5852 0xe6, 0xe4, 0xe9, 0xce, 0xc5, 0xd4, 0xd0, 0xdb,
5853 0xd1, 0xe1, 0xe8, 0xdc, 0xcc, 0xdc, 0xef, 0xdc,
5854 0xe4, 0xe1, 0xed, 0xc1, 0xdf, 0xd6, 0xc9, 0xd5,
5855 0xef, 0xd2, 0xcf, 0xe9, 0x90, 0xb1, 0xd1, 0xd3,
5856 0xc8, 0xda, 0xda, 0xca, 0xc9, 0xea, 0xbd, 0xa7,
5857 0xa8, 0x88, 0xce, 0xe9, 0xf6, 0xe3, 0xea, 0xe0,
5858 0xdb, 0xe8, 0xe5, 0xdd, 0xe3, 0xbe, 0x9e, 0xcc,
5859 0xd1, 0x94, 0x7e, 0x6b, 0x5b, 0x96, 0xdc, 0xe7,
5860 0xea, 0xf4, 0xf6, 0xe7, 0xec, 0xda, 0xc0, 0xe6,
5861 0xd7, 0xdf, 0xe6, 0xe7, 0xe9, 0xe8, 0xd6, 0xbd,
5862 0xcf, 0xcd, 0xd4, 0xef, 0xe9, 0xd0, 0x9e, 0x3a,
5863 0x34, 0x1b, 0x7c, 0xed, 0xc6, 0xd0, 0xd7, 0x7e,
5864 0x57, 0x4a, 0x6a, 0x88, 0x68, 0x40, 0x51, 0x79,
5865 0x5e, 0x54, 0x42, 0x42, 0x52, 0x58, 0x65, 0x82,
5866 0xcd, 0xba, 0xa8, 0xa7, 0xa1, 0xc2, 0xc1, 0x55,
5867 0x48, 0x62, 0x51, 0x3c, 0x41, 0x36, 0x4f, 0x9b,
5868 0x83, 0x63, 0x6e, 0x93, 0x6d, 0x39, 0x43, 0x46,
5869 0x46, 0x46, 0x40, 0x35, 0x2c, 0x30, 0x3e, 0x4c,
5870 0x54, 0x57, 0x4f, 0x3b, 0x29, 0x30, 0x50, 0x6e,
5871 0x36, 0x47, 0x46, 0x51, 0x9d, 0x7e, 0x5e, 0x6e,
5872 0x65, 0x71, 0x71, 0x68, 0x68, 0x6e, 0x63, 0x4e,
5873 0x48, 0x57, 0x5f, 0x57, 0x4c, 0x4c, 0x54, 0x5b,
5874 0x52, 0x58, 0x6b, 0x8b, 0xa6, 0xaa, 0x96, 0x80,
5875 0x83, 0x82, 0x83, 0x87, 0x89, 0x84, 0x79, 0x70,
5876 0x6f, 0x6b, 0x68, 0x69, 0x6b, 0x68, 0x5f, 0x56,
5877 0x46, 0x48, 0x45, 0x45, 0x54, 0x6a, 0x6f, 0x67,
5878 0x70, 0x59, 0x51, 0x5e, 0x66, 0x5c, 0x56, 0x5b,
5879 0x50, 0x73, 0x74, 0x73, 0x74, 0x78, 0x7b, 0x5c,
5880 0x4d, 0x56, 0x5a, 0x5a, 0x5e, 0x60, 0x54, 0x42,
5881 0x51, 0x4b, 0x41, 0x35, 0x2d, 0x2c, 0x30, 0x35,
5882 0x1f, 0x5d, 0x7b, 0x52, 0x5a, 0x6c, 0x68, 0xa4,
5883 0xcc, 0x6b, 0x5f, 0x53, 0x3b, 0x0d, 0x2e, 0x72,
5884 0x9d, 0x64, 0x53, 0x60, 0x65, 0x7b, 0x8a, 0x77,
5885 0x71, 0x63, 0x67, 0x7a, 0x75, 0x56, 0x4d, 0x5e,
5886 0x6a, 0x78, 0x76, 0x7c, 0x8d, 0x83, 0x7a, 0x8d,
5887 0x76, 0x6c, 0x7f, 0x95, 0x9a, 0x9c, 0x7c, 0x40,
5888 0x5b, 0xa3, 0xca, 0xb4, 0x82, 0x51, 0x5a, 0x93,
5889 0x99, 0x62, 0x83, 0x60, 0x86, 0xb3, 0x38, 0x13,
5890 0xe3, 0xe4, 0xe4, 0xce, 0xe6, 0x8e, 0x19, 0xa1,
5891 0xea, 0xe4, 0xdd, 0xda, 0xdb, 0xdd, 0xde, 0xdd,
5892 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc,
5893 0xdf, 0xdf, 0xe0, 0xe1, 0xe1, 0xe2, 0xe3, 0xe3,
5894 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
5895 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5896 0xe6, 0xe7, 0xf5, 0xe2, 0xc6, 0xcd, 0xd9, 0xe3,
5897 0xd8, 0xed, 0xe7, 0xe2, 0xda, 0xd9, 0xe8, 0xd8,
5898 0xeb, 0xe4, 0xfa, 0xd1, 0xdc, 0xdd, 0xc9, 0xe2,
5899 0xf5, 0xb1, 0xbf, 0xea, 0xa4, 0xd7, 0xc6, 0xb4,
5900 0xb6, 0xe4, 0xe9, 0xab, 0xcb, 0xf5, 0xc4, 0x8e,
5901 0x7e, 0xc9, 0xd5, 0xbd, 0xc4, 0xb5, 0xd4, 0xd8,
5902 0xcd, 0xae, 0xb4, 0xbb, 0xb3, 0xa9, 0xa1, 0xad,
5903 0xc4, 0x73, 0x7c, 0x6e, 0x4f, 0x94, 0xd4, 0xd8,
5904 0xbb, 0xd1, 0xe2, 0xde, 0xe8, 0xd9, 0xc4, 0xef,
5905 0xdc, 0xe4, 0xe2, 0xd2, 0xd7, 0xf4, 0xee, 0xc2,
5906 0xc3, 0xd7, 0xc4, 0xee, 0xd3, 0xa6, 0xd8, 0xc1,
5907 0x59, 0x58, 0x58, 0xc5, 0xdd, 0xe2, 0xd4, 0xc5,
5908 0x5e, 0x64, 0x4d, 0x46, 0x73, 0x68, 0x39, 0x52,
5909 0x69, 0x60, 0x55, 0x50, 0x4e, 0x4f, 0x64, 0x83,
5910 0x97, 0xa1, 0x99, 0xa2, 0xb2, 0xc7, 0xac, 0x41,
5911 0x38, 0x3a, 0x50, 0x6a, 0x6d, 0x69, 0x73, 0x80,
5912 0x62, 0x54, 0x41, 0x5b, 0x6a, 0x4c, 0x43, 0x52,
5913 0x35, 0x47, 0x59, 0x5a, 0x4c, 0x3e, 0x39, 0x3c,
5914 0x44, 0x3a, 0x2e, 0x29, 0x2b, 0x2f, 0x2f, 0x2e,
5915 0x34, 0x4a, 0x72, 0x87, 0xa0, 0x64, 0x45, 0x49,
5916 0x6b, 0x74, 0x6f, 0x60, 0x5f, 0x69, 0x63, 0x51,
5917 0x50, 0x4b, 0x58, 0x76, 0x87, 0x7e, 0x6f, 0x69,
5918 0x6a, 0x71, 0x7a, 0x7e, 0x79, 0x6e, 0x62, 0x5b,
5919 0x76, 0x6e, 0x66, 0x66, 0x6e, 0x77, 0x7e, 0x80,
5920 0x75, 0x6f, 0x68, 0x63, 0x5f, 0x56, 0x49, 0x3e,
5921 0x2f, 0x40, 0x4a, 0x46, 0x48, 0x55, 0x61, 0x63,
5922 0x83, 0x65, 0x58, 0x64, 0x64, 0x52, 0x50, 0x60,
5923 0x7b, 0x51, 0x24, 0x41, 0x64, 0x66, 0x68, 0x58,
5924 0x59, 0x59, 0x4a, 0x34, 0x2f, 0x43, 0x5c, 0x68,
5925 0x5a, 0x64, 0x6d, 0x6c, 0x68, 0x6c, 0x7a, 0x88,
5926 0x96, 0x9e, 0xa0, 0x6f, 0x5b, 0x5c, 0x61, 0xa4,
5927 0x9f, 0x4e, 0x8c, 0x7b, 0xa5, 0xaa, 0x9f, 0x75,
5928 0x7b, 0x7d, 0x6a, 0x71, 0x95, 0x97, 0x84, 0x8b,
5929 0x6d, 0x93, 0x91, 0x6f, 0x6b, 0x7b, 0x7c, 0x74,
5930 0x6d, 0x78, 0x74, 0x75, 0x7c, 0x6b, 0x65, 0x82,
5931 0xa9, 0x99, 0x8a, 0xa1, 0xc5, 0xb8, 0x8b, 0x74,
5932 0xd7, 0xdd, 0xda, 0xd5, 0xd2, 0xca, 0xcb, 0xd9,
5933 0xc1, 0x77, 0xae, 0xb3, 0xcb, 0xa7, 0x00, 0x00,
5934 0xe3, 0xe8, 0xee, 0xdb, 0xf2, 0x8b, 0x25, 0xb5,
5935 0xec, 0xe6, 0xdf, 0xdc, 0xde, 0xe0, 0xe0, 0xe0,
5936 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdc, 0xdc,
5937 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
5938 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
5939 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5940 0xe9, 0xe3, 0xe7, 0xf0, 0xdc, 0xd0, 0xde, 0xd4,
5941 0xcd, 0xeb, 0xe1, 0xe3, 0xe7, 0xd4, 0xd9, 0xe5,
5942 0xec, 0xe7, 0xf2, 0xe2, 0xd0, 0xe0, 0xc2, 0xe5,
5943 0xdd, 0xaa, 0xc4, 0xcf, 0xa0, 0xec, 0xd4, 0xc2,
5944 0xbb, 0xdd, 0xde, 0xa6, 0xe0, 0xe8, 0xd2, 0x77,
5945 0x89, 0xe4, 0xee, 0xff, 0xe2, 0xcd, 0xe4, 0xdb,
5946 0xeb, 0xf3, 0xf7, 0xed, 0xfd, 0xff, 0xcd, 0xa6,
5947 0xab, 0x8e, 0x66, 0x65, 0x74, 0xaa, 0xde, 0xb6,
5948 0xcf, 0xe3, 0xf2, 0xe8, 0xea, 0xd3, 0xb7, 0xde,
5949 0xde, 0xdd, 0xf1, 0xf3, 0xd7, 0xca, 0xca, 0xbf,
5950 0xde, 0xd7, 0xdb, 0xd4, 0xd5, 0xda, 0xb2, 0x7e,
5951 0xad, 0xea, 0xd0, 0xea, 0xdc, 0xcc, 0xaa, 0xa1,
5952 0x61, 0x3e, 0x5f, 0x71, 0x5f, 0x49, 0x4b, 0x86,
5953 0x5b, 0x52, 0x54, 0x57, 0x53, 0x5b, 0x7d, 0x9c,
5954 0x9d, 0xbf, 0xa9, 0xaf, 0xc9, 0xb2, 0x7f, 0x45,
5955 0x3a, 0x37, 0x47, 0x5c, 0x5b, 0x50, 0x4f, 0x53,
5956 0x45, 0x67, 0x72, 0x59, 0x54, 0x4e, 0x3c, 0x49,
5957 0x2c, 0x37, 0x3f, 0x3c, 0x34, 0x36, 0x45, 0x54,
5958 0x44, 0x36, 0x2a, 0x2e, 0x38, 0x38, 0x28, 0x16,
5959 0x40, 0x21, 0x1a, 0x36, 0x6c, 0x3e, 0x34, 0x5b,
5960 0x65, 0x66, 0x64, 0x64, 0x6a, 0x72, 0x72, 0x6d,
5961 0x67, 0x5a, 0x66, 0x7f, 0x74, 0x51, 0x54, 0x75,
5962 0x84, 0x88, 0x86, 0x76, 0x61, 0x55, 0x56, 0x5d,
5963 0x6f, 0x63, 0x57, 0x54, 0x5e, 0x6e, 0x7c, 0x83,
5964 0x74, 0x6f, 0x68, 0x65, 0x63, 0x5b, 0x4f, 0x45,
5965 0x45, 0x55, 0x5c, 0x55, 0x53, 0x5d, 0x66, 0x67,
5966 0x6e, 0x43, 0x33, 0x57, 0x77, 0x6d, 0x52, 0x45,
5967 0x68, 0x53, 0x4e, 0x7d, 0x82, 0x59, 0x5d, 0x6e,
5968 0x4a, 0x67, 0x7d, 0x7a, 0x72, 0x79, 0x8a, 0x95,
5969 0x8f, 0x8a, 0x7e, 0x6f, 0x60, 0x55, 0x50, 0x4e,
5970 0x72, 0x5b, 0x80, 0x74, 0x52, 0x60, 0x78, 0xa0,
5971 0x81, 0x62, 0xb9, 0x86, 0x83, 0x84, 0x94, 0x80,
5972 0x54, 0x61, 0x6f, 0x74, 0x70, 0x67, 0x59, 0x4c,
5973 0x77, 0x82, 0x8c, 0x9e, 0x9b, 0x6d, 0x5f, 0x89,
5974 0x96, 0x8a, 0x66, 0x59, 0x69, 0x5c, 0x3f, 0x3c,
5975 0x75, 0x6d, 0x81, 0xab, 0xa5, 0x71, 0x81, 0xd1,
5976 0xba, 0xe8, 0xd0, 0x6e, 0x4c, 0x88, 0x99, 0x63,
5977 0xb3, 0x7c, 0x9e, 0xa4, 0xba, 0x8a, 0x0a, 0x36,
5978 0xdf, 0xe5, 0xec, 0xe1, 0xf1, 0x7b, 0x2e, 0xbd,
5979 0xed, 0xe7, 0xe0, 0xdd, 0xdf, 0xe1, 0xe1, 0xe1,
5980 0xe0, 0xe0, 0xdf, 0xdf, 0xde, 0xdd, 0xdd, 0xdd,
5981 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
5982 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
5983 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
5984 0xed, 0xe5, 0xdb, 0xe8, 0xd8, 0xc9, 0xdd, 0xd7,
5985 0xc2, 0xe6, 0xe5, 0xe2, 0xe4, 0xc7, 0xc4, 0xe7,
5986 0xe8, 0xe3, 0xe2, 0xe4, 0xc6, 0xd7, 0xbd, 0xdb,
5987 0xc6, 0xcc, 0xea, 0xab, 0x86, 0xd0, 0xcd, 0xd1,
5988 0xd3, 0xd2, 0xbf, 0xb9, 0xf2, 0xd2, 0xcb, 0x81,
5989 0xb0, 0xd2, 0xcc, 0xd8, 0xbf, 0xd9, 0xe3, 0xf0,
5990 0xe9, 0xda, 0xf7, 0xf2, 0xdb, 0xf4, 0xf0, 0xc4,
5991 0x82, 0x6e, 0x6e, 0x6d, 0x63, 0x91, 0xd1, 0xd4,
5992 0xd2, 0xe2, 0xec, 0xe4, 0xed, 0xda, 0xbd, 0xe0,
5993 0xcc, 0xd4, 0xec, 0xd6, 0x93, 0x7c, 0x8d, 0x8e,
5994 0x6a, 0xa7, 0xc7, 0xa6, 0x75, 0x74, 0x99, 0xb1,
5995 0x3f, 0x37, 0x51, 0xa1, 0xbe, 0xcd, 0xb9, 0x87,
5996 0x5c, 0x20, 0x4f, 0x69, 0x50, 0x43, 0x42, 0x72,
5997 0x77, 0x63, 0x60, 0x5d, 0x4b, 0x4d, 0x6a, 0x7e,
5998 0x86, 0xb8, 0xaa, 0xbd, 0xde, 0xa8, 0x69, 0x50,
5999 0x56, 0x68, 0x52, 0x40, 0x49, 0x38, 0x3d, 0x77,
6000 0x9d, 0x76, 0x74, 0x76, 0x6a, 0x52, 0x31, 0x2d,
6001 0x3a, 0x41, 0x45, 0x40, 0x34, 0x2c, 0x2c, 0x30,
6002 0x46, 0x43, 0x3d, 0x38, 0x34, 0x31, 0x30, 0x30,
6003 0x2e, 0x51, 0x40, 0x3f, 0x9e, 0x82, 0x54, 0x67,
6004 0x65, 0x5f, 0x61, 0x6d, 0x74, 0x73, 0x71, 0x73,
6005 0x77, 0x75, 0x71, 0x6a, 0x66, 0x68, 0x6f, 0x75,
6006 0x69, 0x69, 0x67, 0x64, 0x60, 0x5f, 0x60, 0x63,
6007 0x63, 0x5d, 0x57, 0x58, 0x60, 0x68, 0x6c, 0x6d,
6008 0x75, 0x71, 0x6f, 0x71, 0x73, 0x71, 0x68, 0x60,
6009 0x60, 0x5f, 0x57, 0x50, 0x59, 0x67, 0x68, 0x5d,
6010 0x61, 0x5e, 0x62, 0x63, 0x4e, 0x34, 0x36, 0x4a,
6011 0x77, 0x65, 0x55, 0x76, 0x7f, 0x65, 0x68, 0x6a,
6012 0x4b, 0x70, 0x90, 0x91, 0x86, 0x85, 0x8d, 0x93,
6013 0x91, 0x7e, 0x6c, 0x6b, 0x77, 0x81, 0x7e, 0x76,
6014 0x50, 0x3e, 0x7e, 0x86, 0x60, 0x6b, 0x75, 0x7d,
6015 0x88, 0x53, 0x61, 0x66, 0x89, 0x91, 0x89, 0x75,
6016 0x5e, 0x7e, 0x83, 0x78, 0x7d, 0x79, 0x73, 0x7c,
6017 0x7e, 0x85, 0x56, 0x3a, 0x6b, 0x90, 0x84, 0x7b,
6018 0x5a, 0xa7, 0xbb, 0x7d, 0x36, 0x0f, 0x1d, 0x4a,
6019 0xa6, 0x8c, 0x8b, 0x91, 0x87, 0x8c, 0x8e, 0x79,
6020 0x8e, 0x35, 0x5b, 0xd2, 0xc3, 0x55, 0x3c, 0x6f,
6021 0x89, 0x94, 0x8f, 0x86, 0xa1, 0x75, 0x1a, 0x25,
6022 0xe3, 0xe5, 0xe7, 0xe0, 0xe6, 0x65, 0x35, 0xbf,
6023 0xed, 0xe7, 0xe0, 0xdd, 0xdf, 0xe1, 0xe1, 0xe0,
6024 0xe2, 0xe1, 0xe1, 0xe0, 0xdf, 0xde, 0xdd, 0xdd,
6025 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6026 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6027 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
6028 0xea, 0xea, 0xec, 0xef, 0xe5, 0xdc, 0xdc, 0xd7,
6029 0xc8, 0xe4, 0xf0, 0xe8, 0xe5, 0xd4, 0xc9, 0xe7,
6030 0xf8, 0xe9, 0xe3, 0xe0, 0xcd, 0xc2, 0xba, 0xc4,
6031 0xb9, 0xd3, 0xf2, 0xac, 0xbd, 0xd9, 0xb4, 0xb3,
6032 0xe5, 0xd7, 0xa7, 0xca, 0xe8, 0xcb, 0xb5, 0xa1,
6033 0xf3, 0xfa, 0xf8, 0xe0, 0xe2, 0xf7, 0xe5, 0xf0,
6034 0xe4, 0xe2, 0xcc, 0xad, 0xb1, 0xb1, 0xac, 0xd0,
6035 0xd3, 0x73, 0x6c, 0x6e, 0x6f, 0xab, 0xd3, 0xe3,
6036 0xdf, 0xe6, 0xe9, 0xe2, 0xf2, 0xe5, 0xc6, 0xe6,
6037 0xdc, 0xc3, 0xaf, 0x7d, 0x3f, 0x4b, 0x72, 0x6e,
6038 0x6b, 0xb3, 0xd1, 0xca, 0x7b, 0x35, 0x62, 0x93,
6039 0x3a, 0x22, 0x28, 0x63, 0xb7, 0x7f, 0x37, 0x4b,
6040 0x39, 0x2d, 0x4c, 0x3a, 0x3e, 0x4e, 0x38, 0x6a,
6041 0x56, 0x49, 0x5d, 0x75, 0x72, 0x7b, 0x93, 0x9a,
6042 0x8e, 0xae, 0x9d, 0xaa, 0xb8, 0x85, 0x4f, 0x2c,
6043 0x50, 0x68, 0x5b, 0x53, 0x60, 0x48, 0x41, 0x71,
6044 0x88, 0x5c, 0x47, 0x6e, 0x63, 0x28, 0x2c, 0x4a,
6045 0x41, 0x3e, 0x3b, 0x3a, 0x3f, 0x49, 0x56, 0x5f,
6046 0x37, 0x3f, 0x41, 0x35, 0x23, 0x1f, 0x2b, 0x3b,
6047 0x31, 0x74, 0x63, 0x40, 0x92, 0x82, 0x5a, 0x69,
6048 0x6d, 0x5e, 0x51, 0x52, 0x58, 0x5d, 0x67, 0x71,
6049 0x5e, 0x6c, 0x7d, 0x82, 0x76, 0x6b, 0x6d, 0x77,
6050 0x76, 0x73, 0x70, 0x70, 0x72, 0x6f, 0x67, 0x60,
6051 0x72, 0x6b, 0x64, 0x65, 0x6e, 0x79, 0x81, 0x83,
6052 0x76, 0x72, 0x6f, 0x70, 0x72, 0x6e, 0x65, 0x5c,
6053 0x5b, 0x57, 0x4a, 0x40, 0x48, 0x59, 0x5e, 0x56,
6054 0x59, 0x47, 0x42, 0x5c, 0x85, 0xa2, 0xaa, 0xa8,
6055 0x9f, 0x58, 0x32, 0x74, 0x99, 0x70, 0x5b, 0x58,
6056 0x70, 0x88, 0x99, 0x94, 0x89, 0x81, 0x7a, 0x71,
6057 0x72, 0x6f, 0x6e, 0x71, 0x74, 0x6d, 0x5d, 0x4e,
6058 0x61, 0x66, 0x8f, 0x80, 0x6f, 0x7b, 0x73, 0x81,
6059 0x61, 0x85, 0x73, 0x84, 0x77, 0x69, 0x53, 0x4e,
6060 0x62, 0x76, 0x70, 0x63, 0x72, 0x89, 0x97, 0xa2,
6061 0x42, 0x2d, 0x09, 0x2b, 0x7b, 0x7c, 0x51, 0x51,
6062 0x3d, 0x7d, 0x99, 0xa5, 0xd7, 0xed, 0xb9, 0x7d,
6063 0xa2, 0x8b, 0x52, 0x34, 0x64, 0xa3, 0xa5, 0x84,
6064 0xd9, 0xb0, 0xbd, 0xf1, 0xff, 0xff, 0x88, 0x00,
6065 0x44, 0x80, 0x77, 0xb9, 0xf5, 0x97, 0x32, 0x0a,
6066 0xe9, 0xe9, 0xe6, 0xe4, 0xe5, 0x61, 0x47, 0xcf,
6067 0xed, 0xe7, 0xe0, 0xdd, 0xde, 0xe0, 0xe1, 0xe0,
6068 0xe3, 0xe2, 0xe1, 0xe1, 0xdf, 0xde, 0xde, 0xdd,
6069 0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0,
6070 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6071 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
6072 0xec, 0xe2, 0xe6, 0xde, 0xe9, 0xf3, 0xd4, 0xc3,
6073 0xbd, 0xcd, 0xe4, 0xdd, 0xdf, 0xe5, 0xd6, 0xe1,
6074 0xee, 0xda, 0xde, 0xd8, 0xe0, 0xc5, 0xd6, 0xd3,
6075 0x90, 0xae, 0xd6, 0xa1, 0xd3, 0xc1, 0x9b, 0xbb,
6076 0xe8, 0xe6, 0xa0, 0xce, 0xd2, 0xd3, 0xa4, 0xba,
6077 0xf8, 0xda, 0xef, 0xe0, 0xde, 0xcd, 0xd8, 0xd7,
6078 0xc6, 0xb4, 0xd7, 0xe9, 0xe2, 0xef, 0xd9, 0xa8,
6079 0xc1, 0xb2, 0x8d, 0x86, 0x8a, 0x9c, 0xcc, 0xe0,
6080 0xe5, 0xe5, 0xe1, 0xd8, 0xec, 0xe0, 0xbf, 0xdb,
6081 0xe6, 0x97, 0x7b, 0x7d, 0x61, 0x57, 0x60, 0x53,
6082 0x5a, 0x3d, 0x68, 0x74, 0x8d, 0x93, 0x57, 0x67,
6083 0x62, 0x50, 0x85, 0xa5, 0xe3, 0xa6, 0x6d, 0x81,
6084 0x62, 0x4d, 0x6a, 0x43, 0x31, 0x46, 0x3b, 0x6f,
6085 0x79, 0x55, 0x4f, 0x56, 0x4f, 0x63, 0x8a, 0x96,
6086 0xad, 0xae, 0x91, 0x97, 0xa6, 0xa6, 0xa3, 0x7d,
6087 0x72, 0x5b, 0x51, 0x56, 0x54, 0x4f, 0x51, 0x56,
6088 0x4e, 0x72, 0x52, 0x88, 0xa9, 0x61, 0x42, 0x2d,
6089 0x33, 0x34, 0x37, 0x3c, 0x3f, 0x3c, 0x35, 0x2e,
6090 0x45, 0x51, 0x57, 0x4e, 0x3d, 0x36, 0x40, 0x4e,
6091 0x52, 0x53, 0x50, 0x61, 0xa1, 0x76, 0x5e, 0x80,
6092 0x63, 0x5b, 0x54, 0x56, 0x5e, 0x69, 0x71, 0x76,
6093 0x79, 0x75, 0x71, 0x75, 0x7f, 0x86, 0x84, 0x7e,
6094 0x6d, 0x6d, 0x6f, 0x6f, 0x6e, 0x6a, 0x66, 0x62,
6095 0x48, 0x4e, 0x5a, 0x6b, 0x79, 0x7d, 0x78, 0x70,
6096 0x77, 0x70, 0x69, 0x64, 0x60, 0x57, 0x49, 0x3e,
6097 0x4f, 0x55, 0x50, 0x3f, 0x3a, 0x49, 0x5b, 0x63,
6098 0x96, 0xa2, 0xa8, 0x9c, 0x8a, 0x80, 0x7e, 0x7f,
6099 0x7f, 0x6b, 0x53, 0x6f, 0x80, 0x6d, 0x60, 0x49,
6100 0x64, 0x6f, 0x76, 0x79, 0x82, 0x8d, 0x8b, 0x81,
6101 0x71, 0x7e, 0x88, 0x84, 0x75, 0x6c, 0x70, 0x79,
6102 0x7e, 0x93, 0x8e, 0x58, 0x5f, 0x72, 0x64, 0x8f,
6103 0xbe, 0xfa, 0x86, 0x72, 0x75, 0xbb, 0xc8, 0xbd,
6104 0xba, 0x63, 0x56, 0x41, 0x11, 0x6b, 0xd4, 0xb5,
6105 0x58, 0x7d, 0x71, 0x65, 0x7a, 0x60, 0x35, 0x3b,
6106 0x1d, 0x59, 0x5f, 0x4d, 0x77, 0x96, 0x60, 0x15,
6107 0x25, 0x50, 0x37, 0x33, 0x4b, 0x12, 0x1f, 0xb1,
6108 0xd4, 0xac, 0xd0, 0xff, 0xf1, 0xce, 0xb5, 0x8f,
6109 0xe6, 0xda, 0x72, 0xc0, 0xf6, 0x61, 0x14, 0x05,
6110 0xe4, 0xe2, 0xd6, 0xe3, 0xdd, 0x44, 0x4c, 0xd6,
6111 0xea, 0xe6, 0xe0, 0xdf, 0xe0, 0xe0, 0xdf, 0xdd,
6112 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0, 0xe0,
6113 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xdf,
6114 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6115 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6116 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6117 0xb1, 0x9e, 0xd6, 0xd1, 0xe7, 0xf2, 0xd6, 0xcc,
6118 0xe9, 0xe9, 0xf2, 0xd3, 0xd6, 0xd3, 0xd8, 0xcb,
6119 0x95, 0xe2, 0xd8, 0xa1, 0xac, 0x8d, 0xa4, 0xd9,
6120 0xd6, 0xe7, 0xa0, 0xad, 0xe7, 0xd0, 0xa8, 0xea,
6121 0xf2, 0xe1, 0xdd, 0xe1, 0xdb, 0xd4, 0xd5, 0xd7,
6122 0xcb, 0xe9, 0xf6, 0xec, 0xce, 0xc6, 0xd3, 0xc5,
6123 0x98, 0xa0, 0x96, 0x53, 0x6b, 0xaa, 0xea, 0xf1,
6124 0xdc, 0xdd, 0xe2, 0xf2, 0xe4, 0xd9, 0xb0, 0xcd,
6125 0xc6, 0xb4, 0xb6, 0x8e, 0x77, 0x90, 0x7d, 0x57,
6126 0x7a, 0x94, 0x75, 0x90, 0x51, 0x83, 0xab, 0xab,
6127 0xac, 0xaa, 0xbe, 0xb8, 0xca, 0x85, 0x59, 0x7c,
6128 0x58, 0x5f, 0x60, 0x59, 0x4f, 0x4b, 0x49, 0x48,
6129 0x6a, 0x48, 0x71, 0x43, 0x69, 0x7e, 0x7e, 0x98,
6130 0xa9, 0xa7, 0xa7, 0xac, 0xb6, 0x8a, 0x4a, 0x4c,
6131 0x44, 0x5e, 0x40, 0x59, 0x75, 0x5a, 0x4f, 0x36,
6132 0x46, 0x6b, 0x59, 0x69, 0x4e, 0x12, 0x3c, 0x6c,
6133 0x65, 0x47, 0x3b, 0x48, 0x48, 0x36, 0x35, 0x45,
6134 0x37, 0x41, 0x48, 0x45, 0x3d, 0x3d, 0x49, 0x56,
6135 0x7a, 0x69, 0x5a, 0x69, 0xa2, 0x6b, 0x4d, 0x6c,
6136 0x65, 0x6a, 0x71, 0x74, 0x72, 0x6f, 0x6f, 0x70,
6137 0x61, 0x52, 0x4f, 0x5c, 0x5d, 0x52, 0x57, 0x69,
6138 0x70, 0x6a, 0x67, 0x6f, 0x7d, 0x86, 0x87, 0x83,
6139 0x6c, 0x7b, 0x8f, 0x98, 0x93, 0x87, 0x7c, 0x76,
6140 0x76, 0x74, 0x71, 0x70, 0x6d, 0x68, 0x61, 0x5b,
6141 0x5b, 0x6d, 0x71, 0x68, 0x74, 0x92, 0x9a, 0x8d,
6142 0x9e, 0x9e, 0x90, 0x8f, 0x9e, 0x94, 0x82, 0x83,
6143 0x8b, 0x70, 0x60, 0x5e, 0x57, 0x68, 0x8a, 0x82,
6144 0x5e, 0x75, 0x8e, 0x8f, 0x8e, 0x83, 0x76, 0x88,
6145 0x8d, 0x80, 0x7a, 0x73, 0x64, 0x9f, 0x87, 0x78,
6146 0x64, 0x75, 0x85, 0x80, 0x7e, 0xa7, 0xbc, 0x96,
6147 0xc4, 0xd5, 0xa5, 0x57, 0x63, 0xaf, 0xb4, 0x74,
6148 0x7a, 0x97, 0x7c, 0x5a, 0x90, 0x85, 0x2d, 0x34,
6149 0x0e, 0x33, 0x63, 0x34, 0x3d, 0x49, 0x57, 0x11,
6150 0x46, 0x7d, 0xa0, 0x8e, 0x37, 0x18, 0x4a, 0x41,
6151 0x2f, 0x20, 0x27, 0x31, 0x61, 0x5c, 0x54, 0xd6,
6152 0xd1, 0x64, 0x81, 0x9a, 0xa6, 0xd5, 0x8f, 0x24,
6153 0x0f, 0x1b, 0x3f, 0x2a, 0x2e, 0x45, 0x18, 0x02,
6154 0xe2, 0xe0, 0xd5, 0xe2, 0xd7, 0x41, 0x51, 0xd6,
6155 0xe8, 0xe3, 0xde, 0xdd, 0xde, 0xdf, 0xdd, 0xdb,
6156 0xdb, 0xdb, 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf,
6157 0xe0, 0xe0, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6158 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6159 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6160 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6161 0xe1, 0x9b, 0x8a, 0xcf, 0xe0, 0xf0, 0xdb, 0xb8,
6162 0xd1, 0xe7, 0xe2, 0xd9, 0xe2, 0x9e, 0xad, 0xaf,
6163 0x9f, 0xad, 0xdb, 0xb0, 0xa8, 0x99, 0xbe, 0xd8,
6164 0xb8, 0xe6, 0xb9, 0xc9, 0xe0, 0xb5, 0xc9, 0xec,
6165 0xea, 0xdc, 0xe3, 0xdb, 0xc5, 0xd8, 0xe4, 0xc2,
6166 0xdf, 0xe7, 0xde, 0xd8, 0xdf, 0xe3, 0xde, 0xd7,
6167 0x8d, 0xa4, 0xad, 0x41, 0x3c, 0x9e, 0xdb, 0xcb,
6168 0xe2, 0xea, 0xe3, 0xdc, 0xcf, 0xdf, 0xc8, 0xe4,
6169 0x94, 0x4c, 0x65, 0x78, 0x7f, 0x64, 0x2a, 0x5b,
6170 0x58, 0x7a, 0x47, 0x5d, 0x81, 0x72, 0x8b, 0xe5,
6171 0xb4, 0xb8, 0xb2, 0x67, 0x66, 0x69, 0x58, 0x3f,
6172 0x5c, 0x4b, 0x4c, 0x65, 0x71, 0x64, 0x54, 0x51,
6173 0x96, 0x3c, 0x5e, 0x62, 0x6e, 0x85, 0x75, 0x6e,
6174 0x97, 0xa6, 0xb6, 0xc0, 0xad, 0x87, 0x5e, 0x32,
6175 0x4b, 0x5b, 0x5c, 0x68, 0x4a, 0x48, 0x84, 0x86,
6176 0x4e, 0xa0, 0x8d, 0x66, 0x4d, 0x40, 0x4e, 0x2c,
6177 0x42, 0x41, 0x3f, 0x41, 0x49, 0x50, 0x47, 0x39,
6178 0x29, 0x2f, 0x34, 0x37, 0x38, 0x3c, 0x46, 0x4e,
6179 0x73, 0x6e, 0x5c, 0x5e, 0x9a, 0x72, 0x4f, 0x5c,
6180 0x66, 0x63, 0x5e, 0x58, 0x54, 0x55, 0x59, 0x5c,
6181 0x69, 0x75, 0x77, 0x6a, 0x64, 0x6d, 0x75, 0x74,
6182 0x7a, 0x6b, 0x61, 0x6d, 0x83, 0x8b, 0x7b, 0x66,
6183 0x80, 0x7c, 0x7d, 0x83, 0x86, 0x7c, 0x65, 0x52,
6184 0x3c, 0x4d, 0x62, 0x6d, 0x6e, 0x6a, 0x6a, 0x6c,
6185 0x76, 0x5b, 0x47, 0x51, 0x70, 0x88, 0x8d, 0x88,
6186 0x82, 0x8c, 0x82, 0x6c, 0x70, 0x85, 0x84, 0x70,
6187 0x69, 0x5f, 0x7b, 0x71, 0x78, 0x79, 0x85, 0x6f,
6188 0x56, 0x5c, 0x85, 0x88, 0x6a, 0x73, 0x82, 0x77,
6189 0x68, 0x77, 0x77, 0xa6, 0xeb, 0xf9, 0xc5, 0xc5,
6190 0xc9, 0xc3, 0xa8, 0xcd, 0x98, 0x55, 0x98, 0xa7,
6191 0xa3, 0x7d, 0x7d, 0xad, 0xbf, 0x9d, 0x80, 0x82,
6192 0xae, 0xeb, 0xb4, 0xcd, 0xb1, 0x66, 0x8b, 0x57,
6193 0x4e, 0x3f, 0x34, 0x36, 0x25, 0x2b, 0x2e, 0x2f,
6194 0x37, 0x33, 0x17, 0x3c, 0x69, 0x62, 0x4c, 0x1b,
6195 0x38, 0x4f, 0x29, 0x13, 0x60, 0x62, 0x0a, 0x00,
6196 0x54, 0x80, 0x28, 0x92, 0xff, 0xd3, 0xa7, 0x9f,
6197 0x61, 0x41, 0x55, 0x67, 0x92, 0x9c, 0x3e, 0x02,
6198 0xdf, 0xdc, 0xd3, 0xe0, 0xcc, 0x3c, 0x59, 0xd6,
6199 0xe4, 0xdf, 0xda, 0xd9, 0xdb, 0xdc, 0xda, 0xd8,
6200 0xd9, 0xd9, 0xda, 0xda, 0xdb, 0xdc, 0xdc, 0xdd,
6201 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
6202 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6203 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6204 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6205 0xf4, 0xd7, 0x99, 0xc8, 0xdb, 0xe9, 0xf1, 0xc8,
6206 0xc7, 0xe1, 0xd6, 0xdc, 0xe5, 0x8e, 0xd3, 0xd5,
6207 0xa7, 0xdb, 0xdf, 0x98, 0xb3, 0xb8, 0xd2, 0xcb,
6208 0xb6, 0xdc, 0xb9, 0xe9, 0xde, 0xaa, 0xe3, 0xd6,
6209 0xda, 0xeb, 0xdc, 0xc4, 0xcd, 0xdb, 0xd1, 0xc4,
6210 0xd0, 0xda, 0xe6, 0xeb, 0xec, 0xd7, 0xca, 0xe5,
6211 0x7e, 0x85, 0xa5, 0x4a, 0x5e, 0xd0, 0xb5, 0x5b,
6212 0xaf, 0xd7, 0xe6, 0xde, 0xcf, 0xe4, 0xca, 0xda,
6213 0xab, 0xa8, 0x7a, 0x7f, 0x87, 0x5e, 0x50, 0x57,
6214 0x91, 0x9c, 0x74, 0x21, 0x1f, 0x7d, 0xf1, 0xef,
6215 0x8c, 0xbc, 0xff, 0xd3, 0xb4, 0x9e, 0x86, 0x60,
6216 0x47, 0x6d, 0x72, 0x4d, 0x42, 0x60, 0x6d, 0x5c,
6217 0x70, 0x5d, 0x6f, 0x48, 0x27, 0x76, 0x7b, 0x69,
6218 0x39, 0x45, 0x5d, 0xa2, 0xb3, 0xb0, 0xb7, 0x71,
6219 0x66, 0x5d, 0x57, 0x68, 0x5e, 0x5c, 0x71, 0x55,
6220 0x2e, 0x4c, 0x47, 0x5f, 0x5c, 0x33, 0x34, 0x2e,
6221 0x3e, 0x63, 0x76, 0x5d, 0x3f, 0x3a, 0x44, 0x4a,
6222 0x66, 0x5b, 0x4e, 0x49, 0x4c, 0x54, 0x5a, 0x5d,
6223 0x64, 0x69, 0x58, 0x53, 0x98, 0x81, 0x5c, 0x58,
6224 0x5d, 0x6a, 0x77, 0x78, 0x70, 0x6b, 0x70, 0x77,
6225 0x72, 0x87, 0x89, 0x71, 0x64, 0x6e, 0x74, 0x6d,
6226 0x6f, 0x6e, 0x6c, 0x69, 0x66, 0x64, 0x64, 0x64,
6227 0x6c, 0x71, 0x76, 0x76, 0x70, 0x68, 0x61, 0x5d,
6228 0x60, 0x69, 0x6e, 0x62, 0x50, 0x4a, 0x54, 0x63,
6229 0x36, 0x3d, 0x4c, 0x62, 0x77, 0x87, 0x95, 0x9e,
6230 0x6e, 0x7b, 0x75, 0x75, 0x7d, 0x6e, 0x6f, 0x94,
6231 0x8a, 0x3d, 0x52, 0x5a, 0x68, 0x52, 0x5b, 0x86,
6232 0x44, 0x67, 0x80, 0xa3, 0xc8, 0xbd, 0xb5, 0xd5,
6233 0xc1, 0xa9, 0xea, 0xc0, 0x78, 0x6a, 0x8b, 0xd0,
6234 0xca, 0xbf, 0xb9, 0xd2, 0xce, 0xbf, 0xaf, 0x6e,
6235 0x42, 0x2b, 0x2d, 0x51, 0x65, 0x57, 0x46, 0x45,
6236 0x40, 0x23, 0x6b, 0xb9, 0x73, 0x1e, 0x3d, 0x71,
6237 0x1c, 0x34, 0x1f, 0x36, 0x1e, 0x2e, 0x14, 0x2c,
6238 0x30, 0x64, 0x49, 0x4a, 0x69, 0x54, 0x36, 0x1a,
6239 0x36, 0x3f, 0x16, 0x1e, 0x56, 0x72, 0x8a, 0x9d,
6240 0x7e, 0xd7, 0xfe, 0xda, 0xe4, 0xdf, 0x6a, 0x01,
6241 0x55, 0x31, 0x3d, 0x3e, 0x54, 0x5c, 0x1f, 0x09,
6242 0xda, 0xd8, 0xd2, 0xdd, 0xbd, 0x35, 0x64, 0xd6,
6243 0xde, 0xda, 0xd5, 0xd4, 0xd6, 0xd8, 0xd7, 0xd5,
6244 0xd6, 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xda,
6245 0xdb, 0xdc, 0xdc, 0xdd, 0xdd, 0xde, 0xde, 0xde,
6246 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6247 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6248 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6249 0xe9, 0xdf, 0x9e, 0x97, 0xdf, 0xe4, 0xf2, 0xe1,
6250 0xa3, 0xb1, 0xcd, 0xe1, 0xdf, 0x96, 0xe3, 0xc7,
6251 0xaf, 0xbf, 0x98, 0xaa, 0xbb, 0xb6, 0xe5, 0xbb,
6252 0xc1, 0xc9, 0xa2, 0xe5, 0xbb, 0xb1, 0xf6, 0xe5,
6253 0xda, 0xec, 0xcf, 0xc0, 0xde, 0xda, 0xc2, 0xd1,
6254 0xdf, 0xd8, 0xd8, 0xd5, 0xe0, 0xe9, 0xd8, 0xd2,
6255 0x7c, 0x60, 0x8b, 0x55, 0x54, 0x8b, 0x60, 0x56,
6256 0x90, 0xb1, 0xc5, 0xd6, 0xdf, 0xf2, 0xb8, 0xaa,
6257 0x90, 0xa0, 0x72, 0x6a, 0x60, 0x3d, 0x45, 0x3c,
6258 0x87, 0xac, 0x8d, 0x74, 0x8a, 0x8f, 0x9b, 0xc8,
6259 0x5e, 0x61, 0xb0, 0xd1, 0xc2, 0x69, 0x48, 0x65,
6260 0x46, 0x56, 0x5a, 0x4f, 0x4c, 0x4d, 0x38, 0x19,
6261 0x88, 0x6e, 0x60, 0x6f, 0x55, 0x5d, 0x31, 0x52,
6262 0x82, 0x70, 0x4a, 0x90, 0xb7, 0xa8, 0xaa, 0x5a,
6263 0x38, 0x51, 0x50, 0x5b, 0x6e, 0x5b, 0x44, 0x41,
6264 0x3b, 0x56, 0x61, 0x73, 0x5a, 0x2c, 0x3a, 0x4e,
6265 0x39, 0x38, 0x39, 0x3f, 0x4c, 0x58, 0x5d, 0x5b,
6266 0x54, 0x3f, 0x29, 0x27, 0x38, 0x4f, 0x5c, 0x5f,
6267 0x59, 0x5f, 0x52, 0x55, 0xa2, 0x8e, 0x69, 0x65,
6268 0x65, 0x6c, 0x72, 0x73, 0x6f, 0x6d, 0x70, 0x74,
6269 0x6d, 0x71, 0x76, 0x79, 0x78, 0x79, 0x80, 0x88,
6270 0x89, 0x76, 0x60, 0x58, 0x5e, 0x67, 0x69, 0x67,
6271 0x68, 0x6e, 0x70, 0x68, 0x5a, 0x50, 0x50, 0x54,
6272 0x4a, 0x56, 0x60, 0x5e, 0x52, 0x4b, 0x4e, 0x55,
6273 0x4c, 0x56, 0x51, 0x46, 0x56, 0x78, 0x81, 0x73,
6274 0x98, 0x8c, 0x8a, 0x7a, 0x6e, 0x90, 0xaa, 0x93,
6275 0x80, 0x6e, 0x90, 0x8a, 0x7b, 0x9b, 0x98, 0xd0,
6276 0xb3, 0x87, 0x85, 0xb7, 0xb2, 0x88, 0x8d, 0xa1,
6277 0x79, 0x67, 0x56, 0x32, 0x85, 0xb2, 0x9e, 0x6b,
6278 0x39, 0x51, 0xb1, 0x59, 0x18, 0x4b, 0x2b, 0x36,
6279 0x1d, 0x3b, 0x3f, 0x35, 0x66, 0xbf, 0xe2, 0xcc,
6280 0x6a, 0x43, 0xb1, 0xb9, 0xdd, 0xfd, 0x4a, 0x00,
6281 0xcc, 0xb9, 0x6b, 0x43, 0x2d, 0x37, 0x18, 0x16,
6282 0x36, 0xe7, 0xe9, 0x6f, 0x51, 0x90, 0x96, 0x33,
6283 0x29, 0x25, 0x16, 0x34, 0x28, 0x3e, 0xc7, 0xff,
6284 0x9d, 0x22, 0x65, 0x64, 0x15, 0x20, 0x21, 0x32,
6285 0x32, 0x2a, 0x3a, 0x1a, 0x19, 0x33, 0x18, 0x16,
6286 0xd5, 0xd3, 0xd0, 0xda, 0xae, 0x2e, 0x70, 0xd6,
6287 0xd8, 0xd4, 0xd0, 0xcf, 0xd2, 0xd3, 0xd3, 0xd1,
6288 0xd2, 0xd3, 0xd3, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6,
6289 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xdd, 0xde,
6290 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6291 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6292 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6293 0xeb, 0xe2, 0xc0, 0x7d, 0x9b, 0xca, 0xde, 0xcc,
6294 0xcc, 0xb3, 0xcb, 0xd4, 0xd2, 0x95, 0xb9, 0xb7,
6295 0xdf, 0xce, 0x6b, 0x96, 0xb4, 0xc6, 0xe2, 0xd0,
6296 0x9a, 0xba, 0xa9, 0xdd, 0x9f, 0xd1, 0xf3, 0xea,
6297 0xe2, 0xd7, 0xcd, 0xcf, 0xd7, 0xdc, 0xd8, 0xd0,
6298 0xe5, 0xe0, 0xd8, 0xba, 0xb2, 0xd2, 0xbe, 0x73,
6299 0x73, 0x65, 0x5e, 0x1d, 0x4e, 0xb2, 0x74, 0x4e,
6300 0x80, 0xaf, 0xd7, 0xec, 0xda, 0xcb, 0x8a, 0x88,
6301 0x84, 0x64, 0x9c, 0x6a, 0x3b, 0x4c, 0x3a, 0x72,
6302 0xb1, 0x5c, 0x37, 0x9c, 0x9c, 0x7c, 0x50, 0x8b,
6303 0x93, 0x54, 0x68, 0xab, 0xe2, 0x80, 0x35, 0x54,
6304 0x76, 0x78, 0x67, 0x4b, 0x45, 0x4e, 0x48, 0x35,
6305 0x6f, 0x69, 0x5d, 0x63, 0x29, 0x28, 0x31, 0x81,
6306 0xba, 0xb9, 0x61, 0x6f, 0xa4, 0xac, 0xbc, 0x89,
6307 0x7e, 0x84, 0x77, 0x68, 0x71, 0x65, 0x4b, 0x55,
6308 0x4b, 0x46, 0x38, 0x43, 0x5c, 0x6f, 0x70, 0x51,
6309 0x53, 0x4d, 0x47, 0x49, 0x50, 0x54, 0x4f, 0x47,
6310 0x50, 0x3e, 0x2e, 0x33, 0x48, 0x59, 0x5b, 0x56,
6311 0x5f, 0x60, 0x57, 0x62, 0xab, 0x8a, 0x66, 0x6b,
6312 0x66, 0x65, 0x69, 0x74, 0x7f, 0x81, 0x79, 0x6f,
6313 0x69, 0x5c, 0x5e, 0x71, 0x7c, 0x77, 0x77, 0x80,
6314 0x8d, 0x7d, 0x6a, 0x62, 0x66, 0x6f, 0x74, 0x75,
6315 0x7c, 0x73, 0x6b, 0x6c, 0x72, 0x73, 0x6c, 0x64,
6316 0x76, 0x73, 0x6c, 0x63, 0x58, 0x4c, 0x43, 0x3e,
6317 0x4d, 0x5c, 0x58, 0x46, 0x4f, 0x75, 0x91, 0x93,
6318 0x8e, 0x85, 0x82, 0xc0, 0xf6, 0xaf, 0x5a, 0x64,
6319 0x8f, 0x8e, 0x8b, 0x96, 0x90, 0xe3, 0xaa, 0xb7,
6320 0x8c, 0x9f, 0x9e, 0xa1, 0x97, 0x98, 0xa6, 0x86,
6321 0x4f, 0x81, 0x73, 0xa7, 0xd4, 0x63, 0x89, 0xcd,
6322 0x93, 0x3c, 0x72, 0x67, 0x61, 0x71, 0x26, 0x33,
6323 0x39, 0x40, 0x31, 0x17, 0x19, 0x32, 0x34, 0x20,
6324 0x45, 0x9c, 0xea, 0xff, 0xff, 0xc1, 0x75, 0x9d,
6325 0xd6, 0xff, 0xb0, 0x50, 0xce, 0xff, 0xfa, 0xf0,
6326 0xdf, 0xab, 0x62, 0x44, 0x21, 0x16, 0x35, 0x1f,
6327 0x1b, 0x44, 0x34, 0x3e, 0x31, 0x1f, 0x5c, 0x76,
6328 0x41, 0x4e, 0x0d, 0x33, 0x4d, 0x2b, 0x40, 0x1a,
6329 0x20, 0x21, 0x30, 0x13, 0x2a, 0x57, 0x21, 0x00,
6330 0xd0, 0xce, 0xce, 0xd7, 0x9f, 0x27, 0x7b, 0xd7,
6331 0xd3, 0xcf, 0xcb, 0xcb, 0xcd, 0xd0, 0xcf, 0xce,
6332 0xcf, 0xd0, 0xd0, 0xd1, 0xd2, 0xd2, 0xd3, 0xd3,
6333 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdc, 0xdd, 0xdd,
6334 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6335 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6336 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6337 0xdc, 0xdf, 0xea, 0xa7, 0x50, 0xa3, 0xe1, 0xd9,
6338 0xca, 0xaf, 0xc1, 0xe3, 0xf1, 0x9a, 0x65, 0x96,
6339 0xff, 0xeb, 0x8b, 0x86, 0xc3, 0xea, 0xca, 0xd5,
6340 0x97, 0xcf, 0xb9, 0xb8, 0x9a, 0xef, 0xdf, 0xcc,
6341 0xd7, 0xd4, 0xc9, 0xc7, 0xd8, 0xe6, 0xe1, 0xd4,
6342 0xca, 0xd6, 0xe7, 0xe7, 0xc6, 0xc9, 0xcf, 0x8f,
6343 0x65, 0x75, 0x6d, 0x48, 0x4f, 0x7d, 0x7a, 0xac,
6344 0xaf, 0xd2, 0xe7, 0xec, 0xdb, 0xe5, 0xcf, 0xee,
6345 0xda, 0x78, 0x8e, 0x95, 0x91, 0x8c, 0x49, 0x47,
6346 0x3a, 0x78, 0x7a, 0x9d, 0x84, 0x86, 0x32, 0x52,
6347 0x7b, 0x4e, 0x3d, 0x4e, 0xa6, 0x8e, 0x53, 0x55,
6348 0x32, 0x60, 0x6e, 0x4c, 0x39, 0x46, 0x3e, 0x1f,
6349 0x30, 0x5b, 0x68, 0x41, 0x2b, 0x8b, 0x9c, 0x4b,
6350 0x7c, 0xc2, 0xa1, 0x8e, 0x9e, 0x90, 0x76, 0x40,
6351 0x4f, 0x32, 0x45, 0x43, 0x3b, 0x4f, 0x4e, 0x49,
6352 0x35, 0x30, 0x36, 0x39, 0x30, 0x35, 0x47, 0x4c,
6353 0x5b, 0x61, 0x5d, 0x58, 0x60, 0x68, 0x52, 0x30,
6354 0x22, 0x22, 0x2d, 0x48, 0x67, 0x77, 0x72, 0x67,
6355 0x5e, 0x65, 0x61, 0x69, 0xa7, 0x7e, 0x5a, 0x66,
6356 0x5a, 0x6c, 0x82, 0x8e, 0x8e, 0x8a, 0x88, 0x89,
6357 0x83, 0x7a, 0x75, 0x7c, 0x85, 0x85, 0x7d, 0x74,
6358 0x67, 0x6e, 0x72, 0x6c, 0x61, 0x5d, 0x63, 0x6c,
6359 0x6c, 0x6d, 0x70, 0x76, 0x7c, 0x81, 0x82, 0x81,
6360 0x77, 0x6b, 0x5b, 0x52, 0x50, 0x53, 0x56, 0x57,
6361 0x46, 0x4b, 0x4d, 0x49, 0x4a, 0x63, 0x95, 0xbf,
6362 0x8e, 0xac, 0x85, 0x70, 0x9a, 0x8c, 0x70, 0x95,
6363 0xff, 0xdb, 0x92, 0x81, 0x78, 0xaa, 0x4f, 0x35,
6364 0xa2, 0xd3, 0xcc, 0xe0, 0xe4, 0xb4, 0xb2, 0xbe,
6365 0xb5, 0xbd, 0xb8, 0xb9, 0xc3, 0x78, 0x4a, 0x66,
6366 0x2d, 0x2d, 0x46, 0x6d, 0x40, 0x07, 0x17, 0x1a,
6367 0x27, 0x2e, 0x2a, 0x1c, 0x1f, 0x31, 0x37, 0x2e,
6368 0x3c, 0x3b, 0x0b, 0x4b, 0x84, 0x29, 0x23, 0x97,
6369 0xe4, 0xa4, 0xf7, 0xfc, 0xc6, 0xb9, 0xff, 0xc0,
6370 0x4a, 0x3b, 0x24, 0x23, 0x1c, 0x47, 0x7e, 0x50,
6371 0x33, 0x56, 0x2b, 0x2b, 0x47, 0x16, 0x1b, 0x75,
6372 0xff, 0xc2, 0x3a, 0x1d, 0x4e, 0x3c, 0x20, 0x2d,
6373 0x34, 0x23, 0x25, 0x03, 0x11, 0x39, 0x14, 0x00,
6374 0xcc, 0xcb, 0xcc, 0xd5, 0x94, 0x22, 0x84, 0xd7,
6375 0xcf, 0xcb, 0xc7, 0xc7, 0xca, 0xcc, 0xcc, 0xcb,
6376 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0, 0xd1, 0xd1,
6377 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xdb, 0xdc, 0xdd,
6378 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6379 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6380 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6381 0xec, 0xda, 0xde, 0xdc, 0x6c, 0x67, 0xbc, 0xdd,
6382 0xe4, 0xc8, 0xb9, 0xe7, 0xf7, 0xb5, 0x79, 0xd3,
6383 0xec, 0xa0, 0xa8, 0xba, 0xde, 0xdb, 0xcc, 0xa9,
6384 0xb1, 0xe6, 0xba, 0x88, 0xad, 0xe6, 0xd5, 0xd6,
6385 0xce, 0xc8, 0xb8, 0xc1, 0xdf, 0xe4, 0xd9, 0xde,
6386 0xde, 0xd9, 0xc8, 0xe5, 0xdc, 0xcb, 0xd4, 0x95,
6387 0x6e, 0x82, 0x62, 0x65, 0x70, 0x89, 0x7a, 0x72,
6388 0xbb, 0xd5, 0xde, 0xe7, 0xed, 0xfb, 0xb2, 0x95,
6389 0x63, 0x3e, 0x4f, 0xa6, 0xa3, 0x50, 0x49, 0x6e,
6390 0x7f, 0x84, 0xcb, 0xe0, 0xaf, 0xff, 0xdf, 0x69,
6391 0x4c, 0x65, 0x82, 0x68, 0x87, 0x80, 0x5c, 0x47,
6392 0x67, 0x4c, 0x40, 0x4e, 0x56, 0x4b, 0x43, 0x45,
6393 0x55, 0x75, 0x8d, 0x59, 0x3d, 0x70, 0xb0, 0x88,
6394 0x7f, 0x92, 0x84, 0x66, 0x4b, 0x3a, 0x39, 0x36,
6395 0x3b, 0x36, 0x66, 0x56, 0x2c, 0x2f, 0x2b, 0x38,
6396 0x3a, 0x3c, 0x4e, 0x49, 0x3c, 0x49, 0x4c, 0x3e,
6397 0x30, 0x4d, 0x64, 0x5b, 0x44, 0x36, 0x37, 0x3d,
6398 0x39, 0x3b, 0x43, 0x53, 0x63, 0x67, 0x5d, 0x51,
6399 0x3e, 0x5d, 0x64, 0x60, 0x97, 0x7a, 0x5f, 0x66,
6400 0x64, 0x71, 0x79, 0x71, 0x62, 0x5e, 0x6d, 0x7e,
6401 0x71, 0x73, 0x72, 0x73, 0x7a, 0x80, 0x7a, 0x6e,
6402 0x65, 0x5f, 0x5b, 0x5d, 0x63, 0x61, 0x56, 0x4c,
6403 0x59, 0x64, 0x6f, 0x6f, 0x66, 0x60, 0x63, 0x69,
6404 0x4d, 0x51, 0x55, 0x55, 0x51, 0x4e, 0x4e, 0x50,
6405 0x47, 0x41, 0x48, 0x60, 0x77, 0x76, 0x5f, 0x49,
6406 0x4a, 0x38, 0x91, 0xc1, 0x7b, 0x7c, 0xac, 0x8e,
6407 0x0f, 0x34, 0x2f, 0x17, 0x60, 0xa9, 0x8f, 0x4d,
6408 0x19, 0x54, 0x5d, 0x5c, 0x5f, 0xa1, 0xe4, 0xa6,
6409 0x3a, 0x27, 0x4c, 0x8d, 0xc5, 0xb2, 0x35, 0x1b,
6410 0x21, 0x62, 0x4e, 0x3a, 0x18, 0x2b, 0x74, 0x3c,
6411 0x59, 0x68, 0x57, 0x2b, 0x1d, 0x32, 0x36, 0x22,
6412 0x10, 0x65, 0x71, 0x33, 0x2b, 0x4c, 0x63, 0x7b,
6413 0x3f, 0xe4, 0xfa, 0x90, 0x71, 0x4d, 0x3b, 0x64,
6414 0xff, 0xe9, 0x90, 0x4d, 0x20, 0x2e, 0x80, 0x9e,
6415 0x51, 0x2f, 0x17, 0x13, 0x24, 0x28, 0x5b, 0xd9,
6416 0x9a, 0x86, 0x99, 0x30, 0x4d, 0xff, 0xff, 0xff,
6417 0xa2, 0x4d, 0x2f, 0x23, 0x2e, 0x34, 0x17, 0x30,
6418 0xcb, 0xc9, 0xcc, 0xd4, 0x8d, 0x1f, 0x88, 0xd7,
6419 0xcc, 0xc8, 0xc5, 0xc5, 0xc8, 0xcb, 0xcb, 0xc9,
6420 0xcc, 0xcc, 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0,
6421 0xd3, 0xd4, 0xd5, 0xd7, 0xd9, 0xdb, 0xdc, 0xdd,
6422 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6423 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6424 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6425 0xd5, 0xe6, 0xdc, 0xea, 0xaf, 0x51, 0xb3, 0xeb,
6426 0xdc, 0xc9, 0xaf, 0xe5, 0xe0, 0xc0, 0x9a, 0xe9,
6427 0xe5, 0xc3, 0xca, 0xa7, 0xe1, 0xc4, 0xd8, 0x93,
6428 0x82, 0xd0, 0xc7, 0x9b, 0xea, 0xd7, 0xcd, 0xec,
6429 0xdb, 0xa0, 0xa8, 0xd6, 0xd7, 0xd4, 0xe1, 0xdf,
6430 0xd4, 0xe9, 0xc2, 0xd8, 0xec, 0xe6, 0xd8, 0x6e,
6431 0x7c, 0x86, 0x52, 0x67, 0x68, 0x82, 0x9f, 0x99,
6432 0xae, 0xe2, 0xeb, 0xcd, 0xbc, 0xe8, 0xd8, 0xe0,
6433 0xad, 0x92, 0x6c, 0x4d, 0x5e, 0x67, 0x56, 0x68,
6434 0x5e, 0x7c, 0xa8, 0x73, 0x72, 0xcb, 0xfd, 0xfd,
6435 0xab, 0xb1, 0xc0, 0x74, 0x4a, 0x3b, 0x43, 0x43,
6436 0x58, 0x61, 0x67, 0x62, 0x59, 0x53, 0x4f, 0x4b,
6437 0x42, 0x4b, 0x64, 0x59, 0x60, 0x3a, 0x74, 0x9a,
6438 0x44, 0x1d, 0x48, 0x79, 0x60, 0x39, 0x35, 0x4f,
6439 0x71, 0x61, 0x63, 0x4e, 0x63, 0x68, 0x33, 0x3e,
6440 0x30, 0x24, 0x45, 0x5a, 0x52, 0x4f, 0x45, 0x3c,
6441 0x48, 0x31, 0x30, 0x48, 0x4f, 0x3d, 0x34, 0x3f,
6442 0x4b, 0x45, 0x3e, 0x3e, 0x42, 0x44, 0x42, 0x3e,
6443 0x16, 0x4d, 0x5e, 0x51, 0x8a, 0x80, 0x6d, 0x6f,
6444 0x6f, 0x68, 0x62, 0x62, 0x68, 0x6d, 0x6d, 0x6a,
6445 0x6f, 0x71, 0x73, 0x74, 0x72, 0x6f, 0x6a, 0x66,
6446 0x6c, 0x6f, 0x6f, 0x68, 0x5d, 0x57, 0x5b, 0x60,
6447 0x62, 0x63, 0x68, 0x71, 0x7a, 0x7b, 0x73, 0x6b,
6448 0x71, 0x76, 0x76, 0x69, 0x5a, 0x58, 0x67, 0x77,
6449 0x64, 0x59, 0x3d, 0x31, 0x58, 0x9a, 0xbd, 0xba,
6450 0xc0, 0xca, 0xd7, 0xaa, 0x62, 0x55, 0x45, 0x08,
6451 0x26, 0x14, 0x1a, 0x2f, 0xe5, 0xff, 0xf6, 0x8e,
6452 0x64, 0x5b, 0x19, 0x22, 0x30, 0x1b, 0x2e, 0x22,
6453 0x1a, 0x2d, 0x76, 0xeb, 0x7c, 0x70, 0xa6, 0x1f,
6454 0x25, 0x32, 0x29, 0x27, 0x7b, 0xfe, 0xfa, 0x79,
6455 0x36, 0x38, 0x3c, 0x3b, 0x34, 0x2c, 0x2b, 0x2f,
6456 0x40, 0x30, 0x2a, 0x46, 0x28, 0x10, 0x2e, 0x0e,
6457 0x5d, 0x97, 0xa8, 0xe1, 0xaf, 0x48, 0x31, 0xd2,
6458 0xff, 0xf2, 0x70, 0x1c, 0x2a, 0x3e, 0x3d, 0x1c,
6459 0x3d, 0x00, 0x30, 0x2b, 0x29, 0xa6, 0xf5, 0xf8,
6460 0xf3, 0xff, 0xf8, 0xff, 0xd0, 0x7b, 0xc2, 0xff,
6461 0xf7, 0x4a, 0x0a, 0x42, 0x82, 0x62, 0x04, 0x00,
6462 0xc3, 0xcc, 0xba, 0xd6, 0x77, 0x23, 0x96, 0xd3,
6463 0xc3, 0xc4, 0xc5, 0xc4, 0xc2, 0xc1, 0xc1, 0xc2,
6464 0xce, 0xca, 0xc9, 0xcb, 0xcb, 0xc9, 0xca, 0xcd,
6465 0xd2, 0xd3, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xdd,
6466 0xda, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xde, 0xdf,
6467 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6468 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6469 0xe2, 0xd3, 0xe6, 0xec, 0xd7, 0x79, 0x83, 0xd1,
6470 0xce, 0xcd, 0xb3, 0xd9, 0xe3, 0x9a, 0x86, 0xa3,
6471 0x96, 0xde, 0xce, 0xbe, 0xc5, 0xb8, 0xbe, 0xbd,
6472 0xa9, 0xc7, 0xc9, 0xa2, 0xe7, 0xd2, 0xdd, 0xd4,
6473 0xc7, 0xbf, 0xc5, 0xd6, 0xd8, 0xcd, 0xcd, 0xd7,
6474 0xdc, 0xe0, 0xe4, 0xd5, 0xe3, 0xdb, 0xd1, 0x66,
6475 0x50, 0x61, 0x49, 0x54, 0x55, 0x6d, 0x5d, 0x6e,
6476 0xb3, 0xa0, 0xb7, 0xcd, 0x97, 0x4c, 0x42, 0x60,
6477 0xca, 0xd0, 0xb1, 0xa0, 0x9d, 0x85, 0x61, 0x3c,
6478 0x29, 0x27, 0x29, 0x30, 0x30, 0x2d, 0x2f, 0x37,
6479 0x86, 0xc0, 0xa1, 0x62, 0x68, 0x69, 0x52, 0x58,
6480 0x56, 0x4f, 0x51, 0x55, 0x48, 0x32, 0x2f, 0x3b,
6481 0x5e, 0x5b, 0x8e, 0x56, 0x2e, 0x4b, 0x58, 0xac,
6482 0x4c, 0x2d, 0x4e, 0x77, 0x5c, 0x3f, 0x49, 0x53,
6483 0x65, 0x49, 0x46, 0x37, 0x52, 0x4c, 0x17, 0x42,
6484 0x3e, 0x21, 0x42, 0x57, 0x61, 0x57, 0x2f, 0x42,
6485 0x6c, 0x47, 0x38, 0x4b, 0x51, 0x3a, 0x34, 0x47,
6486 0x46, 0x5c, 0x65, 0x58, 0x37, 0x11, 0x19, 0x45,
6487 0x58, 0x75, 0x69, 0x6a, 0x96, 0x99, 0x73, 0x68,
6488 0x68, 0x60, 0x5a, 0x60, 0x6d, 0x75, 0x73, 0x6c,
6489 0x78, 0x71, 0x6b, 0x6b, 0x72, 0x78, 0x7b, 0x7a,
6490 0x61, 0x67, 0x6b, 0x6a, 0x66, 0x64, 0x68, 0x6e,
6491 0x62, 0x6b, 0x71, 0x69, 0x59, 0x4e, 0x50, 0x57,
6492 0x6d, 0x66, 0x5d, 0x5a, 0x5c, 0x5d, 0x5a, 0x57,
6493 0x45, 0x44, 0x34, 0x70, 0x72, 0x63, 0x31, 0x0c,
6494 0x75, 0xeb, 0xff, 0x98, 0x71, 0x73, 0x4b, 0x3c,
6495 0x4f, 0x5f, 0x53, 0x31, 0x33, 0x64, 0x92, 0xa1,
6496 0xcc, 0xd4, 0xf9, 0x73, 0x4b, 0x3d, 0x20, 0x32,
6497 0x75, 0xb3, 0x3e, 0x3e, 0x36, 0x20, 0x28, 0x35,
6498 0x44, 0x27, 0x65, 0xaa, 0x73, 0xa7, 0xff, 0xc5,
6499 0xae, 0x75, 0x28, 0x32, 0x37, 0x43, 0x75, 0x56,
6500 0x3f, 0x42, 0x2b, 0x22, 0x36, 0x3b, 0x42, 0x60,
6501 0xff, 0x86, 0x75, 0xdb, 0xc6, 0x4b, 0x6f, 0xff,
6502 0xfe, 0x86, 0x1c, 0x0a, 0x24, 0x36, 0x35, 0x2c,
6503 0x39, 0x1a, 0x22, 0x2d, 0x2b, 0x5c, 0x8a, 0x79,
6504 0xa9, 0x9e, 0xd4, 0xdb, 0x95, 0xa1, 0xeb, 0xf9,
6505 0xe6, 0xbd, 0x8b, 0x6c, 0x5e, 0x4b, 0x2a, 0x0e,
6506 0xc3, 0xca, 0xbb, 0xd1, 0x72, 0x27, 0x99, 0xd2,
6507 0xcc, 0xc7, 0xc2, 0xc1, 0xc6, 0xcc, 0xcf, 0xd0,
6508 0xcb, 0xca, 0xca, 0xcd, 0xcf, 0xce, 0xce, 0xce,
6509 0xd2, 0xd3, 0xd4, 0xd6, 0xd8, 0xda, 0xdb, 0xdc,
6510 0xda, 0xda, 0xdb, 0xdb, 0xdc, 0xdd, 0xde, 0xde,
6511 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6512 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6513 0xe3, 0xe4, 0xde, 0xde, 0xe2, 0xad, 0x7c, 0xc2,
6514 0xe4, 0xd4, 0xbb, 0xce, 0xc6, 0xa9, 0xac, 0x9a,
6515 0xaf, 0xd8, 0xa8, 0xbe, 0xe2, 0xb8, 0xb5, 0xbd,
6516 0xbc, 0xf0, 0xbe, 0xa1, 0xd2, 0xc0, 0xd5, 0xc9,
6517 0xaf, 0xc3, 0xd7, 0xdc, 0xd8, 0xd6, 0xd7, 0xd9,
6518 0xc0, 0xd4, 0xd1, 0xcd, 0xec, 0xcf, 0xbf, 0x90,
6519 0x73, 0x7b, 0x70, 0x71, 0x52, 0x63, 0x6a, 0x7b,
6520 0xb4, 0xf2, 0xf7, 0xa2, 0x54, 0x49, 0x63, 0x77,
6521 0x76, 0x88, 0x89, 0x52, 0x1e, 0x1b, 0x25, 0x2e,
6522 0x4b, 0x43, 0x39, 0x36, 0x3f, 0x45, 0x3a, 0x2a,
6523 0x24, 0x40, 0x33, 0x3e, 0x7a, 0x84, 0x6d, 0x7c,
6524 0x5b, 0x4f, 0x4d, 0x54, 0x4f, 0x3d, 0x38, 0x41,
6525 0x1b, 0x4a, 0x88, 0x7a, 0x45, 0x35, 0x5b, 0xa4,
6526 0x79, 0x55, 0x43, 0x5d, 0x6e, 0x58, 0x4a, 0x5b,
6527 0x3f, 0x4f, 0x5e, 0x33, 0x40, 0x62, 0x32, 0x1e,
6528 0x23, 0x2f, 0x3a, 0x59, 0x77, 0x77, 0x54, 0x23,
6529 0x39, 0x41, 0x33, 0x32, 0x4f, 0x56, 0x41, 0x35,
6530 0x29, 0x20, 0x24, 0x42, 0x69, 0x81, 0x93, 0xa3,
6531 0x8b, 0x85, 0x75, 0x73, 0x7d, 0x79, 0x6f, 0x71,
6532 0x71, 0x70, 0x6f, 0x6c, 0x67, 0x61, 0x5c, 0x59,
6533 0x6c, 0x68, 0x66, 0x68, 0x6c, 0x6c, 0x67, 0x62,
6534 0x66, 0x73, 0x82, 0x86, 0x7d, 0x6e, 0x62, 0x5c,
6535 0x75, 0x7a, 0x7b, 0x6f, 0x60, 0x5b, 0x64, 0x6f,
6536 0x6a, 0x64, 0x5c, 0x55, 0x51, 0x4d, 0x4b, 0x49,
6537 0x4b, 0x46, 0x40, 0x3b, 0x20, 0x1b, 0xbc, 0xef,
6538 0xb3, 0x75, 0x5a, 0xa3, 0xc0, 0x6f, 0x3c, 0x4b,
6539 0x6b, 0x46, 0x54, 0x98, 0xb4, 0x87, 0x55, 0x49,
6540 0x1e, 0x40, 0x4e, 0x19, 0x31, 0x22, 0x1b, 0x87,
6541 0xfe, 0xb6, 0x0e, 0x4e, 0x3e, 0x05, 0x39, 0x44,
6542 0x3f, 0x59, 0xdc, 0xdb, 0x6a, 0x42, 0x3f, 0x4e,
6543 0x8d, 0x3b, 0x0e, 0x3c, 0x71, 0x4a, 0x1e, 0x46,
6544 0x3a, 0x19, 0x1b, 0x29, 0x3d, 0x77, 0x7b, 0x2f,
6545 0x57, 0x20, 0x19, 0x4e, 0x5e, 0x34, 0x21, 0x36,
6546 0x0f, 0x20, 0x16, 0x46, 0x9a, 0x84, 0x4d, 0x61,
6547 0x00, 0x4f, 0xa2, 0x93, 0x3f, 0x1d, 0x39, 0x51,
6548 0x16, 0x4d, 0x77, 0x3a, 0x0b, 0x7a, 0xd7, 0xaa,
6549 0x83, 0x6a, 0x4e, 0x44, 0x44, 0x36, 0x17, 0x00,
6550 0xc1, 0xc8, 0xbc, 0xc8, 0x69, 0x2c, 0x9f, 0xd0,
6551 0xce, 0xc8, 0xc2, 0xc3, 0xc9, 0xcf, 0xcf, 0xcd,
6552 0xca, 0xcc, 0xcd, 0xcf, 0xd2, 0xd3, 0xd2, 0xd0,
6553 0xd2, 0xd3, 0xd4, 0xd5, 0xd7, 0xd9, 0xda, 0xda,
6554 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xdd, 0xde,
6555 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6556 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6557 0xd4, 0xde, 0xd6, 0xd8, 0xdf, 0xcf, 0x64, 0x6a,
6558 0xe3, 0xbb, 0xb8, 0xe5, 0xcb, 0xa3, 0xab, 0x8d,
6559 0xcd, 0xcb, 0x82, 0xc4, 0xf7, 0xb4, 0xb5, 0xb9,
6560 0xb5, 0xfc, 0x91, 0xa8, 0xd5, 0xcb, 0xdd, 0xc4,
6561 0xa2, 0xca, 0xe6, 0xe2, 0xd9, 0xde, 0xe0, 0xda,
6562 0xc6, 0xc7, 0xcf, 0xc9, 0xc9, 0xc4, 0xd4, 0xb1,
6563 0x79, 0x67, 0x60, 0x6c, 0x5b, 0x75, 0x84, 0x85,
6564 0x73, 0x96, 0x73, 0x36, 0x35, 0x41, 0x38, 0x35,
6565 0x2f, 0x4c, 0x94, 0x6d, 0x34, 0x49, 0x48, 0x45,
6566 0x23, 0x4a, 0x5b, 0x3e, 0x22, 0x26, 0x37, 0x3d,
6567 0x4b, 0x4e, 0x51, 0x82, 0xb7, 0x96, 0x65, 0x71,
6568 0x40, 0x3d, 0x42, 0x47, 0x3a, 0x29, 0x2f, 0x43,
6569 0x48, 0x5e, 0x62, 0x62, 0x3d, 0x25, 0x67, 0xa5,
6570 0x4a, 0x4e, 0x40, 0x4c, 0x65, 0x4b, 0x40, 0x70,
6571 0x73, 0x58, 0x5a, 0x3e, 0x32, 0x4a, 0x40, 0x37,
6572 0x18, 0x3a, 0x45, 0x79, 0x76, 0x49, 0x56, 0x4c,
6573 0x51, 0x75, 0x5e, 0x29, 0x27, 0x40, 0x40, 0x37,
6574 0x67, 0x90, 0x83, 0x72, 0x90, 0x93, 0x7b, 0x81,
6575 0x5d, 0x6a, 0x76, 0x81, 0x7d, 0x66, 0x65, 0x81,
6576 0x6e, 0x6e, 0x6a, 0x5e, 0x55, 0x57, 0x65, 0x73,
6577 0x76, 0x6f, 0x68, 0x6b, 0x77, 0x86, 0x92, 0x97,
6578 0x8e, 0x8b, 0x81, 0x75, 0x6c, 0x6e, 0x7a, 0x85,
6579 0x76, 0x78, 0x74, 0x67, 0x58, 0x57, 0x66, 0x75,
6580 0x77, 0x74, 0x6d, 0x62, 0x56, 0x4f, 0x4e, 0x4f,
6581 0x46, 0x3c, 0x42, 0x45, 0x4c, 0x39, 0x5a, 0x23,
6582 0x14, 0x3d, 0x62, 0xa9, 0x82, 0x33, 0x55, 0x58,
6583 0xab, 0x45, 0x12, 0x3d, 0x58, 0x39, 0x2f, 0x4e,
6584 0x73, 0x46, 0x1f, 0x3c, 0x43, 0x22, 0x0b, 0x47,
6585 0x22, 0x2f, 0x41, 0x38, 0x1b, 0x22, 0x18, 0x5d,
6586 0x46, 0x1a, 0x6a, 0xdc, 0xff, 0x9e, 0x20, 0x2f,
6587 0x65, 0x6c, 0xba, 0x91, 0x55, 0x74, 0x74, 0x77,
6588 0x3d, 0x6d, 0x68, 0x3a, 0x43, 0x72, 0x72, 0x4e,
6589 0x1c, 0x37, 0x3e, 0x2c, 0x2c, 0x3f, 0x3f, 0x29,
6590 0x2d, 0x65, 0x40, 0x13, 0x40, 0x57, 0x3c, 0x3d,
6591 0xe5, 0xeb, 0xf5, 0xef, 0xa9, 0x46, 0x45, 0x99,
6592 0x62, 0x1d, 0x1b, 0x31, 0x1e, 0x32, 0x63, 0x6b,
6593 0x38, 0x2e, 0x28, 0x31, 0x3d, 0x37, 0x1d, 0x04,
6594 0xbf, 0xc4, 0xbd, 0xbd, 0x5c, 0x34, 0xa6, 0xcd,
6595 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc4, 0xc3, 0xc1,
6596 0xc9, 0xcf, 0xd2, 0xcf, 0xce, 0xd2, 0xd4, 0xd2,
6597 0xd3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd8,
6598 0xd8, 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdc, 0xdd,
6599 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6600 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6601 0xe5, 0xdc, 0xde, 0xe0, 0xde, 0xf1, 0xaa, 0x62,
6602 0xba, 0xb9, 0xc4, 0xe7, 0xc7, 0x97, 0x9e, 0x8f,
6603 0xdc, 0xbb, 0x7f, 0xd2, 0xe7, 0xad, 0xcb, 0xb1,
6604 0xc6, 0xff, 0x78, 0xc7, 0xe1, 0xc7, 0xc2, 0xa1,
6605 0xbb, 0xd1, 0xe1, 0xe0, 0xdd, 0xdf, 0xdf, 0xda,
6606 0xd9, 0xc5, 0xd2, 0xd8, 0xc4, 0xc4, 0xd3, 0xb7,
6607 0x87, 0x68, 0x53, 0x55, 0x56, 0x6f, 0x88, 0x93,
6608 0x74, 0x8e, 0x6a, 0x49, 0x5c, 0x55, 0x49, 0x6c,
6609 0x52, 0x4f, 0x99, 0x5e, 0x16, 0x41, 0x41, 0x3c,
6610 0x2b, 0x51, 0x5d, 0x42, 0x3a, 0x53, 0x5e, 0x51,
6611 0x76, 0x71, 0x6b, 0x80, 0x86, 0x4f, 0x24, 0x36,
6612 0x41, 0x4a, 0x58, 0x57, 0x3e, 0x2c, 0x40, 0x63,
6613 0x64, 0x69, 0x73, 0x68, 0x3d, 0x25, 0x53, 0x98,
6614 0x5b, 0x6b, 0x71, 0x77, 0x72, 0x4c, 0x3c, 0x59,
6615 0x50, 0x3a, 0x6b, 0x95, 0x7d, 0x60, 0x46, 0x2b,
6616 0x4f, 0x44, 0x3f, 0x70, 0x80, 0x69, 0x7c, 0x8b,
6617 0x65, 0x27, 0x1b, 0x4e, 0x70, 0x6e, 0x66, 0x61,
6618 0x75, 0x8c, 0x8b, 0x7f, 0x7e, 0x79, 0x8e, 0xbc,
6619 0xc6, 0xae, 0x81, 0x77, 0x92, 0x8c, 0x77, 0x7f,
6620 0x61, 0x61, 0x5f, 0x58, 0x55, 0x5e, 0x71, 0x82,
6621 0x7e, 0x7a, 0x77, 0x76, 0x74, 0x6c, 0x60, 0x56,
6622 0x62, 0x65, 0x66, 0x63, 0x5e, 0x5f, 0x67, 0x6e,
6623 0x6d, 0x6f, 0x69, 0x58, 0x44, 0x3c, 0x44, 0x4f,
6624 0x70, 0x6f, 0x6a, 0x5f, 0x53, 0x4d, 0x4d, 0x50,
6625 0x66, 0x51, 0x3f, 0x37, 0x2e, 0x58, 0x54, 0x96,
6626 0xc3, 0xc5, 0x4c, 0x18, 0x26, 0x80, 0xbf, 0x1b,
6627 0x2c, 0x23, 0x23, 0x2d, 0x31, 0x2f, 0x36, 0x44,
6628 0x2e, 0x1c, 0x20, 0xc0, 0xff, 0xf2, 0x9d, 0x6b,
6629 0x4f, 0x55, 0x13, 0x1e, 0x11, 0x0a, 0x39, 0x0f,
6630 0x83, 0xea, 0xfc, 0xf1, 0xb3, 0x4e, 0x3b, 0x3f,
6631 0x02, 0xb9, 0xe7, 0x6d, 0x62, 0x80, 0x45, 0x37,
6632 0x5f, 0x74, 0x59, 0x6f, 0xec, 0xff, 0xe0, 0x80,
6633 0x34, 0x2d, 0x1f, 0x19, 0x2a, 0x42, 0x43, 0x33,
6634 0x44, 0x43, 0x3f, 0x32, 0x27, 0x31, 0x3b, 0x37,
6635 0x85, 0x9b, 0x61, 0x22, 0x35, 0x45, 0x2d, 0x25,
6636 0x38, 0x28, 0x4c, 0x73, 0x6d, 0x6d, 0x6b, 0x4f,
6637 0x2c, 0x25, 0x21, 0x28, 0x32, 0x30, 0x21, 0x11,
6638 0xbd, 0xc1, 0xbf, 0xb1, 0x4f, 0x3c, 0xae, 0xca,
6639 0xbf, 0xc3, 0xc5, 0xc2, 0xbd, 0xbd, 0xc5, 0xcc,
6640 0xbd, 0xce, 0xd6, 0xcf, 0xc8, 0xcc, 0xd2, 0xd3,
6641 0xd3, 0xd3, 0xd4, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6,
6642 0xd7, 0xd8, 0xd8, 0xd9, 0xda, 0xdb, 0xdb, 0xdc,
6643 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6644 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6645 0xdd, 0xd1, 0xda, 0xd8, 0xd6, 0xe2, 0xd8, 0x66,
6646 0x92, 0xd7, 0xe7, 0xe8, 0xcc, 0x9b, 0xa5, 0xb9,
6647 0xd9, 0xaf, 0x9e, 0xdc, 0xbf, 0xa9, 0xe3, 0xac,
6648 0xc5, 0xef, 0x78, 0xde, 0xd5, 0xb4, 0xb4, 0xb4,
6649 0xe7, 0xd7, 0xd0, 0xd9, 0xdf, 0xdb, 0xd6, 0xd7,
6650 0xd9, 0xca, 0xbf, 0xc9, 0xd3, 0xd0, 0xbe, 0xc5,
6651 0x70, 0x89, 0x99, 0x8c, 0x7a, 0x6e, 0x95, 0xcf,
6652 0xcb, 0xcf, 0x75, 0x23, 0x3c, 0x54, 0x3f, 0x3a,
6653 0x49, 0x4c, 0xa1, 0x6f, 0x25, 0x47, 0x48, 0x4a,
6654 0x30, 0x56, 0x62, 0x49, 0x42, 0x5b, 0x67, 0x5b,
6655 0x7a, 0x76, 0x65, 0x5f, 0x64, 0x5d, 0x5c, 0x6f,
6656 0x41, 0x3a, 0x3b, 0x3e, 0x34, 0x29, 0x35, 0x4d,
6657 0x2d, 0x43, 0x8d, 0x69, 0x2f, 0x31, 0x53, 0xc1,
6658 0x65, 0x4d, 0x5a, 0x76, 0x78, 0x74, 0x6c, 0x55,
6659 0x62, 0x56, 0x5d, 0x61, 0x4e, 0x65, 0x8a, 0x75,
6660 0x70, 0x75, 0x85, 0x64, 0x4d, 0x5a, 0x64, 0x81,
6661 0x76, 0x4a, 0x62, 0x91, 0x9d, 0xb6, 0xb7, 0x80,
6662 0x81, 0x66, 0x91, 0xc3, 0xa2, 0x84, 0xab, 0xdb,
6663 0x81, 0x92, 0xab, 0xbd, 0xc1, 0xb2, 0x8a, 0x5e,
6664 0x5f, 0x64, 0x6a, 0x6c, 0x6a, 0x66, 0x62, 0x5f,
6665 0x79, 0x6d, 0x5e, 0x57, 0x59, 0x60, 0x66, 0x68,
6666 0x67, 0x67, 0x63, 0x5c, 0x58, 0x5c, 0x68, 0x73,
6667 0x3a, 0x46, 0x52, 0x53, 0x4f, 0x50, 0x5b, 0x67,
6668 0x72, 0x70, 0x6b, 0x65, 0x60, 0x5e, 0x5f, 0x61,
6669 0x55, 0x50, 0x46, 0x48, 0x4c, 0x61, 0x1b, 0x24,
6670 0x2d, 0xb8, 0xcb, 0x97, 0x23, 0x1e, 0x9a, 0x6c,
6671 0x53, 0x9c, 0xde, 0xe3, 0xbf, 0x90, 0x5e, 0x36,
6672 0x8d, 0xfb, 0xe9, 0xff, 0xe7, 0xad, 0x8f, 0xbf,
6673 0x49, 0x39, 0x7e, 0x64, 0x70, 0x73, 0x39, 0x82,
6674 0xff, 0xd0, 0x4f, 0x1a, 0x28, 0x45, 0x58, 0x1b,
6675 0x16, 0x55, 0x45, 0x2d, 0x22, 0x24, 0x6a, 0xa6,
6676 0x35, 0x28, 0x43, 0x60, 0x6e, 0x8d, 0x81, 0x3d,
6677 0x1f, 0x17, 0x23, 0x3c, 0x3b, 0x23, 0x19, 0x24,
6678 0x43, 0x74, 0x95, 0x7a, 0x4a, 0x3c, 0x3d, 0x34,
6679 0x00, 0x55, 0x69, 0x3f, 0x39, 0x3d, 0x43, 0x63,
6680 0x89, 0x8f, 0x7a, 0x36, 0x09, 0x2d, 0x5a, 0x56,
6681 0x44, 0x37, 0x26, 0x1b, 0x18, 0x16, 0x11, 0x0c,
6682 0xbb, 0xbd, 0xc0, 0xa5, 0x43, 0x44, 0xb5, 0xc7,
6683 0xc2, 0xc0, 0xbd, 0xba, 0xbb, 0xc3, 0xcf, 0xd9,
6684 0x9b, 0xbf, 0xda, 0xd5, 0xc7, 0xc8, 0xcf, 0xd2,
6685 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6686 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdb,
6687 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
6688 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
6689 0xd7, 0xdf, 0xe2, 0xdd, 0xe4, 0xd8, 0xe5, 0x87,
6690 0x58, 0x93, 0xba, 0xf1, 0xd3, 0x61, 0x67, 0xbe,
6691 0xd0, 0xac, 0xbd, 0xd4, 0xa6, 0xb1, 0xe0, 0xb3,
6692 0xb3, 0xc5, 0x90, 0xdd, 0xaf, 0xa8, 0xc1, 0xe8,
6693 0xfc, 0xda, 0xc7, 0xd2, 0xde, 0xd7, 0xd0, 0xd3,
6694 0xd2, 0xdb, 0xdc, 0xd1, 0xc6, 0xde, 0xab, 0x77,
6695 0x73, 0x65, 0x54, 0x44, 0x55, 0x3a, 0x3b, 0x51,
6696 0xa4, 0xb1, 0x7a, 0x37, 0x35, 0x44, 0x4b, 0x5b,
6697 0x58, 0x3e, 0x5f, 0x42, 0x21, 0x3d, 0x3c, 0x3c,
6698 0x30, 0x59, 0x6b, 0x51, 0x37, 0x3e, 0x51, 0x58,
6699 0x59, 0x60, 0x5d, 0x5c, 0x6c, 0x7f, 0x7e, 0x71,
6700 0x6f, 0x4f, 0x3b, 0x43, 0x50, 0x4e, 0x4a, 0x4d,
6701 0x4b, 0x4e, 0x92, 0x5f, 0x39, 0x4e, 0x3c, 0x7b,
6702 0x81, 0x62, 0x69, 0x6e, 0x51, 0x54, 0x60, 0x47,
6703 0x6e, 0x76, 0x70, 0x78, 0x68, 0x5f, 0x7a, 0x6c,
6704 0x89, 0x59, 0x63, 0x68, 0x8d, 0xaf, 0x8f, 0x95,
6705 0xca, 0xbb, 0xb6, 0x89, 0x5a, 0x8c, 0xce, 0xc4,
6706 0xf4, 0xd9, 0xa7, 0xa3, 0xcc, 0xc4, 0x96, 0x84,
6707 0x3a, 0x64, 0xb1, 0xbf, 0x8c, 0x86, 0x94, 0x79,
6708 0x6a, 0x6c, 0x6e, 0x6e, 0x6b, 0x66, 0x61, 0x5e,
6709 0x69, 0x67, 0x66, 0x6a, 0x6d, 0x6c, 0x64, 0x5d,
6710 0x5a, 0x62, 0x69, 0x68, 0x5f, 0x56, 0x51, 0x51,
6711 0x5c, 0x67, 0x70, 0x6b, 0x5e, 0x55, 0x58, 0x5f,
6712 0x5c, 0x55, 0x4e, 0x4e, 0x53, 0x57, 0x55, 0x52,
6713 0x54, 0x46, 0x3b, 0x38, 0x3d, 0x12, 0x35, 0x2a,
6714 0x70, 0x76, 0x4f, 0x59, 0x45, 0x31, 0x54, 0x2a,
6715 0x2e, 0x32, 0x40, 0x4b, 0x45, 0x39, 0x42, 0x56,
6716 0x29, 0x79, 0x5e, 0x4d, 0x36, 0x1b, 0x1b, 0x2c,
6717 0x6a, 0x12, 0x2e, 0x89, 0x5c, 0x22, 0xad, 0xe4,
6718 0x6d, 0x26, 0x43, 0x51, 0x3b, 0x33, 0x27, 0x47,
6719 0x26, 0x00, 0x6e, 0xff, 0x96, 0x27, 0x57, 0x2c,
6720 0x57, 0x3c, 0x2f, 0x32, 0x30, 0x33, 0x3f, 0x45,
6721 0x0e, 0x2f, 0x62, 0x84, 0x7f, 0x73, 0x87, 0xab,
6722 0x2b, 0x60, 0x5f, 0x4c, 0x41, 0x17, 0x37, 0xb3,
6723 0xe4, 0x9a, 0x64, 0x7a, 0x8e, 0x65, 0x4f, 0x70,
6724 0x59, 0x28, 0x1d, 0x45, 0x58, 0x4b, 0x51, 0x6b,
6725 0x68, 0x5a, 0x44, 0x2e, 0x1f, 0x18, 0x17, 0x17,
6726 0xb9, 0xbb, 0xc1, 0x9d, 0x39, 0x49, 0xbb, 0xc5,
6727 0xc7, 0xbd, 0xb6, 0xbb, 0xc6, 0xca, 0xc2, 0xb7,
6728 0x6d, 0xa8, 0xdb, 0xe0, 0xcf, 0xca, 0xce, 0xd0,
6729 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
6730 0xd6, 0xd6, 0xd7, 0xd8, 0xd9, 0xd9, 0xda, 0xda,
6731 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6732 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6733 0xd5, 0xdd, 0xd2, 0xd4, 0xd6, 0xd8, 0xe8, 0xc8,
6734 0x7e, 0x90, 0xb6, 0xf9, 0xce, 0x6b, 0x93, 0xf3,
6735 0xce, 0xb2, 0xc6, 0xbb, 0xaf, 0xc2, 0xc0, 0xc6,
6736 0xbb, 0xab, 0xb7, 0xd2, 0x94, 0xb6, 0xc2, 0xda,
6737 0xe9, 0xda, 0xcf, 0xd1, 0xd8, 0xd9, 0xd2, 0xcd,
6738 0xd7, 0xcd, 0xc7, 0xac, 0x95, 0xe8, 0xde, 0xa8,
6739 0x84, 0x62, 0x4e, 0x2f, 0x34, 0x26, 0x51, 0x78,
6740 0xb0, 0x86, 0x70, 0x7f, 0x78, 0x49, 0x2f, 0x3c,
6741 0x2e, 0x1d, 0x2f, 0x4f, 0x67, 0x67, 0x4c, 0x39,
6742 0x5f, 0x59, 0x51, 0x53, 0x5f, 0x69, 0x61, 0x52,
6743 0x59, 0x69, 0x77, 0x73, 0x6a, 0x6d, 0x6a, 0x5b,
6744 0x6b, 0x52, 0x41, 0x42, 0x42, 0x3b, 0x3e, 0x4a,
6745 0x43, 0x4a, 0x6f, 0x6c, 0x88, 0xa8, 0x6e, 0x45,
6746 0x6e, 0x79, 0x84, 0x7b, 0x65, 0x64, 0x73, 0x7b,
6747 0x81, 0xa9, 0x91, 0x90, 0x8b, 0x74, 0x85, 0x7c,
6748 0xad, 0x99, 0xab, 0xc9, 0xc8, 0xb1, 0xb0, 0xd4,
6749 0xe2, 0xb6, 0xb4, 0xd7, 0xba, 0x57, 0x28, 0x44,
6750 0x78, 0xc7, 0xa7, 0x6b, 0x96, 0xc1, 0xca, 0xed,
6751 0xff, 0xff, 0xfa, 0xea, 0xd2, 0xb1, 0x8b, 0x6f,
6752 0x6c, 0x70, 0x6f, 0x67, 0x5f, 0x61, 0x70, 0x7e,
6753 0x93, 0x89, 0x7d, 0x77, 0x79, 0x7d, 0x7e, 0x7e,
6754 0x7e, 0x7b, 0x74, 0x68, 0x5f, 0x60, 0x6b, 0x74,
6755 0x74, 0x7a, 0x7c, 0x71, 0x60, 0x58, 0x5e, 0x67,
6756 0x64, 0x55, 0x49, 0x4c, 0x5b, 0x63, 0x5c, 0x51,
6757 0x48, 0x3f, 0x4c, 0x95, 0xa9, 0x40, 0x4d, 0x46,
6758 0x4e, 0x4a, 0x25, 0x23, 0x41, 0x4f, 0x5d, 0x65,
6759 0x56, 0x2f, 0x1c, 0x27, 0x26, 0x1c, 0x37, 0x65,
6760 0x2f, 0x3d, 0x49, 0x4e, 0x53, 0x38, 0x37, 0x1d,
6761 0x49, 0xce, 0xc5, 0x3a, 0x78, 0x72, 0x36, 0x61,
6762 0x3b, 0x18, 0x31, 0x25, 0x21, 0x3f, 0x32, 0x38,
6763 0x1f, 0x19, 0x13, 0x31, 0x3b, 0x15, 0x06, 0x14,
6764 0x48, 0x4d, 0x32, 0x33, 0x4f, 0x2c, 0x01, 0x14,
6765 0x2f, 0x23, 0x1c, 0x27, 0x37, 0x3d, 0x37, 0x2f,
6766 0x7d, 0x4e, 0x4e, 0xb0, 0xca, 0x51, 0x54, 0xff,
6767 0xd6, 0xc8, 0xa7, 0x60, 0x19, 0x1a, 0x44, 0x59,
6768 0x33, 0x1a, 0x18, 0x46, 0x78, 0x7c, 0x6b, 0x68,
6769 0x60, 0x5c, 0x52, 0x43, 0x32, 0x26, 0x20, 0x1f,
6770 0xb9, 0xb9, 0xc2, 0x98, 0x34, 0x4c, 0xbe, 0xc3,
6771 0xc7, 0xba, 0xb5, 0xc3, 0xd4, 0xcb, 0xa6, 0x82,
6772 0x4a, 0x95, 0xdc, 0xe9, 0xd7, 0xcd, 0xce, 0xcf,
6773 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2,
6774 0xd5, 0xd6, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xda,
6775 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6776 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6777 0xd6, 0xd7, 0xd3, 0xe5, 0xcd, 0xd8, 0xd0, 0xcc,
6778 0x89, 0xa5, 0xa2, 0x80, 0x48, 0x6a, 0xd8, 0xf3,
6779 0xd0, 0xb8, 0xc1, 0xa5, 0xc3, 0xd1, 0x9f, 0xd7,
6780 0xaa, 0x82, 0xbb, 0xc3, 0x9b, 0xe7, 0xd9, 0xc8,
6781 0xcc, 0xd9, 0xdc, 0xd3, 0xd3, 0xdc, 0xd8, 0xc9,
6782 0xd6, 0xc9, 0xc4, 0xd1, 0xca, 0xe0, 0xb1, 0xb2,
6783 0x96, 0x5d, 0x55, 0x4d, 0x5e, 0x57, 0x7b, 0x81,
6784 0x50, 0x51, 0x85, 0xac, 0x73, 0x27, 0x33, 0x70,
6785 0x5e, 0x55, 0x42, 0x52, 0x59, 0x3f, 0x40, 0x54,
6786 0x41, 0x40, 0x46, 0x51, 0x57, 0x57, 0x5d, 0x67,
6787 0x59, 0x66, 0x72, 0x5c, 0x36, 0x37, 0x5f, 0x7d,
6788 0x63, 0x67, 0x6a, 0x5c, 0x39, 0x25, 0x3f, 0x69,
6789 0xa3, 0xad, 0x8d, 0x75, 0x84, 0x96, 0x76, 0x28,
6790 0x69, 0x7e, 0x71, 0x6a, 0x82, 0x76, 0x52, 0x4f,
6791 0x71, 0xdd, 0xab, 0x65, 0x79, 0xb7, 0xe5, 0xbe,
6792 0xab, 0xd1, 0xcd, 0xd1, 0xb5, 0x96, 0xb6, 0xb9,
6793 0xb3, 0xc4, 0xb4, 0xbd, 0xc6, 0x78, 0x48, 0x81,
6794 0x82, 0xa4, 0xdc, 0xed, 0xd1, 0xaf, 0x74, 0x29,
6795 0x0b, 0x29, 0x0f, 0x32, 0x9a, 0x8f, 0x52, 0x6c,
6796 0x64, 0x73, 0x7c, 0x72, 0x60, 0x5d, 0x6e, 0x82,
6797 0x82, 0x7a, 0x71, 0x6c, 0x6b, 0x68, 0x62, 0x5c,
6798 0x5c, 0x69, 0x78, 0x7e, 0x7a, 0x71, 0x6a, 0x68,
6799 0x7b, 0x7d, 0x77, 0x66, 0x54, 0x4e, 0x59, 0x66,
6800 0x69, 0x55, 0x44, 0x49, 0x5d, 0x66, 0x5b, 0x4b,
6801 0x4b, 0x60, 0x2f, 0x70, 0xd8, 0xff, 0xac, 0x51,
6802 0x15, 0x2f, 0x2e, 0x1a, 0x2a, 0x26, 0x1f, 0x5b,
6803 0x23, 0x31, 0x51, 0x6a, 0x59, 0x2e, 0x19, 0x1f,
6804 0x2b, 0x38, 0x46, 0x56, 0xa1, 0x5b, 0x28, 0x2a,
6805 0x40, 0x39, 0x23, 0x15, 0x41, 0x39, 0x63, 0x3e,
6806 0x41, 0x57, 0x4d, 0x69, 0x50, 0x11, 0x25, 0x38,
6807 0x36, 0x7c, 0x96, 0x40, 0x2c, 0x44, 0x39, 0x71,
6808 0x9a, 0x6e, 0x68, 0x7b, 0x79, 0x6c, 0x4b, 0x1a,
6809 0x26, 0x1a, 0x16, 0x20, 0x27, 0x25, 0x25, 0x2b,
6810 0x34, 0x43, 0x6b, 0xa1, 0xc9, 0xcd, 0x9f, 0x64,
6811 0x50, 0x47, 0x68, 0x73, 0x56, 0x61, 0x71, 0x51,
6812 0x29, 0x53, 0x82, 0x95, 0x76, 0x38, 0x21, 0x3b,
6813 0x2d, 0x35, 0x3b, 0x37, 0x2a, 0x1a, 0x0f, 0x0a,
6814 0xc0, 0xba, 0xca, 0x8d, 0x25, 0x6c, 0xbd, 0xc6,
6815 0xc3, 0xbc, 0xcc, 0xd1, 0xc1, 0xab, 0x29, 0x16,
6816 0x1d, 0x0e, 0x3e, 0xb2, 0xc8, 0xce, 0xd8, 0xd1,
6817 0xcd, 0xce, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd2,
6818 0xd2, 0xd3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd7,
6819 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
6820 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
6821 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
6822 0x99, 0x77, 0xb4, 0x5f, 0x34, 0x55, 0x92, 0x6e,
6823 0x82, 0x9e, 0xc2, 0xd7, 0xd2, 0xc1, 0xb7, 0xb8,
6824 0xae, 0x9c, 0xc8, 0xae, 0xd7, 0xde, 0xd7, 0xcf,
6825 0xce, 0xd1, 0xd6, 0xda, 0xda, 0xd8, 0xd4, 0xd1,
6826 0xdd, 0xbe, 0xc0, 0xcd, 0xa4, 0xb1, 0xd9, 0x9e,
6827 0x73, 0x7b, 0x4b, 0x35, 0x43, 0x58, 0x77, 0x76,
6828 0x43, 0x2e, 0x80, 0x6e, 0x3e, 0x5d, 0x5c, 0x67,
6829 0x5b, 0x68, 0x61, 0x60, 0x67, 0x50, 0x46, 0x67,
6830 0x51, 0x69, 0x66, 0x55, 0x53, 0x45, 0x30, 0x31,
6831 0x2c, 0x1a, 0x4e, 0x58, 0x61, 0x7a, 0x50, 0x38,
6832 0x50, 0x6b, 0x5c, 0x35, 0x42, 0x7d, 0xad, 0xc1,
6833 0x97, 0x9b, 0xa3, 0x6e, 0x71, 0xc1, 0xc2, 0x92,
6834 0x34, 0x66, 0x62, 0xa4, 0xc8, 0xbf, 0xe0, 0xb6,
6835 0xad, 0xd4, 0x84, 0x73, 0xd3, 0xd0, 0x8b, 0x7d,
6836 0xc7, 0x66, 0x56, 0xa5, 0xdd, 0xe1, 0xc3, 0x9b,
6837 0xaf, 0x5c, 0x3d, 0x93, 0xaf, 0xc0, 0xff, 0xde,
6838 0x96, 0x80, 0x37, 0x25, 0x27, 0x17, 0x29, 0x2e,
6839 0x36, 0x2c, 0x24, 0x34, 0x2b, 0x25, 0x45, 0x50,
6840 0x70, 0x73, 0x77, 0x78, 0x73, 0x6a, 0x60, 0x5a,
6841 0x6a, 0x6e, 0x6e, 0x67, 0x5d, 0x59, 0x5c, 0x61,
6842 0x5c, 0x64, 0x74, 0x84, 0x8c, 0x83, 0x6f, 0x5f,
6843 0x81, 0x8a, 0x88, 0x74, 0x63, 0x5c, 0x56, 0x4d,
6844 0x5d, 0x57, 0x53, 0x55, 0x5a, 0x58, 0x4d, 0x43,
6845 0x47, 0x40, 0x3e, 0x44, 0x29, 0x2a, 0x65, 0x80,
6846 0x31, 0x26, 0x1b, 0x1e, 0x29, 0x30, 0x2d, 0x26,
6847 0x42, 0x3a, 0x2e, 0x25, 0x22, 0x25, 0x2b, 0x2e,
6848 0x22, 0x4f, 0x8b, 0x72, 0x30, 0x43, 0x55, 0x1a,
6849 0x3b, 0x27, 0x16, 0x23, 0x3a, 0x35, 0x22, 0x20,
6850 0x15, 0x44, 0x4d, 0x3c, 0x31, 0x17, 0x0f, 0x2e,
6851 0x3a, 0x5a, 0x62, 0x3e, 0x21, 0x26, 0x35, 0x38,
6852 0x54, 0x42, 0x4f, 0x72, 0x70, 0x50, 0x51, 0x73,
6853 0x77, 0x99, 0x65, 0x39, 0x5e, 0x58, 0x2e, 0x36,
6854 0x69, 0x5f, 0x4c, 0x36, 0x2a, 0x32, 0x4a, 0x5e,
6855 0x3d, 0x38, 0x3e, 0x4a, 0x4d, 0x4d, 0x5e, 0x74,
6856 0x54, 0x34, 0x21, 0x25, 0x21, 0x1a, 0x30, 0x54,
6857 0x5f, 0x56, 0x61, 0x40, 0x3b, 0x49, 0x1e, 0x0c,
6858 0xbd, 0xbc, 0xcd, 0x92, 0x2e, 0x74, 0xbf, 0xc4,
6859 0xc6, 0xc7, 0xca, 0xc4, 0xc2, 0xc7, 0x91, 0xcb,
6860 0xda, 0xc1, 0x9b, 0xb8, 0xca, 0xdc, 0xd7, 0xc8,
6861 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0, 0xd1, 0xd1,
6862 0xd2, 0xd2, 0xd3, 0xd4, 0xd4, 0xd5, 0xd6, 0xd6,
6863 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
6864 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
6865 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
6866 0xa4, 0x62, 0xc0, 0x7b, 0x51, 0x9a, 0x8a, 0x64,
6867 0xca, 0xbb, 0xc8, 0xe7, 0xdd, 0xb2, 0xa5, 0xba,
6868 0xb7, 0x76, 0xa7, 0xc1, 0xe1, 0xd6, 0xd8, 0xda,
6869 0xed, 0xda, 0xc7, 0xc5, 0xd1, 0xdd, 0xdc, 0xd7,
6870 0xca, 0xbc, 0xc4, 0xb3, 0xaa, 0xd1, 0xbf, 0x67,
6871 0x58, 0x88, 0x93, 0x64, 0x42, 0x40, 0x4c, 0x61,
6872 0x94, 0x2d, 0x2c, 0x52, 0x4a, 0x4e, 0x5a, 0x5b,
6873 0x42, 0x70, 0x75, 0x5e, 0x5d, 0x52, 0x35, 0x28,
6874 0x64, 0x5c, 0x5c, 0x50, 0x4e, 0x4d, 0x64, 0xb2,
6875 0x9f, 0x57, 0x4e, 0x42, 0x44, 0x61, 0x5c, 0x67,
6876 0x64, 0x60, 0x75, 0x9d, 0xa9, 0x96, 0x9e, 0xc2,
6877 0x70, 0x39, 0x63, 0x9e, 0xb1, 0xb8, 0xc2, 0xec,
6878 0xfd, 0xbb, 0xdf, 0xf1, 0xc4, 0xdb, 0xd9, 0x83,
6879 0x94, 0xad, 0xd5, 0xd6, 0xb3, 0x91, 0x7e, 0x85,
6880 0xb1, 0xaf, 0xd7, 0xe1, 0x9e, 0x76, 0xad, 0xf3,
6881 0x50, 0x23, 0x34, 0x31, 0x46, 0x77, 0x6e, 0x6e,
6882 0x38, 0x3d, 0x1d, 0x17, 0x32, 0x3f, 0x39, 0x27,
6883 0x18, 0x2f, 0x51, 0x5e, 0x64, 0x92, 0xa9, 0x7c,
6884 0x60, 0x76, 0x83, 0x73, 0x54, 0x47, 0x58, 0x70,
6885 0x88, 0x75, 0x5d, 0x4e, 0x4d, 0x52, 0x56, 0x58,
6886 0x6c, 0x69, 0x66, 0x69, 0x6e, 0x6e, 0x68, 0x62,
6887 0x7d, 0x84, 0x7e, 0x6a, 0x5e, 0x5f, 0x62, 0x5f,
6888 0x4e, 0x50, 0x56, 0x60, 0x67, 0x62, 0x53, 0x46,
6889 0x36, 0x3f, 0x2d, 0x2b, 0x2c, 0x2e, 0x44, 0x47,
6890 0x50, 0x57, 0x54, 0x3d, 0x1e, 0x11, 0x1d, 0x2e,
6891 0x75, 0x59, 0x37, 0x27, 0x2d, 0x3a, 0x42, 0x43,
6892 0x35, 0x40, 0x49, 0x4b, 0x51, 0x5b, 0x4a, 0x28,
6893 0x24, 0x3a, 0x21, 0x34, 0x85, 0x91, 0x88, 0xba,
6894 0x4f, 0x47, 0x8d, 0xc8, 0x8d, 0x38, 0x2e, 0x48,
6895 0x32, 0x31, 0x27, 0x1a, 0x1d, 0x31, 0x41, 0x45,
6896 0x48, 0x3e, 0x2b, 0x18, 0x19, 0x38, 0x6c, 0x95,
6897 0x34, 0x3a, 0x27, 0x1e, 0x34, 0x3e, 0x34, 0x34,
6898 0x4a, 0x38, 0x29, 0x2b, 0x37, 0x36, 0x22, 0x0d,
6899 0x98, 0x66, 0x38, 0x2a, 0x2b, 0x34, 0x52, 0x75,
6900 0x66, 0x61, 0x57, 0x45, 0x29, 0x1b, 0x2f, 0x4f,
6901 0x2d, 0x2b, 0x41, 0x2b, 0x2e, 0x40, 0x15, 0x02,
6902 0xbc, 0xbb, 0xc6, 0x87, 0x2b, 0x77, 0xc0, 0xc4,
6903 0xc5, 0xc5, 0xba, 0xbb, 0xca, 0xbf, 0x87, 0xb3,
6904 0xce, 0xbf, 0xa6, 0xcb, 0xd3, 0xcb, 0xc3, 0xcd,
6905 0xcb, 0xcc, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd0,
6906 0xd0, 0xd1, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd5,
6907 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
6908 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
6909 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
6910 0xdc, 0x79, 0xc1, 0x76, 0x39, 0x9f, 0x63, 0x77,
6911 0xd4, 0xbf, 0xc5, 0xe3, 0xe4, 0xc4, 0xb2, 0xbb,
6912 0xa2, 0x6e, 0xb1, 0xe0, 0xe2, 0xcb, 0xd3, 0xd1,
6913 0xd7, 0xd4, 0xd2, 0xd4, 0xd5, 0xd3, 0xcc, 0xc6,
6914 0xc4, 0xab, 0xb7, 0xaf, 0xb5, 0xc3, 0xa0, 0x8e,
6915 0xa1, 0x6a, 0x51, 0x47, 0x58, 0x52, 0x2b, 0x3b,
6916 0x5b, 0x68, 0x39, 0x43, 0x6e, 0x50, 0x47, 0x72,
6917 0x6f, 0x72, 0x67, 0x64, 0x69, 0x57, 0x41, 0x42,
6918 0x48, 0x1a, 0x28, 0x2a, 0x1c, 0x12, 0x50, 0xfa,
6919 0xcd, 0x77, 0x6f, 0x8d, 0xa0, 0xae, 0xaf, 0xc7,
6920 0xe9, 0xce, 0xc0, 0xc0, 0xb1, 0x97, 0x88, 0x87,
6921 0xa2, 0xa5, 0xa9, 0x64, 0x46, 0x7e, 0x85, 0x69,
6922 0x41, 0x65, 0xae, 0xc4, 0xc7, 0xe6, 0xc1, 0x68,
6923 0xbf, 0x9b, 0x6b, 0x15, 0x31, 0x90, 0x94, 0x9b,
6924 0x87, 0x73, 0x84, 0x95, 0x69, 0x2f, 0x24, 0x32,
6925 0x3b, 0x47, 0x6e, 0x49, 0x86, 0xcf, 0x5d, 0x12,
6926 0x47, 0x26, 0x1d, 0x30, 0x42, 0x30, 0x20, 0x44,
6927 0x40, 0x59, 0x44, 0x1e, 0x37, 0x52, 0x4e, 0x63,
6928 0x75, 0x79, 0x77, 0x6a, 0x5b, 0x5d, 0x6f, 0x82,
6929 0x93, 0x80, 0x68, 0x5a, 0x5c, 0x67, 0x71, 0x76,
6930 0x81, 0x78, 0x6e, 0x6b, 0x6e, 0x70, 0x6f, 0x6c,
6931 0x61, 0x66, 0x5f, 0x4c, 0x44, 0x4e, 0x58, 0x5b,
6932 0x63, 0x65, 0x69, 0x6e, 0x6f, 0x68, 0x59, 0x4e,
6933 0x4c, 0x57, 0x33, 0x28, 0x34, 0x26, 0x22, 0x22,
6934 0x3b, 0x38, 0x35, 0x33, 0x30, 0x28, 0x1d, 0x14,
6935 0x3e, 0x41, 0x46, 0x49, 0x4a, 0x4b, 0x4e, 0x50,
6936 0x80, 0x76, 0x40, 0x21, 0x32, 0x31, 0x46, 0x87,
6937 0xed, 0xff, 0xff, 0xe6, 0x6d, 0x47, 0x94, 0xe0,
6938 0xd2, 0x86, 0x93, 0xd6, 0xbf, 0x73, 0x51, 0x51,
6939 0x37, 0x29, 0x20, 0x23, 0x24, 0x1f, 0x1f, 0x24,
6940 0x4a, 0x55, 0x51, 0x36, 0x1b, 0x19, 0x2b, 0x3c,
6941 0x34, 0x1a, 0x1d, 0x2b, 0x28, 0x30, 0x3b, 0x35,
6942 0x33, 0x30, 0x23, 0x13, 0x13, 0x39, 0x7b, 0xae,
6943 0x98, 0xcd, 0xdb, 0xbc, 0xbf, 0xd2, 0x9f, 0x45,
6944 0x24, 0x2f, 0x2e, 0x22, 0x20, 0x2d, 0x3a, 0x3e,
6945 0x30, 0x34, 0x52, 0x44, 0x48, 0x54, 0x22, 0x0a,
6946 0xc7, 0xc6, 0xc5, 0x80, 0x2f, 0x82, 0xcc, 0xd0,
6947 0xba, 0xc2, 0xc4, 0xc6, 0xcd, 0xc2, 0xa0, 0xa7,
6948 0xcb, 0xaf, 0xa1, 0xd5, 0xd5, 0xc8, 0xc5, 0xcd,
6949 0xca, 0xca, 0xcb, 0xcb, 0xcc, 0xcd, 0xce, 0xce,
6950 0xcf, 0xcf, 0xd0, 0xd0, 0xd1, 0xd2, 0xd3, 0xd3,
6951 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
6952 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
6953 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6954 0xd1, 0x9c, 0xbc, 0x9b, 0x6b, 0xad, 0x69, 0xc7,
6955 0xbc, 0xc4, 0xc8, 0xcb, 0xd6, 0xdb, 0xc5, 0xa5,
6956 0x57, 0x81, 0xd1, 0xe6, 0xd7, 0xd3, 0xdc, 0xd3,
6957 0xe7, 0xd8, 0xca, 0xca, 0xd4, 0xd8, 0xcf, 0xc4,
6958 0xbe, 0xb7, 0xb6, 0xb0, 0xb5, 0xa5, 0x86, 0x93,
6959 0x7f, 0x6c, 0x5d, 0x50, 0x60, 0x5f, 0x38, 0x2e,
6960 0x65, 0x96, 0x55, 0x25, 0x61, 0x61, 0x46, 0x7d,
6961 0x53, 0x57, 0x5b, 0x56, 0x3b, 0x1e, 0x2a, 0x51,
6962 0x4e, 0x4f, 0x80, 0x8a, 0xa4, 0xb6, 0xa7, 0xe5,
6963 0xec, 0x80, 0x56, 0x6f, 0x74, 0x66, 0x6c, 0x87,
6964 0x8a, 0x97, 0xa9, 0x9d, 0x81, 0x84, 0x93, 0x8e,
6965 0x5e, 0x7c, 0x8d, 0x39, 0x0e, 0x42, 0x3e, 0x0f,
6966 0xab, 0xaf, 0x5a, 0x72, 0x97, 0x7e, 0x9d, 0x9a,
6967 0x9d, 0x73, 0xa5, 0xb7, 0xda, 0xdd, 0x84, 0x8c,
6968 0x7b, 0x50, 0x32, 0x29, 0x1f, 0x30, 0x76, 0xbe,
6969 0x71, 0x6c, 0x6e, 0x5e, 0x7e, 0x97, 0x60, 0x41,
6970 0x27, 0x3f, 0x64, 0x50, 0x39, 0x32, 0x38, 0x7a,
6971 0x81, 0x76, 0x3e, 0x1b, 0x4e, 0x65, 0x51, 0x77,
6972 0x76, 0x68, 0x59, 0x57, 0x62, 0x70, 0x77, 0x78,
6973 0x78, 0x79, 0x76, 0x6f, 0x67, 0x67, 0x70, 0x79,
6974 0x7b, 0x7a, 0x7a, 0x7f, 0x83, 0x7f, 0x75, 0x6c,
6975 0x76, 0x7e, 0x7a, 0x6a, 0x62, 0x6b, 0x74, 0x75,
6976 0x5e, 0x5b, 0x58, 0x56, 0x55, 0x53, 0x50, 0x4e,
6977 0x3b, 0x3f, 0x26, 0x2a, 0x35, 0x2f, 0x3f, 0x4d,
6978 0x4d, 0x38, 0x22, 0x1d, 0x27, 0x2d, 0x25, 0x1a,
6979 0x1d, 0x21, 0x31, 0x51, 0x71, 0x7d, 0x71, 0x61,
6980 0x6f, 0x60, 0x2c, 0x1f, 0x3e, 0x3c, 0x4a, 0x8d,
6981 0xff, 0x87, 0x87, 0xbc, 0xae, 0xb3, 0x86, 0x00,
6982 0x2e, 0x35, 0x22, 0x18, 0x1f, 0x0f, 0x11, 0x3d,
6983 0x2b, 0x25, 0x2d, 0x3a, 0x2e, 0x1a, 0x26, 0x44,
6984 0x26, 0x32, 0x4e, 0x5c, 0x40, 0x15, 0x0f, 0x26,
6985 0x3a, 0x1c, 0x1d, 0x2f, 0x28, 0x20, 0x2b, 0x33,
6986 0x5b, 0x42, 0x24, 0x13, 0x18, 0x29, 0x39, 0x41,
6987 0x31, 0x9c, 0xbd, 0x6f, 0x45, 0x6e, 0x79, 0x4f,
6988 0x39, 0x39, 0x30, 0x33, 0x5d, 0x8a, 0x82, 0x5c,
6989 0x4c, 0x52, 0x72, 0x61, 0x5e, 0x61, 0x24, 0x06,
6990 0xbc, 0xc1, 0xbc, 0x76, 0x2f, 0x87, 0xc8, 0xc7,
6991 0xc4, 0xb9, 0xb8, 0xc3, 0xd2, 0xd1, 0xaa, 0x55,
6992 0x36, 0x85, 0xb4, 0xd2, 0xbf, 0xc0, 0xc5, 0xc9,
6993 0xc8, 0xc8, 0xc9, 0xca, 0xcb, 0xcb, 0xcc, 0xcc,
6994 0xcd, 0xcd, 0xce, 0xcf, 0xd0, 0xd0, 0xd1, 0xd1,
6995 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
6996 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6997 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6998 0xd8, 0xc9, 0x79, 0x6e, 0x66, 0x64, 0x41, 0xba,
6999 0xd8, 0xdc, 0xd0, 0xbe, 0xc3, 0xd2, 0xc4, 0xa4,
7000 0x50, 0xb6, 0xdf, 0xd3, 0xc8, 0xd2, 0xcf, 0xcb,
7001 0xcc, 0xd4, 0xda, 0xd7, 0xcd, 0xc7, 0xc8, 0xcc,
7002 0xd6, 0xbf, 0x93, 0x8f, 0x82, 0x59, 0x64, 0x89,
7003 0x6b, 0x6f, 0x4b, 0x3f, 0x49, 0x46, 0x3d, 0x26,
7004 0x47, 0x46, 0x67, 0x45, 0x3e, 0x56, 0x3d, 0x53,
7005 0x5f, 0x65, 0x62, 0x56, 0x61, 0x8c, 0xac, 0xae,
7006 0x9d, 0x95, 0xad, 0xaf, 0xb0, 0x9d, 0x89, 0xc1,
7007 0xff, 0xbc, 0xa4, 0xcc, 0xc6, 0x9c, 0x8f, 0x8a,
7008 0xaa, 0xa8, 0xd2, 0xf2, 0xdd, 0xca, 0xc4, 0xb1,
7009 0xb9, 0xb1, 0xcb, 0xac, 0x8d, 0xa2, 0xa6, 0xa6,
7010 0xa7, 0xff, 0xe4, 0x7f, 0x2e, 0x45, 0xb5, 0xaa,
7011 0x90, 0x66, 0xa9, 0x6b, 0x30, 0x89, 0x8e, 0x5f,
7012 0x29, 0x18, 0x20, 0x4e, 0x74, 0x70, 0x60, 0x60,
7013 0x2a, 0x13, 0x1e, 0x1f, 0x50, 0x91, 0x6d, 0x33,
7014 0x3d, 0x27, 0x25, 0x1e, 0x39, 0x47, 0x24, 0x2e,
7015 0x36, 0x50, 0x77, 0x72, 0x58, 0x6b, 0x85, 0x81,
7016 0x6f, 0x70, 0x6f, 0x6a, 0x65, 0x67, 0x70, 0x78,
7017 0x76, 0x7b, 0x7e, 0x78, 0x6c, 0x63, 0x61, 0x63,
7018 0x69, 0x6c, 0x73, 0x7e, 0x84, 0x81, 0x74, 0x69,
7019 0x6e, 0x79, 0x7a, 0x6c, 0x63, 0x65, 0x65, 0x61,
7020 0x47, 0x49, 0x4b, 0x4d, 0x50, 0x55, 0x5b, 0x60,
7021 0x4a, 0x48, 0x3b, 0x3b, 0x39, 0x48, 0x63, 0x53,
7022 0x24, 0x26, 0x23, 0x1d, 0x24, 0x48, 0x80, 0xac,
7023 0x68, 0x3e, 0x19, 0x20, 0x42, 0x4f, 0x35, 0x12,
7024 0x28, 0x26, 0x23, 0x2a, 0x35, 0x2d, 0x29, 0x38,
7025 0x66, 0x35, 0x17, 0x2b, 0x4d, 0x51, 0x34, 0x16,
7026 0x0d, 0x3c, 0x36, 0x13, 0x17, 0x24, 0x31, 0x4d,
7027 0x58, 0x49, 0x47, 0x4d, 0x3d, 0x23, 0x26, 0x3d,
7028 0x37, 0x33, 0x34, 0x30, 0x20, 0x19, 0x32, 0x56,
7029 0x28, 0x21, 0x1a, 0x25, 0x30, 0x21, 0x22, 0x42,
7030 0x28, 0x29, 0x2d, 0x37, 0x3d, 0x37, 0x26, 0x16,
7031 0x44, 0x30, 0x28, 0x43, 0x68, 0x69, 0x3c, 0x0c,
7032 0x3b, 0x36, 0x23, 0x19, 0x35, 0x54, 0x43, 0x17,
7033 0x37, 0x3d, 0x5d, 0x4e, 0x4d, 0x50, 0x15, 0x00,
7034 0xb4, 0xbe, 0xb8, 0x72, 0x36, 0x8f, 0xc6, 0xc0,
7035 0xc0, 0xc4, 0xc9, 0xbe, 0xb1, 0xba, 0xd3, 0x80,
7036 0x63, 0xcb, 0xd3, 0xc5, 0xc5, 0xce, 0xc0, 0xc3,
7037 0xc6, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xca, 0xcb,
7038 0xcb, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xcf, 0xd0,
7039 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
7040 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
7041 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
7042 0xde, 0xe0, 0x44, 0x3c, 0x75, 0x6d, 0x8c, 0xdc,
7043 0xf0, 0xdc, 0xc8, 0xc1, 0xc2, 0xc5, 0xcc, 0xd4,
7044 0x7e, 0xda, 0xd1, 0xca, 0xcf, 0xdc, 0xd2, 0xda,
7045 0xd2, 0xda, 0xe4, 0xea, 0xea, 0xe3, 0xda, 0xd3,
7046 0xd0, 0x95, 0x49, 0x4c, 0x5d, 0x67, 0x86, 0x7d,
7047 0x5d, 0x7e, 0x83, 0xa5, 0xb7, 0xae, 0xce, 0xe1,
7048 0x6a, 0x7b, 0x9d, 0x53, 0x58, 0xb1, 0xb6, 0xd5,
7049 0xc8, 0xbd, 0xc2, 0xcb, 0xcd, 0xd9, 0xd9, 0xc3,
7050 0xc8, 0xcd, 0xc2, 0xc9, 0xc5, 0x9b, 0x8a, 0x9c,
7051 0x86, 0x6d, 0x62, 0x85, 0x80, 0x69, 0x6d, 0x54,
7052 0xa6, 0xab, 0xc0, 0xa5, 0x6e, 0x86, 0xc2, 0xc8,
7053 0x77, 0x67, 0x79, 0x61, 0x58, 0x87, 0x9d, 0xa4,
7054 0x75, 0x6b, 0x82, 0xac, 0xb3, 0x72, 0x43, 0x68,
7055 0x58, 0x19, 0x3d, 0x3b, 0x21, 0x33, 0x2b, 0x31,
7056 0x47, 0x42, 0x36, 0x35, 0x36, 0x20, 0x16, 0x2a,
7057 0x33, 0x5d, 0xec, 0xff, 0xe9, 0xd7, 0x6a, 0x42,
7058 0x21, 0x26, 0x41, 0x62, 0x79, 0x5f, 0x30, 0x30,
7059 0x45, 0x3b, 0x2a, 0x4f, 0x74, 0x7e, 0x84, 0x64,
7060 0x81, 0x87, 0x89, 0x81, 0x73, 0x6a, 0x6c, 0x71,
7061 0x7d, 0x75, 0x6d, 0x6b, 0x6e, 0x6f, 0x6a, 0x64,
7062 0x70, 0x6e, 0x6d, 0x73, 0x7b, 0x7e, 0x7b, 0x76,
7063 0x6e, 0x7a, 0x7d, 0x6f, 0x64, 0x62, 0x5f, 0x58,
7064 0x4d, 0x55, 0x5e, 0x62, 0x60, 0x5e, 0x5e, 0x60,
7065 0x4c, 0x4d, 0x40, 0x38, 0x38, 0x58, 0x6a, 0x36,
7066 0x32, 0x33, 0x35, 0x39, 0x43, 0x56, 0x6c, 0x7c,
7067 0x4a, 0x4d, 0x4a, 0x3a, 0x26, 0x1c, 0x1f, 0x28,
7068 0x27, 0x22, 0x2a, 0x28, 0x13, 0x13, 0x1d, 0x16,
7069 0x3b, 0x3d, 0x1b, 0x1e, 0x4b, 0x3c, 0x1a, 0x2e,
7070 0x3d, 0x25, 0x26, 0x23, 0x0d, 0x18, 0x28, 0x17,
7071 0x20, 0x1f, 0x34, 0x5e, 0x78, 0x6d, 0x4c, 0x34,
7072 0x17, 0x33, 0x3a, 0x2b, 0x39, 0x67, 0x83, 0x80,
7073 0x2a, 0x31, 0x28, 0x24, 0x2b, 0x20, 0x20, 0x3b,
7074 0x61, 0x6c, 0x6f, 0x5d, 0x42, 0x36, 0x40, 0x51,
7075 0x2b, 0x36, 0x43, 0x42, 0x30, 0x20, 0x23, 0x2f,
7076 0x33, 0x3a, 0x32, 0x1c, 0x0e, 0x12, 0x17, 0x17,
7077 0x1d, 0x22, 0x43, 0x38, 0x3f, 0x4f, 0x1f, 0x08,
7078 0xc1, 0xc8, 0xb3, 0x65, 0x30, 0x94, 0xd1, 0xce,
7079 0xb5, 0xbd, 0xbe, 0xc3, 0xcb, 0xc1, 0xd3, 0x6e,
7080 0x74, 0xd1, 0xcc, 0xbe, 0xbf, 0xbe, 0xb8, 0xd7,
7081 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9,
7082 0xca, 0xca, 0xcb, 0xcc, 0xcc, 0xcd, 0xce, 0xce,
7083 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
7084 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
7085 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
7086 0xcb, 0xe6, 0x6e, 0x45, 0x7c, 0x7a, 0xb3, 0x9e,
7087 0xd2, 0xd5, 0xd4, 0xce, 0xc6, 0xc3, 0xc6, 0xcb,
7088 0x9a, 0xef, 0xe1, 0xee, 0xe5, 0xf4, 0xee, 0xeb,
7089 0xee, 0xc2, 0x9a, 0x9f, 0xc6, 0xe2, 0xdb, 0xc5,
7090 0x69, 0x2d, 0x53, 0xa7, 0x98, 0x7c, 0xb2, 0xea,
7091 0xdc, 0xd7, 0xb6, 0xa4, 0xad, 0xb1, 0xab, 0xa3,
7092 0x8b, 0xbd, 0x9b, 0x43, 0x71, 0xa7, 0x68, 0x4f,
7093 0x7d, 0x92, 0xd4, 0xf4, 0xc3, 0x92, 0x91, 0x9a,
7094 0x94, 0xb5, 0x5f, 0x48, 0x89, 0xc4, 0xcf, 0x76,
7095 0xa6, 0xcb, 0xd8, 0xea, 0xd0, 0xb0, 0xa1, 0x59,
7096 0xa5, 0x86, 0x8e, 0x9b, 0xa3, 0xc6, 0xa7, 0x3b,
7097 0x4f, 0x1b, 0x30, 0x42, 0x38, 0x32, 0x28, 0x38,
7098 0x46, 0x39, 0x33, 0x35, 0x3e, 0x2a, 0x0b, 0x16,
7099 0x22, 0x4f, 0x44, 0x11, 0x19, 0x32, 0x30, 0x3e,
7100 0x21, 0x29, 0x21, 0x26, 0x37, 0x2a, 0x20, 0x35,
7101 0x3c, 0x24, 0x7f, 0xe9, 0xff, 0x95, 0x11, 0x1d,
7102 0x53, 0x6e, 0x4e, 0x2f, 0x3f, 0x54, 0x47, 0x1f,
7103 0xb2, 0xb8, 0x49, 0x4a, 0x81, 0x6a, 0x7c, 0x90,
7104 0x87, 0x81, 0x79, 0x76, 0x76, 0x72, 0x6a, 0x63,
7105 0x70, 0x68, 0x5f, 0x5e, 0x65, 0x6b, 0x6c, 0x6a,
7106 0x78, 0x71, 0x69, 0x68, 0x6e, 0x74, 0x75, 0x73,
7107 0x71, 0x7a, 0x78, 0x68, 0x5d, 0x5f, 0x61, 0x5d,
7108 0x58, 0x5e, 0x63, 0x5e, 0x54, 0x4b, 0x49, 0x4b,
7109 0x5b, 0x54, 0x38, 0x30, 0x31, 0x36, 0x42, 0x2d,
7110 0x4a, 0x3c, 0x34, 0x41, 0x58, 0x63, 0x58, 0x49,
7111 0x0b, 0x3e, 0x6b, 0x67, 0x44, 0x3d, 0x66, 0x96,
7112 0x3f, 0x27, 0x26, 0x30, 0x2f, 0x37, 0x3b, 0x2d,
7113 0x34, 0x2a, 0x24, 0x2d, 0x32, 0x29, 0x25, 0x2c,
7114 0x34, 0x24, 0x35, 0x3a, 0x19, 0x1b, 0x40, 0x4e,
7115 0x17, 0x25, 0x3c, 0x59, 0x71, 0x69, 0x38, 0x05,
7116 0x2b, 0x4c, 0x58, 0x4e, 0x5a, 0x72, 0x63, 0x38,
7117 0x5d, 0x5f, 0x6c, 0x66, 0x53, 0x60, 0x76, 0x71,
7118 0x67, 0x54, 0x42, 0x44, 0x53, 0x58, 0x4b, 0x3a,
7119 0x1d, 0x3c, 0x3e, 0x1f, 0x15, 0x2a, 0x2b, 0x14,
7120 0x2d, 0x2b, 0x28, 0x1f, 0x0c, 0x06, 0x21, 0x44,
7121 0x29, 0x29, 0x42, 0x32, 0x3a, 0x51, 0x2a, 0x19,
7122 0xba, 0xb6, 0x8f, 0x35, 0x04, 0x75, 0xc0, 0xc7,
7123 0xb8, 0xc2, 0xb5, 0xb9, 0xcb, 0xb5, 0xd0, 0x80,
7124 0x8a, 0xc6, 0xbe, 0xc1, 0xc7, 0xce, 0xc0, 0xc1,
7125 0xc4, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc8, 0xc9,
7126 0xc9, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xcd, 0xce,
7127 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
7128 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
7129 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
7130 0xd3, 0xf7, 0xb4, 0x57, 0x73, 0x9b, 0xff, 0xc5,
7131 0xb1, 0xe5, 0xfb, 0xdb, 0xc0, 0xbc, 0xa3, 0x7a,
7132 0x4c, 0xac, 0xaa, 0xa7, 0x65, 0x62, 0x52, 0x2c,
7133 0x5d, 0x5f, 0x5a, 0x4d, 0x44, 0x50, 0x6e, 0x89,
7134 0x9d, 0xaa, 0xe1, 0xba, 0x92, 0xd2, 0xc3, 0x59,
7135 0x73, 0x41, 0x45, 0x7a, 0xc3, 0xd5, 0xae, 0xb4,
7136 0x91, 0xba, 0xb3, 0xa8, 0xb5, 0xbb, 0xbd, 0xba,
7137 0x9a, 0x88, 0x87, 0x7f, 0x72, 0x8a, 0x99, 0x7f,
7138 0x7d, 0x9e, 0x65, 0x93, 0xa6, 0x77, 0xa1, 0x99,
7139 0x79, 0xb0, 0xb0, 0xaa, 0x9a, 0xab, 0xce, 0x91,
7140 0x8c, 0x59, 0x67, 0x69, 0x26, 0x27, 0x7e, 0xb4,
7141 0x72, 0x39, 0x39, 0x33, 0x2b, 0x38, 0x31, 0x35,
7142 0x16, 0x1d, 0x2e, 0x45, 0x17, 0x6e, 0xf3, 0x82,
7143 0x62, 0x50, 0x38, 0x2b, 0x18, 0x1f, 0x38, 0x23,
7144 0x2d, 0x32, 0x20, 0x1e, 0x35, 0x2e, 0x24, 0x3b,
7145 0x3d, 0x59, 0x26, 0x52, 0x93, 0x61, 0x36, 0x23,
7146 0x26, 0x51, 0x40, 0x3d, 0x44, 0x37, 0x2e, 0x0c,
7147 0x73, 0xae, 0x49, 0x32, 0x55, 0x62, 0xa4, 0x9a,
7148 0x87, 0x81, 0x7c, 0x7b, 0x7e, 0x81, 0x80, 0x7e,
7149 0x7e, 0x81, 0x80, 0x79, 0x70, 0x6b, 0x6f, 0x75,
7150 0x6a, 0x63, 0x5b, 0x5a, 0x5d, 0x5e, 0x5b, 0x57,
7151 0x73, 0x79, 0x71, 0x5e, 0x55, 0x5d, 0x66, 0x68,
7152 0x64, 0x66, 0x63, 0x59, 0x4f, 0x4c, 0x54, 0x5e,
7153 0x62, 0x53, 0x35, 0x4a, 0x58, 0x43, 0x62, 0x9a,
7154 0xae, 0x99, 0x73, 0x47, 0x2b, 0x2e, 0x4a, 0x65,
7155 0x5c, 0x4f, 0x38, 0x1e, 0x0f, 0x14, 0x28, 0x39,
7156 0x51, 0x51, 0x52, 0x44, 0x21, 0x11, 0x32, 0x5e,
7157 0x6a, 0x46, 0x26, 0x20, 0x23, 0x21, 0x1f, 0x24,
7158 0x30, 0x34, 0x1b, 0x1b, 0x44, 0x46, 0x24, 0x1a,
7159 0x26, 0x36, 0x35, 0x26, 0x28, 0x3a, 0x39, 0x26,
7160 0x36, 0x2a, 0x1f, 0x25, 0x39, 0x46, 0x40, 0x31,
7161 0x16, 0x0f, 0x3c, 0x45, 0x24, 0x54, 0x8a, 0x69,
7162 0x2d, 0x31, 0x33, 0x32, 0x33, 0x3e, 0x52, 0x63,
7163 0x4d, 0x34, 0x1a, 0x0f, 0x17, 0x2a, 0x3f, 0x4d,
7164 0x4b, 0x2c, 0x19, 0x1e, 0x1c, 0x15, 0x2c, 0x51,
7165 0x39, 0x32, 0x41, 0x27, 0x28, 0x3b, 0x15, 0x06,
7166 0xe4, 0xc7, 0x76, 0x25, 0x2f, 0x85, 0xc4, 0xcb,
7167 0xc7, 0xbe, 0xc9, 0xc2, 0xad, 0xb6, 0xa8, 0x6d,
7168 0x8d, 0xcb, 0xce, 0xc8, 0xd0, 0xc2, 0xbd, 0xc1,
7169 0xbd, 0xc8, 0xc8, 0xc8, 0xcd, 0xc4, 0xc0, 0xd0,
7170 0xbf, 0xc9, 0xbf, 0xc2, 0xd6, 0xcb, 0xba, 0xc8,
7171 0xce, 0xc8, 0xd1, 0xc3, 0xc8, 0xd2, 0xc5, 0xd9,
7172 0xd4, 0xd2, 0xd9, 0xd4, 0xc7, 0xd2, 0xda, 0xc9,
7173 0xc6, 0xd7, 0xd1, 0xdd, 0xd6, 0xce, 0xe6, 0xdf,
7174 0xe9, 0xdd, 0xc0, 0x8b, 0x58, 0x56, 0x83, 0xa9,
7175 0x1c, 0x0d, 0x17, 0x3a, 0x4c, 0x53, 0x74, 0xa2,
7176 0x9b, 0x9d, 0x83, 0x9a, 0xd5, 0xc8, 0xb4, 0xe1,
7177 0xcc, 0xcb, 0xbf, 0xb7, 0xc4, 0xc3, 0x8c, 0x47,
7178 0x92, 0xaa, 0xb2, 0x98, 0x6e, 0x4d, 0x36, 0x27,
7179 0xa8, 0x9a, 0xbb, 0xb0, 0x58, 0x4a, 0xa1, 0xe2,
7180 0xe9, 0xb4, 0x7b, 0x7d, 0x78, 0x9a, 0xbc, 0x65,
7181 0x90, 0xb3, 0xaf, 0x9c, 0x9a, 0x8e, 0x95, 0xbf,
7182 0xa4, 0xa9, 0x8a, 0x71, 0x81, 0x79, 0x40, 0x0e,
7183 0x28, 0x13, 0x36, 0x76, 0x67, 0x19, 0x06, 0x32,
7184 0x18, 0x8a, 0xa2, 0x3c, 0x08, 0x3a, 0x4c, 0x1c,
7185 0x40, 0x18, 0x4e, 0xbd, 0xaf, 0x30, 0x00, 0x35,
7186 0x2f, 0x4c, 0x2a, 0x31, 0x32, 0x4e, 0xcd, 0xff,
7187 0xb0, 0x2d, 0x36, 0x42, 0x2f, 0x36, 0x34, 0x66,
7188 0x79, 0x26, 0x1a, 0x37, 0x2a, 0x27, 0x2c, 0x10,
7189 0x39, 0x37, 0x2a, 0x26, 0x45, 0x67, 0x5b, 0x34,
7190 0x36, 0x29, 0x3c, 0x46, 0x32, 0x38, 0x41, 0x28,
7191 0x2a, 0x37, 0x42, 0x39, 0x65, 0xa0, 0x91, 0x77,
7192 0x78, 0x7a, 0x7a, 0x75, 0x71, 0x73, 0x7c, 0x84,
7193 0x87, 0x80, 0x77, 0x75, 0x78, 0x7b, 0x7a, 0x78,
7194 0x8b, 0x8b, 0x89, 0x86, 0x80, 0x78, 0x71, 0x6c,
7195 0x77, 0x75, 0x71, 0x69, 0x61, 0x5c, 0x5b, 0x5d,
7196 0x70, 0x68, 0x5f, 0x5c, 0x5e, 0x61, 0x60, 0x5e,
7197 0x42, 0x46, 0x44, 0x37, 0x4f, 0x96, 0xa2, 0x65,
7198 0x18, 0x43, 0x60, 0x47, 0x14, 0x06, 0x34, 0x6a,
7199 0x59, 0x52, 0x35, 0x17, 0x1f, 0x3f, 0x42, 0x2b,
7200 0x55, 0x3d, 0x2c, 0x2b, 0x28, 0x21, 0x24, 0x31,
7201 0x31, 0x2e, 0x32, 0x3e, 0x47, 0x3f, 0x24, 0x0d,
7202 0x16, 0x29, 0x2c, 0x32, 0x3a, 0x24, 0x11, 0x21,
7203 0x5a, 0x38, 0x37, 0x37, 0x14, 0x0d, 0x2b, 0x3b,
7204 0x20, 0x22, 0x15, 0x1e, 0x3b, 0x30, 0x17, 0x1c,
7205 0x1c, 0x27, 0x24, 0x32, 0x4d, 0x4a, 0x4a, 0x69,
7206 0x83, 0x7d, 0x4e, 0x3f, 0x54, 0x34, 0x1c, 0x46,
7207 0x47, 0x3e, 0x37, 0x34, 0x2c, 0x25, 0x2c, 0x3a,
7208 0x2b, 0x1d, 0x16, 0x19, 0x1b, 0x29, 0x57, 0x88,
7209 0x5d, 0x4a, 0x61, 0x64, 0x6d, 0x64, 0x1f, 0x00,
7210 0xc9, 0xbf, 0x7a, 0x26, 0x30, 0x8a, 0xbe, 0xb2,
7211 0x9f, 0xa0, 0xb8, 0xc0, 0xb7, 0xc8, 0xbd, 0x83,
7212 0x90, 0xc8, 0xc4, 0xb7, 0xbc, 0xb6, 0xbe, 0xca,
7213 0xc4, 0xb6, 0xc5, 0xcc, 0xb8, 0xbb, 0xcd, 0xc9,
7214 0xc6, 0xc3, 0xd6, 0xd7, 0xb6, 0xb3, 0xc9, 0xcd,
7215 0xde, 0xe8, 0xd5, 0xcd, 0xde, 0xdb, 0xce, 0xca,
7216 0xde, 0xd9, 0xe2, 0xe5, 0xda, 0xe1, 0xec, 0xe6,
7217 0xcd, 0xf4, 0xde, 0xa4, 0xa4, 0xaf, 0x9b, 0x96,
7218 0x90, 0x43, 0x56, 0x68, 0x3c, 0x6d, 0xaf, 0x81,
7219 0xbb, 0xc2, 0xe1, 0xf2, 0xbf, 0x77, 0x72, 0x9f,
7220 0x6c, 0xac, 0x87, 0x5e, 0x79, 0x4e, 0x18, 0x43,
7221 0x6e, 0x5f, 0x61, 0x71, 0x75, 0x78, 0x9b, 0xc9,
7222 0xff, 0xbc, 0x87, 0xad, 0xde, 0xc8, 0x7e, 0x46,
7223 0x6a, 0x76, 0x82, 0x9d, 0xc3, 0xc5, 0x9e, 0x7d,
7224 0x78, 0xbb, 0xd7, 0xd4, 0x92, 0x67, 0x7b, 0x56,
7225 0x27, 0x7b, 0xb5, 0xc0, 0xb4, 0x89, 0x76, 0x94,
7226 0x95, 0x5b, 0xb2, 0xdd, 0x6b, 0x5b, 0x92, 0x67,
7227 0x7b, 0x54, 0x35, 0x30, 0x2b, 0x23, 0x31, 0x4d,
7228 0x3a, 0x64, 0x61, 0x2a, 0x16, 0x38, 0x46, 0x30,
7229 0x8a, 0xd0, 0xd3, 0x6e, 0x15, 0x14, 0x35, 0x41,
7230 0x4e, 0x39, 0x32, 0x7f, 0xc8, 0xd5, 0xce, 0xae,
7231 0x3d, 0x1e, 0x55, 0x51, 0x43, 0x60, 0x3e, 0x23,
7232 0x2f, 0x25, 0x3e, 0x51, 0x37, 0x2b, 0x4c, 0x6c,
7233 0x69, 0x5c, 0x66, 0x81, 0x7f, 0x58, 0x39, 0x34,
7234 0x17, 0x54, 0x6a, 0x57, 0x6c, 0xb0, 0xe9, 0xff,
7235 0x63, 0x3a, 0x40, 0x31, 0x2f, 0x73, 0x99, 0x8c,
7236 0x77, 0x6f, 0x69, 0x6e, 0x77, 0x79, 0x71, 0x68,
7237 0x64, 0x65, 0x69, 0x72, 0x7b, 0x7d, 0x78, 0x72,
7238 0x7c, 0x7d, 0x7d, 0x7c, 0x78, 0x73, 0x6d, 0x69,
7239 0x80, 0x79, 0x6c, 0x5f, 0x58, 0x58, 0x5f, 0x64,
7240 0x5d, 0x56, 0x4e, 0x4c, 0x50, 0x53, 0x53, 0x51,
7241 0x56, 0x40, 0x35, 0x3e, 0x55, 0x66, 0x51, 0x27,
7242 0x16, 0x2a, 0x3d, 0x3d, 0x2e, 0x22, 0x25, 0x2e,
7243 0x2e, 0x31, 0x3a, 0x41, 0x3e, 0x33, 0x2e, 0x31,
7244 0x1d, 0x56, 0x7a, 0x5d, 0x28, 0x14, 0x24, 0x38,
7245 0x2a, 0x3e, 0x51, 0x51, 0x40, 0x2d, 0x26, 0x26,
7246 0x2f, 0x43, 0x2b, 0x0c, 0x1d, 0x3a, 0x48, 0x56,
7247 0x55, 0x66, 0x3b, 0x1d, 0x3b, 0x35, 0x17, 0x22,
7248 0x20, 0x32, 0x26, 0x1c, 0x33, 0x42, 0x4b, 0x62,
7249 0x33, 0x20, 0x12, 0x34, 0x5d, 0x43, 0x17, 0x17,
7250 0x18, 0x30, 0x1d, 0x0c, 0x3b, 0x6b, 0x62, 0x47,
7251 0x4b, 0x41, 0x31, 0x1d, 0x0c, 0x0c, 0x20, 0x37,
7252 0x3a, 0x29, 0x1e, 0x1d, 0x19, 0x21, 0x46, 0x70,
7253 0x5a, 0x46, 0x59, 0x58, 0x62, 0x5f, 0x23, 0x0c,
7254 0xb3, 0xbe, 0x83, 0x2b, 0x37, 0x9a, 0xc5, 0xa6,
7255 0xbb, 0xbc, 0xd3, 0xd5, 0xc1, 0xc3, 0xa9, 0x66,
7256 0xa2, 0xcb, 0xc0, 0xb8, 0xc5, 0xc3, 0xc3, 0xbf,
7257 0xc8, 0xc0, 0xb7, 0xbf, 0xd3, 0xde, 0xde, 0xdf,
7258 0xe3, 0xe5, 0xd9, 0xcf, 0xd8, 0xde, 0xda, 0xd8,
7259 0xa7, 0xd2, 0xcc, 0xd3, 0xd6, 0xc8, 0xd4, 0xd0,
7260 0x94, 0x8d, 0x7e, 0x75, 0x6e, 0x5d, 0x5b, 0x71,
7261 0x73, 0x70, 0x74, 0x6a, 0x81, 0x7d, 0x56, 0x78,
7262 0x99, 0x7e, 0xb3, 0xc5, 0x83, 0x91, 0xc0, 0xa0,
7263 0xbc, 0xd2, 0xc1, 0x7b, 0x3f, 0x49, 0x8b, 0xc2,
7264 0xa0, 0xa0, 0xaa, 0x8d, 0x6d, 0x9f, 0xd7, 0xca,
7265 0xfc, 0x9f, 0x58, 0x67, 0x96, 0x9c, 0x7b, 0x5f,
7266 0x1e, 0x7d, 0xc0, 0xb1, 0x96, 0x9c, 0x9d, 0x8a,
7267 0x95, 0xc6, 0xaf, 0x9d, 0xd3, 0xd8, 0x9c, 0x81,
7268 0xa8, 0xbd, 0x86, 0x87, 0xb0, 0xc5, 0xda, 0xc1,
7269 0x96, 0xb3, 0xb6, 0xba, 0xcc, 0xb5, 0x90, 0x91,
7270 0x5a, 0x3a, 0x1f, 0x29, 0x4f, 0x65, 0x5b, 0x49,
7271 0x39, 0x43, 0x45, 0x46, 0x59, 0x6b, 0x59, 0x35,
7272 0x52, 0x46, 0x44, 0x4f, 0x55, 0x44, 0x27, 0x12,
7273 0x0a, 0x36, 0x35, 0x10, 0x23, 0x66, 0x71, 0x45,
7274 0x5a, 0x53, 0x57, 0x3b, 0x2f, 0x3e, 0x3d, 0x4d,
7275 0x41, 0x1d, 0x4a, 0x5f, 0x4f, 0x46, 0x32, 0x3e,
7276 0x27, 0x24, 0x22, 0x3b, 0x57, 0x41, 0x1f, 0x1e,
7277 0x2a, 0x1a, 0x1a, 0x27, 0x20, 0x10, 0x1b, 0x38,
7278 0x27, 0x31, 0x20, 0x44, 0x93, 0x87, 0x4d, 0x4d,
7279 0x34, 0x2b, 0x22, 0x23, 0x57, 0x7f, 0x73, 0x7f,
7280 0x78, 0x7d, 0x82, 0x83, 0x7f, 0x79, 0x73, 0x71,
7281 0x78, 0x70, 0x67, 0x64, 0x68, 0x6c, 0x6d, 0x6c,
7282 0x67, 0x6a, 0x6e, 0x71, 0x72, 0x71, 0x6e, 0x6c,
7283 0x7e, 0x79, 0x72, 0x6b, 0x65, 0x5f, 0x5b, 0x59,
7284 0x63, 0x5d, 0x57, 0x56, 0x59, 0x5c, 0x5a, 0x57,
7285 0x52, 0x40, 0x31, 0x3e, 0x53, 0x4b, 0x3b, 0x3c,
7286 0x53, 0x54, 0x55, 0x54, 0x4d, 0x40, 0x31, 0x27,
7287 0x4f, 0x4c, 0x5c, 0x6d, 0x56, 0x2d, 0x2b, 0x47,
7288 0x5e, 0x39, 0x1d, 0x26, 0x3c, 0x3d, 0x25, 0x0e,
7289 0x39, 0x4a, 0x5a, 0x58, 0x45, 0x34, 0x2e, 0x30,
7290 0x3b, 0x23, 0x10, 0x2b, 0x4e, 0x3f, 0x36, 0x57,
7291 0x5c, 0x42, 0x30, 0x2b, 0x29, 0x2d, 0x2f, 0x25,
7292 0x0a, 0x3d, 0x41, 0x26, 0x2b, 0x36, 0x36, 0x3d,
7293 0x36, 0x2b, 0x31, 0x51, 0x4a, 0x18, 0x38, 0xa5,
7294 0xa2, 0xb2, 0xd0, 0xc4, 0x89, 0x77, 0x9d, 0xbe,
7295 0x21, 0x1e, 0x1c, 0x23, 0x3b, 0x5c, 0x76, 0x82,
7296 0x58, 0x45, 0x37, 0x33, 0x2c, 0x2b, 0x43, 0x65,
7297 0x85, 0x6a, 0x6f, 0x5f, 0x5c, 0x56, 0x21, 0x11,
7298 0x9e, 0xb1, 0x7a, 0x21, 0x33, 0xa1, 0xd2, 0xb0,
7299 0xa8, 0xad, 0xca, 0xd3, 0xc4, 0xc8, 0xaf, 0x6c,
7300 0x95, 0xc4, 0xc4, 0xbd, 0xbf, 0xbe, 0xc9, 0xcb,
7301 0xd0, 0xd7, 0xc5, 0xb9, 0xbb, 0xa0, 0x79, 0x6e,
7302 0x5b, 0x31, 0x5a, 0x95, 0x86, 0x6f, 0x64, 0x42,
7303 0x1d, 0x31, 0x2e, 0x23, 0x19, 0x3b, 0x7a, 0x88,
7304 0x89, 0x79, 0xad, 0xcb, 0x94, 0x85, 0xaf, 0xbc,
7305 0xc1, 0x98, 0xb6, 0xe2, 0xd1, 0x97, 0x84, 0xb7,
7306 0xcb, 0xa9, 0x6a, 0x71, 0xc6, 0xe5, 0xc8, 0xbd,
7307 0x82, 0x65, 0x6d, 0xaf, 0xee, 0xec, 0xb5, 0x83,
7308 0x7b, 0x38, 0x44, 0x6f, 0x86, 0xc4, 0xc7, 0x63,
7309 0x73, 0xa2, 0xb5, 0x94, 0x79, 0x8f, 0xbb, 0xd6,
7310 0xff, 0xac, 0x6f, 0x84, 0x9e, 0x9c, 0xb0, 0xdb,
7311 0xd5, 0xbc, 0x77, 0x60, 0x97, 0xae, 0x84, 0x62,
7312 0x73, 0xae, 0x74, 0x58, 0x6e, 0x66, 0x79, 0x87,
7313 0x61, 0x89, 0x82, 0x5e, 0x4d, 0x49, 0x70, 0xb8,
7314 0xc0, 0x5e, 0x41, 0x81, 0x89, 0x43, 0x39, 0x76,
7315 0x3a, 0x4e, 0x56, 0x51, 0x58, 0x62, 0x4d, 0x28,
7316 0x6c, 0x41, 0x23, 0x29, 0x34, 0x31, 0x32, 0x3c,
7317 0x2c, 0x46, 0x5a, 0x52, 0x38, 0x27, 0x28, 0x2f,
7318 0x34, 0x47, 0x78, 0x52, 0x59, 0x8b, 0x62, 0x52,
7319 0x4a, 0x41, 0x30, 0x25, 0x69, 0xc8, 0xb5, 0x64,
7320 0xb0, 0xa3, 0x5a, 0x28, 0x33, 0x23, 0x16, 0x3d,
7321 0x4e, 0x5b, 0x53, 0x38, 0x32, 0x41, 0x40, 0x2d,
7322 0x4a, 0x5f, 0x32, 0x0f, 0x26, 0x22, 0x28, 0x66,
7323 0x8a, 0x79, 0x8d, 0x6e, 0x40, 0x4f, 0x5b, 0x52,
7324 0x78, 0x80, 0x87, 0x83, 0x77, 0x6f, 0x6f, 0x73,
7325 0x6f, 0x6e, 0x6e, 0x72, 0x76, 0x74, 0x6c, 0x64,
7326 0x88, 0x89, 0x8a, 0x8a, 0x87, 0x81, 0x7c, 0x79,
7327 0x75, 0x70, 0x6b, 0x6a, 0x6f, 0x73, 0x73, 0x72,
7328 0x6b, 0x65, 0x5f, 0x5d, 0x5e, 0x5d, 0x59, 0x54,
7329 0x43, 0x40, 0x2b, 0x2d, 0x45, 0x3f, 0x2e, 0x38,
7330 0x47, 0x49, 0x45, 0x38, 0x29, 0x27, 0x34, 0x41,
7331 0x4d, 0x3f, 0x38, 0x38, 0x30, 0x2a, 0x3e, 0x5d,
7332 0x6c, 0x1c, 0x03, 0x3c, 0x52, 0x29, 0x1e, 0x42,
7333 0x27, 0x23, 0x26, 0x36, 0x49, 0x4e, 0x42, 0x33,
7334 0x0b, 0x28, 0x18, 0x0c, 0x43, 0x7c, 0x7b, 0x67,
7335 0x5d, 0x2d, 0x47, 0x6d, 0x42, 0x1b, 0x2b, 0x3a,
7336 0x59, 0x8f, 0x89, 0x59, 0x51, 0x53, 0x3a, 0x25,
7337 0x6d, 0x63, 0x3c, 0x29, 0x40, 0x57, 0x77, 0xa9,
7338 0xc5, 0xc2, 0xf2, 0xe6, 0x74, 0x49, 0x92, 0xd2,
7339 0xb1, 0x71, 0x2e, 0x2d, 0x6c, 0x97, 0x73, 0x33,
7340 0x40, 0x2c, 0x1f, 0x20, 0x1d, 0x17, 0x25, 0x3e,
7341 0x53, 0x3b, 0x43, 0x35, 0x39, 0x41, 0x1e, 0x1d,
7342 0xb7, 0xbf, 0x85, 0x33, 0x44, 0xa8, 0xd8, 0xc0,
7343 0xb5, 0xb5, 0xcb, 0xcd, 0xb9, 0xbc, 0xa3, 0x61,
7344 0xbb, 0xdb, 0xd3, 0xc7, 0xc1, 0xbe, 0xc4, 0xba,
7345 0x9e, 0x54, 0x43, 0x61, 0x4e, 0x27, 0x2d, 0x47,
7346 0x42, 0x9a, 0x9c, 0x73, 0x8f, 0xa8, 0x93, 0x88,
7347 0xa8, 0xbd, 0xa4, 0x84, 0x9a, 0x91, 0x86, 0xce,
7348 0xb3, 0xb9, 0xa4, 0x87, 0x94, 0xb6, 0xa9, 0x7a,
7349 0x9c, 0xc7, 0xd1, 0xca, 0xbb, 0xb2, 0xa4, 0x74,
7350 0x5d, 0x98, 0x9b, 0x9d, 0xc2, 0xae, 0x91, 0xb6,
7351 0x95, 0x71, 0x95, 0xdf, 0xc5, 0x6f, 0x82, 0xe7,
7352 0x98, 0x95, 0x5f, 0x70, 0xca, 0xc1, 0x8c, 0xa3,
7353 0x67, 0x75, 0x67, 0x3d, 0x2c, 0x45, 0x60, 0x67,
7354 0x18, 0x33, 0x2c, 0x1a, 0x48, 0xa4, 0xca, 0xb3,
7355 0xc6, 0x95, 0x8c, 0x8d, 0x6a, 0x55, 0x55, 0x47,
7356 0x53, 0xa3, 0x72, 0x3a, 0x27, 0x17, 0x4e, 0x87,
7357 0xb5, 0xa2, 0x69, 0x4a, 0x5e, 0x5a, 0x44, 0x4b,
7358 0x3d, 0x2c, 0x3a, 0x68, 0x62, 0x1b, 0x0d, 0x4a,
7359 0x46, 0x43, 0x42, 0x40, 0x38, 0x36, 0x46, 0x5a,
7360 0x1c, 0x2f, 0x45, 0x52, 0x54, 0x4f, 0x46, 0x3e,
7361 0x3e, 0x6a, 0x79, 0x62, 0x62, 0x79, 0x6a, 0x3e,
7362 0x5b, 0x3a, 0x4c, 0x34, 0x3f, 0x5d, 0x30, 0x32,
7363 0x93, 0x5c, 0x45, 0x81, 0x9d, 0x6b, 0x52, 0x5f,
7364 0x9a, 0xff, 0xff, 0xee, 0x9c, 0x2f, 0x00, 0x19,
7365 0xac, 0x98, 0x6b, 0x44, 0x49, 0x64, 0x60, 0x44,
7366 0x63, 0x73, 0x53, 0x29, 0x27, 0x2a, 0x2a, 0x3a,
7367 0x44, 0x5b, 0x2a, 0x23, 0xa7, 0xdb, 0x90, 0x86,
7368 0x95, 0x8a, 0x7f, 0x7d, 0x82, 0x84, 0x7f, 0x79,
7369 0x7c, 0x79, 0x76, 0x75, 0x71, 0x67, 0x58, 0x4d,
7370 0x65, 0x68, 0x6d, 0x72, 0x75, 0x75, 0x74, 0x73,
7371 0x9c, 0x86, 0x6a, 0x5b, 0x5e, 0x6c, 0x7a, 0x81,
7372 0x7a, 0x75, 0x6e, 0x6b, 0x6a, 0x66, 0x5e, 0x57,
7373 0x43, 0x41, 0x31, 0x3a, 0x55, 0x4a, 0x2e, 0x2d,
7374 0x19, 0x1a, 0x1b, 0x1b, 0x1f, 0x2a, 0x3b, 0x48,
7375 0x39, 0x36, 0x29, 0x24, 0x43, 0x78, 0x97, 0x9b,
7376 0x42, 0x24, 0x40, 0x83, 0x7f, 0x3f, 0x37, 0x6b,
7377 0x9e, 0x8e, 0x7a, 0x70, 0x68, 0x58, 0x3e, 0x28,
7378 0x3b, 0x31, 0x2d, 0x45, 0x53, 0x36, 0x39, 0x70,
7379 0x3f, 0x52, 0x5b, 0x74, 0x7b, 0x38, 0x0e, 0x38,
7380 0x67, 0x81, 0x5d, 0x26, 0x2f, 0x44, 0x32, 0x1a,
7381 0x5c, 0x2e, 0x11, 0x3a, 0x65, 0x4c, 0x3c, 0x63,
7382 0x88, 0x87, 0xa4, 0xa3, 0x86, 0x96, 0x87, 0x35,
7383 0x4d, 0xb3, 0xff, 0xef, 0xae, 0x89, 0x8a, 0x91,
7384 0x31, 0x1e, 0x17, 0x22, 0x27, 0x22, 0x28, 0x38,
7385 0x56, 0x3e, 0x45, 0x2f, 0x2a, 0x2f, 0x11, 0x15,
7386 0x36, 0x3b, 0x24, 0x0f, 0x3d, 0x9c, 0xd4, 0xd5,
7387 0xcb, 0xc1, 0xc7, 0xbb, 0xa1, 0xa5, 0x93, 0x56,
7388 0x43, 0x6b, 0x73, 0x68, 0x52, 0x42, 0x44, 0x35,
7389 0x70, 0x8b, 0xa7, 0xaa, 0xa0, 0xa7, 0xba, 0xc4,
7390 0x9d, 0x94, 0x96, 0xa2, 0xb0, 0xbe, 0xbc, 0xa9,
7391 0x81, 0x8e, 0xc2, 0xb2, 0xb4, 0xed, 0xb0, 0x31,
7392 0x66, 0x80, 0x9e, 0xc0, 0xc5, 0x89, 0x55, 0x58,
7393 0x9f, 0xb4, 0x86, 0x77, 0x6e, 0x4d, 0x6d, 0x99,
7394 0x9e, 0x86, 0x8e, 0xb3, 0xce, 0xd2, 0xab, 0x72,
7395 0x8f, 0x74, 0x68, 0x81, 0x9f, 0x94, 0x5e, 0x2a,
7396 0x07, 0x12, 0x29, 0x7b, 0xcc, 0xab, 0x5f, 0x53,
7397 0xa7, 0xb0, 0xc4, 0xc7, 0xa4, 0x83, 0x9a, 0xcc,
7398 0xe5, 0xc3, 0xcb, 0xfa, 0xfc, 0xc2, 0x94, 0x90,
7399 0x67, 0x5d, 0x99, 0xab, 0x54, 0x35, 0x72, 0x9b,
7400 0x52, 0x76, 0x4b, 0x43, 0x4e, 0x3b, 0x32, 0x0a,
7401 0x53, 0x71, 0x64, 0x46, 0x3b, 0x2d, 0x36, 0x63,
7402 0x3c, 0x6a, 0x43, 0x18, 0x54, 0x85, 0x6a, 0x4d,
7403 0x27, 0x1c, 0x2a, 0x47, 0x42, 0x2f, 0x45, 0x75,
7404 0xcc, 0xd7, 0xbc, 0x74, 0x37, 0x24, 0x23, 0x1f,
7405 0x2b, 0x69, 0x7c, 0x50, 0x3f, 0x66, 0x83, 0x7b,
7406 0x4e, 0x2f, 0x43, 0x4f, 0x37, 0x21, 0x44, 0xa4,
7407 0x2c, 0x6b, 0x61, 0x64, 0x7e, 0x90, 0xb3, 0xb4,
7408 0xdf, 0xea, 0xcd, 0xa6, 0xa5, 0xaa, 0xa8, 0xae,
7409 0xc1, 0x73, 0x2c, 0x1e, 0x28, 0x2b, 0x33, 0x42,
7410 0x35, 0x49, 0x51, 0x43, 0x3b, 0x3c, 0x2f, 0x19,
7411 0x25, 0x26, 0x25, 0x11, 0x3b, 0x8d, 0x9e, 0x93,
7412 0x7f, 0x79, 0x71, 0x6c, 0x6c, 0x6e, 0x71, 0x72,
7413 0x87, 0x83, 0x7f, 0x81, 0x86, 0x88, 0x85, 0x81,
7414 0x74, 0x78, 0x7e, 0x85, 0x89, 0x8b, 0x8b, 0x8a,
7415 0x98, 0x82, 0x68, 0x5d, 0x63, 0x6e, 0x74, 0x74,
7416 0x63, 0x5f, 0x5a, 0x59, 0x58, 0x53, 0x49, 0x41,
7417 0x37, 0x34, 0x30, 0x32, 0x31, 0x21, 0x21, 0x36,
7418 0x24, 0x1a, 0x16, 0x24, 0x37, 0x3a, 0x27, 0x12,
7419 0x15, 0x22, 0x22, 0x22, 0x45, 0x74, 0x77, 0x5a,
7420 0x41, 0x33, 0x35, 0x51, 0x6d, 0x6c, 0x54, 0x3e,
7421 0x49, 0x54, 0x5c, 0x54, 0x45, 0x3d, 0x43, 0x4e,
7422 0x67, 0xa2, 0x9f, 0x64, 0x3f, 0x31, 0x27, 0x2a,
7423 0x52, 0x63, 0x5e, 0x56, 0x6c, 0x81, 0x76, 0x61,
7424 0x4c, 0x61, 0x4c, 0x3a, 0x5c, 0x75, 0x64, 0x54,
7425 0x44, 0x57, 0x73, 0x8c, 0x73, 0x2f, 0x36, 0x8a,
7426 0xb4, 0x69, 0x30, 0x2a, 0x47, 0x69, 0x57, 0x1d,
7427 0x16, 0x84, 0xd9, 0xc7, 0x86, 0x58, 0x37, 0x1a,
7428 0x3b, 0x28, 0x26, 0x3a, 0x46, 0x42, 0x41, 0x4a,
7429 0x7e, 0x69, 0x6c, 0x4b, 0x35, 0x2b, 0x06, 0x08,
7430 0x67, 0x57, 0x41, 0x36, 0x3c, 0x47, 0x46, 0x3e,
7431 0x45, 0x3a, 0x43, 0x43, 0x3f, 0x60, 0x6b, 0x3f,
7432 0x80, 0xb7, 0xcf, 0xc0, 0x9a, 0x90, 0xb0, 0xba,
7433 0xc9, 0xa3, 0x85, 0xa6, 0xd6, 0xc2, 0xa0, 0xab,
7434 0xd2, 0xbc, 0x93, 0x90, 0xb5, 0xbd, 0xb3, 0xbd,
7435 0xad, 0xc0, 0x9c, 0x82, 0x9c, 0x8a, 0x7c, 0xb9,
7436 0xd4, 0xba, 0xc8, 0xa6, 0x60, 0x81, 0xa5, 0x68,
7437 0x6e, 0x8b, 0x75, 0x73, 0xb5, 0xde, 0xcd, 0xb1,
7438 0x99, 0x9b, 0x90, 0x75, 0x62, 0x78, 0xb3, 0xe6,
7439 0x8e, 0xbe, 0xc1, 0x91, 0x83, 0xa3, 0xa3, 0x7f,
7440 0x6b, 0x7f, 0xe4, 0xe9, 0x6e, 0x69, 0xcf, 0xec,
7441 0x8b, 0x93, 0xb2, 0xce, 0xc6, 0xaa, 0xae, 0xc9,
7442 0xa1, 0xa0, 0x7c, 0x46, 0x3c, 0x63, 0x83, 0x85,
7443 0x21, 0x15, 0x22, 0x42, 0x5f, 0x7f, 0x99, 0xa1,
7444 0x60, 0x5d, 0x35, 0x37, 0x44, 0x77, 0xc4, 0xb1,
7445 0x6c, 0x63, 0x38, 0x28, 0x44, 0x43, 0x2d, 0x34,
7446 0x68, 0x63, 0xba, 0xff, 0xdc, 0xa8, 0x6e, 0x17,
7447 0x52, 0x32, 0x28, 0x39, 0x39, 0x2a, 0x3c, 0x64,
7448 0x85, 0xa0, 0xa9, 0x8a, 0x61, 0x4b, 0x41, 0x3c,
7449 0xa5, 0x6e, 0x28, 0x0e, 0x33, 0x69, 0x7a, 0x6c,
7450 0x93, 0x65, 0x28, 0x29, 0x34, 0x4c, 0xa2, 0xe3,
7451 0xa2, 0x9e, 0x3d, 0x29, 0x36, 0x23, 0x4b, 0x66,
7452 0x39, 0x28, 0x37, 0x6c, 0xb0, 0xd8, 0xa0, 0x37,
7453 0x9d, 0x75, 0x5b, 0x5e, 0x54, 0x32, 0x18, 0x16,
7454 0x0d, 0x33, 0x38, 0x1b, 0x22, 0x4e, 0x57, 0x39,
7455 0x2b, 0x57, 0x67, 0x3b, 0x32, 0x4b, 0x5c, 0x83,
7456 0x72, 0x79, 0x7f, 0x7a, 0x70, 0x6d, 0x75, 0x7e,
7457 0x78, 0x7b, 0x80, 0x86, 0x85, 0x7a, 0x67, 0x59,
7458 0x6d, 0x6d, 0x6b, 0x67, 0x60, 0x57, 0x4f, 0x4b,
7459 0x60, 0x58, 0x55, 0x61, 0x74, 0x7d, 0x78, 0x6f,
7460 0x61, 0x5f, 0x5e, 0x60, 0x63, 0x60, 0x58, 0x50,
7461 0x59, 0x55, 0x4d, 0x39, 0x2a, 0x39, 0x4e, 0x50,
7462 0x21, 0x1e, 0x20, 0x2a, 0x33, 0x32, 0x23, 0x16,
7463 0x3b, 0x49, 0x57, 0x5e, 0x5f, 0x56, 0x40, 0x2b,
7464 0x2b, 0x3e, 0x43, 0x35, 0x2e, 0x37, 0x3a, 0x32,
7465 0x2f, 0x3a, 0x43, 0x40, 0x37, 0x37, 0x44, 0x53,
7466 0x5b, 0x49, 0x2d, 0x2f, 0x3c, 0x25, 0x15, 0x2c,
7467 0x33, 0x2b, 0x33, 0x1d, 0x13, 0x59, 0x7b, 0x3e,
7468 0x27, 0x43, 0x48, 0x4f, 0x6c, 0x6e, 0x5e, 0x61,
7469 0x28, 0x86, 0x82, 0x25, 0x07, 0x24, 0x27, 0x12,
7470 0x3e, 0x2f, 0x35, 0x68, 0x88, 0x59, 0x25, 0x27,
7471 0x37, 0x75, 0x87, 0x4d, 0x1f, 0x2b, 0x40, 0x3d,
7472 0x28, 0x15, 0x14, 0x2c, 0x3b, 0x34, 0x2b, 0x2d,
7473 0x36, 0x2d, 0x44, 0x35, 0x2c, 0x2e, 0x11, 0x19,
7474 0xe9, 0xd4, 0xce, 0xdb, 0xd5, 0xb0, 0x8d, 0x81,
7475 0xba, 0xa9, 0xaa, 0xa4, 0xa1, 0xc9, 0xdc, 0xb7,
7476 0xca, 0xbf, 0x97, 0x7f, 0x7d, 0x94, 0xb0, 0xa1,
7477 0x82, 0x8a, 0x91, 0x8b, 0x92, 0xb7, 0xc1, 0xa4,
7478 0xa6, 0xa0, 0xb9, 0xbb, 0x88, 0x70, 0x8d, 0xa6,
7479 0xb5, 0x9b, 0x75, 0x80, 0x7f, 0x6f, 0x7c, 0x73,
7480 0x7c, 0x8a, 0x9f, 0xbb, 0xbe, 0x98, 0x83, 0x97,
7481 0xb4, 0xb2, 0xd1, 0xc0, 0x9b, 0x85, 0x77, 0x94,
7482 0xa8, 0xf0, 0xc4, 0x97, 0xb6, 0x80, 0x47, 0x85,
7483 0xa9, 0x8c, 0x99, 0xaa, 0x69, 0x23, 0x68, 0xf3,
7484 0xf8, 0xa3, 0x6a, 0x4c, 0x48, 0x83, 0x91, 0x48,
7485 0x64, 0x58, 0x34, 0x12, 0x16, 0x2b, 0x1f, 0x00,
7486 0x24, 0x12, 0x0e, 0x25, 0x38, 0x2f, 0x18, 0x07,
7487 0x4e, 0x7f, 0x6e, 0x55, 0x76, 0x7a, 0x58, 0x53,
7488 0x44, 0x32, 0x21, 0x37, 0x38, 0x6c, 0xb4, 0x7f,
7489 0x2e, 0x49, 0x48, 0x4c, 0x64, 0x59, 0x44, 0x51,
7490 0x35, 0x54, 0x20, 0x1b, 0x61, 0x41, 0x19, 0x63,
7491 0x3b, 0x21, 0x1d, 0x3a, 0x52, 0x53, 0x54, 0x5e,
7492 0x2c, 0x31, 0x38, 0x38, 0x2f, 0x2b, 0x38, 0x4a,
7493 0x2c, 0x52, 0x53, 0x29, 0x1e, 0x40, 0x4e, 0x3d,
7494 0x07, 0x48, 0x3b, 0x50, 0x6e, 0x80, 0x89, 0x34,
7495 0x6e, 0xfe, 0xd6, 0x6b, 0x27, 0x33, 0xb6, 0xff,
7496 0xff, 0xe7, 0xc9, 0x78, 0x20, 0x34, 0x66, 0x55,
7497 0x20, 0x37, 0x3a, 0x26, 0x22, 0x33, 0x36, 0x28,
7498 0x27, 0x2e, 0x31, 0x2f, 0x26, 0x23, 0x59, 0xa9,
7499 0x97, 0x59, 0x5b, 0x49, 0x2d, 0x60, 0x86, 0x75,
7500 0x73, 0x71, 0x73, 0x79, 0x7f, 0x7f, 0x77, 0x6f,
7501 0x92, 0x8e, 0x8b, 0x8a, 0x87, 0x7f, 0x71, 0x67,
7502 0x68, 0x6a, 0x6e, 0x72, 0x73, 0x71, 0x6f, 0x6d,
7503 0x6e, 0x61, 0x57, 0x5a, 0x65, 0x68, 0x5d, 0x50,
7504 0x60, 0x60, 0x62, 0x68, 0x6e, 0x6e, 0x68, 0x61,
7505 0x53, 0x4b, 0x3e, 0x30, 0x4f, 0x98, 0x9c, 0x57,
7506 0x18, 0x30, 0x47, 0x4c, 0x49, 0x59, 0x80, 0xa3,
7507 0x3b, 0x40, 0x58, 0x6d, 0x58, 0x2a, 0x19, 0x27,
7508 0x2a, 0x3d, 0x5a, 0x66, 0x4c, 0x25, 0x16, 0x20,
7509 0x31, 0x25, 0x1e, 0x27, 0x3b, 0x49, 0x49, 0x43,
7510 0x48, 0x34, 0x1a, 0x42, 0x9b, 0xa9, 0x5a, 0x14,
7511 0x3e, 0x70, 0x72, 0x55, 0x54, 0x4e, 0x38, 0x33,
7512 0x1f, 0x2f, 0x27, 0x1f, 0x23, 0x17, 0x1b, 0x40,
7513 0x32, 0x42, 0x33, 0x22, 0x24, 0x1b, 0x17, 0x2d,
7514 0x15, 0x42, 0x2d, 0x13, 0x33, 0x37, 0x20, 0x2a,
7515 0x2a, 0x4b, 0x4e, 0x35, 0x42, 0x69, 0x5d, 0x2b,
7516 0x2d, 0x19, 0x18, 0x2f, 0x3e, 0x33, 0x25, 0x22,
7517 0x1c, 0x1b, 0x3c, 0x36, 0x32, 0x37, 0x1d, 0x27,
7518 0x60, 0x8c, 0xb9, 0xc2, 0xae, 0x9e, 0xa9, 0xbc,
7519 0x86, 0x9a, 0xaf, 0xb4, 0xac, 0xa6, 0xaa, 0xb1,
7520 0xbe, 0xbf, 0xae, 0x95, 0xad, 0xb0, 0x90, 0xa5,
7521 0xad, 0x92, 0x90, 0xa8, 0x9a, 0xbf, 0xbe, 0x92,
7522 0x9b, 0x97, 0x85, 0x8d, 0x76, 0x96, 0x97, 0x95,
7523 0x89, 0x9c, 0xaa, 0xa4, 0xb1, 0xa3, 0x7f, 0x99,
7524 0xb0, 0x93, 0x95, 0x97, 0x91, 0x84, 0x68, 0x96,
7525 0xa0, 0x83, 0x92, 0xad, 0xb0, 0x80, 0x47, 0x4f,
7526 0x55, 0x93, 0xd4, 0xe3, 0xc4, 0xa7, 0xab, 0xbd,
7527 0xaf, 0xba, 0x77, 0x1c, 0x38, 0xa1, 0xa5, 0x52,
7528 0x6d, 0x4b, 0x60, 0x6f, 0x46, 0x39, 0x3a, 0x16,
7529 0x2a, 0x3f, 0x40, 0x32, 0x3e, 0x60, 0x68, 0x55,
7530 0x5f, 0x6d, 0x54, 0x47, 0x5c, 0x50, 0x37, 0x44,
7531 0x56, 0x79, 0x8c, 0x6c, 0x39, 0x2a, 0x4f, 0x7b,
7532 0x4b, 0x56, 0x63, 0x69, 0x60, 0x4a, 0x31, 0x20,
7533 0x33, 0x28, 0x5b, 0x2e, 0x13, 0x46, 0x48, 0x5f,
7534 0x43, 0x48, 0x24, 0x16, 0x42, 0x5c, 0x5d, 0x71,
7535 0x9b, 0x78, 0x51, 0x32, 0x24, 0x30, 0x3f, 0x3e,
7536 0x2f, 0x37, 0x3c, 0x37, 0x39, 0x52, 0x6c, 0x73,
7537 0x49, 0x42, 0x22, 0x26, 0x50, 0x4f, 0x3d, 0x4e,
7538 0x48, 0x52, 0x44, 0x1f, 0x0b, 0x17, 0x26, 0x29,
7539 0x3a, 0x83, 0x98, 0x2c, 0x12, 0xbf, 0xf3, 0x51,
7540 0xb7, 0xef, 0xff, 0xd4, 0x69, 0x23, 0x29, 0x4b,
7541 0x60, 0x32, 0x14, 0x1c, 0x23, 0x1f, 0x2f, 0x4c,
7542 0x45, 0x42, 0x5a, 0x45, 0x22, 0x26, 0x29, 0x2e,
7543 0x3f, 0x22, 0x34, 0x3b, 0x1d, 0x3b, 0x72, 0x6b,
7544 0x79, 0x73, 0x6e, 0x6f, 0x76, 0x7c, 0x7d, 0x7c,
7545 0x8b, 0x88, 0x83, 0x7f, 0x7b, 0x78, 0x78, 0x77,
7546 0x70, 0x72, 0x74, 0x73, 0x6f, 0x67, 0x5f, 0x5a,
7547 0x67, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
7548 0x64, 0x5f, 0x5b, 0x5d, 0x65, 0x6b, 0x6d, 0x6c,
7549 0x59, 0x31, 0x39, 0x81, 0x73, 0x31, 0x33, 0x37,
7550 0x20, 0x19, 0x31, 0x41, 0x36, 0x45, 0x5d, 0x56,
7551 0x36, 0x1e, 0x1b, 0x2f, 0x32, 0x1d, 0x15, 0x20,
7552 0x2c, 0x56, 0x55, 0x28, 0x21, 0x45, 0x46, 0x21,
7553 0x79, 0x8b, 0x73, 0x64, 0x78, 0x6a, 0x59, 0x74,
7554 0x25, 0x55, 0x6d, 0x59, 0x4b, 0x52, 0x46, 0x28,
7555 0x49, 0x51, 0x45, 0x7a, 0xcd, 0x9e, 0x2e, 0x0c,
7556 0x2a, 0x21, 0x2c, 0x27, 0x0e, 0x1c, 0x3f, 0x48,
7557 0x6c, 0x6d, 0x85, 0x75, 0x41, 0x3f, 0x46, 0x23,
7558 0xac, 0x80, 0x52, 0x46, 0x55, 0x5f, 0x54, 0x42,
7559 0x45, 0x1e, 0x42, 0x4f, 0x2a, 0x54, 0x69, 0x10,
7560 0x32, 0x18, 0x15, 0x31, 0x3f, 0x31, 0x28, 0x2f,
7561 0x23, 0x16, 0x20, 0x3d, 0x3f, 0x20, 0x0a, 0x0a,
7562 0x67, 0x6f, 0x84, 0xa5, 0xc3, 0xce, 0xc4, 0xb6,
7563 0xc0, 0xcf, 0xd4, 0xbe, 0x97, 0x7f, 0x82, 0x8f,
7564 0x95, 0x98, 0x8a, 0x9f, 0xa4, 0x82, 0x62, 0x39,
7565 0x5f, 0xae, 0xb0, 0xb9, 0xb7, 0x9c, 0x77, 0x8b,
7566 0xca, 0xd3, 0x98, 0x8b, 0xa0, 0xb9, 0x94, 0x97,
7567 0xae, 0x8f, 0x85, 0xb8, 0xa4, 0x78, 0x9a, 0xa0,
7568 0x8b, 0x60, 0xa9, 0xb1, 0xac, 0xbf, 0xab, 0xb9,
7569 0x70, 0x60, 0x88, 0x8e, 0x7b, 0x7b, 0x91, 0xd2,
7570 0xca, 0xb0, 0x86, 0x5e, 0x4a, 0x51, 0x6a, 0x80,
7571 0x72, 0x85, 0x6e, 0x3e, 0x44, 0x7a, 0x8b, 0x70,
7572 0x6c, 0x56, 0x4b, 0x34, 0x5f, 0xea, 0xeb, 0x45,
7573 0x12, 0x33, 0x4a, 0x42, 0x3a, 0x4b, 0x6b, 0x81,
7574 0x22, 0x4e, 0x4f, 0x55, 0x6d, 0x51, 0x69, 0xdb,
7575 0x77, 0x77, 0x52, 0x1a, 0x10, 0x32, 0x46, 0x3c,
7576 0x43, 0x39, 0x2a, 0x1d, 0x18, 0x1b, 0x23, 0x28,
7577 0x28, 0x51, 0x26, 0x26, 0x61, 0x46, 0x14, 0x1d,
7578 0x28, 0x2b, 0x54, 0x5a, 0x25, 0x19, 0x3d, 0x4c,
7579 0x23, 0x5e, 0xd8, 0xfb, 0x7d, 0x0f, 0x26, 0x65,
7580 0x85, 0x55, 0x29, 0x0c, 0x1a, 0x56, 0x59, 0x14,
7581 0x24, 0x64, 0x64, 0x29, 0x26, 0x5e, 0x7e, 0x7a,
7582 0x2b, 0x3b, 0x3b, 0x2b, 0x29, 0x39, 0x41, 0x39,
7583 0x31, 0x2c, 0x34, 0x22, 0x1f, 0x62, 0x6d, 0x17,
7584 0x92, 0x6c, 0x35, 0x13, 0x1d, 0x37, 0x38, 0x26,
7585 0x4b, 0x30, 0x34, 0x60, 0x81, 0x7b, 0x6d, 0x6b,
7586 0xa1, 0x69, 0x2a, 0x11, 0x34, 0x3b, 0x21, 0x3d,
7587 0x58, 0x74, 0x72, 0x6c, 0x5d, 0x50, 0x66, 0x7b,
7588 0x6b, 0x6b, 0x70, 0x78, 0x7e, 0x7e, 0x77, 0x6f,
7589 0x68, 0x63, 0x5c, 0x57, 0x58, 0x5f, 0x67, 0x6d,
7590 0x65, 0x68, 0x6d, 0x71, 0x71, 0x6e, 0x6b, 0x68,
7591 0x69, 0x69, 0x69, 0x68, 0x68, 0x68, 0x67, 0x67,
7592 0x63, 0x5d, 0x57, 0x57, 0x5b, 0x5f, 0x5e, 0x5c,
7593 0x3f, 0x3a, 0x4c, 0x4a, 0x2a, 0x1a, 0x2f, 0x52,
7594 0x63, 0x4c, 0x4b, 0x42, 0x26, 0x2c, 0x3f, 0x36,
7595 0x4f, 0x41, 0x2d, 0x23, 0x2a, 0x34, 0x2f, 0x23,
7596 0x56, 0x53, 0x46, 0x43, 0x63, 0x92, 0xa7, 0xa2,
7597 0x9a, 0x65, 0x3c, 0x2b, 0x1e, 0x21, 0x39, 0x4e,
7598 0x9d, 0x7f, 0x54, 0x2f, 0x1a, 0x1d, 0x32, 0x48,
7599 0x43, 0x4b, 0x46, 0x5b, 0x96, 0xaf, 0x86, 0x57,
7600 0x18, 0x13, 0x2a, 0x34, 0x23, 0x27, 0x34, 0x29,
7601 0x4c, 0x45, 0x38, 0x22, 0x19, 0x2c, 0x35, 0x25,
7602 0x30, 0x69, 0x74, 0x45, 0x39, 0x62, 0x6d, 0x4f,
7603 0x17, 0x09, 0x17, 0x2b, 0x35, 0x52, 0x5c, 0x3e,
7604 0x27, 0x36, 0x50, 0x60, 0x54, 0x37, 0x26, 0x26,
7605 0x3f, 0x27, 0x18, 0x1f, 0x29, 0x23, 0x16, 0x0e,
7606 0x95, 0x9b, 0xa5, 0xb0, 0xb3, 0xac, 0x9d, 0x91,
7607 0x8a, 0x97, 0x9b, 0x8b, 0x74, 0x73, 0x8e, 0xab,
7608 0xa4, 0xbb, 0x91, 0x6a, 0x66, 0x7c, 0xa2, 0xa4,
7609 0xc5, 0xb5, 0x8d, 0x85, 0x52, 0x60, 0x93, 0x9e,
7610 0xa2, 0x93, 0x89, 0xb3, 0xc9, 0xca, 0xac, 0xab,
7611 0xc3, 0xa6, 0x9d, 0x96, 0x91, 0xa2, 0xb5, 0xc0,
7612 0xa5, 0x89, 0xa9, 0xaf, 0xd4, 0x8a, 0x52, 0x6c,
7613 0x7d, 0x56, 0xaa, 0xb4, 0x69, 0x53, 0x45, 0x46,
7614 0x5b, 0x2e, 0x01, 0x01, 0x29, 0x51, 0x5f, 0x5b,
7615 0x92, 0x9d, 0x86, 0x43, 0x0a, 0x16, 0x61, 0xa6,
7616 0x7d, 0x38, 0x56, 0xa3, 0xb0, 0xab, 0x95, 0x59,
7617 0xc1, 0x90, 0x60, 0x52, 0x52, 0x4a, 0x3d, 0x36,
7618 0x2f, 0x55, 0x33, 0x40, 0xb9, 0xce, 0x4f, 0x00,
7619 0x26, 0x4b, 0x48, 0x1a, 0x16, 0x41, 0x50, 0x38,
7620 0x40, 0x38, 0x2d, 0x25, 0x25, 0x2d, 0x38, 0x3f,
7621 0x3a, 0x6b, 0x54, 0x64, 0x4f, 0x36, 0x4f, 0x02,
7622 0x29, 0x1f, 0x22, 0x40, 0x9d, 0xfe, 0xb5, 0x00,
7623 0x46, 0xae, 0xff, 0xff, 0x81, 0x74, 0x83, 0x3c,
7624 0x00, 0x2a, 0xa8, 0xfd, 0xbd, 0x54, 0x31, 0x36,
7625 0x39, 0x39, 0x3d, 0x2d, 0x14, 0x1b, 0x30, 0x30,
7626 0x48, 0x58, 0x5e, 0x5b, 0x66, 0x78, 0x74, 0x60,
7627 0x41, 0x25, 0x23, 0x38, 0x3a, 0x32, 0x38, 0x43,
7628 0x30, 0x16, 0x10, 0x1c, 0x13, 0x01, 0x15, 0x3f,
7629 0x49, 0x20, 0x0f, 0x33, 0x60, 0x67, 0x50, 0x3c,
7630 0x3d, 0x5c, 0x94, 0x8d, 0x5c, 0x3a, 0x28, 0x39,
7631 0x3d, 0x31, 0x19, 0x2f, 0x40, 0x54, 0x7f, 0x71,
7632 0x78, 0x74, 0x72, 0x75, 0x7d, 0x82, 0x81, 0x7f,
7633 0x79, 0x7b, 0x7f, 0x82, 0x83, 0x81, 0x7e, 0x7c,
7634 0x72, 0x74, 0x78, 0x7b, 0x7b, 0x7a, 0x78, 0x76,
7635 0x77, 0x76, 0x74, 0x72, 0x70, 0x6e, 0x6c, 0x6b,
7636 0x71, 0x6a, 0x62, 0x5f, 0x61, 0x62, 0x60, 0x5d,
7637 0x50, 0x37, 0x38, 0x31, 0x4a, 0x5a, 0x2f, 0x2a,
7638 0x16, 0x3c, 0x7a, 0x7f, 0x43, 0x2a, 0x3e, 0x45,
7639 0x49, 0x70, 0x85, 0x79, 0x73, 0x7a, 0x6a, 0x4b,
7640 0x7c, 0x5d, 0x4f, 0x67, 0x80, 0x79, 0x60, 0x4e,
7641 0x4a, 0x21, 0x43, 0x73, 0x69, 0x65, 0x62, 0x3c,
7642 0x31, 0x2c, 0x25, 0x1c, 0x18, 0x25, 0x43, 0x5f,
7643 0x28, 0x28, 0x35, 0x42, 0x53, 0x73, 0x72, 0x4a,
7644 0x6c, 0x3f, 0x3a, 0x5f, 0x82, 0x94, 0x75, 0x35,
7645 0x1d, 0x6e, 0x52, 0x1d, 0x32, 0x1b, 0x04, 0x40,
7646 0x16, 0x2e, 0x41, 0x43, 0x43, 0x44, 0x38, 0x27,
7647 0x2d, 0x1a, 0x0f, 0x36, 0x5f, 0x50, 0x4c, 0x7a,
7648 0x4c, 0x39, 0x2d, 0x47, 0x7e, 0xa0, 0x88, 0x5c,
7649 0x33, 0x2c, 0x22, 0x23, 0x35, 0x40, 0x2f, 0x13,
7650 0x75, 0x9c, 0xb8, 0x9e, 0x62, 0x3b, 0x45, 0x61,
7651 0x88, 0x82, 0x79, 0x72, 0x76, 0x8a, 0xa6, 0xba,
7652 0x97, 0x55, 0x61, 0x9a, 0xba, 0xaf, 0xa5, 0xd1,
7653 0xb5, 0xad, 0x89, 0xb4, 0xbc, 0xb9, 0xbc, 0xb6,
7654 0xa5, 0xaf, 0xc5, 0xc9, 0xbb, 0xd6, 0xcf, 0x9a,
7655 0x7c, 0x9b, 0x8e, 0x6b, 0xa2, 0xb2, 0x62, 0x53,
7656 0x94, 0x89, 0x98, 0xa4, 0xa0, 0x4d, 0xa3, 0xc1,
7657 0xaf, 0x94, 0xb1, 0x83, 0x6f, 0xb1, 0xb6, 0xad,
7658 0x61, 0x46, 0x36, 0x4d, 0x7a, 0x92, 0x83, 0x69,
7659 0x50, 0x34, 0x23, 0x43, 0x7e, 0x8d, 0x4e, 0x02,
7660 0x21, 0x53, 0x8d, 0xb3, 0xb6, 0x9f, 0x9a, 0xb0,
7661 0x30, 0x20, 0x28, 0x43, 0x43, 0x29, 0x25, 0x38,
7662 0x34, 0x38, 0x64, 0xb2, 0xcf, 0x94, 0x4e, 0x3b,
7663 0x4b, 0x60, 0x5e, 0x42, 0x33, 0x38, 0x31, 0x1c,
7664 0x10, 0x1b, 0x2b, 0x39, 0x3d, 0x37, 0x2d, 0x25,
7665 0x39, 0x38, 0x48, 0x78, 0x96, 0xe0, 0xe4, 0x36,
7666 0x0b, 0x21, 0x1f, 0x49, 0xba, 0xff, 0xf9, 0xed,
7667 0x8d, 0x5c, 0x7f, 0x75, 0x13, 0x1b, 0x4d, 0x20,
7668 0x74, 0xd8, 0xed, 0x8b, 0x24, 0x07, 0x33, 0x71,
7669 0x86, 0x3c, 0x31, 0x4d, 0x2e, 0x08, 0x1c, 0x40,
7670 0x27, 0x2f, 0x2b, 0x23, 0x2d, 0x40, 0x3b, 0x26,
7671 0x20, 0x38, 0x34, 0x19, 0x07, 0x06, 0x31, 0x71,
7672 0x70, 0x4e, 0x2e, 0x27, 0x30, 0x3a, 0x40, 0x45,
7673 0x4d, 0x57, 0x5d, 0x52, 0x3d, 0x38, 0x53, 0x73,
7674 0x46, 0x5b, 0xae, 0xbc, 0x71, 0x32, 0x1d, 0x2d,
7675 0x46, 0x35, 0x1f, 0x38, 0x3c, 0x50, 0x86, 0x6f,
7676 0x79, 0x73, 0x6d, 0x6e, 0x76, 0x7e, 0x82, 0x83,
7677 0x7b, 0x80, 0x86, 0x87, 0x81, 0x74, 0x66, 0x5c,
7678 0x63, 0x65, 0x68, 0x6c, 0x6f, 0x71, 0x73, 0x73,
7679 0x6d, 0x6b, 0x69, 0x65, 0x62, 0x5e, 0x5b, 0x5a,
7680 0x6a, 0x63, 0x5b, 0x58, 0x59, 0x5a, 0x58, 0x55,
7681 0x4d, 0x38, 0x37, 0x50, 0x79, 0x66, 0x22, 0x18,
7682 0x25, 0x18, 0x32, 0x53, 0x5c, 0x6e, 0x72, 0x56,
7683 0x67, 0x83, 0x85, 0x57, 0x27, 0x1b, 0x26, 0x30,
7684 0x67, 0x44, 0x27, 0x2a, 0x36, 0x35, 0x2e, 0x2a,
7685 0x3b, 0x20, 0x1c, 0x22, 0x29, 0x4a, 0x56, 0x34,
7686 0x1b, 0x4a, 0x60, 0x53, 0x62, 0xa2, 0xda, 0xec,
7687 0xd5, 0xae, 0x86, 0x6b, 0x51, 0x42, 0x55, 0x75,
7688 0x5e, 0x48, 0x51, 0x61, 0x63, 0x75, 0x80, 0x6d,
7689 0x49, 0x59, 0x37, 0x1d, 0x3a, 0x41, 0x2a, 0x28,
7690 0x1f, 0x20, 0x2f, 0x46, 0x4b, 0x3d, 0x32, 0x32,
7691 0x22, 0x41, 0x31, 0x11, 0x24, 0x41, 0x3e, 0x33,
7692 0x2f, 0x45, 0x45, 0x2e, 0x2b, 0x47, 0x5b, 0x59,
7693 0x29, 0x38, 0x37, 0x28, 0x2b, 0x33, 0x1e, 0x00,
7694 0xb5, 0xad, 0xa8, 0xad, 0xb5, 0xb3, 0xa6, 0x98,
7695 0x95, 0x94, 0x9c, 0xaa, 0xad, 0x91, 0x5e, 0x33,
7696 0x55, 0x53, 0x7e, 0x84, 0x8a, 0xb2, 0xa4, 0x79,
7697 0x53, 0xd5, 0xe3, 0xb8, 0x8f, 0xa4, 0xd1, 0xff,
7698 0xcb, 0xbb, 0xb9, 0xaf, 0x9f, 0x92, 0x90, 0x86,
7699 0x89, 0xda, 0xc6, 0xbb, 0xd9, 0xd2, 0xcb, 0xc2,
7700 0x6b, 0x86, 0x8c, 0x7b, 0x78, 0x3a, 0x7b, 0x54,
7701 0x33, 0x6c, 0xa8, 0xab, 0xc4, 0xab, 0x4d, 0x49,
7702 0x24, 0x56, 0xa4, 0xe5, 0xf4, 0xc7, 0x78, 0x3c,
7703 0x36, 0x2f, 0x20, 0x37, 0x8f, 0xdc, 0xc3, 0x78,
7704 0x6d, 0xb0, 0x68, 0x06, 0x19, 0x22, 0x17, 0x44,
7705 0x1b, 0x21, 0x4c, 0x86, 0x8d, 0x5c, 0x2f, 0x22,
7706 0x44, 0xa0, 0xe4, 0x9d, 0x48, 0x97, 0xff, 0xff,
7707 0xa2, 0x5b, 0x26, 0x2e, 0x45, 0x3f, 0x28, 0x1c,
7708 0x1f, 0x21, 0x25, 0x2a, 0x30, 0x35, 0x3a, 0x3c,
7709 0x3f, 0x4d, 0x5a, 0x25, 0x23, 0x47, 0x36, 0x45,
7710 0x2b, 0x43, 0x33, 0x1e, 0x29, 0x47, 0x98, 0xff,
7711 0xa5, 0x19, 0x0d, 0x3c, 0x25, 0x45, 0x7d, 0x5e,
7712 0x38, 0x52, 0x60, 0xb6, 0xff, 0xc4, 0x5c, 0x73,
7713 0xc5, 0x67, 0x2e, 0x3c, 0x48, 0x38, 0x29, 0x25,
7714 0x34, 0x39, 0x2e, 0x1c, 0x22, 0x3d, 0x49, 0x42,
7715 0x31, 0x5b, 0x55, 0x21, 0x04, 0x12, 0x41, 0x77,
7716 0x69, 0x66, 0x3a, 0x0e, 0x31, 0x78, 0x72, 0x33,
7717 0x22, 0x2d, 0x33, 0x2f, 0x2c, 0x33, 0x3d, 0x42,
7718 0x51, 0xb0, 0xbb, 0x4f, 0x2b, 0x53, 0x55, 0x56,
7719 0x71, 0x69, 0x34, 0x31, 0x4c, 0x58, 0x71, 0x78,
7720 0x74, 0x75, 0x79, 0x82, 0x8b, 0x8d, 0x87, 0x81,
7721 0x81, 0x7d, 0x77, 0x6e, 0x65, 0x5c, 0x56, 0x52,
7722 0x62, 0x63, 0x66, 0x6b, 0x71, 0x77, 0x7c, 0x7f,
7723 0x70, 0x6e, 0x6b, 0x68, 0x64, 0x61, 0x5e, 0x5d,
7724 0x69, 0x62, 0x5a, 0x58, 0x5b, 0x5d, 0x5c, 0x59,
7725 0x47, 0x46, 0x31, 0x4a, 0x5b, 0x34, 0x21, 0x29,
7726 0x22, 0x14, 0x2b, 0x48, 0x4d, 0x5a, 0x5c, 0x3e,
7727 0x4d, 0x45, 0x40, 0x3a, 0x27, 0x1b, 0x32, 0x56,
7728 0x2e, 0x31, 0x29, 0x1d, 0x22, 0x36, 0x43, 0x42,
7729 0x48, 0x6f, 0x5b, 0x38, 0x56, 0x77, 0x64, 0x47,
7730 0xbd, 0xcc, 0xb8, 0x87, 0x75, 0x84, 0x7e, 0x62,
7731 0xa6, 0xb8, 0x9d, 0x81, 0x74, 0x41, 0x2f, 0x66,
7732 0x3a, 0x13, 0x11, 0x2e, 0x46, 0x59, 0x48, 0x17,
7733 0x17, 0x20, 0x8a, 0xad, 0x5d, 0x6c, 0x96, 0x58,
7734 0x00, 0x45, 0x63, 0x39, 0x26, 0x51, 0x77, 0x76,
7735 0x40, 0x24, 0x28, 0x33, 0x1d, 0x0f, 0x19, 0x1e,
7736 0x18, 0x2c, 0x31, 0x27, 0x2f, 0x44, 0x42, 0x2b,
7737 0x56, 0x6d, 0x70, 0x56, 0x42, 0x3a, 0x21, 0x00,
7738 0x50, 0x79, 0x9b, 0x90, 0x6a, 0x5e, 0x7f, 0xa7,
7739 0xcb, 0xb1, 0x93, 0x89, 0x92, 0x9e, 0x9e, 0x99,
7740 0x66, 0x89, 0x70, 0x68, 0x7c, 0x76, 0x5f, 0x39,
7741 0x23, 0x23, 0x3e, 0x5f, 0x5b, 0x85, 0x71, 0x33,
7742 0x10, 0x6a, 0xce, 0xb4, 0x77, 0x71, 0xb4, 0xcb,
7743 0xbf, 0x87, 0x97, 0xbf, 0x83, 0x45, 0x74, 0xb5,
7744 0xbe, 0x95, 0x52, 0x17, 0x4a, 0x42, 0x3d, 0x32,
7745 0x98, 0x76, 0x58, 0x36, 0x2b, 0x35, 0x38, 0x43,
7746 0x63, 0x5c, 0x4d, 0x40, 0x4b, 0x78, 0xbb, 0xed,
7747 0xc4, 0xfa, 0xf2, 0x90, 0x36, 0x24, 0x31, 0x32,
7748 0x13, 0x5b, 0x78, 0xb3, 0xed, 0x86, 0x20, 0x54,
7749 0x41, 0x22, 0x1b, 0x40, 0x64, 0x59, 0x26, 0x00,
7750 0x26, 0x62, 0xb6, 0x95, 0x14, 0x0d, 0x91, 0xf9,
7751 0x64, 0x27, 0x12, 0x39, 0x49, 0x29, 0x1a, 0x2e,
7752 0x5a, 0x43, 0x23, 0x0e, 0x12, 0x2e, 0x55, 0x6f,
7753 0x98, 0x3a, 0x68, 0x66, 0x41, 0x3e, 0x16, 0x27,
7754 0x16, 0x21, 0x3e, 0x38, 0x1c, 0x2e, 0x3b, 0x16,
7755 0x3b, 0x21, 0x19, 0x00, 0x1b, 0xaf, 0xeb, 0x82,
7756 0x73, 0xa5, 0x6f, 0x54, 0xc6, 0xff, 0xb7, 0x76,
7757 0x31, 0x2b, 0x3e, 0x7b, 0x82, 0x26, 0x00, 0x35,
7758 0x26, 0x38, 0x37, 0x22, 0x20, 0x3f, 0x5e, 0x6a,
7759 0x47, 0x47, 0x42, 0x2e, 0x1a, 0x24, 0x3c, 0x46,
7760 0x1e, 0x1d, 0x25, 0x2d, 0x28, 0x29, 0x4c, 0x78,
7761 0x5d, 0x53, 0x3b, 0x25, 0x2c, 0x44, 0x4a, 0x3d,
7762 0x58, 0x5d, 0x6e, 0x59, 0x40, 0x37, 0x3e, 0x6b,
7763 0x55, 0x2e, 0x28, 0x2c, 0x32, 0x5c, 0x7e, 0x7c,
7764 0x73, 0x71, 0x72, 0x79, 0x82, 0x87, 0x86, 0x83,
7765 0x8e, 0x8d, 0x8a, 0x85, 0x80, 0x7a, 0x75, 0x72,
7766 0x8a, 0x87, 0x82, 0x7d, 0x7a, 0x79, 0x7a, 0x7b,
7767 0x7f, 0x7e, 0x7c, 0x7a, 0x78, 0x75, 0x74, 0x73,
7768 0x73, 0x6c, 0x65, 0x62, 0x65, 0x67, 0x65, 0x62,
7769 0x53, 0x56, 0x2b, 0x2d, 0x39, 0x32, 0x40, 0x31,
7770 0x20, 0x48, 0x8b, 0x97, 0x62, 0x50, 0x69, 0x73,
7771 0x52, 0x35, 0x30, 0x4a, 0x4f, 0x32, 0x1f, 0x24,
7772 0x1d, 0x34, 0x42, 0x3d, 0x3b, 0x44, 0x46, 0x3e,
7773 0x1b, 0x72, 0x82, 0x6e, 0x87, 0x7b, 0x3d, 0x1f,
7774 0x34, 0x2c, 0x36, 0x5d, 0x7e, 0x73, 0x40, 0x12,
7775 0x53, 0x8e, 0x6c, 0x31, 0x3b, 0x3c, 0x45, 0x81,
7776 0x3a, 0x26, 0x22, 0x1a, 0x13, 0x4c, 0xa6, 0xd3,
7777 0xa4, 0x7b, 0x4e, 0x22, 0x11, 0x36, 0x57, 0x4c,
7778 0x2d, 0x40, 0x39, 0x17, 0x12, 0x34, 0x52, 0x56,
7779 0x48, 0x35, 0x4d, 0x63, 0x47, 0x33, 0x3c, 0x3f,
7780 0x05, 0x16, 0x23, 0x26, 0x2a, 0x2f, 0x29, 0x1d,
7781 0x3a, 0x55, 0x71, 0x7d, 0x78, 0x5d, 0x2d, 0x03,
7782 0xd9, 0xae, 0x8b, 0x94, 0xb8, 0xc4, 0xa5, 0x7f,
7783 0x6b, 0x8f, 0xba, 0xd0, 0xcc, 0xbf, 0xb7, 0xb7,
7784 0xba, 0xdb, 0xca, 0xcd, 0xd1, 0xb1, 0xb3, 0xc8,
7785 0xbe, 0x6d, 0x85, 0xb7, 0x7e, 0x44, 0x13, 0x2d,
7786 0x39, 0x22, 0x3a, 0x33, 0x25, 0x1d, 0x68, 0x9a,
7787 0x46, 0x1e, 0x56, 0x5f, 0x48, 0x69, 0x5e, 0x39,
7788 0x64, 0x31, 0x45, 0x5c, 0x59, 0x4d, 0x44, 0x32,
7789 0x34, 0x35, 0x3f, 0x40, 0x3f, 0x83, 0xa2, 0x45,
7790 0x8a, 0x70, 0x45, 0x1f, 0x1c, 0x49, 0x94, 0xcd,
7791 0xc6, 0x9e, 0x62, 0x30, 0x1b, 0x23, 0x35, 0x41,
7792 0x80, 0x95, 0xa5, 0xb9, 0xb5, 0x77, 0x47, 0x54,
7793 0x43, 0x40, 0x2f, 0x19, 0x14, 0x1d, 0x1e, 0x15,
7794 0x9f, 0xe3, 0xcd, 0xa1, 0xdd, 0xff, 0xdc, 0x95,
7795 0x25, 0x23, 0x38, 0x4f, 0x39, 0x08, 0x00, 0x17,
7796 0x44, 0x39, 0x2a, 0x20, 0x21, 0x2d, 0x3e, 0x4a,
7797 0x47, 0x18, 0x78, 0x82, 0x0c, 0x4d, 0xf2, 0xff,
7798 0x98, 0xb6, 0xfb, 0xf8, 0x84, 0x23, 0x0f, 0x0f,
7799 0x1e, 0x37, 0x42, 0x1c, 0x17, 0x78, 0xbe, 0xa4,
7800 0x50, 0x4f, 0x3a, 0x10, 0x00, 0x18, 0x28, 0x17,
7801 0x34, 0x1b, 0x10, 0x94, 0xff, 0xcd, 0x2a, 0x1b,
7802 0x29, 0x4f, 0x60, 0x48, 0x34, 0x43, 0x64, 0x78,
7803 0x61, 0x50, 0x5d, 0x53, 0x3c, 0x6a, 0x99, 0x80,
7804 0x7f, 0x3a, 0x1f, 0x40, 0x47, 0x30, 0x4d, 0x8f,
7805 0x5b, 0x75, 0x6e, 0x3b, 0x18, 0x28, 0x4b, 0x5e,
7806 0x8b, 0x3b, 0x39, 0x58, 0x6a, 0x73, 0x4f, 0x28,
7807 0x39, 0x2b, 0xa1, 0xa9, 0x4b, 0x5b, 0x81, 0x7a,
7808 0x68, 0x61, 0x5c, 0x5e, 0x68, 0x72, 0x78, 0x7a,
7809 0x81, 0x83, 0x85, 0x85, 0x82, 0x7d, 0x78, 0x74,
7810 0x8d, 0x88, 0x7f, 0x75, 0x6e, 0x6b, 0x6b, 0x6b,
7811 0x74, 0x74, 0x74, 0x74, 0x73, 0x73, 0x73, 0x73,
7812 0x74, 0x6c, 0x63, 0x5e, 0x5e, 0x5d, 0x59, 0x55,
7813 0x4e, 0x50, 0x43, 0x33, 0x31, 0x49, 0x56, 0x3f,
7814 0x2f, 0x1d, 0x25, 0x29, 0x1a, 0x2c, 0x49, 0x45,
7815 0x23, 0x26, 0x2d, 0x30, 0x29, 0x1d, 0x1c, 0x23,
7816 0x3d, 0x23, 0x17, 0x26, 0x3a, 0x48, 0x5e, 0x76,
7817 0x66, 0x72, 0x6f, 0x5b, 0x40, 0x26, 0x27, 0x3d,
7818 0x48, 0x3d, 0x3e, 0x56, 0x69, 0x5e, 0x36, 0x13,
7819 0x25, 0x5a, 0x58, 0x32, 0x28, 0x24, 0x2a, 0x47,
7820 0x4e, 0x2b, 0x1f, 0x1d, 0x14, 0x24, 0x30, 0x1e,
7821 0x4d, 0x79, 0x3b, 0x00, 0x17, 0x2e, 0x4b, 0x9e,
7822 0x6f, 0x36, 0x07, 0x07, 0x18, 0x1b, 0x16, 0x15,
7823 0x6d, 0xfa, 0xff, 0xa7, 0xaa, 0xf6, 0xe1, 0x8a,
7824 0x27, 0x12, 0x21, 0x6d, 0xc1, 0xdc, 0xbb, 0x93,
7825 0x35, 0x23, 0x25, 0x48, 0x61, 0x4d, 0x17, 0x00,
7826 0x67, 0x87, 0x99, 0x7f, 0x4e, 0x3a, 0x55, 0x7a,
7827 0x6b, 0x82, 0x87, 0x5e, 0x27, 0x1a, 0x46, 0x79,
7828 0x5b, 0x18, 0x44, 0x6e, 0x6d, 0x98, 0xa7, 0x83,
7829 0x34, 0x26, 0x6e, 0x6d, 0x26, 0x3b, 0x31, 0x3e,
7830 0x6d, 0x50, 0x28, 0x1e, 0x61, 0x3b, 0x30, 0x58,
7831 0x50, 0x43, 0x30, 0x40, 0x42, 0x37, 0x3e, 0x2f,
7832 0x3c, 0x47, 0x29, 0x3b, 0x42, 0x3f, 0x53, 0x60,
7833 0x60, 0x56, 0x28, 0x35, 0x3e, 0x31, 0x3f, 0x27,
7834 0x3b, 0x37, 0x30, 0x28, 0x25, 0x28, 0x30, 0x37,
7835 0x0f, 0x03, 0x3d, 0xb4, 0xf4, 0xcb, 0x85, 0x64,
7836 0x91, 0x35, 0x16, 0x21, 0x15, 0x2a, 0x4c, 0x40,
7837 0x3c, 0x3c, 0x31, 0x33, 0x58, 0x77, 0x56, 0x1b,
7838 0x62, 0xb9, 0x64, 0x12, 0x5b, 0x57, 0x17, 0x3e,
7839 0x19, 0x0e, 0x0a, 0x17, 0x2d, 0x3a, 0x3d, 0x3c,
7840 0x2d, 0x49, 0x70, 0x8c, 0x8a, 0x6d, 0x44, 0x27,
7841 0x03, 0xaa, 0xff, 0xff, 0xb7, 0xae, 0xed, 0xa8,
7842 0x75, 0xa3, 0x73, 0x17, 0x0e, 0x2d, 0x34, 0x34,
7843 0x69, 0x43, 0x1f, 0x19, 0x3a, 0x63, 0x5a, 0x2e,
7844 0x30, 0x45, 0x85, 0x80, 0x70, 0xe1, 0xff, 0x8b,
7845 0x5d, 0xe4, 0xdf, 0xb8, 0xdc, 0x8e, 0x16, 0x21,
7846 0x3d, 0x71, 0x8e, 0x71, 0x47, 0x42, 0x58, 0x6b,
7847 0x2c, 0x39, 0x5a, 0x33, 0x0b, 0x78, 0xdd, 0xb8,
7848 0xac, 0xc1, 0xb3, 0x8d, 0x8b, 0x9a, 0x74, 0x31,
7849 0x48, 0x30, 0x15, 0x24, 0x67, 0x92, 0x61, 0x0e,
7850 0x24, 0x1f, 0x23, 0x1f, 0x2e, 0x30, 0x21, 0x3e,
7851 0x57, 0x62, 0xe5, 0xd5, 0x6e, 0x61, 0x57, 0x66,
7852 0x6e, 0x6f, 0x72, 0x7b, 0x85, 0x89, 0x87, 0x82,
7853 0x92, 0x8b, 0x80, 0x77, 0x74, 0x77, 0x7d, 0x82,
7854 0x75, 0x73, 0x71, 0x71, 0x74, 0x7b, 0x83, 0x88,
7855 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7a,
7856 0x84, 0x7b, 0x70, 0x68, 0x65, 0x62, 0x5c, 0x57,
7857 0x56, 0x34, 0x3a, 0x2d, 0x37, 0x65, 0x5a, 0x3d,
7858 0x2d, 0x21, 0x2f, 0x31, 0x18, 0x1b, 0x28, 0x1b,
7859 0x56, 0xab, 0xe8, 0xca, 0x84, 0x56, 0x45, 0x3e,
7860 0x57, 0x1d, 0x13, 0x4c, 0x6c, 0x57, 0x4f, 0x65,
7861 0x1a, 0x0e, 0x59, 0x9b, 0x66, 0x28, 0x30, 0x45,
7862 0x39, 0x60, 0x6c, 0x51, 0x45, 0x56, 0x55, 0x3e,
7863 0x32, 0x2b, 0x39, 0x40, 0x2b, 0x2b, 0x59, 0x87,
7864 0x91, 0x62, 0x3f, 0x21, 0x07, 0x19, 0x3a, 0x3c,
7865 0x1b, 0x17, 0x1d, 0x15, 0x0f, 0x39, 0x62, 0x5d,
7866 0x4e, 0x5b, 0x43, 0x14, 0x13, 0x3b, 0x44, 0x2a,
7867 0x74, 0xe4, 0xe0, 0xb5, 0xd7, 0xc4, 0x8b, 0x98,
7868 0x0f, 0x48, 0xaf, 0xff, 0xff, 0xff, 0xe9, 0xed,
7869 0xca, 0x68, 0x15, 0x15, 0x38, 0x3b, 0x21, 0x0c,
7870 0x4c, 0x32, 0x13, 0x31, 0x64, 0x51, 0x3e, 0x66,
7871 0x5f, 0x27, 0x00, 0x24, 0x71, 0x95, 0x6f, 0x36,
7872 0x1f, 0x31, 0x67, 0x9f, 0x93, 0x4a, 0x0f, 0x00,
7873 0x00, 0x3c, 0x60, 0x61, 0x80, 0xb5, 0xb1, 0x82,
7874 0x68, 0xc6, 0x4e, 0x28, 0x63, 0x40, 0x49, 0x68,
7875 0x45, 0x64, 0x4e, 0x3b, 0x52, 0x49, 0x3f, 0x67,
7876 0x7e, 0x5f, 0x3f, 0x3b, 0x52, 0x70, 0x80, 0x84,
7877 0x3a, 0x40, 0x17, 0x0e, 0x2e, 0x11, 0x00, 0x2b,
7878 0x38, 0x36, 0x31, 0x35, 0x46, 0x4e, 0x3b, 0x1f,
7879 0x03, 0x54, 0x84, 0xca, 0xbd, 0x58, 0x39, 0x33,
7880 0x17, 0x42, 0x6c, 0x6f, 0x53, 0x3d, 0x44, 0x56,
7881 0x48, 0x65, 0x2e, 0x2c, 0x8e, 0x8c, 0x55, 0x73,
7882 0x29, 0x3e, 0x3f, 0x44, 0x53, 0x42, 0x25, 0x24,
7883 0x36, 0x1d, 0x39, 0x3c, 0x17, 0x41, 0x7e, 0x6f,
7884 0x41, 0x73, 0x93, 0x6e, 0x28, 0x0f, 0x40, 0x7e,
7885 0x78, 0x49, 0x92, 0xf7, 0xd8, 0x89, 0x62, 0x4a,
7886 0x38, 0x69, 0x6a, 0x2c, 0x0b, 0x20, 0x25, 0x0b,
7887 0x5a, 0x5e, 0x64, 0x68, 0x64, 0x55, 0x40, 0x31,
7888 0x38, 0x2e, 0x73, 0xfc, 0xfb, 0xfc, 0xff, 0x9a,
7889 0xa1, 0x94, 0x5a, 0x40, 0x83, 0xc2, 0x9b, 0x51,
7890 0x30, 0x2b, 0x24, 0x1f, 0x1f, 0x24, 0x2b, 0x30,
7891 0x4e, 0x0b, 0x0d, 0x33, 0x2d, 0x2c, 0x38, 0x2b,
7892 0xb9, 0x84, 0x4b, 0x3a, 0x4a, 0x55, 0x44, 0x2b,
7893 0x31, 0x1a, 0x1f, 0x4b, 0x67, 0x55, 0x33, 0x21,
7894 0x75, 0x79, 0x5d, 0x3e, 0x37, 0x2b, 0x23, 0x2f,
7895 0x35, 0x3a, 0x35, 0x0e, 0x31, 0x6e, 0x66, 0x6b,
7896 0x5c, 0x64, 0x6f, 0x75, 0x76, 0x74, 0x72, 0x71,
7897 0x8c, 0x8d, 0x84, 0x75, 0x72, 0x77, 0x74, 0x6a,
7898 0x6a, 0x73, 0x7f, 0x8a, 0x8f, 0x8c, 0x85, 0x80,
7899 0x76, 0x7b, 0x7e, 0x78, 0x6c, 0x66, 0x69, 0x6e,
7900 0x72, 0x6d, 0x66, 0x60, 0x5e, 0x5f, 0x62, 0x65,
7901 0x47, 0x3a, 0x39, 0x39, 0x2c, 0x27, 0x36, 0x43,
7902 0x3b, 0x49, 0x35, 0x29, 0x75, 0xd9, 0xce, 0x7b,
7903 0xae, 0x8f, 0x77, 0x6c, 0x54, 0x3a, 0x41, 0x5e,
7904 0x55, 0x78, 0x9f, 0x93, 0x6a, 0x5c, 0x45, 0x14,
7905 0x60, 0x7f, 0x80, 0x77, 0x72, 0x52, 0x46, 0x6b,
7906 0x94, 0x76, 0x4f, 0x39, 0x37, 0x3e, 0x42, 0x41,
7907 0x2e, 0x41, 0x53, 0x4c, 0x2b, 0x11, 0x1b, 0x35,
7908 0x0f, 0x36, 0x41, 0x22, 0x11, 0x24, 0x2f, 0x24,
7909 0x1c, 0x39, 0x30, 0x21, 0x2a, 0x1e, 0x19, 0x39,
7910 0x68, 0x4a, 0x29, 0x24, 0x23, 0x1b, 0x49, 0x9e,
7911 0xf1, 0xef, 0xd7, 0xd4, 0xd3, 0xd1, 0xe5, 0xe4,
7912 0xaf, 0xb3, 0xd1, 0xf0, 0xe9, 0xd7, 0xf7, 0xff,
7913 0xf0, 0xcb, 0xd9, 0xb1, 0x6b, 0x28, 0x00, 0x18,
7914 0x6d, 0x96, 0xb8, 0xe5, 0xfc, 0xa8, 0x34, 0x0b,
7915 0x37, 0x3f, 0x4b, 0x5a, 0x6a, 0x79, 0x85, 0x8d,
7916 0x35, 0x42, 0x49, 0x5b, 0x93, 0xc7, 0xba, 0x89,
7917 0x7a, 0x3c, 0x19, 0x3e, 0x6d, 0x68, 0x3b, 0x16,
7918 0x33, 0x66, 0x54, 0x56, 0x5d, 0x40, 0x45, 0x53,
7919 0xae, 0x71, 0x65, 0x67, 0x50, 0x58, 0x54, 0x1c,
7920 0x2c, 0x2e, 0x37, 0x47, 0x53, 0x51, 0x40, 0x30,
7921 0x31, 0x32, 0x2f, 0x1c, 0x15, 0x31, 0x42, 0x31,
7922 0x20, 0x1f, 0x1c, 0x1a, 0x20, 0x2a, 0x2c, 0x29,
7923 0x41, 0x36, 0x5a, 0xab, 0x69, 0x03, 0x37, 0x69,
7924 0x2a, 0x3b, 0x4c, 0x50, 0x45, 0x39, 0x35, 0x36,
7925 0x3e, 0x3e, 0x29, 0x2d, 0x4e, 0x3d, 0x0a, 0x00,
7926 0x26, 0x3b, 0x38, 0x32, 0x39, 0x2c, 0x20, 0x2e,
7927 0x18, 0x40, 0x5c, 0x30, 0x0c, 0x4c, 0x7d, 0x57,
7928 0x2f, 0x33, 0x33, 0x33, 0x47, 0x80, 0xd1, 0xff,
7929 0xe4, 0x78, 0x87, 0xd9, 0xb7, 0x78, 0xa5, 0xf4,
7930 0xa3, 0x5e, 0x38, 0x4b, 0x4d, 0x2a, 0x21, 0x39,
7931 0x33, 0x58, 0x7f, 0x84, 0x63, 0x37, 0x17, 0x0b,
7932 0x13, 0x0a, 0x8b, 0xfc, 0xf8, 0xf7, 0xff, 0xff,
7933 0xff, 0xbd, 0x6e, 0x55, 0x68, 0x65, 0x41, 0x24,
7934 0x1a, 0x26, 0x37, 0x43, 0x42, 0x35, 0x23, 0x16,
7935 0x21, 0x40, 0x3b, 0x31, 0x31, 0x0a, 0x00, 0x1f,
7936 0x95, 0x6d, 0x3f, 0x2b, 0x30, 0x36, 0x2d, 0x1f,
7937 0x1c, 0x26, 0x37, 0x3b, 0x26, 0x25, 0x61, 0xa9,
7938 0x8e, 0x4b, 0x2c, 0x2b, 0x12, 0x06, 0x2a, 0x50,
7939 0x7c, 0x55, 0x5f, 0x4d, 0x3f, 0x65, 0x6d, 0x62,
7940 0x5d, 0x63, 0x6b, 0x70, 0x6f, 0x6b, 0x66, 0x63,
7941 0x7e, 0x82, 0x7d, 0x71, 0x71, 0x7a, 0x7b, 0x73,
7942 0x75, 0x75, 0x75, 0x73, 0x71, 0x6e, 0x6c, 0x6a,
7943 0x80, 0x84, 0x86, 0x81, 0x77, 0x72, 0x74, 0x79,
7944 0x83, 0x7d, 0x72, 0x67, 0x5e, 0x58, 0x56, 0x56,
7945 0x47, 0x49, 0x46, 0x30, 0x1c, 0x2d, 0x46, 0x49,
7946 0x80, 0x4d, 0x45, 0x75, 0x82, 0x54, 0x35, 0x3e,
7947 0x2c, 0x24, 0x1c, 0x34, 0x77, 0xab, 0x94, 0x5c,
7948 0x47, 0x44, 0x52, 0x72, 0x7a, 0x58, 0x42, 0x50,
7949 0x6c, 0x6c, 0x48, 0x35, 0x4a, 0x4f, 0x58, 0x7f,
7950 0x74, 0x5f, 0x46, 0x38, 0x33, 0x2c, 0x1e, 0x10,
7951 0x4e, 0x42, 0x20, 0x05, 0x19, 0x39, 0x29, 0x00,
7952 0x1f, 0x3a, 0x41, 0x31, 0x35, 0x50, 0x57, 0x48,
7953 0x69, 0x28, 0x00, 0x52, 0xff, 0xff, 0x80, 0x00,
7954 0x04, 0x0f, 0x82, 0xf0, 0xa6, 0x16, 0x2d, 0xb4,
7955 0xba, 0xbf, 0xd0, 0xc9, 0xbc, 0xb3, 0xa1, 0xa3,
7956 0x76, 0x78, 0xa6, 0xf1, 0xff, 0xf1, 0xc4, 0xb1,
7957 0xd9, 0x97, 0x98, 0x99, 0x9c, 0x7e, 0x29, 0x1c,
7958 0x76, 0x82, 0x56, 0x33, 0x4a, 0x4d, 0x36, 0x39,
7959 0x43, 0x3b, 0x33, 0x32, 0x35, 0x34, 0x2c, 0x24,
7960 0x49, 0x3b, 0x18, 0x02, 0x23, 0x55, 0x52, 0x2b,
7961 0x0a, 0x2d, 0x3a, 0x2d, 0x38, 0x59, 0x5b, 0x40,
7962 0x2d, 0x1c, 0x4c, 0x4b, 0x34, 0x4c, 0x53, 0x56,
7963 0x62, 0x45, 0x56, 0x56, 0x2d, 0x37, 0x56, 0x43,
7964 0x25, 0x1d, 0x1b, 0x28, 0x3d, 0x49, 0x45, 0x3c,
7965 0x36, 0x0c, 0x32, 0x50, 0x27, 0x2d, 0x44, 0x20,
7966 0x22, 0x1c, 0x21, 0x36, 0x48, 0x45, 0x32, 0x21,
7967 0x32, 0x16, 0x19, 0xad, 0xfc, 0xa8, 0x64, 0x38,
7968 0x78, 0x6d, 0x61, 0x5c, 0x5b, 0x54, 0x44, 0x37,
7969 0x26, 0x17, 0x28, 0x35, 0x26, 0x2a, 0x30, 0x1a,
7970 0x30, 0x42, 0x38, 0x2a, 0x2d, 0x25, 0x25, 0x3d,
7971 0x58, 0x5e, 0x50, 0x27, 0x0c, 0x20, 0x40, 0x48,
7972 0x12, 0x1b, 0x29, 0x33, 0x33, 0x27, 0x15, 0x07,
7973 0x85, 0xa0, 0xd3, 0xbe, 0x53, 0x1c, 0x48, 0x7c,
7974 0x89, 0x37, 0x06, 0x30, 0x71, 0x79, 0x51, 0x2d,
7975 0x1b, 0x0e, 0x16, 0x46, 0x7b, 0x82, 0x50, 0x19,
7976 0x31, 0x5c, 0xe1, 0xda, 0xa9, 0xa4, 0x9b, 0xf2,
7977 0xea, 0x9c, 0x43, 0x13, 0x0f, 0x24, 0x38, 0x3f,
7978 0x3b, 0x35, 0x2d, 0x25, 0x20, 0x21, 0x24, 0x26,
7979 0x58, 0x73, 0x56, 0x36, 0x45, 0x3d, 0x26, 0x32,
7980 0x2e, 0x2f, 0x34, 0x3c, 0x45, 0x4b, 0x4c, 0x4b,
7981 0x75, 0x4b, 0x2b, 0x29, 0x29, 0x23, 0x2d, 0x42,
7982 0x16, 0x1c, 0x40, 0x59, 0x4a, 0x3e, 0x3b, 0x2e,
7983 0x3d, 0x35, 0x2b, 0x1b, 0x41, 0x79, 0x75, 0x6a,
7984 0x65, 0x68, 0x6d, 0x71, 0x70, 0x6b, 0x63, 0x5d,
7985 0x6a, 0x71, 0x71, 0x68, 0x6a, 0x76, 0x7b, 0x77,
7986 0x92, 0x8b, 0x80, 0x77, 0x72, 0x74, 0x78, 0x7c,
7987 0x73, 0x76, 0x77, 0x74, 0x6e, 0x6b, 0x6c, 0x70,
7988 0x65, 0x64, 0x63, 0x62, 0x65, 0x69, 0x6d, 0x70,
7989 0x71, 0x57, 0x4e, 0x3e, 0x19, 0x21, 0x67, 0xa3,
7990 0x51, 0x40, 0x31, 0x38, 0x53, 0x6d, 0x76, 0x73,
7991 0x24, 0x67, 0x87, 0x56, 0x17, 0x16, 0x45, 0x6d,
7992 0x2a, 0x56, 0x5a, 0x5b, 0x5f, 0x2b, 0x20, 0x6b,
7993 0x53, 0x4f, 0x2e, 0x35, 0x76, 0x99, 0x97, 0xa3,
7994 0x7a, 0x7f, 0x8b, 0x97, 0x94, 0x75, 0x43, 0x1d,
7995 0x4b, 0x5c, 0x4f, 0x27, 0x18, 0x2a, 0x2f, 0x1e,
7996 0x50, 0x5c, 0x59, 0x49, 0x48, 0x55, 0x52, 0x41,
7997 0x57, 0x4d, 0x41, 0x82, 0xf7, 0xff, 0xc7, 0x94,
7998 0x8e, 0x9f, 0xd4, 0xe0, 0xc3, 0xde, 0xfb, 0xda,
7999 0xd6, 0xaa, 0xbd, 0xac, 0xc5, 0xef, 0xcd, 0xdd,
8000 0xa4, 0x9a, 0xa7, 0xc9, 0xce, 0xa6, 0x74, 0x59,
8001 0x6f, 0x40, 0x5e, 0x80, 0x9f, 0x83, 0x0c, 0x00,
8002 0x12, 0x46, 0x3a, 0x1c, 0x39, 0x4b, 0x33, 0x25,
8003 0x48, 0x32, 0x23, 0x31, 0x4f, 0x5d, 0x4e, 0x38,
8004 0x1c, 0x0d, 0x19, 0x3b, 0x44, 0x38, 0x46, 0x67,
8005 0x43, 0x73, 0x7a, 0x5d, 0x73, 0xa7, 0x94, 0x4d,
8006 0x3e, 0x27, 0x5a, 0x2c, 0x2b, 0x7a, 0x5c, 0x49,
8007 0xb4, 0xa8, 0x75, 0x7b, 0xb7, 0x94, 0x29, 0x00,
8008 0x2a, 0x41, 0x45, 0x21, 0x03, 0x2a, 0x97, 0xf9,
8009 0x8c, 0x39, 0x3b, 0x53, 0x08, 0x00, 0x62, 0xfa,
8010 0x52, 0x28, 0x10, 0x27, 0x49, 0x4d, 0x3e, 0x33,
8011 0x3b, 0xaf, 0x73, 0x75, 0xbc, 0x5e, 0x07, 0x1f,
8012 0x38, 0x32, 0x30, 0x39, 0x4c, 0x5d, 0x65, 0x66,
8013 0x4a, 0x21, 0x1c, 0x3c, 0x58, 0x64, 0x44, 0x07,
8014 0x41, 0x4c, 0x3d, 0x33, 0x3f, 0x3a, 0x32, 0x42,
8015 0x11, 0x71, 0x82, 0x3b, 0x2a, 0x60, 0x88, 0x89,
8016 0x77, 0x66, 0x45, 0x1f, 0x07, 0x0f, 0x2f, 0x4d,
8017 0xce, 0xb1, 0x6d, 0x1d, 0x0b, 0x3e, 0x5d, 0x48,
8018 0x28, 0x6b, 0x9d, 0x88, 0x53, 0x39, 0x40, 0x4d,
8019 0x50, 0x38, 0x22, 0x25, 0x3c, 0x4c, 0x4a, 0x40,
8020 0xe0, 0xff, 0xd8, 0x5c, 0x56, 0x89, 0x77, 0x90,
8021 0xa0, 0xa5, 0x95, 0x63, 0x4c, 0x70, 0x70, 0x34,
8022 0x00, 0x07, 0x20, 0x36, 0x40, 0x3c, 0x31, 0x28,
8023 0x0d, 0x41, 0x7c, 0x58, 0x05, 0x0d, 0x43, 0x46,
8024 0x28, 0x45, 0x66, 0x71, 0x64, 0x50, 0x46, 0x44,
8025 0x40, 0x28, 0x24, 0x3a, 0x4b, 0x4d, 0x5b, 0x71,
8026 0x90, 0x94, 0x71, 0x53, 0x68, 0x80, 0x7e, 0x7a,
8027 0x5d, 0x6a, 0x5a, 0x49, 0x65, 0x78, 0x71, 0x7d,
8028 0x6c, 0x6d, 0x71, 0x77, 0x7a, 0x77, 0x6e, 0x66,
8029 0x79, 0x83, 0x84, 0x7b, 0x7a, 0x85, 0x8c, 0x8b,
8030 0x83, 0x7d, 0x75, 0x6f, 0x6f, 0x74, 0x7c, 0x82,
8031 0x6c, 0x6f, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88,
8032 0x76, 0x72, 0x6c, 0x64, 0x5d, 0x56, 0x52, 0x50,
8033 0x58, 0x4c, 0x41, 0x2c, 0x32, 0x75, 0x9f, 0x86,
8034 0x33, 0x0f, 0x0c, 0x43, 0x7f, 0x91, 0x84, 0x77,
8035 0xa2, 0x7e, 0x70, 0x82, 0x83, 0x5a, 0x2c, 0x18,
8036 0xb3, 0xd7, 0x96, 0x79, 0xcb, 0xc5, 0x69, 0x52,
8037 0xe2, 0xcc, 0x87, 0x67, 0x90, 0x9b, 0x70, 0x54,
8038 0x4b, 0x50, 0x5f, 0x78, 0x8c, 0x8b, 0x76, 0x62,
8039 0x39, 0x2a, 0x19, 0x19, 0x2d, 0x3c, 0x2f, 0x16,
8040 0x31, 0x3f, 0x45, 0x39, 0x2b, 0x29, 0x2e, 0x32,
8041 0x2e, 0x53, 0x5e, 0x6d, 0x8d, 0x81, 0x64, 0x6e,
8042 0x4f, 0x51, 0x9b, 0xba, 0x91, 0xa7, 0xbc, 0x7c,
8043 0x23, 0x2e, 0x94, 0x75, 0x5d, 0x79, 0x5e, 0xa5,
8044 0x7a, 0x8d, 0x95, 0x77, 0x3b, 0x11, 0x16, 0x31,
8045 0x2d, 0x43, 0xa1, 0xc8, 0xc9, 0x9c, 0x2b, 0x02,
8046 0x63, 0x8b, 0x67, 0x2c, 0x37, 0x4a, 0x45, 0x49,
8047 0x49, 0x48, 0x46, 0x43, 0x3f, 0x3c, 0x3a, 0x39,
8048 0x85, 0x74, 0x7a, 0x8d, 0x7d, 0x51, 0x41, 0x50,
8049 0x48, 0x44, 0x49, 0x51, 0x49, 0x3e, 0x4a, 0x61,
8050 0x68, 0x5d, 0x4c, 0x00, 0x48, 0xb9, 0x58, 0x0c,
8051 0x16, 0x3e, 0x32, 0x24, 0x3a, 0x31, 0x2d, 0x5c,
8052 0x35, 0x28, 0x16, 0x12, 0x30, 0x76, 0xce, 0xff,
8053 0xff, 0x90, 0x1f, 0x5f, 0xb7, 0x80, 0x3a, 0x53,
8054 0x52, 0x31, 0x22, 0x2c, 0x25, 0x0e, 0x12, 0x2b,
8055 0x45, 0xe5, 0xb7, 0x81, 0x85, 0x1e, 0x00, 0x43,
8056 0x37, 0x39, 0x38, 0x2f, 0x26, 0x25, 0x2d, 0x36,
8057 0x2e, 0x38, 0x29, 0x21, 0x31, 0x35, 0x38, 0x4e,
8058 0x42, 0x48, 0x3a, 0x38, 0x4e, 0x48, 0x32, 0x34,
8059 0x46, 0x39, 0x44, 0x74, 0x84, 0x4f, 0x26, 0x33,
8060 0x39, 0x42, 0x4c, 0x4e, 0x47, 0x3f, 0x3a, 0x38,
8061 0x45, 0x22, 0x11, 0x3a, 0x6d, 0x66, 0x3c, 0x25,
8062 0x24, 0x69, 0xb6, 0xc2, 0x89, 0x5f, 0x81, 0xc1,
8063 0x89, 0x5d, 0x2a, 0x14, 0x21, 0x39, 0x47, 0x49,
8064 0xf0, 0xe4, 0x56, 0x53, 0xe4, 0xff, 0x8b, 0x00,
8065 0x00, 0x0d, 0x2f, 0x23, 0x12, 0x42, 0x4f, 0x0c,
8066 0x35, 0x35, 0x34, 0x34, 0x35, 0x36, 0x37, 0x37,
8067 0x0f, 0x14, 0x34, 0x38, 0x28, 0x40, 0x3a, 0x00,
8068 0x42, 0x5a, 0x6f, 0x6a, 0x53, 0x44, 0x4b, 0x58,
8069 0x86, 0x64, 0x4d, 0x50, 0x4f, 0x45, 0x4c, 0x5f,
8070 0x2b, 0x23, 0x28, 0x4e, 0x66, 0x49, 0x3f, 0x66,
8071 0x37, 0x2f, 0x2d, 0x29, 0x2e, 0x5c, 0x79, 0x57,
8072 0x69, 0x68, 0x6b, 0x75, 0x7f, 0x7f, 0x76, 0x6c,
8073 0x72, 0x7e, 0x80, 0x73, 0x6b, 0x72, 0x7a, 0x7b,
8074 0x72, 0x72, 0x71, 0x71, 0x73, 0x76, 0x79, 0x7b,
8075 0x75, 0x71, 0x6b, 0x64, 0x5f, 0x58, 0x52, 0x4e,
8076 0x5a, 0x5b, 0x5c, 0x5c, 0x5c, 0x5b, 0x5a, 0x59,
8077 0x57, 0x3e, 0x4c, 0x4b, 0x1f, 0x1b, 0x3e, 0x48,
8078 0x21, 0x00, 0x00, 0x23, 0x50, 0x56, 0x45, 0x3a,
8079 0x69, 0x5b, 0x62, 0x76, 0x6b, 0x43, 0x2b, 0x2c,
8080 0x00, 0x3d, 0x29, 0x3e, 0xbb, 0xd3, 0x88, 0x77,
8081 0xd8, 0xc2, 0x6f, 0x39, 0x61, 0x8a, 0x81, 0x76,
8082 0xa0, 0x7d, 0x51, 0x36, 0x33, 0x3e, 0x46, 0x49,
8083 0xa6, 0xb6, 0x91, 0x45, 0x27, 0x3d, 0x3b, 0x18,
8084 0x2c, 0x45, 0x61, 0x69, 0x5c, 0x59, 0x76, 0x98,
8085 0x7c, 0x87, 0x6c, 0x59, 0x66, 0x53, 0x37, 0x42,
8086 0x75, 0x1f, 0x1b, 0x22, 0x00, 0x22, 0x97, 0xc4,
8087 0x75, 0x38, 0x61, 0x50, 0x73, 0xa3, 0x52, 0x56,
8088 0x5c, 0x9a, 0xc3, 0x9f, 0x4f, 0x1c, 0x22, 0x3d,
8089 0x00, 0x27, 0x87, 0x93, 0x7f, 0x60, 0x0f, 0x00,
8090 0x46, 0x6f, 0x61, 0x40, 0x42, 0x37, 0x25, 0x34,
8091 0x40, 0x36, 0x37, 0x50, 0x76, 0x90, 0x90, 0x86,
8092 0x58, 0x53, 0x3c, 0x2e, 0x4c, 0x6f, 0x5b, 0x29,
8093 0x18, 0x46, 0x5f, 0x4a, 0x37, 0x5a, 0xa2, 0xd9,
8094 0x85, 0xfa, 0xff, 0x7a, 0x31, 0x63, 0x9a, 0xe0,
8095 0x93, 0x49, 0x2c, 0x24, 0x13, 0x32, 0x4c, 0x29,
8096 0x55, 0x4d, 0x55, 0x7f, 0xb9, 0xe1, 0xe8, 0xdf,
8097 0xd1, 0xba, 0x5a, 0x2e, 0x56, 0x42, 0x19, 0x3a,
8098 0x2b, 0x1a, 0x18, 0x19, 0x03, 0x0b, 0x6e, 0xe5,
8099 0xf9, 0xbc, 0x50, 0x4d, 0x52, 0x30, 0x47, 0x50,
8100 0x20, 0x2a, 0x33, 0x32, 0x2a, 0x26, 0x2c, 0x34,
8101 0x0d, 0x38, 0x43, 0x3c, 0x3f, 0x37, 0x41, 0x6c,
8102 0x34, 0x41, 0x37, 0x34, 0x44, 0x3b, 0x28, 0x2e,
8103 0x3d, 0x34, 0x37, 0x50, 0x73, 0x84, 0x64, 0x30,
8104 0x6a, 0x54, 0x40, 0x44, 0x56, 0x5c, 0x4c, 0x38,
8105 0x3d, 0x60, 0x64, 0x5e, 0x62, 0x4a, 0x32, 0x3f,
8106 0x51, 0x49, 0x30, 0x21, 0x39, 0x58, 0x48, 0x1e,
8107 0x55, 0x26, 0x00, 0x0d, 0x44, 0x6f, 0x70, 0x5d,
8108 0x60, 0x9a, 0x55, 0x5a, 0x60, 0x2e, 0x69, 0x97,
8109 0x97, 0x5a, 0x55, 0x51, 0x23, 0x2f, 0x4d, 0x30,
8110 0x1b, 0x3a, 0x67, 0x85, 0x83, 0x60, 0x30, 0x0e,
8111 0x26, 0x4e, 0x40, 0x29, 0x39, 0x33, 0x23, 0x36,
8112 0x46, 0x47, 0x3f, 0x2c, 0x1f, 0x2e, 0x54, 0x77,
8113 0x4b, 0x39, 0x3b, 0x52, 0x56, 0x3c, 0x28, 0x28,
8114 0x14, 0x05, 0x54, 0xc6, 0xc9, 0x74, 0x30, 0x18,
8115 0x19, 0x17, 0x38, 0x84, 0x8c, 0x5d, 0x59, 0x63,
8116 0x62, 0x5f, 0x61, 0x6d, 0x7b, 0x7e, 0x73, 0x67,
8117 0x7a, 0x88, 0x8a, 0x79, 0x6d, 0x70, 0x78, 0x7a,
8118 0x69, 0x6a, 0x6c, 0x6d, 0x6b, 0x67, 0x62, 0x5f,
8119 0x71, 0x6d, 0x69, 0x6a, 0x6e, 0x6f, 0x6c, 0x68,
8120 0x5a, 0x5c, 0x5e, 0x5e, 0x5d, 0x59, 0x55, 0x53,
8121 0x58, 0x5b, 0x67, 0x45, 0x1d, 0x46, 0x64, 0x36,
8122 0x35, 0x32, 0x2e, 0x2c, 0x34, 0x45, 0x58, 0x65,
8123 0x5c, 0x7d, 0x7c, 0x49, 0x1b, 0x18, 0x27, 0x2c,
8124 0x42, 0x81, 0xa2, 0xb8, 0xc0, 0x7e, 0x5d, 0x98,
8125 0xd1, 0xe6, 0xaf, 0x68, 0x6b, 0x7e, 0x71, 0x67,
8126 0x74, 0x62, 0x52, 0x55, 0x6a, 0x81, 0x8e, 0x90,
8127 0xb1, 0xff, 0xe0, 0x45, 0x00, 0x26, 0x4d, 0x32,
8128 0x2d, 0x32, 0x43, 0x51, 0x46, 0x37, 0x49, 0x6a,
8129 0x6b, 0x7c, 0x67, 0x57, 0x69, 0x67, 0x65, 0x84,
8130 0x87, 0x60, 0x4e, 0x42, 0x54, 0xb0, 0xe2, 0xb1,
8131 0xdb, 0x9d, 0x9b, 0x81, 0x9d, 0xcd, 0xaa, 0xb6,
8132 0x86, 0xa7, 0xae, 0x83, 0x4d, 0x2e, 0x1d, 0x10,
8133 0x93, 0x8e, 0xa6, 0x7f, 0x6b, 0x66, 0x1d, 0x00,
8134 0x55, 0x61, 0x49, 0x3b, 0x48, 0x41, 0x56, 0x99,
8135 0x83, 0x66, 0x4b, 0x4b, 0x5b, 0x5b, 0x41, 0x24,
8136 0x39, 0x34, 0x1e, 0x14, 0x38, 0x64, 0x59, 0x2b,
8137 0x25, 0x3d, 0x2d, 0x19, 0x59, 0xb5, 0xa6, 0x4f,
8138 0x96, 0x96, 0x83, 0x70, 0x44, 0x4b, 0x7e, 0x63,
8139 0x62, 0x6c, 0x9d, 0x8f, 0x36, 0x1d, 0x3e, 0x3c,
8140 0x03, 0x39, 0x6c, 0x6b, 0x47, 0x35, 0x4e, 0x72,
8141 0x0d, 0x1b, 0x18, 0x23, 0x51, 0x6a, 0x4d, 0x28,
8142 0x37, 0x49, 0x83, 0xb1, 0x84, 0x28, 0x10, 0x35,
8143 0x3e, 0x19, 0x07, 0x49, 0x57, 0x4a, 0x61, 0x35,
8144 0x39, 0x35, 0x33, 0x37, 0x38, 0x2d, 0x15, 0x00,
8145 0x3b, 0x24, 0x40, 0x76, 0x90, 0x8d, 0x56, 0x04,
8146 0x2e, 0x4b, 0x49, 0x37, 0x2e, 0x22, 0x2a, 0x4d,
8147 0x37, 0x18, 0x30, 0x43, 0x1e, 0x24, 0x6a, 0x99,
8148 0x28, 0x24, 0x27, 0x3b, 0x58, 0x6e, 0x74, 0x71,
8149 0x54, 0x68, 0x37, 0x12, 0x3e, 0x50, 0x25, 0x09,
8150 0x39, 0x4c, 0x3b, 0x15, 0x25, 0x5e, 0x69, 0x47,
8151 0x1f, 0x2e, 0x39, 0x33, 0x26, 0x2a, 0x42, 0x5a,
8152 0x32, 0x33, 0x2e, 0x4d, 0x4e, 0x21, 0x2d, 0x5e,
8153 0x50, 0x14, 0x2c, 0x49, 0x29, 0x3b, 0x4e, 0x18,
8154 0x16, 0x1f, 0x30, 0x44, 0x56, 0x64, 0x6d, 0x72,
8155 0x6b, 0x44, 0x0f, 0x33, 0x94, 0x97, 0x4e, 0x2b,
8156 0x54, 0x48, 0x32, 0x19, 0x0d, 0x15, 0x2e, 0x43,
8157 0x00, 0x23, 0x59, 0x6c, 0x42, 0x09, 0x02, 0x1e,
8158 0x25, 0x3c, 0x79, 0x8d, 0x4f, 0x20, 0x3e, 0x6f,
8159 0x83, 0xe2, 0xd4, 0x9a, 0x7f, 0x77, 0x7f, 0x72,
8160 0x6a, 0x64, 0x63, 0x6e, 0x7c, 0x7e, 0x70, 0x61,
8161 0x70, 0x80, 0x83, 0x72, 0x63, 0x66, 0x70, 0x74,
8162 0x81, 0x81, 0x82, 0x80, 0x7c, 0x76, 0x70, 0x6c,
8163 0x7c, 0x77, 0x73, 0x76, 0x7d, 0x81, 0x7d, 0x77,
8164 0x60, 0x62, 0x65, 0x66, 0x64, 0x5f, 0x59, 0x55,
8165 0x43, 0x40, 0x65, 0x5c, 0x1f, 0x24, 0x4a, 0x3c,
8166 0x1d, 0x06, 0x1a, 0x4b, 0x4a, 0x1d, 0x19, 0x3f,
8167 0x41, 0x86, 0xad, 0x87, 0x4f, 0x44, 0x5c, 0x71,
8168 0x76, 0x71, 0x78, 0x8c, 0x83, 0x4e, 0x28, 0x2c,
8169 0x34, 0x86, 0x8b, 0x4d, 0x39, 0x3e, 0x37, 0x38,
8170 0x65, 0x5f, 0x5e, 0x6d, 0x83, 0x90, 0x8f, 0x88,
8171 0x96, 0xa1, 0x8e, 0x75, 0x96, 0xd6, 0xdf, 0xba,
8172 0x8c, 0x61, 0x4b, 0x5d, 0x64, 0x4c, 0x36, 0x36,
8173 0x1a, 0x2f, 0x2f, 0x46, 0x76, 0x69, 0x36, 0x26,
8174 0x25, 0x43, 0x7d, 0xa6, 0x9f, 0x81, 0x69, 0x5a,
8175 0x92, 0x58, 0x36, 0x3f, 0x71, 0x8d, 0x67, 0x41,
8176 0x3d, 0x48, 0x43, 0x3e, 0x66, 0xab, 0xd3, 0xd3,
8177 0xc4, 0xae, 0xad, 0x78, 0x6f, 0x78, 0x2b, 0x00,
8178 0x7b, 0x75, 0x5b, 0x5a, 0x67, 0x55, 0x75, 0xd0,
8179 0xb7, 0xcf, 0xd4, 0xa5, 0x5b, 0x2d, 0x31, 0x49,
8180 0x49, 0x3a, 0x43, 0x5c, 0x55, 0x34, 0x2d, 0x42,
8181 0x0f, 0x0e, 0x29, 0x69, 0xa3, 0xa2, 0x64, 0x26,
8182 0x28, 0x42, 0xaf, 0xff, 0x9e, 0x2a, 0x5f, 0x1e,
8183 0x3a, 0x58, 0x34, 0x06, 0x12, 0x2a, 0x68, 0xcc,
8184 0xa7, 0x64, 0x1e, 0x11, 0x31, 0x46, 0x31, 0x10,
8185 0x69, 0x19, 0x15, 0x36, 0x2f, 0x48, 0x66, 0x4d,
8186 0x87, 0x4d, 0x3e, 0x65, 0x65, 0x2e, 0x13, 0x26,
8187 0x2c, 0x57, 0x25, 0x19, 0x36, 0x45, 0x4e, 0x1f,
8188 0x52, 0x43, 0x43, 0x61, 0x86, 0x8b, 0x67, 0x40,
8189 0x21, 0x02, 0x41, 0x59, 0x1d, 0x4b, 0xa8, 0x9f,
8190 0x35, 0x5f, 0x64, 0x41, 0x21, 0x13, 0x36, 0x76,
8191 0x7f, 0x4b, 0x3d, 0x28, 0x0d, 0x4c, 0x88, 0x67,
8192 0x4c, 0x68, 0x7d, 0x70, 0x4d, 0x37, 0x3f, 0x52,
8193 0x2e, 0x1f, 0x05, 0x2e, 0x71, 0x6b, 0x77, 0xcd,
8194 0x5f, 0x28, 0x1b, 0x45, 0x51, 0x2f, 0x27, 0x44,
8195 0x46, 0x3b, 0x2b, 0x20, 0x1c, 0x1d, 0x1e, 0x1f,
8196 0x21, 0x24, 0x73, 0x67, 0x51, 0x55, 0x31, 0x54,
8197 0x32, 0x10, 0x23, 0x1e, 0x0e, 0x61, 0x87, 0x28,
8198 0x4c, 0x3d, 0x28, 0x19, 0x19, 0x29, 0x3e, 0x4d,
8199 0x69, 0x31, 0x63, 0xe2, 0xff, 0xff, 0xb1, 0x41,
8200 0x19, 0x1c, 0x22, 0x2a, 0x32, 0x38, 0x3b, 0x3c,
8201 0x72, 0x4a, 0x37, 0x4b, 0x5a, 0x48, 0x2c, 0x20,
8202 0x37, 0x47, 0x5b, 0x7d, 0x91, 0x74, 0x5e, 0x70,
8203 0x9b, 0x78, 0x65, 0x9a, 0xa6, 0x8b, 0x8f, 0x74,
8204 0x79, 0x71, 0x6d, 0x76, 0x83, 0x82, 0x72, 0x61,
8205 0x77, 0x89, 0x8e, 0x7d, 0x6f, 0x72, 0x7d, 0x83,
8206 0x80, 0x7f, 0x7e, 0x7c, 0x79, 0x76, 0x74, 0x73,
8207 0x71, 0x6b, 0x67, 0x6b, 0x74, 0x78, 0x73, 0x6d,
8208 0x61, 0x65, 0x69, 0x6d, 0x6c, 0x69, 0x63, 0x60,
8209 0x5d, 0x49, 0x51, 0x3a, 0x18, 0x4a, 0x76, 0x4e,
8210 0x21, 0x49, 0x46, 0x28, 0x4e, 0xa0, 0xa7, 0x6d,
8211 0x56, 0x42, 0x3e, 0x50, 0x58, 0x5b, 0x77, 0x9d,
8212 0x61, 0x76, 0x8a, 0x72, 0x4c, 0x50, 0x51, 0x30,
8213 0x00, 0x53, 0x74, 0x41, 0x3a, 0x66, 0x99, 0xc6,
8214 0xa6, 0x84, 0x5b, 0x4c, 0x5e, 0x84, 0xa6, 0xb9,
8215 0x67, 0x4b, 0x77, 0xdf, 0xff, 0xdd, 0xd4, 0xfb,
8216 0xbc, 0x6e, 0x41, 0x65, 0x90, 0x82, 0x55, 0x39,
8217 0x70, 0x8f, 0x7e, 0x55, 0x3c, 0x16, 0x08, 0x29,
8218 0x3a, 0x56, 0x69, 0x65, 0x41, 0x0d, 0x10, 0x45,
8219 0x95, 0x88, 0x5a, 0x3c, 0x25, 0x21, 0x44, 0x52,
8220 0x81, 0x7d, 0x58, 0x2c, 0x33, 0x64, 0x7b, 0x6e,
8221 0x2d, 0x3d, 0x69, 0x54, 0x5c, 0x71, 0x2c, 0x00,
8222 0x47, 0x36, 0x3e, 0x5b, 0x58, 0x36, 0x29, 0x37,
8223 0x88, 0xfb, 0x9b, 0x00, 0x00, 0x37, 0x39, 0x51,
8224 0x00, 0x47, 0xb1, 0xf4, 0xf1, 0xd0, 0xc6, 0xd2,
8225 0xdd, 0x5b, 0x00, 0x12, 0x2f, 0x1d, 0x16, 0x2e,
8226 0x22, 0x1f, 0x46, 0x6d, 0x46, 0x04, 0x1c, 0x6f,
8227 0x60, 0x5b, 0x31, 0x05, 0x25, 0x8c, 0xe2, 0xff,
8228 0x87, 0x5f, 0x82, 0xdf, 0xe3, 0x79, 0x26, 0x1f,
8229 0x5b, 0x30, 0x18, 0x24, 0x2b, 0x23, 0x2e, 0x4a,
8230 0x71, 0x51, 0x27, 0x0e, 0x0f, 0x20, 0x31, 0x3b,
8231 0x2e, 0x43, 0x48, 0x2e, 0x24, 0x49, 0x5f, 0x4d,
8232 0x2d, 0x24, 0x49, 0x4e, 0x60, 0x73, 0x5c, 0x74,
8233 0x37, 0x39, 0x8b, 0xd3, 0xbe, 0x99, 0x74, 0x3c,
8234 0x62, 0x86, 0xac, 0x66, 0x43, 0x67, 0x5c, 0x66,
8235 0x23, 0x2a, 0x2e, 0x2b, 0x28, 0x34, 0x4f, 0x65,
8236 0x7e, 0x62, 0x57, 0x5b, 0x48, 0x2d, 0x3f, 0x6a,
8237 0x0d, 0x03, 0x12, 0x37, 0x4b, 0x40, 0x34, 0x36,
8238 0x00, 0x86, 0x9e, 0x5d, 0x53, 0x29, 0x23, 0x85,
8239 0x46, 0x48, 0x69, 0x95, 0x92, 0x5e, 0x37, 0x32,
8240 0x36, 0x1d, 0x14, 0x22, 0x29, 0x32, 0x61, 0x9b,
8241 0xd1, 0xac, 0x59, 0x7d, 0xe0, 0xff, 0xc0, 0x23,
8242 0x13, 0x4a, 0x13, 0x8d, 0xfb, 0xf2, 0xed, 0x4e,
8243 0x00, 0x20, 0x9d, 0xff, 0xee, 0xa3, 0x5d, 0x1e,
8244 0x15, 0x43, 0x76, 0x89, 0x7b, 0x6a, 0x67, 0x6e,
8245 0x8c, 0x85, 0x40, 0x29, 0x68, 0x75, 0x4d, 0x4c,
8246 0xaf, 0x44, 0x33, 0x72, 0x70, 0x4d, 0x4b, 0x4f,
8247 0x5e, 0x30, 0x6c, 0x96, 0x70, 0x6f, 0x83, 0x82,
8248 0x62, 0x64, 0x6b, 0x75, 0x7e, 0x7d, 0x74, 0x6a,
8249 0x7c, 0x82, 0x87, 0x82, 0x78, 0x74, 0x78, 0x7e,
8250 0x6d, 0x6d, 0x6d, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e,
8251 0x77, 0x7b, 0x7c, 0x76, 0x6d, 0x6b, 0x72, 0x7a,
8252 0x76, 0x72, 0x6f, 0x70, 0x72, 0x6e, 0x65, 0x5c,
8253 0x4e, 0x54, 0x3f, 0x25, 0x45, 0x83, 0x7b, 0x3c,
8254 0x38, 0x4b, 0x9a, 0xab, 0x91, 0x75, 0x63, 0x96,
8255 0x84, 0x6c, 0x69, 0x8e, 0x7a, 0x83, 0xcb, 0xbd,
8256 0x7a, 0x5b, 0xd9, 0xfc, 0x43, 0x00, 0x4e, 0x52,
8257 0x26, 0x30, 0x3f, 0x4d, 0x56, 0x57, 0x54, 0x50,
8258 0x28, 0x19, 0x3a, 0x6d, 0x5a, 0x22, 0x36, 0x80,
8259 0x97, 0x61, 0x90, 0xd6, 0x9b, 0x45, 0x5d, 0xa5,
8260 0xb2, 0x91, 0x6c, 0x5e, 0x66, 0x6e, 0x68, 0x5e,
8261 0x4e, 0x5b, 0x52, 0x37, 0x30, 0x3e, 0x3d, 0x2b,
8262 0x53, 0x59, 0x2d, 0x04, 0x19, 0x40, 0x67, 0x92,
8263 0xb0, 0x86, 0x6b, 0x4a, 0x33, 0x5e, 0x6a, 0x28,
8264 0x2e, 0x42, 0x5a, 0x66, 0x66, 0x65, 0x6b, 0x72,
8265 0x6d, 0x5b, 0x50, 0x5d, 0x6b, 0x5a, 0x25, 0x00,
8266 0x49, 0x46, 0x2e, 0x1a, 0x34, 0x62, 0x64, 0x44,
8267 0x15, 0x5c, 0x48, 0x14, 0x21, 0x32, 0x5e, 0xba,
8268 0xf1, 0xf3, 0xe2, 0xac, 0x63, 0x38, 0x44, 0x63,
8269 0x45, 0x10, 0x08, 0x35, 0x3b, 0x0a, 0x00, 0x10,
8270 0x5d, 0x23, 0x25, 0x81, 0xca, 0xb1, 0x63, 0x2f,
8271 0x21, 0x34, 0x31, 0x1e, 0x32, 0x68, 0x87, 0x83,
8272 0x4c, 0x30, 0x37, 0x59, 0x4b, 0x15, 0x08, 0x26,
8273 0x76, 0x3a, 0x2a, 0x4f, 0x4d, 0x28, 0x40, 0x85,
8274 0x34, 0x53, 0x68, 0x57, 0x30, 0x21, 0x39, 0x5a,
8275 0x6c, 0x57, 0x72, 0x6d, 0x41, 0x62, 0x77, 0x32,
8276 0x62, 0x55, 0xae, 0x8f, 0x3b, 0x78, 0x9f, 0x72,
8277 0x42, 0x75, 0xab, 0x8a, 0x43, 0x4b, 0x64, 0x46,
8278 0x39, 0x7c, 0xaa, 0xa1, 0x67, 0x3d, 0x4b, 0x5f,
8279 0x62, 0x5b, 0x49, 0x31, 0x22, 0x29, 0x43, 0x5b,
8280 0x9e, 0x89, 0x74, 0x64, 0x53, 0x53, 0x72, 0x99,
8281 0x7c, 0x94, 0x5d, 0x09, 0x2f, 0xa7, 0xba, 0x6c,
8282 0xb2, 0xed, 0xbe, 0x3b, 0x18, 0x56, 0x69, 0x40,
8283 0x6a, 0x86, 0xa6, 0xb7, 0xb3, 0x9d, 0x78, 0x59,
8284 0x83, 0x4f, 0x22, 0x37, 0x89, 0xd3, 0xe2, 0xcd,
8285 0xd1, 0xe0, 0xd6, 0xf9, 0xed, 0xb9, 0xc2, 0xb8,
8286 0xfd, 0xf9, 0x7b, 0x6c, 0xb5, 0x9b, 0x7b, 0x7f,
8287 0x92, 0x93, 0x68, 0x5b, 0x8b, 0x99, 0x85, 0x8d,
8288 0x78, 0x76, 0x79, 0x7c, 0x70, 0x66, 0x74, 0x8d,
8289 0x2e, 0x37, 0x3c, 0x5e, 0x8c, 0x84, 0x62, 0x5c,
8290 0x80, 0x61, 0x54, 0x73, 0x5f, 0x29, 0x28, 0x2b,
8291 0x27, 0x30, 0x39, 0x34, 0x44, 0x68, 0x6f, 0x5d,
8292 0x6d, 0x6b, 0x6b, 0x71, 0x79, 0x7d, 0x79, 0x74,
8293 0x75, 0x7a, 0x7e, 0x7a, 0x72, 0x6e, 0x71, 0x77,
8294 0x6b, 0x71, 0x7a, 0x80, 0x7f, 0x77, 0x6d, 0x65,
8295 0x69, 0x6b, 0x6c, 0x6c, 0x6c, 0x6f, 0x76, 0x7c,
8296 0x6f, 0x6b, 0x68, 0x68, 0x6a, 0x66, 0x5c, 0x54,
8297 0x64, 0x5f, 0x82, 0x90, 0x64, 0x48, 0x4d, 0x49,
8298 0x2d, 0x3b, 0x62, 0x4b, 0x46, 0x50, 0x18, 0x00,
8299 0x00, 0x29, 0x2f, 0x3e, 0x4a, 0x6a, 0x85, 0x43,
8300 0x3c, 0x90, 0xfb, 0xeb, 0x70, 0x31, 0x2f, 0x19,
8301 0x43, 0x42, 0x41, 0x44, 0x4b, 0x56, 0x61, 0x68,
8302 0xa0, 0x93, 0x81, 0x6b, 0x53, 0x44, 0x49, 0x57,
8303 0x74, 0x2e, 0x52, 0xa9, 0x91, 0x4a, 0x49, 0x6d,
8304 0x75, 0x5a, 0x37, 0x22, 0x23, 0x31, 0x3f, 0x47,
8305 0x35, 0x3f, 0x45, 0x48, 0x54, 0x69, 0x76, 0x76,
8306 0x84, 0x68, 0x3f, 0x40, 0x5f, 0x66, 0x80, 0xbd,
8307 0x5d, 0x3f, 0x43, 0x4b, 0x28, 0x0c, 0x1e, 0x39,
8308 0x6c, 0x83, 0x6f, 0x7e, 0xba, 0x9e, 0x4c, 0x38,
8309 0x84, 0x6b, 0x54, 0x53, 0x5b, 0x4c, 0x23, 0x00,
8310 0x45, 0x48, 0x3e, 0x3b, 0x5a, 0x72, 0x4b, 0x09,
8311 0x44, 0x3b, 0x33, 0x38, 0x3e, 0x45, 0x78, 0xc0,
8312 0xd8, 0xbf, 0x92, 0x61, 0x40, 0x34, 0x30, 0x2e,
8313 0x58, 0x24, 0x13, 0x33, 0x41, 0x35, 0x48, 0x75,
8314 0xa4, 0x86, 0x75, 0x84, 0x95, 0x89, 0x66, 0x4b,
8315 0x64, 0x76, 0x77, 0x63, 0x58, 0x57, 0x47, 0x2c,
8316 0x7f, 0x7e, 0x72, 0x54, 0x2f, 0x21, 0x38, 0x58,
8317 0xb3, 0x8f, 0xab, 0xe8, 0xc2, 0x55, 0x41, 0x81,
8318 0x3b, 0x38, 0x48, 0x77, 0xaa, 0xbc, 0xa5, 0x86,
8319 0x3e, 0x76, 0xb6, 0xb4, 0x81, 0x6b, 0x66, 0x4f,
8320 0x52, 0x94, 0xc6, 0x65, 0x36, 0x88, 0xa6, 0x9d,
8321 0x61, 0x41, 0x50, 0x61, 0x31, 0x0c, 0x28, 0x4e,
8322 0x4a, 0x5b, 0x4f, 0x80, 0x6f, 0x2c, 0x42, 0x45,
8323 0x5b, 0x51, 0x3d, 0x29, 0x21, 0x2d, 0x49, 0x5f,
8324 0x64, 0x75, 0x73, 0x56, 0x3a, 0x30, 0x2b, 0x23,
8325 0x51, 0x92, 0xb1, 0x8d, 0x6d, 0x78, 0x85, 0x7e,
8326 0x5a, 0x60, 0x7e, 0x62, 0x51, 0xbe, 0xdf, 0x62,
8327 0x58, 0x6b, 0x62, 0x40, 0x3e, 0x5b, 0x62, 0x4d,
8328 0x65, 0x78, 0x7e, 0x81, 0xa7, 0xd4, 0xcb, 0xa1,
8329 0xd0, 0xb3, 0x46, 0x38, 0x91, 0xe9, 0xe3, 0x67,
8330 0xac, 0xde, 0xf1, 0xc2, 0x9b, 0x5b, 0x4f, 0xd3,
8331 0xb1, 0x98, 0x3c, 0x12, 0x63, 0xb0, 0xb7, 0xb3,
8332 0xea, 0xa3, 0x7b, 0xa3, 0xdb, 0xe9, 0xe0, 0xdd,
8333 0x65, 0x2c, 0x22, 0x39, 0x34, 0x36, 0x5b, 0x7a,
8334 0x25, 0x25, 0x43, 0x55, 0x54, 0x59, 0x61, 0x69,
8335 0x4b, 0x53, 0x6c, 0xa3, 0xa5, 0x69, 0x65, 0x94,
8336 0x71, 0x6b, 0x66, 0x69, 0x70, 0x76, 0x77, 0x75,
8337 0x7f, 0x83, 0x85, 0x83, 0x7d, 0x7b, 0x7d, 0x81,
8338 0x82, 0x86, 0x8b, 0x8b, 0x83, 0x75, 0x66, 0x5c,
8339 0x76, 0x71, 0x6c, 0x6a, 0x6d, 0x70, 0x70, 0x6f,
8340 0x69, 0x65, 0x61, 0x61, 0x62, 0x5e, 0x54, 0x4b,
8341 0x44, 0x55, 0x5f, 0x48, 0x26, 0x2a, 0x46, 0x55,
8342 0x1b, 0x2e, 0x4d, 0x21, 0x12, 0x3d, 0x4c, 0x6b,
8343 0xa9, 0xd8, 0xbd, 0x98, 0x4d, 0x00, 0x0c, 0x2e,
8344 0x64, 0x57, 0x2e, 0x30, 0x54, 0x40, 0x37, 0x70,
8345 0x75, 0x68, 0x54, 0x42, 0x39, 0x39, 0x40, 0x45,
8346 0x6a, 0x6a, 0x3a, 0x00, 0x07, 0x53, 0x7c, 0x6f,
8347 0x69, 0x46, 0x46, 0x3c, 0x0e, 0x16, 0x5c, 0x8a,
8348 0x52, 0x4d, 0x43, 0x3c, 0x44, 0x61, 0x8b, 0xaa,
8349 0x26, 0x1c, 0x1a, 0x25, 0x32, 0x3e, 0x53, 0x67,
8350 0x41, 0x5d, 0x98, 0xf1, 0xff, 0xa7, 0x33, 0x16,
8351 0x58, 0x78, 0xb2, 0xe5, 0xc7, 0x5d, 0x2c, 0x51,
8352 0xd5, 0xf3, 0xc2, 0xc3, 0xff, 0xcd, 0x41, 0x1d,
8353 0x2d, 0x22, 0x20, 0x32, 0x49, 0x48, 0x2d, 0x10,
8354 0x2c, 0x03, 0x00, 0x1c, 0x3d, 0x43, 0x4e, 0x66,
8355 0x68, 0x44, 0x45, 0x68, 0x8c, 0xac, 0xa7, 0x7c,
8356 0x9b, 0x88, 0x6f, 0x6e, 0x8f, 0xa2, 0x7e, 0x48,
8357 0x67, 0x2d, 0x14, 0x3e, 0x6c, 0x72, 0x6c, 0x71,
8358 0x39, 0x70, 0x8a, 0x59, 0x16, 0x10, 0x4d, 0x8c,
8359 0x56, 0x57, 0x51, 0x48, 0x49, 0x55, 0x5d, 0x5c,
8360 0x37, 0x58, 0x5d, 0x3d, 0x2c, 0x3c, 0x44, 0x38,
8361 0x6d, 0x74, 0xa3, 0xc8, 0x91, 0x2b, 0x0f, 0x39,
8362 0x59, 0x4d, 0x45, 0x4b, 0x56, 0x51, 0x38, 0x20,
8363 0x5f, 0x8a, 0x57, 0x58, 0xc3, 0xbb, 0x6d, 0x7a,
8364 0xa3, 0x9b, 0x63, 0x00, 0x25, 0x82, 0x5c, 0x2d,
8365 0x33, 0x3c, 0x3d, 0x2c, 0x2c, 0x5a, 0x8e, 0xa1,
8366 0xff, 0xcd, 0x70, 0x63, 0x4f, 0x27, 0x3a, 0x48,
8367 0x2c, 0x2d, 0x2e, 0x2f, 0x32, 0x3a, 0x44, 0x4b,
8368 0x60, 0x71, 0x5d, 0x2b, 0x1e, 0x45, 0x67, 0x6b,
8369 0x7d, 0x5e, 0x6b, 0x97, 0x87, 0x49, 0x3e, 0x68,
8370 0x85, 0x40, 0x5c, 0x76, 0x49, 0x6b, 0xad, 0x95,
8371 0x69, 0x64, 0x49, 0x27, 0x26, 0x47, 0x61, 0x65,
8372 0x53, 0x87, 0xa7, 0x8f, 0x66, 0x54, 0x51, 0x4e,
8373 0x81, 0x4d, 0x00, 0x1b, 0x65, 0x7e, 0x75, 0x2a,
8374 0x58, 0x52, 0x8d, 0x8c, 0x5c, 0x67, 0x9b, 0xd7,
8375 0xff, 0xc8, 0x87, 0x6c, 0x78, 0xc1, 0xe7, 0xbe,
8376 0x6d, 0xa1, 0xe2, 0xe6, 0x93, 0x50, 0x80, 0xe2,
8377 0xdd, 0x59, 0x42, 0x8a, 0xa1, 0x99, 0x85, 0x56,
8378 0x3f, 0x20, 0x58, 0x57, 0x3c, 0x47, 0x4b, 0x73,
8379 0xd1, 0xfa, 0xf6, 0xc6, 0x8a, 0x79, 0x85, 0x6e,
8380 0x80, 0x7c, 0x79, 0x7c, 0x83, 0x87, 0x85, 0x81,
8381 0x79, 0x7a, 0x7b, 0x7a, 0x78, 0x77, 0x78, 0x79,
8382 0x81, 0x7f, 0x7b, 0x79, 0x78, 0x7a, 0x7d, 0x7f,
8383 0x84, 0x7a, 0x70, 0x6f, 0x74, 0x77, 0x73, 0x6d,
8384 0x69, 0x65, 0x60, 0x60, 0x60, 0x5b, 0x51, 0x48,
8385 0x41, 0x4c, 0x31, 0x31, 0x56, 0x42, 0x1d, 0x2d,
8386 0x5f, 0x21, 0x1b, 0x1f, 0x40, 0x68, 0x73, 0xa4,
8387 0xf4, 0xf8, 0xbe, 0xce, 0xda, 0x9c, 0xb0, 0xf4,
8388 0xff, 0xa3, 0x22, 0x13, 0x4e, 0x44, 0x45, 0x93,
8389 0x9b, 0x7d, 0x50, 0x2c, 0x23, 0x36, 0x56, 0x6e,
8390 0x1c, 0x54, 0x6a, 0x53, 0x58, 0x79, 0x6b, 0x38,
8391 0x31, 0x46, 0x4d, 0x1c, 0x00, 0x39, 0x6d, 0x52,
8392 0x16, 0x29, 0x3b, 0x3f, 0x3e, 0x4d, 0x6e, 0x8b,
8393 0x93, 0x7d, 0x71, 0x72, 0x6b, 0x5d, 0x60, 0x70,
8394 0x42, 0x77, 0xa6, 0xda, 0xff, 0xd9, 0x6f, 0x2d,
8395 0x48, 0x5c, 0x4e, 0x4c, 0x61, 0x51, 0x60, 0xac,
8396 0xeb, 0xdf, 0xa1, 0x86, 0xa6, 0x95, 0x65, 0x61,
8397 0x3e, 0x3f, 0x48, 0x5a, 0x64, 0x54, 0x2e, 0x0d,
8398 0x5f, 0x4d, 0x4c, 0x57, 0x4d, 0x3f, 0x5f, 0x94,
8399 0x75, 0x54, 0x6a, 0xa3, 0xb6, 0x9a, 0x54, 0x07,
8400 0x09, 0x15, 0x0e, 0x03, 0x21, 0x57, 0x65, 0x4f,
8401 0x51, 0x2d, 0x1f, 0x3b, 0x5a, 0x5b, 0x4c, 0x43,
8402 0x3f, 0x74, 0xa1, 0x9d, 0x7d, 0x66, 0x5e, 0x5c,
8403 0x7d, 0x68, 0x51, 0x43, 0x3d, 0x3e, 0x4c, 0x5c,
8404 0x65, 0x80, 0x7b, 0x5c, 0x5f, 0x76, 0x5b, 0x21,
8405 0x31, 0x4e, 0x60, 0x4b, 0x2b, 0x28, 0x4a, 0x6e,
8406 0x90, 0x80, 0x64, 0x45, 0x31, 0x32, 0x42, 0x51,
8407 0xaf, 0xcf, 0x94, 0x8f, 0xe9, 0xcf, 0x83, 0xa1,
8408 0xa4, 0x76, 0xb6, 0xaf, 0x81, 0xb7, 0xb7, 0x73,
8409 0x56, 0x88, 0x95, 0x6b, 0x41, 0x3f, 0x60, 0x85,
8410 0x80, 0x41, 0x33, 0x43, 0x78, 0x95, 0x65, 0x4e,
8411 0x71, 0x62, 0x4d, 0x3c, 0x35, 0x37, 0x3c, 0x3f,
8412 0x53, 0x7f, 0x90, 0x75, 0x64, 0x6a, 0x61, 0x46,
8413 0x71, 0x78, 0x79, 0x6c, 0x5a, 0x4d, 0x4a, 0x4c,
8414 0x55, 0x28, 0x3d, 0x6a, 0x46, 0x0b, 0x15, 0x40,
8415 0x6f, 0x63, 0x66, 0x78, 0x78, 0x68, 0x66, 0x73,
8416 0x5c, 0x3f, 0x2b, 0x2e, 0x31, 0x34, 0x49, 0x67,
8417 0x99, 0xc0, 0xb1, 0xa5, 0x70, 0x30, 0x30, 0x16,
8418 0x13, 0x09, 0x09, 0x16, 0x14, 0x5e, 0xca, 0xc5,
8419 0x40, 0x1d, 0x3e, 0x71, 0x6e, 0x6a, 0x66, 0x45,
8420 0x3f, 0x30, 0x3d, 0x61, 0x68, 0x44, 0x22, 0x1a,
8421 0x06, 0x00, 0x62, 0xb2, 0x78, 0x42, 0x5b, 0x74,
8422 0x9f, 0x77, 0x4d, 0x32, 0x2c, 0x2e, 0x35, 0x4b,
8423 0x1d, 0x16, 0x2b, 0x59, 0x6f, 0x74, 0x78, 0x73,
8424 0x6b, 0x6a, 0x6e, 0x75, 0x7c, 0x7a, 0x70, 0x67,
8425 0x79, 0x78, 0x77, 0x78, 0x7a, 0x7b, 0x7a, 0x79,
8426 0x84, 0x7d, 0x74, 0x6d, 0x6e, 0x74, 0x7e, 0x84,
8427 0x78, 0x70, 0x6a, 0x6d, 0x76, 0x7d, 0x7d, 0x79,
8428 0x6f, 0x6a, 0x65, 0x64, 0x64, 0x5e, 0x53, 0x4a,
8429 0x34, 0x3e, 0x2c, 0x3d, 0x74, 0x70, 0x5c, 0x7a,
8430 0x73, 0x3f, 0x45, 0x47, 0x52, 0x53, 0x34, 0x4a,
8431 0xb4, 0xd9, 0xa2, 0x9f, 0xc3, 0xb1, 0xaf, 0xb2,
8432 0xb3, 0xb7, 0xae, 0x84, 0x50, 0x38, 0x2c, 0x1a,
8433 0x1d, 0x26, 0x34, 0x44, 0x53, 0x5e, 0x64, 0x67,
8434 0x34, 0x58, 0x72, 0x69, 0x5d, 0x67, 0x7c, 0x8a,
8435 0x78, 0x5a, 0x62, 0x89, 0xbc, 0xf2, 0xd8, 0x7b,
8436 0x54, 0x71, 0x8f, 0x90, 0x76, 0x59, 0x4c, 0x4c,
8437 0x54, 0x61, 0x77, 0x87, 0x80, 0x64, 0x44, 0x31,
8438 0x3e, 0xa6, 0xca, 0xbc, 0xea, 0xff, 0xa9, 0x36,
8439 0x48, 0x63, 0x5a, 0x57, 0x62, 0x4a, 0x58, 0xa5,
8440 0x76, 0x5e, 0x85, 0xb7, 0xbc, 0xbd, 0x9f, 0x55,
8441 0x4c, 0x4a, 0x4b, 0x4f, 0x4f, 0x41, 0x28, 0x14,
8442 0xdb, 0xff, 0xff, 0xd4, 0x9a, 0x8e, 0x93, 0x90,
8443 0x21, 0x08, 0x21, 0x72, 0x90, 0x5f, 0x53, 0x86,
8444 0x67, 0xa3, 0xa8, 0x5b, 0x1d, 0x28, 0x46, 0x4c,
8445 0x70, 0x80, 0x91, 0x91, 0x7d, 0x69, 0x67, 0x70,
8446 0x92, 0x98, 0xb2, 0xd5, 0xdb, 0xb1, 0x74, 0x4a,
8447 0x4a, 0x3b, 0x3e, 0x55, 0x61, 0x62, 0x71, 0x8a,
8448 0x56, 0x5b, 0x46, 0x2d, 0x3f, 0x60, 0x4e, 0x1c,
8449 0x16, 0x3e, 0x45, 0x1d, 0x0c, 0x2b, 0x4b, 0x4f,
8450 0x49, 0x48, 0x45, 0x47, 0x5c, 0x8d, 0xce, 0xfc,
8451 0xcc, 0xcf, 0xdd, 0xb9, 0x5b, 0x2d, 0x55, 0x87,
8452 0x84, 0x5b, 0x84, 0x6c, 0x2a, 0x33, 0x52, 0x7b,
8453 0x69, 0x4c, 0x27, 0x24, 0x2d, 0x21, 0x48, 0x9f,
8454 0x28, 0x3e, 0x91, 0x9c, 0xa8, 0xa9, 0x4f, 0x2d,
8455 0x31, 0x45, 0x68, 0x8b, 0x9c, 0x91, 0x73, 0x5a,
8456 0x97, 0x99, 0x81, 0x52, 0x2f, 0x2b, 0x33, 0x35,
8457 0x21, 0x5e, 0x8b, 0x7c, 0x53, 0x37, 0x28, 0x1f,
8458 0x41, 0x40, 0x24, 0x21, 0x39, 0x2e, 0x29, 0x50,
8459 0x50, 0x36, 0x35, 0x50, 0x52, 0x3c, 0x3f, 0x5b,
8460 0xa5, 0x6f, 0x4c, 0x53, 0x57, 0x4c, 0x59, 0x78,
8461 0xaa, 0xa2, 0x30, 0x00, 0x06, 0x5f, 0xa7, 0x7a,
8462 0x44, 0x74, 0x5a, 0x4d, 0x63, 0x89, 0xc0, 0xc0,
8463 0x75, 0x70, 0x51, 0x4d, 0x58, 0x38, 0x38, 0x7a,
8464 0x58, 0x5c, 0x61, 0x6a, 0x73, 0x74, 0x66, 0x55,
8465 0x88, 0x4d, 0x47, 0x67, 0x5f, 0x40, 0x2b, 0x1c,
8466 0x1d, 0x24, 0x34, 0xe0, 0xff, 0xa0, 0x8e, 0xc3,
8467 0xff, 0xde, 0xae, 0x72, 0x70, 0x7f, 0x66, 0x6b,
8468 0x6c, 0x6e, 0x73, 0x7c, 0x81, 0x7d, 0x71, 0x66,
8469 0x81, 0x7d, 0x7b, 0x7d, 0x83, 0x85, 0x83, 0x7f,
8470 0x85, 0x83, 0x7e, 0x78, 0x72, 0x6e, 0x6a, 0x69,
8471 0x73, 0x6f, 0x6a, 0x6a, 0x6e, 0x71, 0x72, 0x72,
8472 0x74, 0x6f, 0x69, 0x68, 0x66, 0x60, 0x55, 0x4b,
8473 0x3e, 0x41, 0x4d, 0x47, 0x2e, 0x32, 0x5a, 0x7e,
8474 0x5f, 0x73, 0x92, 0x61, 0x49, 0x68, 0x6a, 0x82,
8475 0x5a, 0x6d, 0x5e, 0x87, 0x9a, 0x83, 0xb0, 0xdb,
8476 0x6d, 0x61, 0xa5, 0xc2, 0x75, 0x4f, 0x53, 0x2e,
8477 0x08, 0x23, 0x4c, 0x6f, 0x7e, 0x77, 0x64, 0x54,
8478 0x2b, 0x47, 0x70, 0x80, 0x59, 0x24, 0x1c, 0x35,
8479 0x47, 0x0d, 0x3f, 0xbc, 0xee, 0xd8, 0xb2, 0x8d,
8480 0x3b, 0x5a, 0x7f, 0x8e, 0x7c, 0x53, 0x29, 0x11,
8481 0x05, 0x47, 0x87, 0xa4, 0xb1, 0xab, 0x7d, 0x46,
8482 0x54, 0xb5, 0xb2, 0x70, 0x8d, 0xc6, 0x93, 0x32,
8483 0x33, 0x3e, 0x55, 0x6f, 0x60, 0x3d, 0x72, 0xe3,
8484 0xd2, 0x68, 0x60, 0x80, 0x7c, 0xb5, 0xd1, 0x81,
8485 0x4c, 0x46, 0x3e, 0x35, 0x2e, 0x28, 0x21, 0x1d,
8486 0x7c, 0x8b, 0x6f, 0x2c, 0x0b, 0x27, 0x4e, 0x5c,
8487 0x56, 0x60, 0x4b, 0x5d, 0x7f, 0x4d, 0x3b, 0x8e,
8488 0x7a, 0xca, 0xe3, 0x9d, 0x65, 0x70, 0x82, 0x76,
8489 0x69, 0x9f, 0xd6, 0xe2, 0xc4, 0x97, 0x6f, 0x59,
8490 0x4d, 0x4f, 0x71, 0x9a, 0x8f, 0x68, 0x71, 0x9e,
8491 0x6d, 0x50, 0x48, 0x56, 0x4e, 0x30, 0x2d, 0x44,
8492 0x3d, 0x46, 0x44, 0x3f, 0x4d, 0x67, 0x70, 0x66,
8493 0x62, 0x74, 0x7c, 0x73, 0x6b, 0x6b, 0x63, 0x56,
8494 0x65, 0x7c, 0x80, 0x53, 0x13, 0x00, 0x14, 0x3d,
8495 0x39, 0x04, 0x21, 0x3a, 0x0e, 0x30, 0x98, 0xc2,
8496 0x45, 0x39, 0x62, 0x9c, 0xe7, 0xd1, 0x5d, 0x48,
8497 0x56, 0x85, 0x7e, 0x7a, 0xb6, 0xc7, 0x84, 0x4b,
8498 0x73, 0xaf, 0xda, 0xa3, 0x4d, 0x28, 0x33, 0x55,
8499 0x8d, 0x7d, 0x6c, 0x68, 0x6e, 0x73, 0x6f, 0x68,
8500 0x57, 0x60, 0x75, 0x84, 0x79, 0x61, 0x5d, 0x6a,
8501 0x71, 0x2f, 0x12, 0x36, 0x4e, 0x33, 0x19, 0x1b,
8502 0x7a, 0xa5, 0x99, 0x7c, 0x87, 0x7b, 0x47, 0x2a,
8503 0x53, 0x3d, 0x26, 0x1d, 0x20, 0x30, 0x4b, 0x63,
8504 0x27, 0x34, 0x42, 0x40, 0x30, 0x2d, 0x48, 0x6a,
8505 0x20, 0x28, 0x30, 0x97, 0xe7, 0xf5, 0xff, 0xfb,
8506 0xb6, 0x7e, 0x67, 0x42, 0x50, 0x6b, 0x3f, 0x34,
8507 0x20, 0x44, 0x41, 0x3d, 0x4c, 0x39, 0x2f, 0x57,
8508 0x3d, 0x6f, 0x79, 0x44, 0x1c, 0x25, 0x2f, 0x24,
8509 0x4f, 0x52, 0x46, 0x4b, 0x63, 0x5f, 0x5a, 0x6e,
8510 0x8f, 0xab, 0x84, 0x5d, 0x4b, 0x6f, 0xd1, 0xf2,
8511 0xee, 0xd7, 0xde, 0x87, 0x57, 0x75, 0x70, 0x96,
8512 0x70, 0x6e, 0x6e, 0x73, 0x78, 0x77, 0x6f, 0x67,
8513 0x77, 0x71, 0x6e, 0x72, 0x7a, 0x7e, 0x7a, 0x75,
8514 0x6a, 0x70, 0x79, 0x80, 0x82, 0x7e, 0x77, 0x72,
8515 0x77, 0x77, 0x74, 0x6f, 0x69, 0x67, 0x6a, 0x6e,
8516 0x73, 0x6e, 0x69, 0x66, 0x65, 0x5e, 0x52, 0x48,
8517 0x57, 0x47, 0x78, 0xa9, 0x88, 0x5e, 0x66, 0x75,
8518 0x80, 0x6f, 0x6d, 0x41, 0x4f, 0x8f, 0x9a, 0xab,
8519 0x8d, 0x41, 0x23, 0x73, 0x6c, 0x23, 0x35, 0x4b,
8520 0x72, 0x29, 0x54, 0x95, 0x5a, 0x1d, 0x1f, 0x19,
8521 0x37, 0x2e, 0x22, 0x19, 0x18, 0x1e, 0x28, 0x2f,
8522 0x2b, 0x29, 0x35, 0x45, 0x43, 0x3e, 0x5a, 0x83,
8523 0x0b, 0x15, 0x79, 0xda, 0xc4, 0x81, 0x5e, 0x4c,
8524 0x17, 0x2c, 0x4f, 0x6f, 0x79, 0x63, 0x39, 0x18,
8525 0x44, 0x8e, 0xb1, 0x9d, 0xaa, 0xd5, 0xc4, 0x85,
8526 0x34, 0x6b, 0x6b, 0x51, 0x66, 0x76, 0x5a, 0x3d,
8527 0x38, 0x3a, 0x60, 0x70, 0x40, 0x21, 0x45, 0x76,
8528 0x8f, 0x50, 0x4f, 0x65, 0x61, 0x7b, 0x80, 0x44,
8529 0xa3, 0xaa, 0xac, 0x9c, 0x77, 0x47, 0x1b, 0x01,
8530 0x83, 0x5f, 0x4a, 0x4e, 0x43, 0x2b, 0x31, 0x4f,
8531 0x63, 0xc0, 0xac, 0x95, 0xd7, 0xb3, 0x47, 0x37,
8532 0x85, 0xa4, 0x8b, 0x44, 0x32, 0x56, 0x4f, 0x1c,
8533 0x70, 0x70, 0x69, 0x61, 0x61, 0x60, 0x4a, 0x2f,
8534 0x63, 0x64, 0x8c, 0xac, 0x7b, 0x39, 0x5e, 0xbe,
8535 0xb3, 0x87, 0x6e, 0x73, 0x65, 0x48, 0x4d, 0x6f,
8536 0xc8, 0xd2, 0xcf, 0xad, 0x77, 0x4a, 0x36, 0x35,
8537 0x64, 0x46, 0x3a, 0x4d, 0x5b, 0x5a, 0x64, 0x78,
8538 0x48, 0x34, 0x35, 0x63, 0xa2, 0xba, 0x9b, 0x71,
8539 0x60, 0x84, 0xce, 0xec, 0xa4, 0x43, 0x21, 0x2c,
8540 0x25, 0x00, 0x5e, 0x92, 0x7b, 0x83, 0x63, 0x34,
8541 0x47, 0x3e, 0x10, 0x0d, 0x3d, 0x42, 0x44, 0x77,
8542 0x6b, 0x65, 0x2e, 0x3b, 0x50, 0x59, 0x83, 0x72,
8543 0x6b, 0x64, 0x61, 0x66, 0x6d, 0x65, 0x4f, 0x3b,
8544 0x5c, 0x52, 0x62, 0x81, 0x80, 0x6b, 0x7a, 0xa2,
8545 0x81, 0x47, 0x22, 0x2a, 0x2d, 0x21, 0x31, 0x55,
8546 0x71, 0x7e, 0x68, 0x3e, 0x3a, 0x5e, 0x82, 0x91,
8547 0x46, 0x55, 0x4b, 0x30, 0x34, 0x56, 0x66, 0x5a,
8548 0xbe, 0xc9, 0xa7, 0x59, 0x23, 0x21, 0x2c, 0x2a,
8549 0xa9, 0xe3, 0xd0, 0xbb, 0xb1, 0xc5, 0xf8, 0xe2,
8550 0x97, 0x35, 0xbb, 0xa8, 0x52, 0x6b, 0x44, 0x61,
8551 0x46, 0x4f, 0x6c, 0x62, 0x3f, 0x53, 0x60, 0x34,
8552 0x4c, 0x86, 0x8e, 0x59, 0x4b, 0x6f, 0x6c, 0x3e,
8553 0x34, 0x5c, 0x3f, 0x1d, 0x39, 0x44, 0x4e, 0x83,
8554 0x4f, 0x44, 0xa3, 0x91, 0x7a, 0xe0, 0xd7, 0x7e,
8555 0x43, 0x3a, 0xb4, 0x95, 0x47, 0x69, 0x68, 0x7e,
8556 0x88, 0x82, 0x7c, 0x7c, 0x81, 0x84, 0x82, 0x7e,
8557 0x7e, 0x78, 0x74, 0x78, 0x82, 0x87, 0x82, 0x7c,
8558 0x67, 0x6e, 0x79, 0x83, 0x86, 0x83, 0x7d, 0x78,
8559 0x6f, 0x74, 0x78, 0x74, 0x6f, 0x6f, 0x78, 0x82,
8560 0x71, 0x6b, 0x66, 0x63, 0x61, 0x5a, 0x4e, 0x45,
8561 0x39, 0x3b, 0x43, 0x5a, 0x88, 0xac, 0x99, 0x69,
8562 0x68, 0x55, 0x69, 0x47, 0x18, 0x09, 0x14, 0x5d,
8563 0x66, 0x78, 0xaa, 0xda, 0x8b, 0x3e, 0x51, 0x39,
8564 0x3a, 0x69, 0xc0, 0xd0, 0x7f, 0x42, 0x29, 0x07,
8565 0x51, 0x62, 0x7a, 0x89, 0x86, 0x72, 0x56, 0x43,
8566 0x27, 0x2c, 0x3a, 0x4e, 0x5a, 0x56, 0x49, 0x40,
8567 0x5a, 0x67, 0x79, 0x5e, 0x35, 0x40, 0x3d, 0x05,
8568 0x38, 0x3c, 0x4d, 0x6a, 0x7d, 0x70, 0x45, 0x1f,
8569 0xd2, 0xff, 0xe0, 0x82, 0x7b, 0xcd, 0xe3, 0xaf,
8570 0x7b, 0x6e, 0x57, 0x57, 0x56, 0x2d, 0x21, 0x4d,
8571 0x34, 0x40, 0x64, 0x5b, 0x37, 0x4e, 0x59, 0x22,
8572 0x18, 0x35, 0x5a, 0x72, 0x77, 0x74, 0x73, 0x75,
8573 0x85, 0xad, 0xdd, 0xec, 0xc6, 0x78, 0x24, 0x00,
8574 0xb5, 0x8c, 0x5e, 0x4d, 0x5f, 0x7b, 0x8c, 0x8f,
8575 0x71, 0x8c, 0xbd, 0xf3, 0xee, 0x96, 0x4e, 0x4d,
8576 0x6c, 0x80, 0x6e, 0x3f, 0x3e, 0x6a, 0x7a, 0x65,
8577 0x4f, 0x39, 0x20, 0x36, 0x8e, 0xd6, 0xbd, 0x75,
8578 0x5f, 0x81, 0x88, 0x57, 0x1c, 0x14, 0x40, 0x6e,
8579 0x8d, 0x5b, 0x1d, 0x06, 0x29, 0x67, 0x91, 0x9e,
8580 0x88, 0xdc, 0xb4, 0x56, 0x5a, 0x6c, 0x5b, 0x61,
8581 0x8c, 0xc6, 0xa3, 0x2a, 0x0d, 0x6c, 0xaa, 0x98,
8582 0x4b, 0x86, 0x8e, 0x99, 0xc7, 0xa1, 0x4a, 0x30,
8583 0x5a, 0xbb, 0xcc, 0x9a, 0x76, 0x4e, 0x59, 0xa8,
8584 0xab, 0xb7, 0xc6, 0xb0, 0x63, 0x27, 0x46, 0x8e,
8585 0x6e, 0x8b, 0x92, 0x66, 0x27, 0x01, 0x00, 0x01,
8586 0x8b, 0x84, 0x7b, 0x5a, 0x56, 0x9b, 0xad, 0x65,
8587 0x3e, 0x66, 0x8c, 0x85, 0x78, 0x88, 0x7d, 0x49,
8588 0x66, 0xff, 0xb5, 0x5e, 0x90, 0x93, 0x89, 0x60,
8589 0x26, 0x2a, 0x45, 0x63, 0x5a, 0x34, 0x20, 0x27,
8590 0x2a, 0x37, 0x1c, 0x1c, 0x36, 0x15, 0x18, 0x6f,
8591 0x4f, 0x65, 0x5b, 0x49, 0x75, 0xb0, 0x91, 0x3e,
8592 0x09, 0x89, 0xc9, 0x89, 0x50, 0x6a, 0x8c, 0x87,
8593 0x8a, 0x84, 0x9e, 0xc4, 0xb3, 0x7d, 0x6c, 0x84,
8594 0x99, 0x63, 0x68, 0x94, 0x6e, 0x1c, 0x36, 0x9d,
8595 0x7c, 0x7c, 0x75, 0x67, 0x59, 0x55, 0x5f, 0x69,
8596 0x75, 0x7f, 0x63, 0x4c, 0x4b, 0x2d, 0x1d, 0x3e,
8597 0x4a, 0x58, 0x63, 0x62, 0x59, 0x5a, 0x69, 0x79,
8598 0x70, 0x6c, 0x69, 0x59, 0x36, 0x14, 0x0d, 0x1d,
8599 0x1d, 0x45, 0x4b, 0x4a, 0x6d, 0x83, 0x79, 0x74,
8600 0x84, 0x7c, 0x74, 0x71, 0x74, 0x75, 0x71, 0x6c,
8601 0x71, 0x74, 0x79, 0x7f, 0x83, 0x86, 0x87, 0x87,
8602 0x7c, 0x7e, 0x81, 0x82, 0x80, 0x7c, 0x78, 0x75,
8603 0x80, 0x7d, 0x79, 0x76, 0x75, 0x77, 0x7a, 0x7c,
8604 0x73, 0x69, 0x5d, 0x59, 0x5d, 0x62, 0x63, 0x62,
8605 0x4e, 0x42, 0x3a, 0x39, 0x71, 0xdc, 0xd7, 0x61,
8606 0x15, 0x12, 0x3e, 0x8c, 0xa9, 0x80, 0x50, 0x41,
8607 0x67, 0xa3, 0x90, 0x51, 0x49, 0x4e, 0x3e, 0x3b,
8608 0x3b, 0x90, 0xb1, 0x64, 0x0a, 0x03, 0x3b, 0x6a,
8609 0xb6, 0xa1, 0x98, 0x74, 0x4f, 0x70, 0x8c, 0x69,
8610 0x29, 0x67, 0x52, 0x31, 0x5b, 0x68, 0x4a, 0x4d,
8611 0x88, 0x73, 0x76, 0x51, 0x1d, 0x40, 0x56, 0x16,
8612 0x8a, 0x5d, 0x62, 0x6f, 0x48, 0x31, 0x42, 0x48,
8613 0x80, 0xbb, 0xa1, 0x63, 0x5a, 0x4f, 0x4a, 0x6e,
8614 0x4c, 0x4c, 0x53, 0x40, 0x26, 0x39, 0x41, 0x19,
8615 0x57, 0x65, 0x50, 0x2c, 0x3b, 0x6a, 0x68, 0x3e,
8616 0x51, 0x69, 0x6a, 0x4e, 0x41, 0x4f, 0x55, 0x4a,
8617 0x8e, 0xa0, 0x96, 0x7d, 0x9b, 0x6e, 0x09, 0x23,
8618 0x8c, 0x6b, 0x48, 0x41, 0x59, 0x7a, 0x90, 0x98,
8619 0x8c, 0x85, 0x7c, 0x80, 0x89, 0x8f, 0xac, 0xd8,
8620 0xfa, 0xe2, 0xac, 0x78, 0x77, 0xaa, 0xdf, 0xf7,
8621 0xbe, 0xd8, 0xc5, 0xa4, 0xcc, 0xff, 0xd5, 0x66,
8622 0x34, 0x66, 0x85, 0x96, 0xcd, 0xff, 0xd6, 0x7d,
8623 0x54, 0x6c, 0x8b, 0x84, 0x46, 0x1a, 0x48, 0x9a,
8624 0x92, 0x8e, 0x46, 0x04, 0x21, 0x5d, 0x70, 0x6f,
8625 0xfa, 0xff, 0xec, 0xca, 0xc5, 0xca, 0xa6, 0x6e,
8626 0x63, 0x68, 0x49, 0x4d, 0x78, 0x5e, 0x2b, 0x31,
8627 0x62, 0xa9, 0x82, 0x38, 0x65, 0xaa, 0xa1, 0x86,
8628 0x59, 0x8e, 0x9e, 0x6c, 0x3f, 0x4a, 0x6a, 0x79,
8629 0x37, 0x4c, 0x40, 0x40, 0xa1, 0xff, 0xe6, 0x6d,
8630 0x79, 0x5c, 0xa1, 0xf7, 0xd9, 0x90, 0x71, 0x68,
8631 0x3e, 0x4c, 0x5e, 0x73, 0x9a, 0xbc, 0x9c, 0x55,
8632 0xa9, 0xbd, 0x44, 0x44, 0x90, 0x70, 0x40, 0x09,
8633 0x0e, 0x20, 0x54, 0x7e, 0x64, 0x29, 0x21, 0x44,
8634 0x56, 0x3a, 0x28, 0x53, 0x83, 0x61, 0x23, 0x14,
8635 0x59, 0xa0, 0xc5, 0x9e, 0x70, 0x67, 0x63, 0x52,
8636 0x46, 0x4e, 0x4a, 0x30, 0x12, 0x0c, 0x25, 0x41,
8637 0x0f, 0x51, 0xb2, 0xf0, 0xe0, 0xa4, 0x7b, 0x76,
8638 0x99, 0x40, 0x19, 0x67, 0xc8, 0xd1, 0x8f, 0x52,
8639 0x21, 0x26, 0x32, 0x43, 0x54, 0x5e, 0x5f, 0x5c,
8640 0x89, 0x3d, 0x09, 0x3d, 0x7b, 0x60, 0x5d, 0xa7,
8641 0x4e, 0x40, 0x3c, 0x52, 0x6f, 0x76, 0x5e, 0x42,
8642 0x82, 0x46, 0x35, 0x25, 0x34, 0x4a, 0x48, 0x75,
8643 0x8f, 0x50, 0x35, 0x51, 0x5f, 0x5a, 0x6d, 0x91,
8644 0x7d, 0x78, 0x75, 0x78, 0x81, 0x86, 0x85, 0x82,
8645 0x6c, 0x6b, 0x6a, 0x6b, 0x70, 0x77, 0x7e, 0x83,
8646 0x7b, 0x7c, 0x7f, 0x80, 0x7e, 0x7b, 0x76, 0x73,
8647 0x6a, 0x69, 0x68, 0x69, 0x6c, 0x71, 0x77, 0x7b,
8648 0x6e, 0x63, 0x57, 0x52, 0x54, 0x58, 0x58, 0x56,
8649 0x4d, 0x4d, 0x68, 0x5f, 0x24, 0x15, 0x29, 0x24,
8650 0x6b, 0x4e, 0x41, 0x4d, 0x50, 0x54, 0x7d, 0xb3,
8651 0x18, 0x3b, 0x31, 0x17, 0x11, 0x00, 0x08, 0x3a,
8652 0x2d, 0x2d, 0x2f, 0x30, 0x2e, 0x39, 0x5c, 0x80,
8653 0x56, 0x50, 0x5f, 0x54, 0x41, 0x6c, 0x8c, 0x68,
8654 0x26, 0x3f, 0x46, 0x7e, 0xd8, 0xd0, 0x8f, 0x81,
8655 0x78, 0x75, 0x95, 0x9d, 0x8e, 0xad, 0xa9, 0x5c,
8656 0x1b, 0x3c, 0x66, 0x52, 0x23, 0x39, 0x61, 0x56,
8657 0x48, 0x38, 0x16, 0x20, 0x3f, 0x2e, 0x42, 0x9a,
8658 0x42, 0x19, 0x3d, 0x65, 0x2a, 0x05, 0x6d, 0xf3,
8659 0x7b, 0x71, 0x5c, 0x4b, 0x52, 0x62, 0x5c, 0x49,
8660 0x3a, 0x31, 0x2e, 0x37, 0x41, 0x44, 0x44, 0x46,
8661 0x97, 0xb0, 0xa3, 0x73, 0x81, 0x61, 0x07, 0x1b,
8662 0x9c, 0xa5, 0xb9, 0xcf, 0xd8, 0xc6, 0xa0, 0x81,
8663 0x76, 0x67, 0x63, 0x7f, 0xb1, 0xcd, 0xa8, 0x69,
8664 0x6f, 0x69, 0x74, 0x89, 0x8a, 0x76, 0x6c, 0x73,
8665 0x8c, 0xd7, 0xdf, 0xa5, 0xb1, 0xec, 0xc2, 0x51,
8666 0x77, 0x6b, 0x80, 0xb5, 0xd3, 0xc0, 0xa0, 0x91,
8667 0x91, 0x8e, 0xbb, 0xf1, 0xd0, 0x75, 0x56, 0x78,
8668 0x6d, 0x45, 0x2f, 0x2a, 0x38, 0x6d, 0x94, 0x89,
8669 0x5f, 0x39, 0x22, 0x27, 0x27, 0x26, 0x46, 0x74,
8670 0x90, 0x51, 0x26, 0x69, 0xca, 0xbf, 0x7c, 0x6c,
8671 0x64, 0x57, 0x2e, 0x39, 0x85, 0x9b, 0x69, 0x45,
8672 0x52, 0x71, 0x6e, 0x41, 0x29, 0x39, 0x46, 0x3f,
8673 0x48, 0x3c, 0x3f, 0x6a, 0xac, 0xcb, 0xa3, 0x68,
8674 0x43, 0x62, 0xa5, 0xb5, 0x81, 0x69, 0x60, 0x3a,
8675 0x4e, 0x4c, 0x40, 0x4c, 0x85, 0xb7, 0xb2, 0x94,
8676 0xc1, 0xad, 0x64, 0x49, 0x1c, 0x00, 0x1e, 0x41,
8677 0x4c, 0x16, 0x19, 0x62, 0x82, 0x57, 0x35, 0x3d,
8678 0x66, 0x58, 0x71, 0x87, 0x6d, 0x5b, 0x66, 0x6c,
8679 0x57, 0x57, 0x4e, 0x3e, 0x35, 0x30, 0x23, 0x12,
8680 0x38, 0x1f, 0x13, 0x27, 0x3d, 0x3b, 0x2a, 0x1d,
8681 0x3a, 0x87, 0xd4, 0xea, 0xe0, 0xd7, 0xd3, 0xcf,
8682 0x6e, 0x47, 0x56, 0x82, 0x60, 0x13, 0x20, 0x73,
8683 0x78, 0x68, 0x5c, 0x61, 0x68, 0x59, 0x32, 0x0f,
8684 0x38, 0x54, 0x58, 0x65, 0x7f, 0x70, 0x64, 0x86,
8685 0x60, 0x56, 0x43, 0x2d, 0x1f, 0x21, 0x2e, 0x3b,
8686 0x6d, 0x7e, 0x6e, 0x6d, 0xe7, 0xd8, 0x3e, 0x59,
8687 0x44, 0x16, 0x24, 0x59, 0x6d, 0x74, 0x74, 0x60,
8688 0x7b, 0x76, 0x72, 0x74, 0x79, 0x7a, 0x76, 0x70,
8689 0x64, 0x67, 0x6d, 0x74, 0x7b, 0x81, 0x85, 0x87,
8690 0x8a, 0x8b, 0x8e, 0x8f, 0x8d, 0x8a, 0x85, 0x82,
8691 0x88, 0x84, 0x7c, 0x73, 0x6d, 0x69, 0x68, 0x68,
8692 0x71, 0x65, 0x58, 0x50, 0x51, 0x52, 0x51, 0x4f,
8693 0x3f, 0x31, 0x61, 0x8c, 0x5e, 0x1f, 0x16, 0x21,
8694 0x3d, 0x38, 0x45, 0x5d, 0x58, 0x33, 0x17, 0x12,
8695 0x43, 0x81, 0xc8, 0xff, 0xf6, 0x84, 0x32, 0x44,
8696 0x4e, 0x21, 0x2b, 0x7c, 0xb2, 0x95, 0x5d, 0x42,
8697 0x57, 0x47, 0x4b, 0x44, 0x49, 0x9c, 0xe7, 0xdf,
8698 0xb8, 0x90, 0x67, 0x7a, 0x91, 0x54, 0x11, 0x14,
8699 0x45, 0x33, 0x36, 0x35, 0x38, 0x63, 0x76, 0x4f,
8700 0x3a, 0x31, 0x39, 0x32, 0x2a, 0x4c, 0x52, 0x1c,
8701 0x11, 0x48, 0x4c, 0x25, 0x10, 0x12, 0x3e, 0x83,
8702 0x4b, 0x00, 0x00, 0x47, 0x8f, 0xb7, 0xc2, 0xb1,
8703 0x4a, 0x35, 0x28, 0x2d, 0x34, 0x31, 0x2e, 0x31,
8704 0x50, 0x34, 0x34, 0x58, 0x67, 0x4e, 0x39, 0x3b,
8705 0xa9, 0xca, 0xb9, 0x69, 0x61, 0x54, 0x0c, 0x14,
8706 0x5f, 0x64, 0x6d, 0x77, 0x7a, 0x71, 0x61, 0x54,
8707 0x90, 0xbc, 0xe2, 0xc1, 0x89, 0x8b, 0x93, 0x72,
8708 0x38, 0x48, 0x8e, 0xe2, 0xe5, 0x96, 0x54, 0x46,
8709 0x00, 0x36, 0x51, 0x37, 0x43, 0x79, 0x7b, 0x4b,
8710 0xa3, 0x6b, 0x59, 0x69, 0x41, 0x00, 0x00, 0x44,
8711 0x8e, 0x8c, 0xb0, 0xd9, 0xba, 0x61, 0x2a, 0x2b,
8712 0x40, 0x36, 0x79, 0x9f, 0x6b, 0x5b, 0x6b, 0x50,
8713 0x50, 0x3c, 0x43, 0x63, 0x68, 0x58, 0x67, 0x8e,
8714 0x48, 0x40, 0x57, 0x7b, 0x62, 0x1f, 0x2c, 0x7c,
8715 0xb9, 0x8b, 0x6d, 0x84, 0x99, 0x7c, 0x5d, 0x61,
8716 0x6a, 0x44, 0x34, 0x40, 0x3c, 0x23, 0x22, 0x39,
8717 0x2d, 0x3a, 0x63, 0x85, 0x6e, 0x38, 0x30, 0x4e,
8718 0x6d, 0x3a, 0x49, 0x64, 0x38, 0x19, 0x35, 0x4d,
8719 0x2b, 0x63, 0x85, 0x97, 0xa5, 0x87, 0x56, 0x47,
8720 0x77, 0x5a, 0x6c, 0x9e, 0xac, 0xcd, 0xea, 0xba,
8721 0x39, 0x1e, 0x33, 0x62, 0x4e, 0x13, 0x20, 0x65,
8722 0x79, 0x64, 0x9d, 0xcf, 0xb9, 0xbc, 0xc0, 0x90,
8723 0x84, 0x74, 0x6d, 0x73, 0x74, 0x6a, 0x64, 0x67,
8724 0x21, 0x2c, 0x22, 0x19, 0x3d, 0x67, 0x4a, 0x09,
8725 0x8f, 0x74, 0x42, 0x2b, 0x55, 0x81, 0x58, 0x07,
8726 0x3f, 0x20, 0x2c, 0x59, 0x56, 0x30, 0x44, 0x84,
8727 0x5e, 0x43, 0x30, 0x42, 0x67, 0x75, 0x5d, 0x3d,
8728 0x35, 0x77, 0x74, 0x43, 0x3d, 0x48, 0x56, 0x74,
8729 0x56, 0x63, 0x69, 0x60, 0x56, 0x63, 0x8a, 0xad,
8730 0x76, 0x55, 0x38, 0x1f, 0x4c, 0x7d, 0x6b, 0x6d,
8731 0x57, 0x2b, 0x33, 0x65, 0x79, 0x74, 0x75, 0x77,
8732 0x65, 0x63, 0x65, 0x6e, 0x79, 0x7e, 0x7c, 0x77,
8733 0x78, 0x80, 0x89, 0x8d, 0x86, 0x76, 0x62, 0x55,
8734 0x62, 0x64, 0x66, 0x67, 0x66, 0x62, 0x5d, 0x5b,
8735 0x4e, 0x50, 0x55, 0x5d, 0x69, 0x76, 0x81, 0x88,
8736 0x7a, 0x6e, 0x5f, 0x57, 0x56, 0x56, 0x54, 0x51,
8737 0x36, 0x2f, 0x41, 0x47, 0x30, 0x3f, 0x84, 0xbc,
8738 0xb9, 0xab, 0xb6, 0xe1, 0xff, 0xe2, 0x93, 0x50,
8739 0x88, 0x98, 0xa7, 0xce, 0xe2, 0xa9, 0x83, 0xa8,
8740 0x96, 0x67, 0x52, 0x73, 0x92, 0x84, 0x60, 0x4b,
8741 0x3d, 0x4a, 0x72, 0x75, 0x58, 0x62, 0x5a, 0x1b,
8742 0x36, 0x2d, 0x24, 0x26, 0x24, 0x1c, 0x35, 0x68,
8743 0x29, 0x32, 0x44, 0x50, 0x5e, 0x8a, 0xba, 0xcb,
8744 0x84, 0x32, 0x21, 0x4f, 0x6b, 0x7e, 0x85, 0x70,
8745 0x5e, 0x96, 0x95, 0x4f, 0x26, 0x42, 0x7c, 0xa5,
8746 0x93, 0xc0, 0xf0, 0xdd, 0xa6, 0x95, 0x78, 0x36,
8747 0x46, 0x48, 0x4a, 0x50, 0x5c, 0x68, 0x6e, 0x6e,
8748 0x69, 0x54, 0x4a, 0x54, 0x5c, 0x5c, 0x69, 0x7e,
8749 0xbf, 0xe0, 0xcc, 0x68, 0x4f, 0x53, 0x1a, 0x15,
8750 0x5d, 0x69, 0x7b, 0x8c, 0x9c, 0xab, 0xba, 0xc3,
8751 0xb5, 0xbb, 0xc5, 0x8b, 0x3d, 0x54, 0x81, 0x67,
8752 0x86, 0x65, 0x66, 0x8a, 0x8f, 0x74, 0x7a, 0x9e,
8753 0xc2, 0xb9, 0xa4, 0x83, 0x5d, 0x47, 0x4b, 0x5a,
8754 0x48, 0x2f, 0x18, 0x1a, 0x31, 0x41, 0x37, 0x24,
8755 0x57, 0x53, 0x5e, 0x7f, 0x9d, 0x9d, 0x82, 0x68,
8756 0x55, 0x4a, 0x8b, 0xac, 0x6e, 0x52, 0x57, 0x34,
8757 0x22, 0x82, 0xd2, 0xc0, 0x74, 0x49, 0x60, 0x88,
8758 0x3c, 0x32, 0x51, 0x65, 0x2f, 0x11, 0x71, 0xf4,
8759 0xe1, 0xc7, 0x8f, 0x4c, 0x3b, 0x68, 0x86, 0x77,
8760 0x4c, 0x25, 0x19, 0x38, 0x4b, 0x43, 0x47, 0x5c,
8761 0x4a, 0x7c, 0x95, 0x81, 0x72, 0x77, 0x69, 0x4a,
8762 0x74, 0x51, 0x56, 0x5d, 0x4d, 0x58, 0x5d, 0x37,
8763 0x45, 0x5c, 0x46, 0x43, 0x72, 0x7b, 0x86, 0xbf,
8764 0x73, 0x36, 0x5d, 0x81, 0x75, 0xab, 0xe5, 0xe1,
8765 0x61, 0x6a, 0x97, 0xbd, 0x96, 0x51, 0x58, 0x95,
8766 0x9a, 0xb5, 0xf2, 0xd0, 0x4b, 0x1d, 0x3c, 0x36,
8767 0x18, 0x56, 0x98, 0x9f, 0x71, 0x58, 0x85, 0xc7,
8768 0xb4, 0xa5, 0x7a, 0x4e, 0x50, 0x70, 0x78, 0x66,
8769 0x00, 0x35, 0x56, 0x3f, 0x2f, 0x40, 0x44, 0x32,
8770 0x4f, 0xd8, 0xff, 0xbb, 0x6f, 0x8a, 0xb6, 0xb6,
8771 0xd2, 0x9d, 0x64, 0x4f, 0x5b, 0x60, 0x4b, 0x30,
8772 0x33, 0x2e, 0x1f, 0x38, 0x5f, 0x4e, 0x46, 0x76,
8773 0x56, 0x5c, 0x74, 0x9c, 0xbc, 0xb8, 0x93, 0x6e,
8774 0x3e, 0x71, 0x5f, 0xa0, 0xff, 0xd5, 0x78, 0x52,
8775 0x00, 0x0c, 0x10, 0x25, 0x5d, 0x80, 0x77, 0x6a,
8776 0x86, 0x81, 0x7e, 0x7f, 0x7f, 0x79, 0x6d, 0x62,
8777 0x5d, 0x67, 0x75, 0x7f, 0x7f, 0x75, 0x66, 0x5c,
8778 0x6c, 0x6e, 0x70, 0x71, 0x6f, 0x6c, 0x67, 0x64,
8779 0x5e, 0x5d, 0x5d, 0x5e, 0x62, 0x68, 0x6f, 0x73,
8780 0x7b, 0x6f, 0x61, 0x58, 0x57, 0x58, 0x56, 0x53,
8781 0x4f, 0x42, 0x4a, 0x70, 0xa5, 0xc6, 0xaa, 0x70,
8782 0x5f, 0x64, 0x7a, 0xa7, 0xd6, 0xde, 0xb0, 0x7b,
8783 0x99, 0xac, 0xab, 0xbd, 0xd2, 0x97, 0x3f, 0x23,
8784 0x3e, 0x5a, 0x5c, 0x36, 0x19, 0x1f, 0x2a, 0x28,
8785 0x36, 0x36, 0x4d, 0x44, 0x29, 0x44, 0x50, 0x20,
8786 0x3f, 0x52, 0x54, 0x2b, 0x04, 0x0f, 0x27, 0x27,
8787 0xca, 0xdb, 0xd4, 0xaa, 0x71, 0x43, 0x46, 0x6a,
8788 0x4c, 0x14, 0x10, 0x22, 0x15, 0x22, 0x54, 0x6d,
8789 0x29, 0x20, 0x5c, 0xc6, 0xfb, 0xeb, 0xca, 0xb7,
8790 0xa1, 0x9d, 0xca, 0xdf, 0x9f, 0x5a, 0x43, 0x38,
8791 0x24, 0x48, 0x53, 0x3e, 0x44, 0x66, 0x6d, 0x55,
8792 0x4c, 0x54, 0x44, 0x23, 0x25, 0x62, 0xb2, 0xe4,
8793 0xcd, 0xdc, 0xc9, 0x6a, 0x4d, 0x5b, 0x2b, 0x1a,
8794 0x57, 0x70, 0x8f, 0xa0, 0xa3, 0xa2, 0xa5, 0xab,
8795 0x3e, 0x07, 0x22, 0x5c, 0x86, 0xdc, 0xff, 0xb6,
8796 0xd7, 0x9d, 0x61, 0x46, 0x4d, 0x74, 0xba, 0xf9,
8797 0xdc, 0xa5, 0x79, 0x63, 0x39, 0x0a, 0x10, 0x3b,
8798 0x8b, 0x68, 0x4c, 0x55, 0x70, 0x7b, 0x6d, 0x5b,
8799 0x9d, 0x7b, 0x52, 0x47, 0x5f, 0x6c, 0x49, 0x19,
8800 0x24, 0x08, 0x05, 0x11, 0x26, 0x58, 0x77, 0x64,
8801 0x3e, 0x8d, 0xa2, 0x52, 0x08, 0x0e, 0x32, 0x40,
8802 0x6b, 0x28, 0x20, 0x38, 0x26, 0x21, 0x46, 0x61,
8803 0xae, 0x61, 0x38, 0x37, 0x38, 0x51, 0x66, 0x56,
8804 0x48, 0x54, 0x47, 0x2b, 0x33, 0x54, 0x57, 0x3d,
8805 0x40, 0x44, 0x4d, 0x4f, 0x3b, 0x22, 0x1d, 0x29,
8806 0x58, 0x72, 0x74, 0x41, 0x3f, 0x96, 0x98, 0x27,
8807 0x45, 0x4d, 0x2c, 0x51, 0xb8, 0xbb, 0x98, 0xc0,
8808 0x9d, 0x23, 0x4e, 0x9d, 0xa7, 0x97, 0x64, 0x50,
8809 0x82, 0x8f, 0xbb, 0xef, 0xf8, 0xce, 0x9d, 0x86,
8810 0x6e, 0x58, 0x4e, 0x44, 0x45, 0x64, 0x67, 0x3c,
8811 0x77, 0x6e, 0x5b, 0x4d, 0x56, 0x71, 0x84, 0x89,
8812 0x99, 0x60, 0x49, 0x5e, 0x53, 0x2e, 0x3d, 0x75,
8813 0x41, 0xa5, 0xe8, 0xb4, 0x47, 0x15, 0x36, 0x69,
8814 0x85, 0x7d, 0x40, 0x00, 0x10, 0x5f, 0x71, 0x46,
8815 0xe1, 0xb2, 0x79, 0x5c, 0x60, 0x6c, 0x6d, 0x67,
8816 0x02, 0x42, 0x5b, 0x5a, 0x67, 0x59, 0x46, 0x58,
8817 0x5a, 0x68, 0x7d, 0x8c, 0x88, 0x6c, 0x44, 0x26,
8818 0x7e, 0x78, 0x8a, 0xba, 0x61, 0x16, 0x5d, 0x61,
8819 0x7a, 0xec, 0xfd, 0xa5, 0x73, 0x76, 0x79, 0x78,
8820 0x70, 0x6f, 0x72, 0x79, 0x7f, 0x7d, 0x73, 0x69,
8821 0x77, 0x77, 0x77, 0x76, 0x74, 0x72, 0x70, 0x6f,
8822 0x76, 0x78, 0x7a, 0x7c, 0x7a, 0x76, 0x72, 0x6f,
8823 0x70, 0x6e, 0x6a, 0x68, 0x68, 0x6a, 0x6d, 0x70,
8824 0x74, 0x69, 0x5b, 0x54, 0x54, 0x56, 0x55, 0x53,
8825 0x3b, 0x3b, 0x54, 0x88, 0xb7, 0xb0, 0x69, 0x1e,
8826 0x2c, 0x6f, 0xb1, 0xc5, 0xc1, 0xb8, 0xa5, 0x8f,
8827 0x7a, 0x7b, 0x5d, 0x5a, 0x79, 0x67, 0x41, 0x44,
8828 0x6c, 0xbf, 0xe3, 0xa4, 0x57, 0x40, 0x43, 0x3e,
8829 0x59, 0x72, 0xab, 0xb7, 0x91, 0x83, 0x5e, 0x0b,
8830 0x68, 0x5a, 0x46, 0x1a, 0x04, 0x38, 0x57, 0x2e,
8831 0x25, 0x76, 0xc2, 0xe8, 0xcf, 0x66, 0x15, 0x19,
8832 0xe1, 0xbd, 0x91, 0x4a, 0x0b, 0x12, 0x19, 0x00,
8833 0x46, 0x14, 0x0b, 0x25, 0x3b, 0x60, 0x7b, 0x6e,
8834 0x9b, 0x86, 0xae, 0xcb, 0x82, 0x32, 0x30, 0x4c,
8835 0x3d, 0x6e, 0x78, 0x50, 0x45, 0x62, 0x61, 0x3e,
8836 0x2d, 0x59, 0x67, 0x47, 0x3c, 0x6e, 0xb0, 0xd4,
8837 0xc5, 0xb6, 0xa7, 0x65, 0x53, 0x62, 0x31, 0x17,
8838 0x80, 0x84, 0x7e, 0x69, 0x53, 0x51, 0x66, 0x7c,
8839 0x9d, 0x67, 0x95, 0xb9, 0x86, 0x9c, 0xd8, 0xc4,
8840 0x68, 0x65, 0x4e, 0x33, 0x3c, 0x65, 0x88, 0x92,
8841 0x39, 0x25, 0x1f, 0x34, 0x4e, 0x62, 0x7c, 0x95,
8842 0x4d, 0x45, 0x55, 0x75, 0x83, 0x8f, 0xc1, 0xfd,
8843 0x84, 0x86, 0x8b, 0x83, 0x61, 0x40, 0x44, 0x5e,
8844 0x48, 0x5f, 0x41, 0x2a, 0x66, 0xb0, 0xc5, 0xc0,
8845 0x91, 0x74, 0x37, 0x14, 0x3c, 0x69, 0x34, 0x00,
8846 0x27, 0x1c, 0x47, 0x5c, 0x32, 0x36, 0x60, 0x61,
8847 0x85, 0x17, 0x23, 0x82, 0x89, 0x60, 0x55, 0x4f,
8848 0x60, 0x72, 0x64, 0x37, 0x25, 0x36, 0x38, 0x24,
8849 0x61, 0x3a, 0x49, 0x76, 0x59, 0x16, 0x36, 0x98,
8850 0x75, 0x35, 0x3d, 0x66, 0x59, 0x51, 0x6f, 0x7f,
8851 0xd7, 0xcc, 0x81, 0x7f, 0xc6, 0x9a, 0x56, 0x83,
8852 0xc2, 0x7c, 0x97, 0x6d, 0x1f, 0x00, 0x00, 0x31,
8853 0x31, 0x63, 0x94, 0xaa, 0xb3, 0xb6, 0xa1, 0x82,
8854 0x27, 0x81, 0xb0, 0xa4, 0x99, 0x86, 0x6c, 0x65,
8855 0x2e, 0x25, 0x0d, 0x12, 0x5c, 0xb2, 0xbb, 0x8e,
8856 0x6f, 0x37, 0x33, 0x67, 0x6b, 0x3c, 0x3b, 0x6d,
8857 0x60, 0x3a, 0x21, 0x2c, 0x40, 0x43, 0x41, 0x45,
8858 0x09, 0x00, 0x2c, 0xb6, 0xff, 0xe9, 0x98, 0x6b,
8859 0x7b, 0x66, 0x49, 0x36, 0x34, 0x3e, 0x4b, 0x54,
8860 0x44, 0xbc, 0xc5, 0x62, 0x39, 0x4e, 0x61, 0x6d,
8861 0x39, 0x54, 0x6e, 0x6c, 0x58, 0x50, 0x61, 0x77,
8862 0x21, 0x3f, 0x39, 0x43, 0x24, 0x09, 0x64, 0xb5,
8863 0xff, 0xdb, 0x9a, 0x68, 0x58, 0x5d, 0x6b, 0x7b,
8864 0x6d, 0x6d, 0x6f, 0x74, 0x77, 0x71, 0x63, 0x57,
8865 0x76, 0x75, 0x75, 0x77, 0x7c, 0x84, 0x8c, 0x91,
8866 0x75, 0x77, 0x79, 0x7a, 0x79, 0x75, 0x71, 0x6e,
8867 0x68, 0x65, 0x61, 0x5e, 0x5d, 0x5f, 0x62, 0x64,
8868 0x73, 0x69, 0x5c, 0x57, 0x59, 0x5d, 0x5e, 0x5c,
8869 0x4b, 0x3c, 0x3c, 0x56, 0x6c, 0x61, 0x46, 0x38,
8870 0x4a, 0x8b, 0xad, 0x89, 0x5b, 0x56, 0x65, 0x6a,
8871 0x9d, 0x8f, 0x73, 0x70, 0x67, 0x30, 0x2e, 0x79,
8872 0x9b, 0xb5, 0xba, 0x8e, 0x53, 0x34, 0x39, 0x46,
8873 0x62, 0x61, 0x77, 0x74, 0x66, 0x92, 0xb0, 0x8b,
8874 0x42, 0x23, 0x31, 0x3a, 0x32, 0x6a, 0xa8, 0xa0,
8875 0xa0, 0x9c, 0x81, 0x92, 0xc1, 0xb1, 0xac, 0xe9,
8876 0xe8, 0xd6, 0xd2, 0xc3, 0xb9, 0xdc, 0xe0, 0xa9,
8877 0x26, 0x2f, 0x3e, 0x1f, 0x09, 0x58, 0xa5, 0x98,
8878 0x5d, 0x4a, 0x5a, 0x65, 0x47, 0x36, 0x2f, 0x17,
8879 0x46, 0x6a, 0x77, 0x5e, 0x4b, 0x4e, 0x4b, 0x3b,
8880 0x2a, 0x4c, 0x69, 0x69, 0x5b, 0x5f, 0x77, 0x8c,
8881 0xab, 0x7b, 0x72, 0x56, 0x56, 0x60, 0x28, 0x09,
8882 0x8f, 0xab, 0xc8, 0xc9, 0xb2, 0x9c, 0x96, 0x9a,
8883 0x99, 0x54, 0x8e, 0xc2, 0x78, 0x5b, 0x72, 0x4e,
8884 0x00, 0x20, 0x39, 0x2d, 0x37, 0x53, 0x46, 0x1c,
8885 0x45, 0x4d, 0x46, 0x3f, 0x57, 0x78, 0x72, 0x51,
8886 0x12, 0x58, 0x74, 0x51, 0x50, 0x88, 0xa6, 0x95,
8887 0x55, 0x1d, 0x19, 0x55, 0x6d, 0x41, 0x1d, 0x22,
8888 0x2d, 0x96, 0x8e, 0x4a, 0x57, 0x60, 0x3e, 0x36,
8889 0x2d, 0x57, 0x6e, 0x65, 0x6f, 0x9b, 0xbf, 0xc6,
8890 0x91, 0x5f, 0x5a, 0x56, 0x40, 0x6b, 0x8e, 0x66,
8891 0x4b, 0x1e, 0x39, 0x5c, 0x48, 0x4f, 0x58, 0x2d,
8892 0x54, 0x41, 0x41, 0x4b, 0x39, 0x1d, 0x2d, 0x57,
8893 0x6e, 0x59, 0x41, 0x32, 0x25, 0x21, 0x30, 0x44,
8894 0x47, 0x40, 0x6d, 0x88, 0x67, 0x64, 0x84, 0x89,
8895 0x96, 0xd7, 0xdc, 0xf9, 0xff, 0xaf, 0x3f, 0x68,
8896 0xa5, 0x76, 0x78, 0x3f, 0x60, 0xa9, 0x71, 0x68,
8897 0x72, 0x62, 0x45, 0x53, 0xaf, 0xff, 0xe7, 0x90,
8898 0x57, 0xc7, 0xd7, 0x9c, 0x7d, 0x4a, 0x1a, 0x27,
8899 0x00, 0x87, 0xf7, 0xc4, 0x5f, 0x3e, 0x48, 0x4b,
8900 0x89, 0x58, 0x22, 0x0b, 0x11, 0x1e, 0x26, 0x2b,
8901 0x2b, 0x10, 0x18, 0x43, 0x58, 0x58, 0x77, 0xab,
8902 0x77, 0x52, 0x34, 0x25, 0x0b, 0x00, 0x2a, 0x6a,
8903 0x49, 0x4b, 0x48, 0x3e, 0x35, 0x36, 0x42, 0x4f,
8904 0x8f, 0xc1, 0xc3, 0xaa, 0x9f, 0x7c, 0x5a, 0x65,
8905 0x24, 0x25, 0x2f, 0x45, 0x58, 0x57, 0x40, 0x2a,
8906 0x59, 0x5e, 0x5d, 0x42, 0x35, 0x75, 0xd4, 0xfd,
8907 0xf3, 0xba, 0x94, 0x7e, 0x68, 0x6e, 0x7a, 0x6d,
8908 0x67, 0x69, 0x70, 0x7b, 0x84, 0x83, 0x78, 0x6e,
8909 0x78, 0x79, 0x7a, 0x7b, 0x7a, 0x77, 0x74, 0x72,
8910 0x6b, 0x6d, 0x6f, 0x70, 0x6f, 0x6b, 0x67, 0x64,
8911 0x6e, 0x6b, 0x68, 0x67, 0x67, 0x6a, 0x6e, 0x71,
8912 0x79, 0x6f, 0x64, 0x60, 0x64, 0x69, 0x6a, 0x69,
8913 0x63, 0x51, 0x3f, 0x41, 0x45, 0x3b, 0x38, 0x47,
8914 0x6b, 0x9b, 0xab, 0x85, 0x67, 0x6f, 0x74, 0x68,
8915 0x67, 0x5d, 0x65, 0x85, 0x67, 0x0a, 0x25, 0xb3,
8916 0x73, 0x71, 0x97, 0xd1, 0xd4, 0x9d, 0x70, 0x69,
8917 0x6a, 0x63, 0x70, 0x65, 0x53, 0x80, 0xa2, 0x7f,
8918 0x3d, 0x3c, 0x94, 0xcd, 0x93, 0x75, 0x9d, 0xae,
8919 0xe3, 0xc6, 0x93, 0xac, 0xe5, 0xad, 0x59, 0x5f,
8920 0x7d, 0x78, 0xa7, 0xb9, 0x78, 0x47, 0x54, 0x63,
8921 0x77, 0x32, 0x2e, 0x3a, 0x19, 0x21, 0x4a, 0x4c,
8922 0x46, 0x24, 0x2c, 0x3c, 0x2f, 0x3a, 0x5f, 0x6b,
8923 0x32, 0x42, 0x56, 0x5b, 0x4b, 0x3a, 0x3b, 0x47,
8924 0x28, 0x19, 0x1a, 0x2c, 0x30, 0x32, 0x55, 0x83,
8925 0x94, 0x4f, 0x49, 0x48, 0x55, 0x5b, 0x1d, 0x00,
8926 0x46, 0x6c, 0xa1, 0xc4, 0xc1, 0x9b, 0x67, 0x43,
8927 0x2f, 0x65, 0xa2, 0xb6, 0xa0, 0x84, 0x7d, 0x84,
8928 0x4f, 0x4c, 0x49, 0x49, 0x4a, 0x4a, 0x48, 0x45,
8929 0x65, 0x92, 0x9c, 0x76, 0x64, 0x70, 0x66, 0x43,
8930 0x80, 0x63, 0x1c, 0x1b, 0x80, 0xb5, 0x7c, 0x3d,
8931 0x09, 0x2b, 0x38, 0x25, 0x1e, 0x31, 0x3b, 0x32,
8932 0x37, 0x78, 0x9e, 0x83, 0x5f, 0x5a, 0x5c, 0x53,
8933 0x63, 0x6e, 0x77, 0x76, 0x73, 0x7b, 0x91, 0xa5,
8934 0x96, 0x6e, 0x52, 0x48, 0x30, 0x1f, 0x49, 0x8b,
8935 0x24, 0x59, 0x3d, 0x11, 0x2b, 0x36, 0x2f, 0x4b,
8936 0x23, 0x40, 0x5f, 0x88, 0xc6, 0xdb, 0x8a, 0x1d,
8937 0x76, 0x2e, 0x1d, 0x14, 0x4e, 0x8e, 0x66, 0x5b,
8938 0x6e, 0xa5, 0x7e, 0x58, 0x97, 0xb7, 0x99, 0x97,
8939 0x9d, 0x9a, 0x64, 0x24, 0x39, 0x81, 0x88, 0x53,
8940 0x45, 0x8e, 0xb0, 0xa4, 0x80, 0x45, 0x5c, 0xc5,
8941 0xd1, 0x85, 0x96, 0xc8, 0xa8, 0x8b, 0x93, 0x8b,
8942 0x71, 0xa7, 0x91, 0x2a, 0x00, 0x26, 0x4b, 0x3e,
8943 0x8b, 0xc8, 0xf5, 0xeb, 0xc9, 0xac, 0x8b, 0x6b,
8944 0xa3, 0xaa, 0x8f, 0x61, 0x5c, 0x72, 0x60, 0x32,
8945 0x2f, 0x76, 0x6d, 0x43, 0x57, 0x6e, 0x73, 0x8e,
8946 0xb8, 0xb5, 0x88, 0x77, 0x7a, 0x37, 0x0b, 0x3c,
8947 0x59, 0x37, 0x2c, 0x45, 0x56, 0x4d, 0x48, 0x50,
8948 0x74, 0x72, 0x5d, 0x70, 0x92, 0x68, 0x40, 0x63,
8949 0x55, 0x33, 0x45, 0x77, 0x64, 0x1b, 0x0e, 0x3f,
8950 0x47, 0x2d, 0x20, 0x2e, 0x2c, 0x1f, 0x59, 0xc3,
8951 0xb8, 0x97, 0x7c, 0x7b, 0x80, 0x7d, 0x7d, 0x84,
8952 0x86, 0x83, 0x7f, 0x7b, 0x79, 0x78, 0x78, 0x78,
8953 0x85, 0x7e, 0x77, 0x75, 0x76, 0x74, 0x6c, 0x65,
8954 0x6d, 0x6e, 0x70, 0x73, 0x76, 0x78, 0x7a, 0x7b,
8955 0x77, 0x6e, 0x68, 0x6c, 0x77, 0x7d, 0x7a, 0x74,
8956 0x79, 0x71, 0x67, 0x64, 0x65, 0x66, 0x63, 0x5f,
8957 0x58, 0x2e, 0x3a, 0x7e, 0x95, 0x66, 0x43, 0x4a,
8958 0x1b, 0x66, 0x84, 0x5c, 0x50, 0x82, 0xa9, 0xa4,
8959 0x81, 0x55, 0x77, 0xa6, 0x79, 0x41, 0x49, 0x5f,
8960 0xb6, 0xf0, 0xeb, 0xcb, 0xcf, 0xb5, 0x7a, 0x61,
8961 0x5b, 0x44, 0x28, 0x23, 0x3b, 0x56, 0x5b, 0x51,
8962 0x05, 0x15, 0x5d, 0xa7, 0x8c, 0x37, 0x2a, 0x5f,
8963 0x19, 0x4f, 0x99, 0xc5, 0xb7, 0x88, 0x61, 0x53,
8964 0xa5, 0x7d, 0x73, 0x81, 0x65, 0x2f, 0x32, 0x62,
8965 0x30, 0x3a, 0x43, 0x43, 0x38, 0x27, 0x17, 0x0e,
8966 0x10, 0x13, 0x37, 0x47, 0x2c, 0x28, 0x2f, 0x1e,
8967 0x3f, 0x10, 0x32, 0x6b, 0x61, 0x59, 0x5e, 0x46,
8968 0x45, 0x22, 0x0e, 0x16, 0x18, 0x15, 0x2c, 0x51,
8969 0x49, 0x40, 0x40, 0x26, 0x33, 0x2e, 0x00, 0x01,
8970 0x5d, 0x61, 0x60, 0x55, 0x4b, 0x52, 0x69, 0x7e,
8971 0x99, 0x7d, 0x5a, 0x45, 0x45, 0x4f, 0x57, 0x5a,
8972 0x45, 0x3b, 0x39, 0x49, 0x63, 0x72, 0x70, 0x66,
8973 0x94, 0x96, 0x62, 0x0d, 0x00, 0x47, 0xaf, 0xe9,
8974 0xff, 0xf6, 0xd1, 0xd1, 0xdb, 0xa7, 0x76, 0x84,
8975 0x5c, 0x74, 0x5f, 0x22, 0x12, 0x3e, 0x5d, 0x57,
8976 0x0a, 0x0d, 0x24, 0x3c, 0x37, 0x36, 0x6b, 0xb2,
8977 0x5d, 0x5b, 0x5f, 0x6c, 0x76, 0x6d, 0x52, 0x3a,
8978 0x54, 0x39, 0x2e, 0x41, 0x53, 0x4e, 0x42, 0x3e,
8979 0x47, 0x6e, 0xa4, 0xa0, 0x54, 0x27, 0x51, 0x8e,
8980 0xac, 0xb9, 0xba, 0xad, 0xa6, 0xa2, 0x8d, 0x72,
8981 0x19, 0x42, 0xa2, 0xb7, 0xd4, 0xf7, 0xc2, 0xb0,
8982 0x9a, 0xaf, 0x82, 0x57, 0x91, 0xdf, 0xe5, 0xc9,
8983 0xbd, 0xa6, 0x7b, 0x5c, 0x62, 0x76, 0x6d, 0x51,
8984 0x28, 0x82, 0xe2, 0xc1, 0x5c, 0x57, 0x7e, 0x6b,
8985 0x93, 0x79, 0x83, 0x78, 0x4c, 0x63, 0x99, 0x9c,
8986 0xa6, 0xa0, 0x7f, 0x58, 0x54, 0x62, 0x4c, 0x21,
8987 0x39, 0x60, 0x75, 0x6a, 0x6f, 0x99, 0xc5, 0xd8,
8988 0x7a, 0xbc, 0xdb, 0xaf, 0x7d, 0x7a, 0x89, 0x8d,
8989 0x94, 0x4e, 0x5d, 0x67, 0x33, 0x57, 0x9e, 0x8d,
8990 0x4d, 0x87, 0x9c, 0xa7, 0xb3, 0x7e, 0x4a, 0x5b,
8991 0xcd, 0x82, 0x3f, 0x30, 0x31, 0x26, 0x21, 0x29,
8992 0x01, 0x10, 0x4d, 0x61, 0x35, 0x32, 0x40, 0x23,
8993 0x48, 0x2b, 0x11, 0x12, 0x28, 0x48, 0x6a, 0x83,
8994 0x9a, 0x75, 0x7e, 0x44, 0x32, 0x79, 0x72, 0x4b,
8995 0x1c, 0x42, 0x63, 0x6c, 0x6e, 0x75, 0x77, 0x71,
8996 0x76, 0x74, 0x71, 0x6f, 0x6d, 0x6c, 0x6b, 0x6b,
8997 0x6b, 0x67, 0x65, 0x6a, 0x73, 0x78, 0x76, 0x72,
8998 0x6d, 0x6d, 0x6d, 0x6c, 0x6c, 0x6b, 0x6b, 0x6b,
8999 0x67, 0x6a, 0x6c, 0x6a, 0x66, 0x61, 0x5e, 0x5e,
9000 0x81, 0x79, 0x6f, 0x6b, 0x6d, 0x6d, 0x6a, 0x66,
9001 0x57, 0x3a, 0x2f, 0x3f, 0x43, 0x34, 0x34, 0x47,
9002 0x4a, 0x2e, 0x12, 0x24, 0x6c, 0xb5, 0xc3, 0xab,
9003 0xe6, 0xd4, 0xed, 0xe8, 0x9a, 0x7b, 0xb3, 0xe7,
9004 0xf8, 0xae, 0x72, 0xaa, 0xff, 0xec, 0xab, 0xad,
9005 0xc6, 0xdc, 0xbd, 0x72, 0x53, 0x69, 0x68, 0x46,
9006 0x6c, 0x38, 0x40, 0x8c, 0xa8, 0x6d, 0x34, 0x2b,
9007 0x59, 0x6a, 0x5f, 0x41, 0x46, 0x68, 0x6d, 0x55,
9008 0x3c, 0x61, 0x7d, 0x7a, 0x6d, 0x64, 0x56, 0x45,
9009 0x09, 0x28, 0x49, 0x51, 0x44, 0x37, 0x3b, 0x45,
9010 0x64, 0x4d, 0x4c, 0x41, 0x26, 0x3a, 0x66, 0x6f,
9011 0xb5, 0x78, 0x5e, 0x67, 0x5d, 0x4e, 0x46, 0x3b,
9012 0x44, 0x2f, 0x29, 0x33, 0x2c, 0x15, 0x11, 0x20,
9013 0x17, 0x1c, 0x30, 0x2a, 0x44, 0x43, 0x09, 0x12,
9014 0x5e, 0x56, 0x4d, 0x4d, 0x56, 0x60, 0x67, 0x69,
9015 0x2b, 0x48, 0x5e, 0x52, 0x3a, 0x41, 0x71, 0xa1,
9016 0x95, 0x83, 0x72, 0x6f, 0x74, 0x71, 0x5f, 0x4d,
9017 0x10, 0x9c, 0xff, 0xf7, 0xa2, 0x8b, 0xc8, 0xff,
9018 0xff, 0xbe, 0x65, 0x4e, 0x63, 0x40, 0x13, 0x1d,
9019 0x98, 0xbc, 0xb4, 0x7a, 0x5a, 0x67, 0x63, 0x45,
9020 0x53, 0x31, 0x3c, 0x84, 0xbd, 0xb4, 0x8f, 0x7b,
9021 0x8e, 0xa3, 0xa7, 0x82, 0x4f, 0x40, 0x62, 0x8d,
9022 0x6d, 0x65, 0x52, 0x47, 0x55, 0x68, 0x5e, 0x45,
9023 0x51, 0x67, 0xc9, 0xd6, 0x51, 0x0d, 0x3b, 0x59,
9024 0x44, 0x3a, 0x54, 0x9c, 0xdb, 0xe9, 0xd4, 0xc0,
9025 0xb6, 0xbd, 0xde, 0xac, 0x92, 0x9b, 0x68, 0x5f,
9026 0x65, 0x63, 0x61, 0x57, 0x6b, 0xa9, 0xaa, 0x64,
9027 0x66, 0x71, 0x95, 0xc5, 0xd5, 0xb8, 0x8d, 0x75,
9028 0x4d, 0x2a, 0x40, 0x59, 0x4b, 0x67, 0x94, 0x90,
9029 0x4d, 0xa3, 0xb0, 0x3e, 0x06, 0x6d, 0xb5, 0x85,
9030 0xc5, 0xb2, 0xaf, 0xb3, 0x8e, 0x49, 0x1f, 0x1d,
9031 0x45, 0x63, 0x7f, 0x97, 0xbd, 0xdd, 0xd1, 0xaf,
9032 0xeb, 0xfc, 0xd5, 0x69, 0x12, 0x16, 0x5d, 0x99,
9033 0x91, 0x59, 0x23, 0x22, 0x30, 0x2e, 0x53, 0x9b,
9034 0xd3, 0xef, 0xe1, 0xc7, 0xc3, 0xb0, 0xa6, 0xc0,
9035 0xe3, 0x97, 0x54, 0x4a, 0x57, 0x5d, 0x67, 0x79,
9036 0x14, 0x6f, 0xd4, 0xb5, 0x40, 0x24, 0x3b, 0x26,
9037 0x5b, 0x53, 0x40, 0x56, 0xb7, 0xff, 0xce, 0x5d,
9038 0x55, 0x55, 0x69, 0xa6, 0xfd, 0xfb, 0xba, 0xbb,
9039 0xc2, 0xb8, 0x9f, 0x86, 0x84, 0x8d, 0x85, 0x72,
9040 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a,
9041 0x73, 0x6d, 0x67, 0x67, 0x6b, 0x6b, 0x65, 0x5f,
9042 0x66, 0x67, 0x68, 0x69, 0x6b, 0x6d, 0x6e, 0x6e,
9043 0x68, 0x6e, 0x6f, 0x64, 0x53, 0x4a, 0x4e, 0x55,
9044 0x69, 0x61, 0x57, 0x52, 0x53, 0x53, 0x50, 0x4b,
9045 0x48, 0x41, 0x35, 0x2b, 0x2b, 0x32, 0x37, 0x36,
9046 0x26, 0x22, 0x38, 0x69, 0x93, 0xa3, 0xa8, 0xad,
9047 0xce, 0xa2, 0xa6, 0xb2, 0x8f, 0x7d, 0x83, 0x77,
9048 0xc5, 0xc1, 0x94, 0x8b, 0xb9, 0xa4, 0x4e, 0x1e,
9049 0x3f, 0x68, 0x81, 0x6f, 0x55, 0x4f, 0x54, 0x55,
9050 0x36, 0x12, 0x1e, 0x5e, 0x7a, 0x59, 0x43, 0x4f,
9051 0x47, 0x6c, 0x67, 0x48, 0x69, 0xab, 0x9e, 0x57,
9052 0x7a, 0x6a, 0x92, 0xd6, 0xcf, 0x8a, 0x79, 0xa2,
9053 0xe6, 0xa1, 0x4a, 0x18, 0x18, 0x2f, 0x41, 0x46,
9054 0x4a, 0x2f, 0x2c, 0x2c, 0x2c, 0x69, 0xbc, 0xde,
9055 0xcc, 0xc1, 0xaa, 0xa2, 0x9a, 0x6d, 0x45, 0x48,
9056 0x83, 0x69, 0x52, 0x47, 0x3a, 0x2b, 0x2e, 0x3e,
9057 0x4a, 0x46, 0x4d, 0x3d, 0x54, 0x56, 0x22, 0x31,
9058 0x4d, 0x4a, 0x5a, 0x86, 0xb2, 0xb7, 0x92, 0x69,
9059 0x55, 0x58, 0x62, 0x70, 0x7a, 0x79, 0x6b, 0x5f,
9060 0x7b, 0x81, 0x82, 0x78, 0x67, 0x5d, 0x5f, 0x65,
9061 0xa4, 0xac, 0xac, 0xa1, 0x96, 0x8f, 0x84, 0x77,
9062 0x5d, 0x91, 0x8f, 0x79, 0x8e, 0x94, 0x7d, 0x76,
9063 0x72, 0x78, 0x6d, 0x4f, 0x3a, 0x3d, 0x4b, 0x53,
9064 0x77, 0x97, 0x95, 0x68, 0x51, 0x6b, 0x8b, 0x94,
9065 0x68, 0x5a, 0x4f, 0x57, 0x65, 0x63, 0x4c, 0x34,
9066 0x57, 0x7b, 0x7a, 0x47, 0x27, 0x30, 0x34, 0x24,
9067 0x64, 0xd2, 0xeb, 0x72, 0x4c, 0xd7, 0xff, 0xae,
9068 0x7e, 0x5a, 0x6a, 0xbc, 0xf4, 0xde, 0xad, 0x94,
9069 0xe5, 0x76, 0x3b, 0x16, 0x38, 0x6e, 0x5f, 0x78,
9070 0x84, 0x73, 0xb7, 0xe9, 0xc1, 0xa8, 0x90, 0x4a,
9071 0x22, 0x4f, 0x8b, 0xb4, 0xbe, 0xad, 0x8d, 0x74,
9072 0x99, 0x5e, 0x08, 0x00, 0x2e, 0x29, 0x2b, 0x69,
9073 0xa8, 0xc4, 0xa9, 0x69, 0x7d, 0xd6, 0xd3, 0x78,
9074 0x66, 0x1f, 0x28, 0x9e, 0xec, 0xd1, 0xa8, 0xa8,
9075 0xc9, 0x90, 0x46, 0x30, 0x6f, 0xc6, 0xe2, 0xcd,
9076 0xd1, 0x96, 0x5d, 0x63, 0x99, 0xb6, 0x8d, 0x51,
9077 0x61, 0x6c, 0x34, 0x1a, 0x3e, 0x34, 0x46, 0xa9,
9078 0xee, 0xd0, 0xb1, 0xab, 0xa6, 0x85, 0x71, 0x7c,
9079 0x64, 0x45, 0x3a, 0x51, 0x68, 0x75, 0x93, 0xb8,
9080 0xf3, 0xec, 0x9c, 0x5f, 0x6f, 0x5c, 0x1a, 0x00,
9081 0x4f, 0x84, 0x91, 0x6f, 0x72, 0x9d, 0x9c, 0x70,
9082 0x55, 0x47, 0x39, 0xaf, 0xf9, 0xf8, 0xff, 0xdd,
9083 0x9d, 0x6c, 0x47, 0x4f, 0x67, 0x6c, 0x62, 0x5a,
9084 0x79, 0x7b, 0x7d, 0x80, 0x80, 0x7f, 0x7d, 0x7c,
9085 0x7b, 0x76, 0x72, 0x74, 0x79, 0x7b, 0x77, 0x72,
9086 0x5c, 0x5f, 0x65, 0x6c, 0x74, 0x7c, 0x81, 0x84,
9087 0x8a, 0x88, 0x80, 0x73, 0x66, 0x62, 0x67, 0x6e,
9088 0x6c, 0x63, 0x58, 0x54, 0x54, 0x53, 0x4f, 0x4a,
9089 0x3c, 0x3a, 0x32, 0x31, 0x3f, 0x4b, 0x3f, 0x29,
9090 0xa4, 0xd9, 0xff, 0xff, 0xe0, 0xbe, 0xbb, 0xc8,
9091 0xc7, 0xa4, 0xbc, 0xca, 0x7d, 0x37, 0x3a, 0x4d,
9092 0x62, 0x7d, 0x43, 0x00, 0x17, 0x3c, 0x3a, 0x39,
9093 0x33, 0x1f, 0x4c, 0x97, 0x89, 0x32, 0x18, 0x44,
9094 0x48, 0x3a, 0x43, 0x5a, 0x4e, 0x2b, 0x2d, 0x4d,
9095 0x51, 0x67, 0x56, 0x2b, 0x2c, 0x4a, 0x37, 0x00,
9096 0x36, 0x3c, 0x38, 0x30, 0x48, 0x88, 0xcf, 0xf9,
9097 0xf9, 0xc1, 0x81, 0x64, 0x69, 0x6e, 0x5d, 0x47,
9098 0x65, 0x4e, 0x50, 0x4e, 0x44, 0x6e, 0xae, 0xc3,
9099 0x7e, 0xae, 0xb0, 0xa3, 0x9c, 0x5a, 0x1d, 0x29,
9100 0x6f, 0x5b, 0x43, 0x33, 0x2b, 0x2b, 0x37, 0x44,
9101 0x46, 0x4e, 0x65, 0x5d, 0x6c, 0x59, 0x0c, 0x0a,
9102 0x4b, 0x53, 0x64, 0x7a, 0x8c, 0x92, 0x8e, 0x87,
9103 0x69, 0x53, 0x3f, 0x42, 0x59, 0x73, 0x80, 0x81,
9104 0x79, 0x97, 0xa8, 0x8d, 0x5a, 0x3e, 0x50, 0x6e,
9105 0x64, 0x4b, 0x47, 0x6d, 0x94, 0x92, 0x68, 0x40,
9106 0x43, 0x7e, 0x8c, 0x8d, 0xb4, 0xbc, 0x96, 0x81,
9107 0x31, 0x28, 0x37, 0x54, 0x54, 0x44, 0x57, 0x7f,
9108 0x88, 0x6d, 0x33, 0x07, 0x21, 0x64, 0x83, 0x78,
9109 0x36, 0x16, 0x05, 0x25, 0x5c, 0x73, 0x55, 0x2c,
9110 0x32, 0x6e, 0x8e, 0x74, 0x55, 0x4a, 0x2e, 0x07,
9111 0x7b, 0xb7, 0x92, 0x47, 0x5f, 0x93, 0x84, 0x5f,
9112 0x90, 0x75, 0x73, 0x8a, 0x8c, 0x88, 0xb4, 0xf5,
9113 0xee, 0x5c, 0x2c, 0x3e, 0x6b, 0x69, 0x2c, 0x41,
9114 0x7a, 0x45, 0x8a, 0xd5, 0x93, 0x4e, 0x59, 0x66,
9115 0x76, 0x9c, 0x8d, 0x41, 0x19, 0x31, 0x43, 0x36,
9116 0x81, 0xd1, 0xc7, 0x82, 0x6e, 0x67, 0x62, 0x7b,
9117 0x42, 0x6d, 0x96, 0x92, 0x5e, 0x38, 0x70, 0xd2,
9118 0xb6, 0x9f, 0xba, 0xe9, 0xc8, 0x77, 0x75, 0xb5,
9119 0xa7, 0xbd, 0xce, 0xdb, 0xec, 0xe5, 0xa7, 0x60,
9120 0x00, 0x2e, 0x8c, 0xad, 0x89, 0x5e, 0x62, 0x80,
9121 0x64, 0x68, 0x9b, 0x8f, 0x4b, 0x70, 0xb4, 0xa0,
9122 0xb2, 0x63, 0x4e, 0x83, 0x9b, 0x80, 0x6c, 0x6e,
9123 0x50, 0x4d, 0x5c, 0x71, 0x74, 0x78, 0xa6, 0xe0,
9124 0xeb, 0xe9, 0xc1, 0xb3, 0xc1, 0x9a, 0x7d, 0xa3,
9125 0x66, 0x78, 0x70, 0x45, 0x21, 0x27, 0x46, 0x5d,
9126 0x20, 0x56, 0x46, 0x45, 0x1d, 0x16, 0x6f, 0x6c,
9127 0x28, 0x28, 0x38, 0x53, 0x61, 0x61, 0x6a, 0x7b,
9128 0x71, 0x75, 0x7b, 0x80, 0x82, 0x81, 0x7e, 0x7c,
9129 0x77, 0x6f, 0x65, 0x60, 0x5e, 0x5a, 0x50, 0x48,
9130 0x55, 0x58, 0x5e, 0x65, 0x6d, 0x74, 0x7a, 0x7d,
9131 0x76, 0x72, 0x6e, 0x6f, 0x70, 0x6d, 0x63, 0x5a,
9132 0x7a, 0x70, 0x65, 0x60, 0x5f, 0x5e, 0x59, 0x54,
9133 0x41, 0x33, 0x26, 0x27, 0x30, 0x35, 0x31, 0x2b,
9134 0x4c, 0x72, 0x7c, 0x6c, 0x84, 0xbb, 0xc5, 0xa6,
9135 0x7a, 0x00, 0x00, 0x33, 0x69, 0x61, 0x52, 0x42,
9136 0x5c, 0x50, 0x48, 0x7f, 0xbb, 0x9b, 0x76, 0x97,
9137 0x58, 0x22, 0x2e, 0x7c, 0x8f, 0x54, 0x3c, 0x5d,
9138 0x61, 0x47, 0x3c, 0x4a, 0x50, 0x43, 0x3a, 0x3e,
9139 0x26, 0x3b, 0x4d, 0x4d, 0x41, 0x3a, 0x3c, 0x40,
9140 0x28, 0x38, 0x32, 0x1b, 0x28, 0x64, 0x9e, 0xb7,
9141 0x9a, 0xbd, 0xd9, 0xcc, 0x9e, 0x79, 0x75, 0x81,
9142 0x90, 0x7a, 0x7b, 0x73, 0x5a, 0x70, 0x9d, 0xa6,
9143 0x94, 0xb8, 0xa7, 0x95, 0xa1, 0x72, 0x2b, 0x20,
9144 0x2a, 0x34, 0x3e, 0x42, 0x45, 0x48, 0x44, 0x3d,
9145 0x1c, 0x4a, 0x98, 0xb8, 0xcb, 0x95, 0x16, 0x00,
9146 0xb5, 0xd2, 0xe2, 0xc3, 0x89, 0x69, 0x76, 0x92,
9147 0x5e, 0x5e, 0x55, 0x41, 0x33, 0x3c, 0x5a, 0x77,
9148 0xc6, 0xdf, 0xeb, 0xcc, 0x97, 0x78, 0x84, 0x9e,
9149 0x63, 0x62, 0x6d, 0x76, 0x6b, 0x6b, 0x9e, 0xde,
9150 0xe4, 0xb8, 0x7d, 0x7c, 0x92, 0x5f, 0x1b, 0x14,
9151 0x29, 0x27, 0x39, 0x4e, 0x3f, 0x1b, 0x14, 0x29,
9152 0x22, 0x3b, 0x6a, 0x84, 0x63, 0x35, 0x42, 0x71,
9153 0x4b, 0x43, 0x3d, 0x45, 0x5c, 0x79, 0x92, 0xa0,
9154 0x5a, 0x62, 0x68, 0x70, 0x83, 0x8c, 0x72, 0x4c,
9155 0x6a, 0x6d, 0x4b, 0x54, 0x71, 0x3f, 0x32, 0x8d,
9156 0xa4, 0x80, 0x5c, 0x4e, 0x4f, 0x64, 0x95, 0xc5,
9157 0x99, 0x54, 0x72, 0x90, 0x93, 0x69, 0x24, 0x43,
9158 0x9c, 0x50, 0x50, 0x7d, 0x64, 0x48, 0x87, 0xde,
9159 0xbd, 0xef, 0xd1, 0x58, 0x0c, 0x20, 0x39, 0x2c,
9160 0x00, 0x1f, 0x6b, 0x82, 0x55, 0x5a, 0x7b, 0x6d,
9161 0x64, 0x6d, 0x4d, 0x44, 0x80, 0xaf, 0xaf, 0xae,
9162 0xaf, 0x7f, 0x69, 0x83, 0x92, 0x78, 0x57, 0x4b,
9163 0x8a, 0xa5, 0x9e, 0x66, 0x39, 0x3d, 0x56, 0x64,
9164 0xb1, 0xa3, 0xa1, 0xa4, 0x90, 0x73, 0x74, 0x8b,
9165 0x52, 0x89, 0xb3, 0x9e, 0x82, 0x96, 0x9f, 0x7e,
9166 0x61, 0x24, 0x2e, 0x6c, 0x7e, 0x77, 0x69, 0x4e,
9167 0x80, 0x73, 0x74, 0x80, 0x81, 0x8a, 0xbd, 0xfa,
9168 0xff, 0x9d, 0x87, 0xb3, 0xb9, 0xb8, 0xb5, 0x96,
9169 0x78, 0x4e, 0x3e, 0x5f, 0x79, 0x66, 0x3f, 0x28,
9170 0x30, 0x3e, 0x2f, 0x19, 0x34, 0x3c, 0x23, 0x3c,
9171 0x51, 0x6e, 0x7d, 0x70, 0x61, 0x60, 0x62, 0x5f,
9172 0x67, 0x6d, 0x77, 0x7f, 0x82, 0x81, 0x7e, 0x7a,
9173 0x6b, 0x68, 0x67, 0x6d, 0x76, 0x7c, 0x7b, 0x78,
9174 0x7b, 0x7c, 0x7d, 0x7e, 0x80, 0x82, 0x83, 0x83,
9175 0x78, 0x7b, 0x85, 0x94, 0x9d, 0x93, 0x79, 0x62,
9176 0x72, 0x69, 0x5d, 0x57, 0x56, 0x54, 0x4f, 0x4a,
9177 0x46, 0x3c, 0x37, 0x33, 0x26, 0x18, 0x1d, 0x2c,
9178 0x26, 0x45, 0x3c, 0x1b, 0x36, 0x70, 0x62, 0x20,
9179 0x82, 0x44, 0x5f, 0xa9, 0xa3, 0x7b, 0x6f, 0x6b,
9180 0x52, 0x65, 0x4e, 0x3a, 0x42, 0x35, 0x3d, 0x76,
9181 0x96, 0x78, 0x47, 0x25, 0x2d, 0x44, 0x3e, 0x24,
9182 0x0d, 0x1c, 0x2f, 0x33, 0x26, 0x1e, 0x2b, 0x3f,
9183 0x44, 0x50, 0x60, 0x60, 0x43, 0x26, 0x2c, 0x45,
9184 0x2f, 0x2c, 0x40, 0x62, 0x6e, 0x70, 0x8e, 0xb9,
9185 0xce, 0xce, 0xbd, 0x91, 0x63, 0x53, 0x69, 0x85,
9186 0x54, 0x3f, 0x42, 0x43, 0x3b, 0x67, 0xa9, 0xbf,
9187 0xa4, 0xac, 0xa2, 0xaf, 0xd7, 0xc8, 0x74, 0x2f,
9188 0x29, 0x39, 0x42, 0x40, 0x49, 0x5b, 0x5f, 0x56,
9189 0x4f, 0x79, 0xbe, 0xd5, 0xe1, 0xa8, 0x26, 0x00,
9190 0x93, 0xa4, 0xac, 0x98, 0x71, 0x54, 0x51, 0x5a,
9191 0x50, 0x39, 0x37, 0x64, 0xa5, 0xc2, 0xa9, 0x83,
9192 0x95, 0x97, 0x9f, 0xb1, 0xc7, 0xd9, 0xe1, 0xe3,
9193 0xc3, 0x85, 0x5c, 0x64, 0x65, 0x4a, 0x3d, 0x49,
9194 0x03, 0x37, 0x60, 0x7f, 0x87, 0x6a, 0x7d, 0xcc,
9195 0xd1, 0xcb, 0x98, 0x47, 0x1f, 0x34, 0x51, 0x56,
9196 0x58, 0x31, 0x2d, 0x5b, 0x78, 0x5e, 0x37, 0x27,
9197 0x42, 0x3d, 0x44, 0x60, 0x7f, 0x85, 0x6d, 0x52,
9198 0x6b, 0x4a, 0x39, 0x4a, 0x64, 0x6e, 0x74, 0x7b,
9199 0x90, 0xbb, 0x87, 0x11, 0x00, 0x3c, 0x71, 0x74,
9200 0x8b, 0x7e, 0x67, 0x5f, 0x75, 0x8d, 0x81, 0x64,
9201 0x69, 0x76, 0xa9, 0x82, 0x5d, 0x5a, 0x3b, 0x55,
9202 0x8c, 0x68, 0x3b, 0x45, 0x76, 0x88, 0x9a, 0xc8,
9203 0xac, 0xeb, 0xfd, 0xba, 0x6d, 0x58, 0x60, 0x64,
9204 0x5f, 0x20, 0x34, 0x64, 0x4a, 0x31, 0x3f, 0x41,
9205 0x3d, 0x77, 0x51, 0x20, 0x68, 0xaf, 0x8d, 0x55,
9206 0x4a, 0x69, 0x7c, 0x83, 0xa0, 0xc7, 0xc8, 0xad,
9207 0x3f, 0x8a, 0xca, 0xd1, 0xbf, 0xb7, 0xae, 0xa1,
9208 0xaf, 0xa7, 0xaf, 0xb4, 0x8f, 0x5e, 0x63, 0x8b,
9209 0x79, 0xa8, 0x84, 0x7a, 0xbb, 0x9c, 0x49, 0x4a,
9210 0x50, 0x80, 0xd3, 0xeb, 0xcb, 0xcc, 0xad, 0x4f,
9211 0x65, 0x3f, 0x31, 0x4d, 0x69, 0x6e, 0x74, 0x83,
9212 0x34, 0x06, 0x05, 0x08, 0x00, 0x40, 0xa8, 0xd0,
9213 0x51, 0x42, 0x44, 0x58, 0x59, 0x4a, 0x4b, 0x5c,
9214 0x4c, 0x24, 0x42, 0x33, 0x3d, 0x83, 0x72, 0x46,
9215 0x3e, 0x51, 0x61, 0x6a, 0x75, 0x77, 0x60, 0x41,
9216 0x53, 0x5a, 0x66, 0x70, 0x75, 0x74, 0x6f, 0x6c,
9217 0x7a, 0x75, 0x70, 0x71, 0x75, 0x77, 0x72, 0x6c,
9218 0x68, 0x68, 0x67, 0x67, 0x66, 0x66, 0x66, 0x65,
9219 0x6e, 0x76, 0x82, 0x8c, 0x8c, 0x82, 0x71, 0x65,
9220 0x75, 0x6b, 0x5f, 0x59, 0x57, 0x55, 0x4f, 0x4a,
9221 0x43, 0x43, 0x44, 0x40, 0x2f, 0x1f, 0x1e, 0x27,
9222 0x02, 0x2b, 0x3d, 0x2d, 0x28, 0x39, 0x37, 0x21,
9223 0x27, 0x2c, 0x66, 0x9f, 0xae, 0xac, 0x76, 0x19,
9224 0x00, 0x72, 0x91, 0x60, 0x50, 0x48, 0x32, 0x30,
9225 0x5b, 0x71, 0x5e, 0x33, 0x40, 0x7e, 0x96, 0x7d,
9226 0x7f, 0xa3, 0xbd, 0xaa, 0x7f, 0x64, 0x67, 0x74,
9227 0x6a, 0x65, 0x4b, 0x31, 0x44, 0x86, 0xc8, 0xe7,
9228 0xc5, 0xea, 0xc7, 0x66, 0x4c, 0x88, 0xa6, 0x8b,
9229 0x89, 0x6d, 0x50, 0x49, 0x55, 0x5c, 0x52, 0x44,
9230 0x35, 0x1b, 0x1a, 0x15, 0x0b, 0x36, 0x79, 0x90,
9231 0x6d, 0x73, 0x89, 0x99, 0xa1, 0xa2, 0x6e, 0x1b,
9232 0x37, 0x42, 0x3a, 0x24, 0x26, 0x41, 0x4c, 0x43,
9233 0x64, 0x6d, 0x83, 0x77, 0x7f, 0x61, 0x09, 0x00,
9234 0x8c, 0x6b, 0x57, 0x75, 0xb6, 0xe9, 0xf3, 0xe8,
9235 0x9e, 0xa2, 0xaf, 0xc2, 0xd0, 0xcd, 0xbb, 0xaa,
9236 0x5a, 0x38, 0x28, 0x4d, 0x90, 0xb6, 0xa5, 0x84,
9237 0x8b, 0x5f, 0x49, 0x4f, 0x3e, 0x21, 0x32, 0x63,
9238 0x17, 0x53, 0x51, 0x2c, 0x3f, 0x70, 0xa8, 0xe3,
9239 0xde, 0xff, 0xd1, 0x55, 0x32, 0x79, 0x9b, 0x79,
9240 0x57, 0x54, 0x41, 0x3c, 0x62, 0x8c, 0x7a, 0x47,
9241 0x36, 0x5f, 0x7a, 0x5f, 0x2a, 0x19, 0x41, 0x72,
9242 0x6c, 0x66, 0x7b, 0x98, 0x89, 0x62, 0x68, 0x8f,
9243 0x6f, 0x47, 0x70, 0x99, 0x72, 0x65, 0x7e, 0x76,
9244 0x3f, 0x72, 0x80, 0x52, 0x29, 0x25, 0x1d, 0x06,
9245 0x41, 0x82, 0xb7, 0x63, 0x47, 0x89, 0x82, 0x7c,
9246 0x52, 0x72, 0x4a, 0x4a, 0xaf, 0xc6, 0x74, 0x41,
9247 0xa3, 0xc8, 0xe0, 0xbf, 0x73, 0x43, 0x58, 0x86,
9248 0x9a, 0xcf, 0xb2, 0x6b, 0x50, 0x31, 0x14, 0x22,
9249 0x62, 0x5b, 0x44, 0x69, 0xa1, 0x69, 0x1a, 0x21,
9250 0x72, 0x80, 0x66, 0x4c, 0x7c, 0xb5, 0x78, 0x00,
9251 0x52, 0x5b, 0x58, 0x55, 0x6d, 0x8c, 0x88, 0x6b,
9252 0xb5, 0xa2, 0xac, 0xc9, 0xba, 0x85, 0x72, 0x86,
9253 0xfb, 0x8f, 0x7c, 0xb5, 0xc0, 0xa6, 0x6b, 0x19,
9254 0x4e, 0xb7, 0xff, 0xcb, 0x87, 0xcc, 0xee, 0x91,
9255 0x73, 0x3b, 0x25, 0x53, 0x7e, 0x67, 0x26, 0x00,
9256 0x59, 0x79, 0x57, 0x3e, 0x72, 0x86, 0x5d, 0x48,
9257 0x65, 0x4c, 0x3b, 0x48, 0x64, 0x70, 0x65, 0x55,
9258 0x5b, 0x4a, 0x30, 0x3a, 0x6c, 0x7f, 0x62, 0x4a,
9259 0x2b, 0x25, 0x38, 0x64, 0x85, 0x84, 0x75, 0x6c,
9260 0x5d, 0x65, 0x72, 0x7d, 0x83, 0x82, 0x7d, 0x79,
9261 0x7d, 0x77, 0x70, 0x70, 0x72, 0x72, 0x6b, 0x65,
9262 0x67, 0x68, 0x6a, 0x6d, 0x70, 0x72, 0x74, 0x75,
9263 0x6f, 0x75, 0x77, 0x70, 0x65, 0x60, 0x66, 0x6e,
9264 0x73, 0x69, 0x5d, 0x56, 0x54, 0x52, 0x4c, 0x46,
9265 0x41, 0x3b, 0x31, 0x2a, 0x2a, 0x2c, 0x2a, 0x25,
9266 0x4d, 0x39, 0x22, 0x16, 0x10, 0x16, 0x2b, 0x42,
9267 0x1f, 0x7f, 0xd4, 0xc2, 0xa0, 0xc9, 0xca, 0x77,
9268 0x9b, 0x8a, 0x6d, 0x86, 0xaf, 0x81, 0x3f, 0x40,
9269 0x4b, 0x69, 0x82, 0x7e, 0x6a, 0x61, 0x65, 0x6c,
9270 0x3c, 0x30, 0x28, 0x38, 0x59, 0x61, 0x36, 0x00,
9271 0x0f, 0x2a, 0x1e, 0x06, 0x3a, 0x9c, 0xba, 0x95,
9272 0x8d, 0x9e, 0x9a, 0x74, 0x49, 0x2c, 0x13, 0x00,
9273 0x23, 0x25, 0x29, 0x30, 0x33, 0x30, 0x26, 0x1f,
9274 0x35, 0x20, 0x24, 0x20, 0x0e, 0x2d, 0x61, 0x6e,
9275 0x8b, 0x8d, 0xa0, 0x7b, 0x36, 0x3c, 0x4f, 0x25,
9276 0x49, 0x62, 0x67, 0x54, 0x4d, 0x53, 0x44, 0x25,
9277 0x39, 0x3e, 0x50, 0x47, 0x5c, 0x54, 0x13, 0x18,
9278 0xb1, 0x9c, 0x8e, 0x9e, 0xc0, 0xd5, 0xcf, 0xc0,
9279 0xe2, 0xc5, 0x9e, 0x81, 0x75, 0x75, 0x77, 0x78,
9280 0x71, 0x93, 0xac, 0x9d, 0x7c, 0x78, 0x9f, 0xcb,
9281 0xb6, 0xc3, 0xad, 0x60, 0x0e, 0x07, 0x55, 0xa8,
9282 0x63, 0x74, 0x90, 0xa8, 0xaa, 0x8d, 0x5f, 0x3c,
9283 0x93, 0x82, 0x75, 0x79, 0x80, 0x73, 0x4e, 0x2d,
9284 0x60, 0x53, 0x4d, 0x5b, 0x6f, 0x6e, 0x53, 0x37,
9285 0x5e, 0x48, 0x50, 0x73, 0x7e, 0x76, 0x90, 0xbf,
9286 0xb2, 0x99, 0x5f, 0x34, 0x55, 0xa7, 0xd3, 0xce,
9287 0xc6, 0xda, 0xdf, 0xbc, 0x7d, 0x49, 0x38, 0x3d,
9288 0x24, 0x29, 0x36, 0x52, 0x7b, 0xae, 0xdc, 0xf7,
9289 0xd6, 0xa4, 0x67, 0x46, 0x42, 0x46, 0x3d, 0x30,
9290 0x13, 0x33, 0x64, 0x94, 0xb1, 0xb4, 0xa6, 0x98,
9291 0x17, 0x46, 0x88, 0xa4, 0x82, 0x60, 0x85, 0xc8,
9292 0xff, 0xc2, 0x78, 0x5a, 0x67, 0x78, 0x6f, 0x5c,
9293 0x8a, 0x4b, 0x77, 0xe6, 0xca, 0x3e, 0x2c, 0x91,
9294 0xc3, 0x74, 0x1a, 0x00, 0x29, 0x5e, 0x6d, 0x5f,
9295 0x19, 0x5d, 0xa0, 0xa6, 0x80, 0x6f, 0x93, 0xc2,
9296 0xe5, 0xd9, 0xca, 0xc0, 0xb6, 0xa6, 0x90, 0x7e,
9297 0x31, 0x5f, 0x7a, 0x7a, 0x8f, 0xb3, 0xa8, 0x7c,
9298 0x4a, 0x6e, 0x99, 0xb5, 0xc8, 0xd6, 0xd9, 0xd3,
9299 0x7e, 0x6f, 0x4f, 0x28, 0x18, 0x35, 0x76, 0xac,
9300 0xc9, 0xc3, 0xc1, 0xc3, 0xbc, 0x9b, 0x67, 0x3d,
9301 0x8d, 0x74, 0x57, 0x4b, 0x51, 0x5a, 0x5c, 0x59,
9302 0x43, 0x2c, 0x39, 0x54, 0x53, 0x48, 0x31, 0x0e,
9303 0x2e, 0x38, 0x48, 0x59, 0x65, 0x6a, 0x6b, 0x6a,
9304 0x5e, 0x6c, 0x7b, 0x82, 0x7d, 0x76, 0x72, 0x72,
9305 0x7a, 0x74, 0x70, 0x73, 0x7a, 0x7e, 0x79, 0x74,
9306 0x6b, 0x6f, 0x76, 0x7a, 0x7c, 0x7a, 0x76, 0x73,
9307 0x87, 0x82, 0x79, 0x70, 0x6a, 0x68, 0x68, 0x68,
9308 0x69, 0x63, 0x5d, 0x5d, 0x60, 0x60, 0x5a, 0x54,
9309 0x54, 0x49, 0x70, 0xba, 0xf1, 0xb7, 0x45, 0x2d,
9310 0x2d, 0x31, 0x36, 0x39, 0x39, 0x36, 0x31, 0x2d,
9311 0x4b, 0x8a, 0x98, 0x73, 0x83, 0xc3, 0xc5, 0x8c,
9312 0x51, 0x1f, 0x1b, 0x49, 0x4d, 0x24, 0x2d, 0x62,
9313 0x88, 0x64, 0x60, 0x7a, 0x6a, 0x2f, 0x16, 0x27,
9314 0x5a, 0xa8, 0xeb, 0xde, 0x9a, 0x77, 0x9d, 0xd5,
9315 0x3a, 0x34, 0x15, 0x07, 0x49, 0xae, 0xd1, 0xb5,
9316 0x8f, 0xbb, 0xe0, 0xb7, 0x4c, 0x1d, 0x82, 0xff,
9317 0xe8, 0x9b, 0x5c, 0x54, 0x53, 0x3f, 0x39, 0x46,
9318 0x26, 0x13, 0x11, 0x23, 0x27, 0x1d, 0x21, 0x33,
9319 0x45, 0x29, 0x1e, 0x2f, 0x3b, 0x32, 0x27, 0x28,
9320 0x3b, 0x5b, 0x77, 0x72, 0x51, 0x34, 0x2f, 0x38,
9321 0x35, 0x3c, 0x42, 0x40, 0x36, 0x2a, 0x22, 0x1f,
9322 0xad, 0x8e, 0x70, 0x71, 0x8e, 0xad, 0xbc, 0xbc,
9323 0x4b, 0x47, 0x60, 0xa4, 0xed, 0xff, 0xde, 0xad,
9324 0xb7, 0xa0, 0x86, 0x7a, 0x7f, 0x88, 0x8a, 0x88,
9325 0xbc, 0xe9, 0xff, 0xff, 0xf2, 0xb1, 0x7c, 0x62,
9326 0x49, 0x65, 0x8f, 0xb2, 0xb8, 0x9d, 0x71, 0x4f,
9327 0x41, 0x69, 0xa8, 0xdc, 0xe5, 0xb9, 0x6e, 0x36,
9328 0x39, 0x68, 0xa8, 0xcf, 0xc8, 0x99, 0x5d, 0x36,
9329 0x67, 0x5f, 0x39, 0x13, 0x24, 0x56, 0x5d, 0x3e,
9330 0x70, 0x7d, 0xa0, 0xcf, 0xea, 0xe4, 0xcf, 0xc0,
9331 0xc5, 0xc4, 0xb3, 0x8a, 0x5d, 0x44, 0x49, 0x58,
9332 0x94, 0x87, 0x78, 0x77, 0x8b, 0xb3, 0xdf, 0xfb,
9333 0xce, 0x97, 0x58, 0x3a, 0x3d, 0x3c, 0x26, 0x0d,
9334 0x91, 0x9a, 0xb1, 0xd0, 0xe5, 0xe0, 0xc3, 0xa8,
9335 0x55, 0x4b, 0x4e, 0x53, 0x3f, 0x27, 0x39, 0x62,
9336 0x6c, 0x4e, 0x31, 0x30, 0x47, 0x58, 0x54, 0x47,
9337 0x1c, 0x2a, 0x46, 0x54, 0x3a, 0x1e, 0x37, 0x69,
9338 0x5f, 0x66, 0x64, 0x63, 0x78, 0x8f, 0x84, 0x65,
9339 0xc0, 0xad, 0x95, 0x89, 0x8e, 0x9d, 0xac, 0xb5,
9340 0xd1, 0xdb, 0xd5, 0xae, 0x79, 0x5c, 0x63, 0x78,
9341 0x8a, 0x85, 0x85, 0x89, 0x85, 0x81, 0x8a, 0x9b,
9342 0x65, 0x3d, 0x50, 0xaf, 0xf4, 0xdc, 0x9a, 0x70,
9343 0xbc, 0x81, 0x38, 0x10, 0x19, 0x3b, 0x58, 0x66,
9344 0x76, 0x53, 0x2b, 0x1d, 0x2c, 0x46, 0x56, 0x5b,
9345 0x37, 0x71, 0xa2, 0x92, 0x5d, 0x4a, 0x74, 0xaa,
9346 0x51, 0x34, 0x2d, 0x3c, 0x3b, 0x2c, 0x26, 0x27,
9347 0x36, 0x3f, 0x4e, 0x5d, 0x67, 0x6b, 0x6a, 0x69,
9348 0x67, 0x72, 0x7d, 0x7e, 0x75, 0x69, 0x63, 0x61,
9349 0x82, 0x7c, 0x78, 0x7b, 0x81, 0x84, 0x80, 0x7a,
9350 0x61, 0x68, 0x72, 0x7c, 0x82, 0x84, 0x83, 0x81,
9351 0x79, 0x79, 0x79, 0x77, 0x73, 0x6d, 0x67, 0x63,
9352 0x61, 0x5b, 0x55, 0x55, 0x58, 0x57, 0x51, 0x4b,
9353 0x46, 0x52, 0x78, 0x96, 0xc0, 0xc5, 0x87, 0x67,
9354 0x63, 0x55, 0x3f, 0x28, 0x18, 0x11, 0x10, 0x12,
9355 0x23, 0x52, 0x88, 0xa3, 0xa6, 0x9f, 0x93, 0x88,
9356 0x30, 0x4c, 0x55, 0x46, 0x41, 0x48, 0x38, 0x19,
9357 0x48, 0x61, 0x7d, 0x78, 0x50, 0x3c, 0x6a, 0xad,
9358 0xe3, 0xf5, 0xf9, 0xd7, 0x9a, 0x65, 0x51, 0x51,
9359 0x48, 0x28, 0x0f, 0x31, 0x8d, 0xd9, 0xd4, 0xa6,
9360 0x92, 0x90, 0x9e, 0xb6, 0xc2, 0xc4, 0xd1, 0xe5,
9361 0xd1, 0xbb, 0xb1, 0xac, 0x87, 0x4f, 0x39, 0x47,
9362 0x0c, 0x57, 0xbe, 0xda, 0x7e, 0x11, 0x10, 0x54,
9363 0x1c, 0x28, 0x26, 0x23, 0x40, 0x5f, 0x49, 0x17,
9364 0x2f, 0x4b, 0x6d, 0x7e, 0x75, 0x5c, 0x43, 0x35,
9365 0x2d, 0x2e, 0x2e, 0x29, 0x21, 0x1a, 0x16, 0x15,
9366 0xd7, 0xaa, 0x6f, 0x4a, 0x45, 0x52, 0x60, 0x66,
9367 0x5f, 0x67, 0x69, 0x59, 0x41, 0x39, 0x45, 0x56,
9368 0x83, 0x84, 0x7a, 0x62, 0x50, 0x5a, 0x7f, 0xa1,
9369 0xfd, 0xc5, 0x7d, 0x4f, 0x45, 0x4a, 0x4b, 0x47,
9370 0x8b, 0x94, 0xa1, 0xae, 0xb8, 0xc0, 0xc5, 0xc8,
9371 0xee, 0xf2, 0xf0, 0xe1, 0xcb, 0xbb, 0xb7, 0xba,
9372 0xd8, 0xde, 0xd0, 0xa1, 0x62, 0x3a, 0x37, 0x44,
9373 0x62, 0x58, 0x3c, 0x34, 0x65, 0x9c, 0x8b, 0x51,
9374 0x0a, 0x0c, 0x3b, 0x82, 0x9e, 0x92, 0xa2, 0xcc,
9375 0xd5, 0xd2, 0xc9, 0xbc, 0xb3, 0xb6, 0xc3, 0xd0,
9376 0x78, 0x70, 0x66, 0x60, 0x65, 0x72, 0x82, 0x8d,
9377 0xb6, 0xa8, 0x95, 0x83, 0x73, 0x60, 0x4b, 0x3c,
9378 0x33, 0x54, 0x86, 0xb4, 0xd1, 0xe0, 0xe7, 0xea,
9379 0x81, 0x48, 0x1f, 0x26, 0x39, 0x3f, 0x4f, 0x66,
9380 0x55, 0x4f, 0x49, 0x46, 0x45, 0x41, 0x3a, 0x33,
9381 0x35, 0x21, 0x29, 0x48, 0x50, 0x5d, 0xab, 0xff,
9382 0x8b, 0x70, 0x74, 0x88, 0x65, 0x20, 0x12, 0x37,
9383 0x76, 0x74, 0x89, 0xbd, 0xef, 0xf4, 0xc7, 0x96,
9384 0x70, 0x52, 0x39, 0x42, 0x5d, 0x61, 0x41, 0x1e,
9385 0x41, 0x2f, 0x49, 0x7d, 0x76, 0x37, 0x15, 0x24,
9386 0x24, 0x32, 0x82, 0xd9, 0xc2, 0x6e, 0x71, 0xbc,
9387 0xff, 0xdc, 0xa1, 0x7f, 0x7e, 0x87, 0x87, 0x82,
9388 0x3f, 0x28, 0x13, 0x15, 0x2c, 0x43, 0x4c, 0x4b,
9389 0x0f, 0x1c, 0x2a, 0x30, 0x2f, 0x31, 0x3a, 0x43,
9390 0x22, 0x30, 0x3e, 0x47, 0x3f, 0x26, 0x26, 0x40,
9391 0x74, 0x78, 0x7d, 0x7e, 0x7a, 0x71, 0x66, 0x5f,
9392 0x6c, 0x76, 0x80, 0x81, 0x78, 0x6e, 0x6a, 0x6a,
9393 0x8c, 0x86, 0x81, 0x83, 0x89, 0x8b, 0x86, 0x80,
9394 0x75, 0x7a, 0x81, 0x86, 0x85, 0x80, 0x78, 0x73,
9395 0x72, 0x81, 0x96, 0xa4, 0xa2, 0x92, 0x7b, 0x6b,
9396 0x6e, 0x68, 0x61, 0x61, 0x63, 0x62, 0x5c, 0x55,
9397 0x44, 0x13, 0x28, 0x59, 0x7b, 0x7d, 0x5d, 0x57,
9398 0x3f, 0x2e, 0x17, 0x06, 0x06, 0x16, 0x2d, 0x3d,
9399 0x41, 0x33, 0x54, 0x8c, 0x88, 0x59, 0x60, 0x96,
9400 0x9d, 0x5f, 0x30, 0x27, 0x15, 0x00, 0x11, 0x42,
9401 0x57, 0x63, 0x5e, 0x4d, 0x5a, 0x8d, 0xbf, 0xd6,
9402 0xae, 0x9b, 0x8e, 0x95, 0xa5, 0xa1, 0x82, 0x64,
9403 0x2b, 0x45, 0x81, 0xc1, 0xd5, 0xbe, 0xa8, 0xa4,
9404 0x7b, 0x8e, 0x91, 0x79, 0x66, 0x69, 0x74, 0x78,
9405 0x71, 0x88, 0xa2, 0x94, 0x53, 0x11, 0x0a, 0x27,
9406 0x9b, 0xa8, 0xaf, 0xad, 0xab, 0x9c, 0x6e, 0x3e,
9407 0x3a, 0x37, 0x35, 0x31, 0x2a, 0x2f, 0x48, 0x62,
9408 0x7c, 0x6a, 0x52, 0x43, 0x40, 0x3f, 0x3d, 0x39,
9409 0x22, 0x24, 0x27, 0x28, 0x25, 0x1d, 0x12, 0x0a,
9410 0xbc, 0x99, 0x65, 0x3a, 0x23, 0x1f, 0x25, 0x2a,
9411 0x08, 0x36, 0x5b, 0x4a, 0x1e, 0x15, 0x45, 0x7b,
9412 0xc8, 0xc6, 0xad, 0x75, 0x3c, 0x2b, 0x49, 0x6f,
9413 0x35, 0x23, 0x17, 0x28, 0x48, 0x5b, 0x52, 0x41,
9414 0x6e, 0x6c, 0x63, 0x51, 0x3f, 0x3a, 0x44, 0x50,
9415 0x34, 0x5a, 0x81, 0x86, 0x6a, 0x47, 0x34, 0x31,
9416 0x1b, 0x2a, 0x39, 0x3b, 0x37, 0x3d, 0x51, 0x65,
9417 0x41, 0x22, 0x30, 0x6f, 0x8d, 0x64, 0x2d, 0x15,
9418 0xa2, 0xa1, 0xab, 0xae, 0x92, 0x72, 0x7d, 0xa0,
9419 0x98, 0x9b, 0x9c, 0x95, 0x84, 0x6d, 0x57, 0x4b,
9420 0xc4, 0xd0, 0xdd, 0xe1, 0xd3, 0xb5, 0x93, 0x7c,
9421 0xa7, 0xb0, 0xae, 0x94, 0x78, 0x7e, 0xa8, 0xd1,
9422 0x9b, 0xa8, 0xa8, 0x90, 0x78, 0x82, 0xb4, 0xe4,
9423 0x7c, 0x44, 0x1e, 0x2b, 0x43, 0x4c, 0x59, 0x6d,
9424 0x16, 0x3a, 0x69, 0x86, 0x84, 0x6d, 0x52, 0x43,
9425 0x40, 0x23, 0x29, 0x56, 0x6b, 0x5f, 0x69, 0x8a,
9426 0x81, 0x6c, 0x56, 0x4d, 0x51, 0x6e, 0xa8, 0xdd,
9427 0xe9, 0xdd, 0xce, 0xc0, 0xa6, 0x74, 0x31, 0x00,
9428 0x4b, 0x21, 0x13, 0x52, 0xb1, 0xd7, 0xa7, 0x64,
9429 0x47, 0x9d, 0xff, 0xff, 0xb8, 0x5c, 0x63, 0xa1,
9430 0xd5, 0x56, 0x1a, 0x71, 0xd4, 0xcb, 0x7e, 0x48,
9431 0x72, 0x7e, 0x81, 0x6c, 0x4b, 0x39, 0x3f, 0x4d,
9432 0xe2, 0xb6, 0x7f, 0x63, 0x6b, 0x86, 0x9b, 0xa5,
9433 0x90, 0xa0, 0x9e, 0x73, 0x36, 0x15, 0x21, 0x3a,
9434 0x46, 0x44, 0x20, 0x01, 0x0d, 0x26, 0x40, 0x5c,
9435 0x68, 0x6d, 0x74, 0x78, 0x77, 0x70, 0x68, 0x62,
9436 0x6b, 0x76, 0x82, 0x87, 0x84, 0x82, 0x84, 0x88,
9437 0x7c, 0x76, 0x71, 0x72, 0x77, 0x79, 0x73, 0x6d,
9438 0x6a, 0x72, 0x7f, 0x89, 0x8e, 0x8b, 0x85, 0x80,
9439 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
9440 0x73, 0x6c, 0x65, 0x64, 0x65, 0x64, 0x5d, 0x56,
9441 0x4d, 0x2d, 0x6f, 0xa5, 0x83, 0x4e, 0x40, 0x62,
9442 0x54, 0x4e, 0x48, 0x4b, 0x5a, 0x73, 0x8e, 0xa0,
9443 0xa9, 0x48, 0x2a, 0x85, 0xd9, 0xd4, 0xb2, 0xac,
9444 0x84, 0x3f, 0x32, 0x63, 0x61, 0x2b, 0x36, 0x79,
9445 0x60, 0x6e, 0x5b, 0x3d, 0x5c, 0xa8, 0xc7, 0xb5,
9446 0x90, 0x71, 0x5b, 0x69, 0x8b, 0x95, 0x78, 0x55,
9447 0x80, 0x40, 0x39, 0x8c, 0xcb, 0xaf, 0x6c, 0x47,
9448 0x4f, 0x6f, 0x79, 0x6a, 0x75, 0x9d, 0xab, 0x9b,
9449 0x5a, 0x77, 0x8f, 0x82, 0x5e, 0x55, 0x7f, 0xb3,
9450 0xa4, 0xac, 0x9b, 0x7a, 0x75, 0x8e, 0x9c, 0x93,
9451 0x4d, 0x24, 0x15, 0x32, 0x49, 0x3f, 0x33, 0x35,
9452 0x40, 0x3c, 0x38, 0x39, 0x3b, 0x39, 0x31, 0x29,
9453 0x28, 0x2b, 0x32, 0x3a, 0x3c, 0x30, 0x1a, 0x09,
9454 0x4a, 0x48, 0x42, 0x39, 0x33, 0x37, 0x42, 0x4c,
9455 0x6d, 0x68, 0x62, 0x60, 0x63, 0x68, 0x6d, 0x70,
9456 0x63, 0x39, 0x10, 0x10, 0x32, 0x50, 0x54, 0x49,
9457 0x34, 0x35, 0x36, 0x34, 0x36, 0x40, 0x53, 0x61,
9458 0x62, 0x82, 0xa5, 0xad, 0x97, 0x7a, 0x6a, 0x66,
9459 0x88, 0x87, 0x77, 0x54, 0x32, 0x2e, 0x4b, 0x69,
9460 0x4e, 0x4e, 0x57, 0x6a, 0x7a, 0x74, 0x59, 0x40,
9461 0x0f, 0x12, 0x40, 0x80, 0x8a, 0x59, 0x36, 0x38,
9462 0x15, 0x63, 0xb0, 0xcc, 0xce, 0xce, 0xc1, 0xac,
9463 0x29, 0x45, 0x6d, 0x8d, 0xa1, 0xb2, 0xc3, 0xcf,
9464 0x62, 0x7e, 0xab, 0xd3, 0xe8, 0xe8, 0xda, 0xcd,
9465 0x5c, 0x6b, 0x7f, 0x90, 0xa1, 0xb8, 0xd5, 0xea,
9466 0xaf, 0xa9, 0x99, 0x7f, 0x61, 0x48, 0x3b, 0x36,
9467 0x18, 0x0b, 0x14, 0x30, 0x38, 0x30, 0x40, 0x5f,
9468 0x51, 0x51, 0x4b, 0x3f, 0x36, 0x39, 0x48, 0x57,
9469 0x2c, 0x35, 0x18, 0x00, 0x38, 0x93, 0x91, 0x4c,
9470 0x37, 0x68, 0x59, 0x24, 0x54, 0xd7, 0xff, 0xe4,
9471 0xd1, 0xb3, 0x94, 0x8a, 0x8a, 0x79, 0x4f, 0x2a,
9472 0x4c, 0x3c, 0x30, 0x38, 0x50, 0x65, 0x6b, 0x68,
9473 0x7e, 0xab, 0xb9, 0x8d, 0x60, 0x55, 0x55, 0x4f,
9474 0x9f, 0x99, 0x8f, 0x80, 0x69, 0x51, 0x42, 0x3e,
9475 0x1b, 0x29, 0x31, 0x28, 0x1a, 0x1e, 0x3a, 0x55,
9476 0xd0, 0xb4, 0x93, 0x84, 0x86, 0x87, 0x7e, 0x72,
9477 0x81, 0x81, 0x84, 0x89, 0x87, 0x78, 0x60, 0x4c,
9478 0x78, 0x63, 0x89, 0xeb, 0xff, 0xc7, 0x6f, 0x53,
9479 0x5a, 0x61, 0x6a, 0x71, 0x74, 0x70, 0x6a, 0x66,
9480 0x6e, 0x77, 0x82, 0x85, 0x83, 0x84, 0x89, 0x8f,
9481 0x82, 0x7b, 0x75, 0x76, 0x7a, 0x7b, 0x75, 0x6e,
9482 0x69, 0x73, 0x81, 0x8e, 0x92, 0x8e, 0x85, 0x7f,
9483 0x76, 0x71, 0x6a, 0x65, 0x67, 0x6e, 0x77, 0x7e,
9484 0x55, 0x4e, 0x47, 0x44, 0x45, 0x43, 0x3b, 0x34,
9485 0x3a, 0x41, 0x73, 0x6b, 0x43, 0x46, 0x49, 0x49,
9486 0x79, 0x78, 0x76, 0x73, 0x6f, 0x6b, 0x68, 0x66,
9487 0x6c, 0x7a, 0x98, 0xb0, 0xa2, 0x78, 0x5a, 0x55,
9488 0x54, 0x59, 0x4b, 0x2f, 0x24, 0x2b, 0x29, 0x1b,
9489 0x1d, 0x65, 0x84, 0x5a, 0x42, 0x6d, 0xa3, 0xb7,
9490 0xaf, 0x99, 0x80, 0x74, 0x71, 0x69, 0x56, 0x44,
9491 0x48, 0x30, 0x2f, 0x3c, 0x26, 0x0f, 0x3d, 0x8b,
9492 0x58, 0x93, 0xb5, 0x9f, 0x84, 0x7b, 0x67, 0x47,
9493 0x8c, 0x8f, 0x7f, 0x5b, 0x41, 0x4a, 0x6b, 0x86,
9494 0x90, 0x4f, 0x43, 0x82, 0xa4, 0x89, 0x7b, 0x92,
9495 0xc0, 0xad, 0x73, 0x2e, 0x18, 0x2e, 0x3a, 0x2f,
9496 0x28, 0x33, 0x40, 0x42, 0x39, 0x2d, 0x24, 0x21,
9497 0x3b, 0x2f, 0x26, 0x27, 0x2f, 0x30, 0x26, 0x1b,
9498 0x2c, 0x3a, 0x47, 0x48, 0x41, 0x42, 0x52, 0x61,
9499 0x37, 0x3a, 0x3d, 0x3f, 0x43, 0x4c, 0x5a, 0x65,
9500 0x83, 0x70, 0x61, 0x6a, 0x84, 0x98, 0x97, 0x8e,
9501 0x90, 0xb4, 0xd1, 0xbf, 0x85, 0x4f, 0x37, 0x37,
9502 0xa1, 0xbf, 0xda, 0xd6, 0xba, 0xa5, 0xa8, 0xb5,
9503 0x87, 0x8c, 0x8a, 0x78, 0x5b, 0x40, 0x31, 0x2d,
9504 0x6f, 0x42, 0x12, 0x06, 0x1f, 0x3f, 0x4b, 0x49,
9505 0x38, 0x6e, 0x91, 0x8f, 0x9c, 0xc2, 0xcf, 0xbd,
9506 0x40, 0x7a, 0x9e, 0x9b, 0xab, 0xd4, 0xdf, 0xc9,
9507 0x5f, 0x70, 0x76, 0x5e, 0x3b, 0x32, 0x4e, 0x70,
9508 0x96, 0x96, 0x94, 0x91, 0x8c, 0x86, 0x80, 0x7d,
9509 0x85, 0x63, 0x4a, 0x61, 0xa0, 0xdd, 0xfa, 0xfe,
9510 0x56, 0x42, 0x40, 0x6a, 0xa3, 0xb9, 0x9c, 0x74,
9511 0x33, 0x40, 0x5e, 0x6d, 0x4b, 0x1a, 0x17, 0x36,
9512 0xa4, 0x7e, 0x48, 0x1d, 0x0f, 0x19, 0x2e, 0x3d,
9513 0x84, 0x61, 0x31, 0x23, 0x48, 0x6a, 0x4f, 0x19,
9514 0x00, 0x00, 0x2f, 0x87, 0xc4, 0xce, 0xcc, 0xd4,
9515 0xe7, 0xa6, 0x6e, 0x76, 0xa6, 0xb3, 0x81, 0x46,
9516 0xad, 0x80, 0x51, 0x4b, 0x77, 0xb8, 0xed, 0xff,
9517 0xbd, 0xcf, 0xb7, 0x7f, 0x70, 0x7d, 0x5d, 0x1e,
9518 0x1d, 0x53, 0x7c, 0x71, 0x4f, 0x3d, 0x39, 0x37,
9519 0x5a, 0x36, 0x13, 0x11, 0x33, 0x5d, 0x78, 0x82,
9520 0x45, 0x51, 0x6b, 0x8a, 0x98, 0x81, 0x4e, 0x23,
9521 0x3e, 0x1c, 0x1c, 0x64, 0xc0, 0xd1, 0x83, 0x2a,
9522 0x2a, 0x69, 0xbd, 0xe8, 0xf1, 0xec, 0xaa, 0x45,
9523 0x5d, 0x63, 0x6d, 0x74, 0x76, 0x73, 0x6c, 0x68,
9524 0x73, 0x79, 0x7e, 0x7b, 0x75, 0x73, 0x77, 0x7d,
9525 0x85, 0x7e, 0x77, 0x77, 0x7b, 0x7a, 0x74, 0x6d,
9526 0x71, 0x7b, 0x88, 0x91, 0x91, 0x87, 0x79, 0x70,
9527 0x63, 0x6a, 0x73, 0x7a, 0x7b, 0x75, 0x6d, 0x67,
9528 0x6a, 0x63, 0x5b, 0x58, 0x58, 0x55, 0x4d, 0x45,
9529 0x3e, 0x36, 0x3a, 0x24, 0x38, 0x74, 0x6e, 0x4f,
9530 0x52, 0x53, 0x52, 0x4d, 0x43, 0x33, 0x24, 0x1b,
9531 0x5e, 0xb9, 0xf1, 0xbe, 0x61, 0x38, 0x4a, 0x65,
9532 0x66, 0x4a, 0x37, 0x37, 0x34, 0x2e, 0x3d, 0x56,
9533 0x2c, 0x4e, 0x5f, 0x51, 0x4c, 0x67, 0x8b, 0x9e,
9534 0xa6, 0x9e, 0x8f, 0x7e, 0x70, 0x6a, 0x6c, 0x70,
9535 0x55, 0x2c, 0x1c, 0x42, 0x71, 0x7e, 0x71, 0x66,
9536 0x4a, 0x7b, 0x9c, 0x87, 0x5c, 0x48, 0x4c, 0x54,
9537 0x62, 0x6f, 0x72, 0x6e, 0x81, 0xa8, 0xbf, 0xbf,
9538 0x7e, 0x47, 0x3a, 0x6a, 0x88, 0x7e, 0x89, 0xae,
9539 0xbc, 0xd6, 0xd4, 0x9b, 0x4b, 0x1d, 0x1f, 0x31,
9540 0x2e, 0x25, 0x19, 0x14, 0x24, 0x50, 0x87, 0xaf,
9541 0xdb, 0xb0, 0x76, 0x4c, 0x38, 0x2d, 0x1e, 0x11,
9542 0x52, 0x5b, 0x5c, 0x4c, 0x3b, 0x41, 0x60, 0x7e,
9543 0x87, 0xae, 0xd7, 0xdf, 0xc2, 0x9d, 0x87, 0x81,
9544 0xe1, 0xe2, 0xd6, 0xb2, 0x7d, 0x4a, 0x2a, 0x1d,
9545 0x50, 0x74, 0x94, 0x91, 0x73, 0x60, 0x6b, 0x7f,
9546 0x90, 0x8f, 0x78, 0x43, 0x0c, 0x00, 0x1e, 0x44,
9547 0x26, 0x21, 0x20, 0x2a, 0x39, 0x41, 0x3d, 0x36,
9548 0x63, 0x4c, 0x2e, 0x1d, 0x21, 0x34, 0x49, 0x56,
9549 0x90, 0xa4, 0xa0, 0x8a, 0x94, 0xb3, 0xab, 0x85,
9550 0x92, 0x83, 0x6d, 0x64, 0x79, 0x9f, 0xba, 0xc2,
9551 0xdc, 0xf5, 0xf2, 0xaf, 0x51, 0x1e, 0x31, 0x5a,
9552 0x56, 0x51, 0x4a, 0x46, 0x46, 0x4a, 0x51, 0x56,
9553 0x21, 0x4e, 0x94, 0xd2, 0xea, 0xd2, 0x9e, 0x76,
9554 0x69, 0x49, 0x2e, 0x38, 0x66, 0x9a, 0xb9, 0xc3,
9555 0xb2, 0xb7, 0xc5, 0xbd, 0x80, 0x34, 0x1b, 0x2c,
9556 0x54, 0x49, 0x46, 0x58, 0x6c, 0x66, 0x43, 0x21,
9557 0x69, 0x50, 0x79, 0xd5, 0xed, 0xae, 0x81, 0x89,
9558 0xc2, 0x94, 0xb2, 0xfe, 0xdf, 0x6a, 0x4b, 0x88,
9559 0xf5, 0xb4, 0x73, 0x6a, 0x90, 0xad, 0xa1, 0x86,
9560 0xc1, 0x7b, 0x2c, 0x0d, 0x21, 0x3b, 0x3b, 0x2d,
9561 0x17, 0x62, 0x96, 0x70, 0x1f, 0x00, 0x1b, 0x49,
9562 0x1a, 0x1b, 0x33, 0x57, 0x60, 0x4b, 0x3e, 0x44,
9563 0x44, 0x2c, 0x17, 0x1b, 0x33, 0x45, 0x43, 0x39,
9564 0x1a, 0x11, 0x0e, 0x1d, 0x33, 0x3b, 0x2f, 0x20,
9565 0x28, 0x33, 0x3f, 0x40, 0x35, 0x27, 0x1f, 0x1c,
9566 0x11, 0x02, 0x67, 0xce, 0xaa, 0x69, 0x56, 0x45,
9567 0x37, 0x41, 0x51, 0x61, 0x6c, 0x71, 0x72, 0x71,
9568 0x71, 0x76, 0x79, 0x76, 0x71, 0x70, 0x77, 0x7e,
9569 0x75, 0x6e, 0x67, 0x66, 0x69, 0x68, 0x61, 0x5a,
9570 0x5c, 0x69, 0x7d, 0x8d, 0x94, 0x8f, 0x84, 0x7c,
9571 0x72, 0x72, 0x72, 0x71, 0x70, 0x6f, 0x6f, 0x6e,
9572 0x60, 0x59, 0x50, 0x4d, 0x4c, 0x49, 0x40, 0x39,
9573 0x2b, 0x2b, 0x3e, 0x48, 0x65, 0x77, 0x63, 0x6d,
9574 0x52, 0x51, 0x4f, 0x51, 0x56, 0x5e, 0x66, 0x6c,
9575 0x59, 0x50, 0x3c, 0x3a, 0x60, 0x84, 0x72, 0x45,
9576 0x27, 0x0f, 0x53, 0xd7, 0xff, 0xca, 0xc2, 0xfa,
9577 0x9f, 0x6d, 0x44, 0x42, 0x4f, 0x57, 0x65, 0x77,
9578 0xaa, 0x96, 0x7a, 0x62, 0x55, 0x4f, 0x4c, 0x4a,
9579 0x4f, 0x85, 0xaf, 0xa7, 0x8f, 0x84, 0x81, 0x7b,
9580 0x4f, 0x2b, 0x11, 0x19, 0x2a, 0x2c, 0x27, 0x27,
9581 0x5d, 0x78, 0x82, 0x79, 0x87, 0xa8, 0xb1, 0xa1,
9582 0x90, 0x5f, 0x2c, 0x30, 0x70, 0xb7, 0xce, 0xc3,
9583 0xac, 0x82, 0x71, 0x85, 0x87, 0x65, 0x49, 0x48,
9584 0x58, 0x41, 0x28, 0x25, 0x42, 0x6f, 0x99, 0xb1,
9585 0xa2, 0x7d, 0x50, 0x38, 0x36, 0x35, 0x28, 0x19,
9586 0x4b, 0x51, 0x4d, 0x3e, 0x39, 0x58, 0x98, 0xcc,
9587 0xc2, 0x86, 0x48, 0x3b, 0x57, 0x67, 0x53, 0x35,
9588 0x37, 0x2c, 0x39, 0x70, 0xb2, 0xcb, 0xac, 0x82,
9589 0x5f, 0x7f, 0xa6, 0xbc, 0xc2, 0xca, 0xde, 0xf0,
9590 0x90, 0xa2, 0xa8, 0x91, 0x74, 0x7b, 0xab, 0xdb,
9591 0x70, 0x49, 0x1f, 0x17, 0x32, 0x56, 0x6b, 0x70,
9592 0x4f, 0x51, 0x47, 0x2d, 0x17, 0x21, 0x49, 0x6f,
9593 0x8c, 0x5e, 0x5c, 0x98, 0xc1, 0xaa, 0x80, 0x6e,
9594 0x54, 0x48, 0x6c, 0xb9, 0xe0, 0xc3, 0x9a, 0x8c,
9595 0x2f, 0x72, 0xa6, 0x89, 0x39, 0x0c, 0x29, 0x5c,
9596 0x0f, 0x1d, 0x33, 0x4a, 0x5b, 0x63, 0x64, 0x63,
9597 0x56, 0x7a, 0x88, 0x5e, 0x23, 0x20, 0x66, 0xb1,
9598 0x9c, 0xcc, 0xf9, 0xf4, 0xc5, 0x9b, 0x94, 0xa0,
9599 0x74, 0x7b, 0x9a, 0xbb, 0xb5, 0x9a, 0x9d, 0xb9,
9600 0x96, 0x5e, 0x22, 0x13, 0x2c, 0x43, 0x3c, 0x29,
9601 0x48, 0x57, 0x61, 0x5a, 0x53, 0x64, 0x8c, 0xaf,
9602 0xba, 0xff, 0xf9, 0x84, 0x36, 0x4e, 0x6f, 0x67,
9603 0x73, 0x96, 0xc3, 0xd8, 0xc8, 0x9b, 0x6b, 0x4c,
9604 0x7a, 0x9a, 0xb9, 0xba, 0xa6, 0xa1, 0xb7, 0xd2,
9605 0xc8, 0x71, 0x3e, 0x66, 0xa3, 0xbc, 0xce, 0xe6,
9606 0xbe, 0x4e, 0x15, 0x47, 0x6a, 0x40, 0x19, 0x1f,
9607 0x6a, 0x93, 0xbf, 0xc8, 0xa9, 0x7d, 0x5e, 0x51,
9608 0xba, 0xbe, 0xcc, 0xe5, 0xf6, 0xec, 0xc9, 0xaa,
9609 0xbe, 0x96, 0x68, 0x5b, 0x79, 0xae, 0xdd, 0xf6,
9610 0xd5, 0x81, 0x6f, 0x64, 0x3c, 0x6e, 0xac, 0x8b,
9611 0x4d, 0x55, 0x62, 0x6d, 0x74, 0x74, 0x71, 0x6f,
9612 0x6a, 0x70, 0x77, 0x79, 0x79, 0x7e, 0x8a, 0x94,
9613 0x8f, 0x87, 0x80, 0x7f, 0x82, 0x81, 0x79, 0x72,
9614 0x65, 0x71, 0x82, 0x8f, 0x90, 0x87, 0x78, 0x6d,
9615 0x6e, 0x72, 0x77, 0x7a, 0x78, 0x72, 0x69, 0x64,
9616 0x69, 0x61, 0x58, 0x54, 0x54, 0x50, 0x47, 0x3f,
9617 0x47, 0x2f, 0x1d, 0x1d, 0x4b, 0x5d, 0x4a, 0x67,
9618 0x64, 0x59, 0x4c, 0x48, 0x53, 0x6c, 0x89, 0x9c,
9619 0x67, 0x6d, 0x76, 0x7d, 0x7a, 0x63, 0x39, 0x16,
9620 0x31, 0x4d, 0x77, 0x9e, 0xb8, 0xc1, 0xbc, 0xb4,
9621 0xe7, 0xb6, 0x89, 0x61, 0x22, 0x00, 0x2d, 0x85,
9622 0x76, 0x55, 0x33, 0x2a, 0x38, 0x44, 0x3e, 0x33,
9623 0xc5, 0xcd, 0xa3, 0x59, 0x41, 0x60, 0x6a, 0x52,
9624 0x4e, 0x58, 0x76, 0x88, 0x66, 0x3a, 0x4a, 0x7d,
9625 0x58, 0x77, 0x7a, 0x5c, 0x54, 0x70, 0x7e, 0x72,
9626 0x72, 0x3d, 0x24, 0x58, 0xad, 0xdd, 0xdb, 0xc9,
9627 0xaf, 0xad, 0xab, 0xb7, 0xcd, 0xc0, 0x74, 0x23,
9628 0x64, 0x45, 0x2b, 0x37, 0x61, 0x8a, 0x99, 0x97,
9629 0xa7, 0x8f, 0x76, 0x6b, 0x67, 0x53, 0x2b, 0x09,
9630 0x37, 0x38, 0x3e, 0x48, 0x57, 0x6a, 0x7a, 0x84,
9631 0xf6, 0xac, 0x5c, 0x42, 0x57, 0x62, 0x46, 0x21,
9632 0x25, 0x2e, 0x52, 0x78, 0x70, 0x4b, 0x47, 0x5f,
9633 0x6b, 0x40, 0x25, 0x47, 0x94, 0xd0, 0xd9, 0xc9,
9634 0x2f, 0x44, 0x68, 0x90, 0xb3, 0xcd, 0xdc, 0xe3,
9635 0x45, 0x43, 0x42, 0x45, 0x4f, 0x5d, 0x6c, 0x75,
9636 0x6d, 0x56, 0x42, 0x48, 0x69, 0x8e, 0xa6, 0xae,
9637 0xeb, 0xbd, 0x94, 0x97, 0xaf, 0xa7, 0x70, 0x37,
9638 0x33, 0x40, 0x49, 0x3e, 0x28, 0x1a, 0x1f, 0x2b,
9639 0x28, 0x55, 0x8f, 0xb2, 0xb0, 0x95, 0x77, 0x65,
9640 0x49, 0x57, 0x36, 0x22, 0x3d, 0x41, 0x41, 0x66,
9641 0x62, 0x51, 0x43, 0x47, 0x55, 0x58, 0x49, 0x38,
9642 0x60, 0x6c, 0x70, 0x69, 0x66, 0x64, 0x55, 0x42,
9643 0x4f, 0x86, 0xc5, 0xdc, 0xc8, 0xab, 0x9e, 0xa0,
9644 0x8b, 0x54, 0x48, 0x81, 0xb0, 0xa2, 0x7f, 0x6f,
9645 0x4f, 0x4a, 0x31, 0x28, 0x65, 0xc7, 0xf8, 0xf2,
9646 0xc5, 0xc2, 0x9b, 0x4b, 0x0b, 0x23, 0x8e, 0xf3,
9647 0x60, 0x68, 0x91, 0xb8, 0xa1, 0x69, 0x5f, 0x7f,
9648 0x7e, 0xa0, 0xc3, 0xcb, 0xbf, 0xba, 0xca, 0xde,
9649 0x95, 0x5d, 0x44, 0x62, 0x7d, 0x7e, 0x8e, 0xaf,
9650 0xd2, 0xa8, 0x7c, 0x71, 0x7e, 0x7f, 0x65, 0x48,
9651 0x88, 0x7c, 0x9a, 0xcd, 0xc7, 0x87, 0x5b, 0x5c,
9652 0x6a, 0x4e, 0x69, 0xc6, 0xff, 0xe7, 0x9d, 0x6d,
9653 0x38, 0x60, 0x93, 0xaf, 0xa8, 0x8b, 0x6e, 0x5d,
9654 0x86, 0x3e, 0x58, 0x47, 0x2e, 0x85, 0xbe, 0xbb,
9655 0xa0, 0x82, 0x68, 0x6d, 0x86, 0x91, 0x80, 0x69,
9656 0x75, 0x7b, 0x85, 0x8d, 0x92, 0x91, 0x8f, 0x8c,
9657 0x79, 0x81, 0x89, 0x8a, 0x81, 0x71, 0x62, 0x59,
9658 0x6d, 0x77, 0x83, 0x86, 0x81, 0x7c, 0x7b, 0x7c,
9659 0x72, 0x6c, 0x62, 0x5b, 0x5b, 0x62, 0x6b, 0x72,
9660 0x6e, 0x66, 0x5c, 0x57, 0x54, 0x4f, 0x45, 0x3d,
9661 0x31, 0x8f, 0xd3, 0xe1, 0xeb, 0xe3, 0xa8, 0x68,
9662 0x2f, 0x5d, 0x94, 0xb6, 0xc2, 0xcb, 0xd9, 0xe4,
9663 0x5d, 0x55, 0x58, 0x4f, 0x22, 0x05, 0x3d, 0x94,
9664 0xe4, 0xca, 0xb2, 0xb5, 0xc6, 0xc8, 0xb1, 0x97,
9665 0xe3, 0x7b, 0x59, 0x9e, 0xb1, 0x5f, 0x20, 0x25,
9666 0x4a, 0x6d, 0x76, 0x59, 0x44, 0x41, 0x2e, 0x0e,
9667 0xaa, 0xe6, 0xf0, 0xa9, 0x68, 0x5c, 0x5c, 0x4d,
9668 0x5b, 0x62, 0x6c, 0x73, 0x70, 0x62, 0x4d, 0x3e,
9669 0x54, 0x59, 0x5e, 0x5e, 0x5c, 0x5b, 0x5d, 0x60,
9670 0x7f, 0x59, 0x46, 0x80, 0xc8, 0xc4, 0xae, 0xc0,
9671 0x8e, 0x92, 0xb4, 0xc0, 0xb2, 0xba, 0xa2, 0x58,
9672 0x35, 0x5c, 0x5f, 0x40, 0x4c, 0x8d, 0xb5, 0xaf,
9673 0x97, 0xa5, 0x92, 0x76, 0x65, 0x3c, 0x16, 0x16,
9674 0x2e, 0x33, 0x3c, 0x49, 0x5b, 0x6d, 0x7d, 0x87,
9675 0x48, 0x31, 0x24, 0x35, 0x54, 0x5b, 0x3f, 0x1e,
9676 0x37, 0x2b, 0x31, 0x3d, 0x2d, 0x12, 0x1f, 0x46,
9677 0x30, 0x3c, 0x4f, 0x60, 0x62, 0x4f, 0x31, 0x19,
9678 0x1d, 0x27, 0x39, 0x4e, 0x61, 0x6f, 0x78, 0x7c,
9679 0x69, 0x60, 0x52, 0x45, 0x3c, 0x3a, 0x3d, 0x3f,
9680 0x29, 0x36, 0x58, 0x8b, 0xbb, 0xd0, 0xc7, 0xb7,
9681 0xe5, 0xb9, 0x85, 0x69, 0x5e, 0x45, 0x15, 0x00,
9682 0x1e, 0x58, 0x8f, 0x8c, 0x5f, 0x42, 0x54, 0x74,
9683 0xda, 0xbb, 0x9b, 0x8f, 0x8c, 0x75, 0x44, 0x1a,
9684 0x3d, 0x4d, 0x2f, 0x1d, 0x36, 0x32, 0x29, 0x47,
9685 0x30, 0x3e, 0x3e, 0x1f, 0x00, 0x07, 0x40, 0x78,
9686 0xac, 0xd1, 0xf8, 0xf5, 0xc6, 0x9e, 0xa6, 0xc7,
9687 0xe8, 0xe2, 0xd8, 0xc9, 0xb1, 0x8d, 0x65, 0x4b,
9688 0x07, 0x5b, 0xb3, 0xd1, 0xba, 0x9c, 0x8e, 0x8c,
9689 0x10, 0x24, 0x51, 0x85, 0x9a, 0x85, 0x5c, 0x41,
9690 0x5a, 0x55, 0x69, 0xa0, 0xd0, 0xc0, 0x72, 0x27,
9691 0x06, 0x79, 0xca, 0xac, 0x6e, 0x65, 0x7f, 0x90,
9692 0xc9, 0xbf, 0xa1, 0x74, 0x4f, 0x4e, 0x71, 0x94,
9693 0x4e, 0x62, 0x5c, 0x49, 0x63, 0x9c, 0xad, 0x96,
9694 0x6c, 0x89, 0x9b, 0x83, 0x59, 0x4e, 0x70, 0x9a,
9695 0x93, 0x8e, 0xb5, 0xf5, 0xf9, 0xb2, 0x68, 0x49,
9696 0x94, 0xab, 0x90, 0x54, 0x4e, 0x6e, 0x55, 0x12,
9697 0x31, 0x68, 0xaa, 0xc9, 0xbb, 0x98, 0x7c, 0x71,
9698 0x37, 0x24, 0x31, 0x20, 0x1c, 0x22, 0x18, 0x40,
9699 0x74, 0x6c, 0x61, 0x59, 0x57, 0x55, 0x52, 0x4f,
9700 0x69, 0x6e, 0x75, 0x7b, 0x7e, 0x7d, 0x7a, 0x77,
9701 0x85, 0x73, 0x63, 0x64, 0x72, 0x7a, 0x74, 0x69,
9702 0x75, 0x7b, 0x82, 0x80, 0x79, 0x73, 0x73, 0x76,
9703 0x89, 0x83, 0x7a, 0x71, 0x6c, 0x6c, 0x6f, 0x71,
9704 0x77, 0x6e, 0x65, 0x60, 0x5e, 0x59, 0x50, 0x47,
9705 0x30, 0x57, 0xa4, 0xc6, 0xc0, 0xd5, 0xc4, 0x73,
9706 0x4a, 0x49, 0x2e, 0x1b, 0x44, 0x8a, 0x96, 0x73,
9707 0xa8, 0x64, 0x41, 0x6d, 0xa8, 0xbd, 0xbf, 0xc6,
9708 0xb2, 0xa6, 0x9b, 0x9a, 0x9f, 0x9e, 0x93, 0x87,
9709 0x48, 0x12, 0x00, 0x48, 0xb8, 0xf7, 0xeb, 0xc9,
9710 0x75, 0x85, 0x73, 0x41, 0x2e, 0x47, 0x5d, 0x5b,
9711 0xcf, 0xdb, 0xc2, 0x90, 0x81, 0x93, 0x88, 0x64,
9712 0x43, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x25, 0x1a,
9713 0x3a, 0x6c, 0x98, 0x92, 0x6d, 0x61, 0x83, 0xae,
9714 0xc2, 0xa4, 0x73, 0x6d, 0x8d, 0x88, 0x73, 0x79,
9715 0x6d, 0x70, 0x99, 0xb8, 0xb7, 0xbc, 0xa9, 0x73,
9716 0x3c, 0x4c, 0x51, 0x42, 0x36, 0x46, 0x6d, 0x8e,
9717 0x99, 0xac, 0xa0, 0x8a, 0x76, 0x43, 0x0f, 0x05,
9718 0x19, 0x25, 0x3a, 0x55, 0x72, 0x8c, 0x9f, 0xaa,
9719 0xa7, 0x94, 0x78, 0x5f, 0x4e, 0x46, 0x43, 0x41,
9720 0x24, 0x3b, 0x73, 0xa6, 0x9c, 0x67, 0x4c, 0x55,
9721 0x12, 0x4d, 0x8b, 0x98, 0x73, 0x4a, 0x3b, 0x40,
9722 0x4a, 0x4f, 0x55, 0x57, 0x52, 0x45, 0x37, 0x2e,
9723 0x40, 0x3f, 0x40, 0x46, 0x52, 0x63, 0x74, 0x7e,
9724 0x8b, 0x79, 0x66, 0x61, 0x66, 0x62, 0x51, 0x3f,
9725 0x00, 0x05, 0x4f, 0x99, 0xcb, 0xd9, 0xcd, 0xbe,
9726 0x62, 0x85, 0x9d, 0x89, 0x5e, 0x51, 0x74, 0x9f,
9727 0x9b, 0xb3, 0xc1, 0xa8, 0x74, 0x49, 0x3e, 0x44,
9728 0x60, 0xab, 0xb9, 0x87, 0x52, 0x28, 0x43, 0x97,
9729 0x95, 0xa6, 0xb4, 0xad, 0x97, 0x85, 0x84, 0x8a,
9730 0xc1, 0xa2, 0x9e, 0xb4, 0xab, 0x8c, 0x99, 0xc6,
9731 0xcc, 0xd6, 0xc9, 0x93, 0x53, 0x3e, 0x5f, 0x89,
9732 0x98, 0x7f, 0x4a, 0x2e, 0x5b, 0x99, 0x89, 0x4a,
9733 0x72, 0x6d, 0x8b, 0xb2, 0x98, 0x4c, 0x24, 0x2d,
9734 0x23, 0x50, 0x6f, 0x50, 0x10, 0x00, 0x0a, 0x35,
9735 0x79, 0xa5, 0xa9, 0x73, 0x4d, 0x55, 0x5c, 0x4f,
9736 0x44, 0x44, 0x3f, 0x33, 0x2f, 0x42, 0x69, 0x89,
9737 0x7d, 0x53, 0x1b, 0x21, 0x8b, 0xff, 0xff, 0xd9,
9738 0xb9, 0xbb, 0xb1, 0x92, 0x6e, 0x5c, 0x63, 0x72,
9739 0xab, 0x6d, 0x3b, 0x3c, 0x58, 0x78, 0xa6, 0xd0,
9740 0xda, 0xc4, 0xa6, 0x83, 0x5e, 0x4c, 0x5d, 0x7b,
9741 0x87, 0xa5, 0xc9, 0xd9, 0xd4, 0xca, 0xc9, 0xcd,
9742 0xf4, 0xbc, 0x6f, 0x29, 0x68, 0xdc, 0xad, 0x33,
9743 0x41, 0x52, 0x66, 0x70, 0x6c, 0x63, 0x5d, 0x5c,
9744 0x76, 0x78, 0x7c, 0x7f, 0x7f, 0x7d, 0x7a, 0x77,
9745 0x98, 0x88, 0x78, 0x77, 0x81, 0x82, 0x75, 0x66,
9746 0x78, 0x7e, 0x83, 0x81, 0x79, 0x73, 0x72, 0x75,
9747 0x70, 0x70, 0x71, 0x72, 0x74, 0x76, 0x78, 0x79,
9748 0x6e, 0x66, 0x5d, 0x59, 0x57, 0x53, 0x4a, 0x42,
9749 0x3d, 0x39, 0x81, 0xb3, 0x77, 0x4b, 0x86, 0xcd,
9750 0xac, 0x9a, 0x51, 0x0b, 0x22, 0x6c, 0x6a, 0x2b,
9751 0x43, 0x0c, 0x00, 0x2a, 0x7e, 0xb8, 0xd7, 0xe8,
9752 0xbe, 0xc2, 0xbf, 0xae, 0x95, 0x84, 0x81, 0x85,
9753 0x95, 0x98, 0x6e, 0x42, 0x6d, 0xbf, 0xb8, 0x6f,
9754 0x2b, 0x80, 0xcd, 0xdd, 0xcc, 0xb0, 0x7d, 0x49,
9755 0x6b, 0x8b, 0x9e, 0x99, 0x94, 0x89, 0x60, 0x2e,
9756 0x6b, 0x65, 0x51, 0x32, 0x22, 0x38, 0x6e, 0x9d,
9757 0x90, 0x9b, 0x9c, 0x87, 0x6c, 0x69, 0x84, 0xa1,
9758 0x9f, 0x94, 0x61, 0x3e, 0x51, 0x65, 0x6b, 0x7b,
9759 0x8c, 0x71, 0x76, 0x86, 0x82, 0x84, 0x8a, 0x80,
9760 0x2f, 0x2a, 0x39, 0x4a, 0x37, 0x26, 0x52, 0x99,
9761 0xb7, 0xc7, 0xb9, 0xa4, 0x93, 0x5f, 0x24, 0x15,
9762 0x55, 0x5f, 0x70, 0x81, 0x90, 0x99, 0x9d, 0x9e,
9763 0x3b, 0x48, 0x50, 0x4d, 0x4d, 0x66, 0x96, 0xbe,
9764 0xce, 0xc8, 0xd2, 0xd7, 0xae, 0x6d, 0x54, 0x62,
9765 0x2c, 0x53, 0x74, 0x6a, 0x43, 0x30, 0x45, 0x64,
9766 0xc1, 0xa6, 0x7a, 0x51, 0x38, 0x32, 0x3a, 0x42,
9767 0x54, 0x4f, 0x47, 0x41, 0x42, 0x48, 0x50, 0x56,
9768 0x87, 0x7e, 0x77, 0x78, 0x75, 0x5d, 0x34, 0x13,
9769 0x5a, 0x78, 0x99, 0xa8, 0xa9, 0xb0, 0xc7, 0xdd,
9770 0xa3, 0x9f, 0x99, 0x96, 0x98, 0x9d, 0xa3, 0xa8,
9771 0x5b, 0x59, 0x5c, 0x6a, 0x76, 0x75, 0x64, 0x53,
9772 0x7b, 0xa9, 0xbb, 0xcf, 0xed, 0xc5, 0x83, 0x77,
9773 0xa9, 0xb4, 0xc4, 0xd2, 0xdc, 0xe3, 0xea, 0xee,
9774 0xe7, 0x87, 0x48, 0x52, 0x51, 0x3b, 0x5c, 0xa2,
9775 0x7e, 0xa3, 0xaf, 0x78, 0x26, 0x08, 0x36, 0x73,
9776 0x91, 0xce, 0xe1, 0x9b, 0x4b, 0x47, 0x81, 0xb7,
9777 0x75, 0x83, 0xa4, 0xb6, 0x99, 0x69, 0x5f, 0x75,
9778 0x99, 0x9b, 0x95, 0x85, 0x7e, 0x97, 0xca, 0xf5,
9779 0xe0, 0xbb, 0xb0, 0xc0, 0xaa, 0x6b, 0x45, 0x48,
9780 0x2d, 0x2e, 0x31, 0x3a, 0x4f, 0x73, 0x9d, 0xb9,
9781 0x69, 0x7d, 0xb2, 0xdd, 0xc4, 0x8b, 0x86, 0xac,
9782 0x9e, 0x7e, 0x5b, 0x50, 0x57, 0x58, 0x47, 0x33,
9783 0x6d, 0x59, 0x43, 0x39, 0x42, 0x67, 0xa5, 0xd9,
9784 0xe1, 0xbf, 0xbd, 0xd2, 0xb9, 0x82, 0x80, 0xab,
9785 0x96, 0x71, 0x4c, 0x48, 0x67, 0x8d, 0xa1, 0xa6,
9786 0xdd, 0xf2, 0xff, 0xdb, 0xaf, 0xb5, 0xae, 0x8d,
9787 0x76, 0x72, 0x6d, 0x6a, 0x6c, 0x72, 0x79, 0x7d,
9788 0x74, 0x74, 0x74, 0x74, 0x73, 0x70, 0x6e, 0x6d,
9789 0x81, 0x80, 0x7b, 0x73, 0x69, 0x61, 0x5c, 0x5b,
9790 0x5d, 0x6a, 0x78, 0x7d, 0x79, 0x71, 0x6c, 0x6c,
9791 0x73, 0x74, 0x74, 0x74, 0x71, 0x6c, 0x68, 0x64,
9792 0x68, 0x60, 0x58, 0x54, 0x54, 0x50, 0x47, 0x40,
9793 0x43, 0x3d, 0x27, 0x3a, 0x52, 0x1f, 0x04, 0x3b,
9794 0x7a, 0x83, 0x75, 0x5c, 0x67, 0x8c, 0x93, 0x7d,
9795 0xaf, 0xc7, 0xc8, 0x92, 0x47, 0x3b, 0x89, 0xe2,
9796 0xc3, 0xd1, 0xd2, 0xb2, 0x81, 0x62, 0x62, 0x70,
9797 0xa4, 0xdf, 0xd1, 0x6d, 0x35, 0x4d, 0x53, 0x2f,
9798 0x6e, 0xa4, 0xc1, 0xaa, 0x98, 0xab, 0xc0, 0xc2,
9799 0x0e, 0x4b, 0x81, 0x7d, 0x4f, 0x26, 0x15, 0x12,
9800 0x5d, 0x67, 0x72, 0x77, 0x72, 0x6b, 0x66, 0x65,
9801 0x96, 0x95, 0x8e, 0x80, 0x6f, 0x64, 0x63, 0x66,
9802 0x7d, 0x75, 0x4a, 0x2a, 0x31, 0x39, 0x49, 0x6e,
9803 0x96, 0x72, 0x63, 0x6a, 0x61, 0x53, 0x5c, 0x6e,
9804 0x64, 0x4f, 0x51, 0x5e, 0x4b, 0x2e, 0x47, 0x7e,
9805 0xa1, 0xad, 0x9d, 0x8c, 0x84, 0x56, 0x1d, 0x0c,
9806 0xaf, 0xb3, 0xb9, 0xb8, 0xae, 0x9d, 0x8a, 0x7e,
9807 0x4f, 0x78, 0xa1, 0xa3, 0x86, 0x6c, 0x6e, 0x7b,
9808 0x76, 0x85, 0xb0, 0xd0, 0xb0, 0x65, 0x38, 0x37,
9809 0x22, 0x2f, 0x42, 0x55, 0x70, 0x97, 0xc4, 0xe4,
9810 0xb9, 0xa4, 0x82, 0x5c, 0x3d, 0x29, 0x20, 0x1d,
9811 0x4b, 0x43, 0x39, 0x2f, 0x2b, 0x2d, 0x32, 0x36,
9812 0x60, 0x4d, 0x39, 0x34, 0x3a, 0x38, 0x29, 0x19,
9813 0x4a, 0x5d, 0x68, 0x5e, 0x52, 0x65, 0x98, 0xc7,
9814 0xa2, 0xb4, 0xd1, 0xef, 0xf9, 0xe5, 0xbd, 0x9e,
9815 0x77, 0x5b, 0x39, 0x29, 0x30, 0x41, 0x4d, 0x52,
9816 0x5c, 0x94, 0x96, 0x6f, 0x49, 0x09, 0x00, 0x07,
9817 0x36, 0x72, 0xaf, 0xb7, 0x92, 0x74, 0x79, 0x8e,
9818 0x76, 0x48, 0x39, 0x44, 0x29, 0x15, 0x65, 0xdd,
9819 0xb8, 0xd4, 0xf2, 0xf2, 0xca, 0x89, 0x48, 0x22,
9820 0x51, 0x42, 0x46, 0x5b, 0x5b, 0x45, 0x41, 0x50,
9821 0x48, 0x69, 0x72, 0x57, 0x4c, 0x6b, 0x91, 0xa2,
9822 0x89, 0x6c, 0x63, 0x90, 0xd8, 0xfe, 0xea, 0xc6,
9823 0xd3, 0xa0, 0x69, 0x3a, 0x0a, 0x0a, 0x6a, 0xdd,
9824 0xd0, 0xa5, 0x6c, 0x46, 0x49, 0x6f, 0xa0, 0xc0,
9825 0x92, 0xaa, 0xdd, 0xf8, 0xc7, 0x7e, 0x76, 0xa0,
9826 0xbd, 0xa7, 0x88, 0x6f, 0x61, 0x55, 0x48, 0x3d,
9827 0x3f, 0x5f, 0x6b, 0x4a, 0x1f, 0x1a, 0x3d, 0x60,
9828 0xc9, 0xdc, 0xc0, 0x7f, 0x62, 0x62, 0x36, 0x00,
9829 0xa7, 0x5b, 0x16, 0x1e, 0x61, 0x92, 0x87, 0x63,
9830 0x1e, 0x82, 0x6f, 0x2b, 0x4a, 0x78, 0x5c, 0x27,
9831 0x5f, 0x61, 0x64, 0x65, 0x67, 0x6d, 0x76, 0x7e,
9832 0x7d, 0x7c, 0x7a, 0x77, 0x76, 0x76, 0x76, 0x76,
9833 0x79, 0x71, 0x63, 0x57, 0x53, 0x5b, 0x69, 0x74,
9834 0x55, 0x6a, 0x86, 0x98, 0x9c, 0x96, 0x90, 0x8d,
9835 0x79, 0x7a, 0x7a, 0x7a, 0x77, 0x72, 0x6e, 0x6b,
9836 0x70, 0x69, 0x61, 0x5e, 0x5e, 0x5b, 0x53, 0x4c,
9837 0x1b, 0x3c, 0x24, 0x3f, 0x8f, 0x69, 0x33, 0x6d,
9838 0x2f, 0x1d, 0x26, 0x47, 0x51, 0x42, 0x48, 0x63,
9839 0xe0, 0x9e, 0x5e, 0x63, 0xa1, 0xc8, 0xa8, 0x70,
9840 0x73, 0x86, 0x90, 0x7c, 0x58, 0x45, 0x4f, 0x61,
9841 0x4d, 0x7e, 0x9a, 0x7d, 0x50, 0x40, 0x48, 0x50,
9842 0x14, 0x75, 0xcb, 0xd6, 0xbf, 0xb1, 0xa1, 0x8c,
9843 0x79, 0x82, 0x80, 0x60, 0x2e, 0x18, 0x3a, 0x69,
9844 0x94, 0x80, 0x77, 0x8c, 0xa5, 0x99, 0x62, 0x2d,
9845 0x3b, 0x68, 0x96, 0x9a, 0x7b, 0x5f, 0x60, 0x6d,
9846 0x55, 0x47, 0x32, 0x39, 0x45, 0x37, 0x47, 0x84,
9847 0x6f, 0x6b, 0x73, 0x87, 0x82, 0x5d, 0x49, 0x56,
9848 0x77, 0x67, 0x5b, 0x5c, 0x5d, 0x5b, 0x60, 0x6b,
9849 0x80, 0x94, 0x94, 0x95, 0x99, 0x6a, 0x24, 0x07,
9850 0x88, 0x99, 0xb1, 0xc7, 0xd1, 0xce, 0xc3, 0xbb,
9851 0xb4, 0xd2, 0xed, 0xeb, 0xd1, 0xbd, 0xc0, 0xcc,
9852 0xce, 0xa3, 0x78, 0x56, 0x27, 0x03, 0x16, 0x44,
9853 0x54, 0x4d, 0x4f, 0x62, 0x7d, 0x8b, 0x84, 0x77,
9854 0xb1, 0x93, 0x64, 0x3a, 0x25, 0x26, 0x36, 0x44,
9855 0x1e, 0x23, 0x2e, 0x42, 0x5d, 0x7c, 0x98, 0xa8,
9856 0xdf, 0xae, 0x6f, 0x45, 0x3b, 0x42, 0x48, 0x4a,
9857 0x09, 0x21, 0x39, 0x3f, 0x3e, 0x4f, 0x76, 0x98,
9858 0xc9, 0xdd, 0xe9, 0xd6, 0xa8, 0x7d, 0x66, 0x61,
9859 0x57, 0x67, 0x6d, 0x56, 0x34, 0x29, 0x40, 0x5c,
9860 0xa2, 0x99, 0x6f, 0x78, 0xba, 0xbf, 0x91, 0x85,
9861 0x7d, 0x9e, 0xc7, 0xda, 0xc2, 0x88, 0x46, 0x1b,
9862 0x32, 0x23, 0x32, 0x52, 0x4e, 0x3b, 0x5a, 0x98,
9863 0xff, 0xe0, 0x84, 0x2d, 0x00, 0x03, 0x2a, 0x4d,
9864 0x8e, 0x63, 0x4c, 0x53, 0x45, 0x31, 0x4f, 0x8a,
9865 0x8a, 0x9b, 0x7e, 0x3c, 0x28, 0x4f, 0x6a, 0x62,
9866 0x30, 0x49, 0x67, 0x78, 0x7c, 0x80, 0x8a, 0x95,
9867 0xa1, 0xcf, 0xe1, 0xc5, 0xb7, 0xc3, 0xb6, 0x94,
9868 0x77, 0x5b, 0x3e, 0x3c, 0x58, 0x81, 0xa0, 0xae,
9869 0xa3, 0x87, 0x4f, 0x30, 0x62, 0xb1, 0xbf, 0x99,
9870 0xe3, 0xa4, 0x62, 0x4e, 0x5b, 0x54, 0x24, 0x00,
9871 0x1a, 0x84, 0xeb, 0xff, 0xd7, 0x9b, 0x5d, 0x2f,
9872 0x45, 0x36, 0x1f, 0x16, 0x31, 0x5a, 0x70, 0x6f,
9873 0xea, 0xb7, 0x97, 0xbb, 0xfc, 0xff, 0xc1, 0x73,
9874 0x27, 0xcf, 0xff, 0xb0, 0x6a, 0x77, 0x7c, 0x35,
9875 0x16, 0x3a, 0x64, 0x78, 0x74, 0x6b, 0x6d, 0x75,
9876 0x8a, 0x87, 0x84, 0x82, 0x82, 0x85, 0x89, 0x8b,
9877 0x89, 0x76, 0x64, 0x63, 0x6e, 0x73, 0x6a, 0x5d,
9878 0x65, 0x74, 0x83, 0x86, 0x7a, 0x67, 0x57, 0x4e,
9879 0x6c, 0x6d, 0x6d, 0x6e, 0x70, 0x73, 0x75, 0x76,
9880 0x6b, 0x64, 0x5c, 0x5a, 0x5b, 0x58, 0x51, 0x4a,
9881 0x4b, 0x57, 0x41, 0x3d, 0x4c, 0x3d, 0x6b, 0xe3,
9882 0x95, 0x4a, 0x2c, 0x52, 0x5f, 0x42, 0x49, 0x78,
9883 0x44, 0x7d, 0x9c, 0x77, 0x3c, 0x1e, 0x1a, 0x19,
9884 0x39, 0x48, 0x59, 0x61, 0x64, 0x6c, 0x7d, 0x8c,
9885 0x6c, 0x53, 0x54, 0x73, 0x76, 0x4f, 0x2e, 0x28,
9886 0x44, 0x9a, 0xdb, 0xd0, 0xb0, 0xb1, 0xc2, 0xc8,
9887 0x97, 0x72, 0x59, 0x59, 0x50, 0x3c, 0x3b, 0x4d,
9888 0x9d, 0xa2, 0xa3, 0x9d, 0x98, 0xa1, 0xb7, 0xcb,
9889 0x85, 0x78, 0x6b, 0x69, 0x70, 0x77, 0x78, 0x75,
9890 0x6e, 0x58, 0x44, 0x52, 0x59, 0x34, 0x33, 0x6b,
9891 0x86, 0x95, 0x94, 0x90, 0x87, 0x60, 0x44, 0x4f,
9892 0x52, 0x51, 0x48, 0x45, 0x5b, 0x78, 0x7a, 0x69,
9893 0x74, 0x90, 0x9f, 0xb2, 0xbe, 0x89, 0x33, 0x08,
9894 0x43, 0x5f, 0x8c, 0xba, 0xdb, 0xeb, 0xec, 0xea,
9895 0xd8, 0xd8, 0xd0, 0xbd, 0xa9, 0xa0, 0xa7, 0xb1,
9896 0x5d, 0x5e, 0x76, 0x8f, 0x7e, 0x55, 0x4f, 0x68,
9897 0x52, 0x57, 0x68, 0x87, 0xa3, 0xa9, 0x96, 0x81,
9898 0x0f, 0x38, 0x71, 0x98, 0x93, 0x63, 0x22, 0x00,
9899 0x51, 0x52, 0x57, 0x62, 0x74, 0x8a, 0x9f, 0xac,
9900 0x6f, 0x67, 0x62, 0x67, 0x6a, 0x5a, 0x38, 0x1b,
9901 0x53, 0x4b, 0x3d, 0x33, 0x3c, 0x61, 0x96, 0xbd,
9902 0xe3, 0xcb, 0x9a, 0x5b, 0x26, 0x11, 0x1d, 0x30,
9903 0x49, 0x45, 0x53, 0x7c, 0xa9, 0xb6, 0x9c, 0x7b,
9904 0x83, 0xd3, 0xfe, 0xff, 0xf7, 0xb9, 0x85, 0x92,
9905 0xd9, 0xa6, 0x80, 0x96, 0xce, 0xe3, 0xbd, 0x8a,
9906 0xa0, 0x8e, 0x85, 0x8b, 0x84, 0x64, 0x3d, 0x27,
9907 0x0d, 0x1b, 0x2c, 0x3a, 0x4e, 0x73, 0xa5, 0xcb,
9908 0xa6, 0x97, 0x8a, 0x83, 0x79, 0x6f, 0x6e, 0x74,
9909 0x82, 0x8f, 0x99, 0x9b, 0x92, 0x76, 0x45, 0x19,
9910 0x10, 0x0e, 0x1a, 0x40, 0x6f, 0x87, 0x81, 0x72,
9911 0xb4, 0xb9, 0xaa, 0xa2, 0xc5, 0xe4, 0xba, 0x6f,
9912 0x0a, 0x0c, 0x23, 0x57, 0x94, 0xbd, 0xc3, 0xba,
9913 0xc0, 0xf1, 0xf8, 0xc1, 0x9c, 0xb0, 0xcf, 0xd5,
9914 0xe2, 0x9a, 0x5c, 0x6b, 0xab, 0xc7, 0x9a, 0x5e,
9915 0x73, 0xa2, 0xc0, 0xc1, 0xcb, 0xd6, 0xb7, 0x83,
9916 0x96, 0x55, 0x31, 0x38, 0x28, 0x14, 0x4c, 0xa7,
9917 0xbb, 0xbb, 0xcb, 0xec, 0xff, 0xde, 0x8f, 0x4d,
9918 0x4a, 0x1a, 0x52, 0xbb, 0x76, 0x15, 0x2c, 0x29,
9919 0x37, 0x4a, 0x60, 0x68, 0x65, 0x64, 0x6d, 0x77,
9920 0x78, 0x75, 0x72, 0x71, 0x74, 0x7a, 0x81, 0x86,
9921 0x7c, 0x72, 0x6d, 0x72, 0x78, 0x6e, 0x53, 0x3a,
9922 0x53, 0x5f, 0x6d, 0x74, 0x75, 0x74, 0x77, 0x7b,
9923 0x81, 0x7b, 0x72, 0x69, 0x64, 0x64, 0x67, 0x69,
9924 0x62, 0x5b, 0x54, 0x52, 0x54, 0x52, 0x4b, 0x44,
9925 0x76, 0x7c, 0x69, 0x51, 0x4e, 0x48, 0x30, 0x1f,
9926 0x49, 0x21, 0x12, 0x25, 0x2f, 0x37, 0x6d, 0xb3,
9927 0x9c, 0xd4, 0xe2, 0xa1, 0x57, 0x3a, 0x36, 0x30,
9928 0x46, 0x43, 0x47, 0x5a, 0x75, 0x88, 0x8c, 0x89,
9929 0x7e, 0x51, 0x3f, 0x5d, 0x73, 0x62, 0x49, 0x42,
9930 0x5b, 0xaa, 0xdc, 0xbf, 0x96, 0x9f, 0xc4, 0xdb,
9931 0xcd, 0xbc, 0xcf, 0xfb, 0xfc, 0xcc, 0xac, 0xb1,
9932 0x46, 0x74, 0xa2, 0xa6, 0x8e, 0x88, 0xa8, 0xcd,
9933 0xce, 0x82, 0x3a, 0x3c, 0x75, 0x99, 0x83, 0x5a,
9934 0x4e, 0x44, 0x31, 0x3b, 0x53, 0x49, 0x49, 0x6e,
9935 0x97, 0xb2, 0x9c, 0x75, 0x6a, 0x54, 0x42, 0x50,
9936 0x45, 0x4c, 0x48, 0x40, 0x4a, 0x5f, 0x62, 0x55,
9937 0x6e, 0x7d, 0x7c, 0x85, 0x93, 0x67, 0x1a, 0x00,
9938 0x5a, 0x72, 0x96, 0xb7, 0xc9, 0xc9, 0xbe, 0xb3,
9939 0xad, 0xb5, 0xbd, 0xba, 0xa3, 0x7b, 0x4f, 0x33,
9940 0x3d, 0x53, 0x8a, 0xbc, 0xb2, 0x7e, 0x64, 0x6e,
9941 0x2b, 0x31, 0x3d, 0x48, 0x4e, 0x4b, 0x41, 0x38,
9942 0x2c, 0x23, 0x17, 0x11, 0x19, 0x2b, 0x41, 0x50,
9943 0x61, 0x5b, 0x52, 0x4c, 0x4b, 0x50, 0x57, 0x5c,
9944 0x61, 0x56, 0x4f, 0x56, 0x61, 0x5e, 0x49, 0x34,
9945 0x21, 0x31, 0x4e, 0x71, 0x92, 0xaa, 0xb8, 0xbe,
9946 0xac, 0x7a, 0x40, 0x26, 0x30, 0x41, 0x43, 0x3c,
9947 0x3c, 0x55, 0x78, 0x97, 0xb2, 0xd0, 0xf3, 0xff,
9948 0xcd, 0xea, 0xc9, 0x8d, 0x68, 0x3b, 0x2d, 0x58,
9949 0x65, 0x50, 0x42, 0x55, 0x79, 0x8a, 0x7c, 0x66,
9950 0x67, 0x8e, 0xa6, 0x92, 0x6e, 0x5f, 0x65, 0x6d,
9951 0x4f, 0x41, 0x4b, 0x84, 0xca, 0xe2, 0xbe, 0x8f,
9952 0x67, 0x6f, 0x65, 0x5d, 0x7e, 0xa7, 0x93, 0x5e,
9953 0x50, 0x32, 0x3f, 0x7f, 0xa6, 0x97, 0x83, 0x85,
9954 0xd4, 0x96, 0x50, 0x39, 0x59, 0x89, 0xa8, 0xb2,
9955 0x6b, 0x52, 0x56, 0x78, 0x83, 0x83, 0xac, 0xe8,
9956 0xb7, 0x9c, 0x87, 0x92, 0xb8, 0xd6, 0xdb, 0xd3,
9957 0x99, 0x8a, 0x8b, 0x8f, 0x6f, 0x55, 0x80, 0xcb,
9958 0xbe, 0xb6, 0xaa, 0x9e, 0x97, 0x98, 0x9e, 0xa2,
9959 0xc3, 0xd3, 0xd5, 0xdc, 0xff, 0xff, 0xca, 0x63,
9960 0x56, 0x80, 0x7b, 0x37, 0x0e, 0x39, 0x89, 0xbb,
9961 0x74, 0x92, 0xb3, 0xba, 0x9f, 0x6e, 0x3f, 0x24,
9962 0x24, 0x14, 0x1a, 0x60, 0x61, 0x41, 0x57, 0x40,
9963 0x34, 0x37, 0x43, 0x5a, 0x73, 0x7f, 0x7c, 0x74,
9964 0x7a, 0x78, 0x75, 0x74, 0x79, 0x82, 0x8b, 0x91,
9965 0x7c, 0x7e, 0x80, 0x7e, 0x79, 0x74, 0x71, 0x71,
9966 0x71, 0x75, 0x76, 0x74, 0x72, 0x77, 0x83, 0x8d,
9967 0x89, 0x82, 0x79, 0x72, 0x72, 0x78, 0x82, 0x89,
9968 0x6b, 0x64, 0x5d, 0x5c, 0x5d, 0x5c, 0x55, 0x4e,
9969 0x4e, 0x4e, 0x44, 0x39, 0x29, 0x1c, 0x39, 0x70,
9970 0x3f, 0x66, 0x7f, 0x68, 0x41, 0x4f, 0xa5, 0xfb,
9971 0xfd, 0xd6, 0x8d, 0x59, 0x6f, 0x9c, 0x89, 0x4f,
9972 0x56, 0x3f, 0x2f, 0x3a, 0x54, 0x5f, 0x4e, 0x38,
9973 0x7a, 0x6f, 0x62, 0x57, 0x52, 0x56, 0x66, 0x77,
9974 0x24, 0x75, 0xa6, 0x85, 0x55, 0x5b, 0x83, 0x9d,
9975 0xa4, 0xaf, 0xd9, 0xfb, 0xdc, 0xa8, 0xb9, 0xf5,
9976 0xa4, 0x82, 0x63, 0x65, 0x7d, 0x89, 0x78, 0x61,
9977 0x5e, 0x49, 0x45, 0x6a, 0x9c, 0xa7, 0x7f, 0x50,
9978 0x5b, 0x58, 0x33, 0x1c, 0x2f, 0x34, 0x2c, 0x36,
9979 0x58, 0x8f, 0x8a, 0x68, 0x69, 0x5f, 0x48, 0x4c,
9980 0x1e, 0x2b, 0x3a, 0x42, 0x4a, 0x58, 0x6b, 0x78,
9981 0x93, 0x8b, 0x6a, 0x5c, 0x69, 0x4f, 0x1a, 0x05,
9982 0xed, 0xed, 0xcb, 0x97, 0x8d, 0xad, 0xc0, 0xb8,
9983 0xcc, 0xc1, 0xaf, 0x9c, 0x89, 0x73, 0x5f, 0x52,
9984 0x9d, 0x8a, 0x6b, 0x4b, 0x35, 0x2b, 0x2b, 0x2d,
9985 0x14, 0x3c, 0x4d, 0x32, 0x1c, 0x23, 0x2d, 0x2a,
9986 0x2a, 0x10, 0x0e, 0x23, 0x26, 0x27, 0x59, 0x9d,
9987 0x3f, 0x3f, 0x6c, 0x9e, 0x82, 0x3d, 0x3c, 0x72,
9988 0x56, 0x5e, 0x54, 0x2d, 0x03, 0x00, 0x29, 0x54,
9989 0x4c, 0x33, 0x38, 0x7e, 0xda, 0xff, 0xd6, 0x9b,
9990 0x35, 0x2f, 0x4c, 0x80, 0x8c, 0x63, 0x3f, 0x38,
9991 0x3c, 0x4e, 0x73, 0xa3, 0xc9, 0xd2, 0xc0, 0xab,
9992 0x62, 0x55, 0x4a, 0x4e, 0x61, 0x75, 0x80, 0x83,
9993 0x3f, 0x25, 0x1f, 0x4d, 0x94, 0xba, 0xa8, 0x85,
9994 0x81, 0x7b, 0x68, 0x45, 0x20, 0x08, 0x04, 0x09,
9995 0x22, 0x8d, 0xf6, 0xfd, 0xb3, 0x78, 0x84, 0xad,
9996 0xc8, 0xc3, 0x98, 0x63, 0x62, 0x86, 0x89, 0x6a,
9997 0x5b, 0x7f, 0x89, 0x6f, 0x65, 0x6d, 0x56, 0x2a,
9998 0x47, 0x24, 0x13, 0x38, 0x77, 0x94, 0x77, 0x4d,
9999 0x1a, 0x5c, 0xa5, 0xbd, 0xab, 0x9e, 0xb2, 0xcf,
10000 0xb4, 0xcd, 0xc0, 0x9e, 0xb2, 0xe2, 0xce, 0x8d,
10001 0xa3, 0xd2, 0xa0, 0x3e, 0x34, 0x5c, 0x6a, 0x6a,
10002 0x79, 0x5d, 0x58, 0x66, 0x57, 0x3c, 0x57, 0x91,
10003 0x97, 0x9f, 0xa3, 0xa0, 0x9d, 0xa9, 0xc4, 0xdb,
10004 0x85, 0x72, 0x59, 0x4a, 0x51, 0x6f, 0x93, 0xac,
10005 0x8b, 0x51, 0x29, 0x49, 0x8f, 0xa5, 0x6e, 0x2b,
10006 0x12, 0x19, 0x63, 0x7f, 0x33, 0x12, 0x40, 0x5f,
10007 0x67, 0x61, 0x60, 0x68, 0x74, 0x78, 0x71, 0x68,
10008 0x61, 0x6b, 0x7a, 0x87, 0x8d, 0x8b, 0x85, 0x80,
10009 0x83, 0x80, 0x7b, 0x75, 0x70, 0x6d, 0x6b, 0x6b,
10010 0x7d, 0x7d, 0x7e, 0x80, 0x81, 0x83, 0x84, 0x85,
10011 0x6d, 0x71, 0x76, 0x79, 0x78, 0x73, 0x6c, 0x67,
10012 0x64, 0x65, 0x65, 0x63, 0x5e, 0x56, 0x4e, 0x4a,
10013 0x56, 0x4b, 0x3c, 0x2f, 0x26, 0x24, 0x2b, 0x34,
10014 0x4b, 0x83, 0xa6, 0x7d, 0x33, 0x24, 0x6c, 0xbf,
10015 0xa5, 0x60, 0x24, 0x1f, 0x31, 0x3c, 0x45, 0x53,
10016 0x2f, 0x29, 0x28, 0x33, 0x49, 0x5f, 0x6e, 0x73,
10017 0x5c, 0x63, 0x5b, 0x67, 0xb0, 0xeb, 0xb9, 0x54,
10018 0x52, 0x8f, 0x9d, 0x6f, 0x62, 0x78, 0x59, 0x12,
10019 0x6f, 0xbd, 0xd5, 0xc8, 0xd6, 0xd2, 0xbd, 0xc3,
10020 0xb1, 0x80, 0x44, 0x25, 0x2a, 0x3f, 0x4d, 0x51,
10021 0x74, 0x66, 0x50, 0x3f, 0x3a, 0x45, 0x58, 0x66,
10022 0x55, 0x56, 0x54, 0x4b, 0x3d, 0x31, 0x29, 0x25,
10023 0x36, 0x37, 0x3a, 0x3d, 0x41, 0x44, 0x47, 0x49,
10024 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
10025 0x67, 0x7d, 0x71, 0x77, 0x89, 0x81, 0x1f, 0x09,
10026 0x9c, 0xa6, 0x95, 0x77, 0x82, 0xb4, 0xd5, 0xd4,
10027 0xc9, 0xbf, 0x9f, 0x6d, 0x47, 0x50, 0x83, 0xb4,
10028 0x88, 0x78, 0x5f, 0x48, 0x3a, 0x38, 0x3e, 0x43,
10029 0x50, 0x5b, 0x4a, 0x1f, 0x0f, 0x25, 0x39, 0x38,
10030 0x58, 0x5e, 0x79, 0x8d, 0x6b, 0x32, 0x24, 0x3d,
10031 0x7c, 0x67, 0x45, 0x34, 0x42, 0x4c, 0x2c, 0x00,
10032 0x1b, 0x3a, 0x62, 0x7c, 0x82, 0x7c, 0x78, 0x77,
10033 0xb1, 0xb7, 0xb9, 0xad, 0x8f, 0x65, 0x3d, 0x25,
10034 0x3f, 0x38, 0x51, 0x7d, 0x81, 0x56, 0x35, 0x33,
10035 0x24, 0x61, 0xaa, 0xce, 0xc4, 0xaa, 0x9c, 0x9a,
10036 0x57, 0x8a, 0xbe, 0xc7, 0xab, 0x93, 0x98, 0xa9,
10037 0x88, 0x8c, 0x9a, 0xab, 0xaf, 0x95, 0x64, 0x3e,
10038 0xa6, 0x84, 0x66, 0x6d, 0x93, 0xb8, 0xc3, 0xbf,
10039 0xde, 0xdf, 0xe5, 0xe8, 0xd8, 0xa8, 0x65, 0x32,
10040 0x3b, 0x52, 0x76, 0x8c, 0x7e, 0x59, 0x3d, 0x33,
10041 0x2d, 0x2d, 0x37, 0x45, 0x46, 0x3a, 0x32, 0x33,
10042 0x3f, 0x12, 0x00, 0x26, 0x83, 0xc7, 0xcc, 0xb5,
10043 0x91, 0xb8, 0xe3, 0xee, 0xdd, 0xcb, 0xcd, 0xd7,
10044 0xe4, 0xcc, 0xc1, 0xbc, 0x99, 0x72, 0x80, 0xaf,
10045 0xd1, 0xcb, 0x9f, 0x96, 0xc9, 0xc8, 0x7b, 0x41,
10046 0x6a, 0x75, 0x68, 0x45, 0x33, 0x44, 0x5d, 0x67,
10047 0x3e, 0x35, 0x24, 0x13, 0x17, 0x3e, 0x7c, 0xab,
10048 0xa7, 0xae, 0xb5, 0xb7, 0xae, 0x9c, 0x88, 0x7a,
10049 0x93, 0x97, 0x99, 0x93, 0x89, 0x84, 0x86, 0x8b,
10050 0x83, 0xaa, 0xa8, 0x7b, 0x59, 0x4f, 0x49, 0x46,
10051 0x68, 0x62, 0x5f, 0x65, 0x70, 0x77, 0x74, 0x6f,
10052 0x70, 0x73, 0x78, 0x7c, 0x7f, 0x80, 0x80, 0x80,
10053 0x73, 0x78, 0x80, 0x84, 0x81, 0x77, 0x6b, 0x63,
10054 0x66, 0x67, 0x68, 0x69, 0x6b, 0x6c, 0x6d, 0x6e,
10055 0x8b, 0x8d, 0x8e, 0x8c, 0x86, 0x7c, 0x73, 0x6d,
10056 0x65, 0x66, 0x66, 0x64, 0x5e, 0x57, 0x4f, 0x4a,
10057 0x55, 0x43, 0x30, 0x2b, 0x31, 0x35, 0x31, 0x2b,
10058 0x3a, 0x37, 0x2f, 0x22, 0x19, 0x1c, 0x2b, 0x39,
10059 0x6b, 0x40, 0x25, 0x32, 0x4b, 0x62, 0x83, 0xa6,
10060 0x92, 0x80, 0x64, 0x48, 0x3a, 0x40, 0x53, 0x64,
10061 0x49, 0x54, 0x55, 0x4c, 0x51, 0x66, 0x6f, 0x6a,
10062 0x26, 0x59, 0x97, 0xa7, 0x78, 0x46, 0x4c, 0x72,
10063 0xb3, 0xd4, 0xc3, 0xbb, 0xed, 0xfa, 0xcd, 0xb1,
10064 0xc9, 0x82, 0x38, 0x28, 0x4d, 0x6c, 0x64, 0x4c,
10065 0x3c, 0x47, 0x5a, 0x6e, 0x72, 0x5f, 0x3c, 0x20,
10066 0x34, 0x39, 0x3e, 0x41, 0x40, 0x3e, 0x3c, 0x3b,
10067 0x24, 0x26, 0x2b, 0x31, 0x38, 0x3e, 0x42, 0x45,
10068 0x50, 0x4f, 0x4d, 0x4a, 0x46, 0x43, 0x41, 0x40,
10069 0x3c, 0x51, 0x4a, 0x55, 0x6e, 0x73, 0x1f, 0x0f,
10070 0x85, 0x9b, 0x98, 0x7d, 0x76, 0x84, 0x7d, 0x62,
10071 0x16, 0x21, 0x2b, 0x29, 0x21, 0x21, 0x2e, 0x3c,
10072 0x5c, 0x50, 0x3d, 0x2e, 0x29, 0x2f, 0x3b, 0x44,
10073 0x72, 0x70, 0x55, 0x36, 0x3d, 0x5f, 0x6a, 0x5b,
10074 0x58, 0x3c, 0x31, 0x46, 0x59, 0x5d, 0x67, 0x7a,
10075 0x67, 0x36, 0x39, 0x6f, 0x71, 0x43, 0x4e, 0x8c,
10076 0x75, 0x6a, 0x56, 0x45, 0x4d, 0x7b, 0xc2, 0xf8,
10077 0xd7, 0xbb, 0xa3, 0xa5, 0xaf, 0x99, 0x60, 0x2b,
10078 0x4e, 0x38, 0x3a, 0x53, 0x56, 0x44, 0x4b, 0x68,
10079 0xe3, 0xea, 0xe7, 0xce, 0xae, 0x9f, 0xaa, 0xba,
10080 0x9a, 0x84, 0x69, 0x5f, 0x69, 0x7d, 0x8e, 0x97,
10081 0x92, 0x94, 0x8f, 0x82, 0x78, 0x80, 0x99, 0xb0,
10082 0xac, 0xb1, 0xa8, 0x8c, 0x75, 0x82, 0xb4, 0xe1,
10083 0xaf, 0xb3, 0x9b, 0x5d, 0x23, 0x29, 0x73, 0xbb,
10084 0xc9, 0xa5, 0x90, 0x83, 0x53, 0x20, 0x32, 0x6e,
10085 0x66, 0x3a, 0x2e, 0x4e, 0x5d, 0x58, 0x79, 0xb0,
10086 0xd1, 0xed, 0xff, 0xff, 0xec, 0xb4, 0x81, 0x63,
10087 0x71, 0x72, 0x74, 0x7a, 0x87, 0x9e, 0xb8, 0xcb,
10088 0xad, 0x96, 0x99, 0x9c, 0x67, 0x37, 0x76, 0xe6,
10089 0xd8, 0xa5, 0x5c, 0x53, 0x7f, 0x77, 0x51, 0x50,
10090 0x4f, 0x66, 0x9d, 0xd1, 0xc5, 0x86, 0x57, 0x4f,
10091 0x87, 0x52, 0x2a, 0x45, 0x8c, 0xb9, 0xac, 0x89,
10092 0x22, 0x1f, 0x1e, 0x24, 0x37, 0x52, 0x6e, 0x80,
10093 0x73, 0x80, 0x8e, 0x92, 0x92, 0x9a, 0xaf, 0xc1,
10094 0xb1, 0xd8, 0xda, 0xd6, 0xe7, 0xcc, 0x91, 0x79,
10095 0x62, 0x63, 0x68, 0x72, 0x7c, 0x7f, 0x7a, 0x74,
10096 0x8e, 0x8a, 0x85, 0x7f, 0x7c, 0x7c, 0x7e, 0x7f,
10097 0x7d, 0x84, 0x8d, 0x94, 0x94, 0x8c, 0x82, 0x7b,
10098 0x6f, 0x70, 0x71, 0x72, 0x74, 0x76, 0x77, 0x77,
10099 0x81, 0x82, 0x81, 0x7f, 0x79, 0x72, 0x6a, 0x66,
10100 0x66, 0x67, 0x67, 0x65, 0x60, 0x58, 0x50, 0x4b,
10101 0x4a, 0x4e, 0x3a, 0x15, 0x0a, 0x1d, 0x28, 0x23,
10102 0x20, 0x24, 0x2c, 0x38, 0x48, 0x56, 0x62, 0x68,
10103 0x69, 0x40, 0x2f, 0x51, 0x7c, 0x92, 0x9f, 0xac,
10104 0x96, 0x9a, 0x92, 0x75, 0x55, 0x49, 0x57, 0x6b,
10105 0x69, 0x51, 0x40, 0x45, 0x50, 0x56, 0x62, 0x71,
10106 0x86, 0x77, 0x46, 0x12, 0x12, 0x36, 0x3e, 0x28,
10107 0x50, 0x9b, 0xab, 0x97, 0xa9, 0xba, 0xc6, 0xe6,
10108 0xab, 0xa6, 0x9b, 0x88, 0x6f, 0x55, 0x41, 0x35,
10109 0x51, 0x43, 0x3b, 0x45, 0x55, 0x54, 0x3c, 0x23,
10110 0x2b, 0x31, 0x3e, 0x4b, 0x57, 0x5d, 0x5e, 0x5d,
10111 0x6c, 0x6b, 0x69, 0x65, 0x62, 0x5f, 0x5c, 0x5b,
10112 0x72, 0x70, 0x6e, 0x6a, 0x66, 0x63, 0x60, 0x5f,
10113 0x4c, 0x59, 0x4d, 0x50, 0x5f, 0x67, 0x1d, 0x0f,
10114 0xac, 0xcc, 0xd4, 0xb5, 0x96, 0x7b, 0x47, 0x0f,
10115 0x4c, 0x57, 0x7c, 0xba, 0xe9, 0xdf, 0x9f, 0x62,
10116 0x5b, 0x50, 0x3f, 0x32, 0x2f, 0x38, 0x45, 0x4f,
10117 0x44, 0x4b, 0x48, 0x4b, 0x6c, 0x90, 0x87, 0x63,
10118 0x54, 0x5f, 0x70, 0x76, 0x61, 0x3f, 0x28, 0x22,
10119 0x37, 0x33, 0x2e, 0x35, 0x49, 0x50, 0x30, 0x07,
10120 0x57, 0x23, 0x00, 0x00, 0x38, 0x75, 0x8f, 0x8e,
10121 0x72, 0x91, 0xa5, 0x8f, 0x5c, 0x36, 0x33, 0x41,
10122 0x47, 0x23, 0x0e, 0x11, 0x10, 0x18, 0x4b, 0x8a,
10123 0xaa, 0x97, 0x90, 0xaa, 0xd1, 0xdd, 0xc2, 0xa1,
10124 0x6b, 0x43, 0x20, 0x27, 0x4b, 0x5f, 0x4e, 0x33,
10125 0x68, 0x7c, 0x96, 0xa5, 0xa8, 0xaa, 0xb1, 0xb9,
10126 0x99, 0x84, 0x6e, 0x6a, 0x79, 0x8f, 0x9d, 0xa2,
10127 0x22, 0x39, 0x54, 0x5e, 0x52, 0x39, 0x21, 0x14,
10128 0x34, 0x24, 0x26, 0x37, 0x35, 0x25, 0x2c, 0x45,
10129 0x29, 0x36, 0x66, 0x9d, 0xa4, 0x79, 0x53, 0x4a,
10130 0x09, 0x47, 0x8f, 0xaf, 0x9f, 0x7f, 0x6f, 0x6e,
10131 0x77, 0x31, 0x00, 0x15, 0x65, 0x93, 0x77, 0x44,
10132 0x6f, 0x8d, 0x97, 0x70, 0x37, 0x17, 0x19, 0x25,
10133 0x2f, 0x2e, 0x1d, 0x32, 0x66, 0x69, 0x5b, 0x6f,
10134 0x48, 0x3c, 0x5f, 0x99, 0x8f, 0x44, 0x1a, 0x27,
10135 0x33, 0x2b, 0x33, 0x53, 0x76, 0x77, 0x52, 0x2c,
10136 0x2f, 0x42, 0x60, 0x7d, 0x8f, 0x93, 0x8e, 0x89,
10137 0x89, 0x7a, 0x6c, 0x6a, 0x6a, 0x5e, 0x43, 0x2b,
10138 0x4c, 0x3c, 0x2d, 0x32, 0x3e, 0x39, 0x2f, 0x2e,
10139 0x39, 0x46, 0x5b, 0x71, 0x81, 0x87, 0x83, 0x7f,
10140 0x7d, 0x7d, 0x7e, 0x80, 0x83, 0x85, 0x87, 0x89,
10141 0x77, 0x76, 0x76, 0x76, 0x77, 0x7a, 0x7d, 0x7e,
10142 0x72, 0x73, 0x74, 0x76, 0x77, 0x79, 0x7a, 0x7a,
10143 0x67, 0x68, 0x6a, 0x6b, 0x6c, 0x6c, 0x6b, 0x6a,
10144 0x68, 0x68, 0x69, 0x67, 0x61, 0x5a, 0x52, 0x4d,
10145 0x32, 0x1e, 0x20, 0x35, 0x30, 0x17, 0x1d, 0x3c,
10146 0x23, 0x2d, 0x38, 0x3d, 0x3b, 0x38, 0x39, 0x3b,
10147 0x23, 0x21, 0x38, 0x5d, 0x67, 0x58, 0x56, 0x65,
10148 0x60, 0x87, 0xaa, 0xa0, 0x6c, 0x36, 0x1c, 0x18,
10149 0x66, 0x4e, 0x36, 0x34, 0x43, 0x49, 0x36, 0x1d,
10150 0x69, 0x58, 0x3b, 0x4e, 0xb6, 0xff, 0xfa, 0x9e,
10151 0x45, 0x62, 0x4c, 0x47, 0x8b, 0xb8, 0xaf, 0xac,
10152 0xa2, 0xa3, 0x90, 0x61, 0x35, 0x30, 0x59, 0x84,
10153 0x5a, 0x30, 0x04, 0x00, 0x0e, 0x26, 0x2b, 0x24,
10154 0x31, 0x27, 0x1c, 0x1c, 0x27, 0x39, 0x47, 0x4e,
10155 0x5e, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x59,
10156 0x60, 0x60, 0x60, 0x60, 0x5f, 0x5f, 0x5f, 0x5f,
10157 0x67, 0x6b, 0x59, 0x53, 0x54, 0x5d, 0x1b, 0x0e,
10158 0xb2, 0xc9, 0xc7, 0xa6, 0x94, 0x93, 0x7c, 0x57,
10159 0x59, 0x59, 0x69, 0x8e, 0xb3, 0xb6, 0x95, 0x72,
10160 0x79, 0x6d, 0x5b, 0x4c, 0x48, 0x4f, 0x5c, 0x65,
10161 0x5c, 0x61, 0x5a, 0x57, 0x72, 0x91, 0x84, 0x5d,
10162 0x29, 0x70, 0xad, 0xa3, 0x6d, 0x49, 0x51, 0x68,
10163 0x4d, 0x6a, 0x76, 0x69, 0x6a, 0x7b, 0x75, 0x5d,
10164 0x36, 0x5e, 0x7e, 0x6e, 0x43, 0x31, 0x4d, 0x73,
10165 0x76, 0x9a, 0xb0, 0x94, 0x59, 0x35, 0x3f, 0x5a,
10166 0xb7, 0xa0, 0x92, 0x8b, 0x70, 0x5a, 0x7a, 0xb2,
10167 0xb4, 0x95, 0x82, 0x99, 0xc2, 0xcb, 0xa5, 0x78,
10168 0x3e, 0x50, 0x66, 0x70, 0x6c, 0x60, 0x55, 0x50,
10169 0xe0, 0xc6, 0xa5, 0x91, 0x8d, 0x91, 0x91, 0x8f,
10170 0x65, 0x5c, 0x54, 0x57, 0x5e, 0x5c, 0x4f, 0x42,
10171 0x5d, 0x36, 0x1a, 0x32, 0x68, 0x83, 0x6c, 0x49,
10172 0x07, 0x15, 0x21, 0x35, 0x58, 0x62, 0x2b, 0x00,
10173 0x11, 0x36, 0x57, 0x6f, 0x9f, 0xdf, 0xff, 0xff,
10174 0xe3, 0x94, 0x36, 0x07, 0x0c, 0x1c, 0x17, 0x07,
10175 0x0f, 0x51, 0x92, 0x9a, 0x7b, 0x77, 0xa7, 0xde,
10176 0xff, 0xe4, 0x89, 0x1e, 0x00, 0x28, 0x3b, 0x24,
10177 0x03, 0x22, 0x27, 0x39, 0x6e, 0x74, 0x4b, 0x37,
10178 0x47, 0x46, 0x3b, 0x31, 0x3f, 0x60, 0x76, 0x7a,
10179 0x27, 0x24, 0x27, 0x32, 0x40, 0x45, 0x3f, 0x36,
10180 0x8f, 0x89, 0x80, 0x77, 0x72, 0x71, 0x72, 0x74,
10181 0x72, 0x84, 0x9a, 0xa5, 0x9c, 0x85, 0x6b, 0x5b,
10182 0x30, 0x3e, 0x3f, 0x34, 0x30, 0x2d, 0x27, 0x23,
10183 0x43, 0x4f, 0x62, 0x76, 0x87, 0x95, 0x9f, 0xa4,
10184 0xa0, 0xa4, 0xa8, 0xa9, 0xa3, 0x98, 0x8c, 0x84,
10185 0x77, 0x76, 0x76, 0x76, 0x77, 0x7a, 0x7d, 0x7e,
10186 0x7b, 0x7b, 0x7c, 0x7e, 0x7f, 0x81, 0x82, 0x83,
10187 0x75, 0x74, 0x74, 0x75, 0x76, 0x79, 0x7b, 0x7c,
10188 0x69, 0x6a, 0x6a, 0x68, 0x63, 0x5b, 0x54, 0x4f,
10189 0x66, 0x6b, 0x61, 0x49, 0x38, 0x35, 0x31, 0x29,
10190 0x36, 0x27, 0x1d, 0x26, 0x35, 0x36, 0x22, 0x0c,
10191 0x5b, 0x80, 0xb0, 0xb6, 0x77, 0x2a, 0x13, 0x28,
10192 0x4f, 0x89, 0xc8, 0xd8, 0xb2, 0x7c, 0x59, 0x4e,
10193 0x5a, 0x72, 0x65, 0x35, 0x25, 0x38, 0x30, 0x0d,
10194 0x30, 0x26, 0x59, 0xb9, 0xda, 0xa6, 0x73, 0x6c,
10195 0x71, 0x7e, 0x56, 0x43, 0x7c, 0x9a, 0x7e, 0x6c,
10196 0xa9, 0x96, 0x87, 0x92, 0xb5, 0xdd, 0xf6, 0xff,
10197 0xe9, 0xda, 0xcf, 0xd4, 0xe2, 0xe3, 0xd2, 0xbf,
10198 0x7a, 0x83, 0x95, 0xa6, 0xaa, 0x97, 0x73, 0x58,
10199 0x63, 0x62, 0x61, 0x5f, 0x5d, 0x5b, 0x5a, 0x59,
10200 0x54, 0x54, 0x53, 0x52, 0x51, 0x51, 0x50, 0x50,
10201 0x47, 0x48, 0x3c, 0x3a, 0x38, 0x4a, 0x18, 0x0d,
10202 0x9a, 0x96, 0x70, 0x3a, 0x31, 0x55, 0x6f, 0x6b,
10203 0x3d, 0x64, 0x85, 0x7a, 0x52, 0x3c, 0x4e, 0x6b,
10204 0x63, 0x58, 0x47, 0x3b, 0x39, 0x42, 0x50, 0x5a,
10205 0x20, 0x2b, 0x2b, 0x2e, 0x59, 0x9d, 0xc2, 0xc2,
10206 0xe1, 0xc7, 0x87, 0x3f, 0x25, 0x3e, 0x5b, 0x63,
10207 0x5c, 0x65, 0x71, 0x61, 0x2b, 0x0b, 0x3a, 0x86,
10208 0xe1, 0xff, 0xff, 0xac, 0x2f, 0x00, 0x1e, 0x62,
10209 0xac, 0xa6, 0xa2, 0xa7, 0xb1, 0xb5, 0xb0, 0xa9,
10210 0xbb, 0xbc, 0xc7, 0xbd, 0x7d, 0x2f, 0x1b, 0x34,
10211 0x84, 0x7f, 0x82, 0x94, 0xb2, 0xcd, 0xde, 0xe3,
10212 0x54, 0x57, 0x69, 0x8d, 0xab, 0xa6, 0x7f, 0x5a,
10213 0x39, 0x55, 0x85, 0xb0, 0xbb, 0x94, 0x50, 0x1b,
10214 0x00, 0x26, 0x4f, 0x5a, 0x4d, 0x45, 0x53, 0x66,
10215 0x75, 0x80, 0x86, 0x7b, 0x67, 0x5c, 0x62, 0x6d,
10216 0x6f, 0x65, 0x48, 0x41, 0x7a, 0xb3, 0x90, 0x3f,
10217 0x56, 0x88, 0xa3, 0x9b, 0xab, 0xd2, 0xcf, 0xa9,
10218 0xe1, 0xa4, 0x6a, 0x6e, 0xaa, 0xe7, 0xff, 0xfc,
10219 0xff, 0xf7, 0xe6, 0xd5, 0xce, 0xd8, 0xee, 0xff,
10220 0xc9, 0xa9, 0x81, 0x6f, 0x77, 0x79, 0x5f, 0x3d,
10221 0x6b, 0x94, 0x82, 0x4d, 0x38, 0x2e, 0x34, 0x55,
10222 0x4e, 0x32, 0x1e, 0x26, 0x3a, 0x4d, 0x65, 0x7a,
10223 0x3f, 0x2c, 0x20, 0x2e, 0x4f, 0x67, 0x69, 0x61,
10224 0x69, 0x76, 0x88, 0x96, 0x99, 0x90, 0x82, 0x78,
10225 0x68, 0x82, 0xa5, 0xb7, 0xaf, 0x91, 0x6f, 0x5a,
10226 0x39, 0x45, 0x32, 0x26, 0x2d, 0x1b, 0x1c, 0x4b,
10227 0x72, 0x73, 0x72, 0x6f, 0x70, 0x79, 0x88, 0x95,
10228 0xa2, 0xa7, 0xae, 0xaf, 0xa8, 0x99, 0x88, 0x7d,
10229 0x7d, 0x84, 0x8d, 0x94, 0x94, 0x8c, 0x82, 0x7b,
10230 0x7f, 0x80, 0x81, 0x82, 0x84, 0x85, 0x87, 0x87,
10231 0x8b, 0x87, 0x81, 0x7c, 0x79, 0x79, 0x7a, 0x7c,
10232 0x6b, 0x6c, 0x6c, 0x6a, 0x65, 0x5d, 0x55, 0x50,
10233 0x8c, 0xc7, 0xd8, 0x97, 0x49, 0x28, 0x24, 0x20,
10234 0x5b, 0x63, 0x6a, 0x69, 0x64, 0x65, 0x70, 0x7a,
10235 0xd2, 0xc2, 0xc6, 0xda, 0xcb, 0x8c, 0x4b, 0x2b,
10236 0x0f, 0x37, 0x67, 0x7d, 0x77, 0x69, 0x65, 0x69,
10237 0x53, 0x69, 0x56, 0x31, 0x4a, 0x8e, 0x99, 0x6d,
10238 0x0f, 0x21, 0x61, 0xac, 0xb5, 0x78, 0x3a, 0x23,
10239 0x2f, 0x61, 0x59, 0x44, 0x63, 0x73, 0x67, 0x6d,
10240 0x33, 0x4d, 0x7c, 0xb3, 0xdb, 0xe3, 0xd1, 0xbd,
10241 0xb5, 0xc0, 0xce, 0xd4, 0xce, 0xc0, 0xb2, 0xa8,
10242 0xab, 0x9c, 0x8c, 0x86, 0x87, 0x81, 0x71, 0x61,
10243 0x6c, 0x6a, 0x65, 0x60, 0x5a, 0x54, 0x50, 0x4e,
10244 0x4f, 0x4d, 0x49, 0x43, 0x3d, 0x38, 0x34, 0x31,
10245 0x32, 0x31, 0x2d, 0x2e, 0x27, 0x3d, 0x12, 0x07,
10246 0x97, 0x92, 0x67, 0x2b, 0x1c, 0x3a, 0x4f, 0x48,
10247 0x6b, 0xac, 0xe0, 0xc3, 0x6e, 0x34, 0x3e, 0x62,
10248 0x47, 0x3f, 0x35, 0x30, 0x37, 0x49, 0x5d, 0x6b,
10249 0xdb, 0xea, 0xde, 0xbb, 0xb3, 0xd2, 0xeb, 0xed,
10250 0xff, 0xdf, 0x8c, 0x46, 0x43, 0x62, 0x5c, 0x37,
10251 0x28, 0x48, 0x2f, 0x00, 0x20, 0x84, 0x95, 0x5a,
10252 0x5d, 0x48, 0x47, 0x75, 0xb8, 0xda, 0xc6, 0xa5,
10253 0x97, 0xb8, 0xcd, 0xb7, 0x8b, 0x79, 0x96, 0xbb,
10254 0xd9, 0xda, 0xe1, 0xcc, 0x7f, 0x2c, 0x1d, 0x3d,
10255 0x79, 0x87, 0xa3, 0xc0, 0xc7, 0xa6, 0x6a, 0x3a,
10256 0x35, 0x26, 0x3a, 0x87, 0xd7, 0xd6, 0x7c, 0x20,
10257 0x1f, 0x39, 0x56, 0x63, 0x5f, 0x5b, 0x61, 0x6a,
10258 0x80, 0x69, 0x57, 0x5f, 0x72, 0x71, 0x54, 0x36,
10259 0x43, 0x4c, 0x57, 0x61, 0x69, 0x73, 0x81, 0x8b,
10260 0xff, 0xec, 0xda, 0xe1, 0xf8, 0xf2, 0xba, 0x7d,
10261 0xf3, 0xed, 0xdb, 0xc6, 0xc3, 0xd2, 0xe0, 0xe4,
10262 0xa8, 0xa8, 0xae, 0xbe, 0xca, 0xc4, 0xac, 0x96,
10263 0x8d, 0x8a, 0x7d, 0x69, 0x61, 0x78, 0xa8, 0xd1,
10264 0xa0, 0x88, 0x76, 0x6c, 0x51, 0x2e, 0x24, 0x31,
10265 0x51, 0x86, 0x98, 0x80, 0x57, 0x32, 0x5d, 0xc1,
10266 0xdc, 0x82, 0x43, 0x44, 0x39, 0x14, 0x1c, 0x4c,
10267 0x2c, 0x45, 0x5d, 0x61, 0x58, 0x5a, 0x6f, 0x85,
10268 0x53, 0x5e, 0x6f, 0x7c, 0x81, 0x7c, 0x73, 0x6b,
10269 0x7e, 0x86, 0x97, 0xaa, 0xaf, 0x97, 0x6a, 0x46,
10270 0x50, 0x39, 0x28, 0x2e, 0x32, 0x20, 0x21, 0x3e,
10271 0x52, 0x58, 0x5c, 0x5a, 0x55, 0x56, 0x60, 0x6a,
10272 0x59, 0x5f, 0x6a, 0x74, 0x7c, 0x7f, 0x7e, 0x7d,
10273 0x73, 0x78, 0x80, 0x84, 0x81, 0x77, 0x6b, 0x63,
10274 0x6f, 0x70, 0x71, 0x72, 0x74, 0x75, 0x76, 0x77,
10275 0x88, 0x83, 0x7c, 0x76, 0x74, 0x76, 0x79, 0x7c,
10276 0x6c, 0x6d, 0x6d, 0x6b, 0x66, 0x5e, 0x56, 0x52,
10277 0x55, 0x75, 0xb5, 0xcf, 0x85, 0x1e, 0x17, 0x53,
10278 0x71, 0x83, 0x8a, 0x72, 0x4f, 0x47, 0x65, 0x88,
10279 0x91, 0x55, 0x39, 0x68, 0xa1, 0x9f, 0x6d, 0x43,
10280 0x44, 0x48, 0x4a, 0x48, 0x45, 0x45, 0x4a, 0x4e,
10281 0x3f, 0x49, 0x4c, 0x5a, 0x92, 0xd3, 0xde, 0xc3,
10282 0x4c, 0x3d, 0x3b, 0x67, 0xa9, 0xae, 0x51, 0x00,
10283 0x1f, 0x28, 0x0d, 0x26, 0x90, 0xbe, 0x87, 0x54,
10284 0x5b, 0x6c, 0x84, 0x98, 0xa5, 0xad, 0xb4, 0xb9,
10285 0x92, 0xa4, 0xae, 0x9e, 0x81, 0x79, 0x8d, 0xa7,
10286 0x92, 0x7c, 0x63, 0x5c, 0x64, 0x6a, 0x65, 0x5b,
10287 0x5c, 0x5d, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6a,
10288 0x64, 0x61, 0x5d, 0x57, 0x50, 0x4b, 0x46, 0x44,
10289 0x43, 0x41, 0x40, 0x40, 0x30, 0x42, 0x18, 0x09,
10290 0xa4, 0xb8, 0xb2, 0x93, 0x87, 0x92, 0x88, 0x6c,
10291 0xab, 0xcb, 0xda, 0xb1, 0x66, 0x30, 0x2d, 0x40,
10292 0x5d, 0x58, 0x54, 0x58, 0x68, 0x81, 0x9b, 0xac,
10293 0xa0, 0xcc, 0xe4, 0xd4, 0xc8, 0xda, 0xec, 0xed,
10294 0xba, 0xf2, 0xfb, 0xb5, 0x73, 0x6f, 0x87, 0x91,
10295 0x7e, 0x81, 0x7a, 0x6d, 0x74, 0x83, 0x7e, 0x6a,
10296 0x9e, 0xc7, 0xf3, 0xfe, 0xea, 0xd3, 0xcc, 0xd1,
10297 0xcc, 0xba, 0xaa, 0xaa, 0xb6, 0xbe, 0xb8, 0xaf,
10298 0xec, 0xdc, 0xc9, 0xa5, 0x61, 0x33, 0x55, 0x99,
10299 0xe5, 0xba, 0x9e, 0xb8, 0xe2, 0xd5, 0x83, 0x31,
10300 0x4f, 0x3c, 0x30, 0x42, 0x6b, 0x8d, 0x97, 0x94,
10301 0xb2, 0xc7, 0xc5, 0x92, 0x4a, 0x2a, 0x44, 0x6c,
10302 0x3a, 0x40, 0x43, 0x3e, 0x38, 0x3d, 0x50, 0x61,
10303 0x4c, 0x59, 0x65, 0x65, 0x5b, 0x53, 0x55, 0x5a,
10304 0x66, 0x54, 0x71, 0xb7, 0xda, 0xc3, 0xac, 0xb0,
10305 0xd1, 0xc0, 0xce, 0xef, 0xdf, 0xa3, 0x7f, 0x83,
10306 0x91, 0x67, 0x43, 0x4c, 0x72, 0x83, 0x6a, 0x47,
10307 0x29, 0x50, 0x7d, 0x8e, 0x83, 0x77, 0x7b, 0x86,
10308 0xa7, 0xbe, 0xbf, 0x8d, 0x41, 0x15, 0x23, 0x44,
10309 0x29, 0x1d, 0x1a, 0x3a, 0x47, 0x22, 0x3f, 0xa6,
10310 0xdb, 0xaf, 0x75, 0x4f, 0x46, 0x4c, 0x4e, 0x4a,
10311 0x75, 0x62, 0x53, 0x57, 0x6b, 0x78, 0x74, 0x69,
10312 0x88, 0x80, 0x74, 0x6b, 0x68, 0x6c, 0x74, 0x7a,
10313 0x6d, 0x7a, 0x89, 0x8d, 0x7f, 0x62, 0x42, 0x2e,
10314 0x3c, 0x23, 0x2d, 0x2f, 0x28, 0x54, 0x60, 0x1f,
10315 0x18, 0x32, 0x54, 0x6d, 0x78, 0x7d, 0x83, 0x89,
10316 0x7c, 0x79, 0x74, 0x6f, 0x6c, 0x6b, 0x6b, 0x6c,
10317 0x83, 0x80, 0x7b, 0x75, 0x70, 0x6d, 0x6b, 0x6b,
10318 0x7b, 0x7c, 0x7d, 0x7e, 0x80, 0x81, 0x82, 0x83,
10319 0x80, 0x7d, 0x79, 0x78, 0x7b, 0x83, 0x8b, 0x91,
10320 0x6d, 0x6e, 0x6e, 0x6c, 0x66, 0x5f, 0x57, 0x52,
10321 0x46, 0x5b, 0x59, 0x3e, 0x37, 0x4c, 0x5a, 0x53,
10322 0x4a, 0x31, 0x1a, 0x1d, 0x38, 0x55, 0x62, 0x63,
10323 0x6c, 0x4d, 0x37, 0x34, 0x2a, 0x18, 0x1b, 0x30,
10324 0x44, 0x3b, 0x31, 0x33, 0x3e, 0x4a, 0x51, 0x52,
10325 0x63, 0x96, 0xd5, 0xf1, 0xe7, 0xdb, 0xef, 0xff,
10326 0xff, 0x5f, 0x00, 0x16, 0x6f, 0x86, 0x7e, 0x84,
10327 0x2d, 0x5a, 0x5d, 0x6a, 0xac, 0xc2, 0x98, 0x7d,
10328 0x70, 0x54, 0x4c, 0x7a, 0xbe, 0xda, 0xba, 0x8c,
10329 0x46, 0x69, 0x81, 0x6e, 0x42, 0x31, 0x4d, 0x72,
10330 0x7b, 0x60, 0x45, 0x41, 0x52, 0x65, 0x6c, 0x69,
10331 0x61, 0x61, 0x60, 0x60, 0x5f, 0x5f, 0x5e, 0x5e,
10332 0x57, 0x56, 0x54, 0x52, 0x50, 0x4e, 0x4c, 0x4b,
10333 0x4b, 0x49, 0x4d, 0x50, 0x3d, 0x4f, 0x27, 0x16,
10334 0x0e, 0x26, 0x3a, 0x36, 0x22, 0x16, 0x21, 0x31,
10335 0x71, 0x80, 0x94, 0x9a, 0x8a, 0x66, 0x3c, 0x20,
10336 0x29, 0x22, 0x1b, 0x20, 0x3a, 0x66, 0x97, 0xb7,
10337 0xd4, 0xc1, 0xb0, 0xb3, 0xc6, 0xd6, 0xd8, 0xd3,
10338 0xba, 0xc9, 0xb5, 0x7b, 0x55, 0x5e, 0x73, 0x79,
10339 0x48, 0x5b, 0x70, 0x76, 0x6e, 0x67, 0x69, 0x70,
10340 0x94, 0xa1, 0xb2, 0xb6, 0xa4, 0x7f, 0x56, 0x3b,
10341 0x5f, 0x7b, 0xa3, 0xc5, 0xd5, 0xd6, 0xd0, 0xcb,
10342 0xda, 0xd9, 0xcd, 0xb2, 0x97, 0x91, 0xa3, 0xb7,
10343 0x6d, 0x7a, 0x8a, 0x93, 0x8b, 0x73, 0x58, 0x45,
10344 0x67, 0x89, 0xad, 0xb6, 0xa3, 0x8d, 0x86, 0x89,
10345 0x83, 0x86, 0x88, 0x85, 0x7b, 0x6b, 0x5b, 0x50,
10346 0x67, 0x7f, 0x90, 0x83, 0x65, 0x54, 0x5f, 0x72,
10347 0x29, 0x21, 0x29, 0x38, 0x2e, 0x1a, 0x28, 0x4a,
10348 0x15, 0x19, 0x30, 0x5d, 0x92, 0xb6, 0xc0, 0xbb,
10349 0xbc, 0xb1, 0x90, 0x5a, 0x2a, 0x1d, 0x38, 0x57,
10350 0x83, 0x5d, 0x72, 0xc1, 0xd7, 0x8f, 0x44, 0x2c,
10351 0x31, 0x66, 0x9d, 0xaa, 0x96, 0x8e, 0xa7, 0xc7,
10352 0xcf, 0xc2, 0xac, 0x8f, 0x70, 0x53, 0x3c, 0x30,
10353 0x3b, 0x38, 0x34, 0x30, 0x2d, 0x2d, 0x2e, 0x2f,
10354 0x0d, 0x13, 0x1e, 0x28, 0x2e, 0x2f, 0x2d, 0x2b,
10355 0x67, 0x68, 0x6b, 0x6f, 0x72, 0x76, 0x79, 0x7a,
10356 0x7d, 0x81, 0x87, 0x89, 0x87, 0x7f, 0x76, 0x70,
10357 0x8b, 0x82, 0x74, 0x64, 0x57, 0x4e, 0x49, 0x48,
10358 0x46, 0x31, 0x1b, 0x1c, 0x3b, 0x6f, 0xa1, 0xbf,
10359 0x7f, 0x6e, 0x5d, 0x5b, 0x6b, 0x7f, 0x8d, 0x92,
10360 0x8a, 0x79, 0x6b, 0x71, 0x84, 0x8d, 0x85, 0x77,
10361 0x67, 0x6a, 0x6f, 0x75, 0x7b, 0x81, 0x86, 0x88,
10362 0x85, 0x84, 0x82, 0x80, 0x7e, 0x7d, 0x7b, 0x7a,
10363 0x6f, 0x6e, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x6a,
10364 0x69, 0x63, 0x5e, 0x5e, 0x5f, 0x59, 0x4c, 0x41,
10365 0x4d, 0x83, 0xa3, 0x84, 0x52, 0x40, 0x4f, 0x60,
10366 0x7d, 0x8e, 0x9a, 0x91, 0x7c, 0x6e, 0x74, 0x80,
10367 0x77, 0x6d, 0x61, 0x5e, 0x6a, 0x83, 0x9f, 0xb1,
10368 0x80, 0x78, 0x67, 0x52, 0x46, 0x4d, 0x65, 0x79,
10369 0xa0, 0xa6, 0xae, 0xb2, 0xb4, 0xb5, 0xb8, 0xba,
10370 0xd8, 0xbf, 0x8d, 0x56, 0x40, 0x69, 0xc0, 0xff,
10371 0xb4, 0x94, 0x71, 0x65, 0x6f, 0x77, 0x71, 0x66,
10372 0x4f, 0x4b, 0x54, 0x72, 0x96, 0xa5, 0x98, 0x84,
10373 0x08, 0x26, 0x5e, 0x80, 0x64, 0x44, 0x6d, 0xb8,
10374 0xa7, 0x96, 0x6e, 0x45, 0x42, 0x5e, 0x70, 0x6e,
10375 0x66, 0x63, 0x61, 0x65, 0x6b, 0x6a, 0x61, 0x59,
10376 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10377 0x48, 0x4d, 0x55, 0x4d, 0x5d, 0x58, 0x1f, 0x07,
10378 0x42, 0x56, 0x76, 0x93, 0x9c, 0x8b, 0x6a, 0x50,
10379 0x71, 0x64, 0x50, 0x3d, 0x31, 0x30, 0x35, 0x39,
10380 0x49, 0x76, 0xa0, 0x9d, 0x7b, 0x68, 0x7b, 0x99,
10381 0x6d, 0x96, 0xc3, 0xd1, 0xc1, 0xb3, 0xb9, 0xc7,
10382 0xc8, 0xd7, 0xc1, 0x81, 0x4d, 0x3f, 0x3a, 0x2e,
10383 0x79, 0x5d, 0x3b, 0x2d, 0x3c, 0x5d, 0x7e, 0x91,
10384 0x9f, 0xa4, 0xa8, 0xa9, 0xa2, 0x94, 0x86, 0x7c,
10385 0x7f, 0x92, 0xaf, 0xc9, 0xd6, 0xd3, 0xc6, 0xbb,
10386 0x5d, 0x81, 0xaa, 0xb6, 0x9f, 0x79, 0x5b, 0x4e,
10387 0x31, 0x57, 0x8d, 0xb6, 0xbc, 0x9d, 0x6e, 0x4c,
10388 0x5e, 0x68, 0x83, 0xad, 0xcf, 0xcd, 0xa9, 0x86,
10389 0xab, 0xb5, 0xbf, 0xb9, 0x9b, 0x6a, 0x37, 0x16,
10390 0x3c, 0x3c, 0x3e, 0x43, 0x49, 0x4f, 0x54, 0x56,
10391 0x5a, 0x3e, 0x2c, 0x2a, 0x24, 0x28, 0x55, 0x8d,
10392 0xd4, 0x8a, 0x37, 0x1e, 0x42, 0x75, 0x8f, 0x92,
10393 0x1e, 0x53, 0x92, 0xb0, 0xa1, 0x7c, 0x5c, 0x4d,
10394 0x59, 0x79, 0xa2, 0xbb, 0xb4, 0x84, 0x3a, 0x00,
10395 0x19, 0x2d, 0x3f, 0x44, 0x4b, 0x6d, 0xa8, 0xd9,
10396 0x90, 0x92, 0x97, 0x9d, 0xa4, 0xab, 0xaf, 0xb2,
10397 0xb8, 0xad, 0x9b, 0x86, 0x72, 0x62, 0x59, 0x54,
10398 0x5d, 0x63, 0x6d, 0x77, 0x7c, 0x7d, 0x7b, 0x79,
10399 0x66, 0x6a, 0x70, 0x79, 0x82, 0x8a, 0x91, 0x94,
10400 0x99, 0x91, 0x85, 0x79, 0x72, 0x70, 0x72, 0x74,
10401 0x74, 0x6d, 0x60, 0x53, 0x48, 0x42, 0x3f, 0x3f,
10402 0x2e, 0x42, 0x60, 0x7d, 0x91, 0x9b, 0x9f, 0x9f,
10403 0x7e, 0x73, 0x69, 0x69, 0x72, 0x7a, 0x7c, 0x7a,
10404 0x7d, 0x72, 0x6c, 0x76, 0x85, 0x87, 0x77, 0x64,
10405 0x91, 0x8f, 0x8b, 0x85, 0x7f, 0x7a, 0x76, 0x74,
10406 0x79, 0x79, 0x78, 0x78, 0x77, 0x77, 0x77, 0x76,
10407 0x73, 0x72, 0x72, 0x72, 0x71, 0x70, 0x70, 0x70,
10408 0x69, 0x63, 0x5d, 0x5c, 0x5d, 0x56, 0x49, 0x3d,
10409 0x83, 0xa9, 0xe2, 0xff, 0xe0, 0x9d, 0x6f, 0x65,
10410 0x6f, 0x77, 0x79, 0x70, 0x64, 0x68, 0x7e, 0x93,
10411 0x7c, 0x65, 0x45, 0x2e, 0x2b, 0x3d, 0x59, 0x6d,
10412 0x31, 0x36, 0x45, 0x60, 0x7b, 0x86, 0x7d, 0x71,
10413 0xe1, 0xd5, 0xb4, 0x83, 0x5f, 0x64, 0x8f, 0xb9,
10414 0x86, 0xb0, 0xce, 0xba, 0x85, 0x68, 0x7a, 0x9a,
10415 0x69, 0x69, 0x67, 0x61, 0x5d, 0x5f, 0x68, 0x71,
10416 0x50, 0x3d, 0x2e, 0x37, 0x53, 0x6b, 0x72, 0x6f,
10417 0x5f, 0x3f, 0x37, 0x4e, 0x55, 0x46, 0x4b, 0x64,
10418 0x66, 0x8c, 0x9e, 0x84, 0x61, 0x5c, 0x6b, 0x77,
10419 0x65, 0x60, 0x5e, 0x61, 0x65, 0x63, 0x59, 0x50,
10420 0x51, 0x4e, 0x4a, 0x46, 0x45, 0x46, 0x48, 0x4a,
10421 0x49, 0x4d, 0x54, 0x4c, 0x5c, 0x57, 0x1f, 0x07,
10422 0xa2, 0x8d, 0x7f, 0x8d, 0xab, 0xb8, 0xa9, 0x92,
10423 0x51, 0x56, 0x5d, 0x60, 0x5c, 0x52, 0x45, 0x3d,
10424 0xa0, 0xa3, 0xae, 0xbd, 0xc1, 0xab, 0x81, 0x5f,
10425 0x62, 0x72, 0x8f, 0xaf, 0xc5, 0xc9, 0xbe, 0xb2,
10426 0xb0, 0xae, 0x84, 0x3d, 0x13, 0x19, 0x26, 0x25,
10427 0x2c, 0x1f, 0x1a, 0x31, 0x57, 0x70, 0x71, 0x66,
10428 0x88, 0x8b, 0x8e, 0x8e, 0x8a, 0x82, 0x79, 0x73,
10429 0x90, 0xaf, 0xcd, 0xcc, 0xb0, 0x98, 0x93, 0x9a,
10430 0x58, 0x65, 0x6e, 0x6a, 0x61, 0x66, 0x7c, 0x91,
10431 0xde, 0xe1, 0xe1, 0xd4, 0xb3, 0x85, 0x57, 0x3a,
10432 0x34, 0x42, 0x66, 0x9f, 0xd4, 0xe8, 0xd7, 0xbe,
10433 0x9a, 0x8d, 0x79, 0x69, 0x64, 0x69, 0x75, 0x7d,
10434 0xae, 0x91, 0x73, 0x6c, 0x73, 0x6e, 0x53, 0x37,
10435 0x35, 0x2f, 0x3d, 0x51, 0x4c, 0x3c, 0x4c, 0x6f,
10436 0x8e, 0x82, 0x91, 0xcd, 0xff, 0xff, 0xb7, 0x6a,
10437 0x00, 0x23, 0x69, 0x98, 0x9e, 0x89, 0x70, 0x61,
10438 0x24, 0x5a, 0xa1, 0xd6, 0xef, 0xf4, 0xea, 0xde,
10439 0xae, 0x96, 0x70, 0x4f, 0x41, 0x4c, 0x65, 0x79,
10440 0x96, 0x95, 0x93, 0x91, 0x8e, 0x8c, 0x8a, 0x89,
10441 0x95, 0x8e, 0x82, 0x77, 0x70, 0x70, 0x73, 0x75,
10442 0x88, 0x8e, 0x97, 0x9f, 0xa4, 0xa4, 0xa1, 0x9f,
10443 0x66, 0x67, 0x6a, 0x6e, 0x73, 0x77, 0x7a, 0x7b,
10444 0x7b, 0x75, 0x6b, 0x62, 0x5e, 0x5f, 0x64, 0x67,
10445 0x62, 0x5c, 0x52, 0x49, 0x42, 0x3f, 0x40, 0x41,
10446 0x4d, 0x5d, 0x69, 0x64, 0x58, 0x5c, 0x74, 0x8d,
10447 0xb2, 0x9d, 0x80, 0x6a, 0x62, 0x64, 0x69, 0x6b,
10448 0x43, 0x44, 0x4f, 0x67, 0x7f, 0x87, 0x7b, 0x6b,
10449 0x7f, 0x7e, 0x7c, 0x79, 0x76, 0x74, 0x72, 0x70,
10450 0x76, 0x78, 0x7a, 0x7d, 0x80, 0x83, 0x85, 0x86,
10451 0x88, 0x86, 0x82, 0x7e, 0x79, 0x74, 0x71, 0x6f,
10452 0x5e, 0x5a, 0x58, 0x5c, 0x61, 0x5f, 0x55, 0x4c,
10453 0x50, 0x4b, 0x59, 0x75, 0x7d, 0x6b, 0x5c, 0x5c,
10454 0x73, 0x89, 0xa2, 0xad, 0xa9, 0x9f, 0x9c, 0x9c,
10455 0x96, 0x84, 0x68, 0x4d, 0x3d, 0x3a, 0x40, 0x46,
10456 0x3d, 0x53, 0x72, 0x89, 0x8e, 0x85, 0x78, 0x70,
10457 0x8e, 0x8b, 0x81, 0x70, 0x64, 0x64, 0x71, 0x7d,
10458 0x6d, 0x86, 0x9c, 0x96, 0x78, 0x5f, 0x59, 0x5e,
10459 0x54, 0x6a, 0x7a, 0x6e, 0x4f, 0x3b, 0x3f, 0x4d,
10460 0x6a, 0x5b, 0x4d, 0x50, 0x63, 0x75, 0x7e, 0x7e,
10461 0x92, 0x72, 0x51, 0x3a, 0x1f, 0x0c, 0x20, 0x44,
10462 0x3c, 0x69, 0x99, 0xab, 0xa4, 0x93, 0x7a, 0x65,
10463 0x66, 0x61, 0x5d, 0x5e, 0x61, 0x5d, 0x52, 0x48,
10464 0x4d, 0x4b, 0x47, 0x43, 0x42, 0x43, 0x45, 0x47,
10465 0x4a, 0x4d, 0x52, 0x49, 0x59, 0x55, 0x1e, 0x08,
10466 0x75, 0x7d, 0x90, 0xa9, 0xb5, 0xa2, 0x76, 0x51,
10467 0x40, 0x3b, 0x34, 0x30, 0x32, 0x3a, 0x44, 0x4a,
10468 0xab, 0xc2, 0xd5, 0xcd, 0xb4, 0xa8, 0xb6, 0xc9,
10469 0x95, 0x6d, 0x3e, 0x27, 0x28, 0x29, 0x1b, 0x0a,
10470 0x27, 0x31, 0x25, 0x0c, 0x18, 0x4b, 0x74, 0x7d,
10471 0x95, 0x95, 0x97, 0x9e, 0xa6, 0xa9, 0xa8, 0xa5,
10472 0x79, 0x7d, 0x82, 0x83, 0x7e, 0x72, 0x65, 0x5c,
10473 0x53, 0x8d, 0xc1, 0xba, 0x8b, 0x73, 0x8f, 0xb9,
10474 0xc5, 0xca, 0xc7, 0xb6, 0xa2, 0xa1, 0xb5, 0xcb,
10475 0xb4, 0xb0, 0xa7, 0x98, 0x85, 0x70, 0x5d, 0x52,
10476 0x68, 0x62, 0x4e, 0x2e, 0x1a, 0x2a, 0x5a, 0x84,
10477 0x89, 0x73, 0x53, 0x3c, 0x3d, 0x56, 0x77, 0x8f,
10478 0xb4, 0x7c, 0x37, 0x11, 0x15, 0x2a, 0x38, 0x3b,
10479 0x54, 0x48, 0x4a, 0x56, 0x4c, 0x3d, 0x51, 0x78,
10480 0xae, 0x8f, 0x75, 0x7d, 0x98, 0x9e, 0x80, 0x5e,
10481 0x56, 0x5b, 0x5d, 0x55, 0x43, 0x30, 0x21, 0x1b,
10482 0x38, 0x16, 0x21, 0x58, 0x64, 0x44, 0x49, 0x74,
10483 0x9f, 0x8c, 0x79, 0x79, 0x86, 0x8c, 0x82, 0x76,
10484 0x9c, 0x9b, 0x98, 0x95, 0x91, 0x8d, 0x8b, 0x89,
10485 0x92, 0x89, 0x7a, 0x6e, 0x6a, 0x6e, 0x76, 0x7c,
10486 0x86, 0x8c, 0x94, 0x9c, 0x9f, 0x9e, 0x9a, 0x97,
10487 0x87, 0x83, 0x7e, 0x76, 0x6e, 0x67, 0x61, 0x5e,
10488 0x63, 0x6a, 0x75, 0x7f, 0x84, 0x84, 0x81, 0x7e,
10489 0x5d, 0x58, 0x51, 0x4a, 0x47, 0x47, 0x4a, 0x4c,
10490 0x67, 0x71, 0x7f, 0x8b, 0x91, 0x91, 0x8d, 0x8a,
10491 0x81, 0x91, 0xaa, 0xc2, 0xcd, 0xc9, 0xbb, 0xb0,
10492 0xa0, 0x99, 0x93, 0x92, 0x8f, 0x83, 0x6c, 0x5a,
10493 0x48, 0x4a, 0x4c, 0x4f, 0x52, 0x55, 0x57, 0x59,
10494 0x5b, 0x5c, 0x60, 0x64, 0x68, 0x6c, 0x6f, 0x71,
10495 0x77, 0x76, 0x74, 0x72, 0x70, 0x6e, 0x6d, 0x6c,
10496 0x6c, 0x67, 0x63, 0x64, 0x66, 0x62, 0x56, 0x4b,
10497 0x3e, 0x3c, 0x33, 0x34, 0x53, 0x7e, 0x8e, 0x84,
10498 0xa2, 0x92, 0x77, 0x59, 0x44, 0x3e, 0x45, 0x4e,
10499 0x6f, 0x73, 0x75, 0x71, 0x62, 0x4d, 0x36, 0x28,
10500 0x1c, 0x46, 0x69, 0x5f, 0x3d, 0x36, 0x5e, 0x8c,
10501 0x83, 0x4f, 0x19, 0x14, 0x3d, 0x6d, 0x82, 0x82,
10502 0x70, 0x48, 0x24, 0x2a, 0x4f, 0x68, 0x5e, 0x48,
10503 0x44, 0x58, 0x6c, 0x6c, 0x5a, 0x46, 0x3d, 0x3d,
10504 0x40, 0x47, 0x55, 0x66, 0x72, 0x74, 0x6c, 0x64,
10505 0x4e, 0x40, 0x2f, 0x22, 0x22, 0x3f, 0x78, 0xab,
10506 0xad, 0xa0, 0x93, 0x94, 0x9f, 0xa0, 0x8c, 0x75,
10507 0x6c, 0x67, 0x62, 0x63, 0x64, 0x5f, 0x54, 0x49,
10508 0x4b, 0x49, 0x45, 0x41, 0x40, 0x41, 0x43, 0x45,
10509 0x4b, 0x4d, 0x50, 0x46, 0x56, 0x53, 0x1e, 0x09,
10510 0x66, 0x89, 0xb1, 0xbb, 0xa2, 0x78, 0x55, 0x44,
10511 0x1d, 0x27, 0x35, 0x40, 0x45, 0x41, 0x39, 0x32,
10512 0x83, 0x95, 0xa2, 0x9a, 0x8a, 0x8f, 0xae, 0xcd,
10513 0xb1, 0xa4, 0x82, 0x4b, 0x1d, 0x15, 0x34, 0x56,
10514 0x3c, 0x70, 0xa2, 0xba, 0xc8, 0xc5, 0x9c, 0x69,
10515 0x63, 0xa2, 0xe7, 0xf4, 0xc1, 0x76, 0x3d, 0x24,
10516 0x31, 0x28, 0x1d, 0x18, 0x1f, 0x31, 0x46, 0x54,
10517 0x4b, 0x41, 0x4b, 0x7b, 0xbb, 0xe2, 0xe0, 0xce,
10518 0xeb, 0xe4, 0xcd, 0xa5, 0x7e, 0x6e, 0x7a, 0x8c,
10519 0x5d, 0x77, 0x9e, 0xbd, 0xc7, 0xb8, 0x9e, 0x8b,
10520 0x35, 0x54, 0x75, 0x80, 0x76, 0x70, 0x7a, 0x89,
10521 0x46, 0x66, 0x94, 0xb6, 0xb9, 0x9d, 0x73, 0x56,
10522 0x48, 0x3f, 0x35, 0x36, 0x44, 0x59, 0x6b, 0x75,
10523 0x5b, 0x58, 0x67, 0x79, 0x6b, 0x4b, 0x4b, 0x64,
10524 0x7c, 0x82, 0x85, 0x7a, 0x61, 0x41, 0x26, 0x18,
10525 0x08, 0x14, 0x2a, 0x44, 0x56, 0x5b, 0x53, 0x49,
10526 0x8c, 0x42, 0x21, 0x42, 0x4b, 0x22, 0x0c, 0x1e,
10527 0x0c, 0x08, 0x16, 0x3f, 0x72, 0x8c, 0x83, 0x70,
10528 0x85, 0x87, 0x8a, 0x8e, 0x92, 0x96, 0x99, 0x9b,
10529 0x94, 0x87, 0x76, 0x68, 0x65, 0x6e, 0x7b, 0x85,
10530 0x88, 0x8d, 0x94, 0x9a, 0x9c, 0x99, 0x95, 0x91,
10531 0xaf, 0xac, 0xa5, 0x9c, 0x93, 0x8a, 0x83, 0x80,
10532 0x5d, 0x64, 0x6f, 0x79, 0x7e, 0x7e, 0x7a, 0x77,
10533 0x55, 0x51, 0x4b, 0x45, 0x43, 0x45, 0x48, 0x4b,
10534 0x4e, 0x66, 0x7c, 0x79, 0x63, 0x54, 0x59, 0x65,
10535 0x84, 0x82, 0x7f, 0x7e, 0x81, 0x8c, 0x99, 0xa3,
10536 0xc8, 0xc6, 0xc6, 0xcd, 0xd7, 0xde, 0xdf, 0xdd,
10537 0xd6, 0xd2, 0xcb, 0xc2, 0xb8, 0xaf, 0xa8, 0xa4,
10538 0xa1, 0x9e, 0x99, 0x92, 0x8b, 0x84, 0x7f, 0x7c,
10539 0x7f, 0x81, 0x84, 0x88, 0x8c, 0x90, 0x93, 0x94,
10540 0x99, 0x91, 0x88, 0x82, 0x7e, 0x73, 0x62, 0x54,
10541 0x4b, 0x53, 0x52, 0x51, 0x65, 0x81, 0x85, 0x76,
10542 0x72, 0x7c, 0x8c, 0x9b, 0xa0, 0x97, 0x85, 0x76,
10543 0x59, 0x64, 0x73, 0x7e, 0x7c, 0x6e, 0x5d, 0x50,
10544 0x67, 0x7f, 0x84, 0x5c, 0x24, 0x13, 0x39, 0x68,
10545 0xa7, 0x6b, 0x29, 0x17, 0x38, 0x62, 0x76, 0x76,
10546 0x6c, 0x47, 0x2e, 0x42, 0x70, 0x80, 0x60, 0x37,
10547 0x12, 0x17, 0x28, 0x47, 0x65, 0x70, 0x65, 0x56,
10548 0x30, 0x3f, 0x53, 0x63, 0x69, 0x69, 0x68, 0x67,
10549 0x6d, 0x47, 0x1f, 0x20, 0x52, 0x8c, 0xa5, 0xa2,
10550 0xad, 0xa0, 0x90, 0x83, 0x7a, 0x76, 0x7b, 0x82,
10551 0x72, 0x6d, 0x69, 0x6a, 0x6d, 0x69, 0x5e, 0x53,
10552 0x4b, 0x49, 0x45, 0x41, 0x40, 0x41, 0x43, 0x45,
10553 0x4c, 0x4c, 0x4e, 0x42, 0x52, 0x51, 0x1e, 0x0a,
10554 0x88, 0xa8, 0xc4, 0xbd, 0x99, 0x7a, 0x73, 0x7b,
10555 0x5e, 0x7e, 0xab, 0xcc, 0xce, 0xb1, 0x87, 0x68,
10556 0x74, 0x73, 0x7b, 0x8f, 0xa5, 0xaa, 0x9b, 0x8b,
10557 0xaa, 0xab, 0xaa, 0xa9, 0xab, 0xb6, 0xc8, 0xd6,
10558 0xfc, 0xe3, 0xa9, 0x71, 0x6f, 0x97, 0xae, 0xa9,
10559 0x4b, 0x75, 0x93, 0x7a, 0x3f, 0x1c, 0x2c, 0x4c,
10560 0x76, 0x5f, 0x43, 0x38, 0x4e, 0x83, 0xbf, 0xe7,
10561 0xb6, 0xe1, 0xf6, 0xc5, 0x6d, 0x3b, 0x4f, 0x79,
10562 0x7b, 0x79, 0x6d, 0x58, 0x48, 0x53, 0x75, 0x94,
10563 0x7a, 0x80, 0x86, 0x86, 0x7b, 0x67, 0x51, 0x43,
10564 0x37, 0x4b, 0x72, 0xa1, 0xb7, 0x9c, 0x5b, 0x25,
10565 0x51, 0x87, 0xd4, 0xff, 0xff, 0xd5, 0x88, 0x52,
10566 0x38, 0x39, 0x39, 0x38, 0x35, 0x2d, 0x22, 0x1b,
10567 0x1c, 0x29, 0x4e, 0x70, 0x64, 0x38, 0x26, 0x32,
10568 0x2a, 0x3e, 0x4c, 0x40, 0x25, 0x17, 0x22, 0x35,
10569 0x51, 0x4a, 0x47, 0x4f, 0x5a, 0x59, 0x48, 0x37,
10570 0x19, 0x1c, 0x35, 0x75, 0xc8, 0xfe, 0xfb, 0xe1,
10571 0x73, 0x5f, 0x4f, 0x55, 0x6a, 0x75, 0x6d, 0x5f,
10572 0x8c, 0x8c, 0x8a, 0x88, 0x87, 0x85, 0x83, 0x83,
10573 0x7e, 0x6f, 0x5a, 0x4b, 0x49, 0x55, 0x67, 0x74,
10574 0x7e, 0x82, 0x89, 0x8e, 0x8e, 0x8a, 0x85, 0x81,
10575 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c,
10576 0x69, 0x62, 0x58, 0x4f, 0x4b, 0x4d, 0x51, 0x54,
10577 0x4d, 0x48, 0x41, 0x3b, 0x37, 0x38, 0x3a, 0x3d,
10578 0x3c, 0x46, 0x47, 0x37, 0x2b, 0x3d, 0x6d, 0x97,
10579 0xb3, 0xb9, 0xbd, 0xbb, 0xb5, 0xb2, 0xb3, 0xb7,
10580 0x9a, 0x95, 0x8c, 0x84, 0x7f, 0x7c, 0x7b, 0x7b,
10581 0x95, 0x98, 0x9d, 0xa3, 0xaa, 0xb1, 0xb6, 0xb9,
10582 0xb6, 0xb7, 0xba, 0xbe, 0xc1, 0xc5, 0xc8, 0xc9,
10583 0xd0, 0xcf, 0xcc, 0xc9, 0xc6, 0xc2, 0xc0, 0xbe,
10584 0x9f, 0x9b, 0x97, 0x9a, 0x9d, 0x9a, 0x8f, 0x84,
10585 0x80, 0x74, 0x78, 0x8f, 0x9a, 0x93, 0x91, 0x9a,
10586 0x9b, 0x82, 0x62, 0x4d, 0x48, 0x48, 0x45, 0x40,
10587 0x6c, 0x6b, 0x6a, 0x6c, 0x72, 0x7c, 0x85, 0x8b,
10588 0x6b, 0x6f, 0x72, 0x74, 0x76, 0x7c, 0x86, 0x8e,
10589 0x67, 0x7b, 0x91, 0x99, 0x8e, 0x7a, 0x68, 0x5f,
10590 0x47, 0x44, 0x40, 0x3c, 0x36, 0x2b, 0x1e, 0x15,
10591 0x29, 0x1d, 0x1c, 0x35, 0x59, 0x6a, 0x5d, 0x49,
10592 0x4f, 0x53, 0x52, 0x4a, 0x43, 0x4b, 0x60, 0x74,
10593 0x9a, 0x9c, 0x87, 0x65, 0x5b, 0x69, 0x6d, 0x61,
10594 0x65, 0x6d, 0x7f, 0x90, 0x8b, 0x78, 0x6f, 0x72,
10595 0x6f, 0x6b, 0x69, 0x6d, 0x72, 0x70, 0x67, 0x5e,
10596 0x4d, 0x4b, 0x47, 0x43, 0x42, 0x43, 0x45, 0x47,
10597 0x4d, 0x4c, 0x4c, 0x3f, 0x4f, 0x4f, 0x1d, 0x0b,
10598 0x3f, 0x6d, 0xaa, 0xd2, 0xce, 0xa5, 0x71, 0x4e,
10599 0x3b, 0x36, 0x2e, 0x28, 0x26, 0x28, 0x2c, 0x2f,
10600 0x41, 0x7d, 0xbd, 0xce, 0xb6, 0xa2, 0xad, 0xc4,
10601 0x9d, 0x8d, 0x85, 0x94, 0xa8, 0xa4, 0x80, 0x5c,
10602 0x45, 0x4f, 0x4d, 0x4b, 0x66, 0x89, 0x83, 0x63,
10603 0x6f, 0x98, 0xbd, 0xb8, 0x94, 0x79, 0x7f, 0x92,
10604 0x6d, 0x63, 0x57, 0x55, 0x63, 0x7f, 0x9e, 0xb3,
10605 0xda, 0x89, 0x44, 0x54, 0x98, 0xad, 0x6f, 0x22,
10606 0x29, 0x49, 0x71, 0x8a, 0x95, 0xa1, 0xb4, 0xc6,
10607 0xdb, 0xc7, 0xa7, 0x86, 0x6c, 0x5e, 0x59, 0x59,
10608 0x63, 0x48, 0x31, 0x3c, 0x66, 0x93, 0xac, 0xb3,
10609 0x9f, 0xad, 0xbd, 0xbf, 0xab, 0x82, 0x55, 0x37,
10610 0x9f, 0x69, 0x29, 0x0b, 0x12, 0x23, 0x26, 0x21,
10611 0x35, 0x1f, 0x17, 0x1d, 0x1c, 0x21, 0x4c, 0x82,
10612 0x8d, 0x94, 0x96, 0x88, 0x6e, 0x57, 0x4a, 0x48,
10613 0x6d, 0x50, 0x32, 0x2e, 0x44, 0x5b, 0x62, 0x5f,
10614 0x39, 0x3a, 0x3e, 0x4b, 0x59, 0x55, 0x35, 0x14,
10615 0x63, 0x50, 0x39, 0x2e, 0x32, 0x3c, 0x43, 0x45,
10616 0x88, 0x8a, 0x8e, 0x92, 0x97, 0x9c, 0x9f, 0xa1,
10617 0xaa, 0x95, 0x75, 0x59, 0x4c, 0x50, 0x5d, 0x68,
10618 0x78, 0x7c, 0x82, 0x86, 0x86, 0x81, 0x7b, 0x76,
10619 0x62, 0x63, 0x65, 0x68, 0x6b, 0x6e, 0x70, 0x72,
10620 0x7d, 0x75, 0x69, 0x5d, 0x56, 0x54, 0x56, 0x58,
10621 0x55, 0x4f, 0x46, 0x3e, 0x38, 0x36, 0x37, 0x39,
10622 0x4c, 0x40, 0x3d, 0x55, 0x79, 0x8c, 0x84, 0x74,
10623 0x8d, 0x99, 0xa5, 0xa6, 0x9d, 0x93, 0x8f, 0x90,
10624 0x97, 0x9d, 0xa5, 0xac, 0xaf, 0xb2, 0xb5, 0xb8,
10625 0xc4, 0xc2, 0xbe, 0xb9, 0xb4, 0xaf, 0xab, 0xa9,
10626 0xab, 0xa9, 0xa4, 0x9e, 0x98, 0x92, 0x8d, 0x8b,
10627 0x80, 0x7d, 0x78, 0x70, 0x68, 0x61, 0x5b, 0x58,
10628 0x5f, 0x5c, 0x5c, 0x63, 0x6b, 0x6d, 0x65, 0x5d,
10629 0x4e, 0x44, 0x50, 0x73, 0x8a, 0x84, 0x79, 0x78,
10630 0x97, 0x8f, 0x8b, 0x94, 0x9e, 0x99, 0x82, 0x6c,
10631 0x6b, 0x63, 0x58, 0x51, 0x53, 0x5c, 0x69, 0x72,
10632 0x6e, 0x68, 0x67, 0x6f, 0x79, 0x77, 0x68, 0x59,
10633 0x5d, 0x7c, 0x9d, 0xa3, 0x92, 0x85, 0x8b, 0x98,
10634 0xa5, 0xa1, 0x95, 0x81, 0x6f, 0x6c, 0x78, 0x85,
10635 0x79, 0x6f, 0x62, 0x5a, 0x5a, 0x5b, 0x5a, 0x58,
10636 0x4f, 0x53, 0x4d, 0x36, 0x1c, 0x15, 0x25, 0x38,
10637 0x43, 0x8f, 0xbd, 0x9a, 0x68, 0x61, 0x73, 0x7c,
10638 0x8b, 0x78, 0x74, 0x86, 0x90, 0x82, 0x70, 0x6b,
10639 0x64, 0x61, 0x61, 0x68, 0x70, 0x71, 0x6a, 0x62,
10640 0x51, 0x4e, 0x4a, 0x46, 0x45, 0x46, 0x48, 0x4a,
10641 0x4e, 0x4c, 0x4a, 0x3c, 0x4c, 0x4d, 0x1d, 0x0c,
10642 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10643 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10644 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10645 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10646 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10647 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10648 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10649 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10650 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10651 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10652 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10653 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10654 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10655 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10656 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10657 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10658 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10659 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10660 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10661 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10662 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10663 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10664 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10665 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10666 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10667 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10668 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10669 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10670 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10671 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10672 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10673 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10674 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10675 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10676 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10677 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10678 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10679 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10680 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10681 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10682 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10683 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10684 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10685 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10686 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10687 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10688 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10689 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10690 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10691 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10692 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10693 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10694 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10695 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10696 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10697 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10698 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10699 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10700 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10701 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10702 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10703 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10704 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10705 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10706 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10707 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10708 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10709 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10710 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10711 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10712 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10713 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10714 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10715 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10716 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10717 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10718 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10719 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10720 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10721 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10722 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10723 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10724 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10725 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10726 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10727 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10728 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10729 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10730 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10731 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10732 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10733 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10734 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10735 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10736 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10737 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10738 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10739 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10740 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10741 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10742 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10743 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10744 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10745 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10746 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10747 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10748 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10749 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10750 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10751 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10752 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10753 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10754 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10755 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10756 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10757 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10758 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10759 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10760 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10761 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10762 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10763 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10764 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10765 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10766 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10767 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10768 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10769 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10770 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10771 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10772 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10773 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10774 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10775 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10776 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10777 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10778 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10779 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10780 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10781 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10782 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10783 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10784 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10785 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10786 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10787 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10788 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10789 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10790 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10791 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10792 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10793 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10794 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10795 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10796 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10797 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10798 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10799 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10800 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10801 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10802 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10803 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10804 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10805 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10806 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10807 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10808 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10809 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10810 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10811 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10812 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10813 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10814 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10815 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10816 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10817 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10818 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10819 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10820 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10821 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10822 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10823 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10824 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10825 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10826 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10827 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10828 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10829 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10830 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10831 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10832 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10833 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10834 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10835 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10836 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10837 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10838 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10839 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10840 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10841 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10842 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10843 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10844 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10845 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10846 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10847 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10848 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10849 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10850 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10851 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10852 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10853 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10854 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10855 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10856 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10857 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10858 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10859 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10860 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10861 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10862 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10863 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10864 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10865 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10866 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10867 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10868 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10869 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10870 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10871 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10872 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10873 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10874 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10875 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10876 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10877 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10878 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10879 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10880 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10881 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10882 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10883 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10884 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10885 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10886 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10887 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10888 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10889 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10890 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10891 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10892 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10893 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10894 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10895 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10896 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10897 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10898 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10899 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10900 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10901 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10902 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10903 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10904 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10905 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10906 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10907 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10908 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10909 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10910 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10911 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10912 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10913 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10914 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10915 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10916 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10917 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10918 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10919 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10920 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10921 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10922 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10923 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10924 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10925 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10926 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10927 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10928 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10929 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10930 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10931 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10932 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10933 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10934 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10935 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10936 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10937 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10938 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10939 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10940 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10941 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10942 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10943 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10944 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10945 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10946 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10947 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10948 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10949 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10950 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10951 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10952 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10953 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10954 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10955 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10956 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10957 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10958 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10959 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10960 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10961 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10962 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10963 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10964 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10965 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10966 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10967 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10968 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10969 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10970 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10971 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10972 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10973 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10974 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10975 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10976 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10977 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10978 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10979 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10980 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10981 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10982 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10983 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10984 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10985 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10986 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10987 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10988 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10989 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10990 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10991 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10992 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10993 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10994 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10995 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10996 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10997 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10998 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10999 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11000 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11001 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11002 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11003 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11004 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11005 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11006 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11007 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11008 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11009 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11010 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11011 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11012 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11013 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11014 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11015 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11016 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11017 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11018 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11019 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11020 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11021 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11022 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11023 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11024 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11025 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11026 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11027 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11028 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11029 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11030 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11031 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11032 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11033 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11034 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11035 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11036 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11037 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11038 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11039 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11040 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11041 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11042 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11043 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11044 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11045 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11046 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11047 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11048 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11049 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11050 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11051 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11052 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11053 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11054 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11055 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11056 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11057 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11058 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11059 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11060 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11061 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11062 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11063 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11064 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11065 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11066 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11067 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11068 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11069 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11070 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11071 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11072 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11073 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11074 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11075 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11076 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11077 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11078 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11079 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11080 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11081 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11082 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11083 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11084 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11085 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11086 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11087 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11088 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11089 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11090 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11091 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11092 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11093 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11094 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11095 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11096 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11097 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11098 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11099 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11100 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11101 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11102 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11103 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11104 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11105 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11106 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11107 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11108 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11109 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11110 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11111 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11112 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11113 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11114 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11115 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11116 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11117 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11118 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11119 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11120 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11121 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11122 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11123 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11124 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11125 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11126 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11127 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11128 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11129 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11130 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11131 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11132 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11133 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11134 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11135 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11136 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11137 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11138 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11139 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11140 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11141 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11142 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11143 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11144 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11145 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11146 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11147 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11148 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11149 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11150 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11151 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11152 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11153 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11154 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11155 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11156 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11157 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11158 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11159 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11160 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11161 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11162 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11163 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11164 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11165 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11166 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11167 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11168 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11169 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11170 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11171 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11172 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11173 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11174 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11175 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11176 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11177 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11178 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11179 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11180 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11181 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11182 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11183 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11184 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11185 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11186 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11187 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11188 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11189 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11190 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11191 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11192 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11193 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11194 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11195 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11196 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11197 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11198 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11199 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11200 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11201 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11202 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11203 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11204 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11205 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11206 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11207 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11208 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11209 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11210 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11211 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11212 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11213 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11214 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11215 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11216 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11217 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11218 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11219 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11220 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11221 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11222 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11223 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11224 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11225 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11226 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11227 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11228 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11229 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11230 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11231 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11232 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11233 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11234 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11235 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11236 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11237 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11238 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11239 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11240 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11241 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11242 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11243 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11244 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11245 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11246 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11247 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11248 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11249 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11250 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11251 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11252 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11253 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11254 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11255 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11256 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11257 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11258 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11259 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11260 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11261 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11262 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11263 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11264 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11265 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11266 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11267 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11268 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11269 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11270 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11271 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11272 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11273 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11274 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11275 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11276 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11277 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11278 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11279 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11280 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11281 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11282 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11283 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11284 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11285 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11286 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11287 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11288 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11289 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11290 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11291 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11292 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11293 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11294 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11295 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11296 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11297 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11298 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11299 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11300 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11301 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11302 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11303 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11304 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11305 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11306 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11307 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11308 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11309 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11310 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11311 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11312 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11313 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11314 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11315 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11316 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11317 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11318 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11319 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11320 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11321 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11322 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11323 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11324 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11325 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11326 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11327 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11328 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11329 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11330 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11331 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11332 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11333 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11334 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11335 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11336 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11337 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11338 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11339 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11340 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11341 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11342 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11343 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11344 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11345 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11346 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11347 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11348 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11349 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11350 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11351 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11352 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11353 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11354 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11355 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11356 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11357 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11358 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11359 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11360 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11361 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11362 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11363 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11364 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11365 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11366 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11367 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11368 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11369 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11370 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11371 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11372 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11373 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11374 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11375 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11376 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11377 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11378 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11379 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11380 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11381 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11382 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11383 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11384 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11385 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11386 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11387 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11388 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11389 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c
11390};
11391
11392
11393/*
11394 Initialization- and return-value-related functions
11395*/
11396
11397void mpeg2_init( void )
11398{
11399 unsigned int i;
11400 unsigned char *p;
11401 volatile char bitmask = 0;
11402
11403 /*
11404 Apply volatile XOR-bitmask to entire input array.
11405 */
11406 p = (unsigned char *) &mpeg2_oldorgframe[ 0 ];
11407 _Pragma( "loopbound min 90112 max 90112" )
11408 for ( i = 0; i < sizeof( mpeg2_oldorgframe ); ++i, ++p )
11409 *p ^= bitmask;
11410}
11411
11412
11413int mpeg2_return( void )
11414{
11415 int checksum = 0;
11416 int i, j, k, l;
11417
11418
11419 _Pragma( "loopbound min 352 max 352" )
11420 for ( i = 0; i < 352; i++ ) {
11421 j = 0;
11422 _Pragma( "loopbound min 2 max 2" )
11423 for ( ; j < 2; j++ ) {
11424 k = 0;
11425 _Pragma( "loopbound min 2 max 2" )
11426 for ( ; k < 2; k++ ) {
11427 l = 0;
11428 _Pragma( "loopbound min 2 max 2" )
11429 for ( ; l < 2; l++ )
11430 checksum += mpeg2_mbinfo[ i ].MV[ j ][ k ][ l ];
11431 }
11432 }
11433 }
11434
11435 return( checksum );
11436}
11437
11438
11439/*
11440 Algorithm core functions
11441*/
11442
11443/*
11444 motion estimation for progressive and interlaced frame pictures
11445
11446 oldorg: source frame for forward prediction (used for P and B frames)
11447 neworg: source frame for backward prediction (B frames only)
11448 oldref: reconstructed frame for forward prediction (P and B frames)
11449 newref: reconstructed frame for backward prediction (B frames only)
11450 cur: current frame (the one for which the prediction is formed)
11451 sxf,syf: forward search window (frame coordinates)
11452 sxb,syb: backward search window (frame coordinates)
11453 mbi: pointer to macroblock info structure
11454
11455 results:
11456 mbi->
11457 mb_type: 0, MB_INTRA, MB_FORWARD, MB_BACKWARD, MB_FORWARD|MB_BACKWARD
11458 MV[][][]: motion vectors (frame format)
11459 mv_field_sel: top/bottom field (for field prediction)
11460 motion_type: MC_FRAME, MC_FIELD
11461
11462 uses global vars: mpeg2_pict_type, frame_pred_dct
11463*/
11464void mpeg2_motion_estimation( unsigned char *oldorg, unsigned char *neworg,
11465 unsigned char *oldref, unsigned char *newref,
11466 unsigned char *cur, unsigned char *curref,
11467 int sxf, int syf, int sxb, int syb,
11468 struct mbinfo *mbi, int secondfield, int ipflag )
11469{
11470 int i, j;
11471
11472
11473 /* loop through all macroblocks of the picture */
11474 _Pragma( "loopbound min 16 max 16" )
11475 for ( j = 0; j < mpeg2_height2; j += 16 ) {
11476 i = 0;
11477 _Pragma( "loopbound min 22 max 22" )
11478 for ( ; i < mpeg2_width; i += 16 ) {
11479 if ( mpeg2_pict_struct == 3 )
11480 mpeg2_frame_ME(
11481 oldorg, neworg, oldref, newref, cur, i, j, sxf, syf, sxb, syb, mbi );
11482 else
11483 mpeg2_field_ME(
11484 oldorg, neworg, oldref, newref, cur, curref, i, j, sxf, syf, sxb, syb,
11485 mbi, secondfield, ipflag );
11486 mbi++;
11487 }
11488 }
11489}
11490
11491
11492void mpeg2_frame_ME( unsigned char *oldorg, unsigned char *neworg,
11493 unsigned char *oldref, unsigned char *newref,
11494 unsigned char *cur, int i, int j, int sxf, int syf,
11495 int sxb, int syb, struct mbinfo *mbi )
11496{
11497 int imin, jmin, iminf, jminf, iminr, jminr;
11498 int imint, jmint, iminb, jminb;
11499 int imintf, jmintf, iminbf, jminbf;
11500 int imintr, jmintr, iminbr, jminbr;
11501 int var, v0;
11502 int dmc, dmcf, dmcr, dmci, vmc, vmcf, vmcr, vmci;
11503 int dmcfield, dmcfieldf, dmcfieldr, dmcfieldi;
11504 int tsel, bsel, tself, bself, tselr, bselr;
11505 unsigned char *mb;
11506 int imins[ 2 ][ 2 ], jmins[ 2 ][ 2 ];
11507 int imindp, jmindp, imindmv, jmindmv, dmc_dp, vmc_dp;
11508
11509
11510 mb = cur + i + mpeg2_width * j;
11511
11512 var = mpeg2_variance( mb, mpeg2_width );
11513
11514 if ( mpeg2_pict_type == 1 )
11515 mbi->mb_type = 1;
11516 else
11517
11518 if ( mpeg2_pict_type == 2 ) {
11519 if ( mpeg2_frame_pred_dct ) {
11520 dmc =
11521 mpeg2_fullsearch(
11522 oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width,
11523 mpeg2_height, &imin, &jmin );
11524 vmc =
11525 mpeg2_dist2(
11526 oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb, mpeg2_width,
11527 imin & 1, jmin & 1, 16 );
11528 mbi->motion_type = 2;
11529 } else {
11530 mpeg2_frame_estimate(
11531 oldorg, oldref, mb, i, j, sxf, syf, &imin, &jmin, &imint, &jmint,
11532 &iminb, &jminb, &dmc, &dmcfield, &tsel, &bsel, imins, jmins );
11533
11534 if ( mpeg2_M == 1 )
11535 mpeg2_dpframe_estimate(
11536 oldref, mb, i, j >> 1, imins, jmins, &imindp, &jmindp, &imindmv,
11537 &jmindmv, &dmc_dp, &vmc_dp );
11538
11539 /* select between dual prime, frame and field prediction */
11540 if ( ( mpeg2_M == 1 ) && ( dmc_dp < dmc ) && ( dmc_dp < dmcfield ) ) {
11541 mbi->motion_type = 3;
11542 dmc = dmc_dp;
11543 vmc = vmc_dp;
11544 } else
11545
11546 if ( dmc <= dmcfield ) {
11547 mbi->motion_type = 2;
11548 vmc =
11549 mpeg2_dist2(
11550 oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb,
11551 mpeg2_width, imin & 1, jmin & 1, 16 );
11552 } else {
11553 mbi->motion_type = 1;
11554 dmc = dmcfield;
11555 vmc =
11556 mpeg2_dist2(
11557 oldref + ( tsel ? mpeg2_width : 0 ) + ( imint >> 1 )
11558 + ( mpeg2_width << 1 ) * ( jmint >> 1 ),
11559 mb, mpeg2_width << 1, imint & 1, jmint & 1, 8 );
11560 vmc +=
11561 mpeg2_dist2(
11562 oldref + ( bsel ? mpeg2_width : 0 ) + ( iminb >> 1 )
11563 + ( mpeg2_width << 1 ) * ( jminb >> 1 ),
11564 mb + mpeg2_width, mpeg2_width << 1, iminb & 1, jminb & 1, 8 );
11565 }
11566 }
11567
11568 /*
11569 select between intra or non-intra coding:
11570
11571 selection is based on intra block variance (var) vs.
11572 prediction error variance (vmc)
11573
11574 blocks with small prediction error are always coded non-intra
11575 even if variance is smaller (is this reasonable?)
11576 */
11577 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
11578 mbi->mb_type = 1;
11579 else {
11580 /*
11581 select between MC / No-MC
11582
11583 use No-MC if var(No-MC) <= 1.25*var(MC)
11584 (i.e slightly biased towards No-MC)
11585
11586 blocks with small prediction error are always coded as No-MC
11587 (requires no motion vectors, allows skipping)
11588 */
11589 v0 =
11590 mpeg2_dist2( oldref + i + mpeg2_width * j, mb, mpeg2_width, 0, 0, 16 );
11591
11592 if ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) {
11593 /* use MC */
11594 var = vmc;
11595 mbi->mb_type = 8;
11596
11597 if ( mbi->motion_type == 2 ) {
11598 mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 );
11599 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 );
11600 } else
11601
11602 if ( mbi->motion_type == 3 ) {
11603 /* these are FRAME vectors */
11604 /* same parity vector */
11605 mbi->MV[ 0 ][ 0 ][ 0 ] = imindp - ( i << 1 );
11606 mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmindp << 1 ) - ( j << 1 );
11607
11608 /* opposite parity vector */
11609 mbi->dmvector[ 0 ] = imindmv;
11610 mbi->dmvector[ 1 ] = jmindmv;
11611 } else {
11612 /* these are FRAME vectors */
11613 mbi->MV[ 0 ][ 0 ][ 0 ] = imint - ( i << 1 );
11614 mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmint << 1 ) - ( j << 1 );
11615 mbi->MV[ 1 ][ 0 ][ 0 ] = iminb - ( i << 1 );
11616 mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminb << 1 ) - ( j << 1 );
11617 mbi->mv_field_sel[ 0 ][ 0 ] = tsel;
11618 mbi->mv_field_sel[ 1 ][ 0 ] = bsel;
11619 }
11620 } else {
11621 /* No-MC */
11622 var = v0;
11623 mbi->mb_type = 0;
11624 mbi->motion_type = 2;
11625 mbi->MV[ 0 ][ 0 ][ 0 ] = 0;
11626 mbi->MV[ 0 ][ 0 ][ 1 ] = 0;
11627 }
11628 }
11629 } else { /* if (mpeg2_pict_type==B_TYPE) */
11630
11631 if ( mpeg2_frame_pred_dct ) {
11632 /* forward */
11633 dmcf =
11634 mpeg2_fullsearch(
11635 oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width,
11636 mpeg2_height, &iminf, &jminf );
11637 vmcf =
11638 mpeg2_dist2(
11639 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb,
11640 mpeg2_width, iminf & 1, jminf & 1, 16 );
11641
11642 /* backward */
11643 dmcr =
11644 mpeg2_fullsearch(
11645 neworg, newref, mb, mpeg2_width, i, j, sxb, syb, 16, mpeg2_width,
11646 mpeg2_height, &iminr, &jminr );
11647 vmcr =
11648 mpeg2_dist2(
11649 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb,
11650 mpeg2_width, iminr & 1, jminr & 1, 16 );
11651
11652 /* interpolated (bidirectional) */
11653 vmci =
11654 mpeg2_bdist2(
11655 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ),
11656 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ),
11657 mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
11658
11659 /* decisions */
11660
11661 /*
11662 select between forward/backward/interpolated prediction:
11663 use the one with smallest mean sqaured prediction error
11664 */
11665 if ( ( vmcf <= vmcr ) && ( vmcf <= vmci ) ) {
11666 vmc = vmcf;
11667 mbi->mb_type = 8;
11668 } else
11669
11670 if ( vmcr <= vmci ) {
11671 vmc = vmcr;
11672 mbi->mb_type = 4;
11673 } else {
11674 vmc = vmci;
11675 mbi->mb_type = 8 | 4;
11676 }
11677
11678 mbi->motion_type = 2;
11679 } else {
11680 /* forward prediction */
11681 mpeg2_frame_estimate(
11682 oldorg, oldref, mb, i, j, sxf, syf, &iminf, &jminf, &imintf, &jmintf,
11683 &iminbf, &jminbf, &dmcf, &dmcfieldf, &tself, &bself, imins, jmins );
11684
11685 /* backward prediction */
11686 mpeg2_frame_estimate(
11687 neworg, newref, mb, i, j, sxb, syb, &iminr, &jminr, &imintr, &jmintr,
11688 &iminbr, &jminbr, &dmcr, &dmcfieldr, &tselr, &bselr, imins, jmins );
11689
11690 /* calculate interpolated distance */
11691 /* frame */
11692 dmci =
11693 mpeg2_bdist1(
11694 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ),
11695 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ),
11696 mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
11697
11698 /* top field */
11699 dmcfieldi =
11700 mpeg2_bdist1(
11701 oldref + ( imintf >> 1 ) + ( tself ? mpeg2_width : 0 )
11702 + ( mpeg2_width << 1 ) * ( jmintf >> 1 ),
11703 newref + ( imintr >> 1 ) + ( tselr ? mpeg2_width : 0 )
11704 + ( mpeg2_width << 1 ) * ( jmintr >> 1 ),
11705 mb, mpeg2_width << 1, imintf & 1, jmintf & 1, imintr & 1, jmintr & 1,
11706 8 );
11707
11708 /* bottom field */
11709 dmcfieldi +=
11710 mpeg2_bdist1(
11711 oldref + ( iminbf >> 1 ) + ( bself ? mpeg2_width : 0 )
11712 + ( mpeg2_width << 1 ) * ( jminbf >> 1 ),
11713 newref + ( iminbr >> 1 ) + ( bselr ? mpeg2_width : 0 )
11714 + ( mpeg2_width << 1 ) * ( jminbr >> 1 ),
11715 mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, iminbr & 1,
11716 jminbr & 1, 8 );
11717
11718 /*
11719 select prediction type of minimum distance from the
11720 six candidates (field/frame * forward/backward/interpolated)
11721 */
11722 if ( ( dmci < dmcfieldi ) && ( dmci < dmcf ) && ( dmci < dmcfieldf ) &&
11723 ( dmci < dmcr ) && ( dmci < dmcfieldr ) ) {
11724 /* frame, interpolated */
11725 mbi->mb_type = 8 | 4;
11726 mbi->motion_type = 2;
11727 vmc =
11728 mpeg2_bdist2(
11729 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ),
11730 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ),
11731 mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
11732 } else
11733
11734 if ( ( dmcfieldi < dmcf ) && ( dmcfieldi < dmcfieldf ) &&
11735 ( dmcfieldi < dmcr ) && ( dmcfieldi < dmcfieldr ) ) {
11736 /* field, interpolated */
11737 mbi->mb_type = 8 | 4;
11738 mbi->motion_type = 1;
11739 vmc =
11740 mpeg2_bdist2(
11741 oldref + ( imintf >> 1 ) + ( tself ? mpeg2_width : 0 )
11742 + ( mpeg2_width << 1 ) * ( jmintf >> 1 ),
11743 newref + ( imintr >> 1 ) + ( tselr ? mpeg2_width : 0 )
11744 + ( mpeg2_width << 1 ) * ( jmintr >> 1 ),
11745 mb, mpeg2_width << 1, imintf & 1, jmintf & 1, imintr & 1, jmintr & 1,
11746 8 );
11747 vmc +=
11748 mpeg2_bdist2(
11749 oldref + ( iminbf >> 1 ) + ( bself ? mpeg2_width : 0 )
11750 + ( mpeg2_width << 1 ) * ( jminbf >> 1 ),
11751 newref + ( iminbr >> 1 ) + ( bselr ? mpeg2_width : 0 )
11752 + ( mpeg2_width << 1 ) * ( jminbr >> 1 ),
11753 mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1,
11754 iminbr & 1, jminbr & 1, 8 );
11755 } else
11756
11757 if ( ( dmcf < dmcfieldf ) && ( dmcf < dmcr ) && ( dmcf < dmcfieldr ) ) {
11758 /* frame, forward */
11759 mbi->mb_type = 8;
11760 mbi->motion_type = 2;
11761 vmc =
11762 mpeg2_dist2(
11763 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb,
11764 mpeg2_width, iminf & 1, jminf & 1, 16 );
11765 } else
11766
11767 if ( ( dmcfieldf < dmcr ) && ( dmcfieldf < dmcfieldr ) ) {
11768 /* field, forward */
11769 mbi->mb_type = 8;
11770 mbi->motion_type = 1;
11771 vmc =
11772 mpeg2_dist2(
11773 oldref + ( tself ? mpeg2_width : 0 ) + ( imintf >> 1 )
11774 + ( mpeg2_width << 1 ) * ( jmintf >> 1 ),
11775 mb, mpeg2_width << 1, imintf & 1, jmintf & 1, 8 );
11776 vmc +=
11777 mpeg2_dist2(
11778 oldref + ( bself ? mpeg2_width : 0 ) + ( iminbf >> 1 )
11779 + ( mpeg2_width << 1 ) * ( jminbf >> 1 ),
11780 mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, 8 );
11781 } else
11782
11783 if ( dmcr < dmcfieldr ) {
11784 /* frame, backward */
11785 mbi->mb_type = 4;
11786 mbi->motion_type = 2;
11787 vmc =
11788 mpeg2_dist2(
11789 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb,
11790 mpeg2_width, iminr & 1, jminr & 1, 16 );
11791 } else {
11792 /* field, backward */
11793 mbi->mb_type = 4;
11794 mbi->motion_type = 1;
11795 vmc =
11796 mpeg2_dist2(
11797 newref + ( tselr ? mpeg2_width : 0 ) + ( imintr >> 1 )
11798 + ( mpeg2_width << 1 ) * ( jmintr >> 1 ),
11799 mb, mpeg2_width << 1, imintr & 1, jmintr & 1, 8 );
11800 vmc +=
11801 mpeg2_dist2(
11802 newref + ( bselr ? mpeg2_width : 0 ) + ( iminbr >> 1 )
11803 + ( mpeg2_width << 1 ) * ( jminbr >> 1 ),
11804 mb + mpeg2_width, mpeg2_width << 1, iminbr & 1, jminbr & 1, 8 );
11805 }
11806 }
11807
11808 /*
11809 select between intra or non-intra coding:
11810
11811 selection is based on intra block variance (var) vs.
11812 prediction error variance (vmc)
11813
11814 blocks with small prediction error are always coded non-intra
11815 even if variance is smaller (is this reasonable?)
11816 */
11817 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
11818 mbi->mb_type = 1;
11819 else {
11820 var = vmc;
11821
11822 if ( mbi->motion_type == 2 ) {
11823 /* forward */
11824 mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 );
11825 mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 );
11826 /* backward */
11827 mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 );
11828 mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 );
11829 } else {
11830 /* these are FRAME vectors */
11831 /* forward */
11832 mbi->MV[ 0 ][ 0 ][ 0 ] = imintf - ( i << 1 );
11833 mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmintf << 1 ) - ( j << 1 );
11834 mbi->MV[ 1 ][ 0 ][ 0 ] = iminbf - ( i << 1 );
11835 mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminbf << 1 ) - ( j << 1 );
11836 mbi->mv_field_sel[ 0 ][ 0 ] = tself;
11837 mbi->mv_field_sel[ 1 ][ 0 ] = bself;
11838 /* backward */
11839 mbi->MV[ 0 ][ 1 ][ 0 ] = imintr - ( i << 1 );
11840 mbi->MV[ 0 ][ 1 ][ 1 ] = ( jmintr << 1 ) - ( j << 1 );
11841 mbi->MV[ 1 ][ 1 ][ 0 ] = iminbr - ( i << 1 );
11842 mbi->MV[ 1 ][ 1 ][ 1 ] = ( jminbr << 1 ) - ( j << 1 );
11843 mbi->mv_field_sel[ 0 ][ 1 ] = tselr;
11844 mbi->mv_field_sel[ 1 ][ 1 ] = bselr;
11845 }
11846 }
11847 }
11848
11849 mbi->var = var;
11850}
11851
11852
11853/*
11854 motion estimation for field pictures
11855
11856 oldorg: original frame for forward prediction (P and B frames)
11857 neworg: original frame for backward prediction (B frames only)
11858 oldref: reconstructed frame for forward prediction (P and B frames)
11859 newref: reconstructed frame for backward prediction (B frames only)
11860 cur: current original frame (the one for which the prediction is formed)
11861 curref: current reconstructed frame (to predict second field from first)
11862 sxf,syf: forward search window (frame coordinates)
11863 sxb,syb: backward search window (frame coordinates)
11864 mbi: pointer to macroblock info structure
11865 secondfield: indicates second field of a frame (in P fields this means
11866 that reference field of opposite parity is in curref instead
11867 of oldref)
11868 ipflag: indicates a P type field which is the second field of a frame
11869 in which the first field is I type (this restricts predictions
11870 to be based only on the opposite parity (=I) field)
11871
11872 results:
11873 mbi->
11874 mb_type: 0, MB_INTRA, MB_FORWARD, MB_BACKWARD, MB_FORWARD|MB_BACKWARD
11875 MV[][][]: motion vectors (field format)
11876 mv_field_sel: top/bottom field
11877 motion_type: MC_FIELD, MC_16X8
11878
11879 uses global vars: mpeg2_pict_type, mpeg2_pict_struct
11880*/
11881void mpeg2_field_ME( unsigned char *oldorg, unsigned char *neworg,
11882 unsigned char *oldref, unsigned char *newref,
11883 unsigned char *cur, unsigned char *curref, int i, int j,
11884 int sxf, int syf, int sxb, int syb, struct mbinfo *mbi,
11885 int secondfield, int ipflag )
11886{
11887 int w2;
11888 unsigned char *mb, *toporg, *topref, *botorg, *botref;
11889 int var, vmc, v0, dmcfieldi, dmc8i;
11890 int imin, jmin, imin8u, jmin8u, imin8l, jmin8l, dmcfield, dmc8, sel, sel8u,
11891 sel8l;
11892 int iminf, jminf, imin8uf, jmin8uf, imin8lf, jmin8lf, dmcfieldf, dmc8f, self,
11893 sel8uf, sel8lf;
11894 int iminr, jminr, imin8ur, jmin8ur, imin8lr, jmin8lr, dmcfieldr, dmc8r, selr,
11895 sel8ur, sel8lr;
11896 int imins, jmins, ds, imindmv, jmindmv, vmc_dp, dmc_dp;
11897
11898
11899 w2 = mpeg2_width << 1;
11900 mb = cur + i + w2 * j;
11901
11902 if ( mpeg2_pict_struct == 2 )
11903 mb += mpeg2_width;
11904
11905 var = mpeg2_variance( mb, w2 );
11906
11907 if ( mpeg2_pict_type == 1 )
11908 mbi->mb_type = 1;
11909 else
11910
11911 if ( mpeg2_pict_type == 2 ) {
11912 toporg = oldorg;
11913 topref = oldref;
11914 botorg = oldorg + mpeg2_width;
11915 botref = oldref + mpeg2_width;
11916
11917 if ( secondfield ) {
11918 /* opposite parity field is in same frame */
11919 if ( mpeg2_pict_struct == 1 ) {
11920 /* current is top field */
11921 botorg = cur + mpeg2_width;
11922 botref = curref + mpeg2_width;
11923 } else {
11924 /* current is bottom field */
11925 toporg = cur;
11926 topref = curref;
11927 }
11928 }
11929
11930 mpeg2_field_estimate(
11931 toporg, topref, botorg, botref, mb, i, j, sxf, syf, ipflag, &imin, &jmin,
11932 &imin8u, &jmin8u, &imin8l, &jmin8l, &dmcfield, &dmc8, &sel, &sel8u,
11933 &sel8l, &imins, &jmins, &ds );
11934
11935 if ( ( mpeg2_M == 1 ) && !ipflag )
11936 /* generic condition which permits Dual Prime */
11937 mpeg2_dpfield_estimate(
11938 topref, botref, mb, i, j, imins, jmins, &imindmv, &jmindmv, &dmc_dp,
11939 &vmc_dp );
11940
11941 /* select between dual prime, field and 16x8 prediction */
11942 if ( ( mpeg2_M == 1 ) && !ipflag && ( dmc_dp < dmc8 ) &&
11943 ( dmc_dp < dmcfield ) ) {
11944 /* Dual Prime prediction */
11945 mbi->motion_type = 3;
11946 vmc = vmc_dp; /* we already calculated L2 error for Dual */
11947
11948 } else
11949
11950 if ( dmc8 < dmcfield ) {
11951 /* 16x8 prediction */
11952 mbi->motion_type = 2;
11953 /* upper half block */
11954 vmc =
11955 mpeg2_dist2(
11956 ( sel8u ? botref : topref ) + ( imin8u >> 1 ) + w2 * ( jmin8u >> 1 ),
11957 mb, w2, imin8u & 1, jmin8u & 1, 8 );
11958 /* lower half block */
11959 vmc +=
11960 mpeg2_dist2(
11961 ( sel8l ? botref : topref ) + ( imin8l >> 1 ) + w2 * ( jmin8l >> 1 ),
11962 mb + 8 * w2, w2, imin8l & 1, jmin8l & 1, 8 );
11963 } else {
11964 /* field prediction */
11965 mbi->motion_type = 1;
11966 vmc =
11967 mpeg2_dist2(
11968 ( sel ? botref : topref ) + ( imin >> 1 ) + w2 * ( jmin >> 1 ),
11969 mb, w2, imin & 1, jmin & 1, 16 );
11970 }
11971
11972 /* select between intra and non-intra coding */
11973 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
11974 mbi->mb_type = 1;
11975 else {
11976 /*
11977 zero MV field prediction from same parity ref. field
11978 (not allowed if ipflag is set)
11979 */
11980 if ( !ipflag )
11981 v0 =
11982 mpeg2_dist2(
11983 ( ( mpeg2_pict_struct == 2 ) ? botref : topref ) + i + w2 * j, mb,
11984 w2, 0, 0, 16 );
11985
11986 if ( ipflag || ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) ) {
11987 var = vmc;
11988 mbi->mb_type = 8;
11989
11990 if ( mbi->motion_type == 1 ) {
11991 mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 );
11992 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 );
11993 mbi->mv_field_sel[ 0 ][ 0 ] = sel;
11994 } else
11995
11996 if ( mbi->motion_type == 3 ) {
11997 /* same parity vector */
11998 mbi->MV[ 0 ][ 0 ][ 0 ] = imins - ( i << 1 );
11999 mbi->MV[ 0 ][ 0 ][ 1 ] = jmins - ( j << 1 );
12000
12001 /* opposite parity vector */
12002 mbi->dmvector[ 0 ] = imindmv;
12003 mbi->dmvector[ 1 ] = jmindmv;
12004 } else {
12005 mbi->MV[ 0 ][ 0 ][ 0 ] = imin8u - ( i << 1 );
12006 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8u - ( j << 1 );
12007 mbi->MV[ 1 ][ 0 ][ 0 ] = imin8l - ( i << 1 );
12008 mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8l - ( ( j + 8 ) << 1 );
12009 mbi->mv_field_sel[ 0 ][ 0 ] = sel8u;
12010 mbi->mv_field_sel[ 1 ][ 0 ] = sel8l;
12011 }
12012 } else {
12013 /* No MC */
12014 var = v0;
12015 mbi->mb_type = 0;
12016 mbi->motion_type = 1;
12017 mbi->MV[ 0 ][ 0 ][ 0 ] = 0;
12018 mbi->MV[ 0 ][ 0 ][ 1 ] = 0;
12019 mbi->mv_field_sel[ 0 ][ 0 ] = ( mpeg2_pict_struct == 2 );
12020 }
12021 }
12022 } else { /* if (mpeg2_pict_type==B_TYPE) */
12023 /* forward prediction */
12024 mpeg2_field_estimate(
12025 oldorg, oldref, oldorg + mpeg2_width, oldref + mpeg2_width, mb, i, j, sxf,
12026 syf, 0, &iminf, &jminf, &imin8uf, &jmin8uf, &imin8lf, &jmin8lf,
12027 &dmcfieldf, &dmc8f, &self, &sel8uf, &sel8lf, &imins, &jmins, &ds );
12028
12029 /* backward prediction */
12030 mpeg2_field_estimate(
12031 neworg, newref, neworg + mpeg2_width, newref + mpeg2_width, mb, i, j, sxb,
12032 syb, 0, &iminr, &jminr, &imin8ur, &jmin8ur, &imin8lr, &jmin8lr,
12033 &dmcfieldr, &dmc8r, &selr, &sel8ur, &sel8lr, &imins, &jmins, &ds );
12034
12035 /* calculate distances for bidirectional prediction */
12036 /* field */
12037 dmcfieldi =
12038 mpeg2_bdist1(
12039 oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 )
12040 + w2 * ( jminf >> 1 ),
12041 newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 )
12042 + w2 * ( jminr >> 1 ),
12043 mb, w2, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
12044
12045 /* 16x8 upper half block */
12046 dmc8i =
12047 mpeg2_bdist1(
12048 oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 )
12049 + w2 * ( jmin8uf >> 1 ),
12050 newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 )
12051 + w2 * ( jmin8ur >> 1 ),
12052 mb, w2, imin8uf & 1, jmin8uf & 1, imin8ur & 1, jmin8ur & 1, 8 );
12053
12054 /* 16x8 lower half block */
12055 dmc8i +=
12056 mpeg2_bdist1(
12057 oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 )
12058 + w2 * ( jmin8lf >> 1 ),
12059 newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 )
12060 + w2 * ( jmin8lr >> 1 ),
12061 mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, imin8lr & 1, jmin8lr & 1,
12062 8 );
12063
12064 /* select prediction type of minimum distance */
12065 if ( ( dmcfieldi < dmc8i ) && ( dmcfieldi < dmcfieldf ) &&
12066 ( dmcfieldi < dmc8f ) && ( dmcfieldi < dmcfieldr ) &&
12067 ( dmcfieldi < dmc8r ) ) {
12068 /* field, interpolated */
12069 mbi->mb_type = 8 | 5;
12070 mbi->motion_type = 1;
12071 vmc =
12072 mpeg2_bdist2(
12073 oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 )
12074 + w2 * ( jminf >> 1 ),
12075 newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 )
12076 + w2 * ( jminr >> 1 ),
12077 mb, w2, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
12078 } else
12079
12080 if ( ( dmc8i < dmcfieldf ) && ( dmc8i < dmc8f ) && ( dmc8i < dmcfieldr ) &&
12081 ( dmc8i < dmc8r ) ) {
12082 /* 16x8, interpolated */
12083 mbi->mb_type = 8 | 4;
12084 mbi->motion_type = 2;
12085
12086 /* upper half block */
12087 vmc =
12088 mpeg2_bdist2(
12089 oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 )
12090 + w2 * ( jmin8uf >> 1 ),
12091 newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 )
12092 + w2 * ( jmin8ur >> 1 ),
12093 mb, w2, imin8uf & 1, jmin8uf & 1, imin8ur & 1, jmin8ur & 1, 8 );
12094
12095 /* lower half block */
12096 vmc +=
12097 mpeg2_bdist2(
12098 oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 )
12099 + w2 * ( jmin8lf >> 1 ),
12100 newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 )
12101 + w2 * ( jmin8lr >> 1 ),
12102 mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, imin8lr & 1, jmin8lr & 1,
12103 8 );
12104 } else
12105
12106 if ( ( dmcfieldf < dmc8f ) && ( dmcfieldf < dmcfieldr ) &&
12107 ( dmcfieldf < dmc8r ) ) {
12108 /* field, forward */
12109 mbi->mb_type = 8;
12110 mbi->motion_type = 1;
12111 vmc =
12112 mpeg2_dist2(
12113 oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 )
12114 + w2 * ( jminf >> 1 ),
12115 mb, w2, iminf & 1, jminf & 1, 16 );
12116 } else
12117
12118 if ( ( dmc8f < dmcfieldr ) && ( dmc8f < dmc8r ) ) {
12119 /* 16x8, forward */
12120 mbi->mb_type = 8;
12121 mbi->motion_type = 2;
12122
12123 /* upper half block */
12124 vmc =
12125 mpeg2_dist2(
12126 oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 )
12127 + w2 * ( jmin8uf >> 1 ), mb, w2, imin8uf & 1, jmin8uf & 1, 8 );
12128
12129 /* lower half block */
12130 vmc +=
12131 mpeg2_dist2(
12132 oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 )
12133 + w2 * ( jmin8lf >> 1 ),
12134 mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, 8 );
12135 } else
12136
12137 if ( dmcfieldr < dmc8r ) {
12138 /* field, backward */
12139 mbi->mb_type = 4;
12140 mbi->motion_type = 1;
12141 vmc =
12142 mpeg2_dist2(
12143 newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 )
12144 + w2 * ( jminr >> 1 ),
12145 mb, w2, iminr & 1, jminr & 1, 16 );
12146 } else {
12147 /* 16x8, backward */
12148 mbi->mb_type = 4;
12149 mbi->motion_type = 2;
12150
12151 /* upper half block */
12152 vmc =
12153 mpeg2_dist2(
12154 newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 )
12155 + w2 * ( jmin8ur >> 1 ),
12156 mb, w2, imin8ur & 1, jmin8ur & 1, 8 );
12157
12158 /* lower half block */
12159 vmc +=
12160 mpeg2_dist2(
12161 newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 )
12162 + w2 * ( jmin8lr >> 1 ),
12163 mb + 8 * w2, w2, imin8lr & 1, jmin8lr & 1, 8 );
12164 }
12165
12166 /* select between intra and non-intra coding */
12167 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
12168 mbi->mb_type = 1;
12169 else {
12170 var = vmc;
12171
12172 if ( mbi->motion_type == 1 ) {
12173 /* forward */
12174 mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 );
12175 mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 );
12176 mbi->mv_field_sel[ 0 ][ 0 ] = self;
12177 /* backward */
12178 mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 );
12179 mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 );
12180 mbi->mv_field_sel[ 0 ][ 1 ] = selr;
12181 } else { /* MC_16X8 */
12182 /* forward */
12183 mbi->MV[ 0 ][ 0 ][ 0 ] = imin8uf - ( i << 1 );
12184 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8uf - ( j << 1 );
12185 mbi->mv_field_sel[ 0 ][ 0 ] = sel8uf;
12186 mbi->MV[ 1 ][ 0 ][ 0 ] = imin8lf - ( i << 1 );
12187 mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8lf - ( ( j + 8 ) << 1 );
12188 mbi->mv_field_sel[ 1 ][ 0 ] = sel8lf;
12189 /* backward */
12190 mbi->MV[ 0 ][ 1 ][ 0 ] = imin8ur - ( i << 1 );
12191 mbi->MV[ 0 ][ 1 ][ 1 ] = jmin8ur - ( j << 1 );
12192 mbi->mv_field_sel[ 0 ][ 1 ] = sel8ur;
12193 mbi->MV[ 1 ][ 1 ][ 0 ] = imin8lr - ( i << 1 );
12194 mbi->MV[ 1 ][ 1 ][ 1 ] = jmin8lr - ( ( j + 8 ) << 1 );
12195 mbi->mv_field_sel[ 1 ][ 1 ] = sel8lr;
12196 }
12197 }
12198 }
12199
12200 mbi->var = var;
12201}
12202
12203
12204/*
12205 frame picture motion estimation
12206
12207 org: top left pel of source reference frame
12208 ref: top left pel of reconstructed reference frame
12209 mb: macroblock to be matched
12210 i,j: location of mb relative to ref (=center of search window)
12211 sx,sy: half widths of search window
12212 iminp,jminp,dframep: location and value of best frame prediction
12213 imintp,jmintp,tselp: location of best field pred. for top field of mb
12214 iminbp,jminbp,bselp: location of best field pred. for bottom field of mb
12215 dfieldp: value of field prediction
12216*/
12217void mpeg2_frame_estimate( unsigned char *org, unsigned char *ref,
12218 unsigned char *mb, int i, int j, int sx, int sy,
12219 int *iminp, int *jminp, int *imintp, int *jmintp,
12220 int *iminbp, int *jminbp, int *dframep, int *dfieldp,
12221 int *tselp, int *bselp, int imins[ 2 ][ 2 ],
12222 int jmins[ 2 ][ 2 ] )
12223{
12224 int dt, db, dmint, dminb;
12225 int imint, iminb, jmint, jminb;
12226
12227
12228 /* frame prediction */
12229 *dframep =
12230 mpeg2_fullsearch(
12231 org, ref, mb, mpeg2_width, i, j, sx, sy, 16, mpeg2_width, mpeg2_height,
12232 iminp, jminp );
12233
12234 /* predict top field from top field */
12235 dt =
12236 mpeg2_fullsearch(
12237 org, ref, mb, mpeg2_width << 1, i, j>>1, sx, sy >> 1, 8, mpeg2_width,
12238 mpeg2_height >> 1, &imint, &jmint );
12239
12240 /* predict top field from bottom field */
12241 db =
12242 mpeg2_fullsearch(
12243 org + mpeg2_width, ref + mpeg2_width, mb, mpeg2_width << 1, i, j>>1, sx,
12244 sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &iminb, &jminb );
12245
12246 imins[ 0 ][ 0 ] = imint;
12247 jmins[ 0 ][ 0 ] = jmint;
12248 imins[ 1 ][ 0 ] = iminb;
12249 jmins[ 1 ][ 0 ] = jminb;
12250
12251 /* select prediction for top field */
12252 if ( dt <= db ) {
12253 dmint = dt;
12254 *imintp = imint;
12255 *jmintp = jmint;
12256 *tselp = 0;
12257 } else {
12258 dmint = db;
12259 *imintp = iminb;
12260 *jmintp = jminb;
12261 *tselp = 1;
12262 }
12263
12264 /* predict bottom field from top field */
12265 dt =
12266 mpeg2_fullsearch(
12267 org, ref, mb + mpeg2_width, mpeg2_width << 1, i, j>>1, sx, sy >> 1, 8,
12268 mpeg2_width, mpeg2_height >> 1, &imint, &jmint );
12269
12270 /* predict bottom field from bottom field */
12271 db =
12272 mpeg2_fullsearch(
12273 org + mpeg2_width, ref + mpeg2_width, mb + mpeg2_width, mpeg2_width << 1,
12274 i, j>>1, sx, sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &iminb, &jminb );
12275
12276 imins[ 0 ][ 1 ] = imint;
12277 jmins[ 0 ][ 1 ] = jmint;
12278 imins[ 1 ][ 1 ] = iminb;
12279 jmins[ 1 ][ 1 ] = jminb;
12280
12281 /* select prediction for bottom field */
12282 if ( db <= dt ) {
12283 dminb = db;
12284 *iminbp = iminb;
12285 *jminbp = jminb;
12286 *bselp = 1;
12287 } else {
12288 dminb = dt;
12289 *iminbp = imint;
12290 *jminbp = jmint;
12291 *bselp = 0;
12292 }
12293
12294 *dfieldp = dmint + dminb;
12295}
12296
12297
12298/*
12299 field picture motion estimation subroutine
12300
12301 toporg: address of original top reference field
12302 topref: address of reconstructed top reference field
12303 botorg: address of original bottom reference field
12304 botref: address of reconstructed bottom reference field
12305 mb: macroblock to be matched
12306 i,j: location of mb (=center of search window)
12307 sx,sy: half width/height of search window
12308
12309 iminp,jminp,selp,dfieldp: location and distance of best field prediction
12310 imin8up,jmin8up,sel8up: location of best 16x8 pred. for upper half of mb
12311 imin8lp,jmin8lp,sel8lp: location of best 16x8 pred. for lower half of mb
12312 d8p: distance of best 16x8 prediction
12313 iminsp,jminsp,dsp: location and distance of best same parity field
12314 prediction (needed for dual prime, only valid if
12315 ipflag==0)
12316*/
12317void mpeg2_field_estimate( unsigned char *toporg, unsigned char *topref,
12318 unsigned char *botorg, unsigned char *botref,
12319 unsigned char *mb, int i, int j, int sx, int sy,
12320 int ipflag, int *iminp, int *jminp, int *imin8up,
12321 int *jmin8up, int *imin8lp, int *jmin8lp,
12322 int *dfieldp, int *d8p, int *selp, int *sel8up,
12323 int *sel8lp, int *iminsp, int *jminsp, int *dsp )
12324{
12325 int dt, db, imint, jmint, iminb, jminb, notop, nobot;
12326
12327
12328 /* if ipflag is set, predict from field of opposite parity only */
12329 notop = ipflag && ( mpeg2_pict_struct == 1 );
12330 nobot = ipflag && ( mpeg2_pict_struct == 2 );
12331
12332 /* field prediction */
12333
12334 /* predict current field from top field */
12335 if ( notop )
12336 dt = 65536; /* infinity */
12337 else
12338 dt =
12339 mpeg2_fullsearch(
12340 toporg, topref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 16, mpeg2_width,
12341 mpeg2_height >> 1, &imint, &jmint );
12342
12343 /* predict current field from bottom field */
12344 if ( nobot )
12345 db = 65536; /* infinity */
12346 else
12347 db =
12348 mpeg2_fullsearch(
12349 botorg, botref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 16, mpeg2_width,
12350 mpeg2_height >> 1, &iminb, &jminb );
12351
12352 /* same parity prediction (only valid if ipflag==0) */
12353 if ( mpeg2_pict_struct == 1 ) {
12354 *iminsp = imint;
12355 *jminsp = jmint;
12356 *dsp = dt;
12357 } else {
12358 *iminsp = iminb;
12359 *jminsp = jminb;
12360 *dsp = db;
12361 }
12362
12363 /* select field prediction */
12364 if ( dt <= db ) {
12365 *dfieldp = dt;
12366 *iminp = imint;
12367 *jminp = jmint;
12368 *selp = 0;
12369 } else {
12370 *dfieldp = db;
12371 *iminp = iminb;
12372 *jminp = jminb;
12373 *selp = 1;
12374 }
12375
12376
12377 /* 16x8 motion compensation */
12378
12379 /* predict upper half field from top field */
12380 if ( notop )
12381 dt = 65536;
12382 else
12383 dt =
12384 mpeg2_fullsearch(
12385 toporg, topref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 8, mpeg2_width,
12386 mpeg2_height >> 1, &imint, &jmint );
12387
12388 /* predict upper half field from bottom field */
12389 if ( nobot )
12390 db = 65536;
12391 else
12392 db =
12393 mpeg2_fullsearch(
12394 botorg, botref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 8, mpeg2_width,
12395 mpeg2_height >> 1, &iminb, &jminb );
12396
12397 /* select prediction for upper half field */
12398 if ( dt <= db ) {
12399 *d8p = dt;
12400 *imin8up = imint;
12401 *jmin8up = jmint;
12402 *sel8up = 0;
12403 } else {
12404 *d8p = db;
12405 *imin8up = iminb;
12406 *jmin8up = jminb;
12407 *sel8up = 1;
12408 }
12409
12410 /* predict lower half field from top field */
12411 if ( notop )
12412 dt = 65536;
12413 else
12414 dt =
12415 mpeg2_fullsearch(
12416 toporg, topref, mb + ( mpeg2_width << 4 ), mpeg2_width << 1, i, j + 8,
12417 sx, sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &imint, &jmint );
12418
12419 /* predict lower half field from bottom field */
12420 if ( nobot )
12421 db = 65536;
12422 else
12423 db =
12424 mpeg2_fullsearch(
12425 botorg, botref, mb + ( mpeg2_width << 4 ), mpeg2_width << 1, i, j + 8,
12426 sx, sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &iminb, &jminb );
12427
12428 /* select prediction for lower half field */
12429 if ( dt <= db ) {
12430 *d8p += dt;
12431 *imin8lp = imint;
12432 *jmin8lp = jmint;
12433 *sel8lp = 0;
12434 } else {
12435 *d8p += db;
12436 *imin8lp = iminb;
12437 *jmin8lp = jminb;
12438 *sel8lp = 1;
12439 }
12440}
12441
12442
12443void mpeg2_dpframe_estimate( unsigned char *ref, unsigned char *mb, int i,
12444 int j, int iminf[ 2 ][ 2 ], int jminf[ 2 ][ 2 ],
12445 int *iminp, int *jminp, int *imindmvp,
12446 int *jmindmvp, int *dmcp, int *vmcp )
12447{
12448 int pref, ppred, delta_x, delta_y;
12449 int is, js, it, jt, ib, jb, it0, jt0, ib0, jb0;
12450 int imins, jmins, imint, jmint, iminb, jminb, imindmv, jmindmv;
12451 int vmc, local_dist;
12452
12453
12454 /*
12455 Calculate Dual Prime distortions for 9 delta candidates
12456 for each of the four minimum field vectors
12457 Note: only for P pictures!
12458 */
12459
12460 /* initialize minimum dual prime distortion to large value */
12461 vmc = 1 << 30;
12462
12463 _Pragma( "loopbound min 2 max 2" )
12464 for ( pref = 0; pref < 2; pref++ ) {
12465 ppred = 0;
12466 _Pragma( "loopbound min 2 max 2" )
12467 for ( ; ppred < 2; ppred++ ) {
12468 /*
12469 convert Cartesian absolute to relative motion vector
12470 values (wrt current macroblock address (i,j)
12471 */
12472 is = iminf[ pref ][ ppred ] - ( i << 1 );
12473 js = jminf[ pref ][ ppred ] - ( j << 1 );
12474
12475 if ( pref != ppred ) {
12476 /* vertical field shift adjustment */
12477 if ( ppred == 0 )
12478 js++;
12479 else
12480 js--;
12481
12482 /* mvxs and mvys scaling*/
12483 is <<= 1;
12484 js <<= 1;
12485 if ( mpeg2_topfirst == ppred ) {
12486 /* second field: scale by 1/3 */
12487 is = ( is >= 0 ) ? ( is + 1 ) / 3 : -( ( -is + 1 ) / 3 );
12488 js = ( js >= 0 ) ? ( js + 1 ) / 3 : -( ( -js + 1 ) / 3 );
12489 } else
12490 continue;
12491 }
12492
12493 /* vector for prediction from field of opposite 'parity' */
12494 if ( mpeg2_topfirst ) {
12495 /* vector for prediction of top field from bottom field */
12496 it0 = ( ( is + ( is > 0 ) ) >> 1 );
12497 jt0 = ( ( js + ( js > 0 ) ) >> 1 ) - 1;
12498
12499 /* vector for prediction of bottom field from top field */
12500 ib0 = ( ( 3 * is + ( is > 0 ) ) >> 1 );
12501 jb0 = ( ( 3 * js + ( js > 0 ) ) >> 1 ) + 1;
12502 } else {
12503 /* vector for prediction of top field from bottom field */
12504 it0 = ( ( 3 * is + ( is > 0 ) ) >> 1 );
12505 jt0 = ( ( 3 * js + ( js > 0 ) ) >> 1 ) - 1;
12506
12507 /* vector for prediction of bottom field from top field */
12508 ib0 = ( ( is + ( is > 0 ) ) >> 1 );
12509 jb0 = ( ( js + ( js > 0 ) ) >> 1 ) + 1;
12510 }
12511
12512 /* convert back to absolute half-pel field picture coordinates */
12513 is += i << 1;
12514 js += j << 1;
12515 it0 += i << 1;
12516 jt0 += j << 1;
12517 ib0 += i << 1;
12518 jb0 += j << 1;
12519
12520 if ( ( is >= 0 ) && ( is <= ( mpeg2_width - 16 ) << 1 ) &&
12521 ( js >= 0 ) && ( js <= ( mpeg2_height - 16 ) ) ) {
12522 _Pragma( "loopbound min 3 max 3" )
12523 for ( delta_y = -1; delta_y <= 1; delta_y++ ) {
12524 delta_x = -1;
12525 _Pragma( "loopbound min 3 max 3" )
12526 for ( ; delta_x <= 1; delta_x++ ) {
12527 /* opposite field coordinates */
12528 it = it0 + delta_x;
12529 jt = jt0 + delta_y;
12530 ib = ib0 + delta_x;
12531 jb = jb0 + delta_y;
12532
12533 if ( ( it >= 0 ) && ( it <= ( mpeg2_width - 16 ) << 1 ) &&
12534 ( jt >= 0 ) && ( jt <= ( mpeg2_height - 16 ) ) &&
12535 ( ib >= 0 ) && ( ib <= ( mpeg2_width - 16 ) << 1 ) &&
12536 ( jb >= 0 ) && ( jb <= ( mpeg2_height - 16 ) ) ) {
12537 /* compute prediction error */
12538 local_dist =
12539 mpeg2_bdist2(
12540 ref + ( is >> 1 ) + ( mpeg2_width << 1 ) * ( js >> 1 ),
12541 ref + mpeg2_width + ( it >> 1 )
12542 + ( mpeg2_width << 1 ) * ( jt >> 1 ),
12543 mb, /* current mb location */
12544 mpeg2_width << 1, /* adjacent line distance */
12545 is & 1, js & 1, it & 1, jt & 1, /* half-pel flags */
12546 8 ); /* block height */
12547 local_dist +=
12548 mpeg2_bdist2(
12549 ref + mpeg2_width + ( is >> 1 )
12550 + ( mpeg2_width << 1 ) * ( js >> 1 ),
12551 ref + ( ib >> 1 ) + ( mpeg2_width << 1 ) * ( jb >> 1 ),
12552 mb + mpeg2_width, /* current mb location */
12553 mpeg2_width << 1, /* adjacent line distance */
12554 is & 1, js & 1, ib & 1, jb & 1, /* half-pel flags */
12555 8 ); /* block height */
12556
12557 /* update delta with least distortion vector */
12558 if ( local_dist < vmc ) {
12559 imins = is;
12560 jmins = js;
12561 imint = it;
12562 jmint = jt;
12563 iminb = ib;
12564 jminb = jb;
12565 imindmv = delta_x;
12566 jmindmv = delta_y;
12567 vmc = local_dist;
12568 }
12569 }
12570 } /* end delta x loop */
12571 } /* end delta y loop */
12572 }
12573 }
12574 }
12575
12576 /* Compute L1 error for decision purposes */
12577 local_dist =
12578 mpeg2_bdist1(
12579 ref + ( imins >> 1 ) + ( mpeg2_width << 1 ) * ( jmins >> 1 ),
12580 ref + mpeg2_width + ( imint >> 1 )
12581 + ( mpeg2_width << 1 ) * ( jmint >> 1 ),
12582 mb, mpeg2_width << 1, imins & 1, jmins & 1, imint & 1, jmint & 1, 8 );
12583 local_dist +=
12584 mpeg2_bdist1(
12585 ref + mpeg2_width + ( imins >> 1 )
12586 + ( mpeg2_width << 1 ) * ( jmins >> 1 ),
12587 ref + ( iminb >> 1 ) + ( mpeg2_width << 1 ) * ( jminb >> 1 ),
12588 mb + mpeg2_width, mpeg2_width << 1, imins & 1, jmins & 1, iminb & 1,
12589 jminb & 1, 8 );
12590
12591 *dmcp = local_dist;
12592 *iminp = imins;
12593 *jminp = jmins;
12594 *imindmvp = imindmv;
12595 *jmindmvp = jmindmv;
12596 *vmcp = vmc;
12597}
12598
12599
12600void mpeg2_dpfield_estimate( unsigned char *topref, unsigned char *botref,
12601 unsigned char *mb, int i, int j, int imins,
12602 int jmins, int *imindmvp, int *jmindmvp, int *dmcp,
12603 int *vmcp )
12604{
12605 unsigned char *sameref, *oppref;
12606 int io0, jo0, io, jo, delta_x, delta_y, mvxs, mvys, mvxo0, mvyo0;
12607 int imino, jmino, imindmv, jmindmv, vmc_dp, local_dist;
12608
12609
12610 /* Calculate Dual Prime distortions for 9 delta candidates */
12611 /* Note: only for P pictures! */
12612
12613 /* Assign opposite and same reference pointer */
12614 if ( mpeg2_pict_struct == 1 ) {
12615 sameref = topref;
12616 oppref = botref;
12617 } else {
12618 sameref = botref;
12619 oppref = topref;
12620 }
12621
12622 /*
12623 convert Cartesian absolute to relative motion vector
12624 values (wrt current macroblock address (i,j)
12625 */
12626 mvxs = imins - ( i << 1 );
12627 mvys = jmins - ( j << 1 );
12628
12629 /* vector for prediction from field of opposite 'parity' */
12630 mvxo0 = ( mvxs + ( mvxs > 0 ) ) >> 1; /* mvxs // 2 */
12631 mvyo0 = ( mvys + ( mvys > 0 ) ) >> 1; /* mvys // 2 */
12632
12633 /* vertical field shift correction */
12634 if ( mpeg2_pict_struct == 1 )
12635 mvyo0--;
12636 else
12637 mvyo0++;
12638
12639 /* convert back to absolute coordinates */
12640 io0 = mvxo0 + ( i << 1 );
12641 jo0 = mvyo0 + ( j << 1 );
12642
12643 /* initialize minimum dual prime distortion to large value */
12644 vmc_dp = 1 << 30;
12645
12646 _Pragma( "loopbound min 3 max 3" )
12647 for ( delta_y = -1; delta_y <= 1; delta_y++ ) {
12648 delta_x = -1;
12649 _Pragma( "loopbound min 3 max 3" )
12650 for ( ; delta_x <= 1; delta_x++ ) {
12651 /* opposite field coordinates */
12652 io = io0 + delta_x;
12653 jo = jo0 + delta_y;
12654
12655 if ( ( io >= 0 ) && ( io <= ( mpeg2_width - 16 ) << 1 ) &&
12656 ( jo >= 0 ) && ( jo <= ( mpeg2_height2 - 16 ) << 1 ) ) {
12657 /* compute prediction error */
12658 local_dist =
12659 mpeg2_bdist2(
12660 sameref + ( imins >> 1 ) + mpeg2_width2 * ( jmins >> 1 ),
12661 oppref + ( io >> 1 ) + mpeg2_width2 * ( jo >> 1 ),
12662 mb, /* current mb location */
12663 mpeg2_width2, /* adjacent line distance */
12664 imins & 1, jmins & 1, io & 1, jo & 1, /* half-pel flags */
12665 16 ); /* block height */
12666
12667 /* update delta with least distortion vector */
12668 if ( local_dist < vmc_dp ) {
12669 imino = io;
12670 jmino = jo;
12671 imindmv = delta_x;
12672 jmindmv = delta_y;
12673 vmc_dp = local_dist;
12674 }
12675 }
12676 } /* end delta x loop */
12677 } /* end delta y loop */
12678
12679 /* Compute L1 error for decision purposes */
12680 *dmcp =
12681 mpeg2_bdist1(
12682 sameref + ( imins >> 1 ) + mpeg2_width2 * ( jmins >> 1 ),
12683 oppref + ( imino >> 1 ) + mpeg2_width2 * ( jmino >> 1 ),
12684 mb, /* current mb location */
12685 mpeg2_width2, /* adjacent line distance */
12686 imins & 1, jmins & 1, imino & 1, jmino & 1, /* half-pel flags */
12687 16 ); /* block height */
12688
12689 *imindmvp = imindmv;
12690 *jmindmvp = jmindmv;
12691 *vmcp = vmc_dp;
12692}
12693
12694
12695/*
12696 full search block matching
12697
12698 blk: top left pel of (16*h) block
12699 h: height of block
12700 lx: distance (in bytes) of vertically adjacent pels in ref,blk
12701 org: top left pel of source reference picture
12702 ref: top left pel of reconstructed reference picture
12703 i0,j0: center of search window
12704 sx,sy: half widths of search window
12705 xmax,ymax: right/bottom limits of search area
12706 iminp,jminp: pointers to where the result is stored
12707 result is given as half pel offset from ref(0,0)
12708 i.e. NOT relative to (i0,j0)
12709*/
12710int mpeg2_fullsearch( unsigned char *org, unsigned char *ref,
12711 unsigned char *blk, int lx, int i0, int j0, int sx,
12712 int sy, int h, int xmax, int ymax, int *iminp,
12713 int *jminp )
12714{
12715 int i, j, imin, jmin, ilow, ihigh, jlow, jhigh;
12716 int d, dmin;
12717 int k, l, sxy;
12718
12719
12720 ilow = i0 - sx;
12721 ihigh = i0 + sx;
12722
12723 if ( ilow < 0 )
12724 ilow = 0;
12725
12726 if ( ihigh > xmax - 16 )
12727 ihigh = xmax - 16;
12728
12729 jlow = j0 - sy;
12730 jhigh = j0 + sy;
12731
12732 if ( jlow < 0 )
12733 jlow = 0;
12734
12735 if ( jhigh > ymax - h )
12736 jhigh = ymax - h;
12737
12738 /* full pel search, spiraling outwards */
12739
12740 imin = i0;
12741 jmin = j0;
12742 dmin = mpeg2_dist1( org + imin + lx * jmin, blk, lx, 0, 0, h, 65536 );
12743
12744 sxy = ( sx > sy ) ? sx : sy;
12745
12746 _Pragma( "loopbound min 3 max 7" )
12747 for ( l = 1; l <= sxy; l++ ) {
12748 i = i0 - l;
12749 j = j0 - l;
12750 _Pragma( "loopbound min 8 max 56" )
12751 for ( k = 0; k < 8 * l; k++ ) {
12752 if ( ( i >= ilow ) && ( i <= ihigh ) && ( j >= jlow ) &&
12753 ( j <= jhigh ) ) {
12754 d = mpeg2_dist1( org + i + lx * j, blk, lx, 0, 0, h, dmin );
12755
12756 if ( d < dmin ) {
12757 dmin = d;
12758 imin = i;
12759 jmin = j;
12760 }
12761 }
12762
12763 if ( k < 2 * l )
12764 i++;
12765 else
12766
12767 if ( k < 4 * l )
12768 j++;
12769 else
12770
12771 if ( k < 6 * l )
12772 i--;
12773 else
12774 j--;
12775 }
12776 }
12777
12778 /* half pel */
12779 dmin = 65536;
12780 imin <<= 1;
12781 jmin <<= 1;
12782 ilow = imin - ( imin > 0 );
12783 ihigh = imin + ( imin < ( ( xmax - 16 ) << 1 ) );
12784 jlow = jmin - ( jmin > 0 );
12785 jhigh = jmin + ( jmin < ( ( ymax - h ) << 1 ) );
12786
12787 _Pragma( "loopbound min 2 max 3" )
12788 for ( j = jlow; j <= jhigh; j++ ) {
12789 i = ilow;
12790 _Pragma( "loopbound min 2 max 3" )
12791 for ( ; i <= ihigh; i++ ) {
12792 d =
12793 mpeg2_dist1(
12794 ref + ( i >> 1 ) + lx * ( j >> 1 ), blk, lx, i & 1, j & 1, h, dmin );
12795
12796 if ( d < dmin ) {
12797 dmin = d;
12798 imin = i;
12799 jmin = j;
12800 }
12801 }
12802 }
12803
12804 *iminp = imin;
12805 *jminp = jmin;
12806
12807 return( dmin );
12808}
12809
12810
12811/*
12812 total absolute difference between two (16*h) blocks
12813 including optional half pel interpolation of blk1 (hx,hy)
12814 blk1,blk2: addresses of top left pels of both blocks
12815 lx: distance (in bytes) of vertically adjacent pels
12816 hx,hy: flags for horizontal and/or vertical interpolation
12817 h: height of block (usually 8 or 16)
12818 distlim: bail out if sum exceeds this value
12819*/
12820int mpeg2_dist1( unsigned char *blk1, unsigned char *blk2, int lx, int hx,
12821 int hy, int h, int distlim )
12822{
12823 unsigned char *p1, *p1a, *p2;
12824 int i, j;
12825 int s, v;
12826
12827
12828 s = 0;
12829 p1 = blk1;
12830 p2 = blk2;
12831
12832 if ( !hx && !hy ) {
12833 _Pragma( "loopbound min 1 max 16" )
12834 for ( j = 0; j < h; j++ ) {
12835 if ( ( v = p1[ 0 ] - p2[ 0 ] ) < 0 )
12836 v = -v;
12837 s += v;
12838
12839 if ( ( v = p1[ 1 ] - p2[ 1 ] ) < 0 )
12840 v = -v;
12841 s += v;
12842
12843 if ( ( v = p1[ 2 ] - p2[ 2 ] ) < 0 )
12844 v = -v;
12845 s += v;
12846
12847 if ( ( v = p1[ 3 ] - p2[ 3 ] ) < 0 )
12848 v = -v;
12849 s += v;
12850
12851 if ( ( v = p1[ 4 ] - p2[ 4 ] ) < 0 )
12852 v = -v;
12853 s += v;
12854
12855 if ( ( v = p1[ 5 ] - p2[ 5 ] ) < 0 )
12856 v = -v;
12857 s += v;
12858
12859 if ( ( v = p1[ 6 ] - p2[ 6 ] ) < 0 )
12860 v = -v;
12861 s += v;
12862
12863 if ( ( v = p1[ 7 ] - p2[ 7 ] ) < 0 )
12864 v = -v;
12865 s += v;
12866
12867 if ( ( v = p1[ 8 ] - p2[ 8 ] ) < 0 )
12868 v = -v;
12869 s += v;
12870
12871 if ( ( v = p1[ 9 ] - p2[ 9 ] ) < 0 )
12872 v = -v;
12873 s += v;
12874
12875 if ( ( v = p1[ 10 ] - p2[ 10 ] ) < 0 )
12876 v = -v;
12877 s += v;
12878
12879 if ( ( v = p1[ 11 ] - p2[ 11 ] ) < 0 )
12880 v = -v;
12881 s += v;
12882
12883 if ( ( v = p1[ 12 ] - p2[ 12 ] ) < 0 )
12884 v = -v;
12885 s += v;
12886
12887 if ( ( v = p1[ 13 ] - p2[ 13 ] ) < 0 )
12888 v = -v;
12889 s += v;
12890
12891 if ( ( v = p1[ 14 ] - p2[ 14 ] ) < 0 )
12892 v = -v;
12893 s += v;
12894
12895 if ( ( v = p1[ 15 ] - p2[ 15 ] ) < 0 )
12896 v = -v;
12897 s += v;
12898
12899 if ( s >= distlim )
12900 break;
12901
12902 p1 += lx;
12903 p2 += lx;
12904 }
12905 } else
12906
12907 if ( hx && !hy ) {
12908 _Pragma( "loopbound min 8 max 16" )
12909 for ( j = 0; j < h; j++ ) {
12910 i = 0;
12911 _Pragma( "loopbound min 16 max 16" )
12912 for ( ; i < 16; i++ ) {
12913 v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ];
12914 if ( v >= 0 )
12915 s += v;
12916 else
12917 s -= v;
12918 }
12919 p1 += lx;
12920 p2 += lx;
12921 }
12922 } else
12923
12924 if ( !hx && hy ) {
12925 p1a = p1 + lx;
12926 _Pragma( "loopbound min 8 max 16" )
12927 for ( j = 0; j < h; j++ ) {
12928 i = 0;
12929 _Pragma( "loopbound min 16 max 16" )
12930 for ( ; i < 16; i++ ) {
12931 v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ];
12932 if ( v >= 0 )
12933 s += v;
12934 else
12935 s -= v;
12936 }
12937 p1 = p1a;
12938 p1a += lx;
12939 p2 += lx;
12940 }
12941 } else { /* if (hx && hy) */
12942 p1a = p1 + lx;
12943 _Pragma( "loopbound min 8 max 16" )
12944 for ( j = 0; j < h; j++ ) {
12945 i = 0;
12946 _Pragma( "loopbound min 16 max 16" )
12947 for ( ; i < 16; i++ ) {
12948 v =
12949 ( ( unsigned int )
12950 ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) -
12951 p2[ i ];
12952 if ( v >= 0 )
12953 s += v;
12954 else
12955 s -= v;
12956 }
12957 p1 = p1a;
12958 p1a += lx;
12959 p2 += lx;
12960 }
12961 }
12962
12963 return( s );
12964}
12965
12966
12967/*
12968 total squared difference between two (16*h) blocks
12969 including optional half pel interpolation of blk1 (hx,hy)
12970 blk1,blk2: addresses of top left pels of both blocks
12971 lx: distance (in bytes) of vertically adjacent pels
12972 hx,hy: flags for horizontal and/or vertical interpolation
12973 h: height of block (usually 8 or 16)
12974*/
12975int mpeg2_dist2( unsigned char *blk1, unsigned char *blk2, int lx, int hx,
12976 int hy, int h )
12977{
12978 unsigned char *p1, *p1a, *p2;
12979 int i, j;
12980 int s, v;
12981
12982
12983 s = 0;
12984 p1 = blk1;
12985 p2 = blk2;
12986
12987 if ( !hx && !hy ) {
12988 _Pragma( "loopbound min 8 max 16" )
12989 for ( j = 0; j < h; j++ ) {
12990 i = 0;
12991 _Pragma( "loopbound min 16 max 16" )
12992 for ( ; i < 16; i++ ) {
12993 v = p1[ i ] - p2[ i ];
12994 s += v * v;
12995 }
12996 p1 += lx;
12997 p2 += lx;
12998 }
12999 } else
13000
13001 if ( hx && !hy ) {
13002 _Pragma( "loopbound min 8 max 16" )
13003 for ( j = 0; j < h; j++ ) {
13004 i = 0;
13005 _Pragma( "loopbound min 16 max 16" )
13006 for ( ; i < 16; i++ ) {
13007 v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ];
13008 s += v * v;
13009 }
13010 p1 += lx;
13011 p2 += lx;
13012 }
13013 } else
13014
13015 if ( !hx && hy ) {
13016 p1a = p1 + lx;
13017 _Pragma( "loopbound min 8 max 16" )
13018 for ( j = 0; j < h; j++ ) {
13019 i = 0;
13020 _Pragma( "loopbound min 16 max 16" )
13021 for ( ; i < 16; i++ ) {
13022 v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ];
13023 s += v * v;
13024 }
13025 p1 = p1a;
13026 p1a += lx;
13027 p2 += lx;
13028 }
13029 } else { /* if (hx && hy) */
13030 p1a = p1 + lx;
13031 _Pragma( "loopbound min 8 max 16" )
13032 for ( j = 0; j < h; j++ ) {
13033 i = 0;
13034 _Pragma( "loopbound min 16 max 16" )
13035 for ( ; i < 16; i++ ) {
13036 v =
13037 ( ( unsigned int )
13038 ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) -
13039 p2[ i ];
13040 s += v * v;
13041 }
13042 p1 = p1a;
13043 p1a += lx;
13044 p2 += lx;
13045 }
13046 }
13047
13048 return( s );
13049}
13050
13051
13052/*
13053 absolute difference error between a (16*h) block and a bidirectional
13054 prediction
13055
13056 p2: address of top left pel of block
13057 pf,hxf,hyf: address and half pel flags of forward ref. block
13058 pb,hxb,hyb: address and half pel flags of backward ref. block
13059 h: height of block
13060 lx: distance (in bytes) of vertically adjacent pels in p2,pf,pb
13061*/
13062int mpeg2_bdist1( unsigned char *pf, unsigned char *pb, unsigned char *p2,
13063 int lx, int hxf, int hyf, int hxb, int hyb, int h )
13064{
13065 unsigned char *pfa, *pfb, *pfc, *pba, *pbb, *pbc;
13066 int i, j;
13067 int s, v;
13068
13069
13070 pfa = pf + hxf;
13071 pfb = pf + lx * hyf;
13072 pfc = pfb + hxf;
13073
13074 pba = pb + hxb;
13075 pbb = pb + lx * hyb;
13076 pbc = pbb + hxb;
13077
13078 s = 0;
13079
13080 _Pragma( "loopbound min 8 max 16" )
13081 for ( j = 0; j < h; j++ ) {
13082 i = 0;
13083 _Pragma( "loopbound min 16 max 16" )
13084 for ( ; i < 16; i++ ) {
13085 v =
13086 ( ( ( ( unsigned int )( *pf++ + *pfa++ + *pfb++ + *pfc++ + 2 ) >> 2 ) +
13087 ( ( unsigned int )( *pb++ + *pba++ + *pbb++ + *pbc++ + 2 ) >> 2 ) +
13088 1 ) >> 1 ) -
13089 *p2++;
13090 if ( v >= 0 )
13091 s += v;
13092 else
13093 s -= v;
13094 }
13095 p2 += lx - 16;
13096 pf += lx - 16;
13097 pfa += lx - 16;
13098 pfb += lx - 16;
13099 pfc += lx - 16;
13100 pb += lx - 16;
13101 pba += lx - 16;
13102 pbb += lx - 16;
13103 pbc += lx - 16;
13104 }
13105
13106 return( s );
13107}
13108
13109
13110/*
13111 squared error between a (16*h) block and a bidirectional
13112 prediction
13113
13114 p2: address of top left pel of block
13115 pf,hxf,hyf: address and half pel flags of forward ref. block
13116 pb,hxb,hyb: address and half pel flags of backward ref. block
13117 h: height of block
13118 lx: distance (in bytes) of vertically adjacent pels in p2,pf,pb
13119*/
13120int mpeg2_bdist2( unsigned char *pf, unsigned char *pb, unsigned char *p2,
13121 int lx, int hxf, int hyf, int hxb, int hyb, int h )
13122{
13123 unsigned char *pfa, *pfb, *pfc, *pba, *pbb, *pbc;
13124 int i, j;
13125 int s, v;
13126
13127
13128 pfa = pf + hxf;
13129 pfb = pf + lx * hyf;
13130 pfc = pfb + hxf;
13131
13132 pba = pb + hxb;
13133 pbb = pb + lx * hyb;
13134 pbc = pbb + hxb;
13135
13136 s = 0;
13137
13138 _Pragma( "loopbound min 8 max 16" )
13139 for ( j = 0; j < h; j++ ) {
13140 i = 0;
13141 _Pragma( "loopbound min 16 max 16" )
13142 for ( ; i < 16; i++ ) {
13143 v =
13144 ( ( ( ( unsigned int )( *pf++ + *pfa++ + *pfb++ + *pfc++ + 2 ) >> 2 ) +
13145 ( ( unsigned int )( *pb++ + *pba++ + *pbb++ + *pbc++ + 2 ) >> 2 ) +
13146 1 ) >> 1 ) -
13147 *p2++;
13148 s += v * v;
13149 }
13150 p2 += lx - 16;
13151 pf += lx - 16;
13152 pfa += lx - 16;
13153 pfb += lx - 16;
13154 pfc += lx - 16;
13155 pb += lx - 16;
13156 pba += lx - 16;
13157 pbb += lx - 16;
13158 pbc += lx - 16;
13159 }
13160
13161 return( s );
13162}
13163
13164
13165/*
13166 variance of a (16*16) block, multiplied by 256
13167 p: address of top left pel of block
13168 lx: distance (in bytes) of vertically adjacent pels
13169*/
13170int mpeg2_variance( unsigned char *p, int lx )
13171{
13172 int i, j;
13173 unsigned int v, s, s2;
13174
13175
13176 s = s2 = 0;
13177
13178 _Pragma( "loopbound min 16 max 16" )
13179 for ( j = 0; j < 16; j++ ) {
13180 i = 0;
13181 _Pragma( "loopbound min 16 max 16" )
13182 for ( ; i < 16; i++ ) {
13183 v = *p++;
13184 s += v;
13185 s2 += v * v;
13186 }
13187 p += lx - 16;
13188 }
13189
13190 return( s2 - ( s * s ) / 256 );
13191}
13192
13193
13194/*
13195 Main functions
13196*/
13197
13198void _Pragma ( "entrypoint" ) mpeg2_main( void )
13199{
13200 mpeg2_motion_estimation(
13201 mpeg2_oldorgframe, mpeg2_oldorgframe, mpeg2_oldorgframe, mpeg2_oldorgframe,
13202 mpeg2_oldorgframe, mpeg2_oldorgframe, 7, 7, 3, 3, mpeg2_mbinfo, 0, 0 );
13203}
13204
13205
13206int main( int argc, char **argv )
13207{
13208 SET_UP
13209 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
13210 START_LOOP
13211 mpeg2_init();
13212 mpeg2_main();
13213 STOP_LOOP
13214 }
13215 WRITE_TO_FILE
13216
13217 return( mpeg2_return() - (-116) != 0 );
13218}
diff --git a/all_pairs/source/ndes/ChangeLog.txt b/all_pairs/source/ndes/ChangeLog.txt
new file mode 100644
index 0000000..ae9c168
--- /dev/null
+++ b/all_pairs/source/ndes/ChangeLog.txt
@@ -0,0 +1,20 @@
1File: ndes.c
2Original provenience:
3
42017-04-18:
5- Annotated ndes_main as entry-point for timing analysis
6
72015-10-21:
8- Remove comment on line 1
9- Added generic TACLeBench header to line 1
10- Renamed functions to {name} to ndes_{name}
11- Renamed globale variables to {name} to ndes_{name}
12- Renamed structs to {name} to ndes_{name}
13- Removed the profiling code
14- Added forward decleration of functions
15- Added ndes_main function
16- Added ndes_init function
17- Initialize ndes_ipc1 and ndes_ipc2 in ndes_init function
18- int main variables to global variables for the ndes_init function
19- Applied Code Style
20
diff --git a/all_pairs/source/ndes/ndes.c b/all_pairs/source/ndes/ndes.c
new file mode 100644
index 0000000..e56906f
--- /dev/null
+++ b/all_pairs/source/ndes/ndes.c
@@ -0,0 +1,378 @@
1/*
2 This program is part of the TACLeBench benchmark suite.
3 Version V 1.x
4
5 Name: ndes
6
7 Author: unknown
8
9 Function: A lot of bit manipulation, shifts, array and matrix calculations.
10
11 Source:
12
13 Changes: no major functional changes
14
15 License: May be used, modified, and re-distributed freely.
16
17*/
18
19/* A read from this address will result in an known value of 1 */
20#include "../extra.h"
21#define KNOWN_VALUE 1
22#define NDES_WORSTCASE 1
23/*
24 Declaration of global variables
25*/
26
27typedef struct NDES_IMMENSE {
28 unsigned long l, r;
29} ndes_immense;
30typedef struct NDES_GREAT {
31 unsigned long l, c, r;
32} ndes_great;
33
34unsigned long ndes_bit[33];
35ndes_immense ndes_inp, ndes_key, ndes_out;
36int ndes_newkey, ndes_isw;
37
38static ndes_immense ndes_icd;
39static char ndes_ipc1[57];
40static char ndes_ipc2[49];
41
42
43#ifdef NDES_WORSTCASE
44int ndes_value = 1;
45#else
46int ndes_value = 0;
47#endif
48
49/* Forward funtion prototypes */
50
51void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw,
52 ndes_immense *out );
53void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout );
54unsigned long ndes_getbit( ndes_immense source, int bitno, int nbits );
55void ndes_ks( /*immense key, */int n, ndes_great *kn );
56void ndes_init( void );
57int ndes_return( void );
58void ndes_main( void );
59//int main( void );
60
61/*
62 Initialization
63*/
64void ndes_init()
65{
66 unsigned int i;
67 volatile char ndes_ipc1_tmp[57] = {
68 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50,
69 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60,
70 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38,
71 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
72 };
73 volatile char ndes_ipc2_tmp[49] = {
74 0, 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21,
75 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31,
76 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34,
77 53, 46, 42, 50, 36, 29, 32
78 };
79 for ( i = 0; i < 57; i++ )
80 ndes_ipc1[i] = ndes_ipc1_tmp[i];
81 for ( i = 0; i < 49; i++ )
82 ndes_ipc2[i] = ndes_ipc2_tmp[i];
83
84 ndes_inp.l = KNOWN_VALUE * 35;
85 ndes_inp.r = KNOWN_VALUE * 26;
86 ndes_key.l = KNOWN_VALUE * 2;
87 ndes_key.r = KNOWN_VALUE * 16;
88
89 ndes_newkey = ndes_value;
90 ndes_isw = ndes_value;
91}
92/*
93 Arithmetic functions
94*/
95void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw,
96 ndes_immense *out )
97{
98 volatile char ip[65] = {
99 0, 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36,
100 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40,
101 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35,
102 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39,
103 31, 23, 15, 7
104 };
105
106 volatile char ipm[65] = {
107 0, 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15,
108 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13,
109 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11,
110 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9,
111 49, 17, 57, 25
112 };
113 static ndes_great kns[17];
114
115 #ifdef NDES_WORSTCASE
116 static int initflag = 1;
117 #else
118 static int initflag = 0;
119 #endif
120
121 int ii, i, j, k;
122 unsigned long ic, shifter;
123 ndes_immense itmp;
124 ndes_great pg;
125
126 if ( initflag ) {
127 initflag = 0;
128 ndes_bit[1] = shifter = 1L;
129
130 _Pragma( "loopbound min 31 max 31" )
131 for ( j = 2; j <= 32; j++ )
132 ndes_bit[j] = ( shifter <<= 1 );
133 }
134
135 if ( *newkey ) {
136 *newkey = 0;
137 ndes_icd.r = ndes_icd.l = 0L;
138
139 _Pragma( "loopbound min 28 max 28" )
140 for ( j = 28, k = 56; j >= 1; j--, k-- ) {
141 ndes_icd.r = ( ndes_icd.r << 1 ) | ndes_getbit( key, ndes_ipc1[j], 32 );
142 ndes_icd.l = ndes_icd.l << 1;
143 ndes_icd.l = ( ndes_icd.l ) | ndes_getbit( key, ndes_ipc1[k], 32 );
144 }
145
146 _Pragma( "loopbound min 16 max 16" )
147 for ( i = 1; i <= 16; i++ ) {
148 pg = kns[i];
149 ndes_ks( /* key,*/ i, &pg );
150 kns[i] = pg;
151 }
152 }
153
154 itmp.r = itmp.l = 0L;
155
156 _Pragma( "loopbound min 32 max 32" )
157 for ( j = 32, k = 64; j >= 1; j--, k-- ) {
158 itmp.r = itmp.r << 1;
159 itmp.r = ( itmp.r ) | ndes_getbit( inp, ip[j], 32 );
160 itmp.l = itmp.l << 1;
161 itmp.l = ( itmp.l ) | ndes_getbit( inp, ip[k], 32 );
162 }
163 _Pragma( "loopbound min 16 max 16" )
164 for ( i = 1; i <= 16; i++ ) {
165 ii = ( isw == 1 ? 17 - i : i );
166 ndes_cyfun( itmp.l, kns[ii], &ic );
167 ic ^= itmp.r;
168 itmp.r = itmp.l;
169 itmp.l = ic;
170 }
171
172 ic = itmp.r;
173 itmp.r = itmp.l;
174 itmp.l = ic;
175 ( *out ).r = ( *out ).l = 0L;
176
177 _Pragma( "loopbound min 32 max 32" )
178 for ( j = 32, k = 64; j >= 1; j--, k-- ) {
179 ( *out ).r = ( *out ).r << 1;
180 ( *out ).r = ( ( *out ).r ) | ndes_getbit( itmp, ipm[j], 32 );
181 ( *out ).l = ( *out ).l << 1;
182 ( *out ).l = ( ( *out ).l ) | ndes_getbit( itmp, ipm[k], 32 );
183 }
184}
185
186
187void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout )
188{
189 volatile long iet[49] = {0, 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9,
190 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19,
191 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29,
192 28, 29, 30, 31, 32, 1
193 };
194 volatile long ipp[33] = {0, 16, 7, 20, 21, 29, 12, 28, 17, 1, 15,
195 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13,
196 30, 6, 22, 11, 4, 25
197 };
198 volatile long is[16][4][9] = {{{ 0 , 14 , 15 , 10 , 7 , 2 , 12 , 4 , 13 },
199 { 0 , 0 , 3 , 13 , 13 , 14 , 10 , 13 , 1 },
200 { 0 , 4 , 0 , 13 , 10 , 4 , 9 , 1 , 7 },
201 { 0 , 15 , 13 , 1 , 3 , 11 , 4 , 6 , 2 }},
202 {{ 0 , 4 , 1 , 0 , 13 , 12 , 1 , 11 , 2 },
203 { 0 , 15 , 13 , 7 , 8 , 11 , 15 , 0 , 15 },
204 { 0 , 1 , 14 , 6 , 6 , 2 , 14 , 4 , 11 },
205 { 0 , 12 , 8 , 10 , 15 , 8 , 3 , 11 , 1 }},
206 {{ 0 , 13 , 8 , 9 , 14 , 4 , 10 , 2 , 8 },
207 { 0 , 7 , 4 , 0 , 11 , 2 , 4 , 11 , 13 },
208 { 0 , 14 , 7 , 4 , 9 , 1 , 15 , 11 , 4 },
209 { 0 , 8 , 10 , 13 , 0 , 12 , 2 , 13 , 14 }},
210 {{ 0 , 1 , 14 , 14 , 3 , 1 , 15 , 14 , 4 },
211 { 0 , 4 , 7 , 9 , 5 , 12 , 2 , 7 , 8 },
212 { 0 , 8 , 11 , 9 , 0 , 11 , 5 , 13 , 1 },
213 { 0 , 2 , 1 , 0 , 6 , 7 , 12 , 8 , 7 }},
214 {{ 0 , 2 , 6 , 6 , 0 , 7 , 9 , 15 , 6 },
215 { 0 , 14 , 15 , 3 , 6 , 4 , 7 , 4 , 10 },
216 { 0 , 13 , 10 , 8 , 12 , 10 , 2 , 12 , 9 },
217 { 0 , 4 , 3 , 6 , 10 , 1 , 9 , 1 , 4 }},
218 {{ 0 , 15 , 11 , 3 , 6 , 10 , 2 , 0 , 15 },
219 { 0 , 2 , 2 , 4 , 15 , 7 , 12 , 9 , 3 },
220 { 0 , 6 , 4 , 15 , 11 , 13 , 8 , 3 , 12 },
221 { 0 , 9 , 15 , 9 , 1 , 14 , 5 , 4 , 10 }},
222 {{ 0 , 11 , 3 , 15 , 9 , 11 , 6 , 8 , 11 },
223 { 0 , 13 , 8 , 6 , 0 , 13 , 9 , 1 , 7 },
224 { 0 , 2 , 13 , 3 , 7 , 7 , 12 , 7 , 14 },
225 { 0 , 1 , 4 , 8 , 13 , 2 , 15 , 10 , 8 }},
226 {{ 0 , 8 , 4 , 5 , 10 , 6 , 8 , 13 , 1 },
227 { 0 , 1 , 14 , 10 , 3 , 1 , 5 , 10 , 4 },
228 { 0 , 11 , 1 , 0 , 13 , 8 , 3 , 14 , 2 },
229 { 0 , 7 , 2 , 7 , 8 , 13 , 10 , 7 , 13 }},
230 {{ 0 , 3 , 9 , 1 , 1 , 8 , 0 , 3 , 10 },
231 { 0 , 10 , 12 , 2 , 4 , 5 , 6 , 14 , 12 },
232 { 0 , 15 , 5 , 11 , 15 , 15 , 7 , 10 , 0 },
233 { 0 , 5 , 11 , 4 , 9 , 6 , 11 , 9 , 15 }},
234 {{ 0 , 10 , 7 , 13 , 2 , 5 , 13 , 12 , 9 },
235 { 0 , 6 , 0 , 8 , 7 , 0 , 1 , 3 , 5 },
236 { 0 , 12 , 8 , 1 , 1 , 9 , 0 , 15 , 6 },
237 { 0 , 11 , 6 , 15 , 4 , 15 , 14 , 5 , 12 }},
238 {{ 0 , 6 , 2 , 12 , 8 , 3 , 3 , 9 , 3 },
239 { 0 , 12 , 1 , 5 , 2 , 15 , 13 , 5 , 6 },
240 { 0 , 9 , 12 , 2 , 3 , 12 , 4 , 6 , 10 },
241 { 0 , 3 , 7 , 14 , 5 , 0 , 1 , 0 , 9 }},
242 {{ 0 , 12 , 13 , 7 , 5 , 15 , 4 , 7 , 14 },
243 { 0 , 11 , 10 , 14 , 12 , 10 , 14 , 12 , 11 },
244 { 0 , 7 , 6 , 12 , 14 , 5 , 10 , 8 , 13 },
245 { 0 , 14 , 12 , 3 , 11 , 9 , 7 , 15 , 0 }},
246 {{ 0 , 5 , 12 , 11 , 11 , 13 , 14 , 5 , 5 },
247 { 0 , 9 , 6 , 12 , 1 , 3 , 0 , 2 , 0 },
248 { 0 , 3 , 9 , 5 , 5 , 6 , 1 , 0 , 15 },
249 { 0 , 10 , 0 , 11 , 12 , 10 , 6 , 14 , 3 }},
250 {{ 0 , 9 , 0 , 4 , 12 , 0 , 7 , 10 , 0 },
251 { 0 , 5 , 9 , 11 , 10 , 9 , 11 , 15 , 14 },
252 { 0 , 10 , 3 , 10 , 2 , 3 , 13 , 5 , 3 },
253 { 0 , 0 , 5 , 5 , 7 , 4 , 0 , 2 , 5 }},
254 {{ 0 , 0 , 5 , 2 , 4 , 14 , 5 , 6 , 12 },
255 { 0 , 3 , 11 , 15 , 14 , 8 , 3 , 8 , 9 },
256 { 0 , 5 , 2 , 14 , 8 , 0 , 11 , 9 , 5 },
257 { 0 , 6 , 14 , 2 , 2 , 5 , 8 , 3 , 6 }},
258 {{ 0 , 7 , 10 , 8 , 15 , 9 , 11 , 1 , 7 },
259 { 0 , 8 , 5 , 1 , 9 , 6 , 8 , 6 , 2 },
260 { 0 , 0 , 15 , 7 , 4 , 14 , 6 , 2 , 8 },
261 { 0 , 13 , 9 , 12 , 14 , 3 , 13 , 12 , 11 }}};
262
263 volatile char ibin[16] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15};
264 ndes_great ie;
265 unsigned long itmp, ietmp1, ietmp2;
266 char iec[9];
267 int irow, icol, iss, l, m;
268 int volatile j, jj;
269 unsigned long *p;
270
271 p = ndes_bit;
272 ie.r = ie.c = ie.l = 0;
273
274 _Pragma( "loopbound min 16 max 16" )
275 for ( j = 16, l = 32, m = 48; j >= 1; j--, l--, m-- ) {
276 ie.r = ( ie.r << 1 ) | ( p[iet[j]] & ir ? 1 : 0 );
277 ie.c = ( ie.c << 1 ) | ( p[iet[l]] & ir ? 1 : 0 );
278 ie.l = ( ie.l << 1 ) | ( p[iet[m]] & ir ? 1 : 0 );
279 }
280 ie.r ^= k.r;
281 ie.c ^= k.c;
282 ie.l ^= k.l;
283 ietmp1 = ( ( unsigned long ) ie.c << 16 ) + ( unsigned long ) ie.r;
284 ietmp2 = ( ( unsigned long ) ie.l << 8 ) + ( ( unsigned long ) ie.c >> 8 );
285
286 _Pragma( "loopbound min 4 max 4" )
287 for ( j = 1, m = 5; j <= 4; j++, m++ ) {
288 iec[j] = ietmp1 & 0x3fL;
289 iec[m] = ietmp2 & 0x3fL;
290 ietmp1 >>= 6;
291 ietmp2 >>= 6;
292 }
293
294 itmp = 0L;
295
296 _Pragma( "loopbound min 8 max 8" )
297 for ( jj = 8; jj >= 1; jj-- ) {
298 j = iec[jj];
299 irow = ( ( j & 0x1 ) << 1 ) + ( ( j & 0x20 ) >> 5 );
300 icol = ( ( j & 0x2 ) << 2 ) + ( j & 0x4 )
301 + ( ( j & 0x8 ) >> 2 ) + ( ( j & 0x10 ) >> 4 );
302 iss = is[icol][irow][jj];
303 itmp = ( itmp << 4 ) | ibin[iss];
304 }
305
306 *iout = 0L;
307 p = ndes_bit;
308
309 _Pragma( "loopbound min 32 max 32" )
310 for ( j = 32; j >= 1; j-- )
311 *iout = ( *iout << 1 );
312 *iout |= ( p[ipp[j]] & itmp ? 1 : 0 );
313}
314
315unsigned long ndes_getbit( ndes_immense source, int bitno, int nbits )
316{
317 if ( bitno <= nbits )
318 return ndes_bit[bitno] & source.r ? 1L : 0L;
319 else
320 return ndes_bit[bitno - nbits] & source.l ? 1L : 0L;
321}
322
323void ndes_ks( /*ndes_immense key, */int n, ndes_great *kn )
324{
325 int i, j, k, l;
326
327 if ( n == 1 || n == 2 || n == 9 || n == 16 ) {
328 ndes_icd.r = ( ndes_icd.r | ( ( ndes_icd.r & 1L ) << 28 ) ) >> 1;
329 ndes_icd.l = ( ndes_icd.l | ( ( ndes_icd.l & 1L ) << 28 ) ) >> 1;
330 } else {
331 _Pragma( "loopbound min 2 max 2" )
332 for ( i = 1; i <= 2; i++ ) {
333 ndes_icd.r = ( ndes_icd.r | ( ( ndes_icd.r & 1L ) << 28 ) ) >> 1;
334 ndes_icd.l = ( ndes_icd.l | ( ( ndes_icd.l & 1L ) << 28 ) ) >> 1;
335 }
336 }
337
338 ( *kn ).r = ( *kn ).c = ( *kn ).l = 0;
339
340 _Pragma( "loopbound min 16 max 16" )
341 for ( j = 16, k = 32, l = 48; j >= 1; j--, k--, l-- ) {
342 ( *kn ).r = ( *kn ).r << 1;
343 ( *kn ).r = ( ( *kn ).r ) | ( unsigned short )
344 ndes_getbit( ndes_icd, ndes_ipc2[j], 28 );
345 ( *kn ).c = ( *kn ).c << 1;
346 ( *kn ).c = ( ( *kn ).c ) | ( unsigned short )
347 ndes_getbit( ndes_icd, ndes_ipc2[k], 28 );
348 ( *kn ).l = ( *kn ).l << 1;
349 ( *kn ).l = ( ( *kn ).l ) | ( unsigned short )
350 ndes_getbit( ndes_icd, ndes_ipc2[l], 28 );
351 }
352}
353
354int ndes_return()
355{
356 return (ndes_icd.r+ndes_icd.l + (-8390656) ) != 0 ;
357}
358
359void _Pragma( "entrypoint" ) ndes_main()
360{
361 ndes_des( ndes_inp, ndes_key, &ndes_newkey, ndes_isw, &ndes_out );
362}
363
364/* main function */
365
366int main( int argc, char **argv )
367{
368 SET_UP
369 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
370 START_LOOP
371 ndes_init();
372 ndes_main();
373 STOP_LOOP
374 }
375 WRITE_TO_FILE
376
377 return ( ndes_return() );
378}
diff --git a/all_pairs/source/petrinet/ChangeLog.txt b/all_pairs/source/petrinet/ChangeLog.txt
new file mode 100644
index 0000000..3a02ec7
--- /dev/null
+++ b/all_pairs/source/petrinet/ChangeLog.txt
@@ -0,0 +1,63 @@
1File: petrinet.c
2Original provenience: Mälardalen benchmark suite,
3http://www.mrtc.mdh.se/projects/wcet/wcet_bench/nsichneu/nsichneu.c
4
52016-02-02:
6- Added generic TACLeBench header.
7- Removed old file header (keep some information in TACLeBench
8 header).
9- Renamed global variables:
10 - main_iters_dummy_i -> petrinet_main_iters_dummy_i
11 - main_min_dummy_i -> petrinet_main_min_dummy_i
12 - main_max_dummy_i -> petrinet_main_max_dummy_i
13 - P1_is_marked -> petrinet_P1_is_marked
14 - P1_marking_member_0 -> petrinet_P1_marking_member_0
15 - P2_is_marked -> petrinet_P2_is_marked
16 - P2_marking_member_0 -> petrinet_P2_marking_member_0
17 - P3_is_marked -> petrinet_P3_is_marked
18 - P3_marking_member_0 -> petrinet_P3_marking_member_0
19- Renamed main function to petrinet_main, set as entrypoint.
20- Implemented new function main according to TACLeBench guidelines.
21- Implemented function petrinet_return, calculates checksum over
22 petrinet_P3_marking_member_0.
23- Applied code formatting according to the following rules
24 - Lines shall not be wider than 80 characters; whenever possible, appropriate
25 line breaks shall be inserted to keep lines below 80 characters
26 - Indentation is done using whitespaces only, no tabs. Code is indented by
27 two whitespaces
28 - Two empty lines are put between any two functions
29 - In non-empty lists or index expressions, opening '(' and '[' are followed by
30 one whitespace, closing ')' and ']' are preceded by one whitespace
31 - In comma- or colon-separated argument lists, one whitespace is put after
32 each comma/colon
33 - Names of functions and global variables all start with a benchmark-specific
34 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
35 - For pointer types, one whitespace is put before the '*'
36 - Operators within expressions shall be preceded and followed by one
37 whitespace
38 - Code of then- and else-parts of if-then-else statements shall be put in
39 separate lines, not in the same lines as the if-condition or the keyword
40 "else"
41 - Opening braces '{' denoting the beginning of code for some if-else or loop
42 body shall be put at the end of the same line where the keywords "if",
43 "else", "for", "while" etc. occur
44 - In non-empty lists or index expressions, opening '(' and '[' are followed by
45 one whitespace, closing ')' and ']' are preceded by one whitespace
46 - Operators within expressions shall be preceded and followed by one
47 whitespace
48
492016-04-05:
50- Return '0' on success
51
522016-04-06:
53- Fixed generation of return value
54
552016-06-01:
56- Changed all prefixes to lower-case
57
582016-06-08:
59- Prefix
60- removed return from petrinet_main
61
622016-06-13:
63- introduced function petrinet_init
diff --git a/all_pairs/source/petrinet/petrinet.c b/all_pairs/source/petrinet/petrinet.c
new file mode 100644
index 0000000..7c9e1a0
--- /dev/null
+++ b/all_pairs/source/petrinet/petrinet.c
@@ -0,0 +1,990 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: Petrinet
7
8 Author: Friedhelm Stappert, C-LAB, Paderborn, Germany
9
10 Function: Simulate an extended Petri Net
11 Automatically generated code containing large amounts of
12 if-statements (more than 250)
13
14 Source: Mälardalen benchmark suite
15
16 Changes: no major functional changes
17
18 License: may be used, modified, and re-distributed freely
19
20*/
21
22/* Remove the following #define for actual WCET analyses! */
23/*
24 #define PROFILING
25*/
26
27
28#include "../extra.h"
29
30#ifdef PROFILING
31#include <stdio.h>
32#endif
33
34#ifdef PROFILING
35/* Profiling variables. Remove for actual WCET analyses. */
36int petrinet_main_iters_dummy_i = 0,
37 petrinet_main_min_dummy_i = 100000,
38 petrinet_main_max_dummy_i = 0;
39#endif
40
41/*
42 Forward declaration of functions
43*/
44void petrinet_init( void );
45int petrinet_return( void );
46void petrinet_main( void );
47//int main( void );
48
49
50volatile int petrinet_P1_is_marked;
51volatile long petrinet_P1_marking_member_0[ 3 ];
52volatile int petrinet_P2_is_marked;
53volatile long petrinet_P2_marking_member_0[ 5 ];
54volatile int petrinet_P3_is_marked;
55volatile long petrinet_P3_marking_member_0[ 6 ];
56
57const long petrinet_CHECKSUM = 0;
58
59void _Pragma ( "entrypoint" ) petrinet_main( void )
60{
61 int dummy_i;
62 /* dummy_i = 17; Takes too much time */
63 dummy_i = 2;
64
65 #ifdef PROFILING
66 main_iters_dummy_i = 0;
67 #endif
68 _Pragma( "loopbound min 2 max 2" )
69 while ( dummy_i > 0 ) {
70 #ifdef PROFILING
71 main_iters_dummy_i++;
72 #endif
73
74 dummy_i--;
75 /* Permutation for Place P1 : 0, 1, 2 */
76 /* Transition T1 */
77 if ( ( petrinet_P1_is_marked >= 3 ) &&
78 ( petrinet_P3_is_marked + 3 <= 6 ) &&
79 ( petrinet_P1_marking_member_0[ 1 ]
80 == petrinet_P1_marking_member_0[ 2 ] ) ) {
81
82 long x;
83 long y;
84 long z;
85
86 x = petrinet_P1_marking_member_0[ 0 ];
87 y = petrinet_P1_marking_member_0[ 1 ];
88
89 /* Transition condition */
90 if ( x < y ) {
91
92 /* demarking of input places */
93 petrinet_P1_is_marked -= 3;
94
95 /* preaction */
96 z = x - y;
97
98 /* marking of output places */
99 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
100 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
101 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
102 petrinet_P3_is_marked += 3;
103
104 } /* end of if (Transition condition) */
105 }
106
107 /* Permutation for Place petrinet_P1 : 0, 2, 1 */
108 /* Transition T1 */
109 if ( ( petrinet_P1_is_marked >= 3 ) &&
110 ( petrinet_P3_is_marked + 3 <= 6 ) &&
111 ( petrinet_P1_marking_member_0[ 2 ]
112 == petrinet_P1_marking_member_0[ 1 ] ) ) {
113
114 long x;
115 long y;
116 long z;
117
118 x = petrinet_P1_marking_member_0[ 0 ];
119 y = petrinet_P1_marking_member_0[ 2 ];
120
121 /* Transition condition */
122 if ( ( x < y ) ) {
123
124 /* demarking of input places */
125 petrinet_P1_is_marked -= 3;
126
127 /* preaction */
128 z = x - y;
129
130 /* marking of output places */
131 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
132 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
133 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
134 petrinet_P3_is_marked += 3;
135
136 } /* end of if (Transition condition) */
137 }
138
139 /* Permutation for Place petrinet_P1 : 1, 0, 2 */
140 /* Transition T1 */
141 if ( ( petrinet_P1_is_marked >= 3 ) &&
142 ( petrinet_P3_is_marked + 3 <= 6 ) &&
143 ( petrinet_P1_marking_member_0[ 0 ]
144 == petrinet_P1_marking_member_0[ 2 ] ) ) {
145
146 long x;
147 long y;
148 long z;
149
150 x = petrinet_P1_marking_member_0[ 1 ];
151 y = petrinet_P1_marking_member_0[ 0 ];
152
153 /* Transition condition */
154 if ( x < y ) {
155
156 /* demarking of input places */
157 petrinet_P1_is_marked -= 3;
158
159 /* preaction */
160 z = x - y;
161
162 /* marking of output places */
163 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
164 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
165 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
166 petrinet_P3_is_marked += 3;
167
168 } /* end of if (Transition condition) */
169 }
170
171 /* Permutation for Place petrinet_P1 : 1, 2, 0 */
172 /* Transition T1 */
173 if ( ( petrinet_P1_is_marked >= 3 ) &&
174 ( petrinet_P3_is_marked + 3 <= 6 ) &&
175 ( petrinet_P1_marking_member_0[ 2 ]
176 == petrinet_P1_marking_member_0[ 0 ] ) ) {
177
178 long x;
179 long y;
180 long z;
181
182 x = petrinet_P1_marking_member_0[ 1 ];
183 y = petrinet_P1_marking_member_0[ 2 ];
184
185 /* Transition condition */
186 if ( ( x < y ) ) {
187
188 /* demarking of input places */
189 petrinet_P1_is_marked -= 3;
190
191 /* preaction */
192 z = x - y;
193
194 /* marking of output places */
195 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
196 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
197 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
198 petrinet_P3_is_marked += 3;
199
200 } /* end of if (Transition condition) */
201 }
202
203 /* Permutation for Place petrinet_P1 : 2, 0, 1 */
204 /* Transition T1 */
205 if ( ( petrinet_P1_is_marked >= 3 ) &&
206 ( petrinet_P3_is_marked + 3 <= 6 ) &&
207 ( petrinet_P1_marking_member_0[ 0 ]
208 == petrinet_P1_marking_member_0[ 1 ] ) ) {
209 long x;
210 long y;
211 long z;
212
213 x = petrinet_P1_marking_member_0[ 2 ];
214 y = petrinet_P1_marking_member_0[ 0 ];
215
216 /* Transition condition */
217 if ( ( x < y ) ) {
218
219 /* demarking of input places */
220 petrinet_P1_is_marked -= 3;
221
222 /* preaction */
223 z = x - y;
224
225 /* marking of output places */
226 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
227 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
228 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
229 petrinet_P3_is_marked += 3;
230
231 } /* end of if (Transition condition) */
232 }
233
234 /* Permutation for Place petrinet_P1 : 2, 1, 0 */
235 /* Transition T1 */
236 if ( ( petrinet_P1_is_marked >= 3 ) &&
237 ( petrinet_P3_is_marked + 3 <= 6 ) &&
238 ( petrinet_P1_marking_member_0[ 1 ]
239 == petrinet_P1_marking_member_0[ 0 ] ) ) {
240 long x;
241 long y;
242 long z;
243
244 x = petrinet_P1_marking_member_0[ 2 ];
245 y = petrinet_P1_marking_member_0[ 1 ];
246
247 /* Transition condition */
248 if ( ( x < y ) ) {
249
250 /* demarking of input places */
251 petrinet_P1_is_marked -= 3;
252
253 /* preaction */
254 z = x - y;
255
256 /* marking of output places */
257 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
258 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
259 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
260 petrinet_P3_is_marked += 3;
261
262 } /* end of if (Transition condition) */
263 }
264
265 /* Permutation for Place P2 : 0, 1, 2, 3 */
266 /* Transition T2 */
267 if ( ( petrinet_P2_is_marked >= 4 ) &&
268 ( ( ( petrinet_P3_is_marked + 3 ) <= 6 ) ) &&
269 ( ( ( petrinet_P2_marking_member_0[ 1 ]
270 == petrinet_P2_marking_member_0[ 2 ] ) ) &&
271 ( ( petrinet_P2_marking_member_0[ 1 ]
272 == petrinet_P2_marking_member_0[ 3 ] ) ) ) ) {
273 long a;
274 long b;
275 long c;
276
277 a = petrinet_P2_marking_member_0[ 0 ];
278 b = petrinet_P2_marking_member_0[ 1 ];
279
280 /* Transition condition */
281 if ( ( b > a ) ) {
282
283 /* demarking of input places */
284 petrinet_P2_is_marked -= 4;
285
286 /* preaction */
287 c = a + b;
288
289 /* marking of output places */
290 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
291 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
292 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
293 petrinet_P3_is_marked += 3;
294
295 } /* end of if (Transition condition) */
296 }
297
298 /* Permutation for Place petrinet_P2 : 0, 1, 3, 2 */
299 /* Transition T2 */
300 if ( ( petrinet_P2_is_marked >= 4 ) &&
301 ( ( ( petrinet_P3_is_marked + 3 ) <= 6 ) ) &&
302 ( ( petrinet_P2_marking_member_0[ 1 ]
303 == petrinet_P2_marking_member_0[ 3 ] ) &&
304 ( petrinet_P2_marking_member_0[ 1 ]
305 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
306 long a;
307 long b;
308 long c;
309
310 a = petrinet_P2_marking_member_0[ 0 ];
311 b = petrinet_P2_marking_member_0[ 1 ];
312
313 /* Transition condition */
314 if ( ( b > a ) ) {
315
316 /* demarking of input places */
317 petrinet_P2_is_marked -= 4;
318
319 /* preaction */
320 c = a + b;
321
322 /* marking of output places */
323 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
324 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
325 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
326 petrinet_P3_is_marked += 3;
327
328 } /* end of if (Transition condition) */
329 }
330
331 /* Permutation for Place petrinet_P2 : 0, 2, 1, 3 */
332 /* Transition T2 */
333 if ( ( petrinet_P2_is_marked >= 4 ) &&
334 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
335 ( ( petrinet_P2_marking_member_0[ 2 ]
336 == petrinet_P2_marking_member_0[ 1 ] ) &&
337 ( petrinet_P2_marking_member_0[ 2 ]
338 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
339 long a;
340 long b;
341 long c;
342
343 a = petrinet_P2_marking_member_0[ 0 ];
344 b = petrinet_P2_marking_member_0[ 2 ];
345
346 /* Transition condition */
347 if ( ( b > a ) ) {
348
349 /* demarking of input places */
350 petrinet_P2_is_marked -= 4;
351
352 /* preaction */
353 c = a + b;
354
355 /* marking of output places */
356 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
357 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
358 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
359 petrinet_P3_is_marked += 3;
360
361 } /* end of if (Transition condition) */
362 }
363
364 /* Permutation for Place petrinet_P2 : 0, 2, 3, 1 */
365 /* Transition T2 */
366 if ( ( petrinet_P2_is_marked >= 4 ) &&
367 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
368 ( ( petrinet_P2_marking_member_0[ 2 ]
369 == petrinet_P2_marking_member_0[ 3 ] ) &&
370 ( petrinet_P2_marking_member_0[ 2 ]
371 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
372 long a;
373 long b;
374 long c;
375
376 a = petrinet_P2_marking_member_0[ 0 ];
377 b = petrinet_P2_marking_member_0[ 2 ];
378
379 /* Transition condition */
380 if ( ( b > a ) ) {
381
382 /* demarking of input places */
383 petrinet_P2_is_marked -= 4;
384
385 /* preaction */
386 c = a + b;
387
388 /* marking of output places */
389 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
390 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
391 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
392 petrinet_P3_is_marked += 3;
393
394 } /* end of if (Transition condition) */
395 }
396
397 /* Permutation for Place petrinet_P2 : 0, 3, 1, 2 */
398 /* Transition T2 */
399 if ( ( petrinet_P2_is_marked >= 4 ) &&
400 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
401 ( ( petrinet_P2_marking_member_0[ 3 ]
402 == petrinet_P2_marking_member_0[ 1 ] ) &&
403 ( petrinet_P2_marking_member_0[ 3 ]
404 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
405 long a;
406 long b;
407 long c;
408
409 a = petrinet_P2_marking_member_0[ 0 ];
410 b = petrinet_P2_marking_member_0[ 3 ];
411
412 /* Transition condition */
413 if ( ( b > a ) ) {
414
415 /* demarking of input places */
416 petrinet_P2_is_marked -= 4;
417
418 /* preaction */
419 c = a + b;
420
421 /* marking of output places */
422 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
423 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
424 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
425 petrinet_P3_is_marked += 3;
426
427 } /* end of if (Transition condition) */
428 }
429
430 /* Permutation for Place petrinet_P2 : 0, 3, 2, 1 */
431 /* Transition T2 */
432 if ( ( petrinet_P2_is_marked >= 4 ) &&
433 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
434 ( ( petrinet_P2_marking_member_0[ 3 ]
435 == petrinet_P2_marking_member_0[ 2 ] ) &&
436 ( petrinet_P2_marking_member_0[ 3 ]
437 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
438 long a;
439 long b;
440 long c;
441
442 a = petrinet_P2_marking_member_0[ 0 ];
443 b = petrinet_P2_marking_member_0[ 3 ];
444
445 /* Transition condition */
446 if ( ( b > a ) ) {
447
448 /* demarking of input places */
449 petrinet_P2_is_marked -= 4;
450
451 /* preaction */
452 c = a + b;
453
454 /* marking of output places */
455 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
456 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
457 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
458 petrinet_P3_is_marked += 3;
459
460 } /* end of if (Transition condition) */
461 }
462
463 /* Permutation for Place petrinet_P2 : 1, 0, 2, 3 */
464 /* Transition T2 */
465 if ( ( petrinet_P2_is_marked >= 4 ) &&
466 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
467 ( ( petrinet_P2_marking_member_0[ 0 ]
468 == petrinet_P2_marking_member_0[ 2 ] ) &&
469 ( petrinet_P2_marking_member_0[ 0 ]
470 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
471 long a;
472 long b;
473 long c;
474
475 a = petrinet_P2_marking_member_0[ 1 ];
476 b = petrinet_P2_marking_member_0[ 0 ];
477
478 /* Transition condition */
479 if ( ( b > a ) ) {
480
481 /* demarking of input places */
482 petrinet_P2_is_marked -= 4;
483
484 /* preaction */
485 c = a + b;
486
487 /* marking of output places */
488 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
489 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
490 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
491 petrinet_P3_is_marked += 3;
492
493 } /* end of if (Transition condition) */
494 }
495
496 /* Permutation for Place petrinet_P2 : 1, 0, 3, 2 */
497 /* Transition T2 */
498 if ( ( petrinet_P2_is_marked >= 4 ) &&
499 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
500 ( ( petrinet_P2_marking_member_0[ 0 ]
501 == petrinet_P2_marking_member_0[ 3 ] ) &&
502 ( petrinet_P2_marking_member_0[ 0 ]
503 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
504 long a;
505 long b;
506 long c;
507
508 a = petrinet_P2_marking_member_0[ 1 ];
509 b = petrinet_P2_marking_member_0[ 0 ];
510
511 /* Transition condition */
512 if ( ( b > a ) ) {
513
514 /* demarking of input places */
515 petrinet_P2_is_marked -= 4;
516
517 /* preaction */
518 c = a + b;
519
520 /* marking of output places */
521 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
522 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
523 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
524 petrinet_P3_is_marked += 3;
525
526 } /* end of if (Transition condition) */
527 }
528
529 /* Permutation for Place petrinet_P2 : 1, 2, 0, 3 */
530 /* Transition T2 */
531 if ( ( petrinet_P2_is_marked >= 4 ) &&
532 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
533 ( ( petrinet_P2_marking_member_0[ 2 ]
534 == petrinet_P2_marking_member_0[ 0 ] ) &&
535 ( petrinet_P2_marking_member_0[ 2 ]
536 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
537 long a;
538 long b;
539 long c;
540
541 a = petrinet_P2_marking_member_0[ 1 ];
542 b = petrinet_P2_marking_member_0[ 2 ];
543
544 /* Transition condition */
545 if ( ( b > a ) ) {
546
547 /* demarking of input places */
548 petrinet_P2_is_marked -= 4;
549
550 /* preaction */
551 c = a + b;
552
553 /* marking of output places */
554 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
555 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
556 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
557 petrinet_P3_is_marked += 3;
558
559 } /* end of if (Transition condition) */
560 }
561
562 /* Permutation for Place petrinet_P2 : 1, 2, 3, 0 */
563 /* Transition T2 */
564 if ( ( petrinet_P2_is_marked >= 4 ) &&
565 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
566 ( ( petrinet_P2_marking_member_0[ 2 ]
567 == petrinet_P2_marking_member_0[ 3 ] ) &&
568 ( petrinet_P2_marking_member_0[ 2 ]
569 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
570 long a;
571 long b;
572 long c;
573
574 a = petrinet_P2_marking_member_0[ 1 ];
575 b = petrinet_P2_marking_member_0[ 2 ];
576
577 /* Transition condition */
578 if ( ( b > a ) ) {
579 /* demarking of input places */
580 petrinet_P2_is_marked -= 4;
581
582 /* preaction */
583 c = a + b;
584
585 /* marking of output places */
586 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
587 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
588 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
589 petrinet_P3_is_marked += 3;
590
591 } /* end of if (Transition condition) */
592 }
593
594 /* Permutation for Place petrinet_P2 : 1, 3, 0, 2 */
595 /* Transition T2 */
596 if ( ( petrinet_P2_is_marked >= 4 ) &&
597 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
598 ( ( petrinet_P2_marking_member_0[ 3 ]
599 == petrinet_P2_marking_member_0[ 0 ] ) &&
600 ( petrinet_P2_marking_member_0[ 3 ]
601 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
602 long a;
603 long b;
604 long c;
605
606 a = petrinet_P2_marking_member_0[ 1 ];
607 b = petrinet_P2_marking_member_0[ 3 ];
608
609 /* Transition condition */
610 if ( ( b > a ) ) {
611 /* demarking of input places */
612 petrinet_P2_is_marked -= 4;
613
614 /* preaction */
615 c = a + b;
616
617 /* marking of output places */
618 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
619 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
620 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
621 petrinet_P3_is_marked += 3;
622
623 } /* end of if (Transition condition) */
624 }
625
626
627 /* Permutation for Place petrinet_P2 : 1, 3, 2, 0 */
628 /* Transition T2 */
629 if ( ( petrinet_P2_is_marked >= 4 ) &&
630 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
631 ( ( petrinet_P2_marking_member_0[ 3 ]
632 == petrinet_P2_marking_member_0[ 2 ] ) &&
633 ( petrinet_P2_marking_member_0[ 3 ]
634 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
635 long a;
636 long b;
637 long c;
638
639 a = petrinet_P2_marking_member_0[ 1 ];
640 b = petrinet_P2_marking_member_0[ 3 ];
641
642 /* Transition condition */
643 if ( ( b > a ) ) {
644
645 /* demarking of input places */
646 petrinet_P2_is_marked -= 4;
647
648 /* preaction */
649 c = a + b;
650
651 /* marking of output places */
652 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
653 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
654 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
655 petrinet_P3_is_marked += 3;
656
657 } /* end of if (Transition condition) */
658 }
659
660
661 /* Permutation for Place petrinet_P2 : 2, 0, 1, 3 */
662 /* Transition T2 */
663 if ( ( petrinet_P2_is_marked >= 4 ) &&
664 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
665 ( ( petrinet_P2_marking_member_0[ 0 ]
666 == petrinet_P2_marking_member_0[ 1 ] ) &&
667 ( petrinet_P2_marking_member_0[ 0 ]
668 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
669 long a;
670 long b;
671 long c;
672
673 a = petrinet_P2_marking_member_0[ 2 ];
674 b = petrinet_P2_marking_member_0[ 0 ];
675
676 /* Transition condition */
677 if ( ( b > a ) ) {
678 /* demarking of input places */
679 petrinet_P2_is_marked -= 4;
680
681 /* preaction */
682 c = a + b;
683
684 /* marking of output places */
685 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
686 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
687 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
688 petrinet_P3_is_marked += 3;
689
690 } /* end of if (Transition condition) */
691 }
692
693 /* Permutation for Place petrinet_P2 : 2, 0, 3, 1 */
694 /* Transition T2 */
695 if ( ( petrinet_P2_is_marked >= 4 ) &&
696 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
697 ( ( petrinet_P2_marking_member_0[ 0 ]
698 == petrinet_P2_marking_member_0[ 3 ] ) &&
699 ( petrinet_P2_marking_member_0[ 0 ]
700 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
701 long a;
702 long b;
703 long c;
704
705 a = petrinet_P2_marking_member_0[ 2 ];
706 b = petrinet_P2_marking_member_0[ 0 ];
707
708 /* Transition condition */
709 if ( ( b > a ) ) {
710 /* demarking of input places */
711 petrinet_P2_is_marked -= 4;
712
713 /* preaction */
714 c = a + b;
715
716 /* marking of output places */
717 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
718 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
719 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
720 petrinet_P3_is_marked += 3;
721
722 } /* end of if (Transition condition) */
723 }
724
725 /* Permutation for Place petrinet_P2 : 2, 1, 0, 3 */
726 /* Transition T2 */
727 if ( ( petrinet_P2_is_marked >= 4 ) &&
728 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
729 ( ( petrinet_P2_marking_member_0[ 1 ]
730 == petrinet_P2_marking_member_0[ 0 ] ) &&
731 ( petrinet_P2_marking_member_0[ 1 ]
732 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
733 long a;
734 long b;
735 long c;
736
737 a = petrinet_P2_marking_member_0[ 2 ];
738 b = petrinet_P2_marking_member_0[ 1 ];
739
740 /* Transition condition */
741 if ( ( b > a ) ) {
742 /* demarking of input places */
743 petrinet_P2_is_marked -= 4;
744
745 /* preaction */
746 c = a + b;
747
748 /* marking of output places */
749 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
750 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
751 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
752 petrinet_P3_is_marked += 3;
753
754 } /* end of if (Transition condition) */
755 }
756
757 /* Permutation for Place petrinet_P2 : 2, 1, 3, 0 */
758 /* Transition T2 */
759 if ( ( petrinet_P2_is_marked >= 4 ) &&
760 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
761 ( ( petrinet_P2_marking_member_0[ 1 ]
762 == petrinet_P2_marking_member_0[ 3 ] ) &&
763 ( petrinet_P2_marking_member_0[ 1 ]
764 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
765 long a;
766 long b;
767 long c;
768
769 a = petrinet_P2_marking_member_0[ 2 ];
770 b = petrinet_P2_marking_member_0[ 1 ];
771
772 /* Transition condition */
773 if ( ( b > a ) ) {
774 /* demarking of input places */
775 petrinet_P2_is_marked -= 4;
776
777 /* preaction */
778 c = a + b;
779
780 /* marking of output places */
781 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
782 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
783 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
784 petrinet_P3_is_marked += 3;
785
786 } /* end of if (Transition condition) */
787 }
788
789 /* Permutation for Place petrinet_P2 : 2, 3, 0, 1 */
790 /* Transition T2 */
791 if ( ( petrinet_P2_is_marked >= 4 ) &&
792 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
793 ( ( petrinet_P2_marking_member_0[ 3 ]
794 == petrinet_P2_marking_member_0[ 0 ] ) &&
795 ( petrinet_P2_marking_member_0[ 3 ]
796 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
797 long a;
798 long b;
799 long c;
800
801 a = petrinet_P2_marking_member_0[ 2 ];
802 b = petrinet_P2_marking_member_0[ 3 ];
803
804 /* Transition condition */
805 if ( ( b > a ) ) {
806 /* demarking of input places */
807 petrinet_P2_is_marked -= 4;
808
809 /* preaction */
810 c = a + b;
811
812 /* marking of output places */
813 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
814 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
815 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
816 petrinet_P3_is_marked += 3;
817
818 } /* end of if (Transition condition) */
819 }
820
821 /* Permutation for Place petrinet_P2 : 2, 3, 1, 0 */
822 /* Transition T2 */
823 if ( ( petrinet_P2_is_marked >= 4 ) &&
824 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
825 ( ( petrinet_P2_marking_member_0[ 3 ]
826 == petrinet_P2_marking_member_0[ 1 ] ) &&
827 ( petrinet_P2_marking_member_0[ 3 ]
828 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
829 long a;
830 long b;
831 long c;
832
833 a = petrinet_P2_marking_member_0[ 2 ];
834 b = petrinet_P2_marking_member_0[ 3 ];
835
836 /* Transition condition */
837 if ( ( b > a ) ) {
838 /* demarking of input places */
839 petrinet_P2_is_marked -= 4;
840
841 /* preaction */
842 c = a + b;
843
844 /* marking of output places */
845 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
846 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
847 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
848 petrinet_P3_is_marked += 3;
849
850 } /* end of if (Transition condition) */
851 }
852
853 /* Permutation for Place petrinet_P2 : 3, 0, 1, 2 */
854 /* Transition T2 */
855 if ( ( petrinet_P2_is_marked >= 4 ) &&
856 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
857 ( ( petrinet_P2_marking_member_0[ 0 ]
858 == petrinet_P2_marking_member_0[ 1 ] ) &&
859 ( petrinet_P2_marking_member_0[ 0 ]
860 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
861 long a;
862 long b;
863 long c;
864
865 a = petrinet_P2_marking_member_0[ 3 ];
866 b = petrinet_P2_marking_member_0[ 0 ];
867
868 /* Transition condition */
869 if ( ( b > a ) ) {
870
871 /* demarking of input places */
872 petrinet_P2_is_marked -= 4;
873
874 /* preaction */
875 c = a + b;
876
877 /* marking of output places */
878 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
879 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
880 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
881 petrinet_P3_is_marked += 3;
882
883 } /* end of if (Transition condition) */
884 }
885
886
887 /* Permutation for Place petrinet_P2 : 3, 0, 2, 1 */
888 /* Transition T2 */
889 if ( ( petrinet_P2_is_marked >= 4 ) &&
890 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
891 ( ( petrinet_P2_marking_member_0[ 0 ]
892 == petrinet_P2_marking_member_0[ 2 ] ) &&
893 ( petrinet_P2_marking_member_0[ 0 ]
894 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
895
896 long a;
897 long b;
898 long c;
899
900 a = petrinet_P2_marking_member_0[ 3 ];
901 b = petrinet_P2_marking_member_0[ 0 ];
902
903 /* Transition condition */
904 if ( ( b > a ) ) {
905
906 /* demarking of input places */
907 petrinet_P2_is_marked -= 4;
908
909 /* preaction */
910 c = a + b;
911
912 /* marking of output places */
913 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
914 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
915 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
916 petrinet_P3_is_marked += 3;
917
918 } /* end of if (Transition condition) */
919 }
920 }
921 #ifdef PROFILING
922 if ( main_iters_dummy_i < main_min_dummy_i )
923 main_min_dummy_i = main_iters_dummy_i;
924 if ( main_iters_dummy_i > main_max_dummy_i )
925 main_max_dummy_i = main_iters_dummy_i;
926 #endif
927
928 #ifdef PROFILING
929 printf( "main::dummy_i-loop: [%d, %d]\n",
930 main_min_dummy_i, main_max_dummy_i );
931 #endif
932
933 //dummy_i = 77;
934 // TODO: not a good return value
935 //return dummy_i;
936}
937
938
939void petrinet_init( void )
940{
941 petrinet_P1_is_marked = 3;
942 petrinet_P2_is_marked = 5;
943 petrinet_P3_is_marked = 0;
944
945 /*
946 Maybe we should also initialise these arrays, as they may be read
947 in the petrinet_main() function before being written.
948 */
949 /*
950 volatile long petrinet_P1_marking_member_0[ 3 ];
951 volatile long petrinet_P2_marking_member_0[ 5 ];
952 volatile long petrinet_P3_marking_member_0[ 6 ];
953 */
954}
955
956
957int petrinet_return( void )
958{
959 // TODO: use something from the Px_... arrays
960 int checksum = 0;
961 int i;
962
963 for ( i = 0; i < 3; ++i )
964 checksum += petrinet_P1_marking_member_0[i];
965
966 for ( i = 0; i < 5; ++i )
967 checksum += petrinet_P2_marking_member_0[i];
968
969 for ( i = 0; i < 6; ++i )
970 checksum += petrinet_P3_marking_member_0[i];
971
972 return ( ( checksum == petrinet_CHECKSUM ) ? 0 : -1 );
973}
974
975
976int main( int argc, char **argv )
977{
978 SET_UP
979
980 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
981
982 START_LOOP
983 petrinet_main();
984 STOP_LOOP
985 }
986 WRITE_TO_FILE
987
988 return ( petrinet_return() );
989}
990
diff --git a/all_pairs/source/rijndael_dec/ChangeLog.txt b/all_pairs/source/rijndael_dec/ChangeLog.txt
new file mode 100644
index 0000000..75e26a8
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/ChangeLog.txt
@@ -0,0 +1,58 @@
1File: rijndael_decoder.c
2Source: security section of MiBench
3
4- Prefix library functions with rijndael_dec
5- Move functionality from function main into functions
6 rijndael_enc_init, rijndael_enc_main, and rijndael_enc_return
7 (reusing code from rijndael_enc benchmark)
8- Added general TACLeBench header to beginning of source code
9- Applied code formatting with astyle as in the example
10- Rename to rijndael_dec.c
11- Make loop counter in rijndael_dec_init unsigned
12- Remove dead code in rijndael_dec_decfile
13
14File: aes.h
15Source: security section of MiBench
16
172016-04-20:
18- Replace with file aes.h from rijndael_enc benchmark
19- Declare prototype for rijndael_enc_decrypt instead of rijndael_enc_encrypt
20
21File: aes.c
22Source: security section of MiBench
23
242016-04-20:
25- Replace with file aes.h from rijndael_enc benchmark, using prefix
26 rijndael_dec
27- Replace implementation for rijndael_enc_encrypt with implementation
28 for rijndael_enc_decrypt
29- Applied code formatting with astyle as in the example
30- Remove unused macros s, ff_poly, ff_hi, m1, m2, m3, FFmulX,
31 fwd_mcol, fwd_var, inv_var, si, so, fwd_rnd, inv_rnd, fwd_lrnd,
32 inv_lrnd, locals, l_copy, state_in, state_out, round
33
342016-06-14:
35- Added cast to make C++ compiler happy
36
37File: aestab.h
38Source: security section of MiBench
39
402016-04-20:
41- Replace with file aestab.h from rijndael_enc benchmark, using prefix
42 rijndael_dec
43- Remove unused arrays rijndael_dec_s_box, rijndael_dec_inv_s_box,
44 rijndael_dec_ft_tab
45
46Files: glibc_common.c, my_file.c, glibc_common.h, my_file.h
47Source: security section of MiBench
48
492016-04-20:
50- Replace with files rijndael_enc_libc.c and rijndael_enc_libc.h from
51 rijndael_enc benchmark (renamed to rijndael_dec_libc.c and
52 rijndael_dec_libc.h, using prefix rijndael_dec)
53
54File: input_small_enc.c
55Source: security section of MiBench
56
572016-02-26:
58- Prefix input array with rijndael_dec
diff --git a/all_pairs/source/rijndael_dec/aes.c b/all_pairs/source/rijndael_dec/aes.c
new file mode 100644
index 0000000..f47adfd
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/aes.c
@@ -0,0 +1,406 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of 128,
23 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27*/
28
29#include "aes.h"
30
31#include "aestab.h"
32
33#define four_tables(x,tab,vf,rf,c) ( tab[0][bval(vf(x,0,c),rf(0,c))] ^ \
34 tab[1][bval(vf(x,1,c),rf(1,c))] ^ \
35 tab[2][bval(vf(x,2,c),rf(2,c))] ^ \
36 tab[3][bval(vf(x,3,c),rf(3,c))] )
37
38#define vf1(x,r,c) (x)
39#define rf1(r,c) (r)
40#define rf2(r,c) ((r-c)&3)
41
42#define ls_box(x,c) four_tables(x,rijndael_dec_fl_tab,vf1,rf2,c)
43
44#define inv_mcol(x) four_tables(x,rijndael_dec_im_tab,vf1,rf1,0)
45
46/*
47 Subroutine to set the block size (if variable) in bytes, legal
48 values being 16, 24 and 32.
49*/
50
51#define nc (Ncol)
52
53/*
54 Initialise the key schedule from the user supplied key. The key
55 length is now specified in bytes - 16, 24 or 32 as appropriate.
56 This corresponds to bit lengths of 128, 192 and 256 bits, and
57 to Nk values of 4, 6 and 8 respectively.
58*/
59
60#define mx(t,f) (*t++ = inv_mcol(*f),f++)
61#define cp(t,f) *t++ = *f++
62
63#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0)
64#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0)
65
66aes_ret rijndael_dec_set_key( byte in_key[], const word n_bytes,
67 const enum aes_key f, struct aes *cx )
68{
69 word *kf, *kt, rci;
70
71 if ( ( n_bytes & 7 ) || n_bytes < 16 || n_bytes > 32 || ( !( f & 1 ) &&
72 !( f & 2 ) ) )
73 return ( n_bytes ? cx->mode &= ~0x03, aes_bad : ( aes_ret )( cx->Nkey << 2 ) );
74
75 cx->mode = ( cx->mode & ~0x03 ) | ( ( byte )f & 0x03 );
76 cx->Nkey = n_bytes >> 2;
77 cx->Nrnd = Nr( cx->Nkey, ( word )nc );
78
79 cx->e_key[0] = word_in( in_key );
80 cx->e_key[1] = word_in( in_key + 4 );
81 cx->e_key[2] = word_in( in_key + 8 );
82 cx->e_key[3] = word_in( in_key + 12 );
83
84 kf = cx->e_key;
85 kt = kf + nc * ( cx->Nrnd + 1 ) - cx->Nkey;
86 rci = 0;
87
88 switch ( cx->Nkey ) {
89 case 4:
90 _Pragma( "loopbound min 0 max 0" )
91 do {
92 kf[4] = kf[0] ^ ls_box( kf[3], 3 ) ^ rijndael_dec_rcon_tab[rci++];
93 kf[5] = kf[1] ^ kf[4];
94 kf[6] = kf[2] ^ kf[5];
95 kf[7] = kf[3] ^ kf[6];
96 kf += 4;
97 } while ( kf < kt );
98 break;
99
100 case 6:
101 cx->e_key[4] = word_in( in_key + 16 );
102 cx->e_key[5] = word_in( in_key + 20 );
103 _Pragma( "loopbound min 0 max 0" )
104 do {
105 kf[ 6] = kf[0] ^ ls_box( kf[5], 3 ) ^ rijndael_dec_rcon_tab[rci++];
106 kf[ 7] = kf[1] ^ kf[ 6];
107 kf[ 8] = kf[2] ^ kf[ 7];
108 kf[ 9] = kf[3] ^ kf[ 8];
109 kf[10] = kf[4] ^ kf[ 9];
110 kf[11] = kf[5] ^ kf[10];
111 kf += 6;
112 } while ( kf < kt );
113 break;
114
115 case 8:
116 cx->e_key[4] = word_in( in_key + 16 );
117 cx->e_key[5] = word_in( in_key + 20 );
118 cx->e_key[6] = word_in( in_key + 24 );
119 cx->e_key[7] = word_in( in_key + 28 );
120 _Pragma( "loopbound min 7 max 7" )
121 do {
122 kf[ 8] = kf[0] ^ ls_box( kf[7], 3 ) ^ rijndael_dec_rcon_tab[rci++];
123 kf[ 9] = kf[1] ^ kf[ 8];
124 kf[10] = kf[2] ^ kf[ 9];
125 kf[11] = kf[3] ^ kf[10];
126 kf[12] = kf[4] ^ ls_box( kf[11], 0 );
127 kf[13] = kf[5] ^ kf[12];
128 kf[14] = kf[6] ^ kf[13];
129 kf[15] = kf[7] ^ kf[14];
130 kf += 8;
131 } while ( kf < kt );
132 break;
133 }
134
135 if ( ( cx->mode & 3 ) != enc ) {
136 word i;
137
138 kt = cx->d_key + nc * cx->Nrnd;
139 kf = cx->e_key;
140
141 cpy( kt, kf );
142 kt -= 2 * nc;
143
144 _Pragma( "loopbound min 0 max 0" )
145 for ( i = 1; i < cx->Nrnd; ++i ) {
146 mix( kt, kf );
147 kt -= 2 * nc;
148 }
149
150 cpy( kt, kf );
151 }
152
153 return aes_good;
154}
155
156short rijndael_dec_decrypt( const unsigned char in_blk[],
157 unsigned char out_blk[], const struct aes *cx )
158{
159 const unsigned long *kp = cx->d_key;
160 if ( !( cx->mode & 2 ) )
161 return 0;
162 unsigned long b0[4];
163 b0[0] = *( unsigned long * )in_blk ^ kp[0];
164 b0[1] = *( unsigned long * )( in_blk + 4 )^kp[1];
165 b0[2] = *( unsigned long * )( in_blk + 8 )^kp[2];
166 b0[3] = *( unsigned long * )( in_blk + 12 )^kp[3];
167 kp += 4;
168 unsigned long b1[4];
169 switch ( cx->Nrnd ) {
170 case 14:
171 b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
172 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
173 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
174 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
175 b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
176 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
177 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
178 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
179 b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
180 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
181 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
182 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
183 b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
184 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
185 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
186 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
187 b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
188 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
189 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
190 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
191 b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
192 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
193 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
194 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
195 b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
196 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
197 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
198 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
199 b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
200 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
201 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
202 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
203 kp += 8;
204 case 12:
205 b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
206 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
207 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
208 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
209 b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
210 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
211 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
212 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
213 b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
214 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
215 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
216 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
217 b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
218 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
219 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
220 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
221 b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
222 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
223 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
224 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
225 b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
226 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
227 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
228 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
229 b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
230 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
231 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
232 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
233 b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
234 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
235 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
236 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
237 kp += 8;
238 case 10:
239 b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
240 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
241 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
242 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
243 b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
244 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
245 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
246 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
247 b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
248 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
249 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
250 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
251 b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
252 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
253 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
254 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
255 b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
256 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
257 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
258 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
259 b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
260 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
261 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
262 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
263 b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
264 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
265 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
266 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
267 b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
268 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
269 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
270 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
271 b1[0] = ( kp + 8 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
272 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
273 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
274 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
275 b1[1] = ( kp + 8 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
276 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
277 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
278 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
279 b1[2] = ( kp + 8 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
280 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
281 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
282 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
283 b1[3] = ( kp + 8 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
284 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
285 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
286 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
287 b0[0] = ( kp + 12 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
288 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
289 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
290 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
291 b0[1] = ( kp + 12 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
292 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
293 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
294 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
295 b0[2] = ( kp + 12 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
296 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
297 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
298 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
299 b0[3] = ( kp + 12 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
300 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
301 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
302 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
303 b1[0] = ( kp + 16 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
304 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
305 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
306 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
307 b1[1] = ( kp + 16 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
308 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
309 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
310 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
311 b1[2] = ( kp + 16 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
312 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
313 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
314 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
315 b1[3] = ( kp + 16 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
316 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
317 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
318 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
319 b0[0] = ( kp + 20 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
320 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
321 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
322 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
323 b0[1] = ( kp + 20 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
324 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
325 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
326 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
327 b0[2] = ( kp + 20 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
328 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
329 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
330 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
331 b0[3] = ( kp + 20 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
332 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
333 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
334 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
335 b1[0] = ( kp + 24 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
336 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
337 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
338 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
339 b1[1] = ( kp + 24 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
340 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
341 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
342 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
343 b1[2] = ( kp + 24 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
344 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
345 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
346 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
347 b1[3] = ( kp + 24 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
348 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
349 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
350 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
351 b0[0] = ( kp + 28 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
352 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
353 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
354 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
355 b0[1] = ( kp + 28 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
356 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
357 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
358 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
359 b0[2] = ( kp + 28 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
360 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
361 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
362 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
363 b0[3] = ( kp + 28 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
364 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
365 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
366 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
367 b1[0] = ( kp + 32 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
368 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
369 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
370 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
371 b1[1] = ( kp + 32 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
372 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
373 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
374 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
375 b1[2] = ( kp + 32 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
376 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
377 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
378 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
379 b1[3] = ( kp + 32 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
380 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
381 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
382 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
383 b0[0] = ( kp + 36 )[0] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[0] )] ^
384 rijndael_dec_il_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
385 rijndael_dec_il_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
386 rijndael_dec_il_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
387 b0[1] = ( kp + 36 )[1] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[1] )] ^
388 rijndael_dec_il_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
389 rijndael_dec_il_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
390 rijndael_dec_il_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
391 b0[2] = ( kp + 36 )[2] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[2] )] ^
392 rijndael_dec_il_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
393 rijndael_dec_il_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
394 rijndael_dec_il_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
395 b0[3] = ( kp + 36 )[3] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[3] )] ^
396 rijndael_dec_il_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
397 rijndael_dec_il_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
398 rijndael_dec_il_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
399 }
400 *( unsigned long * )out_blk = ( b0[0] );
401 *( unsigned long * )( out_blk + 4 ) = ( b0[1] );
402 *( unsigned long * )( out_blk + 8 ) = ( b0[2] );
403 *( unsigned long * )( out_blk + 12 ) = ( b0[3] );
404 return aes_good;
405}
406
diff --git a/all_pairs/source/rijndael_dec/aes.h b/all_pairs/source/rijndael_dec/aes.h
new file mode 100644
index 0000000..69bf3d3
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/aes.h
@@ -0,0 +1,165 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 1. FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of
23 128 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27
28 2. THE CIPHER INTERFACE
29
30 byte (an unsigned 8-bit type)
31 word (an unsigned 32-bit type)
32 aes_ret: (a signed 16 bit type for function return values)
33 aes_good (value != 0, a good return)
34 aes_bad (value == 0, an error return)
35 enum aes_key: (encryption direction)
36 enc (set key for encryption)
37 dec (set key for decryption)
38 both (set key for both)
39 class or struct aes (structure for context)
40
41 C subroutine calls:
42
43 aes_ret set_blk(const word block_length, aes *cx) (variable block size)
44 aes_ret set_key(const byte key[], const word key_length,
45 const enum aes_key direction, aes *cx)
46 aes_ret encrypt(const byte input_blk[], byte output_blk[], const aes *cx)
47 aes_ret decrypt(const byte input_blk[], byte output_blk[], const aes *cx)
48
49 IMPORTANT NOTE: If you are using this C interface and your compiler does
50 not set the memory used for objects to zero before use, you will need to
51 ensure that cx.mode is set to zero before using the C subroutine calls.
52
53 The block length inputs to set_block and set_key are in numbers of
54 BYTES, not bits. The calls to subroutines must be made in the above
55 order but multiple calls can be made without repeating earlier calls
56 if their parameters have not changed. If the cipher block length is
57 variable but set_blk has not been called before cipher operations a
58 value of 16 is assumed (that is, the AES block size). In contrast to
59 earlier versions the block and key length parameters are now checked
60 for correctness and the encryption and decryption routines check to
61 ensure that an appropriate key has been set before they are called.
62
63*/
64
65#ifndef _AES_H
66#define _AES_H
67
68/* The only supported block size for the benchmark is 16 */
69#define BLOCK_SIZE 16
70
71/*
72 The number of key schedule words for different block and key lengths
73 (allowing for the method of computation which requires the length to
74 be a multiple of the key length):
75
76 Key Schedule key length (bytes)
77 Length 16 20 24 28 32
78 ---------------------
79 block 16 | 44 60 54 56 64
80 length 20 | 60 60 66 70 80
81 (bytes) 24 | 80 80 78 84 96
82 28 | 100 100 102 98 112
83 32 | 120 120 120 126 120
84
85 Rcon Table key length (bytes)
86 Length 16 20 24 28 32
87 ---------------------
88 block 16 | 10 9 8 7 7
89 length 20 | 14 11 10 9 9
90 (bytes) 24 | 19 15 12 11 11
91 28 | 24 19 16 13 13
92 32 | 29 23 19 17 14
93
94 The following values assume that the key length will be variable and may
95 be of maximum length (32 bytes).
96
97 Nk = number_of_key_bytes / 4
98 Nc = number_of_columns_in_state / 4
99 Nr = number of encryption/decryption rounds
100 Rc = number of elements in rcon table
101 Ks = number of 32-bit words in key schedule
102*/
103
104#define Nr(Nk,Nc) ((Nk > Nc ? Nk : Nc) + 6)
105#define Rc(Nk,Nc) ((Nb * (Nr(Nk,Nc) + 1) - 1) / Nk)
106#define Ks(Nk,Nc) (Nk * (Rc(Nk,Nc) + 1))
107
108#define RC_LENGTH 5 * BLOCK_SIZE / 4 - (BLOCK_SIZE == 16 ? 10 : 11)
109#define KS_LENGTH 4 * BLOCK_SIZE
110
111/* End of configuration options, but see also aes.c */
112
113typedef unsigned char byte; /* must be an 8-bit storage unit */
114typedef unsigned long word; /* must be a 32-bit storage unit */
115typedef short aes_ret; /* function return value */
116
117#define aes_bad 0
118#define aes_good 1
119
120/*
121 upr(x,n): rotates bytes within words by n positions, moving bytes
122 to higher index positions with wrap around into low positions
123 ups(x,n): moves bytes by n positions to higher index positions in
124 words but without wrap around
125 bval(x,n): extracts a byte from a word
126*/
127
128#define upr(x,n) (((x) << 8 * (n)) | ((x) >> (32 - 8 * (n))))
129#define ups(x,n) ((x) << 8 * (n))
130#define bval(x,n) ((byte)((x) >> 8 * (n)))
131#define byte_swap(x) (upr(x,1) & 0x00ff00ff | upr(x,3) & 0xff00ff00)
132#define bytes2word(b0, b1, b2, b3) ((word)(b3) << 24 | (word)(b2) << 16 | \
133 (word)(b1) << 8 | (b0))
134
135#define word_in(x) *(word*)(x)
136#define word_out(x,v) *(word*)(x) = (v)
137
138enum aes_const { Nrow = 4, /* the number of rows in the cipher state */
139 Mcol = 8, /* maximum number of columns in the state */
140 Ncol = BLOCK_SIZE / 4,
141 Shr0 = 0, /* the cyclic shift values for rows 0, 1, 2 & 3 */
142 Shr1 = 1,
143 Shr2 = BLOCK_SIZE == 32 ? 3 : 2,
144 Shr3 = BLOCK_SIZE == 32 ? 4 : 3
145 };
146
147enum aes_key { enc = 1, /* set if encryption is needed */
148 dec = 2, /* set if decryption is needed */
149 both = 3 /* set if both are needed */
150 };
151
152struct aes {
153 word Nkey; /* the number of words in the key input block */
154 word Nrnd; /* the number of cipher rounds */
155 word e_key[KS_LENGTH]; /* the encryption key schedule */
156 word d_key[KS_LENGTH]; /* the decryption key schedule */
157 byte mode; /* encrypt, decrypt or both */
158};
159
160aes_ret rijndael_dec_set_key( byte key[], const word n_bytes,
161 const enum aes_key f, struct aes *cx );
162aes_ret rijndael_dec_decrypt( const byte in_blk[], byte out_blk[],
163 const struct aes *cx );
164
165#endif
diff --git a/all_pairs/source/rijndael_dec/aestab.h b/all_pairs/source/rijndael_dec/aestab.h
new file mode 100644
index 0000000..c42702b
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/aestab.h
@@ -0,0 +1,379 @@
1
2/*
3 -----------------------------------------------------------------------
4 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
5
6 TERMS
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions
10 are met:
11 1. Redistributions of source code must retain the above copyright
12 notice, this list of conditions and the following disclaimer.
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
16
17 This software is provided 'as is' with no guarantees of correctness or
18 fitness for purpose.
19 -----------------------------------------------------------------------
20*/
21
22/*
23 Used to ensure table is generated in the right format
24 depending on the internal byte order required.
25*/
26
27#define w0(p) 0x000000##p
28
29/*
30 Number of elements required in this table for different
31 block and key lengths is:
32
33 Rcon Table key length (bytes)
34 Length 16 20 24 28 32
35 ---------------------
36 block 16 | 10 9 8 7 7
37 length 20 | 14 11 10 9 9
38 (bytes) 24 | 19 15 12 11 11
39 28 | 24 19 16 13 13
40 32 | 29 23 19 17 14
41
42 this table can be a table of bytes if the key schedule
43 code is adjusted accordingly
44*/
45
46const word rijndael_dec_rcon_tab[29] = {
47 w0( 01 ), w0( 02 ), w0( 04 ), w0( 08 ),
48 w0( 10 ), w0( 20 ), w0( 40 ), w0( 80 ),
49 w0( 1b ), w0( 36 ), w0( 6c ), w0( d8 ),
50 w0( ab ), w0( 4d ), w0( 9a ), w0( 2f ),
51 w0( 5e ), w0( bc ), w0( 63 ), w0( c6 ),
52 w0( 97 ), w0( 35 ), w0( 6a ), w0( d4 ),
53 w0( b3 ), w0( 7d ), w0( fa ), w0( ef ),
54 w0( c5 )
55};
56
57#undef w0
58
59/*
60 used to ensure table is generated in the right format
61 depending on the internal byte order required
62*/
63
64#define r0(p,q,r,s) 0x##p##q##r##s
65#define r1(p,q,r,s) 0x##q##r##s##p
66#define r2(p,q,r,s) 0x##r##s##p##q
67#define r3(p,q,r,s) 0x##s##p##q##r
68#define w0(p) 0x000000##p
69#define w1(p) 0x0000##p##00
70#define w2(p) 0x00##p##0000
71#define w3(p) 0x##p##000000
72
73/*
74 used to ensure table is generated in the right format
75 depending on the internal byte order required
76*/
77
78/* data for forward tables (other than last round) */
79
80#define f_table \
81 r(a5,63,63,c6), r(84,7c,7c,f8), r(99,77,77,ee), r(8d,7b,7b,f6), \
82 r(0d,f2,f2,ff), r(bd,6b,6b,d6), r(b1,6f,6f,de), r(54,c5,c5,91), \
83 r(50,30,30,60), r(03,01,01,02), r(a9,67,67,ce), r(7d,2b,2b,56), \
84 r(19,fe,fe,e7), r(62,d7,d7,b5), r(e6,ab,ab,4d), r(9a,76,76,ec), \
85 r(45,ca,ca,8f), r(9d,82,82,1f), r(40,c9,c9,89), r(87,7d,7d,fa), \
86 r(15,fa,fa,ef), r(eb,59,59,b2), r(c9,47,47,8e), r(0b,f0,f0,fb), \
87 r(ec,ad,ad,41), r(67,d4,d4,b3), r(fd,a2,a2,5f), r(ea,af,af,45), \
88 r(bf,9c,9c,23), r(f7,a4,a4,53), r(96,72,72,e4), r(5b,c0,c0,9b), \
89 r(c2,b7,b7,75), r(1c,fd,fd,e1), r(ae,93,93,3d), r(6a,26,26,4c), \
90 r(5a,36,36,6c), r(41,3f,3f,7e), r(02,f7,f7,f5), r(4f,cc,cc,83), \
91 r(5c,34,34,68), r(f4,a5,a5,51), r(34,e5,e5,d1), r(08,f1,f1,f9), \
92 r(93,71,71,e2), r(73,d8,d8,ab), r(53,31,31,62), r(3f,15,15,2a), \
93 r(0c,04,04,08), r(52,c7,c7,95), r(65,23,23,46), r(5e,c3,c3,9d), \
94 r(28,18,18,30), r(a1,96,96,37), r(0f,05,05,0a), r(b5,9a,9a,2f), \
95 r(09,07,07,0e), r(36,12,12,24), r(9b,80,80,1b), r(3d,e2,e2,df), \
96 r(26,eb,eb,cd), r(69,27,27,4e), r(cd,b2,b2,7f), r(9f,75,75,ea), \
97 r(1b,09,09,12), r(9e,83,83,1d), r(74,2c,2c,58), r(2e,1a,1a,34), \
98 r(2d,1b,1b,36), r(b2,6e,6e,dc), r(ee,5a,5a,b4), r(fb,a0,a0,5b), \
99 r(f6,52,52,a4), r(4d,3b,3b,76), r(61,d6,d6,b7), r(ce,b3,b3,7d), \
100 r(7b,29,29,52), r(3e,e3,e3,dd), r(71,2f,2f,5e), r(97,84,84,13), \
101 r(f5,53,53,a6), r(68,d1,d1,b9), r(00,00,00,00), r(2c,ed,ed,c1), \
102 r(60,20,20,40), r(1f,fc,fc,e3), r(c8,b1,b1,79), r(ed,5b,5b,b6), \
103 r(be,6a,6a,d4), r(46,cb,cb,8d), r(d9,be,be,67), r(4b,39,39,72), \
104 r(de,4a,4a,94), r(d4,4c,4c,98), r(e8,58,58,b0), r(4a,cf,cf,85), \
105 r(6b,d0,d0,bb), r(2a,ef,ef,c5), r(e5,aa,aa,4f), r(16,fb,fb,ed), \
106 r(c5,43,43,86), r(d7,4d,4d,9a), r(55,33,33,66), r(94,85,85,11), \
107 r(cf,45,45,8a), r(10,f9,f9,e9), r(06,02,02,04), r(81,7f,7f,fe), \
108 r(f0,50,50,a0), r(44,3c,3c,78), r(ba,9f,9f,25), r(e3,a8,a8,4b), \
109 r(f3,51,51,a2), r(fe,a3,a3,5d), r(c0,40,40,80), r(8a,8f,8f,05), \
110 r(ad,92,92,3f), r(bc,9d,9d,21), r(48,38,38,70), r(04,f5,f5,f1), \
111 r(df,bc,bc,63), r(c1,b6,b6,77), r(75,da,da,af), r(63,21,21,42), \
112 r(30,10,10,20), r(1a,ff,ff,e5), r(0e,f3,f3,fd), r(6d,d2,d2,bf), \
113 r(4c,cd,cd,81), r(14,0c,0c,18), r(35,13,13,26), r(2f,ec,ec,c3), \
114 r(e1,5f,5f,be), r(a2,97,97,35), r(cc,44,44,88), r(39,17,17,2e), \
115 r(57,c4,c4,93), r(f2,a7,a7,55), r(82,7e,7e,fc), r(47,3d,3d,7a), \
116 r(ac,64,64,c8), r(e7,5d,5d,ba), r(2b,19,19,32), r(95,73,73,e6), \
117 r(a0,60,60,c0), r(98,81,81,19), r(d1,4f,4f,9e), r(7f,dc,dc,a3), \
118 r(66,22,22,44), r(7e,2a,2a,54), r(ab,90,90,3b), r(83,88,88,0b), \
119 r(ca,46,46,8c), r(29,ee,ee,c7), r(d3,b8,b8,6b), r(3c,14,14,28), \
120 r(79,de,de,a7), r(e2,5e,5e,bc), r(1d,0b,0b,16), r(76,db,db,ad), \
121 r(3b,e0,e0,db), r(56,32,32,64), r(4e,3a,3a,74), r(1e,0a,0a,14), \
122 r(db,49,49,92), r(0a,06,06,0c), r(6c,24,24,48), r(e4,5c,5c,b8), \
123 r(5d,c2,c2,9f), r(6e,d3,d3,bd), r(ef,ac,ac,43), r(a6,62,62,c4), \
124 r(a8,91,91,39), r(a4,95,95,31), r(37,e4,e4,d3), r(8b,79,79,f2), \
125 r(32,e7,e7,d5), r(43,c8,c8,8b), r(59,37,37,6e), r(b7,6d,6d,da), \
126 r(8c,8d,8d,01), r(64,d5,d5,b1), r(d2,4e,4e,9c), r(e0,a9,a9,49), \
127 r(b4,6c,6c,d8), r(fa,56,56,ac), r(07,f4,f4,f3), r(25,ea,ea,cf), \
128 r(af,65,65,ca), r(8e,7a,7a,f4), r(e9,ae,ae,47), r(18,08,08,10), \
129 r(d5,ba,ba,6f), r(88,78,78,f0), r(6f,25,25,4a), r(72,2e,2e,5c), \
130 r(24,1c,1c,38), r(f1,a6,a6,57), r(c7,b4,b4,73), r(51,c6,c6,97), \
131 r(23,e8,e8,cb), r(7c,dd,dd,a1), r(9c,74,74,e8), r(21,1f,1f,3e), \
132 r(dd,4b,4b,96), r(dc,bd,bd,61), r(86,8b,8b,0d), r(85,8a,8a,0f), \
133 r(90,70,70,e0), r(42,3e,3e,7c), r(c4,b5,b5,71), r(aa,66,66,cc), \
134 r(d8,48,48,90), r(05,03,03,06), r(01,f6,f6,f7), r(12,0e,0e,1c), \
135 r(a3,61,61,c2), r(5f,35,35,6a), r(f9,57,57,ae), r(d0,b9,b9,69), \
136 r(91,86,86,17), r(58,c1,c1,99), r(27,1d,1d,3a), r(b9,9e,9e,27), \
137 r(38,e1,e1,d9), r(13,f8,f8,eb), r(b3,98,98,2b), r(33,11,11,22), \
138 r(bb,69,69,d2), r(70,d9,d9,a9), r(89,8e,8e,07), r(a7,94,94,33), \
139 r(b6,9b,9b,2d), r(22,1e,1e,3c), r(92,87,87,15), r(20,e9,e9,c9), \
140 r(49,ce,ce,87), r(ff,55,55,aa), r(78,28,28,50), r(7a,df,df,a5), \
141 r(8f,8c,8c,03), r(f8,a1,a1,59), r(80,89,89,09), r(17,0d,0d,1a), \
142 r(da,bf,bf,65), r(31,e6,e6,d7), r(c6,42,42,84), r(b8,68,68,d0), \
143 r(c3,41,41,82), r(b0,99,99,29), r(77,2d,2d,5a), r(11,0f,0f,1e), \
144 r(cb,b0,b0,7b), r(fc,54,54,a8), r(d6,bb,bb,6d), r(3a,16,16,2c)
145
146/* data for inverse tables (other than last round) */
147
148#define i_table \
149 r(50,a7,f4,51), r(53,65,41,7e), r(c3,a4,17,1a), r(96,5e,27,3a), \
150 r(cb,6b,ab,3b), r(f1,45,9d,1f), r(ab,58,fa,ac), r(93,03,e3,4b), \
151 r(55,fa,30,20), r(f6,6d,76,ad), r(91,76,cc,88), r(25,4c,02,f5), \
152 r(fc,d7,e5,4f), r(d7,cb,2a,c5), r(80,44,35,26), r(8f,a3,62,b5), \
153 r(49,5a,b1,de), r(67,1b,ba,25), r(98,0e,ea,45), r(e1,c0,fe,5d), \
154 r(02,75,2f,c3), r(12,f0,4c,81), r(a3,97,46,8d), r(c6,f9,d3,6b), \
155 r(e7,5f,8f,03), r(95,9c,92,15), r(eb,7a,6d,bf), r(da,59,52,95), \
156 r(2d,83,be,d4), r(d3,21,74,58), r(29,69,e0,49), r(44,c8,c9,8e), \
157 r(6a,89,c2,75), r(78,79,8e,f4), r(6b,3e,58,99), r(dd,71,b9,27), \
158 r(b6,4f,e1,be), r(17,ad,88,f0), r(66,ac,20,c9), r(b4,3a,ce,7d), \
159 r(18,4a,df,63), r(82,31,1a,e5), r(60,33,51,97), r(45,7f,53,62), \
160 r(e0,77,64,b1), r(84,ae,6b,bb), r(1c,a0,81,fe), r(94,2b,08,f9), \
161 r(58,68,48,70), r(19,fd,45,8f), r(87,6c,de,94), r(b7,f8,7b,52), \
162 r(23,d3,73,ab), r(e2,02,4b,72), r(57,8f,1f,e3), r(2a,ab,55,66), \
163 r(07,28,eb,b2), r(03,c2,b5,2f), r(9a,7b,c5,86), r(a5,08,37,d3), \
164 r(f2,87,28,30), r(b2,a5,bf,23), r(ba,6a,03,02), r(5c,82,16,ed), \
165 r(2b,1c,cf,8a), r(92,b4,79,a7), r(f0,f2,07,f3), r(a1,e2,69,4e), \
166 r(cd,f4,da,65), r(d5,be,05,06), r(1f,62,34,d1), r(8a,fe,a6,c4), \
167 r(9d,53,2e,34), r(a0,55,f3,a2), r(32,e1,8a,05), r(75,eb,f6,a4), \
168 r(39,ec,83,0b), r(aa,ef,60,40), r(06,9f,71,5e), r(51,10,6e,bd), \
169 r(f9,8a,21,3e), r(3d,06,dd,96), r(ae,05,3e,dd), r(46,bd,e6,4d), \
170 r(b5,8d,54,91), r(05,5d,c4,71), r(6f,d4,06,04), r(ff,15,50,60), \
171 r(24,fb,98,19), r(97,e9,bd,d6), r(cc,43,40,89), r(77,9e,d9,67), \
172 r(bd,42,e8,b0), r(88,8b,89,07), r(38,5b,19,e7), r(db,ee,c8,79), \
173 r(47,0a,7c,a1), r(e9,0f,42,7c), r(c9,1e,84,f8), r(00,00,00,00), \
174 r(83,86,80,09), r(48,ed,2b,32), r(ac,70,11,1e), r(4e,72,5a,6c), \
175 r(fb,ff,0e,fd), r(56,38,85,0f), r(1e,d5,ae,3d), r(27,39,2d,36), \
176 r(64,d9,0f,0a), r(21,a6,5c,68), r(d1,54,5b,9b), r(3a,2e,36,24), \
177 r(b1,67,0a,0c), r(0f,e7,57,93), r(d2,96,ee,b4), r(9e,91,9b,1b), \
178 r(4f,c5,c0,80), r(a2,20,dc,61), r(69,4b,77,5a), r(16,1a,12,1c), \
179 r(0a,ba,93,e2), r(e5,2a,a0,c0), r(43,e0,22,3c), r(1d,17,1b,12), \
180 r(0b,0d,09,0e), r(ad,c7,8b,f2), r(b9,a8,b6,2d), r(c8,a9,1e,14), \
181 r(85,19,f1,57), r(4c,07,75,af), r(bb,dd,99,ee), r(fd,60,7f,a3), \
182 r(9f,26,01,f7), r(bc,f5,72,5c), r(c5,3b,66,44), r(34,7e,fb,5b), \
183 r(76,29,43,8b), r(dc,c6,23,cb), r(68,fc,ed,b6), r(63,f1,e4,b8), \
184 r(ca,dc,31,d7), r(10,85,63,42), r(40,22,97,13), r(20,11,c6,84), \
185 r(7d,24,4a,85), r(f8,3d,bb,d2), r(11,32,f9,ae), r(6d,a1,29,c7), \
186 r(4b,2f,9e,1d), r(f3,30,b2,dc), r(ec,52,86,0d), r(d0,e3,c1,77), \
187 r(6c,16,b3,2b), r(99,b9,70,a9), r(fa,48,94,11), r(22,64,e9,47), \
188 r(c4,8c,fc,a8), r(1a,3f,f0,a0), r(d8,2c,7d,56), r(ef,90,33,22), \
189 r(c7,4e,49,87), r(c1,d1,38,d9), r(fe,a2,ca,8c), r(36,0b,d4,98), \
190 r(cf,81,f5,a6), r(28,de,7a,a5), r(26,8e,b7,da), r(a4,bf,ad,3f), \
191 r(e4,9d,3a,2c), r(0d,92,78,50), r(9b,cc,5f,6a), r(62,46,7e,54), \
192 r(c2,13,8d,f6), r(e8,b8,d8,90), r(5e,f7,39,2e), r(f5,af,c3,82), \
193 r(be,80,5d,9f), r(7c,93,d0,69), r(a9,2d,d5,6f), r(b3,12,25,cf), \
194 r(3b,99,ac,c8), r(a7,7d,18,10), r(6e,63,9c,e8), r(7b,bb,3b,db), \
195 r(09,78,26,cd), r(f4,18,59,6e), r(01,b7,9a,ec), r(a8,9a,4f,83), \
196 r(65,6e,95,e6), r(7e,e6,ff,aa), r(08,cf,bc,21), r(e6,e8,15,ef), \
197 r(d9,9b,e7,ba), r(ce,36,6f,4a), r(d4,09,9f,ea), r(d6,7c,b0,29), \
198 r(af,b2,a4,31), r(31,23,3f,2a), r(30,94,a5,c6), r(c0,66,a2,35), \
199 r(37,bc,4e,74), r(a6,ca,82,fc), r(b0,d0,90,e0), r(15,d8,a7,33), \
200 r(4a,98,04,f1), r(f7,da,ec,41), r(0e,50,cd,7f), r(2f,f6,91,17), \
201 r(8d,d6,4d,76), r(4d,b0,ef,43), r(54,4d,aa,cc), r(df,04,96,e4), \
202 r(e3,b5,d1,9e), r(1b,88,6a,4c), r(b8,1f,2c,c1), r(7f,51,65,46), \
203 r(04,ea,5e,9d), r(5d,35,8c,01), r(73,74,87,fa), r(2e,41,0b,fb), \
204 r(5a,1d,67,b3), r(52,d2,db,92), r(33,56,10,e9), r(13,47,d6,6d), \
205 r(8c,61,d7,9a), r(7a,0c,a1,37), r(8e,14,f8,59), r(89,3c,13,eb), \
206 r(ee,27,a9,ce), r(35,c9,61,b7), r(ed,e5,1c,e1), r(3c,b1,47,7a), \
207 r(59,df,d2,9c), r(3f,73,f2,55), r(79,ce,14,18), r(bf,37,c7,73), \
208 r(ea,cd,f7,53), r(5b,aa,fd,5f), r(14,6f,3d,df), r(86,db,44,78), \
209 r(81,f3,af,ca), r(3e,c4,68,b9), r(2c,34,24,38), r(5f,40,a3,c2), \
210 r(72,c3,1d,16), r(0c,25,e2,bc), r(8b,49,3c,28), r(41,95,0d,ff), \
211 r(71,01,a8,39), r(de,b3,0c,08), r(9c,e4,b4,d8), r(90,c1,56,64), \
212 r(61,84,cb,7b), r(70,b6,32,d5), r(74,5c,6c,48), r(42,57,b8,d0)
213
214/* generate the required tables in the desired endian format */
215
216#undef r
217#define r r0
218const word rijndael_dec_it_tab[4][256] = {
219 { i_table },
220#undef r
221#define r r1
222 { i_table },
223#undef r
224#define r r2
225 { i_table },
226#undef r
227#define r r3
228 { i_table }
229};
230
231/* data for inverse tables (last round) */
232
233#define li_table \
234 w(52), w(09), w(6a), w(d5), w(30), w(36), w(a5), w(38), \
235 w(bf), w(40), w(a3), w(9e), w(81), w(f3), w(d7), w(fb), \
236 w(7c), w(e3), w(39), w(82), w(9b), w(2f), w(ff), w(87), \
237 w(34), w(8e), w(43), w(44), w(c4), w(de), w(e9), w(cb), \
238 w(54), w(7b), w(94), w(32), w(a6), w(c2), w(23), w(3d), \
239 w(ee), w(4c), w(95), w(0b), w(42), w(fa), w(c3), w(4e), \
240 w(08), w(2e), w(a1), w(66), w(28), w(d9), w(24), w(b2), \
241 w(76), w(5b), w(a2), w(49), w(6d), w(8b), w(d1), w(25), \
242 w(72), w(f8), w(f6), w(64), w(86), w(68), w(98), w(16), \
243 w(d4), w(a4), w(5c), w(cc), w(5d), w(65), w(b6), w(92), \
244 w(6c), w(70), w(48), w(50), w(fd), w(ed), w(b9), w(da), \
245 w(5e), w(15), w(46), w(57), w(a7), w(8d), w(9d), w(84), \
246 w(90), w(d8), w(ab), w(00), w(8c), w(bc), w(d3), w(0a), \
247 w(f7), w(e4), w(58), w(05), w(b8), w(b3), w(45), w(06), \
248 w(d0), w(2c), w(1e), w(8f), w(ca), w(3f), w(0f), w(02), \
249 w(c1), w(af), w(bd), w(03), w(01), w(13), w(8a), w(6b), \
250 w(3a), w(91), w(11), w(41), w(4f), w(67), w(dc), w(ea), \
251 w(97), w(f2), w(cf), w(ce), w(f0), w(b4), w(e6), w(73), \
252 w(96), w(ac), w(74), w(22), w(e7), w(ad), w(35), w(85), \
253 w(e2), w(f9), w(37), w(e8), w(1c), w(75), w(df), w(6e), \
254 w(47), w(f1), w(1a), w(71), w(1d), w(29), w(c5), w(89), \
255 w(6f), w(b7), w(62), w(0e), w(aa), w(18), w(be), w(1b), \
256 w(fc), w(56), w(3e), w(4b), w(c6), w(d2), w(79), w(20), \
257 w(9a), w(db), w(c0), w(fe), w(78), w(cd), w(5a), w(f4), \
258 w(1f), w(dd), w(a8), w(33), w(88), w(07), w(c7), w(31), \
259 w(b1), w(12), w(10), w(59), w(27), w(80), w(ec), w(5f), \
260 w(60), w(51), w(7f), w(a9), w(19), w(b5), w(4a), w(0d), \
261 w(2d), w(e5), w(7a), w(9f), w(93), w(c9), w(9c), w(ef), \
262 w(a0), w(e0), w(3b), w(4d), w(ae), w(2a), w(f5), w(b0), \
263 w(c8), w(eb), w(bb), w(3c), w(83), w(53), w(99), w(61), \
264 w(17), w(2b), w(04), w(7e), w(ba), w(77), w(d6), w(26), \
265 w(e1), w(69), w(14), w(63), w(55), w(21), w(0c), w(7d),
266
267/* generate the required tables in the desired endian format */
268
269#undef r
270#define r(p,q,r,s) w0(q)
271const word rijndael_dec_fl_tab[4][256] = {
272 { f_table },
273#undef r
274#define r(p,q,r,s) w1(q)
275 { f_table },
276#undef r
277#define r(p,q,r,s) w2(q)
278 { f_table },
279#undef r
280#define r(p,q,r,s) w3(q)
281 { f_table }
282};
283
284#undef w
285#define w w0
286const word rijndael_dec_il_tab[4][256] = {
287 { li_table },
288#undef w
289#define w w1
290 { li_table },
291#undef w
292#define w w2
293 { li_table },
294#undef w
295#define w w3
296 { li_table }
297};
298
299#define m_table \
300 r(00,00,00,00), r(0b,0d,09,0e), r(16,1a,12,1c), r(1d,17,1b,12), \
301 r(2c,34,24,38), r(27,39,2d,36), r(3a,2e,36,24), r(31,23,3f,2a), \
302 r(58,68,48,70), r(53,65,41,7e), r(4e,72,5a,6c), r(45,7f,53,62), \
303 r(74,5c,6c,48), r(7f,51,65,46), r(62,46,7e,54), r(69,4b,77,5a), \
304 r(b0,d0,90,e0), r(bb,dd,99,ee), r(a6,ca,82,fc), r(ad,c7,8b,f2), \
305 r(9c,e4,b4,d8), r(97,e9,bd,d6), r(8a,fe,a6,c4), r(81,f3,af,ca), \
306 r(e8,b8,d8,90), r(e3,b5,d1,9e), r(fe,a2,ca,8c), r(f5,af,c3,82), \
307 r(c4,8c,fc,a8), r(cf,81,f5,a6), r(d2,96,ee,b4), r(d9,9b,e7,ba), \
308 r(7b,bb,3b,db), r(70,b6,32,d5), r(6d,a1,29,c7), r(66,ac,20,c9), \
309 r(57,8f,1f,e3), r(5c,82,16,ed), r(41,95,0d,ff), r(4a,98,04,f1), \
310 r(23,d3,73,ab), r(28,de,7a,a5), r(35,c9,61,b7), r(3e,c4,68,b9), \
311 r(0f,e7,57,93), r(04,ea,5e,9d), r(19,fd,45,8f), r(12,f0,4c,81), \
312 r(cb,6b,ab,3b), r(c0,66,a2,35), r(dd,71,b9,27), r(d6,7c,b0,29), \
313 r(e7,5f,8f,03), r(ec,52,86,0d), r(f1,45,9d,1f), r(fa,48,94,11), \
314 r(93,03,e3,4b), r(98,0e,ea,45), r(85,19,f1,57), r(8e,14,f8,59), \
315 r(bf,37,c7,73), r(b4,3a,ce,7d), r(a9,2d,d5,6f), r(a2,20,dc,61), \
316 r(f6,6d,76,ad), r(fd,60,7f,a3), r(e0,77,64,b1), r(eb,7a,6d,bf), \
317 r(da,59,52,95), r(d1,54,5b,9b), r(cc,43,40,89), r(c7,4e,49,87), \
318 r(ae,05,3e,dd), r(a5,08,37,d3), r(b8,1f,2c,c1), r(b3,12,25,cf), \
319 r(82,31,1a,e5), r(89,3c,13,eb), r(94,2b,08,f9), r(9f,26,01,f7), \
320 r(46,bd,e6,4d), r(4d,b0,ef,43), r(50,a7,f4,51), r(5b,aa,fd,5f), \
321 r(6a,89,c2,75), r(61,84,cb,7b), r(7c,93,d0,69), r(77,9e,d9,67), \
322 r(1e,d5,ae,3d), r(15,d8,a7,33), r(08,cf,bc,21), r(03,c2,b5,2f), \
323 r(32,e1,8a,05), r(39,ec,83,0b), r(24,fb,98,19), r(2f,f6,91,17), \
324 r(8d,d6,4d,76), r(86,db,44,78), r(9b,cc,5f,6a), r(90,c1,56,64), \
325 r(a1,e2,69,4e), r(aa,ef,60,40), r(b7,f8,7b,52), r(bc,f5,72,5c), \
326 r(d5,be,05,06), r(de,b3,0c,08), r(c3,a4,17,1a), r(c8,a9,1e,14), \
327 r(f9,8a,21,3e), r(f2,87,28,30), r(ef,90,33,22), r(e4,9d,3a,2c), \
328 r(3d,06,dd,96), r(36,0b,d4,98), r(2b,1c,cf,8a), r(20,11,c6,84), \
329 r(11,32,f9,ae), r(1a,3f,f0,a0), r(07,28,eb,b2), r(0c,25,e2,bc), \
330 r(65,6e,95,e6), r(6e,63,9c,e8), r(73,74,87,fa), r(78,79,8e,f4), \
331 r(49,5a,b1,de), r(42,57,b8,d0), r(5f,40,a3,c2), r(54,4d,aa,cc), \
332 r(f7,da,ec,41), r(fc,d7,e5,4f), r(e1,c0,fe,5d), r(ea,cd,f7,53), \
333 r(db,ee,c8,79), r(d0,e3,c1,77), r(cd,f4,da,65), r(c6,f9,d3,6b), \
334 r(af,b2,a4,31), r(a4,bf,ad,3f), r(b9,a8,b6,2d), r(b2,a5,bf,23), \
335 r(83,86,80,09), r(88,8b,89,07), r(95,9c,92,15), r(9e,91,9b,1b), \
336 r(47,0a,7c,a1), r(4c,07,75,af), r(51,10,6e,bd), r(5a,1d,67,b3), \
337 r(6b,3e,58,99), r(60,33,51,97), r(7d,24,4a,85), r(76,29,43,8b), \
338 r(1f,62,34,d1), r(14,6f,3d,df), r(09,78,26,cd), r(02,75,2f,c3), \
339 r(33,56,10,e9), r(38,5b,19,e7), r(25,4c,02,f5), r(2e,41,0b,fb), \
340 r(8c,61,d7,9a), r(87,6c,de,94), r(9a,7b,c5,86), r(91,76,cc,88), \
341 r(a0,55,f3,a2), r(ab,58,fa,ac), r(b6,4f,e1,be), r(bd,42,e8,b0), \
342 r(d4,09,9f,ea), r(df,04,96,e4), r(c2,13,8d,f6), r(c9,1e,84,f8), \
343 r(f8,3d,bb,d2), r(f3,30,b2,dc), r(ee,27,a9,ce), r(e5,2a,a0,c0), \
344 r(3c,b1,47,7a), r(37,bc,4e,74), r(2a,ab,55,66), r(21,a6,5c,68), \
345 r(10,85,63,42), r(1b,88,6a,4c), r(06,9f,71,5e), r(0d,92,78,50), \
346 r(64,d9,0f,0a), r(6f,d4,06,04), r(72,c3,1d,16), r(79,ce,14,18), \
347 r(48,ed,2b,32), r(43,e0,22,3c), r(5e,f7,39,2e), r(55,fa,30,20), \
348 r(01,b7,9a,ec), r(0a,ba,93,e2), r(17,ad,88,f0), r(1c,a0,81,fe), \
349 r(2d,83,be,d4), r(26,8e,b7,da), r(3b,99,ac,c8), r(30,94,a5,c6), \
350 r(59,df,d2,9c), r(52,d2,db,92), r(4f,c5,c0,80), r(44,c8,c9,8e), \
351 r(75,eb,f6,a4), r(7e,e6,ff,aa), r(63,f1,e4,b8), r(68,fc,ed,b6), \
352 r(b1,67,0a,0c), r(ba,6a,03,02), r(a7,7d,18,10), r(ac,70,11,1e), \
353 r(9d,53,2e,34), r(96,5e,27,3a), r(8b,49,3c,28), r(80,44,35,26), \
354 r(e9,0f,42,7c), r(e2,02,4b,72), r(ff,15,50,60), r(f4,18,59,6e), \
355 r(c5,3b,66,44), r(ce,36,6f,4a), r(d3,21,74,58), r(d8,2c,7d,56), \
356 r(7a,0c,a1,37), r(71,01,a8,39), r(6c,16,b3,2b), r(67,1b,ba,25), \
357 r(56,38,85,0f), r(5d,35,8c,01), r(40,22,97,13), r(4b,2f,9e,1d), \
358 r(22,64,e9,47), r(29,69,e0,49), r(34,7e,fb,5b), r(3f,73,f2,55), \
359 r(0e,50,cd,7f), r(05,5d,c4,71), r(18,4a,df,63), r(13,47,d6,6d), \
360 r(ca,dc,31,d7), r(c1,d1,38,d9), r(dc,c6,23,cb), r(d7,cb,2a,c5), \
361 r(e6,e8,15,ef), r(ed,e5,1c,e1), r(f0,f2,07,f3), r(fb,ff,0e,fd), \
362 r(92,b4,79,a7), r(99,b9,70,a9), r(84,ae,6b,bb), r(8f,a3,62,b5), \
363 r(be,80,5d,9f), r(b5,8d,54,91), r(a8,9a,4f,83), r(a3,97,46,8d)
364
365#undef r
366#define r r0
367
368const word rijndael_dec_im_tab[4][256] = {
369 { m_table },
370#undef r
371#define r r1
372 { m_table },
373#undef r
374#define r r2
375 { m_table },
376#undef r
377#define r r3
378 { m_table }
379};
diff --git a/all_pairs/source/rijndael_dec/input_small_enc.c b/all_pairs/source/rijndael_dec/input_small_enc.c
new file mode 100644
index 0000000..2a881a9
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/input_small_enc.c
@@ -0,0 +1,2051 @@
1unsigned char rijndael_dec_data[] = {
2 96, 83, 127, 28, 212, 92, 146, 102, 38, 17, 193, 142, 95, 217, 184, 105,
3 79, 112, 144, 112, 44, 202, 141, 48, 181, 177, 82, 92, 208, 250, 216, 152,
4 41, 208, 7, 232, 238, 116, 134, 238, 230, 190, 239, 195, 235, 80, 125, 51,
5 251, 39, 7, 100, 213, 190, 189, 81, 241, 49, 215, 254, 253, 203, 13, 164,
6 175, 244, 25, 111, 226, 225, 176, 96, 58, 165, 32, 243, 68, 205, 209, 242,
7 186, 229, 167, 155, 238, 105, 120, 173, 246, 72, 29, 96, 71, 169, 83, 154,
8 226, 129, 236, 52, 243, 159, 61, 71, 20, 119, 245, 196, 25, 203, 11, 10,
9 37, 163, 139, 180, 250, 191, 138, 99, 78, 192, 73, 186, 22, 12, 119, 151,
10 185, 155, 195, 54, 73, 207, 108, 170, 112, 237, 100, 165, 219, 223, 23, 179,
11 124, 172, 52, 22, 143, 57, 132, 60, 176, 218, 11, 86, 89, 59, 254, 84,
12 180, 76, 120, 174, 17, 214, 88, 48, 240, 12, 56, 93, 136, 156, 75, 176,
13 30, 43, 4, 107, 30, 210, 26, 183, 235, 39, 35, 205, 139, 80, 249, 182,
14 15, 91, 210, 234, 47, 67, 64, 234, 148, 108, 240, 242, 32, 11, 48, 199,
15 117, 31, 149, 30, 97, 149, 241, 50, 177, 166, 127, 31, 135, 115, 240, 77,
16 198, 88, 108, 246, 108, 148, 158, 89, 173, 233, 252, 95, 51, 42, 218, 54,
17 28, 143, 203, 164, 74, 147, 55, 108, 225, 222, 87, 161, 243, 35, 179, 130,
18 29, 70, 225, 178, 148, 152, 247, 167, 21, 245, 84, 139, 3, 228, 221, 25,
19 53, 36, 121, 29, 204, 35, 1, 46, 26, 8, 237, 102, 231, 252, 176, 88,
20 24, 110, 255, 163, 86, 64, 117, 68, 178, 73, 219, 201, 24, 155, 76, 255,
21 253, 199, 165, 95, 246, 179, 15, 47, 203, 81, 92, 231, 246, 247, 111, 58,
22 82, 222, 193, 24, 37, 164, 161, 8, 169, 172, 223, 111, 186, 72, 160, 116,
23 242, 8, 192, 178, 224, 177, 228, 42, 102, 206, 237, 52, 143, 16, 150, 143,
24 108, 3, 88, 81, 199, 49, 110, 220, 5, 89, 244, 227, 27, 226, 101, 9,
25 238, 0, 206, 228, 254, 19, 189, 240, 159, 29, 46, 2, 206, 184, 205, 228,
26 144, 241, 88, 78, 156, 23, 44, 200, 99, 146, 179, 96, 1, 143, 87, 57,
27 39, 75, 174, 32, 190, 125, 152, 183, 46, 39, 136, 88, 240, 110, 104, 70,
28 253, 29, 110, 113, 235, 123, 56, 60, 243, 238, 246, 113, 11, 18, 246, 108,
29 95, 238, 177, 43, 3, 112, 121, 161, 196, 204, 211, 171, 197, 41, 249, 71,
30 194, 153, 82, 28, 10, 28, 12, 241, 212, 90, 124, 236, 171, 54, 35, 226,
31 152, 246, 241, 74, 139, 133, 241, 76, 183, 197, 232, 250, 54, 202, 11, 10,
32 203, 30, 169, 138, 110, 252, 62, 172, 6, 241, 81, 181, 87, 177, 128, 221,
33 111, 133, 94, 251, 184, 54, 92, 242, 28, 112, 138, 116, 32, 164, 158, 59,
34 51, 30, 155, 126, 196, 117, 233, 117, 92, 74, 4, 72, 19, 237, 248, 142,
35 184, 175, 126, 203, 4, 210, 70, 40, 105, 16, 36, 42, 118, 110, 4, 180,
36 208, 52, 232, 230, 107, 154, 233, 61, 176, 170, 32, 59, 60, 47, 43, 70,
37 71, 3, 58, 24, 166, 22, 165, 154, 255, 166, 12, 81, 63, 116, 146, 12,
38 5, 6, 133, 240, 110, 253, 209, 15, 71, 179, 93, 203, 58, 138, 5, 90,
39 111, 140, 19, 186, 191, 68, 230, 121, 95, 166, 219, 107, 233, 156, 18, 145,
40 239, 150, 234, 191, 91, 233, 114, 5, 215, 85, 30, 66, 33, 152, 117, 128,
41 236, 189, 201, 203, 10, 184, 198, 249, 61, 27, 144, 102, 246, 191, 54, 129,
42 86, 8, 197, 98, 231, 234, 222, 164, 161, 40, 150, 253, 208, 82, 92, 225,
43 85, 206, 59, 1, 170, 5, 255, 219, 89, 204, 122, 169, 78, 8, 5, 70,
44 75, 128, 80, 176, 16, 214, 253, 176, 255, 191, 91, 89, 126, 155, 128, 195,
45 56, 150, 101, 131, 255, 234, 241, 250, 61, 210, 85, 19, 21, 23, 122, 180,
46 34, 100, 102, 166, 128, 21, 177, 11, 86, 110, 112, 179, 126, 36, 152, 196,
47 62, 185, 186, 20, 91, 35, 85, 148, 168, 68, 145, 245, 170, 25, 190, 237,
48 192, 125, 186, 182, 22, 188, 161, 122, 194, 21, 14, 102, 206, 60, 129, 156,
49 173, 176, 37, 112, 129, 145, 177, 101, 206, 179, 35, 221, 107, 228, 181, 212,
50 52, 253, 241, 145, 121, 128, 68, 118, 78, 66, 166, 78, 176, 62, 217, 243,
51 193, 1, 254, 200, 35, 67, 226, 77, 55, 72, 6, 144, 22, 85, 252, 209,
52 142, 65, 226, 158, 126, 168, 175, 179, 219, 116, 235, 227, 42, 49, 126, 126,
53 215, 200, 126, 0, 39, 247, 161, 217, 26, 228, 232, 113, 53, 151, 34, 223,
54 91, 242, 155, 156, 144, 229, 237, 127, 227, 49, 239, 71, 102, 115, 74, 135,
55 103, 13, 3, 108, 101, 211, 36, 59, 146, 143, 230, 44, 212, 145, 229, 53,
56 108, 175, 42, 131, 113, 123, 30, 28, 149, 153, 117, 233, 76, 33, 148, 110,
57 19, 83, 125, 135, 44, 202, 2, 155, 4, 240, 167, 7, 13, 115, 243, 216,
58 73, 248, 216, 82, 230, 153, 48, 234, 157, 2, 130, 99, 147, 2, 244, 19,
59 125, 30, 39, 148, 49, 134, 140, 240, 128, 230, 171, 24, 53, 245, 54, 72,
60 111, 230, 192, 165, 199, 47, 186, 238, 121, 95, 220, 76, 229, 253, 157, 47,
61 34, 47, 39, 77, 199, 203, 163, 148, 172, 56, 204, 96, 69, 235, 215, 96,
62 92, 139, 92, 49, 73, 228, 70, 221, 18, 84, 167, 179, 201, 239, 71, 64,
63 29, 247, 84, 56, 148, 36, 169, 144, 192, 60, 153, 171, 89, 125, 48, 98,
64 201, 56, 230, 154, 146, 46, 184, 202, 3, 39, 113, 90, 249, 163, 0, 188,
65 233, 10, 216, 17, 159, 42, 134, 57, 70, 24, 33, 63, 8, 67, 85, 7,
66 133, 180, 127, 12, 234, 121, 183, 38, 131, 154, 241, 236, 69, 67, 116, 54,
67 40, 225, 6, 220, 22, 251, 1, 100, 110, 165, 114, 12, 170, 21, 190, 103,
68 242, 171, 216, 66, 30, 3, 214, 137, 231, 172, 61, 8, 249, 198, 113, 181,
69 171, 13, 159, 21, 147, 67, 249, 94, 189, 174, 15, 2, 62, 254, 29, 32,
70 209, 169, 184, 119, 220, 98, 248, 163, 171, 22, 62, 125, 155, 100, 186, 97,
71 163, 245, 70, 216, 246, 1, 11, 83, 41, 100, 64, 52, 99, 184, 151, 99,
72 46, 100, 168, 158, 210, 150, 38, 231, 27, 255, 59, 141, 232, 127, 56, 39,
73 194, 104, 178, 151, 15, 25, 219, 221, 81, 119, 178, 153, 94, 173, 64, 215,
74 128, 132, 163, 159, 214, 254, 181, 194, 113, 144, 141, 103, 17, 108, 178, 59,
75 62, 205, 117, 57, 183, 97, 18, 210, 87, 163, 231, 213, 233, 251, 94, 136,
76 217, 168, 69, 48, 55, 68, 144, 203, 187, 51, 211, 151, 1, 194, 118, 181,
77 154, 103, 186, 87, 43, 128, 215, 79, 101, 175, 60, 221, 158, 189, 94, 194,
78 87, 73, 72, 162, 252, 26, 40, 142, 86, 228, 82, 255, 122, 192, 167, 78,
79 177, 40, 249, 195, 100, 188, 31, 208, 124, 123, 31, 121, 244, 4, 82, 3,
80 132, 15, 2, 29, 186, 76, 106, 109, 158, 114, 25, 212, 74, 64, 255, 43,
81 40, 146, 159, 225, 39, 65, 85, 37, 60, 160, 123, 116, 127, 134, 45, 177,
82 191, 49, 136, 211, 167, 218, 197, 15, 96, 45, 55, 11, 237, 103, 118, 207,
83 0, 211, 25, 143, 19, 93, 114, 90, 105, 253, 88, 140, 207, 56, 150, 0,
84 136, 159, 134, 63, 75, 142, 177, 0, 107, 105, 78, 148, 214, 248, 70, 72,
85 125, 220, 156, 220, 222, 102, 202, 176, 12, 58, 24, 39, 254, 170, 130, 77,
86 203, 193, 162, 56, 162, 57, 76, 153, 170, 112, 94, 0, 220, 58, 58, 40,
87 173, 2, 193, 164, 168, 127, 225, 238, 10, 194, 112, 213, 181, 126, 222, 152,
88 12, 57, 14, 146, 137, 154, 203, 179, 45, 133, 70, 204, 66, 249, 32, 136,
89 145, 0, 221, 224, 10, 1, 202, 139, 145, 247, 72, 254, 32, 169, 121, 167,
90 114, 198, 244, 251, 243, 8, 114, 188, 178, 173, 25, 243, 122, 220, 45, 98,
91 7, 168, 66, 58, 225, 217, 152, 81, 89, 39, 167, 146, 181, 138, 253, 196,
92 145, 4, 72, 9, 14, 137, 155, 32, 217, 64, 4, 173, 220, 66, 114, 21,
93 137, 118, 87, 163, 217, 204, 74, 236, 45, 170, 60, 141, 216, 234, 182, 79,
94 74, 73, 94, 63, 89, 134, 88, 64, 32, 241, 9, 114, 253, 164, 108, 31,
95 27, 42, 172, 7, 102, 213, 153, 83, 1, 152, 136, 224, 248, 70, 112, 15,
96 211, 194, 216, 16, 255, 62, 83, 147, 173, 192, 239, 55, 18, 223, 34, 152,
97 25, 163, 229, 4, 55, 219, 235, 187, 51, 116, 12, 202, 198, 116, 188, 217,
98 91, 30, 11, 9, 13, 222, 120, 16, 93, 99, 56, 129, 27, 133, 155, 120,
99 124, 112, 101, 42, 222, 122, 124, 59, 84, 228, 202, 189, 13, 11, 10, 44,
100 220, 97, 67, 53, 246, 47, 230, 131, 192, 1, 247, 137, 90, 77, 243, 131,
101 2, 130, 93, 183, 117, 102, 69, 191, 27, 87, 103, 218, 157, 124, 17, 209,
102 135, 92, 78, 211, 141, 25, 157, 53, 17, 249, 209, 206, 84, 19, 135, 253,
103 57, 36, 38, 112, 184, 61, 76, 5, 203, 155, 7, 9, 179, 167, 38, 136,
104 189, 40, 19, 183, 132, 81, 135, 167, 48, 74, 186, 249, 144, 193, 150, 73,
105 10, 192, 191, 160, 74, 246, 12, 38, 107, 3, 66, 122, 184, 168, 218, 233,
106 78, 216, 11, 57, 124, 104, 167, 0, 187, 2, 214, 136, 252, 60, 85, 128,
107 128, 31, 70, 197, 211, 180, 216, 75, 212, 163, 168, 15, 174, 44, 194, 231,
108 24, 181, 154, 161, 241, 95, 197, 227, 146, 195, 187, 69, 127, 154, 145, 176,
109 180, 157, 13, 225, 107, 60, 29, 14, 223, 93, 214, 248, 107, 65, 168, 251,
110 231, 46, 34, 203, 76, 20, 206, 125, 80, 25, 196, 60, 213, 51, 238, 73,
111 17, 223, 151, 44, 60, 213, 164, 117, 188, 66, 195, 170, 190, 117, 110, 21,
112 27, 78, 244, 124, 224, 142, 182, 10, 122, 135, 121, 143, 240, 124, 6, 8,
113 22, 15, 3, 137, 12, 19, 11, 62, 212, 205, 3, 202, 189, 157, 141, 68,
114 171, 142, 106, 69, 207, 8, 116, 194, 6, 200, 96, 220, 248, 132, 46, 171,
115 57, 234, 31, 3, 112, 108, 15, 139, 243, 34, 181, 250, 10, 86, 71, 162,
116 167, 85, 177, 57, 166, 80, 41, 253, 128, 28, 127, 220, 149, 27, 29, 41,
117 201, 116, 211, 236, 34, 200, 100, 157, 130, 223, 4, 162, 108, 181, 40, 255,
118 96, 18, 77, 36, 217, 17, 225, 142, 124, 17, 91, 227, 13, 224, 213, 37,
119 115, 216, 93, 149, 103, 105, 152, 190, 207, 54, 74, 226, 78, 133, 200, 252,
120 157, 152, 39, 0, 173, 168, 132, 142, 17, 66, 241, 137, 12, 106, 42, 81,
121 239, 78, 31, 131, 49, 243, 122, 178, 212, 137, 160, 104, 15, 145, 15, 116,
122 103, 141, 94, 40, 127, 180, 174, 96, 222, 182, 226, 168, 174, 113, 228, 156,
123 10, 18, 231, 122, 150, 178, 17, 200, 254, 96, 42, 243, 225, 58, 235, 64,
124 159, 73, 162, 72, 46, 160, 33, 191, 99, 73, 130, 32, 135, 84, 29, 100,
125 232, 75, 110, 180, 226, 11, 143, 127, 79, 246, 48, 148, 229, 211, 204, 72,
126 18, 89, 22, 251, 202, 8, 10, 2, 130, 230, 219, 71, 66, 142, 149, 47,
127 12, 117, 202, 224, 248, 35, 75, 242, 87, 125, 230, 66, 38, 160, 62, 248,
128 213, 32, 166, 83, 220, 230, 0, 1, 147, 51, 128, 110, 20, 16, 43, 142,
129 90, 0, 2, 104, 111, 232, 38, 29, 181, 243, 130, 121, 105, 177, 168, 113,
130 126, 191, 59, 205, 27, 180, 49, 128, 160, 225, 23, 173, 193, 155, 123, 12,
131 173, 72, 139, 63, 23, 232, 138, 235, 39, 179, 158, 95, 103, 192, 13, 242,
132 11, 127, 239, 91, 13, 119, 19, 185, 105, 87, 195, 168, 145, 15, 53, 146,
133 35, 227, 101, 234, 198, 247, 19, 29, 134, 126, 211, 133, 78, 186, 127, 129,
134 181, 115, 133, 62, 166, 133, 128, 225, 101, 98, 146, 175, 110, 113, 171, 117,
135 4, 130, 190, 186, 216, 17, 201, 29, 62, 77, 74, 189, 50, 155, 188, 93,
136 237, 26, 100, 225, 91, 120, 229, 163, 16, 210, 167, 138, 241, 147, 36, 56,
137 12, 100, 33, 55, 232, 200, 118, 3, 222, 31, 72, 167, 91, 45, 133, 62,
138 184, 64, 120, 116, 249, 12, 15, 243, 98, 145, 234, 253, 71, 194, 61, 4,
139 102, 112, 35, 27, 75, 13, 1, 4, 128, 238, 170, 187, 80, 147, 216, 165,
140 147, 248, 250, 241, 69, 106, 233, 227, 22, 153, 120, 138, 113, 83, 104, 154,
141 50, 99, 153, 188, 69, 252, 171, 177, 49, 74, 134, 219, 247, 255, 191, 202,
142 165, 239, 179, 147, 91, 215, 195, 157, 68, 21, 180, 112, 187, 51, 66, 80,
143 205, 100, 35, 78, 59, 92, 175, 87, 224, 170, 237, 223, 224, 83, 182, 199,
144 47, 95, 111, 42, 197, 22, 21, 143, 123, 173, 69, 247, 31, 205, 69, 136,
145 137, 136, 241, 233, 67, 7, 225, 112, 102, 92, 180, 211, 254, 29, 129, 29,
146 21, 188, 44, 95, 57, 122, 17, 196, 213, 33, 56, 23, 88, 236, 185, 35,
147 17, 156, 165, 93, 108, 157, 198, 5, 124, 225, 150, 156, 146, 116, 88, 116,
148 181, 207, 90, 85, 145, 228, 231, 91, 116, 79, 6, 119, 6, 207, 190, 102,
149 72, 242, 2, 253, 79, 92, 88, 189, 28, 57, 28, 101, 199, 134, 124, 215,
150 59, 37, 222, 54, 194, 151, 252, 185, 74, 101, 193, 43, 186, 184, 255, 158,
151 129, 183, 83, 176, 249, 134, 58, 15, 49, 213, 127, 162, 179, 56, 53, 4,
152 114, 112, 29, 84, 246, 109, 46, 153, 97, 30, 208, 98, 234, 155, 104, 158,
153 93, 9, 53, 175, 49, 54, 160, 238, 150, 117, 145, 202, 210, 37, 15, 3,
154 100, 20, 116, 153, 90, 23, 2, 146, 58, 182, 199, 197, 122, 89, 30, 152,
155 241, 105, 97, 115, 131, 111, 4, 235, 217, 213, 144, 218, 217, 201, 141, 113,
156 21, 237, 254, 184, 181, 135, 177, 86, 215, 248, 169, 55, 231, 229, 60, 133,
157 12, 194, 206, 112, 206, 175, 216, 131, 181, 41, 154, 235, 76, 152, 58, 118,
158 111, 32, 220, 219, 253, 198, 18, 227, 71, 129, 197, 227, 96, 155, 66, 0,
159 51, 132, 150, 208, 177, 188, 149, 100, 236, 23, 49, 45, 236, 131, 225, 206,
160 77, 77, 94, 12, 244, 159, 85, 247, 189, 109, 141, 217, 80, 115, 44, 171,
161 138, 68, 128, 147, 244, 213, 43, 187, 135, 126, 156, 158, 199, 61, 180, 112,
162 130, 230, 146, 100, 106, 56, 70, 71, 234, 3, 202, 1, 45, 20, 136, 149,
163 112, 178, 25, 110, 160, 221, 57, 191, 78, 9, 250, 233, 4, 144, 28, 219,
164 200, 203, 227, 218, 229, 108, 59, 221, 141, 0, 122, 121, 65, 156, 204, 19,
165 152, 215, 64, 164, 15, 77, 26, 113, 82, 229, 23, 103, 204, 151, 118, 104,
166 171, 115, 72, 191, 5, 159, 133, 83, 221, 228, 120, 127, 46, 233, 14, 27,
167 216, 31, 63, 179, 224, 226, 121, 29, 62, 47, 199, 67, 60, 240, 85, 175,
168 242, 113, 168, 160, 93, 147, 205, 103, 67, 110, 237, 143, 148, 65, 209, 31,
169 100, 252, 166, 254, 170, 52, 203, 222, 75, 219, 77, 217, 202, 18, 117, 253,
170 92, 29, 205, 115, 53, 255, 251, 150, 164, 72, 146, 6, 101, 161, 127, 50,
171 73, 152, 194, 180, 11, 121, 11, 229, 147, 151, 143, 226, 196, 238, 131, 141,
172 173, 153, 189, 114, 16, 82, 1, 70, 239, 22, 85, 108, 113, 21, 231, 43,
173 6, 228, 54, 94, 200, 186, 190, 143, 117, 156, 22, 30, 9, 64, 25, 8,
174 116, 27, 240, 24, 150, 146, 224, 73, 97, 95, 183, 151, 185, 178, 16, 82,
175 243, 208, 160, 186, 246, 234, 223, 35, 6, 166, 7, 105, 224, 246, 14, 208,
176 1, 70, 244, 221, 238, 235, 86, 81, 136, 40, 99, 104, 89, 22, 194, 40,
177 36, 45, 126, 138, 174, 22, 206, 228, 146, 114, 162, 4, 211, 213, 163, 224,
178 91, 3, 85, 140, 140, 202, 204, 23, 194, 108, 166, 123, 1, 36, 191, 161,
179 38, 228, 65, 249, 235, 26, 156, 83, 68, 199, 239, 109, 1, 203, 198, 25,
180 22, 128, 165, 15, 125, 139, 190, 100, 184, 159, 16, 194, 244, 228, 18, 215,
181 103, 169, 32, 208, 12, 104, 94, 71, 209, 193, 160, 161, 73, 38, 35, 49,
182 202, 29, 193, 120, 100, 98, 219, 44, 27, 224, 222, 226, 105, 153, 17, 252,
183 120, 143, 190, 173, 176, 89, 205, 149, 11, 99, 31, 107, 102, 187, 100, 107,
184 200, 1, 130, 89, 75, 71, 196, 150, 89, 231, 28, 213, 173, 229, 173, 104,
185 156, 123, 227, 163, 65, 230, 167, 67, 242, 143, 224, 224, 161, 249, 205, 140,
186 149, 156, 2, 138, 177, 193, 136, 225, 177, 34, 246, 27, 179, 108, 116, 169,
187 0, 183, 169, 12, 239, 230, 127, 169, 170, 144, 151, 36, 111, 52, 132, 2,
188 15, 237, 209, 133, 254, 241, 184, 232, 116, 11, 221, 210, 64, 96, 18, 30,
189 245, 95, 142, 84, 218, 92, 151, 20, 155, 101, 201, 153, 82, 163, 43, 168,
190 152, 90, 224, 18, 112, 161, 123, 115, 129, 136, 198, 50, 186, 239, 28, 80,
191 91, 20, 73, 6, 150, 187, 56, 54, 200, 67, 26, 62, 0, 229, 42, 210,
192 107, 245, 83, 172, 233, 195, 140, 31, 24, 205, 202, 128, 145, 242, 73, 113,
193 92, 176, 3, 146, 170, 21, 106, 67, 53, 254, 192, 212, 194, 6, 52, 81,
194 163, 236, 63, 95, 164, 91, 60, 20, 9, 201, 74, 143, 55, 110, 76, 61,
195 115, 177, 84, 105, 191, 199, 248, 51, 89, 35, 91, 44, 199, 13, 254, 130,
196 142, 136, 64, 111, 128, 229, 171, 208, 183, 242, 195, 251, 72, 168, 31, 76,
197 89, 102, 122, 181, 57, 110, 17, 196, 31, 136, 185, 196, 118, 100, 188, 100,
198 21, 239, 206, 77, 97, 238, 78, 215, 224, 113, 210, 122, 141, 190, 103, 135,
199 12, 41, 206, 157, 154, 10, 167, 133, 183, 60, 230, 235, 109, 33, 95, 121,
200 34, 206, 1, 149, 114, 4, 252, 42, 17, 93, 191, 144, 133, 226, 101, 215,
201 124, 88, 163, 27, 29, 189, 35, 51, 182, 112, 242, 94, 56, 196, 99, 242,
202 77, 95, 123, 219, 81, 71, 229, 138, 101, 8, 77, 79, 2, 166, 195, 239,
203 148, 221, 188, 20, 170, 26, 215, 139, 42, 171, 153, 219, 107, 191, 90, 185,
204 241, 37, 84, 41, 232, 27, 123, 36, 86, 113, 255, 25, 245, 187, 21, 110,
205 13, 17, 43, 99, 91, 182, 243, 239, 194, 150, 187, 111, 30, 83, 28, 111,
206 249, 159, 212, 187, 184, 177, 12, 234, 107, 211, 32, 118, 132, 10, 145, 19,
207 150, 206, 230, 158, 80, 101, 41, 67, 38, 79, 57, 164, 80, 147, 64, 207,
208 231, 229, 162, 5, 185, 40, 164, 17, 84, 156, 1, 52, 181, 67, 63, 182,
209 25, 68, 55, 167, 230, 125, 225, 234, 125, 79, 102, 35, 54, 2, 12, 145,
210 67, 6, 252, 218, 231, 14, 58, 221, 248, 171, 23, 93, 14, 51, 76, 155,
211 97, 239, 11, 95, 245, 154, 209, 127, 208, 19, 209, 158, 67, 164, 1, 123,
212 230, 90, 236, 148, 77, 210, 240, 27, 154, 16, 146, 19, 107, 106, 141, 94,
213 144, 28, 24, 130, 111, 164, 46, 108, 89, 171, 52, 192, 121, 188, 166, 207,
214 164, 98, 57, 189, 54, 190, 18, 4, 120, 181, 18, 216, 162, 19, 111, 254,
215 71, 171, 194, 79, 73, 122, 9, 115, 63, 61, 88, 117, 234, 203, 250, 167,
216 102, 98, 101, 177, 5, 13, 228, 205, 115, 107, 219, 215, 33, 150, 13, 242,
217 180, 71, 27, 0, 250, 228, 50, 129, 215, 93, 174, 169, 167, 125, 14, 89,
218 130, 195, 127, 158, 250, 249, 142, 213, 5, 1, 250, 31, 122, 171, 62, 142,
219 38, 84, 165, 95, 237, 144, 145, 189, 193, 248, 121, 112, 22, 11, 26, 192,
220 90, 76, 117, 89, 160, 228, 152, 24, 129, 235, 37, 24, 66, 68, 161, 126,
221 147, 44, 172, 137, 134, 203, 162, 152, 255, 161, 135, 6, 31, 72, 69, 9,
222 228, 3, 80, 28, 50, 240, 176, 66, 255, 231, 21, 233, 149, 55, 211, 15,
223 182, 116, 165, 211, 190, 28, 69, 40, 3, 164, 172, 212, 150, 181, 213, 32,
224 174, 216, 8, 243, 29, 152, 124, 7, 111, 140, 53, 157, 158, 233, 175, 60,
225 191, 179, 131, 248, 252, 50, 171, 165, 5, 51, 69, 215, 168, 222, 57, 221,
226 164, 56, 193, 114, 18, 89, 219, 222, 198, 163, 200, 233, 28, 51, 190, 25,
227 206, 243, 63, 51, 44, 10, 57, 71, 252, 230, 161, 141, 79, 31, 30, 150,
228 101, 168, 23, 70, 216, 216, 160, 241, 192, 106, 92, 194, 141, 81, 100, 222,
229 165, 180, 27, 70, 201, 219, 31, 177, 189, 114, 30, 74, 6, 184, 114, 208,
230 189, 246, 83, 107, 229, 153, 69, 66, 201, 253, 183, 5, 134, 156, 200, 132,
231 187, 73, 175, 213, 178, 14, 66, 101, 13, 224, 49, 205, 244, 124, 231, 18,
232 71, 94, 246, 29, 78, 201, 138, 60, 97, 54, 156, 123, 144, 143, 6, 191,
233 113, 140, 251, 203, 125, 196, 135, 169, 197, 34, 215, 77, 138, 218, 63, 56,
234 145, 74, 225, 15, 227, 112, 113, 160, 165, 122, 85, 179, 97, 146, 5, 221,
235 133, 236, 170, 2, 236, 128, 19, 252, 238, 120, 0, 192, 55, 5, 138, 161,
236 222, 148, 189, 130, 53, 250, 36, 153, 248, 210, 197, 167, 236, 128, 191, 37,
237 251, 151, 163, 190, 155, 38, 27, 164, 166, 238, 185, 11, 214, 212, 122, 206,
238 212, 255, 103, 255, 69, 146, 54, 182, 52, 54, 169, 121, 244, 205, 244, 168,
239 96, 163, 220, 75, 194, 10, 133, 204, 105, 10, 228, 139, 62, 39, 254, 131,
240 5, 243, 54, 14, 158, 107, 118, 143, 81, 55, 251, 151, 226, 29, 54, 218,
241 99, 187, 76, 178, 61, 206, 20, 170, 229, 190, 77, 215, 47, 104, 244, 87,
242 101, 82, 50, 41, 255, 56, 6, 226, 22, 153, 19, 72, 227, 63, 224, 79,
243 3, 130, 220, 135, 116, 39, 25, 98, 107, 50, 214, 183, 120, 215, 26, 160,
244 247, 26, 190, 119, 146, 181, 147, 36, 15, 75, 109, 71, 72, 44, 14, 9,
245 61, 201, 200, 222, 53, 246, 57, 69, 63, 108, 133, 140, 150, 33, 233, 46,
246 84, 102, 150, 204, 129, 195, 97, 4, 69, 176, 166, 182, 10, 237, 141, 33,
247 70, 200, 98, 101, 157, 9, 70, 227, 108, 195, 241, 72, 105, 86, 67, 5,
248 242, 199, 149, 33, 43, 105, 206, 122, 20, 13, 28, 158, 131, 47, 202, 70,
249 9, 92, 32, 10, 251, 103, 49, 185, 35, 242, 168, 151, 234, 237, 212, 91,
250 81, 113, 133, 247, 204, 23, 4, 9, 226, 14, 29, 117, 236, 101, 250, 46,
251 161, 149, 131, 98, 141, 228, 72, 18, 164, 252, 56, 7, 160, 217, 183, 125,
252 121, 154, 169, 152, 211, 114, 24, 190, 141, 135, 41, 173, 250, 50, 54, 197,
253 65, 67, 117, 246, 235, 130, 142, 138, 62, 216, 51, 193, 247, 30, 164, 235,
254 209, 157, 138, 4, 147, 6, 253, 187, 34, 124, 1, 143, 60, 95, 168, 72,
255 167, 72, 72, 13, 142, 35, 185, 107, 29, 51, 189, 48, 141, 194, 33, 77,
256 118, 17, 80, 88, 204, 147, 148, 143, 103, 246, 97, 180, 153, 160, 112, 81,
257 196, 2, 222, 148, 126, 240, 27, 61, 128, 155, 184, 106, 89, 36, 136, 230,
258 128, 84, 217, 130, 139, 104, 115, 225, 73, 77, 7, 49, 183, 4, 250, 124,
259 196, 34, 183, 209, 17, 136, 92, 16, 94, 51, 78, 174, 185, 117, 243, 69,
260 11, 214, 132, 72, 86, 212, 4, 193, 253, 125, 45, 148, 97, 87, 6, 101,
261 195, 169, 86, 115, 218, 254, 40, 59, 255, 137, 135, 183, 253, 117, 170, 29,
262 191, 138, 247, 117, 125, 234, 30, 40, 92, 8, 180, 240, 136, 142, 111, 239,
263 66, 225, 196, 151, 93, 130, 126, 255, 195, 34, 252, 17, 101, 179, 120, 76,
264 4, 227, 13, 12, 66, 205, 235, 177, 29, 187, 25, 114, 68, 119, 114, 158,
265 213, 149, 210, 5, 104, 71, 181, 126, 211, 32, 99, 60, 51, 75, 85, 138,
266 138, 68, 115, 81, 37, 17, 101, 36, 117, 236, 182, 77, 98, 113, 198, 195,
267 73, 79, 215, 116, 248, 45, 244, 60, 205, 35, 95, 228, 38, 180, 250, 246,
268 63, 211, 44, 197, 162, 24, 195, 61, 136, 142, 91, 141, 62, 34, 139, 60,
269 142, 238, 67, 148, 54, 132, 41, 115, 241, 219, 192, 121, 9, 45, 75, 183,
270 223, 213, 165, 161, 219, 181, 161, 27, 36, 158, 163, 12, 12, 141, 83, 105,
271 157, 118, 168, 244, 204, 32, 52, 131, 88, 246, 230, 121, 21, 58, 91, 217,
272 138, 27, 251, 174, 150, 51, 240, 201, 30, 66, 19, 148, 185, 122, 53, 15,
273 176, 144, 148, 3, 238, 59, 211, 155, 77, 83, 81, 245, 186, 169, 217, 201,
274 103, 109, 137, 119, 146, 100, 18, 200, 185, 212, 202, 17, 88, 146, 234, 49,
275 190, 19, 139, 43, 1, 48, 21, 64, 235, 89, 191, 74, 89, 85, 16, 64,
276 203, 99, 152, 255, 61, 159, 36, 5, 199, 49, 94, 229, 163, 192, 41, 165,
277 20, 203, 176, 149, 18, 152, 61, 216, 188, 203, 180, 103, 202, 176, 177, 210,
278 255, 26, 254, 70, 43, 214, 95, 208, 73, 148, 124, 19, 215, 68, 123, 10,
279 179, 88, 167, 224, 23, 246, 150, 201, 51, 157, 139, 187, 103, 187, 198, 189,
280 204, 126, 74, 124, 23, 150, 108, 116, 196, 130, 92, 0, 211, 151, 19, 58,
281 249, 50, 186, 54, 102, 164, 122, 228, 71, 163, 163, 117, 78, 234, 197, 70,
282 96, 79, 4, 88, 242, 219, 120, 28, 178, 165, 136, 178, 129, 125, 79, 140,
283 65, 62, 78, 237, 104, 11, 45, 191, 163, 145, 174, 23, 34, 240, 43, 137,
284 102, 189, 140, 137, 4, 222, 55, 6, 84, 194, 51, 164, 107, 234, 39, 216,
285 15, 12, 44, 86, 170, 121, 46, 4, 220, 200, 42, 53, 11, 228, 110, 187,
286 116, 182, 242, 42, 93, 109, 47, 109, 180, 155, 31, 99, 60, 107, 114, 82,
287 196, 146, 45, 224, 90, 205, 34, 200, 42, 173, 113, 37, 26, 154, 74, 18,
288 165, 45, 22, 141, 1, 244, 64, 159, 164, 162, 100, 6, 67, 145, 199, 205,
289 254, 149, 56, 138, 15, 172, 205, 203, 191, 253, 126, 238, 167, 210, 103, 33,
290 143, 85, 161, 150, 99, 12, 207, 238, 110, 157, 190, 52, 249, 121, 139, 188,
291 0, 74, 92, 106, 101, 254, 190, 251, 213, 167, 78, 36, 224, 24, 6, 195,
292 128, 24, 21, 35, 66, 223, 204, 84, 177, 109, 226, 215, 79, 19, 236, 73,
293 74, 244, 146, 57, 228, 254, 223, 158, 42, 83, 29, 181, 14, 147, 60, 4,
294 147, 107, 95, 220, 180, 130, 140, 28, 118, 179, 39, 179, 250, 184, 27, 209,
295 199, 151, 154, 121, 105, 81, 215, 143, 46, 91, 217, 94, 230, 250, 165, 21,
296 240, 234, 93, 0, 176, 20, 127, 181, 36, 127, 49, 36, 79, 233, 229, 57,
297 241, 56, 119, 151, 222, 239, 203, 217, 74, 164, 88, 47, 25, 43, 58, 136,
298 61, 233, 70, 133, 181, 122, 250, 169, 249, 38, 36, 40, 182, 201, 40, 64,
299 218, 145, 63, 209, 126, 248, 65, 23, 142, 147, 3, 241, 200, 87, 132, 93,
300 31, 22, 90, 86, 244, 47, 235, 53, 187, 96, 165, 221, 185, 118, 134, 129,
301 94, 64, 188, 132, 216, 198, 131, 74, 193, 32, 41, 194, 69, 201, 64, 31,
302 6, 235, 95, 181, 207, 187, 60, 250, 24, 233, 127, 4, 5, 190, 242, 168,
303 239, 185, 172, 78, 136, 121, 180, 191, 84, 54, 252, 83, 202, 111, 32, 100,
304 213, 7, 178, 225, 71, 68, 244, 36, 141, 242, 199, 185, 71, 55, 244, 166,
305 113, 41, 66, 177, 55, 251, 179, 251, 194, 2, 54, 20, 100, 241, 82, 213,
306 236, 45, 196, 119, 134, 167, 163, 134, 61, 218, 207, 200, 118, 143, 249, 165,
307 105, 78, 208, 213, 206, 72, 76, 123, 47, 31, 9, 234, 18, 125, 95, 170,
308 199, 123, 139, 158, 244, 171, 6, 202, 240, 214, 94, 46, 60, 109, 185, 175,
309 204, 176, 229, 110, 139, 249, 234, 3, 202, 231, 25, 195, 150, 136, 186, 246,
310 72, 242, 133, 249, 229, 58, 112, 28, 228, 121, 85, 115, 90, 95, 32, 141,
311 135, 217, 12, 187, 50, 229, 66, 103, 204, 0, 93, 86, 245, 59, 173, 28,
312 71, 131, 135, 118, 125, 113, 12, 13, 202, 242, 205, 255, 152, 243, 160, 243,
313 148, 10, 28, 106, 56, 17, 93, 234, 204, 102, 53, 22, 48, 188, 15, 255,
314 14, 3, 117, 190, 211, 116, 55, 77, 205, 171, 228, 120, 244, 1, 169, 51,
315 241, 150, 206, 99, 20, 68, 119, 137, 180, 44, 113, 85, 242, 143, 148, 97,
316 149, 75, 20, 228, 89, 226, 122, 102, 13, 195, 58, 111, 178, 82, 226, 144,
317 82, 237, 27, 94, 244, 29, 102, 32, 162, 80, 228, 66, 203, 107, 211, 171,
318 4, 56, 62, 184, 63, 137, 5, 179, 231, 185, 172, 102, 190, 42, 80, 164,
319 123, 68, 20, 36, 135, 97, 102, 156, 133, 165, 202, 240, 84, 168, 30, 95,
320 57, 3, 182, 224, 10, 84, 60, 88, 191, 0, 126, 190, 240, 202, 141, 89,
321 238, 212, 101, 213, 129, 15, 245, 94, 24, 49, 72, 59, 237, 121, 241, 199,
322 28, 106, 113, 237, 82, 144, 150, 112, 79, 90, 255, 166, 230, 71, 132, 24,
323 6, 82, 143, 150, 194, 236, 253, 46, 158, 143, 5, 31, 243, 156, 4, 19,
324 89, 81, 94, 94, 39, 9, 199, 6, 44, 35, 4, 143, 18, 62, 27, 165,
325 177, 162, 53, 121, 146, 74, 181, 252, 27, 207, 17, 102, 196, 172, 75, 4,
326 17, 215, 20, 96, 9, 42, 199, 99, 206, 94, 78, 121, 37, 11, 152, 125,
327 249, 107, 153, 180, 85, 155, 220, 68, 223, 87, 204, 175, 117, 147, 217, 71,
328 6, 190, 132, 99, 227, 5, 180, 168, 249, 126, 202, 102, 42, 26, 175, 198,
329 185, 211, 206, 154, 60, 24, 183, 24, 203, 46, 21, 176, 194, 116, 116, 210,
330 162, 214, 215, 79, 87, 159, 16, 55, 12, 248, 51, 17, 79, 183, 145, 23,
331 209, 58, 225, 84, 21, 237, 102, 250, 93, 222, 87, 87, 203, 4, 138, 196,
332 6, 28, 143, 45, 68, 77, 211, 180, 47, 198, 5, 170, 166, 221, 107, 202,
333 67, 220, 178, 156, 39, 2, 87, 147, 234, 85, 199, 97, 10, 151, 240, 121,
334 229, 132, 230, 249, 244, 57, 77, 29, 123, 149, 121, 81, 245, 37, 106, 157,
335 39, 185, 31, 175, 102, 187, 37, 149, 27, 215, 151, 155, 94, 160, 180, 59,
336 95, 200, 149, 42, 178, 85, 171, 41, 31, 20, 16, 199, 14, 202, 230, 42,
337 59, 83, 239, 155, 65, 63, 237, 89, 133, 62, 23, 112, 236, 226, 34, 250,
338 134, 14, 234, 2, 212, 41, 135, 189, 114, 60, 147, 49, 19, 193, 169, 157,
339 41, 62, 36, 42, 2, 172, 237, 250, 86, 252, 199, 80, 194, 195, 182, 136,
340 209, 90, 80, 9, 121, 164, 168, 99, 235, 131, 129, 59, 26, 41, 124, 194,
341 110, 143, 183, 126, 91, 50, 168, 211, 43, 177, 95, 196, 94, 206, 214, 173,
342 89, 152, 173, 39, 53, 190, 186, 193, 75, 23, 181, 65, 153, 57, 142, 215,
343 155, 147, 241, 110, 230, 102, 176, 152, 227, 83, 87, 110, 243, 143, 254, 127,
344 254, 117, 117, 173, 106, 80, 127, 231, 39, 220, 178, 44, 95, 30, 60, 222,
345 212, 72, 169, 84, 194, 40, 164, 156, 145, 182, 127, 51, 64, 108, 144, 124,
346 136, 238, 4, 113, 14, 68, 106, 158, 20, 231, 109, 99, 70, 214, 68, 29,
347 240, 154, 95, 206, 188, 136, 180, 41, 220, 228, 198, 82, 51, 118, 65, 20,
348 198, 187, 22, 8, 134, 252, 86, 227, 110, 105, 198, 242, 48, 8, 192, 165,
349 80, 210, 1, 175, 188, 99, 252, 178, 7, 70, 27, 249, 175, 145, 131, 228,
350 86, 229, 81, 93, 203, 194, 226, 110, 250, 134, 235, 195, 170, 107, 131, 185,
351 81, 99, 168, 124, 215, 108, 40, 198, 193, 117, 88, 136, 134, 114, 145, 239,
352 9, 0, 184, 106, 111, 63, 6, 92, 30, 3, 116, 7, 232, 182, 184, 60,
353 32, 161, 183, 167, 163, 185, 114, 43, 77, 134, 29, 164, 135, 3, 155, 255,
354 83, 254, 203, 1, 243, 167, 236, 162, 77, 140, 250, 224, 25, 246, 81, 147,
355 207, 0, 127, 115, 127, 151, 191, 179, 128, 77, 142, 203, 171, 153, 47, 244,
356 165, 235, 20, 64, 36, 99, 201, 190, 83, 244, 125, 112, 49, 26, 95, 125,
357 254, 140, 85, 142, 112, 170, 225, 4, 126, 243, 224, 180, 137, 152, 102, 9,
358 92, 67, 247, 20, 189, 58, 88, 74, 183, 201, 43, 1, 2, 123, 228, 211,
359 79, 91, 20, 64, 111, 238, 60, 76, 207, 91, 90, 130, 169, 238, 254, 208,
360 125, 140, 7, 94, 63, 18, 46, 124, 16, 253, 228, 238, 179, 99, 129, 40,
361 89, 12, 40, 42, 94, 237, 111, 112, 22, 162, 64, 25, 89, 102, 56, 25,
362 245, 128, 221, 86, 146, 138, 242, 67, 166, 114, 204, 38, 89, 77, 127, 64,
363 36, 183, 161, 254, 185, 76, 91, 10, 28, 146, 154, 254, 118, 200, 206, 95,
364 6, 182, 35, 178, 179, 114, 87, 60, 208, 88, 180, 161, 171, 39, 156, 131,
365 2, 83, 124, 11, 223, 57, 190, 18, 79, 245, 198, 11, 55, 131, 197, 28,
366 74, 32, 223, 144, 231, 227, 25, 237, 243, 145, 64, 183, 62, 163, 33, 93,
367 155, 82, 228, 206, 69, 77, 101, 8, 240, 3, 135, 0, 181, 153, 174, 82,
368 29, 129, 40, 83, 235, 83, 98, 105, 235, 210, 121, 239, 78, 240, 217, 144,
369 230, 225, 3, 157, 14, 118, 64, 228, 29, 110, 230, 247, 153, 117, 3, 81,
370 24, 23, 169, 2, 247, 238, 144, 137, 241, 140, 192, 185, 165, 13, 122, 48,
371 180, 254, 54, 128, 134, 247, 87, 42, 219, 166, 7, 248, 91, 39, 226, 245,
372 44, 152, 30, 71, 125, 129, 102, 72, 16, 66, 119, 15, 189, 250, 70, 112,
373 168, 7, 5, 181, 15, 114, 73, 112, 16, 184, 65, 192, 54, 51, 31, 202,
374 38, 11, 170, 149, 37, 107, 44, 241, 30, 35, 23, 176, 99, 82, 230, 60,
375 206, 39, 249, 227, 114, 152, 133, 233, 60, 188, 79, 52, 241, 191, 208, 160,
376 213, 159, 219, 188, 222, 47, 235, 187, 9, 186, 112, 78, 101, 229, 115, 152,
377 216, 196, 88, 228, 189, 226, 214, 40, 163, 155, 193, 238, 224, 72, 64, 199,
378 4, 182, 248, 143, 219, 170, 227, 55, 215, 135, 92, 117, 56, 225, 220, 129,
379 74, 226, 55, 132, 73, 213, 81, 93, 107, 49, 29, 155, 62, 141, 48, 190,
380 242, 221, 95, 61, 179, 165, 213, 49, 125, 245, 106, 35, 24, 57, 103, 140,
381 79, 172, 38, 29, 170, 145, 151, 204, 114, 161, 117, 2, 199, 145, 210, 184,
382 71, 80, 251, 182, 67, 220, 3, 2, 210, 28, 17, 104, 68, 150, 255, 174,
383 34, 206, 245, 97, 173, 8, 92, 160, 144, 149, 54, 57, 114, 145, 215, 115,
384 186, 145, 165, 186, 207, 107, 14, 255, 88, 145, 225, 110, 190, 78, 93, 147,
385 225, 247, 122, 52, 135, 147, 89, 3, 10, 119, 43, 154, 29, 186, 68, 50,
386 125, 152, 205, 242, 113, 106, 80, 68, 21, 45, 147, 212, 5, 1, 27, 39,
387 51, 221, 25, 38, 102, 67, 194, 250, 121, 51, 66, 76, 155, 205, 199, 54,
388 177, 202, 0, 249, 225, 231, 179, 69, 52, 22, 87, 77, 193, 35, 88, 3,
389 238, 62, 12, 159, 221, 203, 230, 122, 92, 71, 26, 218, 41, 218, 75, 21,
390 201, 166, 224, 173, 110, 185, 97, 161, 227, 9, 43, 108, 162, 62, 228, 201,
391 32, 178, 191, 115, 35, 118, 59, 165, 223, 135, 132, 230, 110, 213, 96, 68,
392 190, 237, 213, 146, 85, 179, 242, 155, 122, 217, 7, 105, 70, 123, 10, 5,
393 122, 153, 202, 218, 195, 207, 73, 175, 161, 31, 200, 47, 237, 64, 34, 227,
394 34, 66, 58, 29, 28, 166, 242, 128, 33, 79, 32, 125, 60, 207, 222, 195,
395 180, 137, 78, 177, 132, 249, 147, 38, 64, 247, 181, 81, 96, 155, 167, 113,
396 95, 197, 30, 83, 18, 128, 93, 131, 242, 197, 50, 146, 106, 143, 56, 216,
397 80, 80, 159, 164, 154, 220, 248, 193, 58, 253, 63, 219, 91, 140, 170, 71,
398 152, 8, 69, 37, 138, 179, 223, 54, 98, 229, 181, 107, 50, 174, 6, 20,
399 69, 101, 50, 57, 102, 61, 123, 218, 226, 77, 25, 129, 188, 103, 22, 81,
400 66, 232, 19, 88, 103, 184, 87, 252, 109, 31, 242, 40, 37, 238, 237, 20,
401 232, 170, 115, 36, 83, 127, 65, 208, 85, 56, 192, 120, 116, 153, 200, 116,
402 108, 243, 110, 8, 9, 162, 206, 172, 25, 0, 103, 79, 239, 8, 184, 142,
403 87, 86, 95, 139, 223, 180, 6, 205, 39, 76, 25, 62, 32, 244, 171, 152,
404 146, 48, 224, 20, 23, 219, 250, 115, 159, 131, 14, 91, 5, 27, 26, 60,
405 239, 5, 41, 159, 226, 103, 177, 43, 224, 51, 123, 129, 148, 18, 241, 66,
406 192, 199, 151, 94, 207, 238, 120, 34, 234, 75, 193, 65, 66, 243, 125, 21,
407 57, 113, 143, 44, 49, 153, 168, 129, 102, 21, 17, 101, 182, 217, 216, 17,
408 7, 70, 99, 194, 34, 47, 49, 241, 25, 242, 163, 251, 28, 172, 167, 4,
409 96, 213, 236, 60, 223, 52, 150, 216, 168, 157, 5, 56, 126, 50, 228, 130,
410 166, 54, 196, 85, 86, 162, 154, 82, 84, 34, 228, 235, 157, 230, 47, 77,
411 151, 127, 226, 82, 145, 205, 201, 40, 49, 178, 228, 77, 132, 208, 93, 4,
412 2, 73, 46, 69, 188, 60, 130, 217, 1, 97, 177, 240, 18, 26, 141, 97,
413 5, 170, 82, 56, 218, 83, 3, 29, 228, 13, 179, 232, 154, 50, 152, 40,
414 58, 0, 202, 195, 36, 91, 104, 37, 10, 89, 0, 250, 146, 45, 248, 68,
415 37, 180, 129, 46, 138, 43, 98, 40, 122, 174, 147, 85, 94, 255, 76, 129,
416 245, 135, 198, 206, 144, 189, 190, 207, 253, 191, 104, 163, 141, 116, 1, 192,
417 200, 193, 205, 196, 151, 231, 254, 190, 17, 172, 254, 196, 243, 72, 234, 236,
418 92, 108, 153, 184, 39, 201, 109, 233, 38, 178, 163, 46, 150, 153, 170, 238,
419 84, 196, 155, 171, 31, 3, 186, 55, 87, 100, 179, 61, 163, 119, 82, 75,
420 107, 173, 8, 145, 135, 226, 243, 8, 38, 102, 123, 120, 169, 215, 177, 132,
421 111, 26, 242, 205, 150, 143, 197, 152, 137, 193, 174, 171, 234, 183, 221, 189,
422 40, 212, 191, 137, 47, 153, 85, 76, 59, 255, 16, 51, 186, 105, 224, 14,
423 73, 41, 84, 42, 12, 186, 198, 133, 82, 8, 161, 173, 130, 25, 26, 22,
424 152, 132, 221, 182, 68, 126, 160, 248, 183, 112, 129, 83, 181, 55, 17, 145,
425 18, 220, 143, 17, 49, 18, 15, 191, 104, 40, 67, 139, 127, 106, 56, 65,
426 4, 120, 100, 5, 88, 44, 82, 240, 138, 64, 42, 158, 24, 130, 133, 237,
427 235, 112, 115, 164, 249, 247, 233, 173, 116, 245, 23, 37, 216, 180, 118, 183,
428 58, 246, 254, 103, 93, 55, 36, 213, 76, 134, 122, 116, 164, 15, 11, 115,
429 168, 185, 226, 79, 250, 236, 172, 24, 226, 48, 150, 67, 128, 63, 211, 235,
430 219, 120, 216, 18, 31, 82, 136, 105, 151, 118, 193, 43, 33, 155, 55, 8,
431 17, 3, 211, 110, 115, 27, 122, 3, 195, 97, 1, 227, 22, 124, 213, 59,
432 89, 13, 253, 221, 207, 229, 25, 72, 200, 144, 209, 147, 185, 68, 132, 104,
433 7, 34, 237, 45, 2, 17, 209, 87, 170, 227, 60, 230, 53, 186, 59, 39,
434 254, 57, 191, 201, 59, 202, 119, 144, 163, 255, 78, 199, 9, 59, 129, 64,
435 232, 31, 20, 110, 63, 172, 85, 239, 97, 216, 252, 158, 76, 64, 55, 133,
436 43, 101, 22, 4, 27, 134, 210, 9, 120, 44, 255, 105, 142, 83, 6, 238,
437 61, 226, 118, 111, 217, 234, 153, 48, 9, 193, 133, 172, 20, 121, 210, 40,
438 243, 49, 13, 184, 152, 126, 248, 100, 37, 187, 216, 15, 250, 86, 178, 24,
439 30, 174, 216, 151, 139, 27, 166, 190, 200, 228, 25, 152, 212, 70, 7, 45,
440 141, 54, 143, 106, 206, 49, 170, 195, 61, 24, 81, 20, 116, 147, 95, 49,
441 245, 179, 223, 237, 184, 110, 49, 158, 190, 211, 132, 30, 22, 195, 234, 167,
442 143, 4, 26, 9, 215, 48, 100, 53, 221, 177, 172, 132, 184, 229, 165, 207,
443 213, 192, 26, 58, 211, 227, 65, 148, 198, 5, 248, 169, 32, 121, 24, 164,
444 193, 137, 218, 218, 105, 42, 136, 146, 91, 72, 238, 231, 24, 17, 108, 194,
445 206, 5, 180, 101, 199, 161, 172, 130, 78, 110, 255, 62, 158, 111, 204, 223,
446 33, 183, 43, 10, 93, 253, 249, 193, 149, 89, 21, 51, 198, 186, 91, 142,
447 121, 157, 35, 254, 21, 55, 2, 7, 119, 32, 175, 107, 199, 86, 174, 37,
448 144, 192, 13, 234, 244, 152, 150, 77, 69, 91, 174, 141, 211, 71, 85, 190,
449 231, 124, 80, 80, 137, 195, 5, 196, 21, 239, 110, 92, 99, 158, 247, 229,
450 178, 99, 156, 222, 135, 119, 197, 242, 98, 58, 0, 134, 97, 197, 30, 113,
451 164, 183, 9, 1, 97, 166, 94, 117, 183, 103, 45, 147, 215, 137, 8, 64,
452 9, 149, 66, 130, 166, 94, 72, 48, 181, 156, 233, 167, 116, 59, 10, 117,
453 203, 53, 110, 133, 3, 97, 84, 60, 179, 90, 47, 45, 78, 41, 89, 191,
454 234, 81, 129, 69, 179, 76, 221, 176, 171, 58, 158, 151, 251, 79, 189, 124,
455 159, 40, 189, 229, 126, 168, 24, 141, 209, 215, 105, 170, 166, 181, 113, 36,
456 4, 172, 90, 123, 232, 154, 150, 224, 87, 249, 134, 136, 14, 28, 23, 67,
457 78, 187, 209, 55, 157, 95, 36, 136, 83, 103, 54, 236, 62, 81, 66, 44,
458 85, 120, 219, 178, 62, 126, 203, 193, 229, 146, 25, 187, 254, 141, 147, 185,
459 158, 103, 216, 216, 38, 34, 245, 43, 169, 200, 129, 130, 7, 239, 207, 155,
460 250, 89, 209, 238, 20, 74, 133, 100, 67, 149, 41, 187, 72, 9, 135, 165,
461 140, 14, 90, 51, 241, 216, 7, 176, 238, 254, 84, 53, 231, 87, 12, 51,
462 222, 54, 70, 163, 101, 130, 63, 37, 120, 180, 219, 161, 69, 213, 233, 130,
463 199, 124, 2, 36, 224, 140, 95, 201, 23, 72, 219, 222, 181, 237, 134, 11,
464 103, 94, 246, 251, 215, 218, 228, 90, 36, 54, 237, 49, 204, 13, 194, 221,
465 18, 186, 35, 144, 179, 2, 98, 90, 110, 165, 66, 38, 152, 206, 0, 121,
466 90, 25, 94, 145, 133, 58, 143, 138, 175, 80, 233, 110, 78, 84, 0, 207,
467 87, 78, 27, 243, 160, 231, 241, 83, 173, 163, 191, 205, 184, 216, 232, 36,
468 194, 52, 5, 72, 249, 42, 103, 254, 213, 41, 159, 209, 56, 222, 40, 224,
469 177, 195, 214, 11, 84, 221, 245, 137, 131, 23, 220, 251, 167, 17, 34, 214,
470 41, 102, 226, 223, 79, 53, 119, 84, 17, 219, 19, 80, 90, 132, 19, 176,
471 73, 145, 38, 28, 198, 176, 141, 92, 242, 69, 174, 63, 244, 44, 152, 102,
472 120, 151, 167, 115, 67, 110, 119, 159, 56, 63, 29, 70, 253, 118, 119, 220,
473 181, 71, 193, 167, 77, 178, 236, 187, 193, 236, 147, 231, 209, 56, 168, 202,
474 7, 198, 208, 17, 20, 31, 42, 70, 237, 148, 162, 161, 128, 135, 88, 37,
475 219, 56, 83, 248, 116, 20, 44, 17, 231, 156, 187, 251, 237, 165, 123, 165,
476 181, 166, 212, 99, 132, 26, 122, 240, 223, 130, 235, 248, 239, 11, 161, 32,
477 109, 210, 97, 173, 12, 251, 94, 118, 7, 107, 206, 105, 158, 16, 4, 245,
478 159, 67, 150, 226, 53, 42, 241, 249, 146, 107, 111, 75, 147, 136, 141, 97,
479 49, 101, 233, 168, 197, 72, 95, 138, 162, 103, 154, 162, 192, 78, 41, 102,
480 52, 207, 165, 48, 93, 41, 104, 136, 91, 169, 167, 51, 217, 197, 25, 238,
481 3, 4, 35, 64, 146, 153, 32, 107, 66, 225, 249, 148, 225, 130, 197, 194,
482 34, 100, 235, 200, 204, 39, 230, 37, 103, 219, 139, 8, 232, 63, 95, 154,
483 76, 195, 226, 187, 206, 116, 21, 40, 98, 177, 244, 9, 114, 148, 22, 185,
484 243, 93, 8, 84, 137, 114, 217, 240, 69, 185, 123, 1, 225, 160, 221, 183,
485 81, 159, 31, 66, 221, 201, 197, 113, 137, 181, 249, 211, 211, 226, 62, 12,
486 116, 111, 130, 197, 99, 85, 29, 191, 94, 14, 166, 137, 147, 14, 133, 58,
487 230, 148, 144, 87, 48, 117, 252, 64, 114, 18, 185, 63, 164, 159, 26, 79,
488 188, 242, 126, 223, 213, 245, 195, 144, 19, 68, 175, 73, 15, 90, 45, 245,
489 111, 212, 15, 108, 108, 199, 180, 231, 92, 251, 69, 251, 100, 179, 160, 125,
490 250, 42, 79, 118, 101, 195, 108, 15, 243, 124, 76, 248, 137, 80, 49, 16,
491 233, 89, 247, 188, 102, 212, 82, 111, 184, 67, 70, 110, 79, 241, 15, 157,
492 225, 66, 87, 81, 35, 200, 210, 21, 243, 196, 86, 48, 46, 152, 150, 236,
493 76, 45, 178, 131, 90, 85, 147, 107, 25, 194, 182, 106, 191, 161, 71, 94,
494 211, 172, 93, 128, 17, 188, 240, 127, 4, 18, 124, 199, 122, 163, 140, 228,
495 91, 163, 59, 197, 191, 231, 162, 77, 248, 24, 168, 119, 182, 169, 140, 55,
496 207, 105, 70, 81, 32, 79, 212, 1, 59, 11, 55, 145, 61, 90, 134, 202,
497 49, 105, 117, 158, 91, 86, 139, 55, 90, 171, 167, 237, 141, 1, 184, 49,
498 63, 7, 226, 53, 153, 200, 188, 224, 234, 104, 101, 118, 238, 93, 34, 252,
499 120, 251, 177, 103, 213, 173, 184, 231, 225, 111, 186, 210, 40, 111, 65, 4,
500 60, 124, 221, 67, 201, 210, 65, 90, 74, 36, 39, 88, 233, 64, 172, 179,
501 18, 59, 182, 82, 152, 192, 154, 220, 209, 184, 218, 210, 172, 250, 155, 199,
502 175, 246, 218, 45, 211, 204, 131, 204, 73, 107, 246, 52, 133, 102, 103, 135,
503 5, 46, 175, 63, 204, 92, 108, 126, 126, 194, 208, 178, 166, 198, 191, 240,
504 128, 5, 203, 189, 102, 148, 65, 29, 146, 2, 24, 21, 201, 147, 145, 248,
505 85, 77, 63, 245, 176, 199, 198, 237, 34, 101, 159, 144, 166, 29, 102, 175,
506 121, 78, 75, 196, 204, 80, 156, 236, 198, 232, 117, 112, 135, 61, 63, 63,
507 82, 2, 65, 139, 70, 69, 78, 64, 48, 154, 15, 250, 79, 190, 251, 94,
508 205, 252, 236, 241, 2, 171, 232, 118, 128, 71, 18, 55, 49, 13, 27, 36,
509 149, 220, 149, 150, 55, 200, 192, 151, 47, 218, 134, 205, 93, 7, 206, 44,
510 229, 208, 62, 208, 55, 55, 239, 63, 45, 154, 171, 70, 223, 144, 78, 251,
511 5, 138, 224, 21, 184, 87, 55, 69, 224, 231, 37, 65, 87, 114, 78, 216,
512 41, 49, 143, 233, 182, 214, 84, 20, 20, 156, 17, 12, 173, 172, 80, 151,
513 37, 28, 191, 69, 146, 102, 65, 15, 152, 143, 198, 45, 204, 4, 140, 90,
514 149, 45, 157, 190, 119, 196, 121, 199, 176, 122, 198, 141, 161, 31, 24, 149,
515 96, 231, 70, 122, 160, 19, 100, 75, 112, 141, 18, 175, 109, 98, 19, 110,
516 237, 1, 5, 171, 153, 19, 251, 61, 180, 249, 9, 187, 196, 248, 127, 13,
517 21, 244, 224, 42, 97, 40, 236, 190, 18, 123, 133, 26, 235, 9, 150, 90,
518 21, 189, 189, 101, 226, 190, 82, 18, 45, 3, 172, 187, 72, 74, 244, 211,
519 76, 2, 70, 168, 41, 195, 165, 178, 139, 5, 155, 100, 199, 0, 227, 72,
520 247, 186, 33, 169, 34, 104, 196, 3, 253, 202, 19, 140, 100, 122, 144, 125,
521 201, 202, 194, 245, 180, 27, 10, 207, 180, 31, 25, 152, 243, 143, 51, 90,
522 33, 74, 147, 127, 66, 47, 10, 65, 99, 71, 243, 241, 221, 219, 32, 213,
523 98, 67, 119, 130, 254, 11, 149, 64, 73, 168, 73, 237, 110, 18, 243, 21,
524 177, 53, 109, 2, 242, 89, 136, 34, 36, 135, 12, 12, 125, 251, 104, 137,
525 128, 152, 41, 70, 163, 184, 237, 137, 249, 63, 56, 133, 39, 0, 243, 248,
526 80, 184, 48, 238, 155, 193, 21, 137, 95, 144, 146, 209, 151, 197, 199, 122,
527 60, 48, 250, 1, 79, 162, 58, 78, 225, 184, 199, 35, 186, 225, 19, 68,
528 31, 199, 150, 85, 197, 76, 246, 150, 47, 63, 55, 196, 200, 10, 163, 170,
529 246, 34, 196, 87, 0, 45, 18, 6, 168, 248, 130, 184, 5, 197, 97, 56,
530 128, 254, 236, 32, 10, 182, 198, 139, 255, 43, 41, 159, 119, 253, 81, 248,
531 251, 253, 184, 98, 229, 6, 8, 64, 48, 190, 105, 125, 168, 191, 43, 93,
532 156, 39, 244, 220, 138, 197, 117, 27, 152, 145, 254, 233, 211, 33, 234, 5,
533 72, 247, 49, 221, 35, 188, 210, 20, 231, 90, 255, 37, 30, 126, 209, 65,
534 137, 123, 126, 191, 158, 227, 201, 129, 19, 164, 51, 232, 188, 185, 96, 67,
535 24, 190, 56, 16, 229, 34, 219, 150, 137, 226, 59, 58, 3, 147, 232, 35,
536 99, 207, 101, 173, 217, 18, 139, 1, 94, 123, 4, 232, 147, 243, 13, 193,
537 193, 187, 232, 100, 187, 119, 105, 72, 86, 30, 165, 20, 192, 19, 157, 67,
538 253, 204, 246, 133, 85, 252, 109, 169, 106, 203, 83, 72, 51, 217, 172, 7,
539 212, 104, 170, 166, 21, 181, 11, 14, 145, 33, 175, 235, 169, 66, 203, 78,
540 108, 209, 100, 131, 93, 192, 70, 157, 186, 224, 174, 173, 22, 167, 87, 244,
541 227, 218, 96, 98, 186, 24, 205, 62, 66, 79, 198, 254, 160, 37, 127, 16,
542 95, 171, 47, 34, 80, 43, 26, 111, 65, 207, 29, 139, 135, 69, 13, 110,
543 133, 110, 65, 140, 61, 207, 117, 98, 106, 29, 166, 224, 78, 208, 252, 194,
544 91, 4, 38, 0, 61, 133, 180, 168, 149, 211, 7, 80, 227, 135, 51, 11,
545 249, 228, 26, 198, 244, 2, 47, 226, 93, 147, 222, 125, 200, 205, 166, 154,
546 234, 80, 39, 70, 84, 98, 209, 1, 6, 219, 17, 11, 253, 126, 145, 231,
547 131, 14, 163, 107, 200, 195, 167, 64, 6, 101, 209, 255, 116, 179, 69, 164,
548 133, 23, 78, 98, 105, 182, 236, 34, 246, 58, 81, 183, 100, 30, 44, 187,
549 164, 91, 239, 132, 51, 154, 9, 2, 215, 186, 191, 79, 237, 179, 141, 169,
550 237, 206, 190, 201, 64, 223, 143, 60, 173, 108, 96, 216, 183, 70, 110, 5,
551 59, 230, 206, 194, 40, 211, 109, 146, 1, 102, 194, 212, 90, 214, 43, 111,
552 134, 122, 146, 9, 220, 198, 72, 196, 68, 19, 214, 220, 11, 173, 243, 15,
553 254, 158, 193, 211, 191, 55, 163, 212, 18, 20, 42, 199, 191, 74, 238, 191,
554 113, 173, 125, 203, 48, 1, 119, 32, 224, 8, 178, 179, 0, 67, 153, 62,
555 227, 25, 254, 126, 23, 87, 67, 43, 45, 250, 42, 214, 118, 179, 111, 189,
556 103, 133, 35, 196, 54, 23, 203, 218, 59, 177, 194, 55, 210, 153, 78, 207,
557 145, 157, 229, 119, 218, 173, 20, 104, 251, 48, 204, 245, 166, 251, 123, 82,
558 175, 239, 215, 158, 200, 1, 174, 40, 200, 32, 108, 184, 0, 137, 90, 81,
559 159, 128, 165, 10, 233, 210, 52, 48, 74, 164, 246, 199, 240, 154, 12, 254,
560 70, 37, 106, 44, 85, 123, 151, 119, 153, 170, 48, 144, 241, 114, 64, 115,
561 120, 159, 13, 49, 211, 182, 99, 124, 25, 70, 73, 196, 179, 201, 219, 124,
562 22, 137, 229, 160, 155, 10, 158, 234, 132, 203, 208, 76, 81, 98, 30, 142,
563 154, 68, 158, 92, 107, 252, 4, 22, 218, 2, 167, 190, 152, 141, 251, 137,
564 236, 87, 186, 235, 90, 0, 132, 68, 232, 66, 63, 0, 41, 235, 157, 45,
565 68, 194, 45, 18, 249, 254, 60, 33, 10, 86, 183, 45, 5, 253, 253, 212,
566 44, 94, 203, 41, 53, 146, 101, 148, 123, 198, 92, 14, 181, 87, 49, 229,
567 177, 249, 216, 8, 12, 37, 108, 220, 236, 13, 72, 122, 48, 235, 219, 74,
568 220, 187, 130, 66, 249, 41, 184, 140, 101, 1, 203, 110, 22, 62, 23, 118,
569 199, 32, 191, 162, 140, 187, 157, 80, 144, 59, 112, 238, 32, 101, 238, 47,
570 225, 69, 99, 178, 246, 49, 76, 81, 101, 187, 71, 59, 140, 229, 81, 253,
571 42, 204, 158, 74, 184, 237, 197, 14, 91, 81, 34, 115, 123, 224, 167, 15,
572 112, 84, 225, 104, 103, 208, 236, 183, 185, 142, 175, 147, 237, 188, 159, 125,
573 142, 253, 121, 87, 239, 78, 57, 179, 13, 123, 74, 148, 197, 74, 227, 110,
574 48, 248, 165, 248, 249, 43, 249, 0, 69, 7, 183, 68, 167, 181, 39, 54,
575 144, 39, 212, 36, 40, 171, 48, 106, 76, 50, 201, 111, 254, 86, 240, 39,
576 14, 59, 58, 110, 54, 155, 2, 6, 205, 190, 237, 126, 58, 204, 112, 159,
577 145, 188, 208, 196, 197, 52, 54, 94, 84, 127, 46, 56, 93, 152, 190, 133,
578 120, 166, 75, 52, 6, 112, 112, 71, 119, 143, 218, 19, 242, 174, 48, 246,
579 29, 243, 137, 94, 127, 95, 76, 49, 20, 149, 159, 251, 59, 146, 102, 242,
580 222, 157, 162, 124, 154, 25, 47, 246, 135, 38, 177, 165, 246, 224, 202, 4,
581 177, 255, 203, 245, 58, 172, 164, 33, 155, 179, 56, 41, 202, 39, 145, 176,
582 130, 171, 30, 77, 177, 64, 203, 70, 230, 242, 240, 118, 145, 30, 89, 184,
583 11, 123, 157, 212, 156, 28, 5, 200, 96, 157, 102, 126, 212, 149, 137, 144,
584 169, 39, 211, 159, 193, 254, 65, 201, 154, 165, 37, 129, 14, 242, 28, 37,
585 17, 130, 202, 227, 241, 49, 191, 213, 179, 72, 243, 118, 52, 133, 149, 8,
586 156, 231, 94, 215, 15, 21, 118, 194, 254, 107, 249, 40, 153, 69, 95, 141,
587 97, 37, 224, 82, 146, 71, 35, 26, 88, 127, 137, 247, 242, 243, 135, 113,
588 189, 155, 56, 98, 99, 90, 108, 186, 118, 178, 253, 50, 44, 30, 43, 223,
589 171, 186, 44, 120, 215, 128, 45, 65, 178, 142, 159, 39, 70, 37, 168, 62,
590 127, 219, 111, 40, 239, 134, 47, 114, 69, 45, 87, 15, 234, 100, 9, 90,
591 220, 203, 241, 40, 150, 239, 164, 39, 164, 196, 117, 156, 132, 143, 87, 146,
592 190, 130, 168, 244, 193, 101, 110, 158, 231, 57, 146, 235, 227, 8, 12, 208,
593 209, 203, 35, 38, 242, 45, 43, 118, 252, 201, 244, 130, 42, 18, 133, 66,
594 129, 209, 77, 208, 69, 236, 138, 254, 255, 245, 112, 236, 86, 171, 1, 111,
595 107, 69, 213, 222, 232, 199, 49, 193, 174, 198, 100, 170, 183, 150, 10, 233,
596 28, 210, 219, 123, 233, 126, 105, 75, 222, 231, 13, 137, 242, 177, 41, 137,
597 60, 202, 92, 16, 131, 226, 193, 152, 79, 95, 235, 105, 227, 172, 7, 160,
598 180, 146, 190, 243, 34, 19, 186, 215, 106, 95, 152, 49, 90, 68, 71, 90,
599 222, 240, 72, 16, 153, 69, 114, 193, 215, 175, 165, 224, 198, 154, 70, 104,
600 79, 97, 153, 54, 153, 179, 2, 207, 197, 243, 12, 159, 76, 168, 136, 217,
601 116, 79, 104, 21, 215, 72, 199, 35, 153, 67, 50, 145, 11, 253, 62, 254,
602 121, 1, 8, 147, 39, 20, 94, 155, 80, 41, 135, 135, 45, 85, 61, 140,
603 26, 195, 80, 187, 252, 175, 253, 152, 170, 169, 118, 235, 158, 134, 82, 188,
604 86, 52, 70, 32, 239, 212, 157, 115, 137, 28, 191, 156, 197, 136, 226, 171,
605 17, 231, 181, 79, 246, 232, 178, 242, 233, 113, 210, 230, 35, 201, 213, 28,
606 72, 27, 183, 26, 106, 240, 111, 111, 255, 122, 128, 234, 179, 201, 66, 165,
607 245, 198, 201, 138, 20, 212, 139, 159, 200, 91, 150, 175, 209, 203, 255, 81,
608 30, 27, 83, 216, 119, 36, 48, 112, 237, 229, 175, 204, 149, 192, 183, 184,
609 165, 176, 231, 176, 223, 81, 214, 225, 145, 107, 248, 225, 213, 6, 99, 59,
610 197, 183, 125, 208, 26, 19, 178, 146, 154, 242, 71, 189, 11, 246, 48, 8,
611 7, 28, 105, 208, 20, 13, 236, 77, 244, 218, 101, 217, 125, 199, 153, 77,
612 193, 214, 233, 91, 48, 201, 209, 6, 155, 87, 208, 221, 9, 73, 76, 191,
613 23, 249, 237, 146, 189, 177, 55, 8, 68, 192, 111, 204, 19, 164, 189, 223,
614 83, 220, 156, 79, 12, 82, 178, 149, 102, 94, 120, 229, 198, 77, 136, 244,
615 84, 33, 90, 66, 193, 45, 252, 160, 151, 66, 240, 135, 232, 147, 235, 107,
616 173, 30, 184, 103, 131, 168, 55, 195, 111, 16, 202, 227, 203, 16, 14, 226,
617 104, 220, 126, 121, 163, 5, 26, 253, 35, 196, 13, 90, 196, 32, 157, 28,
618 152, 70, 205, 236, 101, 142, 207, 126, 230, 67, 194, 143, 67, 77, 91, 97,
619 71, 135, 244, 40, 104, 120, 39, 169, 91, 124, 162, 111, 121, 9, 118, 146,
620 215, 112, 120, 157, 22, 198, 241, 196, 32, 176, 60, 244, 197, 37, 210, 215,
621 125, 122, 143, 253, 175, 101, 92, 205, 43, 170, 70, 183, 173, 162, 130, 226,
622 41, 122, 158, 130, 183, 223, 162, 212, 194, 38, 133, 252, 57, 245, 187, 168,
623 165, 204, 119, 8, 249, 174, 10, 206, 251, 55, 212, 118, 212, 74, 226, 227,
624 141, 138, 122, 204, 83, 14, 175, 248, 18, 159, 79, 79, 100, 56, 37, 229,
625 209, 221, 238, 197, 164, 42, 159, 203, 67, 31, 8, 195, 72, 251, 142, 229,
626 60, 24, 254, 97, 124, 219, 201, 255, 232, 60, 77, 19, 220, 239, 10, 158,
627 62, 117, 245, 167, 63, 38, 216, 169, 209, 29, 245, 17, 4, 241, 218, 83,
628 72, 48, 214, 228, 85, 103, 116, 248, 133, 200, 75, 81, 220, 207, 59, 226,
629 102, 50, 238, 138, 44, 120, 162, 220, 105, 5, 120, 11, 153, 98, 144, 4,
630 197, 217, 39, 235, 141, 148, 123, 51, 213, 255, 144, 17, 189, 144, 214, 246,
631 45, 95, 229, 127, 107, 19, 164, 143, 48, 210, 29, 249, 66, 11, 171, 191,
632 73, 99, 161, 114, 190, 80, 31, 215, 67, 16, 187, 246, 47, 110, 157, 33,
633 208, 151, 122, 2, 228, 161, 51, 9, 215, 33, 246, 67, 44, 19, 41, 29,
634 10, 42, 130, 244, 95, 45, 199, 156, 251, 151, 210, 121, 198, 52, 44, 87,
635 214, 126, 214, 93, 242, 201, 31, 44, 250, 139, 78, 59, 95, 116, 45, 100,
636 187, 97, 206, 143, 158, 54, 98, 113, 30, 101, 151, 56, 187, 116, 199, 157,
637 108, 136, 90, 36, 85, 253, 171, 140, 253, 14, 229, 238, 65, 220, 56, 162,
638 194, 138, 46, 251, 90, 92, 121, 202, 202, 98, 133, 78, 229, 87, 31, 158,
639 12, 175, 122, 17, 65, 10, 163, 51, 163, 95, 143, 208, 9, 192, 58, 29,
640 130, 4, 237, 194, 246, 82, 11, 20, 49, 26, 177, 34, 202, 180, 210, 111,
641 234, 151, 37, 27, 225, 7, 205, 35, 242, 176, 98, 232, 60, 89, 99, 33,
642 233, 106, 236, 96, 248, 71, 101, 133, 44, 190, 241, 76, 113, 146, 181, 106,
643 191, 130, 100, 127, 206, 138, 118, 124, 159, 138, 215, 82, 22, 224, 17, 114,
644 127, 109, 203, 60, 33, 67, 126, 145, 25, 199, 88, 97, 150, 40, 68, 185,
645 144, 218, 230, 81, 203, 223, 45, 209, 250, 22, 234, 12, 153, 49, 19, 107,
646 97, 79, 126, 100, 128, 16, 12, 83, 74, 94, 23, 159, 192, 193, 74, 153,
647 246, 12, 157, 248, 106, 34, 35, 64, 99, 184, 137, 91, 26, 154, 127, 155,
648 218, 36, 185, 64, 26, 41, 236, 232, 223, 159, 10, 29, 165, 12, 244, 214,
649 231, 231, 212, 154, 169, 66, 39, 153, 129, 38, 40, 46, 140, 140, 172, 0,
650 251, 41, 244, 153, 56, 180, 67, 22, 40, 33, 9, 111, 79, 11, 215, 49,
651 66, 195, 45, 113, 22, 41, 109, 39, 124, 178, 49, 173, 25, 245, 157, 190,
652 63, 116, 79, 213, 200, 171, 85, 121, 185, 198, 99, 92, 235, 127, 157, 18,
653 45, 201, 187, 193, 140, 79, 33, 65, 24, 11, 175, 105, 233, 47, 242, 36,
654 139, 254, 195, 48, 31, 146, 32, 0, 150, 237, 52, 165, 4, 174, 230, 81,
655 72, 146, 101, 241, 206, 146, 151, 105, 106, 255, 165, 127, 196, 69, 250, 155,
656 248, 177, 254, 232, 30, 109, 169, 33, 76, 112, 72, 214, 254, 113, 170, 234,
657 191, 76, 20, 132, 209, 243, 152, 241, 107, 12, 107, 31, 16, 149, 129, 8,
658 160, 7, 54, 31, 219, 58, 93, 76, 50, 143, 210, 73, 131, 59, 34, 38,
659 88, 9, 217, 193, 206, 147, 54, 244, 11, 240, 180, 243, 123, 68, 124, 81,
660 153, 132, 49, 38, 33, 220, 125, 164, 236, 162, 128, 202, 246, 183, 178, 35,
661 242, 109, 76, 7, 215, 92, 149, 32, 117, 34, 174, 122, 34, 101, 5, 67,
662 79, 24, 48, 75, 194, 8, 12, 98, 113, 36, 13, 79, 16, 94, 249, 110,
663 147, 212, 105, 205, 39, 31, 127, 182, 213, 97, 28, 226, 105, 217, 245, 84,
664 138, 119, 58, 136, 137, 79, 193, 116, 226, 72, 101, 0, 142, 171, 59, 40,
665 203, 158, 100, 187, 137, 8, 9, 125, 233, 16, 241, 192, 135, 4, 72, 132,
666 89, 126, 34, 0, 197, 80, 159, 101, 77, 18, 52, 179, 249, 169, 95, 125,
667 120, 18, 56, 177, 106, 6, 100, 99, 197, 197, 111, 104, 120, 211, 163, 86,
668 224, 106, 157, 48, 112, 84, 232, 171, 172, 220, 107, 136, 118, 170, 105, 16,
669 133, 223, 77, 65, 61, 41, 184, 88, 67, 98, 175, 216, 139, 56, 140, 26,
670 18, 179, 212, 180, 218, 235, 78, 180, 154, 144, 195, 188, 126, 205, 37, 58,
671 203, 223, 248, 156, 87, 139, 176, 77, 244, 117, 77, 148, 85, 187, 142, 119,
672 144, 113, 128, 217, 33, 5, 107, 247, 10, 178, 66, 206, 128, 187, 155, 161,
673 150, 166, 9, 194, 18, 87, 82, 5, 42, 74, 250, 215, 83, 145, 8, 158,
674 182, 156, 82, 161, 19, 87, 92, 77, 14, 7, 208, 23, 8, 13, 59, 57,
675 167, 252, 236, 167, 68, 206, 208, 173, 237, 84, 141, 14, 118, 250, 194, 37,
676 131, 146, 23, 17, 37, 228, 42, 134, 130, 193, 34, 83, 151, 107, 227, 133,
677 189, 157, 96, 73, 176, 115, 205, 111, 159, 89, 182, 43, 180, 27, 36, 57,
678 30, 151, 83, 181, 2, 2, 53, 17, 231, 175, 92, 52, 97, 124, 25, 172,
679 17, 206, 83, 37, 79, 60, 174, 47, 181, 207, 115, 216, 0, 59, 178, 186,
680 222, 154, 48, 10, 203, 237, 168, 102, 67, 97, 12, 80, 164, 196, 36, 102,
681 249, 198, 223, 40, 139, 247, 238, 100, 167, 179, 209, 170, 131, 198, 166, 105,
682 139, 118, 164, 153, 86, 75, 187, 187, 197, 160, 68, 198, 18, 67, 72, 85,
683 158, 8, 198, 13, 38, 133, 227, 47, 6, 64, 250, 136, 178, 128, 108, 116,
684 81, 186, 206, 233, 159, 179, 60, 114, 136, 222, 26, 198, 221, 9, 223, 32,
685 123, 35, 23, 188, 146, 155, 213, 76, 159, 32, 252, 211, 185, 1, 157, 178,
686 135, 227, 248, 103, 157, 213, 189, 148, 107, 135, 236, 254, 236, 112, 211, 216,
687 133, 146, 65, 193, 156, 12, 68, 129, 130, 145, 203, 140, 174, 99, 164, 145,
688 36, 252, 41, 175, 206, 147, 115, 196, 4, 174, 108, 17, 122, 230, 134, 147,
689 226, 163, 123, 125, 195, 16, 122, 59, 157, 243, 224, 222, 35, 75, 158, 165,
690 183, 96, 220, 251, 154, 155, 140, 144, 238, 87, 118, 32, 40, 120, 50, 237,
691 231, 139, 167, 105, 32, 225, 232, 86, 220, 154, 75, 196, 71, 65, 93, 220,
692 61, 119, 51, 177, 246, 221, 145, 96, 123, 19, 25, 236, 101, 58, 161, 73,
693 84, 176, 133, 105, 196, 134, 172, 27, 162, 226, 224, 55, 16, 137, 168, 193,
694 190, 36, 174, 21, 216, 214, 118, 104, 129, 255, 68, 151, 108, 167, 109, 82,
695 66, 183, 246, 156, 70, 234, 152, 129, 21, 156, 244, 102, 179, 68, 253, 171,
696 86, 189, 188, 191, 254, 81, 210, 173, 115, 204, 35, 164, 144, 108, 236, 225,
697 100, 49, 60, 210, 38, 90, 187, 49, 180, 192, 94, 27, 241, 255, 99, 158,
698 7, 237, 83, 24, 236, 15, 188, 123, 165, 197, 98, 230, 62, 46, 224, 117,
699 139, 102, 180, 131, 227, 218, 54, 126, 52, 152, 148, 252, 217, 93, 32, 154,
700 96, 161, 242, 40, 170, 26, 56, 74, 254, 10, 15, 19, 201, 213, 81, 46,
701 158, 233, 148, 163, 223, 116, 67, 170, 168, 17, 52, 115, 222, 60, 24, 251,
702 6, 74, 89, 86, 242, 245, 45, 128, 182, 3, 195, 154, 20, 179, 113, 153,
703 44, 242, 180, 83, 26, 92, 220, 87, 99, 40, 234, 36, 47, 104, 5, 216,
704 15, 75, 28, 250, 13, 84, 199, 155, 151, 61, 58, 214, 142, 173, 215, 72,
705 185, 60, 233, 73, 102, 177, 181, 170, 7, 48, 166, 110, 32, 227, 24, 254,
706 43, 157, 97, 119, 1, 125, 154, 244, 80, 196, 119, 70, 137, 163, 29, 157,
707 21, 96, 40, 77, 149, 43, 89, 115, 78, 66, 67, 78, 130, 122, 141, 108,
708 245, 94, 13, 91, 233, 28, 99, 104, 150, 29, 104, 122, 221, 186, 150, 126,
709 164, 59, 147, 132, 74, 1, 84, 129, 134, 199, 184, 19, 164, 172, 218, 226,
710 69, 96, 187, 3, 219, 55, 20, 36, 43, 220, 131, 166, 139, 173, 189, 7,
711 95, 213, 220, 66, 112, 32, 44, 231, 163, 42, 23, 106, 253, 98, 142, 233,
712 108, 164, 242, 111, 223, 130, 113, 101, 180, 103, 69, 79, 3, 212, 134, 113,
713 14, 252, 41, 247, 87, 188, 147, 176, 171, 218, 249, 176, 197, 157, 118, 13,
714 73, 246, 206, 106, 50, 120, 17, 148, 147, 164, 185, 70, 144, 158, 116, 214,
715 92, 246, 184, 68, 85, 100, 240, 154, 2, 156, 164, 212, 110, 241, 153, 129,
716 7, 222, 203, 157, 48, 94, 103, 89, 110, 197, 102, 10, 76, 234, 22, 12,
717 104, 202, 167, 57, 56, 178, 52, 73, 40, 212, 95, 196, 212, 166, 85, 15,
718 41, 81, 141, 124, 130, 100, 79, 100, 175, 126, 225, 151, 102, 116, 43, 17,
719 190, 116, 116, 79, 51, 59, 243, 149, 11, 121, 3, 234, 103, 221, 234, 201,
720 245, 5, 11, 20, 29, 181, 138, 67, 190, 119, 205, 66, 225, 155, 66, 14,
721 205, 68, 114, 207, 7, 180, 117, 185, 176, 204, 9, 9, 126, 205, 58, 142,
722 28, 136, 232, 53, 149, 237, 169, 44, 185, 78, 143, 99, 153, 143, 187, 157,
723 87, 106, 201, 63, 2, 205, 96, 226, 4, 28, 208, 81, 197, 98, 126, 168,
724 170, 63, 29, 15, 228, 23, 82, 12, 109, 204, 227, 231, 228, 87, 196, 63,
725 117, 68, 31, 206, 19, 177, 225, 66, 233, 244, 58, 185, 208, 188, 153, 253,
726 0, 60, 122, 11, 36, 193, 235, 90, 21, 89, 103, 232, 187, 68, 214, 232,
727 180, 13, 143, 157, 99, 180, 232, 213, 90, 113, 194, 193, 194, 230, 242, 45,
728 135, 51, 201, 80, 171, 128, 144, 150, 184, 193, 211, 22, 74, 186, 176, 237,
729 133, 181, 83, 216, 250, 76, 28, 144, 255, 76, 29, 64, 27, 25, 54, 88,
730 161, 132, 38, 34, 236, 32, 77, 106, 157, 6, 74, 120, 64, 211, 237, 173,
731 164, 29, 22, 107, 236, 9, 67, 136, 70, 87, 153, 52, 245, 162, 52, 213,
732 109, 66, 123, 116, 19, 54, 210, 216, 16, 72, 192, 249, 183, 108, 193, 60,
733 242, 120, 186, 160, 200, 137, 184, 180, 97, 15, 95, 167, 169, 87, 146, 151,
734 83, 244, 178, 11, 114, 231, 59, 246, 175, 29, 229, 95, 166, 199, 244, 74,
735 6, 79, 7, 15, 150, 53, 55, 148, 10, 214, 117, 214, 214, 18, 111, 23,
736 77, 192, 122, 193, 255, 196, 114, 120, 89, 233, 200, 20, 133, 140, 132, 162,
737 136, 45, 10, 216, 110, 169, 138, 221, 15, 114, 80, 66, 207, 159, 89, 31,
738 183, 6, 112, 209, 114, 85, 57, 171, 99, 14, 83, 218, 19, 240, 133, 147,
739 208, 50, 112, 209, 213, 114, 113, 128, 67, 115, 171, 57, 184, 202, 111, 119,
740 128, 8, 204, 133, 137, 179, 216, 142, 74, 57, 86, 75, 192, 237, 228, 108,
741 69, 105, 193, 141, 250, 76, 204, 128, 155, 26, 66, 172, 237, 250, 179, 186,
742 199, 211, 152, 65, 6, 152, 201, 105, 251, 78, 186, 157, 66, 69, 101, 190,
743 17, 230, 96, 168, 156, 29, 7, 59, 250, 141, 145, 141, 234, 100, 149, 39,
744 172, 205, 57, 39, 61, 6, 218, 254, 181, 184, 94, 155, 251, 236, 8, 17,
745 252, 132, 153, 56, 164, 230, 249, 203, 60, 78, 227, 136, 118, 97, 69, 247,
746 170, 83, 230, 125, 104, 85, 239, 19, 220, 15, 148, 251, 249, 196, 138, 38,
747 81, 209, 15, 231, 239, 183, 73, 121, 87, 157, 191, 171, 0, 99, 100, 105,
748 105, 223, 226, 113, 198, 179, 200, 75, 136, 55, 190, 194, 166, 94, 142, 224,
749 39, 193, 163, 138, 3, 203, 220, 34, 118, 216, 34, 142, 111, 227, 241, 205,
750 154, 220, 162, 107, 200, 100, 217, 194, 122, 207, 234, 161, 104, 119, 201, 84,
751 46, 37, 159, 130, 76, 136, 147, 250, 29, 209, 151, 145, 92, 189, 105, 79,
752 101, 117, 4, 209, 229, 171, 22, 168, 11, 210, 160, 120, 158, 218, 39, 129,
753 95, 30, 254, 37, 160, 17, 226, 65, 38, 155, 129, 122, 222, 170, 133, 113,
754 134, 168, 135, 212, 57, 200, 248, 226, 62, 62, 200, 159, 127, 42, 51, 90,
755 49, 28, 134, 6, 226, 227, 159, 163, 142, 179, 173, 151, 168, 47, 106, 150,
756 43, 205, 20, 245, 181, 82, 210, 73, 173, 93, 73, 132, 69, 71, 195, 129,
757 214, 106, 151, 117, 135, 138, 224, 126, 167, 48, 83, 34, 36, 200, 13, 29,
758 239, 80, 11, 224, 146, 30, 165, 79, 231, 209, 119, 168, 138, 217, 100, 202,
759 154, 132, 206, 54, 71, 170, 74, 126, 11, 105, 96, 94, 176, 133, 105, 167,
760 60, 81, 127, 80, 238, 86, 126, 54, 147, 16, 117, 54, 230, 12, 76, 196,
761 8, 177, 11, 61, 177, 113, 30, 40, 18, 26, 18, 55, 37, 74, 94, 243,
762 222, 250, 144, 1, 67, 236, 61, 94, 204, 49, 44, 63, 128, 123, 253, 163,
763 36, 31, 168, 42, 144, 198, 132, 53, 212, 183, 1, 234, 164, 254, 55, 113,
764 19, 28, 184, 210, 113, 4, 95, 146, 92, 164, 152, 120, 176, 218, 237, 134,
765 193, 243, 109, 2, 35, 253, 94, 25, 192, 246, 118, 186, 220, 218, 81, 217,
766 36, 126, 215, 24, 86, 127, 114, 69, 176, 237, 20, 52, 239, 1, 82, 149,
767 90, 227, 216, 108, 176, 100, 41, 68, 64, 97, 13, 13, 10, 132, 104, 252,
768 194, 30, 134, 21, 234, 121, 133, 137, 238, 55, 1, 233, 41, 41, 165, 24,
769 135, 243, 206, 15, 65, 184, 175, 222, 34, 216, 2, 143, 84, 207, 136, 195,
770 96, 7, 114, 230, 244, 158, 69, 30, 62, 183, 157, 58, 157, 248, 35, 163,
771 89, 27, 18, 44, 149, 74, 255, 140, 216, 203, 58, 102, 75, 24, 123, 11,
772 79, 224, 186, 187, 55, 178, 22, 170, 74, 65, 248, 185, 88, 174, 100, 179,
773 42, 147, 165, 94, 149, 106, 1, 14, 49, 135, 110, 240, 201, 36, 145, 118,
774 151, 62, 220, 245, 246, 188, 254, 207, 98, 231, 47, 67, 38, 225, 110, 86,
775 50, 168, 160, 3, 188, 233, 152, 13, 199, 93, 171, 72, 152, 181, 223, 144,
776 105, 206, 64, 198, 51, 125, 118, 168, 107, 110, 42, 87, 126, 137, 100, 52,
777 139, 187, 84, 78, 109, 68, 157, 242, 105, 42, 192, 199, 227, 229, 167, 149,
778 115, 222, 117, 64, 146, 168, 86, 69, 160, 37, 91, 184, 75, 172, 107, 178,
779 205, 113, 109, 197, 143, 177, 69, 241, 131, 191, 103, 112, 145, 194, 234, 152,
780 191, 196, 121, 189, 118, 85, 248, 218, 129, 113, 247, 58, 112, 168, 212, 15,
781 226, 249, 121, 7, 193, 119, 219, 153, 152, 134, 87, 50, 53, 1, 122, 228,
782 133, 70, 218, 235, 176, 226, 181, 228, 247, 171, 237, 208, 93, 219, 210, 204,
783 99, 81, 35, 94, 213, 244, 214, 133, 87, 38, 157, 220, 76, 241, 250, 9,
784 174, 94, 200, 220, 42, 33, 84, 33, 20, 6, 86, 165, 70, 17, 23, 147,
785 58, 74, 222, 31, 41, 174, 132, 226, 158, 2, 97, 151, 118, 118, 199, 237,
786 251, 181, 137, 122, 134, 180, 206, 25, 127, 6, 28, 88, 227, 99, 230, 21,
787 51, 19, 201, 179, 147, 131, 49, 170, 49, 104, 15, 138, 137, 169, 120, 94,
788 205, 80, 43, 230, 239, 124, 165, 225, 36, 228, 209, 108, 204, 135, 125, 157,
789 94, 203, 116, 141, 29, 156, 97, 146, 225, 80, 43, 254, 51, 120, 58, 221,
790 11, 176, 165, 179, 174, 53, 216, 195, 110, 24, 177, 125, 101, 171, 86, 108,
791 182, 14, 91, 146, 246, 127, 249, 192, 221, 143, 211, 90, 9, 12, 130, 246,
792 170, 107, 193, 134, 28, 49, 35, 254, 131, 137, 125, 207, 196, 72, 80, 90,
793 30, 174, 143, 172, 226, 50, 12, 236, 58, 235, 205, 251, 234, 171, 14, 201,
794 232, 131, 230, 212, 162, 143, 189, 179, 44, 100, 224, 49, 15, 155, 170, 228,
795 158, 151, 239, 19, 0, 232, 204, 216, 76, 21, 149, 130, 142, 63, 146, 152,
796 124, 136, 129, 14, 182, 212, 29, 8, 244, 12, 36, 28, 134, 52, 216, 106,
797 229, 107, 150, 8, 223, 247, 117, 229, 251, 216, 158, 228, 97, 240, 148, 228,
798 49, 138, 80, 34, 204, 52, 237, 43, 105, 142, 231, 20, 32, 70, 44, 180,
799 212, 121, 229, 177, 50, 152, 238, 72, 51, 116, 111, 18, 27, 211, 40, 211,
800 97, 226, 18, 155, 21, 216, 166, 165, 37, 234, 56, 121, 165, 159, 197, 87,
801 203, 146, 69, 137, 25, 148, 143, 246, 247, 131, 100, 91, 45, 25, 127, 103,
802 35, 219, 32, 31, 237, 93, 92, 167, 194, 64, 255, 188, 64, 139, 118, 135,
803 212, 56, 216, 167, 102, 36, 220, 109, 21, 147, 92, 78, 8, 65, 213, 179,
804 11, 40, 227, 83, 207, 175, 56, 75, 193, 105, 239, 145, 193, 107, 234, 101,
805 50, 97, 123, 246, 137, 30, 180, 149, 18, 62, 162, 163, 16, 192, 79, 61,
806 222, 25, 35, 181, 13, 10, 90, 25, 216, 76, 219, 117, 100, 244, 159, 172,
807 223, 106, 19, 1, 176, 180, 154, 222, 182, 202, 241, 217, 150, 203, 244, 213,
808 94, 178, 158, 130, 166, 105, 167, 118, 194, 153, 142, 60, 134, 216, 142, 216,
809 254, 2, 7, 54, 26, 197, 25, 138, 74, 39, 101, 107, 168, 110, 24, 58,
810 191, 136, 25, 40, 26, 79, 96, 4, 25, 32, 134, 180, 69, 19, 198, 208,
811 254, 197, 133, 72, 242, 66, 107, 23, 157, 143, 117, 50, 224, 198, 246, 8,
812 19, 49, 213, 159, 9, 201, 160, 158, 200, 59, 145, 119, 110, 58, 190, 132,
813 168, 220, 64, 171, 103, 140, 202, 167, 130, 190, 195, 57, 194, 90, 11, 214,
814 19, 53, 68, 88, 89, 14, 235, 20, 50, 249, 248, 100, 241, 10, 149, 35,
815 93, 4, 84, 62, 75, 41, 223, 81, 56, 18, 14, 101, 224, 40, 118, 53,
816 252, 72, 194, 185, 15, 235, 120, 170, 171, 237, 242, 201, 96, 157, 93, 248,
817 227, 156, 239, 249, 190, 10, 177, 147, 77, 18, 157, 53, 114, 233, 168, 14,
818 28, 80, 50, 89, 248, 127, 156, 98, 193, 111, 202, 38, 248, 60, 243, 240,
819 198, 122, 227, 160, 117, 138, 247, 171, 235, 47, 23, 245, 177, 12, 24, 213,
820 214, 117, 210, 86, 85, 55, 153, 25, 16, 53, 195, 81, 247, 217, 104, 109,
821 170, 63, 79, 169, 38, 150, 42, 167, 206, 230, 51, 109, 62, 202, 205, 164,
822 28, 240, 90, 82, 119, 57, 222, 95, 195, 106, 193, 197, 180, 73, 24, 108,
823 143, 114, 54, 29, 100, 255, 124, 30, 143, 120, 147, 84, 110, 157, 53, 226,
824 104, 117, 65, 60, 187, 173, 94, 59, 132, 121, 145, 188, 220, 105, 4, 48,
825 89, 130, 82, 236, 212, 138, 179, 197, 182, 115, 6, 83, 196, 132, 184, 148,
826 183, 101, 141, 92, 84, 153, 147, 133, 212, 8, 250, 226, 167, 209, 22, 95,
827 44, 103, 243, 27, 111, 105, 128, 110, 88, 110, 190, 229, 81, 26, 219, 229,
828 83, 247, 16, 17, 158, 228, 197, 32, 193, 223, 184, 178, 89, 21, 43, 254,
829 124, 144, 200, 131, 138, 5, 107, 98, 139, 16, 184, 127, 244, 51, 141, 88,
830 178, 132, 205, 239, 123, 14, 34, 2, 244, 238, 154, 230, 146, 87, 15, 20,
831 164, 174, 159, 28, 211, 81, 230, 227, 158, 16, 168, 8, 18, 105, 177, 68,
832 50, 127, 64, 73, 123, 233, 44, 34, 159, 133, 66, 100, 163, 184, 244, 171,
833 240, 235, 230, 160, 137, 131, 200, 230, 189, 136, 137, 240, 110, 253, 0, 250,
834 52, 126, 123, 209, 83, 189, 61, 243, 153, 60, 36, 157, 156, 141, 175, 212,
835 219, 217, 33, 144, 133, 126, 7, 41, 228, 77, 247, 47, 162, 47, 3, 157,
836 32, 219, 149, 138, 51, 181, 65, 242, 51, 76, 185, 51, 5, 188, 216, 33,
837 31, 179, 247, 93, 55, 241, 103, 253, 14, 6, 32, 17, 137, 194, 126, 235,
838 132, 115, 93, 167, 187, 190, 147, 190, 255, 120, 166, 38, 118, 241, 129, 163,
839 37, 39, 155, 142, 37, 147, 134, 221, 136, 99, 114, 152, 250, 143, 53, 104,
840 103, 7, 37, 178, 195, 124, 200, 196, 34, 8, 247, 255, 156, 141, 29, 202,
841 239, 70, 189, 144, 0, 167, 182, 105, 57, 205, 218, 54, 151, 29, 7, 76,
842 7, 84, 20, 246, 185, 216, 93, 21, 96, 25, 115, 176, 38, 180, 177, 224,
843 112, 104, 92, 17, 152, 55, 211, 21, 210, 98, 249, 201, 21, 85, 84, 185,
844 53, 59, 147, 198, 1, 251, 185, 235, 132, 73, 67, 194, 220, 120, 191, 206,
845 73, 53, 158, 237, 102, 41, 23, 133, 14, 81, 47, 204, 9, 142, 124, 180,
846 115, 236, 180, 190, 218, 68, 92, 113, 54, 250, 174, 99, 126, 1, 186, 88,
847 231, 96, 51, 147, 236, 164, 135, 210, 75, 242, 196, 53, 104, 101, 233, 0,
848 129, 173, 53, 118, 42, 188, 139, 187, 251, 143, 37, 222, 198, 168, 194, 103,
849 107, 56, 240, 213, 98, 0, 65, 112, 187, 230, 203, 207, 104, 124, 78, 130,
850 66, 156, 214, 95, 22, 46, 181, 254, 15, 201, 138, 160, 138, 171, 202, 3,
851 169, 187, 110, 58, 43, 218, 62, 112, 49, 206, 186, 161, 31, 140, 183, 84,
852 143, 250, 217, 123, 9, 210, 87, 1, 208, 77, 143, 33, 6, 237, 173, 108,
853 187, 137, 131, 148, 145, 22, 123, 142, 146, 156, 223, 61, 124, 151, 57, 17,
854 88, 139, 56, 8, 26, 205, 163, 193, 72, 201, 209, 220, 215, 97, 172, 73,
855 99, 139, 111, 125, 94, 196, 78, 235, 224, 103, 38, 237, 9, 142, 131, 229,
856 45, 247, 172, 219, 29, 102, 67, 124, 171, 113, 2, 85, 148, 56, 150, 227,
857 45, 147, 200, 171, 42, 244, 128, 106, 2, 47, 245, 211, 163, 240, 41, 86,
858 50, 70, 44, 91, 166, 247, 110, 234, 138, 152, 4, 100, 49, 248, 198, 51,
859 124, 253, 126, 122, 30, 165, 0, 183, 248, 65, 30, 156, 161, 52, 164, 76,
860 44, 198, 99, 20, 24, 97, 93, 232, 104, 51, 200, 0, 153, 67, 93, 172,
861 94, 217, 127, 34, 29, 64, 149, 41, 78, 211, 63, 188, 61, 102, 2, 127,
862 166, 194, 5, 59, 203, 5, 224, 68, 250, 58, 202, 236, 218, 235, 168, 0,
863 205, 82, 53, 99, 51, 144, 0, 140, 45, 46, 213, 207, 17, 221, 47, 85,
864 211, 87, 2, 35, 167, 236, 191, 70, 147, 201, 200, 69, 1, 228, 136, 243,
865 122, 253, 34, 201, 92, 90, 194, 8, 119, 197, 197, 178, 157, 207, 170, 147,
866 232, 5, 200, 241, 6, 27, 120, 242, 232, 163, 26, 234, 230, 50, 214, 194,
867 125, 135, 62, 28, 118, 24, 155, 39, 166, 250, 204, 189, 169, 94, 110, 81,
868 222, 81, 127, 71, 49, 176, 178, 37, 63, 219, 72, 0, 100, 255, 201, 70,
869 177, 208, 81, 101, 177, 31, 130, 187, 196, 119, 161, 217, 207, 216, 59, 106,
870 15, 56, 134, 229, 99, 68, 73, 215, 9, 25, 119, 82, 88, 19, 184, 42,
871 38, 40, 176, 6, 34, 167, 249, 143, 6, 216, 128, 139, 75, 3, 229, 126,
872 121, 187, 68, 219, 187, 99, 154, 175, 240, 86, 75, 40, 133, 146, 223, 105,
873 220, 83, 126, 90, 206, 136, 102, 199, 36, 217, 56, 78, 226, 138, 59, 142,
874 223, 68, 175, 191, 83, 224, 208, 195, 2, 102, 168, 194, 158, 231, 143, 162,
875 83, 92, 93, 238, 12, 231, 142, 41, 106, 66, 178, 68, 83, 155, 24, 102,
876 150, 112, 1, 27, 175, 239, 85, 175, 61, 75, 157, 245, 121, 62, 171, 217,
877 55, 218, 86, 45, 10, 228, 203, 193, 216, 90, 142, 109, 232, 168, 17, 149,
878 145, 169, 199, 134, 194, 110, 104, 66, 130, 215, 179, 205, 6, 183, 93, 47,
879 131, 8, 104, 12, 169, 92, 69, 43, 193, 77, 223, 238, 36, 15, 59, 136,
880 95, 87, 196, 169, 35, 118, 252, 19, 6, 247, 172, 219, 159, 109, 118, 154,
881 10, 199, 227, 164, 36, 85, 27, 37, 52, 149, 85, 107, 134, 203, 39, 112,
882 63, 235, 229, 225, 141, 127, 46, 188, 125, 48, 183, 137, 79, 157, 251, 128,
883 214, 29, 60, 192, 43, 20, 22, 77, 62, 5, 229, 201, 61, 217, 181, 68,
884 161, 232, 220, 189, 206, 170, 48, 199, 251, 10, 93, 153, 112, 35, 81, 174,
885 17, 220, 54, 183, 4, 229, 14, 231, 33, 14, 63, 121, 125, 205, 101, 110,
886 255, 145, 55, 130, 56, 4, 236, 171, 27, 10, 130, 188, 115, 125, 104, 178,
887 41, 100, 48, 200, 231, 41, 156, 32, 125, 22, 167, 209, 221, 201, 63, 165,
888 210, 15, 14, 83, 162, 45, 176, 131, 195, 34, 145, 120, 155, 67, 82, 254,
889 231, 179, 149, 97, 4, 84, 30, 62, 140, 39, 235, 91, 145, 92, 89, 87,
890 96, 144, 96, 223, 153, 0, 28, 117, 238, 168, 40, 11, 140, 197, 162, 172,
891 72, 23, 120, 153, 147, 195, 6, 39, 36, 54, 174, 202, 182, 74, 232, 30,
892 240, 10, 130, 188, 127, 2, 48, 68, 9, 191, 245, 176, 249, 169, 19, 21,
893 154, 45, 249, 114, 137, 223, 190, 252, 87, 36, 85, 242, 96, 21, 234, 18,
894 157, 108, 86, 179, 103, 87, 149, 121, 231, 19, 111, 157, 154, 171, 158, 128,
895 68, 253, 157, 146, 9, 11, 82, 101, 218, 181, 37, 73, 31, 19, 122, 211,
896 104, 102, 172, 244, 119, 94, 235, 143, 241, 113, 24, 211, 132, 227, 169, 254,
897 60, 118, 45, 122, 177, 97, 161, 170, 233, 212, 139, 23, 179, 61, 117, 175,
898 126, 18, 119, 242, 14, 67, 254, 147, 62, 61, 58, 54, 42, 75, 134, 163,
899 134, 56, 20, 222, 1, 199, 168, 38, 142, 114, 14, 84, 106, 218, 24, 245,
900 129, 59, 86, 217, 80, 79, 119, 218, 53, 136, 124, 63, 90, 179, 205, 112,
901 192, 116, 186, 223, 65, 52, 109, 169, 196, 209, 73, 239, 124, 224, 15, 78,
902 134, 164, 65, 189, 58, 22, 166, 57, 64, 104, 185, 101, 43, 231, 254, 145,
903 156, 74, 38, 201, 121, 28, 25, 221, 129, 82, 26, 14, 36, 32, 158, 208,
904 70, 2, 201, 70, 190, 208, 246, 54, 239, 158, 140, 212, 225, 209, 177, 86,
905 31, 32, 45, 93, 207, 255, 12, 176, 154, 217, 193, 166, 61, 241, 53, 80,
906 37, 214, 34, 65, 207, 114, 163, 132, 116, 133, 63, 217, 234, 5, 111, 188,
907 79, 1, 110, 88, 156, 17, 242, 1, 138, 105, 144, 213, 123, 212, 7, 164,
908 200, 175, 161, 145, 108, 104, 174, 202, 202, 35, 153, 88, 138, 105, 58, 143,
909 57, 227, 90, 38, 189, 38, 66, 80, 222, 174, 7, 202, 57, 236, 239, 104,
910 51, 26, 252, 140, 2, 74, 4, 163, 211, 199, 202, 185, 65, 203, 13, 210,
911 69, 228, 115, 31, 100, 143, 189, 100, 228, 209, 107, 55, 72, 150, 255, 144,
912 232, 155, 15, 42, 18, 149, 49, 207, 32, 148, 178, 112, 254, 67, 51, 14,
913 217, 41, 203, 217, 205, 101, 223, 161, 148, 33, 92, 164, 250, 91, 80, 251,
914 104, 157, 225, 172, 18, 245, 5, 54, 30, 8, 254, 109, 3, 202, 215, 179,
915 161, 236, 147, 104, 254, 232, 217, 124, 178, 1, 206, 38, 168, 77, 8, 112,
916 234, 154, 162, 94, 3, 90, 94, 114, 137, 115, 42, 98, 202, 0, 214, 202,
917 65, 93, 52, 179, 123, 74, 86, 10, 171, 211, 171, 44, 226, 56, 13, 163,
918 7, 146, 57, 253, 115, 93, 156, 132, 119, 146, 107, 98, 218, 19, 195, 5,
919 195, 190, 231, 218, 143, 48, 65, 102, 92, 0, 244, 108, 148, 144, 214, 99,
920 128, 208, 85, 124, 5, 75, 38, 131, 93, 38, 21, 170, 24, 105, 170, 135,
921 152, 21, 38, 191, 251, 88, 178, 62, 84, 177, 239, 61, 156, 63, 47, 195,
922 117, 159, 198, 182, 126, 216, 103, 165, 158, 51, 70, 34, 33, 241, 216, 11,
923 50, 152, 157, 100, 30, 66, 147, 88, 38, 17, 251, 19, 182, 71, 65, 199,
924 150, 215, 188, 188, 80, 83, 2, 83, 73, 183, 251, 85, 101, 25, 173, 50,
925 243, 138, 194, 98, 209, 104, 219, 25, 45, 111, 172, 115, 238, 149, 4, 205,
926 123, 112, 218, 192, 247, 102, 191, 30, 225, 230, 36, 188, 219, 220, 19, 213,
927 127, 226, 227, 17, 90, 216, 88, 129, 249, 230, 91, 42, 111, 102, 45, 42,
928 175, 161, 188, 195, 184, 238, 57, 69, 88, 168, 167, 23, 64, 47, 201, 51,
929 79, 65, 117, 254, 146, 100, 8, 30, 209, 42, 138, 132, 209, 241, 66, 249,
930 228, 192, 48, 21, 75, 202, 123, 99, 76, 87, 34, 99, 32, 224, 140, 94,
931 90, 178, 47, 165, 23, 227, 92, 218, 45, 44, 104, 9, 23, 94, 254, 195,
932 16, 12, 105, 135, 48, 225, 7, 139, 148, 199, 157, 139, 243, 71, 254, 15,
933 64, 143, 140, 3, 221, 218, 117, 118, 34, 177, 156, 50, 220, 99, 219, 4,
934 247, 244, 16, 100, 51, 73, 85, 181, 24, 127, 102, 173, 238, 205, 143, 68,
935 63, 44, 197, 106, 165, 150, 11, 244, 198, 36, 101, 10, 79, 207, 183, 214,
936 228, 226, 226, 235, 77, 11, 175, 80, 90, 197, 35, 99, 7, 121, 208, 236,
937 141, 171, 176, 158, 219, 162, 166, 168, 147, 2, 131, 180, 57, 229, 106, 63,
938 194, 250, 21, 63, 152, 16, 109, 20, 208, 227, 225, 10, 22, 2, 223, 128,
939 89, 100, 47, 101, 165, 0, 147, 198, 47, 109, 94, 113, 183, 101, 113, 248,
940 79, 21, 26, 141, 176, 52, 118, 71, 143, 174, 194, 248, 199, 194, 245, 105,
941 112, 92, 180, 22, 184, 218, 78, 192, 41, 17, 171, 143, 203, 2, 81, 178,
942 177, 138, 101, 113, 190, 77, 70, 73, 85, 228, 194, 2, 70, 191, 54, 43,
943 188, 233, 27, 135, 140, 127, 10, 59, 38, 86, 226, 127, 166, 132, 69, 21,
944 200, 107, 33, 89, 24, 152, 88, 90, 75, 144, 236, 44, 10, 121, 139, 169,
945 113, 127, 104, 227, 164, 145, 69, 196, 233, 237, 127, 132, 204, 244, 178, 247,
946 191, 207, 63, 135, 214, 135, 213, 151, 44, 43, 190, 32, 241, 221, 118, 81,
947 145, 43, 29, 244, 239, 78, 245, 115, 229, 178, 255, 147, 16, 149, 255, 154,
948 217, 226, 234, 99, 247, 146, 209, 42, 9, 74, 220, 199, 178, 165, 246, 188,
949 22, 51, 136, 38, 63, 125, 45, 108, 190, 111, 72, 248, 57, 16, 107, 120,
950 245, 158, 215, 136, 9, 25, 61, 162, 148, 109, 112, 193, 56, 81, 121, 143,
951 208, 225, 20, 130, 245, 12, 81, 156, 189, 102, 23, 51, 135, 76, 205, 59,
952 197, 152, 35, 80, 127, 168, 223, 48, 20, 104, 57, 69, 132, 53, 72, 220,
953 161, 178, 219, 33, 37, 245, 58, 199, 17, 246, 39, 2, 84, 251, 20, 62,
954 21, 56, 209, 143, 149, 24, 68, 59, 17, 240, 215, 95, 195, 188, 231, 97,
955 41, 32, 98, 57, 107, 172, 90, 159, 132, 150, 226, 75, 151, 144, 12, 111,
956 6, 253, 112, 213, 28, 179, 232, 233, 73, 139, 84, 232, 204, 0, 148, 77,
957 48, 183, 37, 213, 67, 195, 211, 206, 12, 110, 212, 180, 201, 229, 77, 7,
958 48, 221, 44, 102, 23, 168, 145, 200, 77, 103, 7, 173, 247, 84, 110, 123,
959 23, 5, 145, 154, 124, 95, 103, 89, 78, 136, 74, 47, 136, 86, 135, 250,
960 60, 228, 64, 78, 228, 172, 111, 204, 89, 144, 119, 8, 248, 81, 70, 113,
961 89, 113, 50, 70, 124, 182, 58, 179, 77, 197, 160, 136, 41, 195, 19, 163,
962 222, 23, 34, 70, 203, 156, 137, 209, 146, 213, 112, 210, 203, 138, 236, 36,
963 24, 57, 106, 75, 115, 112, 43, 229, 239, 154, 133, 160, 211, 36, 241, 229,
964 94, 110, 224, 182, 162, 85, 189, 20, 125, 9, 26, 137, 185, 177, 14, 138,
965 5, 225, 132, 174, 244, 209, 187, 92, 140, 29, 158, 111, 150, 8, 32, 99,
966 99, 142, 213, 19, 101, 164, 64, 190, 61, 219, 198, 118, 246, 217, 110, 173,
967 248, 24, 100, 216, 190, 118, 198, 209, 64, 238, 205, 176, 46, 116, 131, 103,
968 243, 148, 123, 69, 136, 144, 46, 112, 112, 162, 219, 21, 205, 136, 193, 152,
969 96, 134, 16, 22, 146, 190, 194, 19, 119, 47, 44, 67, 131, 166, 109, 215,
970 159, 90, 88, 212, 11, 71, 235, 55, 31, 4, 113, 172, 187, 169, 10, 144,
971 169, 108, 79, 145, 7, 29, 24, 221, 230, 28, 113, 32, 190, 160, 67, 40,
972 43, 107, 222, 221, 175, 180, 200, 217, 15, 128, 253, 206, 203, 106, 167, 163,
973 89, 29, 28, 247, 240, 14, 121, 133, 218, 154, 167, 77, 98, 149, 151, 145,
974 4, 78, 232, 135, 195, 121, 157, 216, 178, 211, 243, 201, 71, 220, 150, 119,
975 74, 71, 110, 200, 234, 100, 105, 248, 47, 25, 35, 1, 241, 166, 6, 88,
976 41, 246, 176, 181, 21, 75, 150, 20, 227, 19, 64, 226, 209, 194, 121, 174,
977 240, 219, 133, 253, 161, 146, 230, 69, 122, 42, 165, 82, 78, 45, 185, 61,
978 12, 14, 148, 13, 119, 155, 157, 28, 90, 226, 119, 9, 201, 199, 64, 93,
979 120, 115, 138, 156, 235, 123, 52, 111, 149, 48, 73, 181, 204, 181, 10, 157,
980 16, 55, 100, 243, 10, 29, 159, 139, 88, 16, 1, 31, 201, 242, 2, 237,
981 186, 181, 217, 139, 102, 205, 119, 197, 201, 221, 108, 205, 171, 54, 109, 31,
982 76, 199, 28, 160, 214, 14, 201, 25, 211, 189, 144, 44, 69, 70, 205, 79,
983 150, 149, 108, 23, 8, 171, 60, 18, 127, 161, 41, 71, 239, 168, 89, 140,
984 49, 149, 157, 109, 232, 141, 227, 239, 247, 114, 174, 129, 19, 252, 130, 74,
985 202, 224, 73, 122, 246, 47, 147, 8, 37, 60, 253, 101, 11, 171, 160, 39,
986 92, 180, 183, 40, 254, 233, 117, 200, 139, 37, 140, 28, 35, 8, 10, 40,
987 167, 247, 248, 84, 215, 58, 170, 2, 7, 1, 69, 214, 10, 7, 233, 209,
988 181, 212, 34, 68, 46, 141, 198, 137, 248, 45, 130, 97, 123, 104, 141, 17,
989 126, 7, 199, 55, 194, 160, 69, 39, 13, 70, 41, 63, 205, 99, 1, 69,
990 46, 92, 77, 56, 20, 247, 224, 226, 60, 153, 81, 180, 91, 159, 156, 27,
991 119, 114, 126, 210, 26, 123, 165, 204, 237, 81, 75, 130, 45, 60, 0, 155,
992 11, 125, 27, 202, 35, 230, 101, 164, 86, 117, 226, 23, 171, 253, 222, 223,
993 38, 104, 224, 124, 92, 251, 110, 145, 247, 198, 158, 25, 172, 84, 49, 87,
994 1, 168, 95, 124, 146, 5, 46, 179, 198, 235, 69, 200, 63, 212, 59, 110,
995 52, 195, 54, 71, 169, 234, 189, 58, 180, 149, 194, 10, 118, 99, 66, 66,
996 123, 192, 248, 51, 237, 129, 10, 143, 94, 55, 135, 247, 56, 163, 40, 139,
997 150, 192, 142, 64, 169, 90, 42, 116, 228, 62, 67, 130, 212, 212, 23, 210,
998 182, 95, 109, 224, 185, 255, 156, 102, 184, 171, 42, 98, 217, 218, 27, 80,
999 171, 125, 49, 233, 16, 238, 42, 102, 61, 95, 180, 49, 192, 67, 112, 143,
1000 106, 145, 185, 239, 180, 181, 120, 24, 127, 215, 233, 123, 235, 104, 228, 248,
1001 223, 90, 211, 211, 76, 179, 198, 253, 220, 171, 247, 171, 11, 237, 17, 249,
1002 81, 122, 111, 255, 213, 120, 167, 192, 149, 102, 7, 204, 86, 107, 156, 83,
1003 174, 18, 237, 143, 85, 76, 245, 189, 86, 90, 118, 69, 100, 140, 121, 17,
1004 255, 17, 209, 144, 90, 3, 191, 201, 134, 108, 0, 196, 133, 153, 39, 248,
1005 138, 215, 73, 18, 21, 140, 172, 178, 154, 194, 170, 45, 112, 113, 213, 36,
1006 155, 0, 30, 213, 186, 39, 6, 241, 92, 111, 139, 52, 84, 58, 218, 187,
1007 60, 123, 113, 190, 185, 89, 242, 248, 221, 238, 173, 145, 214, 237, 133, 101,
1008 6, 143, 188, 116, 13, 189, 205, 203, 147, 140, 215, 175, 38, 99, 77, 54,
1009 98, 146, 54, 101, 40, 206, 175, 26, 195, 33, 63, 20, 210, 96, 227, 125,
1010 108, 230, 179, 123, 81, 135, 183, 132, 216, 56, 223, 197, 141, 158, 114, 228,
1011 67, 172, 95, 76, 69, 212, 188, 244, 12, 16, 158, 119, 106, 44, 39, 36,
1012 38, 164, 173, 182, 172, 210, 176, 19, 125, 6, 36, 138, 77, 65, 219, 30,
1013 45, 167, 21, 125, 49, 69, 173, 23, 242, 246, 25, 155, 194, 161, 140, 125,
1014 97, 153, 68, 120, 114, 23, 243, 242, 192, 129, 68, 88, 43, 161, 33, 152,
1015 130, 232, 179, 70, 156, 219, 198, 1, 135, 3, 178, 49, 92, 30, 125, 185,
1016 39, 185, 69, 143, 30, 180, 113, 109, 233, 156, 101, 82, 239, 142, 58, 234,
1017 151, 67, 2, 140, 198, 7, 180, 167, 33, 168, 131, 213, 157, 139, 43, 208,
1018 27, 217, 245, 115, 0, 59, 155, 69, 236, 209, 101, 139, 211, 247, 2, 41,
1019 113, 222, 7, 2, 109, 61, 232, 215, 145, 18, 202, 158, 187, 136, 54, 190,
1020 169, 13, 59, 204, 117, 37, 160, 6, 121, 200, 9, 189, 31, 0, 251, 78,
1021 223, 43, 122, 5, 42, 24, 74, 247, 241, 68, 42, 49, 28, 153, 3, 40,
1022 166, 47, 55, 83, 186, 236, 69, 132, 91, 115, 132, 26, 214, 160, 51, 161,
1023 232, 147, 172, 175, 144, 53, 58, 241, 1, 245, 53, 126, 211, 121, 98, 228,
1024 65, 166, 9, 186, 93, 111, 249, 87, 109, 85, 218, 177, 160, 225, 99, 131,
1025 167, 173, 36, 10, 121, 121, 98, 249, 99, 68, 128, 159, 217, 207, 65, 52,
1026 247, 53, 58, 135, 11, 76, 238, 101, 162, 166, 100, 126, 136, 157, 43, 172,
1027 186, 157, 138, 2, 132, 141, 165, 152, 92, 234, 3, 92, 81, 111, 83, 239,
1028 234, 204, 152, 240, 74, 198, 42, 56, 131, 104, 96, 83, 207, 109, 30, 185,
1029 45, 242, 2, 155, 47, 18, 111, 119, 57, 239, 7, 88, 45, 86, 239, 10,
1030 178, 146, 58, 248, 96, 166, 234, 253, 202, 224, 111, 120, 216, 70, 205, 29,
1031 154, 232, 216, 165, 222, 76, 153, 46, 5, 143, 71, 197, 175, 198, 127, 231,
1032 119, 110, 47, 128, 61, 134, 41, 115, 101, 3, 35, 127, 201, 12, 152, 1,
1033 163, 41, 91, 233, 10, 230, 150, 44, 140, 234, 164, 184, 214, 218, 114, 23,
1034 221, 163, 57, 2, 5, 147, 66, 223, 90, 238, 136, 95, 138, 116, 27, 91,
1035 223, 52, 243, 246, 183, 215, 166, 170, 169, 8, 140, 91, 173, 160, 160, 105,
1036 69, 241, 31, 33, 33, 148, 215, 67, 130, 181, 1, 114, 104, 206, 192, 195,
1037 247, 229, 99, 84, 29, 2, 132, 146, 191, 243, 37, 36, 46, 176, 164, 68,
1038 84, 121, 159, 6, 160, 195, 170, 43, 128, 130, 165, 44, 157, 83, 173, 182,
1039 93, 90, 202, 227, 133, 140, 39, 203, 202, 2, 49, 96, 178, 190, 147, 15,
1040 99, 71, 216, 166, 97, 130, 87, 4, 149, 23, 107, 246, 216, 213, 222, 64,
1041 41, 215, 37, 211, 21, 53, 90, 130, 165, 181, 188, 87, 70, 8, 53, 114,
1042 227, 18, 192, 19, 200, 195, 83, 228, 1, 171, 202, 229, 92, 92, 227, 48,
1043 251, 31, 198, 59, 162, 119, 9, 75, 115, 30, 127, 8, 89, 99, 249, 86,
1044 152, 198, 53, 207, 82, 251, 68, 82, 247, 21, 214, 18, 246, 118, 81, 94,
1045 240, 34, 174, 233, 205, 204, 71, 0, 254, 24, 178, 166, 248, 12, 70, 187,
1046 163, 168, 95, 23, 108, 156, 210, 244, 198, 216, 54, 32, 83, 158, 121, 26,
1047 116, 252, 122, 73, 188, 134, 154, 180, 229, 139, 102, 2, 8, 171, 201, 5,
1048 187, 57, 35, 254, 35, 19, 161, 16, 88, 215, 158, 148, 249, 201, 65, 177,
1049 144, 69, 138, 161, 220, 255, 190, 223, 43, 181, 11, 158, 103, 193, 14, 21,
1050 49, 16, 40, 223, 155, 12, 164, 23, 31, 15, 20, 238, 131, 85, 181, 80,
1051 149, 128, 196, 123, 155, 236, 9, 94, 252, 182, 54, 62, 215, 115, 115, 224,
1052 242, 141, 137, 238, 115, 101, 107, 65, 202, 79, 79, 27, 239, 29, 154, 19,
1053 18, 4, 185, 144, 191, 107, 92, 29, 38, 248, 142, 81, 109, 64, 161, 23,
1054 73, 93, 31, 114, 51, 81, 98, 209, 69, 27, 43, 22, 4, 168, 88, 60,
1055 149, 89, 100, 82, 122, 95, 21, 38, 97, 185, 87, 66, 82, 16, 242, 109,
1056 100, 94, 164, 6, 73, 130, 76, 137, 218, 226, 166, 35, 21, 156, 72, 253,
1057 148, 228, 142, 134, 41, 145, 15, 144, 215, 187, 120, 239, 195, 203, 44, 250,
1058 46, 72, 181, 43, 255, 81, 247, 100, 195, 248, 208, 115, 141, 32, 190, 131,
1059 77, 230, 220, 54, 197, 60, 22, 115, 177, 116, 250, 0, 60, 144, 128, 68,
1060 245, 231, 199, 216, 17, 216, 227, 120, 221, 68, 233, 236, 202, 121, 189, 237,
1061 149, 60, 244, 130, 250, 169, 70, 101, 147, 8, 49, 248, 61, 207, 202, 148,
1062 228, 87, 234, 117, 238, 52, 92, 118, 148, 203, 206, 175, 75, 64, 215, 57,
1063 70, 196, 52, 62, 29, 116, 241, 185, 96, 131, 201, 219, 16, 3, 188, 159,
1064 129, 134, 11, 138, 13, 3, 72, 193, 183, 236, 91, 171, 161, 52, 166, 23,
1065 254, 118, 238, 180, 55, 215, 165, 163, 154, 202, 27, 61, 150, 31, 12, 1,
1066 249, 0, 12, 29, 132, 213, 168, 105, 53, 112, 54, 2, 236, 131, 230, 3,
1067 211, 69, 243, 233, 173, 145, 105, 27, 18, 252, 224, 5, 46, 18, 233, 96,
1068 237, 143, 52, 67, 158, 30, 242, 151, 98, 148, 208, 60, 143, 14, 245, 250,
1069 185, 151, 111, 147, 145, 197, 165, 233, 18, 178, 240, 83, 228, 213, 237, 58,
1070 20, 152, 249, 241, 250, 204, 15, 167, 97, 242, 6, 228, 117, 133, 2, 199,
1071 220, 212, 239, 206, 104, 231, 145, 33, 17, 150, 223, 126, 173, 223, 148, 21,
1072 228, 41, 63, 37, 19, 102, 73, 95, 196, 40, 151, 2, 19, 239, 182, 22,
1073 178, 165, 242, 159, 208, 226, 72, 179, 201, 109, 157, 18, 230, 130, 221, 89,
1074 173, 242, 170, 11, 146, 20, 135, 112, 2, 202, 30, 25, 106, 151, 52, 223,
1075 1, 3, 18, 151, 74, 113, 49, 186, 112, 160, 121, 38, 233, 155, 188, 237,
1076 251, 178, 8, 200, 120, 134, 152, 22, 232, 250, 219, 237, 157, 23, 134, 158,
1077 122, 202, 120, 89, 248, 68, 46, 184, 180, 93, 84, 85, 177, 236, 62, 50,
1078 103, 62, 81, 105, 33, 15, 97, 203, 192, 132, 219, 70, 203, 104, 162, 98,
1079 179, 224, 44, 101, 221, 84, 176, 97, 77, 84, 45, 255, 227, 80, 107, 45,
1080 70, 106, 68, 206, 134, 182, 205, 255, 235, 44, 131, 81, 126, 142, 30, 130,
1081 87, 133, 227, 15, 200, 194, 5, 230, 230, 169, 65, 116, 104, 193, 196, 214,
1082 18, 199, 56, 114, 5, 7, 189, 158, 32, 119, 53, 93, 169, 172, 141, 223,
1083 71, 194, 204, 221, 237, 118, 16, 198, 169, 10, 38, 156, 152, 76, 185, 73,
1084 15, 227, 118, 57, 149, 160, 14, 158, 18, 139, 117, 249, 142, 12, 175, 252,
1085 9, 202, 65, 196, 23, 211, 174, 169, 85, 244, 154, 239, 28, 199, 196, 171,
1086 241, 27, 140, 222, 54, 25, 229, 69, 102, 134, 125, 235, 246, 156, 41, 75,
1087 212, 225, 169, 207, 88, 246, 136, 176, 27, 40, 205, 228, 239, 24, 217, 42,
1088 212, 63, 187, 75, 60, 197, 97, 245, 3, 35, 243, 128, 36, 129, 145, 31,
1089 27, 193, 20, 122, 116, 143, 130, 159, 80, 203, 253, 233, 66, 118, 92, 177,
1090 83, 55, 141, 189, 115, 240, 125, 107, 8, 221, 237, 171, 24, 183, 220, 174,
1091 149, 51, 81, 221, 187, 233, 21, 116, 37, 88, 123, 20, 208, 201, 141, 155,
1092 136, 148, 64, 14, 102, 204, 248, 173, 249, 61, 75, 253, 199, 46, 192, 138,
1093 79, 83, 161, 127, 235, 140, 173, 158, 127, 232, 77, 17, 45, 207, 154, 51,
1094 79, 57, 184, 22, 220, 225, 61, 233, 188, 119, 221, 254, 87, 105, 151, 29,
1095 156, 162, 18, 202, 244, 36, 105, 24, 240, 195, 198, 39, 31, 155, 135, 62,
1096 220, 180, 53, 70, 121, 254, 234, 194, 79, 177, 181, 75, 23, 20, 217, 209,
1097 107, 100, 175, 83, 25, 212, 62, 11, 108, 33, 144, 17, 150, 176, 225, 86,
1098 54, 190, 8, 82, 150, 219, 80, 72, 75, 100, 197, 72, 95, 174, 189, 158,
1099 109, 146, 103, 67, 101, 165, 191, 178, 148, 32, 173, 147, 195, 145, 27, 119,
1100 126, 46, 186, 120, 226, 41, 209, 51, 171, 29, 4, 244, 184, 209, 92, 159,
1101 221, 122, 163, 30, 246, 68, 8, 190, 146, 143, 159, 116, 211, 83, 247, 90,
1102 241, 193, 10, 58, 250, 60, 69, 182, 204, 181, 207, 107, 37, 104, 150, 14,
1103 69, 55, 20, 7, 158, 96, 202, 248, 68, 220, 209, 132, 133, 164, 58, 175,
1104 103, 166, 1, 174, 0, 32, 182, 13, 199, 83, 48, 148, 52, 198, 19, 135,
1105 58, 46, 109, 164, 49, 199, 26, 109, 132, 19, 46, 118, 59, 27, 202, 73,
1106 4, 1, 22, 183, 163, 247, 45, 96, 206, 43, 239, 186, 131, 5, 61, 198,
1107 46, 99, 31, 89, 194, 241, 207, 170, 80, 250, 72, 225, 89, 154, 151, 165,
1108 171, 42, 59, 58, 68, 73, 178, 88, 153, 111, 247, 233, 19, 130, 51, 194,
1109 18, 142, 129, 52, 252, 167, 183, 238, 99, 198, 85, 134, 20, 114, 94, 90,
1110 7, 223, 147, 178, 135, 156, 216, 69, 14, 42, 181, 232, 203, 63, 239, 213,
1111 42, 225, 189, 223, 15, 238, 219, 62, 218, 15, 210, 141, 184, 226, 11, 228,
1112 9, 40, 37, 118, 26, 194, 213, 220, 99, 247, 7, 137, 187, 61, 64, 56,
1113 86, 169, 143, 224, 135, 166, 4, 28, 55, 87, 216, 45, 56, 39, 37, 181,
1114 234, 38, 4, 241, 184, 43, 134, 108, 245, 247, 230, 99, 162, 95, 214, 92,
1115 191, 83, 38, 152, 241, 38, 33, 32, 38, 92, 222, 228, 138, 11, 143, 135,
1116 83, 181, 140, 99, 9, 252, 123, 215, 212, 81, 108, 71, 2, 159, 246, 82,
1117 118, 186, 48, 69, 212, 147, 218, 61, 183, 170, 130, 233, 227, 145, 101, 156,
1118 20, 106, 128, 214, 238, 12, 163, 59, 152, 250, 112, 173, 42, 5, 1, 68,
1119 35, 52, 13, 198, 121, 11, 117, 16, 126, 143, 54, 184, 205, 44, 238, 47,
1120 218, 75, 112, 228, 183, 55, 22, 189, 35, 146, 27, 44, 229, 190, 241, 110,
1121 42, 152, 12, 141, 131, 183, 84, 31, 40, 185, 108, 176, 173, 247, 217, 214,
1122 155, 108, 176, 152, 201, 201, 185, 7, 227, 187, 87, 71, 45, 98, 224, 159,
1123 125, 230, 132, 19, 233, 98, 174, 93, 80, 245, 32, 94, 253, 35, 150, 68,
1124 176, 83, 50, 127, 196, 149, 176, 191, 136, 194, 84, 228, 106, 238, 47, 206,
1125 110, 204, 9, 116, 136, 230, 249, 90, 215, 160, 51, 151, 61, 92, 187, 82,
1126 129, 101, 75, 238, 22, 166, 132, 86, 183, 113, 149, 215, 39, 242, 214, 148,
1127 71, 168, 236, 20, 105, 249, 219, 23, 101, 63, 92, 173, 40, 126, 253, 145,
1128 161, 9, 72, 60, 215, 59, 155, 228, 255, 201, 193, 60, 129, 51, 29, 207,
1129 237, 43, 145, 161, 41, 115, 98, 19, 138, 253, 66, 232, 233, 186, 79, 114,
1130 1, 164, 184, 14, 61, 151, 198, 60, 247, 115, 5, 176, 132, 201, 245, 60,
1131 21, 238, 60, 133, 186, 18, 154, 89, 170, 23, 102, 2, 111, 147, 25, 208,
1132 152, 173, 13, 58, 125, 181, 115, 218, 196, 107, 173, 192, 60, 94, 140, 254,
1133 83, 80, 214, 220, 245, 254, 250, 39, 202, 132, 142, 84, 16, 199, 20, 129,
1134 159, 24, 18, 123, 143, 157, 176, 199, 173, 56, 169, 222, 252, 63, 27, 242,
1135 137, 138, 253, 143, 4, 209, 124, 86, 243, 170, 152, 121, 231, 24, 238, 35,
1136 113, 27, 205, 59, 153, 161, 234, 65, 153, 237, 97, 197, 98, 216, 129, 30,
1137 174, 211, 193, 167, 102, 229, 240, 198, 85, 193, 253, 73, 118, 185, 63, 3,
1138 227, 165, 139, 38, 109, 214, 108, 253, 48, 227, 253, 219, 1, 226, 89, 47,
1139 145, 86, 8, 234, 146, 159, 230, 108, 212, 111, 112, 129, 121, 28, 164, 105,
1140 138, 143, 106, 132, 254, 202, 177, 171, 123, 38, 162, 112, 97, 88, 221, 95,
1141 5, 161, 222, 76, 234, 253, 239, 231, 13, 62, 243, 80, 164, 204, 67, 229,
1142 43, 103, 152, 30, 131, 240, 218, 184, 149, 161, 234, 124, 238, 126, 33, 234,
1143 133, 1, 201, 113, 176, 190, 231, 215, 99, 64, 219, 224, 29, 217, 23, 232,
1144 185, 215, 56, 14, 128, 31, 227, 227, 80, 213, 239, 224, 36, 144, 26, 243,
1145 36, 181, 129, 69, 104, 55, 42, 212, 27, 252, 74, 173, 196, 255, 96, 153,
1146 53, 3, 99, 13, 167, 244, 183, 92, 231, 140, 210, 116, 98, 36, 187, 126,
1147 84, 77, 144, 109, 126, 138, 53, 237, 100, 96, 209, 68, 204, 61, 104, 246,
1148 64, 35, 98, 99, 82, 152, 68, 118, 51, 82, 101, 136, 76, 149, 234, 135,
1149 110, 37, 167, 154, 17, 145, 150, 148, 89, 184, 123, 108, 255, 2, 49, 98,
1150 101, 125, 88, 110, 2, 146, 130, 120, 212, 249, 21, 164, 164, 161, 47, 201,
1151 70, 114, 46, 149, 0, 88, 142, 60, 228, 58, 181, 175, 207, 222, 199, 81,
1152 135, 121, 200, 205, 143, 132, 31, 93, 179, 202, 132, 84, 3, 19, 40, 190,
1153 99, 120, 38, 42, 165, 159, 18, 153, 99, 212, 120, 4, 237, 237, 8, 57,
1154 69, 228, 186, 220, 183, 121, 139, 113, 179, 200, 21, 166, 75, 19, 149, 135,
1155 138, 170, 149, 14, 166, 110, 94, 129, 233, 66, 187, 163, 213, 96, 172, 4,
1156 145, 205, 41, 25, 97, 26, 66, 99, 104, 172, 227, 73, 193, 35, 142, 228,
1157 202, 85, 209, 10, 77, 47, 21, 8, 14, 215, 104, 211, 62, 186, 19, 226,
1158 180, 187, 81, 140, 101, 188, 252, 173, 1, 242, 9, 66, 177, 73, 5, 79,
1159 230, 53, 67, 28, 207, 98, 199, 52, 27, 66, 153, 200, 135, 247, 246, 210,
1160 128, 156, 173, 249, 92, 165, 93, 112, 247, 110, 0, 133, 56, 64, 199, 71,
1161 135, 104, 242, 50, 218, 28, 242, 216, 223, 229, 92, 19, 39, 36, 161, 233,
1162 104, 205, 56, 92, 20, 44, 81, 244, 215, 85, 116, 79, 44, 104, 236, 197,
1163 72, 17, 157, 105, 213, 76, 90, 85, 9, 54, 76, 248, 27, 39, 175, 107,
1164 79, 142, 31, 140, 48, 194, 73, 214, 79, 131, 65, 191, 175, 211, 154, 225,
1165 182, 226, 90, 169, 178, 95, 71, 89, 3, 4, 83, 27, 152, 218, 67, 67,
1166 225, 90, 159, 244, 215, 227, 41, 53, 214, 40, 178, 86, 46, 92, 27, 200,
1167 104, 126, 203, 185, 150, 90, 220, 210, 140, 33, 238, 113, 54, 31, 121, 4,
1168 49, 132, 62, 250, 9, 180, 120, 241, 248, 86, 67, 254, 57, 166, 141, 34,
1169 165, 218, 73, 167, 166, 85, 50, 191, 136, 177, 212, 175, 133, 8, 30, 106,
1170 201, 100, 208, 40, 119, 107, 182, 231, 27, 237, 58, 22, 225, 63, 21, 160,
1171 176, 7, 223, 124, 229, 53, 246, 170, 155, 70, 75, 68, 204, 221, 146, 48,
1172 109, 153, 25, 0, 157, 54, 208, 220, 240, 216, 113, 30, 230, 30, 46, 139,
1173 116, 215, 222, 10, 247, 103, 24, 86, 125, 8, 77, 202, 39, 152, 10, 225,
1174 131, 18, 117, 227, 249, 127, 160, 143, 86, 128, 207, 99, 207, 224, 42, 110,
1175 232, 36, 86, 179, 249, 138, 84, 121, 50, 5, 149, 93, 7, 200, 115, 209,
1176 110, 152, 124, 77, 52, 79, 221, 157, 195, 140, 54, 19, 60, 205, 158, 199,
1177 127, 207, 7, 117, 11, 227, 197, 72, 199, 187, 184, 43, 95, 0, 61, 143,
1178 176, 207, 65, 130, 87, 82, 140, 181, 182, 184, 223, 238, 244, 209, 170, 7,
1179 11, 100, 83, 5, 98, 125, 26, 188, 40, 137, 242, 22, 249, 227, 184, 80,
1180 44, 145, 32, 143, 254, 218, 115, 107, 76, 139, 212, 87, 253, 12, 11, 121,
1181 216, 159, 121, 87, 182, 101, 205, 151, 5, 0, 126, 150, 6, 166, 115, 36,
1182 14, 128, 159, 126, 200, 42, 189, 146, 192, 223, 186, 35, 71, 224, 63, 33,
1183 211, 207, 93, 66, 201, 31, 66, 220, 66, 97, 107, 95, 157, 213, 92, 81,
1184 217, 125, 242, 101, 243, 184, 255, 155, 2, 165, 9, 143, 103, 243, 133, 173,
1185 202, 202, 40, 221, 73, 177, 248, 57, 243, 125, 130, 127, 102, 47, 3, 227,
1186 27, 203, 33, 179, 249, 117, 28, 112, 157, 0, 210, 139, 43, 15, 192, 47,
1187 202, 45, 132, 10, 26, 163, 47, 220, 65, 169, 225, 235, 120, 57, 25, 176,
1188 206, 16, 38, 110, 84, 145, 28, 43, 63, 35, 144, 234, 249, 59, 22, 152,
1189 16, 175, 248, 2, 6, 109, 55, 92, 124, 77, 237, 166, 207, 82, 238, 140,
1190 22, 30, 214, 144, 177, 182, 229, 27, 180, 150, 186, 187, 231, 184, 242, 23,
1191 178, 119, 36, 24, 165, 82, 15, 195, 55, 147, 107, 45, 198, 133, 194, 95,
1192 20, 146, 8, 222, 235, 67, 80, 119, 234, 48, 223, 163, 51, 60, 217, 228,
1193 171, 195, 231, 250, 46, 111, 138, 143, 1, 48, 174, 116, 197, 186, 40, 61,
1194 177, 53, 65, 225, 171, 95, 186, 209, 199, 254, 152, 98, 179, 71, 140, 127,
1195 193, 177, 171, 61, 227, 117, 130, 92, 148, 43, 199, 156, 176, 219, 52, 218,
1196 133, 160, 123, 11, 221, 104, 254, 253, 144, 156, 245, 5, 156, 246, 226, 198,
1197 222, 172, 246, 13, 35, 210, 51, 99, 203, 213, 159, 248, 139, 71, 77, 120,
1198 75, 195, 89, 11, 122, 125, 43, 57, 30, 233, 45, 10, 87, 102, 171, 47,
1199 21, 167, 175, 143, 207, 121, 98, 48, 220, 247, 72, 184, 97, 83, 152, 72,
1200 51, 136, 17, 52, 249, 169, 8, 140, 219, 152, 5, 221, 132, 225, 17, 117,
1201 28, 72, 220, 69, 199, 108, 140, 175, 206, 165, 41, 39, 77, 194, 249, 154,
1202 121, 23, 85, 205, 128, 34, 118, 49, 220, 85, 5, 240, 181, 26, 210, 29,
1203 177, 24, 132, 91, 57, 218, 74, 217, 135, 225, 148, 82, 95, 98, 54, 127,
1204 58, 1, 85, 12, 122, 2, 58, 81, 16, 32, 168, 153, 186, 97, 214, 81,
1205 176, 244, 134, 168, 111, 127, 21, 251, 227, 215, 141, 191, 141, 90, 21, 177,
1206 142, 172, 29, 212, 128, 163, 54, 172, 20, 35, 174, 1, 225, 232, 74, 73,
1207 226, 154, 236, 45, 211, 64, 28, 142, 90, 175, 147, 230, 243, 66, 160, 207,
1208 186, 212, 201, 34, 58, 202, 236, 9, 218, 10, 226, 189, 74, 106, 75, 43,
1209 93, 1, 5, 162, 36, 42, 54, 86, 83, 35, 242, 114, 165, 93, 76, 8,
1210 94, 21, 110, 101, 241, 119, 219, 78, 115, 182, 5, 105, 116, 73, 50, 193,
1211 102, 254, 43, 197, 64, 236, 6, 105, 84, 206, 79, 127, 195, 151, 106, 76,
1212 122, 173, 234, 203, 34, 20, 204, 34, 195, 244, 209, 60, 32, 112, 157, 150,
1213 185, 49, 35, 11, 41, 230, 21, 63, 137, 1, 127, 147, 193, 77, 136, 174,
1214 109, 122, 243, 119, 160, 26, 5, 187, 191, 90, 83, 26, 214, 237, 162, 198,
1215 184, 179, 204, 246, 113, 43, 145, 228, 4, 250, 28, 187, 22, 149, 121, 67,
1216 94, 202, 229, 64, 35, 204, 174, 106, 180, 40, 224, 146, 117, 146, 217, 9,
1217 29, 22, 202, 177, 96, 25, 165, 0, 97, 146, 120, 15, 29, 230, 203, 30,
1218 181, 73, 37, 59, 38, 156, 8, 123, 215, 252, 229, 157, 240, 58, 91, 78,
1219 3, 189, 39, 232, 28, 175, 195, 69, 94, 127, 176, 218, 32, 40, 236, 113,
1220 175, 110, 241, 181, 238, 15, 46, 106, 58, 170, 48, 58, 254, 253, 190, 204,
1221 172, 214, 31, 202, 150, 134, 97, 230, 224, 255, 121, 206, 110, 102, 224, 49,
1222 94, 248, 23, 109, 243, 23, 208, 50, 120, 155, 166, 16, 193, 8, 111, 212,
1223 88, 114, 163, 247, 255, 144, 18, 87, 92, 47, 60, 250, 35, 102, 101, 150,
1224 228, 34, 28, 18, 59, 175, 136, 120, 186, 193, 15, 151, 143, 76, 54, 96,
1225 157, 183, 62, 4, 245, 231, 132, 94, 131, 139, 192, 253, 72, 194, 242, 7,
1226 202, 19, 20, 245, 122, 114, 177, 101, 133, 107, 109, 109, 112, 151, 71, 239,
1227 115, 43, 157, 185, 57, 149, 27, 82, 191, 118, 114, 80, 96, 115, 166, 79,
1228 166, 59, 23, 91, 223, 159, 217, 68, 63, 155, 173, 200, 73, 32, 199, 233,
1229 241, 206, 133, 125, 89, 87, 71, 172, 91, 56, 219, 233, 115, 26, 63, 53,
1230 98, 209, 57, 151, 243, 141, 54, 139, 107, 120, 252, 89, 249, 133, 67, 85,
1231 144, 135, 86, 238, 9, 133, 115, 95, 92, 97, 212, 81, 117, 70, 225, 199,
1232 123, 49, 84, 16, 84, 19, 134, 156, 33, 78, 195, 79, 191, 112, 44, 206,
1233 81, 249, 191, 4, 106, 159, 152, 246, 185, 246, 125, 7, 186, 106, 239, 25,
1234 144, 121, 78, 194, 199, 195, 218, 118, 189, 66, 2, 220, 105, 0, 77, 65,
1235 137, 55, 169, 82, 156, 126, 146, 139, 71, 44, 247, 210, 45, 171, 110, 252,
1236 221, 51, 80, 157, 164, 99, 10, 241, 175, 65, 32, 180, 254, 187, 89, 223,
1237 231, 227, 216, 197, 99, 217, 65, 187, 235, 152, 63, 74, 176, 36, 170, 236,
1238 134, 46, 98, 13, 108, 160, 126, 185, 245, 100, 96, 40, 240, 69, 171, 10,
1239 2, 141, 57, 105, 56, 82, 168, 46, 126, 161, 5, 219, 126, 1, 1, 165,
1240 92, 219, 81, 202, 86, 78, 174, 209, 195, 7, 142, 244, 119, 255, 115, 242,
1241 220, 11, 168, 135, 5, 71, 145, 137, 108, 10, 17, 30, 178, 142, 202, 147,
1242 24, 141, 161, 192, 79, 54, 62, 142, 239, 66, 209, 248, 101, 134, 83, 10,
1243 119, 121, 22, 240, 25, 227, 60, 180, 18, 46, 164, 105, 89, 30, 196, 167,
1244 206, 32, 32, 76, 54, 35, 10, 210, 170, 114, 127, 0, 216, 28, 71, 6,
1245 216, 15, 56, 201, 194, 246, 115, 182, 231, 202, 62, 218, 93, 252, 151, 125,
1246 48, 231, 133, 89, 67, 175, 88, 80, 25, 208, 80, 251, 226, 12, 4, 225,
1247 125, 37, 78, 202, 227, 212, 179, 219, 234, 223, 207, 188, 126, 214, 22, 59,
1248 134, 161, 108, 10, 115, 65, 40, 68, 211, 192, 129, 64, 163, 178, 183, 164,
1249 98, 212, 20, 146, 25, 16, 154, 29, 176, 107, 3, 15, 62, 226, 67, 119,
1250 189, 45, 123, 187, 83, 222, 206, 56, 135, 242, 121, 61, 220, 133, 171, 150,
1251 139, 221, 69, 112, 13, 183, 180, 76, 97, 122, 168, 79, 203, 136, 62, 161,
1252 138, 40, 253, 182, 3, 51, 229, 58, 195, 79, 191, 203, 248, 191, 180, 101,
1253 40, 189, 22, 127, 67, 139, 219, 213, 78, 11, 67, 215, 82, 41, 107, 54,
1254 143, 72, 223, 89, 246, 156, 91, 11, 157, 16, 225, 237, 213, 148, 187, 201,
1255 233, 101, 70, 211, 201, 113, 164, 185, 140, 169, 130, 42, 1, 222, 92, 59,
1256 66, 17, 108, 67, 197, 192, 251, 55, 203, 109, 189, 230, 131, 237, 215, 241,
1257 65, 148, 253, 241, 39, 141, 155, 148, 156, 244, 12, 68, 71, 109, 235, 241,
1258 4, 161, 177, 218, 114, 173, 113, 146, 11, 3, 219, 33, 141, 215, 62, 45,
1259 215, 184, 196, 97, 162, 250, 218, 110, 1, 190, 8, 67, 241, 94, 82, 196,
1260 64, 85, 118, 139, 240, 71, 67, 49, 241, 49, 129, 247, 44, 211, 46, 227,
1261 115, 140, 123, 192, 63, 82, 9, 155, 83, 167, 250, 70, 61, 66, 186, 217,
1262 46, 155, 128, 255, 232, 56, 224, 32, 254, 12, 204, 2, 85, 173, 20, 75,
1263 214, 73, 229, 18, 247, 145, 83, 241, 20, 245, 155, 15, 92, 111, 180, 101,
1264 179, 246, 5, 243, 112, 196, 44, 146, 16, 128, 155, 80, 106, 147, 110, 87,
1265 96, 17, 243, 247, 21, 87, 149, 78, 248, 20, 153, 249, 196, 11, 177, 96,
1266 227, 185, 136, 7, 244, 54, 177, 91, 192, 193, 111, 21, 159, 105, 143, 236,
1267 167, 215, 244, 121, 207, 245, 202, 161, 215, 45, 233, 32, 123, 220, 57, 34,
1268 171, 115, 37, 163, 75, 253, 140, 232, 51, 143, 204, 252, 146, 168, 85, 148,
1269 201, 161, 181, 231, 125, 44, 172, 79, 210, 12, 147, 82, 38, 254, 157, 225,
1270 167, 230, 182, 123, 63, 141, 146, 152, 136, 190, 80, 156, 163, 231, 33, 184,
1271 58, 200, 134, 28, 70, 202, 88, 195, 39, 224, 159, 154, 206, 183, 11, 96,
1272 102, 136, 26, 238, 179, 189, 226, 18, 30, 188, 148, 25, 3, 252, 154, 142,
1273 147, 145, 126, 11, 55, 1, 3, 108, 144, 55, 251, 167, 54, 127, 180, 216,
1274 77, 70, 138, 95, 166, 90, 48, 2, 211, 236, 235, 131, 107, 251, 91, 238,
1275 255, 0, 113, 41, 243, 14, 241, 252, 163, 99, 74, 25, 172, 87, 125, 36,
1276 203, 96, 189, 125, 222, 165, 138, 25, 76, 136, 67, 137, 161, 22, 232, 31,
1277 5, 96, 146, 214, 146, 21, 181, 198, 199, 34, 190, 63, 191, 201, 104, 116,
1278 123, 201, 64, 128, 84, 139, 86, 102, 244, 241, 162, 126, 4, 9, 132, 2,
1279 53, 113, 21, 1, 95, 7, 212, 123, 252, 100, 87, 78, 71, 28, 131, 135,
1280 183, 72, 196, 33, 66, 237, 12, 135, 58, 102, 69, 234, 214, 244, 57, 44,
1281 181, 120, 156, 218, 99, 146, 97, 15, 77, 113, 179, 142, 113, 226, 38, 72,
1282 128, 211, 160, 95, 52, 181, 30, 200, 64, 234, 8, 229, 150, 219, 225, 30,
1283 162, 223, 52, 242, 29, 31, 226, 91, 102, 235, 127, 213, 105, 123, 11, 172,
1284 190, 152, 59, 69, 1, 253, 126, 19, 145, 99, 33, 26, 198, 80, 74, 47,
1285 59, 77, 158, 60, 231, 51, 65, 145, 210, 232, 71, 100, 73, 71, 176, 239,
1286 42, 124, 176, 31, 254, 64, 223, 51, 195, 108, 165, 78, 202, 174, 212, 32,
1287 157, 58, 145, 133, 84, 230, 17, 206, 107, 72, 89, 129, 240, 179, 56, 231,
1288 218, 55, 236, 231, 122, 137, 50, 245, 171, 107, 223, 86, 17, 155, 68, 241,
1289 220, 120, 38, 95, 74, 110, 214, 202, 223, 60, 35, 120, 33, 79, 32, 58,
1290 77, 28, 121, 180, 99, 64, 201, 81, 156, 37, 28, 254, 219, 153, 74, 200,
1291 178, 70, 252, 140, 137, 127, 195, 238, 103, 228, 44, 96, 216, 12, 198, 246,
1292 206, 130, 67, 71, 129, 114, 145, 168, 64, 145, 128, 169, 169, 11, 28, 145,
1293 64, 144, 92, 206, 171, 135, 128, 121, 84, 142, 75, 37, 199, 208, 97, 243,
1294 114, 58, 152, 244, 201, 119, 76, 178, 3, 128, 185, 252, 146, 38, 165, 53,
1295 186, 175, 102, 81, 233, 115, 190, 227, 19, 31, 134, 132, 114, 24, 2, 21,
1296 249, 228, 128, 74, 119, 144, 74, 43, 168, 201, 131, 175, 254, 42, 103, 23,
1297 94, 138, 61, 40, 129, 252, 51, 80, 150, 135, 133, 55, 54, 122, 187, 93,
1298 42, 9, 154, 50, 93, 143, 241, 26, 80, 108, 7, 51, 144, 218, 129, 48,
1299 168, 66, 150, 108, 86, 127, 156, 232, 5, 54, 7, 182, 73, 210, 46, 115,
1300 84, 145, 113, 254, 195, 166, 106, 119, 116, 233, 154, 170, 185, 255, 99, 223,
1301 133, 115, 122, 10, 210, 76, 123, 92, 28, 159, 138, 133, 70, 126, 240, 215,
1302 36, 119, 180, 221, 156, 46, 89, 71, 1, 175, 247, 102, 107, 67, 136, 62,
1303 142, 197, 212, 50, 159, 107, 254, 44, 30, 59, 234, 51, 55, 35, 103, 170,
1304 231, 41, 111, 178, 14, 27, 77, 40, 43, 88, 199, 148, 211, 140, 17, 59,
1305 84, 182, 195, 92, 230, 109, 218, 165, 117, 39, 234, 195, 94, 70, 151, 202,
1306 167, 17, 179, 205, 213, 68, 102, 11, 120, 210, 150, 47, 150, 115, 186, 81,
1307 137, 53, 132, 36, 224, 107, 115, 100, 143, 118, 212, 239, 176, 139, 243, 36,
1308 235, 189, 48, 43, 25, 130, 143, 2, 165, 117, 173, 63, 189, 86, 180, 83,
1309 22, 204, 226, 141, 78, 199, 226, 195, 94, 183, 88, 103, 180, 205, 96, 254,
1310 235, 65, 144, 231, 11, 193, 111, 52, 129, 110, 125, 68, 42, 234, 138, 118,
1311 112, 69, 178, 191, 213, 115, 230, 221, 222, 97, 60, 187, 154, 161, 24, 25,
1312 147, 205, 69, 47, 45, 241, 84, 238, 249, 129, 6, 107, 126, 245, 187, 62,
1313 247, 159, 178, 6, 100, 80, 244, 229, 53, 83, 186, 208, 116, 164, 83, 217,
1314 76, 21, 191, 207, 44, 19, 21, 253, 153, 84, 92, 96, 41, 9, 10, 187,
1315 82, 155, 222, 146, 71, 130, 217, 44, 75, 51, 56, 119, 4, 77, 141, 46,
1316 0, 97, 157, 176, 42, 30, 102, 41, 39, 48, 191, 201, 226, 156, 80, 24,
1317 28, 109, 150, 215, 254, 211, 17, 87, 114, 111, 250, 7, 60, 233, 55, 121,
1318 139, 121, 167, 213, 0, 106, 85, 183, 122, 254, 65, 52, 95, 129, 197, 156,
1319 125, 235, 47, 46, 191, 44, 139, 244, 217, 239, 216, 228, 14, 234, 216, 19,
1320 13, 124, 221, 166, 60, 124, 187, 83, 242, 154, 57, 182, 125, 172, 123, 100,
1321 165, 156, 196, 254, 19, 73, 234, 83, 209, 242, 17, 54, 12, 115, 163, 148,
1322 32, 146, 41, 86, 171, 11, 77, 71, 162, 203, 42, 153, 71, 217, 254, 31,
1323 214, 184, 58, 41, 245, 132, 249, 54, 172, 163, 225, 203, 205, 52, 64, 105,
1324 110, 128, 162, 176, 118, 243, 173, 173, 69, 11, 98, 19, 183, 83, 247, 5,
1325 137, 91, 192, 122, 15, 151, 125, 192, 220, 207, 6, 118, 84, 8, 86, 196,
1326 88, 59, 246, 8, 250, 10, 27, 7, 233, 225, 220, 213, 222, 239, 138, 177,
1327 173, 63, 58, 16, 68, 113, 218, 216, 24, 25, 147, 176, 232, 249, 135, 194,
1328 5, 26, 37, 110, 251, 13, 178, 55, 28, 116, 84, 162, 145, 153, 117, 194,
1329 41, 16, 179, 64, 121, 52, 127, 232, 232, 53, 135, 212, 72, 122, 32, 112,
1330 152, 10, 241, 217, 107, 3, 99, 91, 115, 88, 107, 146, 120, 22, 156, 153,
1331 68, 104, 212, 39, 76, 144, 54, 58, 61, 91, 212, 96, 139, 35, 184, 37,
1332 17, 55, 223, 15, 75, 18, 55, 124, 232, 21, 10, 147, 24, 221, 23, 87,
1333 186, 27, 152, 51, 247, 112, 63, 56, 89, 180, 195, 67, 89, 105, 236, 102,
1334 235, 57, 17, 45, 151, 91, 186, 224, 171, 11, 149, 111, 102, 149, 50, 144,
1335 250, 243, 179, 20, 251, 203, 229, 228, 190, 33, 209, 254, 237, 112, 60, 222,
1336 179, 19, 224, 4, 78, 246, 239, 248, 80, 169, 180, 71, 190, 29, 178, 253,
1337 130, 207, 77, 202, 16, 108, 142, 201, 238, 135, 247, 155, 237, 187, 243, 139,
1338 247, 21, 141, 125, 213, 34, 106, 183, 4, 125, 40, 8, 104, 128, 73, 121,
1339 163, 122, 190, 121, 152, 45, 174, 52, 181, 139, 254, 242, 146, 36, 163, 183,
1340 147, 27, 234, 160, 222, 93, 232, 251, 153, 185, 158, 215, 9, 86, 49, 72,
1341 87, 154, 88, 169, 82, 186, 198, 240, 104, 92, 129, 217, 12, 124, 113, 206,
1342 117, 116, 149, 159, 149, 124, 219, 138, 96, 50, 177, 145, 244, 8, 232, 218,
1343 158, 22, 70, 31, 52, 226, 90, 7, 187, 135, 66, 35, 193, 62, 122, 72,
1344 201, 100, 66, 137, 236, 158, 187, 195, 107, 234, 27, 155, 187, 221, 131, 2,
1345 167, 165, 18, 225, 67, 72, 190, 63, 136, 69, 32, 185, 181, 234, 159, 57,
1346 4, 101, 127, 121, 3, 2, 235, 220, 44, 245, 160, 71, 64, 175, 55, 135,
1347 83, 250, 217, 239, 121, 81, 181, 160, 151, 70, 56, 101, 74, 169, 142, 167,
1348 10, 179, 233, 140, 156, 203, 110, 15, 95, 15, 8, 169, 164, 40, 43, 50,
1349 148, 216, 167, 161, 36, 142, 145, 126, 236, 167, 154, 120, 110, 239, 138, 53,
1350 152, 233, 115, 33, 203, 253, 249, 174, 176, 43, 0, 178, 120, 133, 211, 252,
1351 95, 221, 221, 185, 36, 145, 53, 15, 125, 26, 232, 42, 249, 86, 8, 205,
1352 183, 114, 81, 62, 187, 162, 4, 251, 26, 79, 159, 156, 42, 7, 83, 97,
1353 14, 124, 38, 252, 215, 34, 141, 252, 226, 61, 237, 252, 114, 117, 187, 21,
1354 53, 236, 151, 9, 147, 40, 68, 63, 10, 166, 84, 236, 0, 169, 196, 239,
1355 107, 214, 32, 53, 142, 172, 22, 245, 22, 154, 150, 105, 223, 5, 178, 48,
1356 151, 191, 251, 63, 50, 255, 54, 206, 221, 49, 249, 35, 133, 197, 248, 47,
1357 155, 185, 108, 172, 179, 104, 121, 72, 25, 83, 78, 205, 136, 136, 250, 47,
1358 68, 179, 166, 229, 237, 212, 214, 104, 191, 88, 159, 43, 30, 168, 89, 25,
1359 137, 79, 142, 7, 237, 19, 230, 87, 255, 20, 182, 27, 217, 197, 80, 45,
1360 119, 115, 241, 181, 96, 155, 160, 62, 57, 162, 103, 171, 196, 214, 243, 194,
1361 41, 223, 187, 22, 4, 157, 139, 4, 98, 193, 171, 27, 217, 8, 27, 100,
1362 222, 30, 235, 4, 127, 97, 243, 231, 102, 37, 47, 237, 58, 79, 189, 143,
1363 193, 144, 0, 150, 183, 0, 100, 29, 130, 166, 233, 150, 241, 61, 175, 23,
1364 56, 239, 24, 59, 143, 79, 27, 23, 124, 4, 9, 207, 73, 21, 181, 227,
1365 80, 149, 79, 226, 85, 110, 255, 126, 11, 66, 167, 203, 91, 50, 255, 189,
1366 91, 50, 79, 115, 160, 201, 112, 13, 25, 100, 68, 8, 218, 253, 185, 90,
1367 85, 79, 74, 27, 123, 23, 229, 57, 97, 91, 127, 106, 189, 186, 213, 74,
1368 233, 11, 137, 181, 51, 79, 108, 16, 145, 67, 82, 93, 245, 199, 182, 112,
1369 114, 208, 100, 151, 117, 222, 34, 187, 232, 137, 114, 251, 117, 217, 153, 37,
1370 215, 22, 113, 249, 198, 21, 184, 245, 107, 107, 27, 224, 2, 158, 165, 155,
1371 155, 104, 108, 215, 105, 154, 76, 171, 175, 245, 245, 206, 227, 85, 231, 208,
1372 127, 196, 191, 48, 150, 44, 38, 194, 191, 59, 10, 10, 175, 148, 162, 163,
1373 122, 167, 207, 145, 105, 234, 57, 199, 40, 112, 205, 98, 242, 238, 38, 68,
1374 192, 158, 91, 141, 80, 54, 12, 193, 215, 8, 201, 136, 185, 229, 109, 175,
1375 25, 245, 209, 147, 197, 233, 17, 80, 189, 150, 49, 218, 246, 78, 30, 112,
1376 64, 212, 109, 75, 232, 228, 171, 102, 239, 219, 152, 158, 217, 121, 43, 174,
1377 99, 82, 7, 113, 222, 107, 164, 30, 205, 236, 152, 19, 157, 60, 82, 165,
1378 34, 117, 23, 166, 185, 209, 212, 7, 250, 32, 167, 172, 234, 117, 139, 110,
1379 191, 14, 44, 158, 95, 115, 126, 115, 234, 209, 174, 95, 163, 117, 243, 203,
1380 182, 113, 182, 4, 33, 100, 143, 45, 225, 128, 69, 73, 183, 246, 91, 28,
1381 57, 20, 1, 175, 125, 128, 38, 4, 54, 93, 255, 28, 106, 122, 42, 104,
1382 35, 79, 242, 117, 75, 237, 149, 28, 178, 84, 224, 183, 116, 254, 120, 3,
1383 70, 154, 8, 57, 132, 86, 14, 119, 4, 130, 3, 155, 233, 177, 27, 28,
1384 233, 148, 205, 109, 29, 39, 33, 0, 160, 214, 129, 207, 180, 227, 131, 109,
1385 29, 136, 60, 47, 234, 99, 52, 57, 228, 87, 114, 138, 185, 19, 148, 152,
1386 114, 48, 12, 231, 182, 67, 228, 94, 253, 199, 34, 171, 238, 77, 59, 83,
1387 128, 137, 52, 74, 35, 236, 38, 181, 165, 106, 161, 12, 100, 76, 100, 237,
1388 69, 13, 211, 210, 117, 185, 178, 17, 231, 85, 134, 101, 66, 9, 71, 42,
1389 88, 125, 183, 106, 217, 38, 175, 131, 139, 75, 163, 134, 149, 70, 120, 146,
1390 156, 196, 151, 154, 242, 232, 163, 33, 206, 179, 123, 102, 249, 28, 11, 115,
1391 88, 20, 192, 244, 74, 33, 165, 176, 215, 142, 87, 229, 188, 139, 225, 192,
1392 111, 203, 55, 25, 241, 218, 22, 119, 121, 89, 69, 116, 214, 254, 94, 137,
1393 253, 168, 156, 155, 34, 150, 56, 126, 229, 79, 49, 150, 109, 99, 194, 179,
1394 40, 114, 63, 220, 161, 254, 73, 154, 211, 245, 21, 255, 63, 209, 45, 135,
1395 86, 234, 184, 213, 95, 28, 28, 244, 42, 66, 200, 83, 190, 81, 247, 24,
1396 153, 129, 180, 45, 159, 132, 4, 187, 171, 88, 178, 140, 143, 60, 212, 187,
1397 102, 125, 212, 66, 85, 133, 248, 58, 240, 126, 196, 7, 68, 71, 137, 202,
1398 116, 79, 137, 229, 156, 122, 69, 94, 146, 226, 198, 191, 116, 96, 33, 50,
1399 189, 32, 4, 5, 92, 116, 29, 122, 137, 140, 42, 199, 138, 59, 38, 48,
1400 178, 115, 216, 201, 225, 170, 183, 55, 248, 151, 58, 187, 184, 152, 106, 130,
1401 176, 52, 36, 73, 99, 77, 12, 166, 238, 52, 231, 86, 144, 91, 2, 248,
1402 246, 127, 5, 182, 201, 149, 205, 246, 73, 158, 98, 4, 20, 138, 51, 176,
1403 71, 169, 209, 237, 230, 100, 244, 243, 107, 80, 113, 246, 233, 115, 26, 175,
1404 72, 11, 38, 165, 68, 108, 163, 27, 38, 43, 246, 18, 153, 208, 118, 235,
1405 201, 225, 235, 17, 65, 53, 173, 72, 230, 232, 105, 215, 41, 180, 191, 61,
1406 31, 28, 214, 219, 29, 209, 90, 206, 232, 80, 22, 101, 237, 61, 105, 128,
1407 249, 224, 23, 242, 8, 250, 190, 130, 207, 148, 102, 166, 241, 67, 58, 8,
1408 61, 43, 58, 21, 148, 188, 40, 139, 116, 11, 79, 186, 85, 9, 240, 164,
1409 117, 238, 157, 59, 244, 184, 250, 69, 143, 88, 147, 126, 237, 37, 6, 159,
1410 130, 18, 72, 138, 251, 58, 136, 155, 92, 42, 173, 253, 171, 166, 57, 160,
1411 162, 211, 173, 241, 66, 121, 37, 176, 180, 140, 117, 240, 132, 181, 16, 234,
1412 173, 59, 98, 9, 123, 31, 18, 165, 45, 182, 89, 112, 130, 79, 53, 10,
1413 120, 252, 52, 114, 58, 57, 146, 87, 222, 154, 231, 215, 219, 84, 246, 85,
1414 57, 206, 180, 66, 125, 212, 226, 45, 212, 74, 132, 27, 185, 34, 150, 235,
1415 119, 218, 77, 70, 235, 171, 112, 123, 174, 87, 160, 89, 86, 219, 3, 47,
1416 39, 240, 116, 102, 70, 107, 31, 55, 102, 167, 4, 101, 119, 146, 176, 237,
1417 168, 123, 84, 118, 218, 112, 118, 52, 18, 56, 120, 216, 66, 187, 31, 12,
1418 205, 53, 119, 26, 225, 215, 195, 226, 2, 201, 75, 105, 65, 81, 45, 239,
1419 114, 182, 155, 135, 95, 153, 240, 143, 109, 109, 219, 218, 224, 26, 175, 35,
1420 86, 128, 209, 255, 71, 26, 86, 115, 22, 70, 167, 3, 105, 128, 160, 142,
1421 163, 149, 168, 112, 8, 12, 14, 119, 65, 43, 183, 105, 197, 156, 207, 226,
1422 231, 239, 48, 62, 4, 49, 169, 234, 123, 26, 164, 98, 119, 33, 170, 43,
1423 39, 6, 128, 15, 217, 209, 229, 109, 240, 180, 150, 169, 252, 118, 242, 240,
1424 108, 204, 24, 107, 199, 108, 184, 110, 208, 52, 175, 245, 241, 123, 90, 123,
1425 150, 211, 56, 75, 247, 140, 187, 53, 172, 174, 90, 223, 117, 128, 254, 97,
1426 235, 170, 193, 190, 34, 215, 109, 18, 109, 13, 118, 134, 45, 22, 100, 73,
1427 141, 199, 203, 124, 169, 191, 102, 108, 250, 201, 188, 39, 236, 74, 154, 159,
1428 170, 137, 69, 63, 82, 44, 177, 240, 178, 157, 53, 89, 6, 99, 5, 13,
1429 134, 169, 195, 121, 229, 179, 212, 123, 198, 131, 96, 250, 187, 94, 106, 51,
1430 219, 16, 147, 227, 108, 124, 240, 237, 172, 43, 83, 157, 124, 246, 118, 249,
1431 175, 43, 235, 221, 18, 24, 166, 127, 255, 210, 199, 57, 134, 73, 141, 254,
1432 219, 209, 19, 217, 36, 25, 104, 225, 133, 24, 3, 130, 62, 103, 148, 212,
1433 243, 122, 52, 213, 102, 26, 144, 227, 189, 143, 151, 230, 98, 87, 214, 147,
1434 110, 31, 43, 248, 142, 126, 199, 95, 170, 186, 67, 225, 208, 49, 50, 159,
1435 108, 174, 152, 118, 43, 193, 187, 13, 63, 141, 94, 118, 113, 200, 75, 165,
1436 117, 247, 53, 209, 151, 163, 241, 24, 23, 252, 149, 18, 16, 77, 69, 208,
1437 219, 254, 159, 220, 62, 99, 26, 31, 231, 88, 150, 219, 168, 151, 178, 181,
1438 234, 141, 124, 130, 37, 1, 21, 195, 96, 139, 179, 136, 145, 29, 159, 213,
1439 248, 10, 174, 213, 22, 180, 250, 251, 30, 42, 228, 139, 178, 90, 19, 228,
1440 100, 120, 205, 54, 6, 189, 213, 203, 193, 43, 218, 211, 27, 93, 76, 181,
1441 127, 159, 43, 96, 233, 249, 118, 252, 127, 59, 67, 82, 65, 48, 100, 170,
1442 227, 197, 141, 49, 153, 31, 189, 176, 102, 14, 101, 152, 242, 25, 251, 47,
1443 242, 67, 114, 61, 184, 29, 60, 163, 186, 19, 17, 36, 42, 76, 31, 246,
1444 195, 224, 206, 221, 89, 69, 218, 112, 148, 98, 60, 154, 28, 199, 206, 59,
1445 157, 199, 18, 214, 53, 217, 211, 254, 128, 220, 189, 96, 134, 57, 73, 152,
1446 41, 52, 0, 93, 23, 215, 124, 209, 63, 252, 134, 64, 224, 183, 197, 94,
1447 46, 214, 214, 233, 202, 211, 155, 236, 31, 238, 220, 132, 54, 88, 122, 140,
1448 146, 11, 88, 164, 238, 156, 72, 239, 225, 82, 157, 144, 27, 240, 5, 231,
1449 89, 25, 63, 50, 227, 219, 3, 5, 218, 125, 13, 151, 59, 40, 162, 211,
1450 79, 33, 157, 76, 245, 55, 229, 140, 88, 50, 221, 42, 52, 162, 106, 212,
1451 125, 187, 254, 0, 126, 156, 98, 149, 35, 94, 247, 215, 131, 86, 116, 176,
1452 3, 56, 30, 26, 138, 113, 71, 255, 77, 143, 52, 111, 20, 113, 47, 88,
1453 104, 110, 225, 164, 226, 8, 74, 180, 182, 183, 206, 215, 84, 12, 46, 61,
1454 177, 168, 102, 244, 93, 199, 243, 247, 214, 227, 131, 185, 103, 131, 49, 3,
1455 49, 18, 74, 111, 249, 150, 2, 113, 165, 221, 7, 93, 110, 59, 242, 246,
1456 243, 168, 45, 182, 45, 140, 19, 41, 72, 10, 164, 190, 17, 174, 216, 36,
1457 216, 3, 1, 198, 230, 150, 19, 0, 114, 10, 75, 166, 138, 161, 0, 113,
1458 132, 128, 116, 201, 147, 42, 63, 211, 56, 195, 45, 125, 69, 55, 177, 149,
1459 228, 7, 78, 217, 133, 35, 108, 182, 210, 185, 124, 187, 167, 95, 246, 202,
1460 121, 167, 61, 61, 239, 37, 153, 143, 109, 126, 42, 69, 174, 253, 132, 161,
1461 118, 14, 10, 7, 141, 92, 188, 60, 81, 174, 93, 28, 58, 223, 217, 119,
1462 84, 213, 230, 132, 248, 31, 47, 141, 88, 249, 28, 205, 19, 5, 183, 167,
1463 88, 177, 66, 242, 50, 66, 255, 31, 218, 182, 209, 12, 246, 151, 87, 252,
1464 211, 231, 32, 120, 95, 76, 180, 20, 124, 238, 190, 60, 165, 239, 207, 37,
1465 221, 115, 145, 126, 61, 51, 141, 54, 64, 219, 247, 164, 74, 19, 7, 93,
1466 27, 150, 115, 224, 228, 172, 232, 113, 6, 148, 40, 229, 228, 32, 17, 92,
1467 215, 75, 64, 50, 235, 127, 109, 127, 152, 99, 73, 55, 210, 245, 55, 37,
1468 236, 244, 136, 154, 177, 231, 119, 30, 187, 225, 83, 240, 237, 183, 80, 245,
1469 10, 129, 181, 156, 137, 27, 79, 97, 145, 78, 100, 127, 79, 224, 218, 244,
1470 49, 70, 225, 131, 138, 102, 32, 110, 123, 110, 49, 161, 246, 27, 99, 115,
1471 171, 159, 45, 44, 15, 108, 51, 173, 24, 4, 170, 76, 255, 41, 27, 0,
1472 27, 35, 61, 145, 246, 241, 138, 152, 47, 51, 2, 153, 171, 79, 81, 176,
1473 123, 63, 192, 74, 27, 243, 22, 51, 86, 243, 48, 24, 129, 162, 69, 218,
1474 102, 143, 135, 107, 52, 182, 189, 25, 142, 206, 227, 144, 140, 57, 124, 252,
1475 97, 157, 61, 55, 43, 76, 52, 197, 146, 154, 83, 0, 150, 16, 85, 76,
1476 230, 32, 23, 86, 31, 241, 251, 88, 183, 195, 242, 192, 181, 160, 229, 185,
1477 229, 186, 72, 219, 249, 142, 111, 178, 42, 163, 117, 93, 31, 171, 161, 227,
1478 194, 51, 36, 53, 116, 0, 233, 37, 150, 128, 144, 8, 168, 198, 68, 35,
1479 57, 148, 64, 207, 148, 64, 213, 174, 223, 174, 129, 171, 81, 132, 1, 90,
1480 208, 100, 105, 209, 10, 209, 228, 138, 169, 82, 197, 37, 172, 32, 222, 70,
1481 180, 78, 59, 234, 106, 250, 76, 237, 59, 173, 178, 212, 151, 107, 131, 245,
1482 14, 218, 71, 56, 187, 138, 74, 101, 15, 32, 18, 131, 21, 57, 6, 32,
1483 115, 75, 244, 119, 168, 158, 154, 147, 72, 143, 232, 51, 49, 181, 115, 27,
1484 96, 141, 93, 202, 36, 38, 23, 61, 150, 171, 239, 66, 13, 183, 126, 24,
1485 99, 175, 110, 189, 88, 170, 252, 139, 127, 179, 106, 243, 140, 208, 243, 110,
1486 145, 64, 161, 4, 191, 209, 211, 72, 135, 24, 121, 210, 109, 42, 134, 9,
1487 160, 241, 186, 161, 203, 85, 212, 3, 23, 228, 75, 147, 133, 9, 100, 65,
1488 195, 165, 252, 229, 177, 199, 170, 63, 194, 247, 76, 171, 66, 203, 193, 3,
1489 74, 91, 86, 31, 85, 185, 52, 27, 175, 175, 84, 137, 51, 233, 26, 52,
1490 16, 75, 185, 95, 35, 167, 251, 67, 83, 217, 9, 241, 43, 252, 76, 242,
1491 101, 115, 133, 173, 154, 251, 33, 116, 118, 243, 152, 63, 173, 153, 63, 75,
1492 90, 106, 203, 197, 141, 149, 127, 9, 133, 218, 223, 193, 62, 19, 48, 231,
1493 45, 146, 21, 164, 1, 42, 43, 187, 75, 88, 20, 39, 233, 165, 20, 76,
1494 26, 145, 226, 155, 106, 187, 26, 195, 23, 212, 49, 60, 145, 149, 37, 167,
1495 73, 106, 203, 228, 185, 223, 108, 12, 187, 239, 88, 126, 27, 154, 235, 203,
1496 207, 187, 1, 114, 12, 112, 238, 17, 185, 120, 227, 177, 242, 191, 10, 18,
1497 241, 143, 21, 239, 31, 150, 102, 60, 15, 167, 209, 64, 117, 237, 45, 45,
1498 217, 147, 32, 28, 98, 221, 12, 20, 2, 176, 213, 147, 95, 31, 176, 64,
1499 237, 55, 53, 44, 105, 249, 43, 111, 73, 162, 180, 4, 62, 66, 118, 36,
1500 215, 254, 183, 249, 170, 39, 21, 69, 147, 65, 105, 136, 232, 160, 174, 141,
1501 84, 222, 189, 33, 250, 197, 226, 170, 246, 127, 87, 25, 10, 181, 46, 151,
1502 216, 250, 227, 131, 115, 64, 217, 11, 190, 199, 122, 148, 242, 221, 46, 169,
1503 45, 54, 9, 90, 251, 94, 61, 211, 30, 67, 199, 115, 204, 4, 199, 203,
1504 109, 137, 60, 223, 206, 3, 144, 170, 215, 224, 72, 247, 128, 64, 147, 140,
1505 223, 125, 20, 67, 248, 253, 206, 5, 44, 72, 160, 33, 20, 166, 80, 123,
1506 194, 220, 16, 134, 206, 24, 66, 217, 177, 231, 223, 66, 251, 253, 235, 180,
1507 36, 205, 107, 173, 198, 108, 83, 120, 82, 128, 120, 245, 67, 23, 248, 203,
1508 28, 14, 75, 235, 117, 111, 34, 127, 39, 52, 169, 101, 28, 144, 123, 20,
1509 197, 116, 96, 141, 201, 246, 61, 101, 132, 127, 98, 178, 186, 139, 226, 132,
1510 55, 229, 116, 75, 43, 241, 119, 139, 104, 169, 215, 199, 226, 113, 178, 214,
1511 153, 159, 139, 208, 106, 136, 77, 149, 72, 248, 49, 179, 98, 110, 192, 105,
1512 128, 27, 245, 36, 215, 210, 187, 98, 45, 92, 51, 238, 57, 153, 113, 21,
1513 86, 147, 122, 138, 3, 70, 66, 84, 135, 96, 199, 23, 123, 105, 226, 81,
1514 171, 23, 228, 73, 234, 240, 50, 135, 108, 143, 140, 247, 26, 245, 43, 94,
1515 183, 180, 240, 235, 159, 127, 57, 119, 6, 34, 58, 112, 170, 62, 37, 57,
1516 171, 56, 223, 147, 98, 204, 183, 146, 154, 85, 172, 49, 76, 84, 231, 138,
1517 117, 46, 81, 57, 240, 43, 102, 130, 234, 208, 237, 88, 164, 124, 128, 104,
1518 167, 38, 88, 73, 7, 131, 234, 67, 4, 213, 8, 211, 84, 81, 197, 133,
1519 123, 247, 254, 101, 230, 68, 245, 220, 193, 152, 208, 91, 63, 109, 228, 184,
1520 117, 28, 114, 146, 98, 142, 195, 4, 139, 48, 186, 242, 211, 124, 175, 224,
1521 69, 38, 35, 14, 253, 245, 242, 184, 138, 4, 206, 221, 15, 125, 189, 97,
1522 127, 46, 212, 10, 55, 1, 69, 56, 31, 180, 245, 93, 175, 58, 220, 3,
1523 164, 88, 22, 74, 157, 113, 246, 189, 65, 97, 235, 189, 126, 106, 50, 120,
1524 180, 71, 120, 11, 200, 48, 19, 57, 236, 64, 234, 180, 243, 32, 228, 127,
1525 228, 253, 42, 20, 238, 109, 161, 67, 73, 52, 35, 126, 197, 5, 117, 12,
1526 86, 215, 168, 60, 159, 4, 74, 193, 92, 104, 190, 30, 185, 187, 153, 208,
1527 87, 245, 62, 200, 16, 204, 189, 141, 188, 226, 187, 144, 101, 51, 86, 204,
1528 26, 22, 246, 230, 176, 81, 195, 19, 126, 58, 91, 30, 204, 178, 248, 217,
1529 81, 155, 68, 145, 42, 9, 22, 68, 22, 107, 25, 86, 153, 225, 224, 143,
1530 128, 94, 164, 65, 168, 173, 178, 181, 97, 100, 159, 212, 164, 213, 75, 25,
1531 35, 225, 133, 5, 243, 65, 39, 158, 155, 153, 3, 81, 53, 165, 153, 52,
1532 237, 226, 122, 245, 248, 255, 60, 13, 2, 41, 202, 232, 184, 57, 152, 133,
1533 105, 159, 33, 220, 49, 135, 76, 198, 212, 70, 168, 43, 233, 168, 180, 88,
1534 139, 246, 219, 120, 12, 161, 238, 88, 228, 9, 77, 236, 129, 227, 73, 91,
1535 104, 222, 104, 205, 28, 140, 205, 167, 178, 222, 150, 197, 139, 205, 66, 245,
1536 48, 241, 80, 225, 218, 27, 159, 205, 64, 148, 107, 54, 46, 190, 61, 0,
1537 161, 228, 124, 123, 18, 170, 35, 46, 53, 61, 171, 154, 121, 253, 187, 158,
1538 102, 194, 132, 94, 49, 239, 86, 57, 205, 129, 185, 234, 50, 56, 219, 36,
1539 56, 77, 247, 160, 75, 239, 154, 122, 34, 34, 143, 66, 53, 20, 212, 246,
1540 3, 79, 229, 119, 50, 132, 221, 187, 208, 82, 149, 183, 151, 200, 181, 97,
1541 12, 4, 136, 233, 171, 247, 128, 211, 234, 122, 152, 140, 221, 82, 83, 98,
1542 185, 95, 122, 23, 120, 124, 112, 240, 39, 16, 49, 140, 225, 135, 88, 69,
1543 96, 125, 246, 99, 224, 165, 148, 178, 35, 63, 192, 217, 39, 153, 63, 32,
1544 109, 142, 224, 12, 132, 10, 55, 49, 140, 217, 141, 113, 10, 72, 92, 37,
1545 121, 96, 72, 35, 184, 70, 156, 225, 140, 110, 150, 24, 95, 209, 172, 140,
1546 187, 10, 154, 58, 113, 215, 254, 36, 101, 155, 5, 46, 249, 59, 238, 164,
1547 25, 212, 35, 5, 87, 45, 183, 124, 174, 6, 182, 241, 206, 128, 118, 190,
1548 239, 160, 140, 2, 149, 90, 185, 125, 192, 8, 75, 105, 184, 51, 2, 11,
1549 198, 85, 249, 100, 88, 73, 229, 189, 80, 81, 244, 167, 62, 110, 52, 13,
1550 254, 122, 144, 170, 206, 64, 239, 191, 0, 73, 235, 143, 120, 81, 33, 87,
1551 83, 154, 156, 163, 31, 172, 104, 196, 78, 144, 100, 3, 54, 202, 67, 177,
1552 217, 80, 207, 235, 48, 12, 127, 78, 116, 96, 238, 226, 97, 154, 97, 120,
1553 19, 33, 89, 14, 160, 149, 243, 246, 196, 219, 74, 113, 225, 92, 32, 216,
1554 10, 50, 176, 127, 113, 63, 157, 143, 190, 245, 94, 244, 103, 85, 143, 162,
1555 61, 177, 203, 240, 204, 55, 183, 226, 251, 205, 53, 25, 19, 197, 160, 34,
1556 42, 128, 169, 80, 11, 210, 133, 105, 128, 175, 107, 72, 222, 130, 95, 209,
1557 93, 161, 16, 35, 244, 178, 236, 100, 20, 129, 190, 118, 246, 108, 68, 206,
1558 105, 58, 91, 90, 149, 0, 168, 95, 115, 63, 54, 240, 7, 164, 186, 100,
1559 76, 81, 225, 58, 178, 14, 46, 79, 31, 226, 180, 34, 164, 191, 84, 22,
1560 244, 90, 105, 13, 83, 133, 230, 81, 45, 49, 157, 84, 22, 168, 167, 205,
1561 219, 123, 209, 80, 87, 205, 180, 152, 162, 225, 229, 142, 72, 250, 240, 134,
1562 185, 145, 112, 149, 25, 185, 198, 174, 213, 83, 145, 151, 228, 138, 96, 152,
1563 242, 251, 227, 53, 229, 136, 37, 147, 184, 141, 104, 221, 51, 219, 21, 93,
1564 42, 253, 183, 57, 203, 92, 7, 240, 82, 171, 103, 167, 115, 233, 175, 142,
1565 8, 112, 10, 56, 44, 192, 231, 79, 18, 8, 68, 128, 106, 121, 225, 149,
1566 30, 210, 173, 86, 240, 30, 138, 197, 89, 213, 63, 161, 106, 65, 141, 57,
1567 96, 102, 191, 28, 56, 9, 201, 3, 248, 113, 118, 51, 121, 247, 83, 135,
1568 51, 54, 14, 19, 49, 175, 59, 206, 112, 172, 155, 243, 75, 19, 154, 102,
1569 188, 11, 76, 198, 136, 11, 44, 154, 139, 48, 34, 194, 116, 170, 198, 127,
1570 132, 231, 200, 44, 61, 210, 93, 20, 159, 201, 183, 39, 78, 178, 225, 112,
1571 50, 254, 198, 200, 207, 18, 196, 209, 222, 252, 67, 56, 186, 71, 24, 210,
1572 30, 105, 32, 102, 99, 239, 195, 191, 131, 246, 65, 121, 91, 66, 112, 28,
1573 170, 67, 28, 144, 187, 46, 117, 97, 187, 240, 250, 118, 249, 68, 151, 248,
1574 219, 208, 103, 242, 166, 122, 220, 59, 50, 215, 90, 160, 15, 15, 96, 89,
1575 167, 87, 22, 253, 137, 202, 126, 145, 162, 171, 97, 181, 102, 50, 107, 230,
1576 31, 183, 133, 105, 23, 233, 228, 13, 247, 169, 79, 53, 76, 138, 29, 51,
1577 53, 221, 126, 199, 47, 153, 184, 183, 198, 109, 192, 203, 178, 26, 115, 177,
1578 118, 158, 181, 43, 48, 174, 195, 253, 43, 18, 172, 171, 101, 129, 255, 63,
1579 41, 49, 160, 15, 86, 108, 235, 87, 115, 36, 93, 46, 164, 152, 49, 31,
1580 137, 125, 174, 115, 196, 240, 117, 226, 183, 151, 73, 30, 75, 59, 61, 160,
1581 96, 157, 215, 246, 160, 136, 82, 95, 181, 13, 207, 158, 106, 81, 18, 27,
1582 182, 35, 249, 72, 148, 128, 15, 82, 68, 197, 0, 159, 149, 239, 34, 250,
1583 171, 70, 200, 219, 214, 18, 134, 14, 71, 69, 219, 145, 208, 125, 65, 232,
1584 201, 212, 148, 39, 208, 142, 54, 38, 32, 154, 124, 35, 76, 173, 240, 232,
1585 23, 74, 183, 118, 137, 244, 180, 149, 195, 198, 105, 25, 246, 236, 155, 88,
1586 230, 134, 32, 126, 183, 72, 127, 129, 139, 161, 224, 222, 127, 107, 201, 78,
1587 227, 207, 10, 48, 9, 199, 240, 176, 49, 165, 95, 200, 101, 89, 40, 229,
1588 28, 8, 41, 193, 173, 218, 63, 229, 216, 170, 82, 90, 162, 243, 0, 125,
1589 248, 79, 186, 228, 44, 197, 178, 58, 196, 251, 85, 19, 254, 130, 110, 78,
1590 91, 217, 146, 16, 90, 221, 6, 129, 173, 73, 56, 77, 72, 19, 8, 14,
1591 129, 84, 19, 88, 146, 252, 137, 165, 222, 7, 199, 107, 135, 13, 253, 137,
1592 180, 184, 240, 37, 238, 133, 135, 80, 170, 172, 60, 80, 94, 130, 246, 166,
1593 63, 181, 30, 103, 97, 138, 193, 148, 96, 82, 61, 47, 188, 230, 118, 65,
1594 74, 28, 123, 50, 73, 12, 187, 123, 129, 19, 95, 213, 61, 153, 85, 243,
1595 44, 195, 249, 250, 121, 175, 42, 187, 154, 233, 91, 217, 49, 130, 129, 172,
1596 250, 182, 203, 30, 93, 213, 217, 24, 28, 198, 4, 208, 61, 207, 108, 120,
1597 22, 39, 136, 252, 123, 15, 188, 34, 35, 177, 35, 134, 178, 221, 217, 22,
1598 51, 18, 22, 215, 47, 68, 120, 130, 0, 192, 242, 170, 170, 202, 220, 179,
1599 185, 81, 204, 10, 115, 181, 231, 246, 172, 38, 43, 145, 56, 171, 219, 34,
1600 17, 96, 165, 209, 53, 44, 68, 74, 236, 249, 192, 35, 204, 123, 56, 118,
1601 174, 172, 151, 249, 36, 21, 133, 119, 237, 232, 61, 125, 6, 124, 200, 62,
1602 68, 67, 40, 196, 202, 84, 213, 160, 237, 85, 249, 125, 41, 187, 126, 48,
1603 152, 124, 104, 211, 127, 96, 167, 184, 23, 161, 68, 106, 119, 224, 226, 148,
1604 234, 54, 155, 168, 186, 193, 167, 15, 242, 100, 82, 15, 205, 247, 34, 24,
1605 134, 152, 115, 132, 114, 196, 0, 136, 242, 73, 91, 35, 90, 4, 161, 138,
1606 163, 21, 16, 244, 60, 158, 199, 246, 233, 150, 10, 142, 248, 196, 224, 129,
1607 8, 158, 81, 11, 92, 96, 197, 23, 45, 104, 235, 250, 9, 31, 47, 153,
1608 116, 22, 170, 186, 150, 46, 214, 246, 75, 116, 4, 242, 147, 168, 177, 134,
1609 143, 149, 36, 139, 224, 127, 143, 167, 208, 115, 158, 250, 132, 4, 124, 204,
1610 99, 217, 239, 97, 5, 38, 50, 17, 176, 171, 96, 92, 88, 219, 195, 184,
1611 160, 158, 175, 10, 175, 33, 245, 28, 55, 56, 207, 47, 46, 114, 108, 196,
1612 101, 93, 39, 227, 183, 40, 40, 109, 121, 123, 90, 85, 162, 165, 227, 200,
1613 238, 136, 223, 36, 77, 179, 45, 156, 51, 95, 33, 15, 219, 71, 37, 98,
1614 141, 150, 179, 78, 217, 221, 130, 186, 155, 84, 146, 217, 210, 202, 91, 212,
1615 50, 129, 188, 203, 28, 213, 10, 230, 40, 47, 215, 77, 161, 88, 71, 56,
1616 82, 124, 130, 249, 70, 139, 142, 23, 78, 139, 252, 32, 223, 90, 214, 27,
1617 94, 23, 12, 240, 77, 145, 71, 172, 75, 235, 141, 83, 145, 50, 101, 166,
1618 87, 154, 179, 203, 27, 233, 169, 45, 28, 41, 211, 46, 144, 123, 62, 62,
1619 205, 178, 180, 89, 32, 194, 238, 151, 217, 164, 214, 241, 164, 96, 215, 46,
1620 141, 189, 86, 97, 143, 4, 227, 73, 20, 221, 238, 66, 3, 132, 135, 229,
1621 22, 60, 152, 102, 211, 20, 250, 225, 36, 212, 131, 182, 212, 216, 84, 141,
1622 133, 86, 163, 136, 107, 219, 8, 100, 189, 138, 217, 60, 131, 237, 64, 37,
1623 241, 85, 140, 47, 54, 75, 58, 76, 66, 104, 245, 201, 199, 236, 188, 71,
1624 30, 171, 233, 190, 81, 120, 166, 63, 237, 249, 233, 192, 5, 24, 231, 193,
1625 39, 99, 101, 108, 92, 109, 156, 211, 111, 87, 157, 130, 16, 58, 113, 47,
1626 101, 152, 60, 183, 37, 227, 52, 255, 213, 16, 112, 234, 223, 197, 101, 73,
1627 120, 94, 60, 158, 82, 227, 131, 13, 4, 167, 78, 126, 120, 154, 26, 246,
1628 35, 145, 40, 150, 7, 208, 243, 100, 68, 89, 200, 139, 138, 121, 37, 28,
1629 35, 197, 227, 79, 19, 130, 171, 91, 116, 57, 153, 140, 217, 236, 7, 180,
1630 221, 226, 163, 199, 158, 131, 200, 37, 48, 41, 157, 175, 139, 71, 53, 172,
1631 113, 159, 133, 47, 139, 113, 157, 40, 88, 44, 115, 105, 104, 219, 211, 18,
1632 164, 170, 127, 5, 178, 115, 181, 143, 30, 173, 6, 186, 183, 45, 56, 94,
1633 252, 210, 171, 154, 10, 17, 34, 153, 4, 11, 176, 85, 144, 114, 36, 247,
1634 34, 67, 187, 69, 164, 168, 120, 82, 186, 46, 15, 147, 105, 48, 76, 235,
1635 15, 218, 86, 160, 19, 220, 119, 241, 103, 252, 196, 58, 74, 131, 214, 109,
1636 17, 175, 75, 203, 167, 17, 60, 52, 251, 130, 55, 184, 165, 83, 225, 231,
1637 184, 208, 196, 88, 70, 8, 3, 43, 78, 107, 158, 180, 130, 248, 194, 16,
1638 46, 54, 100, 98, 121, 67, 185, 17, 181, 210, 5, 15, 178, 196, 80, 220,
1639 28, 103, 220, 231, 167, 10, 122, 225, 194, 118, 157, 192, 195, 205, 130, 253,
1640 94, 246, 177, 74, 149, 90, 120, 188, 230, 48, 77, 168, 50, 76, 130, 136,
1641 200, 219, 209, 192, 20, 10, 193, 97, 205, 136, 98, 117, 128, 170, 198, 220,
1642 218, 180, 178, 186, 150, 227, 196, 161, 4, 244, 124, 31, 85, 243, 34, 78,
1643 187, 226, 164, 167, 122, 56, 114, 232, 140, 189, 160, 19, 184, 223, 165, 202,
1644 86, 210, 102, 183, 50, 30, 109, 134, 23, 102, 171, 130, 93, 106, 2, 117,
1645 80, 82, 197, 193, 247, 137, 255, 255, 127, 38, 13, 82, 103, 51, 179, 220,
1646 133, 247, 104, 152, 160, 229, 160, 214, 152, 157, 87, 183, 82, 43, 36, 19,
1647 80, 192, 122, 186, 201, 116, 190, 220, 131, 228, 153, 197, 212, 112, 233, 124,
1648 114, 212, 106, 195, 129, 141, 204, 238, 98, 247, 90, 244, 23, 118, 2, 168,
1649 71, 48, 223, 253, 187, 16, 204, 230, 46, 221, 30, 243, 27, 129, 155, 210,
1650 159, 84, 56, 212, 197, 131, 174, 59, 85, 108, 80, 36, 31, 210, 71, 228,
1651 254, 171, 67, 129, 154, 175, 245, 140, 11, 167, 43, 69, 231, 227, 91, 183,
1652 133, 108, 4, 151, 128, 64, 243, 215, 74, 160, 186, 217, 38, 28, 186, 75,
1653 178, 151, 214, 5, 49, 158, 242, 126, 91, 249, 88, 156, 110, 124, 205, 125,
1654 227, 19, 235, 172, 103, 200, 190, 121, 169, 140, 118, 156, 21, 152, 34, 31,
1655 235, 46, 191, 107, 37, 109, 135, 112, 195, 9, 245, 43, 96, 232, 74, 8,
1656 193, 131, 70, 140, 180, 204, 219, 243, 72, 70, 16, 11, 227, 0, 27, 252,
1657 142, 183, 199, 103, 114, 149, 221, 235, 69, 92, 245, 9, 227, 43, 173, 139,
1658 119, 85, 104, 214, 84, 126, 244, 243, 122, 14, 164, 185, 104, 176, 55, 133,
1659 44, 28, 208, 232, 50, 71, 32, 78, 200, 95, 153, 70, 82, 243, 91, 164,
1660 64, 159, 173, 244, 103, 78, 29, 218, 209, 124, 118, 153, 42, 69, 240, 237,
1661 228, 33, 155, 17, 61, 27, 233, 171, 6, 240, 48, 113, 243, 134, 207, 120,
1662 216, 61, 188, 247, 231, 185, 163, 43, 140, 138, 235, 132, 219, 47, 38, 93,
1663 205, 6, 247, 195, 200, 79, 87, 111, 210, 54, 222, 179, 108, 163, 253, 22,
1664 22, 101, 180, 6, 61, 41, 91, 95, 237, 186, 166, 110, 225, 139, 205, 146,
1665 41, 133, 153, 114, 63, 48, 110, 208, 168, 38, 233, 141, 23, 136, 236, 22,
1666 220, 14, 62, 224, 46, 20, 193, 181, 107, 14, 234, 156, 234, 108, 30, 112,
1667 235, 126, 237, 189, 252, 240, 240, 3, 175, 210, 85, 35, 230, 115, 219, 184,
1668 173, 48, 84, 250, 52, 113, 44, 187, 173, 253, 153, 177, 32, 127, 98, 100,
1669 180, 211, 71, 146, 82, 1, 69, 200, 165, 198, 121, 133, 232, 0, 237, 157,
1670 169, 31, 134, 106, 243, 245, 16, 228, 53, 133, 143, 255, 123, 175, 19, 10,
1671 98, 117, 180, 38, 50, 190, 63, 70, 106, 8, 221, 78, 66, 129, 190, 181,
1672 165, 119, 242, 101, 19, 18, 181, 91, 223, 30, 93, 253, 74, 242, 112, 139,
1673 30, 121, 25, 100, 144, 32, 212, 143, 3, 96, 134, 113, 193, 190, 51, 8,
1674 60, 108, 88, 168, 142, 47, 217, 173, 44, 207, 174, 161, 237, 179, 147, 4,
1675 30, 5, 177, 202, 43, 239, 15, 135, 44, 216, 10, 183, 63, 27, 159, 195,
1676 56, 238, 95, 213, 45, 44, 252, 4, 101, 233, 38, 88, 66, 126, 149, 196,
1677 87, 211, 55, 38, 17, 92, 26, 76, 156, 183, 136, 154, 166, 219, 125, 10,
1678 88, 240, 97, 14, 86, 67, 4, 74, 236, 71, 72, 10, 49, 18, 158, 148,
1679 128, 15, 241, 17, 9, 236, 243, 22, 116, 160, 65, 166, 34, 113, 76, 41,
1680 100, 153, 184, 22, 62, 252, 220, 47, 180, 124, 103, 242, 104, 13, 244, 136,
1681 33, 146, 33, 176, 31, 159, 235, 29, 221, 255, 182, 90, 183, 158, 186, 155,
1682 85, 137, 173, 129, 71, 91, 147, 17, 30, 240, 214, 110, 79, 64, 21, 129,
1683 97, 109, 253, 198, 203, 116, 235, 89, 166, 151, 116, 106, 194, 27, 51, 177,
1684 23, 119, 199, 227, 50, 143, 129, 234, 188, 217, 9, 136, 48, 115, 5, 252,
1685 241, 195, 116, 239, 68, 176, 55, 121, 2, 38, 229, 224, 94, 204, 200, 115,
1686 84, 235, 131, 172, 242, 56, 208, 41, 21, 36, 113, 156, 137, 6, 225, 132,
1687 4, 181, 193, 84, 10, 213, 155, 150, 72, 127, 23, 107, 255, 105, 250, 61,
1688 234, 211, 225, 169, 93, 63, 138, 95, 201, 74, 208, 99, 119, 184, 219, 62,
1689 86, 163, 142, 35, 24, 86, 92, 224, 53, 84, 57, 101, 113, 76, 26, 78,
1690 174, 49, 28, 234, 153, 240, 27, 114, 87, 133, 130, 78, 66, 144, 205, 152,
1691 171, 169, 136, 219, 142, 223, 145, 149, 196, 6, 167, 109, 52, 188, 0, 98,
1692 242, 254, 184, 129, 250, 63, 244, 10, 97, 188, 7, 137, 183, 165, 68, 91,
1693 26, 188, 230, 246, 227, 12, 217, 170, 224, 119, 135, 243, 149, 88, 67, 23,
1694 117, 173, 130, 164, 233, 244, 251, 11, 123, 57, 80, 111, 249, 146, 231, 213,
1695 158, 26, 236, 250, 213, 228, 117, 251, 101, 128, 8, 241, 251, 36, 40, 149,
1696 148, 60, 146, 48, 104, 121, 163, 233, 2, 24, 10, 21, 93, 137, 124, 8,
1697 115, 220, 255, 107, 153, 105, 6, 255, 32, 160, 96, 74, 84, 184, 31, 155,
1698 118, 206, 58, 131, 111, 150, 137, 145, 22, 45, 138, 211, 118, 151, 248, 189,
1699 64, 82, 222, 9, 137, 114, 59, 89, 77, 249, 245, 195, 146, 198, 43, 209,
1700 186, 151, 121, 136, 170, 81, 53, 43, 126, 15, 62, 88, 171, 206, 232, 34,
1701 99, 52, 6, 22, 126, 140, 32, 181, 122, 253, 230, 127, 211, 254, 61, 254,
1702 108, 114, 38, 214, 164, 244, 87, 243, 187, 185, 57, 105, 24, 244, 59, 254,
1703 92, 143, 235, 38, 70, 177, 126, 123, 61, 243, 45, 127, 76, 127, 39, 45,
1704 254, 239, 67, 221, 24, 81, 24, 130, 247, 106, 239, 93, 18, 57, 242, 4,
1705 223, 131, 86, 249, 241, 81, 149, 230, 154, 17, 14, 179, 194, 234, 17, 85,
1706 188, 33, 162, 62, 73, 157, 253, 248, 111, 97, 205, 47, 74, 223, 192, 185,
1707 212, 153, 240, 156, 104, 64, 46, 209, 146, 56, 27, 21, 184, 95, 107, 95,
1708 101, 243, 133, 146, 194, 240, 51, 109, 158, 225, 18, 80, 66, 4, 79, 252,
1709 174, 187, 55, 230, 54, 51, 42, 87, 34, 159, 155, 184, 118, 167, 150, 46,
1710 32, 156, 244, 124, 222, 84, 247, 12, 231, 119, 237, 135, 225, 227, 97, 178,
1711 37, 208, 112, 126, 32, 227, 60, 239, 194, 183, 169, 208, 221, 250, 180, 56,
1712 137, 67, 153, 170, 242, 54, 55, 48, 219, 79, 106, 249, 250, 56, 130, 184,
1713 43, 56, 114, 175, 122, 249, 107, 188, 63, 169, 25, 43, 68, 61, 246, 47,
1714 191, 117, 150, 7, 163, 144, 42, 186, 5, 195, 11, 68, 215, 219, 87, 213,
1715 42, 84, 99, 37, 29, 78, 34, 180, 131, 15, 171, 186, 225, 163, 204, 225,
1716 72, 198, 227, 122, 245, 4, 133, 40, 134, 17, 61, 112, 55, 159, 37, 118,
1717 112, 173, 210, 126, 9, 23, 209, 65, 14, 109, 16, 247, 254, 45, 170, 33,
1718 143, 35, 107, 134, 51, 132, 135, 226, 40, 112, 156, 122, 5, 31, 37, 113,
1719 24, 1, 153, 3, 180, 227, 249, 172, 93, 20, 79, 126, 42, 254, 100, 80,
1720 86, 180, 123, 71, 213, 32, 178, 28, 63, 75, 177, 246, 25, 119, 33, 236,
1721 194, 31, 94, 169, 97, 96, 42, 29, 165, 234, 199, 12, 76, 8, 242, 229,
1722 160, 130, 169, 76, 120, 159, 25, 18, 36, 182, 222, 210, 105, 251, 2, 40,
1723 111, 212, 249, 119, 48, 137, 50, 71, 146, 216, 47, 18, 60, 194, 18, 119,
1724 197, 216, 84, 170, 143, 241, 61, 207, 206, 238, 51, 39, 145, 171, 81, 108,
1725 64, 0, 229, 83, 190, 81, 149, 27, 77, 44, 34, 134, 178, 250, 9, 244,
1726 128, 175, 124, 28, 41, 116, 254, 30, 162, 88, 207, 231, 222, 155, 224, 234,
1727 201, 56, 119, 191, 190, 158, 195, 16, 153, 152, 99, 244, 60, 207, 205, 133,
1728 34, 101, 0, 104, 144, 141, 121, 168, 44, 40, 234, 49, 35, 136, 39, 242,
1729 14, 198, 188, 124, 161, 135, 113, 180, 68, 218, 10, 47, 223, 190, 0, 238,
1730 109, 149, 149, 25, 14, 218, 109, 85, 106, 125, 45, 29, 63, 122, 74, 184,
1731 39, 153, 72, 81, 69, 212, 62, 80, 161, 110, 103, 56, 254, 7, 198, 201,
1732 47, 202, 145, 147, 115, 7, 252, 21, 157, 211, 102, 40, 117, 116, 41, 110,
1733 189, 45, 41, 128, 46, 18, 40, 228, 43, 159, 202, 90, 114, 78, 193, 9,
1734 237, 172, 59, 89, 50, 218, 47, 142, 139, 118, 146, 201, 8, 158, 116, 71,
1735 133, 105, 177, 199, 24, 202, 219, 64, 136, 101, 162, 11, 225, 13, 60, 217,
1736 13, 125, 9, 38, 224, 90, 78, 166, 145, 101, 167, 132, 24, 58, 73, 19,
1737 2, 185, 83, 148, 110, 133, 191, 76, 71, 18, 168, 103, 0, 123, 195, 39,
1738 41, 243, 215, 62, 38, 156, 101, 42, 144, 43, 125, 154, 46, 152, 74, 242,
1739 251, 158, 180, 189, 228, 165, 64, 75, 220, 184, 160, 9, 23, 57, 138, 16,
1740 88, 240, 5, 234, 106, 188, 171, 120, 55, 203, 43, 72, 33, 67, 129, 26,
1741 242, 128, 89, 144, 226, 129, 58, 143, 110, 185, 216, 158, 238, 175, 34, 121,
1742 59, 49, 76, 178, 81, 88, 181, 23, 219, 66, 1, 228, 34, 143, 250, 41,
1743 77, 7, 245, 65, 3, 203, 53, 144, 140, 194, 71, 27, 10, 175, 218, 149,
1744 242, 213, 150, 9, 199, 22, 202, 155, 5, 44, 23, 111, 102, 5, 150, 32,
1745 62, 31, 220, 1, 129, 151, 109, 27, 215, 54, 235, 104, 157, 123, 8, 89,
1746 94, 161, 197, 0, 163, 75, 124, 41, 240, 192, 109, 9, 202, 124, 25, 82,
1747 95, 243, 170, 63, 91, 248, 4, 63, 47, 208, 243, 61, 85, 62, 107, 32,
1748 87, 19, 208, 87, 120, 234, 108, 244, 44, 158, 238, 91, 185, 219, 105, 13,
1749 254, 85, 208, 93, 148, 144, 160, 98, 237, 72, 27, 59, 119, 22, 99, 52,
1750 193, 190, 57, 171, 46, 247, 180, 126, 30, 16, 200, 88, 35, 212, 215, 253,
1751 218, 25, 96, 40, 44, 53, 29, 129, 153, 154, 197, 238, 84, 201, 244, 106,
1752 184, 178, 127, 54, 198, 60, 160, 98, 4, 229, 110, 220, 225, 26, 254, 238,
1753 123, 69, 248, 222, 43, 122, 207, 63, 166, 246, 171, 129, 231, 7, 89, 132,
1754 245, 76, 55, 174, 184, 93, 139, 221, 250, 11, 86, 239, 248, 14, 98, 226,
1755 66, 146, 45, 59, 106, 78, 6, 253, 6, 128, 53, 174, 7, 36, 100, 130,
1756 22, 47, 157, 147, 27, 31, 15, 97, 122, 46, 137, 84, 126, 104, 48, 217,
1757 236, 131, 51, 253, 147, 23, 35, 133, 43, 183, 124, 197, 150, 85, 170, 39,
1758 96, 227, 44, 130, 51, 83, 224, 22, 177, 39, 65, 125, 98, 28, 162, 56,
1759 25, 112, 81, 50, 28, 118, 184, 45, 236, 226, 87, 117, 111, 219, 157, 34,
1760 224, 77, 68, 59, 91, 80, 177, 178, 188, 203, 247, 133, 130, 15, 61, 125,
1761 252, 18, 201, 87, 157, 158, 47, 5, 151, 104, 231, 127, 161, 154, 172, 224,
1762 74, 95, 195, 121, 175, 200, 18, 26, 240, 194, 222, 85, 189, 238, 106, 136,
1763 195, 28, 170, 10, 115, 25, 236, 203, 127, 254, 103, 79, 175, 57, 159, 102,
1764 193, 106, 136, 130, 195, 16, 19, 14, 240, 130, 74, 217, 154, 5, 217, 88,
1765 21, 113, 205, 138, 241, 209, 39, 255, 182, 100, 41, 243, 199, 191, 7, 123,
1766 185, 7, 186, 28, 32, 71, 236, 16, 220, 222, 5, 122, 74, 55, 95, 19,
1767 230, 127, 201, 130, 180, 143, 142, 149, 229, 43, 81, 95, 32, 138, 165, 42,
1768 136, 231, 106, 34, 90, 135, 60, 60, 105, 191, 50, 195, 62, 230, 189, 100,
1769 41, 110, 61, 204, 139, 237, 185, 208, 136, 61, 249, 12, 20, 230, 48, 141,
1770 65, 17, 204, 126, 215, 73, 77, 129, 49, 230, 39, 247, 222, 109, 50, 151,
1771 255, 246, 141, 254, 233, 117, 156, 172, 113, 74, 72, 133, 218, 227, 4, 192,
1772 27, 185, 21, 99, 61, 34, 52, 112, 74, 18, 149, 38, 195, 43, 154, 8,
1773 16, 189, 142, 139, 167, 137, 2, 155, 165, 1, 255, 158, 107, 131, 141, 112,
1774 87, 102, 97, 12, 228, 30, 143, 60, 14, 238, 183, 145, 88, 116, 187, 64,
1775 138, 136, 138, 24, 16, 241, 126, 37, 103, 99, 203, 164, 198, 129, 140, 189,
1776 18, 178, 241, 154, 7, 81, 8, 75, 196, 131, 121, 19, 52, 90, 125, 71,
1777 179, 8, 102, 149, 117, 88, 2, 58, 115, 41, 254, 118, 205, 28, 244, 153,
1778 79, 179, 136, 194, 59, 55, 233, 48, 87, 218, 151, 218, 172, 109, 72, 156,
1779 112, 175, 129, 111, 124, 151, 112, 69, 175, 237, 175, 208, 35, 15, 70, 189,
1780 245, 118, 229, 51, 121, 237, 106, 57, 190, 157, 42, 37, 107, 108, 240, 142,
1781 180, 123, 58, 243, 99, 76, 153, 94, 235, 148, 3, 146, 198, 250, 3, 176,
1782 73, 105, 64, 3, 129, 155, 69, 66, 114, 55, 53, 31, 200, 171, 9, 127,
1783 227, 81, 238, 0, 29, 54, 79, 184, 213, 44, 21, 21, 106, 118, 193, 193,
1784 132, 216, 89, 39, 107, 40, 29, 198, 229, 184, 123, 32, 225, 148, 78, 40,
1785 236, 108, 100, 112, 139, 33, 176, 201, 41, 56, 180, 87, 100, 161, 247, 181,
1786 48, 215, 32, 88, 3, 2, 69, 189, 162, 185, 155, 129, 131, 151, 170, 201,
1787 203, 192, 141, 27, 38, 21, 174, 100, 48, 138, 216, 113, 123, 137, 161, 92,
1788 153, 129, 184, 21, 205, 18, 190, 184, 189, 57, 130, 168, 67, 161, 16, 207,
1789 223, 35, 254, 40, 169, 65, 104, 178, 164, 88, 198, 40, 58, 221, 211, 96,
1790 91, 98, 147, 157, 193, 121, 211, 28, 185, 217, 84, 58, 236, 70, 181, 35,
1791 58, 27, 111, 52, 213, 103, 93, 154, 18, 60, 201, 180, 29, 28, 85, 126,
1792 170, 190, 231, 64, 27, 191, 83, 158, 125, 124, 43, 172, 198, 25, 151, 108,
1793 116, 7, 164, 114, 92, 215, 197, 222, 31, 231, 41, 112, 42, 172, 207, 164,
1794 87, 123, 138, 156, 78, 44, 131, 127, 155, 114, 138, 219, 52, 223, 150, 230,
1795 94, 165, 103, 45, 139, 238, 161, 208, 117, 178, 225, 67, 90, 90, 110, 176,
1796 20, 110, 4, 189, 194, 138, 12, 168, 150, 181, 139, 54, 241, 243, 87, 19,
1797 136, 251, 68, 1, 239, 85, 161, 139, 67, 117, 239, 162, 214, 96, 205, 66,
1798 79, 13, 47, 16, 72, 171, 33, 246, 93, 197, 65, 115, 108, 87, 83, 116,
1799 49, 66, 34, 18, 101, 65, 24, 178, 147, 34, 61, 242, 51, 246, 191, 249,
1800 164, 200, 210, 150, 146, 46, 157, 137, 147, 161, 25, 101, 217, 142, 125, 241,
1801 73, 115, 83, 86, 208, 167, 233, 77, 109, 89, 197, 219, 108, 206, 54, 99,
1802 113, 101, 77, 41, 251, 24, 203, 179, 28, 109, 62, 248, 113, 197, 82, 35,
1803 89, 132, 11, 184, 194, 237, 142, 71, 81, 173, 36, 220, 103, 66, 254, 78,
1804 252, 105, 211, 89, 149, 132, 218, 43, 45, 77, 64, 137, 248, 238, 145, 172,
1805 64, 78, 123, 225, 161, 166, 202, 94, 210, 227, 36, 254, 153, 230, 23, 21,
1806 82, 125, 167, 115, 10, 25, 141, 144, 226, 25, 151, 22, 157, 162, 2, 250,
1807 16, 161, 48, 111, 121, 9, 191, 229, 41, 136, 83, 163, 165, 10, 195, 34,
1808 56, 145, 166, 99, 184, 180, 180, 159, 95, 110, 17, 46, 227, 245, 97, 207,
1809 27, 113, 121, 55, 196, 29, 248, 171, 108, 250, 236, 1, 31, 108, 15, 34,
1810 233, 32, 250, 127, 67, 159, 151, 145, 5, 171, 219, 102, 159, 137, 231, 130,
1811 229, 177, 209, 253, 150, 217, 76, 62, 111, 42, 25, 152, 169, 83, 245, 164,
1812 127, 61, 128, 35, 234, 8, 69, 152, 103, 107, 18, 98, 101, 214, 205, 136,
1813 68, 165, 54, 48, 189, 59, 29, 254, 128, 255, 249, 46, 23, 246, 29, 131,
1814 185, 27, 160, 235, 16, 52, 232, 247, 100, 230, 137, 91, 111, 48, 202, 31,
1815 126, 167, 162, 45, 159, 66, 215, 176, 32, 5, 255, 82, 108, 31, 184, 89,
1816 6, 73, 8, 209, 86, 202, 122, 111, 132, 39, 140, 160, 74, 148, 254, 21,
1817 33, 80, 180, 165, 241, 182, 74, 205, 243, 194, 17, 216, 113, 8, 239, 190,
1818 34, 158, 31, 58, 223, 249, 51, 74, 174, 191, 157, 185, 12, 98, 190, 135,
1819 91, 198, 25, 221, 76, 118, 88, 240, 184, 188, 70, 92, 36, 208, 124, 43,
1820 228, 200, 86, 193, 178, 251, 115, 233, 240, 11, 134, 91, 230, 141, 195, 161,
1821 255, 12, 103, 85, 187, 84, 129, 202, 48, 85, 155, 242, 226, 185, 109, 126,
1822 2, 8, 174, 221, 203, 67, 182, 52, 114, 243, 219, 32, 89, 183, 125, 18,
1823 209, 200, 99, 116, 123, 185, 17, 250, 250, 223, 129, 221, 147, 249, 142, 238,
1824 25, 230, 85, 85, 141, 248, 144, 13, 241, 3, 10, 253, 74, 96, 82, 115,
1825 210, 221, 17, 79, 213, 119, 27, 192, 55, 41, 161, 125, 167, 87, 45, 10,
1826 246, 22, 76, 245, 83, 4, 160, 242, 62, 221, 89, 206, 80, 235, 33, 34,
1827 81, 125, 28, 117, 233, 167, 89, 6, 132, 138, 130, 88, 227, 245, 44, 138,
1828 180, 42, 215, 4, 177, 9, 167, 135, 173, 234, 185, 119, 100, 108, 4, 237,
1829 145, 52, 227, 61, 231, 130, 77, 97, 204, 175, 136, 225, 27, 29, 36, 142,
1830 151, 129, 170, 105, 233, 88, 57, 122, 219, 60, 16, 70, 253, 218, 123, 188,
1831 49, 210, 121, 115, 150, 249, 213, 246, 76, 2, 197, 196, 24, 169, 143, 175,
1832 230, 138, 32, 81, 191, 13, 166, 211, 252, 110, 84, 221, 244, 13, 45, 116,
1833 242, 123, 18, 153, 163, 187, 46, 33, 28, 160, 219, 179, 85, 166, 2, 125,
1834 92, 99, 147, 61, 4, 200, 245, 135, 172, 187, 4, 101, 102, 85, 79, 168,
1835 53, 222, 129, 150, 252, 253, 252, 45, 39, 64, 33, 104, 69, 239, 180, 71,
1836 234, 177, 245, 185, 59, 238, 88, 65, 58, 156, 84, 238, 150, 46, 236, 65,
1837 229, 33, 221, 168, 102, 249, 163, 155, 36, 189, 54, 211, 154, 247, 69, 45,
1838 47, 140, 119, 63, 143, 129, 163, 38, 120, 88, 216, 66, 117, 118, 176, 93,
1839 153, 42, 129, 198, 45, 203, 26, 150, 43, 17, 53, 104, 196, 82, 234, 59,
1840 129, 81, 14, 104, 229, 8, 204, 187, 8, 168, 112, 18, 211, 154, 195, 181,
1841 87, 241, 234, 148, 68, 229, 231, 23, 134, 14, 97, 119, 22, 48, 123, 17,
1842 115, 105, 180, 124, 135, 51, 177, 104, 187, 23, 210, 76, 161, 8, 36, 57,
1843 218, 252, 142, 236, 154, 178, 119, 129, 189, 255, 208, 56, 25, 70, 68, 50,
1844 57, 172, 77, 154, 163, 80, 33, 180, 118, 57, 105, 97, 5, 50, 158, 185,
1845 226, 119, 237, 163, 47, 79, 233, 114, 160, 246, 93, 238, 197, 217, 240, 55,
1846 121, 37, 138, 104, 245, 181, 30, 133, 129, 94, 97, 31, 188, 121, 119, 74,
1847 227, 167, 196, 194, 108, 185, 63, 242, 0, 224, 8, 162, 49, 173, 57, 250,
1848 12, 113, 238, 241, 0, 180, 180, 198, 57, 180, 248, 243, 214, 122, 103, 81,
1849 205, 243, 232, 213, 39, 122, 142, 107, 4, 63, 123, 147, 22, 78, 174, 200,
1850 33, 27, 16, 76, 139, 230, 32, 101, 246, 228, 246, 89, 15, 30, 11, 87,
1851 174, 70, 195, 104, 14, 26, 209, 149, 19, 254, 121, 62, 186, 224, 56, 247,
1852 10, 237, 102, 83, 215, 211, 22, 123, 161, 52, 251, 122, 142, 228, 191, 93,
1853 151, 174, 176, 166, 64, 184, 254, 113, 140, 214, 109, 159, 126, 201, 95, 245,
1854 167, 180, 165, 106, 61, 83, 143, 239, 68, 254, 0, 201, 237, 162, 231, 108,
1855 152, 131, 248, 39, 149, 131, 80, 224, 41, 14, 157, 96, 16, 251, 139, 15,
1856 153, 45, 29, 84, 116, 154, 221, 234, 127, 39, 10, 244, 3, 92, 154, 93,
1857 125, 209, 252, 144, 73, 139, 47, 93, 98, 78, 7, 61, 173, 117, 46, 155,
1858 73, 76, 127, 202, 5, 223, 113, 215, 86, 54, 82, 0, 105, 16, 52, 226,
1859 140, 232, 53, 23, 76, 117, 212, 139, 183, 112, 95, 162, 174, 153, 104, 4,
1860 241, 133, 159, 188, 4, 147, 92, 125, 133, 104, 26, 241, 130, 13, 239, 96,
1861 235, 36, 195, 74, 193, 126, 54, 27, 55, 190, 97, 44, 26, 106, 31, 76,
1862 244, 174, 179, 1, 97, 168, 114, 14, 65, 60, 199, 182, 133, 130, 65, 175,
1863 95, 224, 125, 74, 157, 34, 99, 26, 135, 160, 188, 244, 114, 175, 211, 194,
1864 74, 97, 182, 244, 93, 3, 219, 223, 154, 204, 10, 132, 233, 165, 23, 204,
1865 187, 163, 179, 23, 72, 137, 22, 40, 123, 77, 216, 95, 44, 20, 55, 213,
1866 165, 125, 17, 237, 77, 140, 2, 146, 193, 104, 9, 83, 40, 126, 177, 137,
1867 53, 89, 59, 23, 49, 80, 240, 168, 70, 97, 250, 36, 161, 17, 228, 161,
1868 136, 213, 43, 118, 106, 198, 251, 68, 223, 34, 79, 123, 118, 91, 222, 236,
1869 73, 236, 175, 255, 248, 249, 96, 53, 245, 248, 238, 12, 106, 127, 183, 1,
1870 31, 193, 14, 126, 7, 19, 252, 102, 191, 74, 208, 115, 140, 76, 133, 179,
1871 82, 5, 83, 122, 154, 82, 37, 19, 171, 190, 177, 177, 233, 248, 175, 214,
1872 93, 17, 121, 167, 249, 165, 149, 191, 145, 188, 218, 99, 154, 55, 109, 202,
1873 12, 17, 56, 107, 124, 137, 156, 233, 85, 18, 237, 207, 9, 72, 10, 218,
1874 98, 58, 70, 254, 207, 179, 61, 201, 250, 163, 135, 215, 130, 182, 47, 93,
1875 123, 14, 251, 252, 34, 240, 172, 151, 111, 127, 19, 6, 165, 96, 254, 15,
1876 32, 153, 247, 91, 200, 78, 169, 160, 28, 70, 146, 251, 174, 49, 54, 98,
1877 93, 161, 19, 105, 195, 62, 196, 38, 84, 53, 122, 177, 158, 179, 113, 93,
1878 91, 102, 90, 119, 52, 120, 247, 208, 228, 233, 97, 240, 187, 205, 14, 194,
1879 35, 134, 229, 241, 16, 152, 130, 206, 63, 93, 110, 21, 52, 170, 67, 99,
1880 214, 121, 230, 201, 133, 173, 143, 225, 81, 184, 139, 105, 226, 58, 237, 106,
1881 16, 91, 163, 15, 4, 63, 94, 186, 80, 219, 85, 209, 183, 129, 122, 39,
1882 8, 140, 180, 203, 167, 223, 148, 74, 147, 29, 237, 108, 105, 143, 229, 254,
1883 104, 243, 111, 210, 11, 185, 158, 151, 90, 47, 43, 233, 91, 18, 119, 144,
1884 184, 63, 64, 3, 244, 225, 30, 134, 198, 210, 41, 103, 2, 31, 221, 74,
1885 26, 54, 18, 23, 242, 104, 39, 31, 167, 183, 209, 105, 192, 88, 219, 25,
1886 134, 228, 8, 222, 149, 25, 195, 141, 61, 33, 114, 213, 93, 6, 58, 12,
1887 191, 113, 216, 153, 39, 235, 173, 146, 34, 139, 210, 13, 59, 240, 88, 10,
1888 71, 72, 27, 225, 32, 70, 92, 182, 120, 151, 82, 246, 248, 93, 119, 13,
1889 199, 161, 48, 202, 84, 88, 226, 198, 249, 152, 165, 34, 183, 109, 9, 196,
1890 232, 168, 236, 241, 85, 100, 181, 81, 235, 85, 247, 85, 173, 57, 141, 145,
1891 116, 254, 146, 249, 161, 133, 245, 17, 117, 141, 208, 49, 245, 121, 181, 158,
1892 144, 197, 200, 63, 202, 119, 158, 107, 112, 56, 178, 227, 29, 87, 48, 151,
1893 228, 55, 194, 130, 52, 12, 35, 245, 171, 149, 90, 206, 151, 205, 184, 221,
1894 45, 57, 126, 64, 203, 244, 167, 172, 134, 141, 5, 145, 101, 29, 33, 133,
1895 90, 17, 64, 127, 152, 209, 78, 10, 131, 151, 157, 204, 231, 255, 164, 122,
1896 16, 78, 220, 245, 161, 229, 90, 203, 12, 205, 95, 8, 47, 51, 92, 23,
1897 118, 95, 211, 124, 116, 147, 74, 79, 10, 192, 217, 74, 80, 127, 17, 105,
1898 56, 248, 144, 72, 197, 159, 230, 19, 147, 31, 50, 239, 236, 92, 237, 131,
1899 159, 88, 99, 171, 76, 209, 41, 181, 194, 28, 3, 242, 137, 227, 20, 198,
1900 120, 6, 12, 97, 45, 210, 143, 177, 60, 83, 61, 135, 132, 187, 54, 61,
1901 82, 149, 193, 23, 45, 6, 95, 28, 167, 0, 67, 27, 17, 93, 241, 43,
1902 221, 109, 102, 179, 204, 80, 198, 60, 229, 38, 47, 100, 235, 50, 166, 193,
1903 79, 255, 71, 207, 116, 216, 201, 255, 134, 194, 201, 34, 169, 250, 28, 217,
1904 198, 176, 10, 203, 193, 197, 125, 80, 116, 149, 108, 224, 10, 195, 68, 228,
1905 218, 85, 146, 119, 67, 73, 118, 186, 171, 162, 86, 198, 176, 73, 41, 162,
1906 237, 196, 130, 32, 231, 70, 197, 139, 140, 182, 151, 221, 55, 95, 183, 58,
1907 43, 141, 160, 148, 193, 197, 162, 189, 62, 36, 226, 255, 214, 75, 166, 163,
1908 78, 30, 253, 52, 8, 190, 55, 241, 60, 187, 226, 34, 177, 102, 155, 56,
1909 165, 51, 183, 2, 181, 247, 125, 53, 36, 206, 73, 32, 19, 20, 204, 228,
1910 105, 254, 34, 201, 161, 175, 232, 223, 216, 103, 247, 13, 68, 49, 206, 172,
1911 122, 11, 17, 3, 55, 101, 94, 39, 18, 183, 214, 16, 149, 252, 137, 39,
1912 205, 84, 114, 80, 101, 246, 222, 173, 145, 229, 199, 73, 91, 219, 123, 235,
1913 45, 190, 39, 241, 146, 209, 124, 178, 151, 30, 19, 26, 112, 150, 192, 183,
1914 237, 124, 253, 165, 28, 130, 132, 161, 157, 140, 159, 163, 87, 181, 211, 166,
1915 233, 0, 180, 87, 125, 229, 173, 128, 90, 23, 38, 235, 143, 31, 117, 66,
1916 203, 76, 150, 249, 19, 23, 45, 184, 56, 249, 220, 114, 205, 1, 215, 169,
1917 205, 173, 58, 188, 128, 116, 122, 184, 48, 114, 95, 167, 3, 191, 136, 238,
1918 124, 245, 166, 82, 191, 16, 212, 149, 183, 166, 14, 212, 255, 67, 106, 50,
1919 159, 172, 211, 101, 207, 198, 242, 179, 40, 1, 73, 20, 64, 185, 29, 21,
1920 216, 246, 154, 104, 156, 214, 231, 192, 137, 220, 150, 215, 4, 80, 110, 164,
1921 185, 68, 114, 110, 234, 45, 143, 171, 196, 148, 151, 237, 16, 251, 68, 221,
1922 100, 18, 212, 110, 59, 147, 113, 217, 152, 28, 83, 198, 211, 231, 35, 39,
1923 198, 19, 163, 67, 40, 24, 124, 52, 138, 161, 254, 233, 90, 24, 214, 222,
1924 121, 189, 95, 180, 77, 147, 21, 187, 111, 9, 184, 75, 209, 250, 81, 110,
1925 34, 97, 198, 132, 182, 229, 192, 208, 67, 98, 124, 108, 141, 89, 37, 124,
1926 11, 5, 128, 76, 13, 220, 167, 201, 182, 151, 45, 235, 37, 142, 35, 192,
1927 28, 209, 254, 40, 15, 22, 183, 181, 138, 144, 72, 21, 48, 9, 133, 127,
1928 74, 187, 19, 170, 88, 209, 119, 194, 230, 243, 237, 156, 184, 156, 46, 118,
1929 58, 7, 139, 163, 157, 167, 65, 249, 102, 228, 201, 27, 255, 189, 54, 151,
1930 168, 108, 129, 113, 106, 245, 244, 158, 176, 247, 193, 161, 94, 248, 190, 38,
1931 208, 177, 246, 108, 158, 199, 56, 37, 141, 101, 102, 44, 109, 144, 23, 214,
1932 235, 251, 210, 184, 103, 145, 248, 118, 162, 139, 84, 61, 146, 29, 70, 170,
1933 80, 30, 145, 156, 202, 185, 222, 87, 247, 137, 153, 98, 166, 61, 173, 200,
1934 164, 40, 2, 137, 226, 66, 162, 24, 172, 46, 203, 80, 176, 156, 93, 26,
1935 48, 69, 130, 192, 129, 84, 70, 15, 25, 224, 175, 31, 161, 110, 61, 220,
1936 214, 220, 152, 22, 41, 51, 57, 114, 182, 139, 129, 159, 194, 169, 133, 246,
1937 37, 23, 79, 90, 88, 231, 6, 252, 101, 241, 250, 168, 71, 149, 252, 196,
1938 126, 2, 29, 177, 70, 218, 120, 203, 72, 243, 46, 45, 149, 57, 108, 37,
1939 198, 38, 177, 210, 32, 252, 227, 160, 77, 174, 211, 207, 212, 82, 139, 189,
1940 79, 198, 116, 165, 185, 49, 188, 43, 116, 230, 182, 34, 224, 138, 216, 93,
1941 93, 94, 175, 10, 217, 41, 209, 177, 36, 142, 205, 241, 34, 129, 8, 91,
1942 78, 210, 231, 166, 188, 18, 77, 139, 201, 203, 3, 154, 131, 8, 193, 207,
1943 255, 98, 166, 192, 215, 206, 236, 217, 9, 19, 78, 227, 105, 146, 56, 50,
1944 60, 114, 20, 239, 186, 119, 113, 183, 79, 186, 126, 223, 131, 30, 217, 249,
1945 82, 10, 188, 238, 161, 46, 174, 96, 6, 187, 251, 234, 62, 163, 213, 55,
1946 71, 253, 25, 193, 26, 176, 111, 20, 167, 220, 240, 78, 243, 42, 104, 194,
1947 0, 62, 53, 119, 199, 9, 202, 20, 164, 55, 155, 204, 107, 120, 180, 6,
1948 20, 114, 122, 130, 143, 124, 89, 130, 66, 140, 43, 183, 203, 216, 78, 86,
1949 178, 16, 226, 159, 192, 205, 105, 113, 138, 165, 108, 18, 214, 100, 154, 71,
1950 150, 46, 70, 178, 181, 68, 68, 160, 253, 18, 19, 220, 253, 207, 87, 105,
1951 32, 239, 229, 137, 155, 176, 139, 168, 248, 143, 86, 67, 224, 146, 17, 80,
1952 147, 87, 30, 168, 125, 169, 91, 59, 55, 169, 142, 226, 71, 181, 114, 40,
1953 231, 229, 155, 27, 31, 144, 166, 96, 9, 85, 90, 152, 25, 83, 113, 15,
1954 65, 106, 162, 151, 74, 7, 27, 188, 221, 150, 108, 96, 102, 233, 174, 208,
1955 9, 170, 159, 239, 67, 230, 187, 93, 141, 102, 218, 191, 48, 22, 53, 124,
1956 84, 96, 110, 43, 28, 126, 26, 32, 104, 104, 65, 99, 112, 207, 167, 54,
1957 175, 165, 152, 105, 234, 18, 138, 148, 101, 9, 87, 32, 155, 192, 7, 100,
1958 101, 72, 133, 203, 170, 248, 222, 190, 243, 0, 75, 100, 38, 52, 98, 125,
1959 66, 185, 104, 255, 8, 184, 116, 195, 32, 239, 213, 54, 28, 185, 96, 177,
1960 233, 30, 210, 25, 155, 28, 128, 53, 88, 101, 146, 68, 52, 60, 55, 183,
1961 171, 157, 207, 128, 53, 60, 22, 100, 53, 121, 124, 205, 163, 55, 82, 162,
1962 96, 99, 71, 184, 243, 169, 137, 77, 191, 16, 55, 59, 220, 197, 20, 4,
1963 61, 89, 4, 157, 96, 171, 145, 91, 145, 19, 36, 195, 42, 132, 152, 83,
1964 255, 137, 64, 37, 72, 190, 82, 29, 181, 41, 175, 144, 46, 229, 236, 217,
1965 105, 194, 7, 118, 19, 47, 151, 238, 222, 255, 183, 236, 181, 175, 135, 91,
1966 55, 163, 4, 156, 190, 18, 153, 21, 178, 51, 102, 36, 62, 253, 228, 12,
1967 102, 230, 138, 183, 182, 253, 54, 170, 251, 50, 107, 223, 180, 177, 74, 169,
1968 231, 208, 76, 47, 146, 158, 251, 181, 9, 219, 240, 169, 72, 250, 241, 125,
1969 86, 200, 125, 166, 137, 65, 115, 18, 68, 241, 124, 51, 128, 223, 113, 239,
1970 201, 221, 152, 21, 114, 127, 79, 101, 44, 48, 241, 21, 221, 91, 240, 214,
1971 166, 119, 140, 21, 143, 155, 172, 26, 207, 233, 0, 128, 118, 45, 22, 6,
1972 222, 75, 90, 99, 173, 214, 121, 53, 71, 183, 253, 19, 95, 71, 66, 16,
1973 41, 35, 195, 9, 93, 247, 42, 150, 49, 46, 229, 73, 220, 12, 230, 51,
1974 109, 147, 108, 124, 102, 83, 78, 75, 67, 141, 55, 246, 155, 195, 190, 56,
1975 116, 59, 185, 237, 104, 78, 66, 173, 165, 178, 32, 93, 14, 10, 46, 30,
1976 229, 108, 50, 52, 188, 2, 244, 142, 201, 8, 245, 53, 210, 132, 15, 184,
1977 82, 85, 156, 142, 35, 49, 39, 183, 58, 61, 96, 143, 60, 190, 41, 152,
1978 9, 183, 127, 90, 157, 109, 196, 76, 36, 177, 244, 173, 63, 233, 1, 16,
1979 110, 216, 203, 94, 245, 195, 71, 55, 161, 149, 230, 122, 159, 133, 143, 180,
1980 129, 6, 111, 56, 211, 30, 13, 142, 216, 122, 87, 69, 91, 233, 254, 4,
1981 232, 207, 157, 32, 113, 50, 227, 233, 158, 171, 38, 228, 191, 121, 56, 165,
1982 222, 22, 180, 217, 111, 104, 112, 134, 12, 22, 244, 44, 234, 34, 253, 217,
1983 212, 140, 93, 235, 36, 54, 4, 129, 32, 91, 197, 163, 24, 71, 133, 161,
1984 111, 114, 29, 19, 45, 100, 10, 207, 139, 158, 219, 206, 160, 248, 94, 12,
1985 241, 58, 118, 141, 115, 166, 177, 78, 173, 59, 85, 81, 97, 240, 154, 231,
1986 79, 200, 199, 195, 205, 98, 245, 129, 246, 217, 97, 209, 249, 194, 28, 179,
1987 49, 248, 14, 6, 128, 61, 178, 15, 190, 32, 251, 111, 225, 148, 0, 11,
1988 227, 246, 146, 46, 41, 231, 24, 80, 43, 174, 228, 166, 171, 206, 72, 142,
1989 253, 96, 242, 181, 31, 207, 95, 66, 88, 152, 165, 67, 7, 238, 23, 114,
1990 50, 224, 212, 241, 202, 224, 247, 70, 215, 162, 8, 237, 121, 169, 254, 191,
1991 30, 19, 72, 252, 3, 109, 5, 206, 105, 130, 69, 250, 250, 232, 135, 203,
1992 253, 77, 102, 203, 40, 72, 128, 223, 60, 59, 83, 103, 162, 117, 47, 200,
1993 65, 88, 43, 168, 168, 255, 46, 166, 86, 193, 231, 227, 92, 222, 186, 44,
1994 20, 166, 136, 123, 193, 88, 155, 166, 185, 73, 85, 124, 253, 80, 43, 176,
1995 173, 191, 2, 10, 50, 101, 143, 17, 129, 56, 191, 83, 103, 183, 143, 247,
1996 253, 161, 1, 76, 161, 76, 127, 194, 108, 88, 138, 152, 147, 164, 65, 147,
1997 61, 160, 192, 44, 56, 103, 144, 51, 153, 224, 38, 97, 173, 128, 34, 85,
1998 89, 143, 17, 239, 200, 47, 160, 2, 151, 249, 219, 208, 116, 71, 205, 72,
1999 210, 178, 205, 184, 207, 19, 37, 127, 183, 21, 229, 176, 91, 196, 203, 225,
2000 67, 189, 94, 214, 180, 203, 140, 186, 39, 250, 66, 3, 128, 35, 206, 43,
2001 67, 244, 207, 157, 165, 188, 201, 173, 43, 47, 210, 139, 254, 144, 218, 62,
2002 55, 6, 187, 32, 128, 206, 56, 74, 66, 42, 159, 171, 108, 56, 220, 246,
2003 127, 127, 32, 221, 190, 33, 91, 93, 88, 36, 51, 115, 93, 47, 203, 133,
2004 155, 166, 13, 124, 118, 56, 182, 202, 55, 224, 226, 36, 233, 9, 200, 217,
2005 249, 22, 252, 209, 179, 66, 32, 30, 129, 48, 186, 232, 66, 248, 197, 120,
2006 168, 191, 124, 16, 232, 117, 44, 125, 188, 157, 71, 35, 245, 219, 17, 111,
2007 41, 159, 96, 44, 233, 3, 105, 109, 199, 182, 42, 34, 87, 218, 48, 142,
2008 196, 99, 37, 89, 44, 173, 184, 160, 104, 203, 224, 230, 58, 60, 213, 132,
2009 9, 9, 253, 251, 72, 75, 235, 224, 20, 198, 208, 178, 42, 253, 126, 105,
2010 227, 171, 89, 93, 42, 222, 185, 232, 8, 248, 83, 78, 132, 37, 38, 173,
2011 67, 116, 185, 216, 47, 192, 196, 221, 172, 26, 5, 191, 41, 33, 114, 40,
2012 139, 22, 147, 173, 234, 41, 252, 118, 244, 73, 73, 237, 42, 6, 123, 228,
2013 213, 210, 202, 65, 195, 253, 112, 57, 202, 85, 247, 15, 160, 237, 138, 76,
2014 70, 94, 230, 163, 112, 217, 134, 78, 213, 55, 68, 198, 29, 195, 16, 138,
2015 162, 19, 34, 158, 144, 131, 64, 244, 80, 85, 63, 175, 47, 63, 233, 175,
2016 168, 190, 39, 4, 47, 200, 9, 161, 248, 198, 182, 166, 56, 23, 5, 121,
2017 188, 46, 90, 56, 216, 72, 203, 107, 212, 171, 110, 134, 255, 24, 243, 30,
2018 188, 55, 111, 8, 238, 198, 201, 180, 150, 230, 191, 248, 10, 82, 178, 247,
2019 114, 216, 83, 183, 24, 188, 131, 26, 246, 210, 42, 30, 111, 181, 215, 129,
2020 41, 21, 207, 15, 83, 86, 252, 169, 220, 246, 117, 114, 254, 143, 193, 60,
2021 123, 226, 202, 18, 77, 221, 135, 84, 180, 229, 79, 143, 241, 219, 217, 85,
2022 158, 63, 5, 245, 134, 63, 102, 68, 145, 100, 35, 13, 127, 241, 76, 211,
2023 204, 45, 125, 175, 128, 142, 244, 189, 203, 138, 63, 249, 2, 174, 167, 171,
2024 32, 131, 12, 250, 248, 198, 245, 3, 98, 4, 111, 244, 226, 122, 136, 58,
2025 189, 234, 244, 106, 117, 92, 97, 191, 247, 95, 114, 20, 151, 51, 67, 174,
2026 236, 109, 252, 215, 107, 183, 174, 254, 59, 22, 158, 203, 152, 194, 135, 200,
2027 61, 193, 249, 199, 24, 167, 119, 223, 205, 135, 112, 51, 118, 120, 253, 75,
2028 61, 101, 172, 213, 36, 226, 135, 54, 229, 214, 151, 9, 2, 197, 84, 22,
2029 207, 55, 182, 191, 53, 243, 63, 53, 13, 93, 121, 44, 174, 237, 192, 138,
2030 116, 208, 200, 134, 94, 34, 122, 110, 157, 231, 169, 177, 180, 203, 167, 125,
2031 73, 44, 57, 104, 204, 174, 36, 172, 47, 21, 36, 220, 92, 62, 191, 77,
2032 113, 5, 32, 8, 115, 61, 235, 237, 27, 76, 69, 187, 117, 72, 26, 49,
2033 217, 249, 130, 134, 139, 27, 229, 183, 146, 80, 3, 154, 25, 26, 52, 175,
2034 157, 1, 91, 126, 165, 6, 168, 134, 60, 32, 227, 68, 161, 126, 207, 247,
2035 160, 103, 105, 156, 129, 211, 220, 155, 222, 60, 184, 255, 149, 9, 116, 201,
2036 151, 42, 126, 0, 36, 167, 178, 40, 160, 5, 115, 82, 176, 207, 38, 10,
2037 213, 132, 57, 255, 138, 4, 204, 32, 33, 128, 174, 99, 94, 161, 237, 0,
2038 230, 209, 198, 89, 167, 80, 193, 116, 195, 111, 204, 241, 169, 46, 117, 108,
2039 244, 247, 12, 216, 106, 50, 242, 209, 61, 42, 214, 33, 25, 38, 138, 217,
2040 225, 105, 76, 244, 126, 252, 253, 57, 238, 107, 166, 158, 250, 132, 105, 91,
2041 184, 209, 217, 5, 202, 84, 254, 51, 233, 58, 2, 141, 130, 47, 97, 125,
2042 244, 95, 177, 68, 9, 213, 115, 118, 215, 70, 9, 64, 113, 139, 19, 165,
2043 231, 204, 191, 129, 15, 235, 143, 225, 241, 75, 168, 227, 126, 58, 201, 98,
2044 16, 227, 27, 148, 166, 1, 34, 110, 84, 120, 11, 181, 150, 111, 167, 184,
2045 49, 244, 231, 192, 44, 59, 41, 122, 58, 12, 185, 180, 54, 122, 106, 201,
2046 2, 65, 118, 129, 149, 139, 31, 201, 205, 90, 96, 76, 23, 43, 218, 15,
2047 233, 202, 103, 84, 18, 122, 25, 218, 38, 252, 222, 104, 172, 96, 30, 57,
2048 205, 130, 106, 183, 189, 230, 67, 63, 162, 142, 46, 199, 45, 244, 3, 26,
2049 208, 119, 15, 16, 29, 196, 178, 90, 41, 94, 193, 64, 51, 205, 136, 157
2050};
2051
diff --git a/all_pairs/source/rijndael_dec/rijndael_dec.c b/all_pairs/source/rijndael_dec/rijndael_dec.c
new file mode 100644
index 0000000..4082eff
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/rijndael_dec.c
@@ -0,0 +1,195 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: rijndael_enc
7
8 Author: Dr Brian Gladman
9
10 Function: rijndael_dec is an implementation of the AES decryption
11 algorithm (Rijndael).
12
13 Source: security section of MiBench
14
15 Changes: Add computation of a checksum, refactoring
16
17 License: see below
18
19*/
20
21/*
22 -----------------------------------------------------------------------
23 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
24
25 TERMS
26
27 Redistribution and use in source and binary forms, with or without
28 modification, are permitted provided that the following conditions
29 are met:
30 1. Redistributions of source code must retain the above copyright
31 notice, this list of conditions and the following disclaimer.
32 2. Redistributions in binary form must reproduce the above copyright
33 notice, this list of conditions and the following disclaimer in the
34 documentation and/or other materials provided with the distribution.
35
36 This software is provided 'as is' with no guarantees of correctness or
37 fitness for purpose.
38 -----------------------------------------------------------------------
39*/
40
41#include "../extra.h"
42#include "aes.h"
43#include "rijndael_dec_libc.h"
44
45/*
46 Global variable definitions
47*/
48unsigned char rijndael_dec_key[32];
49int rijndael_dec_key_len;
50
51extern unsigned char rijndael_dec_data[];
52struct rijndael_dec_FILE rijndael_dec_fin;
53
54int rijndael_dec_checksum = 0;
55
56/*
57 Forward declaration of functions
58*/
59void rijndael_dec_init( void );
60int rijndael_dec_return( void );
61void rijndael_dec_fillrand( unsigned char *buf, int len );
62void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx );
63void rijndael_dec_main( void );
64
65void rijndael_dec_init( void )
66{
67 /* create a pseudo-file for the input*/
68 rijndael_dec_fin.data = rijndael_dec_data;
69 rijndael_dec_fin.size = 32768;
70 rijndael_dec_fin.cur_pos = 0;
71
72 unsigned i;
73 volatile int x = 0;
74 rijndael_dec_fin.size ^= x;
75 _Pragma( "loopbound min 32768 max 32768" )
76 for ( i = 0; i < rijndael_dec_fin.size; i++ )
77 rijndael_dec_fin.data[i] ^= x;
78
79 /* this is a pointer to the hexadecimal key digits */
80 const volatile char *cp =
81 "1234567890abcdeffedcba09876543211234567890abcdeffedcba0987654321";
82 char ch;
83 int by = 0;
84
85 i = 0; /* this is a count for the input digits processed */
86 _Pragma( "loopbound min 64 max 64" )
87 while ( i < 64 && *cp ) { /* the maximum key length is 32 bytes and */
88 /* hence at most 64 hexadecimal digits */
89 ch = rijndael_dec_toupper( *cp++ ); /* process a hexadecimal digit */
90 if ( ch >= '0' && ch <= '9' )
91 by = ( by << 4 ) + ch - '0';
92 else
93 if ( ch >= 'A' && ch <= 'F' )
94 by = ( by << 4 ) + ch - 'A' + 10;
95 else { /* error if not hexadecimal */
96 rijndael_dec_checksum = -2;
97 return;
98 }
99
100 /* store a key byte for each pair of hexadecimal digits */
101 if ( i++ & 1 )
102 rijndael_dec_key[i / 2 - 1] = by & 0xff;
103 }
104
105 if ( *cp ) {
106 rijndael_dec_checksum = -3;
107 return;
108 } else
109 if ( i < 32 || ( i & 15 ) ) {
110 rijndael_dec_checksum = -4;
111 return;
112 }
113
114 rijndael_dec_key_len = i / 2;
115}
116
117int rijndael_dec_return( void )
118{
119 return ( ( rijndael_dec_checksum == ( int )262180 ) ? 0 : -1 );
120}
121
122void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx )
123{
124 unsigned char inbuf1[16], inbuf2[16], outbuf[16], *bp1, *bp2, *tp;
125 int i;
126
127
128 rijndael_dec_fread( inbuf1, 1, 16, fin );
129
130 i = rijndael_dec_fread( inbuf2, 1, 16,
131 fin ); /* read 1st encrypted file block */
132
133 if ( i && i != 16 ) {
134 rijndael_dec_checksum = -10;
135 return;
136 }
137
138 rijndael_dec_decrypt( inbuf2, outbuf,
139 ctx ); /* decrypt it */
140
141 rijndael_dec_checksum += outbuf[15];
142
143 _Pragma( "loopbound min 16 max 16" )
144 for ( i = 0; i < 16; ++i ) /* xor with previous input */
145 outbuf[i] ^= inbuf1[i];
146
147 bp1 = inbuf1; /* set up pointers to two input buffers */
148 bp2 = inbuf2;
149
150 /* TODO: this is necessarily an input-dependent loop bound */
151 _Pragma( "loopbound min 19491 max 91491" )
152 while ( 1 ) {
153 i = rijndael_dec_fread( bp1, 1, 16, fin ); /* read next encrypted block */
154 /* to first input buffer */
155 if ( i != 16 ) /* no more bytes in input - the decrypted */
156 break; /* partial final buffer needs to be output */
157
158 /* if a block has been read the previous block must have been */
159 /* full lnegth so we can now write it out */
160
161 rijndael_dec_decrypt( bp1, outbuf, ctx ); /* decrypt the new input block and */
162
163 rijndael_dec_checksum += outbuf[15];
164
165 _Pragma( "loopbound min 16 max 16" )
166 for ( i = 0; i < 16; ++i ) /* xor it with previous input block */
167 outbuf[i] ^= bp2[i];
168
169 /* swap buffer pointers */
170 tp = bp1, bp1 = bp2, bp2 = tp;
171 }
172}
173
174void _Pragma( "entrypoint" ) rijndael_dec_main( void )
175{
176 struct aes ctx[1];
177
178 /* decryption in Cipher Block Chaining mode */
179 rijndael_dec_set_key( rijndael_dec_key, rijndael_dec_key_len, dec, ctx );
180 rijndael_dec_decfile( &rijndael_dec_fin, ctx );
181}
182
183int main(int argc, char** argv)
184{
185 SET_UP
186 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
187 START_LOOP
188 rijndael_dec_init();
189 rijndael_dec_main();
190 STOP_LOOP
191 }
192 WRITE_TO_FILE
193 return ( rijndael_dec_return() );
194}
195
diff --git a/all_pairs/source/rijndael_dec/rijndael_dec_libc.c b/all_pairs/source/rijndael_dec/rijndael_dec_libc.c
new file mode 100644
index 0000000..00390df
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/rijndael_dec_libc.c
@@ -0,0 +1,66 @@
1#include "rijndael_dec_libc.h"
2
3int rijndael_dec_toupper( int c )
4{
5 if ( ( c >= 'a' ) && ( c <= 'z' ) )
6 return c - 'a' + 'A';
7 return c;
8}
9
10unsigned long rijndael_dec_fread( void *ptr, unsigned long size,
11 unsigned long count, struct rijndael_dec_FILE *stream )
12{
13 unsigned i = stream->cur_pos, i2 = 0;
14 unsigned long number_of_chars_to_read =
15 stream->size - stream->cur_pos >= size * count ?
16 size * count : stream->size - stream->cur_pos;
17 _Pragma( "loopbound min 10 max 16" )
18 while ( i < stream->cur_pos + number_of_chars_to_read )
19 ( ( unsigned char * )ptr )[i2++] = stream->data[i++];
20 stream->cur_pos += number_of_chars_to_read;
21 return number_of_chars_to_read;
22}
23
24unsigned long rijndael_dec_fwrite( const void *ptr, unsigned long size,
25 unsigned long count, struct rijndael_dec_FILE *stream )
26{
27 unsigned i = stream->cur_pos, i2 = 0;
28 unsigned long number_of_chars_to_write =
29 stream->size - stream->cur_pos >= size * count ?
30 size * count : stream->size - stream->cur_pos;
31 _Pragma( "loopbound min 0 max 0" )
32 while ( i < stream->cur_pos + number_of_chars_to_write )
33 stream->data[i++] = ( ( unsigned char * )ptr )[i2++];
34 stream->cur_pos += number_of_chars_to_write;
35 return number_of_chars_to_write;
36}
37
38int rijndael_dec_fseek( struct rijndael_dec_FILE *stream, long int offset,
39 Origin origin )
40{
41 if ( origin == RIJNDAEL_DEC_SEEK_SET ) {
42 stream->cur_pos = offset;
43 return 0;
44 } else
45 if ( origin == RIJNDAEL_DEC_SEEK_CUR ) {
46 stream->cur_pos += offset;
47 return 0;
48 } else
49 if ( origin == RIJNDAEL_DEC_SEEK_END ) {
50 stream->cur_pos = stream->size + offset;
51 return 0;
52 }
53 return -1;
54}
55
56int rijndael_dec_fgetpos( struct rijndael_dec_FILE *stream,
57 unsigned *position )
58{
59 *position = stream->cur_pos;
60 return 0;
61}
62
63int rijndael_dec_feof( struct rijndael_dec_FILE *stream )
64{
65 return stream->cur_pos == stream->size ? 1 : 0;
66}
diff --git a/all_pairs/source/rijndael_dec/rijndael_dec_libc.h b/all_pairs/source/rijndael_dec/rijndael_dec_libc.h
new file mode 100644
index 0000000..eb7b8d6
--- /dev/null
+++ b/all_pairs/source/rijndael_dec/rijndael_dec_libc.h
@@ -0,0 +1,24 @@
1#ifndef RIJNDAEL_DEC_LIBC_H
2#define RIJNDAEL_DEC_LIBC_H
3
4int rijndael_dec_toupper ( int c );
5
6enum _Origin_ { RIJNDAEL_DEC_SEEK_SET, RIJNDAEL_DEC_SEEK_CUR, RIJNDAEL_DEC_SEEK_END };
7typedef enum _Origin_ Origin;
8struct rijndael_dec_FILE {
9 unsigned char *data;
10 unsigned long size;
11 unsigned cur_pos;
12};
13
14unsigned long rijndael_dec_fread ( void *ptr, unsigned long size,
15 unsigned long count, struct rijndael_dec_FILE *stream );
16unsigned long rijndael_dec_fwrite ( const void *ptr, unsigned long size,
17 unsigned long count, struct rijndael_dec_FILE *stream );
18int rijndael_dec_fseek ( struct rijndael_dec_FILE *stream, long int offset,
19 Origin origin );
20int rijndael_dec_fgetpos( struct rijndael_dec_FILE *stream,
21 unsigned *position );
22int rijndael_dec_feof ( struct rijndael_dec_FILE *stream );
23
24#endif // RIJNDAEL_DEC_LIBC_H
diff --git a/all_pairs/source/rijndael_enc/ChangeLog.txt b/all_pairs/source/rijndael_enc/ChangeLog.txt
new file mode 100644
index 0000000..6ea9ed4
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/ChangeLog.txt
@@ -0,0 +1,98 @@
1File: rijndael_encoder.c
2Source: security section of MiBench
3
42016-02-26:
5- Remove commented-out code
6- Prefix functions with "rijndael_enc"
7- Compute a checksum and return it from main
8- Change return type of rijndael_enc_encfile to void
9- Move functionality from function main into functions
10 rijndael_enc_init, rijndael_enc_main, and rijndael_enc_return
11- Reordered functions in source code: initialization- and
12 return-value-related functions first, followed by algorithm core
13 functions, followed by main functions
14- Added function prototypes
15- Applied code formatting with astyle as in the example
16- Added general TACLeBench header to beginning of source code
17- Rename to rijndael_enc.c
18
192016-03-15:
20- Return 0 if checksum is as expected, -1 otherwise
21- Add entrypoint pragma
22- Make inputs volatile (or touch them with a volatile) to rule out
23 optimizations
24
252016-04-20:
26- Cast "expected" return value to int for comparison
27- Make loop counter in rijndael_enc_init unsigned
28
29Files: aes.c, aes.h, aestab.h
30Source: security section of MiBench
31
322016-02-26:
33- Remove unused defines UNROLL, PARTIAL_UNROLL
34- Remove defines FIXED_TABLES, FF_TABLES, ARRAYS, FOUR_TABLES,
35 FOUR_LR_TABLES, FOUR_IM_TABLES
36- Remove (undefined) define ONE_TABLE, ONE_LR_TABLE , ONE_IM_TABLE
37- Assume BLOCK_SIZE is always 16
38- Remove unused define "unused"
39- Remove INTERNAL_BYTE_ORDER, EXTERNAL_BYTE_ORDER, AES_BIG_ENDIAN,
40 AES_LITTLE_ENDIAN (assume internal == external == little endian)
41- Remove defines AES_DLL and AES_IN_CPP
42- Remove "#if defined(__cplusplus)"
43- Replace macros c_name and cf_dec with their definition
44- Remove some stale comments
45- Remove defines no_table and one_table
46- Remove prototypes for unusedfunctions decrypt and set_blk
47- Prefix all functions and global variables with "rijndael_enc"
48- Break lines in overly long macros
49- Protect macros
50- Applied code formatting with astyle as in the example
51
522016-04-20:
53- Remove unused macros s, ff_poly, ff_hi, m1, m2, m3, FFmulX,
54 fwd_mcol, fwd_var, inv_var, si, so, fwd_rnd, inv_rnd, fwd_lrnd,
55 inv_lrnd, locals, l_copy, state_in, state_out, round, i_table,
56 li_table
57- Remove unused arrays rijndael_enc_s_box, rijndael_enc_inv_s_box,
58 rijndael_enc_it_tab, rijndael_enc_il_tab
59
602016-06-14:
61- Added cast to make C++ compiler happy
62
63Files: glibc_common.h, my_file.h
64Source: security section of MiBench
65
662016-02-26:
67- Merge into file rijndael_enc_libc.h
68
69File: rijndael_enc_libc.h
70
712016-02-26:
72- Replace size_x with unsigned long
73- Remove defines LITTLE_ENDIAN and NULL
74- Prefix all functions with "rijndael_enc" (instead of "my_")
75- Prefix definitions that clash with the standard library with
76 "rijndael_enc" (instead of "my_")
77- Applied code formatting with astyle as in the example
78
79Files: glibc_common.c, my_file.c
80Source: security section of MiBench
81
822016-02-26:
83- Merge into file rijndael_enc_libc.c
84
85File: rijndael_enc_libc.c
86
872016-02-26:
88- Replace size_x with unsigned long
89- Prefix all functions with "rijndael_enc" (instead of "my_")
90- Prefix definitions that clash with the standard library with
91 "rijndael_enc" (instead of "my_")
92- Applied code formatting with astyle as in the example
93
94File: input_small.c
95Source: security section of MiBench
96
972016-02-26:
98- Break long lines
diff --git a/all_pairs/source/rijndael_enc/aes.c b/all_pairs/source/rijndael_enc/aes.c
new file mode 100644
index 0000000..c1282a7
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/aes.c
@@ -0,0 +1,406 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of 128,
23 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27*/
28
29#include "aes.h"
30
31#include "aestab.h"
32
33#define four_tables(x,tab,vf,rf,c) ( tab[0][bval(vf(x,0,c),rf(0,c))] ^ \
34 tab[1][bval(vf(x,1,c),rf(1,c))] ^ \
35 tab[2][bval(vf(x,2,c),rf(2,c))] ^ \
36 tab[3][bval(vf(x,3,c),rf(3,c))] )
37
38#define vf1(x,r,c) (x)
39#define rf1(r,c) (r)
40#define rf2(r,c) ((r-c)&3)
41
42#define ls_box(x,c) four_tables(x,rijndael_enc_fl_tab,vf1,rf2,c)
43
44#define inv_mcol(x) four_tables(x,rijndael_enc_im_tab,vf1,rf1,0)
45
46/*
47 Subroutine to set the block size (if variable) in bytes, legal
48 values being 16, 24 and 32.
49*/
50
51#define nc (Ncol)
52
53/*
54 Initialise the key schedule from the user supplied key. The key
55 length is now specified in bytes - 16, 24 or 32 as appropriate.
56 This corresponds to bit lengths of 128, 192 and 256 bits, and
57 to Nk values of 4, 6 and 8 respectively.
58*/
59
60#define mx(t,f) (*t++ = inv_mcol(*f),f++)
61#define cp(t,f) *t++ = *f++
62
63#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0)
64#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0)
65
66aes_ret rijndael_enc_set_key( byte in_key[], const word n_bytes,
67 const enum aes_key f, struct aes *cx )
68{
69 word *kf, *kt, rci;
70
71 if ( ( n_bytes & 7 ) || n_bytes < 16 || n_bytes > 32 || ( !( f & 1 ) &&
72 !( f & 2 ) ) )
73 return ( n_bytes ? cx->mode &= ~0x03, aes_bad : ( aes_ret )( cx->Nkey << 2 ) );
74
75 cx->mode = ( cx->mode & ~0x03 ) | ( ( byte )f & 0x03 );
76 cx->Nkey = n_bytes >> 2;
77 cx->Nrnd = Nr( cx->Nkey, ( word )nc );
78
79 cx->e_key[0] = word_in( in_key );
80 cx->e_key[1] = word_in( in_key + 4 );
81 cx->e_key[2] = word_in( in_key + 8 );
82 cx->e_key[3] = word_in( in_key + 12 );
83
84 kf = cx->e_key;
85 kt = kf + nc * ( cx->Nrnd + 1 ) - cx->Nkey;
86 rci = 0;
87
88 switch ( cx->Nkey ) {
89 case 4:
90 _Pragma( "loopbound min 0 max 0" )
91 do {
92 kf[4] = kf[0] ^ ls_box( kf[3], 3 ) ^ rijndael_enc_rcon_tab[rci++];
93 kf[5] = kf[1] ^ kf[4];
94 kf[6] = kf[2] ^ kf[5];
95 kf[7] = kf[3] ^ kf[6];
96 kf += 4;
97 } while ( kf < kt );
98 break;
99
100 case 6:
101 cx->e_key[4] = word_in( in_key + 16 );
102 cx->e_key[5] = word_in( in_key + 20 );
103 _Pragma( "loopbound min 0 max 0" )
104 do {
105 kf[ 6] = kf[0] ^ ls_box( kf[5], 3 ) ^ rijndael_enc_rcon_tab[rci++];
106 kf[ 7] = kf[1] ^ kf[ 6];
107 kf[ 8] = kf[2] ^ kf[ 7];
108 kf[ 9] = kf[3] ^ kf[ 8];
109 kf[10] = kf[4] ^ kf[ 9];
110 kf[11] = kf[5] ^ kf[10];
111 kf += 6;
112 } while ( kf < kt );
113 break;
114
115 case 8:
116 cx->e_key[4] = word_in( in_key + 16 );
117 cx->e_key[5] = word_in( in_key + 20 );
118 cx->e_key[6] = word_in( in_key + 24 );
119 cx->e_key[7] = word_in( in_key + 28 );
120 _Pragma( "loopbound min 7 max 7" )
121 do {
122 kf[ 8] = kf[0] ^ ls_box( kf[7], 3 ) ^ rijndael_enc_rcon_tab[rci++];
123 kf[ 9] = kf[1] ^ kf[ 8];
124 kf[10] = kf[2] ^ kf[ 9];
125 kf[11] = kf[3] ^ kf[10];
126 kf[12] = kf[4] ^ ls_box( kf[11], 0 );
127 kf[13] = kf[5] ^ kf[12];
128 kf[14] = kf[6] ^ kf[13];
129 kf[15] = kf[7] ^ kf[14];
130 kf += 8;
131 } while ( kf < kt );
132 break;
133 }
134
135 if ( ( cx->mode & 3 ) != enc ) {
136 word i;
137
138 kt = cx->d_key + nc * cx->Nrnd;
139 kf = cx->e_key;
140
141 cpy( kt, kf );
142 kt -= 2 * nc;
143
144 _Pragma( "loopbound min 0 max 0" )
145 for ( i = 1; i < cx->Nrnd; ++i ) {
146 mix( kt, kf );
147 kt -= 2 * nc;
148 }
149
150 cpy( kt, kf );
151 }
152
153 return aes_good;
154}
155
156short rijndael_enc_encrypt( unsigned char in_blk[], unsigned char out_blk[],
157 const struct aes *cx )
158{
159 const unsigned long *kp = cx->e_key;
160 if ( !( cx->mode & 1 ) )
161 return 0;
162 unsigned long b0[4];
163 b0[0] = *( unsigned long * )in_blk ^ kp[0];
164 b0[1] = *( unsigned long * )( in_blk + 4 )^kp[1];
165 b0[2] = *( unsigned long * )( in_blk + 8 )^kp[2];
166 b0[3] = *( unsigned long * )( in_blk + 12 )^kp[3];
167 kp += 4;
168 unsigned long b1[4];
169 switch ( cx->Nrnd ) {
170 case 14:
171 b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
172 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
173 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
174 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
175 b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
176 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
177 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
178 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
179 b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
180 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
181 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
182 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
183 b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
184 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
185 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
186 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
187 b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
188 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
189 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
190 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
191 b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
192 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
193 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
194 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
195 b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
196 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
197 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
198 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
199 b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
200 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
201 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
202 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
203 kp += 8;
204 case 12:
205 b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
206 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
207 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
208 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
209 b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
210 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
211 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
212 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
213 b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
214 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
215 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
216 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
217 b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
218 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
219 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
220 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
221 b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
222 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
223 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
224 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
225 b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
226 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
227 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
228 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
229 b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
230 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
231 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
232 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
233 b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
234 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
235 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
236 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
237 kp += 8;
238 case 10:
239 b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
240 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
241 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
242 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
243 b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
244 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
245 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
246 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
247 b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
248 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
249 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
250 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
251 b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
252 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
253 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
254 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
255 b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
256 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
257 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
258 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
259 b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
260 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
261 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
262 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
263 b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
264 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
265 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
266 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
267 b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
268 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
269 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
270 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
271 b1[0] = ( kp + 8 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
272 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
273 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
274 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
275 b1[1] = ( kp + 8 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
276 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
277 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
278 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
279 b1[2] = ( kp + 8 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
280 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
281 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
282 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
283 b1[3] = ( kp + 8 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
284 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
285 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
286 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
287 b0[0] = ( kp + 12 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
288 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
289 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
290 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
291 b0[1] = ( kp + 12 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
292 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
293 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
294 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
295 b0[2] = ( kp + 12 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
296 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
297 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
298 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
299 b0[3] = ( kp + 12 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
300 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
301 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
302 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
303 b1[0] = ( kp + 16 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
304 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
305 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
306 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
307 b1[1] = ( kp + 16 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
308 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
309 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
310 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
311 b1[2] = ( kp + 16 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
312 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
313 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
314 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
315 b1[3] = ( kp + 16 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
316 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
317 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
318 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
319 b0[0] = ( kp + 20 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
320 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
321 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
322 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
323 b0[1] = ( kp + 20 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
324 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
325 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
326 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
327 b0[2] = ( kp + 20 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
328 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
329 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
330 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
331 b0[3] = ( kp + 20 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
332 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
333 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
334 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
335 b1[0] = ( kp + 24 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
336 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
337 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
338 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
339 b1[1] = ( kp + 24 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
340 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
341 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
342 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
343 b1[2] = ( kp + 24 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
344 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
345 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
346 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
347 b1[3] = ( kp + 24 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
348 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
349 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
350 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
351 b0[0] = ( kp + 28 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
352 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
353 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
354 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
355 b0[1] = ( kp + 28 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
356 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
357 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
358 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
359 b0[2] = ( kp + 28 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
360 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
361 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
362 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
363 b0[3] = ( kp + 28 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
364 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
365 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
366 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
367 b1[0] = ( kp + 32 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
368 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
369 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
370 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
371 b1[1] = ( kp + 32 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
372 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
373 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
374 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
375 b1[2] = ( kp + 32 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
376 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
377 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
378 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
379 b1[3] = ( kp + 32 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
380 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
381 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
382 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
383 b0[0] = ( kp + 36 )[0] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[0] )] ^
384 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
385 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
386 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
387 b0[1] = ( kp + 36 )[1] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[1] )] ^
388 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
389 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
390 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
391 b0[2] = ( kp + 36 )[2] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[2] )] ^
392 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
393 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
394 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
395 b0[3] = ( kp + 36 )[3] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[3] )] ^
396 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
397 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
398 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
399 }
400 *( unsigned long * )out_blk = ( b0[0] );
401 *( unsigned long * )( out_blk + 4 ) = ( b0[1] );
402 *( unsigned long * )( out_blk + 8 ) = ( b0[2] );
403 *( unsigned long * )( out_blk + 12 ) = ( b0[3] );
404 return aes_good;
405}
406
diff --git a/all_pairs/source/rijndael_enc/aes.h b/all_pairs/source/rijndael_enc/aes.h
new file mode 100644
index 0000000..908f95f
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/aes.h
@@ -0,0 +1,165 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 1. FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of
23 128 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27
28 2. THE CIPHER INTERFACE
29
30 byte (an unsigned 8-bit type)
31 word (an unsigned 32-bit type)
32 aes_ret: (a signed 16 bit type for function return values)
33 aes_good (value != 0, a good return)
34 aes_bad (value == 0, an error return)
35 enum aes_key: (encryption direction)
36 enc (set key for encryption)
37 dec (set key for decryption)
38 both (set key for both)
39 class or struct aes (structure for context)
40
41 C subroutine calls:
42
43 aes_ret set_blk(const word block_length, aes *cx) (variable block size)
44 aes_ret set_key(const byte key[], const word key_length,
45 const enum aes_key direction, aes *cx)
46 aes_ret encrypt(const byte input_blk[], byte output_blk[], const aes *cx)
47 aes_ret decrypt(const byte input_blk[], byte output_blk[], const aes *cx)
48
49 IMPORTANT NOTE: If you are using this C interface and your compiler does
50 not set the memory used for objects to zero before use, you will need to
51 ensure that cx.mode is set to zero before using the C subroutine calls.
52
53 The block length inputs to set_block and set_key are in numbers of
54 BYTES, not bits. The calls to subroutines must be made in the above
55 order but multiple calls can be made without repeating earlier calls
56 if their parameters have not changed. If the cipher block length is
57 variable but set_blk has not been called before cipher operations a
58 value of 16 is assumed (that is, the AES block size). In contrast to
59 earlier versions the block and key length parameters are now checked
60 for correctness and the encryption and decryption routines check to
61 ensure that an appropriate key has been set before they are called.
62
63*/
64
65#ifndef _AES_H
66#define _AES_H
67
68/* The only supported block size for the benchmark is 16 */
69#define BLOCK_SIZE 16
70
71/*
72 The number of key schedule words for different block and key lengths
73 (allowing for the method of computation which requires the length to
74 be a multiple of the key length):
75
76 Key Schedule key length (bytes)
77 Length 16 20 24 28 32
78 ---------------------
79 block 16 | 44 60 54 56 64
80 length 20 | 60 60 66 70 80
81 (bytes) 24 | 80 80 78 84 96
82 28 | 100 100 102 98 112
83 32 | 120 120 120 126 120
84
85 Rcon Table key length (bytes)
86 Length 16 20 24 28 32
87 ---------------------
88 block 16 | 10 9 8 7 7
89 length 20 | 14 11 10 9 9
90 (bytes) 24 | 19 15 12 11 11
91 28 | 24 19 16 13 13
92 32 | 29 23 19 17 14
93
94 The following values assume that the key length will be variable and may
95 be of maximum length (32 bytes).
96
97 Nk = number_of_key_bytes / 4
98 Nc = number_of_columns_in_state / 4
99 Nr = number of encryption/decryption rounds
100 Rc = number of elements in rcon table
101 Ks = number of 32-bit words in key schedule
102*/
103
104#define Nr(Nk,Nc) ((Nk > Nc ? Nk : Nc) + 6)
105#define Rc(Nk,Nc) ((Nb * (Nr(Nk,Nc) + 1) - 1) / Nk)
106#define Ks(Nk,Nc) (Nk * (Rc(Nk,Nc) + 1))
107
108#define RC_LENGTH 5 * BLOCK_SIZE / 4 - (BLOCK_SIZE == 16 ? 10 : 11)
109#define KS_LENGTH 4 * BLOCK_SIZE
110
111/* End of configuration options, but see also aes.c */
112
113typedef unsigned char byte; /* must be an 8-bit storage unit */
114typedef unsigned long word; /* must be a 32-bit storage unit */
115typedef short aes_ret; /* function return value */
116
117#define aes_bad 0
118#define aes_good 1
119
120/*
121 upr(x,n): rotates bytes within words by n positions, moving bytes
122 to higher index positions with wrap around into low positions
123 ups(x,n): moves bytes by n positions to higher index positions in
124 words but without wrap around
125 bval(x,n): extracts a byte from a word
126*/
127
128#define upr(x,n) (((x) << 8 * (n)) | ((x) >> (32 - 8 * (n))))
129#define ups(x,n) ((x) << 8 * (n))
130#define bval(x,n) ((byte)((x) >> 8 * (n)))
131#define byte_swap(x) (upr(x,1) & 0x00ff00ff | upr(x,3) & 0xff00ff00)
132#define bytes2word(b0, b1, b2, b3) ((word)(b3) << 24 | (word)(b2) << 16 | \
133 (word)(b1) << 8 | (b0))
134
135#define word_in(x) *(word*)(x)
136#define word_out(x,v) *(word*)(x) = (v)
137
138enum aes_const { Nrow = 4, /* the number of rows in the cipher state */
139 Mcol = 8, /* maximum number of columns in the state */
140 Ncol = BLOCK_SIZE / 4,
141 Shr0 = 0, /* the cyclic shift values for rows 0, 1, 2 & 3 */
142 Shr1 = 1,
143 Shr2 = BLOCK_SIZE == 32 ? 3 : 2,
144 Shr3 = BLOCK_SIZE == 32 ? 4 : 3
145 };
146
147enum aes_key { enc = 1, /* set if encryption is needed */
148 dec = 2, /* set if decryption is needed */
149 both = 3 /* set if both are needed */
150 };
151
152struct aes {
153 word Nkey; /* the number of words in the key input block */
154 word Nrnd; /* the number of cipher rounds */
155 word e_key[KS_LENGTH]; /* the encryption key schedule */
156 word d_key[KS_LENGTH]; /* the decryption key schedule */
157 byte mode; /* encrypt, decrypt or both */
158};
159
160aes_ret rijndael_enc_set_key( byte key[], const word n_bytes,
161 const enum aes_key f, struct aes *cx );
162aes_ret rijndael_enc_encrypt( byte in_blk[], byte out_blk[],
163 const struct aes *cx );
164
165#endif
diff --git a/all_pairs/source/rijndael_enc/aestab.h b/all_pairs/source/rijndael_enc/aestab.h
new file mode 100644
index 0000000..9d347bc
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/aestab.h
@@ -0,0 +1,261 @@
1
2/*
3 -----------------------------------------------------------------------
4 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
5
6 TERMS
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions
10 are met:
11 1. Redistributions of source code must retain the above copyright
12 notice, this list of conditions and the following disclaimer.
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
16
17 This software is provided 'as is' with no guarantees of correctness or
18 fitness for purpose.
19 -----------------------------------------------------------------------
20*/
21
22/*
23 Used to ensure table is generated in the right format
24 depending on the internal byte order required.
25*/
26
27#define w0(p) 0x000000##p
28
29/*
30 Number of elements required in this table for different
31 block and key lengths is:
32
33 Rcon Table key length (bytes)
34 Length 16 20 24 28 32
35 ---------------------
36 block 16 | 10 9 8 7 7
37 length 20 | 14 11 10 9 9
38 (bytes) 24 | 19 15 12 11 11
39 28 | 24 19 16 13 13
40 32 | 29 23 19 17 14
41
42 this table can be a table of bytes if the key schedule
43 code is adjusted accordingly
44*/
45
46const word rijndael_enc_rcon_tab[29] = {
47 w0( 01 ), w0( 02 ), w0( 04 ), w0( 08 ),
48 w0( 10 ), w0( 20 ), w0( 40 ), w0( 80 ),
49 w0( 1b ), w0( 36 ), w0( 6c ), w0( d8 ),
50 w0( ab ), w0( 4d ), w0( 9a ), w0( 2f ),
51 w0( 5e ), w0( bc ), w0( 63 ), w0( c6 ),
52 w0( 97 ), w0( 35 ), w0( 6a ), w0( d4 ),
53 w0( b3 ), w0( 7d ), w0( fa ), w0( ef ),
54 w0( c5 )
55};
56
57#undef w0
58
59/*
60 used to ensure table is generated in the right format
61 depending on the internal byte order required
62*/
63
64#define r0(p,q,r,s) 0x##p##q##r##s
65#define r1(p,q,r,s) 0x##q##r##s##p
66#define r2(p,q,r,s) 0x##r##s##p##q
67#define r3(p,q,r,s) 0x##s##p##q##r
68#define w0(p) 0x000000##p
69#define w1(p) 0x0000##p##00
70#define w2(p) 0x00##p##0000
71#define w3(p) 0x##p##000000
72
73/*
74 used to ensure table is generated in the right format
75 depending on the internal byte order required
76*/
77
78/* data for forward tables (other than last round) */
79
80#define f_table \
81 r(a5,63,63,c6), r(84,7c,7c,f8), r(99,77,77,ee), r(8d,7b,7b,f6), \
82 r(0d,f2,f2,ff), r(bd,6b,6b,d6), r(b1,6f,6f,de), r(54,c5,c5,91), \
83 r(50,30,30,60), r(03,01,01,02), r(a9,67,67,ce), r(7d,2b,2b,56), \
84 r(19,fe,fe,e7), r(62,d7,d7,b5), r(e6,ab,ab,4d), r(9a,76,76,ec), \
85 r(45,ca,ca,8f), r(9d,82,82,1f), r(40,c9,c9,89), r(87,7d,7d,fa), \
86 r(15,fa,fa,ef), r(eb,59,59,b2), r(c9,47,47,8e), r(0b,f0,f0,fb), \
87 r(ec,ad,ad,41), r(67,d4,d4,b3), r(fd,a2,a2,5f), r(ea,af,af,45), \
88 r(bf,9c,9c,23), r(f7,a4,a4,53), r(96,72,72,e4), r(5b,c0,c0,9b), \
89 r(c2,b7,b7,75), r(1c,fd,fd,e1), r(ae,93,93,3d), r(6a,26,26,4c), \
90 r(5a,36,36,6c), r(41,3f,3f,7e), r(02,f7,f7,f5), r(4f,cc,cc,83), \
91 r(5c,34,34,68), r(f4,a5,a5,51), r(34,e5,e5,d1), r(08,f1,f1,f9), \
92 r(93,71,71,e2), r(73,d8,d8,ab), r(53,31,31,62), r(3f,15,15,2a), \
93 r(0c,04,04,08), r(52,c7,c7,95), r(65,23,23,46), r(5e,c3,c3,9d), \
94 r(28,18,18,30), r(a1,96,96,37), r(0f,05,05,0a), r(b5,9a,9a,2f), \
95 r(09,07,07,0e), r(36,12,12,24), r(9b,80,80,1b), r(3d,e2,e2,df), \
96 r(26,eb,eb,cd), r(69,27,27,4e), r(cd,b2,b2,7f), r(9f,75,75,ea), \
97 r(1b,09,09,12), r(9e,83,83,1d), r(74,2c,2c,58), r(2e,1a,1a,34), \
98 r(2d,1b,1b,36), r(b2,6e,6e,dc), r(ee,5a,5a,b4), r(fb,a0,a0,5b), \
99 r(f6,52,52,a4), r(4d,3b,3b,76), r(61,d6,d6,b7), r(ce,b3,b3,7d), \
100 r(7b,29,29,52), r(3e,e3,e3,dd), r(71,2f,2f,5e), r(97,84,84,13), \
101 r(f5,53,53,a6), r(68,d1,d1,b9), r(00,00,00,00), r(2c,ed,ed,c1), \
102 r(60,20,20,40), r(1f,fc,fc,e3), r(c8,b1,b1,79), r(ed,5b,5b,b6), \
103 r(be,6a,6a,d4), r(46,cb,cb,8d), r(d9,be,be,67), r(4b,39,39,72), \
104 r(de,4a,4a,94), r(d4,4c,4c,98), r(e8,58,58,b0), r(4a,cf,cf,85), \
105 r(6b,d0,d0,bb), r(2a,ef,ef,c5), r(e5,aa,aa,4f), r(16,fb,fb,ed), \
106 r(c5,43,43,86), r(d7,4d,4d,9a), r(55,33,33,66), r(94,85,85,11), \
107 r(cf,45,45,8a), r(10,f9,f9,e9), r(06,02,02,04), r(81,7f,7f,fe), \
108 r(f0,50,50,a0), r(44,3c,3c,78), r(ba,9f,9f,25), r(e3,a8,a8,4b), \
109 r(f3,51,51,a2), r(fe,a3,a3,5d), r(c0,40,40,80), r(8a,8f,8f,05), \
110 r(ad,92,92,3f), r(bc,9d,9d,21), r(48,38,38,70), r(04,f5,f5,f1), \
111 r(df,bc,bc,63), r(c1,b6,b6,77), r(75,da,da,af), r(63,21,21,42), \
112 r(30,10,10,20), r(1a,ff,ff,e5), r(0e,f3,f3,fd), r(6d,d2,d2,bf), \
113 r(4c,cd,cd,81), r(14,0c,0c,18), r(35,13,13,26), r(2f,ec,ec,c3), \
114 r(e1,5f,5f,be), r(a2,97,97,35), r(cc,44,44,88), r(39,17,17,2e), \
115 r(57,c4,c4,93), r(f2,a7,a7,55), r(82,7e,7e,fc), r(47,3d,3d,7a), \
116 r(ac,64,64,c8), r(e7,5d,5d,ba), r(2b,19,19,32), r(95,73,73,e6), \
117 r(a0,60,60,c0), r(98,81,81,19), r(d1,4f,4f,9e), r(7f,dc,dc,a3), \
118 r(66,22,22,44), r(7e,2a,2a,54), r(ab,90,90,3b), r(83,88,88,0b), \
119 r(ca,46,46,8c), r(29,ee,ee,c7), r(d3,b8,b8,6b), r(3c,14,14,28), \
120 r(79,de,de,a7), r(e2,5e,5e,bc), r(1d,0b,0b,16), r(76,db,db,ad), \
121 r(3b,e0,e0,db), r(56,32,32,64), r(4e,3a,3a,74), r(1e,0a,0a,14), \
122 r(db,49,49,92), r(0a,06,06,0c), r(6c,24,24,48), r(e4,5c,5c,b8), \
123 r(5d,c2,c2,9f), r(6e,d3,d3,bd), r(ef,ac,ac,43), r(a6,62,62,c4), \
124 r(a8,91,91,39), r(a4,95,95,31), r(37,e4,e4,d3), r(8b,79,79,f2), \
125 r(32,e7,e7,d5), r(43,c8,c8,8b), r(59,37,37,6e), r(b7,6d,6d,da), \
126 r(8c,8d,8d,01), r(64,d5,d5,b1), r(d2,4e,4e,9c), r(e0,a9,a9,49), \
127 r(b4,6c,6c,d8), r(fa,56,56,ac), r(07,f4,f4,f3), r(25,ea,ea,cf), \
128 r(af,65,65,ca), r(8e,7a,7a,f4), r(e9,ae,ae,47), r(18,08,08,10), \
129 r(d5,ba,ba,6f), r(88,78,78,f0), r(6f,25,25,4a), r(72,2e,2e,5c), \
130 r(24,1c,1c,38), r(f1,a6,a6,57), r(c7,b4,b4,73), r(51,c6,c6,97), \
131 r(23,e8,e8,cb), r(7c,dd,dd,a1), r(9c,74,74,e8), r(21,1f,1f,3e), \
132 r(dd,4b,4b,96), r(dc,bd,bd,61), r(86,8b,8b,0d), r(85,8a,8a,0f), \
133 r(90,70,70,e0), r(42,3e,3e,7c), r(c4,b5,b5,71), r(aa,66,66,cc), \
134 r(d8,48,48,90), r(05,03,03,06), r(01,f6,f6,f7), r(12,0e,0e,1c), \
135 r(a3,61,61,c2), r(5f,35,35,6a), r(f9,57,57,ae), r(d0,b9,b9,69), \
136 r(91,86,86,17), r(58,c1,c1,99), r(27,1d,1d,3a), r(b9,9e,9e,27), \
137 r(38,e1,e1,d9), r(13,f8,f8,eb), r(b3,98,98,2b), r(33,11,11,22), \
138 r(bb,69,69,d2), r(70,d9,d9,a9), r(89,8e,8e,07), r(a7,94,94,33), \
139 r(b6,9b,9b,2d), r(22,1e,1e,3c), r(92,87,87,15), r(20,e9,e9,c9), \
140 r(49,ce,ce,87), r(ff,55,55,aa), r(78,28,28,50), r(7a,df,df,a5), \
141 r(8f,8c,8c,03), r(f8,a1,a1,59), r(80,89,89,09), r(17,0d,0d,1a), \
142 r(da,bf,bf,65), r(31,e6,e6,d7), r(c6,42,42,84), r(b8,68,68,d0), \
143 r(c3,41,41,82), r(b0,99,99,29), r(77,2d,2d,5a), r(11,0f,0f,1e), \
144 r(cb,b0,b0,7b), r(fc,54,54,a8), r(d6,bb,bb,6d), r(3a,16,16,2c)
145
146/* generate the required tables in the desired endian format */
147
148#undef r
149#define r r0
150
151const word rijndael_enc_ft_tab[4][256] = {
152 { f_table },
153#undef r
154#define r r1
155 { f_table },
156#undef r
157#define r r2
158 { f_table },
159#undef r
160#define r r3
161 { f_table }
162};
163
164/* generate the required tables in the desired endian format */
165
166#undef r
167#define r(p,q,r,s) w0(q)
168const word rijndael_enc_fl_tab[4][256] = {
169 { f_table },
170#undef r
171#define r(p,q,r,s) w1(q)
172 { f_table },
173#undef r
174#define r(p,q,r,s) w2(q)
175 { f_table },
176#undef r
177#define r(p,q,r,s) w3(q)
178 { f_table }
179};
180
181#define m_table \
182 r(00,00,00,00), r(0b,0d,09,0e), r(16,1a,12,1c), r(1d,17,1b,12), \
183 r(2c,34,24,38), r(27,39,2d,36), r(3a,2e,36,24), r(31,23,3f,2a), \
184 r(58,68,48,70), r(53,65,41,7e), r(4e,72,5a,6c), r(45,7f,53,62), \
185 r(74,5c,6c,48), r(7f,51,65,46), r(62,46,7e,54), r(69,4b,77,5a), \
186 r(b0,d0,90,e0), r(bb,dd,99,ee), r(a6,ca,82,fc), r(ad,c7,8b,f2), \
187 r(9c,e4,b4,d8), r(97,e9,bd,d6), r(8a,fe,a6,c4), r(81,f3,af,ca), \
188 r(e8,b8,d8,90), r(e3,b5,d1,9e), r(fe,a2,ca,8c), r(f5,af,c3,82), \
189 r(c4,8c,fc,a8), r(cf,81,f5,a6), r(d2,96,ee,b4), r(d9,9b,e7,ba), \
190 r(7b,bb,3b,db), r(70,b6,32,d5), r(6d,a1,29,c7), r(66,ac,20,c9), \
191 r(57,8f,1f,e3), r(5c,82,16,ed), r(41,95,0d,ff), r(4a,98,04,f1), \
192 r(23,d3,73,ab), r(28,de,7a,a5), r(35,c9,61,b7), r(3e,c4,68,b9), \
193 r(0f,e7,57,93), r(04,ea,5e,9d), r(19,fd,45,8f), r(12,f0,4c,81), \
194 r(cb,6b,ab,3b), r(c0,66,a2,35), r(dd,71,b9,27), r(d6,7c,b0,29), \
195 r(e7,5f,8f,03), r(ec,52,86,0d), r(f1,45,9d,1f), r(fa,48,94,11), \
196 r(93,03,e3,4b), r(98,0e,ea,45), r(85,19,f1,57), r(8e,14,f8,59), \
197 r(bf,37,c7,73), r(b4,3a,ce,7d), r(a9,2d,d5,6f), r(a2,20,dc,61), \
198 r(f6,6d,76,ad), r(fd,60,7f,a3), r(e0,77,64,b1), r(eb,7a,6d,bf), \
199 r(da,59,52,95), r(d1,54,5b,9b), r(cc,43,40,89), r(c7,4e,49,87), \
200 r(ae,05,3e,dd), r(a5,08,37,d3), r(b8,1f,2c,c1), r(b3,12,25,cf), \
201 r(82,31,1a,e5), r(89,3c,13,eb), r(94,2b,08,f9), r(9f,26,01,f7), \
202 r(46,bd,e6,4d), r(4d,b0,ef,43), r(50,a7,f4,51), r(5b,aa,fd,5f), \
203 r(6a,89,c2,75), r(61,84,cb,7b), r(7c,93,d0,69), r(77,9e,d9,67), \
204 r(1e,d5,ae,3d), r(15,d8,a7,33), r(08,cf,bc,21), r(03,c2,b5,2f), \
205 r(32,e1,8a,05), r(39,ec,83,0b), r(24,fb,98,19), r(2f,f6,91,17), \
206 r(8d,d6,4d,76), r(86,db,44,78), r(9b,cc,5f,6a), r(90,c1,56,64), \
207 r(a1,e2,69,4e), r(aa,ef,60,40), r(b7,f8,7b,52), r(bc,f5,72,5c), \
208 r(d5,be,05,06), r(de,b3,0c,08), r(c3,a4,17,1a), r(c8,a9,1e,14), \
209 r(f9,8a,21,3e), r(f2,87,28,30), r(ef,90,33,22), r(e4,9d,3a,2c), \
210 r(3d,06,dd,96), r(36,0b,d4,98), r(2b,1c,cf,8a), r(20,11,c6,84), \
211 r(11,32,f9,ae), r(1a,3f,f0,a0), r(07,28,eb,b2), r(0c,25,e2,bc), \
212 r(65,6e,95,e6), r(6e,63,9c,e8), r(73,74,87,fa), r(78,79,8e,f4), \
213 r(49,5a,b1,de), r(42,57,b8,d0), r(5f,40,a3,c2), r(54,4d,aa,cc), \
214 r(f7,da,ec,41), r(fc,d7,e5,4f), r(e1,c0,fe,5d), r(ea,cd,f7,53), \
215 r(db,ee,c8,79), r(d0,e3,c1,77), r(cd,f4,da,65), r(c6,f9,d3,6b), \
216 r(af,b2,a4,31), r(a4,bf,ad,3f), r(b9,a8,b6,2d), r(b2,a5,bf,23), \
217 r(83,86,80,09), r(88,8b,89,07), r(95,9c,92,15), r(9e,91,9b,1b), \
218 r(47,0a,7c,a1), r(4c,07,75,af), r(51,10,6e,bd), r(5a,1d,67,b3), \
219 r(6b,3e,58,99), r(60,33,51,97), r(7d,24,4a,85), r(76,29,43,8b), \
220 r(1f,62,34,d1), r(14,6f,3d,df), r(09,78,26,cd), r(02,75,2f,c3), \
221 r(33,56,10,e9), r(38,5b,19,e7), r(25,4c,02,f5), r(2e,41,0b,fb), \
222 r(8c,61,d7,9a), r(87,6c,de,94), r(9a,7b,c5,86), r(91,76,cc,88), \
223 r(a0,55,f3,a2), r(ab,58,fa,ac), r(b6,4f,e1,be), r(bd,42,e8,b0), \
224 r(d4,09,9f,ea), r(df,04,96,e4), r(c2,13,8d,f6), r(c9,1e,84,f8), \
225 r(f8,3d,bb,d2), r(f3,30,b2,dc), r(ee,27,a9,ce), r(e5,2a,a0,c0), \
226 r(3c,b1,47,7a), r(37,bc,4e,74), r(2a,ab,55,66), r(21,a6,5c,68), \
227 r(10,85,63,42), r(1b,88,6a,4c), r(06,9f,71,5e), r(0d,92,78,50), \
228 r(64,d9,0f,0a), r(6f,d4,06,04), r(72,c3,1d,16), r(79,ce,14,18), \
229 r(48,ed,2b,32), r(43,e0,22,3c), r(5e,f7,39,2e), r(55,fa,30,20), \
230 r(01,b7,9a,ec), r(0a,ba,93,e2), r(17,ad,88,f0), r(1c,a0,81,fe), \
231 r(2d,83,be,d4), r(26,8e,b7,da), r(3b,99,ac,c8), r(30,94,a5,c6), \
232 r(59,df,d2,9c), r(52,d2,db,92), r(4f,c5,c0,80), r(44,c8,c9,8e), \
233 r(75,eb,f6,a4), r(7e,e6,ff,aa), r(63,f1,e4,b8), r(68,fc,ed,b6), \
234 r(b1,67,0a,0c), r(ba,6a,03,02), r(a7,7d,18,10), r(ac,70,11,1e), \
235 r(9d,53,2e,34), r(96,5e,27,3a), r(8b,49,3c,28), r(80,44,35,26), \
236 r(e9,0f,42,7c), r(e2,02,4b,72), r(ff,15,50,60), r(f4,18,59,6e), \
237 r(c5,3b,66,44), r(ce,36,6f,4a), r(d3,21,74,58), r(d8,2c,7d,56), \
238 r(7a,0c,a1,37), r(71,01,a8,39), r(6c,16,b3,2b), r(67,1b,ba,25), \
239 r(56,38,85,0f), r(5d,35,8c,01), r(40,22,97,13), r(4b,2f,9e,1d), \
240 r(22,64,e9,47), r(29,69,e0,49), r(34,7e,fb,5b), r(3f,73,f2,55), \
241 r(0e,50,cd,7f), r(05,5d,c4,71), r(18,4a,df,63), r(13,47,d6,6d), \
242 r(ca,dc,31,d7), r(c1,d1,38,d9), r(dc,c6,23,cb), r(d7,cb,2a,c5), \
243 r(e6,e8,15,ef), r(ed,e5,1c,e1), r(f0,f2,07,f3), r(fb,ff,0e,fd), \
244 r(92,b4,79,a7), r(99,b9,70,a9), r(84,ae,6b,bb), r(8f,a3,62,b5), \
245 r(be,80,5d,9f), r(b5,8d,54,91), r(a8,9a,4f,83), r(a3,97,46,8d)
246
247#undef r
248#define r r0
249
250const word rijndael_enc_im_tab[4][256] = {
251 { m_table },
252#undef r
253#define r r1
254 { m_table },
255#undef r
256#define r r2
257 { m_table },
258#undef r
259#define r r3
260 { m_table }
261};
diff --git a/all_pairs/source/rijndael_enc/input_small.c b/all_pairs/source/rijndael_enc/input_small.c
new file mode 100644
index 0000000..b3eee55
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/input_small.c
@@ -0,0 +1,1963 @@
1unsigned char rijndael_enc_data[] = {
2 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
3 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
4 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
5 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
6 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
7 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
8 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
9 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
10 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
11 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
12 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
13 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
14 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
15 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
16 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
17 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
18 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
19 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
20 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
21 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
22 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
23 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
24 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
25 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
26 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
27 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
28 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
29 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
30 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
31 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
32 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
33 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
34 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
35 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
36 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
37 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
38 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
39 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
40 't','K','u','r','t','V','o','n','n','e','g','u','K','u','r','t',
41 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
42 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
43 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
44 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
45 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
46 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
47 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
48 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
49 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
50 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
51 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
52 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
53 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
54 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
55 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
56 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
57 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
58 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
59 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
60 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
61 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
62 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
63 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
64 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
65 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
66 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
67 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
68 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
69 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
70 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
71 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
72 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
73 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
74 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
75 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
76 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
77 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
78 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
79 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
80 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
81 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
82 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
83 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
84 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
85 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
86 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
87 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
88 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
89 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
90 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
91 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
92 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
93 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
94 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
95 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
96 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
97 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
98 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
99 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
100 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
101 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
102 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
103 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
104 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
105 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
106 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
107 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
108 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
109 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
110 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
111 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
112 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
113 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
114 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
115 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
116 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
117 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
118 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
119 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
120 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
121 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
122 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
123 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
124 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
125 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
126 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
127 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
128 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
129 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
130 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
131 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
132 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
133 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
134 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
135 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
136 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
137 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
138 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
139 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
140 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
141 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
142 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
143 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
144 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
145 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
146 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
147 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
148 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
149 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
150 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
151 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
152 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
153 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
154 'o','r','r','y','K','u','r','t','V','o','n','n','e','g','u','t',
155 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
156 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
157 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
158 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
159 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
160 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
161 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
162 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
163 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
164 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
165 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
166 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
167 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
168 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
169 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
170 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
171 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
172 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
173 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
174 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
175 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
176 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
177 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
178 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
179 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
180 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
181 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
182 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
183 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
184 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
185 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
186 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
187 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
188 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
189 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
190 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
191 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
192 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
193 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
194 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
195 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
196 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
197 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
198 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
199 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
200 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
201 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
202 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
203 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
204 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
205 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
206 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
207 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
208 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
209 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
210 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
211 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
212 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
213 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
214 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
215 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
216 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
217 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
218 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
219 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
220 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
221 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
222 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
223 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
224 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
225 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
226 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
227 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
228 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
229 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
230 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
231 't','K','u','r','t','V','o','n','n','e','g','u','t','s','C','o',
232 'm','m','e','n','c','e','m','e','n','t','A','d','d','r','e','s',
233 's','a','t','M','I','T','L','a','d','i','e','s','a','n','d','g',
234 'e','n','t','l','e','m','e','n','o','f','t','h','e','c','l','a',
235 's','s','o','f','9','7','W','e','a','r','s','u','n','s','c','r',
236 'e','e','n','I','f','I','c','o','u','l','d','o','f','f','e','r',
237 'y','o','u','o','n','l','y','o','n','e','t','i','p','f','o','r',
238 't','h','e','f','u','t','u','r','e','s','u','n','s','c','r','e',
239 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o',
240 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f',
241 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e',
242 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i',
243 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s',
244 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o',
245 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l',
246 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e',
247 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w',
248 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a',
249 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e',
250 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
251 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r',
252 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n',
253 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r',
254 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
255 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f',
256 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n',
257 '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k',
258 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o',
259 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i',
260 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s',
261 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i',
262 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y',
263 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s',
264 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y',
265 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y',
266 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r',
267 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e',
268 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h',
269 'a','t','K','u','r','t','V','o','n','n','e','g','u','t','s','C',
270 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e',
271 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d',
272 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l',
273 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c',
274 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e',
275 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o',
276 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r',
277 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l',
278 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o',
279 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e',
280 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t',
281 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e',
282 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n',
283 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b',
284 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d',
285 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I',
286 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s',
287 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h',
288 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
289 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e',
290 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u',
291 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e',
292 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
293 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e',
294 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i',
295 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o',
296 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y',
297 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l',
298 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a',
299 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s',
300 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e',
301 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u',
302 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d',
303 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s',
304 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o',
305 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r',
306 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t',
307 'h','a','t','t','s','C','o','m','m','e','n','c','e','m','e','n',
308 't','A','d','d','r','e','s','s','a','t','M','I','T','L','a','d',
309 'i','e','s','a','n','d','g','e','n','t','l','e','m','e','n','o',
310 'f','t','h','e','c','l','a','s','s','o','f','9','7','W','e','a',
311 'r','s','u','n','s','c','r','e','e','n','I','f','I','c','o','u',
312 'l','d','o','f','f','e','r','y','o','u','o','n','l','y','o','n',
313 'e','t','i','p','f','o','r','t','h','e','f','u','t','u','r','e',
314 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
315 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
316 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
317 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
318 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
319 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
320 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
321 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
322 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
323 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
324 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
325 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
326 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
327 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
328 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
329 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
330 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
331 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
332 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
333 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
334 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
335 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
336 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
337 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
338 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
339 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
340 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
341 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
342 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
343 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
344 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
345 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
346 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
347 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
348 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
349 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
350 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
351 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
352 't','K','u','r','t','V','o','n','n','e','g','u','t','s','C','o',
353 'm','m','e','n','c','e','m','e','n','t','A','d','d','r','e','s',
354 's','a','t','M','I','T','L','a','d','i','e','s','a','n','d','g',
355 'e','n','t','l','e','m','e','n','o','f','t','h','e','c','l','a',
356 's','s','o','f','9','7','W','e','a','r','s','u','n','s','c','r',
357 'e','e','n','I','f','I','c','o','u','l','d','o','f','f','e','r',
358 'y','o','u','o','n','l','y','o','n','e','t','i','p','f','o','r',
359 't','h','e','f','u','t','u','r','e','s','u','n','s','c','r','e',
360 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o',
361 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f',
362 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e',
363 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i',
364 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s',
365 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o',
366 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l',
367 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e',
368 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w',
369 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a',
370 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e',
371 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
372 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r',
373 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n',
374 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r',
375 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
376 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f',
377 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n',
378 '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k',
379 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o',
380 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i',
381 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s',
382 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i',
383 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y',
384 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s',
385 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y',
386 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y',
387 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r',
388 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e',
389 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h',
390 'a','t','K','u','r','t','V','o','n','n','e','g','u','t','s','C',
391 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e',
392 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d',
393 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l',
394 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c',
395 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e',
396 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o',
397 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r',
398 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l',
399 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o',
400 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e',
401 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t',
402 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e',
403 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n',
404 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b',
405 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d',
406 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I',
407 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s',
408 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h',
409 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
410 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e',
411 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u',
412 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e',
413 'r','a','K','u','r','t','V','o','n','n','e','g','u','t','s','C',
414 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e',
415 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d',
416 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l',
417 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c',
418 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e',
419 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o',
420 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r',
421 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l',
422 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o',
423 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e',
424 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t',
425 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e',
426 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n',
427 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b',
428 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d',
429 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I',
430 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s',
431 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h',
432 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
433 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e',
434 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u',
435 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e',
436 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
437 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e',
438 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i',
439 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o',
440 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y',
441 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l',
442 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a',
443 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s',
444 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e',
445 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u',
446 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d',
447 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s',
448 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o',
449 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r',
450 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t',
451 'h','a','t','K','u','r','t','V','o','n','n','e','g','u','K','u',
452 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
453 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
454 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
455 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
456 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
457 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
458 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
459 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
460 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
461 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
462 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
463 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
464 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
465 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
466 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
467 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
468 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
469 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
470 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
471 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
472 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
473 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
474 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
475 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
476 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
477 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
478 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
479 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
480 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
481 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
482 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
483 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
484 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
485 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
486 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
487 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
488 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
489 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','K',
490 'u','r','t','V','o','n','n','e','g','u','t','s','C','o','m','m',
491 'e','n','c','e','m','e','n','t','A','d','d','r','e','s','s','a',
492 't','M','I','T','L','a','d','i','e','s','a','n','d','g','e','n',
493 't','l','e','m','e','n','o','f','t','h','e','c','l','a','s','s',
494 'o','f','9','7','W','e','a','r','s','u','n','s','c','r','e','e',
495 'n','I','f','I','c','o','u','l','d','o','f','f','e','r','y','o',
496 'u','o','n','l','y','o','n','e','t','i','p','f','o','r','t','h',
497 'e','f','u','t','u','r','e','s','u','n','s','c','r','e','e','n',
498 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
499 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
500 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
501 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
502 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
503 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
504 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
505 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
506 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
507 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
508 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
509 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
510 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
511 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
512 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
513 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
514 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
515 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
516 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
517 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
518 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
519 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
520 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
521 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
522 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
523 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
524 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
525 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
526 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
527 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
528 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
529 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
530 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
531 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
532 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
533 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
534 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
535 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
536 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
537 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
538 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
539 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
540 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
541 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
542 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
543 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
544 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
545 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
546 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
547 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
548 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
549 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
550 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
551 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
552 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
553 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
554 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
555 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
556 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
557 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
558 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
559 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
560 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
561 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
562 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
563 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
564 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
565 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
566 't','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
567 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
568 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
569 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
570 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
571 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
572 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','K','u',
573 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
574 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
575 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
576 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
577 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
578 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
579 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
580 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
581 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
582 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
583 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
584 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
585 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
586 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
587 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
588 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
589 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
590 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
591 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
592 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
593 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
594 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
595 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
596 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
597 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
598 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
599 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
600 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
601 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
602 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
603 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
604 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
605 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
606 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
607 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
608 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
609 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
610 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','K',
611 'u','r','t','V','o','n','n','e','g','u','t','s','C','o','m','m',
612 'e','n','c','e','m','e','n','t','A','d','d','r','e','s','s','a',
613 't','M','I','T','L','a','d','i','e','s','a','n','d','g','e','n',
614 't','l','e','m','e','n','o','f','t','h','e','c','l','a','s','s',
615 'o','f','9','7','W','e','a','r','s','u','n','s','c','r','e','e',
616 'n','I','f','I','c','o','u','l','d','o','f','f','e','r','y','o',
617 'u','o','n','l','y','o','n','e','t','i','p','f','o','r','t','h',
618 'e','f','u','t','u','r','e','s','u','n','s','c','r','e','e','n',
619 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
620 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
621 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
622 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
623 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
624 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
625 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
626 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
627 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
628 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
629 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
630 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
631 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
632 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
633 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
634 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
635 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
636 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
637 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
638 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
639 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
640 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
641 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
642 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
643 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
644 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
645 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
646 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
647 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
648 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
649 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
650 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
651 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
652 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
653 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
654 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
655 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
656 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
657 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
658 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
659 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
660 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
661 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
662 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
663 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
664 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
665 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
666 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
667 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
668 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
669 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
670 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
671 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
672 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
673 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
674 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
675 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
676 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
677 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
678 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
679 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
680 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
681 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
682 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
683 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
684 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
685 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
686 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
687 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
688 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
689 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
690 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
691 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
692 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
693 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
694 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
695 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
696 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
697 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
698 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
699 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
700 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
701 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
702 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
703 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
704 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
705 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
706 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
707 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
708 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
709 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
710 't','K','u','r','t','V','o','n','n','e','g','u','K','u','r','t',
711 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
712 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
713 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
714 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
715 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
716 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
717 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
718 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
719 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
720 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
721 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
722 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
723 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
724 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
725 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
726 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
727 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
728 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
729 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
730 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
731 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
732 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
733 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
734 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
735 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
736 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
737 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
738 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
739 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
740 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
741 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
742 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
743 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
744 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
745 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
746 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
747 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
748 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
749 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
750 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
751 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
752 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
753 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
754 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
755 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
756 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
757 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
758 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
759 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
760 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
761 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
762 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
763 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
764 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
765 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
766 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
767 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
768 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
769 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
770 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
771 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
772 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
773 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
774 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
775 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
776 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
777 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
778 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
779 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
780 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
781 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
782 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
783 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
784 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
785 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
786 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
787 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
788 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
789 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
790 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
791 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
792 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
793 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
794 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
795 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
796 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
797 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
798 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
799 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
800 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
801 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
802 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
803 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
804 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
805 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
806 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
807 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
808 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
809 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
810 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
811 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
812 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
813 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
814 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
815 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
816 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
817 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
818 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
819 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
820 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
821 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
822 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
823 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
824 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','t',
825 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
826 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
827 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
828 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
829 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
830 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
831 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
832 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
833 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
834 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
835 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
836 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
837 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
838 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
839 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
840 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
841 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
842 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
843 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
844 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
845 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
846 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
847 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
848 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
849 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
850 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
851 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
852 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
853 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
854 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
855 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
856 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
857 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
858 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
859 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
860 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
861 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
862 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
863 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
864 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
865 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
866 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
867 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
868 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
869 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
870 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
871 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
872 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
873 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
874 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
875 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
876 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
877 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
878 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
879 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
880 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
881 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
882 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
883 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
884 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
885 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
886 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
887 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
888 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
889 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
890 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
891 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
892 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
893 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
894 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
895 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
896 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
897 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
898 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
899 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
900 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
901 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
902 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
903 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
904 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
905 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
906 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
907 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
908 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
909 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
910 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
911 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
912 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
913 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
914 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
915 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
916 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
917 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
918 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
919 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
920 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
921 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
922 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
923 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
924 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
925 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
926 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
927 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
928 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
929 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
930 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
931 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
932 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
933 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
934 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
935 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
936 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
937 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
938 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
939 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
940 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
941 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
942 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
943 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
944 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
945 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
946 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
947 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
948 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
949 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
950 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
951 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
952 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
953 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
954 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
955 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
956 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
957 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
958 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
959 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
960 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
961 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
962 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
963 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
964 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
965 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
966 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
967 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
968 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
969 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
970 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
971 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
972 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
973 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
974 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
975 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
976 'k','n','o','w','t','h','a','t','n','d','b','e','a','u','t','y',
977 'o','f','y','o','u','r','y','o','u','t','h','u','n','t','i','l',
978 't','h','e','y','v','e','f','a','d','e','d','B','u','t','t','r',
979 'u','s','t','m','e','i','n','2','0','y','e','a','r','s','y','o',
980 'u','l','l','l','o','o','k','b','a','c','k','a','t','p','h','o',
981 't','o','s','o','f','y','o','u','r','s','e','l','f','a','n','d',
982 'r','e','c','a','l','l','i','n','a','w','a','y','y','o','u','c',
983 'a','n','t','g','r','a','s','p','n','o','w','h','o','w','m','u',
984 'c','h','p','o','s','s','i','b','i','l','i','t','y','l','a','y',
985 'b','e','f','o','r','e','y','o','u','a','n','d','h','o','w','f',
986 'a','b','u','l','o','u','s','y','o','u','r','e','a','l','l','y',
987 'l','o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a',
988 's','f','a','t','a','s','y','o','u','i','m','a','g','i','n','e',
989 'D','o','n','t','w','o','r','r','y','a','b','o','u','t','t','h',
990 'e','f','u','t','u','r','e','O','r','w','o','r','r','y','b','u',
991 't','k','n','o','w','t','h','a','t','s','u','n','s','c','r','e',
992 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o',
993 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f',
994 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e',
995 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i',
996 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s',
997 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o',
998 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l',
999 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e',
1000 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w',
1001 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a',
1002 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e',
1003 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1004 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r',
1005 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n',
1006 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r',
1007 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1008 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f',
1009 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n',
1010 '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k',
1011 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o',
1012 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i',
1013 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s',
1014 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i',
1015 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y',
1016 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s',
1017 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y',
1018 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y',
1019 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r',
1020 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e',
1021 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h',
1022 'a','t','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1023 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e',
1024 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i',
1025 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o',
1026 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y',
1027 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l',
1028 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a',
1029 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s',
1030 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e',
1031 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u',
1032 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d',
1033 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s',
1034 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o',
1035 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r',
1036 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t',
1037 'h','a','t','s','u','n','s','c','r','e','e','n','w','o','u','l',
1038 'd','b','e','i','t','T','h','e','l','o','n','g','t','e','r','m',
1039 'b','e','n','e','f','i','t','s','o','f','s','u','n','s','c','r',
1040 'e','e','n','h','a','v','e','b','e','e','n','p','r','o','v','e',
1041 'd','b','y','s','c','i','e','n','t','i','s','t','s','w','h','e',
1042 'r','e','a','s','t','h','e','r','e','s','t','o','f','m','y','a',
1043 'd','v','i','c','e','h','a','s','n','o','b','a','s','i','s','m',
1044 'o','r','e','r','e','l','i','a','b','l','e','t','h','a','n','m',
1045 'y','o','w','n','m','e','a','n','d','e','r','i','n','g','e','x',
1046 'p','e','r','i','e','n','c','e','I','w','i','l','l','d','i','s',
1047 'p','e','n','s','e','t','h','i','s','a','d','v','i','c','e','n',
1048 'o','w','E','n','j','o','y','t','h','e','p','o','w','e','r','a',
1049 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
1050 'u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y','o',
1051 'u','w','i','l','l','n','o','t','u','n','d','e','r','s','t','a',
1052 'n','d','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1053 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','u','n',
1054 't','i','l','t','h','e','y','v','e','f','a','d','e','d','B','u',
1055 't','t','r','u','s','t','m','e','i','n','2','0','y','e','a','r',
1056 's','y','o','u','l','l','l','o','o','k','b','a','c','k','a','t',
1057 'p','h','o','t','o','s','o','f','y','o','u','r','s','e','l','f',
1058 'a','n','d','r','e','c','a','l','l','i','n','a','w','a','y','y',
1059 'o','u','c','a','n','t','g','r','a','s','p','n','o','w','h','o',
1060 'w','m','u','c','h','p','o','s','s','i','b','i','l','i','t','y',
1061 'l','a','y','b','e','f','o','r','e','y','o','u','a','n','d','h',
1062 'o','w','f','a','b','u','l','o','u','s','y','o','u','r','e','a',
1063 'l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e','n',
1064 'o','t','a','s','f','a','t','a','s','y','o','u','i','m','a','g',
1065 'i','n','e','D','o','n','t','w','o','r','r','y','a','b','o','u',
1066 't','t','h','e','f','u','t','u','r','e','O','r','w','o','r','r',
1067 'y','b','u','t','k','n','o','w','t','h','a','t','b','u','t','k',
1068 'n','o','w','t','h','a','t','t','s','C','o','m','m','e','n','c',
1069 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1070 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1071 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1072 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1073 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1074 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1075 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t',
1076 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
1077 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
1078 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
1079 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1080 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1081 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1082 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
1083 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
1084 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
1085 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
1086 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
1087 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
1088 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
1089 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
1090 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
1091 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
1092 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
1093 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
1094 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
1095 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
1096 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
1097 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
1098 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1099 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
1100 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
1101 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
1102 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
1103 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
1104 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
1105 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
1106 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
1107 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
1108 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
1109 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
1110 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
1111 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
1112 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
1113 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
1114 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d',
1115 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s',
1116 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h',
1117 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u',
1118 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o',
1119 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i',
1120 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n',
1121 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T',
1122 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i',
1123 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v',
1124 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i',
1125 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h',
1126 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h',
1127 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l',
1128 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e',
1129 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n',
1130 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t',
1131 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o',
1132 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u',
1133 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n',
1134 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n',
1135 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p',
1136 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
1137 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e',
1138 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t',
1139 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l',
1140 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s',
1141 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c',
1142 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t',
1143 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p',
1144 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f',
1145 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u',
1146 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o',
1147 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a',
1148 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n',
1149 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u',
1150 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n',
1151 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g',
1152 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
1153 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
1154 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
1155 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
1156 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
1157 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
1158 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u',
1159 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t',
1160 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f',
1161 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a',
1162 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c',
1163 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t',
1164 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e',
1165 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e',
1166 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m',
1167 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e',
1168 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e',
1169 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j',
1170 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1171 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h',
1172 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l',
1173 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e',
1174 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1175 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h',
1176 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s',
1177 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l',
1178 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o',
1179 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e',
1180 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n',
1181 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h',
1182 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e',
1183 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b',
1184 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o',
1185 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f',
1186 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o',
1187 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f',
1188 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k',
1189 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n',
1190 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
1191 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
1192 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
1193 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
1194 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
1195 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
1196 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
1197 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
1198 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
1199 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
1200 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
1201 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1202 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
1203 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
1204 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
1205 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
1206 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
1207 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
1208 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
1209 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
1210 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
1211 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
1212 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
1213 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
1214 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
1215 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
1216 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
1217 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
1218 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
1219 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
1220 '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1221 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1222 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1223 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
1224 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
1225 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1226 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1227 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1228 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1229 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1230 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1231 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
1232 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
1233 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
1234 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
1235 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
1236 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
1237 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
1238 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
1239 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
1240 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
1241 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
1242 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
1243 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1244 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
1245 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
1246 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
1247 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
1248 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
1249 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
1250 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
1251 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
1252 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
1253 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
1254 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
1255 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
1256 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
1257 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
1258 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
1259 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
1260 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
1261 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
1262 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
1263 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
1264 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
1265 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
1266 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
1267 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
1268 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
1269 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
1270 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
1271 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
1272 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
1273 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
1274 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
1275 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
1276 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
1277 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
1278 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
1279 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
1280 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
1281 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1282 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
1283 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
1284 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
1285 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
1286 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
1287 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
1288 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
1289 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
1290 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
1291 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
1292 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
1293 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
1294 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
1295 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
1296 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
1297 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
1298 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
1299 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
1300 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
1301 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
1302 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
1303 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
1304 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
1305 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
1306 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
1307 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
1308 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
1309 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
1310 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
1311 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
1312 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
1313 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
1314 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
1315 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
1316 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
1317 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
1318 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
1319 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
1320 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
1321 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
1322 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
1323 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
1324 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
1325 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
1326 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
1327 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
1328 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
1329 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
1330 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
1331 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
1332 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
1333 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
1334 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
1335 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
1336 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
1337 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
1338 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
1339 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
1340 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
1341 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
1342 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
1343 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
1344 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
1345 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
1346 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
1347 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
1348 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
1349 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
1350 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
1351 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
1352 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
1353 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
1354 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
1355 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
1356 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
1357 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
1358 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
1359 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
1360 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
1361 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
1362 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
1363 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
1364 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
1365 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
1366 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
1367 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
1368 'k','n','o','w','t','h','a','t','\n', 'l','a','s','s','o','f','9',
1369 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1370 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1371 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1372 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t',
1373 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
1374 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
1375 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
1376 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1377 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1378 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1379 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
1380 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
1381 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
1382 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
1383 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
1384 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
1385 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
1386 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
1387 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
1388 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
1389 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
1390 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
1391 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
1392 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
1393 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
1394 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
1395 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1396 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
1397 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
1398 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
1399 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
1400 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
1401 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
1402 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
1403 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
1404 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
1405 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
1406 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
1407 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
1408 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
1409 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
1410 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
1411 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d',
1412 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s',
1413 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h',
1414 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u',
1415 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o',
1416 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i',
1417 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n',
1418 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T',
1419 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i',
1420 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v',
1421 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i',
1422 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h',
1423 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h',
1424 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l',
1425 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e',
1426 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n',
1427 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t',
1428 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o',
1429 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u',
1430 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n',
1431 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n',
1432 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p',
1433 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
1434 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e',
1435 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t',
1436 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l',
1437 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s',
1438 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c',
1439 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t',
1440 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p',
1441 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f',
1442 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u',
1443 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o',
1444 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a',
1445 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n',
1446 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u',
1447 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n',
1448 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g',
1449 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
1450 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
1451 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
1452 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
1453 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
1454 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
1455 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u',
1456 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t',
1457 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f',
1458 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a',
1459 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c',
1460 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t',
1461 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e',
1462 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e',
1463 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m',
1464 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e',
1465 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e',
1466 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j',
1467 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1468 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h',
1469 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l',
1470 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e',
1471 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1472 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h',
1473 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s',
1474 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l',
1475 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o',
1476 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e',
1477 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n',
1478 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h',
1479 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e',
1480 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b',
1481 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o',
1482 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f',
1483 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o',
1484 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f',
1485 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k',
1486 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n',
1487 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
1488 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
1489 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
1490 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
1491 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
1492 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
1493 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
1494 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
1495 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
1496 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
1497 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
1498 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1499 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
1500 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
1501 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
1502 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
1503 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
1504 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
1505 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
1506 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
1507 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
1508 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
1509 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
1510 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
1511 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
1512 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
1513 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
1514 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
1515 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
1516 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
1517 '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1518 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1519 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1520 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
1521 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
1522 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1523 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1524 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1525 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1526 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1527 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1528 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
1529 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
1530 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
1531 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
1532 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
1533 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
1534 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
1535 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
1536 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
1537 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
1538 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
1539 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
1540 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1541 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
1542 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
1543 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
1544 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
1545 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
1546 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
1547 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
1548 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
1549 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
1550 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
1551 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
1552 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
1553 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
1554 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
1555 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
1556 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
1557 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
1558 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
1559 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
1560 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
1561 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
1562 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
1563 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
1564 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
1565 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
1566 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
1567 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
1568 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
1569 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
1570 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
1571 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
1572 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
1573 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
1574 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
1575 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
1576 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
1577 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
1578 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1579 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
1580 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
1581 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
1582 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
1583 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
1584 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
1585 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
1586 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
1587 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
1588 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
1589 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
1590 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
1591 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
1592 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
1593 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
1594 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
1595 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
1596 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
1597 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
1598 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
1599 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
1600 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
1601 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
1602 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
1603 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
1604 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
1605 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
1606 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
1607 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
1608 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
1609 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
1610 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
1611 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
1612 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
1613 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
1614 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
1615 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
1616 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
1617 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
1618 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
1619 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
1620 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
1621 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
1622 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
1623 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
1624 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
1625 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
1626 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
1627 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
1628 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
1629 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
1630 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
1631 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
1632 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
1633 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
1634 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
1635 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
1636 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
1637 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
1638 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
1639 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
1640 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
1641 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
1642 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
1643 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
1644 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
1645 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
1646 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
1647 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
1648 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
1649 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
1650 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
1651 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
1652 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
1653 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
1654 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
1655 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
1656 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
1657 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
1658 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
1659 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
1660 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
1661 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
1662 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
1663 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
1664 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
1665 'k','n','o','w','t','h','a','t','\n', 'l','a','s','s','o','f','9',
1666 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1667 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1668 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1669 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t',
1670 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
1671 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
1672 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
1673 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1674 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1675 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1676 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
1677 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
1678 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
1679 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
1680 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
1681 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
1682 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
1683 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
1684 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
1685 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
1686 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
1687 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
1688 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
1689 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
1690 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
1691 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
1692 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1693 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
1694 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
1695 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
1696 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
1697 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
1698 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
1699 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
1700 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
1701 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
1702 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
1703 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
1704 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
1705 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
1706 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
1707 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
1708 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d',
1709 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s',
1710 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h',
1711 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u',
1712 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o',
1713 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i',
1714 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n',
1715 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T',
1716 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i',
1717 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v',
1718 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i',
1719 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h',
1720 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h',
1721 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l',
1722 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e',
1723 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n',
1724 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t',
1725 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o',
1726 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u',
1727 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n',
1728 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n',
1729 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p',
1730 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
1731 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e',
1732 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t',
1733 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l',
1734 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s',
1735 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c',
1736 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t',
1737 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p',
1738 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f',
1739 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u',
1740 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o',
1741 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a',
1742 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n',
1743 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u',
1744 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n',
1745 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g',
1746 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
1747 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
1748 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
1749 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
1750 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
1751 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
1752 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u',
1753 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t',
1754 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f',
1755 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a',
1756 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c',
1757 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t',
1758 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e',
1759 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e',
1760 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m',
1761 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e',
1762 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e',
1763 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j',
1764 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1765 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h',
1766 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l',
1767 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e',
1768 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1769 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h',
1770 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s',
1771 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l',
1772 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o',
1773 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e',
1774 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n',
1775 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h',
1776 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e',
1777 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b',
1778 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o',
1779 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f',
1780 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o',
1781 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f',
1782 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k',
1783 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n',
1784 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
1785 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
1786 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
1787 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
1788 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
1789 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
1790 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
1791 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
1792 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
1793 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
1794 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
1795 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1796 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
1797 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
1798 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
1799 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
1800 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
1801 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
1802 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
1803 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
1804 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
1805 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
1806 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
1807 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
1808 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
1809 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
1810 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
1811 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
1812 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
1813 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
1814 '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1815 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1816 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1817 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
1818 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
1819 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1820 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1821 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1822 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1823 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1824 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1825 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
1826 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
1827 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
1828 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
1829 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
1830 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
1831 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
1832 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
1833 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
1834 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
1835 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
1836 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
1837 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1838 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
1839 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
1840 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
1841 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
1842 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
1843 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
1844 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
1845 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
1846 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
1847 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
1848 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
1849 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
1850 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
1851 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
1852 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
1853 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
1854 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
1855 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
1856 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
1857 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
1858 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
1859 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
1860 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
1861 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
1862 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
1863 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
1864 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
1865 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
1866 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
1867 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
1868 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
1869 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
1870 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
1871 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
1872 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
1873 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
1874 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
1875 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1876 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
1877 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
1878 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
1879 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
1880 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
1881 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
1882 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
1883 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
1884 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
1885 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
1886 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
1887 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
1888 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
1889 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
1890 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
1891 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
1892 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
1893 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
1894 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
1895 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
1896 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
1897 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
1898 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
1899 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
1900 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
1901 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
1902 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
1903 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
1904 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
1905 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
1906 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
1907 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
1908 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
1909 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
1910 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
1911 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
1912 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
1913 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
1914 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
1915 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
1916 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
1917 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
1918 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
1919 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
1920 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
1921 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
1922 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
1923 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
1924 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
1925 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
1926 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
1927 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
1928 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
1929 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
1930 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
1931 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
1932 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
1933 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
1934 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
1935 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
1936 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
1937 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
1938 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
1939 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
1940 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
1941 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
1942 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
1943 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
1944 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
1945 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
1946 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
1947 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
1948 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
1949 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
1950 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
1951 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
1952 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
1953 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
1954 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
1955 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
1956 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
1957 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
1958 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
1959 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
1960 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
1961 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
1962 'k','n','o','w','t','h','a','t','\n'
1963};
diff --git a/all_pairs/source/rijndael_enc/rijndael_enc.c b/all_pairs/source/rijndael_enc/rijndael_enc.c
new file mode 100644
index 0000000..f74d595
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/rijndael_enc.c
@@ -0,0 +1,238 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: rijndael_enc
7
8 Author: Dr Brian Gladman
9
10 Function: rijndael_enc is an implementation of the AES encryption
11 algorithm (Rijndael).
12
13 Source: security section of MiBench
14
15 Changes: Add computation of a checksum, refactoring
16
17 License: see below
18
19*/
20
21/*
22 -----------------------------------------------------------------------
23 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
24
25 TERMS
26
27 Redistribution and use in source and binary forms, with or without
28 modification, are permitted provided that the following conditions
29 are met:
30 1. Redistributions of source code must retain the above copyright
31 notice, this list of conditions and the following disclaimer.
32 2. Redistributions in binary form must reproduce the above copyright
33 notice, this list of conditions and the following disclaimer in the
34 documentation and/or other materials provided with the distribution.
35
36 This software is provided 'as is' with no guarantees of correctness or
37 fitness for purpose.
38 -----------------------------------------------------------------------
39*/
40
41#include "../extra.h"
42#include "aes.h"
43#include "rijndael_enc_libc.h"
44
45/*
46 Global variable definitions
47*/
48unsigned char rijndael_enc_key[32];
49int rijndael_enc_key_len;
50
51extern unsigned char rijndael_enc_data[];
52struct rijndael_enc_FILE rijndael_enc_fin;
53
54int rijndael_enc_checksum = 0;
55
56/*
57 Forward declaration of functions
58*/
59void rijndael_enc_init( void );
60int rijndael_enc_return( void );
61void rijndael_enc_fillrand( unsigned char *buf, int len );
62void rijndael_enc_encfile( struct rijndael_enc_FILE *fin, struct aes *ctx );
63void rijndael_enc_main( void );
64
65void rijndael_enc_init( void )
66{
67 /* create a pseudo-file for the input*/
68 rijndael_enc_fin.data = rijndael_enc_data;
69 rijndael_enc_fin.size = 31369;
70 rijndael_enc_fin.cur_pos = 0;
71
72 unsigned i;
73 volatile int x = 0;
74 rijndael_enc_fin.size ^= x;
75 _Pragma( "loopbound min 31369 max 31369" )
76 for ( i = 0; i < rijndael_enc_fin.size; i++ )
77 rijndael_enc_fin.data[i] ^= x;
78
79 /* this is a pointer to the hexadecimal key digits */
80 const volatile char *cp =
81 "1234567890abcdeffedcba09876543211234567890abcdeffedcba0987654321";
82 char ch;
83 int by = 0;
84
85 i = 0; /* this is a count for the input digits processed */
86 _Pragma( "loopbound min 64 max 64" )
87 while ( i < 64 && *cp ) { /* the maximum key length is 32 bytes and */
88 /* hence at most 64 hexadecimal digits */
89 ch = rijndael_enc_toupper( *cp++ ); /* process a hexadecimal digit */
90 if ( ch >= '0' && ch <= '9' )
91 by = ( by << 4 ) + ch - '0';
92 else
93 if ( ch >= 'A' && ch <= 'F' )
94 by = ( by << 4 ) + ch - 'A' + 10;
95 else { /* error if not hexadecimal */
96 rijndael_enc_checksum = -2;
97 return;
98 }
99
100 /* store a key byte for each pair of hexadecimal digits */
101 if ( i++ & 1 )
102 rijndael_enc_key[i / 2 - 1] = by & 0xff;
103 }
104
105 if ( *cp ) {
106 rijndael_enc_checksum = -3;
107 return;
108 } else
109 if ( i < 32 || ( i & 15 ) ) {
110 rijndael_enc_checksum = -4;
111 return;
112 }
113
114 rijndael_enc_key_len = i / 2;
115}
116
117int rijndael_enc_return( void )
118{
119 return ( ( rijndael_enc_checksum == ( int )249509 ) ? 0 : -1 );
120}
121
122/* A Pseudo Random Number Generator (PRNG) used for the */
123/* Initialisation Vector. The PRNG is George Marsaglia's */
124/* Multiply-With-Carry (MWC) PRNG that concatenates two */
125/* 16-bit MWC generators: */
126/* x(n)=36969 * x(n-1) + carry mod 2^16 */
127/* y(n)=18000 * y(n-1) + carry mod 2^16 */
128/* to produce a combined PRNG with a period of about 2^60. */
129
130#define RAND(a,b) (((a = 36969 * (a & 65535) + (a >> 16)) << 16) + (b = 18000 * (b & 65535) + (b >> 16)) )
131
132void rijndael_enc_fillrand( unsigned char *buf, int len )
133{
134 static unsigned long a[2], mt = 1, count = 4;
135 static char r[4];
136 int i;
137
138 if ( mt ) {
139 mt = 0;
140 a[0] = 0xeaf3;
141 a[1] = 0x35fe;
142 }
143
144 _Pragma( "loopbound min 1 max 16" )
145 for ( i = 0; i < len; ++i ) {
146 if ( count == 4 ) {
147 *( unsigned long * )r = RAND( a[0], a[1] );
148 count = 0;
149 }
150
151 buf[i] = r[count++];
152 }
153}
154
155void rijndael_enc_encfile( struct rijndael_enc_FILE *fin, struct aes *ctx )
156{
157 unsigned char inbuf[16], outbuf[16];
158 long int flen;
159 unsigned long i = 0, l = 0;
160
161 rijndael_enc_fillrand( outbuf,
162 16 ); /* set an IV for CBC mode */
163 flen = fin->size;
164
165 rijndael_enc_fillrand( inbuf,
166 1 ); /* make top 4 bits of a byte random */
167 l = 15; /* and store the length of the last */
168 /* block in the lower 4 bits */
169 inbuf[0] = ( ( char )flen & 15 ) | ( inbuf[0] & ~15 );
170
171 /* TODO: this is necessarily an input-dependent loop bound */
172 _Pragma( "loopbound min 1961 max 1961" )
173 while ( !rijndael_enc_feof(
174 fin ) ) { /* loop to encrypt the input file */
175 /* input 1st 16 bytes to buf[1..16] */
176 i = rijndael_enc_fread( inbuf + 16 - l, 1, l, fin ); /* on 1st round byte[0] */
177 /* is the length code */
178 if ( i < l ) break; /* if end of the input file reached */
179
180 _Pragma( "loopbound min 16 max 16" )
181 for ( i = 0; i < 16; ++i ) /* xor in previous cipher text */
182 inbuf[i] ^= outbuf[i];
183
184 rijndael_enc_encrypt( inbuf, outbuf,
185 ctx ); /* and do the encryption */
186
187 rijndael_enc_checksum += outbuf[15];
188
189 /* in all but first round read 16 */
190 l = 16; /* bytes into the buffer */
191 }
192
193 /* except for files of length less than two blocks we now have one */
194 /* byte from the previous block and 'i' bytes from the current one */
195 /* to encrypt and 15 - i empty buffer positions. For files of less */
196 /* than two blocks (0 or 1) we have i + 1 bytes and 14 - i empty */
197 /* buffer position to set to zero since the 'count' byte is extra */
198
199 if ( l == 15 ) /* adjust for extra byte in the */
200 ++i; /* in the first block */
201
202 if ( i ) { /* if bytes remain to be output */
203 _Pragma( "loopbound min 6 max 6" )
204 while ( i < 16 ) /* clear empty buffer positions */
205 inbuf[i++] = 0;
206
207 _Pragma( "loopbound min 16 max 16" )
208 for ( i = 0; i < 16; ++i ) /* xor in previous cipher text */
209 inbuf[i] ^= outbuf[i];
210
211 rijndael_enc_encrypt( inbuf, outbuf, ctx ); /* encrypt and output it */
212
213 rijndael_enc_checksum += outbuf[15];
214 }
215}
216
217void _Pragma( "entrypoint" ) rijndael_enc_main( void )
218{
219 struct aes ctx[1];
220
221 /* encryption in Cipher Block Chaining mode */
222 rijndael_enc_set_key( rijndael_enc_key, rijndael_enc_key_len, enc, ctx );
223 rijndael_enc_encfile( &rijndael_enc_fin, ctx );
224}
225
226int main( int argc, char** argv )
227{
228 SET_UP
229 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
230 START_LOOP
231 rijndael_enc_init();
232 rijndael_enc_main();
233 STOP_LOOP
234 }
235 WRITE_TO_FILE
236 return ( rijndael_enc_return() );
237}
238
diff --git a/all_pairs/source/rijndael_enc/rijndael_enc_libc.c b/all_pairs/source/rijndael_enc/rijndael_enc_libc.c
new file mode 100644
index 0000000..921af68
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/rijndael_enc_libc.c
@@ -0,0 +1,66 @@
1#include "rijndael_enc_libc.h"
2
3int rijndael_enc_toupper( int c )
4{
5 if ( ( c >= 'a' ) && ( c <= 'z' ) )
6 return c - 'a' + 'A';
7 return c;
8}
9
10unsigned long rijndael_enc_fread( void *ptr, unsigned long size,
11 unsigned long count, struct rijndael_enc_FILE *stream )
12{
13 unsigned i = stream->cur_pos, i2 = 0;
14 unsigned long number_of_chars_to_read =
15 stream->size - stream->cur_pos >= size * count ?
16 size * count : stream->size - stream->cur_pos;
17 _Pragma( "loopbound min 10 max 16" )
18 while ( i < stream->cur_pos + number_of_chars_to_read )
19 ( ( unsigned char * )ptr )[i2++] = stream->data[i++];
20 stream->cur_pos += number_of_chars_to_read;
21 return number_of_chars_to_read;
22}
23
24unsigned long rijndael_enc_fwrite( const void *ptr, unsigned long size,
25 unsigned long count, struct rijndael_enc_FILE *stream )
26{
27 unsigned i = stream->cur_pos, i2 = 0;
28 unsigned long number_of_chars_to_write =
29 stream->size - stream->cur_pos >= size * count ?
30 size * count : stream->size - stream->cur_pos;
31 _Pragma( "loopbound min 0 max 0" )
32 while ( i < stream->cur_pos + number_of_chars_to_write )
33 stream->data[i++] = ( ( unsigned char * )ptr )[i2++];
34 stream->cur_pos += number_of_chars_to_write;
35 return number_of_chars_to_write;
36}
37
38int rijndael_enc_fseek( struct rijndael_enc_FILE *stream, long int offset,
39 Origin origin )
40{
41 if ( origin == RIJNDAEL_ENC_SEEK_SET ) {
42 stream->cur_pos = offset;
43 return 0;
44 } else
45 if ( origin == RIJNDAEL_ENC_SEEK_CUR ) {
46 stream->cur_pos += offset;
47 return 0;
48 } else
49 if ( origin == RIJNDAEL_ENC_SEEK_END ) {
50 stream->cur_pos = stream->size + offset;
51 return 0;
52 }
53 return -1;
54}
55
56int rijndael_enc_fgetpos( struct rijndael_enc_FILE *stream,
57 unsigned *position )
58{
59 *position = stream->cur_pos;
60 return 0;
61}
62
63int rijndael_enc_feof( struct rijndael_enc_FILE *stream )
64{
65 return stream->cur_pos == stream->size ? 1 : 0;
66}
diff --git a/all_pairs/source/rijndael_enc/rijndael_enc_libc.h b/all_pairs/source/rijndael_enc/rijndael_enc_libc.h
new file mode 100644
index 0000000..6a01397
--- /dev/null
+++ b/all_pairs/source/rijndael_enc/rijndael_enc_libc.h
@@ -0,0 +1,24 @@
1#ifndef RIJNDAEL_ENC_LIBC_H
2#define RIJNDAEL_ENC_LIBC_H
3
4int rijndael_enc_toupper ( int c );
5
6enum _Origin_ { RIJNDAEL_ENC_SEEK_SET, RIJNDAEL_ENC_SEEK_CUR, RIJNDAEL_ENC_SEEK_END };
7typedef enum _Origin_ Origin;
8struct rijndael_enc_FILE {
9 unsigned char *data;
10 unsigned long size;
11 unsigned cur_pos;
12};
13
14unsigned long rijndael_enc_fread ( void *ptr, unsigned long size,
15 unsigned long count, struct rijndael_enc_FILE *stream );
16unsigned long rijndael_enc_fwrite ( const void *ptr, unsigned long size,
17 unsigned long count, struct rijndael_enc_FILE *stream );
18int rijndael_enc_fseek ( struct rijndael_enc_FILE *stream, long int offset,
19 Origin origin );
20int rijndael_enc_fgetpos( struct rijndael_enc_FILE *stream,
21 unsigned *position );
22int rijndael_enc_feof ( struct rijndael_enc_FILE *stream );
23
24#endif // RIJNDAEL_ENC_LIBC_H
diff --git a/all_pairs/source/statemate/ChangeLog.txt b/all_pairs/source/statemate/ChangeLog.txt
new file mode 100644
index 0000000..bce75dc
--- /dev/null
+++ b/all_pairs/source/statemate/ChangeLog.txt
@@ -0,0 +1,60 @@
1File: statemate.c
2Original provenience: Mälardalen benchmark suite,
3 http://www.mrtc.mdh.se/projects/wcet/benchmarks.html
4
52016-02-02:
6- Removed original header comment, replaced by TACLeBench header.
7- Removed macro '#define float int' and replaced each 'float' by 'int' (8 in
8 total)
9- Removed unused macro
10 - #define entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_copy_IDX 1
11- Removed unused variables
12 - int FH_TUERMODUL_CTRL__N_copy;
13 - int BLOCK_ERKENNUNG_CTRL__I_EIN_MAX_copy;
14 - int BLOCK_ERKENNUNG_CTRL__N_copy;
15 - char FH_TUERMODUL_CTRL__FT;
16 - char FH_TUERMODUL__COM_OPEN;
17 - char FH_TUERMODUL__COM_CLOSE;
18 - char FH_DU__S_FH_TMBFAUFCAN_copy;
19 - char FH_DU__S_FH_TMBFZUCAN_copy;
20- Moved around all the following so that they are in the given order just after
21the header
22 - macro definitions
23 - forward declarations of fuctions
24 - declarations of global variables
25- Reordered functions in source code: initialization-related functions first,
26 followed by algorithm core functions, followed by main functions
27- Added a new main function that first calls init function then the old main
28 function sans init
29- Annotated statemate_main() as the entry point of the analysis
30- Removed seemingly unnecessary empty lines
31- Changed remaining floating number literals, all being used for time related
32 comparisons, to integer literals by multiplying them by 1000 so that the
33 code is totally floating number free. E.g:
34 changed 'time - sc_FH_TUERMODUL_CTRL_2375_2 >= 0.5f'
35 to 'time - sc_FH_TUERMODUL_CTRL_2375_2 >= 500'
36 Info: All time related variables were already converted to 'unsigned long'
37- Applied code formatting according to the following rules
38 - Lines shall not be wider than 80 characters; whenever possible, appropriate
39 line breaks shall be inserted to keep lines below 80 characters
40 - Indentation is done using whitespaces only, no tabs. Code is indented by
41 two whitespaces
42 - Two empty lines are put between any two functions
43 - In non-empty lists or index expressions, opening '(' and '[' are followed by
44 one whitespace, closing ')' and ']' are preceded by one whitespace
45 - In comma- or colon-separated argument lists, one whitespace is put after
46 each comma/colon
47 - Names of functions and global variables all start with a benchmark-specific
48 prefix (here: statemate_) followed by lowercase letter
49 - For pointer types, one whitespace is put before the '*'
50 - Operators within expressions shall be preceded and followed by one
51 whitespace
52 - Code of then- and else-parts of if-then-else statements shall be put in
53 separate lines, not in the same lines as the if-condition or the keyword
54 "else"
55 - Opening braces '{' denoting the beginning of code for some if-else or loop
56 body shall be put at the end of the same line where the keywords "if",
57 "else", "for", "while" etc. occur
58
59 2016-10-10:
60 - added statemate_return() function
diff --git a/all_pairs/source/statemate/statemate.c b/all_pairs/source/statemate/statemate.c
new file mode 100644
index 0000000..379366a
--- /dev/null
+++ b/all_pairs/source/statemate/statemate.c
@@ -0,0 +1,1286 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: statemate
7
8 Author: Friedhelm Stappert, C-LAB, Paderborn, Germany
9
10 Function: This code was automatically generated by
11 the STAtechart Real-time-Code generator STARC
12 which was developed at C-LAB.
13
14 The original StateChart specifies an experimental
15 car window lift control.
16
17 Source: MRTC
18 http://www.mrtc.mdh.se/projects/wcet/wcet_bench/statemate/statemate.c
19
20 Changes: no major functional changes
21
22 License: may be used, modified, and re-distributed freely
23
24*/
25
26/*
27 Macro definitions
28*/
29
30#include "../extra.h"
31
32#define SYS_bit_get(a,b) (a)[(b)]
33#define SYS_bit_clr(a,b) (a)[(b)] = 0
34#define SYS_bit_set(a,b) (a)[(b)] = 1
35#define SYS_bit_cpy(a1,i1,a2,i2) (a1)[(i1)] = (a2)[(i2)]
36
37#define active_KINDERSICHERUNG_CTRL_IDX 10
38#define active_KINDERSICHERUNG_CTRL_copy_IDX 11
39#define active_KINDERSICHERUNG_CTRL_old_IDX 12
40#define active_FH_TUERMODUL_CTRL_IDX 13
41#define active_FH_TUERMODUL_CTRL_copy_IDX 14
42#define active_FH_TUERMODUL_CTRL_old_IDX 15
43#define active_EINKLEMMSCHUTZ_CTRL_IDX 16
44#define active_EINKLEMMSCHUTZ_CTRL_copy_IDX 17
45#define active_EINKLEMMSCHUTZ_CTRL_old_IDX 18
46#define active_BLOCK_ERKENNUNG_CTRL_IDX 19
47#define active_BLOCK_ERKENNUNG_CTRL_copy_IDX 20
48#define active_BLOCK_ERKENNUNG_CTRL_old_IDX 21
49#define entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX 0
50
51#define entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX 4
52#define entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX 5
53#define exited_BEREIT_FH_TUERMODUL_CTRL_IDX 6
54#define exited_BEREIT_FH_TUERMODUL_CTRL_copy_IDX 7
55
56#define FH_TUERMODUL_CTRL__END_REVERS_IDX 22
57#define FH_TUERMODUL_CTRL__END_REVERS_copy_IDX 23
58#define FH_TUERMODUL__EINKLEMMUNG_IDX 24
59
60
61/*
62 Forward declaration of functions
63*/
64
65void statemate_init( void );
66void statemate_interface( void );
67void statemate_generic_KINDERSICHERUNG_CTRL( void );
68void statemate_generic_FH_TUERMODUL_CTRL( void );
69void statemate_generic_EINKLEMMSCHUTZ_CTRL( void );
70void statemate_generic_BLOCK_ERKENNUNG_CTRL( void );
71void statemate_FH_DU( void );
72void statemate_main( void );
73int statemate_return ( void );
74
75
76/*
77 Declaration of global variables
78*/
79
80static char statemate_bitlist[64];
81unsigned long
82statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy;
83unsigned long
84statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL;
85unsigned long statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL;
86unsigned long statemate_sc_FH_TUERMODUL_CTRL_2375_2;
87unsigned long statemate_sc_FH_TUERMODUL_CTRL_2352_1;
88unsigned long statemate_sc_FH_TUERMODUL_CTRL_2329_1;
89int statemate_FH_TUERMODUL_CTRL__N;
90int statemate_FH_TUERMODUL_CTRL__N_old;
91unsigned long statemate_sc_FH_TUERMODUL_CTRL_1781_10;
92unsigned long statemate_sc_FH_TUERMODUL_CTRL_1739_10;
93int statemate_FH_TUERMODUL__POSITION;
94int statemate_FH_TUERMODUL__I_EIN;
95int statemate_FH_TUERMODUL__I_EIN_old;
96int statemate_FH_DU__MFH;
97int statemate_FH_DU__MFH_copy;
98int statemate_FH_DU__POSITION;
99int statemate_FH_DU__I_EIN;
100int statemate_FH_DU__I_EIN_old;
101int statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX;
102int statemate_BLOCK_ERKENNUNG_CTRL__N;
103int statemate_BLOCK_ERKENNUNG_CTRL__N_old;
104char statemate_FH_TUERMODUL_CTRL__INREVERS2;
105char statemate_FH_TUERMODUL_CTRL__INREVERS2_copy;
106char statemate_FH_TUERMODUL_CTRL__INREVERS1;
107char statemate_FH_TUERMODUL_CTRL__INREVERS1_copy;
108char statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
109char statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old;
110char statemate_FH_TUERMODUL__SFHZ_MEC;
111char statemate_FH_TUERMODUL__SFHZ_MEC_old;
112char statemate_FH_TUERMODUL__SFHA_ZENTRAL;
113char statemate_FH_TUERMODUL__SFHA_ZENTRAL_old;
114char statemate_FH_TUERMODUL__SFHA_MEC;
115char statemate_FH_TUERMODUL__SFHA_MEC_old;
116char statemate_FH_TUERMODUL__KL_50;
117char statemate_FH_TUERMODUL__BLOCK;
118char statemate_FH_TUERMODUL__BLOCK_copy;
119char statemate_FH_TUERMODUL__BLOCK_old;
120char statemate_FH_TUERMODUL__FT;
121char statemate_FH_TUERMODUL__SFHZ;
122char statemate_FH_TUERMODUL__SFHZ_copy;
123char statemate_FH_TUERMODUL__SFHZ_old;
124char statemate_FH_TUERMODUL__SFHA;
125char statemate_FH_TUERMODUL__SFHA_copy;
126char statemate_FH_TUERMODUL__SFHA_old;
127char statemate_FH_TUERMODUL__MFHZ;
128char statemate_FH_TUERMODUL__MFHZ_copy;
129char statemate_FH_TUERMODUL__MFHZ_old;
130char statemate_FH_TUERMODUL__MFHA;
131char statemate_FH_TUERMODUL__MFHA_copy;
132char statemate_FH_TUERMODUL__MFHA_old;
133char statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
134char statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old;
135char statemate_FH_DU__KL_50;
136char statemate_FH_DU__S_FH_FTZU;
137char statemate_FH_DU__S_FH_FTAUF;
138char statemate_FH_DU__FT;
139char statemate_FH_DU__EKS_LEISTE_AKTIV;
140char statemate_FH_DU__EKS_LEISTE_AKTIV_old;
141char statemate_FH_DU__S_FH_TMBFAUFCAN;
142char statemate_FH_DU__S_FH_TMBFAUFCAN_old;
143char statemate_FH_DU__S_FH_TMBFZUCAN;
144char statemate_FH_DU__S_FH_TMBFZUCAN_old;
145char statemate_FH_DU__S_FH_TMBFZUDISC;
146char statemate_FH_DU__S_FH_TMBFZUDISC_old;
147char statemate_FH_DU__S_FH_TMBFAUFDISC;
148char statemate_FH_DU__S_FH_TMBFAUFDISC_old;
149char statemate_FH_DU__S_FH_ZUDISC;
150char statemate_FH_DU__S_FH_AUFDISC;
151char statemate_FH_DU__DOOR_ID;
152char statemate_FH_DU__BLOCK;
153char statemate_FH_DU__BLOCK_copy;
154char statemate_FH_DU__BLOCK_old;
155char statemate_FH_DU__MFHZ;
156char statemate_FH_DU__MFHZ_copy;
157char statemate_FH_DU__MFHZ_old;
158char statemate_FH_DU__MFHA;
159char statemate_FH_DU__MFHA_copy;
160char statemate_FH_DU__MFHA_old;
161
162unsigned long statemate_time;
163char statemate_stable;
164char statemate_step;
165
166char
167statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state; /** 2 bits **/
168char
169statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state; /** 1 bits **/
170char statemate_MEC_KINDERSICHERUNG_CTRL_next_state; /** 1 bits **/
171char
172statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state; /** 2 bits **/
173char statemate_B_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
174char statemate_A_FH_TUERMODUL_CTRL_next_state; /** 1 bits **/
175char
176statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state; /** 1 bits **/
177char
178statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
179char
180statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
181char
182statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
183char statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
184char
185statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
186char
187statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state; /** 2 bits **/
188char
189statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state; /** 2 bits **/
190char
191statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state; /** 2 bits **/
192char
193statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state; /** 2 bits **/
194
195
196/*
197 Initialization-related functions
198*/
199
200void statemate_init( void )
201{
202 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
203 = 0;
204 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
205 = 0;
206 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL = 0;
207 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 0;
208 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 0;
209 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 0;
210 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 0;
211 statemate_B_FH_TUERMODUL_CTRL_next_state = 0;
212 statemate_A_FH_TUERMODUL_CTRL_next_state = 0;
213 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 0;
214 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 0;
215 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
216 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
217 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 0;
218 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
219 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 0;
220 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 0;
221 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 0;
222 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 0;
223
224 statemate_interface();
225} /** statemate_init **/
226
227
228void statemate_interface( void )
229{
230 if ( SYS_bit_get( statemate_bitlist,
231 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX ) )
232 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL = statemate_time;
233 if ( SYS_bit_get( statemate_bitlist,
234 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX ) ||
235 SYS_bit_get( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_IDX ) )
236 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
237 = statemate_time;
238 if ( ( statemate_sc_FH_TUERMODUL_CTRL_2375_2 != 0 ) &&
239 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_2375_2 >= 500 ) ) {
240 statemate_FH_TUERMODUL__MFHA_copy = 0;
241 statemate_sc_FH_TUERMODUL_CTRL_2375_2 = 0;
242 }
243 if ( ( statemate_sc_FH_TUERMODUL_CTRL_2352_1 != 0 ) &&
244 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_2352_1 >= 500 ) ) {
245 statemate_FH_TUERMODUL__MFHZ_copy = 0;
246 statemate_sc_FH_TUERMODUL_CTRL_2352_1 = 0;
247 }
248 if ( ( statemate_sc_FH_TUERMODUL_CTRL_2329_1 != 0 ) &&
249 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_2329_1 >= 500 ) ) {
250 statemate_FH_TUERMODUL__MFHZ_copy = 0;
251 statemate_sc_FH_TUERMODUL_CTRL_2329_1 = 0;
252 }
253 if ( ( statemate_sc_FH_TUERMODUL_CTRL_1781_10 != 0 ) &&
254 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_1781_10 >= 500 ) )
255 statemate_sc_FH_TUERMODUL_CTRL_1781_10 = 0;
256
257 if ( ( statemate_sc_FH_TUERMODUL_CTRL_1739_10 != 0 ) &&
258 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_1739_10 >= 500 ) )
259 statemate_sc_FH_TUERMODUL_CTRL_1739_10 = 0;
260
261 if ( ( SYS_bit_get( statemate_bitlist,
262 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX ) ||
263 statemate_BLOCK_ERKENNUNG_CTRL__N != statemate_BLOCK_ERKENNUNG_CTRL__N_old ) )
264 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
265 = statemate_time;
266} /** statemate_interface **/
267
268
269/*
270 Algorithm core functions
271*/
272
273void statemate_generic_KINDERSICHERUNG_CTRL( void )
274{
275 if ( SYS_bit_get( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX ) ) {
276 switch ( statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state ) {
277 case 1: { /** state ZENTRAL in chart KINDERSICHERUNG_CTRL **/
278 if ( !( statemate_FH_TUERMODUL__SFHA_ZENTRAL ||
279 statemate_FH_TUERMODUL__SFHZ_ZENTRAL ) ) {
280 statemate_stable = 0;
281 statemate_FH_TUERMODUL__SFHZ_copy = 0;
282 statemate_FH_TUERMODUL__SFHA_copy = 0;
283
284 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
285 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 0;
286 break;
287 }
288 switch ( statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state ) {
289 case 1: { /** state IN_ZENTRAL in chart KINDERSICHERUNG_CTRL **/
290 if ( ( statemate_FH_TUERMODUL__SFHA_ZENTRAL &&
291 !( statemate_FH_TUERMODUL__SFHA_ZENTRAL_old ) ) ) {
292 statemate_stable = 0;
293 statemate_FH_TUERMODUL__SFHA_copy = 1;
294
295 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
296 break;
297 }
298 if ( ( statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
299 !( statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old ) ) ) {
300 statemate_stable = 0;
301 statemate_FH_TUERMODUL__SFHZ_copy = 1;
302
303 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
304 break;
305 }
306 if ( ( !( statemate_FH_TUERMODUL__SFHA_ZENTRAL ) &&
307 statemate_FH_TUERMODUL__SFHA_ZENTRAL_old ) ) {
308 statemate_stable = 0;
309 statemate_FH_TUERMODUL__SFHA_copy = 0;
310
311 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
312 break;
313 }
314 if ( ( !( statemate_FH_TUERMODUL__SFHZ_ZENTRAL ) &&
315 statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old ) ) {
316 statemate_stable = 0;
317 statemate_FH_TUERMODUL__SFHZ_copy = 0;
318
319 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
320 break;
321 }
322 break;
323 }
324 default: {
325 statemate_stable = 0;
326 break;
327 }
328 } /** switch statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state **/
329 break;
330 }
331 case 2: { /** state MEC in chart KINDERSICHERUNG_CTRL **/
332 if ( !( statemate_FH_TUERMODUL__SFHA_MEC ||
333 statemate_FH_TUERMODUL__SFHZ_MEC ) ) {
334 statemate_stable = 0;
335 statemate_FH_TUERMODUL__SFHZ_copy = 0;
336 statemate_FH_TUERMODUL__SFHA_copy = 0;
337
338 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
339 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 0;
340 break;
341 }
342 switch ( statemate_MEC_KINDERSICHERUNG_CTRL_next_state ) {
343 case 1: { /** state INMEC in chart KINDERSICHERUNG_CTRL **/
344 if ( ( statemate_FH_TUERMODUL__SFHA_MEC &&
345 !( statemate_FH_TUERMODUL__SFHA_MEC_old ) ) ) {
346 statemate_stable = 0;
347 statemate_FH_TUERMODUL__SFHA_copy = 1;
348
349 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
350 break;
351 }
352 if ( ( statemate_FH_TUERMODUL__SFHZ_MEC &&
353 !( statemate_FH_TUERMODUL__SFHZ_MEC_old ) ) ) {
354 statemate_stable = 0;
355 statemate_FH_TUERMODUL__SFHZ_copy = 1;
356
357 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
358 break;
359 }
360 if ( ( !( statemate_FH_TUERMODUL__SFHA_MEC ) &&
361 statemate_FH_TUERMODUL__SFHA_MEC_old ) ) {
362 statemate_stable = 0;
363 statemate_FH_TUERMODUL__SFHA_copy = 0;
364
365 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
366 break;
367 }
368 if ( ( !( statemate_FH_TUERMODUL__SFHZ_MEC ) &&
369 statemate_FH_TUERMODUL__SFHZ_MEC_old ) ) {
370 statemate_stable = 0;
371 statemate_FH_TUERMODUL__SFHZ_copy = 0;
372
373 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
374 break;
375 }
376 break;
377 }
378 default: {
379 statemate_stable = 0;
380 break;
381 }
382 } /** switch statemate_MEC_KINDERSICHERUNG_CTRL_next_state **/
383 break;
384 }
385 case 3: { /** state WAITING in chart KINDERSICHERUNG_CTRL **/
386 if ( ( !statemate_FH_TUERMODUL__KL_50 ) && ( statemate_FH_TUERMODUL__SFHZ_MEC &&
387 statemate_FH_TUERMODUL__SFHA_MEC ) ) {
388 statemate_stable = 0;
389 statemate_FH_TUERMODUL__SFHZ_copy = 1;
390 statemate_FH_TUERMODUL__SFHA_copy = 1;
391
392 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 2;
393 break;
394 }
395 if ( ( !statemate_FH_TUERMODUL__KL_50 ) && ( statemate_FH_TUERMODUL__SFHZ_MEC &&
396 !statemate_FH_TUERMODUL__SFHA_MEC ) ) {
397 statemate_stable = 0;
398 statemate_FH_TUERMODUL__SFHZ_copy = 1;
399
400 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 2;
401 break;
402 }
403 if ( ( !statemate_FH_TUERMODUL__KL_50 ) &&
404 ( !statemate_FH_TUERMODUL__SFHZ_MEC &&
405 statemate_FH_TUERMODUL__SFHA_MEC ) ) {
406 statemate_stable = 0;
407 statemate_FH_TUERMODUL__SFHA_copy = 1;
408
409 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 2;
410 break;
411 }
412 if ( ( !statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
413 statemate_FH_TUERMODUL__SFHA_ZENTRAL &&
414 !statemate_FH_TUERMODUL__KL_50 ) ) {
415 statemate_stable = 0;
416 statemate_FH_TUERMODUL__SFHA_copy = 1;
417
418 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 1;
419 break;
420 }
421 if ( ( statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
422 statemate_FH_TUERMODUL__SFHA_ZENTRAL ) ) {
423 statemate_stable = 0;
424 statemate_FH_TUERMODUL__SFHA_copy = 1;
425 statemate_FH_TUERMODUL__SFHZ_copy = 1;
426
427 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 1;
428 break;
429 }
430 if ( ( statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
431 !statemate_FH_TUERMODUL__SFHA_ZENTRAL &&
432 !statemate_FH_TUERMODUL__KL_50 ) ) {
433 statemate_stable = 0;
434 statemate_FH_TUERMODUL__SFHZ_copy = 1;
435
436 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 1;
437 break;
438 }
439 break;
440 }
441 default: {
442 statemate_stable = 0;
443 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
444 break;
445 }
446 } /** switch statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state **/
447 }
448}
449
450
451void statemate_generic_FH_TUERMODUL_CTRL( void )
452{
453 if ( !SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX ) &&
454 SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_old_IDX ) &&
455 !SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX ) ) {
456 SYS_bit_clr( statemate_bitlist, entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX );
457 SYS_bit_clr( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_IDX );
458 }
459 if ( SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX ) ) {
460 if ( !SYS_bit_get( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX ) )
461 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
462 SYS_bit_clr( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
463 if ( !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) ) {
464 SYS_bit_clr( statemate_bitlist,
465 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
466 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
467 }
468 SYS_bit_clr( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
469 SYS_bit_set( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
470 SYS_bit_set( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
471 switch ( statemate_B_FH_TUERMODUL_CTRL_next_state ) {
472 case 1: { /** state ZAEHLER_WHSP_ZU_HOCH in chart FH_TUERMODUL_CTRL **/
473 if ( ( statemate_FH_TUERMODUL_CTRL__N == 59 &&
474 !( statemate_FH_TUERMODUL_CTRL__N_old == 59 ) ) ) {
475 statemate_stable = 0;
476
477 statemate_B_FH_TUERMODUL_CTRL_next_state = 3;
478 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
479 break;
480 }
481 break;
482 }
483 case 2: { /** state NICHT_INITIALISIERT in chart FH_TUERMODUL_CTRL **/
484 if ( ( ( statemate_FH_TUERMODUL__BLOCK &&
485 !( statemate_FH_TUERMODUL__BLOCK_old ) ) ) &&
486 ( ( statemate_FH_TUERMODUL__MFHZ ) ) ) {
487 statemate_stable = 0;
488 statemate_FH_TUERMODUL__MFHZ_copy = 0;
489 statemate_sc_FH_TUERMODUL_CTRL_2329_1 = statemate_time;
490
491 statemate_B_FH_TUERMODUL_CTRL_next_state = 3;
492 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
493 break;
494 }
495 switch ( statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state ) {
496 case 1: { /** state SCHLIESSEN in chart NICHT_INITIALISIERT **/
497 if ( !( statemate_FH_TUERMODUL__SFHZ ) ) {
498 statemate_stable = 0;
499 statemate_FH_TUERMODUL__MFHZ_copy = 0;
500
501 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
502 break;
503 }
504 break;
505 }
506 case 2: { /** state OEFFNEN in chart NICHT_INITIALISIERT **/
507 if ( !( statemate_FH_TUERMODUL__SFHA ) ) {
508 statemate_stable = 0;
509 statemate_FH_TUERMODUL__MFHA_copy = 0;
510
511 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
512 break;
513 }
514 break;
515 }
516 case 3: { /** state BEREIT in chart NICHT_INITIALISIERT **/
517 if ( ( statemate_FH_TUERMODUL__SFHA ) ) {
518 statemate_stable = 0;
519 statemate_FH_TUERMODUL__MFHA_copy = 1;
520
521 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 2;
522 break;
523 }
524 if ( ( statemate_FH_TUERMODUL__SFHZ ) ) {
525 statemate_stable = 0;
526 statemate_FH_TUERMODUL__MFHZ_copy = 1;
527
528 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 1;
529 break;
530 }
531 break;
532 }
533 default: {
534 statemate_stable = 0;
535 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
536 break;
537 }
538 } /** switch statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state **/
539 break;
540 }
541 case 3: { /** state INITIALISIERT in chart FH_TUERMODUL_CTRL **/
542 if ( ( ( statemate_FH_TUERMODUL_CTRL__N > 60 &&
543 !( statemate_FH_TUERMODUL_CTRL__N_old > 60 ) ) ) &&
544 ( ( !( statemate_FH_TUERMODUL_CTRL__INREVERS1 ||
545 statemate_FH_TUERMODUL_CTRL__INREVERS2 ) ) ) ) {
546 statemate_stable = 0;
547 statemate_FH_TUERMODUL__MFHZ_copy = 0;
548 statemate_FH_TUERMODUL__MFHA_copy = 0;
549
550 statemate_B_FH_TUERMODUL_CTRL_next_state = 1;
551 break;
552 }
553 if ( ( ( statemate_FH_TUERMODUL__BLOCK &&
554 !( statemate_FH_TUERMODUL__BLOCK_old ) ) ) &&
555 ( ( statemate_FH_TUERMODUL__MFHA ) ) ) {
556 statemate_stable = 0;
557 statemate_FH_TUERMODUL__MFHA_copy = 0;
558 statemate_sc_FH_TUERMODUL_CTRL_2375_2 = statemate_time;
559
560 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
561 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
562 break;
563 }
564 if ( ( ( statemate_FH_TUERMODUL__BLOCK &&
565 !( statemate_FH_TUERMODUL__BLOCK_old ) ) ) &&
566 ( ( statemate_FH_TUERMODUL__MFHZ ) ) ) {
567 statemate_stable = 0;
568 statemate_FH_TUERMODUL__MFHZ_copy = 0;
569 statemate_sc_FH_TUERMODUL_CTRL_2352_1 = statemate_time;
570
571 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
572 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
573 break;
574 }
575 switch ( statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state ) {
576 case 1: { /** state OEFFNEN in chart FH_TUERMODUL_CTRL **/
577 if ( ( statemate_FH_TUERMODUL__POSITION >= 405 ) ) {
578 statemate_stable = 0;
579 statemate_FH_TUERMODUL__MFHA_copy = 0;
580
581 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
582 break;
583 }
584 switch ( statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state ) {
585 case 1: { /** state TIPP_OEFFNEN in chart FH_TUERMODUL_CTRL **/
586 if ( ( statemate_FH_TUERMODUL__SFHZ &&
587 !( statemate_FH_TUERMODUL__SFHZ_old ) ) ||
588 ( statemate_FH_TUERMODUL__SFHA && !( statemate_FH_TUERMODUL__SFHA_old ) ) ) {
589 statemate_stable = 0;
590 statemate_FH_TUERMODUL__MFHA_copy = 0;
591
592 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
593 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 0;
594 break;
595 }
596 break;
597 }
598 case 2: { /** state MAN_OEFFNEN in chart FH_TUERMODUL_CTRL **/
599 if ( ( statemate_FH_TUERMODUL__SFHZ &&
600 !( statemate_FH_TUERMODUL__SFHZ_old ) ) ) {
601 statemate_stable = 0;
602
603 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 1;
604 break;
605 }
606 if ( ( !( statemate_FH_TUERMODUL__SFHA ) &&
607 statemate_FH_TUERMODUL__SFHA_old ) ) {
608 statemate_stable = 0;
609 statemate_FH_TUERMODUL__MFHA_copy = 0;
610
611 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
612 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 0;
613 break;
614 }
615 break;
616 }
617 default: {
618 statemate_stable = 0;
619 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 2;
620 break;
621 }
622 } /** switch statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state **/
623 break;
624 }
625 case 2: { /** state SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
626 if ( ( statemate_FH_TUERMODUL__POSITION <= 0 ) ) {
627 statemate_stable = 0;
628 statemate_FH_TUERMODUL__MFHZ_copy = 0;
629
630 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
631 break;
632 }
633 switch ( statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state ) {
634 case 1: { /** state TIPP_SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
635 if ( ( statemate_FH_TUERMODUL__SFHA &&
636 !( statemate_FH_TUERMODUL__SFHA_old ) ) ||
637 ( statemate_FH_TUERMODUL__SFHZ && !( statemate_FH_TUERMODUL__SFHZ_old ) ) ) {
638 statemate_stable = 0;
639 statemate_FH_TUERMODUL__MFHZ_copy = 0;
640
641 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
642 break;
643 }
644 switch ( statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state ) {
645 case 1: { /** state REVERSIEREN2 in chart FH_TUERMODUL_CTRL **/
646 SYS_bit_clr( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
647 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_IDX ) ) {
648 statemate_stable = 0;
649 statemate_FH_TUERMODUL__MFHZ_copy = 1;
650 statemate_FH_TUERMODUL_CTRL__INREVERS2_copy = 0;
651
652 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
653 statemate_FH_TUERMODUL__MFHA_copy = 0;
654
655 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
656 break;
657 }
658 break;
659 }
660 case 2: { /** state TIPP_SCHLIESSEN1 in chart FH_TUERMODUL_CTRL **/
661 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX ) ) {
662 statemate_stable = 0;
663 statemate_FH_TUERMODUL_CTRL__INREVERS2_copy = 1;
664
665 SYS_bit_set( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
666 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 1;
667 SYS_bit_clr( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
668 statemate_FH_TUERMODUL__MFHZ_copy = 0;
669
670 statemate_sc_FH_TUERMODUL_CTRL_1781_10 = statemate_time;
671 statemate_FH_TUERMODUL__MFHA_copy = 1;
672 break;
673 }
674 break;
675 }
676 default: {
677 statemate_stable = 0;
678 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
679 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
680 break;
681 }
682 } /** switch statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state **/
683 break;
684 }
685 case 2: { /** state MANUELL_SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
686 if ( ( !( statemate_FH_TUERMODUL__SFHZ ) &&
687 statemate_FH_TUERMODUL__SFHZ_old ) ) {
688 statemate_stable = 0;
689 statemate_FH_TUERMODUL__MFHZ_copy = 0;
690
691 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
692 break;
693 }
694 switch ( statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state ) {
695 case 1: { /** state REVERSIEREN1 in chart FH_TUERMODUL_CTRL **/
696 SYS_bit_clr( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
697 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_IDX ) ) {
698 statemate_stable = 0;
699 statemate_FH_TUERMODUL_CTRL__INREVERS1_copy = 0;
700
701 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
702 statemate_FH_TUERMODUL__MFHA_copy = 0;
703
704 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
705 statemate_FH_TUERMODUL__MFHZ_copy = 1;
706 break;
707 }
708 break;
709 }
710 case 2: { /** state MAN_SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
711 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX ) ) {
712 statemate_stable = 0;
713 statemate_FH_TUERMODUL__MFHZ_copy = 0;
714 statemate_FH_TUERMODUL_CTRL__INREVERS1_copy = 1;
715
716 SYS_bit_set( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
717 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 1;
718 SYS_bit_clr( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
719
720 statemate_sc_FH_TUERMODUL_CTRL_1739_10 = statemate_time;
721 statemate_FH_TUERMODUL__MFHA_copy = 1;
722 break;
723 }
724 if ( ( statemate_FH_TUERMODUL__SFHA &&
725 !( statemate_FH_TUERMODUL__SFHA_old ) ) ) {
726 statemate_stable = 0;
727
728 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 1;
729 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
730 break;
731 }
732 break;
733 }
734 default: {
735 statemate_stable = 0;
736 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
737 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
738 statemate_FH_TUERMODUL__MFHZ_copy = 1;
739 break;
740 }
741 } /** switch statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state **/
742 break;
743 }
744 default: {
745 statemate_stable = 0;
746 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
747 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
748 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
749 statemate_FH_TUERMODUL__MFHZ_copy = 1;
750 break;
751 }
752 } /** switch statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state **/
753 break;
754 }
755 case 3: { /** state BEREIT in chart FH_TUERMODUL_CTRL **/
756 if ( ( ( statemate_FH_TUERMODUL__SFHZ &&
757 !( statemate_FH_TUERMODUL__SFHZ_old ) ) ) &&
758 ( ( statemate_FH_TUERMODUL__POSITION > 0 ) ) ) {
759 statemate_stable = 0;
760
761 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 2;
762 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
763 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
764 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
765 statemate_FH_TUERMODUL__MFHZ_copy = 1;
766 break;
767 }
768 if ( ( ( statemate_FH_TUERMODUL__SFHA &&
769 !( statemate_FH_TUERMODUL__SFHA_old ) ) ) &&
770 ( ( statemate_FH_TUERMODUL__POSITION < 405 ) ) ) {
771 statemate_stable = 0;
772 statemate_FH_TUERMODUL__MFHA_copy = 1;
773
774 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 1;
775 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 2;
776 break;
777 }
778 break;
779 }
780 default: {
781 statemate_stable = 0;
782 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
783 break;
784 }
785 } /** switch statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state **/
786 break;
787 }
788 default: {
789 statemate_stable = 0;
790 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
791 break;
792 }
793 } /** switch statemate_B_FH_TUERMODUL_CTRL_next_state **/
794 switch ( statemate_A_FH_TUERMODUL_CTRL_next_state ) {
795 case 1: { /** state WIEDERHOLSPERRE in chart FH_TUERMODUL_CTRL **/
796 SYS_bit_clr( statemate_bitlist,
797 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
798 if ( ( statemate_step == 1 &&
799 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
800 != 0
801 && ( statemate_time -
802 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
803 ==
804 1 ) ) && ( ( statemate_FH_TUERMODUL__MFHZ ||
805 statemate_FH_TUERMODUL__MFHA ) ) ) {
806 statemate_stable = 0;
807 statemate_FH_TUERMODUL_CTRL__N = statemate_FH_TUERMODUL_CTRL__N + 1;
808
809 statemate_A_FH_TUERMODUL_CTRL_next_state = 1;
810 SYS_bit_set( statemate_bitlist,
811 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
812 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
813 break;
814 }
815 switch ( statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state ) {
816 case 1: { /** state WDHSP in chart FH_TUERMODUL_CTRL **/
817 if ( ( statemate_step == 1 &&
818 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL != 0 &&
819 ( statemate_time - statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL ==
820 3 ) ) &&
821 ( ( ( !( statemate_FH_TUERMODUL__MFHZ || statemate_FH_TUERMODUL__MFHA ) ) &&
822 statemate_FH_TUERMODUL_CTRL__N > 0 ) ) ) {
823 statemate_stable = 0;
824 statemate_FH_TUERMODUL_CTRL__N = statemate_FH_TUERMODUL_CTRL__N - 1;
825
826 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
827 break;
828 }
829 break;
830 }
831 default: {
832 statemate_stable = 0;
833 SYS_bit_set( statemate_bitlist,
834 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
835 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
836 break;
837 }
838 } /** switch statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state **/
839 break;
840 }
841 default: {
842 statemate_stable = 0;
843 statemate_FH_TUERMODUL_CTRL__N = 0;
844 statemate_A_FH_TUERMODUL_CTRL_next_state = 1;
845 SYS_bit_set( statemate_bitlist,
846 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
847 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
848 break;
849 }
850 } /** switch statemate_A_FH_TUERMODUL_CTRL_next_state **/
851 SYS_bit_cpy( statemate_bitlist,
852 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX,
853 statemate_bitlist, entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX );
854 SYS_bit_cpy( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_copy_IDX,
855 statemate_bitlist,
856 exited_BEREIT_FH_TUERMODUL_CTRL_IDX );
857 }
858}
859
860
861void statemate_generic_EINKLEMMSCHUTZ_CTRL( void )
862{
863 if ( SYS_bit_get( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_IDX ) ) {
864 switch ( statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state ) {
865 case 1: { /** state NORMALBETRIEB in chart EINKLEMMSCHUTZ_CTRL **/
866 if ( ( ( statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV &&
867 !( statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old ) ) ) &&
868 ( ( !( statemate_FH_TUERMODUL__SFHZ &&
869 statemate_FH_TUERMODUL__SFHA ) ) ) ) {
870 statemate_stable = 0;
871
872 SYS_bit_set( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX );
873 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 2;
874 break;
875 }
876 break;
877 }
878 case 2: { /** state EINKLEMMUNG in chart EINKLEMMSCHUTZ_CTRL **/
879 SYS_bit_clr( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX );
880 if ( ( !( statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV ) &&
881 statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old ) ) {
882 statemate_stable = 0;
883
884 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 1;
885 break;
886 }
887 break;
888 }
889 default: {
890 statemate_stable = 0;
891 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 1;
892 break;
893 }
894 } /** switch statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state **/
895 }
896}
897
898
899void statemate_generic_BLOCK_ERKENNUNG_CTRL( void )
900{
901 if ( !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) &&
902 SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_old_IDX ) &&
903 !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX ) )
904 SYS_bit_clr( statemate_bitlist,
905 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
906 if ( SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) ) {
907 switch ( statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state ) {
908 case 1: { /** state KEINE_BEWEGUNG in chart BLOCK_ERKENNUNG_CTRL **/
909 if ( ( statemate_FH_TUERMODUL__I_EIN != statemate_FH_TUERMODUL__I_EIN_old ) &&
910 ( ( statemate_FH_TUERMODUL__I_EIN > 0 ) ) ) {
911 statemate_stable = 0;
912 statemate_FH_TUERMODUL__BLOCK_copy = 0;
913
914 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 2;
915 statemate_BLOCK_ERKENNUNG_CTRL__N = 0;
916 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX = 2;
917 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 3;
918 SYS_bit_set( statemate_bitlist,
919 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
920 break;
921 }
922 break;
923 }
924 case 2: { /** state BEWEGUNG in chart BLOCK_ERKENNUNG_CTRL **/
925 if ( ( !( statemate_FH_TUERMODUL__MFHA ) &&
926 statemate_FH_TUERMODUL__MFHA_old ) ||
927 ( !( statemate_FH_TUERMODUL__MFHZ ) && statemate_FH_TUERMODUL__MFHZ_old ) ) {
928 statemate_stable = 0;
929
930 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
931 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 0;
932 break;
933 }
934 switch ( statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state ) {
935 case 1: { /** state FENSTER_BLOCKIERT in chart BLOCK_ERKENNUNG_CTRL **/
936 break;
937 }
938 case 2: { /** state FENSTER_BEWEGT_SICH in chart BLOCK_ERKENNUNG_CTRL **/
939 if ( ( statemate_FH_TUERMODUL__I_EIN >
940 ( statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX - 2 ) ) ) {
941 statemate_stable = 0;
942 statemate_FH_TUERMODUL__BLOCK_copy = 1;
943
944 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 1;
945 break;
946 }
947 break;
948 }
949 case 3: { /** state EINSCHALTSTROM_MESSEN in chart BLOCK_ERKENNUNG_CTRL **/
950 SYS_bit_clr( statemate_bitlist,
951 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
952 if ( ( statemate_BLOCK_ERKENNUNG_CTRL__N == 11 &&
953 !( statemate_BLOCK_ERKENNUNG_CTRL__N_old == 11 ) ) ) {
954 statemate_stable = 0;
955
956 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 2;
957 break;
958 }
959 /** static reactions: **/
960 if ( statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state == 3 ) {
961 if ( statemate_step == 1 &&
962 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
963 != 0 && ( statemate_time -
964 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
965 == 2 ) ) {
966 statemate_BLOCK_ERKENNUNG_CTRL__N = statemate_BLOCK_ERKENNUNG_CTRL__N + 1;
967 if ( ( statemate_FH_TUERMODUL__I_EIN >
968 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX ) )
969 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX = statemate_FH_TUERMODUL__I_EIN;
970
971 }
972 }
973 /** end static reactions **/
974 break;
975 }
976 default: {
977 statemate_stable = 0;
978 statemate_BLOCK_ERKENNUNG_CTRL__N = 0;
979 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX = 2;
980 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 3;
981 SYS_bit_set( statemate_bitlist,
982 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
983 break;
984 }
985 } /** switch statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state **/
986 break;
987 }
988 default: {
989 statemate_stable = 0;
990 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
991 break;
992 }
993 } /** switch statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state **/
994 }
995}
996
997
998void statemate_FH_DU( void )
999{
1000 statemate_time = 1; /**SYS_get_clock()**/
1001 statemate_stable = 0;
1002 statemate_step = 0;
1003 // patched for wcet: replacing while statement by for
1004 //while (!statemate_stable)
1005 int i;
1006 _Pragma( "loopbound min 100 max 100" )
1007 for ( i = 0; i < 100; i++ ) {
1008 statemate_stable = 1;
1009 statemate_step++;
1010 {
1011 switch ( statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state ) {
1012 case 1: { /** state SCHLIESSEN in chart FH_STEUERUNG_DUMMY **/
1013 if ( ( !( statemate_FH_DU__MFHZ ) && statemate_FH_DU__MFHZ_old ) ) {
1014 statemate_stable = 0;
1015 statemate_FH_DU__MFH = 0;
1016
1017 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 2;
1018 break;
1019 }
1020 break;
1021 }
1022 case 2: { /** state BEREIT in chart FH_STEUERUNG_DUMMY **/
1023 if ( ( statemate_FH_DU__MFHZ && !( statemate_FH_DU__MFHZ_old ) ) ) {
1024 statemate_stable = 0;
1025 statemate_FH_DU__MFH = -100;
1026
1027 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 1;
1028 break;
1029 }
1030 if ( ( statemate_FH_DU__MFHA && !( statemate_FH_DU__MFHA_old ) ) ) {
1031 statemate_stable = 0;
1032 statemate_FH_DU__MFH = 100;
1033
1034 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 3;
1035 break;
1036 }
1037 break;
1038 }
1039 case 3: { /** state OEFFNEN in chart FH_STEUERUNG_DUMMY **/
1040 if ( ( !( statemate_FH_DU__MFHA ) && statemate_FH_DU__MFHA_old ) ) {
1041 statemate_stable = 0;
1042 statemate_FH_DU__MFH = 0;
1043
1044 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 2;
1045 break;
1046 }
1047 break;
1048 }
1049 default: {
1050 statemate_stable = 0;
1051 statemate_FH_DU__MFH = 0;
1052 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 2;
1053 break;
1054 }
1055 } /** switch statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state **/
1056 }
1057 {
1058 {
1059 if ( !SYS_bit_get( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX ) )
1060 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
1061 SYS_bit_clr( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
1062 if ( !SYS_bit_get( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_IDX ) )
1063 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 1;
1064 SYS_bit_clr( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
1065 if ( !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) ) {
1066 SYS_bit_clr( statemate_bitlist,
1067 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
1068 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
1069 }
1070 SYS_bit_clr( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
1071 if ( !SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX ) ) {
1072 SYS_bit_clr( statemate_bitlist, entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX );
1073 SYS_bit_clr( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_IDX );
1074 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
1075 statemate_FH_TUERMODUL_CTRL__N = 0;
1076 statemate_A_FH_TUERMODUL_CTRL_next_state = 1;
1077 SYS_bit_set( statemate_bitlist,
1078 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
1079 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
1080 }
1081 SYS_bit_clr( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX );
1082 SYS_bit_set( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
1083 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
1084 SYS_bit_set( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
1085 SYS_bit_set( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX );
1086 /** static reactions: **/
1087 if ( statemate_FH_DU__S_FH_TMBFZUCAN != statemate_FH_DU__S_FH_TMBFZUCAN_old ) {
1088 if ( ( !statemate_FH_DU__DOOR_ID ) )
1089 statemate_FH_DU__S_FH_FTZU = statemate_FH_DU__S_FH_TMBFZUCAN;
1090
1091 }
1092 if ( statemate_FH_DU__S_FH_TMBFZUDISC !=
1093 statemate_FH_DU__S_FH_TMBFZUDISC_old ) {
1094 if ( statemate_FH_DU__DOOR_ID )
1095 statemate_FH_DU__S_FH_TMBFZUCAN = statemate_FH_DU__S_FH_TMBFZUDISC;
1096
1097 }
1098 if ( statemate_FH_DU__S_FH_TMBFAUFCAN !=
1099 statemate_FH_DU__S_FH_TMBFAUFCAN_old ) {
1100 if ( ( !statemate_FH_DU__DOOR_ID ) )
1101 statemate_FH_DU__S_FH_FTAUF = statemate_FH_DU__S_FH_TMBFAUFCAN;
1102
1103 }
1104 if ( statemate_FH_DU__S_FH_TMBFAUFDISC !=
1105 statemate_FH_DU__S_FH_TMBFAUFDISC_old ) {
1106 if ( statemate_FH_DU__DOOR_ID )
1107 statemate_FH_DU__S_FH_TMBFAUFCAN = statemate_FH_DU__S_FH_TMBFAUFDISC;
1108
1109 }
1110 /** end static reactions **/
1111 }
1112 }
1113 SYS_bit_cpy( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX,
1114 statemate_bitlist,
1115 active_KINDERSICHERUNG_CTRL_old_IDX );
1116 SYS_bit_cpy( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX, statemate_bitlist,
1117 active_FH_TUERMODUL_CTRL_old_IDX );
1118 SYS_bit_cpy( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_IDX,
1119 statemate_bitlist,
1120 active_EINKLEMMSCHUTZ_CTRL_old_IDX );
1121 SYS_bit_cpy( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX,
1122 statemate_bitlist,
1123 active_BLOCK_ERKENNUNG_CTRL_old_IDX );
1124 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1125 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1126 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1127 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1128
1129 statemate_generic_KINDERSICHERUNG_CTRL();
1130
1131 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1132 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1133 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1134 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1135 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1136 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1137 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1138 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1139 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1140 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1141 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1142 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1143
1144 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1145 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1146 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1147 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1148
1149 statemate_generic_FH_TUERMODUL_CTRL();
1150
1151 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1152 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1153 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1154 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1155 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1156 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1157 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1158 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1159 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1160 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1161 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1162 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1163
1164 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1165 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1166 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1167 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1168
1169 statemate_generic_EINKLEMMSCHUTZ_CTRL();
1170
1171 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1172 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1173 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1174 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1175 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1176 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1177 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1178 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1179 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1180 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1181 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1182 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1183
1184 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1185 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1186 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1187 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1188
1189 statemate_generic_BLOCK_ERKENNUNG_CTRL();
1190
1191 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1192 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1193 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1194 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1195 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1196 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1197 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1198 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1199 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1200 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1201 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1202 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1203
1204 SYS_bit_cpy( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX,
1205 statemate_bitlist,
1206 active_KINDERSICHERUNG_CTRL_IDX );
1207 SYS_bit_cpy( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX,
1208 statemate_bitlist,
1209 active_FH_TUERMODUL_CTRL_IDX );
1210 SYS_bit_cpy( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX,
1211 statemate_bitlist,
1212 active_EINKLEMMSCHUTZ_CTRL_IDX );
1213 SYS_bit_cpy( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX,
1214 statemate_bitlist,
1215 active_BLOCK_ERKENNUNG_CTRL_IDX );
1216 statemate_FH_TUERMODUL_CTRL__N_old = statemate_FH_TUERMODUL_CTRL__N;
1217 statemate_FH_TUERMODUL__I_EIN_old = statemate_FH_TUERMODUL__I_EIN;
1218 statemate_FH_DU__MFH = statemate_FH_DU__MFH_copy;
1219 statemate_FH_DU__I_EIN_old = statemate_FH_DU__I_EIN;
1220 statemate_BLOCK_ERKENNUNG_CTRL__N_old = statemate_BLOCK_ERKENNUNG_CTRL__N;
1221 statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1222 statemate_FH_TUERMODUL__SFHZ_MEC_old = statemate_FH_TUERMODUL__SFHZ_MEC;
1223 statemate_FH_TUERMODUL__SFHA_ZENTRAL_old = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1224 statemate_FH_TUERMODUL__SFHA_MEC_old = statemate_FH_TUERMODUL__SFHA_MEC;
1225 statemate_FH_TUERMODUL__BLOCK = statemate_FH_TUERMODUL__BLOCK_copy;
1226 statemate_FH_TUERMODUL__BLOCK_old = statemate_FH_TUERMODUL__BLOCK;
1227 statemate_FH_TUERMODUL__SFHZ = statemate_FH_TUERMODUL__SFHZ_copy;
1228 statemate_FH_TUERMODUL__SFHZ_old = statemate_FH_TUERMODUL__SFHZ;
1229 statemate_FH_TUERMODUL__SFHA = statemate_FH_TUERMODUL__SFHA_copy;
1230 statemate_FH_TUERMODUL__SFHA_old = statemate_FH_TUERMODUL__SFHA;
1231 statemate_FH_TUERMODUL__MFHZ = statemate_FH_TUERMODUL__MFHZ_copy;
1232 statemate_FH_TUERMODUL__MFHZ_old = statemate_FH_TUERMODUL__MFHZ;
1233 statemate_FH_TUERMODUL__MFHA = statemate_FH_TUERMODUL__MFHA_copy;
1234 statemate_FH_TUERMODUL__MFHA_old = statemate_FH_TUERMODUL__MFHA;
1235 statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old =
1236 statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1237 statemate_FH_DU__EKS_LEISTE_AKTIV_old = statemate_FH_DU__EKS_LEISTE_AKTIV;
1238 statemate_FH_DU__S_FH_TMBFAUFCAN_old = statemate_FH_DU__S_FH_TMBFAUFCAN;
1239 statemate_FH_DU__S_FH_TMBFZUCAN_old = statemate_FH_DU__S_FH_TMBFZUCAN;
1240 statemate_FH_DU__S_FH_TMBFZUDISC_old = statemate_FH_DU__S_FH_TMBFZUDISC;
1241 statemate_FH_DU__S_FH_TMBFAUFDISC_old = statemate_FH_DU__S_FH_TMBFAUFDISC;
1242 statemate_FH_DU__BLOCK = statemate_FH_DU__BLOCK_copy;
1243 statemate_FH_DU__BLOCK_old = statemate_FH_DU__BLOCK;
1244 statemate_FH_DU__MFHZ = statemate_FH_DU__MFHZ_copy;
1245 statemate_FH_DU__MFHZ_old = statemate_FH_DU__MFHZ;
1246 statemate_FH_DU__MFHA = statemate_FH_DU__MFHA_copy;
1247 statemate_FH_DU__MFHA_old = statemate_FH_DU__MFHA;
1248
1249 } /** while(!statemate_stable) **/
1250
1251} /** statemate_FH_DU **/
1252
1253
1254/*
1255 Main functions
1256*/
1257
1258int statemate_return()
1259{
1260 unsigned long int checksum = 0;
1261 int index;
1262 for ( index=63 ; index>=0 ; index-- ){
1263 checksum += (unsigned long) (statemate_bitlist[index] << index);
1264 }
1265 return(checksum == 18446744073709551614ul);
1266}
1267
1268void _Pragma ( "entrypoint" ) statemate_main( void )
1269{
1270 statemate_FH_DU();
1271}
1272
1273
1274int main ( int argc, char **argv )
1275{
1276 SET_UP
1277 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
1278 START_LOOP
1279 statemate_init();
1280 statemate_main();
1281 STOP_LOOP
1282 }
1283 WRITE_TO_FILE
1284
1285 return statemate_return();
1286}
diff --git a/all_pairs/source/susan/ChangeLog.txt b/all_pairs/source/susan/ChangeLog.txt
new file mode 100644
index 0000000..bb603df
--- /dev/null
+++ b/all_pairs/source/susan/ChangeLog.txt
@@ -0,0 +1,11 @@
12017-07-04
2 - Removed self-assignment to avoid clangs self-assign warning.
3 - Introduced susan_initm susan_main and susan_return.
4 - Fix possible division by zero to please tacle-lint.
5 - Removed unused variables.
6 - Added prefix 'susan_'.
7 - Removed exit_on_error function.
8 - Removed PowerPC specific typedef.
9
102017-08-18:
11 - Give explicit name to former anonymous struct to silence g++ warnings.
diff --git a/all_pairs/source/susan/LICENSE b/all_pairs/source/susan/LICENSE
new file mode 100644
index 0000000..18d5124
--- /dev/null
+++ b/all_pairs/source/susan/LICENSE
@@ -0,0 +1,14 @@
1This code is issued for research purposes only and remains the
2property of the UK Secretary of State for Defence. This code must
3not be passed on without this header information being kept
4intact. This code must not be sold.
5
6A UK patent has been granted: "Method for digitally processing
7images to determine the position of edges and/or corners therein for
8guidance of unmanned vehicle", UK Patent 2272285. Proprietor:
9Secretary of State for Defence, UK. 15 January 1997
10
11
12Source Code obtained from:
13
14http://www.fmrib.ox.ac.uk/~steve/susan/index.html
diff --git a/all_pairs/source/susan/input.c b/all_pairs/source/susan/input.c
new file mode 100644
index 0000000..4e6ba40
--- /dev/null
+++ b/all_pairs/source/susan/input.c
@@ -0,0 +1,7292 @@
1char susan_input[7292] = { 80,
253,
310,
435,
532,
667,
782,
869,
965,
1084,
1179,
1282,
1358,
1432,
1588,
1686,
1732,
1886,
19101,
20114,
21115,
22105,
23111,
24110,
2532,
2651,
2746,
2849,
2948,
3097,
3132,
3232,
3382,
34101,
35118,
3658,
3732,
3849,
3950,
4047,
4150,
4257,
4347,
4457,
4552,
4632,
4740,
4880,
4978,
5071,
5132,
52112,
5397,
54116,
5599,
56104,
5732,
5849,
5946,
6050,
6141,
6210,
6355,
6454,
6532,
6657,
6753,
6810,
6950,
7053,
7153,
7210,
7335,
7436,
7536,
7636,
7736,
7838,
7938,
8036,
8137,
8237,
8337,
8438,
8538,
8636,
8734,
8838,
8940,
9041,
9142,
9240,
9338,
9436,
9536,
9635,
9736,
9835,
9932,
10035,
10138,
10242,
10342,
10438,
10536,
10636,
10736,
10837,
10936,
11035,
11133,
11233,
11333,
11432,
11531,
11633,
11736,
11839,
11940,
12036,
12136,
12234,
12334,
12436,
12538,
12639,
12737,
12836,
12936,
13035,
13136,
13239,
13339,
13437,
13537,
13639,
13737,
13838,
13939,
14040,
14138,
14237,
14337,
14433,
14533,
14632,
14733,
14834,
14935,
15035,
15136,
15236,
15336,
15437,
15538,
15637,
15738,
15838,
15939,
16041,
16141,
16240,
16340,
16443,
16542,
16641,
16740,
16839,
16938,
17035,
17133,
17235,
17335,
17437,
17539,
17638,
17737,
17836,
17938,
18036,
18136,
18234,
18334,
18438,
18539,
18639,
18737,
18836,
18936,
19034,
19133,
19234,
19333,
19435,
19533,
19636,
19735,
19835,
19936,
20036,
20137,
20233,
20332,
20436,
20538,
20638,
20738,
20839,
20939,
21038,
21139,
21237,
21335,
21436,
21534,
21635,
21736,
21837,
21939,
22038,
22137,
22234,
22331,
22434,
22535,
22635,
22735,
22835,
22936,
23038,
23139,
23239,
23337,
23438,
23538,
23640,
23739,
23840,
23941,
24043,
24144,
24242,
24340,
24439,
24538,
24642,
24742,
24839,
24939,
25036,
25133,
25233,
25334,
25436,
25536,
25635,
25733,
25833,
25935,
26037,
26136,
26234,
26334,
26431,
26530,
26632,
26736,
26842,
26943,
27043,
27140,
27236,
27336,
27436,
27535,
27634,
27735,
27833,
27933,
28030,
28132,
28234,
28335,
28435,
28535,
28636,
28735,
28837,
28934,
29034,
29135,
29236,
29337,
29437,
29535,
29636,
29737,
29839,
29939,
30038,
30135,
30235,
30335,
30435,
30535,
30636,
30738,
30837,
30938,
31038,
31136,
31235,
31335,
31436,
31535,
31635,
31735,
31835,
31934,
32034,
32136,
32236,
32338,
32440,
32538,
32637,
32736,
32834,
32934,
33035,
33135,
33236,
33337,
33437,
33538,
33638,
33739,
33839,
33936,
34035,
34136,
34235,
34337,
34436,
34538,
34639,
34737,
34838,
34934,
35033,
35132,
35233,
35332,
35428,
35534,
35640,
35745,
35844,
35940,
36038,
36134,
36230,
36330,
36433,
36540,
36645,
36743,
36841,
36937,
37037,
37137,
37236,
37333,
37431,
37532,
37631,
37735,
37835,
37935,
38035,
38135,
38238,
38339,
38439,
38540,
38639,
38737,
38837,
38937,
39035,
39135,
39237,
39337,
39436,
39537,
39637,
39737,
39838,
39937,
40038,
40137,
40237,
40335,
40435,
40534,
40635,
40735,
40835,
40936,
41039,
41145,
41243,
41338,
41439,
41538,
41636,
41736,
41836,
41935,
42037,
42139,
42238,
42337,
42437,
42537,
42639,
42738,
42837,
42937,
43035,
43134,
43234,
43337,
43439,
43536,
43637,
43738,
43839,
43940,
44041,
44139,
44236,
44338,
44439,
44539,
44639,
44736,
44833,
44932,
45030,
45130,
45231,
45335,
45435,
45535,
45635,
45735,
45839,
45940,
46038,
46137,
46240,
46339,
46438,
46539,
46639,
46739,
46838,
46939,
47039,
47140,
47240,
47339,
47441,
47539,
47641,
47739,
47838,
47939,
48038,
48138,
48236,
48335,
48436,
48535,
48637,
48738,
48838,
48938,
49040,
49138,
49239,
49339,
49436,
49536,
49633,
49734,
49836,
49935,
50037,
50138,
50239,
50339,
50438,
50536,
50632,
50732,
50835,
50938,
51038,
51139,
51238,
51335,
51435,
51534,
51637,
51739,
51838,
51936,
52035,
52135,
52233,
52331,
52430,
52532,
52636,
52737,
52838,
52935,
53035,
53135,
53235,
53335,
53439,
53541,
53642,
53738,
53833,
53931,
54033,
54137,
54236,
54337,
54438,
54537,
54637,
54738,
54839,
54938,
55038,
55138,
55238,
55337,
55438,
55538,
55639,
55741,
55841,
55937,
56039,
56140,
56242,
56344,
56443,
56539,
56642,
56748,
56845,
56941,
57039,
57138,
57238,
57338,
57438,
57536,
57637,
57738,
57839,
57939,
58039,
58143,
58241,
58338,
58437,
58537,
58638,
58736,
58834,
58934,
59034,
59138,
59241,
59341,
59438,
59535,
59635,
59734,
59835,
59932,
60030,
60131,
60233,
60334,
60435,
60535,
60635,
60735,
60835,
60935,
61039,
61136,
61235,
61338,
61441,
61538,
61632,
61734,
61838,
61934,
62038,
62140,
62239,
62339,
62436,
62536,
62639,
62738,
62839,
62937,
63038,
63138,
63236,
63336,
63435,
63537,
63638,
63739,
63838,
63936,
64038,
64137,
64235,
64331,
64435,
64537,
64640,
64739,
64835,
64935,
65036,
65134,
65236,
65336,
65438,
65537,
65638,
65737,
65837,
65936,
66037,
66138,
66237,
66336,
66435,
66534,
66634,
66734,
66837,
66936,
67037,
67136,
67234,
67336,
67436,
67534,
67631,
67730,
67833,
67932,
68033,
68135,
68235,
68335,
68435,
68534,
68627,
68733,
68839,
68942,
69041,
69142,
69244,
69345,
69442,
69539,
69641,
69741,
69842,
69943,
70042,
70141,
70240,
70338,
70437,
70535,
70637,
70736,
70836,
70936,
71037,
71136,
71236,
71337,
71437,
71539,
71643,
71743,
71843,
71942,
72039,
72139,
72239,
72339,
72440,
72539,
72638,
72735,
72834,
72936,
73037,
73136,
73237,
73338,
73438,
73537,
73636,
73735,
73835,
73933,
74035,
74138,
74238,
74339,
74441,
74539,
74638,
74737,
74838,
74938,
75036,
75137,
75236,
75337,
75437,
75536,
75636,
75735,
75835,
75935,
76035,
76136,
76242,
76340,
76441,
76543,
76642,
76739,
76837,
76937,
77037,
77137,
77239,
77339,
77438,
77537,
77635,
77737,
77836,
77935,
78036,
78136,
78239,
78339,
78436,
78536,
78634,
78737,
78840,
78940,
79040,
79139,
79241,
79340,
79439,
79539,
79639,
79740,
79838,
79936,
80034,
80135,
80237,
80334,
80436,
80535,
80635,
80734,
80833,
80936,
81036,
81138,
81239,
81338,
81437,
81534,
81634,
81733,
81834,
81935,
82036,
82136,
82235,
82336,
82435,
82538,
82639,
82739,
82840,
82938,
83037,
83136,
83236,
83335,
83435,
83535,
83635,
83736,
83836,
83942,
84045,
84144,
84243,
84340,
84438,
84537,
84636,
84737,
84837,
84938,
85038,
85138,
85238,
85336,
85435,
85535,
85634,
85734,
85836,
85938,
86036,
86135,
86238,
86337,
86437,
86538,
86638,
86737,
86838,
86936,
87033,
87135,
87237,
87337,
87438,
87538,
87641,
87741,
87841,
87938,
88035,
88133,
88230,
88329,
88432,
88537,
88639,
88739,
88838,
88939,
89038,
89135,
89234,
89335,
89435,
89535,
89635,
89734,
89835,
89936,
90036,
90137,
90238,
90338,
90438,
90536,
90635,
90733,
90834,
90935,
91035,
91135,
91235,
91336,
91436,
91532,
91633,
91736,
91838,
91940,
92042,
92142,
92239,
92340,
92441,
92543,
92642,
92736,
92833,
92932,
93033,
93132,
93235,
93337,
93441,
93541,
93639,
93740,
93837,
93936,
94038,
94139,
94241,
94340,
94440,
94541,
94639,
94737,
94837,
94936,
95037,
95137,
95236,
95335,
95437,
95537,
95639,
95741,
95841,
95943,
96041,
96140,
96240,
96337,
96437,
96538,
96638,
96738,
96838,
96938,
97036,
97138,
97237,
97336,
97439,
97541,
97641,
97742,
97841,
97939,
98038,
98138,
98236,
98337,
98437,
98535,
98635,
98735,
98836,
98936,
99033,
99135,
99237,
99334,
99435,
99535,
99635,
99739,
99838,
99939,
100041,
100143,
100243,
100343,
100442,
100539,
100638,
100739,
100837,
100937,
101038,
101137,
101236,
101338,
101438,
101540,
101638,
101739,
101839,
101936,
102035,
102134,
102233,
102334,
102436,
102537,
102638,
102737,
102837,
102937,
103036,
103134,
103234,
103333,
103434,
103535,
103638,
103741,
103838,
103936,
104037,
104137,
104237,
104337,
104439,
104541,
104640,
104741,
104842,
104941,
105040,
105141,
105241,
105339,
105440,
105540,
105639,
105737,
105837,
105936,
106038,
106135,
106235,
106335,
106436,
106537,
106645,
106742,
106840,
106944,
107045,
107142,
107243,
107342,
107442,
107545,
107647,
107749,
107851,
107950,
108051,
108150,
108249,
108345,
108445,
108545,
108643,
108742,
108842,
108943,
109041,
109139,
109240,
109340,
109440,
109539,
109638,
109740,
109840,
109939,
110039,
110139,
110238,
110335,
110433,
110537,
110641,
110742,
110839,
110937,
111037,
111137,
111238,
111338,
111436,
111537,
111635,
111733,
111832,
111933,
112034,
112135,
112235,
112338,
112439,
112537,
112638,
112736,
112835,
112937,
113038,
113139,
113242,
113341,
113438,
113536,
113634,
113735,
113835,
113935,
114035,
114136,
114239,
114338,
114436,
114537,
114637,
114737,
114836,
114940,
115042,
115143,
115247,
115349,
115448,
115547,
115644,
115743,
115847,
115952,
116055,
116152,
116247,
116344,
116442,
116542,
116642,
116740,
116840,
116939,
117038,
117137,
117237,
117339,
117438,
117538,
117638,
117736,
117833,
117931,
118034,
118135,
118238,
118339,
118438,
118537,
118638,
118738,
118837,
118938,
119037,
119142,
119246,
119345,
119442,
119539,
119639,
119738,
119834,
119936,
120039,
120139,
120237,
120335,
120436,
120534,
120637,
120737,
120836,
120936,
121039,
121141,
121242,
121335,
121435,
121535,
121635,
121736,
121840,
121940,
122038,
122139,
122239,
122336,
122436,
122538,
122639,
122742,
122846,
122949,
123050,
123152,
123252,
123351,
123451,
123552,
123654,
123751,
123850,
123951,
124052,
124151,
124247,
124347,
124446,
124547,
124645,
124743,
124843,
124943,
125043,
125143,
125242,
125341,
125441,
125540,
125640,
125742,
125846,
125944,
126041,
126137,
126236,
126337,
126439,
126539,
126638,
126738,
126839,
126938,
127038,
127139,
127237,
127335,
127435,
127538,
127638,
127738,
127836,
127935,
128035,
128137,
128235,
128336,
128438,
128536,
128638,
128738,
128839,
128935,
129035,
129135,
129236,
129336,
129439,
129539,
129640,
129740,
129839,
129937,
130038,
130141,
130239,
130343,
130446,
130547,
130649,
130749,
130849,
130948,
131048,
131151,
131252,
131352,
131453,
131553,
131652,
131751,
131852,
131950,
132048,
132149,
132248,
132346,
132447,
132547,
132644,
132742,
132843,
132944,
133043,
133145,
133248,
133346,
133445,
133544,
133642,
133743,
133846,
133945,
134044,
134142,
134241,
134338,
134439,
134538,
134637,
134736,
134835,
134937,
135035,
135137,
135236,
135333,
135431,
135532,
135638,
135743,
135842,
135941,
136039,
136137,
136238,
136337,
136437,
136535,
136635,
136736,
136836,
136936,
137038,
137138,
137236,
137337,
137439,
137538,
137639,
137738,
137839,
137942,
138047,
138149,
138246,
138346,
138447,
138547,
138646,
138747,
138849,
138948,
139048,
139149,
139251,
139350,
139449,
139550,
139651,
139748,
139846,
139946,
140047,
140148,
140247,
140345,
140443,
140542,
140644,
140745,
140847,
140949,
141051,
141151,
141251,
141349,
141447,
141548,
141647,
141749,
141846,
141944,
142040,
142139,
142240,
142340,
142439,
142538,
142640,
142738,
142839,
142940,
143039,
143137,
143236,
143335,
143433,
143535,
143634,
143732,
143833,
143934,
144038,
144135,
144236,
144336,
144436,
144536,
144635,
144736,
144838,
144936,
145037,
145137,
145237,
145338,
145438,
145539,
145643,
145746,
145851,
145952,
146050,
146150,
146248,
146350,
146449,
146549,
146650,
146748,
146850,
146950,
147049,
147149,
147251,
147354,
147454,
147551,
147651,
147749,
147847,
147948,
148052,
148153,
148251,
148349,
148446,
148546,
148643,
148746,
148845,
148947,
149050,
149149,
149247,
149347,
149446,
149545,
149648,
149748,
149845,
149943,
150044,
150143,
150243,
150342,
150441,
150539,
150639,
150739,
150837,
150937,
151034,
151134,
151232,
151333,
151435,
151536,
151639,
151735,
151836,
151936,
152036,
152136,
152240,
152339,
152436,
152536,
152635,
152734,
152833,
152932,
153037,
153143,
153251,
153356,
153454,
153555,
153656,
153755,
153852,
153950,
154049,
154146,
154246,
154345,
154447,
154549,
154651,
154754,
154854,
154951,
155049,
155150,
155250,
155348,
155447,
155545,
155646,
155747,
155850,
155950,
156048,
156143,
156242,
156342,
156443,
156545,
156647,
156747,
156848,
156950,
157049,
157147,
157247,
157348,
157449,
157547,
157648,
157748,
157847,
157947,
158045,
158144,
158242,
158339,
158438,
158538,
158638,
158742,
158841,
158941,
159039,
159136,
159235,
159335,
159435,
159536,
159636,
159736,
159834,
159937,
160037,
160135,
160236,
160336,
160435,
160536,
160637,
160738,
160841,
160950,
161067,
161182,
161284,
161380,
161480,
161576,
161675,
161774,
161871,
161964,
162061,
162158,
162254,
162353,
162454,
162556,
162656,
162753,
162851,
162951,
163049,
163147,
163249,
163349,
163448,
163548,
163647,
163747,
163848,
163948,
164047,
164145,
164246,
164347,
164446,
164546,
164645,
164741,
164842,
164944,
165044,
165145,
165245,
165348,
165447,
165544,
165642,
165737,
165835,
165934,
166032,
166133,
166237,
166340,
166437,
166537,
166636,
166736,
166837,
166935,
167035,
167136,
167236,
167336,
167437,
167535,
167637,
167737,
167837,
167935,
168035,
168135,
168237,
168340,
168441,
168546,
168658,
168785,
1688119,
1689-119,
1690-123,
1691123,
1692115,
1693109,
1694110,
1695109,
1696107,
1697102,
169895,
169993,
170088,
170186,
170286,
170386,
170486,
170583,
170677,
170768,
170864,
170959,
171058,
171161,
171261,
171361,
171458,
171556,
171651,
171749,
171851,
171951,
172050,
172150,
172245,
172337,
172441,
172547,
172650,
172750,
172853,
172952,
173049,
173148,
173245,
173343,
173442,
173539,
173638,
173736,
173838,
173939,
174039,
174139,
174238,
174337,
174436,
174535,
174635,
174735,
174836,
174936,
175034,
175136,
175236,
175338,
175439,
175538,
175637,
175739,
175841,
175943,
176047,
176156,
176279,
1763121,
1764-106,
1765-110,
1766-108,
1767-99,
1768-102,
1769-100,
1770-99,
1771-101,
1772-103,
1773-102,
1774-106,
1775-108,
1776-110,
1777-111,
1778-111,
1779-115,
1780-117,
1781-120,
1782-123,
1783-123,
1784-125,
1785-128,
1786127,
1787124,
1788118,
1789114,
1790119,
1791113,
1792104,
179399,
1794100,
1795100,
179697,
179789,
179883,
179979,
180076,
180173,
180269,
180360,
180452,
180548,
180647,
180745,
180846,
180940,
181037,
181138,
181238,
181342,
181445,
181543,
181642,
181742,
181839,
181938,
182039,
182135,
182235,
182336,
182436,
182536,
182637,
182737,
182840,
182942,
183042,
183140,
183239,
183338,
183440,
183543,
183649,
183760,
183883,
1839126,
1840-105,
1841-98,
1842-93,
1843-97,
1844-94,
1845-93,
1846-90,
1847-88,
1848-91,
1849-94,
1850-91,
1851-90,
1852-93,
1853-94,
1854-94,
1855-96,
1856-94,
1857-94,
1858-96,
1859-95,
1860-93,
1861-96,
1862-100,
1863-104,
1864-104,
1865-105,
1866-108,
1867-110,
1868-115,
1869-119,
1870-120,
1871-122,
1872-125,
1873127,
1874122,
1875118,
1876115,
1877118,
1878113,
187997,
188078,
188159,
188245,
188348,
188446,
188540,
188638,
188738,
188837,
188938,
189038,
189135,
189237,
189337,
189434,
189532,
189632,
189735,
189836,
189936,
190036,
190136,
190238,
190339,
190438,
190537,
190638,
190735,
190834,
190936,
191035,
191137,
191241,
191351,
191477,
1915120,
1916-100,
1917-91,
1918-96,
1919-95,
1920-93,
1921-92,
1922-89,
1923-90,
1924-92,
1925-92,
1926-93,
1927-93,
1928-91,
1929-90,
1930-91,
1931-94,
1932-94,
1933-94,
1934-93,
1935-92,
1936-93,
1937-95,
1938-95,
1939-93,
1940-94,
1941-94,
1942-91,
1943-92,
1944-94,
1945-93,
1946-91,
1947-92,
1948-91,
1949-92,
1950-96,
1951-97,
1952-99,
1953-105,
1954-112,
1955126,
195695,
195763,
195843,
195947,
196042,
196138,
196238,
196336,
196436,
196536,
196638,
196737,
196837,
196937,
197036,
197137,
197238,
197335,
197436,
197536,
197636,
197736,
197839,
197939,
198039,
198141,
198238,
198333,
198435,
198537,
198639,
198745,
198851,
198958,
199080,
1991121,
1992-104,
1993-94,
1994-93,
1995-92,
1996-94,
1997-94,
1998-91,
1999-89,
2000-89,
2001-88,
2002-86,
2003-86,
2004-88,
2005-87,
2006-88,
2007-90,
2008-90,
2009-91,
2010-91,
2011-89,
2012-87,
2013-90,
2014-92,
2015-92,
2016-90,
2017-91,
2018-91,
2019-89,
2020-89,
2021-90,
2022-92,
2023-93,
2024-91,
2025-90,
2026-91,
2027-90,
2028-91,
2029-91,
2030-100,
2031-128,
203288,
203354,
203444,
203547,
203648,
203746,
203843,
203941,
204036,
204137,
204240,
204338,
204440,
204538,
204638,
204737,
204839,
204935,
205036,
205136,
205236,
205336,
205438,
205541,
205639,
205737,
205835,
205932,
206034,
206136,
206238,
206342,
206447,
206557,
206682,
2067118,
2068-105,
2069-88,
2070-86,
2071-84,
2072-88,
2073-91,
2074-91,
2075-91,
2076-92,
2077-91,
2078-89,
2079-90,
2080-89,
2081-87,
2082-88,
2083-88,
2084-89,
2085-89,
2086-91,
2087-91,
2088-91,
2089-92,
2090-93,
2091-92,
2092-93,
2093-97,
2094-93,
2095-93,
2096-93,
2097-92,
2098-92,
2099-94,
2100-94,
2101-92,
2102-94,
2103-94,
2104-91,
2105-91,
2106-98,
2107-122,
210896,
210963,
211053,
211149,
211244,
211342,
211442,
211541,
211638,
211736,
211837,
211936,
212037,
212138,
212239,
212338,
212440,
212535,
212636,
212736,
212836,
212936,
213034,
213136,
213235,
213337,
213439,
213540,
213643,
213741,
213841,
213944,
214048,
214156,
214283,
2143-127,
2144-99,
2145-89,
2146-88,
2147-87,
2148-88,
2149-89,
2150-87,
2151-89,
2152-90,
2153-90,
2154-89,
2155-91,
2156-91,
2157-89,
2158-87,
2159-88,
2160-87,
2161-89,
2162-88,
2163-89,
2164-88,
2165-90,
2166-89,
2167-87,
2168-88,
2169-92,
2170-91,
2171-88,
2172-89,
2173-88,
2174-87,
2175-89,
2176-91,
2177-93,
2178-95,
2179-97,
2180-94,
2181-93,
2182-99,
2183-125,
218491,
218559,
218645,
218745,
218847,
218943,
219042,
219139,
219236,
219336,
219436,
219540,
219638,
219739,
219839,
219937,
220036,
220136,
220236,
220336,
220436,
220536,
220634,
220737,
220838,
220939,
221040,
221143,
221243,
221343,
221443,
221540,
221643,
221756,
221887,
2219-127,
2220-100,
2221-94,
2222-95,
2223-91,
2224-88,
2225-90,
2226-89,
2227-90,
2228-92,
2229-88,
2230-88,
2231-90,
2232-88,
2233-90,
2234-90,
2235-89,
2236-89,
2237-91,
2238-91,
2239-92,
2240-92,
2241-91,
2242-90,
2243-89,
2244-89,
2245-92,
2246-90,
2247-90,
2248-92,
2249-91,
2250-89,
2251-90,
2252-91,
2253-91,
2254-95,
2255-94,
2256-92,
2257-93,
2258-99,
2259-124,
226092,
226161,
226248,
226347,
226449,
226545,
226644,
226741,
226838,
226937,
227037,
227138,
227234,
227335,
227435,
227535,
227635,
227736,
227836,
227936,
228036,
228136,
228240,
228339,
228436,
228534,
228635,
228735,
228837,
228937,
229040,
229149,
229256,
229362,
229489,
2295-124,
2296-99,
2297-93,
2298-88,
2299-88,
2300-92,
2301-90,
2302-87,
2303-88,
2304-89,
2305-87,
2306-88,
2307-89,
2308-88,
2309-87,
2310-88,
2311-89,
2312-89,
2313-87,
2314-88,
2315-88,
2316-87,
2317-89,
2318-92,
2319-91,
2320-92,
2321-92,
2322-91,
2323-91,
2324-90,
2325-89,
2326-89,
2327-89,
2328-90,
2329-92,
2330-93,
2331-91,
2332-87,
2333-86,
2334-96,
2335-127,
233690,
233760,
233845,
233944,
234043,
234136,
234236,
234337,
234439,
234538,
234640,
234740,
234837,
234936,
235036,
235133,
235235,
235336,
235436,
235536,
235636,
235736,
235834,
235934,
236034,
236133,
236234,
236334,
236435,
236537,
236640,
236742,
236841,
236950,
237080,
2371-127,
2372-96,
2373-92,
2374-89,
2375-85,
2376-88,
2377-91,
2378-88,
2379-88,
2380-89,
2381-87,
2382-90,
2383-90,
2384-89,
2385-89,
2386-90,
2387-91,
2388-90,
2389-89,
2390-87,
2391-86,
2392-87,
2393-89,
2394-90,
2395-91,
2396-93,
2397-93,
2398-93,
2399-91,
2400-91,
2401-90,
2402-90,
2403-91,
2404-92,
2405-91,
2406-92,
2407-89,
2408-87,
2409-88,
2410-96,
2411-123,
241296,
241365,
241448,
241547,
241645,
241738,
241837,
241937,
242037,
242137,
242239,
242339,
242437,
242538,
242636,
242735,
242835,
242936,
243036,
243136,
243236,
243336,
243440,
243541,
243640,
243741,
243842,
243942,
244041,
244139,
244239,
244345,
244453,
244566,
2446100,
2447-111,
2448-86,
2449-86,
2450-87,
2451-80,
2452-86,
2453-92,
2454-88,
2455-86,
2456-87,
2457-84,
2458-83,
2459-86,
2460-86,
2461-85,
2462-85,
2463-86,
2464-84,
2465-84,
2466-88,
2467-90,
2468-87,
2469-88,
2470-88,
2471-88,
2472-88,
2473-90,
2474-89,
2475-89,
2476-89,
2477-89,
2478-89,
2479-88,
2480-87,
2481-88,
2482-90,
2483-87,
2484-88,
2485-90,
2486-98,
2487-127,
248893,
248969,
249050,
249150,
249251,
249343,
249444,
249543,
249641,
249737,
249837,
249940,
250038,
250138,
250237,
250336,
250438,
250536,
250636,
250736,
250836,
250936,
251036,
251138,
251239,
251340,
251439,
251540,
251639,
251742,
251846,
251949,
252052,
252162,
252290,
2523-123,
2524-101,
2525-100,
2526-98,
2527-94,
2528-90,
2529-88,
2530-87,
2531-89,
2532-90,
2533-89,
2534-88,
2535-88,
2536-87,
2537-86,
2538-87,
2539-86,
2540-86,
2541-87,
2542-85,
2543-85,
2544-88,
2545-89,
2546-88,
2547-89,
2548-88,
2549-89,
2550-90,
2551-89,
2552-90,
2553-90,
2554-91,
2555-90,
2556-89,
2557-91,
2558-91,
2559-91,
2560-90,
2561-92,
2562-99,
2563-126,
256493,
256561,
256645,
256749,
256848,
256943,
257041,
257138,
257237,
257336,
257438,
257538,
257637,
257736,
257835,
257935,
258039,
258136,
258236,
258336,
258436,
258537,
258641,
258742,
258840,
258941,
259041,
259138,
259240,
259342,
259442,
259545,
259650,
259761,
259891,
2599-121,
2600-94,
2601-93,
2602-96,
2603-94,
2604-94,
2605-93,
2606-91,
2607-91,
2608-93,
2609-90,
2610-88,
2611-92,
2612-90,
2613-87,
2614-87,
2615-89,
2616-88,
2617-87,
2618-89,
2619-89,
2620-90,
2621-93,
2622-96,
2623-94,
2624-91,
2625-89,
2626-88,
2627-88,
2628-90,
2629-90,
2630-89,
2631-91,
2632-92,
2633-93,
2634-91,
2635-91,
2636-92,
2637-91,
2638-101,
2639122,
264084,
264160,
264248,
264352,
264446,
264534,
264636,
264736,
264837,
264934,
265034,
265137,
265234,
265332,
265433,
265534,
265637,
265736,
265836,
265936,
266037,
266137,
266236,
266339,
266439,
266541,
266640,
266741,
266840,
266939,
267042,
267144,
267249,
267362,
267492,
2675-124,
2676-96,
2677-84,
2678-81,
2679-86,
2680-87,
2681-89,
2682-90,
2683-91,
2684-92,
2685-90,
2686-88,
2687-89,
2688-91,
2689-90,
2690-89,
2691-89,
2692-89,
2693-90,
2694-89,
2695-86,
2696-88,
2697-89,
2698-89,
2699-90,
2700-88,
2701-90,
2702-91,
2703-91,
2704-92,
2705-92,
2706-92,
2707-91,
2708-91,
2709-93,
2710-95,
2711-94,
2712-93,
2713-93,
2714-101,
2715125,
271686,
271761,
271847,
271947,
272049,
272145,
272244,
272344,
272443,
272544,
272645,
272744,
272842,
272941,
273038,
273135,
273238,
273337,
273437,
273537,
273637,
273737,
273839,
273940,
274040,
274142,
274244,
274342,
274443,
274547,
274645,
274744,
274850,
274966,
275099,
2751-111,
2752-93,
2753-97,
2754-96,
2755-92,
2756-89,
2757-89,
2758-89,
2759-87,
2760-88,
2761-86,
2762-87,
2763-90,
2764-88,
2765-88,
2766-88,
2767-87,
2768-87,
2769-88,
2770-91,
2771-93,
2772-91,
2773-92,
2774-89,
2775-86,
2776-84,
2777-83,
2778-83,
2779-87,
2780-90,
2781-91,
2782-90,
2783-91,
2784-92,
2785-93,
2786-94,
2787-97,
2788-96,
2789-97,
2790-107,
2791119,
279279,
279353,
279439,
279539,
279638,
279737,
279840,
279938,
280038,
280137,
280238,
280340,
280441,
280539,
280638,
280736,
280836,
280937,
281037,
281137,
281237,
281337,
281440,
281539,
281640,
281740,
281840,
281940,
282038,
282139,
282243,
282344,
282448,
282559,
282695,
2827-121,
2828-103,
2829-96,
2830-95,
2831-97,
2832-94,
2833-92,
2834-90,
2835-90,
2836-90,
2837-88,
2838-85,
2839-88,
2840-89,
2841-88,
2842-89,
2843-91,
2844-92,
2845-92,
2846-91,
2847-90,
2848-88,
2849-88,
2850-88,
2851-90,
2852-91,
2853-92,
2854-91,
2855-89,
2856-93,
2857-93,
2858-92,
2859-92,
2860-91,
2861-93,
2862-94,
2863-94,
2864-94,
2865-93,
2866-105,
2867118,
286879,
286952,
287038,
287136,
287240,
287341,
287441,
287542,
287639,
287738,
287840,
287940,
288039,
288139,
288239,
288337,
288438,
288537,
288637,
288737,
288837,
288937,
289041,
289142,
289240,
289341,
289443,
289543,
289645,
289743,
289842,
289943,
290047,
290162,
290295,
2903-120,
2904-93,
2905-92,
2906-96,
2907-92,
2908-94,
2909-92,
2910-91,
2911-88,
2912-88,
2913-89,
2914-90,
2915-91,
2916-88,
2917-88,
2918-89,
2919-88,
2920-91,
2921-93,
2922-92,
2923-91,
2924-90,
2925-89,
2926-90,
2927-89,
2928-91,
2929-90,
2930-90,
2931-94,
2932-95,
2933-95,
2934-94,
2935-91,
2936-87,
2937-83,
2938-87,
2939-88,
2940-89,
2941-94,
2942-106,
2943117,
294479,
294560,
294651,
294745,
294840,
294937,
295038,
295138,
295236,
295334,
295433,
295534,
295634,
295733,
295835,
295937,
296036,
296137,
296237,
296337,
296437,
296537,
296636,
296740,
296838,
296939,
297040,
297141,
297238,
297340,
297443,
297548,
297652,
297762,
297896,
2979-120,
2980-103,
2981-99,
2982-94,
2983-95,
2984-93,
2985-92,
2986-90,
2987-89,
2988-90,
2989-91,
2990-90,
2991-92,
2992-95,
2993-95,
2994-94,
2995-94,
2996-92,
2997-92,
2998-93,
2999-93,
3000-92,
3001-91,
3002-90,
3003-92,
3004-94,
3005-93,
3006-92,
3007-89,
3008-91,
3009-89,
3010-87,
3011-88,
3012-91,
3013-97,
3014-98,
3015-95,
3016-94,
3017-94,
3018-104,
3019123,
302086,
302161,
302248,
302346,
302447,
302540,
302638,
302737,
302834,
302936,
303035,
303139,
303241,
303340,
303439,
303537,
303637,
303737,
303837,
303937,
304037,
304137,
304239,
304339,
304440,
304539,
304640,
304742,
304841,
304940,
305043,
305142,
305243,
305352,
305485,
3055125,
3056-106,
3057-92,
3058-98,
3059-96,
3060-84,
3061-82,
3062-87,
3063-86,
3064-85,
3065-86,
3066-86,
3067-90,
3068-88,
3069-88,
3070-87,
3071-87,
3072-92,
3073-93,
3074-93,
3075-93,
3076-90,
3077-91,
3078-92,
3079-89,
3080-89,
3081-89,
3082-89,
3083-91,
3084-91,
3085-93,
3086-93,
3087-94,
3088-93,
3089-92,
3090-94,
3091-94,
3092-91,
3093-92,
3094-100,
3095123,
309679,
309757,
309847,
309945,
310047,
310140,
310237,
310336,
310435,
310538,
310637,
310739,
310840,
310938,
311039,
311136,
311235,
311337,
311437,
311537,
311637,
311737,
311841,
311938,
312033,
312131,
312237,
312344,
312444,
312544,
312646,
312748,
312852,
312964,
313096,
3131-117,
3132-98,
3133-103,
3134-99,
3135-97,
3136-96,
3137-97,
3138-97,
3139-94,
3140-89,
3141-85,
3142-90,
3143-91,
3144-89,
3145-89,
3146-89,
3147-88,
3148-87,
3149-86,
3150-90,
3151-92,
3152-91,
3153-93,
3154-91,
3155-92,
3156-92,
3157-91,
3158-93,
3159-92,
3160-92,
3161-92,
3162-91,
3163-94,
3164-94,
3165-94,
3166-95,
3167-93,
3168-98,
3169-102,
3170-110,
3171117,
317283,
317355,
317440,
317546,
317648,
317744,
317842,
317939,
318040,
318137,
318239,
318340,
318438,
318538,
318638,
318739,
318842,
318937,
319037,
319137,
319237,
319338,
319439,
319540,
319641,
319741,
319841,
319941,
320040,
320142,
320246,
320347,
320452,
320565,
3206102,
3207-114,
3208-102,
3209-97,
3210-100,
3211-95,
3212-83,
3213-88,
3214-91,
3215-89,
3216-91,
3217-91,
3218-89,
3219-89,
3220-88,
3221-90,
3222-89,
3223-88,
3224-88,
3225-88,
3226-89,
3227-92,
3228-90,
3229-90,
3230-90,
3231-90,
3232-92,
3233-94,
3234-95,
3235-94,
3236-93,
3237-92,
3238-90,
3239-90,
3240-92,
3241-92,
3242-94,
3243-92,
3244-92,
3245-96,
3246-108,
3247116,
324876,
324957,
325050,
325147,
325242,
325338,
325441,
325542,
325641,
325737,
325836,
325937,
326036,
326136,
326237,
326335,
326435,
326537,
326637,
326737,
326837,
326938,
327039,
327140,
327241,
327339,
327441,
327540,
327636,
327734,
327837,
327939,
328042,
328161,
3282100,
3283-113,
3284-90,
3285-97,
3286-96,
3287-90,
3288-87,
3289-88,
3290-90,
3291-91,
3292-93,
3293-89,
3294-91,
3295-91,
3296-90,
3297-90,
3298-91,
3299-91,
3300-89,
3301-87,
3302-90,
3303-91,
3304-89,
3305-90,
3306-89,
3307-90,
3308-90,
3309-92,
3310-92,
3311-92,
3312-91,
3313-91,
3314-89,
3315-90,
3316-92,
3317-90,
3318-92,
3319-93,
3320-93,
3321-96,
3322-107,
3323119,
332481,
332548,
332637,
332740,
332844,
332945,
333041,
333140,
333238,
333336,
333437,
333538,
333637,
333737,
333837,
333936,
334035,
334137,
334237,
334337,
334437,
334539,
334647,
334750,
334845,
334940,
335041,
335140,
335241,
335342,
335444,
335548,
335653,
335764,
335898,
3359-116,
3360-95,
3361-96,
3362-97,
3363-87,
3364-83,
3365-87,
3366-87,
3367-88,
3368-87,
3369-86,
3370-86,
3371-87,
3372-91,
3373-95,
3374-94,
3375-92,
3376-88,
3377-89,
3378-90,
3379-90,
3380-88,
3381-87,
3382-88,
3383-90,
3384-94,
3385-92,
3386-93,
3387-91,
3388-89,
3389-89,
3390-87,
3391-86,
3392-87,
3393-90,
3394-92,
3395-92,
3396-91,
3397-92,
3398-100,
3399125,
340079,
340152,
340251,
340354,
340450,
340547,
340647,
340747,
340846,
340945,
341046,
341144,
341240,
341336,
341434,
341534,
341634,
341737,
341837,
341937,
342037,
342138,
342241,
342342,
342442,
342539,
342639,
342737,
342835,
342939,
343046,
343152,
343253,
343368,
3434101,
3435-119,
3436-101,
3437-101,
3438-101,
3439-93,
3440-90,
3441-89,
3442-88,
3443-88,
3444-88,
3445-85,
3446-89,
3447-90,
3448-89,
3449-91,
3450-93,
3451-92,
3452-90,
3453-90,
3454-90,
3455-91,
3456-91,
3457-90,
3458-91,
3459-93,
3460-91,
3461-92,
3462-92,
3463-89,
3464-90,
3465-91,
3466-92,
3467-95,
3468-95,
3469-94,
3470-95,
3471-95,
3472-96,
3473-97,
3474-110,
3475116,
347681,
347754,
347848,
347952,
348051,
348149,
348245,
348347,
348446,
348543,
348644,
348743,
348838,
348935,
349035,
349134,
349236,
349337,
349437,
349537,
349637,
349739,
349843,
349943,
350041,
350140,
350242,
350341,
350441,
350540,
350640,
350744,
350850,
350968,
3510106,
3511-112,
3512-93,
3513-93,
3514-95,
3515-92,
3516-94,
3517-93,
3518-90,
3519-89,
3520-90,
3521-88,
3522-90,
3523-89,
3524-88,
3525-89,
3526-89,
3527-89,
3528-86,
3529-88,
3530-91,
3531-92,
3532-92,
3533-91,
3534-92,
3535-91,
3536-91,
3537-92,
3538-91,
3539-92,
3540-90,
3541-90,
3542-91,
3543-88,
3544-87,
3545-90,
3546-92,
3547-91,
3548-91,
3549-92,
3550-104,
3551121,
355280,
355354,
355443,
355545,
355646,
355741,
355841,
355940,
356038,
356138,
356238,
356337,
356437,
356537,
356637,
356739,
356840,
356937,
357037,
357137,
357237,
357337,
357439,
357539,
357640,
357738,
357840,
357941,
358040,
358141,
358243,
358346,
358452,
358569,
3586105,
3587-112,
3588-92,
3589-95,
3590-94,
3591-90,
3592-94,
3593-94,
3594-92,
3595-91,
3596-90,
3597-91,
3598-90,
3599-90,
3600-90,
3601-90,
3602-89,
3603-88,
3604-89,
3605-90,
3606-90,
3607-93,
3608-94,
3609-93,
3610-92,
3611-91,
3612-91,
3613-92,
3614-94,
3615-91,
3616-91,
3617-89,
3618-89,
3619-93,
3620-95,
3621-96,
3622-97,
3623-96,
3624-96,
3625-96,
3626-106,
3627121,
362886,
362954,
363047,
363153,
363250,
363348,
363443,
363540,
363639,
363737,
363840,
363940,
364038,
364138,
364236,
364337,
364437,
364537,
364637,
364737,
364837,
364937,
365039,
365138,
365238,
365338,
365438,
365537,
365637,
365739,
365841,
365942,
366045,
366162,
3662104,
3663-112,
3664-93,
3665-87,
3666-91,
3667-92,
3668-92,
3669-91,
3670-89,
3671-91,
3672-89,
3673-90,
3674-88,
3675-86,
3676-88,
3677-90,
3678-91,
3679-91,
3680-90,
3681-91,
3682-91,
3683-91,
3684-90,
3685-89,
3686-90,
3687-89,
3688-90,
3689-93,
3690-91,
3691-92,
3692-92,
3693-91,
3694-92,
3695-91,
3696-91,
3697-94,
3698-94,
3699-92,
3700-93,
3701-92,
3702-103,
3703124,
370492,
370565,
370649,
370747,
370845,
370939,
371040,
371140,
371240,
371337,
371437,
371537,
371637,
371741,
371841,
371938,
372038,
372137,
372237,
372337,
372437,
372538,
372646,
372742,
372842,
372940,
373041,
373141,
373237,
373339,
373443,
373549,
373659,
373778,
3738112,
3739-105,
3740-88,
3741-94,
3742-93,
3743-96,
3744-95,
3745-92,
3746-90,
3747-88,
3748-90,
3749-91,
3750-90,
3751-88,
3752-89,
3753-90,
3754-89,
3755-90,
3756-91,
3757-90,
3758-91,
3759-93,
3760-93,
3761-92,
3762-92,
3763-91,
3764-91,
3765-90,
3766-92,
3767-92,
3768-92,
3769-93,
3770-92,
3771-92,
3772-92,
3773-94,
3774-94,
3775-94,
3776-94,
3777-93,
3778-107,
3779116,
378077,
378148,
378243,
378347,
378443,
378541,
378640,
378739,
378838,
378938,
379042,
379140,
379238,
379337,
379434,
379534,
379634,
379736,
379837,
379937,
380037,
380137,
380241,
380341,
380438,
380538,
380639,
380740,
380839,
380939,
381040,
381140,
381245,
381363,
3814102,
3815-117,
3816-98,
3817-92,
3818-88,
3819-87,
3820-91,
3821-90,
3822-89,
3823-90,
3824-91,
3825-93,
3826-90,
3827-83,
3828-85,
3829-87,
3830-88,
3831-90,
3832-91,
3833-93,
3834-92,
3835-93,
3836-91,
3837-89,
3838-89,
3839-89,
3840-91,
3841-94,
3842-92,
3843-91,
3844-90,
3845-92,
3846-92,
3847-92,
3848-93,
3849-91,
3850-89,
3851-90,
3852-89,
3853-87,
3854-99,
3855126,
385686,
385754,
385843,
385945,
386046,
386142,
386240,
386338,
386436,
386534,
386634,
386736,
386834,
386935,
387034,
387135,
387236,
387336,
387437,
387537,
387637,
387738,
387843,
387940,
388038,
388138,
388240,
388341,
388440,
388541,
388641,
388742,
388850,
388974,
3890113,
3891-113,
3892-98,
3893-95,
3894-88,
3895-88,
3896-90,
3897-91,
3898-90,
3899-90,
3900-92,
3901-91,
3902-88,
3903-86,
3904-87,
3905-86,
3906-86,
3907-89,
3908-91,
3909-92,
3910-92,
3911-91,
3912-88,
3913-90,
3914-93,
3915-95,
3916-97,
3917-97,
3918-95,
3919-94,
3920-93,
3921-92,
3922-92,
3923-92,
3924-93,
3925-94,
3926-94,
3927-96,
3928-95,
3929-96,
3930-111,
3931111,
393273,
393342,
393439,
393550,
393645,
393741,
393840,
393938,
394038,
394139,
394241,
394338,
394435,
394535,
394633,
394730,
394828,
394936,
395037,
395137,
395237,
395337,
395437,
395540,
395638,
395740,
395841,
395941,
396043,
396142,
396240,
396342,
396449,
396574,
3966119,
3967-100,
3968-88,
3969-94,
3970-93,
3971-90,
3972-94,
3973-94,
3974-91,
3975-89,
3976-89,
3977-90,
3978-89,
3979-88,
3980-93,
3981-94,
3982-91,
3983-89,
3984-87,
3985-90,
3986-96,
3987-98,
3988-96,
3989-94,
3990-94,
3991-92,
3992-92,
3993-92,
3994-89,
3995-88,
3996-89,
3997-91,
3998-90,
3999-89,
4000-88,
4001-86,
4002-87,
4003-90,
4004-93,
4005-95,
4006-110,
4007113,
400879,
400959,
401052,
401143,
401238,
401338,
401438,
401541,
401641,
401739,
401841,
401942,
402041,
402140,
402240,
402340,
402439,
402537,
402637,
402737,
402837,
402937,
403039,
403138,
403240,
403340,
403442,
403540,
403641,
403743,
403847,
403950,
404053,
404174,
4042112,
4043-114,
4044-99,
4045-95,
4046-92,
4047-94,
4048-95,
4049-95,
4050-92,
4051-90,
4052-91,
4053-88,
4054-85,
4055-89,
4056-88,
4057-87,
4058-88,
4059-89,
4060-89,
4061-91,
4062-91,
4063-90,
4064-88,
4065-91,
4066-94,
4067-93,
4068-93,
4069-93,
4070-94,
4071-93,
4072-91,
4073-90,
4074-90,
4075-92,
4076-93,
4077-94,
4078-92,
4079-94,
4080-94,
4081-95,
4082-110,
4083113,
408478,
408552,
408646,
408749,
408845,
408943,
409042,
409143,
409241,
409339,
409441,
409540,
409638,
409738,
409835,
409937,
410039,
410137,
410237,
410337,
410437,
410537,
410635,
410738,
410838,
410941,
411042,
411139,
411242,
411343,
411444,
411546,
411655,
411780,
4118119,
4119-108,
4120-99,
4121-95,
4122-91,
4123-90,
4124-95,
4125-95,
4126-92,
4127-90,
4128-94,
4129-94,
4130-89,
4131-88,
4132-92,
4133-91,
4134-91,
4135-93,
4136-93,
4137-93,
4138-93,
4139-91,
4140-89,
4141-90,
4142-93,
4143-91,
4144-89,
4145-88,
4146-89,
4147-88,
4148-89,
4149-92,
4150-93,
4151-93,
4152-93,
4153-92,
4154-92,
4155-95,
4156-95,
4157-97,
4158-113,
4159108,
416067,
416148,
416246,
416341,
416441,
416542,
416639,
416739,
416837,
416936,
417038,
417138,
417236,
417337,
417439,
417538,
417639,
417737,
417837,
417937,
418037,
418136,
418232,
418334,
418436,
418538,
418638,
418738,
418838,
418941,
419042,
419144,
419250,
419367,
4194115,
4195-98,
4196-89,
4197-94,
4198-93,
4199-87,
4200-86,
4201-91,
4202-90,
4203-92,
4204-93,
4205-92,
4206-89,
4207-91,
4208-92,
4209-90,
4210-92,
4211-92,
4212-91,
4213-90,
4214-90,
4215-89,
4216-87,
4217-90,
4218-93,
4219-92,
4220-92,
4221-95,
4222-94,
4223-94,
4224-93,
4225-91,
4226-92,
4227-94,
4228-95,
4229-96,
4230-93,
4231-93,
4232-92,
4233-95,
4234-112,
4235107,
423673,
423756,
423845,
423945,
424044,
424141,
424241,
424339,
424438,
424537,
424639,
424739,
424837,
424938,
425037,
425139,
425241,
425337,
425437,
425537,
425637,
425737,
425840,
425939,
426041,
426142,
426242,
426339,
426439,
426543,
426647,
426749,
426856,
426976,
4270112,
4271-112,
4272-102,
4273-90,
4274-78,
4275-88,
4276-93,
4277-92,
4278-92,
4279-90,
4280-89,
4281-91,
4282-88,
4283-86,
4284-90,
4285-88,
4286-87,
4287-89,
4288-91,
4289-90,
4290-90,
4291-89,
4292-90,
4293-90,
4294-88,
4295-90,
4296-89,
4297-89,
4298-89,
4299-87,
4300-90,
4301-91,
4302-90,
4303-90,
4304-88,
4305-90,
4306-92,
4307-93,
4308-93,
4309-97,
4310-112,
4311108,
431271,
431352,
431448,
431551,
431648,
431745,
431840,
431940,
432041,
432142,
432242,
432341,
432439,
432541,
432642,
432739,
432837,
432937,
433037,
433137,
433237,
433337,
433438,
433539,
433640,
433740,
433840,
433940,
434042,
434145,
434246,
434345,
434451,
434572,
4346121,
4347-98,
4348-99,
4349-100,
4350-95,
4351-93,
4352-96,
4353-95,
4354-93,
4355-90,
4356-90,
4357-87,
4358-89,
4359-89,
4360-90,
4361-89,
4362-90,
4363-90,
4364-89,
4365-92,
4366-94,
4367-90,
4368-91,
4369-91,
4370-91,
4371-90,
4372-89,
4373-90,
4374-88,
4375-90,
4376-92,
4377-91,
4378-92,
4379-93,
4380-94,
4381-96,
4382-94,
4383-94,
4384-95,
4385-97,
4386-113,
4387106,
438871,
438952,
439048,
439146,
439245,
439345,
439441,
439537,
439633,
439733,
439835,
439935,
440037,
440138,
440237,
440336,
440435,
440537,
440637,
440737,
440837,
440937,
441037,
441137,
441238,
441339,
441439,
441539,
441640,
441742,
441840,
441942,
442050,
442173,
4422114,
4423-107,
4424-96,
4425-100,
4426-97,
4427-100,
4428-103,
4429-101,
4430-97,
4431-92,
4432-89,
4433-89,
4434-87,
4435-85,
4436-88,
4437-89,
4438-87,
4439-87,
4440-88,
4441-88,
4442-89,
4443-91,
4444-92,
4445-89,
4446-86,
4447-86,
4448-84,
4449-86,
4450-86,
4451-90,
4452-94,
4453-94,
4454-93,
4455-93,
4456-94,
4457-94,
4458-93,
4459-92,
4460-94,
4461-99,
4462-115,
4463106,
446472,
446560,
446659,
446757,
446855,
446948,
447042,
447139,
447237,
447337,
447439,
447537,
447637,
447738,
447837,
447935,
448033,
448137,
448237,
448337,
448437,
448538,
448645,
448743,
448842,
448939,
449036,
449135,
449234,
449338,
449440,
449542,
449650,
449776,
4498115,
4499-110,
4500-97,
4501-89,
4502-88,
4503-92,
4504-95,
4505-94,
4506-91,
4507-90,
4508-88,
4509-86,
4510-87,
4511-88,
4512-87,
4513-86,
4514-88,
4515-88,
4516-88,
4517-91,
4518-90,
4519-89,
4520-90,
4521-89,
4522-89,
4523-91,
4524-90,
4525-91,
4526-90,
4527-91,
4528-93,
4529-93,
4530-93,
4531-95,
4532-97,
4533-96,
4534-92,
4535-94,
4536-97,
4537-100,
4538-118,
4539106,
454072,
454154,
454250,
454348,
454447,
454546,
454644,
454740,
454836,
454938,
455040,
455142,
455241,
455340,
455438,
455536,
455638,
455737,
455837,
455937,
456037,
456137,
456239,
456341,
456441,
456541,
456640,
456741,
456845,
456947,
457047,
457146,
457253,
457377,
4574119,
4575-102,
4576-90,
4577-94,
4578-89,
4579-88,
4580-94,
4581-90,
4582-87,
4583-86,
4584-85,
4585-87,
4586-87,
4587-85,
4588-86,
4589-86,
4590-87,
4591-88,
4592-90,
4593-90,
4594-91,
4595-91,
4596-91,
4597-93,
4598-91,
4599-91,
4600-92,
4601-93,
4602-93,
4603-92,
4604-94,
4605-93,
4606-90,
4607-91,
4608-92,
4609-92,
4610-91,
4611-94,
4612-96,
4613-95,
4614-105,
4615114,
461674,
461757,
461851,
461950,
462053,
462147,
462242,
462339,
462437,
462541,
462646,
462746,
462843,
462940,
463035,
463131,
463229,
463337,
463437,
463537,
463637,
463738,
463839,
463937,
464038,
464139,
464240,
464341,
464440,
464543,
464646,
464748,
464857,
464989,
4650-126,
4651-102,
4652-97,
4653-96,
4654-93,
4655-96,
4656-92,
4657-89,
4658-89,
4659-91,
4660-94,
4661-90,
4662-91,
4663-90,
4664-88,
4665-88,
4666-90,
4667-90,
4668-90,
4669-92,
4670-93,
4671-93,
4672-92,
4673-90,
4674-89,
4675-90,
4676-89,
4677-91,
4678-93,
4679-91,
4680-92,
4681-93,
4682-92,
4683-94,
4684-95,
4685-92,
4686-92,
4687-95,
4688-99,
4689-100,
4690-116,
4691103,
469270,
469354,
469452,
469554,
469649,
469746,
469843,
469940,
470036,
470135,
470239,
470341,
470437,
470538,
470638,
470738,
470837,
470937,
471037,
471137,
471238,
471338,
471442,
471543,
471641,
471741,
471841,
471945,
472045,
472144,
472244,
472346,
472456,
472586,
4726119,
4727-113,
4728-96,
4729-91,
4730-78,
4731-83,
4732-90,
4733-90,
4734-90,
4735-89,
4736-91,
4737-92,
4738-92,
4739-90,
4740-88,
4741-89,
4742-91,
4743-91,
4744-90,
4745-89,
4746-89,
4747-88,
4748-88,
4749-90,
4750-90,
4751-92,
4752-92,
4753-92,
4754-90,
4755-90,
4756-94,
4757-93,
4758-91,
4759-91,
4760-92,
4761-94,
4762-91,
4763-90,
4764-95,
4765-100,
4766-121,
476791,
476858,
476949,
477049,
477147,
477245,
477344,
477444,
477543,
477641,
477740,
477840,
477937,
478035,
478135,
478236,
478335,
478434,
478537,
478637,
478738,
478838,
478938,
479042,
479138,
479237,
479338,
479437,
479537,
479640,
479745,
479845,
479944,
480054,
480184,
4802123,
4803-106,
4804-96,
4805-95,
4806-96,
4807-99,
4808-97,
4809-96,
4810-92,
4811-91,
4812-92,
4813-91,
4814-92,
4815-95,
4816-94,
4817-93,
4818-92,
4819-91,
4820-89,
4821-91,
4822-92,
4823-91,
4824-91,
4825-92,
4826-94,
4827-92,
4828-88,
4829-89,
4830-91,
4831-91,
4832-93,
4833-94,
4834-92,
4835-93,
4836-92,
4837-93,
4838-92,
4839-94,
4840-95,
4841-97,
4842-118,
484395,
484455,
484533,
484634,
484737,
484837,
484934,
485033,
485133,
485231,
485334,
485436,
485536,
485634,
485735,
485836,
485937,
486038,
486137,
486237,
486338,
486438,
486538,
486640,
486740,
486842,
486943,
487043,
487141,
487241,
487340,
487443,
487543,
487650,
487777,
4878116,
4879-110,
4880-84,
4881-81,
4882-87,
4883-91,
4884-94,
4885-91,
4886-88,
4887-88,
4888-89,
4889-88,
4890-88,
4891-88,
4892-85,
4893-88,
4894-89,
4895-88,
4896-88,
4897-89,
4898-92,
4899-91,
4900-93,
4901-92,
4902-92,
4903-94,
4904-94,
4905-93,
4906-93,
4907-94,
4908-96,
4909-95,
4910-91,
4911-89,
4912-88,
4913-91,
4914-92,
4915-94,
4916-98,
4917-100,
4918-122,
491991,
492057,
492143,
492246,
492341,
492433,
492536,
492636,
492738,
492839,
492939,
493038,
493133,
493233,
493334,
493434,
493534,
493635,
493737,
493838,
493938,
494038,
494139,
494244,
494343,
494444,
494545,
494644,
494740,
494840,
494942,
495040,
495146,
495260,
495393,
4954-127,
4955-103,
4956-88,
4957-87,
4958-94,
4959-93,
4960-96,
4961-97,
4962-94,
4963-89,
4964-90,
4965-89,
4966-88,
4967-90,
4968-90,
4969-91,
4970-92,
4971-90,
4972-90,
4973-91,
4974-93,
4975-94,
4976-94,
4977-94,
4978-94,
4979-93,
4980-91,
4981-94,
4982-96,
4983-95,
4984-98,
4985-97,
4986-94,
4987-94,
4988-95,
4989-99,
4990-98,
4991-95,
4992-95,
4993-101,
4994-121,
499595,
499658,
499742,
499839,
499944,
500044,
500139,
500237,
500341,
500442,
500541,
500641,
500737,
500833,
500933,
501032,
501133,
501233,
501337,
501438,
501538,
501638,
501738,
501839,
501941,
502044,
502144,
502247,
502346,
502444,
502541,
502639,
502740,
502852,
502985,
5030127,
5031-102,
5032-88,
5033-82,
5034-87,
5035-92,
5036-94,
5037-91,
5038-90,
5039-91,
5040-92,
5041-91,
5042-89,
5043-91,
5044-92,
5045-91,
5046-89,
5047-87,
5048-86,
5049-89,
5050-91,
5051-92,
5052-93,
5053-93,
5054-92,
5055-95,
5056-98,
5057-95,
5058-90,
5059-87,
5060-90,
5061-92,
5062-93,
5063-94,
5064-98,
5065-99,
5066-97,
5067-97,
5068-96,
5069-98,
5070-114,
5071106,
507265,
507340,
507442,
507541,
507639,
507741,
507841,
507943,
508046,
508145,
508243,
508340,
508438,
508539,
508640,
508740,
508839,
508937,
509038,
509138,
509238,
509338,
509434,
509537,
509639,
509742,
509842,
509941,
510042,
510141,
510242,
510344,
510458,
510588,
5106124,
5107-109,
5108-98,
5109-95,
5110-96,
5111-97,
5112-95,
5113-95,
5114-95,
5115-96,
5116-94,
5117-91,
5118-90,
5119-92,
5120-91,
5121-90,
5122-90,
5123-89,
5124-87,
5125-89,
5126-92,
5127-94,
5128-95,
5129-96,
5130-95,
5131-94,
5132-94,
5133-97,
5134-98,
5135-97,
5136-97,
5137-96,
5138-95,
5139-96,
5140-95,
5141-98,
5142-99,
5143-98,
5144-97,
5145-100,
5146-121,
514790,
514852,
514937,
515036,
515139,
515241,
515339,
515439,
515540,
515638,
515735,
515833,
515934,
516035,
516134,
516236,
516336,
516435,
516537,
516638,
516738,
516838,
516938,
517040,
517139,
517240,
517339,
517440,
517544,
517646,
517749,
517853,
517953,
518053,
518173,
5182108,
5183-114,
5184-96,
5185-96,
5186-99,
5187-100,
5188-99,
5189-96,
5190-94,
5191-95,
5192-93,
5193-89,
5194-84,
5195-88,
5196-91,
5197-91,
5198-93,
5199-97,
5200-97,
5201-98,
5202-97,
5203-93,
5204-92,
5205-92,
5206-92,
5207-95,
5208-95,
5209-94,
5210-92,
5211-91,
5212-94,
5213-96,
5214-96,
5215-94,
5216-94,
5217-94,
5218-92,
5219-93,
5220-94,
5221-96,
5222-115,
5223103,
522464,
522536,
522638,
522745,
522842,
522944,
523041,
523141,
523241,
523337,
523438,
523542,
523645,
523746,
523843,
523939,
524033,
524137,
524238,
524338,
524438,
524538,
524642,
524742,
524838,
524936,
525035,
525134,
525236,
525340,
525439,
525539,
525649,
525782,
5258-123,
5259-95,
5260-91,
5261-87,
5262-89,
5263-93,
5264-94,
5265-95,
5266-94,
5267-95,
5268-94,
5269-91,
5270-92,
5271-93,
5272-92,
5273-92,
5274-94,
5275-95,
5276-95,
5277-96,
5278-94,
5279-94,
5280-94,
5281-93,
5282-94,
5283-92,
5284-90,
5285-92,
5286-90,
5287-91,
5288-93,
5289-92,
5290-92,
5291-91,
5292-91,
5293-93,
5294-93,
5295-93,
5296-93,
5297-98,
5298-122,
529990,
530054,
530140,
530240,
530341,
530440,
530538,
530636,
530736,
530836,
530939,
531042,
531143,
531241,
531338,
531438,
531536,
531636,
531737,
531838,
531938,
532038,
532138,
532241,
532340,
532437,
532536,
532638,
532742,
532842,
532941,
533044,
533141,
533248,
533373,
5334116,
5335-103,
5336-88,
5337-87,
5338-92,
5339-96,
5340-95,
5341-93,
5342-91,
5343-87,
5344-85,
5345-88,
5346-85,
5347-89,
5348-93,
5349-91,
5350-88,
5351-87,
5352-85,
5353-87,
5354-89,
5355-91,
5356-93,
5357-92,
5358-92,
5359-92,
5360-91,
5361-94,
5362-90,
5363-91,
5364-93,
5365-93,
5366-94,
5367-92,
5368-92,
5369-95,
5370-93,
5371-92,
5372-93,
5373-96,
5374-116,
5375104,
537666,
537740,
537839,
537937,
538039,
538142,
538243,
538343,
538440,
538538,
538637,
538736,
538836,
538934,
539034,
539135,
539235,
539337,
539438,
539538,
539638,
539738,
539841,
539941,
540038,
540137,
540236,
540335,
540437,
540542,
540644,
540746,
540858,
540991,
5410-120,
5411-98,
5412-99,
5413-94,
5414-89,
5415-93,
5416-92,
5417-92,
5418-93,
5419-93,
5420-93,
5421-91,
5422-89,
5423-88,
5424-85,
5425-86,
5426-88,
5427-89,
5428-87,
5429-89,
5430-88,
5431-90,
5432-94,
5433-93,
5434-94,
5435-94,
5436-91,
5437-90,
5438-86,
5439-90,
5440-94,
5441-94,
5442-96,
5443-95,
5444-95,
5445-94,
5446-93,
5447-92,
5448-91,
5449-97,
5450-123,
545191,
545258,
545348,
545452,
545548,
545644,
545743,
545843,
545941,
546036,
546138,
546242,
546343,
546439,
546537,
546634,
546731,
546832,
546937,
547038,
547138,
547238,
547338,
547441,
547540,
547637,
547741,
547842,
547941,
548043,
548141,
548239,
548345,
548460,
548592,
5486-123,
5487-102,
5488-102,
5489-99,
5490-99,
5491-97,
5492-92,
5493-93,
5494-93,
5495-94,
5496-94,
5497-96,
5498-93,
5499-89,
5500-92,
5501-91,
5502-90,
5503-89,
5504-90,
5505-88,
5506-90,
5507-90,
5508-91,
5509-92,
5510-92,
5511-92,
5512-92,
5513-94,
5514-90,
5515-90,
5516-90,
5517-91,
5518-91,
5519-91,
5520-93,
5521-94,
5522-91,
5523-92,
5524-95,
5525-103,
5526-127,
552792,
552859,
552949,
553056,
553153,
553255,
553351,
553450,
553548,
553643,
553739,
553836,
553935,
554035,
554134,
554233,
554334,
554437,
554537,
554638,
554738,
554838,
554938,
555038,
555139,
555238,
555340,
555441,
555540,
555642,
555745,
555845,
555947,
556064,
5561100,
5562-118,
5563-104,
5564-102,
5565-93,
5566-95,
5567-92,
5568-96,
5569-97,
5570-96,
5571-96,
5572-94,
5573-92,
5574-89,
5575-90,
5576-93,
5577-93,
5578-96,
5579-97,
5580-94,
5581-96,
5582-96,
5583-97,
5584-98,
5585-97,
5586-96,
5587-94,
5588-94,
5589-95,
5590-92,
5591-95,
5592-94,
5593-94,
5594-95,
5595-94,
5596-95,
5597-96,
5598-95,
5599-94,
5600-94,
5601-97,
5602-118,
5603102,
560470,
560553,
560653,
560755,
560852,
560954,
561052,
561147,
561241,
561338,
561439,
561540,
561636,
561737,
561837,
561935,
562036,
562137,
562238,
562338,
562438,
562538,
562640,
562739,
562840,
562941,
563039,
563133,
563233,
563336,
563440,
563551,
563664,
563784,
5638125,
5639-102,
5640-87,
5641-81,
5642-92,
5643-98,
5644-101,
5645-98,
5646-97,
5647-95,
5648-95,
5649-95,
5650-94,
5651-94,
5652-98,
5653-97,
5654-94,
5655-93,
5656-93,
5657-93,
5658-92,
5659-91,
5660-92,
5661-93,
5662-93,
5663-93,
5664-93,
5665-95,
5666-94,
5667-94,
5668-96,
5669-94,
5670-91,
5671-91,
5672-95,
5673-94,
5674-95,
5675-98,
5676-98,
5677-102,
5678-119,
5679101,
568071,
568155,
568247,
568347,
568448,
568551,
568652,
568745,
568838,
568934,
569030,
569134,
569234,
569332,
569434,
569534,
569637,
569737,
569837,
569938,
570038,
570138,
570241,
570342,
570441,
570539,
570641,
570739,
570837,
570937,
571037,
571144,
571266,
5713105,
5714-118,
5715-105,
5716-107,
5717-106,
5718-102,
5719-101,
5720-102,
5721-100,
5722-101,
5723-101,
5724-99,
5725-98,
5726-96,
5727-96,
5728-98,
5729-94,
5730-94,
5731-95,
5732-94,
5733-96,
5734-97,
5735-97,
5736-96,
5737-96,
5738-95,
5739-96,
5740-94,
5741-96,
5742-99,
5743-95,
5744-96,
5745-98,
5746-100,
5747-98,
5748-97,
5749-97,
5750-94,
5751-93,
5752-97,
5753-107,
5754123,
575583,
575654,
575741,
575845,
575948,
576045,
576146,
576244,
576343,
576440,
576536,
576639,
576736,
576837,
576938,
577040,
577141,
577240,
577337,
577437,
577538,
577638,
577738,
577840,
577940,
578043,
578143,
578241,
578340,
578442,
578542,
578640,
578744,
578861,
578990,
5790121,
5791-122,
5792-121,
5793-117,
5794-113,
5795-111,
5796-108,
5797-104,
5798-104,
5799-105,
5800-106,
5801-106,
5802-102,
5803-103,
5804-106,
5805-106,
5806-107,
5807-106,
5808-106,
5809-104,
5810-103,
5811-101,
5812-100,
5813-99,
5814-98,
5815-99,
5816-100,
5817-101,
5818-98,
5819-95,
5820-94,
5821-94,
5822-93,
5823-95,
5824-95,
5825-97,
5826-97,
5827-98,
5828-97,
5829-97,
5830-115,
583198,
583258,
583340,
583442,
583546,
583646,
583747,
583848,
583945,
584043,
584142,
584240,
584339,
584436,
584534,
584635,
584736,
584838,
584937,
585037,
585137,
585238,
585338,
585437,
585541,
585641,
585742,
585843,
585940,
586041,
586140,
586240,
586342,
586451,
586568,
586678,
586781,
586881,
586981,
587085,
587185,
587287,
587388,
587489,
587593,
587696,
587797,
5878100,
587998,
5880101,
5881105,
5882109,
5883110,
5884113,
5885116,
5886116,
5887117,
5888118,
5889119,
5890120,
5891121,
5892126,
5893-126,
5894-126,
5895-123,
5896-120,
5897-118,
5898-117,
5899-115,
5900-114,
5901-113,
5902-110,
5903-106,
5904-108,
5905-115,
5906117,
590781,
590852,
590940,
591042,
591147,
591248,
591348,
591445,
591542,
591638,
591734,
591837,
591934,
592036,
592137,
592239,
592339,
592438,
592537,
592637,
592737,
592838,
592938,
593038,
593137,
593239,
593341,
593439,
593542,
593642,
593740,
593841,
593943,
594053,
594169,
594271,
594366,
594465,
594561,
594657,
594757,
594858,
594960,
595062,
595165,
595264,
595368,
595476,
595571,
595667,
595768,
595869,
595975,
596082,
596187,
596285,
596385,
596486,
596587,
596692,
596794,
596894,
596996,
597090,
597191,
597295,
5973101,
5974109,
5975109,
5976114,
5977115,
5978119,
5979123,
5980121,
5981117,
5982104,
598377,
598450,
598537,
598632,
598730,
598824,
598927,
599035,
599139,
599239,
599336,
599438,
599536,
599637,
599736,
599834,
599933,
600032,
600137,
600237,
600337,
600437,
600538,
600637,
600741,
600840,
600941,
601043,
601141,
601239,
601338,
601440,
601543,
601649,
601753,
601852,
601950,
602050,
602151,
602251,
602352,
602454,
602549,
602646,
602750,
602848,
602947,
603051,
603151,
603250,
603348,
603450,
603550,
603650,
603750,
603850,
603951,
604051,
604152,
604252,
604356,
604457,
604558,
604659,
604757,
604856,
604956,
605055,
605152,
605253,
605356,
605459,
605560,
605661,
605762,
605859,
605954,
606054,
606151,
606247,
606350,
606447,
606545,
606644,
606743,
606840,
606937,
607037,
607137,
607239,
607343,
607445,
607543,
607639,
607736,
607837,
607937,
608037,
608139,
608246,
608341,
608438,
608540,
608640,
608739,
608840,
608940,
609038,
609143,
609249,
609354,
609454,
609552,
609652,
609749,
609847,
609947,
610050,
610148,
610249,
610352,
610449,
610550,
610651,
610748,
610848,
610949,
611049,
611149,
611251,
611350,
611446,
611546,
611650,
611749,
611852,
611952,
612047,
612148,
612251,
612352,
612448,
612550,
612652,
612747,
612845,
612946,
613045,
613148,
613249,
613350,
613448,
613544,
613645,
613748,
613850,
613947,
614043,
614144,
614244,
614344,
614443,
614543,
614643,
614741,
614841,
614941,
615038,
615136,
615236,
615336,
615437,
615537,
615637,
615737,
615841,
615941,
616039,
616138,
616238,
616336,
616436,
616537,
616639,
616744,
616848,
616950,
617050,
617150,
617252,
617352,
617452,
617552,
617653,
617750,
617846,
617946,
618046,
618142,
618243,
618346,
618445,
618544,
618646,
618746,
618845,
618943,
619045,
619146,
619250,
619351,
619450,
619551,
619650,
619749,
619851,
619951,
620050,
620151,
620250,
620349,
620447,
620549,
620649,
620750,
620852,
620950,
621048,
621145,
621246,
621347,
621447,
621548,
621647,
621745,
621844,
621945,
622042,
622138,
622237,
622335,
622431,
622529,
622631,
622733,
622835,
622936,
623036,
623137,
623237,
623337,
623439,
623539,
623640,
623741,
623842,
623939,
624037,
624137,
624236,
624340,
624444,
624548,
624647,
624745,
624846,
624949,
625049,
625149,
625250,
625347,
625448,
625549,
625648,
625745,
625847,
625947,
626049,
626151,
626253,
626351,
626449,
626548,
626646,
626744,
626844,
626943,
627044,
627146,
627248,
627349,
627451,
627551,
627650,
627749,
627849,
627948,
628050,
628154,
628256,
628349,
628444,
628543,
628644,
628744,
628845,
628945,
629044,
629145,
629242,
629340,
629441,
629542,
629641,
629738,
629836,
629937,
630041,
630146,
630243,
630340,
630437,
630536,
630636,
630737,
630837,
630937,
631040,
631141,
631240,
631339,
631439,
631536,
631635,
631737,
631838,
631941,
632043,
632145,
632246,
632346,
632446,
632547,
632645,
632741,
632845,
632946,
633047,
633148,
633247,
633345,
633444,
633545,
633647,
633746,
633846,
633946,
634045,
634146,
634245,
634343,
634444,
634544,
634646,
634751,
634851,
634947,
635049,
635146,
635244,
635343,
635439,
635539,
635642,
635746,
635846,
635946,
636044,
636143,
636242,
636342,
636444,
636544,
636646,
636746,
636847,
636945,
637040,
637137,
637233,
637335,
637440,
637545,
637642,
637742,
637842,
637938,
638036,
638136,
638236,
638336,
638437,
638538,
638642,
638742,
638840,
638939,
639038,
639138,
639239,
639340,
639439,
639538,
639640,
639740,
639838,
639937,
640038,
640140,
640240,
640338,
640439,
640539,
640640,
640739,
640836,
640934,
641037,
641140,
641240,
641341,
641440,
641538,
641635,
641736,
641840,
641939,
642038,
642136,
642236,
642337,
642439,
642540,
642640,
642740,
642841,
642942,
643042,
643142,
643242,
643340,
643441,
643541,
643642,
643745,
643845,
643942,
644042,
644140,
644242,
644346,
644446,
644544,
644643,
644741,
644839,
644937,
645040,
645141,
645237,
645335,
645432,
645530,
645631,
645736,
645836,
645936,
646036,
646137,
646240,
646340,
646440,
646539,
646639,
646738,
646839,
646941,
647042,
647140,
647242,
647342,
647441,
647538,
647638,
647742,
647839,
647937,
648039,
648137,
648234,
648335,
648436,
648539,
648639,
648741,
648841,
648939,
649039,
649136,
649235,
649335,
649437,
649541,
649645,
649748,
649847,
649948,
650045,
650142,
650244,
650341,
650441,
650542,
650643,
650742,
650841,
650940,
651039,
651137,
651237,
651337,
651438,
651538,
651640,
651741,
651842,
651940,
652041,
652140,
652239,
652340,
652438,
652537,
652639,
652741,
652840,
652937,
653035,
653132,
653233,
653336,
653436,
653536,
653636,
653736,
653838,
653939,
654038,
654137,
654238,
654337,
654437,
654540,
654639,
654743,
654848,
654948,
655044,
655139,
655238,
655340,
655441,
655541,
655641,
655742,
655842,
655939,
656036,
656135,
656235,
656334,
656435,
656536,
656638,
656738,
656837,
656939,
657038,
657136,
657236,
657337,
657439,
657540,
657640,
657738,
657838,
657937,
658035,
658136,
658233,
658334,
658437,
658536,
658639,
658739,
658838,
658937,
659033,
659130,
659232,
659333,
659433,
659535,
659636,
659736,
659836,
659937,
660035,
660137,
660239,
660340,
660436,
660535,
660637,
660736,
660835,
660936,
661036,
661136,
661236,
661335,
661431,
661534,
661635,
661737,
661838,
661937,
662036,
662139,
662242,
662341,
662441,
662540,
662638,
662736,
662837,
662938,
663039,
663140,
663240,
663337,
663434,
663534,
663635,
663737,
663837,
663939,
664039,
664138,
664240,
664339,
664441,
664543,
664643,
664743,
664840,
664939,
665041,
665141,
665239,
665335,
665433,
665534,
665633,
665736,
665838,
665940,
666040,
666139,
666240,
666337,
666439,
666537,
666634,
666733,
666834,
666935,
667035,
667135,
667235,
667333,
667435,
667534,
667633,
667734,
667836,
667937,
668036,
668135,
668235,
668334,
668435,
668536,
668636,
668736,
668836,
668936,
669038,
669139,
669240,
669340,
669442,
669541,
669640,
669743,
669842,
669939,
670038,
670135,
670235,
670334,
670435,
670537,
670637,
670737,
670837,
670938,
671037,
671135,
671234,
671336,
671439,
671540,
671639,
671740,
671841,
671940,
672036,
672137,
672238,
672334,
672435,
672536,
672637,
672739,
672840,
672937,
673037,
673137,
673234,
673334,
673435,
673535,
673637,
673737,
673838,
673939,
674042,
674144,
674242,
674340,
674441,
674540,
674638,
674735,
674834,
674934,
675036,
675136,
675237,
675339,
675438,
675540,
675640,
675738,
675836,
675933,
676031,
676136,
676236,
676336,
676436,
676536,
676636,
676736,
676839,
676941,
677042,
677141,
677240,
677338,
677438,
677537,
677637,
677741,
677840,
677939,
678039,
678137,
678239,
678338,
678439,
678537,
678635,
678735,
678835,
678936,
679039,
679138,
679238,
679338,
679438,
679539,
679639,
679739,
679838,
679938,
680039,
680140,
680241,
680341,
680441,
680538,
680638,
680737,
680837,
680936,
681038,
681140,
681239,
681337,
681435,
681537,
681635,
681733,
681834,
681935,
682038,
682136,
682236,
682338,
682434,
682533,
682635,
682736,
682835,
682937,
683039,
683138,
683238,
683338,
683437,
683534,
683631,
683736,
683836,
683936,
684036,
684136,
684237,
684341,
684441,
684539,
684640,
684739,
684840,
684941,
685042,
685140,
685235,
685335,
685436,
685534,
685636,
685738,
685838,
685939,
686039,
686139,
686239,
686338,
686437,
686538,
686638,
686736,
686834,
686935,
687040,
687144,
687243,
687346,
687447,
687540,
687635,
687736,
687836,
687937,
688037,
688135,
688236,
688337,
688435,
688536,
688638,
688738,
688839,
688939,
689039,
689140,
689240,
689338,
689433,
689532,
689635,
689736,
689835,
689932,
690031,
690132,
690234,
690334,
690435,
690538,
690639,
690738,
690837,
690935,
691036,
691136,
691233,
691336,
691436,
691536,
691636,
691736,
691835,
691931,
692033,
692136,
692236,
692337,
692437,
692537,
692638,
692738,
692839,
692941,
693039,
693136,
693236,
693336,
693435,
693537,
693634,
693734,
693832,
693932,
694034,
694135,
694239,
694338,
694438,
694539,
694638,
694738,
694838,
694938,
695036,
695133,
695234,
695333,
695434,
695534,
695637,
695740,
695840,
695940,
696037,
696135,
696237,
696338,
696437,
696535,
696635,
696736,
696837,
696938,
697041,
697143,
697242,
697337,
697436,
697540,
697639,
697741,
697843,
697941,
698036,
698132,
698233,
698336,
698437,
698540,
698639,
698736,
698833,
698936,
699036,
699136,
699236,
699337,
699442,
699542,
699639,
699735,
699835,
699935,
700037,
700137,
700238,
700339,
700438,
700540,
700640,
700739,
700844,
700944,
701039,
701140,
701240,
701342,
701444,
701542,
701638,
701738,
701836,
701935,
702035,
702135,
702238,
702338,
702435,
702533,
702636,
702735,
702835,
702937,
703038,
703139,
703238,
703338,
703438,
703537,
703636,
703733,
703833,
703933,
704034,
704137,
704238,
704339,
704440,
704536,
704631,
704733,
704836,
704934,
705037,
705135,
705234,
705336,
705437,
705538,
705638,
705737,
705837,
705935,
706033,
706135,
706239,
706336,
706434,
706536,
706636,
706736,
706836,
706936,
707036,
707135,
707236,
707336,
707437,
707535,
707637,
707738,
707838,
707940,
708041,
708142,
708240,
708341,
708444,
708542,
708642,
708740,
708838,
708939,
709037,
709136,
709235,
709335,
709434,
709533,
709634,
709735,
709836,
709936,
710038,
710137,
710237,
710336,
710434,
710536,
710639,
710740,
710839,
710938,
711039,
711137,
711237,
711336,
711439,
711540,
711639,
711739,
711835,
711937,
712037,
712136,
712240,
712341,
712440,
712537,
712635,
712736,
712836,
712937,
713035,
713135,
713234,
713332,
713436,
713534,
713632,
713731,
713830,
713931,
714033,
714136,
714236,
714336,
714436,
714537,
714637,
714737,
714836,
714935,
715038,
715139,
715241,
715340,
715435,
715536,
715635,
715735,
715834,
715934,
716038,
716138,
716239,
716340,
716436,
716535,
716636,
716735,
716836,
716936,
717038,
717136,
717239,
717341,
717442,
717541,
717641,
717740,
717841,
717941,
718039,
718138,
718236,
718337,
718437,
718535,
718637,
718740,
718839,
718937,
719037,
719137,
719238,
719339,
719443,
719544,
719641,
719739,
719839,
719942,
720040,
720136,
720238,
720334,
720433,
720536,
720637,
720741,
720841,
720941,
721041,
721141,
721240,
721340,
721444,
721541,
721638,
721736,
721836,
721936,
722037,
722137,
722238,
722339,
722439,
722538,
722638,
722737,
722840,
722940,
723037,
723138,
723238,
723337,
723436,
723536,
723636,
723735,
723839,
723939,
724038,
724141,
724238,
724337,
724438,
724539,
724641,
724740,
724840,
724941,
725041,
725141,
725240,
725337,
725439,
725540,
725640,
725739,
725839,
725936,
726035,
726135,
726235,
726335,
726435,
726534,
726636,
726735,
726837,
726940,
727040,
727140,
727238,
727336,
727436,
727535,
727637,
727736,
727837,
727938,
728038,
728138,
728237,
728337,
728434,
728531,
728633,
728732,
728833,
728933,
729033,
729135,
729236};
diff --git a/all_pairs/source/susan/math_private.h b/all_pairs/source/susan/math_private.h
new file mode 100644
index 0000000..58d4354
--- /dev/null
+++ b/all_pairs/source/susan/math_private.h
@@ -0,0 +1,178 @@
1/*
2 * ====================================================
3 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
4 *
5 * Developed at SunPro, a Sun Microsystems, Inc. business.
6 * Permission to use, copy, modify, and distribute this
7 * software is freely granted, provided that this notice
8 * is preserved.
9 * ====================================================
10 */
11
12/*
13 * from: @(#)fdlibm.h 5.1 93/09/24
14 */
15
16#ifndef _MATH_PRIVATE_H_
17#define _MATH_PRIVATE_H_
18
19#include "wcclibm.h"
20
21//#include <endian.h>
22//#include <sys/types.h>
23
24/* A representation of a double as a union. */
25union ieee754_double
26{
27 double d;
28
29 /* This is the IEEE 754 double-precision format. */
30 struct {
31 /* Together these comprise the mantissa. */
32 unsigned int mantissa1:32;
33 unsigned int mantissa0:20;
34 unsigned int exponent:11;
35 unsigned int negative:1;
36 } ieee;
37
38 /* This format makes it easier to see if a NaN is a signalling NaN. */
39 struct {
40 /* Together these comprise the mantissa. */
41 unsigned int mantissa1:32;
42 unsigned int mantissa0:19;
43 unsigned int quiet_nan:1;
44 unsigned int exponent:11;
45 unsigned int negative:1;
46 } ieee_nan;
47};
48
49/* The original fdlibm code used statements like:
50 n0 = ((*(int*)&one)>>29)^1; * index of high word *
51 ix0 = *(n0+(int*)&x); * high word of x *
52 ix1 = *((1-n0)+(int*)&x); * low word of x *
53 to dig two 32 bit words out of the 64 bit IEEE floating point
54 value. That is non-ANSI, and, moreover, the gcc instruction
55 scheduler gets it wrong. We instead use the following macros.
56 Unlike the original code, we determine the endianness at compile
57 time, not at run time; I don't see much benefit to selecting
58 endianness at run time. */
59
60/* A union which permits us to convert between a double and two 32 bit
61 ints. */
62
63/* #if __FLOAT_WORD_ORDER == BIG_ENDIAN */
64/* #warning USING Big Endian float word order */
65/* typedef union */
66/* { */
67/* double value; */
68/* struct */
69/* { */
70/* u_int16_t msw; */
71/* u_int16_t lsw; */
72/* } parts; */
73/* } ieeeDoubleShapeType; */
74
75/* #endif */
76
77/* #if __FLOAT_WORD_ORDER == LITTLE_ENDIAN */
78/* #warning USING Little Endian float word order */
79
80typedef union
81{
82 double value;
83 struct
84 {
85 u_int16_t lsw;
86 u_int16_t msw;
87 } parts;
88} ieeeDoubleShapeType;
89
90/* #endif */
91
92/* Get two 32 bit ints from a double. */
93
94#define EXTRACT_WORDS(ix0,ix1,d) \
95{ \
96 ieeeDoubleShapeType ew_u; \
97 ew_u.value = (d); \
98 (ix0) = ew_u.parts.msw; \
99 (ix1) = ew_u.parts.lsw; \
100}
101
102/* Get the more significant 32 bit int from a double. */
103
104#define GET_HIGH_WORD(i,d) \
105{ \
106 ieeeDoubleShapeType gh_u; \
107 gh_u.value = (d); \
108 (i) = gh_u.parts.msw; \
109}
110
111/* Get the less significant 32 bit int from a double. */
112
113#define GET_LOW_WORD(i,d) \
114{ \
115 ieeeDoubleShapeType gl_u; \
116 gl_u.value = (d); \
117 (i) = gl_u.parts.lsw; \
118}
119
120/* Set a double from two 32 bit ints. */
121
122#define INSERT_WORDS(d,ix0,ix1) \
123{ \
124 ieeeDoubleShapeType iw_u; \
125 iw_u.parts.msw = (ix0); \
126 iw_u.parts.lsw = (ix1); \
127 (d) = iw_u.value; \
128}
129
130/* Set the more significant 32 bits of a double from an int. */
131
132#define SET_HIGH_WORD(d,v) \
133{ \
134 ieeeDoubleShapeType sh_u; \
135 sh_u.value = (d); \
136 sh_u.parts.msw = (v); \
137 (d) = sh_u.value; \
138}
139
140/* Set the less significant 32 bits of a double from an int. */
141
142#define SET_LOW_WORD(d,v) \
143{ \
144 ieeeDoubleShapeType sl_u; \
145 sl_u.value = (d); \
146 sl_u.parts.lsw = (v); \
147 (d) = sl_u.value; \
148}
149
150/* A union which permits us to convert between a float and a 32 bit
151 int. */
152
153typedef union
154{
155 float value;
156 u_int32_t word;
157} ieee_float_shape_type;
158
159/* Get a 32 bit int from a float. */
160
161#define GET_FLOAT_WORD(i,d) \
162{ \
163 ieee_float_shape_type gf_u; \
164 gf_u.value = (d); \
165 (i) = gf_u.word; \
166}
167
168/* Set a float from a 32 bit int. */
169
170#define SET_FLOAT_WORD(d,i) \
171{ \
172 ieee_float_shape_type sf_u; \
173 sf_u.word = (i); \
174 (d) = sf_u.value; \
175}
176
177
178#endif /* _MATH_PRIVATE_H_ */
diff --git a/all_pairs/source/susan/susan.c b/all_pairs/source/susan/susan.c
new file mode 100644
index 0000000..fb990b1
--- /dev/null
+++ b/all_pairs/source/susan/susan.c
@@ -0,0 +1,2014 @@
1/**********************************************************************\
2
3 SUSAN Version 2l by Stephen Smith
4 Oxford Centre for Functional Magnetic Resonance Imaging of the Brain,
5 Department of Clinical Neurology, Oxford University, Oxford, UK
6 (Previously in Computer Vision and Image Processing Group - now
7 Computer Vision and Electro Optics Group - DERA Chertsey, UK)
8 Email: steve@fmrib.ox.ac.uk
9 WWW: http://www.fmrib.ox.ac.uk/~steve
10
11 (C) Crown Copyright (1995-1999), Defence Evaluation and Research Agency,
12 Farnborough, Hampshire, GU14 6TD, UK
13 DERA WWW site:
14 http://www.dera.gov.uk/
15 DERA Computer Vision and Electro Optics Group WWW site:
16 http://www.dera.gov.uk/imageprocessing/dera/group_home.html
17 DERA Computer Vision and Electro Optics Group point of contact:
18 Dr. John Savage, jtsavage@dera.gov.uk, +44 1344 633203
19
20 A UK patent has been granted: "Method for digitally processing
21 images to determine the position of edges and/or corners therein for
22 guidance of unmanned vehicle", UK Patent 2272285. Proprietor:
23 Secretary of State for Defence, UK. 15 January 1997
24
25 This code is issued for research purposes only and remains the
26 property of the UK Secretary of State for Defence. This code must
27 not be passed on without this header information being kept
28 intact. This code must not be sold.
29
30\**********************************************************************/
31
32/**********************************************************************\
33
34 SUSAN Version 2l
35 SUSAN = Smallest Univalue Segment Assimilating Nucleus
36
37 Email: steve@fmrib.ox.ac.uk
38 WWW: http://www.fmrib.ox.ac.uk/~steve
39
40 Related paper:
41 @article{Smith97,
42 author = "Smith, S.M. and Brady, J.M.",
43 title = "{SUSAN} - A New Approach to Low Level Image Processing",
44 journal = "Int. Journal of Computer Vision",
45 pages = "45--78",
46 volume = "23",
47 number = "1",
48 month = "May",
49 year = 1997}
50
51 To be registered for automatic (bug) updates of SUSAN, send an email.
52
53 Compile with:
54 gcc -O4 -o susan susan2l.c -lm
55
56 See following section for different machine information. Please
57 report any bugs (and fixes). There are a few optional changes that
58 can be made in the "defines" section which follows shortly.
59
60 Usage: type "susan" to get usage. Only PGM format files can be input
61 and output. Utilities such as the netpbm package and XV can be used
62 to convert to and from other formats. Any size of image can be
63 processed.
64
65 This code is written using an emacs folding mode, making moving
66 around the different sections very easy. This is why there are
67 various marks within comments and why comments are indented.
68
69
70 SUSAN QUICK:
71
72 This version of the SUSAN corner finder does not do all the
73 false-corner suppression and thus is faster and produced some false
74 positives, particularly on strong edges. However, because there are
75 less stages involving thresholds etc., the corners that are
76 correctly reported are usually more stable than those reported with
77 the full algorithm. Thus I recommend at least TRYING this algorithm
78 for applications where stability is important, e.g., tracking.
79
80 THRESHOLDS:
81
82 There are two thresholds which can be set at run-time. These are the
83 brightness threshold (t) and the distance threshold (d).
84
85 SPATIAL CONTROL: d
86
87 In SUSAN smoothing d controls the size of the Gaussian mask; its
88 default is 4.0. Increasing d gives more smoothing. In edge finding,
89 a fixed flat mask is used, either 37 pixels arranged in a "circle"
90 (default), or a 3 by 3 mask which gives finer detail. In corner
91 finding, only the larger 37 pixel mask is used; d is not
92 variable. In smoothing, the flat 3 by 3 mask can be used instead of
93 a larger Gaussian mask; this gives low smoothing and fast operation.
94
95 BRIGHTNESS CONTROL: t
96
97 In all three algorithms, t can be varied (default=20); this is the
98 main threshold to be varied. It determines the maximum difference in
99 greylevels between two pixels which allows them to be considered
100 part of the same "region" in the image. Thus it can be reduced to
101 give more edges or corners, i.e. to be more sensitive, and vice
102 versa. In smoothing, reducing t gives less smoothing, and vice
103 versa. Set t=10 for the test image available from the SUSAN web
104 page.
105
106 ITERATIONS:
107
108 With SUSAN smoothing, more smoothing can also be obtained by
109 iterating the algorithm several times. This has a different effect
110 from varying d or t.
111
112 FIXED MASKS:
113
114 37 pixel mask: ooo 3 by 3 mask: ooo
115 ooooo ooo
116 ooooooo ooo
117 ooooooo
118 ooooooo
119 ooooo
120 ooo
121
122 CORNER ATTRIBUTES dx, dy and I
123 (Only read this if you are interested in the C implementation or in
124 using corner attributes, e.g., for corner matching)
125
126 Corners reported in the corner list have attributes associated with
127 them as well as positions. This is useful, for example, when
128 attempting to match corners from one image to another, as these
129 attributes can often be fairly unchanged between images. The
130 attributes are dx, dy and I. I is the value of image brightness at
131 the position of the corner. In the case of susan_corners_quick, dx
132 and dy are the first order derivatives (differentials) of the image
133 brightness in the x and y directions respectively, at the position
134 of the corner. In the case of normal susan corner finding, dx and dy
135 are scaled versions of the position of the centre of gravity of the
136 USAN with respect to the centre pixel (nucleus).
137
138 BRIGHTNESS FUNCTION LUT IMPLEMENTATION:
139 (Only read this if you are interested in the C implementation)
140
141 The SUSAN brightness function is implemented as a LUT
142 (Look-Up-Table) for speed. The resulting pointer-based code is a
143 little hard to follow, so here is a brief explanation. In
144 setup_brightness_lut() the LUT is setup. This mallocs enough space
145 for *bp and then repositions the pointer to the centre of the
146 malloced space. The SUSAN function e^-(x^6) or e^-(x^2) is
147 calculated and converted to a uchar in the range 0-100, for all
148 possible image brightness differences (including negative
149 ones). Thus bp[23] is the output for a brightness difference of 23
150 greylevels. In the SUSAN algorithms this LUT is used as follows:
151
152 p=in + (i-3)*x_size + j - 1;
153 p points to the first image pixel in the circular mask surrounding
154 point (x,y).
155
156 cp=bp + in[i*x_size+j];
157 cp points to a position in the LUT corresponding to the brightness
158 of the centre pixel (x,y).
159
160 now for every pixel within the mask surrounding (x,y),
161 n+=*(cp-*p++);
162 the brightness difference function is found by moving the cp pointer
163 down by an amount equal to the value of the pixel pointed to by p,
164 thus subtracting the two brightness values and performing the
165 exponential function. This value is added to n, the running USAN
166 area.
167
168 in SUSAN smoothing, the variable height mask is implemented by
169 multiplying the above by the moving mask pointer, reset for each new
170 centre pixel.
171 tmp = *dpt++ * *(cp-brightness);
172
173\**********************************************************************/
174
175/**********************************************************************\
176
177 Success has been reported with the following:
178
179 MACHINE OS COMPILER
180
181 Sun 4.1.4 bundled C, gcc
182
183 Next
184
185 SGI IRIX SGI cc
186
187 DEC Unix V3.2+
188
189 IBM RISC AIX gcc
190
191 PC Borland 5.0
192
193 PC Linux gcc-2.6.3
194
195 PC Win32 Visual C++ 4.0 (Console Application)
196
197 PC Win95 Visual C++ 5.0 (Console Application)
198 Thanks to Niu Yongsheng <niuysbit@163.net>:
199 Use the FOPENB option below
200
201 PC DOS djgpp gnu C
202 Thanks to Mark Pettovello <mpettove@umdsun2.umd.umich.edu>:
203 Use the FOPENB option below
204
205 HP HP-UX bundled cc
206 Thanks to Brian Dixon <briand@hpcvsgen.cv.hp.com>:
207 in ksh:
208 export CCOPTS="-Aa -D_HPUX_SOURCE | -lM"
209 cc -O3 -o susan susan2l.c
210
211\**********************************************************************/
212
213/**********************************************************************\
214
215 SUSAN Version 2l, 12/2/99
216 Changed GNUDOS option to FOPENB.
217 (Thanks to Niu Yongsheng <niuysbit@163.net>.)
218 Took out redundant "sq=sq/2;".
219
220 SUSAN Version 2k, 19/8/98:
221 In corner finding:
222 Changed if(yy<sq) {...} else if(xx<sq) {...} to
223 if(yy<xx) {...} else {...}
224 (Thanks to adq@cim.mcgill.edu - Alain Domercq.)
225
226 SUSAN Version 2j, 22/10/97:
227 Fixed (mask_size>x_size) etc. tests in smoothing.
228 Added a couple of free() calls for cgx and cgy.
229 (Thanks to geoffb@ucs.ed.ac.uk - Geoff Browitt.)
230
231 SUSAN Version 2i, 21/7/97:
232 Added information about corner attributes.
233
234 SUSAN Version 2h, 16/12/96:
235 Added principle (initial enhancement) option.
236
237 SUSAN Version 2g, 2/7/96:
238 Minor superficial changes to code.
239
240 SUSAN Version 2f, 16/1/96:
241 Added GNUDOS option (now called FOPENB; see options below).
242
243 SUSAN Version 2e, 9/1/96:
244 Added -b option.
245 Fixed 1 pixel horizontal offset error for drawing edges.
246
247 SUSAN Version 2d, 27/11/95:
248 Fixed loading of certain PGM files in get_image (again!)
249
250 SUSAN Version 2c, 22/11/95:
251 Fixed loading of certain PGM files in get_image.
252 (Thanks to qu@San-Jose.ate.slb.com - Gongyuan Qu.)
253
254 SUSAN Version 2b, 9/11/95:
255 removed "z==" error in edges routines.
256
257 SUSAN Version 2a, 6/11/95:
258 Removed a few unnecessary variable declarations.
259 Added different machine information.
260 Changed "header" in get_image to char.
261
262 SUSAN Version 2, 1/11/95: first combined version able to take any
263 image sizes.
264
265 SUSAN "Versions 1", circa 1992: the various SUSAN algorithms were
266 developed during my doctorate within different programs and for
267 fixed image sizes. The algorithms themselves are virtually unaltered
268 between "versions 1" and the combined program, version 2.
269
270\**********************************************************************/
271
272#include "../extra.h"
273#include "wcclibm.h"
274#include "wccfile.h"
275#include "wccmalloc.h"
276
277#define EXP_A 184
278#define EXP_C 16249
279
280float susan_expf(float y)
281{
282 union
283 {
284 float d;
285 struct
286 {
287#ifdef LITTLE_ENDIAN
288 short j, i;
289#else
290 short i, j;
291#endif
292 } n;
293 } eco;
294 eco.n.i = EXP_A*(y) + (EXP_C);
295 eco.n.j = 0;
296 return eco.d;
297}
298
299float susan_sqrtf(float val)
300{
301 float x = val/10;
302
303 float dx;
304
305 float diff;
306 float min_tol = 0.00001f;
307
308 int i, flag;
309
310
311 flag = 0;
312 if (val == 0 ) x = 0;
313 else {
314 for (i=1;i<20;i++)
315 {
316 if (!flag) {
317 dx = (val - (x*x)) / (2.0f * x);
318 x = x + dx;
319 diff = val - (x*x);
320 if (fabs(diff) <= min_tol) flag = 1;
321 }
322 }
323 }
324 return (x);
325}
326
327/* ********** Optional settings */
328
329typedef int TOTAL_TYPE;
330
331#define SEVEN_SUPP /* size for non-max corner suppression; SEVEN_SUPP or FIVE_SUPP */
332#define MAX_CORNERS 15000 /* max corners per frame */
333
334#define FTOI(a) ( (a) < 0 ? ((int)(a-0.5)) : ((int)(a+0.5)) )
335#define abs(a) ( (a) < 0 ? -a : a )
336typedef unsigned char uchar;
337typedef struct {int x,y,info, dx, dy, I;} corner_rep;
338typedef corner_rep CORNER_LIST[MAX_CORNERS];
339
340extern char susan_input[7292];
341struct wccFILE susan_file;
342float susan_dt;
343int susan_bt;
344int susan_principle_conf;
345int susan_thin_post_proc;
346int susan_three_by_three;
347int susan_drawing_mode;
348int susan_susan_quick;
349int susan_max_no_corners;
350int susan_max_no_edges;
351
352int susan_getint( struct wccFILE *fd )
353{
354 int c, i;
355 char dummy[10000];
356
357 c = susan_wccfgetc(fd);
358 _Pragma( "loopbound min 1 max 4" )
359 while (1) { /* find next integer */
360 if (c=='#') /* if we're at a comment, read to end of line */
361 susan_wccfgets(dummy,9000,fd);
362 if (c==EOFX) {
363 /* "Image is not binary PGM." */
364 }
365 if (c>='0' && c<='9')
366 break; /* found what we were looking for */
367 c = susan_wccfgetc(fd);
368 }
369
370 /* we're at the start of a number, continue until we hit a non-number */
371 i = 0;
372 _Pragma( "loopbound min 2 max 3" )
373 while (1) {
374 i = (i*10) + (c - '0');
375 c = susan_wccfgetc(fd);
376 if (c==EOFX) return (i);
377 if (c<'0' || c>'9') break;
378 }
379
380 return (i);
381}
382
383
384void susan_get_image( struct wccFILE *fd,
385 unsigned char **in, int *x_size, int *y_size )
386{
387 char header [100];
388
389 susan_wccfseek( fd, 0, WCCSEEK_SET );
390
391 /* {{{ read header */
392
393 header[0]=susan_wccfgetc( fd );
394 header[1]=susan_wccfgetc( fd );
395 if(!(header[0]=='P' && header[1]=='5')) {
396 /* "Image does not have binary PGM header." */
397 }
398
399 *x_size = susan_getint(fd);
400 *y_size = susan_getint(fd);
401 // dummy read
402 susan_getint(fd);
403
404/* }}} */
405
406 *in = (uchar *) susan_wccmalloc(*x_size * *y_size);
407
408 if (susan_wccfread(*in,1,*x_size * *y_size,fd) == 0) {
409 /* "Image is wrong size.\n" */
410 }
411}
412
413
414void susan_put_image( int x_size, int y_size )
415{
416 int i;
417 _Pragma( "loopbound min 7220 max 7220" )
418 for ( i = 0; i < x_size*y_size; i++ ) {
419 ;
420 }
421}
422
423
424void susan_int_to_uchar( char *r, uchar *in, int size )
425{
426 int i, max_r=r[0], min_r=r[0];
427
428 _Pragma( "loopbound min 0 max 0" )
429 for (i=0; i<size; i++) {
430 if ( r[i] > max_r )
431 max_r=r[i];
432 if ( r[i] < min_r )
433 min_r=r[i];
434 }
435
436 if (max_r == min_r) {
437 /* Should not occur in TACLeBench. */
438 _Pragma( "loopbound min 0 max 0" )
439 for (i=0; i<size; i++) {
440 in[i] = (uchar)(0);
441 }
442
443 return;
444 }
445 max_r-=min_r;
446
447 _Pragma( "loopbound min 0 max 0" )
448 for (i=0; i<size; i++) {
449 in[i] = (uchar)((int)((int)(r[i]-min_r)*255)/max_r);
450 }
451}
452
453
454void susan_setup_brightness_lut( uchar **bp, int thresh, int form )
455{
456 int k;
457 float temp;
458
459 *bp=(unsigned char *)susan_wccmalloc(516);
460 *bp=*bp+258;
461
462 _Pragma( "loopbound min 513 max 513" )
463 for(k=-256;k<257;k++) {
464 temp=((float)k)/((float)thresh);
465 temp=temp*temp;
466 if (form==6)
467 temp=temp*temp*temp;
468 temp=100.0*susan_expf(-temp);
469 *(*bp+k)= (uchar)temp;
470 }
471}
472
473
474void susan_principle( uchar *in, char *r, uchar *bp,
475 int max_no, int x_size, int y_size )
476{
477 int i, j, n;
478 uchar *p,*cp;
479
480 susan_wccmemset(r,0,x_size * y_size * sizeof(int));
481
482 _Pragma( "loopbound min 0 max 0" )
483 for (i=3;i<y_size-3;i++) {
484 _Pragma( "loopbound min 0 max 0" )
485 for (j=3;j<x_size-3;j++) {
486 n=100;
487 p=in + (i-3)*x_size + j - 1;
488 cp=bp + in[i*x_size+j];
489
490 n+=*(cp-*p++);
491 n+=*(cp-*p++);
492 n+=*(cp-*p);
493 p+=x_size-3;
494
495 n+=*(cp-*p++);
496 n+=*(cp-*p++);
497 n+=*(cp-*p++);
498 n+=*(cp-*p++);
499 n+=*(cp-*p);
500 p+=x_size-5;
501
502 n+=*(cp-*p++);
503 n+=*(cp-*p++);
504 n+=*(cp-*p++);
505 n+=*(cp-*p++);
506 n+=*(cp-*p++);
507 n+=*(cp-*p++);
508 n+=*(cp-*p);
509 p+=x_size-6;
510
511 n+=*(cp-*p++);
512 n+=*(cp-*p++);
513 n+=*(cp-*p);
514 p+=2;
515 n+=*(cp-*p++);
516 n+=*(cp-*p++);
517 n+=*(cp-*p);
518 p+=x_size-6;
519
520 n+=*(cp-*p++);
521 n+=*(cp-*p++);
522 n+=*(cp-*p++);
523 n+=*(cp-*p++);
524 n+=*(cp-*p++);
525 n+=*(cp-*p++);
526 n+=*(cp-*p);
527 p+=x_size-5;
528
529 n+=*(cp-*p++);
530 n+=*(cp-*p++);
531 n+=*(cp-*p++);
532 n+=*(cp-*p++);
533 n+=*(cp-*p);
534 p+=x_size-3;
535
536 n+=*(cp-*p++);
537 n+=*(cp-*p++);
538 n+=*(cp-*p);
539
540 if (n<=max_no)
541 r[i*x_size+j] = max_no - n;
542 }
543 }
544}
545
546
547void susan_principle_small( uchar *in, char *r, uchar *bp,
548 int max_no, int x_size, int y_size )
549{
550 int i, j, n;
551 uchar *p,*cp;
552
553 susan_wccmemset(r,0,x_size * y_size * sizeof(int));
554
555 _Pragma( "loopbound min 0 max 0" )
556 for (i=1;i<y_size-1;i++) {
557 _Pragma( "loopbound min 0 max 0" )
558 for (j=1;j<x_size-1;j++) {
559 n=100;
560 p=in + (i-1)*x_size + j - 1;
561 cp=bp + in[i*x_size+j];
562
563 n+=*(cp-*p++);
564 n+=*(cp-*p++);
565 n+=*(cp-*p);
566 p+=x_size-2;
567
568 n+=*(cp-*p);
569 p+=2;
570 n+=*(cp-*p);
571 p+=x_size-2;
572
573 n+=*(cp-*p++);
574 n+=*(cp-*p++);
575 n+=*(cp-*p);
576
577 if (n<=max_no)
578 r[i*x_size+j] = max_no - n;
579 }
580 }
581}
582
583
584uchar susan_median( uchar *in, int i, int j, int x_size )
585{
586 int p[8],k,l,tmp;
587
588 p[0]=in[(i-1)*x_size+j-1];
589 p[1]=in[(i-1)*x_size+j ];
590 p[2]=in[(i-1)*x_size+j+1];
591 p[3]=in[(i )*x_size+j-1];
592 p[4]=in[(i )*x_size+j+1];
593 p[5]=in[(i+1)*x_size+j-1];
594 p[6]=in[(i+1)*x_size+j ];
595 p[7]=in[(i+1)*x_size+j+1];
596
597 _Pragma( "loopbound min 0 max 0" )
598 for(k=0; k<7; k++) {
599 _Pragma( "loopbound min 0 max 0" )
600 for(l=0; l<(7-k); l++) {
601 if (p[l]>p[l+1]) {
602 tmp=p[l];
603 p[l]=p[l+1];
604 p[l+1]=tmp;
605 }
606 }
607 }
608
609 return( (p[3]+p[4]) / 2 );
610}
611
612
613/* this enlarges "in" so that borders can be dealt with easily */
614void susan_enlarge( uchar **in, uchar *tmp_image,
615 int *x_size, int *y_size, int border )
616{
617 int i, j;
618
619 _Pragma( "loopbound min 95 max 95" )
620 for(i=0; i<*y_size; i++) { /* copy *in into tmp_image */
621 susan_wccmemcpy( tmp_image+(i+border)*(*x_size+2*border)+border,
622 *in+i* *x_size, *x_size);
623 }
624
625 _Pragma( "loopbound min 7 max 7" )
626 for(i=0; i<border; i++) { /* copy top and bottom rows; invert as many as necessary */
627 susan_wccmemcpy( tmp_image+(border-1-i)*(*x_size+2*border)+border,
628 *in+i* *x_size,*x_size);
629 susan_wccmemcpy( tmp_image+(*y_size+border+i)*(*x_size+2*border)+border,
630 *in+(*y_size-i-1)* *x_size,*x_size);
631 }
632
633 _Pragma( "loopbound min 7 max 7" )
634 for(i=0; i<border; i++) { /* copy left and right columns */
635 _Pragma( "loopbound min 109 max 109" )
636 for(j=0; j<*y_size+2*border; j++) {
637 tmp_image[j*(*x_size+2*border)+border-1-i]=tmp_image[j*(*x_size+2*border)+border+i];
638 tmp_image[j*(*x_size+2*border)+ *x_size+border+i]=tmp_image[j*(*x_size+2*border)+ *x_size+border-1-i];
639 }
640 }
641
642 *x_size+=2*border; /* alter image size */
643 *y_size+=2*border;
644 *in=tmp_image; /* repoint in */
645}
646
647
648void susan_smoothing( int three_by_three, uchar *in, float dt,
649 int x_size, int y_size, uchar *bp )
650{
651 float temp;
652 int n_max, increment, mask_size,
653 i,j,x,y,area,brightness,tmp,centre;
654 uchar *ip, *dp, *dpt, *cp, *out=in,
655 *tmp_image;
656 TOTAL_TYPE total;
657
658 /* {{{ setup larger image and border sizes */
659
660 if (three_by_three==0)
661 mask_size = ((int)(1.5 * dt)) + 1;
662 else
663 mask_size = 1;
664
665 if ( dt>15 ) {
666 /* "Distance_thresh too big for integer arithmetic." */
667 // Either reduce it to <=15 or recompile with variable "total"
668 // as a float: see top "defines" section.
669 }
670
671 if ( (2*mask_size+1>x_size) || (2*mask_size+1>y_size) ) {
672 /* "Mask size too big for image." */
673 }
674
675 tmp_image = (uchar *)susan_wccmalloc( (x_size+mask_size*2) * (y_size+mask_size*2) );
676 susan_enlarge(&in,tmp_image,&x_size,&y_size,mask_size);
677
678 if (three_by_three==0) {
679 /* large Gaussian masks */
680 /* {{{ setup distance lut */
681
682 n_max = (mask_size*2) + 1;
683
684 increment = x_size - n_max;
685
686 dp = (unsigned char *)susan_wccmalloc(n_max*n_max);
687 dpt = dp;
688 temp = -(dt*dt);
689
690 _Pragma( "loopbound min 15 max 15" )
691 for(i=-mask_size; i<=mask_size; i++) {
692 _Pragma( "loopbound min 15 max 15" )
693 for(j=-mask_size; j<=mask_size; j++) {
694 x = (int) (100.0 * susan_expf( ((float)((i*i)+(j*j))) / temp ));
695 *dpt++ = (unsigned char)x;
696 }
697 }
698
699 /* {{{ main section */
700
701 _Pragma( "loopbound min 95 max 95" )
702 for (i=mask_size;i<y_size-mask_size;i++) {
703 _Pragma( "loopbound min 76 max 76" )
704 for (j=mask_size;j<x_size-mask_size;j++) {
705 area = 0;
706 total = 0;
707 dpt = dp;
708 ip = in + ((i-mask_size)*x_size) + j - mask_size;
709 centre = in[i*x_size+j];
710 cp = bp + centre;
711 _Pragma( "loopbound min 15 max 15" )
712 for(y=-mask_size; y<=mask_size; y++) {
713 _Pragma( "loopbound min 15 max 15" )
714 for(x=-mask_size; x<=mask_size; x++) {
715 brightness = *ip++;
716 tmp = *dpt++ * *(cp-brightness);
717 area += tmp;
718 total += tmp * brightness;
719 }
720 ip += increment;
721 }
722 tmp = area-10000;
723 if (tmp==0)
724 *out++=susan_median(in,i,j,x_size);
725 else
726 *out++=((total-(centre*10000))/tmp);
727 }
728 }
729 } else {
730 /* 3x3 constant mask */
731
732 /* {{{ main section */
733
734 _Pragma( "loopbound min 15 max 15" )
735 for (i=1;i<y_size-1;i++) {
736 _Pragma( "loopbound min 15 max 15" )
737 for (j=1;j<x_size-1;j++) {
738 area = 0;
739 total = 0;
740 ip = in + ((i-1)*x_size) + j - 1;
741 centre = in[i*x_size+j];
742 cp = bp + centre;
743
744 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
745 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
746 brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
747 ip += x_size-2;
748 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
749 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
750 brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
751 ip += x_size-2;
752 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
753 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
754 brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
755
756 tmp = area-100;
757 if (tmp==0)
758 *out++=susan_median(in,i,j,x_size);
759 else
760 *out++=(total-(centre*100))/tmp;
761 }
762 }
763 }
764}
765
766
767void susan_edge_draw( uchar *in, uchar *mid,
768 int x_size, int y_size, int drawing_mode )
769{
770 int i;
771 uchar *inp, *midp;
772
773 if (drawing_mode==0) {
774 /* mark 3x3 white block around each edge point */
775 midp=mid;
776 _Pragma( "loopbound min 7220 max 7220" )
777 for (i=0; i<x_size*y_size; i++) {
778 if (*midp<8) {
779 inp = in + (midp - mid) - x_size - 1;
780 *inp++=255; *inp++=255; *inp=255; inp+=x_size-2;
781 *inp++=255; inp++; *inp=255; inp+=x_size-2;
782 *inp++=255; *inp++=255; *inp=255;
783 }
784 midp++;
785 }
786 }
787
788 /* now mark 1 black pixel at each edge point */
789 midp=mid;
790 _Pragma( "loopbound min 7220 max 7220" )
791 for (i=0; i<x_size*y_size; i++) {
792 if (*midp<8)
793 *(in + (midp - mid)) = 0;
794 midp++;
795 }
796}
797
798
799void susan_thin( char *r, uchar *mid, int x_size, int y_size )
800{
801 int l[9], centre,
802 b01, b12, b21, b10,
803 p1, p2, p3, p4,
804 b00, b02, b20, b22,
805 m, n, a, b, x, y, i, j;
806 uchar *mp;
807
808 _Pragma( "loopbound min 87 max 87" )
809 for (i=4;i<y_size-4;i++) {
810 _Pragma( "loopbound min 68 max 68" )
811 for (j=4;j<x_size-4;j++) {
812 if (mid[i*x_size+j]<8) {
813 centre = r[i*x_size+j];
814 /* {{{ count number of neighbours */
815
816 mp=mid + (i-1)*x_size + j-1;
817
818 n = (*mp<8) +
819 (*(mp+1)<8) +
820 (*(mp+2)<8) +
821 (*(mp+x_size)<8) +
822 (*(mp+x_size+2)<8) +
823 (*(mp+x_size+x_size)<8) +
824 (*(mp+x_size+x_size+1)<8) +
825 (*(mp+x_size+x_size+2)<8);
826
827 /* {{{ n==0 no neighbours - remove point */
828
829 if (n==0)
830 mid[i*x_size+j]=100;
831
832 /* {{{ n==1 - extend line if I can */
833
834 /* extension is only allowed a few times - the value of mid is used to control this */
835
836 if ( (n==1) && (mid[i*x_size+j]<6) ) {
837 /* find maximum neighbour weighted in direction opposite the
838 neighbour already present. e.g.
839 have: O O O weight r by 0 2 3
840 X X O 0 0 4
841 O O O 0 2 3 */
842
843 l[0]=r[(i-1)*x_size+j-1]; l[1]=r[(i-1)*x_size+j]; l[2]=r[(i-1)*x_size+j+1];
844 l[3]=r[(i )*x_size+j-1]; l[4]=0; l[5]=r[(i )*x_size+j+1];
845 l[6]=r[(i+1)*x_size+j-1]; l[7]=r[(i+1)*x_size+j]; l[8]=r[(i+1)*x_size+j+1];
846
847 if (mid[(i-1)*x_size+j-1]<8) { l[0]=0; l[1]=0; l[3]=0; l[2]*=2;
848 l[6]*=2; l[5]*=3; l[7]*=3; l[8]*=4; }
849 else { if (mid[(i-1)*x_size+j]<8) { l[1]=0; l[0]=0; l[2]=0; l[3]*=2;
850 l[5]*=2; l[6]*=3; l[8]*=3; l[7]*=4; }
851 else { if (mid[(i-1)*x_size+j+1]<8) { l[2]=0; l[1]=0; l[5]=0; l[0]*=2;
852 l[8]*=2; l[3]*=3; l[7]*=3; l[6]*=4; }
853 else { if (mid[(i)*x_size+j-1]<8) { l[3]=0; l[0]=0; l[6]=0; l[1]*=2;
854 l[7]*=2; l[2]*=3; l[8]*=3; l[5]*=4; }
855 else { if (mid[(i)*x_size+j+1]<8) { l[5]=0; l[2]=0; l[8]=0; l[1]*=2;
856 l[7]*=2; l[0]*=3; l[6]*=3; l[3]*=4; }
857 else { if (mid[(i+1)*x_size+j-1]<8) { l[6]=0; l[3]=0; l[7]=0; l[0]*=2;
858 l[8]*=2; l[1]*=3; l[5]*=3; l[2]*=4; }
859 else { if (mid[(i+1)*x_size+j]<8) { l[7]=0; l[6]=0; l[8]=0; l[3]*=2;
860 l[5]*=2; l[0]*=3; l[2]*=3; l[1]*=4; }
861 else { if (mid[(i+1)*x_size+j+1]<8) { l[8]=0; l[5]=0; l[7]=0; l[6]*=2;
862 l[2]*=2; l[1]*=3; l[3]*=3; l[0]*=4; } }}}}}}}
863
864 m=0; /* find the highest point */
865 _Pragma( "loopbound min 3 max 3" )
866 for(y=0; y<3; y++)
867 _Pragma( "loopbound min 3 max 3" )
868 for(x=0; x<3; x++)
869 if (l[y+y+y+x]>m) { m=l[y+y+y+x]; a=y; b=x; }
870
871 if (m>0) {
872 if (mid[i*x_size+j]<4)
873 mid[(i+a-1)*x_size+j+b-1] = 4;
874 else
875 mid[(i+a-1)*x_size+j+b-1] = mid[i*x_size+j]+1;
876 if ( (a+a+b) < 3 ) { /* need to jump back in image */
877 i+=a-1;
878 j+=b-2;
879 if (i<4) i=4;
880 if (j<4) j=4;
881 }
882 }
883 }
884
885 /* {{{ n==2 */
886
887 if (n==2) {
888 /* put in a bit here to straighten edges */
889 b00 = mid[(i-1)*x_size+j-1]<8; /* corners of 3x3 */
890 b02 = mid[(i-1)*x_size+j+1]<8;
891 b20 = mid[(i+1)*x_size+j-1]<8;
892 b22 = mid[(i+1)*x_size+j+1]<8;
893 if ( ((b00+b02+b20+b22)==2) && ((b00|b22)&(b02|b20))) {
894 /* case: move a point back into line.
895 e.g. X O X CAN become X X X
896 O X O O O O
897 O O O O O O */
898 if (b00) {
899 if (b02) { x=0; y=-1; }
900 else { x=-1; y=0; }
901 } else {
902 if (b02) { x=1; y=0; }
903 else { x=0; y=1; }
904 }
905 if (((float)r[(i+y)*x_size+j+x]/(float)centre) > 0.7) {
906 if ( ( (x==0) && (mid[(i+(2*y))*x_size+j]>7) && (mid[(i+(2*y))*x_size+j-1]>7) && (mid[(i+(2*y))*x_size+j+1]>7) ) ||
907 ( (y==0) && (mid[(i)*x_size+j+(2*x)]>7) && (mid[(i+1)*x_size+j+(2*x)]>7) && (mid[(i-1)*x_size+j+(2*x)]>7) ) ) {
908 mid[(i)*x_size+j]=100;
909 mid[(i+y)*x_size+j+x]=3; /* no jumping needed */
910 }
911 }
912 } else {
913 b01 = mid[(i-1)*x_size+j ]<8;
914 b12 = mid[(i )*x_size+j+1]<8;
915 b21 = mid[(i+1)*x_size+j ]<8;
916 b10 = mid[(i )*x_size+j-1]<8;
917 /* {{{ right angle ends - not currently used */
918
919#ifdef IGNORETHIS
920 if ( (b00&b01)|(b00&b10)|(b02&b01)|(b02&b12)|(b20&b10)|(b20&b21)|(b22&b21)|(b22&b12) ) {
921 /* case; right angle ends. clean up.
922 e.g.; X X O CAN become X X O
923 O X O O O O
924 O O O O O O */
925 if ( ((b01)&(mid[(i-2)*x_size+j-1]>7)&(mid[(i-2)*x_size+j]>7)&(mid[(i-2)*x_size+j+1]>7)&
926 ((b00&((2*r[(i-1)*x_size+j+1])>centre))|(b02&((2*r[(i-1)*x_size+j-1])>centre)))) |
927 ((b10)&(mid[(i-1)*x_size+j-2]>7)&(mid[(i)*x_size+j-2]>7)&(mid[(i+1)*x_size+j-2]>7)&
928 ((b00&((2*r[(i+1)*x_size+j-1])>centre))|(b20&((2*r[(i-1)*x_size+j-1])>centre)))) |
929 ((b12)&(mid[(i-1)*x_size+j+2]>7)&(mid[(i)*x_size+j+2]>7)&(mid[(i+1)*x_size+j+2]>7)&
930 ((b02&((2*r[(i+1)*x_size+j+1])>centre))|(b22&((2*r[(i-1)*x_size+j+1])>centre)))) |
931 ((b21)&(mid[(i+2)*x_size+j-1]>7)&(mid[(i+2)*x_size+j]>7)&(mid[(i+2)*x_size+j+1]>7)&
932 ((b20&((2*r[(i+1)*x_size+j+1])>centre))|(b22&((2*r[(i+1)*x_size+j-1])>centre)))) ) {
933 mid[(i)*x_size+j]=100;
934 if (b10&b20) j-=2;
935 if (b00|b01|b02) { i--; j-=2; }
936 }
937 }
938#endif
939
940 if ( ((b01+b12+b21+b10)==2) && ((b10|b12)&(b01|b21)) &&
941 ((b01&((mid[(i-2)*x_size+j-1]<8)|(mid[(i-2)*x_size+j+1]<8)))|(b10&((mid[(i-1)*x_size+j-2]<8)|(mid[(i+1)*x_size+j-2]<8)))|
942 (b12&((mid[(i-1)*x_size+j+2]<8)|(mid[(i+1)*x_size+j+2]<8)))|(b21&((mid[(i+2)*x_size+j-1]<8)|(mid[(i+2)*x_size+j+1]<8)))) ) {
943 /* case; clears odd right angles.
944 e.g.; O O O becomes O O O
945 X X O X O O
946 O X O O X O */
947 mid[(i)*x_size+j]=100;
948 i--; /* jump back */
949 j-=2;
950 if (i<4) i=4;
951 if (j<4) j=4;
952 }
953 }
954 }
955
956 /* {{{ n>2 the thinning is done here without breaking connectivity */
957
958 if (n>2) {
959 b01 = mid[(i-1)*x_size+j ]<8;
960 b12 = mid[(i )*x_size+j+1]<8;
961 b21 = mid[(i+1)*x_size+j ]<8;
962 b10 = mid[(i )*x_size+j-1]<8;
963 if((b01+b12+b21+b10)>1) {
964 b00 = mid[(i-1)*x_size+j-1]<8;
965 b02 = mid[(i-1)*x_size+j+1]<8;
966 b20 = mid[(i+1)*x_size+j-1]<8;
967 b22 = mid[(i+1)*x_size+j+1]<8;
968 p1 = b00 | b01;
969 p2 = b02 | b12;
970 p3 = b22 | b21;
971 p4 = b20 | b10;
972
973 if( ((p1 + p2 + p3 + p4) - ((b01 & p2)+(b12 & p3)+(b21 & p4)+(b10 & p1))) < 2) {
974 mid[(i)*x_size+j]=100;
975 i--;
976 j-=2;
977 if (i<4) i=4;
978 if (j<4) j=4;
979 }
980 }
981 }
982 }
983 }
984 }
985}
986
987
988void susan_edges( uchar *in, char *r, uchar *mid, uchar *bp,
989 int max_no, int x_size, int y_size )
990{
991 float z;
992 int do_symmetry, i, j, m, n, a, b, x, y, w;
993 uchar c,*p,*cp;
994
995 susan_wccmemset(r,0,x_size * y_size);
996
997 _Pragma( "loopbound min 89 max 89" )
998 for (i=3;i<y_size-3;i++) {
999 _Pragma( "loopbound min 70 max 70" )
1000 for (j=3;j<x_size-3;j++) {
1001 n=100;
1002 p=in + (i-3)*x_size + j - 1;
1003 cp=bp + in[i*x_size+j];
1004
1005 n+=*(cp-*p++);
1006 n+=*(cp-*p++);
1007 n+=*(cp-*p);
1008 p+=x_size-3;
1009
1010 n+=*(cp-*p++);
1011 n+=*(cp-*p++);
1012 n+=*(cp-*p++);
1013 n+=*(cp-*p++);
1014 n+=*(cp-*p);
1015 p+=x_size-5;
1016
1017 n+=*(cp-*p++);
1018 n+=*(cp-*p++);
1019 n+=*(cp-*p++);
1020 n+=*(cp-*p++);
1021 n+=*(cp-*p++);
1022 n+=*(cp-*p++);
1023 n+=*(cp-*p);
1024 p+=x_size-6;
1025
1026 n+=*(cp-*p++);
1027 n+=*(cp-*p++);
1028 n+=*(cp-*p);
1029 p+=2;
1030 n+=*(cp-*p++);
1031 n+=*(cp-*p++);
1032 n+=*(cp-*p);
1033 p+=x_size-6;
1034
1035 n+=*(cp-*p++);
1036 n+=*(cp-*p++);
1037 n+=*(cp-*p++);
1038 n+=*(cp-*p++);
1039 n+=*(cp-*p++);
1040 n+=*(cp-*p++);
1041 n+=*(cp-*p);
1042 p+=x_size-5;
1043
1044 n+=*(cp-*p++);
1045 n+=*(cp-*p++);
1046 n+=*(cp-*p++);
1047 n+=*(cp-*p++);
1048 n+=*(cp-*p);
1049 p+=x_size-3;
1050
1051 n+=*(cp-*p++);
1052 n+=*(cp-*p++);
1053 n+=*(cp-*p);
1054
1055 if (n<=max_no)
1056 r[i*x_size+j] = max_no - n;
1057 }
1058 }
1059
1060 _Pragma( "loopbound min 87 max 87" )
1061 for (i=4;i<y_size-4;i++) {
1062 _Pragma( "loopbound min 68 max 68" )
1063 for (j=4;j<x_size-4;j++) {
1064 if (r[i*x_size+j]>0) {
1065 m=r[i*x_size+j];
1066 n=max_no - m;
1067 cp=bp + in[i*x_size+j];
1068
1069 if (n>600) {
1070 p=in + (i-3)*x_size + j - 1;
1071 x=0;y=0;
1072
1073 c=*(cp-*p++);x-=c;y-=3*c;
1074 c=*(cp-*p++);y-=3*c;
1075 c=*(cp-*p);x+=c;y-=3*c;
1076 p+=x_size-3;
1077
1078 c=*(cp-*p++);x-=2*c;y-=2*c;
1079 c=*(cp-*p++);x-=c;y-=2*c;
1080 c=*(cp-*p++);y-=2*c;
1081 c=*(cp-*p++);x+=c;y-=2*c;
1082 c=*(cp-*p);x+=2*c;y-=2*c;
1083 p+=x_size-5;
1084
1085 c=*(cp-*p++);x-=3*c;y-=c;
1086 c=*(cp-*p++);x-=2*c;y-=c;
1087 c=*(cp-*p++);x-=c;y-=c;
1088 c=*(cp-*p++);y-=c;
1089 c=*(cp-*p++);x+=c;y-=c;
1090 c=*(cp-*p++);x+=2*c;y-=c;
1091 c=*(cp-*p);x+=3*c;y-=c;
1092 p+=x_size-6;
1093
1094 c=*(cp-*p++);x-=3*c;
1095 c=*(cp-*p++);x-=2*c;
1096 c=*(cp-*p);x-=c;
1097 p+=2;
1098 c=*(cp-*p++);x+=c;
1099 c=*(cp-*p++);x+=2*c;
1100 c=*(cp-*p);x+=3*c;
1101 p+=x_size-6;
1102
1103 c=*(cp-*p++);x-=3*c;y+=c;
1104 c=*(cp-*p++);x-=2*c;y+=c;
1105 c=*(cp-*p++);x-=c;y+=c;
1106 c=*(cp-*p++);y+=c;
1107 c=*(cp-*p++);x+=c;y+=c;
1108 c=*(cp-*p++);x+=2*c;y+=c;
1109 c=*(cp-*p);x+=3*c;y+=c;
1110 p+=x_size-5;
1111
1112 c=*(cp-*p++);x-=2*c;y+=2*c;
1113 c=*(cp-*p++);x-=c;y+=2*c;
1114 c=*(cp-*p++);y+=2*c;
1115 c=*(cp-*p++);x+=c;y+=2*c;
1116 c=*(cp-*p);x+=2*c;y+=2*c;
1117 p+=x_size-3;
1118
1119 c=*(cp-*p++);x-=c;y+=3*c;
1120 c=*(cp-*p++);y+=3*c;
1121 c=*(cp-*p);x+=c;y+=3*c;
1122
1123 z = susan_sqrtf((float)((x*x) + (y*y)));
1124 if (z > (0.9*(float)n)) { /* 0.5 */
1125 do_symmetry=0;
1126 if (x==0)
1127 z=1000000.0;
1128 else
1129 z=((float)y) / ((float)x);
1130 if (z < 0) { z=-z; w=-1; }
1131 else w=1;
1132 if (z < 0.5) { /* vert_edge */ a=0; b=1; }
1133 else { if (z > 2.0) { /* hor_edge */ a=1; b=0; }
1134 else { /* diag_edge */ if (w>0) { a=1; b=1; }
1135 else { a=-1; b=1; }}}
1136 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) &&
1137 (m > r[(i+(2*a))*x_size+j+(2*b)]) && (m >= r[(i-(2*a))*x_size+j-(2*b)]) )
1138 mid[i*x_size+j] = 1;
1139 } else {
1140 do_symmetry=1;
1141 }
1142 } else {
1143 do_symmetry=1;
1144 }
1145
1146 if (do_symmetry==1) {
1147 p=in + (i-3)*x_size + j - 1;
1148 x=0; y=0; w=0;
1149
1150 /* | \
1151 y -x- w
1152 | \ */
1153
1154 c=*(cp-*p++);x+=c;y+=9*c;w+=3*c;
1155 c=*(cp-*p++);y+=9*c;
1156 c=*(cp-*p);x+=c;y+=9*c;w-=3*c;
1157 p+=x_size-3;
1158
1159 c=*(cp-*p++);x+=4*c;y+=4*c;w+=4*c;
1160 c=*(cp-*p++);x+=c;y+=4*c;w+=2*c;
1161 c=*(cp-*p++);y+=4*c;
1162 c=*(cp-*p++);x+=c;y+=4*c;w-=2*c;
1163 c=*(cp-*p);x+=4*c;y+=4*c;w-=4*c;
1164 p+=x_size-5;
1165
1166 c=*(cp-*p++);x+=9*c;y+=c;w+=3*c;
1167 c=*(cp-*p++);x+=4*c;y+=c;w+=2*c;
1168 c=*(cp-*p++);x+=c;y+=c;w+=c;
1169 c=*(cp-*p++);y+=c;
1170 c=*(cp-*p++);x+=c;y+=c;w-=c;
1171 c=*(cp-*p++);x+=4*c;y+=c;w-=2*c;
1172 c=*(cp-*p);x+=9*c;y+=c;w-=3*c;
1173 p+=x_size-6;
1174
1175 c=*(cp-*p++);x+=9*c;
1176 c=*(cp-*p++);x+=4*c;
1177 c=*(cp-*p);x+=c;
1178 p+=2;
1179 c=*(cp-*p++);x+=c;
1180 c=*(cp-*p++);x+=4*c;
1181 c=*(cp-*p);x+=9*c;
1182 p+=x_size-6;
1183
1184 c=*(cp-*p++);x+=9*c;y+=c;w-=3*c;
1185 c=*(cp-*p++);x+=4*c;y+=c;w-=2*c;
1186 c=*(cp-*p++);x+=c;y+=c;w-=c;
1187 c=*(cp-*p++);y+=c;
1188 c=*(cp-*p++);x+=c;y+=c;w+=c;
1189 c=*(cp-*p++);x+=4*c;y+=c;w+=2*c;
1190 c=*(cp-*p);x+=9*c;y+=c;w+=3*c;
1191 p+=x_size-5;
1192
1193 c=*(cp-*p++);x+=4*c;y+=4*c;w-=4*c;
1194 c=*(cp-*p++);x+=c;y+=4*c;w-=2*c;
1195 c=*(cp-*p++);y+=4*c;
1196 c=*(cp-*p++);x+=c;y+=4*c;w+=2*c;
1197 c=*(cp-*p);x+=4*c;y+=4*c;w+=4*c;
1198 p+=x_size-3;
1199
1200 c=*(cp-*p++);x+=c;y+=9*c;w-=3*c;
1201 c=*(cp-*p++);y+=9*c;
1202 c=*(cp-*p);x+=c;y+=9*c;w+=3*c;
1203
1204 if (y==0)
1205 z = 1000000.0;
1206 else
1207 z = ((float)x) / ((float)y);
1208 if (z < 0.5) { /* vertical */ a=0; b=1; }
1209 else { if (z > 2.0) { /* horizontal */ a=1; b=0; }
1210 else { /* diagonal */ if (w>0) { a=-1; b=1; }
1211 else { a=1; b=1; }}}
1212 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) &&
1213 (m > r[(i+(2*a))*x_size+j+(2*b)]) && (m >= r[(i-(2*a))*x_size+j-(2*b)]) )
1214 mid[i*x_size+j] = 2;
1215 }
1216 }
1217 }
1218 }
1219}
1220
1221
1222void susan_edges_small( uchar *in, char *r, uchar *mid, uchar *bp,
1223 int max_no, int x_size, int y_size )
1224{
1225 float z;
1226 int do_symmetry, i, j, m, n, a, b, x, y, w;
1227 uchar c,*p,*cp;
1228
1229 susan_wccmemset(r,0,x_size * y_size);
1230
1231 _Pragma( "loopbound min 0 max 0" )
1232 for (i=1;i<y_size-1;i++) {
1233 _Pragma( "loopbound min 0 max 0" )
1234 for (j=1;j<x_size-1;j++) {
1235 n=100;
1236 p=in + (i-1)*x_size + j - 1;
1237 cp=bp + in[i*x_size+j];
1238
1239 n+=*(cp-*p++);
1240 n+=*(cp-*p++);
1241 n+=*(cp-*p);
1242 p+=x_size-2;
1243
1244 n+=*(cp-*p);
1245 p+=2;
1246 n+=*(cp-*p);
1247 p+=x_size-2;
1248
1249 n+=*(cp-*p++);
1250 n+=*(cp-*p++);
1251 n+=*(cp-*p);
1252
1253 if (n<=max_no) {
1254 r[i*x_size+j] = max_no - n;
1255 }
1256 }
1257 }
1258
1259 _Pragma( "loopbound min 0 max 0" )
1260 for (i=2;i<y_size-2;i++) {
1261 _Pragma( "loopbound min 0 max 0" )
1262 for (j=2;j<x_size-2;j++) {
1263 if (r[i*x_size+j]>0) {
1264 m=r[i*x_size+j];
1265 n=max_no - m;
1266 cp=bp + in[i*x_size+j];
1267
1268 if (n>250) {
1269 p=in + (i-1)*x_size + j - 1;
1270 x=0;y=0;
1271
1272 c=*(cp-*p++);x-=c;y-=c;
1273 c=*(cp-*p++);y-=c;
1274 c=*(cp-*p);x+=c;y-=c;
1275 p+=x_size-2;
1276
1277 c=*(cp-*p);x-=c;
1278 p+=2;
1279 c=*(cp-*p);x+=c;
1280 p+=x_size-2;
1281
1282 c=*(cp-*p++);x-=c;y+=c;
1283 c=*(cp-*p++);y+=c;
1284 c=*(cp-*p);x+=c;y+=c;
1285
1286 z = susan_sqrtf((float)((x*x) + (y*y)));
1287 if (z > (0.4*(float)n)) { /* 0.6 */
1288 do_symmetry=0;
1289 if (x==0)
1290 z=1000000.0;
1291 else
1292 z=((float)y) / ((float)x);
1293 if (z < 0) { z=-z; w=-1; }
1294 else w=1;
1295 if (z < 0.5) { /* vert_edge */ a=0; b=1; }
1296 else { if (z > 2.0) { /* hor_edge */ a=1; b=0; }
1297 else { /* diag_edge */ if (w>0) { a=1; b=1; }
1298 else { a=-1; b=1; }
1299 }
1300 }
1301 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) ) {
1302 mid[i*x_size+j] = 1;
1303 }
1304 } else {
1305 do_symmetry=1;
1306 }
1307 } else {
1308 do_symmetry=1;
1309 }
1310
1311 if (do_symmetry==1) {
1312 p=in + (i-1)*x_size + j - 1;
1313 x=0; y=0; w=0;
1314
1315 /* | \
1316 y -x- w
1317 | \ */
1318
1319 c=*(cp-*p++);x+=c;y+=c;w+=c;
1320 c=*(cp-*p++);y+=c;
1321 c=*(cp-*p);x+=c;y+=c;w-=c;
1322 p+=x_size-2;
1323
1324 c=*(cp-*p);x+=c;
1325 p+=2;
1326 c=*(cp-*p);x+=c;
1327 p+=x_size-2;
1328
1329 c=*(cp-*p++);x+=c;y+=c;w-=c;
1330 c=*(cp-*p++);y+=c;
1331 c=*(cp-*p);x+=c;y+=c;w+=c;
1332
1333 if (y==0)
1334 z = 1000000.0;
1335 else
1336 z = ((float)x) / ((float)y);
1337 if (z < 0.5) { /* vertical */ a=0; b=1; }
1338 else { if (z > 2.0) { /* horizontal */ a=1; b=0; }
1339 else { /* diagonal */ if (w>0) { a=-1; b=1; }
1340 else { a=1; b=1; }
1341 }
1342 }
1343 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) ) {
1344 mid[i*x_size+j] = 2;
1345 }
1346 }
1347 }
1348 }
1349 }
1350}
1351
1352
1353void susan_corner_draw( uchar *in, CORNER_LIST corner_list,
1354 int x_size, int drawing_mode)
1355{
1356 uchar *p;
1357 int n=0;
1358
1359 _Pragma( "loopbound min 0 max 0" )
1360 while(corner_list[n].info != 7) {
1361 if (drawing_mode==0) {
1362 p = in + (corner_list[n].y-1)*x_size + corner_list[n].x - 1;
1363 *p++=255; *p++=255; *p=255; p+=x_size-2;
1364 *p++=255; *p++=0; *p=255; p+=x_size-2;
1365 *p++=255; *p++=255; *p=255;
1366 n++;
1367 } else {
1368 p = in + corner_list[n].y*x_size + corner_list[n].x;
1369 *p=0;
1370 n++;
1371 }
1372 }
1373}
1374
1375
1376void susan_corners( uchar *in, char *r, uchar *bp,
1377 int max_no, CORNER_LIST corner_list, int x_size, int y_size)
1378{
1379 int n,x,y,sq,xx,yy,
1380 i,j;
1381 float divide;
1382 uchar c,*p,*cp;
1383 char *cgx,*cgy;
1384
1385 susan_wccmemset(r,0,x_size * y_size);
1386
1387 cgx=(char *)susan_wccmalloc(x_size*y_size);
1388 cgy=(char *)susan_wccmalloc(x_size*y_size);
1389
1390 _Pragma( "loopbound min 85 max 85" )
1391 for (i=5;i<y_size-5;i++) {
1392 _Pragma( "loopbound min 66 max 66" )
1393 for (j=5;j<x_size-5;j++) {
1394 n=100;
1395 p=in + (i-3)*x_size + j - 1;
1396 cp=bp + in[i*x_size+j];
1397
1398 n+=*(cp-*p++);
1399 n+=*(cp-*p++);
1400 n+=*(cp-*p);
1401 p+=x_size-3;
1402
1403 n+=*(cp-*p++);
1404 n+=*(cp-*p++);
1405 n+=*(cp-*p++);
1406 n+=*(cp-*p++);
1407 n+=*(cp-*p);
1408 p+=x_size-5;
1409
1410 n+=*(cp-*p++);
1411 n+=*(cp-*p++);
1412 n+=*(cp-*p++);
1413 n+=*(cp-*p++);
1414 n+=*(cp-*p++);
1415 n+=*(cp-*p++);
1416 n+=*(cp-*p);
1417 p+=x_size-6;
1418
1419 n+=*(cp-*p++);
1420 n+=*(cp-*p++);
1421 n+=*(cp-*p);
1422 if (n<max_no){ /* do this test early and often ONLY to save wasted computation */
1423 p+=2;
1424 n+=*(cp-*p++);
1425 if (n<max_no){
1426 n+=*(cp-*p++);
1427 if (n<max_no){
1428 n+=*(cp-*p);
1429 if (n<max_no){
1430 p+=x_size-6;
1431
1432 n+=*(cp-*p++);
1433 if (n<max_no){
1434 n+=*(cp-*p++);
1435 if (n<max_no){
1436 n+=*(cp-*p++);
1437 if (n<max_no){
1438 n+=*(cp-*p++);
1439 if (n<max_no){
1440 n+=*(cp-*p++);
1441 if (n<max_no){
1442 n+=*(cp-*p++);
1443 if (n<max_no){
1444 n+=*(cp-*p);
1445 if (n<max_no){
1446 p+=x_size-5;
1447
1448 n+=*(cp-*p++);
1449 if (n<max_no){
1450 n+=*(cp-*p++);
1451 if (n<max_no){
1452 n+=*(cp-*p++);
1453 if (n<max_no){
1454 n+=*(cp-*p++);
1455 if (n<max_no){
1456 n+=*(cp-*p);
1457 if (n<max_no){
1458 p+=x_size-3;
1459
1460 n+=*(cp-*p++);
1461 if (n<max_no){
1462 n+=*(cp-*p++);
1463 if (n<max_no){
1464 n+=*(cp-*p);
1465
1466 if (n<max_no) {
1467 x=0;y=0;
1468 p=in + (i-3)*x_size + j - 1;
1469
1470 c=*(cp-*p++);x-=c;y-=3*c;
1471 c=*(cp-*p++);y-=3*c;
1472 c=*(cp-*p);x+=c;y-=3*c;
1473 p+=x_size-3;
1474
1475 c=*(cp-*p++);x-=2*c;y-=2*c;
1476 c=*(cp-*p++);x-=c;y-=2*c;
1477 c=*(cp-*p++);y-=2*c;
1478 c=*(cp-*p++);x+=c;y-=2*c;
1479 c=*(cp-*p);x+=2*c;y-=2*c;
1480 p+=x_size-5;
1481
1482 c=*(cp-*p++);x-=3*c;y-=c;
1483 c=*(cp-*p++);x-=2*c;y-=c;
1484 c=*(cp-*p++);x-=c;y-=c;
1485 c=*(cp-*p++);y-=c;
1486 c=*(cp-*p++);x+=c;y-=c;
1487 c=*(cp-*p++);x+=2*c;y-=c;
1488 c=*(cp-*p);x+=3*c;y-=c;
1489 p+=x_size-6;
1490
1491 c=*(cp-*p++);x-=3*c;
1492 c=*(cp-*p++);x-=2*c;
1493 c=*(cp-*p);x-=c;
1494 p+=2;
1495 c=*(cp-*p++);x+=c;
1496 c=*(cp-*p++);x+=2*c;
1497 c=*(cp-*p);x+=3*c;
1498 p+=x_size-6;
1499
1500 c=*(cp-*p++);x-=3*c;y+=c;
1501 c=*(cp-*p++);x-=2*c;y+=c;
1502 c=*(cp-*p++);x-=c;y+=c;
1503 c=*(cp-*p++);y+=c;
1504 c=*(cp-*p++);x+=c;y+=c;
1505 c=*(cp-*p++);x+=2*c;y+=c;
1506 c=*(cp-*p);x+=3*c;y+=c;
1507 p+=x_size-5;
1508
1509 c=*(cp-*p++);x-=2*c;y+=2*c;
1510 c=*(cp-*p++);x-=c;y+=2*c;
1511 c=*(cp-*p++);y+=2*c;
1512 c=*(cp-*p++);x+=c;y+=2*c;
1513 c=*(cp-*p);x+=2*c;y+=2*c;
1514 p+=x_size-3;
1515
1516 c=*(cp-*p++);x-=c;y+=3*c;
1517 c=*(cp-*p++);y+=3*c;
1518 c=*(cp-*p);x+=c;y+=3*c;
1519
1520 xx=x*x;
1521 yy=y*y;
1522 sq=xx+yy;
1523 if ( sq > ((n*n)/2) ) {
1524 if(yy<xx) {
1525 divide=(float)y/(float)abs(x);
1526 sq=abs(x)/x;
1527 sq=*(cp-in[(i+FTOI(divide))*x_size+j+sq]) +
1528 *(cp-in[(i+FTOI(2*divide))*x_size+j+2*sq]) +
1529 *(cp-in[(i+FTOI(3*divide))*x_size+j+3*sq]);
1530 } else {
1531 divide=(float)x/(float)abs(y);
1532 sq=abs(y)/y;
1533 sq=*(cp-in[(i+sq)*x_size+j+FTOI(divide)]) +
1534 *(cp-in[(i+2*sq)*x_size+j+FTOI(2*divide)]) +
1535 *(cp-in[(i+3*sq)*x_size+j+FTOI(3*divide)]);
1536 }
1537
1538 if(sq>290){
1539 r[i*x_size+j] = max_no-n;
1540 cgx[i*x_size+j] = (51*x)/n;
1541 cgy[i*x_size+j] = (51*y)/n;
1542 }
1543 }
1544 }
1545 }}}}}}}}}}}}}}}}}}
1546 }
1547 }
1548
1549 /* to locate the local maxima */
1550 n=0;
1551 _Pragma( "loopbound min 85 max 85" )
1552 for (i=5;i<y_size-5;i++) {
1553 _Pragma( "loopbound min 66 max 66" )
1554 for (j=5;j<x_size-5;j++) {
1555 x = r[i*x_size+j];
1556 if (x>0) {
1557 /* 5x5 mask */
1558 #ifdef FIVE_SUPP
1559 if ((x>r[(i-1)*x_size+j+2]) &&
1560 (x>r[(i )*x_size+j+1]) &&
1561 (x>r[(i )*x_size+j+2]) &&
1562 (x>r[(i+1)*x_size+j-1]) &&
1563 (x>r[(i+1)*x_size+j ]) &&
1564 (x>r[(i+1)*x_size+j+1]) &&
1565 (x>r[(i+1)*x_size+j+2]) &&
1566 (x>r[(i+2)*x_size+j-2]) &&
1567 (x>r[(i+2)*x_size+j-1]) &&
1568 (x>r[(i+2)*x_size+j ]) &&
1569 (x>r[(i+2)*x_size+j+1]) &&
1570 (x>r[(i+2)*x_size+j+2]) &&
1571 (x>=r[(i-2)*x_size+j-2]) &&
1572 (x>=r[(i-2)*x_size+j-1]) &&
1573 (x>=r[(i-2)*x_size+j ]) &&
1574 (x>=r[(i-2)*x_size+j+1]) &&
1575 (x>=r[(i-2)*x_size+j+2]) &&
1576 (x>=r[(i-1)*x_size+j-2]) &&
1577 (x>=r[(i-1)*x_size+j-1]) &&
1578 (x>=r[(i-1)*x_size+j ]) &&
1579 (x>=r[(i-1)*x_size+j+1]) &&
1580 (x>=r[(i )*x_size+j-2]) &&
1581 (x>=r[(i )*x_size+j-1]) &&
1582 (x>=r[(i+1)*x_size+j-2]) )
1583 #endif
1584 #ifdef SEVEN_SUPP
1585 if ((x>r[(i-3)*x_size+j-3]) &&
1586 (x>r[(i-3)*x_size+j-2]) &&
1587 (x>r[(i-3)*x_size+j-1]) &&
1588 (x>r[(i-3)*x_size+j ]) &&
1589 (x>r[(i-3)*x_size+j+1]) &&
1590 (x>r[(i-3)*x_size+j+2]) &&
1591 (x>r[(i-3)*x_size+j+3]) &&
1592
1593 (x>r[(i-2)*x_size+j-3]) &&
1594 (x>r[(i-2)*x_size+j-2]) &&
1595 (x>r[(i-2)*x_size+j-1]) &&
1596 (x>r[(i-2)*x_size+j ]) &&
1597 (x>r[(i-2)*x_size+j+1]) &&
1598 (x>r[(i-2)*x_size+j+2]) &&
1599 (x>r[(i-2)*x_size+j+3]) &&
1600
1601 (x>r[(i-1)*x_size+j-3]) &&
1602 (x>r[(i-1)*x_size+j-2]) &&
1603 (x>r[(i-1)*x_size+j-1]) &&
1604 (x>r[(i-1)*x_size+j ]) &&
1605 (x>r[(i-1)*x_size+j+1]) &&
1606 (x>r[(i-1)*x_size+j+2]) &&
1607 (x>r[(i-1)*x_size+j+3]) &&
1608
1609 (x>r[(i)*x_size+j-3]) &&
1610 (x>r[(i)*x_size+j-2]) &&
1611 (x>r[(i)*x_size+j-1]) &&
1612 (x>=r[(i)*x_size+j+1]) &&
1613 (x>=r[(i)*x_size+j+2]) &&
1614 (x>=r[(i)*x_size+j+3]) &&
1615
1616 (x>=r[(i+1)*x_size+j-3]) &&
1617 (x>=r[(i+1)*x_size+j-2]) &&
1618 (x>=r[(i+1)*x_size+j-1]) &&
1619 (x>=r[(i+1)*x_size+j ]) &&
1620 (x>=r[(i+1)*x_size+j+1]) &&
1621 (x>=r[(i+1)*x_size+j+2]) &&
1622 (x>=r[(i+1)*x_size+j+3]) &&
1623
1624 (x>=r[(i+2)*x_size+j-3]) &&
1625 (x>=r[(i+2)*x_size+j-2]) &&
1626 (x>=r[(i+2)*x_size+j-1]) &&
1627 (x>=r[(i+2)*x_size+j ]) &&
1628 (x>=r[(i+2)*x_size+j+1]) &&
1629 (x>=r[(i+2)*x_size+j+2]) &&
1630 (x>=r[(i+2)*x_size+j+3]) &&
1631
1632 (x>=r[(i+3)*x_size+j-3]) &&
1633 (x>=r[(i+3)*x_size+j-2]) &&
1634 (x>=r[(i+3)*x_size+j-1]) &&
1635 (x>=r[(i+3)*x_size+j ]) &&
1636 (x>=r[(i+3)*x_size+j+1]) &&
1637 (x>=r[(i+3)*x_size+j+2]) &&
1638 (x>=r[(i+3)*x_size+j+3]) )
1639 #endif
1640 {
1641 corner_list[n].info=0;
1642 corner_list[n].x=j;
1643 corner_list[n].y=i;
1644 corner_list[n].dx=cgx[i*x_size+j];
1645 corner_list[n].dy=cgy[i*x_size+j];
1646 corner_list[n].I=in[i*x_size+j];
1647 n++;
1648 if(n==MAX_CORNERS){
1649 /* "Too many corners." */
1650 }
1651 }
1652 }
1653 }
1654 }
1655 corner_list[n].info=7;
1656}
1657
1658
1659void susan_corners_quick( uchar *in, char *r, uchar *bp,
1660 int max_no, CORNER_LIST corner_list, int x_size, int y_size )
1661{
1662 int n,x,y,i,j;
1663 uchar *p,*cp;
1664
1665 susan_wccmemset(r,0,x_size * y_size);
1666
1667 _Pragma( "loopbound min 0 max 0" )
1668 for (i=7;i<y_size-7;i++) {
1669 _Pragma( "loopbound min 0 max 0" )
1670 for (j=7;j<x_size-7;j++) {
1671 n=100;
1672 p=in + (i-3)*x_size + j - 1;
1673 cp=bp + in[i*x_size+j];
1674
1675 n+=*(cp-*p++);
1676 n+=*(cp-*p++);
1677 n+=*(cp-*p);
1678 p+=x_size-3;
1679
1680 n+=*(cp-*p++);
1681 n+=*(cp-*p++);
1682 n+=*(cp-*p++);
1683 n+=*(cp-*p++);
1684 n+=*(cp-*p);
1685 p+=x_size-5;
1686
1687 n+=*(cp-*p++);
1688 n+=*(cp-*p++);
1689 n+=*(cp-*p++);
1690 n+=*(cp-*p++);
1691 n+=*(cp-*p++);
1692 n+=*(cp-*p++);
1693 n+=*(cp-*p);
1694 p+=x_size-6;
1695
1696 n+=*(cp-*p++);
1697 n+=*(cp-*p++);
1698 n+=*(cp-*p);
1699 if (n<max_no){
1700 p+=2;
1701 n+=*(cp-*p++);
1702 if (n<max_no){
1703 n+=*(cp-*p++);
1704 if (n<max_no){
1705 n+=*(cp-*p);
1706 if (n<max_no){
1707 p+=x_size-6;
1708
1709 n+=*(cp-*p++);
1710 if (n<max_no){
1711 n+=*(cp-*p++);
1712 if (n<max_no){
1713 n+=*(cp-*p++);
1714 if (n<max_no){
1715 n+=*(cp-*p++);
1716 if (n<max_no){
1717 n+=*(cp-*p++);
1718 if (n<max_no){
1719 n+=*(cp-*p++);
1720 if (n<max_no){
1721 n+=*(cp-*p);
1722 if (n<max_no){
1723 p+=x_size-5;
1724
1725 n+=*(cp-*p++);
1726 if (n<max_no){
1727 n+=*(cp-*p++);
1728 if (n<max_no){
1729 n+=*(cp-*p++);
1730 if (n<max_no){
1731 n+=*(cp-*p++);
1732 if (n<max_no){
1733 n+=*(cp-*p);
1734 if (n<max_no){
1735 p+=x_size-3;
1736
1737 n+=*(cp-*p++);
1738 if (n<max_no){
1739 n+=*(cp-*p++);
1740 if (n<max_no){
1741 n+=*(cp-*p);
1742
1743 if (n<max_no) {
1744 r[i*x_size+j] = max_no-n;
1745 }
1746 }}}}}}}}}}}}}}}}}}
1747 }
1748 }
1749
1750 /* to locate the local maxima */
1751 n=0;
1752 _Pragma( "loopbound min 0 max 0" )
1753 for (i=7;i<y_size-7;i++) {
1754 _Pragma( "loopbound min 0 max 0" )
1755 for (j=7;j<x_size-7;j++) {
1756 x = r[i*x_size+j];
1757 if (x>0) {
1758 /* 5x5 mask */
1759 #ifdef FIVE_SUPP
1760 if ((x>r[(i-1)*x_size+j+2]) &&
1761 (x>r[(i )*x_size+j+1]) &&
1762 (x>r[(i )*x_size+j+2]) &&
1763 (x>r[(i+1)*x_size+j-1]) &&
1764 (x>r[(i+1)*x_size+j ]) &&
1765 (x>r[(i+1)*x_size+j+1]) &&
1766 (x>r[(i+1)*x_size+j+2]) &&
1767 (x>r[(i+2)*x_size+j-2]) &&
1768 (x>r[(i+2)*x_size+j-1]) &&
1769 (x>r[(i+2)*x_size+j ]) &&
1770 (x>r[(i+2)*x_size+j+1]) &&
1771 (x>r[(i+2)*x_size+j+2]) &&
1772 (x>=r[(i-2)*x_size+j-2]) &&
1773 (x>=r[(i-2)*x_size+j-1]) &&
1774 (x>=r[(i-2)*x_size+j ]) &&
1775 (x>=r[(i-2)*x_size+j+1]) &&
1776 (x>=r[(i-2)*x_size+j+2]) &&
1777 (x>=r[(i-1)*x_size+j-2]) &&
1778 (x>=r[(i-1)*x_size+j-1]) &&
1779 (x>=r[(i-1)*x_size+j ]) &&
1780 (x>=r[(i-1)*x_size+j+1]) &&
1781 (x>=r[(i )*x_size+j-2]) &&
1782 (x>=r[(i )*x_size+j-1]) &&
1783 (x>=r[(i+1)*x_size+j-2]) )
1784 #endif
1785 #ifdef SEVEN_SUPP
1786 if ((x>r[(i-3)*x_size+j-3]) &&
1787 (x>r[(i-3)*x_size+j-2]) &&
1788 (x>r[(i-3)*x_size+j-1]) &&
1789 (x>r[(i-3)*x_size+j ]) &&
1790 (x>r[(i-3)*x_size+j+1]) &&
1791 (x>r[(i-3)*x_size+j+2]) &&
1792 (x>r[(i-3)*x_size+j+3]) &&
1793
1794 (x>r[(i-2)*x_size+j-3]) &&
1795 (x>r[(i-2)*x_size+j-2]) &&
1796 (x>r[(i-2)*x_size+j-1]) &&
1797 (x>r[(i-2)*x_size+j ]) &&
1798 (x>r[(i-2)*x_size+j+1]) &&
1799 (x>r[(i-2)*x_size+j+2]) &&
1800 (x>r[(i-2)*x_size+j+3]) &&
1801
1802 (x>r[(i-1)*x_size+j-3]) &&
1803 (x>r[(i-1)*x_size+j-2]) &&
1804 (x>r[(i-1)*x_size+j-1]) &&
1805 (x>r[(i-1)*x_size+j ]) &&
1806 (x>r[(i-1)*x_size+j+1]) &&
1807 (x>r[(i-1)*x_size+j+2]) &&
1808 (x>r[(i-1)*x_size+j+3]) &&
1809
1810 (x>r[(i)*x_size+j-3]) &&
1811 (x>r[(i)*x_size+j-2]) &&
1812 (x>r[(i)*x_size+j-1]) &&
1813 (x>=r[(i)*x_size+j+1]) &&
1814 (x>=r[(i)*x_size+j+2]) &&
1815 (x>=r[(i)*x_size+j+3]) &&
1816
1817 (x>=r[(i+1)*x_size+j-3]) &&
1818 (x>=r[(i+1)*x_size+j-2]) &&
1819 (x>=r[(i+1)*x_size+j-1]) &&
1820 (x>=r[(i+1)*x_size+j ]) &&
1821 (x>=r[(i+1)*x_size+j+1]) &&
1822 (x>=r[(i+1)*x_size+j+2]) &&
1823 (x>=r[(i+1)*x_size+j+3]) &&
1824
1825 (x>=r[(i+2)*x_size+j-3]) &&
1826 (x>=r[(i+2)*x_size+j-2]) &&
1827 (x>=r[(i+2)*x_size+j-1]) &&
1828 (x>=r[(i+2)*x_size+j ]) &&
1829 (x>=r[(i+2)*x_size+j+1]) &&
1830 (x>=r[(i+2)*x_size+j+2]) &&
1831 (x>=r[(i+2)*x_size+j+3]) &&
1832
1833 (x>=r[(i+3)*x_size+j-3]) &&
1834 (x>=r[(i+3)*x_size+j-2]) &&
1835 (x>=r[(i+3)*x_size+j-1]) &&
1836 (x>=r[(i+3)*x_size+j ]) &&
1837 (x>=r[(i+3)*x_size+j+1]) &&
1838 (x>=r[(i+3)*x_size+j+2]) &&
1839 (x>=r[(i+3)*x_size+j+3]) )
1840 #endif
1841 {
1842 corner_list[n].info=0;
1843 corner_list[n].x=j;
1844 corner_list[n].y=i;
1845 x = in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2] +
1846 in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2] +
1847 in[(i )*x_size+j-2] + in[(i )*x_size+j-1] + in[(i )*x_size+j] + in[(i )*x_size+j+1] + in[(i )*x_size+j+2] +
1848 in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] +
1849 in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2];
1850
1851 corner_list[n].I=x/25;
1852 /*corner_list[n].I=in[i*x_size+j];*/
1853 x = in[(i-2)*x_size+j+2] + in[(i-1)*x_size+j+2] + in[(i)*x_size+j+2] + in[(i+1)*x_size+j+2] + in[(i+2)*x_size+j+2] -
1854 (in[(i-2)*x_size+j-2] + in[(i-1)*x_size+j-2] + in[(i)*x_size+j-2] + in[(i+1)*x_size+j-2] + in[(i+2)*x_size+j-2]);
1855 x += x + in[(i-2)*x_size+j+1] + in[(i-1)*x_size+j+1] + in[(i)*x_size+j+1] + in[(i+1)*x_size+j+1] + in[(i+2)*x_size+j+1] -
1856 (in[(i-2)*x_size+j-1] + in[(i-1)*x_size+j-1] + in[(i)*x_size+j-1] + in[(i+1)*x_size+j-1] + in[(i+2)*x_size+j-1]);
1857
1858 y = in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2] -
1859 (in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2]);
1860 y += y + in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] -
1861 (in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2]);
1862 corner_list[n].dx=x/15;
1863 corner_list[n].dy=y/15;
1864 n++;
1865 if(n==MAX_CORNERS){
1866 /* "Too many corners." */
1867 }
1868 }
1869 }
1870 }
1871 }
1872 corner_list[n].info=7;
1873}
1874
1875
1876void susan_call_susan( struct wccFILE *inputFile, int mode )
1877{
1878 uchar *in, *bp, *mid;
1879 int x_size, y_size;
1880 char *r;
1881 CORNER_LIST corner_list;
1882
1883 susan_get_image( inputFile, &in, &x_size, &y_size );
1884
1885 if (susan_dt<0) susan_three_by_three=1;
1886 if ( (susan_principle_conf==1) && (mode==0) )
1887 mode=1;
1888
1889 switch (mode) {
1890 case 0:
1891 /* {{{ smoothing */
1892
1893 susan_setup_brightness_lut(&bp,susan_bt,2);
1894 susan_smoothing(susan_three_by_three,in,susan_dt,x_size,y_size,bp);
1895
1896 break;
1897 case 1:
1898 /* {{{ edges */
1899
1900 r = (char *) susan_wccmalloc(x_size * y_size);
1901 susan_setup_brightness_lut(&bp,susan_bt,6);
1902
1903 if (susan_principle_conf) {
1904 if (susan_three_by_three)
1905 susan_principle_small(in,r,bp,susan_max_no_edges,x_size,y_size);
1906 else
1907 susan_principle(in,r,bp,susan_max_no_edges,x_size,y_size);
1908 susan_int_to_uchar(r,in,x_size*y_size);
1909 } else {
1910 mid = (uchar *)susan_wccmalloc(x_size*y_size);
1911 susan_wccmemset(mid,100,x_size * y_size); /* note not set to zero */
1912
1913 if (susan_three_by_three)
1914 susan_edges_small(in,r,mid,bp,susan_max_no_edges,x_size,y_size);
1915 else
1916 susan_edges(in,r,mid,bp,susan_max_no_edges,x_size,y_size);
1917 if(susan_thin_post_proc)
1918 susan_thin(r,mid,x_size,y_size);
1919 susan_edge_draw(in,mid,x_size,y_size,susan_drawing_mode);
1920 }
1921
1922 break;
1923 case 2:
1924 /* {{{ corners */
1925
1926 r = (char *) susan_wccmalloc(x_size * y_size);
1927 susan_setup_brightness_lut(&bp,susan_bt,6);
1928
1929 if (susan_principle_conf) {
1930 susan_principle(in,r,bp,susan_max_no_corners,x_size,y_size);
1931 susan_int_to_uchar(r,in,x_size*y_size);
1932 } else {
1933 if(susan_susan_quick)
1934 susan_corners_quick(in,r,bp,susan_max_no_corners,corner_list,x_size,y_size);
1935 else
1936 susan_corners(in,r,bp,susan_max_no_corners,corner_list,x_size,y_size);
1937 susan_corner_draw(in,corner_list,x_size,susan_drawing_mode);
1938 }
1939
1940 break;
1941 }
1942
1943 susan_put_image(x_size,y_size);
1944}
1945
1946void susan_init( void )
1947{
1948 volatile int a = 0;
1949 susan_file.data = susan_input;
1950 susan_file.size = 7292;
1951 susan_file.size += a;
1952 susan_file.cur_pos = 0;
1953 susan_file.cur_pos += a;
1954
1955 susan_dt = 4.0;
1956 susan_dt += a;
1957 susan_bt = 20;
1958 susan_bt += a;
1959 susan_principle_conf = 0;
1960 susan_principle_conf += a;
1961 susan_thin_post_proc = 1;
1962 susan_thin_post_proc += a;
1963 susan_three_by_three = 0;
1964 susan_three_by_three += a;
1965 susan_drawing_mode = 0;
1966 susan_drawing_mode += a;
1967 susan_susan_quick = 0;
1968 susan_susan_quick += a;
1969 susan_max_no_corners = 50;
1970 susan_max_no_corners += a;
1971 susan_max_no_edges = 50;
1972 susan_max_no_edges += a;
1973
1974 // mode=0; /* Smoothing mode */
1975 // mode=1; /* Edges mode */
1976 // mode=2; /* Corners mode */
1977
1978 // principle=1; /* Output initial enhancement image only; corners or edges mode (default is edges mode) */
1979 // thin_post_proc=0; /* No post-processing on the binary edge map (runs much faster); edges mode */
1980 // drawing_mode=1; /* Mark corners/edges with single black points instead of black with white border; corners or edges mode */
1981 // three_by_three=1; /* Use flat 3x3 mask, edges or smoothing mode */
1982 // susan_quick=1; /* Use faster (and usually stabler) corner mode; edge-like corner suppression not carried out; corners mode */
1983 // dt=10.0; /* Distance threshold, smoothing mode, (default=4) */
1984 // bt=50; /* Brightness threshold, all modes, (default=20) */
1985}
1986
1987void susan_main( void )
1988{
1989 susan_call_susan( &susan_file, 0 );
1990 susan_wccfreeall();
1991 susan_call_susan( &susan_file, 1 );
1992 susan_wccfreeall();
1993 susan_call_susan( &susan_file, 2 );
1994 susan_wccfreeall();
1995}
1996
1997int susan_return( void )
1998{
1999 return 0;
2000}
2001
2002int main( int argc, char **argv )
2003{
2004 SET_UP
2005 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
2006 START_LOOP
2007 susan_init();
2008 susan_main();
2009 STOP_LOOP
2010 }
2011 WRITE_TO_FILE
2012
2013 return susan_return();
2014}
diff --git a/all_pairs/source/susan/wccfile.c b/all_pairs/source/susan/wccfile.c
new file mode 100644
index 0000000..42db3db
--- /dev/null
+++ b/all_pairs/source/susan/wccfile.c
@@ -0,0 +1,79 @@
1#include "wccfile.h"
2#define EOFX -1
3
4size_x susan_wccfread(void* ptr, size_x size, size_x count, struct wccFILE* stream)
5{
6 if ( susan_wccfeof( stream ) ) {
7 return EOFX;
8 }
9
10 unsigned i = stream->cur_pos, i2 = 0;
11 size_x number_of_chars_to_read =
12 stream->size - stream->cur_pos >= size * count ?
13 size * count : stream->size - stream->cur_pos;
14 _Pragma( "loopbound min 7220 max 7220" )
15 while (i < stream->cur_pos + number_of_chars_to_read) {
16 ((unsigned char*)ptr)[i2++] = stream->data[i++];
17 }
18 stream->cur_pos += number_of_chars_to_read;
19 return number_of_chars_to_read;
20}
21
22int susan_wccfgetc(struct wccFILE *stream)
23{
24 if ( susan_wccfeof( stream ) ) {
25 return EOFX;
26 } else {
27 return stream->data[stream->cur_pos++];
28 }
29}
30
31char *susan_wccfgets(char *str, int num, struct wccFILE *stream )
32{
33 if ( !stream || susan_wccfeof( stream ) || !str || num <= 0 ) {
34 return 0;
35 }
36
37 int pos = 0;
38 _Pragma( "loopbound min 58 max 58" )
39 while ( pos < num - 1 && !susan_wccfeof( stream ) ) {
40 str[pos] = stream->data[stream->cur_pos];
41 if ( str[pos] == '\n' ) {
42 break;
43 }
44
45 stream->cur_pos++;
46 pos++;
47 }
48 str[pos++] = '\0';
49
50 return str;
51}
52
53int susan_wccfseek(struct wccFILE* stream, long int offset, enum _Origin_ origin)
54{
55 if (origin == WCCSEEK_SET) {
56 stream->cur_pos = offset;
57 return 0;
58 } else if (origin == WCCSEEK_CUR) {
59 stream->cur_pos += offset;
60 return 0;
61 } else if (origin == WCCSEEK_END) {
62 stream->cur_pos = stream->size + offset;
63 return 0;
64 }
65 return -1;
66}
67
68
69int susan_wccfgetpos(struct wccFILE* stream, unsigned* position)
70{
71 *position = stream->cur_pos;
72 return 0;
73}
74
75
76int susan_wccfeof(struct wccFILE* stream)
77{
78 return stream->cur_pos == stream->size ? 1 : 0;
79}
diff --git a/all_pairs/source/susan/wccfile.h b/all_pairs/source/susan/wccfile.h
new file mode 100644
index 0000000..9314361
--- /dev/null
+++ b/all_pairs/source/susan/wccfile.h
@@ -0,0 +1,24 @@
1#ifndef WCC_FILE_H
2#define WCC_FILE_H
3
4enum _Origin_ { WCCSEEK_SET, WCCSEEK_CUR, WCCSEEK_END };
5typedef enum _Origin_ Origin;
6typedef unsigned int size_x;
7
8#define EOFX -1
9
10struct wccFILE {
11 char* data;
12 size_x size;
13 unsigned cur_pos;
14};
15
16size_x susan_wccfread (void* ptr, size_x size, size_x count, struct wccFILE* stream);
17int susan_wccfseek (struct wccFILE* stream, long int offset, Origin origin);
18int susan_wccfgetpos (struct wccFILE* stream, unsigned* position);
19int susan_wccfeof (struct wccFILE* stream);
20int susan_wccfgetc (struct wccFILE *stream);
21char *susan_wccfgets (char *str, int num, struct wccFILE *stream );
22
23#endif
24
diff --git a/all_pairs/source/susan/wcclibm.c b/all_pairs/source/susan/wcclibm.c
new file mode 100644
index 0000000..bca8907
--- /dev/null
+++ b/all_pairs/source/susan/wcclibm.c
@@ -0,0 +1,444 @@
1#include "math_private.h"
2#include "wcclibm.h"
3
4
5
6/* e_rem_pio2f.c -- float version of e_rem_pio2.c
7 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
8 */
9
10/*
11 * ====================================================
12 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
13 *
14 * Developed at SunPro, a Sun Microsystems, Inc. business.
15 * Permission to use, copy, modify, and distribute this
16 * software is freely granted, provided that this notice
17 * is preserved.
18 * ====================================================
19 */
20
21#if defined(LIBM_SCCS) && !defined(lint)
22static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $";
23#endif
24
25/* __ieee754_rem_pio2f(x,y)
26 *
27 * return the remainder of x rem pi/2 in y[0]+y[1]
28 * use __kernel_rem_pio2f()
29 */
30
31/* This array is like the one in e_rem_pio2.c, but the numbers are
32 single precision and the last 8 bits are forced to 0. */
33static const int32_t susan_npio2_hw[] = {
340x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00,
350x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00,
360x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100,
370x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00,
380x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00,
390x4242c700, 0x42490f00
40};
41
42/*
43 * invpio2: 24 bits of 2/pi
44 * pio2_1: first 17 bit of pi/2
45 * pio2_1t: pi/2 - pio2_1
46 * pio2_2: second 17 bit of pi/2
47 * pio2_2t: pi/2 - (pio2_1+pio2_2)
48 * pio2_3: third 17 bit of pi/2
49 * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
50 */
51
52static const float
53/* zero = 0.0000000000e+00f, /\* 0x00000000 *\/ */
54/* half = 5.0000000000e-01f, /\* 0x3f000000 *\/ */
55/* two8 = 2.5600000000e+02f, /\* 0x43800000 *\/ */
56susan_invpio2 = 6.3661980629e-01f, /* 0x3f22f984 */
57susan_pio2_1 = 1.5707855225e+00f, /* 0x3fc90f80 */
58susan_pio2_1t = 1.0804334124e-05f, /* 0x37354443 */
59susan_pio2_2 = 1.0804273188e-05f, /* 0x37354400 */
60susan_pio2_2t = 6.0770999344e-11f, /* 0x2e85a308 */
61susan_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */
62susan_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */
63
64int32_t susan___ieee754_rem_pio2f(float x, float *y)
65{
66 float z,w,t,r,fn;
67 int32_t i,j,n,ix,hx;
68
69 GET_FLOAT_WORD(hx,x);
70 ix = hx&0x7fffffff;
71 if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */
72 {y[0] = x; y[1] = 0; return 0;}
73 if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */
74 if(hx>0) {
75 z = x - susan_pio2_1;
76 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
77 y[0] = z - susan_pio2_1t;
78 y[1] = (z-y[0])-susan_pio2_1t;
79 } else { /* near pi/2, use 24+24+24 bit pi */
80 z -= susan_pio2_2;
81 y[0] = z - susan_pio2_2t;
82 y[1] = (z-y[0])-susan_pio2_2t;
83 }
84 return 1;
85 } else { /* negative x */
86 z = x + susan_pio2_1;
87 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
88 y[0] = z + susan_pio2_1t;
89 y[1] = (z-y[0])+susan_pio2_1t;
90 } else { /* near pi/2, use 24+24+24 bit pi */
91 z += susan_pio2_2;
92 y[0] = z + susan_pio2_2t;
93 y[1] = (z-y[0])+susan_pio2_2t;
94 }
95 return -1;
96 }
97 }
98 if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */
99 t = fabsf(x);
100 n = (int32_t) (t*susan_invpio2+susan_half);
101 fn = (float)n;
102 r = t-fn*susan_pio2_1;
103 w = fn*susan_pio2_1t; /* 1st round good to 40 bit */
104 if(n<32&&(int32_t)(ix&0xffffff00)!=susan_npio2_hw[n-1]) {
105 y[0] = r-w; /* quick check no cancellation */
106 } else {
107 u_int32_t high;
108 j = ix>>23;
109 y[0] = r-w;
110 GET_FLOAT_WORD(high,y[0]);
111 i = j-((high>>23)&0xff);
112 if(i>8) { /* 2nd iteration needed, good to 57 */
113 t = r;
114 w = fn*susan_pio2_2;
115 r = t-w;
116 w = fn*susan_pio2_2t-((t-r)-w);
117 y[0] = r-w;
118 GET_FLOAT_WORD(high,y[0]);
119 i = j-((high>>23)&0xff);
120 if(i>25) { /* 3rd iteration need, 74 bits acc */
121 t = r; /* will cover all possible cases */
122 w = fn*susan_pio2_3;
123 r = t-w;
124 w = fn*susan_pio2_3t-((t-r)-w);
125 y[0] = r-w;
126 }
127 }
128 }
129 y[1] = (r-y[0])-w;
130 if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
131 else return n;
132 }
133 /*
134 * all other (large) arguments
135 */
136 if(ix>=0x7f800000) { /* x is inf or NaN */
137 y[0]=y[1]=x-x; return 0;
138 }
139
140 y[0]=y[1]=x-x; return 0; /* dummy initialisation */
141 return 0; /* doesn't happen for our input */
142}
143
144/* k_cosf.c -- float version of k_cos.c
145 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
146 */
147
148/*
149 * ====================================================
150 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
151 *
152 * Developed at SunPro, a Sun Microsystems, Inc. business.
153 * Permission to use, copy, modify, and distribute this
154 * software is freely granted, provided that this notice
155 * is preserved.
156 * ====================================================
157 */
158
159#if defined(LIBM_SCCS) && !defined(lint)
160static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $";
161#endif
162
163
164static const float
165/* one = 1.0000000000e+00, /\* 0x3f800000 *\/ */
166susan_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */
167susan_C2 = -1.3888889225e-03f, /* 0xbab60b61 */
168susan_C3 = 2.4801587642e-05f, /* 0x37d00d01 */
169susan_C4 = -2.7557314297e-07f, /* 0xb493f27c */
170susan_C5 = 2.0875723372e-09f, /* 0x310f74f6 */
171susan_C6 = -1.1359647598e-11f; /* 0xad47d74e */
172
173float susan___kernel_cosf(float x, float y)
174{
175 float a,hz,z,r,qx;
176 int32_t ix;
177 GET_FLOAT_WORD(ix,x);
178 ix &= 0x7fffffff; /* ix = |x|'s high word*/
179 if(ix<0x32000000) { /* if x < 2**27 */
180 if(((int)x)==0) return susan_one; /* generate inexact */
181 }
182 z = x*x;
183 r = z*(susan_C1+z*(susan_C2+z*(susan_C3+z*(susan_C4+z*(susan_C5+z*susan_C6)))));
184 if(ix < 0x3e99999a) /* if |x| < 0.3 */
185 return susan_one - ((float)0.5f*z - (z*r - x*y));
186 else {
187 if(ix > 0x3f480000) { /* x > 0.78125 */
188 qx = (float)0.28125f;
189 } else {
190 SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */
191 }
192 hz = (float)0.5f*z-qx;
193 a = susan_one-qx;
194 return a - (hz - (z*r-x*y));
195 }
196}
197
198/* k_sinf.c -- float version of k_sin.c
199 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
200 */
201
202/*
203 * ====================================================
204 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
205 *
206 * Developed at SunPro, a Sun Microsystems, Inc. business.
207 * Permission to use, copy, modify, and distribute this
208 * software is freely granted, provided that this notice
209 * is preserved.
210 * ====================================================
211 */
212
213#if defined(LIBM_SCCS) && !defined(lint)
214static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $";
215#endif
216
217
218static const float
219/* half = 5.0000000000e-01f,/\* 0x3f000000 *\/ */
220susan_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */
221susan_S2 = 8.3333337680e-03f, /* 0x3c088889 */
222susan_S3 = -1.9841270114e-04f, /* 0xb9500d01 */
223susan_S4 = 2.7557314297e-06f, /* 0x3638ef1b */
224susan_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */
225susan_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */
226
227float susan___kernel_sinf(float x, float y, int iy)
228{
229 float z,r,v;
230 int32_t ix;
231 GET_FLOAT_WORD(ix,x);
232 ix &= 0x7fffffff; /* high word of x */
233 if(ix<0x32000000) /* |x| < 2**-27 */
234 {if((int)x==0) return x;} /* generate inexact */
235 z = x*x;
236 v = z*x;
237 r = susan_S2+z*(susan_S3+z*(susan_S4+z*(susan_S5+z*susan_S6)));
238 if(iy==0) return x+v*(susan_S1+z*r);
239 else return x-((z*(susan_half*y-v*r)-y)-v*susan_S1);
240}
241/* s_atanf.c -- float version of s_atan.c.
242 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
243 */
244
245/*
246 * ====================================================
247 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
248 *
249 * Developed at SunPro, a Sun Microsystems, Inc. business.
250 * Permission to use, copy, modify, and distribute this
251 * software is freely granted, provided that this notice
252 * is preserved.
253 * ====================================================
254 */
255
256#if defined(LIBM_SCCS) && !defined(lint)
257static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $";
258#endif
259
260
261static const float susan_atanhi[] = {
262 4.6364760399e-01f, /* atan(0.5)hi 0x3eed6338 */
263 7.8539812565e-01f, /* atan(1.0)hi 0x3f490fda */
264 9.8279368877e-01f, /* atan(1.5)hi 0x3f7b985e */
265 1.5707962513e+00f, /* atan(inf)hi 0x3fc90fda */
266};
267
268static const float susan_atanlo[] = {
269 5.0121582440e-09f, /* atan(0.5)lo 0x31ac3769 */
270 3.7748947079e-08f, /* atan(1.0)lo 0x33222168 */
271 3.4473217170e-08f, /* atan(1.5)lo 0x33140fb4 */
272 7.5497894159e-08f, /* atan(inf)lo 0x33a22168 */
273};
274
275static const float susan_aT[] = {
276 3.3333334327e-01f, /* 0x3eaaaaaa */
277 -2.0000000298e-01f, /* 0xbe4ccccd */
278 1.4285714924e-01f, /* 0x3e124925 */
279 -1.1111110449e-01f, /* 0xbde38e38 */
280 9.0908870101e-02f, /* 0x3dba2e6e */
281 -7.6918758452e-02f, /* 0xbd9d8795 */
282 6.6610731184e-02f, /* 0x3d886b35 */
283 -5.8335702866e-02f, /* 0xbd6ef16b */
284 4.9768779427e-02f, /* 0x3d4bda59 */
285 -3.6531571299e-02f, /* 0xbd15a221 */
286 1.6285819933e-02f, /* 0x3c8569d7 */
287};
288
289float susan___atanf(float x)
290{
291 float w,s1,s2,z;
292 int32_t ix,hx,id;
293
294 GET_FLOAT_WORD(hx,x);
295 ix = hx&0x7fffffff;
296 if(ix>=0x50800000) { /* if |x| >= 2^34 */
297 if(ix>0x7f800000)
298 return x+x; /* NaN */
299 if(hx>0) return susan_atanhi[3]+susan_atanlo[3];
300 else return -susan_atanhi[3]-susan_atanlo[3];
301 } if (ix < 0x3ee00000) { /* |x| < 0.4375 */
302 if (ix < 0x31000000) { /* |x| < 2^-29 */
303 if(susan_huge+x>susan_one) return x; /* raise inexact */
304 }
305 id = -1;
306 } else {
307 x = fabsf(x);
308 if (ix < 0x3f980000) { /* |x| < 1.1875 */
309 if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */
310 id = 0; x = ((float)2.0f*x-susan_one)/((float)2.0f+x);
311 } else { /* 11/16<=|x|< 19/16 */
312 id = 1; x = (x-susan_one)/(x+susan_one);
313 }
314 } else {
315 if (ix < 0x401c0000) { /* |x| < 2.4375 */
316 id = 2; x = (x-(float)1.5f)/(susan_one+(float)1.5f*x);
317 } else { /* 2.4375 <= |x| < 2^66 */
318 id = 3; x = -(float)1.0f/x;
319 }
320 }}
321 /* end of argument reduction */
322 z = x*x;
323 w = z*z;
324 /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
325 s1 = z*(susan_aT[0]+w*(susan_aT[2]+w*(susan_aT[4]+w*(susan_aT[6]+w*(susan_aT[8]+w*susan_aT[10])))));
326 s2 = w*(susan_aT[1]+w*(susan_aT[3]+w*(susan_aT[5]+w*(susan_aT[7]+w*susan_aT[9]))));
327 if (id<0) return x - x*(s1+s2);
328 else {
329 z = susan_atanhi[id] - ((x*(s1+s2) - susan_atanlo[id]) - x);
330 return (hx<0)? -z:z;
331 }
332}
333
334/* s_cosf.c -- float version of s_cos.c.
335 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
336 */
337
338/*
339 * ====================================================
340 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
341 *
342 * Developed at SunPro, a Sun Microsystems, Inc. business.
343 * Permission to use, copy, modify, and distribute this
344 * software is freely granted, provided that this notice
345 * is preserved.
346 * ====================================================
347 */
348
349float susan___cosf(float x)
350{
351 float y[2],z=0.0f;
352 int32_t n,ix;
353
354 GET_FLOAT_WORD(ix,x);
355
356 /* |x| ~< pi/4 */
357 ix &= 0x7fffffff;
358 if(ix <= 0x3f490fd8) return susan___kernel_cosf(x,z);
359
360 /* cos(Inf or NaN) is NaN */
361 else if (ix>=0x7f800000) return x-x;
362
363 /* argument reduction needed */
364 else {
365 n = susan___ieee754_rem_pio2f(x,y);
366 switch(n&3) {
367 case 0: return susan___kernel_cosf(y[0],y[1]);
368 case 1: return -susan___kernel_sinf(y[0],y[1],1);
369 case 2: return -susan___kernel_cosf(y[0],y[1]);
370 default:
371 return susan___kernel_sinf(y[0],y[1],1);
372 }
373 }
374}
375
376/* s_sinf.c -- float version of s_sin.c.
377 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
378 */
379
380/*
381 * ====================================================
382 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
383 *
384 * Developed at SunPro, a Sun Microsystems, Inc. business.
385 * Permission to use, copy, modify, and distribute this
386 * software is freely granted, provided that this notice
387 * is preserved.
388 * ====================================================
389 */
390
391float susan___sinf(float x)
392{
393 float y[2],z=0.0;
394 int32_t n, ix;
395
396 GET_FLOAT_WORD(ix,x);
397
398 /* |x| ~< pi/4 */
399 ix &= 0x7fffffff;
400 if(ix <= 0x3f490fd8) return susan___kernel_sinf(x,z,0);
401
402 /* sin(Inf or NaN) is NaN */
403 else if (ix>=0x7f800000) return x-x;
404
405 /* argument reduction needed */
406 else {
407 n = susan___ieee754_rem_pio2f(x,y);
408 switch(n&3) {
409 case 0: return susan___kernel_sinf(y[0],y[1],1);
410 case 1: return susan___kernel_cosf(y[0],y[1]);
411 case 2: return -susan___kernel_sinf(y[0],y[1],1);
412 default:
413 return -susan___kernel_cosf(y[0],y[1]);
414 }
415 }
416}
417
418/* s_fabsf.c -- float version of s_fabs.c.
419 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
420 */
421
422/*
423 * ====================================================
424 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
425 *
426 * Developed at SunPro, a Sun Microsystems, Inc. business.
427 * Permission to use, copy, modify, and distribute this
428 * software is freely granted, provided that this notice
429 * is preserved.
430 * ====================================================
431 */
432
433/*
434 * fabsf(x) returns the absolute value of x.
435 */
436
437
438float susan___fabsf(float x)
439{
440 u_int32_t ix;
441 GET_FLOAT_WORD(ix,x);
442 SET_FLOAT_WORD(x,ix&0x7fffffff);
443 return x;
444}
diff --git a/all_pairs/source/susan/wcclibm.h b/all_pairs/source/susan/wcclibm.h
new file mode 100644
index 0000000..bcf4c65
--- /dev/null
+++ b/all_pairs/source/susan/wcclibm.h
@@ -0,0 +1,53 @@
1#ifndef _WCCLIBM
2#define _WCCLIBM
3
4#define int32_t int
5#define uint32_t unsigned int
6#define u_int16_t unsigned short
7#define u_int32_t unsigned int
8
9// Often used variables/consts
10#ifdef __STDC__
11static const float
12#else
13static float
14#endif
15susan_one = 1.0f,
16susan_half = 5.0000000000e-01f, /* 0x3f000000 */
17susan_zero = 0.0f,
18susan_huge = 1.0e30,
19susan_two8 = 2.5600000000e+02f, /* 0x43800000 */
20susan_twon8 = 3.9062500000e-03f; /* 0x3b800000 */
21
22// The following defines map the math functions to specialized calls
23#define acos susan___ieee754_acosf
24#define atan susan___atanf
25#define cos susan___cosf
26#define fabs susan___fabsf
27#define fabsf susan___fabsf
28#define isinf susan___isinff
29#define pow susan___ieee754_powf
30#define sqrt susan___ieee754_sqrtf
31#define log10 susan___ieee754_log10f
32#define log susan___ieee754_logf
33#define sin susan___sinf
34
35float susan___atanf(float x);
36float susan___copysignf(float x, float y);
37float susan___cosf(float x);
38float susan___fabsf(float x);
39float susan___floorf(float x);
40float susan___ieee754_acosf(float x);
41float susan___ieee754_powf(float x, float y);
42int32_t susan___ieee754_rem_pio2f(float x, float *y);
43float susan___ieee754_sqrtf(float x);
44int susan___isinff (float x);
45float susan___kernel_cosf(float x, float y);
46float susan___kernel_sinf(float x, float y, int iy);
47int susan___kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2);
48float susan___scalbnf (float x, int n);
49float susan___ieee754_logf(float x);
50float susan___ieee754_log10f(float x);
51float susan___sinf(float x);
52
53#endif // _WCCLIBM
diff --git a/all_pairs/source/susan/wccmalloc.c b/all_pairs/source/susan/wccmalloc.c
new file mode 100644
index 0000000..edf01cc
--- /dev/null
+++ b/all_pairs/source/susan/wccmalloc.c
@@ -0,0 +1,51 @@
1#include "wccmalloc.h"
2
3// This must be redefined for each new benchmark
4#define HEAP_SIZE 30000
5
6char susan_simulated_heap[HEAP_SIZE];
7unsigned int susan_freeHeapPos;
8
9void* susan_wccmalloc( unsigned int numberOfBytes )
10{
11 // Get a 4-byte adress for alignment purposes
12 unsigned int offset = ( (unsigned long)susan_simulated_heap + susan_freeHeapPos ) % 4;
13 if ( offset ) {
14 susan_freeHeapPos += 4 - offset;
15 }
16 void* currentPos = (void*)&susan_simulated_heap[susan_freeHeapPos];
17 susan_freeHeapPos += numberOfBytes;
18 return currentPos;
19}
20void susan_wccfreeall( void )
21{
22 susan_freeHeapPos = 0;
23}
24
25void* susan_wccmemcpy(void* dstpp, const void* srcpp, unsigned int len)
26{
27 unsigned long int dstp = (long int) dstpp;
28 unsigned long int srcp = (long int) srcpp;
29
30 _Pragma("loopbound min 76 max 76")
31 while (len > 0) {
32 char __x = ((char *) srcp)[0];
33 srcp += 1;
34 len -= 1;
35 ((char *) dstp)[0] = __x;
36 dstp += 1;
37 }
38
39 return dstpp;
40}
41
42void susan_wccmemset( void *p, int value, unsigned int num )
43{
44 unsigned long i;
45 char *char_ptr = (char*)p;
46
47 _Pragma( "loopbound min 7220 max 28880" )
48 for ( i = 0; i < num; ++i ) {
49 *char_ptr++ = (unsigned char)value;
50 }
51}
diff --git a/all_pairs/source/susan/wccmalloc.h b/all_pairs/source/susan/wccmalloc.h
new file mode 100644
index 0000000..dbb2ada
--- /dev/null
+++ b/all_pairs/source/susan/wccmalloc.h
@@ -0,0 +1,10 @@
1#ifndef _WCCMALLOC_H
2#define _WCCMALLOC_H
3
4void* susan_wccmalloc( unsigned int numberOfBytes );
5//! Frees ALL allocated memory space
6void susan_wccfreeall( void );
7void *susan_wccmemcpy( void* dstpp, const void* srcpp, unsigned int len );
8void susan_wccmemset( void *p, int value, unsigned int num );
9
10#endif
diff --git a/all_pairs/tacleNames.txt b/all_pairs/tacleNames.txt
new file mode 100644
index 0000000..8f4845a
--- /dev/null
+++ b/all_pairs/tacleNames.txt
@@ -0,0 +1,19 @@
1petrinet
2ndes
3statemate
4adpcm_dec
5cjpeg_wrbmp
6adpcm_enc
7cjpeg_transupp
8dijkstra
9epic
10fmref
11gsm_dec
12h264_dec
13huff_enc
14rijndael_enc
15rijndael_dec
16gsm_enc
17susan
18ammunition
19mpeg2
diff --git a/baseline/Makefile b/baseline/Makefile
new file mode 100644
index 0000000..53f53f4
--- /dev/null
+++ b/baseline/Makefile
@@ -0,0 +1,55 @@
1CC = gcc
2CFLAGS = -pthread -O2
3LDFLAGS = -lrt
4all: bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec
5
6.PHONY: clean
7clean:
8 rm bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec
9
10bin/cjpeg_wrbmp: ./source/extra.h ./source/cjpeg_wrbmp/cjpeg_wrbmp.c ./source/cjpeg_wrbmp/input.c
11 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
12bin/huff_enc: ./source/extra.h ./source/huff_enc/huff_enc.c
13 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
14bin/gsm_enc: ./source/extra.h ./source/gsm_enc/gsm_enc.c
15 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
16bin/dijkstra: ./source/extra.h ./source/dijkstra/dijkstra.c ./source/dijkstra/input.c
17 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
18bin/h264_dec: ./source/extra.h ./source/h264_dec/h264_dec.c ./source/h264_dec/h264_decinput.c
19 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
20bin/susan: ./source/extra.h ./source/susan/input.c ./source/susan/susan.c ./source/susan/wccfile.c ./source/susan/wcclibm.c ./source/susan/wccmalloc.c
21 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
22bin/adpcm_enc: ./source/extra.h ./source/adpcm_enc/adpcm_enc.c
23 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
24bin/rijndael_dec: ./source/extra.h ./source/rijndael_dec/aes.c ./source/rijndael_dec/input_small_enc.c ./source/rijndael_dec/rijndael_dec.c ./source/rijndael_dec/rijndael_dec_libc.c
25 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
26bin/huff_dec: ./source/extra.h ./source/huff_dec/huff_dec.c
27 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
28bin/rijndael_enc: ./source/extra.h ./source/rijndael_enc/aes.c ./source/rijndael_enc/input_small.c ./source/rijndael_enc/rijndael_enc.c ./source/rijndael_enc/rijndael_enc_libc.c
29 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
30bin/gsm_dec: ./source/extra.h ./source/gsm_dec/gsm_dec.c
31 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
32bin/anagram: ./source/extra.h ./source/anagram/anagram.c ./source/anagram/anagram_input.c ./source/anagram/anagram_stdlib.c
33 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
34bin/epic: ./source/extra.h ./source/epic/epic.c
35 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
36bin/ammunition: ./source/extra.h ./source/ammunition/ammunition.c ./source/ammunition/ammunition_libc.c ./source/ammunition/arithm.c ./source/ammunition/bits.c
37 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
38bin/g723_enc: ./source/extra.h ./source/g723_enc/g723_enc.c
39 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
40bin/ndes: ./source/extra.h ./source/ndes/ndes.c
41 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
42bin/petrinet: ./source/extra.h ./source/petrinet/petrinet.c
43 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
44bin/statemate: ./source/extra.h ./source/statemate/statemate.c
45 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
46bin/cjpeg_transupp: ./source/extra.h ./source/cjpeg_transupp/cjpeg_transupp.c
47 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
48bin/mpeg2: ./source/extra.h ./source/mpeg2/mpeg2.c
49 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
50bin/fmref: ./source/extra.h ./source/fmref/fmref.c ./source/fmref/wcclibm.c
51 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
52bin/audiobeam: ./source/extra.h ./source/audiobeam/audiobeam.c ./source/audiobeam/audiobeaminput.c ./source/audiobeam/audiobeamlibmalloc.c ./source/audiobeam/audiobeamlibm.c
53 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
54bin/adpcm_dec: ./source/extra.h ./source/adpcm_dec/adpcm_dec.c
55 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
diff --git a/baseline/run_baseline.sh b/baseline/run_baseline.sh
new file mode 100755
index 0000000..7fdc2aa
--- /dev/null
+++ b/baseline/run_baseline.sh
@@ -0,0 +1,65 @@
1#!/bin/bash
2
3core=$1
4maxJobs=$2
5runID=$3
6tacleNames=tacleNames.txt
7
8if [ $# -lt 3 ]; then
9 echo "Usage $0 <core ID> <number of iterations> <run ID> [TACLe names file]"
10 exit
11fi
12
13if [ $# -gt 3 ]; then
14 echo "Using alternate list of TACLe benchmarks from $4"
15 tacleNames=$4
16fi
17
18echo "Making sure that binaries are up to date..."
19while read i; do
20 make bin/$i
21done < $tacleNames
22echo "Done. Disabling real-time throttling..."
23
24# Turn off rt throttling
25echo -1 > /proc/sys/kernel/sched_rt_runtime_us
26echo "Done. Redirecting all interrupts to core 0..."
27
28# Redirect all interrupts to core 0
29i=0
30for IRQ in /proc/irq/*
31do
32 # Skip default_smp_affinity
33 if [ -d $IRQ ]; then
34 irqList[$i]=$(cat $IRQ/smp_affinity_list)
35 echo 0 > $IRQ/smp_affinity_list
36 fi
37 i=$(( $i + 1 ))
38done
39echo "Done. Beginning benchmarks..."
40
41# Read the names of each benchmark
42j=0
43while read i; do
44 tacleProg[$j]=$i
45 j=$(( $j + 1 ))
46done < $tacleNames
47
48
49num_tests=$(wc -l < $tacleNames)
50for (( i = 0; i < $num_tests ; i++ ))
51do
52 chrt -r 97 taskset -c $core ./bin/${tacleProg[$i]} ${tacleProg[$i]} $maxJobs $core none none $runID 1 none
53 echo COMPLETE: ${tacleProg[$i]}
54done
55
56# Put smp_affinty back the way it was
57i=0
58for IRQ in /proc/irq/*
59do
60 if [ -d $IRQ ]; then
61 echo ${irqList[$i]} > $IRQ/smp_affinity_list
62 fi
63 i=$(( $i + 1 ))
64done
65
diff --git a/baseline/source/adpcm_dec/ChangeLog.txt b/baseline/source/adpcm_dec/ChangeLog.txt
new file mode 100644
index 0000000..b9c4f96
--- /dev/null
+++ b/baseline/source/adpcm_dec/ChangeLog.txt
@@ -0,0 +1,32 @@
1File: minver.c
2Original provenience: SNU-RT Benchmark Suite for Worst Case Timing Analysis
3
42016-02-26:
5 - Added TACLeBench header to line 1
6 - Rename global variable a to minver_a
7 - Rename global variable b to minver_b
8 - Rename global variable c to minver_c
9 - Rename global variable aa to minver_aa
10 - Rename global variable a_i to minver_a_i
11 - Rename global variable e to minver_e
12 - Rename global variable det to minver_det
13 - Renamed function minver to minver_minver
14 - Renamed function mmul to minver_mmul
15 - Renamed function fabs to minver_fabs
16 - Renamed function main to minver_main
17 - Created new function main, calling minver_init, minver_main and
18 returning minver_return
19 - Reordered functions in source code: initialization- and
20 return-value-related functions first, followed by algorithm core
21 functions, followed by main functions
22 - Applied code formatting with astyle as in the example
23
242016-03-09:
25 - Removed static keyword for global variables
26 - Renamed global variables, prepended adpcm_dec
27
28 2016-05-23:
29 - Check sum added and checked against the expected value
30
31 2016-05-25:
32 - Corrected expected value \ No newline at end of file
diff --git a/baseline/source/adpcm_dec/adpcm_dec.c b/baseline/source/adpcm_dec/adpcm_dec.c
new file mode 100644
index 0000000..6811e69
--- /dev/null
+++ b/baseline/source/adpcm_dec/adpcm_dec.c
@@ -0,0 +1,719 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: adpcm_dec
7
8 Author: Sung-Soo Lim
9
10 Function:
11 CCITT G.722 ADPCM (Adaptive Differential Pulse Code Modulation)
12 algorithm.
13 16khz sample rate data is stored in the array test_data[SIZE].
14 Results are stored in the array compressed[SIZE] and result[SIZE].
15 Execution time is determined by the constant SIZE (default value
16 is 2000).
17
18 Source: SNU-RT Benchmark Suite
19
20 Changes: adpcm benchmark was split into decode and encode benchmark
21
22 License: may be used, modified, and re-distributed freely, but
23 the SNU-RT Benchmark Suite must be acknowledged
24
25*/
26
27/*
28 This program is derived from the SNU-RT Benchmark Suite for Worst
29 Case Timing Analysis by Sung-Soo Lim
30
31 Original source: C Algorithms for Real-Time DSP by P. M. Embree
32*/
33
34/*
35 Forward declaration of functions
36*/
37
38#include "../extra.h"
39
40void adpcm_dec_decode( int );
41int adpcm_dec_filtez( int *bpl, int *dlt );
42void adpcm_dec_upzero( int dlt, int *dlti, int *bli );
43int adpcm_dec_filtep( int rlt1, int al1, int rlt2, int al2 );
44
45int adpcm_dec_logscl( int il, int nbl );
46int adpcm_dec_scalel( int nbl, int shift_constant );
47int adpcm_dec_uppol2( int al1, int al2, int plt, int plt1, int plt2 );
48int adpcm_dec_uppol1( int al1, int apl2, int plt, int plt1 );
49
50int adpcm_dec_logsch( int ih, int nbh );
51void adpcm_dec_reset();
52int adpcm_dec_fabs( int n );
53int adpcm_dec_cos( int n );
54int adpcm_dec_sin( int n );
55
56void adpcm_dec_init();
57int adpcm_dec_return();
58void adpcm_dec_main();
59//int main( void );
60
61
62/*
63 Declaration of macros
64*/
65/* common sampling rate for sound cards on IBM/PC */
66#define SAMPLE_RATE 11025
67#define PI 3141
68#define SIZE 3
69#define IN_END 4
70
71/*
72 Declaration of global variables
73*/
74
75int adpcm_dec_test_data[SIZE * 2], adpcm_dec_result[SIZE * 2];
76
77/* Input data for the decoder usually generated by the encoder. */
78int adpcm_dec_compressed[SIZE] = { 0, 253, 32 };
79
80/* G722 C code */
81
82/* QMF filter coefficients:
83 scaled by a factor of 4 compared to G722 CCITT recommendation */
84int adpcm_dec_h[24] = {
85 12, -44, -44, 212, 48, -624, 128, 1448,
86 -840, -3220, 3804, 15504, 15504, 3804, -3220, -840,
87 1448, 128, -624, 48, 212, -44, -44, 12
88};
89
90//int xl,xh;
91
92/* variables for receive quadrature mirror filter here */
93int adpcm_dec_accumc[11], adpcm_dec_accumd[11];
94
95/* outputs of decode() */
96int adpcm_dec_xout1, adpcm_dec_xout2;
97
98int adpcm_dec_xs, adpcm_dec_xd;
99
100/* variables for encoder (hi and lo) here */
101
102int adpcm_dec_il, adpcm_dec_szl, adpcm_dec_spl, adpcm_dec_sl, adpcm_dec_el;
103
104int adpcm_dec_qq4_code4_table[16] = {
105 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200,
106 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0
107};
108
109
110int adpcm_dec_qq6_code6_table[64] = {
111 -136, -136, -136, -136, -24808, -21904, -19008, -16704,
112 -14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856,
113 -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576,
114 -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728,
115 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192,
116 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456,
117 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032,
118 1688, 1360, 1040, 728, 432, 136, -432, -136
119};
120
121
122int adpcm_dec_wl_code_table[16] = {
123 -60, 3042, 1198, 538, 334, 172, 58, -30,
124 3042, 1198, 538, 334, 172, 58, -30, -60
125};
126
127
128int adpcm_dec_ilb_table[32] = {
129 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383,
130 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834,
131 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371,
132 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008
133};
134
135int adpcm_dec_nbl; /* delay line */
136int adpcm_dec_al1, adpcm_dec_al2;
137int adpcm_dec_plt, adpcm_dec_plt1, adpcm_dec_plt2;
138int adpcm_dec_rs;
139int adpcm_dec_dlt;
140int adpcm_dec_rlt, adpcm_dec_rlt1, adpcm_dec_rlt2;
141
142
143int adpcm_dec_detl;
144
145
146int adpcm_dec_deth;
147int adpcm_dec_sh; /* this comes from adaptive predictor */
148int adpcm_dec_eh;
149
150int adpcm_dec_qq2_code2_table[4] = {
151 -7408, -1616, 7408, 1616
152};
153
154int adpcm_dec_wh_code_table[4] = {
155 798, -214, 798, -214
156};
157
158
159int adpcm_dec_dh, adpcm_dec_ih;
160int adpcm_dec_nbh, adpcm_dec_szh;
161int adpcm_dec_sph, adpcm_dec_ph, adpcm_dec_yh, adpcm_dec_rh;
162
163int adpcm_dec_delay_dhx[6];
164
165int adpcm_dec_delay_bph[6];
166
167int adpcm_dec_ah1, adpcm_dec_ah2;
168int adpcm_dec_ph1, adpcm_dec_ph2;
169int adpcm_dec_rh1, adpcm_dec_rh2;
170
171/* variables for decoder here */
172int adpcm_dec_ilr, adpcm_dec_yl, adpcm_dec_rl;
173int adpcm_dec_dec_deth, adpcm_dec_dec_detl, adpcm_dec_dec_dlt;
174
175int adpcm_dec_dec_del_bpl[6];
176
177int adpcm_dec_dec_del_dltx[6];
178
179int adpcm_dec_dec_plt, adpcm_dec_dec_plt1, adpcm_dec_dec_plt2;
180int adpcm_dec_dec_szl, adpcm_dec_dec_spl, adpcm_dec_dec_sl;
181int adpcm_dec_dec_rlt1, adpcm_dec_dec_rlt2, adpcm_dec_dec_rlt;
182int adpcm_dec_dec_al1, adpcm_dec_dec_al2;
183int adpcm_dec_dl;
184int adpcm_dec_dec_nbl, adpcm_dec_dec_yh, adpcm_dec_dec_dh, adpcm_dec_dec_nbh;
185
186/* variables used in filtez */
187int adpcm_dec_dec_del_bph[6];
188
189int adpcm_dec_dec_del_dhx[6];
190
191int adpcm_dec_dec_szh;
192/* variables used in filtep */
193int adpcm_dec_dec_rh1, adpcm_dec_dec_rh2;
194int adpcm_dec_dec_ah1, adpcm_dec_dec_ah2;
195int adpcm_dec_dec_ph, adpcm_dec_dec_sph;
196
197int adpcm_dec_dec_sh, adpcm_dec_dec_rh;
198
199int adpcm_dec_dec_ph1, adpcm_dec_dec_ph2;
200
201
202/*
203 Arithmetic math functions
204*/
205
206
207/* MAX: 1 */
208int adpcm_dec_fabs( int n )
209{
210 int f;
211
212
213 if ( n >= 0 )
214 f = n;
215 else
216 f = -n;
217
218 return f;
219}
220
221
222int adpcm_dec_sin( int rad )
223{
224 int diff;
225 int app = 0;
226 int inc = 1;
227
228
229 /* MAX dependent on rad's value, say 50 */
230 _Pragma( "loopbound min 0 max 0" )
231 while ( rad > 2 * PI )
232 rad -= 2 * PI;
233
234 _Pragma( "loopbound min 0 max 1999" )
235 while ( rad < -2 * PI )
236 rad += 2 * PI;
237
238 diff = rad;
239 app = diff;
240 diff = ( diff * ( -( rad * rad ) ) ) / ( ( 2 * inc ) * ( 2 * inc + 1 ) );
241 app = app + diff;
242 inc++;
243
244 /* REALLY: while(my_fabs(diff) >= 0.00001) { */
245 /* MAX: 1000 */
246 _Pragma( "loopbound min 849 max 2424" )
247 while ( adpcm_dec_fabs( diff ) >= 1 ) {
248 diff = ( diff * ( -( rad * rad ) ) ) / ( ( 2 * inc ) * ( 2 * inc + 1 ) );
249 app = app + diff;
250 inc++;
251 }
252
253 return app;
254}
255
256
257int adpcm_dec_cos( int rad )
258{
259 return ( adpcm_dec_sin( PI / 2 - rad ) );
260}
261
262
263/*
264 Algorithm core functions
265*/
266
267/* decode function, result in xout1 and xout2 */
268void adpcm_dec_decode( int input )
269{
270 int i;
271 long int xa1, xa2; /* qmf accumulators */
272 int *h_ptr, *ac_ptr, *ac_ptr1, *ad_ptr, *ad_ptr1;
273
274
275 /* split transmitted word from input into ilr and ih */
276 adpcm_dec_ilr = input & 0x3f;
277 adpcm_dec_ih = input >> 6;
278
279 /* LOWER SUB_BAND DECODER */
280
281 /* filtez: compute predictor output for zero section */
282 adpcm_dec_dec_szl = adpcm_dec_filtez( adpcm_dec_dec_del_bpl,
283 adpcm_dec_dec_del_dltx );
284
285 /* filtep: compute predictor output signal for pole section */
286 adpcm_dec_dec_spl = adpcm_dec_filtep( adpcm_dec_dec_rlt1, adpcm_dec_dec_al1,
287 adpcm_dec_dec_rlt2, adpcm_dec_dec_al2 );
288
289 adpcm_dec_dec_sl = adpcm_dec_dec_spl + adpcm_dec_dec_szl;
290
291 /* invqxl: compute quantized difference signal for adaptive predic */
292 adpcm_dec_dec_dlt = ( ( long )adpcm_dec_dec_detl *
293 adpcm_dec_qq4_code4_table[adpcm_dec_ilr
294 >> 2] ) >> 15;
295
296 /* invqxl: compute quantized difference signal for decoder output */
297 adpcm_dec_dl = ( ( long )adpcm_dec_dec_detl *
298 adpcm_dec_qq6_code6_table[adpcm_dec_il] ) >>
299 15;
300
301 adpcm_dec_rl = adpcm_dec_dl + adpcm_dec_dec_sl;
302
303 /* logscl: quantizer scale factor adaptation in the lower sub-band */
304 adpcm_dec_dec_nbl = adpcm_dec_logscl( adpcm_dec_ilr, adpcm_dec_dec_nbl );
305
306 /* scalel: computes quantizer scale factor in the lower sub band */
307 adpcm_dec_dec_detl = adpcm_dec_scalel( adpcm_dec_dec_nbl, 8 );
308
309 /* parrec - add pole predictor output to quantized diff. signal */
310 /* for partially reconstructed signal */
311 adpcm_dec_dec_plt = adpcm_dec_dec_dlt + adpcm_dec_dec_szl;
312
313 /* upzero: update zero section predictor coefficients */
314 adpcm_dec_upzero( adpcm_dec_dec_dlt, adpcm_dec_dec_del_dltx,
315 adpcm_dec_dec_del_bpl );
316
317 /* uppol2: update second predictor coefficient apl2 and delay it as al2 */
318 adpcm_dec_dec_al2 = adpcm_dec_uppol2( adpcm_dec_dec_al1, adpcm_dec_dec_al2,
319 adpcm_dec_dec_plt, adpcm_dec_dec_plt1,
320 adpcm_dec_dec_plt2 );
321
322 /* uppol1: update first predictor coef. (pole setion) */
323 adpcm_dec_dec_al1 = adpcm_dec_uppol1( adpcm_dec_dec_al1, adpcm_dec_dec_al2,
324 adpcm_dec_dec_plt, adpcm_dec_dec_plt1 );
325
326 /* recons : compute recontructed signal for adaptive predictor */
327 adpcm_dec_dec_rlt = adpcm_dec_dec_sl + adpcm_dec_dec_dlt;
328
329 /* done with lower sub band decoder, implement delays for next time */
330 adpcm_dec_dec_rlt2 = adpcm_dec_dec_rlt1;
331 adpcm_dec_dec_rlt1 = adpcm_dec_dec_rlt;
332 adpcm_dec_dec_plt2 = adpcm_dec_dec_plt1;
333 adpcm_dec_dec_plt1 = adpcm_dec_dec_plt;
334
335 /* HIGH SUB-BAND DECODER */
336
337 /* filtez: compute predictor output for zero section */
338 adpcm_dec_dec_szh = adpcm_dec_filtez( adpcm_dec_dec_del_bph,
339 adpcm_dec_dec_del_dhx );
340
341 /* filtep: compute predictor output signal for pole section */
342 adpcm_dec_dec_sph = adpcm_dec_filtep( adpcm_dec_dec_rh1, adpcm_dec_dec_ah1,
343 adpcm_dec_dec_rh2, adpcm_dec_dec_ah2 );
344
345 /* predic:compute the predictor output value in the higher sub_band decoder */
346 adpcm_dec_dec_sh = adpcm_dec_dec_sph + adpcm_dec_dec_szh;
347
348 /* invqah: in-place compute the quantized difference signal */
349 adpcm_dec_dec_dh = ( ( long )adpcm_dec_dec_deth *
350 adpcm_dec_qq2_code2_table[adpcm_dec_ih] ) >> 15L ;
351
352 /* logsch: update logarithmic quantizer scale factor in hi sub band */
353 adpcm_dec_dec_nbh = adpcm_dec_logsch( adpcm_dec_ih, adpcm_dec_dec_nbh );
354
355 /* scalel: compute the quantizer scale factor in the higher sub band */
356 adpcm_dec_dec_deth = adpcm_dec_scalel( adpcm_dec_dec_nbh, 10 );
357
358 /* parrec: compute partially recontructed signal */
359 adpcm_dec_dec_ph = adpcm_dec_dec_dh + adpcm_dec_dec_szh;
360
361 /* upzero: update zero section predictor coefficients */
362 adpcm_dec_upzero( adpcm_dec_dec_dh, adpcm_dec_dec_del_dhx,
363 adpcm_dec_dec_del_bph );
364
365 /* uppol2: update second predictor coefficient aph2 and delay it as ah2 */
366 adpcm_dec_dec_ah2 = adpcm_dec_uppol2( adpcm_dec_dec_ah1, adpcm_dec_dec_ah2,
367 adpcm_dec_dec_ph, adpcm_dec_dec_ph1, adpcm_dec_dec_ph2 );
368
369 /* uppol1: update first predictor coef. (pole setion) */
370 adpcm_dec_dec_ah1 = adpcm_dec_uppol1( adpcm_dec_dec_ah1, adpcm_dec_dec_ah2,
371 adpcm_dec_dec_ph, adpcm_dec_dec_ph1 );
372
373 /* recons : compute recontructed signal for adaptive predictor */
374 adpcm_dec_rh = adpcm_dec_dec_sh + adpcm_dec_dec_dh;
375
376 /* done with high band decode, implementing delays for next time here */
377 adpcm_dec_dec_rh2 = adpcm_dec_dec_rh1;
378 adpcm_dec_dec_rh1 = adpcm_dec_rh;
379 adpcm_dec_dec_ph2 = adpcm_dec_dec_ph1;
380 adpcm_dec_dec_ph1 = adpcm_dec_dec_ph;
381
382 /* end of higher sub_band decoder */
383
384 /* end with receive quadrature mirror filters */
385 adpcm_dec_xd = adpcm_dec_rl - adpcm_dec_rh;
386 adpcm_dec_xs = adpcm_dec_rl + adpcm_dec_rh;
387
388 /* receive quadrature mirror filters implemented here */
389 h_ptr = adpcm_dec_h;
390 ac_ptr = adpcm_dec_accumc;
391 ad_ptr = adpcm_dec_accumd;
392 xa1 = ( long ) adpcm_dec_xd * ( *h_ptr++ );
393 xa2 = ( long ) adpcm_dec_xs * ( *h_ptr++ );
394
395 /* main multiply accumulate loop for samples and coefficients */
396 _Pragma( "loopbound min 10 max 10" )
397 for ( i = 0; i < 10; i++ ) {
398 xa1 += ( long )( *ac_ptr++ ) * ( *h_ptr++ );
399 xa2 += ( long )( *ad_ptr++ ) * ( *h_ptr++ );
400 }
401
402 /* final mult/accumulate */
403 xa1 += ( long )( *ac_ptr ) * ( *h_ptr++ );
404 xa2 += ( long )( *ad_ptr ) * ( *h_ptr++ );
405
406 /* scale by 2^14 */
407 adpcm_dec_xout1 = xa1 >> 14;
408 adpcm_dec_xout2 = xa2 >> 14;
409
410 /* update delay lines */
411 ac_ptr1 = ac_ptr - 1;
412 ad_ptr1 = ad_ptr - 1;
413
414 _Pragma( "loopbound min 10 max 10" )
415 for ( i = 0; i < 10; i++ ) {
416 *ac_ptr-- = *ac_ptr1--;
417 *ad_ptr-- = *ad_ptr1--;
418 }
419
420 *ac_ptr = adpcm_dec_xd;
421 *ad_ptr = adpcm_dec_xs;
422
423 return;
424}
425
426
427/* filtez - compute predictor output signal (zero section) */
428/* input: bpl1-6 and dlt1-6, output: szl */
429int adpcm_dec_filtez( int *bpl, int *dlt )
430{
431 int i;
432 long int zl;
433
434
435 zl = ( long )( *bpl++ ) * ( *dlt++ );
436
437 /* MAX: 5 */
438 _Pragma( "loopbound min 5 max 5" )
439 for ( i = 1; i < 6; i++ )
440 zl += ( long )( *bpl++ ) * ( *dlt++ );
441
442 return ( ( int )( zl >> 14 ) ); /* x2 here */
443}
444
445
446/* filtep - compute predictor output signal (pole section) */
447/* input rlt1-2 and al1-2, output spl */
448int adpcm_dec_filtep( int rlt1, int al1, int rlt2, int al2 )
449{
450 long int pl, pl2;
451
452
453 pl = 2 * rlt1;
454 pl = ( long ) al1 * pl;
455 pl2 = 2 * rlt2;
456 pl += ( long ) al2 * pl2;
457
458 return ( ( int )( pl >> 15 ) );
459}
460
461
462/* logscl - update log quantizer scale factor in lower sub-band */
463/* note that nbl is passed and returned */
464int adpcm_dec_logscl( int il, int nbl )
465{
466 long int wd;
467
468
469 wd = ( ( long )nbl * 127L ) >> 7L; /* leak factor 127/128 */
470 nbl = ( int )wd + adpcm_dec_wl_code_table[il >> 2];
471
472 if ( nbl < 0 )
473 nbl = 0;
474 if ( nbl > 18432 )
475 nbl = 18432;
476
477 return ( nbl );
478}
479
480
481/* scalel: compute quantizer scale factor in lower or upper sub-band*/
482int adpcm_dec_scalel( int nbl, int shift_constant )
483{
484 int wd1, wd2, wd3;
485
486
487 wd1 = ( nbl >> 6 ) & 31;
488 wd2 = nbl >> 11;
489 wd3 = adpcm_dec_ilb_table[wd1] >> ( shift_constant + 1 - wd2 );
490
491 return ( wd3 << 3 );
492}
493
494
495/* upzero - inputs: dlt, dlti[0-5], bli[0-5], outputs: updated bli[0-5] */
496/* also implements delay of bli and update of dlti from dlt */
497void adpcm_dec_upzero( int dlt, int *dlti, int *bli )
498{
499 int i, wd2, wd3;
500
501
502 /*if dlt is zero, then no sum into bli */
503 if ( dlt == 0 ) {
504 _Pragma( "loopbound min 6 max 6" )
505 for ( i = 0; i < 6; i++ ) {
506 bli[i] = ( int )( ( 255L * bli[i] ) >> 8L ); /* leak factor of 255/256 */
507 }
508
509 } else {
510 _Pragma( "loopbound min 6 max 6" )
511 for ( i = 0; i < 6; i++ ) {
512 if ( ( long )dlt * dlti[i] >= 0 )
513 wd2 = 128;
514 else
515 wd2 = -128;
516
517 wd3 = ( int )( ( 255L * bli[i] ) >> 8L ); /* leak factor of 255/256 */
518 bli[i] = wd2 + wd3;
519 }
520
521 }
522
523 /* implement delay line for dlt */
524 dlti[5] = dlti[4];
525 dlti[4] = dlti[3];
526 dlti[3] = dlti[2];
527 dlti[1] = dlti[0];
528 dlti[0] = dlt;
529
530 return;
531}
532
533
534/* uppol2 - update second predictor coefficient (pole section) */
535/* inputs: al1, al2, plt, plt1, plt2. outputs: apl2 */
536int adpcm_dec_uppol2( int al1, int al2, int plt, int plt1, int plt2 )
537{
538 long int wd2, wd4;
539 int apl2;
540
541
542 wd2 = 4L * ( long )al1;
543 if ( ( long )plt * plt1 >= 0L )
544 wd2 = -wd2; /* check same sign */
545 wd2 = wd2 >> 7; /* gain of 1/128 */
546
547 if ( ( long )plt * plt2 >= 0L ) {
548 wd4 = wd2 + 128; /* same sign case */
549 } else
550 wd4 = wd2 - 128;
551 apl2 = wd4 + ( 127L * ( long )al2 >> 7L ); /* leak factor of 127/128 */
552
553 /* apl2 is limited to +-.75 */
554 if ( apl2 > 12288 )
555 apl2 = 12288;
556 if ( apl2 < -12288 )
557 apl2 = -12288;
558
559 return ( apl2 );
560}
561
562
563/* uppol1 - update first predictor coefficient (pole section) */
564/* inputs: al1, apl2, plt, plt1. outputs: apl1 */
565int adpcm_dec_uppol1( int al1, int apl2, int plt, int plt1 )
566{
567 long int wd2;
568 int wd3, apl1;
569
570
571 wd2 = ( ( long )al1 * 255L ) >> 8L; /* leak factor of 255/256 */
572 if ( ( long )plt * plt1 >= 0L ) {
573 apl1 = ( int )wd2 + 192; /* same sign case */
574 } else
575 apl1 = ( int )wd2 - 192;
576
577 /* note: wd3= .9375-.75 is always positive */
578 wd3 = 15360 - apl2; /* limit value */
579 if ( apl1 > wd3 )
580 apl1 = wd3;
581 if ( apl1 < -wd3 )
582 apl1 = -wd3;
583
584 return ( apl1 );
585}
586
587
588/* logsch - update log quantizer scale factor in higher sub-band */
589/* note that nbh is passed and returned */
590int adpcm_dec_logsch( int ih, int nbh )
591{
592 int wd;
593
594
595 wd = ( ( long )nbh * 127L ) >> 7L; /* leak factor 127/128 */
596 nbh = wd + adpcm_dec_wh_code_table[ih];
597
598 if ( nbh < 0 )
599 nbh = 0;
600 if ( nbh > 22528 )
601 nbh = 22528;
602
603 return ( nbh );
604}
605
606/*
607 Initialization- and return-value-related functions
608*/
609
610/* clear all storage locations */
611
612void adpcm_dec_reset()
613{
614 int i;
615
616
617 adpcm_dec_detl = adpcm_dec_dec_detl = 32; /* reset to min scale factor */
618 adpcm_dec_deth = adpcm_dec_dec_deth = 8;
619 adpcm_dec_nbl = adpcm_dec_al1 = adpcm_dec_al2 = adpcm_dec_plt1 = adpcm_dec_plt2
620 = adpcm_dec_rlt1 = adpcm_dec_rlt2 = 0;
621 adpcm_dec_nbh = adpcm_dec_ah1 = adpcm_dec_ah2 = adpcm_dec_ph1 = adpcm_dec_ph2 =
622 adpcm_dec_rh1 = adpcm_dec_rh2 = 0;
623 adpcm_dec_dec_nbl = adpcm_dec_dec_al1 = adpcm_dec_dec_al2 = adpcm_dec_dec_plt1 =
624 adpcm_dec_dec_plt2 = adpcm_dec_dec_rlt1 = adpcm_dec_dec_rlt2 = 0;
625 adpcm_dec_dec_nbh = adpcm_dec_dec_ah1 = adpcm_dec_dec_ah2 = adpcm_dec_dec_ph1 =
626 adpcm_dec_dec_ph2 = adpcm_dec_dec_rh1 = adpcm_dec_dec_rh2 = 0;
627
628 _Pragma( "loopbound min 6 max 6" )
629 for ( i = 0; i < 6; i++ ) {
630 ////delay_dltx[i] = 0;
631 adpcm_dec_delay_dhx[i] = 0;
632 adpcm_dec_dec_del_dltx[i] = 0;
633 adpcm_dec_dec_del_dhx[i] = 0;
634 }
635
636 _Pragma( "loopbound min 6 max 6" )
637 for ( i = 0; i < 6; i++ ) {
638 //delay_bpl[i] = 0;
639 adpcm_dec_delay_bph[i] = 0;
640 adpcm_dec_dec_del_bpl[i] = 0;
641 adpcm_dec_dec_del_bph[i] = 0;
642 }
643
644 _Pragma( "loopbound min 11 max 11" )
645 for ( i = 0; i < 11; i++ ) {
646 adpcm_dec_accumc[i] = 0;
647 adpcm_dec_accumd[i] = 0;
648 }
649
650 return;
651}
652
653void adpcm_dec_init()
654{
655 int i, j, f;
656 volatile int x = 0;
657 /* read in amplitude and frequency for test data */
658 j = 10;
659 f = 2000;
660
661 /* reset, initialize required memory */
662 adpcm_dec_reset();
663
664 /* 16 KHz sample rate */
665 /* XXmain_0, MAX: 2 */
666 /* Since the number of times we loop in adpcm_dec_sin depends on the
667 argument we add the fact: xxmain_0:[]: */
668 _Pragma( "loopbound min 3 max 3" )
669 for ( i = 0 ; i < SIZE ; i++ ) {
670 adpcm_dec_test_data[i] = ( int ) j * adpcm_dec_cos( f * PI * i );
671
672 /* avoid constant-propagation optimizations */
673 adpcm_dec_test_data[i] += x;
674 }
675}
676
677int adpcm_dec_return()
678{
679 int i;
680 int check_sum = 0;
681
682 for (i = 0; i < IN_END; i += 2)
683 {
684 check_sum += ( adpcm_dec_result[i] + adpcm_dec_result[i + 1] );
685 }
686
687 return check_sum != -2;
688}
689
690/*
691 Main functions
692*/
693
694void _Pragma( "entrypoint" ) adpcm_dec_main( void )
695{
696 int i;
697
698 _Pragma( "loopbound min 2 max 2" )
699 for ( i = 0 ; i < IN_END ; i += 2 ) {
700 adpcm_dec_decode( adpcm_dec_compressed[i / 2] );
701 adpcm_dec_result[i] = adpcm_dec_xout1;
702 adpcm_dec_result[i + 1] = adpcm_dec_xout2;
703 }
704
705}
706
707
708int main(int argc, char **argv)
709{
710 SET_UP
711 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
712 START_LOOP
713 adpcm_dec_init();
714 adpcm_dec_main();
715 STOP_LOOP
716}
717WRITE_TO_FILE
718 return ( adpcm_dec_return() );
719}
diff --git a/baseline/source/adpcm_dec/timedTest.txt b/baseline/source/adpcm_dec/timedTest.txt
new file mode 100644
index 0000000..82c0948
--- /dev/null
+++ b/baseline/source/adpcm_dec/timedTest.txt
@@ -0,0 +1,100 @@
1adpcm_dec none 7 none 100 123133 timedTest 0 (null)
2adpcm_dec none 7 none 100 123203 timedTest 1 (null)
3adpcm_dec none 7 none 100 123482 timedTest 2 (null)
4adpcm_dec none 7 none 100 138289 timedTest 3 (null)
5adpcm_dec none 7 none 100 123272 timedTest 4 (null)
6adpcm_dec none 7 none 100 122924 timedTest 5 (null)
7adpcm_dec none 7 none 100 123064 timedTest 6 (null)
8adpcm_dec none 7 none 100 123343 timedTest 7 (null)
9adpcm_dec none 7 none 100 123553 timedTest 8 (null)
10adpcm_dec none 7 none 100 123483 timedTest 9 (null)
11adpcm_dec none 7 none 100 123692 timedTest 10 (null)
12adpcm_dec none 7 none 100 123762 timedTest 11 (null)
13adpcm_dec none 7 none 100 123622 timedTest 12 (null)
14adpcm_dec none 7 none 100 138569 timedTest 13 (null)
15adpcm_dec none 7 none 100 123831 timedTest 14 (null)
16adpcm_dec none 7 none 100 123343 timedTest 15 (null)
17adpcm_dec none 7 none 100 123552 timedTest 16 (null)
18adpcm_dec none 7 none 100 123622 timedTest 17 (null)
19adpcm_dec none 7 none 100 123761 timedTest 18 (null)
20adpcm_dec none 7 none 100 123343 timedTest 19 (null)
21adpcm_dec none 7 none 100 123692 timedTest 20 (null)
22adpcm_dec none 7 none 100 123972 timedTest 21 (null)
23adpcm_dec none 7 none 100 123762 timedTest 22 (null)
24adpcm_dec none 7 none 100 123622 timedTest 23 (null)
25adpcm_dec none 7 none 100 123482 timedTest 24 (null)
26adpcm_dec none 7 none 100 123552 timedTest 25 (null)
27adpcm_dec none 7 none 100 123832 timedTest 26 (null)
28adpcm_dec none 7 none 100 123971 timedTest 27 (null)
29adpcm_dec none 7 none 100 123692 timedTest 28 (null)
30adpcm_dec none 7 none 100 123832 timedTest 29 (null)
31adpcm_dec none 7 none 100 123762 timedTest 30 (null)
32adpcm_dec none 7 none 100 123902 timedTest 31 (null)
33adpcm_dec none 7 none 100 123692 timedTest 32 (null)
34adpcm_dec none 7 none 100 123762 timedTest 33 (null)
35adpcm_dec none 7 none 100 123762 timedTest 34 (null)
36adpcm_dec none 7 none 100 123832 timedTest 35 (null)
37adpcm_dec none 7 none 100 124041 timedTest 36 (null)
38adpcm_dec none 7 none 100 123762 timedTest 37 (null)
39adpcm_dec none 7 none 100 123553 timedTest 38 (null)
40adpcm_dec none 7 none 100 123692 timedTest 39 (null)
41adpcm_dec none 7 none 100 138709 timedTest 40 (null)
42adpcm_dec none 7 none 100 123762 timedTest 41 (null)
43adpcm_dec none 7 none 100 123971 timedTest 42 (null)
44adpcm_dec none 7 none 100 123832 timedTest 43 (null)
45adpcm_dec none 7 none 100 123622 timedTest 44 (null)
46adpcm_dec none 7 none 100 123692 timedTest 45 (null)
47adpcm_dec none 7 none 100 123692 timedTest 46 (null)
48adpcm_dec none 7 none 100 123622 timedTest 47 (null)
49adpcm_dec none 7 none 100 123971 timedTest 48 (null)
50adpcm_dec none 7 none 100 123762 timedTest 49 (null)
51adpcm_dec none 7 none 100 124042 timedTest 50 (null)
52adpcm_dec none 7 none 100 123971 timedTest 51 (null)
53adpcm_dec none 7 none 100 123482 timedTest 52 (null)
54adpcm_dec none 7 none 100 123832 timedTest 53 (null)
55adpcm_dec none 7 none 100 123692 timedTest 54 (null)
56adpcm_dec none 7 none 100 124041 timedTest 55 (null)
57adpcm_dec none 7 none 100 123902 timedTest 56 (null)
58adpcm_dec none 7 none 100 123972 timedTest 57 (null)
59adpcm_dec none 7 none 100 123901 timedTest 58 (null)
60adpcm_dec none 7 none 100 123692 timedTest 59 (null)
61adpcm_dec none 7 none 100 123553 timedTest 60 (null)
62adpcm_dec none 7 none 100 123692 timedTest 61 (null)
63adpcm_dec none 7 none 100 124041 timedTest 62 (null)
64adpcm_dec none 7 none 100 123971 timedTest 63 (null)
65adpcm_dec none 7 none 100 124251 timedTest 64 (null)
66adpcm_dec none 7 none 100 123622 timedTest 65 (null)
67adpcm_dec none 7 none 100 123972 timedTest 66 (null)
68adpcm_dec none 7 none 100 137870 timedTest 67 (null)
69adpcm_dec none 7 none 100 123622 timedTest 68 (null)
70adpcm_dec none 7 none 100 123553 timedTest 69 (null)
71adpcm_dec none 7 none 100 123901 timedTest 70 (null)
72adpcm_dec none 7 none 100 124041 timedTest 71 (null)
73adpcm_dec none 7 none 100 123483 timedTest 72 (null)
74adpcm_dec none 7 none 100 123831 timedTest 73 (null)
75adpcm_dec none 7 none 100 123971 timedTest 74 (null)
76adpcm_dec none 7 none 100 123413 timedTest 75 (null)
77adpcm_dec none 7 none 100 123622 timedTest 76 (null)
78adpcm_dec none 7 none 100 123553 timedTest 77 (null)
79adpcm_dec none 7 none 100 123692 timedTest 78 (null)
80adpcm_dec none 7 none 100 123692 timedTest 79 (null)
81adpcm_dec none 7 none 100 123832 timedTest 80 (null)
82adpcm_dec none 7 none 100 123692 timedTest 81 (null)
83adpcm_dec none 7 none 100 123692 timedTest 82 (null)
84adpcm_dec none 7 none 100 123482 timedTest 83 (null)
85adpcm_dec none 7 none 100 124251 timedTest 84 (null)
86adpcm_dec none 7 none 100 124111 timedTest 85 (null)
87adpcm_dec none 7 none 100 124041 timedTest 86 (null)
88adpcm_dec none 7 none 100 123692 timedTest 87 (null)
89adpcm_dec none 7 none 100 124111 timedTest 88 (null)
90adpcm_dec none 7 none 100 123972 timedTest 89 (null)
91adpcm_dec none 7 none 100 123832 timedTest 90 (null)
92adpcm_dec none 7 none 100 123483 timedTest 91 (null)
93adpcm_dec none 7 none 100 123483 timedTest 92 (null)
94adpcm_dec none 7 none 100 123692 timedTest 93 (null)
95adpcm_dec none 7 none 100 124390 timedTest 94 (null)
96adpcm_dec none 7 none 100 123831 timedTest 95 (null)
97adpcm_dec none 7 none 100 123762 timedTest 96 (null)
98adpcm_dec none 7 none 100 123692 timedTest 97 (null)
99adpcm_dec none 7 none 100 123692 timedTest 98 (null)
100adpcm_dec none 7 none 100 123902 timedTest 99 (null)
diff --git a/baseline/source/adpcm_enc/ChangeLog.txt b/baseline/source/adpcm_enc/ChangeLog.txt
new file mode 100644
index 0000000..0029192
--- /dev/null
+++ b/baseline/source/adpcm_enc/ChangeLog.txt
@@ -0,0 +1,34 @@
1File: adpcm_enc.c
2Original provenience: C Algorithms for Real-Time DSP by P. M. Embree
3
42016-03-07:
5- Rename adpcm_encode to adpcm_enc
6- Add generic TACLeBench header
7- Remove #define Seoul_Mate around main
8- Remove swedish comment after setting frequency to 2000
9- Introduce adpcm_enc_init, adpcm_main, adpcm_return
10- Make test_data and compressed global variables
112016-04-26:
12- Remove forward declarations of functions gaussian, iir_filter, fir_filter,
13 fft, setup_codec, key_down, int_enable, int_disable, flags, getinput,
14 sendout, which are never defined
15- Remove commented declarations of invqxl and invqah
16- Remove unused structure COMPLEX
17- Remove prefix my_ from functions names my_fabs, my_cos, my_sin, my_abs
18- Prefix all global symbols with benchmark name
19- Remove variables accumc and accumd together with their initialization loop,
20 since they are never read
21- Remove unused variables xs and xd
22- Remove unused array wl_table
23- Remove unused variable rs and rh
24- Remove unused variables and their initializations (only required for decoder):
25 ilr, yl, rl, dec_deth, dec_del_bpl, dec_plt, dec_plt1, dec_plt2, dec_szl,
26 dec_spl, dec_sl, dec_rlt1, dec_rlt2, dec_rlt, dec_al1, dec_al2, dl, dec_nbl,
27 dec_yh, dec_dh, dec_nbh, dec_rh2, dec_ah1, dec_ah2, dec_ph, dec_sph, dec_sh,
28 dec_rh, dec_ph1, dec_ph2,
29- Add addition on each element of input data with volatile variable to
30 avoid constant-propagation optimizations through the compoiler
31- Add computation of check sum
32- Add return return statement: zero if check sum is correct
332016-05-20:
34- Apply code formatting with astyle
diff --git a/baseline/source/adpcm_enc/adpcm_enc.c b/baseline/source/adpcm_enc/adpcm_enc.c
new file mode 100644
index 0000000..d9fb09a
--- /dev/null
+++ b/baseline/source/adpcm_enc/adpcm_enc.c
@@ -0,0 +1,758 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: adpcm_enc
7
8 Author: Sung-Soo Lim
9
10 Function: CCITT G.722 ADPCM (Adaptive Differential Pulse Code Modulation)
11 algorithm. 16khz sample rate data is stored in the array test_data[SIZE].
12 Results are stored in the array compressed[SIZE].
13 Execution time is determined by the constant SIZE (default value is 2000).
14
15
16 Source: C Algorithms for Real-Time DSP by P. M. Embree
17 and SNU-RT Benchmark Suite for Worst Case Timing Analysis
18 collected and modified by S.-S. Lim <sslim@archi.snu.ac.kr>
19
20 Original name: adpcm_encoder
21
22 Changes: no major functional changes
23
24 License: may be used, modified, and re-distributed freely, but the
25 SNU-RT Benchmark Suite must be acknowledged
26
27*/
28
29
30/* common sampling rate for sound cards on IBM/PC */
31
32#include "../extra.h"
33#define SAMPLE_RATE 11025
34
35#define PI 3141
36#define SIZE 3
37#define IN_END 4
38
39
40/*
41 Forward declaration of functions
42*/
43
44int adpcm_enc_encode( int, int );
45int adpcm_enc_filtez( int *bpl, int *dlt );
46void adpcm_enc_upzero( int dlt, int *dlti, int *bli );
47int adpcm_enc_filtep( int rlt1, int al1, int rlt2, int al2 );
48int adpcm_enc_quantl( int el, int detl );
49int adpcm_enc_logscl( int il, int nbl );
50int adpcm_enc_scalel( int nbl, int shift_constant );
51int adpcm_enc_uppol2( int al1, int al2, int plt, int plt1, int plt2 );
52int adpcm_enc_uppol1( int al1, int apl2, int plt, int plt1 );
53int adpcm_enc_logsch( int ih, int nbh );
54void adpcm_enc_reset();
55int adpcm_enc_fabs( int n );
56int adpcm_enc_cos( int n );
57int adpcm_enc_sin( int n );
58int adpcm_enc_abs( int n );
59void adpcm_enc_init(void);
60void adpcm_enc_main(void);
61int adpcm_enc_return(void);
62//int main(void);
63
64/*
65 Forward declaration of global variables
66*/
67
68int adpcm_enc_test_data[SIZE * 2], adpcm_enc_compressed[SIZE];
69
70
71/* G722 C code */
72
73/* variables for transimit quadrature mirror filter here */
74int adpcm_enc_tqmf[24];
75
76/* QMF filter coefficients:
77scaled by a factor of 4 compared to G722 CCITT recommendation */
78int adpcm_enc_h[24] = {
79 12, -44, -44, 212, 48, -624, 128, 1448,
80 -840, -3220, 3804, 15504, 15504, 3804, -3220, -840,
81 1448, 128, -624, 48, 212, -44, -44, 12
82};
83
84int adpcm_enc_xl, adpcm_enc_xh;
85
86/* variables for encoder (hi and lo) here */
87
88int adpcm_enc_il, adpcm_enc_szl, adpcm_enc_spl, adpcm_enc_sl, adpcm_enc_el;
89
90int adpcm_enc_qq4_code4_table[16] = {
91 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200,
92 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0
93};
94
95int adpcm_enc_qq5_code5_table[32] = {
96 -280, -280, -23352, -17560, -14120, -11664, -9752, -8184,
97 -6864, -5712, -4696, -3784, -2960, -2208, -1520, -880,
98 23352, 17560, 14120, 11664, 9752, 8184, 6864, 5712,
99 4696, 3784, 2960, 2208, 1520, 880, 280, -280
100};
101
102int adpcm_enc_qq6_code6_table[64] = {
103 -136, -136, -136, -136, -24808, -21904, -19008, -16704,
104-14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856,
105 -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576,
106 -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728,
107 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192,
108 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456,
109 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032,
110 1688, 1360, 1040, 728, 432, 136, -432, -136
111};
112
113int adpcm_enc_delay_bpl[6];
114
115int adpcm_enc_delay_dltx[6];
116
117int adpcm_enc_wl_code_table[16] = {
118 -60, 3042, 1198, 538, 334, 172, 58, -30,
119 3042, 1198, 538, 334, 172, 58, -30, -60
120};
121
122int adpcm_enc_ilb_table[32] = {
123 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383,
124 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834,
125 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371,
126 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008
127};
128
129int adpcm_enc_nbl; /* delay line */
130int adpcm_enc_al1, adpcm_enc_al2;
131int adpcm_enc_plt, adpcm_enc_plt1, adpcm_enc_plt2;
132int adpcm_enc_dlt;
133int adpcm_enc_rlt, adpcm_enc_rlt1, adpcm_enc_rlt2;
134
135/* decision levels - pre-multiplied by 8, 0 to indicate end */
136int adpcm_enc_decis_levl[30] = {
137 280, 576, 880, 1200, 1520, 1864, 2208, 2584,
138 2960, 3376, 3784, 4240, 4696, 5200, 5712, 6288,
139 6864, 7520, 8184, 8968, 9752, 10712, 11664, 12896,
140 14120, 15840, 17560, 20456, 23352, 32767
141};
142
143int adpcm_enc_detl;
144
145/* quantization table 31 long to make quantl look-up easier,
146last entry is for mil=30 case when wd is max */
147int adpcm_enc_quant26bt_pos[31] = {
148 61, 60, 59, 58, 57, 56, 55, 54,
149 53, 52, 51, 50, 49, 48, 47, 46,
150 45, 44, 43, 42, 41, 40, 39, 38,
151 37, 36, 35, 34, 33, 32, 32
152};
153
154/* quantization table 31 long to make quantl look-up easier,
155last entry is for mil=30 case when wd is max */
156int adpcm_enc_quant26bt_neg[31] = {
157 63, 62, 31, 30, 29, 28, 27, 26,
158 25, 24, 23, 22, 21, 20, 19, 18,
159 17, 16, 15, 14, 13, 12, 11, 10,
160 9, 8, 7, 6, 5, 4, 4
161};
162
163
164int adpcm_enc_deth;
165int adpcm_enc_sh; /* this comes from adaptive predictor */
166int adpcm_enc_eh;
167
168int adpcm_enc_qq2_code2_table[4] = {
169 -7408, -1616, 7408, 1616
170};
171
172int adpcm_enc_wh_code_table[4] = {
173 798, -214, 798, -214
174};
175
176
177int adpcm_enc_dh, adpcm_enc_ih;
178int adpcm_enc_nbh, adpcm_enc_szh;
179int adpcm_enc_sph, adpcm_enc_ph, adpcm_enc_yh;
180
181int adpcm_enc_delay_dhx[6];
182int adpcm_enc_delay_bph[6];
183
184int adpcm_enc_ah1, adpcm_enc_ah2;
185int adpcm_enc_ph1, adpcm_enc_ph2;
186int adpcm_enc_rh1, adpcm_enc_rh2;
187
188
189/* G722 encode function two ints in, one 8 bit output */
190
191/* put input samples in xin1 = first value, xin2 = second value */
192/* returns il and ih stored together */
193
194
195/* MAX: 1 */
196int adpcm_enc_abs( int n )
197{
198 int m;
199
200
201 if ( n >= 0 )
202 m = n;
203 else
204 m = -n;
205
206 return m;
207}
208
209
210/* MAX: 1 */
211int adpcm_enc_fabs( int n )
212{
213 int f;
214
215
216 if ( n >= 0 )
217 f = n;
218 else
219 f = -n;
220
221 return f;
222}
223
224
225int adpcm_enc_sin( int rad )
226{
227 int diff;
228 int app = 0;
229 int inc = 1;
230
231
232 /* MAX dependent on rad's value, say 50 */
233 _Pragma("loopbound min 0 max 0")
234 while ( rad > 2 * PI ) {
235 rad -= 2 * PI;
236 }
237
238 /* MAX dependent on rad's value, say 50 */
239 _Pragma("loopbound min 0 max 1999")
240 while ( rad < -2 * PI ) {
241 rad += 2 * PI;
242 }
243
244 diff = rad;
245 app = diff;
246 diff = (diff * (-(rad*rad))) / ((2 * inc) * (2 * inc + 1));
247 app = app + diff;
248 inc++;
249
250 /* REALLY: while(my_fabs(diff) >= 0.00001) { */
251 /* MAX: 1000 */
252 _Pragma("loopbound min 849 max 2424")
253 while ( adpcm_enc_fabs( diff ) >= 1 ) {
254 diff = (diff * (-(rad*rad))) / ((2 * inc) * (2 * inc + 1));
255 app = app + diff;
256 inc++;
257 }
258
259 return app;
260}
261
262
263int adpcm_enc_cos( int rad )
264{
265 return( adpcm_enc_sin( PI / 2 - rad ) );
266}
267
268
269/* MAX: 1 */
270int adpcm_enc_encode( int xin1, int xin2 )
271{
272 int i;
273 int *h_ptr, *tqmf_ptr, *tqmf_ptr1;
274 long int xa, xb;
275 int decis;
276
277
278 /* transmit quadrature mirror filters implemented here */
279 h_ptr = adpcm_enc_h;
280 tqmf_ptr = adpcm_enc_tqmf;
281 xa = (long)(*tqmf_ptr++) * (*h_ptr++);
282 xb = (long)(*tqmf_ptr++) * (*h_ptr++);
283
284 /* main multiply accumulate loop for samples and coefficients */
285 /* MAX: 10 */
286 _Pragma("loopbound min 10 max 10")
287 for ( i = 0; i < 10; i++ ) {
288 xa += (long)(*tqmf_ptr++) * (*h_ptr++);
289 xb += (long)(*tqmf_ptr++) * (*h_ptr++);
290 }
291
292 /* final mult/accumulate */
293 xa += (long)(*tqmf_ptr++) * (*h_ptr++);
294 xb += (long)(*tqmf_ptr) * (*h_ptr++);
295
296 /* update delay line tqmf */
297 tqmf_ptr1 = tqmf_ptr - 2;
298 /* MAX: 22 */
299 _Pragma("loopbound min 22 max 22")
300 for ( i = 0; i < 22; i++ ) {
301 *tqmf_ptr-- = *tqmf_ptr1--;
302 }
303
304 *tqmf_ptr-- = xin1;
305 *tqmf_ptr = xin2;
306
307 /* scale outputs */
308 adpcm_enc_xl = (xa + xb) >> 15;
309 adpcm_enc_xh = (xa - xb) >> 15;
310
311 /* end of quadrature mirror filter code */
312
313 /* starting with lower sub band encoder */
314
315 /* filtez - compute predictor output section - zero section */
316 adpcm_enc_szl = adpcm_enc_filtez( adpcm_enc_delay_bpl, adpcm_enc_delay_dltx );
317
318 /* filtep - compute predictor output signal (pole section) */
319 adpcm_enc_spl = adpcm_enc_filtep( adpcm_enc_rlt1, adpcm_enc_al1, adpcm_enc_rlt2, adpcm_enc_al2 );
320
321 /* compute the predictor output value in the lower sub_band encoder */
322 adpcm_enc_sl = adpcm_enc_szl + adpcm_enc_spl;
323 adpcm_enc_el = adpcm_enc_xl - adpcm_enc_sl;
324
325 /* quantl: quantize the difference signal */
326 adpcm_enc_il = adpcm_enc_quantl( adpcm_enc_el, adpcm_enc_detl );
327
328 /* invqxl: computes quantized difference signal */
329 /* for invqbl, truncate by 2 lsbs, so mode = 3 */
330 adpcm_enc_dlt = ( (long) adpcm_enc_detl * adpcm_enc_qq4_code4_table[adpcm_enc_il >> 2] ) >> 15;
331
332 /* logscl: updates logarithmic quant. scale factor in low sub band */
333 adpcm_enc_nbl = adpcm_enc_logscl( adpcm_enc_il, adpcm_enc_nbl );
334
335 /* scalel: compute the quantizer scale factor in the lower sub band */
336 /* calling parameters nbl and 8 (constant such that scalel can be scaleh) */
337 adpcm_enc_detl = adpcm_enc_scalel( adpcm_enc_nbl, 8 );
338
339 /* parrec - simple addition to compute recontructed signal for adaptive pred */
340 adpcm_enc_plt = adpcm_enc_dlt + adpcm_enc_szl;
341
342 /* upzero: update zero section predictor coefficients (sixth order)*/
343 /* calling parameters: dlt, dlt1, dlt2, ..., dlt6 from dlt */
344 /* bpli (linear_buffer in which all six values are delayed */
345 /* return params: updated bpli, delayed dltx */
346 adpcm_enc_upzero( adpcm_enc_dlt, adpcm_enc_delay_dltx, adpcm_enc_delay_bpl );
347
348 /* uppol2- update second predictor coefficient apl2 and delay it as al2 */
349 /* calling parameters: al1, al2, plt, plt1, plt2 */
350 adpcm_enc_al2 = adpcm_enc_uppol2( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, adpcm_enc_plt1, adpcm_enc_plt2 );
351
352 /* uppol1 :update first predictor coefficient apl1 and delay it as al1 */
353 /* calling parameters: al1, apl2, plt, plt1 */
354 adpcm_enc_al1 = adpcm_enc_uppol1( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, adpcm_enc_plt1);
355
356 /* recons : compute recontructed signal for adaptive predictor */
357 adpcm_enc_rlt = adpcm_enc_sl + adpcm_enc_dlt;
358
359 /* done with lower sub_band encoder; now implement delays for next time*/
360 adpcm_enc_rlt2 = adpcm_enc_rlt1;
361 adpcm_enc_rlt1 = adpcm_enc_rlt;
362 adpcm_enc_plt2 = adpcm_enc_plt1;
363 adpcm_enc_plt1 = adpcm_enc_plt;
364
365 /* high band encode */
366
367 adpcm_enc_szh = adpcm_enc_filtez( adpcm_enc_delay_bph, adpcm_enc_delay_dhx );
368
369 adpcm_enc_sph = adpcm_enc_filtep( adpcm_enc_rh1, adpcm_enc_ah1, adpcm_enc_rh2, adpcm_enc_ah2 );
370
371 /* predic: sh = sph + szh */
372 adpcm_enc_sh = adpcm_enc_sph + adpcm_enc_szh;
373 /* subtra: eh = xh - sh */
374 adpcm_enc_eh = adpcm_enc_xh - adpcm_enc_sh;
375
376 /* quanth - quantization of difference signal for higher sub-band */
377 /* quanth: in-place for speed params: eh, deth (has init. value) */
378 if ( adpcm_enc_eh >= 0 )
379 adpcm_enc_ih = 3; /* 2,3 are pos codes */
380 else
381 adpcm_enc_ih = 1; /* 0,1 are neg codes */
382
383 decis = ( 564L * (long)adpcm_enc_deth ) >> 12L;
384 if ( adpcm_enc_abs( adpcm_enc_eh ) > decis )
385 adpcm_enc_ih--; /* mih = 2 case */
386
387 /* invqah: compute the quantized difference signal, higher sub-band*/
388 adpcm_enc_dh = ( (long)adpcm_enc_deth * adpcm_enc_qq2_code2_table[adpcm_enc_ih] ) >> 15L ;
389
390 /* logsch: update logarithmic quantizer scale factor in hi sub-band*/
391 adpcm_enc_nbh = adpcm_enc_logsch( adpcm_enc_ih, adpcm_enc_nbh );
392
393 /* note : scalel and scaleh use same code, different parameters */
394 adpcm_enc_deth = adpcm_enc_scalel( adpcm_enc_nbh, 10 );
395
396 /* parrec - add pole predictor output to quantized diff. signal */
397 adpcm_enc_ph = adpcm_enc_dh + adpcm_enc_szh;
398
399 /* upzero: update zero section predictor coefficients (sixth order) */
400 /* calling parameters: dh, dhi, bphi */
401 /* return params: updated bphi, delayed dhx */
402 adpcm_enc_upzero( adpcm_enc_dh, adpcm_enc_delay_dhx, adpcm_enc_delay_bph );
403
404 /* uppol2: update second predictor coef aph2 and delay as ah2 */
405 /* calling params: ah1, ah2, ph, ph1, ph2 */
406 adpcm_enc_ah2 = adpcm_enc_uppol2( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, adpcm_enc_ph1, adpcm_enc_ph2 );
407
408 /* uppol1: update first predictor coef. aph2 and delay it as ah1 */
409 adpcm_enc_ah1 = adpcm_enc_uppol1( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, adpcm_enc_ph1 );
410
411 /* recons for higher sub-band */
412 adpcm_enc_yh = adpcm_enc_sh + adpcm_enc_dh;
413
414 /* done with higher sub-band encoder, now Delay for next time */
415 adpcm_enc_rh2 = adpcm_enc_rh1;
416 adpcm_enc_rh1 = adpcm_enc_yh;
417 adpcm_enc_ph2 = adpcm_enc_ph1;
418 adpcm_enc_ph1 = adpcm_enc_ph;
419
420 /* multiplex ih and il to get signals together */
421 return( adpcm_enc_il | (adpcm_enc_ih << 6) );
422}
423
424
425/* filtez - compute predictor output signal (zero section) */
426/* input: bpl1-6 and dlt1-6, output: szl */
427int adpcm_enc_filtez( int *bpl, int *dlt )
428{
429 int i;
430 long int zl;
431
432
433 zl = (long)(*bpl++) * (*dlt++);
434
435 /* MAX: 5 */
436 _Pragma("loopbound min 5 max 5")
437 for ( i = 1; i < 6; i++ ) {
438 zl += (long)(*bpl++) * (*dlt++);
439 }
440
441 return( (int)(zl >> 14) ); /* x2 here */
442}
443
444
445/* filtep - compute predictor output signal (pole section) */
446/* input rlt1-2 and al1-2, output spl */
447int adpcm_enc_filtep( int rlt1, int al1, int rlt2, int al2 )
448{
449 long int pl, pl2;
450
451
452 pl = 2 * rlt1;
453 pl = (long) al1 * pl;
454 pl2 = 2 * rlt2;
455 pl += (long) al2 * pl2;
456
457 return( (int)(pl >> 15) );
458}
459
460
461/* quantl - quantize the difference signal in the lower sub-band */
462int adpcm_enc_quantl( int el, int detl )
463{
464 int ril, mil;
465 long int wd, decis;
466
467
468 /* abs of difference signal */
469 wd = adpcm_enc_abs( el );
470
471 /* determine mil based on decision levels and detl gain */
472 /* MAX: 30 */
473 _Pragma("loopbound min 1 max 30")
474 for ( mil = 0; mil < 30; mil++ ) {
475 decis = (adpcm_enc_decis_levl[mil] * (long)detl) >> 15L;
476 if ( wd <= decis )
477 break;
478 }
479
480 /* if mil=30 then wd is less than all decision levels */
481 if ( el >= 0 )
482 ril = adpcm_enc_quant26bt_pos[mil];
483 else
484 ril = adpcm_enc_quant26bt_neg[mil];
485
486 return( ril );
487}
488
489
490/* invqxl is either invqbl or invqal depending on parameters passed */
491/* returns dlt, code table is pre-multiplied by 8 */
492
493/* int invqxl(int il,int detl,int *code_table,int mode) */
494/* { */
495/* long int dlt; */
496/* dlt = (long)detl*code_table[il >> (mode-1)]; */
497/* return((int)(dlt >> 15)); */
498/* } */
499
500/* logscl - update log quantizer scale factor in lower sub-band */
501/* note that nbl is passed and returned */
502int adpcm_enc_logscl( int il, int nbl )
503{
504 long int wd;
505
506
507 wd = ((long)nbl * 127L) >> 7L; /* leak factor 127/128 */
508 nbl = (int)wd + adpcm_enc_wl_code_table[il >> 2];
509
510 if ( nbl < 0 )
511 nbl = 0;
512 if ( nbl > 18432 )
513 nbl = 18432;
514
515 return( nbl );
516}
517
518
519/* scalel: compute quantizer scale factor in lower or upper sub-band*/
520int adpcm_enc_scalel( int nbl, int shift_constant )
521{
522 int wd1, wd2, wd3;
523
524
525 wd1 = (nbl >> 6) & 31;
526 wd2 = nbl >> 11;
527 wd3 = adpcm_enc_ilb_table[wd1] >> (shift_constant + 1 - wd2);
528
529 return( wd3 << 3 );
530}
531
532
533/* upzero - inputs: dlt, dlti[0-5], bli[0-5], outputs: updated bli[0-5] */
534/* also implements delay of bli and update of dlti from dlt */
535void adpcm_enc_upzero( int dlt, int *dlti, int *bli )
536{
537 int i, wd2, wd3;
538
539
540 /*if dlt is zero, then no sum into bli */
541 if ( dlt == 0 ) {
542 _Pragma("loopbound min 6 max 6")
543 for ( i = 0; i < 6; i++ ) {
544 bli[i] = (int)((255L * bli[i]) >> 8L); /* leak factor of 255/256 */
545 }
546
547 } else {
548 _Pragma("loopbound min 6 max 6")
549 for ( i = 0; i < 6; i++ ) {
550 if ( (long)dlt * dlti[i] >= 0 )
551 wd2 = 128;
552 else
553 wd2 = -128;
554
555 wd3 = (int)((255L * bli[i]) >> 8L); /* leak factor of 255/256 */
556 bli[i] = wd2 + wd3;
557 }
558
559 }
560
561 /* implement delay line for dlt */
562 dlti[5] = dlti[4];
563 dlti[4] = dlti[3];
564 dlti[3] = dlti[2];
565 dlti[1] = dlti[0];
566 dlti[0] = dlt;
567
568 return;
569}
570
571
572/* uppol2 - update second predictor coefficient (pole section) */
573/* inputs: al1, al2, plt, plt1, plt2. outputs: apl2 */
574int adpcm_enc_uppol2( int al1, int al2, int plt, int plt1, int plt2 )
575{
576 long int wd2, wd4;
577 int apl2;
578
579
580 wd2 = 4L * (long)al1;
581 if ( (long)plt * plt1 >= 0L )
582 wd2 = -wd2; /* check same sign */
583 wd2 = wd2 >> 7; /* gain of 1/128 */
584
585 if ( (long)plt * plt2 >= 0L ) {
586 wd4 = wd2 + 128; /* same sign case */
587 } else {
588 wd4 = wd2 - 128;
589 }
590 apl2 = wd4 + (127L*(long)al2 >> 7L); /* leak factor of 127/128 */
591
592 /* apl2 is limited to +-.75 */
593 if ( apl2 > 12288 )
594 apl2 = 12288;
595 if ( apl2 < -12288 )
596 apl2 = -12288;
597
598 return( apl2 );
599}
600
601
602/* uppol1 - update first predictor coefficient (pole section) */
603/* inputs: al1, apl2, plt, plt1. outputs: apl1 */
604int adpcm_enc_uppol1( int al1, int apl2, int plt, int plt1 )
605{
606 long int wd2;
607 int wd3, apl1;
608
609
610 wd2 = ((long)al1 * 255L) >> 8L; /* leak factor of 255/256 */
611 if ( (long)plt * plt1 >= 0L ) {
612 apl1 = (int)wd2 + 192; /* same sign case */
613 } else {
614 apl1 = (int)wd2 - 192;
615 }
616
617 /* note: wd3= .9375-.75 is always positive */
618 wd3 = 15360 - apl2; /* limit value */
619 if ( apl1 > wd3 )
620 apl1 = wd3;
621 if ( apl1 < -wd3 )
622 apl1 = -wd3;
623
624 return( apl1 );
625}
626
627
628/* INVQAH: inverse adaptive quantizer for the higher sub-band */
629/* returns dh, code table is pre-multiplied by 8 */
630/* int invqah(int ih,int deth) */
631/* { */
632/* long int rdh; */
633/* rdh = ((long)deth*qq2_code2_table[ih]) >> 15L ; */
634/* return((int)(rdh )); */
635/* } */
636
637
638/* logsch - update log quantizer scale factor in higher sub-band */
639/* note that nbh is passed and returned */
640int adpcm_enc_logsch( int ih, int nbh )
641{
642 int wd;
643
644
645 wd = ((long)nbh * 127L) >> 7L; /* leak factor 127/128 */
646 nbh = wd + adpcm_enc_wh_code_table[ih];
647
648 if ( nbh < 0 )
649 nbh = 0;
650 if ( nbh > 22528 )
651 nbh = 22528;
652
653 return( nbh );
654}
655
656
657/*
658 Initialization- and return-value-related functions
659*/
660
661/* clear all storage locations */
662
663void adpcm_enc_reset(void)
664{
665 int i;
666
667 adpcm_enc_detl = 32; /* reset to min scale factor */
668 adpcm_enc_deth = 8;
669 adpcm_enc_nbl = adpcm_enc_al1 = adpcm_enc_al2 = adpcm_enc_plt1 = adpcm_enc_plt2 = adpcm_enc_rlt1 = adpcm_enc_rlt2 = 0;
670 adpcm_enc_nbh = adpcm_enc_ah1 = adpcm_enc_ah2 = adpcm_enc_ph1 = adpcm_enc_ph2 = adpcm_enc_rh1 = adpcm_enc_rh2 = 0;
671
672 _Pragma("loopbound min 6 max 6")
673 for ( i = 0; i < 6; i++) {
674 adpcm_enc_delay_dltx[i] = 0;
675 adpcm_enc_delay_dhx[i] = 0;
676 }
677
678 _Pragma("loopbound min 6 max 6")
679 for ( i = 0; i < 6; i++ ) {
680 adpcm_enc_delay_bpl[i] = 0;
681 adpcm_enc_delay_bph[i] = 0;
682 }
683
684 _Pragma("loopbound min 23 max 23")
685 for ( i = 0; i < 23; i++ ) {
686 adpcm_enc_tqmf[i] = 0;
687 }
688
689 return;
690}
691
692
693void adpcm_enc_init(void)
694{
695 int i, j, f;
696 volatile int x = 0;
697
698 /* reset, initialize required memory */
699 adpcm_enc_reset();
700
701 /* read in amplitude and frequency for test data */
702 j = 10;
703 f = 2000;
704
705 /* 16 KHz sample rate */
706 /* XXmain_0, MAX: 2 */
707 /* Since the number of times we loop in my_sin depends on the argument we
708 add the fact: xxmain_0:[]: */
709 _Pragma("loopbound min 3 max 3")
710 for ( i = 0 ; i < SIZE ; i++) {
711 adpcm_enc_test_data[i] = (int) j * adpcm_enc_cos( f * PI * i );
712
713 /* avoid constant-propagation optimizations */
714 adpcm_enc_test_data[i] += x;
715 }
716}
717
718
719int adpcm_enc_return(void)
720{
721 int i;
722 int check_sum = 0;
723
724 for ( i = 0 ; i < IN_END ; i += 2 ) {
725 check_sum += adpcm_enc_compressed[i/2];
726 }
727
728 return check_sum != 385;
729}
730
731
732/*
733 Main functions
734*/
735
736void _Pragma( "entrypoint" ) adpcm_enc_main(void)
737{
738 int i;
739 /* MAX: 2 */
740 _Pragma("loopbound min 2 max 2")
741 for ( i = 0 ; i < IN_END ; i += 2 ) {
742 adpcm_enc_compressed[i/2] = adpcm_enc_encode( adpcm_enc_test_data[i], adpcm_enc_test_data[i+1] );
743 }
744
745}
746
747int main(int argc, char **argv)
748{
749 SET_UP
750 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
751 START_LOOP
752 adpcm_enc_init();
753 adpcm_enc_main();
754 STOP_LOOP
755 }
756 WRITE_TO_FILE
757 return adpcm_enc_return();
758}
diff --git a/baseline/source/ammunition/ChangeLog.txt b/baseline/source/ammunition/ChangeLog.txt
new file mode 100644
index 0000000..814ed86
--- /dev/null
+++ b/baseline/source/ammunition/ChangeLog.txt
@@ -0,0 +1,66 @@
1File: ammunition.c
2Original provenience: DINO programming language
3
42016-03-03:
5- Add generic TACLeBench header
6- Prefix global functions with benchmark name
7- Introduce volatile result variable for return statements
8- Split code into ammunition_init and ammunition_main
9- Fix compiler warnings "array subscript is of type 'char'":
10 char => unsigned char
11- Fix compiler warnings "'&&' within '||'":
12 Place additional parentheses
13- Remove usages and comments related to the macros
14 HAVE_MEMMOVE, NDEBUG, HAVE_MEMCMP
15- Remove comment related to unused NO_TEMPLATE macro
162016-05-02:
17- Change C++ style comments to ISO C90 compliant comments
18- Avoid mixing declarations and code: move declaration of variable writePos in
19 functions ammunition_sprintf_d and ammunition_sprintf_u
20- Change datatype in function ammunition_bits_test of iteration variables i and
21 j from int to unsigned int to avoid comparison between signed and unsigned
22 integer expressions
23- Add forward declarations to ammunition.c
24- Introduce variable ammunition_result
25- Parantheses around comparison in functions ammunition_isdigit and
26 ammunition_isspace
27- Remove usage of limits.h, move definitions of limits into separate file
28 ammunition_limits.h
29- Remove unconditional assignments of variable result to zero after each test in
30 functions ammunition_bits_test and ammunition_arithm_test
31- Remove unused functions unsigned_integer_maximum, integer_minimum,
32 integer_maximum, integer_remainder
33- Remove unused declaration of function default_arithmetic_overflow_reaction
34- Remove unused variables zero_constant_itself, zero_constant
35- Remove unused declarations of functions set_unsigned_integer_overflow_reaction
36 and set_integer_overflow_reaction
37- Remove block #ifndef MAX_INTEGER_OPERAND_SIZE, set definition of
38 MAX_INTEGER_OPERAND_SIZE to 128, since this is default
392016-05-10:
40- Integrate new version of arithm library from ammunition repository from
41 dino repository on github (commit: db9cfab042c332abb234ec8d72750103010981c1),
42 which hanles arithmetic shifts by negative numbers. This change now makes all
43 test cases in ammunition.c pass. Update headers unsigned int bits => int bits
44- Remove assert statements
45- Fix memcmp implementation: dereferencing pointer was missing
46- Add loop-bound annotation to memcmp
47- Fix strcmp implementation
48- Integrate working versions of memcpy and memset from pm benchmark
49- Update signature of ammunition_memcpy to original version:
50 void *memcpy(void *dest, const void *src, size_x n);
51- Move functions from libc into separate file, introduce header files
52 ammunition_limits.h, ammunition_stdio.h, ammunition_stdlib.h,
53 ammunition_string.h
54- Fix overflow in sprintf_d: change datatype of variable 'copyOfNumber' from int
55 to long, since the negative value of INT_MIN is undefined
56 2016-05-17:
57- Remove all static declarations of global functions
58- Rename variables 'digit_number' to digit_num to keep lines below 80 characters
59- Rename op1_digit_number to op1_digit_number and op1_digit_num in function
60 'ammunition_multiply_unsigned_integer_without_overflow_reaction'
61- Rename variable 'scaled_op1_digit_number' in function
62 'ammunition_divide_unsigned_integer_without_overflow_reaction'
63- Apply code formatting with astyle
64
652017-08-18:
66- Add explicit casts to silence g++ warnings.
diff --git a/baseline/source/ammunition/README b/baseline/source/ammunition/README
new file mode 100644
index 0000000..8caddf4
--- /dev/null
+++ b/baseline/source/ammunition/README
@@ -0,0 +1,86 @@
1This directory AMMUNITION contains reusable packages on C/C++:
2`allocate', `vlobject', `objstack', `hashtab', `commline', `ticker',
3`position', `errors', `bits', `arithm', `IEEE':
4 o allocate
5 Allocating and freeing memory with automatic fixing some
6 allocation errors.
7 o vlobject
8 Work with variable length objects (VLO). Any number of bytes
9 may be added to and removed from the end of VLO. If it is
10 needed the memory allocated for storing variable length object
11 may be expanded possibly with changing the object place. But
12 between any additions of the bytes (or tailoring) the object
13 place is not changed. To decrease number of changes of the
14 object place the memory being allocated for the object is
15 longer than the current object length.
16 o objstack
17 Work with stacks of objects (OS). Work with the object on the
18 stack top is analogous to one with a variable length object.
19 One motivation for the package is the problem of growing char
20 strings in symbol tables. Memory for OS is allocated by
21 segments. A segment may contain more one objects. The most
22 recently allocated segment contains object on the top of OS.
23 If there is not sufficient free memory for the top object than
24 new segment is created and the top object is transferred into
25 the new segment, i.e. there is not any memory reallocation.
26 Therefore the top object may change its address. But other
27 objects never change address.
28 o hashtab
29 Work with hash tables. The package permits to work
30 simultaneously with several expandable hash tables. Besides
31 insertion and search of elements the elements from the hash
32 tables can be also removed. The table element can be only a
33 pointer. The size of hash tables is not fixed. The hash
34 table will be automatically expanded when its occupancy will
35 became big.
36 o position
37 Work with source code positions. The package serves to
38 support information about source positions of compiled files
39 taking all included files into account.
40 o errors
41 Output of compiler messages. The package serves output
42 one-pass or multi-pass compiler messages of various modes
43 (errors, warnings, fatal, system errors and appended messages)
44 in Unix style or for traditional listing. The package also
45 permits adequate error reporting for included files.
46 o commline
47 Work with command line. The package implements features
48 analogous to ones of public domain function `getopt'. The
49 goal of the package creation is to use more readable language
50 of command line description and to use command line
51 description as help output of program.
52 o ticker
53 Simultaneous work with several tickers (timers).
54 o bits
55 Work with bit strings (copying, moving, setting, testing,
56 comparison).
57 o arithm
58 Implementing host machine-independently arbitrary precision
59 integer numbers arithmetic. The implementation of the package
60 functions are not sufficiently efficient in order to use for
61 run-time. The package functions are oriented to implement
62 constant-folding in compilers, cross-compilers.
63 o IEEE
64 Implementing host machine-independently IEEE floating point
65 arithmetic. The implementation of the package functions are
66 not sufficiently efficient in order to use for run-time. The
67 package functions are oriented to implement constant-folding
68 in compilers, cross-compilers.
69
70 There are files with corresponding names and extensions `.h'
71(interface file for C/C++), `.c' (implementation file on C), and
72`.cpp' (implementation file on C++).
73
74 To install AMMUNITION see file INSTALL in the current directory.
75
76 There are also shell scripts for testing the package with
77corresponding names and extension `.tst'. Documentation of the
78reusable packages is in files `ammunition.txt', `ammunition.dvi',
79`ammunition.ps', `ammunition.info*', `ammunition*.html',
80`ammunition*.rtf' for C and `ammunition++.txt', `ammunition++.dvi',
81`ammunition++.ps', `ammunition++.info*', `ammunition++*.html',
82`ammunition++*.rtf'.
83
84Please send bug reports and comments to vmakarov@fnmail.com
85
86Vladimir Makarov
diff --git a/baseline/source/ammunition/ammunition.c b/baseline/source/ammunition/ammunition.c
new file mode 100644
index 0000000..224babd
--- /dev/null
+++ b/baseline/source/ammunition/ammunition.c
@@ -0,0 +1,1185 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: ammunition
7
8 Author: Vladimir Makarov <vmakarov@gcc.gnu.org>
9
10 Function: Tests reusable packages bits and arith
11 bits: Work with bit strings (copying, moving, setting, testing, comparison).
12 arith: Implementing host machine-independently arbitrary precision integer
13 numbers arithmetic. The implementation of the package functions are not
14 sufficiently efficient in order to use for run-time. The package
15 functions are oriented to implement constant-folding in compilers,
16 cross-compilers.
17
18 Source: DINO programming language repository
19 https://github.com/dino-lang/dino/
20
21 Changes: no major functional changes
22
23 License: GPL 2 and LGPL 2
24
25*/
26
27#include "../extra.h"
28#include "bits.h"
29#include "arithm.h"
30#include "ammunition_stdlib.h"
31#include "ammunition_stdio.h"
32#include "ammunition_string.h"
33
34/*
35 Forward declaration of functions
36*/
37
38void ammunition_reset_str_bits( char *str, char *s );
39void ammunition_reset_str_arithm( char *str, char *s, char *d, char *e,
40 char *g );
41int ammunition_bits_test();
42int ammunition_arithm_test();
43void ammunition_init( void );
44int ammunition_return( void );
45void ammunition_main( void );
46//int main( void );
47
48
49/*
50 Forward declaration of global variables
51*/
52
53int ammunition_result;
54
55
56/*
57 Core functions
58*/
59
60void ammunition_reset_str_bits( char *str, char *s )
61{
62 int i;
63 _Pragma( "loopbound min 8 max 8" )
64 for ( i = 0; i < 8; i++ ) {
65 str[i] = 0;
66 s[i] = 0;
67 }
68}
69
70
71void ammunition_reset_str_arithm( char *str, char *s, char *d, char *e,
72 char *g )
73{
74 int i;
75 _Pragma( "loopbound min 20 max 20" )
76 for ( i = 0; i < 20; i++ ) {
77 str[i] = 0;
78 s[i] = 0;
79 }
80
81 _Pragma( "loopbound min 4 max 4" )
82 for ( i = 0; i < 4; i++ ) {
83 d[i] = 0;
84 e[i] = 0;
85 }
86
87 _Pragma( "loopbound min 6 max 6" )
88 for ( i = 0; i < 6; i++ )
89 g[i] = 0;
90}
91
92
93int ammunition_bits_test()
94{
95 char str[8];
96 char str1[8];
97
98 int result = 0;
99 unsigned int i, j;
100
101 /* Test 1 */
102 ammunition_reset_str_bits( str, str1 );
103
104 _Pragma( "loopbound min 64 max 64" )
105 for ( i = 0; i < sizeof ( str ) * CHAR_BIT; i++ ) {
106 if ( BIT ( str, i ) )
107 result = 1;
108 }
109
110 _Pragma( "loopbound min 64 max 64" )
111 for ( i = 0; i < sizeof ( str ) * CHAR_BIT; i++ ) {
112 SET_BIT ( str, i, 1 );
113 _Pragma( "loopbound min 64 max 64" )
114 for ( j = 0; j < sizeof ( str ) * CHAR_BIT; j++ )
115 if ( j <= i ) {
116 if ( BIT ( str, j ) == 0 )
117 result = 1;
118 } else
119 if ( BIT ( str, j ) )
120 result = 1;
121 }
122
123 /* Test 2 */
124 ammunition_reset_str_bits( str, str1 );
125
126 _Pragma( "loopbound min 64 max 64" )
127 for ( i = 0; i < sizeof ( str ) * CHAR_BIT; i++ )
128 if ( !ammunition_is_zero_bit_string (
129 str, i, ( sizeof ( str ) * CHAR_BIT - i ) / 2 + 1 ) )
130 result = 1;
131 ammunition_bit_string_set ( str, 13, 1, 35 );
132 _Pragma( "loopbound min 13 max 13" )
133 for ( i = 0; i < 13; i++ )
134 if ( !ammunition_is_zero_bit_string ( str, i, 13 - i ) )
135 result = 1;
136 _Pragma( "loopbound min 35 max 35" )
137 for ( i = 13; i < 48; i++ )
138 if ( ammunition_is_zero_bit_string ( str, i, 48 - i ) )
139 result = 1;
140 _Pragma( "loopbound min 16 max 16" )
141 for ( i = 48; i < sizeof ( str ) * CHAR_BIT; i++ )
142 if ( !ammunition_is_zero_bit_string ( str, i,
143 sizeof ( str ) * CHAR_BIT - i ) )
144 result = 1;
145
146 /* Test 3 */
147 ammunition_reset_str_bits( str, str1 );
148
149 _Pragma( "loopbound min 42 max 42" )
150 for ( i = 0; i + i / 2 + 1 < sizeof ( str ) * CHAR_BIT; i++ ) {
151 ammunition_bit_string_set ( str, i, 1, i / 2 + 1 );
152 if ( !ammunition_is_zero_bit_string ( str, 0, i - 1 ) )
153 result = 1;
154 if ( ammunition_is_zero_bit_string ( str, i, i / 2 + 1 ) )
155 result = 1;
156 if ( !ammunition_is_zero_bit_string (
157 str, i + i / 2 + 1, sizeof ( str ) * CHAR_BIT - ( i + i / 2 + 1 ) ) )
158 result = 1;
159 ammunition_bit_string_set ( str, 0, 0, sizeof ( str ) * CHAR_BIT );
160 }
161
162 /* Test 4 */
163 ammunition_reset_str_bits( str, str1 );
164
165 ammunition_bit_string_set ( str, 2, 1, 43 );
166 ammunition_bit_string_set ( str1, 2, 1, 40 );
167 _Pragma( "loopbound min 42 max 42" )
168 for ( i = 0; i < 42; i++ )
169 if ( ammunition_bit_string_comparison ( str, i, str1, i, 42 - i ) != 0 )
170 result = 1;
171 _Pragma( "loopbound min 43 max 43" )
172 for ( i = 0; i < 43; i++ )
173 if ( ammunition_bit_string_comparison ( str, i, str1, i,
174 sizeof ( str ) * CHAR_BIT - i )
175 <= 0 )
176 result = 1;
177 _Pragma( "loopbound min 43 max 43" )
178 for ( i = 0; i < 43; i++ )
179 if ( ammunition_bit_string_comparison ( str1, i, str, i,
180 sizeof ( str ) * CHAR_BIT - i )
181 >= 0 )
182 result = 1;
183
184 /* Test 5 */
185 ammunition_reset_str_bits( str, str1 );
186
187 ammunition_bit_string_set ( str, 2, 1, 43 );
188 _Pragma( "loopbound min 59 max 59" )
189 for ( i = 0; i + 5 < sizeof ( str ) * CHAR_BIT; i++ ) {
190 ammunition_bit_string_copy ( str1, i + 5, str, i,
191 sizeof ( str ) * CHAR_BIT - i - 5 );
192 if ( ammunition_bit_string_comparison (
193 str1, i + 5, str, i, sizeof ( str ) * CHAR_BIT - i - 5 ) != 0 )
194 result = 1;
195 }
196
197 /* Test 6 */
198 ammunition_reset_str_bits( str, str1 );
199
200 ammunition_bit_string_set ( str, 2, 1, 43 );
201 ammunition_bit_string_set ( str1, 2, 1, 43 );
202 _Pragma( "loopbound min 59 max 59" )
203 for ( i = 0; i + 5 < sizeof ( str ) * CHAR_BIT; i++ ) {
204 ammunition_bit_string_set ( str, 0, 0, sizeof ( str ) * CHAR_BIT );
205 ammunition_bit_string_set ( str, 2, 1, 43 );
206 ammunition_bit_string_move ( str, i + 5, str, i,
207 sizeof ( str ) * CHAR_BIT - i - 5 );
208 if ( ammunition_bit_string_comparison (
209 str, i + 5, str1, i, sizeof ( str ) * CHAR_BIT - i - 5 ) != 0 )
210 result = 1;
211 }
212
213 /* Test 7 */
214 ammunition_reset_str_bits( str, str1 );
215
216 ammunition_bit_string_set ( str, 2, 1, 43 );
217 ammunition_bit_string_set ( str1, 2, 1, 43 );
218 _Pragma( "loopbound min 59 max 59" )
219 for ( i = 0; i + 5 < sizeof ( str ) * CHAR_BIT; i++ ) {
220 ammunition_bit_string_set ( str, 0, 0, sizeof ( str ) * CHAR_BIT );
221 ammunition_bit_string_set ( str, 2, 1, 43 );
222 ammunition_bit_string_move ( str, i, str, i + 5,
223 sizeof ( str ) * CHAR_BIT - i - 5 );
224 if ( ammunition_bit_string_comparison (
225 str, i, str1, i + 5, sizeof ( str ) * CHAR_BIT - i - 5 ) != 0 )
226 result = 1;
227 }
228
229 return result;
230}
231
232
233int ammunition_arithm_test()
234{
235 int result = 0;
236
237 /* Test 1 */
238 int i;
239 char str [20], s[20], d[4], e[4], g[6];
240
241 ammunition_integer_from_string ( 4, "-2147483649", d );
242 if ( !ammunition_overflow_bit )
243 result = 1;
244 ammunition_sprintf_d( str, INT_MIN );
245 ammunition_integer_from_string ( 4, str, d );
246 if ( ammunition_overflow_bit )
247 result = 1;
248 ammunition_integer_to_string( 4, d, s );
249 if ( ammunition_strcmp ( s, str ) != 0 )
250 result = 1;
251 ammunition_integer_from_string ( 4, "2147483648", d );
252 if ( !ammunition_overflow_bit )
253 result = 1;
254 ammunition_sprintf_d( str, INT_MAX );
255 ammunition_integer_from_string ( 4, str, d );
256 if ( ammunition_overflow_bit )
257 result = 1;
258 ammunition_integer_to_string( 4, d, s );
259 if ( ammunition_strcmp ( s, str ) != 0 )
260 result = 1;
261 _Pragma( "loopbound min 4000 max 4000" )
262 for ( i = -2000; i < 2000 ; i++ ) {
263 ammunition_sprintf_d( str, i );
264 ammunition_integer_from_string ( 4, str, d );
265 if ( ammunition_overflow_bit )
266 result = 1;
267 ammunition_integer_to_string( 4, d, s );
268 if ( ammunition_strcmp ( s, str ) != 0 )
269 result = 1;
270 }
271
272 /* Test 2 */
273 ammunition_reset_str_arithm( str, s, d, e, g );
274
275 ammunition_unsigned_integer_from_string ( 4, "4294967296", d );
276 if ( !ammunition_overflow_bit )
277 result = 1;
278 ammunition_sprintf_u( str, UINT_MAX );
279 ammunition_unsigned_integer_from_string ( 4, str, d );
280 if ( ammunition_overflow_bit )
281 result = 1;
282 ammunition_unsigned_integer_to_string ( 4, d, s );
283 if ( ammunition_strcmp ( s, str ) != 0 )
284 result = 1;
285 _Pragma( "loopbound min 4000 max 4000" )
286 for ( i = 0; i < 4000 ; i++ ) {
287 ammunition_sprintf_u( str, i );
288 ammunition_unsigned_integer_from_string ( 4, str, d );
289 if ( ammunition_overflow_bit )
290 result = 1;
291 ammunition_unsigned_integer_to_string ( 4, d, s );
292 if ( ammunition_strcmp ( s, str ) != 0 )
293 result = 1;
294 }
295
296 /* Test 3 */
297 ammunition_reset_str_arithm( str, s, d, e, g );
298
299 ammunition_sprintf_d( str, INT_MAX );
300 ammunition_integer_from_string ( 4, str, d );
301 ammunition_integer_from_string ( 4, "1", e );
302 ammunition_add_integer ( 4, d, e, d );
303 if ( !ammunition_overflow_bit )
304 result = 1;
305 ammunition_sprintf_d( str, INT_MAX - 4 );
306 ammunition_integer_from_string ( 4, str, d );
307 ammunition_sprintf_d( str, 4 );
308 ammunition_integer_from_string ( 4, str, e );
309 ammunition_add_integer ( 4, d, e, d );
310 if ( ammunition_overflow_bit )
311 result = 1;
312 ammunition_integer_to_string( 4, d, s );
313 ammunition_sprintf_d( str, INT_MAX );
314 if ( ammunition_strcmp ( s, str ) != 0 )
315 result = 1;
316 _Pragma( "loopbound min 4000 max 4000" )
317 for ( i = -2000; i < 2000 ; i++ ) {
318 ammunition_sprintf_d( str, i );
319 ammunition_integer_from_string ( 4, str, d );
320 ammunition_sprintf_d( str, i + 1 );
321 ammunition_integer_from_string ( 4, str, e );
322 ammunition_add_integer ( 4, d, e, d );
323 if ( ammunition_overflow_bit )
324 result = 1;
325 ammunition_integer_to_string( 4, d, s );
326 if ( ammunition_atoi ( s ) != i + i + 1 )
327 result = 1;
328 }
329
330 /* Test 4 */
331 ammunition_reset_str_arithm( str, s, d, e, g );
332
333 ammunition_sprintf_u( str, UINT_MAX );
334 ammunition_unsigned_integer_from_string ( 4, str, d );
335 ammunition_unsigned_integer_from_string ( 4, "1", e );
336 ammunition_add_unsigned_integer ( 4, d, e, d );
337 if ( !ammunition_overflow_bit )
338 result = 1;
339 ammunition_sprintf_u( str, UINT_MAX - 4 );
340 ammunition_unsigned_integer_from_string ( 4, str, d );
341 ammunition_sprintf_u( str, 4 );
342 ammunition_unsigned_integer_from_string ( 4, str, e );
343 ammunition_add_unsigned_integer ( 4, d, e, d );
344 if ( ammunition_overflow_bit )
345 result = 1;
346 ammunition_unsigned_integer_to_string ( 4, d, s );
347 ammunition_sprintf_u( str, UINT_MAX );
348 if ( ammunition_strcmp ( s, str ) != 0 )
349 result = 1;
350 _Pragma( "loopbound min 4000 max 4000" )
351 for ( i = 0; i < 4000 ; i++ ) {
352 ammunition_sprintf_u( str, i );
353 ammunition_unsigned_integer_from_string ( 4, str, d );
354 ammunition_sprintf_u( str, i + 1 );
355 ammunition_unsigned_integer_from_string ( 4, str, e );
356 ammunition_add_unsigned_integer ( 4, d, e, d );
357 if ( ammunition_overflow_bit )
358 result = 1;
359 ammunition_unsigned_integer_to_string ( 4, d, s );
360 if ( ammunition_atoi ( s ) != i + i + 1 )
361 result = 1;
362 }
363
364 /* Test 5 */
365 ammunition_reset_str_arithm( str, s, d, e, g );
366
367 ammunition_sprintf_d( str, INT_MIN );
368 ammunition_integer_from_string ( 4, str, d );
369 ammunition_integer_from_string ( 4, "1", e );
370 ammunition_subtract_integer ( 4, d, e, d );
371 if ( !ammunition_overflow_bit )
372 result = 1;
373 ammunition_sprintf_d( str, INT_MIN + 4 );
374 ammunition_integer_from_string ( 4, str, d );
375 ammunition_sprintf_d( str, 4 );
376 ammunition_integer_from_string ( 4, str, e );
377 ammunition_subtract_integer ( 4, d, e, d );
378 if ( ammunition_overflow_bit )
379 result = 1;
380 ammunition_integer_to_string( 4, d, s );
381 ammunition_sprintf_d( str, INT_MIN );
382 if ( ammunition_strcmp ( s, str ) != 0 )
383 result = 1;
384 _Pragma( "loopbound min 4000 max 4000" )
385 for ( i = -2000; i < 2000 ; i++ ) {
386 ammunition_sprintf_d( str, i );
387 ammunition_integer_from_string ( 4, str, d );
388 ammunition_sprintf_d( str, 10 - i );
389 ammunition_integer_from_string ( 4, str, e );
390 ammunition_subtract_integer ( 4, d, e, d );
391 if ( ammunition_overflow_bit )
392 result = 1;
393 ammunition_integer_to_string( 4, d, s );
394 if ( ammunition_atoi ( s ) != i + i - 10 )
395 result = 1;
396 }
397
398 /* Test 6 */
399 ammunition_reset_str_arithm( str, s, d, e, g );
400
401 ammunition_sprintf_u( str, UINT_MAX - 2 );
402 ammunition_unsigned_integer_from_string ( 4, str, d );
403 ammunition_sprintf_u( str, UINT_MAX - 1 );
404 ammunition_unsigned_integer_from_string ( 4, str, e );
405 ammunition_subtract_unsigned_integer ( 4, d, e, d );
406 if ( !ammunition_overflow_bit )
407 result = 1;
408 ammunition_sprintf_u( str, UINT_MAX );
409 ammunition_unsigned_integer_from_string ( 4, str, d );
410 ammunition_subtract_unsigned_integer ( 4, d, d, d );
411 if ( ammunition_overflow_bit )
412 result = 1;
413 ammunition_unsigned_integer_to_string ( 4, d, s );
414 if ( ammunition_strcmp ( s, "0" ) != 0 )
415 result = 1;
416 _Pragma( "loopbound min 4000 max 4000" )
417 for ( i = 0; i < 4000 ; i++ ) {
418 ammunition_sprintf_u( str, i );
419 ammunition_unsigned_integer_from_string ( 4, str, d );
420 ammunition_sprintf_u( str, i / 2 );
421 ammunition_unsigned_integer_from_string ( 4, str, e );
422 ammunition_subtract_unsigned_integer ( 4, d, e, d );
423 if ( ammunition_overflow_bit )
424 result = 1;
425 ammunition_unsigned_integer_to_string ( 4, d, s );
426 if ( ammunition_atoi ( s ) != i - i / 2 )
427 result = 1;
428 }
429
430 /* Test 7 */
431 ammunition_reset_str_arithm( str, s, d, e, g );
432
433 ammunition_sprintf_d( str, INT_MAX / 2 + 1 );
434 ammunition_integer_from_string ( 4, str, d );
435 ammunition_integer_from_string ( 4, "2", e );
436 ammunition_multiply_integer ( 4, d, e, d );
437 if ( !ammunition_overflow_bit )
438 result = 1;
439 ammunition_sprintf_d( str, INT_MIN / 2 - 1 );
440 ammunition_integer_from_string ( 4, str, d );
441 ammunition_integer_from_string ( 4, "2", e );
442 ammunition_multiply_integer ( 4, d, e, d );
443 if ( !ammunition_overflow_bit )
444 result = 1;
445 ammunition_sprintf_d( str, INT_MAX / 3 );
446 ammunition_integer_from_string ( 4, str, d );
447 ammunition_sprintf_d( str, 3 );
448 ammunition_integer_from_string ( 4, str, e );
449 ammunition_multiply_integer ( 4, d, e, d );
450 if ( ammunition_overflow_bit )
451 result = 1;
452 ammunition_integer_to_string( 4, d, s );
453 ammunition_sprintf_d( str, ( INT_MAX / 3 ) * 3 );
454 if ( ammunition_strcmp ( s, str ) != 0 )
455 result = 1;
456 ammunition_sprintf_d( str, INT_MIN / 2 );
457 ammunition_integer_from_string ( 4, str, d );
458 ammunition_sprintf_d( str, 2 );
459 ammunition_integer_from_string ( 4, str, e );
460 ammunition_multiply_integer ( 4, d, e, d );
461 if ( ammunition_overflow_bit )
462 result = 1;
463 ammunition_integer_to_string( 4, d, s );
464 ammunition_sprintf_d( str, ( INT_MIN / 2 ) * 2 );
465 if ( ammunition_strcmp ( s, str ) != 0 )
466 result = 1;
467 _Pragma( "loopbound min 4000 max 4000" )
468 for ( i = -2000; i < 2000 ; i++ ) {
469 ammunition_sprintf_d( str, i );
470 ammunition_integer_from_string ( 4, str, d );
471 ammunition_sprintf_d( str, i + 1000 );
472 ammunition_integer_from_string ( 4, str, e );
473 ammunition_multiply_integer ( 4, d, e, d );
474 if ( ammunition_overflow_bit )
475 result = 1;
476 ammunition_integer_to_string( 4, d, s );
477 if ( ammunition_atoi ( s ) != i * ( i + 1000 ) )
478 result = 1;
479 }
480
481 /* Test 8 */
482 ammunition_reset_str_arithm( str, s, d, e, g );
483
484 ammunition_sprintf_u( str, UINT_MAX / 5 + 1 );
485 ammunition_unsigned_integer_from_string ( 4, str, d );
486 ammunition_sprintf_u( str, 5 );
487 ammunition_unsigned_integer_from_string ( 4, str, e );
488 ammunition_multiply_unsigned_integer ( 4, d, e, d );
489 if ( !ammunition_overflow_bit )
490 result = 1;
491 ammunition_sprintf_u( str, UINT_MAX / 2 );
492 ammunition_unsigned_integer_from_string ( 4, str, d );
493 ammunition_sprintf_u( str, 2 );
494 ammunition_unsigned_integer_from_string ( 4, str, e );
495 ammunition_multiply_unsigned_integer ( 4, d, e, d );
496 if ( ammunition_overflow_bit )
497 result = 1;
498 ammunition_unsigned_integer_to_string ( 4, d, s );
499 ammunition_sprintf_u( str, ( UINT_MAX / 2 ) * 2 );
500 if ( ammunition_strcmp ( s, str ) != 0 )
501 result = 1;
502 _Pragma( "loopbound min 4000 max 4000" )
503 for ( i = 0; i < 4000 ; i++ ) {
504 ammunition_sprintf_u( str, i );
505 ammunition_unsigned_integer_from_string ( 4, str, d );
506 ammunition_sprintf_u( str, i / 2 );
507 ammunition_unsigned_integer_from_string ( 4, str, e );
508 ammunition_multiply_unsigned_integer ( 4, d, e, d );
509 if ( ammunition_overflow_bit )
510 result = 1;
511 ammunition_unsigned_integer_to_string ( 4, d, s );
512 if ( ammunition_atoi ( s ) != i * ( i / 2 ) )
513 result = 1;
514 }
515
516 /* Test 9 */
517 ammunition_reset_str_arithm( str, s, d, e, g );
518
519 ammunition_integer_from_string ( 4, "10", d );
520 ammunition_integer_from_string ( 4, "0", e );
521 ammunition_divide_integer ( 4, d, e, d );
522 if ( !ammunition_overflow_bit )
523 result = 1;
524 _Pragma( "loopbound min 4000 max 4000" )
525 for ( i = -2000; i < 2000 ; i++ ) {
526 ammunition_sprintf_d( str, i );
527 ammunition_integer_from_string ( 4, str, d );
528 ammunition_sprintf_d( str, ( i < 0 ? - i / 20 + 1 : - i / 20 - 1 ) );
529 ammunition_integer_from_string ( 4, str, e );
530 ammunition_divide_integer ( 4, d, e, d );
531 if ( ammunition_overflow_bit )
532 result = 1;
533 ammunition_integer_to_string( 4, d, s );
534 if ( ammunition_atoi ( s ) != i / ( i < 0 ? - i / 20 + 1 : - i / 20 - 1 ) )
535 result = 1;
536 ammunition_sprintf_d( str, i );
537 ammunition_integer_from_string ( 4, str, d );
538 ammunition_divide_integer ( 4, d, e, e );
539 if ( ammunition_overflow_bit )
540 result = 1;
541 ammunition_integer_to_string( 4, e, s );
542 if ( ammunition_atoi ( s ) != i / ( i < 0 ? - i / 20 + 1 : - i / 20 - 1 ) )
543 result = 1;
544 }
545
546 /* Test 10 */
547 ammunition_reset_str_arithm( str, s, d, e, g );
548
549 ammunition_unsigned_integer_from_string ( 4, "10", d );
550 ammunition_unsigned_integer_from_string ( 4, "0", e );
551 ammunition_divide_unsigned_integer ( 4, d, e, d );
552 if ( !ammunition_overflow_bit )
553 result = 1;
554 _Pragma( "loopbound min 4000 max 4000" )
555 for ( i = 0; i < 4000 ; i++ ) {
556 ammunition_sprintf_u( str, i );
557 ammunition_unsigned_integer_from_string ( 4, str, d );
558 ammunition_sprintf_u( str, i / 20 + 1 );
559 ammunition_unsigned_integer_from_string ( 4, str, e );
560 ammunition_divide_unsigned_integer ( 4, d, e, d );
561 if ( ammunition_overflow_bit )
562 result = 1;
563 ammunition_unsigned_integer_to_string ( 4, d, s );
564 if ( ammunition_atoi ( s ) != i / ( i / 20 + 1 ) )
565 result = 1;
566 }
567
568 /* Test 11 */
569 ammunition_reset_str_arithm( str, s, d, e, g );
570
571 ammunition_unsigned_integer_from_string ( 4, "10", d );
572 ammunition_unsigned_integer_from_string ( 4, "0", e );
573 ammunition_unsigned_integer_remainder ( 4, d, e, d );
574 if ( !ammunition_overflow_bit )
575 result = 1;
576 _Pragma( "loopbound min 4000 max 4000" )
577 for ( i = 0; i < 4000 ; i++ ) {
578 ammunition_sprintf_u( str, i );
579 ammunition_unsigned_integer_from_string ( 4, str, d );
580 ammunition_sprintf_u( str, i / 20 + 1 );
581 ammunition_unsigned_integer_from_string ( 4, str, e );
582 ammunition_unsigned_integer_remainder ( 4, d, e, d );
583 if ( ammunition_overflow_bit )
584 result = 1;
585 ammunition_unsigned_integer_to_string ( 4, d, s );
586 if ( ammunition_atoi ( s ) != i % ( i / 20 + 1 ) )
587 result = 1;
588 }
589
590 /* Test 12 */
591 ammunition_reset_str_arithm( str, s, d, e, g );
592
593 ammunition_unsigned_integer_from_string ( 4, "1348", d );
594 ammunition_unsigned_integer_shift_right ( 4, d, 0, d );
595 ammunition_unsigned_integer_to_string ( 4, d, s );
596 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
597 result = 1;
598 ammunition_unsigned_integer_from_string ( 4, "1348", d );
599 ammunition_unsigned_integer_shift_right ( 4, d, 32, d );
600 ammunition_unsigned_integer_to_string ( 4, d, s );
601 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "0" ) != 0 )
602 result = 1;
603 ammunition_unsigned_integer_from_string ( 4, "1348", d );
604 ammunition_unsigned_integer_shift_right ( 4, d, 8, d );
605 ammunition_unsigned_integer_to_string ( 4, d, s );
606 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "5" ) != 0 )
607 result = 1;
608 ammunition_unsigned_integer_from_string ( 4, "134890", d );
609 ammunition_unsigned_integer_shift_right ( 4, d, 13, d );
610 ammunition_unsigned_integer_to_string ( 4, d, s );
611 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
612 result = 1;
613 ammunition_unsigned_integer_from_string ( 4, "134890", d );
614 ammunition_unsigned_integer_shift_left ( 4, d, -13, d );
615 ammunition_unsigned_integer_to_string ( 4, d, s );
616 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
617 result = 1;
618
619 /* Test 13 */
620 ammunition_reset_str_arithm( str, s, d, e, g );
621
622 ammunition_integer_from_string ( 4, "1348", d );
623 ammunition_integer_shift_right ( 4, d, 0, d );
624 ammunition_integer_to_string( 4, d, s );
625 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
626 result = 1;
627 ammunition_integer_from_string ( 4, "1348", d );
628 ammunition_integer_shift_right ( 4, d, 32, d );
629 ammunition_integer_to_string( 4, d, s );
630 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "0" ) != 0 )
631 result = 1;
632 ammunition_integer_from_string ( 4, "1348", d );
633 ammunition_integer_shift_right ( 4, d, 8, d );
634 ammunition_integer_to_string( 4, d, s );
635 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "5" ) != 0 )
636 result = 1;
637 ammunition_integer_from_string ( 4, "134890", d );
638 ammunition_integer_shift_right ( 4, d, 13, d );
639 ammunition_integer_to_string( 4, d, s );
640 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
641 result = 1;
642 ammunition_integer_from_string ( 4, "134890", d );
643 ammunition_integer_shift_left ( 4, d, -13, d );
644 ammunition_integer_to_string( 4, d, s );
645 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "16" ) != 0 )
646 result = 1;
647 ammunition_integer_from_string ( 4, "-1348", d );
648 ammunition_integer_shift_right ( 4, d, 0, d );
649 ammunition_integer_to_string( 4, d, s );
650 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1348" ) != 0 )
651 result = 1;
652 ammunition_integer_from_string ( 4, "-1348", d );
653 ammunition_integer_shift_right ( 4, d, 32, d );
654 ammunition_integer_to_string( 4, d, s );
655 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-1" ) != 0 )
656 result = 1;
657 ammunition_integer_from_string ( 4, "-1348", d );
658 ammunition_integer_shift_right ( 4, d, 8, d );
659 ammunition_integer_to_string( 4, d, s );
660 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-6" ) != 0 )
661 result = 1;
662 ammunition_integer_from_string ( 4, "-134890", d );
663 ammunition_integer_shift_right ( 4, d, 13, d );
664 ammunition_integer_to_string( 4, d, s );
665 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-17" ) != 0 )
666 result = 1;
667 ammunition_integer_from_string ( 4, "-134890", d );
668 ammunition_integer_shift_left ( 4, d, -13, d );
669 ammunition_integer_to_string( 4, d, s );
670 if ( !ammunition_overflow_bit || ammunition_strcmp ( s, "-17" ) != 0 )
671 result = 1;
672
673 /* Test 14 */
674 ammunition_reset_str_arithm( str, s, d, e, g );
675
676 ammunition_unsigned_integer_from_string ( 4, "1348", d );
677 ammunition_unsigned_integer_shift_left ( 4, d, 0, d );
678 ammunition_unsigned_integer_to_string ( 4, d, s );
679 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
680 result = 1;
681 ammunition_unsigned_integer_from_string ( 4, "1348", d );
682 ammunition_unsigned_integer_shift_left ( 4, d, 22, d );
683 if ( !ammunition_overflow_bit )
684 result = 1;
685 ammunition_unsigned_integer_from_string ( 4, "1348", d );
686 ammunition_unsigned_integer_shift_left ( 4, d, 8, d );
687 ammunition_unsigned_integer_to_string ( 4, d, s );
688 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "345088" ) != 0 )
689 result = 1;
690 ammunition_unsigned_integer_from_string ( 4, "134890", d );
691 ammunition_unsigned_integer_shift_left ( 4, d, 13, d );
692 ammunition_unsigned_integer_to_string ( 4, d, s );
693 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
694 result = 1;
695 ammunition_unsigned_integer_from_string ( 4, "134890", d );
696 ammunition_unsigned_integer_shift_right ( 4, d, -13, d );
697 ammunition_unsigned_integer_to_string ( 4, d, s );
698 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
699 result = 1;
700
701 /* Test 15 */
702 ammunition_reset_str_arithm( str, s, d, e, g );
703
704 ammunition_integer_from_string ( 4, "1348", d );
705 ammunition_integer_shift_left ( 4, d, 0, d );
706 ammunition_integer_to_string( 4, d, s );
707 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1348" ) != 0 )
708 result = 1;
709 ammunition_integer_from_string ( 4, "1348", d );
710 ammunition_integer_shift_left ( 4, d, 21, d );
711 if ( !ammunition_overflow_bit )
712 result = 1;
713 ammunition_integer_from_string ( 4, "1348", d );
714 ammunition_integer_shift_left ( 4, d, 8, d );
715 ammunition_integer_to_string( 4, d, s );
716 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "345088" ) != 0 )
717 result = 1;
718 ammunition_integer_from_string ( 4, "134890", d );
719 ammunition_integer_shift_left ( 4, d, 13, d );
720 ammunition_integer_to_string( 4, d, s );
721 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
722 result = 1;
723 ammunition_integer_from_string ( 4, "134890", d );
724 ammunition_integer_shift_right ( 4, d, -13, d );
725 ammunition_integer_to_string( 4, d, s );
726 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "1105018880" ) != 0 )
727 result = 1;
728 ammunition_integer_from_string ( 4, "-1348", d );
729 ammunition_integer_shift_left ( 4, d, 0, d );
730 ammunition_integer_to_string( 4, d, s );
731 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1348" ) != 0 )
732 result = 1;
733 ammunition_integer_from_string ( 4, "-1348", d );
734 ammunition_integer_shift_left ( 4, d, 21, d );
735 if ( !ammunition_overflow_bit )
736 result = 1;
737 ammunition_integer_from_string ( 4, "-1348", d );
738 ammunition_integer_shift_left ( 4, d, 8, d );
739 ammunition_integer_to_string( 4, d, s );
740 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-345088" ) != 0 )
741 result = 1;
742 ammunition_integer_from_string ( 4, "-134890", d );
743 ammunition_integer_shift_left ( 4, d, 13, d );
744 ammunition_integer_to_string( 4, d, s );
745 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1105018880" ) != 0 )
746 result = 1;
747 ammunition_integer_from_string ( 4, "-134890", d );
748 ammunition_integer_shift_right ( 4, d, -13, d );
749 ammunition_integer_to_string( 4, d, s );
750 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-1105018880" ) != 0 )
751 result = 1;
752
753 /* Test 16 */
754 ammunition_reset_str_arithm( str, s, d, e, g );
755
756 ammunition_integer_from_string ( 4, "-10", d );
757 ammunition_integer_from_string ( 4, "1348", e );
758 if ( ammunition_eq_integer ( 4, d, e ) )
759 result = 1;
760 ammunition_integer_from_string ( 4, "-1348", d );
761 ammunition_integer_from_string ( 4, "-1348", e );
762 if ( !ammunition_eq_integer ( 4, d, e ) )
763 result = 1;
764
765 /* Test 17 */
766 ammunition_reset_str_arithm( str, s, d, e, g );
767
768 ammunition_unsigned_integer_from_string ( 4, "10", d );
769 ammunition_unsigned_integer_from_string ( 4, "1348", e );
770 if ( ammunition_eq_unsigned_integer ( 4, d, e ) )
771 result = 1;
772 ammunition_unsigned_integer_from_string ( 4, "1348", d );
773 ammunition_unsigned_integer_from_string ( 4, "1348", e );
774 if ( !ammunition_eq_unsigned_integer ( 4, d, e ) )
775 result = 1;
776
777 /* Test 18 */
778 ammunition_reset_str_arithm( str, s, d, e, g );
779
780 ammunition_integer_from_string ( 4, "-10", d );
781 ammunition_integer_from_string ( 4, "1348", e );
782 if ( !ammunition_ne_integer ( 4, d, e ) )
783 result = 1;
784 ammunition_integer_from_string ( 4, "-1348", d );
785 ammunition_integer_from_string ( 4, "-1348", e );
786 if ( ammunition_ne_integer ( 4, d, e ) )
787 result = 1;
788
789 /* Test 19 */
790 ammunition_reset_str_arithm( str, s, d, e, g );
791
792 ammunition_unsigned_integer_from_string ( 4, "10", d );
793 ammunition_unsigned_integer_from_string ( 4, "1348", e );
794 if ( !ammunition_ne_unsigned_integer ( 4, d, e ) )
795 result = 1;
796 ammunition_unsigned_integer_from_string ( 4, "1348", d );
797 ammunition_unsigned_integer_from_string ( 4, "1348", e );
798 if ( ammunition_ne_unsigned_integer ( 4, d, e ) )
799 result = 1;
800
801 /* Test 20 */
802 ammunition_reset_str_arithm( str, s, d, e, g );
803
804 ammunition_integer_from_string ( 4, "-10", d );
805 ammunition_integer_from_string ( 4, "1348", e );
806 if ( ammunition_gt_integer ( 4, d, e ) )
807 result = 1;
808 ammunition_integer_from_string ( 4, "-1348", d );
809 ammunition_integer_from_string ( 4, "-1348", e );
810 if ( ammunition_gt_integer ( 4, d, e ) )
811 result = 1;
812 ammunition_integer_from_string ( 4, "-1000000", d );
813 ammunition_integer_from_string ( 4, "-1348", e );
814 if ( ammunition_gt_integer ( 4, d, e ) )
815 result = 1;
816 ammunition_integer_from_string ( 4, "1000000", d );
817 ammunition_integer_from_string ( 4, "1348", e );
818 if ( !ammunition_gt_integer ( 4, d, e ) )
819 result = 1;
820
821 /* Test 21 */
822 ammunition_reset_str_arithm( str, s, d, e, g );
823
824 ammunition_unsigned_integer_from_string ( 4, "10", d );
825 ammunition_unsigned_integer_from_string ( 4, "1348", e );
826 if ( ammunition_gt_unsigned_integer ( 4, d, e ) )
827 result = 1;
828 ammunition_unsigned_integer_from_string ( 4, "1348", d );
829 ammunition_unsigned_integer_from_string ( 4, "1348", e );
830 if ( ammunition_gt_unsigned_integer ( 4, d, e ) )
831 result = 1;
832 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
833 ammunition_unsigned_integer_from_string ( 4, "1348", e );
834 if ( !ammunition_gt_unsigned_integer ( 4, d, e ) )
835 result = 1;
836
837 /* Test 22 */
838 ammunition_reset_str_arithm( str, s, d, e, g );
839
840 ammunition_integer_from_string ( 4, "-10", d );
841 ammunition_integer_from_string ( 4, "1348", e );
842 if ( !ammunition_lt_integer ( 4, d, e ) )
843 result = 1;
844 ammunition_integer_from_string ( 4, "-1348", d );
845 ammunition_integer_from_string ( 4, "-1348", e );
846 if ( ammunition_lt_integer ( 4, d, e ) )
847 result = 1;
848 ammunition_integer_from_string ( 4, "-1000000", d );
849 ammunition_integer_from_string ( 4, "-1348", e );
850 if ( !ammunition_lt_integer ( 4, d, e ) )
851 result = 1;
852 ammunition_integer_from_string ( 4, "1000000", d );
853 ammunition_integer_from_string ( 4, "1348", e );
854 if ( ammunition_lt_integer ( 4, d, e ) )
855 result = 1;
856
857 /* Test 23 */
858 ammunition_reset_str_arithm( str, s, d, e, g );
859
860 ammunition_unsigned_integer_from_string ( 4, "10", d );
861 ammunition_unsigned_integer_from_string ( 4, "1348", e );
862 if ( !ammunition_lt_unsigned_integer ( 4, d, e ) )
863 result = 1;
864 ammunition_unsigned_integer_from_string ( 4, "1348", d );
865 ammunition_unsigned_integer_from_string ( 4, "1348", e );
866 if ( ammunition_lt_unsigned_integer ( 4, d, e ) )
867 result = 1;
868 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
869 ammunition_unsigned_integer_from_string ( 4, "1348", e );
870 if ( ammunition_lt_unsigned_integer ( 4, d, e ) )
871 result = 1;
872
873 /* Test 24 */
874 ammunition_reset_str_arithm( str, s, d, e, g );
875
876 ammunition_integer_from_string ( 4, "-10", d );
877 ammunition_integer_from_string ( 4, "1348", e );
878 if ( ammunition_ge_integer ( 4, d, e ) )
879 result = 1;
880 ammunition_integer_from_string ( 4, "-1348", d );
881 ammunition_integer_from_string ( 4, "-1348", e );
882 if ( !ammunition_ge_integer ( 4, d, e ) )
883 result = 1;
884 ammunition_integer_from_string ( 4, "-1000000", d );
885 ammunition_integer_from_string ( 4, "-1348", e );
886 if ( ammunition_ge_integer ( 4, d, e ) )
887 result = 1;
888 ammunition_integer_from_string ( 4, "1000000", d );
889 ammunition_integer_from_string ( 4, "1348", e );
890 if ( !ammunition_ge_integer ( 4, d, e ) )
891 result = 1;
892
893 /* Test 25 */
894 ammunition_reset_str_arithm( str, s, d, e, g );
895
896 ammunition_unsigned_integer_from_string ( 4, "10", d );
897 ammunition_unsigned_integer_from_string ( 4, "1348", e );
898 if ( ammunition_ge_unsigned_integer ( 4, d, e ) )
899 result = 1;
900 ammunition_unsigned_integer_from_string ( 4, "1348", d );
901 ammunition_unsigned_integer_from_string ( 4, "1348", e );
902 if ( !ammunition_ge_unsigned_integer ( 4, d, e ) )
903 result = 1;
904 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
905 ammunition_unsigned_integer_from_string ( 4, "1348", e );
906 if ( !ammunition_ge_unsigned_integer ( 4, d, e ) )
907 result = 1;
908
909 /* Test 26 */
910 ammunition_reset_str_arithm( str, s, d, e, g );
911
912 ammunition_integer_from_string ( 4, "-10", d );
913 ammunition_integer_from_string ( 4, "1348", e );
914 if ( !ammunition_le_integer ( 4, d, e ) )
915 result = 1;
916 ammunition_integer_from_string ( 4, "-1348", d );
917 ammunition_integer_from_string ( 4, "-1348", e );
918 if ( !ammunition_le_integer ( 4, d, e ) )
919 result = 1;
920 ammunition_integer_from_string ( 4, "-1000000", d );
921 ammunition_integer_from_string ( 4, "-1348", e );
922 if ( !ammunition_le_integer ( 4, d, e ) )
923 result = 1;
924 ammunition_integer_from_string ( 4, "1000000", d );
925 ammunition_integer_from_string ( 4, "1348", e );
926 if ( ammunition_le_integer ( 4, d, e ) )
927 result = 1;
928
929 /* Test 27 */
930 ammunition_reset_str_arithm( str, s, d, e, g );
931
932 ammunition_unsigned_integer_from_string ( 4, "10", d );
933 ammunition_unsigned_integer_from_string ( 4, "1348", e );
934 if ( !ammunition_le_unsigned_integer ( 4, d, e ) )
935 result = 1;
936 ammunition_unsigned_integer_from_string ( 4, "1348", d );
937 ammunition_unsigned_integer_from_string ( 4, "1348", e );
938 if ( !ammunition_le_unsigned_integer ( 4, d, e ) )
939 result = 1;
940 ammunition_unsigned_integer_from_string ( 4, "1000000", d );
941 ammunition_unsigned_integer_from_string ( 4, "1348", e );
942 if ( ammunition_le_unsigned_integer ( 4, d, e ) )
943 result = 1;
944
945 /* Test 28 */
946 ammunition_reset_str_arithm( str, s, d, e, g );
947
948 ammunition_unsigned_integer_from_string ( 4, "70000", d );
949 ammunition_change_unsigned_integer_size ( 4, d, 2, d );
950 if ( !ammunition_overflow_bit )
951 result = 1;
952 ammunition_unsigned_integer_from_string ( 4, "30000", d );
953 ammunition_change_unsigned_integer_size ( 4, d, 2, d );
954 ammunition_integer_to_string( 2, d, s );
955 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "30000" ) != 0 )
956 result = 1;
957 ammunition_unsigned_integer_from_string ( 4, "11230000", g );
958 ammunition_change_unsigned_integer_size ( 4, g, 6, g );
959 ammunition_integer_to_string( 6, g, s );
960 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "11230000" ) != 0 )
961 result = 1;
962
963 /* Test 29 */
964 ammunition_reset_str_arithm( str, s, d, e, g );
965
966 ammunition_integer_from_string ( 4, "40000", d );
967 ammunition_change_integer_size ( 4, d, 2, d );
968 if ( !ammunition_overflow_bit )
969 result = 1;
970 ammunition_integer_from_string ( 4, "-33000", d );
971 ammunition_change_integer_size ( 4, d, 2, d );
972 if ( !ammunition_overflow_bit )
973 result = 1;
974 ammunition_integer_from_string ( 4, "30000", d );
975 ammunition_change_integer_size ( 4, d, 2, d );
976 ammunition_integer_to_string( 2, d, s );
977 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "30000" ) != 0 )
978 result = 1;
979 ammunition_integer_from_string ( 4, "-30000", d );
980 ammunition_change_integer_size ( 4, d, 2, d );
981 ammunition_integer_to_string( 2, d, s );
982 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-30000" ) != 0 )
983 result = 1;
984 ammunition_integer_from_string ( 4, "11230000", g );
985 ammunition_change_integer_size ( 4, g, 6, g );
986 ammunition_integer_to_string( 6, g, s );
987 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "11230000" ) != 0 )
988 result = 1;
989 ammunition_integer_from_string ( 4, "-11230000", g );
990 ammunition_change_integer_size ( 4, g, 6, g );
991 ammunition_integer_to_string( 6, g, s );
992 if ( ammunition_overflow_bit || ammunition_strcmp ( s, "-11230000" ) != 0 )
993 result = 1;
994
995 /* Test 30 */
996 ammunition_reset_str_arithm( str, s, d, e, g );
997
998 ammunition_unsigned_integer_from_string ( 4, "1348", d );
999 ammunition_unsigned_integer_from_string ( 4, "1348", e );
1000 ammunition_unsigned_integer_or ( 4, d, e, e );
1001 ammunition_unsigned_integer_to_string ( 4, e, s );
1002 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1003 result = 1;
1004 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1005 ammunition_unsigned_integer_from_string ( 4, "0", e );
1006 ammunition_unsigned_integer_or ( 4, d, e, e );
1007 ammunition_unsigned_integer_to_string ( 4, e, s );
1008 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1009 result = 1;
1010 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1011 ammunition_unsigned_integer_from_string ( 4, "4294967295", e );
1012 ammunition_unsigned_integer_or ( 4, d, e, e );
1013 ammunition_unsigned_integer_to_string ( 4, e, s );
1014 if ( ammunition_strcmp ( s, "4294967295" ) != 0 )
1015 result = 1;
1016 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1017 ammunition_unsigned_integer_from_string ( 4, "96", e );
1018 ammunition_unsigned_integer_or ( 4, d, e, e );
1019 ammunition_unsigned_integer_to_string ( 4, e, s );
1020 if ( ammunition_strcmp ( s, "1380" ) != 0 )
1021 result = 1;
1022
1023 /* Test 31 */
1024 ammunition_reset_str_arithm( str, s, d, e, g );
1025
1026 ammunition_integer_from_string ( 4, "1348", d );
1027 ammunition_integer_from_string ( 4, "1348", e );
1028 ammunition_integer_or ( 4, d, e, e );
1029 ammunition_integer_to_string( 4, e, s );
1030 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1031 result = 1;
1032 ammunition_integer_from_string ( 4, "1348", d );
1033 ammunition_integer_from_string ( 4, "0", e );
1034 ammunition_integer_or ( 4, d, e, e );
1035 ammunition_integer_to_string( 4, e, s );
1036 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1037 result = 1;
1038 ammunition_integer_from_string ( 4, "1348", d );
1039 ammunition_integer_from_string ( 4, "-1", e );
1040 ammunition_integer_or ( 4, d, e, e );
1041 ammunition_integer_to_string( 4, e, s );
1042 if ( ammunition_strcmp ( s, "-1" ) != 0 )
1043 result = 1;
1044 ammunition_integer_from_string ( 4, "1348", d );
1045 ammunition_integer_from_string ( 4, "96", e );
1046 ammunition_integer_or ( 4, d, e, e );
1047 ammunition_integer_to_string( 4, e, s );
1048 if ( ammunition_strcmp ( s, "1380" ) != 0 )
1049 result = 1;
1050
1051 /* Test 32 */
1052 ammunition_reset_str_arithm( str, s, d, e, g );
1053
1054 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1055 ammunition_unsigned_integer_from_string ( 4, "1348", e );
1056 ammunition_unsigned_integer_and ( 4, d, e, e );
1057 ammunition_unsigned_integer_to_string ( 4, e, s );
1058 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1059 result = 1;
1060 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1061 ammunition_unsigned_integer_from_string ( 4, "0", e );
1062 ammunition_unsigned_integer_and ( 4, d, e, e );
1063 ammunition_unsigned_integer_to_string ( 4, e, s );
1064 if ( ammunition_strcmp ( s, "0" ) != 0 )
1065 result = 1;
1066 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1067 ammunition_unsigned_integer_from_string ( 4, "4294967295", e );
1068 ammunition_unsigned_integer_and ( 4, d, e, e );
1069 ammunition_unsigned_integer_to_string ( 4, e, s );
1070 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1071 result = 1;
1072 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1073 ammunition_unsigned_integer_from_string ( 4, "96", e );
1074 ammunition_unsigned_integer_and ( 4, d, e, e );
1075 ammunition_unsigned_integer_to_string ( 4, e, s );
1076 if ( ammunition_strcmp ( s, "64" ) != 0 )
1077 result = 1;
1078
1079 /* Test 33 */
1080 ammunition_reset_str_arithm( str, s, d, e, g );
1081
1082 ammunition_integer_from_string ( 4, "1348", d );
1083 ammunition_integer_from_string ( 4, "1348", e );
1084 ammunition_integer_and ( 4, d, e, e );
1085 ammunition_integer_to_string( 4, e, s );
1086 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1087 result = 1;
1088 ammunition_integer_from_string ( 4, "1348", d );
1089 ammunition_integer_from_string ( 4, "0", e );
1090 ammunition_integer_and ( 4, d, e, e );
1091 ammunition_integer_to_string( 4, e, s );
1092 if ( ammunition_strcmp ( s, "0" ) != 0 )
1093 result = 1;
1094 ammunition_integer_from_string ( 4, "1348", d );
1095 ammunition_integer_from_string ( 4, "-1", e );
1096 ammunition_integer_and ( 4, d, e, e );
1097 ammunition_integer_to_string( 4, e, s );
1098 if ( ammunition_strcmp ( s, "1348" ) != 0 )
1099 result = 1;
1100 ammunition_integer_from_string ( 4, "1348", d );
1101 ammunition_integer_from_string ( 4, "96", e );
1102 ammunition_integer_and ( 4, d, e, e );
1103 ammunition_integer_to_string( 4, e, s );
1104 if ( ammunition_strcmp ( s, "64" ) != 0 )
1105 result = 1;
1106
1107 /* Test 34 */
1108 ammunition_reset_str_arithm( str, s, d, e, g );
1109
1110 ammunition_unsigned_integer_from_string ( 4, "1348", d );
1111 ammunition_unsigned_integer_not ( 4, d, d );
1112 ammunition_unsigned_integer_to_string ( 4, d, s );
1113 if ( ammunition_strcmp ( s, "4294965947" ) != 0 )
1114 result = 1;
1115 ammunition_unsigned_integer_from_string ( 4, "0", d );
1116 ammunition_unsigned_integer_not ( 4, d, d );
1117 ammunition_unsigned_integer_to_string ( 4, d, s );
1118 if ( ammunition_strcmp ( s, "4294967295" ) != 0 )
1119 result = 1;
1120 ammunition_unsigned_integer_from_string ( 4, "4294967295", d );
1121 ammunition_unsigned_integer_not ( 4, d, d );
1122 ammunition_unsigned_integer_to_string ( 4, d, s );
1123 if ( ammunition_strcmp ( s, "0" ) != 0 )
1124 result = 1;
1125
1126 /* Test 35 */
1127 ammunition_reset_str_arithm( str, s, d, e, g );
1128
1129 ammunition_integer_from_string ( 4, "1348", d );
1130 ammunition_integer_not ( 4, d, d );
1131 ammunition_integer_to_string( 4, d, s );
1132 if ( ammunition_strcmp ( s, "-1349" ) != 0 )
1133 result = 1;
1134 ammunition_integer_from_string ( 4, "0", d );
1135 ammunition_integer_not ( 4, d, d );
1136 ammunition_integer_to_string( 4, d, s );
1137 if ( ammunition_strcmp ( s, "-1" ) != 0 )
1138 result = 1;
1139 ammunition_integer_from_string ( 4, "-1", d );
1140 ammunition_integer_not ( 4, d, d );
1141 ammunition_integer_to_string( 4, d, s );
1142 if ( ammunition_strcmp ( s, "0" ) != 0 )
1143 result = 1;
1144
1145 return result;
1146}
1147
1148
1149/*
1150 Initialization- and return-value-related functions
1151*/
1152
1153void ammunition_init( void )
1154{
1155 ammunition_result = 0;
1156}
1157
1158int ammunition_return( void )
1159{
1160 return ammunition_result;
1161}
1162
1163/*
1164 Main functions
1165*/
1166
1167void _Pragma( "entrypoint" ) ammunition_main( void )
1168{
1169 ammunition_result |= ammunition_bits_test();
1170 ammunition_result |= ammunition_arithm_test();
1171}
1172
1173
1174int main( int argc, char **argv )
1175{
1176 SET_UP
1177 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
1178 START_LOOP
1179 ammunition_init();
1180 ammunition_main();
1181 STOP_LOOP
1182 }
1183 WRITE_TO_FILE
1184 return ( ammunition_return() );
1185}
diff --git a/baseline/source/ammunition/ammunitionTimed.txt b/baseline/source/ammunition/ammunitionTimed.txt
new file mode 100644
index 0000000..b49784b
--- /dev/null
+++ b/baseline/source/ammunition/ammunitionTimed.txt
@@ -0,0 +1,100 @@
1ammunition none 7 none 100 52370648 ammunitionTimed 0 (null)
2ammunition none 7 none 100 52473247 ammunitionTimed 1 (null)
3ammunition none 7 none 100 52317008 ammunitionTimed 2 (null)
4ammunition none 7 none 100 52427850 ammunitionTimed 3 (null)
5ammunition none 7 none 100 52418211 ammunitionTimed 4 (null)
6ammunition none 7 none 100 52452295 ammunitionTimed 5 (null)
7ammunition none 7 none 100 52400750 ammunitionTimed 6 (null)
8ammunition none 7 none 100 52491197 ammunitionTimed 7 (null)
9ammunition none 7 none 100 52383220 ammunitionTimed 8 (null)
10ammunition none 7 none 100 52455367 ammunitionTimed 9 (null)
11ammunition none 7 none 100 52359403 ammunitionTimed 10 (null)
12ammunition none 7 none 100 52366038 ammunitionTimed 11 (null)
13ammunition none 7 none 100 52373652 ammunitionTimed 12 (null)
14ammunition none 7 none 100 52349625 ammunitionTimed 13 (null)
15ammunition none 7 none 100 52418910 ammunitionTimed 14 (null)
16ammunition none 7 none 100 52359124 ammunitionTimed 15 (null)
17ammunition none 7 none 100 52403265 ammunitionTimed 16 (null)
18ammunition none 7 none 100 52403055 ammunitionTimed 17 (null)
19ammunition none 7 none 100 52355073 ammunitionTimed 18 (null)
20ammunition none 7 none 100 52359473 ammunitionTimed 19 (null)
21ammunition none 7 none 100 52337402 ammunitionTimed 20 (null)
22ammunition none 7 none 100 52367365 ammunitionTimed 21 (null)
23ammunition none 7 none 100 52290188 ammunitionTimed 22 (null)
24ammunition none 7 none 100 52308907 ammunitionTimed 23 (null)
25ammunition none 7 none 100 52417792 ammunitionTimed 24 (null)
26ammunition none 7 none 100 52284112 ammunitionTimed 25 (null)
27ammunition none 7 none 100 52490150 ammunitionTimed 26 (null)
28ammunition none 7 none 100 52386712 ammunitionTimed 27 (null)
29ammunition none 7 none 100 52323504 ammunitionTimed 28 (null)
30ammunition none 7 none 100 52339289 ammunitionTimed 29 (null)
31ammunition none 7 none 100 52340825 ammunitionTimed 30 (null)
32ammunition none 7 none 100 52367296 ammunitionTimed 31 (null)
33ammunition none 7 none 100 52336146 ammunitionTimed 32 (null)
34ammunition none 7 none 100 52374210 ammunitionTimed 33 (null)
35ammunition none 7 none 100 52414021 ammunitionTimed 34 (null)
36ammunition none 7 none 100 52441748 ammunitionTimed 35 (null)
37ammunition none 7 none 100 52366458 ammunitionTimed 36 (null)
38ammunition none 7 none 100 52371905 ammunitionTimed 37 (null)
39ammunition none 7 none 100 52367086 ammunitionTimed 38 (null)
40ammunition none 7 none 100 52324622 ammunitionTimed 39 (null)
41ammunition none 7 none 100 52381543 ammunitionTimed 40 (null)
42ammunition none 7 none 100 52295707 ammunitionTimed 41 (null)
43ammunition none 7 none 100 52346692 ammunitionTimed 42 (null)
44ammunition none 7 none 100 52314983 ammunitionTimed 43 (null)
45ammunition none 7 none 100 52349625 ammunitionTimed 44 (null)
46ammunition none 7 none 100 52466123 ammunitionTimed 45 (null)
47ammunition none 7 none 100 52374629 ammunitionTimed 46 (null)
48ammunition none 7 none 100 52358006 ammunitionTimed 47 (null)
49ammunition none 7 none 100 52392369 ammunitionTimed 48 (null)
50ammunition none 7 none 100 52480232 ammunitionTimed 49 (null)
51ammunition none 7 none 100 52368203 ammunitionTimed 50 (null)
52ammunition none 7 none 100 52430364 ammunitionTimed 51 (null)
53ammunition none 7 none 100 52342502 ammunitionTimed 52 (null)
54ammunition none 7 none 100 52345504 ammunitionTimed 53 (null)
55ammunition none 7 none 100 52495388 ammunitionTimed 54 (null)
56ammunition none 7 none 100 52344107 ammunitionTimed 55 (null)
57ammunition none 7 none 100 52388109 ammunitionTimed 56 (null)
58ammunition none 7 none 100 52431760 ammunitionTimed 57 (null)
59ammunition none 7 none 100 52364712 ammunitionTimed 58 (null)
60ammunition none 7 none 100 52337473 ammunitionTimed 59 (null)
61ammunition none 7 none 100 52433158 ammunitionTimed 60 (null)
62ammunition none 7 none 100 52458790 ammunitionTimed 61 (null)
63ammunition none 7 none 100 52402357 ammunitionTimed 62 (null)
64ammunition none 7 none 100 52307440 ammunitionTimed 63 (null)
65ammunition none 7 none 100 52515921 ammunitionTimed 64 (null)
66ammunition none 7 none 100 52419607 ammunitionTimed 65 (null)
67ammunition none 7 none 100 52401518 ammunitionTimed 66 (null)
68ammunition none 7 none 100 52432389 ammunitionTimed 67 (null)
69ammunition none 7 none 100 52310862 ammunitionTimed 68 (null)
70ammunition none 7 none 100 52279992 ammunitionTimed 69 (null)
71ammunition none 7 none 100 52402148 ammunitionTimed 70 (null)
72ammunition none 7 none 100 52390414 ammunitionTimed 71 (null)
73ammunition none 7 none 100 52374629 ammunitionTimed 72 (null)
74ammunition none 7 none 100 52377493 ammunitionTimed 73 (null)
75ammunition none 7 none 100 52334749 ammunitionTimed 74 (null)
76ammunition none 7 none 100 52402845 ammunitionTimed 75 (null)
77ammunition none 7 none 100 52391601 ammunitionTimed 76 (null)
78ammunition none 7 none 100 52382800 ammunitionTimed 77 (null)
79ammunition none 7 none 100 52471641 ammunitionTimed 78 (null)
80ammunition none 7 none 100 52349137 ammunitionTimed 79 (null)
81ammunition none 7 none 100 52408293 ammunitionTimed 80 (null)
82ammunition none 7 none 100 52454180 ammunitionTimed 81 (null)
83ammunition none 7 none 100 52407525 ammunitionTimed 82 (null)
84ammunition none 7 none 100 52463749 ammunitionTimed 83 (null)
85ammunition none 7 none 100 52335517 ammunitionTimed 84 (null)
86ammunition none 7 none 100 52338800 ammunitionTimed 85 (null)
87ammunition none 7 none 100 52406268 ammunitionTimed 86 (null)
88ammunition none 7 none 100 52269236 ammunitionTimed 87 (null)
89ammunition none 7 none 100 52310862 ammunitionTimed 88 (null)
90ammunition none 7 none 100 52286138 ammunitionTimed 89 (null)
91ammunition none 7 none 100 52381963 ammunitionTimed 90 (null)
92ammunition none 7 none 100 52390343 ammunitionTimed 91 (null)
93ammunition none 7 none 100 52426663 ammunitionTimed 92 (null)
94ammunition none 7 none 100 52344736 ammunitionTimed 93 (null)
95ammunition none 7 none 100 52346343 ammunitionTimed 94 (null)
96ammunition none 7 none 100 52380287 ammunitionTimed 95 (null)
97ammunition none 7 none 100 52344597 ammunitionTimed 96 (null)
98ammunition none 7 none 100 52315263 ammunitionTimed 97 (null)
99ammunition none 7 none 100 52418560 ammunitionTimed 98 (null)
100ammunition none 7 none 100 52333352 ammunitionTimed 99 (null)
diff --git a/baseline/source/ammunition/ammunition_libc.c b/baseline/source/ammunition/ammunition_libc.c
new file mode 100644
index 0000000..4cce6e9
--- /dev/null
+++ b/baseline/source/ammunition/ammunition_libc.c
@@ -0,0 +1,166 @@
1/*
2 Include section
3*/
4
5#include "ammunition_string.h"
6#include "ammunition_stdio.h"
7#include "ammunition_stdlib.h"
8
9
10/*
11 Standard library functions
12*/
13
14char ammunition_isdigit( unsigned char c )
15{
16 if ( ( c >= '0' ) & ( c <= '9' ) )
17 return 1;
18 else
19 return 0;
20}
21
22int ammunition_isspace( int c )
23{
24 return ( c == ' ' ) | ( c == '\t' ) | ( c == '\n' ) | ( c == '\r' );
25}
26
27void *ammunition_memcpy( void *dest, const void *src, size_x size )
28{
29 size_x i;
30 _Pragma( "loopbound min 2 max 6" )
31 for ( i = 0; i < size; i++ )
32 ( ( unsigned char * )dest )[i] = ( ( unsigned char * )src )[i];
33
34 return dest;
35}
36
37
38void *ammunition_memset( void *s, int c, size_x n )
39{
40 size_x i;
41 _Pragma( "loopbound min 0 max 4" )
42 for ( i = 0; i < n; i++ )
43 ( ( unsigned char * )s )[i] = ( unsigned char )c;
44
45 return s;
46}
47
48
49int ammunition_memcmp ( const void *mem1, const void *mem2, size_x size )
50{
51 const unsigned char *p1 = (const unsigned char *) mem1,
52 *p2 = (const unsigned char *) mem2;
53 _Pragma( "loopbound min 0 max 4" )
54 while ( size-- )
55 if ( *p1 != *p2 )
56 return ( *p1 - *p2 );
57 else
58 p1++, p2++;
59 return 0;
60}
61
62
63/* The following function is an analog of standard C function
64 `memmove'. The function returns the first operand. */
65
66void *ammunition_memmove ( void *s1, const void *s2, size_x n )
67{
68 int i;
69
70 if ( ( ( char * ) s1 < ( char * ) s2 && ( char * ) s1 + n <= ( char * ) s2 )
71 || ( ( char * ) s2 < ( char * ) s1
72 && ( char * ) s2 + n <= ( char * ) s1 ) )
73 return ( void * ) ammunition_memcpy ( s1, s2, n );
74 if ( ( char * ) s1 < ( char * ) s2 && ( char * ) s1 + n > ( char * ) s2 ) {
75 _Pragma( "loopbound min 0 max 4" )
76 for ( i = 0; ( size_x ) i < n; i++ )
77 ( ( char * ) s1 ) [i] = ( ( char * ) s2 ) [i];
78 } else {
79 _Pragma( "loopbound min 0 max 4" )
80 for ( i = n - 1; i >= 0; i-- )
81 ( ( char * ) s1 )[i] = ( ( char * ) s2 ) [i];
82 }
83 return s1;
84}
85
86int ammunition_strcmp ( const char *str1, const char *str2 )
87{
88 _Pragma( "loopbound min 1 max 4008" )
89 while ( *str1 && ( *str1 == *str2 ) )
90 str1++, str2++;
91 return *( const unsigned char * )str1 - *( const unsigned char * )str2;
92}
93
94int ammunition_atoi ( const char *str )
95{
96 int result = 0;
97 int sign = ( str[0] == '-' ? -1 : 1 );
98
99 int readingPos = 0;
100 if ( str[0] == '-' || str[0] == '+' )
101 readingPos++;
102 _Pragma( "loopbound min 1 max 1" )
103 do {
104 result *= 10;
105 result += str[readingPos++] - 48;
106 } while ( str[readingPos] != 0 );
107
108 return sign * result;
109}
110
111
112int ammunition_sprintf_d( char *s, int number )
113{
114 /* How many decimal digits do we need? */
115 char digits = 0;
116 unsigned char writePos = 0;
117 long long copyOfNumber = number;
118 _Pragma( "loopbound min 1 max 10" )
119 do {
120 digits++;
121 copyOfNumber /= 10;
122 } while ( copyOfNumber != 0 );
123
124 writePos = digits;
125 if ( number < 0 ) {
126 writePos++;
127 s[0] = '-';
128 }
129 s[writePos] = 0;
130
131 copyOfNumber = number;
132 _Pragma( "loopbound min 1 max 10" )
133 do {
134 s[--writePos] = 48 + ( ( copyOfNumber >= 0 ?
135 copyOfNumber : -copyOfNumber ) % 10 );
136 copyOfNumber /= 10;
137 } while ( copyOfNumber != 0 );
138
139 return digits + ( number < 0 ? 1 : 0 );
140}
141
142
143int ammunition_sprintf_u( char *s, unsigned int number )
144{
145 /* How many decimal digits do we need? */
146 char digits = 0;
147 unsigned char writePos = 0;
148 unsigned long copyOfNumber = number;
149 _Pragma( "loopbound min 1 max 10" )
150 do {
151 digits++;
152 copyOfNumber /= 10;
153 } while ( copyOfNumber != 0 );
154
155 writePos = digits;
156 s[writePos] = 0;
157
158 copyOfNumber = number;
159 _Pragma( "loopbound min 1 max 10" )
160 do {
161 s[--writePos] = 48 + ( copyOfNumber % 10 );
162 copyOfNumber /= 10;
163 } while ( copyOfNumber != 0 );
164
165 return digits;
166}
diff --git a/baseline/source/ammunition/ammunition_limits.h b/baseline/source/ammunition/ammunition_limits.h
new file mode 100644
index 0000000..0de4c82
--- /dev/null
+++ b/baseline/source/ammunition/ammunition_limits.h
@@ -0,0 +1,35 @@
1#ifndef AMMUNITION_LIMITS_H
2#define AMMUNITION_LIMITS_H
3
4#ifndef CHAR_BIT
5#define CHAR_BIT 8
6#endif
7#ifndef UCHAR_MAX
8#define UCHAR_MAX 255
9#endif
10#ifndef SCHAR_MAX
11#define SCHAR_MAX 127
12#endif
13#ifndef SCHAR_MIN
14#define SCHAR_MIN (-128)
15#endif
16#ifndef USHRT_MAX
17#define USHRT_MAX 65535
18#endif
19#ifndef SHRT_MAX
20#define SHRT_MAX 32767
21#endif
22#ifndef SHRT_MIN
23#define SHRT_MIN (-32768)
24#endif
25#ifndef UINT_MAX
26#define UINT_MAX (INT_MAX * 2U + 1)
27#endif
28#ifndef INT_MAX
29#define INT_MAX 2147483647
30#endif
31#ifndef INT_MIN
32#define INT_MIN (-INT_MAX-1)
33#endif
34
35#endif /* #ifndef AMMUNITION_LIMITS_H */
diff --git a/baseline/source/ammunition/ammunition_stdio.h b/baseline/source/ammunition/ammunition_stdio.h
new file mode 100644
index 0000000..a3a7a4b
--- /dev/null
+++ b/baseline/source/ammunition/ammunition_stdio.h
@@ -0,0 +1,8 @@
1#ifndef AMMUNITION_STDIO_H
2#define AMMUNITION_STDIO_H
3
4int ammunition_sprintf_d( char *s, int number );
5
6int ammunition_sprintf_u( char *s, unsigned int number );
7
8#endif
diff --git a/baseline/source/ammunition/ammunition_stdlib.h b/baseline/source/ammunition/ammunition_stdlib.h
new file mode 100644
index 0000000..d907212
--- /dev/null
+++ b/baseline/source/ammunition/ammunition_stdlib.h
@@ -0,0 +1,6 @@
1#ifndef AMMUNITION_STDLIB_H
2#define AMMUNITION_STDLIB_H
3
4int ammunition_atoi ( const char *str );
5
6#endif
diff --git a/baseline/source/ammunition/ammunition_string.h b/baseline/source/ammunition/ammunition_string.h
new file mode 100644
index 0000000..6b042f8
--- /dev/null
+++ b/baseline/source/ammunition/ammunition_string.h
@@ -0,0 +1,18 @@
1#ifndef AMMUNITION_STRING_H
2#define AMMUNITION_STRING_H
3
4typedef unsigned int size_x;
5//typedef __SIZE_TYPE__ size_x;
6
7/*
8 Forward declaration of functions
9*/
10
11void *ammunition_memcpy( void *, const void *, size_x );
12void *ammunition_memset( void *, int, size_x );
13int ammunition_memcmp ( const void *mem1, const void *mem2, size_x size );
14void *ammunition_memmove ( void *s1, const void *s2, size_x n );
15int ammunition_strcmp ( const char *str1, const char *str2 );
16
17#endif /* AMMUNITION_STRING_H */
18
diff --git a/baseline/source/ammunition/arithm.c b/baseline/source/ammunition/arithm.c
new file mode 100644
index 0000000..9480846
--- /dev/null
+++ b/baseline/source/ammunition/arithm.c
@@ -0,0 +1,1384 @@
1/*
2 FILE NAME: arithm.c
3
4 TITLE: Package for arbitrary precision integer arithmetic
5
6 DESCRIPTION: This abstract data implements arbitrary precision
7 integer and unsigned integer numbers by machine independent
8 way. The implementation of the package functions are not
9 sufficiently efficient in order to use for run-time. The
10 package functions are oriented to implement constant-folding in
11 compilers. This package is necessary because host machine may
12 not support such arithmetic for target machine. For example,
13 VAX does not support does not support more 32-bits integer
14 numbers arithmetic. The numbers are represented by bytes in
15 big endian mode, negative integer numbers are represented in
16 complementary code. All sizes are given in bytes and must be
17 positive. Results of executions of all functions can coincide
18 with a operand(s). All functions of addition, subtraction,
19 multiplication, division, evaluation of remainder, shift,
20 changing size and transformation of string into number fix
21 overflow. The overflow is fixed when result can not be
22 represented by number of given size.
23
24*/
25
26#include "arithm.h"
27#include "ammunition_string.h"
28
29
30/* This variable can have only two values 0 or 1. The value `1'
31 corresponds to overflow. The variable value are modified by all
32 functions of addition, subtract, multiplication, division,
33 evaluation of remainder, shift, changing size and transformation of
34 string into number fix overflow. */
35
36int ammunition_overflow_bit;
37
38
39/* The following function adds unsigned integers. The function
40 returns 1 if unsigned integer overflow is fixed, 0 otherwise.
41 Result can be placed in any operand. */
42
43int ammunition_add_unsigned_integer_without_overflow_reaction
44( int size, const void *op1, const void *op2, void *result )
45{
46 int digit_num;
47 int carry;
48 unsigned int sum;
49
50 _Pragma( "loopbound min 4 max 4" )
51 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
52 sum = ( ( ( unsigned char * ) op1 ) [digit_num]
53 + ( ( unsigned char * ) op2 ) [digit_num] + carry );
54 if ( sum > UCHAR_MAX ) {
55 sum -= UCHAR_MAX + 1;
56 carry = 1;
57 } else
58 carry = 0;
59 ( ( unsigned char * ) result ) [digit_num] = sum;
60 }
61 return carry != 0;
62}
63
64/* The following function adds unsigned integers. The function
65 returns 1 if unsigned integer overflow (the first operand is less
66 than the second) is fixed, 0 otherwise. Result can be placed in
67 any operand. */
68
69int ammunition_subtract_unsigned_integer_without_overflow_reaction
70( int size, const void *op1, const void *op2, void *result )
71{
72 int digit_num;
73 int carry;
74 int subtraction;
75
76 _Pragma( "loopbound min 4 max 4" )
77 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
78 subtraction = ( ( ( unsigned char * ) op1 ) [digit_num]
79 - ( ( unsigned char * ) op2 ) [digit_num] - carry );
80 if ( subtraction < 0 ) {
81 subtraction += UCHAR_MAX + 1;
82 carry = 1;
83 } else
84 carry = 0;
85 ( ( unsigned char * ) result ) [digit_num] = subtraction;
86 }
87 return carry != 0;
88}
89
90/* The following function makes complementary code of number. Result
91 can be placed in operand. */
92
93void ammunition_make_complementary_code
94( int size, const void *operand, void *result )
95{
96 int digit_num;
97 int carry;
98 int subtraction;
99
100 _Pragma( "loopbound min 2 max 6" )
101 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
102 subtraction = ( 0 - ( ( unsigned char * ) operand ) [digit_num] - carry );
103 if ( subtraction != 0 ) {
104 subtraction += UCHAR_MAX + 1;
105 carry = 1;
106 } else
107 carry = 0;
108 ( ( unsigned char * ) result ) [digit_num] = subtraction;
109 }
110}
111
112/* The following function multiplys unsigned integer by digit (byte
113 size). The function returns 1 if unsigned integer overflow is
114 fixed, 0 otherwise. */
115
116int ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
117( int size, void *operand, unsigned int digit )
118{
119 int digit_num;
120 unsigned int carry;
121 unsigned int sum;
122
123 _Pragma( "loopbound min 4 max 4" )
124 for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) {
125 sum = ( ( ( unsigned char * ) operand ) [digit_num] * digit + carry );
126 if ( sum > UCHAR_MAX ) {
127 carry = sum / ( UCHAR_MAX + 1 );
128 sum %= UCHAR_MAX + 1;
129 } else
130 carry = 0;
131 ( ( unsigned char * ) operand ) [digit_num] = sum;
132 }
133 return carry != 0;
134}
135
136
137/* Originally reaction on all integer and unsigned integer overflow is
138 equal to the following function. The function does nothing. */
139
140void
141ammunition_arithmetic_overflow_reaction ( void )
142{}
143
144
145/* Originally reaction on all integer and unsigned integer overflow is
146 equal to the following function. The function does nothing. */
147
148void
149ammunition_arithmetic_unsigned_overflow_reaction ( void )
150{}
151
152
153/* This page contains functions for arbitrary precision addition. */
154
155/* The function adds unsigned integers and fixes overflow reaction if
156 it is needed. The function makes this with the aid of function
157 `add_unsigned_integer_without_overflow_reaction'. Result can be
158 placed in any operand. */
159
160void
161ammunition_add_unsigned_integer ( int size, const void *op1, const void *op2,
162 void *result )
163{
164 ammunition_overflow_bit
165 = ammunition_add_unsigned_integer_without_overflow_reaction (
166 size, op1, op2, result );
167 if ( ammunition_overflow_bit != 0 )
168 ammunition_arithmetic_unsigned_overflow_reaction();
169}
170
171/* The function adds integers and fixes overflow reaction if it is
172 needed. The function makes this with the aid of function
173 `add_unsigned_integer_without_overflow_reaction'. Result can be
174 placed in any operand. */
175
176void
177ammunition_add_integer ( int size, const void *op1, const void *op2,
178 void *result )
179{
180 int op1_sign;
181 int sign_equality;
182
183 op1_sign = INTEGER_SIGN ( op1 );
184 sign_equality = INTEGER_SIGN ( op1 ) == INTEGER_SIGN ( op2 );
185 ammunition_add_unsigned_integer_without_overflow_reaction (
186 size, op1, op2, result );
187 ammunition_overflow_bit = sign_equality &&
188 ( op1_sign != INTEGER_SIGN ( result ) );
189 if ( ammunition_overflow_bit != 0 )
190 ammunition_arithmetic_overflow_reaction();
191}
192
193
194
195/* This page contains functions for arbitrary precision subtraction. */
196
197/* The function subtracts unsigned integers and fixes overflow
198 reaction if it is needed. The function makes this with the aid of
199 function `subtract_unsigned_integer_without_overflow_reaction'.
200 Result can be placed in any operand. */
201
202void
203ammunition_subtract_unsigned_integer ( int size, const void *op1,
204 const void *op2,
205 void *result )
206{
207 ammunition_overflow_bit
208 = ammunition_subtract_unsigned_integer_without_overflow_reaction (
209 size, op1, op2, result );
210 if ( ammunition_overflow_bit != 0 )
211 ammunition_arithmetic_unsigned_overflow_reaction();
212}
213
214/* The function subtracts integers and fixes overflow reaction if it
215 is needed. The function makes this with the aid of function
216 `subtract_unsigned_integer_without_overflow_reaction'. Result can
217 be placed in any operand. */
218
219void
220ammunition_subtract_integer ( int size, const void *op1, const void *op2,
221 void *result )
222{
223 int op1_sign;
224 int sign_unequality;
225
226 op1_sign = INTEGER_SIGN ( op1 );
227 sign_unequality = INTEGER_SIGN ( op1 ) != INTEGER_SIGN ( op2 );
228 ammunition_subtract_unsigned_integer_without_overflow_reaction (
229 size, op1, op2, result );
230 ammunition_overflow_bit = sign_unequality &&
231 ( op1_sign != INTEGER_SIGN ( result ) );
232 if ( ammunition_overflow_bit != 0 )
233 ammunition_arithmetic_overflow_reaction();
234}
235
236
237
238/* This page contains functions for arbitrary precision multiplication. */
239
240/* The following function multiplys unsigned integers. The function
241 returns 1 if unsigned integer overflow is fixed, 0 otherwise.
242 Result can be placed in any operand. */
243
244int ammunition_multiply_unsigned_integer_without_overflow_reaction
245( int size, const void *op1, const void *op2, void *result )
246{
247 int op1_digit_num;
248 int op2_digit_num;
249 int carry;
250 unsigned long int partial_sum;
251 int result_digit_number;
252 int overflow_flag;
253 unsigned char long_result [2 * MAX_INTEGER_OPERAND_SIZE];
254
255 ammunition_memset ( long_result + size, 0, ( size_x ) size );
256 _Pragma( "loopbound min 4 max 4" )
257 for ( op2_digit_num = size - 1; op2_digit_num >= 0; op2_digit_num-- ) {
258 if ( ( ( unsigned char * ) op2 ) [op2_digit_num] != 0 ) {
259 _Pragma( "loopbound min 4 max 4" )
260 for ( op1_digit_num = size - 1, carry = 0; op1_digit_num >= 0;
261 op1_digit_num-- ) {
262 partial_sum
263 = ( ( ( unsigned char * ) op1 ) [op1_digit_num]
264 * ( ( unsigned char * ) op2 ) [op2_digit_num]
265 + long_result [op1_digit_num + op2_digit_num + 1]
266 + carry );
267 long_result [op1_digit_num + op2_digit_num + 1]
268 = ( unsigned char ) ( partial_sum % ( UCHAR_MAX + 1 ) );
269 carry = partial_sum / ( UCHAR_MAX + 1 );
270 }
271 long_result [op2_digit_num] = carry;
272 } else
273 long_result [op2_digit_num] = 0;
274 }
275 overflow_flag = 0;
276 _Pragma( "loopbound min 1 max 4" )
277 for ( result_digit_number = size - 1; result_digit_number >= 0;
278 result_digit_number-- ) {
279 if ( long_result [result_digit_number] != 0 ) {
280 overflow_flag = 1;
281 break;
282 }
283 }
284 ammunition_memcpy ( result, long_result + size, ( size_x ) size );
285 return overflow_flag;
286}
287
288/* The following function multiplys unsigned integers and fixes
289 overflow reaction if it is needed. The function makes this with
290 the aid of function
291 `multiply_unsigned_integer_without_overflow_reaction'. Result can
292 be placed in any operand. */
293
294void
295ammunition_multiply_unsigned_integer ( int size, const void *op1,
296 const void *op2,
297 void *result )
298{
299 ammunition_overflow_bit =
300 ammunition_multiply_unsigned_integer_without_overflow_reaction (
301 size, op1, op2, result );
302 if ( ammunition_overflow_bit )
303 ammunition_arithmetic_unsigned_overflow_reaction();
304}
305
306/* The function multiplys integers and fixes overflow reaction if it
307 is needed. The function makes this with the aid of function
308 `multiply_unsigned_integer_without_overflow_reaction'. Result can
309 be placed in any operand. */
310
311void
312ammunition_multiply_integer ( int size, const void *op1, const void *op2,
313 void *result )
314{
315 int negative_result_flag;
316 unsigned char op1_complementary [MAX_INTEGER_OPERAND_SIZE];
317 unsigned char op2_complementary [MAX_INTEGER_OPERAND_SIZE];
318 unsigned const char *abs_op1;
319 unsigned const char *abs_op2;
320 int unsigned_result_sign;
321
322 negative_result_flag = INTEGER_SIGN ( op1 ) != INTEGER_SIGN ( op2 );
323 if ( INTEGER_SIGN ( op1 ) ) {
324 /* May be integer overflow. But result is correct because
325 it is unsigned. */
326 ammunition_make_complementary_code ( size, op1, op1_complementary );
327 abs_op1 = ( unsigned const char * )op1_complementary;
328 } else
329 abs_op1 = ( unsigned const char * )op1;
330 if ( INTEGER_SIGN ( op2 ) ) {
331 /* May be integer overflow. But result is correct because
332 it is unsigned. */
333 ammunition_make_complementary_code ( size, op2, op2_complementary );
334 abs_op2 = ( unsigned const char * )op2_complementary;
335 } else
336 abs_op2 = ( unsigned const char * )op2;
337 ammunition_overflow_bit =
338 ammunition_multiply_unsigned_integer_without_overflow_reaction (
339 size, abs_op1, abs_op2, result );
340 unsigned_result_sign = INTEGER_SIGN ( result );
341 if ( negative_result_flag )
342 ammunition_make_complementary_code ( size, result, result );
343 if ( unsigned_result_sign
344 && ( !negative_result_flag
345 || INTEGER_SIGN ( result ) != unsigned_result_sign ) )
346 /* Unsigned result can not be represented as integer. */
347 ammunition_overflow_bit = 1;
348 if ( ammunition_overflow_bit )
349 ammunition_arithmetic_overflow_reaction();
350}
351
352
353
354/* This page contains functions for arbitrary precision division. */
355
356/* The following function divides unsigned integers. The function
357 returns 1 if unsigned integer overflow (division by zero) is fixed,
358 0 otherwise. Result can be placed in any operand. See algorithm
359 in Knuth's book. */
360
361int ammunition_divide_unsigned_integer_without_overflow_reaction
362( int size, const void *op1, const void *op2, void *result )
363{
364 int scaled_op1_digit_num;
365 unsigned int q_approximation;
366 int first_nonzero_digit_number;
367 int op2_digit_number;
368 unsigned int scale;
369 unsigned char scaled_op1 [MAX_INTEGER_OPERAND_SIZE + 1];
370 unsigned char normalized_op2 [MAX_INTEGER_OPERAND_SIZE];
371 unsigned char extended_normalized_op2 [MAX_INTEGER_OPERAND_SIZE + 1];
372
373 _Pragma( "loopbound min 4 max 4" )
374 for ( op2_digit_number = 0; op2_digit_number < size; op2_digit_number++ ) {
375 if ( ( ( unsigned char * ) op2 ) [op2_digit_number] != 0 )
376 break;
377 }
378 first_nonzero_digit_number = op2_digit_number;
379 if ( first_nonzero_digit_number == size ) {
380 /* Zero divisor */
381 ammunition_memset ( result, 0, ( size_x ) size );
382 return 1 /* TRUE */;
383 } else
384 if ( first_nonzero_digit_number == size - 1 ) {
385 /* Division by digit. */
386 int digit_num;
387 int digit;
388 unsigned long divisable;
389 unsigned long remainder;
390
391 digit = ( ( unsigned char * ) op2 ) [first_nonzero_digit_number];
392 ammunition_memcpy ( result, op1, ( size_x ) size );
393 remainder = 0;
394 _Pragma( "loopbound min 4 max 4" )
395 for ( digit_num = 0; digit_num < size; digit_num++ ) {
396 divisable = ( remainder * ( UCHAR_MAX + 1 )
397 + ( ( unsigned char * ) result ) [digit_num] );
398 remainder = divisable % digit;
399 ( ( unsigned char * ) result ) [digit_num]
400 = ( unsigned char ) ( divisable / digit );
401 }
402 return 0 /* FALSE */;
403 }
404 /* Normalization of divisor. */
405 scale = ( UCHAR_MAX + 1 ) / ( ( ( unsigned char * ) op2 ) [op2_digit_number] +
406 1 );
407 ammunition_memcpy ( scaled_op1 + 1, op1, ( size_x ) size );
408 *scaled_op1 = 0;
409
410 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
411 ( size + 1, scaled_op1, scale );
412
413 ammunition_memcpy ( normalized_op2, op2, ( size_x ) size );
414
415 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
416 ( size, normalized_op2, scale );
417
418 _Pragma( "loopbound min 0 max 0" )
419 for ( scaled_op1_digit_num = 0;
420 scaled_op1_digit_num <= first_nonzero_digit_number;
421 scaled_op1_digit_num++ ) {
422 /* Division of `scaled_op1[scaled_op1_digit_number]..scaled_op1[size]' by
423 `normalized_op2[first_nonzero_digit_number]..normalized_op2[size-1]'
424 for evaluation of one digit of quotient
425 `result[size-1-first_nonzero_digit_number-scaled_op1_digit_number]'.
426 */
427 if ( scaled_op1 [scaled_op1_digit_num]
428 == normalized_op2 [first_nonzero_digit_number] )
429 q_approximation = UCHAR_MAX;
430 else
431 q_approximation
432 = ( scaled_op1 [scaled_op1_digit_num] * ( UCHAR_MAX + 1 )
433 + scaled_op1 [scaled_op1_digit_num + 1] )
434 / normalized_op2 [first_nonzero_digit_number];
435
436 _Pragma( "loopbound min 0 max 0" )
437 while ( normalized_op2 [first_nonzero_digit_number + 1] * q_approximation
438 > ( ( ( unsigned long int ) scaled_op1 [scaled_op1_digit_num]
439 * ( UCHAR_MAX + 1 )
440 + scaled_op1 [scaled_op1_digit_num + 1]
441 - q_approximation
442 * normalized_op2 [first_nonzero_digit_number] )
443 * ( UCHAR_MAX + 1 ) + scaled_op1 [scaled_op1_digit_num + 2] ) )
444 q_approximation --;
445
446 /* Multiply and subtract */
447 ammunition_memcpy ( extended_normalized_op2 + 1,
448 normalized_op2 + first_nonzero_digit_number,
449 ( size_x ) ( size - first_nonzero_digit_number ) );
450 *extended_normalized_op2 = 0;
451 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
452 ( size - first_nonzero_digit_number + 1, extended_normalized_op2,
453 q_approximation );
454 if ( ammunition_subtract_unsigned_integer_without_overflow_reaction
455 ( size - first_nonzero_digit_number + 1,
456 scaled_op1 + scaled_op1_digit_num, extended_normalized_op2,
457 scaled_op1 + scaled_op1_digit_num ) ) {
458 /* Negative result. Compensation by addition. */
459 q_approximation--;
460 ammunition_memcpy ( extended_normalized_op2 + 1,
461 normalized_op2 + first_nonzero_digit_number,
462 ( size_x ) ( size - first_nonzero_digit_number ) );
463 *extended_normalized_op2 = 0;
464
465 ammunition_add_unsigned_integer_without_overflow_reaction
466 ( size - first_nonzero_digit_number + 1,
467 scaled_op1 + scaled_op1_digit_num, extended_normalized_op2,
468 scaled_op1 + scaled_op1_digit_num );
469
470 }
471 ( ( unsigned char * ) result ) [size - 1 - first_nonzero_digit_number
472 + scaled_op1_digit_num] = q_approximation;
473 }
474 ammunition_memset ( result, 0,
475 ( size_x ) ( size - 1 - first_nonzero_digit_number ) );
476 return 0 /* TRUE */;
477}
478
479/* The function divides unsigned integers and fixes overflow reaction
480 if it is needed. The function makes this with the aid of function
481 `divide_unsigned_integer_without_overflow_reaction'. Result can be
482 placed in any operand. */
483
484void
485ammunition_divide_unsigned_integer ( int size, const void *op1, const void *op2,
486 void *result )
487{
488 ammunition_overflow_bit =
489 ammunition_divide_unsigned_integer_without_overflow_reaction (
490 size, op1, op2, result );
491 if ( ammunition_overflow_bit )
492 ammunition_arithmetic_unsigned_overflow_reaction();
493}
494
495/* The function divides integers and fixes overflow reaction if it is
496 needed. The function makes this with the aid of function
497 `divide_unsigned_integer_without_overflow_reaction'. Result can be
498 placed in any operand. */
499
500void
501ammunition_divide_integer ( int size, const void *op1, const void *op2,
502 void *result )
503{
504 int negative_result_flag;
505 unsigned char op1_complementary [MAX_INTEGER_OPERAND_SIZE];
506 unsigned char op2_complementary [MAX_INTEGER_OPERAND_SIZE];
507 unsigned const char *abs_op1;
508 unsigned const char *abs_op2;
509 int unsigned_result_sign;
510
511 negative_result_flag = INTEGER_SIGN ( op1 ) != INTEGER_SIGN ( op2 );
512 if ( INTEGER_SIGN ( op1 ) ) {
513 /* May be integer overflow for minimal int. But result is correct because
514 it is unsigned. */
515 ammunition_make_complementary_code ( size, op1, op1_complementary );
516 abs_op1 = ( unsigned const char * )op1_complementary;
517 } else
518 abs_op1 = ( unsigned const char * )op1;
519 if ( INTEGER_SIGN ( op2 ) ) {
520 /* May be integer overflow for minimal int. But result is correct
521 because it is unsigned. */
522 ammunition_make_complementary_code ( size, op2, op2_complementary );
523 abs_op2 = ( unsigned const char * )op2_complementary;
524 } else
525 abs_op2 = ( unsigned const char * )op2;
526 ammunition_overflow_bit =
527 ammunition_divide_unsigned_integer_without_overflow_reaction (
528 size, abs_op1, abs_op2, result );
529 unsigned_result_sign = INTEGER_SIGN ( result );
530 if ( negative_result_flag )
531 ammunition_make_complementary_code ( size, result, result );
532 if ( unsigned_result_sign
533 && ( !negative_result_flag
534 || INTEGER_SIGN ( result ) != unsigned_result_sign ) )
535 /* Unsigned result can not be represented as integer. */
536 ammunition_overflow_bit = 1;
537 if ( ammunition_overflow_bit )
538 ammunition_arithmetic_overflow_reaction();
539}
540
541
542
543/* This page contains functions for arbitrary precision evaluation of
544 remainder. */
545
546/* The function evaluates remainder of division of unsigned integers
547 as `op1 - (op1/op2)*op2' and fixes overflow reaction if it is
548 needed. Result can be placed in any operand. */
549
550void
551ammunition_unsigned_integer_remainder ( int size, const void *op1,
552 const void *op2,
553 void *result )
554{
555 unsigned char temporary [MAX_INTEGER_OPERAND_SIZE];
556
557 ammunition_divide_unsigned_integer ( size, op1, op2, temporary );
558 if ( ammunition_overflow_bit )
559 /* Reaction on zero is called from `divide_unsigned_integer'. */
560 ammunition_memset ( result, 0, ( size_x ) size );
561 else {
562 ammunition_multiply_unsigned_integer ( size, temporary, op2, temporary );
563 ammunition_subtract_unsigned_integer ( size, op1, temporary, result );
564 }
565}
566
567
568/* This page contains functions for arbitrary precision number shifts. */
569
570/* This function makes right shift of unsigned integer of given size
571 on given number of bits. If number of bits is negative the
572 function makes shift to left actually with the aid of function
573 `unsigned_integer_shift_left'. The function fixes overflow when
574 result can not be represented by number of given size, i.e. in
575 other words the opposite unsigned shift (to left) results in number
576 not equal to source operand. Result can be placed in operand. */
577
578void
579ammunition_unsigned_integer_shift_right ( int size, const void *operand,
580 int bits, void *result )
581{
582 int byte_number;
583 unsigned byte;
584 unsigned carry;
585 int bit_shift;
586 int byte_shift;
587
588
589 if ( bits < 0 )
590 ammunition_unsigned_integer_shift_left ( size, operand, -bits, result );
591 else {
592 ammunition_overflow_bit = 0;
593 byte_shift = bits / CHAR_BIT;
594 bit_shift = bits % CHAR_BIT;
595 _Pragma( "loopbound min 0 max 3" )
596 for ( byte_number = ( byte_shift >= size ? 0 : size - byte_shift );
597 byte_number < size; byte_number++ )
598 if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) {
599 ammunition_overflow_bit = 1;
600 break;
601 }
602 if ( byte_shift >= size )
603 ammunition_memset ( result, 0, ( size_x ) size );
604 else {
605 ammunition_memmove ( ( char * ) result + byte_shift, operand,
606 ( size_x ) ( size - byte_shift ) );
607 ammunition_memset ( result, 0, ( size_x ) byte_shift );
608 if ( bit_shift == 0 )
609 return;
610 _Pragma( "loopbound min 3 max 3" )
611 for ( byte_number = byte_shift, carry = 0; byte_number < size;
612 byte_number++ ) {
613 byte = ( ( unsigned char * ) result ) [byte_number];
614 ( ( unsigned char * ) result ) [byte_number]
615 = carry | ( byte >> bit_shift );
616 carry = ( byte << ( CHAR_BIT - bit_shift ) ) & UCHAR_MAX;
617 }
618 if ( carry != 0 )
619 ammunition_overflow_bit = 1;
620 }
621 if ( ammunition_overflow_bit )
622 ammunition_arithmetic_unsigned_overflow_reaction();
623 }
624}
625
626/* This function makes right arithmetic shift of integer of given size
627 on given number of bits. If number of bits is negative the
628 function makes shift to left actually with the aid of function
629 `integer_shift_left'. The function fixes overflow when result can
630 not be represented by number of given size, i.e. in other words the
631 opposite shift (to left) results in number not equal to source
632 operand. Result can be placed in operand. */
633
634void
635ammunition_integer_shift_right ( int size, const void *operand, int bits,
636 void *result )
637{
638 int byte_number;
639 unsigned byte;
640 unsigned carry;
641 int bit_shift;
642 int byte_shift;
643 int operand_sign;
644
645 if ( bits < 0 )
646 ammunition_integer_shift_left ( size, operand, -bits, result );
647 else {
648 operand_sign = INTEGER_SIGN ( operand );
649 ammunition_overflow_bit = 0;
650 byte_shift = bits / CHAR_BIT;
651 bit_shift = bits % CHAR_BIT;
652 _Pragma( "loopbound min 0 max 3" )
653 for ( byte_number = ( byte_shift >= size ? 0 : size - byte_shift );
654 byte_number < size; byte_number++ )
655 if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) {
656 ammunition_overflow_bit = 1;
657 break;
658 }
659 if ( byte_shift >= size )
660 ammunition_memset ( result,
661 ( operand_sign ? UCHAR_MAX : 0 ), ( size_x ) size );
662 else {
663 ammunition_memmove ( ( char * ) result + byte_shift, operand,
664 ( size_x ) ( size - byte_shift ) );
665 ammunition_memset ( result, ( operand_sign ? UCHAR_MAX : 0 ),
666 ( size_x ) byte_shift );
667 if ( bit_shift == 0 )
668 return;
669 carry = ( ( ( operand_sign ? UCHAR_MAX : 0 ) << ( CHAR_BIT - bit_shift ) )
670 & UCHAR_MAX );
671 _Pragma( "loopbound min 3 max 3" )
672 for ( byte_number = byte_shift; byte_number < size; byte_number++ ) {
673 byte = ( ( unsigned char * ) result ) [byte_number];
674 ( ( unsigned char * ) result ) [byte_number]
675 = carry | ( byte >> bit_shift );
676 carry = ( byte << ( CHAR_BIT - bit_shift ) ) & UCHAR_MAX;
677 }
678 if ( carry != 0 )
679 ammunition_overflow_bit = 1;
680 }
681 if ( ammunition_overflow_bit )
682 ammunition_arithmetic_overflow_reaction();
683 }
684}
685
686/* This function makes left shift of unsigned integer of given size on
687 given number of bits. If number of bits is negative the function
688 makes shift to left actually with the aid of function
689 `unsigned_integer_shift_right'. The function fixes overflow when
690 result can not be represented by number of given size, i.e. i.e. in
691 other words the opposite shift (to right) results in number not
692 equal to source operand. Result can be placed in operand. */
693
694void
695ammunition_unsigned_integer_shift_left ( int size, const void *operand,
696 int bits, void *result )
697{
698 int byte_number;
699 unsigned byte;
700 unsigned carry;
701 int bit_shift;
702 int byte_shift;
703
704 if ( bits < 0 )
705 ammunition_unsigned_integer_shift_right ( size, operand, -bits, result );
706 else {
707 ammunition_overflow_bit = 0;
708 byte_shift = bits / CHAR_BIT;
709 bit_shift = bits % CHAR_BIT;
710 _Pragma( "loopbound min 0 max 2" )
711 for ( byte_number = 0; byte_number < byte_shift && byte_number < size;
712 byte_number++ )
713 if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) {
714 ammunition_overflow_bit = 1;
715 break;
716 }
717 if ( byte_shift >= size )
718 ammunition_memset ( result, 0, ( size_x ) size );
719 else {
720 ammunition_memmove ( result, ( char * ) operand + byte_shift,
721 ( size_x ) ( size - byte_shift ) );
722 ammunition_memset ( ( char * ) result + ( size - byte_shift ), 0,
723 ( size_x ) byte_shift );
724 if ( bit_shift == 0 )
725 return;
726 _Pragma( "loopbound min 2 max 3" )
727 for ( byte_number = size - byte_shift - 1, carry = 0;
728 byte_number >= 0; byte_number-- ) {
729 byte = ( ( unsigned char * ) result ) [byte_number];
730 ( ( unsigned char * ) result ) [byte_number]
731 = carry | ( byte << bit_shift );
732 carry = byte >> ( CHAR_BIT - bit_shift );
733 }
734 if ( carry != 0 )
735 ammunition_overflow_bit = 1;
736 }
737 if ( ammunition_overflow_bit )
738 ammunition_arithmetic_unsigned_overflow_reaction();
739 }
740}
741
742/* This function makes left arithmetic shift of integer of given size
743 on given number of bits. If number of bits is negative the
744 function makes shift to left actually with the aid of function
745 `integer_shift_right'. The function fixes overflow when result can
746 not be represented by number of given size, i.e. in other words the
747 opposite shift (to right) results in number not equal to source
748 operand. Result can be placed in operand. */
749
750void
751ammunition_integer_shift_left ( int size, const void *operand, int bits,
752 void *result )
753{
754 int byte_number;
755 unsigned byte;
756 unsigned carry;
757 int bit_shift;
758 int byte_shift;
759 int operand_sign;
760
761 if ( bits < 0 )
762 ammunition_integer_shift_right ( size, operand, -bits, result );
763 else {
764 operand_sign = INTEGER_SIGN ( operand );
765 ammunition_overflow_bit = 0;
766 byte_shift = bits / CHAR_BIT;
767 bit_shift = bits % CHAR_BIT;
768 _Pragma( "loopbound min 0 max 2" )
769 for ( byte_number = 0; byte_number < byte_shift && byte_number < size;
770 byte_number++ )
771 if ( ( ( unsigned char * ) operand ) [byte_number]
772 != ( operand_sign ? UCHAR_MAX : 0 ) ) {
773 ammunition_overflow_bit = 1;
774 break;
775 }
776 if ( byte_shift >= size )
777 ammunition_memset ( result, 0, ( size_x ) size );
778 else {
779 ammunition_memmove ( result, ( char * ) operand + byte_shift,
780 ( size_x ) ( size - byte_shift ) );
781 ammunition_memset ( ( char * ) result + ( size - byte_shift ), 0,
782 ( size_x ) byte_shift );
783 if ( bit_shift == 0 )
784 return;
785 _Pragma( "loopbound min 2 max 3" )
786 for ( byte_number = size - byte_shift - 1, carry = 0;
787 byte_number >= 0; byte_number-- ) {
788 byte = ( ( unsigned char * ) result ) [byte_number];
789 ( ( unsigned char * ) result ) [byte_number]
790 = carry | ( byte << bit_shift );
791 carry = byte >> ( CHAR_BIT - bit_shift );
792 }
793 if ( carry != ( ( unsigned ) ( operand_sign ? UCHAR_MAX : 0 )
794 >> ( CHAR_BIT - bit_shift ) ) )
795 ammunition_overflow_bit = 1;
796 }
797 if ( operand_sign != INTEGER_SIGN ( result ) )
798 ammunition_overflow_bit = 1;
799 if ( ammunition_overflow_bit )
800 ammunition_arithmetic_overflow_reaction();
801 }
802}
803
804
805
806/* This page contains functions for bitwise operations of arbitrary
807 precision numbers. */
808
809/* This function makes bitwise `or' of two integers of given size. */
810
811void
812ammunition_integer_or ( int size, const void *op1, const void *op2,
813 void *result )
814{
815 int byte_number;
816
817 _Pragma( "loopbound min 4 max 4" )
818 for ( byte_number = 0; byte_number < size; byte_number++ ) {
819 ( ( unsigned char * ) result ) [byte_number]
820 = ( ( unsigned char * ) op1 ) [byte_number]
821 | ( ( unsigned char * ) op2 ) [byte_number];
822 }
823}
824
825/* This function makes bitwise `or' of two unsigned integers of given
826 size. */
827
828void
829ammunition_unsigned_integer_or ( int size, const void *op1, const void *op2,
830 void *result )
831{
832 ammunition_integer_or ( size, op1, op2, result );
833}
834
835
836/* This function makes bitwise `and' of two integers of given size. */
837
838void
839ammunition_integer_and ( int size, const void *op1, const void *op2,
840 void *result )
841{
842 int byte_number;
843
844 _Pragma( "loopbound min 4 max 4" )
845 for ( byte_number = 0; byte_number < size; byte_number++ ) {
846 ( ( unsigned char * ) result ) [byte_number]
847 = ( ( unsigned char * ) op1 ) [byte_number]
848 & ( ( unsigned char * ) op2 ) [byte_number];
849 }
850}
851
852/* This function makes bitwise `and' of two unsigned integers of given
853 size. */
854
855void
856ammunition_unsigned_integer_and ( int size, const void *op1, const void *op2,
857 void *result )
858{
859 ammunition_integer_and ( size, op1, op2, result );
860}
861
862
863/* This function makes bitwise `not' of integer of given size. */
864
865void
866ammunition_integer_not ( int size, const void *operand, void *result )
867{
868 int byte_number;
869
870 _Pragma( "loopbound min 4 max 4" )
871 for ( byte_number = 0; byte_number < size; byte_number++ ) {
872 ( ( unsigned char * ) result ) [byte_number]
873 = ( ( unsigned char * ) operand ) [byte_number] ^ UCHAR_MAX;
874 }
875}
876
877/* This function makes bitwise `not' of unsigned integer of given
878 size. */
879
880void
881ammunition_unsigned_integer_not ( int size, const void *operand, void *result )
882{
883 ammunition_integer_not ( size, operand, result );
884}
885
886
887
888/* This page contains functions for comparison of arbitrary precision
889 numbers. */
890
891/* This function compares two unsigned integers of given size on
892 equality. The function returns 1 if unsigned integers are equal, 0
893 otherwise. */
894
895int
896ammunition_eq_unsigned_integer ( int size, const void *op1, const void *op2 )
897{
898 return ammunition_memcmp ( op1, op2, ( size_x ) size ) == 0;
899}
900
901/* This function compares two integers of given size on equality. The
902 function returns 1 if integers are equal, 0 otherwise. */
903
904int
905ammunition_eq_integer ( int size, const void *op1, const void *op2 )
906{
907 return ammunition_memcmp ( op1, op2, ( size_x ) size ) == 0;
908}
909
910/* This function compares two unsigned integers of given size on
911 inequality. The function returns 1 if unsigned integers are not
912 equal, 0 otherwise. */
913
914int
915ammunition_ne_unsigned_integer ( int size, const void *op1, const void *op2 )
916{
917 return ammunition_memcmp ( op1, op2, ( size_x ) size ) != 0;
918}
919
920/* This function compares two integers of given size on inequality.
921 The function returns 1 if integers are not equal, 0 otherwise. */
922
923int
924ammunition_ne_integer ( int size, const void *op1, const void *op2 )
925{
926 return ammunition_memcmp ( op1, op2, ( size_x ) size ) != 0;
927}
928
929
930/* This function compares two memory parts of given size on that the
931 first operand is greater than the second. The bytes are described
932 as unsigned. The function returns 1 if the first operand is
933 greater than the second, - 1 if the first operand is less than the
934 second, 0 otherwise. */
935
936int ammunition_bytes_comparison ( const void *op1, const void *op2, int size )
937{
938 const unsigned char *str1 = ( unsigned const char * )op1;
939 const unsigned char *str2 = ( unsigned const char * )op2;
940
941 _Pragma( "loopbound min 1 max 4" )
942 while ( size > 0 && *str1 == *str2 ) {
943 str1++;
944 str2++;
945 size--;
946 }
947 if ( size <= 0 )
948 return 0;
949 else
950 if ( *str1 > *str2 )
951 return 1;
952 else
953 return -1;
954}
955
956/* This function compares two unsigned integers of given size on that
957 the first operand is greater than the second. The function returns
958 1 if the first unsigned integer is greater than the second, 0
959 otherwise. */
960
961int
962ammunition_gt_unsigned_integer ( int size, const void *op1, const void *op2 )
963{
964 return ammunition_bytes_comparison ( op1, op2, size ) > 0;
965}
966
967/* This function compares two integers of given size on that the first
968 operand is greater than the second. The function returns 1 if the
969 first integer is greater than the second, 0 otherwise. */
970
971int ammunition_gt_integer ( int size, const void *op1, const void *op2 )
972{
973 if ( INTEGER_SIGN ( op1 ) == 0 ) {
974 if ( INTEGER_SIGN ( op2 ) == 0 )
975 return ammunition_bytes_comparison ( op1, op2, size ) > 0;
976 else
977 return 1; /* TRUE */
978 } else
979 if ( INTEGER_SIGN ( op2 ) == 0 )
980 return 0; /*FALSE*/
981 else
982 return ammunition_bytes_comparison ( op1, op2, size ) > 0;
983}
984
985/* This function compares two unsigned integers of given size on that
986 the first operand is less than the second. The function returns 1
987 if the first unsigned integer is less than the second, 0
988 otherwise. */
989
990int
991ammunition_lt_unsigned_integer ( int size, const void *op1, const void *op2 )
992{
993 return ammunition_bytes_comparison ( op1, op2, size ) < 0;
994}
995
996/* This function compares two integers of given size on that the first
997 operand is less than the second. The function returns 1 if the
998 first integer is less than the second, 0 otherwise. */
999
1000int
1001ammunition_lt_integer ( int size, const void *op1, const void *op2 )
1002{
1003 if ( INTEGER_SIGN ( op1 ) == 0 ) {
1004 if ( INTEGER_SIGN ( op2 ) == 0 )
1005 return ammunition_bytes_comparison ( op1, op2, size ) < 0;
1006 else
1007 return 0; /*FALSE*/
1008 } else
1009 if ( INTEGER_SIGN ( op2 ) == 0 )
1010 return 1; /* TRUE */
1011 else
1012 return ammunition_bytes_comparison ( op1, op2, size ) < 0;
1013}
1014
1015/* This function compares two unsigned integers of given size on that
1016 the first operand is greater than or equal to the second. The
1017 function returns 1 if the first unsigned integer is greater than or
1018 equal to the second, 0 otherwise. */
1019
1020int
1021ammunition_ge_unsigned_integer ( int size, const void *op1, const void *op2 )
1022{
1023 return ammunition_bytes_comparison ( op1, op2, size ) >= 0;
1024}
1025
1026/* This function compares two integers of given size on that the first
1027 operand is greater than or equal to the second. The function
1028 returns 1 if the first integer is greater than or equal to the
1029 second, 0 otherwise. */
1030
1031int
1032ammunition_ge_integer ( int size, const void *op1, const void *op2 )
1033{
1034 if ( INTEGER_SIGN ( op1 ) == 0 ) {
1035 if ( INTEGER_SIGN ( op2 ) == 0 )
1036 return ammunition_bytes_comparison ( op1, op2, size ) >= 0;
1037 else
1038 return 1; /* TRUE */
1039 } else
1040 if ( INTEGER_SIGN ( op2 ) == 0 )
1041 return 0; /*FALSE*/
1042 else
1043 return ammunition_bytes_comparison ( op1, op2, size ) >= 0;
1044}
1045
1046/* This function compares two unsigned integers of given size on that
1047 the first operand is less than or equal to the second. The
1048 function returns 1 if the first unsigned integer is less than or
1049 equal to the second, 0 otherwise. */
1050
1051int
1052ammunition_le_unsigned_integer ( int size, const void *op1, const void *op2 )
1053{
1054 return ammunition_bytes_comparison ( op1, op2, size ) <= 0;
1055}
1056
1057/* This function compares two integers of given size on that the first
1058 operand is less than or equal to the second. The function returns
1059 1 if the first integer is less than or equal to the second, 0
1060 otherwise. */
1061
1062int
1063ammunition_le_integer ( int size, const void *op1, const void *op2 )
1064{
1065 if ( INTEGER_SIGN ( op1 ) == 0 ) {
1066 if ( INTEGER_SIGN ( op2 ) == 0 )
1067 return ammunition_bytes_comparison ( op1, op2, size ) <= 0;
1068 else
1069 return 0; /*FALSE*/
1070 } else
1071 if ( INTEGER_SIGN ( op2 ) == 0 )
1072 return 1; /* TRUE */
1073 else
1074 return ammunition_bytes_comparison ( op1, op2, size ) <= 0;
1075}
1076
1077
1078
1079/* This page contains functions for changing size of arbitrary
1080 precision numbers. */
1081
1082/* The function changes size of unsigned integer. The function fixes
1083 overflow when result can not be represented by number of given
1084 size. Result can be placed in operand. */
1085
1086void
1087ammunition_change_unsigned_integer_size ( int operand_size, const void *operand,
1088 int result_size, void *result )
1089{
1090 int operand_digit_number;
1091
1092 ammunition_overflow_bit = 0;
1093 if ( operand_size <= result_size ) {
1094 ammunition_memmove ( ( char * ) result + result_size - operand_size,
1095 operand, ( size_x ) operand_size );
1096 ammunition_memset ( result, 0, ( size_x ) ( result_size - operand_size ) );
1097 } else {
1098 _Pragma( "loopbound min 2 max 2" )
1099 for ( operand_digit_number = 0;
1100 operand_digit_number < operand_size - result_size;
1101 operand_digit_number++ ) {
1102 if ( ( ( unsigned char * ) operand ) [operand_digit_number] != 0 ) {
1103 ammunition_overflow_bit = 1;
1104 break;
1105 }
1106 }
1107 ammunition_memmove ( result,
1108 ( char * ) operand + operand_size - result_size,
1109 ( size_x ) result_size );
1110 }
1111 if ( ammunition_overflow_bit )
1112 ammunition_arithmetic_unsigned_overflow_reaction();
1113}
1114
1115/* The function changes size of integer. The function fixes overflow
1116 when result can not be represented by number of given size. Result
1117 can be placed in operand. */
1118
1119void
1120ammunition_change_integer_size ( int operand_size, const void *operand,
1121 int result_size, void *result )
1122{
1123 int operand_digit_number;
1124 int operand_sign;
1125
1126 ammunition_overflow_bit = 0;
1127 operand_sign = INTEGER_SIGN ( operand );
1128 if ( operand_size <= result_size ) {
1129 ammunition_memmove ( ( char * ) result + result_size - operand_size,
1130 operand, ( size_x ) operand_size );
1131 ammunition_memset ( result, ( operand_sign ? UCHAR_MAX : 0 ),
1132 ( size_x ) ( result_size - operand_size ) );
1133 } else {
1134 _Pragma( "loopbound min 2 max 2" )
1135 for ( operand_digit_number = 0;
1136 operand_digit_number < operand_size - result_size;
1137 operand_digit_number++ ) {
1138 if ( ( ( unsigned char * ) operand ) [operand_digit_number]
1139 != ( operand_sign ? UCHAR_MAX : 0 ) ) {
1140 ammunition_overflow_bit = 1;
1141 break;
1142 }
1143 }
1144 ammunition_memmove ( result,
1145 ( char * ) operand + operand_size - result_size,
1146 ( size_x ) result_size );
1147 if ( operand_sign != INTEGER_SIGN ( result ) )
1148 ammunition_overflow_bit = 1;
1149 }
1150 if ( ammunition_overflow_bit )
1151 ammunition_arithmetic_overflow_reaction();
1152}
1153
1154
1155
1156/* This page contains functions for conversion of arbitrary precision
1157 numbers to ascii representation. */
1158
1159/* This function transforms unsigned integer of given size to BASE
1160 ascii representation. BASE should be between 2 and 36 including
1161 them. Digits more 9 are represented by 'a', 'b' etc. Sign is
1162 absent in result string. The function returns the result
1163 string. */
1164
1165char *
1166ammunition_unsigned_integer_to_based_string ( int size, const void *operand,
1167 int base,
1168 char *result )
1169{
1170 int digit_num;
1171 int i;
1172 unsigned long divisable;
1173 unsigned long remainder;
1174 int nonzero_flag;
1175 int length;
1176 int temporary;
1177 unsigned char operand_copy [MAX_INTEGER_OPERAND_SIZE];
1178
1179 ammunition_memcpy ( operand_copy, operand, ( size_x ) size );
1180 length = 0;
1181 _Pragma( "loopbound min 1 max 10" )
1182 do {
1183 nonzero_flag = 0 /* FALSE */;
1184 _Pragma( "loopbound min 2 max 6" )
1185 for ( digit_num = 0, remainder = 0; digit_num < size; digit_num++ ) {
1186 divisable = remainder * ( UCHAR_MAX + 1 ) + operand_copy [digit_num];
1187 remainder = divisable % base;
1188 operand_copy [digit_num] = ( unsigned char ) ( divisable / base );
1189 if ( operand_copy [digit_num] != 0 )
1190 nonzero_flag = 1 /* TRUE */;
1191 }
1192 result [length++] = ( unsigned char ) ( remainder < 10 ? '0' + remainder
1193 : 'a' + remainder - 10 );
1194 } while ( nonzero_flag );
1195 result [length] = '\0';
1196 _Pragma( "loopbound min 0 max 5" )
1197 for ( i = 0; i < length / 2; i++ ) {
1198 temporary = result [i];
1199 result [i] = result [length - i - 1];
1200 result [length - i - 1] = temporary;
1201 }
1202 return result;
1203}
1204
1205
1206/* This function transforms unsigned integer of given size to decimal
1207 ascii representation. Sign is absent in result string. The
1208 function returns the result string. */
1209
1210char *
1211ammunition_unsigned_integer_to_string ( int size, const void *operand,
1212 char *result )
1213{
1214 return ammunition_unsigned_integer_to_based_string ( size, operand, 10,
1215 result );
1216}
1217
1218
1219/* This function transforms integer of given size to BASE ascii
1220 representation. BASE should be between 2 and 36 including them.
1221 Digits more 9 are represented by 'a', 'b' etc. Sign is present in
1222 result string only for negative numbers. The function returns the
1223 result string. */
1224
1225char *
1226ammunition_integer_to_based_string ( int size, const void *operand, int base,
1227 char *result )
1228{
1229 unsigned char operand_copy [MAX_INTEGER_OPERAND_SIZE];
1230
1231 if ( !INTEGER_SIGN ( operand ) )
1232 return ammunition_unsigned_integer_to_based_string ( size, operand, base,
1233 result );
1234 ammunition_memcpy ( operand_copy, operand, ( size_x ) size );
1235 /* May be integer overflow. But result is correct because it is unsigned. */
1236 ammunition_make_complementary_code ( size, operand_copy, operand_copy );
1237 *result = '-';
1238 ammunition_unsigned_integer_to_based_string ( size, operand_copy, base,
1239 result + 1 );
1240 return result;
1241}
1242
1243
1244
1245/* This function transforms integer of given size to decimal ascii
1246 representation. Sign is present in result string only for negative
1247 numbers. The function returns the result string. */
1248
1249char *
1250ammunition_integer_to_string ( int size, const void *operand, char *result )
1251{
1252 return ammunition_integer_to_based_string ( size, operand, 10, result );
1253}
1254
1255/* This page contains functions for conversion of decimal ascii
1256 representation to arbitrary precision numbers. */
1257
1258/* The function adds digit (byte size) to unsigned integer. The
1259 function returns 1 if unsigned integer overflow is fixed, 0
1260 otherwise. */
1261
1262int ammunition_add_digit_to_unsigned_integer_without_overflow_reaction
1263( int size, void *operand, unsigned int digit )
1264{
1265 int digit_num;
1266 unsigned int carry;
1267 unsigned int sum;
1268
1269 _Pragma( "loopbound min 4 max 4" )
1270 for ( digit_num = size - 1, carry = digit; digit_num >= 0;
1271 digit_num-- ) {
1272 sum = ( ( unsigned char * ) operand ) [digit_num] + carry;
1273 if ( sum > UCHAR_MAX ) {
1274 carry = sum / ( UCHAR_MAX + 1 );
1275 sum %= UCHAR_MAX + 1;
1276 } else
1277 carry = 0;
1278 ( ( unsigned char * ) operand ) [digit_num] = sum;
1279 }
1280 return carry != 0;
1281}
1282
1283/* This function transforms source string (decimal ascii
1284 representation without sign) to given size unsigned integer and
1285 returns pointer to first non digit in the source string through a
1286 parameter. If the string started with invalid integer
1287 representation the result will be zero and returns the operand
1288 through the parameter. The function returns 1 if unsigned integer
1289 overflow is fixed, 0 otherwise. */
1290
1291int ammunition_string_to_unsigned_integer_without_overflow_reaction
1292( int size, const char *operand, void *result, char **first_nondigit )
1293{
1294 int overflow_flag;
1295
1296 ammunition_memset ( result, 0, ( size_x ) size );
1297 _Pragma( "loopbound min 0 max 10" )
1298 for ( overflow_flag = 0; ammunition_isdigit ( *operand ); operand++ ) {
1299 overflow_flag
1300 = overflow_flag ||
1301 ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction
1302 ( size, result, 10 );
1303 overflow_flag
1304 = overflow_flag
1305 || ammunition_add_digit_to_unsigned_integer_without_overflow_reaction
1306 ( size, result, *operand - '0' );
1307 }
1308 *first_nondigit = ( char * ) operand;
1309 return overflow_flag;
1310}
1311
1312/* This function skips all white spaces at the begin of source string
1313 and transforms tail of the source string (decimal ascii
1314 representation without sign) to given size unsigned integer with
1315 the aid of function
1316 `string_to_unsigned_integer_without_overflow_reaction'. If the
1317 string started with invalid unsigned integer representation the
1318 result will be zero. The function fixes overflow when result can
1319 not be represented by number of given size. The function returns
1320 address of the first nondigit in the source string. */
1321
1322char *
1323ammunition_unsigned_integer_from_string ( int size, const char *operand,
1324 void *result )
1325{
1326 char *first_nondigit;
1327
1328 _Pragma( "loopbound min 0 max 0" )
1329 while ( ammunition_isspace ( *operand ) )
1330 operand++;
1331 ammunition_overflow_bit
1332 = ammunition_string_to_unsigned_integer_without_overflow_reaction
1333 ( size, operand, result, &first_nondigit );
1334 if ( ammunition_overflow_bit )
1335 ammunition_arithmetic_unsigned_overflow_reaction();
1336 return first_nondigit;
1337}
1338
1339/* This function skips all white spaces at the begin of source string
1340 and transforms tail of the source string (decimal ascii
1341 representation with possible sign `+' or `-') to given size integer
1342 with the aid of function
1343 `string_to_unsigned_integer_without_overflow_reaction'. If the
1344 string started with invalid integer representation the result will
1345 be zero. The function fixes overflow when result can not be
1346 represented by number of given size. the function returns Address
1347 of the first nondigit in the source string. */
1348
1349char *
1350ammunition_integer_from_string ( int size, const char *operand, void *result )
1351{
1352 int negative_number_flag;
1353 char *first_nondigit;
1354 int unsigned_result_sign;
1355
1356 _Pragma( "loopbound min 0 max 0" )
1357 while ( ammunition_isspace ( *operand ) )
1358 operand++;
1359 negative_number_flag = 0; /* FALSE */
1360 if ( *operand == '+' )
1361 operand++;
1362 else
1363 if ( *operand == '-' ) {
1364 operand++;
1365 negative_number_flag = 1; /* TRUE */
1366 }
1367 ammunition_overflow_bit
1368 = ammunition_string_to_unsigned_integer_without_overflow_reaction
1369 ( size, operand, result, &first_nondigit );
1370 unsigned_result_sign = INTEGER_SIGN ( result );
1371 if ( negative_number_flag )
1372 /* May be integer overflow when `result' is correct. But result
1373 is correct because it is unsigned. */
1374 ammunition_make_complementary_code ( size, result, result );
1375 ammunition_overflow_bit
1376 = ammunition_overflow_bit
1377 || ( unsigned_result_sign
1378 && ( !negative_number_flag
1379 || INTEGER_SIGN ( result ) != unsigned_result_sign ) );
1380 if ( ammunition_overflow_bit )
1381 ammunition_arithmetic_unsigned_overflow_reaction();
1382 return first_nondigit;
1383}
1384
diff --git a/baseline/source/ammunition/arithm.h b/baseline/source/ammunition/arithm.h
new file mode 100644
index 0000000..8ed78bf
--- /dev/null
+++ b/baseline/source/ammunition/arithm.h
@@ -0,0 +1,123 @@
1/*
2 FILE NAME: arithm.h
3
4 TITLE: Include file of package for arbitrary precision integer
5 arithmetic
6
7 DESCRIPTION: This header file contains ANSI C prototype definitions of
8 the package functions and definitions of external
9 variable of the package and C++ classes for arbitrary
10 precision integer arithmetic.
11
12*/
13
14
15#ifndef __ARITHMETIC__
16#define __ARITHMETIC__
17
18#include "ammunition_limits.h"
19
20
21/* This page contains definitions of variables and macros common for
22 all package functions. */
23
24/* The value of macro is suggested to be maximum length of integer operands
25 The length of use integers should be not greater than this value. */
26
27#define MAX_INTEGER_OPERAND_SIZE 128
28
29/* The following macro value is sign of integer number (0 or 1) given
30 as macro parameter. */
31
32#define INTEGER_SIGN(operand) (*(unsigned char *) (operand) >> (CHAR_BIT - 1))
33
34extern int ammunition_overflow_bit;
35
36extern void ammunition_add_unsigned_integer ( int size, const void *op1,
37 const void *op2,
38 void *result );
39extern void ammunition_add_integer ( int size, const void *op1, const void *op2,
40 void *result );
41extern void ammunition_subtract_unsigned_integer ( int size, const void *op1,
42 const void *op2, void *result );
43extern void ammunition_subtract_integer ( int size, const void *op1,
44 const void *op2,
45 void *result );
46extern void ammunition_multiply_unsigned_integer ( int size, const void *op1,
47 const void *op2, void *result );
48extern void ammunition_multiply_integer ( int size, const void *op1,
49 const void *op2,
50 void *result );
51extern void ammunition_divide_unsigned_integer ( int size, const void *op1,
52 const void *op2, void *result );
53extern void ammunition_divide_integer ( int size, const void *op1,
54 const void *op2,
55 void *result );
56extern void ammunition_unsigned_integer_remainder ( int size, const void *op1,
57 const void *op2, void *result );
58
59extern void ammunition_unsigned_integer_shift_right ( int size,
60 const void *operand,
61 int bits, void *result );
62extern void ammunition_integer_shift_right ( int size, const void *operand,
63 int bits, void *result );
64extern void ammunition_integer_shift_left ( int size, const void *operand,
65 int bits, void *result );
66extern void ammunition_unsigned_integer_shift_left ( int size,
67 const void *operand,
68 int bits, void *result );
69
70extern void ammunition_integer_or ( int size, const void *op1,
71 const void *op2, void *result );
72extern void ammunition_unsigned_integer_or ( int size, const void *op1,
73 const void *op2, void *result );
74extern void ammunition_integer_and ( int size, const void *op1,
75 const void *op2, void *result );
76extern void ammunition_unsigned_integer_and ( int size, const void *op1,
77 const void *op2, void *result );
78extern void ammunition_integer_not ( int size, const void *operand,
79 void *result );
80extern void ammunition_unsigned_integer_not ( int size, const void *operand,
81 void *result );
82
83extern int ammunition_eq_unsigned_integer ( int size, const void *op1,
84 const void *op2 );
85extern int ammunition_eq_integer ( int size, const void *op1, const void *op2 );
86extern int ammunition_ne_unsigned_integer ( int size, const void *op1,
87 const void *op2 );
88extern int ammunition_ne_integer ( int size, const void *op1, const void *op2 );
89extern int ammunition_gt_unsigned_integer ( int size, const void *op1,
90 const void *op2 );
91extern int ammunition_gt_integer ( int size, const void *op1, const void *op2 );
92extern int ammunition_lt_unsigned_integer ( int size, const void *op1,
93 const void *op2 );
94extern int ammunition_lt_integer ( int size, const void *op1, const void *op2 );
95extern int ammunition_ge_unsigned_integer ( int size, const void *op1,
96 const void *op2 );
97extern int ammunition_ge_integer ( int size, const void *op1, const void *op2 );
98extern int ammunition_le_unsigned_integer ( int size, const void *op1,
99 const void *op2 );
100extern int ammunition_le_integer ( int size, const void *op1, const void *op2 );
101
102extern void ammunition_change_unsigned_integer_size
103( int operand_size, const void *operand, int result_size, void *result );
104extern void ammunition_change_integer_size ( int operand_size,
105 const void *operand,
106 int result_size, void *result );
107
108extern char *ammunition_unsigned_integer_to_string ( int size,
109 const void *operand,
110 char *result );
111extern char *ammunition_integer_to_string ( int size, const void *operand,
112 char *result );
113
114extern char *ammunition_unsigned_integer_from_string ( int size,
115 const char *operand,
116 void *result );
117extern char *ammunition_integer_from_string ( int size, const char *operand,
118 void *result );
119
120char ammunition_isdigit( unsigned char c );
121int ammunition_isspace( int c );
122
123#endif /* #ifndef __ARITHMETIC__ */
diff --git a/baseline/source/ammunition/bits.c b/baseline/source/ammunition/bits.c
new file mode 100644
index 0000000..9169656
--- /dev/null
+++ b/baseline/source/ammunition/bits.c
@@ -0,0 +1,313 @@
1/*
2
3 FILE NAME: bits.c
4
5 TITLE: Package for work with bits
6
7 DESCRIPTION: This file implements functions of the package for work
8 with bit strings. A bit is given by address (start address) of
9 byte from which counting bits starts and its displacement which
10 is any non negative number of bit from the start address. The
11 most significant bit of the start address byte has number 0.
12 The bit string is given by its first bit and its length in
13 bits.
14
15*/
16
17#include "bits.h"
18
19/* This function determines that given bit string contains only zero
20 bits. The function retruns TRUE if all bits of given bit string
21 are zero or `bit_length' <= 0. Value of `bit_displacement' must be
22 non-negative and can be greater than CHAR_BIT. */
23
24int
25ammunition_is_zero_bit_string ( const void *start_byte, int bit_displacement,
26 int bit_length )
27{
28 const unsigned char *current_byte = ( unsigned const char * )start_byte;
29
30 if ( bit_length <= 0 )
31 return 1 /* TRUE */;
32 current_byte += bit_displacement / CHAR_BIT;
33 bit_displacement %= CHAR_BIT;
34 if ( bit_length < CHAR_BIT - bit_displacement )
35 return ( ( ( *current_byte << bit_displacement )
36 & ( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) )
37 & UCHAR_MAX ) == 0;
38 else
39 if ( bit_displacement != 0 ) {
40 if ( ( ( *current_byte << bit_displacement ) & UCHAR_MAX ) != 0 )
41 return 0 /* FALSE */;
42 current_byte += 1;
43 bit_length -= CHAR_BIT - bit_displacement;
44 }
45 _Pragma( "loopbound min 0 max 7" )
46 while ( bit_length >= CHAR_BIT ) {
47 if ( *current_byte != 0 )
48 return 0 /* FALSE */;
49 current_byte++;
50 bit_length -= CHAR_BIT;
51 }
52 if ( bit_length > 0 && ( *current_byte >> ( CHAR_BIT - bit_length ) ) != 0 )
53 return 0 /* FALSE */;
54 return 1 /* TRUE */;
55}
56
57/* This function sets up new value of all bits of given bit string.
58 This function is analog of standard C function `memset'. Value of
59 `bit_displacement' must be non-negative and can be greater than
60 CHAR_BIT. */
61
62void
63ammunition_bit_string_set ( void *start_byte, int bit_displacement, int bit,
64 int bit_length )
65{
66 unsigned char *current_byte = ( unsigned char * )start_byte;
67 unsigned char filling_byte;
68 int mask;
69
70 if ( bit_length <= 0 )
71 return ;
72 bit = bit != 0; /* 1 or 0 */
73 filling_byte = ( bit ? UCHAR_MAX : 0 );
74 current_byte += bit_displacement / CHAR_BIT;
75 bit_displacement %= CHAR_BIT;
76 if ( bit_displacement != 0 ) {
77 mask = UCHAR_MAX << ( CHAR_BIT - bit_displacement );
78 if ( bit_length < CHAR_BIT - bit_displacement )
79 mask |= UCHAR_MAX >> ( bit_displacement + bit_length );
80 *current_byte = ( *current_byte & mask ) | ( filling_byte & ~mask );
81 current_byte += 1;
82 bit_length -= CHAR_BIT - bit_displacement;
83 }
84 _Pragma( "loopbound min 0 max 8" )
85 while ( bit_length >= CHAR_BIT ) {
86 *current_byte = filling_byte;
87 current_byte++;
88 bit_length -= CHAR_BIT;
89 }
90 if ( bit_length > 0 )
91 *current_byte
92 = ( *current_byte & ~( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) )
93 | ( filling_byte & ( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) );
94}
95
96/* This function copys a bit string to another bit string. This
97 function is analog of standard C function `memcpy'. Values of
98 `to_bit_displacement' and `from_bit_displacement' must be
99 non-negative and can be greater than CHAR_BIT. The bit string must
100 be non-overlapped. */
101
102void
103ammunition_bit_string_copy ( void *to, int to_bit_displacement,
104 const void *from, int from_bit_displacement,
105 int bit_length )
106{
107 unsigned char *current_to_byte = ( unsigned char * )to;
108 const unsigned char *current_from_byte = ( unsigned const char * )from;
109 int byte;
110 int mask;
111
112 if ( bit_length <= 0 )
113 return ;
114 current_to_byte += to_bit_displacement / CHAR_BIT;
115 to_bit_displacement %= CHAR_BIT;
116 current_from_byte += from_bit_displacement / CHAR_BIT;
117 from_bit_displacement %= CHAR_BIT;
118 _Pragma( "loopbound min 1 max 8" )
119 while ( 1 ) {
120 byte = ( ( ( *current_from_byte << from_bit_displacement ) & UCHAR_MAX )
121 | ( from_bit_displacement != 0
122 && bit_length > ( CHAR_BIT - from_bit_displacement )
123 ? current_from_byte [1] >> ( CHAR_BIT - from_bit_displacement )
124 : 0 ) );
125 if ( bit_length <= CHAR_BIT )
126 break;
127 /* Shift is correct when to_bit_displacement == 0 because its
128 value is less than word bit size. */
129 *current_to_byte
130 = ( *current_to_byte
131 & ( UCHAR_MAX << ( CHAR_BIT - to_bit_displacement ) ) )
132 | ( byte >> to_bit_displacement );
133 if ( to_bit_displacement != 0 )
134 current_to_byte [1]
135 = ( current_to_byte [1] & ( UCHAR_MAX >> to_bit_displacement ) )
136 | ( byte << ( CHAR_BIT - to_bit_displacement ) );
137 bit_length -= CHAR_BIT;
138 current_from_byte++;
139 current_to_byte++;
140 }
141 /* Shift is correct when to_bit_displacement == 0 because its
142 value is less than word bit size. */
143 mask = ( ( UCHAR_MAX << ( CHAR_BIT - to_bit_displacement ) )
144 | ( UCHAR_MAX >> ( to_bit_displacement + bit_length ) ) );
145 *current_to_byte
146 = ( *current_to_byte & mask ) | ( ( byte >> to_bit_displacement ) & ~mask );
147 bit_length -= CHAR_BIT - to_bit_displacement;
148 if ( bit_length > 0 )
149 current_to_byte [1]
150 = ( current_to_byte [1] & ( UCHAR_MAX >> bit_length ) )
151 | ( ( byte << ( CHAR_BIT - to_bit_displacement ) )
152 & ( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) );
153}
154
155/* This function copys a bit string to another bit string. Copying
156 starts with the last bits of the bit strings. This function is
157 used by function `bit_string_move'. Values of
158 `to_bit_displacement' and `from_bit_displacement' must be
159 non-negative and can be greater than CHAR_BIT. The bit string must
160 be non-overlapped. */
161
162void ammunition_reverse_bit_string_copy ( void *to, int to_bit_displacement,
163 const void *from, int from_bit_displacement,
164 int bit_length )
165{
166 unsigned char *current_to_byte = ( unsigned char * )to;
167 const unsigned char *current_from_byte = ( unsigned const char * )from;
168 int byte;
169 int mask;
170
171 if ( bit_length <= 0 )
172 return ;
173 to_bit_displacement += bit_length - 1;
174 current_to_byte += to_bit_displacement / CHAR_BIT; /* last byte */
175 to_bit_displacement %= CHAR_BIT; /* last bit */
176 from_bit_displacement += bit_length - 1;
177 current_from_byte += from_bit_displacement / CHAR_BIT; /* last byte */
178 from_bit_displacement %= CHAR_BIT; /* last bit */
179 _Pragma( "loopbound min 1 max 8" )
180 while ( 1 ) {
181 /* Shift is correct when to_bit_displacement == 0 because its
182 value is less than word bit size. */
183 byte = ( ( *current_from_byte >> ( CHAR_BIT - 1 - from_bit_displacement ) )
184 | ( ( from_bit_displacement != CHAR_BIT - 1
185 && bit_length > from_bit_displacement + 1
186 ? current_from_byte [ -1 ] << ( from_bit_displacement + 1 )
187 : 0 )
188 & UCHAR_MAX ) );
189 if ( bit_length <= CHAR_BIT )
190 break;
191 /* Shift is correct when to_bit_displacement == 0 because its
192 value is less than word bit size. */
193 *current_to_byte
194 = ( *current_to_byte & ( UCHAR_MAX >> ( to_bit_displacement + 1 ) ) )
195 | ( byte << ( CHAR_BIT - 1 - to_bit_displacement ) );
196 if ( to_bit_displacement != CHAR_BIT - 1 )
197 current_to_byte [-1]
198 = ( current_to_byte [-1]
199 & ( UCHAR_MAX << ( CHAR_BIT - 1 - to_bit_displacement ) ) )
200 | ( byte >> ( to_bit_displacement + 1 ) );
201 bit_length -= CHAR_BIT;
202 current_from_byte--;
203 current_to_byte--;
204 }
205 /* Shift is correct when to_bit_displacement == 0 because its
206 value is less than word bit size. */
207 mask = ( ( UCHAR_MAX >> ( to_bit_displacement + 1 ) ) |
208 ( UCHAR_MAX << ( CHAR_BIT - 1 - to_bit_displacement
209 + bit_length ) ) );
210 *current_to_byte
211 = ( *current_to_byte & mask )
212 | ( ( byte << ( CHAR_BIT - 1 - to_bit_displacement ) ) & ~mask );
213 bit_length -= to_bit_displacement + 1;
214 if ( bit_length > 0 )
215 current_to_byte [-1]
216 = ( current_to_byte [-1] & ( UCHAR_MAX << bit_length ) )
217 | ( byte >> ( to_bit_displacement + 1 )
218 & ( UCHAR_MAX >> ( CHAR_BIT - bit_length ) ) );
219}
220
221/* This function copys a bit string to another bit string with the aid
222 of functions `bit_string_copy' and `reverse_bit_string_copy'. This
223 function is analog of standard C function `memmove'. Values of
224 `to_bit_displacement' and `from_bit_displacement' must be
225 non-negative and can be greater than CHAR_BIT. The bit string can
226 be overlapped. */
227
228void
229ammunition_bit_string_move ( void *to, int to_bit_displacement,
230 const void *from, int from_bit_displacement,
231 int bit_length )
232{
233 unsigned char *current_to_byte = ( unsigned char * )to;
234 const unsigned char *current_from_byte = ( unsigned const char * )from;
235
236 if ( bit_length <= 0 )
237 return ;
238 current_to_byte += to_bit_displacement / CHAR_BIT;
239 to_bit_displacement %= CHAR_BIT;
240 current_from_byte += from_bit_displacement / CHAR_BIT;
241 from_bit_displacement %= CHAR_BIT;
242 if ( current_from_byte > current_to_byte
243 || ( current_from_byte == current_to_byte
244 && from_bit_displacement > to_bit_displacement ) )
245 ammunition_bit_string_copy ( current_to_byte, to_bit_displacement,
246 current_from_byte, from_bit_displacement,
247 bit_length );
248 else
249 ammunition_reverse_bit_string_copy ( current_to_byte, to_bit_displacement,
250 current_from_byte,
251 from_bit_displacement, bit_length );
252}
253
254/* This function compares bit strings. This function is analog of
255 standard C function `memcmp'. The function returns 0 if the bit
256 strings are equal, 1 if the first bit string is greater than the
257 second, -1 if the first bit string is less than the first. Values
258 of `bit_displacement1' and `bit_displacement2' must be non-negative
259 and can be greater than CHAR_BIT. */
260
261int
262ammunition_bit_string_comparison ( const void *str1, int bit_displacement1,
263 const void *str2, int bit_displacement2,
264 int bit_length )
265{
266 const unsigned char *current_byte1 = ( unsigned const char * )str1;
267 const unsigned char *current_byte2 = ( unsigned const char * )str2;
268 int byte1;
269 int byte2;
270 int mask;
271
272 if ( bit_length <= 0 )
273 return 0;
274 current_byte1 += bit_displacement1 / CHAR_BIT;
275 bit_displacement1 %= CHAR_BIT;
276 current_byte2 += bit_displacement2 / CHAR_BIT;
277 bit_displacement2 %= CHAR_BIT;
278 _Pragma( "loopbound min 1 max 284" )
279 while ( 1 ) {
280 byte1 = ( ( ( *current_byte1 << bit_displacement1 ) & UCHAR_MAX )
281 | ( bit_displacement1 != 0
282 /* Shift is correct when to_bit_displacement == 0
283 because its value is less than word bit size. */
284 && bit_length > CHAR_BIT - bit_displacement1
285 ? current_byte1 [1] >> ( CHAR_BIT - bit_displacement1 )
286 : 0 ) );
287 byte2 = ( ( ( *current_byte2 << bit_displacement2 ) & UCHAR_MAX )
288 | ( bit_displacement2 != 0
289 && bit_length > CHAR_BIT - bit_displacement2
290 ? current_byte2 [1] >> ( CHAR_BIT - bit_displacement2 )
291 : 0 ) );
292 if ( bit_length <= CHAR_BIT )
293 break;
294 if ( byte1 > byte2 )
295 return 1;
296 else
297 if ( byte1 < byte2 )
298 return -1;
299 bit_length -= CHAR_BIT;
300 current_byte2++;
301 current_byte1++;
302 }
303 /* Shift is correct when to_bit_displacement == 0 because its value
304 is less than word bit size. */
305 mask = UCHAR_MAX << ( CHAR_BIT - bit_length );
306 if ( ( byte1 & mask ) > ( byte2 & mask ) )
307 return 1;
308 else
309 if ( ( byte1 & mask ) < ( byte2 & mask ) )
310 return -1;
311 else
312 return 0;
313}
diff --git a/baseline/source/ammunition/bits.h b/baseline/source/ammunition/bits.h
new file mode 100644
index 0000000..70cf8bd
--- /dev/null
+++ b/baseline/source/ammunition/bits.h
@@ -0,0 +1,60 @@
1/*
2 FILE NAME: bits.h
3
4 TITLE: Include file of package for work with bits
5
6 DESCRIPTION:
7 This is header file contains macros and the ANSI C prototype
8 definitions for the package for work with bits and bit strings
9 and C++ class for work with bits and bit strings. A bit is
10 given by address (start address) of byte from which counting
11 bits starts and its displacement which is any non negative
12 number of bit from the start address. The most significant bit
13 of the start address byte has number 0. The bit string is
14 given by its first bit and its length in bits.
15
16*/
17
18#ifndef __BITS__
19#define __BITS__
20
21#include "ammunition_limits.h"
22
23/* This macro value returns bit vlaue (0 or 1) with given bit
24 displacement (0, 1, ...). The macro has side effects! Value of
25 `bit_displacement' must be nonegative and can be greater than
26 CHAR_BIT. */
27
28#define BIT(start_byte, bit_displacement)\
29 ((((const char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
30 >> (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)) & 1)
31
32
33/* This macro value sets up new value (must be `0' or `1') of a given
34 bit (bit displacement starts with 0). The macro has side effects!
35 Value of `bit_displacement' must be nonegative and can be greater
36 than CHAR_BIT. */
37
38#define SET_BIT(start_byte, bit_displacement, bit)\
39 (((char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
40 = (((char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
41 & ~(1 << (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)))\
42 | ((bit) << (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)))
43
44int ammunition_is_zero_bit_string ( const void *start_byte,
45 int bit_displacement,
46 int bit_length );
47void ammunition_bit_string_set ( void *start_byte, int bit_displacement,
48 int bit,
49 int bit_length );
50void ammunition_bit_string_copy ( void *to, int to_bit_displacement,
51 const void *from, int from_bit_displacement,
52 int bit_length );
53void ammunition_bit_string_move ( void *to, int to_bit_displacement,
54 const void *from, int from_bit_displacement,
55 int bit_length );
56int ammunition_bit_string_comparison ( const void *str1, int bit_displacement1,
57 const void *str2, int bit_displacement2,
58 int bit_length );
59
60#endif /* #ifndef __BITS__ */
diff --git a/baseline/source/ammunition/gmon.out b/baseline/source/ammunition/gmon.out
new file mode 100644
index 0000000..2d07b7f
--- /dev/null
+++ b/baseline/source/ammunition/gmon.out
Binary files differ
diff --git a/baseline/source/ammunition/timeScript b/baseline/source/ammunition/timeScript
new file mode 100644
index 0000000..33ba812
--- /dev/null
+++ b/baseline/source/ammunition/timeScript
@@ -0,0 +1,8 @@
1#!/bin/bash
2startTime=$(date +%N)
3echo start time $startTime
4$1
5stopTime=$(date +%N)
6echo stop time $stopTime
7totalTime=`expr $stopTime - $startTime`
8echo total time $totalTime
diff --git a/baseline/source/anagram/ChangeLog.txt b/baseline/source/anagram/ChangeLog.txt
new file mode 100644
index 0000000..fdba1cc
--- /dev/null
+++ b/baseline/source/anagram/ChangeLog.txt
@@ -0,0 +1,125 @@
1File: anagram.c
2Original provenience: unknown
3Source: unknown
4
52017-04-18:
6- Annotated anagram_main as entry-point for timing analysis
7
82016-06-22:
9- Fixed type signature of function anagram_main to conform to TACLeBench
10 standard, i.e. `void anagram_main (void)`.
11
122016-05-24:
13- Changed type of global variables anagram_achPhrase and
14 anagram_dictionary to `char const *[]`.
15- Changed parameter type of function anagram_BuildMask to
16 `char const *`.
17
182016-04-26:
19- Fixed array out-of-bounds access introduced by earlier change.
20
212016-04-20:
22- Fixed some compiler warnings.
23- Return value of anagram_return depends on the computation inside
24 of anagram_main.
25
262016-03-22
27- Added forward declarations for all functions.
28- Renamed function main to anagram_main.
29- Added function anagram_init that calls anagram_ReadDict, removed
30 call to anagram_ReadDict from anagram_main.
31- Added function anagram_return that handles the return value.
32- Added new function main that first calls anagram_init,
33 then anagram_main and finally returns the return value of
34 anagram_return.
35- Added generic TACLeBench header to all files.
36- Introduced comments to split file in sections for type
37 definitions, forward declarations, global variables,
38 initialization-related and return-value-related functions,
39 core benchmark functions, and main routine.
40- Renamed ch2i, DICTWORDS, Quad, MASK_BITS, MAX_QUADS, MAXCAND,
41 MAXSOL, ALPHABET, Word, PWord, PPWord, apwCand, cpwCand, Letter,
42 PLetter, alPhrase, cchPhraseLength, aqMainMask, aqMainSign,
43 cchMinLength, auGlobalFrequency, achByFrequency, pchDictionary,
44 Reset, ReadDict, BuildMask, NewWord, NextWord, BuildWord,
45 AddWords, apwSol, cpwLast, OneStep, DumpWords, FindAnagram and
46 SortCandidates to anagram_ch2i, anagram_DICTWORDS, anagram_Quad,
47 anagram_MASK_BITS, anagram_MAX_QUADS, anagram_MAXCAND,
48 anagram_MAXSOL, anagram_ALPHABET, anagram_Word, anagram_PWord,
49 anagram_PPWord, anagram_apwCand, anagram_cpwCand, anagram_Letter,
50 anagram_PLetter, anagram_alPhrase, anagram_cchPhraseLength,
51 anagram_aqMainMask, anagram_aqMainSign, anagram_cchMinLength,
52 anagram_auGlobalFrequency, anagram_achByFrequency,
53 anagram_pchDictionary, anagram_Reset, anagram_ReadDict,
54 anagram_BuildMask, anagram_NewWord, anagram_NextWord,
55 anagram_BuildWord, anagram_AddWords, anagram_apwSol,
56 anagram_cpwLast, anagram_OneStep, anagram_DumpWords,
57 anagram_FindAnagram and anagram_SortCandidates.
58- Renamed swapi, pivot, qsorts, simulated_heap and freeHeapPos to
59 anagram_swapi, anagram_pivot, anagram_qsorts,
60 anagram_simulated_heap and anagram_freeHeapPos.
61- Renamed achPhrase and dictionary to anagram_achPhrase and
62 anagram_dictionary.
63- Renamed CompareFrequency to anagram_CompareFrequency.
64- Increased simulated heap in anagram_stdlib.c to 18000 bytes to
65 prevent segmentation fault.
66- Changed header guard _WCCMALLOC_H to ANAGRAM_STRINGS_H.
67- Renamed wccmalloc, wccbzero to anagram_malloc, anagram_bzero.
68- Moved declaration of anagram_malloc to header anagram_stdlib.h.
69- Introduced header guard ANAGRAM_CTYPE_H.
70- Renamed wccislower, wccisupper, wccisalpha, wcctolower to
71 anagram_islower, anagram_isupper, anagram_isalpha,
72 anagram_tolower.
73- Removed illegal keyword "inline".
74- Changed header guard _WCCSTDLIB_H to ANAGRAM_STDLIB_H.
75- Renamed wccqsort to anagram_qsort.
76- Fixed compiler warning "no previous extern declaration for
77 non-static variable" for variables simulated_heap and
78 freeHeapPos by declaring them static.
79- Renamed preprocessor define HEAP_SIZE to ANAGRAM_HEAP_SIZE.
80- Fixed compiler warning "no previous prototype for function" by
81 moving includes to the top of the file.
82- Fixed compiler warnings "implicit conversion changes signedness"
83 and "comparison of integers of different signs" by consistenly
84 using the type unsigned long in qsort helper functions.
85- Moved function CompareFrequency to file anagram.c, added
86 declaration for it in file anagram_compare.h and included it in
87 anagram_stdlib.h.
88- Fixed compiler warning "no previous extern declaration for
89 non-static variable" by adding forward declarations.
90- Fixed compiler warning "macro is not used" by removing unused
91 macros MAXWORDS and i2ch.
92- Replaced macro ch2i by proper function.
93- Fixed compiler warning "array subscript is of type 'char' in
94 function CompareFrequency.
95- Fixed compiler warning "unused variable" by removing variable i
96 in function Reset.
97- Fixed compiler warning "no previous extern declaration for
98 non-static variable" by making global variables in file
99 anagram.c static.
100- Replaced macro lPhrase by its expansion.
101- Fixed compiler warnings "implicit conversion loses integer
102 precision" and "implicit conversion changes signedness" by
103 adding explicit casts or using the appropriate type for local
104 variables.
105- Fixed compiler warning "array subscript is of type 'char'" by
106 changing type of some local variables as well as of global
107 variable achByFrequency to int.
108- Changed all //-style comments to /* */-style comments.
109- Moved contents of wccmalloc.c to anagram_stdlib.c.
110- Renamed input.c to anagram_input.c.
111- Renamed wccctype.h to anagram_ctype.h.
112- Renamed wccstdlib.c to anagram_stdlib.c.
113- Renamed wccstdlib.h to anagram_stdlib.h.
114- Renamed wccmalloc.h to anagram_strings.h.
115- Applied TACLeBench formatting rules via
116 astyle --options=doc/example/astylerc.txt
117- Tested conformance to C99 via
118 clang -fsyntax-only -Weverything -Wno-unknown-pragmas -Wno-padded -pedantic -std=c99
119
1202017-06-27
121- Remove static declarations.
122
1232017-07-10:
124- Adjust alignment calculation in anagram_malloc to not add padding on already
125 aligned addresses. This prevents a buffer overflow of anagram_simulated_heap.
diff --git a/baseline/source/anagram/anagram.c b/baseline/source/anagram/anagram.c
new file mode 100644
index 0000000..8f140a3
--- /dev/null
+++ b/baseline/source/anagram/anagram.c
@@ -0,0 +1,670 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram
7
8 Author: Raymond Chen
9
10 Function: A program that computes anagrams.
11
12 Source: See below.
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See below.
19
20*/
21
22/*
23 Anagram program by Raymond Chen,
24 inspired by a similar program by Brian Scearce
25
26 This program is Copyright 1991 by Raymond Chen.
27 (rjc@math.princeton.edu)
28
29 This program may be freely distributed provided all alterations
30 to the original are clearly indicated as such.
31*/
32
33/* There are two tricks. First is the Basic Idea:
34
35 When the user types in a phrase, the phrase is first preprocessed to
36 determine how many of each letter appears. A bit field is then constructed
37 dynamically, such that each field is large enough to hold the next power
38 of two larger than the number of times the character appears. For example,
39 if the phrase is hello, world, the bit field would be
40
41 00 00 00 000 000 00 00
42 d e h l o r w
43
44 The phrase hello, world, itself would be encoded as
45
46 01 01 01 011 010 01 01
47 d e h l o r w
48
49 and the word hollow would be encoded as
50
51 00 00 01 010 010 00 01
52 d e h l o r w
53
54 The top bit of each field is set in a special value called the sign.
55 Here, the sign would be
56
57 10 10 10 100 100 10 10
58 d e h l o r w
59
60
61 The reason for packing the values into a bit field is that the operation
62 of subtracting out the letters of a word from the current phrase can be
63 carried out in parallel. for example, subtracting the word hello from
64 the phrase hello, world, is merely
65
66 d e h l o r w
67 01 01 01 011 010 01 01 (dehllloorw)
68 - 00 00 01 010 010 00 01 (hlloow)
69 ========================
70 01 01 00 001 000 01 00 (delr)
71
72 Since none of the sign bits is set, the word fits, and we can continue.
73 Suppose the next word we tried was hood.
74
75 d e h l o r w
76 01 01 00 001 000 01 00 (delr)
77 - 01 00 01 000 010 00 00 (hood)
78 ========================
79 00 00 11 000 110 01 00
80 ^ ^
81 A sign bit is set. (Two, actually.) This means that hood does not
82 fit in delr, so we skip it and try another word. (Observe that
83 when a sign bit becomes set, it screws up the values for the letters to
84 the left of that bit, but that's not important.)
85
86 The inner loop of an anagram program is testing to see if a
87 word fits in the collection of untried letters. Traditional methods
88 keep an array of 26 integers, which are then compared in turn. This
89 means that there are 26 comparisons per word.
90
91 This method reduces the number of comparisons to MAX_QUAD, typically 2.
92 Instead of looping through an array, we merely perform the indicated
93 subtraction and test if any of the sign bits is set.
94*/
95
96/* The nuts and bolts:
97
98 The dictionary is loaded and preprocessed. The preprocessed dictionary
99 is a concatenation of copies of the structure:
100
101 struct dictword {
102 char bStructureSize; -- size of this structure
103 char cLetters; -- number of letters in the word
104 char achWord[]; -- the word itself (0-terminated)
105 }
106
107 Since this is a variable-sized structure, we keep its size in the structure
108 itself for rapid stepping through the table.
109
110 When a phrase is typed in, it is first preprocessed as described in the
111 Basic Idea. We then go through the dictionary, testing each word. If
112 the word fits in our phrase, we build the bit field for its frequency
113 table and add it to the list of candidates.
114*/
115
116/*
117 The Second Trick:
118
119 Before diving into our anagram search, we then tabulate how many times
120 each letter appears in our list of candidates, and sort the table, with
121 the rarest letter first.
122
123 We then do our anagram search.
124
125 Like most anagram programs, this program does a depth-first search.
126 Although most anagram programs do some sort of heuristics to decide what
127 order to place words in the list_of_candidates, the search itself proceeds
128 according to a greedy algorithm. That is, once you find a word that fits,
129 subtract it and recurse.
130
131 This anagram program exercises some restraint and does not march down
132 every branch that shows itself. Instead, it only goes down branches
133 that use the rarest unused letter. This helps to find dead ends faster.
134
135 FindAnagram(unused_letters, list_of_candidates) {
136 l = the rarest letter as yet unused
137 For word in list_of_candidates {
138 if word does not fit in unused_letters, go on to the next word.
139 if word does not contain l, defer.
140 FindAnagram(unused_letters - word, list_of_candidates[word,...])
141 }
142 }
143
144
145 The heuristic of the Second Trick can probably be improved. I invite
146 anyone willing to improve it to do so.
147*/
148
149/* Before compiling, make sure Quad and MASK_BITS are set properly. For best
150 results, make Quad the largest integer size supported on your machine.
151 So if your machine has long longs, make Quad an unsigned long long.
152 (I called it Quad because on most machines, the largest integer size
153 supported is a four-byte unsigned long.)
154
155 If you need to be able to anagram larger phrases, increase MAX_QUADS.
156 If you increase it beyond 4, you'll have to add a few more loop unrolling
157 steps to FindAnagram.
158*/
159
160#include "../extra.h"
161#include "anagram_ctype.h"
162#include "anagram_stdlib.h"
163#include "anagram_strings.h"
164
165#include "anagram_compare.h"
166
167
168/*
169 Defines
170*/
171
172#define anagram_DICTWORDS 2279
173#define anagram_MASK_BITS 32 /* number of bits in a Quad */
174#define anagram_MAX_QUADS 2 /* controls largest phrase */
175#define anagram_MAXCAND 100 /* candidates */
176#define anagram_MAXSOL 51 /* words in the solution */
177#define anagram_ALPHABET 26 /* letters in the alphabet */
178
179#define anagram_OneStep( i ) \
180 if ( ( aqNext[ i ] = pqMask[ i ] - pw->aqMask[ i ] ) & anagram_aqMainSign[ i ] ) { \
181 ppwStart ++; \
182 continue; \
183 }
184
185
186/*
187 Type definitions
188*/
189
190typedef unsigned int anagram_Quad; /* for building our bit mask */
191
192/* A Word remembers the information about a candidate word. */
193typedef struct {
194 char *pchWord; /* the word itself */
195 anagram_Quad aqMask[ anagram_MAX_QUADS ]; /* the word's mask */
196 unsigned cchLength; /* letters in the word */
197 char padding[4];
198} anagram_Word;
199typedef anagram_Word *anagram_PWord;
200typedef anagram_Word **anagram_PPWord;
201
202/* A Letter remembers information about each letter in the phrase to
203 be anagrammed. */
204typedef struct {
205 unsigned uFrequency; /* how many times it appears */
206 unsigned uShift; /* how to mask */
207 unsigned uBits; /* the bit mask itself */
208 unsigned iq; /* which Quad to inspect? */
209} anagram_Letter;
210typedef anagram_Letter *anagram_PLetter;
211
212
213/*
214 Forward declaration of functions
215*/
216
217void anagram_init( void );
218void anagram_main( void );
219int anagram_return( void );
220int anagram_ch2i( int ch );
221void anagram_AddWords( void );
222void anagram_BuildMask( char const *pchPhrase );
223void anagram_BuildWord( char *pchWord );
224void anagram_DumpWords( void );
225void anagram_FindAnagram( anagram_Quad *pqMask,
226 anagram_PPWord ppwStart,
227 int iLetter );
228anagram_PWord anagram_NewWord( void );
229anagram_PWord anagram_NextWord( void );
230void anagram_ReadDict( void );
231void anagram_Reset( void );
232void anagram_SortCandidates( void );
233
234
235/*
236 Declaration of global variables
237*/
238
239extern char const *anagram_achPhrase[ 3 ];
240extern char const *anagram_dictionary[ anagram_DICTWORDS ];
241
242/* candidates we've found so far */
243static anagram_PWord anagram_apwCand[ anagram_MAXCAND ];
244/* how many of them? */
245static unsigned anagram_cpwCand;
246
247/* statistics on the current phrase */
248static anagram_Letter anagram_alPhrase[ anagram_ALPHABET ];
249
250/* number of letters in phrase */
251static int anagram_cchPhraseLength;
252
253/* the bit field for the full phrase */
254static anagram_Quad anagram_aqMainMask[ anagram_MAX_QUADS ];
255/* where the sign bits are */
256static anagram_Quad anagram_aqMainSign[ anagram_MAX_QUADS ];
257
258static const int anagram_cchMinLength = 3;
259
260/* auGlobalFrequency counts the number of times each letter appears,
261 summed over all candidate words. This is used to decide which letter
262 to attack first. */
263static unsigned anagram_auGlobalFrequency[ anagram_ALPHABET ];
264static int anagram_achByFrequency[ anagram_ALPHABET ]; /* for sorting */
265
266/* the dictionary is read here */
267static char *anagram_pchDictionary;
268
269/* the answers */
270static anagram_PWord anagram_apwSol[ anagram_MAXSOL ];
271static int anagram_cpwLast;
272
273/* buffer to write an answer */
274static char anagram_buffer[30];
275
276/*
277 Initialization- and return-value-related functions
278*/
279
280/* ReadDict -- read the dictionary file into memory and preprocess it
281
282 A word of length cch in the dictionary is encoded as follows:
283
284 byte 0 = cch + 3
285 byte 1 = number of letters in the word
286 byte 2... = the word itself, null-terminated
287
288 Observe that cch+3 is the length of the total encoding. These
289 byte streams are concatenated, and terminated with a 0.
290*/
291void anagram_ReadDict( void )
292{
293 char *pch;
294 char *pchBase;
295 unsigned len;
296 unsigned cWords = 0;
297 unsigned cLetters;
298 int i;
299 volatile char bitmask = 0;
300
301 len = 0;
302 _Pragma( "loopbound min 2279 max 2279" )
303 for ( i = 0; i < anagram_DICTWORDS; i ++ ) {
304 unsigned strlen = 0;
305 _Pragma( "loopbound min 1 max 5" )
306 while ( anagram_dictionary[ i ][ strlen ] != 0 )
307 strlen ++;
308 len += strlen + 2;
309 }
310
311 pchBase = anagram_pchDictionary = ( char * )anagram_malloc( len );
312
313 _Pragma( "loopbound min 2279 max 2279" )
314 for ( i = 0; i < anagram_DICTWORDS; i ++ ) {
315 int index = 0;
316 pch = pchBase + 2; /* reserve for length */
317 cLetters = 0;
318
319 _Pragma( "loopbound min 1 max 5" )
320 while ( anagram_dictionary[ i ][ index ] != '\0' ) {
321 if ( anagram_isalpha( anagram_dictionary[ i ][ index ] ) )
322 cLetters ++;
323 *pch ++ = anagram_dictionary[ i ][ index ];
324 index ++;
325 *( pch - 1 ) ^= bitmask;
326 }
327 *pch ++ = '\0';
328 *pchBase = ( char )( pch - pchBase );
329 pchBase[ 1 ] = ( char )cLetters;
330 pchBase = pch;
331 cWords ++;
332 }
333
334 *pchBase ++ = 0;
335}
336
337
338void anagram_init( void )
339{
340 anagram_ReadDict();
341}
342
343
344int anagram_return( void )
345{
346 int i;
347 char const *answer = "duke rip amy";
348
349 for ( i = 0; i < 12; i++ )
350 if ( answer[ i ] != anagram_buffer[ i ] )
351 return 1;
352
353 return 0;
354}
355
356
357/*
358 Core benchmark functions
359*/
360
361/* convert letter to index */
362int anagram_ch2i( int ch )
363{
364 return ch - 'a';
365}
366
367
368int anagram_CompareFrequency( char *pch1, char *pch2 )
369{
370 return anagram_auGlobalFrequency[ ( (int) *pch1 ) ] <
371 anagram_auGlobalFrequency[ ( (int) *pch2 ) ]
372 ? -1 :
373 anagram_auGlobalFrequency[ ( (int) *pch1 ) ] ==
374 anagram_auGlobalFrequency[ ( (int) *pch2 ) ]
375 ? 0 : 1;
376}
377
378
379void anagram_Reset( void )
380{
381 anagram_bzero( ( char * )anagram_alPhrase,
382 sizeof( anagram_Letter ) * anagram_ALPHABET );
383 anagram_bzero( ( char * )anagram_aqMainMask,
384 sizeof( anagram_Quad ) * anagram_MAX_QUADS );
385 anagram_bzero( ( char * )anagram_aqMainSign,
386 sizeof( anagram_Quad ) * anagram_MAX_QUADS );
387 anagram_bzero( ( char * )anagram_auGlobalFrequency,
388 sizeof( unsigned ) * anagram_ALPHABET );
389 anagram_bzero( ( char * )anagram_achByFrequency,
390 sizeof( int ) * anagram_ALPHABET );
391 anagram_bzero( ( char * )anagram_apwCand,
392 sizeof( anagram_PWord ) * anagram_MAXCAND );
393 anagram_cchPhraseLength = 0;
394 anagram_cpwCand = 0;
395}
396
397
398void anagram_BuildMask( char const *pchPhrase )
399{
400 int i;
401 int ch;
402 unsigned iq; /* which Quad? */
403 unsigned int cbtUsed; /* bits used in the current Quad */
404 unsigned int cbtNeed; /* bits needed for current letter */
405 anagram_Quad qNeed; /* used to build the mask */
406
407 /* Tabulate letter frequencies in the phrase */
408 anagram_cchPhraseLength = 0;
409 _Pragma( "loopbound min 11 max 12" )
410 while ( ( ch = *pchPhrase ++ ) != '\0' ) {
411 if ( anagram_isalpha( ch ) ) {
412 ch = anagram_tolower( ch );
413 anagram_alPhrase[ anagram_ch2i( ch ) ].uFrequency ++;
414 anagram_cchPhraseLength ++;
415 }
416 }
417
418 /* Build masks */
419 iq = 0; /* which quad being used */
420 cbtUsed = 0; /* bits used so far */
421
422 _Pragma( "loopbound min 26 max 26" )
423 for ( i = 0; i < anagram_ALPHABET; i ++ ) {
424 if ( anagram_alPhrase[ i ].uFrequency == 0 ) {
425 anagram_auGlobalFrequency[ i ] = ~0u; /* to make it sort last */
426 } else {
427 anagram_auGlobalFrequency[ i ] = 0u;
428 _Pragma( "loopbound min 1 max 2" )
429 for ( cbtNeed = 1, qNeed = 1;
430 anagram_alPhrase[ i ].uFrequency >= qNeed;
431 cbtNeed ++, qNeed <<= 1 )
432 ;
433 if ( cbtUsed + cbtNeed > anagram_MASK_BITS )
434 cbtUsed = 0;
435 anagram_alPhrase[ i ].uBits = qNeed - 1;
436 if ( cbtUsed )
437 qNeed <<= cbtUsed;
438 anagram_aqMainSign[ iq ] |= qNeed;
439 anagram_aqMainMask[ iq ] |=
440 ( anagram_Quad )anagram_alPhrase[ i ].uFrequency << cbtUsed;
441 anagram_alPhrase[ i ].uShift = cbtUsed;
442 anagram_alPhrase[ i ].iq = iq;
443 cbtUsed += cbtNeed;
444 }
445 }
446}
447
448
449anagram_PWord anagram_NewWord( void )
450{
451 anagram_PWord pw;
452
453 pw = ( anagram_Word * )anagram_malloc( sizeof( anagram_Word ) );
454 return pw;
455}
456
457
458/* NextWord -- get another candidate entry, creating if necessary */
459anagram_PWord anagram_NextWord( void )
460{
461 anagram_PWord pw;
462 pw = anagram_apwCand[ anagram_cpwCand ++ ];
463 if ( pw != 0 )
464 return pw;
465 anagram_apwCand[ anagram_cpwCand - 1 ] = anagram_NewWord();
466 return anagram_apwCand[ anagram_cpwCand - 1 ];
467}
468
469
470/* BuildWord -- build a Word structure from an ASCII word
471 If the word does not fit, then do nothing. */
472void anagram_BuildWord( char *pchWord )
473{
474 unsigned char cchFrequency[ anagram_ALPHABET ];
475 int i;
476 char *pch = pchWord;
477 anagram_PWord pw;
478 unsigned int cchLength = 0;
479
480 anagram_bzero( ( char * )cchFrequency,
481 sizeof( unsigned char ) * anagram_ALPHABET );
482
483 /* Build frequency table */
484 _Pragma( "loopbound min 3 max 636" )
485 while ( ( i = *pch ++ ) != '\0' ) {
486 if ( !anagram_isalpha( i ) )
487 continue;
488 i = anagram_ch2i( anagram_tolower( i ) );
489 if ( ++ cchFrequency[ i ] > anagram_alPhrase[ i ].uFrequency )
490 return ;
491 ++ cchLength;
492 }
493
494 /* Update global count */
495 _Pragma( "loopbound min 26 max 26" )
496 for ( i = 0; i < anagram_ALPHABET; i ++ )
497 anagram_auGlobalFrequency[ i ] += cchFrequency[ i ];
498
499 /* Create a Word structure and fill it in, including building the
500 bitfield of frequencies. */
501 pw = anagram_NextWord();
502 anagram_bzero( ( char * )( pw->aqMask ),
503 sizeof( anagram_Quad ) * anagram_MAX_QUADS );
504
505 pw->pchWord = pchWord;
506 pw->cchLength = cchLength;
507 _Pragma( "loopbound min 26 max 26" )
508 for ( i = 0; i < anagram_ALPHABET; i ++ ) {
509 pw->aqMask[ anagram_alPhrase[i].iq ] |=
510 ( anagram_Quad )cchFrequency[ i ] << anagram_alPhrase[ i ].uShift;
511 }
512}
513
514
515/* AddWords -- build the list of candidates */
516void anagram_AddWords( void )
517{
518 char *pch = anagram_pchDictionary; /* walk through the dictionary */
519
520 anagram_cpwCand = 0;
521
522 _Pragma( "loopbound min 1967 max 1967" )
523 while ( *pch ) {
524 if ( ( pch[ 1 ] >= anagram_cchMinLength &&
525 pch[ 1 ] + anagram_cchMinLength <= anagram_cchPhraseLength )
526 || pch[ 1 ] == anagram_cchPhraseLength )
527 anagram_BuildWord( pch + 2 );
528 pch += *pch;
529 }
530}
531
532
533void anagram_DumpWords( void )
534{
535 int i, j;
536 int offset = 0;
537 _Pragma( "loopbound min 3 max 3" )
538 for ( i = 0; i < anagram_cpwLast; i ++ ) {
539 _Pragma( "loopbound min 3 max 5" )
540 for ( j = 0; anagram_apwSol[ i ]->pchWord[ j ] != '\0'; j ++ )
541 anagram_buffer[ offset + j ] = anagram_apwSol[ i ]->pchWord[ j ];
542 offset += j;
543
544 anagram_buffer[ offset ++ ] = ' ';
545 }
546 anagram_buffer[ offset ++ ] = '\0';
547}
548
549
550void anagram_FindAnagram( anagram_Quad *pqMask, anagram_PPWord ppwStart,
551 int iLetter )
552{
553 anagram_Quad aqNext[ anagram_MAX_QUADS ];
554 register anagram_PWord pw;
555 anagram_Quad qMask;
556 unsigned iq;
557 anagram_PPWord ppwEnd = &anagram_apwCand[ 0 ];
558 ppwEnd += anagram_cpwCand;
559
560 _Pragma( "loopbound min 1 max 7" )
561 while ( 1 ) {
562 iq = anagram_alPhrase[ anagram_achByFrequency[iLetter] ].iq;
563 qMask = anagram_alPhrase[ anagram_achByFrequency[iLetter] ].uBits <<
564 anagram_alPhrase[ anagram_achByFrequency[iLetter] ].uShift;
565 if ( pqMask[ iq ] & qMask )
566 break;
567 iLetter ++;
568 }
569
570 _Pragma( "loopbound min 0 max 114" )
571 while ( ppwStart < ppwEnd ) {
572 pw = *ppwStart;
573
574 #if anagram_MAX_QUADS > 0
575 anagram_OneStep( 0 );
576 #endif
577
578 #if anagram_MAX_QUADS > 1
579 anagram_OneStep( 1 );
580 #endif
581
582 #if anagram_MAX_QUADS > 2
583 anagram_OneStep( 2 );
584 #endif
585
586 #if anagram_MAX_QUADS > 3
587 anagram_OneStep( 3 );
588 #endif
589
590 #if anagram_MAX_QUADS > 4
591 @@"Add more unrolling steps here, please."@@
592 #endif
593
594 /* If the pivot letter isn't present, defer this word until later */
595 if ( ( pw->aqMask[ iq ] & qMask ) == 0 ) {
596 *ppwStart = *( -- ppwEnd );
597 *ppwEnd = pw;
598 continue;
599 }
600
601 /* If we get here, this means the word fits. */
602 anagram_apwSol[ anagram_cpwLast ++ ] = pw;
603 if ( anagram_cchPhraseLength -= pw->cchLength ) { /* recurse */
604 /* The recursive call scrambles the tail, so we have to be
605 pessimistic. */
606 ppwEnd = &anagram_apwCand[ 0 ];
607 ppwEnd += anagram_cpwCand;
608 anagram_FindAnagram( &aqNext[ 0 ], ppwStart, iLetter );
609 } else { /* found one */
610 anagram_DumpWords();
611 }
612 anagram_cchPhraseLength += pw->cchLength;
613 -- anagram_cpwLast;
614 ppwStart ++;
615 continue;
616 }
617}
618
619
620void anagram_SortCandidates( void )
621{
622 int i;
623
624 /* Sort the letters by frequency */
625 _Pragma( "loopbound min 26 max 26" )
626 for ( i = 0; i < anagram_ALPHABET; i ++ )
627 anagram_achByFrequency[ i ] = i;
628 anagram_qsort( anagram_achByFrequency, anagram_ALPHABET, sizeof( int ) );
629}
630
631
632void _Pragma( "entrypoint" ) anagram_main( void )
633{
634 int i;
635
636 _Pragma( "loopbound min 3 max 3" )
637 for ( i = 0; i < 3; i ++ ) {
638 anagram_Reset();
639 anagram_BuildMask( anagram_achPhrase[ i ] );
640 anagram_AddWords();
641 if ( anagram_cpwCand == 0 || anagram_cchPhraseLength == 0 )
642 continue;
643
644 anagram_cpwLast = 0;
645 anagram_SortCandidates();
646 _Pragma( "marker call_find" )
647 anagram_FindAnagram( anagram_aqMainMask, anagram_apwCand, 0 );
648 _Pragma( "flowrestriction 1*anagram_FindAnagram <= 51*call_find" )
649 }
650}
651
652
653/*
654 Main function
655*/
656
657int main(int argc, char **argv)
658{
659 SET_UP
660 //int jobsComplete;
661 //int maxJobs=100;
662 //for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
663 START_LOOP
664 anagram_init();
665 anagram_main();
666 STOP_LOOP
667 //}
668 WRITE_TO_FILE
669 return anagram_return();
670}
diff --git a/baseline/source/anagram/anagramTest.txt b/baseline/source/anagram/anagramTest.txt
new file mode 100644
index 0000000..21d58d8
--- /dev/null
+++ b/baseline/source/anagram/anagramTest.txt
@@ -0,0 +1,100 @@
1anagram none 7 none 100 992260 anagramTest 0 none
2anagram none 7 none 100 32657649 anagramTest 1 none
3anagram none 7 none 100 50 anagramTest 2 none
4anagram none 7 none 100 140726366772064 anagramTest 3 none
5anagram none 7 none 100 140332637564920 anagramTest 4 none
6anagram none 7 none 100 140332637511040 anagramTest 5 none
7anagram none 7 none 100 140726366771844 anagramTest 6 none
8anagram none 7 none 100 140726366772048 anagramTest 7 none
9anagram none 7 none 100 140332643575048 anagramTest 8 none
10anagram none 7 none 100 140724603453440 anagramTest 9 none
11anagram none 7 none 100 3 anagramTest 10 none
12anagram none 7 none 100 140724603453440 anagramTest 11 none
13anagram none 7 none 100 3 anagramTest 12 none
14anagram none 7 none 100 0 anagramTest 13 none
15anagram none 7 none 100 0 anagramTest 14 none
16anagram none 7 none 100 140332643726528 anagramTest 15 none
17anagram none 7 none 100 140726366772208 anagramTest 16 none
18anagram none 7 none 100 140332643575120 anagramTest 17 none
19anagram none 7 none 100 0 anagramTest 18 none
20anagram none 7 none 100 140332643725672 anagramTest 19 none
21anagram none 7 none 100 140726366772248 anagramTest 20 none
22anagram none 7 none 100 140332641512223 anagramTest 21 none
23anagram none 7 none 100 1 anagramTest 22 none
24anagram none 7 none 100 140332643575120 anagramTest 23 none
25anagram none 7 none 100 1 anagramTest 24 none
26anagram none 7 none 100 0 anagramTest 25 none
27anagram none 7 none 100 1 anagramTest 26 none
28anagram none 7 none 100 140332643725672 anagramTest 27 none
29anagram none 7 none 100 1 anagramTest 28 none
30anagram none 7 none 100 140332643723736 anagramTest 29 none
31anagram none 7 none 100 0 anagramTest 30 none
32anagram none 7 none 100 0 anagramTest 31 none
33anagram none 7 none 100 140332643726528 anagramTest 32 none
34anagram none 7 none 100 140726366772064 anagramTest 33 none
35anagram none 7 none 100 7472231616 anagramTest 34 none
36anagram none 7 none 100 140726366772048 anagramTest 35 none
37anagram none 7 none 100 2090089586 anagramTest 36 none
38anagram none 7 none 100 4195443 anagramTest 37 none
39anagram none 7 none 100 4294967295 anagramTest 38 none
40anagram none 7 none 100 140332641470296 anagramTest 39 none
41anagram none 7 none 100 140332637550808 anagramTest 40 none
42anagram none 7 none 100 140332643573760 anagramTest 41 none
43anagram none 7 none 100 140332637522848 anagramTest 42 none
44anagram none 7 none 100 2118 anagramTest 43 none
45anagram none 7 none 100 140332643573760 anagramTest 44 none
46anagram none 7 none 100 140332637511040 anagramTest 45 none
47anagram none 7 none 100 140332637564920 anagramTest 46 none
48anagram none 7 none 100 140332641510987 anagramTest 47 none
49anagram none 7 none 100 2118 anagramTest 48 none
50anagram none 7 none 100 140332637564920 anagramTest 49 none
51anagram none 7 none 100 140332643573760 anagramTest 50 none
52anagram none 7 none 100 140726366772312 anagramTest 51 none
53anagram none 7 none 100 140726366772308 anagramTest 52 none
54anagram none 7 none 100 6316152 anagramTest 53 none
55anagram none 7 none 100 4196240 anagramTest 54 none
56anagram none 7 none 100 140726366773040 anagramTest 55 none
57anagram none 7 none 100 0 anagramTest 56 none
58anagram none 7 none 100 0 anagramTest 57 none
59anagram none 7 none 100 140726366772816 anagramTest 58 none
60anagram none 7 none 100 140332641532614 anagramTest 59 none
61anagram none 7 none 100 1 anagramTest 60 none
62anagram none 7 none 100 0 anagramTest 61 none
63anagram none 7 none 100 140332637564920 anagramTest 62 none
64anagram none 7 none 100 140332637550808 anagramTest 63 none
65anagram none 7 none 100 140726366772528 anagramTest 64 none
66anagram none 7 none 100 140332641566447 anagramTest 65 none
67anagram none 7 none 100 65280 anagramTest 66 none
68anagram none 7 none 100 0 anagramTest 67 none
69anagram none 7 none 100 3399988123389603631 anagramTest 68 none
70anagram none 7 none 100 3399988123389603631 anagramTest 69 none
71anagram none 7 none 100 0 anagramTest 70 none
72anagram none 7 none 100 0 anagramTest 71 none
73anagram none 7 none 100 -72057594037927936 anagramTest 72 none
74anagram none 7 none 100 -72057594037927936 anagramTest 73 none
75anagram none 7 none 100 6872211992017990772 anagramTest 74 none
76anagram none 7 none 100 8387223540636804214 anagramTest 75 none
77anagram none 7 none 100 0 anagramTest 76 none
78anagram none 7 none 100 0 anagramTest 77 none
79anagram none 7 none 100 0 anagramTest 78 none
80anagram none 7 none 100 0 anagramTest 79 none
81anagram none 7 none 100 0 anagramTest 80 none
82anagram none 7 none 100 0 anagramTest 81 none
83anagram none 7 none 100 1 anagramTest 82 none
84anagram none 7 none 100 0 anagramTest 83 none
85anagram none 7 none 100 1 anagramTest 84 none
86anagram none 7 none 100 140332643725672 anagramTest 85 none
87anagram none 7 none 100 0 anagramTest 86 none
88anagram none 7 none 100 140332643727104 anagramTest 87 none
89anagram none 7 none 100 10 anagramTest 88 none
90anagram none 7 none 100 -1 anagramTest 89 none
91anagram none 7 none 100 85603611 anagramTest 90 none
92anagram none 7 none 100 140726366778684 anagramTest 91 none
93anagram none 7 none 100 140726366773128 anagramTest 92 none
94anagram none 7 none 100 140726366772560 anagramTest 93 none
95anagram none 7 none 100 140726366772816 anagramTest 94 none
96anagram none 7 none 100 4196240 anagramTest 95 none
97anagram none 7 none 100 140726366773040 anagramTest 96 none
98anagram none 7 none 100 0 anagramTest 97 none
99anagram none 7 none 100 0 anagramTest 98 none
100anagram none 7 none 100 140332637720208 anagramTest 99 none
diff --git a/baseline/source/anagram/anagram_compare.h b/baseline/source/anagram/anagram_compare.h
new file mode 100644
index 0000000..31e869a
--- /dev/null
+++ b/baseline/source/anagram/anagram_compare.h
@@ -0,0 +1,27 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_compare.h
7
8 Author: Raymond Chen
9
10 Function: This header contains the comparison functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_COMPARE_H
23#define ANAGRAM_COMPARE_H
24
25int anagram_CompareFrequency( char *pch1, char *pch2 );
26
27#endif
diff --git a/baseline/source/anagram/anagram_ctype.h b/baseline/source/anagram/anagram_ctype.h
new file mode 100644
index 0000000..ebb8232
--- /dev/null
+++ b/baseline/source/anagram/anagram_ctype.h
@@ -0,0 +1,45 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_ctype.h
7
8 Author: Raymond Chen
9
10 Function: This header contains some C library functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_CTYPE_H
23#define ANAGRAM_CTYPE_H
24
25int anagram_islower( int c )
26{
27 return 'a' <= c && c <= 'z';
28}
29
30int anagram_isupper( int c )
31{
32 return 'A' <= c && c <= 'Z';
33}
34
35int anagram_isalpha( int c )
36{
37 return anagram_isupper( c ) || anagram_islower( c );
38}
39
40int anagram_tolower( int c )
41{
42 return anagram_isupper( c ) ? c + ( 'a' - 'A' ) : c;
43}
44
45#endif
diff --git a/baseline/source/anagram/anagram_input.c b/baseline/source/anagram/anagram_input.c
new file mode 100644
index 0000000..e3d5f71
--- /dev/null
+++ b/baseline/source/anagram/anagram_input.c
@@ -0,0 +1,2317 @@
1/*
2
3 This file is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_input.c
7
8 Author: Raymond Chen
9
10 Function: This file contains the input data used by anagram.
11
12 Source: anagram
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22/*
23 Forward declaration of global variables
24*/
25
26extern char const *anagram_achPhrase[ 3 ];
27extern char const *anagram_dictionary[ 2279 ];
28
29
30/*
31 Definition of global variables
32*/
33char const *anagram_achPhrase[ 3 ] = { "todd austin",
34 "john alledy",
35 "mary updike"
36 };
37
38char const *anagram_dictionary[ 2279 ] = { "2nd",
39 "4th",
40 "8th",
41 "a",
42 "ABA",
43 "aback",
44 "abash",
45 "abbas",
46 "abbey",
47 "abed",
48 "abet",
49 "abort",
50 "abut",
51 "Accra",
52 "ACM",
53 "acorn",
54 "Acts",
55 "Ada",
56 "adapt",
57 "added",
58 "addle",
59 "Adele",
60 "Aden",
61 "admix",
62 "adore",
63 "adult",
64 "affix",
65 "afire",
66 "aft",
67 "agate",
68 "agave",
69 "Agee",
70 "agent",
71 "agile",
72 "Agnew",
73 "agone",
74 "ahoy",
75 "Aida",
76 "aim",
77 "Ainu",
78 "airy",
79 "Ajax",
80 "Alamo",
81 "alarm",
82 "alb",
83 "Alcoa",
84 "alder",
85 "Aleck",
86 "alert",
87 "algae",
88 "alia",
89 "alike",
90 "alive",
91 "allay",
92 "alley",
93 "Allis",
94 "allow",
95 "ally",
96 "Allyn",
97 "aloe",
98 "aloha",
99 "along",
100 "aloud",
101 "also",
102 "alter",
103 "Alton",
104 "Alva",
105 "amaze",
106 "amber",
107 "ami",
108 "amigo",
109 "amiss",
110 "Amman",
111 "Amoco",
112 "amok",
113 "Amos",
114 "ample",
115 "amra",
116 "amy",
117 "Andes",
118 "angel",
119 "Angie",
120 "angry",
121 "Angus",
122 "Anne",
123 "annex",
124 "annoy",
125 "annul",
126 "ante",
127 "any",
128 "apex",
129 "apple",
130 "apron",
131 "apt",
132 "arch",
133 "argue",
134 "Aries",
135 "arm",
136 "army",
137 "aroma",
138 "array",
139 "arrow",
140 "Artie",
141 "arty",
142 "arum",
143 "a's",
144 "ash",
145 "ashen",
146 "ashy",
147 "askew",
148 "assai",
149 "Assam",
150 "Astor",
151 "ate",
152 "atlas",
153 "atone",
154 "audit",
155 "Aug",
156 "augur",
157 "auk",
158 "aural",
159 "avid",
160 "avoid",
161 "avow",
162 "awash",
163 "awe",
164 "awn",
165 "awry",
166 "axe",
167 "axial",
168 "axis",
169 "axon",
170 "Ayers",
171 "Aztec",
172 "b",
173 "babe",
174 "Bach",
175 "bad",
176 "bait",
177 "baldy",
178 "balm",
179 "balsa",
180 "bam",
181 "ban",
182 "bane",
183 "banjo",
184 "barb",
185 "barn",
186 "baron",
187 "basal",
188 "Basel",
189 "basil",
190 "bassi",
191 "baste",
192 "batch",
193 "Bates",
194 "batik",
195 "Bator",
196 "bawd",
197 "bay",
198 "bayed",
199 "bayou",
200 "be",
201 "beak",
202 "bean",
203 "beard",
204 "beat",
205 "beck",
206 "Becky",
207 "bed",
208 "bedim",
209 "bee",
210 "beech",
211 "beep",
212 "beet",
213 "befit",
214 "beg",
215 "begin",
216 "beige",
217 "Bela",
218 "belch",
219 "belt",
220 "beman",
221 "bench",
222 "Benny",
223 "bent",
224 "Benz",
225 "berth",
226 "beset",
227 "bet",
228 "betel",
229 "Bette",
230 "bevy",
231 "Bible",
232 "bide",
233 "big",
234 "bile",
235 "bilk",
236 "binge",
237 "bit",
238 "bite",
239 "black",
240 "blanc",
241 "bland",
242 "blare",
243 "blat",
244 "blaze",
245 "bled",
246 "blest",
247 "blind",
248 "Blinn",
249 "bliss",
250 "blitz",
251 "blob",
252 "blond",
253 "blood",
254 "bloom",
255 "blot",
256 "blown",
257 "blue",
258 "bluff",
259 "Blum",
260 "blur",
261 "board",
262 "boat",
263 "bock",
264 "bog",
265 "bogy",
266 "boil",
267 "Boise",
268 "bomb",
269 "bon",
270 "bong",
271 "bonus",
272 "bonze",
273 "booby",
274 "book",
275 "booky",
276 "boon",
277 "booze",
278 "bore",
279 "Boris",
280 "boron",
281 "Bosch",
282 "bosom",
283 "bound",
284 "bourn",
285 "bowel",
286 "boy",
287 "Boyce",
288 "bract",
289 "Brady",
290 "brag",
291 "brake",
292 "brant",
293 "brass",
294 "Braun",
295 "bravo",
296 "bread",
297 "bream",
298 "breve",
299 "brew",
300 "briar",
301 "Brice",
302 "brief",
303 "bring",
304 "briny",
305 "broad",
306 "broth",
307 "brunt",
308 "BSTJ",
309 "bub",
310 "buck",
311 "Budd",
312 "buddy",
313 "Buick",
314 "built",
315 "bulge",
316 "bulky",
317 "bum",
318 "bump",
319 "bunch",
320 "bundy",
321 "bunk",
322 "Burch",
323 "burg",
324 "burl",
325 "Burma",
326 "burnt",
327 "Burr",
328 "bury",
329 "bush",
330 "bushy",
331 "bust",
332 "busy",
333 "butte",
334 "butyl",
335 "buyer",
336 "by",
337 "bylaw",
338 "Byrd",
339 "byte",
340 "cab",
341 "cable",
342 "cacao",
343 "cacti",
344 "Cairo",
345 "Caleb",
346 "call",
347 "calm",
348 "canal",
349 "canoe",
350 "canon",
351 "can't",
352 "cap",
353 "caper",
354 "capo",
355 "card",
356 "Carey",
357 "Carib",
358 "Carla",
359 "carol",
360 "carve",
361 "cash",
362 "caste",
363 "catch",
364 "cater",
365 "caulk",
366 "cause",
367 "CBS",
368 "cedar",
369 "cent",
370 "Cetus",
371 "Chad",
372 "chaff",
373 "chair",
374 "champ",
375 "char",
376 "chasm",
377 "chaw",
378 "cheat",
379 "cheer",
380 "chef",
381 "Chen",
382 "chew",
383 "chick",
384 "chief",
385 "Chile",
386 "chill",
387 "chine",
388 "chip",
389 "chock",
390 "choir",
391 "chomp",
392 "chose",
393 "Chris",
394 "chuff",
395 "chum",
396 "chump",
397 "CIA",
398 "cinch",
399 "cite",
400 "city",
401 "clad",
402 "clan",
403 "clank",
404 "Clara",
405 "Claus",
406 "claw",
407 "clean",
408 "cleat",
409 "clerk",
410 "clime",
411 "cling",
412 "clink",
413 "Clio",
414 "clod",
415 "clomp",
416 "cloth",
417 "clove",
418 "cluck",
419 "clump",
420 "clung",
421 "Clyde",
422 "cobra",
423 "coco",
424 "coda",
425 "Cody",
426 "Cohn",
427 "coin",
428 "col",
429 "Colby",
430 "coney",
431 "Congo",
432 "cony",
433 "cool",
434 "coon",
435 "copra",
436 "copy",
437 "Corey",
438 "corn",
439 "corps",
440 "cos",
441 "cosy",
442 "couch",
443 "cough",
444 "count",
445 "coup",
446 "cove",
447 "cowry",
448 "coy",
449 "CPA",
450 "crack",
451 "craft",
452 "Craig",
453 "crank",
454 "crash",
455 "crate",
456 "crawl",
457 "craze",
458 "creak",
459 "cream",
460 "credo",
461 "creek",
462 "Creon",
463 "crept",
464 "crest",
465 "crew",
466 "crib",
467 "crime",
468 "crimp",
469 "crisp",
470 "crock",
471 "croft",
472 "crone",
473 "crook",
474 "crowd",
475 "CRT",
476 "crumb",
477 "crump",
478 "crush",
479 "crux",
480 "cub",
481 "cube",
482 "cuff",
483 "cup",
484 "Cupid",
485 "cur",
486 "curb",
487 "curie",
488 "cusp",
489 "cute",
490 "cycad",
491 "cynic",
492 "d",
493 "daffy",
494 "dairy",
495 "daisy",
496 "dally",
497 "dame",
498 "Damon",
499 "Dan",
500 "dance",
501 "Dane",
502 "dank",
503 "Dante",
504 "Dar",
505 "darn",
506 "dart",
507 "dash",
508 "davit",
509 "day",
510 "De",
511 "deaf",
512 "deal",
513 "death",
514 "debit",
515 "Dec",
516 "decal",
517 "Dee",
518 "Deere",
519 "deify",
520 "deity",
521 "Della",
522 "delta",
523 "demur",
524 "den",
525 "Denny",
526 "dense",
527 "deny",
528 "depth",
529 "desk",
530 "deus",
531 "devil",
532 "dewar",
533 "Dhabi",
534 "diary",
535 "dick",
536 "dicta",
537 "did",
538 "die",
539 "Diego",
540 "diety",
541 "dill",
542 "din",
543 "dine",
544 "dirty",
545 "disc",
546 "ditch",
547 "dive",
548 "DNA",
549 "dock",
550 "Dodd",
551 "doff",
552 "dogma",
553 "dolce",
554 "doll",
555 "dolly",
556 "done",
557 "door",
558 "dope",
559 "Doric",
560 "dose",
561 "dote",
562 "doubt",
563 "Doug",
564 "dove",
565 "dowel",
566 "doze",
567 "Dr",
568 "Draco",
569 "drama",
570 "drape",
571 "drawl",
572 "dread",
573 "dreg",
574 "dress",
575 "drew",
576 "drib",
577 "drier",
578 "drill",
579 "drip",
580 "dross",
581 "drown",
582 "druid",
583 "drunk",
584 "dry",
585 "du",
586 "Duane",
587 "ducat",
588 "duct",
589 "duel",
590 "duff",
591 "Duffy",
592 "Dugan",
593 "duke",
594 "dull",
595 "dulse",
596 "duly",
597 "dump",
598 "dumpy",
599 "dunce",
600 "dunk",
601 "dupe",
602 "dusky",
603 "dwarf",
604 "dwelt",
605 "Dwyer",
606 "dyer",
607 "Dyke",
608 "dyne",
609 "each",
610 "eager",
611 "ear",
612 "earn",
613 "ease",
614 "eat",
615 "eater",
616 "Eben",
617 "Ecole",
618 "Eden",
619 "edge",
620 "edgy",
621 "edict",
622 "Edith",
623 "EDT",
624 "eel",
625 "eft",
626 "egg",
627 "Egypt",
628 "eject",
629 "el",
630 "elan",
631 "elate",
632 "elect",
633 "elfin",
634 "elide",
635 "elk",
636 "Ella",
637 "Ellis",
638 "Elmer",
639 "else",
640 "Elton",
641 "elude",
642 "elves",
643 "ember",
644 "Emile",
645 "Emory",
646 "Eng",
647 "Engle",
648 "Enid",
649 "Enos",
650 "enter",
651 "envoy",
652 "epoxy",
653 "equal",
654 "erase",
655 "ere",
656 "erg",
657 "Erich",
658 "Ernst",
659 "Eros",
660 "err",
661 "Errol",
662 "Ervin",
663 "e's",
664 "essay",
665 "ester",
666 "Ethan",
667 "Ethel",
668 "ethic",
669 "ethos",
670 "etude",
671 "Eva",
672 "Evans",
673 "event",
674 "evict",
675 "exact",
676 "exam",
677 "excel",
678 "exit",
679 "eye",
680 "f",
681 "Faber",
682 "fable",
683 "facet",
684 "fad",
685 "faery",
686 "fag",
687 "fail",
688 "faint",
689 "fairy",
690 "fake",
691 "fang",
692 "fare",
693 "faro",
694 "fatal",
695 "fatty",
696 "fault",
697 "faun",
698 "Faust",
699 "fay",
700 "FBI",
701 "fee",
702 "feed",
703 "feign",
704 "Felix",
705 "Fermi",
706 "ferry",
707 "fest",
708 "fetch",
709 "fetus",
710 "few",
711 "fiend",
712 "fiery",
713 "fifth",
714 "fig",
715 "fight",
716 "filet",
717 "film",
718 "finch",
719 "fine",
720 "finny",
721 "fire",
722 "first",
723 "fish",
724 "Fisk",
725 "fist",
726 "Fitch",
727 "flack",
728 "flak",
729 "flaky",
730 "flame",
731 "flank",
732 "flare",
733 "flat",
734 "flax",
735 "flea",
736 "fled",
737 "flee",
738 "fleet",
739 "flint",
740 "flit",
741 "flock",
742 "flog",
743 "flow",
744 "Floyd",
745 "flub",
746 "fluke",
747 "flute",
748 "Flynn",
749 "FM",
750 "foal",
751 "focal",
752 "Foley",
753 "folk",
754 "fond",
755 "food",
756 "foot",
757 "fop",
758 "fore",
759 "forge",
760 "form",
761 "fort",
762 "forth",
763 "forty",
764 "Foss",
765 "foul",
766 "fowl",
767 "FPC",
768 "frame",
769 "Franz",
770 "Frau",
771 "fray",
772 "freed",
773 "fresh",
774 "friar",
775 "fro",
776 "frog",
777 "from",
778 "frost",
779 "frown",
780 "fry",
781 "fuel",
782 "full",
783 "fun",
784 "fur",
785 "furry",
786 "fussy",
787 "g",
788 "gaff",
789 "gag",
790 "Gail",
791 "Galen",
792 "gall",
793 "game",
794 "gamma",
795 "gap",
796 "gar",
797 "garb",
798 "gas",
799 "gasp",
800 "gate",
801 "gauge",
802 "gaur",
803 "gavel",
804 "gawk",
805 "gay",
806 "gecko",
807 "gel",
808 "gem",
809 "Gemma",
810 "gene",
811 "genie",
812 "genre",
813 "genus",
814 "germ",
815 "Gerry",
816 "get",
817 "giant",
818 "gibby",
819 "gig",
820 "gild",
821 "gilt",
822 "gin",
823 "Gino",
824 "given",
825 "glare",
826 "gleam",
827 "glee",
828 "glib",
829 "glint",
830 "gloat",
831 "glow",
832 "glut",
833 "GMT",
834 "gnaw",
835 "gnome",
836 "GNP",
837 "god",
838 "Goff",
839 "gogo",
840 "golf",
841 "Goode",
842 "goof",
843 "goose",
844 "gore",
845 "gory",
846 "got",
847 "gourd",
848 "GPO",
849 "grace",
850 "Graff",
851 "grape",
852 "grasp",
853 "grate",
854 "gravy",
855 "graze",
856 "grebe",
857 "greed",
858 "Greek",
859 "Gregg",
860 "grew",
861 "grid",
862 "grime",
863 "Grimm",
864 "gripe",
865 "grit",
866 "groan",
867 "gross",
868 "grout",
869 "grow",
870 "grown",
871 "grub",
872 "grunt",
873 "GSA",
874 "guano",
875 "guess",
876 "guide",
877 "guile",
878 "guise",
879 "gules",
880 "gull",
881 "gulp",
882 "gumbo",
883 "gun",
884 "gunky",
885 "guru",
886 "gush",
887 "gust",
888 "gusto",
889 "guy",
890 "Gwyn",
891 "gyp",
892 "gyro",
893 "Habib",
894 "hack",
895 "had",
896 "Hades",
897 "Hagen",
898 "Hahn",
899 "haiku",
900 "hale",
901 "halma",
902 "ham",
903 "Haney",
904 "Hans",
905 "hard",
906 "hare",
907 "hark",
908 "harm",
909 "harsh",
910 "haste",
911 "hasty",
912 "hatch",
913 "hater",
914 "hawk",
915 "Haydn",
916 "hazel",
917 "he",
918 "Healy",
919 "hear",
920 "heart",
921 "heave",
922 "heavy",
923 "hedge",
924 "heel",
925 "hefty",
926 "Heinz",
927 "held",
928 "he'll",
929 "hemp",
930 "hertz",
931 "hew",
932 "hex",
933 "hi",
934 "hick",
935 "Hicks",
936 "hike",
937 "hilum",
938 "hind",
939 "hip",
940 "hippy",
941 "hire",
942 "his",
943 "hive",
944 "hobby",
945 "hoc",
946 "Hoff",
947 "hogan",
948 "Hokan",
949 "hole",
950 "Holm",
951 "holt",
952 "home",
953 "homo",
954 "hondo",
955 "hood",
956 "hook",
957 "hoop",
958 "hoot",
959 "hope",
960 "horn",
961 "hose",
962 "hot",
963 "hound",
964 "hovel",
965 "how",
966 "howdy",
967 "hub",
968 "hubby",
969 "hue",
970 "huff",
971 "huge",
972 "huh",
973 "hull",
974 "human",
975 "Hun",
976 "hung",
977 "hunk",
978 "hurt",
979 "hurty",
980 "hutch",
981 "hydra",
982 "hyena",
983 "hymen",
984 "i",
985 "ibid",
986 "IBM",
987 "icon",
988 "I'd",
989 "Idaho",
990 "ideal",
991 "idiot",
992 "idol",
993 "IEEE",
994 "iffy",
995 "igloo",
996 "iii",
997 "ileum",
998 "Iliad",
999 "ill",
1000 "Ilona",
1001 "image",
1002 "in",
1003 "inapt",
1004 "Inca",
1005 "incur",
1006 "India",
1007 "inert",
1008 "infer",
1009 "infra",
1010 "Inman",
1011 "inn",
1012 "input",
1013 "ionic",
1014 "Iowa",
1015 "ipso",
1016 "IR",
1017 "Iran",
1018 "irate",
1019 "Irene",
1020 "Irish",
1021 "Irma",
1022 "is",
1023 "Ising",
1024 "Islam",
1025 "isle",
1026 "Italy",
1027 "it'd",
1028 "Ito",
1029 "iv",
1030 "ivy",
1031 "j",
1032 "JACM",
1033 "jag",
1034 "James",
1035 "Jane",
1036 "Janos",
1037 "Japan",
1038 "Jason",
1039 "jaw",
1040 "jean",
1041 "jeep",
1042 "Jeres",
1043 "jerky",
1044 "jess",
1045 "jet",
1046 "jewel",
1047 "jig",
1048 "jilt",
1049 "Jo",
1050 "job",
1051 "jog",
1052 "join",
1053 "joke",
1054 "jolt",
1055 "Jonas",
1056 "joule",
1057 "joust",
1058 "joy",
1059 "Juan",
1060 "judge",
1061 "judo",
1062 "Judy",
1063 "juju",
1064 "juke",
1065 "julep",
1066 "jump",
1067 "junco",
1068 "junky",
1069 "junta",
1070 "jure",
1071 "jut",
1072 "Kafka",
1073 "kapok",
1074 "Karp",
1075 "Kathy",
1076 "Kay",
1077 "Keats",
1078 "keel",
1079 "keg",
1080 "kelly",
1081 "Kemp",
1082 "Kent",
1083 "Kenya",
1084 "kerry",
1085 "Kevin",
1086 "keyed",
1087 "khaki",
1088 "Khmer",
1089 "kick",
1090 "Kiev",
1091 "kin",
1092 "Kiowa",
1093 "kirk",
1094 "kiss",
1095 "kite",
1096 "kiva",
1097 "Klan",
1098 "Kline",
1099 "knee",
1100 "Knott",
1101 "Knox",
1102 "koala",
1103 "Kong",
1104 "Korea",
1105 "kraft",
1106 "kraut",
1107 "Kuhn",
1108 "Kurd",
1109 "lac",
1110 "lack",
1111 "lad",
1112 "ladle",
1113 "lag",
1114 "lain",
1115 "laity",
1116 "lam",
1117 "lame",
1118 "lamp",
1119 "lance",
1120 "lane",
1121 "Lange",
1122 "Laos",
1123 "lapel",
1124 "lard",
1125 "Lares",
1126 "Lars",
1127 "last",
1128 "late",
1129 "Latin",
1130 "latus",
1131 "law",
1132 "lay",
1133 "layup",
1134 "lazy",
1135 "leach",
1136 "leafy",
1137 "leak",
1138 "leapt",
1139 "learn",
1140 "leash",
1141 "leave",
1142 "ledge",
1143 "leech",
1144 "left",
1145 "leg",
1146 "leggy",
1147 "Leila",
1148 "lemma",
1149 "Lena",
1150 "lens",
1151 "Leo",
1152 "Leona",
1153 "lest",
1154 "level",
1155 "levy",
1156 "lewd",
1157 "liar",
1158 "lice",
1159 "lick",
1160 "lie",
1161 "lien",
1162 "life",
1163 "lift",
1164 "liken",
1165 "lilac",
1166 "Lilly",
1167 "lily",
1168 "limb",
1169 "limit",
1170 "line",
1171 "lingo",
1172 "link",
1173 "Linus",
1174 "Lise",
1175 "lisp",
1176 "live",
1177 "livre",
1178 "load",
1179 "loam",
1180 "loan",
1181 "lob",
1182 "lobby",
1183 "local",
1184 "lock",
1185 "Loeb",
1186 "Logan",
1187 "logic",
1188 "loin",
1189 "Loki",
1190 "loll",
1191 "Lomb",
1192 "long",
1193 "loon",
1194 "loose",
1195 "loot",
1196 "lope",
1197 "lord",
1198 "Loren",
1199 "lose",
1200 "lossy",
1201 "Lotte",
1202 "loud",
1203 "lousy",
1204 "low",
1205 "Lowe",
1206 "loy",
1207 "l's",
1208 "LTV",
1209 "Lucas",
1210 "lucky",
1211 "luge",
1212 "Luis",
1213 "lumen",
1214 "lumpy",
1215 "lunar",
1216 "Lund",
1217 "Lura",
1218 "lure",
1219 "lurk",
1220 "lusty",
1221 "Lydia",
1222 "lying",
1223 "Lynn",
1224 "Lyon",
1225 "Lyra",
1226 "m",
1227 "Mabel",
1228 "mace",
1229 "macho",
1230 "macro",
1231 "madam",
1232 "magi",
1233 "magna",
1234 "mail",
1235 "main",
1236 "make",
1237 "Malay",
1238 "male",
1239 "mall",
1240 "malt",
1241 "mamma",
1242 "mane",
1243 "mania",
1244 "manic",
1245 "manna",
1246 "Mans",
1247 "Mao",
1248 "map",
1249 "mar",
1250 "Mardi",
1251 "maria",
1252 "Marin",
1253 "Mario",
1254 "Mars",
1255 "Mary",
1256 "mask",
1257 "mast",
1258 "mat",
1259 "mate",
1260 "mater",
1261 "matte",
1262 "maul",
1263 "Mavis",
1264 "maxim",
1265 "Maya",
1266 "Mayer",
1267 "Mayo",
1268 "mayst",
1269 "maze",
1270 "me",
1271 "meal",
1272 "meaty",
1273 "media",
1274 "meet",
1275 "meld",
1276 "melt",
1277 "men",
1278 "Menlo",
1279 "merge",
1280 "Merle",
1281 "merry",
1282 "mesh",
1283 "messy",
1284 "metro",
1285 "mew",
1286 "Meyer",
1287 "mezzo",
1288 "mica",
1289 "midst",
1290 "mien",
1291 "mig",
1292 "mila",
1293 "milk",
1294 "Mills",
1295 "milt",
1296 "Mimi",
1297 "mince",
1298 "mine",
1299 "mini",
1300 "mink",
1301 "minor",
1302 "minot",
1303 "minus",
1304 "Mira",
1305 "mire",
1306 "mirth",
1307 "Missy",
1308 "misty",
1309 "mite",
1310 "mitre",
1311 "mixup",
1312 "mob",
1313 "Mobil",
1314 "mock",
1315 "model",
1316 "Moen",
1317 "Mohr",
1318 "moist",
1319 "molar",
1320 "mole",
1321 "month",
1322 "moody",
1323 "Moore",
1324 "moral",
1325 "Moran",
1326 "morn",
1327 "Moser",
1328 "moss",
1329 "most",
1330 "motel",
1331 "moth",
1332 "motif",
1333 "motor",
1334 "motto",
1335 "mousy",
1336 "Moyer",
1337 "Mrs",
1338 "m's",
1339 "mud",
1340 "muggy",
1341 "Muir",
1342 "mulch",
1343 "mule",
1344 "mull",
1345 "mum",
1346 "mummy",
1347 "muon",
1348 "mural",
1349 "murre",
1350 "mushy",
1351 "musk",
1352 "must",
1353 "Muzo",
1354 "my",
1355 "Myers",
1356 "mynah",
1357 "Myra",
1358 "NAACP",
1359 "Nagy",
1360 "naive",
1361 "name",
1362 "Nancy",
1363 "nap",
1364 "nary",
1365 "nasal",
1366 "natal",
1367 "NATO",
1368 "navy",
1369 "Nazi",
1370 "NBC",
1371 "NCR",
1372 "ne",
1373 "near",
1374 "neath",
1375 "Ned",
1376 "need",
1377 "needy",
1378 "Nehru",
1379 "Nell",
1380 "neon",
1381 "Nero",
1382 "net",
1383 "Neva",
1384 "neve",
1385 "new",
1386 "nice",
1387 "niche",
1388 "Niger",
1389 "night",
1390 "Nikko",
1391 "Nile",
1392 "Niobe",
1393 "nitty",
1394 "NJ",
1395 "no",
1396 "Noah",
1397 "Nobel",
1398 "nodal",
1399 "noise",
1400 "Nolan",
1401 "nolo",
1402 "noon",
1403 "nor",
1404 "nose",
1405 "notch",
1406 "Nov",
1407 "now",
1408 "n's",
1409 "NTIS",
1410 "nude",
1411 "numb",
1412 "nurse",
1413 "NY",
1414 "oaf",
1415 "oaken",
1416 "oar",
1417 "oasis",
1418 "oath",
1419 "obey",
1420 "objet",
1421 "ocean",
1422 "Oct",
1423 "ode",
1424 "o'er",
1425 "off",
1426 "often",
1427 "ogle",
1428 "Okay",
1429 "old",
1430 "oldy",
1431 "olive",
1432 "Olson",
1433 "omit",
1434 "once",
1435 "only",
1436 "onset",
1437 "onus",
1438 "onyx",
1439 "ooze",
1440 "opera",
1441 "opium",
1442 "opt",
1443 "opus",
1444 "orb",
1445 "Orin",
1446 "Orion",
1447 "osier",
1448 "ought",
1449 "our",
1450 "out",
1451 "ovate",
1452 "over",
1453 "Ovid",
1454 "owing",
1455 "ox",
1456 "oxeye",
1457 "oxide",
1458 "Ozark",
1459 "p",
1460 "Pablo",
1461 "pace",
1462 "pack",
1463 "pact",
1464 "padre",
1465 "pagan",
1466 "Paine",
1467 "pale",
1468 "palm",
1469 "pane",
1470 "pansy",
1471 "Paoli",
1472 "papa",
1473 "papaw",
1474 "pappy",
1475 "parch",
1476 "pare",
1477 "Paris",
1478 "park",
1479 "Parks",
1480 "parse",
1481 "Paso",
1482 "passe",
1483 "past",
1484 "path",
1485 "Patsy",
1486 "Paul",
1487 "Pauli",
1488 "pax",
1489 "PBS",
1490 "peace",
1491 "peak",
1492 "Pease",
1493 "peck",
1494 "pedal",
1495 "pee",
1496 "peek",
1497 "peep",
1498 "pen",
1499 "penny",
1500 "pep",
1501 "Pepsi",
1502 "Perez",
1503 "perk",
1504 "Perle",
1505 "Perth",
1506 "peste",
1507 "Pete",
1508 "petri",
1509 "petty",
1510 "pewee",
1511 "PhD",
1512 "phi",
1513 "phon",
1514 "phony",
1515 "phyla",
1516 "piano",
1517 "piece",
1518 "pilot",
1519 "pinch",
1520 "ping",
1521 "pink",
1522 "pinto",
1523 "pious",
1524 "pipe",
1525 "pique",
1526 "piss",
1527 "pithy",
1528 "pity",
1529 "pixy",
1530 "place",
1531 "plain",
1532 "plane",
1533 "plate",
1534 "Plato",
1535 "play",
1536 "plaza",
1537 "plead",
1538 "pluck",
1539 "plug",
1540 "plump",
1541 "plunk",
1542 "plus",
1543 "pod",
1544 "podia",
1545 "Poe",
1546 "poesy",
1547 "pogo",
1548 "poi",
1549 "poise",
1550 "poke",
1551 "polis",
1552 "Polk",
1553 "poll",
1554 "polo",
1555 "Ponce",
1556 "pond",
1557 "pool",
1558 "poop",
1559 "pop",
1560 "porch",
1561 "pork",
1562 "Porte",
1563 "Porto",
1564 "posh",
1565 "posse",
1566 "post",
1567 "pour",
1568 "pow",
1569 "Prado",
1570 "Pratt",
1571 "pray",
1572 "press",
1573 "prey",
1574 "price",
1575 "pride",
1576 "prig",
1577 "prime",
1578 "prior",
1579 "probe",
1580 "Prof",
1581 "prone",
1582 "p's",
1583 "psych",
1584 "pub",
1585 "puck",
1586 "puffy",
1587 "Pugh",
1588 "pull",
1589 "puma",
1590 "pun",
1591 "punky",
1592 "puny",
1593 "pupal",
1594 "puppy",
1595 "pure",
1596 "purl",
1597 "pus",
1598 "PVC",
1599 "Pyle",
1600 "Pyrex",
1601 "Qatar",
1602 "quack",
1603 "quaff",
1604 "quash",
1605 "queen",
1606 "quell",
1607 "query",
1608 "queue",
1609 "quick",
1610 "quill",
1611 "quint",
1612 "quirt",
1613 "quo",
1614 "quote",
1615 "rabat",
1616 "rabbi",
1617 "radar",
1618 "radio",
1619 "radix",
1620 "Rae",
1621 "rag",
1622 "rail",
1623 "rajah",
1624 "Ralph",
1625 "Ramo",
1626 "ran",
1627 "Rand",
1628 "randy",
1629 "Raoul",
1630 "rape",
1631 "rare",
1632 "rasp",
1633 "rata",
1634 "rater",
1635 "rave",
1636 "raven",
1637 "razor",
1638 "R&D",
1639 "reach",
1640 "ready",
1641 "real",
1642 "reb",
1643 "reck",
1644 "reedy",
1645 "reek",
1646 "Reese",
1647 "regal",
1648 "Reid",
1649 "relax",
1650 "reman",
1651 "Rena",
1652 "rend",
1653 "ret",
1654 "retch",
1655 "Rhea",
1656 "rheum",
1657 "rhino",
1658 "Rhoda",
1659 "rib",
1660 "rice",
1661 "rick",
1662 "rid",
1663 "rifle",
1664 "rig",
1665 "rigid",
1666 "rill",
1667 "rim",
1668 "rimy",
1669 "rink",
1670 "Rio",
1671 "rip",
1672 "ripen",
1673 "rise",
1674 "risk",
1675 "rite",
1676 "rival",
1677 "river",
1678 "road",
1679 "roar",
1680 "rob",
1681 "robe",
1682 "robin",
1683 "rodeo",
1684 "roe",
1685 "roil",
1686 "role",
1687 "Roman",
1688 "Rome",
1689 "romp",
1690 "roof",
1691 "room",
1692 "roost",
1693 "Rosen",
1694 "rot",
1695 "rouge",
1696 "round",
1697 "rout",
1698 "rove",
1699 "Roy",
1700 "Royce",
1701 "r's",
1702 "Ruben",
1703 "ruby",
1704 "rude",
1705 "Rudy",
1706 "rug",
1707 "rule",
1708 "rummy",
1709 "run",
1710 "rung",
1711 "runt",
1712 "rupee",
1713 "ruse",
1714 "rusk",
1715 "Russo",
1716 "rusty",
1717 "Ruth",
1718 "rutty",
1719 "Ryan",
1720 "rye",
1721 "sa",
1722 "sabra",
1723 "sad",
1724 "sag",
1725 "sage",
1726 "sake",
1727 "sale",
1728 "Salk",
1729 "salty",
1730 "salve",
1731 "Sam",
1732 "same",
1733 "Samoa",
1734 "sane",
1735 "sank",
1736 "Santa",
1737 "Sao",
1738 "sappy",
1739 "Sarah",
1740 "sari",
1741 "satyr",
1742 "Saudi",
1743 "Sault",
1744 "save",
1745 "savvy",
1746 "SC",
1747 "scald",
1748 "scalp",
1749 "scarf",
1750 "scat",
1751 "SCM",
1752 "scold",
1753 "scoot",
1754 "Scot",
1755 "scram",
1756 "scrub",
1757 "scud",
1758 "scull",
1759 "scum",
1760 "SD",
1761 "seal",
1762 "seamy",
1763 "sect",
1764 "sedge",
1765 "seedy",
1766 "seen",
1767 "seize",
1768 "semi",
1769 "sepal",
1770 "Sepoy",
1771 "septa",
1772 "serge",
1773 "serif",
1774 "servo",
1775 "set",
1776 "Seton",
1777 "setup",
1778 "sewn",
1779 "shad",
1780 "shag",
1781 "shah",
1782 "shaky",
1783 "shall",
1784 "shank",
1785 "shard",
1786 "Shari",
1787 "shaw",
1788 "Shea",
1789 "shed",
1790 "sheer",
1791 "shied",
1792 "shift",
1793 "shill",
1794 "shin",
1795 "shirk",
1796 "shish",
1797 "shoo",
1798 "shore",
1799 "shout",
1800 "shrew",
1801 "shrub",
1802 "shunt",
1803 "SIAM",
1804 "sib",
1805 "sibyl",
1806 "side",
1807 "sigh",
1808 "sigma",
1809 "silk",
1810 "silly",
1811 "silt",
1812 "Simon",
1813 "since",
1814 "sinew",
1815 "singe",
1816 "sinh",
1817 "Sioux",
1818 "sir",
1819 "siva",
1820 "sixty",
1821 "skeet",
1822 "skew",
1823 "skid",
1824 "skimp",
1825 "skulk",
1826 "Skye",
1827 "slab",
1828 "slag",
1829 "slake",
1830 "slap",
1831 "slay",
1832 "sleep",
1833 "sleet",
1834 "slick",
1835 "slim",
1836 "slimy",
1837 "slog",
1838 "slosh",
1839 "sloth",
1840 "slow",
1841 "slug",
1842 "slum",
1843 "slung",
1844 "slurp",
1845 "sly",
1846 "small",
1847 "smile",
1848 "smith",
1849 "smog",
1850 "smoky",
1851 "snack",
1852 "snark",
1853 "sneer",
1854 "snell",
1855 "snip",
1856 "snoop",
1857 "snore",
1858 "snow",
1859 "snub",
1860 "snug",
1861 "so",
1862 "soap",
1863 "soar",
1864 "soft",
1865 "soggy",
1866 "sold",
1867 "sole",
1868 "solid",
1869 "Solon",
1870 "solve",
1871 "some",
1872 "son",
1873 "sonny",
1874 "soon",
1875 "sorb",
1876 "sore",
1877 "sort",
1878 "south",
1879 "sow",
1880 "spa",
1881 "spade",
1882 "spare",
1883 "spark",
1884 "spasm",
1885 "spate",
1886 "spawn",
1887 "spear",
1888 "speed",
1889 "spell",
1890 "Spica",
1891 "spicy",
1892 "spiky",
1893 "spire",
1894 "Spiro",
1895 "splay",
1896 "spoil",
1897 "spook",
1898 "spool",
1899 "spore",
1900 "spout",
1901 "spree",
1902 "sprue",
1903 "spur",
1904 "spy",
1905 "squaw",
1906 "s's",
1907 "St",
1908 "stag",
1909 "staid",
1910 "stair",
1911 "stale",
1912 "stall",
1913 "stamp",
1914 "stand",
1915 "stark",
1916 "stash",
1917 "state",
1918 "stay",
1919 "stead",
1920 "steak",
1921 "steam",
1922 "steed",
1923 "Steen",
1924 "steer",
1925 "stern",
1926 "stew",
1927 "stile",
1928 "stilt",
1929 "stock",
1930 "stole",
1931 "stone",
1932 "stood",
1933 "stool",
1934 "stop",
1935 "storm",
1936 "story",
1937 "stove",
1938 "strap",
1939 "straw",
1940 "strip",
1941 "strum",
1942 "stud",
1943 "study",
1944 "stung",
1945 "stunt",
1946 "Sturm",
1947 "styli",
1948 "suave",
1949 "such",
1950 "sud",
1951 "sue",
1952 "Suez",
1953 "suit",
1954 "sulky",
1955 "sung",
1956 "sunny",
1957 "sup",
1958 "supra",
1959 "surge",
1960 "Sus",
1961 "sushi",
1962 "swank",
1963 "swap",
1964 "swear",
1965 "swelt",
1966 "swig",
1967 "swine",
1968 "swish",
1969 "swiss",
1970 "sword",
1971 "swung",
1972 "Syria",
1973 "syrup",
1974 "tab",
1975 "tabu",
1976 "tacit",
1977 "taffy",
1978 "Tahoe",
1979 "take",
1980 "tale",
1981 "talk",
1982 "tamp",
1983 "tang",
1984 "tango",
1985 "tanh",
1986 "Tanya",
1987 "tap",
1988 "tape",
1989 "tapir",
1990 "tappa",
1991 "tar",
1992 "tardy",
1993 "tarry",
1994 "task",
1995 "tasty",
1996 "tate",
1997 "tawny",
1998 "taxi",
1999 "teach",
2000 "tease",
2001 "tecum",
2002 "Telex",
2003 "tempt",
2004 "tenon",
2005 "tense",
2006 "tepid",
2007 "terry",
2008 "Tess",
2009 "Texas",
2010 "Thai",
2011 "than",
2012 "that",
2013 "Thea",
2014 "thee",
2015 "them",
2016 "then",
2017 "theta",
2018 "they",
2019 "thick",
2020 "thigh",
2021 "thin",
2022 "thing",
2023 "third",
2024 "three",
2025 "threw",
2026 "thug",
2027 "thus",
2028 "ti",
2029 "tibet",
2030 "tic",
2031 "tid",
2032 "tidy",
2033 "tied",
2034 "tift",
2035 "til",
2036 "tile",
2037 "tilt",
2038 "Timex",
2039 "Timon",
2040 "tinge",
2041 "tipsy",
2042 "tire",
2043 "tit",
2044 "tithe",
2045 "title",
2046 "TNT",
2047 "toad",
2048 "today",
2049 "tog",
2050 "Togo",
2051 "toil",
2052 "token",
2053 "told",
2054 "tome",
2055 "tommy",
2056 "tonal",
2057 "tong",
2058 "Toni",
2059 "tonk",
2060 "tony",
2061 "tool",
2062 "tooth",
2063 "top",
2064 "tor",
2065 "torch",
2066 "tori",
2067 "torr",
2068 "torso",
2069 "torus",
2070 "total",
2071 "totem",
2072 "tout",
2073 "tower",
2074 "town",
2075 "toxin",
2076 "track",
2077 "Tracy",
2078 "trag",
2079 "trail",
2080 "trait",
2081 "tramp",
2082 "trap",
2083 "tread",
2084 "tree",
2085 "trend",
2086 "tress",
2087 "trial",
2088 "tribe",
2089 "trill",
2090 "tripe",
2091 "troll",
2092 "troop",
2093 "trout",
2094 "truck",
2095 "Trudy",
2096 "trunk",
2097 "trust",
2098 "TRW",
2099 "t's",
2100 "TTL",
2101 "tub",
2102 "tube",
2103 "tuck",
2104 "Tudor",
2105 "tuft",
2106 "tulle",
2107 "tum",
2108 "tuna",
2109 "tune",
2110 "tunic",
2111 "Turin",
2112 "turk",
2113 "turn",
2114 "tusk",
2115 "tutu",
2116 "tweak",
2117 "twice",
2118 "twill",
2119 "twine",
2120 "twirl",
2121 "twit",
2122 "two",
2123 "tying",
2124 "ugly",
2125 "ultra",
2126 "umbra",
2127 "uncle",
2128 "union",
2129 "unite",
2130 "upend",
2131 "upper",
2132 "upset",
2133 "Upton",
2134 "urban",
2135 "urine",
2136 "us",
2137 "usage",
2138 "use",
2139 "USGS",
2140 "USIA",
2141 "usual",
2142 "usurp",
2143 "Utah",
2144 "utile",
2145 "v",
2146 "vade",
2147 "vague",
2148 "vain",
2149 "valid",
2150 "valve",
2151 "van",
2152 "vase",
2153 "vast",
2154 "Veda",
2155 "veer",
2156 "vein",
2157 "Vella",
2158 "venom",
2159 "Venus",
2160 "verb",
2161 "Verde",
2162 "versa",
2163 "vest",
2164 "vetch",
2165 "vex",
2166 "via",
2167 "vicar",
2168 "Vichy",
2169 "Vida",
2170 "vie",
2171 "Viet",
2172 "vigil",
2173 "viii",
2174 "villa",
2175 "vise",
2176 "visor",
2177 "vitae",
2178 "Vito",
2179 "viva",
2180 "vixen",
2181 "vocal",
2182 "voice",
2183 "Volta",
2184 "vowel",
2185 "v's",
2186 "w",
2187 "wack",
2188 "wacky",
2189 "wad",
2190 "wade",
2191 "wafer",
2192 "wag",
2193 "wah",
2194 "wail",
2195 "wait",
2196 "waive",
2197 "waken",
2198 "wale",
2199 "wally",
2200 "wan",
2201 "war",
2202 "ward",
2203 "ware",
2204 "warm",
2205 "warp",
2206 "warty",
2207 "was",
2208 "washy",
2209 "water",
2210 "watt",
2211 "Watts",
2212 "way",
2213 "Wayne",
2214 "weal",
2215 "wean",
2216 "wear",
2217 "web",
2218 "weber",
2219 "we'd",
2220 "wedge",
2221 "weed",
2222 "week",
2223 "Wei",
2224 "weird",
2225 "Welch",
2226 "well",
2227 "welsh",
2228 "wept",
2229 "were",
2230 "west",
2231 "wet",
2232 "wharf",
2233 "whee",
2234 "whelm",
2235 "when",
2236 "which",
2237 "whim",
2238 "whir",
2239 "whisk",
2240 "white",
2241 "whiz",
2242 "whoa",
2243 "whole",
2244 "whoop",
2245 "whop",
2246 "whose",
2247 "why",
2248 "widen",
2249 "widow",
2250 "wield",
2251 "Wier",
2252 "wile",
2253 "will",
2254 "Wilma",
2255 "wilt",
2256 "win",
2257 "winch",
2258 "wino",
2259 "wipe",
2260 "wise",
2261 "wispy",
2262 "witch",
2263 "withy",
2264 "witty",
2265 "woe",
2266 "wok",
2267 "wolve",
2268 "womb",
2269 "Wong",
2270 "Woods",
2271 "wool",
2272 "wop",
2273 "wordy",
2274 "work",
2275 "worm",
2276 "worse",
2277 "worst",
2278 "wove",
2279 "wow",
2280 "wreck",
2281 "wrest",
2282 "wrist",
2283 "Wu",
2284 "Wyatt",
2285 "Wylie",
2286 "Wyner",
2287 "x",
2288 "xenon",
2289 "x's",
2290 "yacht",
2291 "Yale",
2292 "yam",
2293 "yang",
2294 "yarn",
2295 "Yates",
2296 "year",
2297 "yeast",
2298 "Yeats",
2299 "Yemen",
2300 "yield",
2301 "yip",
2302 "yodel",
2303 "yoga",
2304 "yoke",
2305 "yore",
2306 "you'd",
2307 "y's",
2308 "Yves",
2309 "YWCA",
2310 "Zeiss",
2311 "zest",
2312 "zig",
2313 "zing",
2314 "zip",
2315 "Zoe",
2316 "zoo"
2317 };
diff --git a/baseline/source/anagram/anagram_stdlib.c b/baseline/source/anagram/anagram_stdlib.c
new file mode 100644
index 0000000..994350b
--- /dev/null
+++ b/baseline/source/anagram/anagram_stdlib.c
@@ -0,0 +1,153 @@
1/*
2
3 This file is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_stdlib.c
7
8 Author: Raymond Chen
9
10 Function: This file contains the C standard library functions used by anagram.
11
12 Source: anagram
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#include "anagram_stdlib.h"
23#include "anagram_strings.h"
24
25/* Includes anagram_CompareFrequency */
26/* This function is included here because the WCC does not */
27/* support function pointers */
28#include "anagram_compare.h"
29
30
31void anagram_swapi( char *ii, char *ij, unsigned long es )
32{
33 char *i, *j, c;
34
35 i = ( char * )ii;
36 j = ( char * )ij;
37 _Pragma( "loopbound min 1 max 1" )
38 do {
39 c = *i;
40 *i ++ = *j;
41 *j ++ = c;
42 es -= sizeof( char );
43 } while ( es != 0 );
44}
45
46char *anagram_pivot( char *a, unsigned long n, unsigned long es )
47{
48 unsigned long j;
49 char *pi, *pj, *pk;
50
51 j = n / 6 * es;
52 pi = a + j; /* 1/6 */
53 j += j;
54 pj = pi + j; /* 1/2 */
55 pk = pj + j; /* 5/6 */
56 if ( anagram_CompareFrequency( pi, pj ) < 0 ) {
57 if ( anagram_CompareFrequency( pi, pk ) < 0 ) {
58 if ( anagram_CompareFrequency( pj, pk ) < 0 )
59 return pj;
60 return pk;
61 }
62 return pi;
63 }
64 if ( anagram_CompareFrequency( pj, pk ) < 0 ) {
65 if ( anagram_CompareFrequency( pi, pk ) < 0 )
66 return pi;
67 return pk;
68 }
69 return pj;
70}
71
72void anagram_qsorts( char *a, unsigned long n, unsigned long es )
73{
74 unsigned long j;
75 char *pi, *pj, *pn;
76 volatile unsigned int flowfactdummy = 0;
77
78 _Pragma( "loopbound min 0 max 6" )
79 while ( n > 1 ) {
80 if ( n > 10 )
81 pi = anagram_pivot( a, n, es );
82 else
83 pi = a + ( n >> 1 ) * es;
84
85 anagram_swapi( a, pi, es );
86 pi = a;
87 pn = a + n * es;
88 pj = pn;
89 _Pragma( "loopbound min 1 max 11" )
90 while ( 1 ) {
91 /* wcc note: this assignment expression was added to avoid assignment of
92 multiple loop bound annotations to same loop (cf. Ticket #0002323). */
93 flowfactdummy ++;
94 _Pragma( "loopbound min 1 max 5" )
95 do {
96 pi += es;
97 } while ( pi < pn && anagram_CompareFrequency( pi, a ) < 0 );
98 _Pragma( "loopbound min 1 max 4" )
99 do {
100 pj -= es;
101 } while ( pj > a && anagram_CompareFrequency( pj, a ) > 0 );
102 if ( pj < pi )
103 break;
104 anagram_swapi( pi, pj, es );
105 }
106 anagram_swapi( a, pj, es );
107 j = ( unsigned long )( pj - a ) / es;
108
109 n = n - j - 1;
110 if ( j >= n ) {
111 anagram_qsorts( a, j, es );
112 a += ( j + 1 ) * es;
113 } else {
114 anagram_qsorts( a + ( j + 1 )*es, n, es );
115 n = j;
116 }
117 }
118}
119
120void anagram_qsort( void *va, unsigned long n, unsigned long es )
121{
122 _Pragma( "marker call_qsorts" )
123 anagram_qsorts( ( char * )va, n, es );
124 _Pragma( "flowrestriction 1*anagram_qsorts <= 17*call_qsorts" )
125}
126
127
128/* This must be redefined for each new benchmark */
129#define ANAGRAM_HEAP_SIZE 18000
130
131static char anagram_simulated_heap[ANAGRAM_HEAP_SIZE];
132static unsigned int anagram_freeHeapPos;
133
134void *anagram_malloc( unsigned int numberOfBytes )
135{
136 void *currentPos = ( void * )&anagram_simulated_heap[ anagram_freeHeapPos ];
137 /* Get a 4-byte address for alignment purposes */
138 //anagram_freeHeapPos += ( ( numberOfBytes + 4 ) & ( unsigned int )0xfffffffc );
139 unsigned int rem = (numberOfBytes & ( unsigned int )0x3 );
140 unsigned int adjustment = rem ? 4 - rem : 0;
141 anagram_freeHeapPos += numberOfBytes + adjustment;
142 return currentPos;
143}
144
145void anagram_bzero( char *p, unsigned long len )
146{
147 unsigned long i;
148
149 _Pragma( "loopbound min 8 max 416" )
150 for ( i = 0; i < len; ++ i )
151 *p ++ = '\0';
152}
153
diff --git a/baseline/source/anagram/anagram_stdlib.h b/baseline/source/anagram/anagram_stdlib.h
new file mode 100644
index 0000000..0e745d5
--- /dev/null
+++ b/baseline/source/anagram/anagram_stdlib.h
@@ -0,0 +1,29 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_stdlib.h
7
8 Author: Raymond Chen
9
10 Function: This header contains some C standard library functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_STDLIB_H
23#define ANAGRAM_STDLIB_H
24
25void *anagram_malloc( unsigned int numberOfBytes );
26
27void anagram_qsort( void *va, unsigned long n, unsigned long es );
28
29#endif
diff --git a/baseline/source/anagram/anagram_strings.h b/baseline/source/anagram/anagram_strings.h
new file mode 100644
index 0000000..1e023fc
--- /dev/null
+++ b/baseline/source/anagram/anagram_strings.h
@@ -0,0 +1,27 @@
1/*
2
3 This header is part of the TACLeBench benchmark suite.
4 Version 2.0
5
6 Name: anagram_strings.h
7
8 Author: Raymond Chen
9
10 Function: This header contains some C standard library functions used by anagram.
11
12 Source: unknown
13
14 Original name: anagram
15
16 Changes: See ChangeLog.txt
17
18 License: See anagram.c
19
20*/
21
22#ifndef ANAGRAM_STRINGS_H
23#define ANAGRAM_STRINGS_H
24
25void anagram_bzero( char *p, unsigned long len );
26
27#endif
diff --git a/baseline/source/audiobeam/README b/baseline/source/audiobeam/README
new file mode 100644
index 0000000..e228eda
--- /dev/null
+++ b/baseline/source/audiobeam/README
@@ -0,0 +1,86 @@
1Readme file for Oxygen beamforming source code distribution
2-----------------------------------------------------------
3
4This is a very very beta distribution of beamforming source code from
5MIT LCS.
6
7There is only one source file, main.c, and one header file,
8main.h. You can compile everything using the Makefile included in the
9distribution.
10
11The input to the program is a text file containing floating
12point values for the signal read on each of the microphones. For n
13microphones, each line of the text files represents a temporal sample
14and should contain n floating point values separated by spaces, e.g.:
15
16-1.8569790e-004 -9.0919049e-004 3.6711283e-004 -1.0073081e-005 ...
17
18There are several modes of operation for the program:
19
201. The most basic mode is to process the microphone data and to
21calculate the output based on one beam focused on a particular point
22in space. The coordinates for the microphones and the focus point are
23specified inside main.c (eventually to be moved to a separate file).
24
252. Far field search mode. This mode assumes a far-field source (which
26means we have a planar wavefront) and a linear array, and sweeps over
27180 degrees in the plane of the array. The microphone coordinates are
28specified in main.c, and the NUM_ANGLES constant defines how many
29angle values should be tested (a value of 180 means one beam per each
30degree). The energy of the signal over a particular window
31(ANGLE_ENERGY_WINDOW_SIZE) is computed for each beam. The direction
32with maximum energy is considered the direction that the speech signal
33is coming from, and is printed out by the program.
34
353. Near-field hill climbing mode. This mode accepts a starting
36coordinate and attempts to "hill-climb" through the space seeking the
37maximum energy. Each of the x, y, and z coordinates are perturbed in
38the positive and negative directions at each time interval
39(GRID_ENERGY_WINDOW_SIZE) by a step size (GRID_STEP_SIZE). This
40perturbation, along with the original coordinate, produces seven
41coordinates to be tested. The direction with the maximum energy
42replaces the current reference coordinate. For instance, if we have a
43starting reference coordinate of (1,1,0) and our step size is 0.01, we
44will evaluate the energy for the following seven beams:
45
46(1,1,0)
47(0.99,1,0)
48(1.01,1,0)
49(1,0.99,0)
50(1,1.01,0)
51(1,1,-0.01)
52(1,1,0.01)
53
54Now let's say the beam (1,1.01,0) has the maximum energy; then this
55coordinate will replace the original reference coordinate of (1,1,0).
56
57For methods 2, and 3, we are not outputting anything to disk, we are
58just printing the result. This is because we have just started to work
59with these methods, and have not applied them in real systems. This
60code is currently being ported to RAW.
61
62To get a list of parameters for the delay_and_sum executable that is
63generated when the source is compiled, just type ./delay_and_sum .
64
65There is some sample data included with the program, in the data
66directory. There is some data for a near-field and far-field
67source. The README.txt file in each directory specifies the microphone
68and source position. The data1 file, when processed with a beamformer
69aligned in the proper direction should produce something like a sinc
70function (see
71http://ccrma-www.stanford.edu/~jos/Interpolation/sinc_function.html).
72
73The data2 file should produce an audio signal of a woman saying "the
74simplest method". If the beamformer is aligned properly, the noise
75should be reduced significantly over the source signal from only one
76of the microphones (use print_datafile.pl to isolate one
77microphone). You can convert the data file that the program produces
78to wave files using sox.
79
80
81
82
83
84---------------------------------
85Eugene Weinstein
86ecoder@mit.edu \ No newline at end of file
diff --git a/baseline/source/audiobeam/audiobeam.c b/baseline/source/audiobeam/audiobeam.c
new file mode 100644
index 0000000..ed5d656
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeam.c
@@ -0,0 +1,594 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeam
7
8 Author: Eugene Weinstein
9
10 Function: Audio beam former
11
12 Source: StreamIt
13 http://groups.csail.mit.edu/cag/streamit/
14
15 Changes: no functional changes
16
17 License: see license.txt
18
19*/
20
21
22/*
23 Include section
24*/
25
26#include "../extra.h"
27#include "audiobeamlibm.h"
28#include "audiobeamlibmalloc.h"
29#include "audiobeam.h"
30
31/*
32 Forward declaration of functions
33*/
34
35void audiobeam_init();
36int audiobeam_return();
37void audiobeam_main( void );
38//int main( void );
39void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays
40 prep_delays[], float *delays );
41float *audiobeam_parse_line( float *float_arr, int num_mic );
42long int audiobeam_find_max_in_arr( float *arr, int size );
43long int audiobeam_find_min_in_arr( float *arr, int size );
44int audiobeam_wrapped_inc_offset( int i, int offset, int max_i );
45int audiobeam_wrapped_dec_offset( int i, int offset, int max_i );
46int audiobeam_wrapped_inc( int i, int max_i );
47int audiobeam_wrapped_dec( int i, int max_i );
48struct audiobeam_DataQueue *audiobeam_init_data_queue( int max_delay,
49 int num_mic );
50struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic );
51void audiobeam_calc_distances( float *source_location,
52 float audiobeam_mic_locations[15][3],
53 float *distances,
54 int num_mic );
55void audiobeam_calc_delays( float *distances, float *delays, int sound_speed,
56 int sampling_rate, int num_mic );
57void audiobeam_adjust_delays( float *delays, int num_mic );
58float *audiobeam_calc_weights_lr ( int num_mic );
59float *audiobeam_calc_weights_left_only ( int num_mic );
60float audiobeam_calculate_energy( float *samples, int num_samples );
61float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays
62 preprocessed_delays[],
63 float **sample_queue,
64 int queue_head,
65 long int max_delay,
66 int num_mic,
67 float *weights );
68int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic,
69 float sampling_rate, float **beamform_results,
70 struct audiobeam_DataQueue *queue,
71 int num_beams, int window, float *weights );
72int audiobeam_calc_beamforming_result( struct audiobeam_Delays *delays,
73 float **beamform_results,
74 float *energies,
75 struct audiobeam_DataQueue *queue,
76 int num_beams, int window,
77 int hamming );
78void audiobeam_calc_single_pos( float source_location[3],
79 float audiobeam_mic_locations[15][3],
80 int hamming );
81
82
83/*
84 Declaration of global variables
85*/
86
87extern float audiobeam_input[5760];
88extern float audiobeam_mic_locations[15][3];
89extern float audiobeam_source_location[3];
90extern float audiobeam_origin_location[3];
91int audiobeam_input_pos;
92int audiobeam_checksum;
93
94
95/*
96 Initialization- and return-value-related functions
97*/
98
99void audiobeam_init()
100{
101 audiobeam_input_pos = 0;
102 audiobeam_checksum = 0;
103
104 unsigned int i;
105 unsigned char *p;
106 volatile char bitmask = 0;
107
108 /*
109 Apply volatile XOR-bitmask to entire input array.
110 */
111 p = ( unsigned char * ) &audiobeam_input[ 0 ];
112 _Pragma( "loopbound min 23040 max 23040" )
113 for ( i = 0; i < sizeof( audiobeam_input ); ++i, ++p )
114 *p ^= bitmask;
115
116 p = ( unsigned char * ) &audiobeam_mic_locations[ 0 ];
117 _Pragma( "loopbound min 180 max 180" )
118 for ( i = 0; i < sizeof( audiobeam_mic_locations ); ++i, ++p )
119 *p ^= bitmask;
120
121 p = ( unsigned char * ) &audiobeam_source_location[ 0 ];
122 _Pragma( "loopbound min 12 max 12" )
123 for ( i = 0; i < sizeof( audiobeam_source_location ); ++i, ++p )
124 *p ^= bitmask;
125
126 p = ( unsigned char * ) &audiobeam_origin_location[ 0 ];
127 _Pragma( "loopbound min 12 max 12" )
128 for ( i = 0; i < sizeof( audiobeam_origin_location ); ++i, ++p )
129 *p ^= bitmask;
130}
131
132
133int audiobeam_return()
134{
135 return ( audiobeam_checksum +1!= 0 );
136}
137
138
139/*
140 Algorithm core functions
141*/
142
143void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays
144 prep_delays[], float *delays )
145{
146 int i;
147
148 _Pragma( "loopbound min 15 max 15" )
149 for ( i = 0; i < 15; i++ ) {
150 prep_delays[i].delay = delays[i];
151 prep_delays[i].high = ( int ) audiobeam_ceil( delays[i] );
152 prep_delays[i].low = ( int ) audiobeam_floor( delays[i] );
153 prep_delays[i].offset = delays[i] - prep_delays[i].low;
154 }
155}
156
157
158float *audiobeam_parse_line( float *float_arr, int num_mic )
159{
160 int i;
161
162 _Pragma( "loopbound min 15 max 15" )
163 for ( i = 0; i < num_mic; i++ )
164 float_arr[i] = audiobeam_input[audiobeam_input_pos++];
165
166 return float_arr;
167}
168
169
170long int audiobeam_find_max_in_arr( float *arr, int size )
171{
172 int i;
173 float max = 0;
174
175 _Pragma( "loopbound min 15 max 15" )
176 for ( i = 0; i < size; i++ ) {
177 if ( arr[i] > max )
178 max = arr[i];
179 }
180
181 return audiobeam_ceil( max );
182}
183
184
185long int audiobeam_find_min_in_arr( float *arr, int size )
186{
187 int i;
188 float min = arr[0];
189
190 _Pragma( "loopbound min 15 max 15" )
191 for ( i = 0; i < size; i++ ) {
192 if ( arr[i] < min )
193 min = arr[i];
194 }
195
196 return audiobeam_floor( min );
197}
198
199
200int audiobeam_wrapped_inc_offset( int i, int offset, int max_i )
201{
202 if ( i + offset > max_i )
203 return ( i + offset - max_i - 1 );
204 else
205 return ( i + offset );
206}
207
208
209int audiobeam_wrapped_dec_offset( int i, int offset, int max_i )
210{
211 if ( i - offset < 0 )
212 return ( max_i - ( offset - i ) + 1 );
213 else
214 return ( i - offset );
215}
216
217
218int audiobeam_wrapped_inc( int i, int max_i )
219{
220 return audiobeam_wrapped_inc_offset( i, 1, max_i );
221}
222
223
224int audiobeam_wrapped_dec( int i, int max_i )
225{
226 return audiobeam_wrapped_dec_offset( i, 1, max_i );
227}
228
229
230struct audiobeam_DataQueue *audiobeam_init_data_queue( int max_delay,
231 int num_mic )
232{
233 int i, j;
234
235 struct audiobeam_DataQueue *queue;
236 queue = ( struct audiobeam_DataQueue * ) audiobeam_malloc( sizeof(
237 struct audiobeam_DataQueue ) );
238 queue->sample_queue = ( float ** ) audiobeam_malloc( ( max_delay + 1 )
239 * sizeof( float * ) );
240
241 _Pragma( "loopbound min 15 max 15" )
242 for ( i = 0; i < ( max_delay + 1 ); i++ ) {
243 ( queue->sample_queue )[i] = ( float * ) audiobeam_malloc( num_mic
244 * sizeof( float ) );
245 _Pragma( "loopbound min 15 max 15" )
246 for ( j = 0; j < num_mic; j++ ) {
247 ( queue->sample_queue )[i][j] = 0.0; // Initialize values to 0
248 }
249 }
250
251 queue->head = 0;
252 queue->tail = 0;
253 queue->full = 0;
254
255 return queue;
256}
257
258
259struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic )
260{
261 struct audiobeam_Delays *delays;
262 int i;
263
264 delays = ( struct audiobeam_Delays * ) audiobeam_malloc( sizeof(
265 struct audiobeam_Delays ) );
266
267 // Initialize the delays array
268 delays->delay_values = ( float ** ) audiobeam_malloc( num_angles
269 * sizeof( float * ) );
270
271 _Pragma( "loopbound min 1 max 1" )
272 for ( i = 0; i < ( num_angles ); i++ ) {
273 delays->delay_values[i] = ( float * ) audiobeam_malloc( num_mic
274 * sizeof( float ) );
275 }
276
277 return delays;
278}
279
280void audiobeam_calc_distances( float *source_location,
281 float audiobeam_mic_locations[15][3],
282 float *distances,
283 int num_mic )
284{
285 int i;
286
287 _Pragma( "loopbound min 15 max 15" )
288 for ( i = 0; i < num_mic; i++ ) {
289 distances[i] = ( audiobeam_sqrt( ( audiobeam_mic_locations[i][0]
290 - source_location[0] ) *
291 ( audiobeam_mic_locations[i][0]
292 - source_location[0] ) +
293 ( audiobeam_mic_locations[i][1]
294 - source_location[1] ) *
295 ( audiobeam_mic_locations[i][1]
296 - source_location[1] ) +
297 ( audiobeam_mic_locations[i][2]
298 - source_location[2] ) *
299 ( audiobeam_mic_locations[i][2]
300 - source_location[2] ) ) );
301 }
302}
303
304
305void audiobeam_calc_delays( float *distances, float *delays, int sound_speed,
306 int sampling_rate, int num_mic )
307{
308 int i;
309
310 _Pragma( "loopbound min 15 max 15" )
311 for ( i = 0; i < num_mic; i++ )
312 delays[i] = ( distances[i] / sound_speed ) * sampling_rate;
313}
314
315
316void audiobeam_adjust_delays( float *delays, int num_mic )
317{
318 int i;
319 long int min_delay = audiobeam_find_min_in_arr ( delays, num_mic ) - 1;
320
321 _Pragma( "loopbound min 15 max 15" )
322 for ( i = 0; i < num_mic; i++ )
323 delays[i] -= min_delay;
324}
325
326
327float *audiobeam_calc_weights_lr ( int num_mic )
328{
329 float *weights = ( float * ) audiobeam_malloc( num_mic * sizeof( float ) );
330 int index = 0;
331 int y, z;
332
333 int half = num_mic / 4;
334
335 _Pragma( "loopbound min 0 max 0" )
336 for ( z = 1; z >= -1; z -= 2 ) {
337 _Pragma( "loopbound min 0 max 0" )
338 for ( y = 0; y < half; y++ ) {
339 weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y
340 / half );
341 index++;
342 }
343 _Pragma( "loopbound min 0 max 0" )
344 for ( y = 0; y < half; y++ ) {
345 weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * ( -y )
346 / half );
347 index++;
348 }
349 }
350
351 return weights;
352}
353
354
355float *audiobeam_calc_weights_left_only ( int num_mic )
356{
357 float *weights = ( float * ) audiobeam_malloc( num_mic * sizeof( float ) );
358 int index = 0;
359 int y;
360
361 int half = num_mic / 2;
362
363 _Pragma( "loopbound min 15 max 15" )
364 for ( y = -half; y <= half; y++ ) {
365 weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y / half );
366 index++;
367 }
368
369 return weights;
370}
371
372
373float audiobeam_calculate_energy( float *samples, int num_samples )
374{
375 int i;
376 float sum = 0.0;
377
378 _Pragma( "loopbound min 0 max 0" )
379 for ( i = 0; i < num_samples; i++ )
380 sum += ( samples[i] * samples[i] );
381
382 return sum;
383}
384
385
386float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays
387 preprocessed_delays[],
388 float **sample_queue,
389 int queue_head,
390 long int max_delay,
391 int num_mic,
392 float *weights )
393{
394 int i;
395 float sum = 0;
396 int delay_floor;
397 int delay_ceil;
398 int low_index;
399 int high_index;
400 float interpolated_value;
401
402 // add up all the num_mic delayed samples
403 _Pragma( "loopbound min 15 max 15" )
404 for ( i = 0; i < num_mic; i++ ) {
405 delay_floor = preprocessed_delays[i].low;
406 delay_ceil = preprocessed_delays[i].high;
407
408 // Inline wrap around here
409 // Low index gets index of sample right before desired sample
410 low_index = queue_head + delay_floor;
411 if ( low_index > max_delay )
412 low_index -= ( max_delay + 1 );
413
414 // High index gets index of sample right after desired sample
415 high_index = queue_head + delay_ceil;
416 if ( high_index > max_delay )
417 high_index -= ( max_delay + 1 );
418
419 // i gives the value of the microphone we want. However, since
420 // the array only has microphones first_mic to last_mic, we
421 // need to offset our index by first_mic
422
423 interpolated_value = ( ( ( sample_queue[high_index][i] -
424 sample_queue[low_index][i] )
425 * ( preprocessed_delays[i].offset ) )
426 + sample_queue[low_index][i] );
427
428 // If we have microphone weights, multiply the value by the weight
429 if ( weights != 0 )
430 sum += ( interpolated_value * weights[i] );
431 else
432 sum += interpolated_value;
433 }
434
435 return sum;
436
437}
438
439
440int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic,
441 float sampling_rate, float **beamform_results,
442 struct audiobeam_DataQueue *queue,
443 int num_beams, int window, float *weights )
444{
445 int i, j;
446 float time_index = 0;
447 float time_index_inc = ( 1.0 / sampling_rate );
448
449 float value;
450
451 int done = 0;
452
453 struct audiobeam_PreprocessedDelays preprocessed_delays[15];
454
455 audiobeam_preprocess_delays( preprocessed_delays, delays->delay_values[0] );
456
457 _Pragma( "loopbound min 13 max 13" )
458 for ( i = 0; i < delays->max_delay - 1; i++ ) {
459 if ( audiobeam_input_pos < 5760 )
460 audiobeam_parse_line( ( queue->sample_queue )[queue->head], 15 );
461 else
462 return -1;
463 queue->head = audiobeam_wrapped_inc( queue->head, delays->max_delay );
464 }
465 _Pragma( "loopbound min 371 max 371" )
466 for ( i = 0; ( i < window ) || ( window < 0 ) ; i++ ) {
467 if ( audiobeam_input_pos < 5760 )
468 audiobeam_parse_line( ( queue->sample_queue )[queue->head], 15 );
469 else {
470 done = 1;
471 break;
472 }
473
474 _Pragma( "loopbound min 1 max 1" )
475 for ( j = 0; j < num_beams; j++ ) {
476 value = audiobeam_do_beamforming( preprocessed_delays,
477 ( queue->sample_queue ),
478 audiobeam_wrapped_inc( queue->head,
479 delays->max_delay ),
480 delays->max_delay, num_mic, weights );
481
482
483 value = value / num_mic;
484
485 if ( beamform_results != 0 )
486 beamform_results[j][i] = value;
487 }
488
489 queue->tail = queue->head;
490 queue->head = audiobeam_wrapped_inc( queue->head, delays->max_delay );
491
492 time_index += time_index_inc;
493 }
494
495 return ( done );
496}
497
498
499int audiobeam_calc_beamforming_result( struct audiobeam_Delays *delays,
500 float **beamform_results,
501 float *energies,
502 struct audiobeam_DataQueue *queue,
503 int num_beams, int window,
504 int hamming )
505{
506 int i;
507 int done;
508 float *weights = 0;
509
510 if ( hamming ) {
511 if ( ( 15 % 2 ) == 1 )
512 weights = audiobeam_calc_weights_left_only( 15 );
513 else
514 weights = audiobeam_calc_weights_lr( 15 );
515 }
516
517 done = audiobeam_process_signal( delays, 15, 16000,
518 beamform_results,
519 queue, num_beams, window, weights );
520
521 if ( beamform_results != 0 ) {
522 _Pragma( "loopbound min 1 max 1" )
523 for ( i = 0; i < num_beams; i++ )
524 energies[i] = audiobeam_calculate_energy( beamform_results[i], window );
525 }
526 return done;
527}
528
529
530void audiobeam_calc_single_pos( float source_location[3],
531 float audiobeam_mic_locations[15][3],
532 int hamming )
533{
534 float mic_distances[15];
535 struct audiobeam_Delays *delays = audiobeam_init_delays( 1, 15 );
536 struct audiobeam_DataQueue *queue;
537
538 float **beamform_results;
539 float *energies;
540
541 beamform_results = ( float ** ) audiobeam_malloc( 1 * sizeof( float * ) );
542 beamform_results[0] = ( float * ) audiobeam_malloc( 384 * sizeof( float ) );
543 energies = ( float * ) audiobeam_malloc( 1 * sizeof( float * ) );
544
545 // Calculate distances from source to each of mics
546 audiobeam_calc_distances( source_location, audiobeam_mic_locations,
547 mic_distances, 15 );
548
549 audiobeam_calc_delays( mic_distances,
550 delays->delay_values[0],
551 342, 16000, 15 );
552
553 audiobeam_adjust_delays( delays->delay_values[0], 15 );
554
555 delays->max_delay = audiobeam_find_max_in_arr ( delays->delay_values[0], 15 );
556
557 queue = audiobeam_init_data_queue( delays->max_delay, 15 );
558
559 audiobeam_calc_beamforming_result( delays, beamform_results,
560 energies, queue, 1, -1, hamming );
561
562 audiobeam_checksum += beamform_results[0][0] * 1000;
563}
564
565
566/*
567 Main functions
568*/
569
570void _Pragma( "entrypoint" ) audiobeam_main( void )
571{
572 char hamming = 1;
573 audiobeam_calc_single_pos( audiobeam_source_location,
574 audiobeam_mic_locations,
575 hamming );
576}
577
578
579int main( int argc, char **argv )
580{
581 //SET_UP
582 int jobsComplete;
583 int maxJobs=100;
584 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
585 // START_LOOP
586 audiobeam_init();
587 audiobeam_main();
588 // STOP_LOOP
589 }
590 //WRITE_TO_FILE
591
592 return ( audiobeam_return() );
593}
594
diff --git a/baseline/source/audiobeam/audiobeam.h b/baseline/source/audiobeam/audiobeam.h
new file mode 100644
index 0000000..ff2e844
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeam.h
@@ -0,0 +1,50 @@
1#ifndef AUDIOBEAM_MAIN_H
2#define AUDIOBEAM_MAIN_H
3
4struct audiobeam_DataQueue {
5 float **sample_queue;
6 int head;
7 int tail;
8 unsigned char full;
9};
10
11
12struct audiobeam_Delays {
13 float **delay_values;
14 long int max_delay;
15};
16
17
18struct audiobeam_PreprocessedDelays {
19 float delay;
20 int low;
21 int high;
22 float offset;
23};
24
25
26#undef FLT_MAX
27#define FLT_MAX 999e999
28
29#define SOUND_SPEED 342
30#define SAMPLING_RATE 16000
31#define CARTESIAN_DISTANCE(x1,y1,z1,x2,y2,z2) (sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2)));
32
33#define NUM_MIC 15
34#define ANGLE_ENERGY_WINDOW_SIZE 400
35#define GRID_STEP_SIZE 0.003 // .3cm
36#define NUM_DIRS 7
37#define NUM_TILES 16
38
39#define MIC_HORIZ_SPACE 0.038257
40#define MIC_VERT_SPACE 0.015001
41#define TWO23 8388608.0 // 2^23
42#define BUFFER_SIZE 384 // No of input-tupels (each with NUM_MIC elements)
43#define NUM_MIC_IN_CHAIN 32
44#define NUM_BOARDS_IN_CHAIN 16
45#define INPUT_LENGTH 5760
46
47#define INTERPOLATE(low_value, high_value, offset) (((high_value-low_value)*(offset)) + low_value)
48
49#endif
50
diff --git a/baseline/source/audiobeam/audiobeaminput.c b/baseline/source/audiobeam/audiobeaminput.c
new file mode 100644
index 0000000..efcd067
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeaminput.c
@@ -0,0 +1,5784 @@
1float audiobeam_input[5760] = {
2 -2.1628241e-002,
3 -6.1782300e-002,
4 1.2674258e-002,
5 4.5557573e-002,
6 -3.1999024e-002,
7 1.5042214e-002,
8 -2.2025290e-002,
9 -1.1691264e-001,
10 -1.1481735e-002,
11 -1.4446880e-002,
12 -1.5755706e-002,
13 -8.0576309e-002,
14 2.0622295e-002,
15 -1.9724793e-003,
16 -1.2299200e-001,
17 -8.3279195e-002,
18 -1.0825949e-002,
19 7.5347056e-002,
20 -3.6992287e-003,
21 1.2980213e-002,
22 5.9641118e-002,
23 1.8884644e-002,
24 -5.5868450e-002,
25 4.1899706e-002,
26 -2.0939881e-002,
27 2.0535662e-002,
28 -9.9773254e-002,
29 -1.5328980e-002,
30 2.1354349e-002,
31 1.3485441e-002,
32 6.2665707e-003,
33 -1.0335293e-002,
34 -4.1743319e-002,
35 4.3513189e-002,
36 -4.2254620e-002,
37 -2.7446285e-002,
38 4.5134873e-002,
39 5.6054726e-002,
40 6.2557771e-002,
41 4.2653265e-002,
42 7.6308850e-003,
43 1.4700700e-002,
44 5.4820763e-002,
45 -1.3939644e-002,
46 -8.8708573e-002,
47 1.4383734e-002,
48 4.0463345e-003,
49 3.5856296e-002,
50 2.7271902e-002,
51 2.0721019e-002,
52 3.5167562e-002,
53 -2.7007340e-002,
54 -1.3367771e-002,
55 -6.8606571e-002,
56 -1.1089227e-001,
57 7.3041941e-002,
58 -5.2066383e-002,
59 -5.1117839e-003,
60 -3.7742692e-002,
61 -1.1895006e-002,
62 -5.7323089e-002,
63 -5.4802003e-003,
64 -8.4072455e-003,
65 1.5633496e-002,
66 4.6059069e-002,
67 -6.1861422e-002,
68 -3.3034801e-002,
69 1.7182310e-002,
70 1.1807449e-001,
71 8.2171643e-003,
72 -1.4691311e-002,
73 -7.2660364e-004,
74 4.6637366e-002,
75 -6.9687813e-004,
76 -2.7780373e-002,
77 5.9544506e-002,
78 -5.6050055e-003,
79 -3.5444498e-002,
80 1.2845303e-002,
81 -1.0379076e-001,
82 -8.5864760e-002,
83 1.9192324e-002,
84 -2.6644473e-003,
85 5.4431089e-003,
86 -9.2110237e-003,
87 7.9344657e-002,
88 4.7203951e-002,
89 9.6834909e-002,
90 -1.0553527e-001,
91 -8.5097540e-004,
92 5.9460688e-002,
93 4.4844228e-002,
94 -2.8858692e-002,
95 4.4496937e-002,
96 -3.9902243e-002,
97 5.5557069e-002,
98 -1.1814152e-002,
99 -5.8464847e-002,
100 -1.0753965e-002,
101 5.7336183e-002,
102 2.6582677e-002,
103 2.2119089e-002,
104 -1.4469086e-002,
105 3.2141585e-002,
106 -1.0303352e-001,
107 -1.8856419e-003,
108 3.8161312e-002,
109 -3.7091166e-002,
110 -5.1262587e-003,
111 4.2556931e-002,
112 -5.8465556e-002,
113 4.2193534e-002,
114 -1.4951154e-002,
115 1.7423551e-002,
116 2.7519487e-002,
117 -9.0048353e-002,
118 -2.6206603e-002,
119 -1.1536221e-002,
120 4.5418578e-002,
121 -9.1746774e-002,
122 1.6370112e-002,
123 8.2439024e-003,
124 -1.7961312e-002,
125 -7.5403629e-002,
126 -6.6798880e-003,
127 -9.2569474e-003,
128 -1.8133432e-002,
129 -6.7922929e-002,
130 -3.3209516e-002,
131 4.7587886e-002,
132 -4.4354675e-002,
133 -7.9939507e-002,
134 -1.0312521e-001,
135 -4.6389013e-002,
136 -6.8492137e-002,
137 8.7253275e-003,
138 -1.0040243e-002,
139 -2.3972856e-002,
140 1.9377428e-003,
141 -1.2364076e-002,
142 -3.3033927e-002,
143 6.2238030e-002,
144 -4.7879158e-002,
145 -1.9680886e-002,
146 -3.2198806e-002,
147 -4.0721657e-003,
148 -1.7973043e-002,
149 9.3910391e-003,
150 -9.1117967e-002,
151 3.6036154e-002,
152 -9.3285589e-003,
153 -3.9239303e-002,
154 -1.4022387e-001,
155 1.1102588e-001,
156 -9.1222642e-002,
157 -4.0301199e-002,
158 7.1912258e-002,
159 1.5040754e-002,
160 8.1648312e-002,
161 3.9995645e-002,
162 -1.3388074e-002,
163 1.9629547e-002,
164 3.5710780e-003,
165 1.1166215e-002,
166 -4.0137762e-002,
167 3.6284046e-002,
168 4.1404491e-002,
169 -5.8754380e-002,
170 -7.8104994e-003,
171 -5.3507568e-002,
172 1.3005354e-002,
173 -1.6914462e-002,
174 8.5270739e-002,
175 3.9979512e-002,
176 4.5752537e-002,
177 -3.1159018e-002,
178 4.9213792e-002,
179 6.1313765e-002,
180 4.3386180e-002,
181 -1.1103888e-002,
182 -2.9414395e-002,
183 -1.2976305e-002,
184 6.2751925e-002,
185 2.6120284e-002,
186 -2.4616119e-002,
187 -3.6435894e-002,
188 7.1182254e-002,
189 2.2753153e-002,
190 3.0188200e-002,
191 -3.1009759e-002,
192 -8.5616927e-002,
193 -4.6712075e-002,
194 1.0069141e-002,
195 -1.2036765e-001,
196 3.4740635e-002,
197 1.0916700e-001,
198 -7.5289504e-002,
199 -5.3676914e-002,
200 -1.6396310e-002,
201 5.2259303e-002,
202 -2.2119146e-002,
203 4.3186864e-002,
204 5.1169779e-002,
205 6.6785827e-002,
206 8.4849447e-002,
207 -5.2696816e-002,
208 -6.5414943e-003,
209 8.6775788e-002,
210 8.7802920e-003,
211 2.8938998e-002,
212 -6.8520041e-003,
213 5.1510683e-002,
214 -2.9026553e-002,
215 3.8173521e-002,
216 2.2338277e-002,
217 3.0163548e-002,
218 -4.3077452e-002,
219 7.9805371e-002,
220 4.7317864e-002,
221 -3.1363067e-002,
222 3.0903885e-002,
223 -1.3112581e-002,
224 4.6251235e-002,
225 2.5813919e-002,
226 -5.2188163e-002,
227 5.9587326e-003,
228 1.0092254e-002,
229 1.2104228e-002,
230 2.7865320e-002,
231 3.4901635e-002,
232 -2.5736803e-002,
233 1.3229570e-002,
234 3.6694281e-003,
235 3.3012708e-002,
236 2.9284882e-002,
237 3.0060870e-002,
238 4.5508139e-002,
239 -3.6974026e-002,
240 7.7034396e-002,
241 -6.8227707e-002,
242 5.3618194e-002,
243 -6.1636629e-002,
244 4.1438304e-002,
245 1.1367451e-002,
246 -4.4009108e-002,
247 -2.3843912e-002,
248 -1.6703032e-002,
249 3.7265590e-002,
250 -7.8425072e-003,
251 7.0384481e-002,
252 -2.4218783e-002,
253 -3.5625536e-002,
254 1.8010625e-002,
255 1.1966647e-002,
256 2.5491626e-003,
257 3.1251434e-003,
258 -2.6075724e-002,
259 -4.3802442e-002,
260 -1.2920483e-002,
261 3.3085779e-002,
262 -3.9037317e-003,
263 -2.8269926e-002,
264 4.1542553e-002,
265 -8.2930418e-002,
266 5.6657974e-002,
267 3.4391329e-002,
268 -5.5825221e-002,
269 6.8989268e-002,
270 1.2541652e-003,
271 -7.7722092e-002,
272 -4.6334370e-003,
273 3.1744148e-002,
274 -5.5503811e-002,
275 -3.4445949e-002,
276 -9.4038308e-003,
277 -2.7828988e-002,
278 1.0887660e-001,
279 1.3636863e-002,
280 -3.7585580e-002,
281 4.0418722e-002,
282 -1.3737476e-002,
283 -5.0488197e-003,
284 1.3194491e-001,
285 7.2649277e-002,
286 -3.6200249e-002,
287 -4.1687712e-002,
288 -1.7974402e-001,
289 -9.9629449e-002,
290 -8.8510199e-002,
291 -3.2055261e-002,
292 1.7036375e-002,
293 1.8071052e-002,
294 4.4934493e-002,
295 -1.0864015e-002,
296 9.9226525e-003,
297 -1.6564939e-002,
298 -3.4734325e-002,
299 3.5725355e-002,
300 3.0344723e-002,
301 -3.6905057e-002,
302 1.4666105e-002,
303 -9.1517247e-002,
304 -3.3012325e-002,
305 5.8220711e-002,
306 -6.8047909e-003,
307 3.6517819e-002,
308 8.7157879e-002,
309 -1.4120887e-002,
310 5.4666271e-002,
311 2.0673658e-002,
312 -5.8489896e-002,
313 -1.0321028e-001,
314 1.7051732e-002,
315 -4.4728363e-003,
316 7.1522488e-004,
317 -6.6825032e-002,
318 -3.0624456e-002,
319 5.7023563e-002,
320 -1.1878060e-002,
321 1.7099754e-002,
322 4.3931414e-002,
323 6.1445253e-002,
324 3.9676417e-002,
325 7.7224665e-002,
326 6.4921134e-002,
327 -5.6517669e-003,
328 5.5906816e-002,
329 -2.1154100e-002,
330 2.4198912e-002,
331 1.2288710e-002,
332 3.5640310e-002,
333 -3.7175887e-002,
334 -6.0273241e-002,
335 6.4682700e-003,
336 2.1266448e-002,
337 -6.8591151e-002,
338 1.1184946e-002,
339 4.6699013e-003,
340 -1.0346103e-001,
341 -7.7362572e-002,
342 4.7383361e-003,
343 -1.4630850e-002,
344 3.7812788e-002,
345 1.6292353e-002,
346 -4.8009838e-002,
347 8.0999615e-002,
348 2.1004391e-003,
349 1.5541126e-001,
350 -6.1366286e-003,
351 -7.1757358e-002,
352 -1.8036409e-002,
353 4.4754181e-002,
354 8.4250625e-003,
355 2.0321052e-002,
356 2.3096646e-002,
357 -4.7739081e-002,
358 -3.6540263e-002,
359 -1.3962473e-002,
360 -1.4429499e-002,
361 5.4134628e-002,
362 -3.4826503e-002,
363 -9.5953591e-002,
364 -2.5723076e-003,
365 2.5258029e-002,
366 -1.7985838e-002,
367 -3.2436879e-002,
368 7.4368827e-002,
369 7.8647624e-002,
370 1.0656742e-002,
371 8.4282290e-003,
372 2.5266494e-002,
373 1.0782181e-002,
374 7.0122588e-002,
375 4.5656108e-002,
376 -1.7103947e-002,
377 4.2780530e-002,
378 -9.6794177e-003,
379 -6.4130219e-003,
380 -9.2925547e-002,
381 5.4742908e-002,
382 -7.5128799e-002,
383 -7.3489810e-002,
384 -3.0056779e-003,
385 -7.9295585e-003,
386 -2.1268989e-002,
387 -1.8030581e-002,
388 1.8197354e-002,
389 -9.1941398e-002,
390 -6.5053760e-002,
391 -2.8177888e-002,
392 6.2682028e-002,
393 -2.5915727e-002,
394 -1.5832074e-002,
395 6.8064152e-002,
396 7.3910585e-003,
397 9.9715351e-003,
398 1.4832463e-002,
399 -8.5346638e-004,
400 1.7638664e-002,
401 3.0446443e-002,
402 -1.2396491e-002,
403 -5.8601288e-002,
404 -5.7627198e-003,
405 -7.1554886e-003,
406 -6.3799636e-003,
407 -7.9695655e-002,
408 2.4753204e-002,
409 8.6758471e-003,
410 -4.9728861e-002,
411 2.0786272e-002,
412 -7.6560881e-002,
413 1.8730544e-002,
414 2.1715688e-002,
415 4.1880687e-002,
416 -4.0154045e-002,
417 -3.0255220e-002,
418 7.5668890e-002,
419 2.6577586e-002,
420 6.0758844e-002,
421 4.1263811e-002,
422 -7.2132197e-002,
423 -5.4040115e-002,
424 4.5831681e-002,
425 2.9148772e-002,
426 -9.9761159e-002,
427 -2.4308664e-002,
428 -5.9443444e-002,
429 3.9842573e-002,
430 -4.8058590e-002,
431 -1.6081315e-002,
432 5.2772543e-002,
433 1.9132275e-002,
434 1.3499840e-002,
435 -2.5313375e-002,
436 4.1852174e-002,
437 2.8461234e-002,
438 3.5598046e-002,
439 -4.2019346e-002,
440 3.0022497e-002,
441 1.3199080e-003,
442 8.3394564e-002,
443 2.2949521e-002,
444 4.1566899e-002,
445 1.1383869e-002,
446 -2.6939783e-002,
447 -1.8963007e-002,
448 -6.3268458e-002,
449 5.8324716e-002,
450 4.8789982e-002,
451 5.6035385e-002,
452 -2.0057577e-002,
453 4.8354809e-002,
454 6.4102491e-002,
455 8.5367473e-003,
456 -4.4917671e-003,
457 5.3137245e-002,
458 -3.4406597e-003,
459 -2.5126308e-002,
460 3.6564998e-003,
461 9.6593471e-002,
462 7.4728111e-002,
463 -6.7266129e-002,
464 -4.9014918e-002,
465 7.2046324e-005,
466 1.0162088e-001,
467 3.4409693e-002,
468 7.3462774e-003,
469 -8.0225074e-002,
470 4.8609099e-002,
471 3.2217993e-002,
472 -2.8071970e-002,
473 -3.6815087e-002,
474 3.0467444e-002,
475 4.3287817e-002,
476 -1.3733658e-002,
477 2.5769175e-002,
478 2.6532442e-002,
479 6.3705272e-002,
480 9.0108580e-004,
481 -8.9331571e-003,
482 4.0743375e-002,
483 2.1807528e-002,
484 7.9702732e-002,
485 -7.5750752e-003,
486 7.0674335e-002,
487 3.7582849e-002,
488 3.9334641e-003,
489 -2.5679423e-002,
490 2.2647574e-002,
491 -6.4712014e-002,
492 2.4315794e-002,
493 1.5494849e-002,
494 -3.9942923e-002,
495 3.3496104e-002,
496 -5.9740340e-002,
497 3.5474677e-002,
498 6.6577221e-002,
499 6.8351408e-002,
500 -7.7174045e-002,
501 -3.3267903e-002,
502 -4.3616992e-002,
503 1.2970427e-001,
504 6.0899210e-002,
505 4.3444379e-003,
506 -1.0402039e-001,
507 4.3108587e-002,
508 1.3577371e-002,
509 3.3900628e-002,
510 7.3707838e-003,
511 -1.5925799e-002,
512 6.4439821e-002,
513 1.7075281e-003,
514 1.0684273e-001,
515 1.3675111e-002,
516 -1.8111888e-003,
517 -2.8508186e-002,
518 -6.5596762e-002,
519 1.8536230e-002,
520 2.3318748e-002,
521 4.7302415e-002,
522 7.7239329e-003,
523 -2.4929896e-002,
524 -3.5669784e-002,
525 4.8605025e-002,
526 9.7598834e-002,
527 3.3591893e-002,
528 1.3978895e-002,
529 2.2590039e-002,
530 -5.5155328e-002,
531 -2.3844007e-002,
532 -2.8932963e-002,
533 -4.5784933e-002,
534 -2.5579789e-002,
535 8.6706332e-002,
536 8.5991126e-002,
537 -4.4830492e-002,
538 1.7419718e-002,
539 1.4916965e-002,
540 -6.2744229e-002,
541 -2.1218715e-002,
542 5.9749921e-002,
543 2.6471628e-003,
544 1.4696082e-002,
545 -1.1916464e-001,
546 -7.4054943e-002,
547 3.3702032e-002,
548 -7.2744375e-002,
549 2.0153878e-002,
550 -4.7562683e-002,
551 -3.2418295e-002,
552 1.8784044e-002,
553 9.4509719e-002,
554 8.6064590e-002,
555 -1.2657551e-002,
556 -3.8219708e-002,
557 -5.9906689e-002,
558 3.8677878e-002,
559 3.2909039e-002,
560 1.3356926e-002,
561 -1.9001381e-002,
562 -3.9834512e-002,
563 1.6185466e-002,
564 -2.1554965e-002,
565 -1.0883439e-001,
566 -2.9635956e-002,
567 1.2873885e-002,
568 2.7852743e-002,
569 3.5614484e-003,
570 -4.7306763e-002,
571 -1.0771995e-001,
572 -7.9289260e-004,
573 1.1021590e-001,
574 -6.1261912e-003,
575 5.2735506e-002,
576 -5.0261529e-002,
577 3.2092184e-002,
578 3.1401447e-002,
579 2.6629993e-002,
580 -2.9882337e-003,
581 -6.0317700e-002,
582 -3.0940994e-002,
583 -3.8375379e-002,
584 -1.0663192e-001,
585 -1.1058175e-002,
586 -5.6424824e-002,
587 -7.7026313e-003,
588 -4.1079471e-002,
589 -2.1629167e-002,
590 -2.6973772e-002,
591 -4.5878364e-002,
592 1.5542578e-002,
593 -4.9103021e-002,
594 -1.0554701e-002,
595 -5.0947614e-002,
596 -3.1865395e-002,
597 9.0008999e-002,
598 4.5801038e-002,
599 1.5787324e-002,
600 6.1816926e-002,
601 3.9975029e-002,
602 -8.0101743e-002,
603 3.6589676e-002,
604 -4.0044532e-002,
605 -5.4152676e-003,
606 -2.7100833e-002,
607 2.0669295e-003,
608 4.2072166e-002,
609 -4.8541169e-002,
610 -6.0994910e-002,
611 7.2269246e-002,
612 1.8547974e-002,
613 3.2317037e-002,
614 -3.7668570e-002,
615 2.3090187e-002,
616 -8.4282566e-003,
617 1.2909956e-002,
618 -4.6799208e-003,
619 -7.5882838e-002,
620 -4.5005968e-002,
621 6.0924318e-002,
622 1.5170746e-002,
623 -8.0718858e-003,
624 -3.1913614e-002,
625 2.9448478e-002,
626 5.6982375e-002,
627 -2.2421475e-002,
628 2.7408554e-002,
629 -1.0052456e-001,
630 -3.0342741e-002,
631 -8.0221320e-002,
632 -5.2820631e-002,
633 1.4287569e-002,
634 -3.5261023e-002,
635 -1.2712299e-002,
636 1.0298138e-002,
637 -7.4545734e-002,
638 -7.1662807e-003,
639 -6.3049311e-002,
640 -3.3128714e-003,
641 -3.7018937e-002,
642 -9.2155629e-002,
643 4.4295353e-003,
644 -2.5345078e-002,
645 -5.0175815e-004,
646 -2.2425974e-002,
647 7.0790673e-002,
648 4.6067398e-002,
649 1.3356450e-002,
650 -7.5350427e-002,
651 9.2272647e-002,
652 -6.0388207e-002,
653 6.2880311e-002,
654 -4.6813092e-002,
655 6.4358587e-002,
656 6.5476593e-002,
657 -5.0385005e-002,
658 1.1259635e-002,
659 -2.8642227e-002,
660 6.0591769e-003,
661 7.8259699e-003,
662 -4.0086083e-002,
663 -1.3107082e-002,
664 -2.5073934e-002,
665 1.5301678e-002,
666 -6.1350007e-002,
667 -4.0860320e-002,
668 4.5224779e-002,
669 -4.4892524e-002,
670 8.8006431e-002,
671 -3.3282403e-002,
672 -5.6195537e-002,
673 -1.1931638e-001,
674 -6.8019421e-002,
675 -7.0651820e-003,
676 1.0114029e-001,
677 2.6799939e-002,
678 -4.5414349e-002,
679 7.3662653e-002,
680 2.6023897e-002,
681 -7.7197973e-002,
682 1.8472004e-002,
683 6.4325310e-003,
684 1.0535758e-001,
685 -8.2482506e-002,
686 -1.0868944e-001,
687 8.7186828e-002,
688 4.2331149e-003,
689 6.6302594e-003,
690 5.0652627e-002,
691 -2.6295176e-002,
692 1.1319735e-002,
693 -5.3688488e-002,
694 -8.3685938e-002,
695 3.8054233e-002,
696 -2.5923609e-002,
697 8.7603907e-002,
698 4.4975322e-002,
699 2.0615118e-002,
700 3.7674950e-002,
701 5.6434838e-002,
702 1.0977012e-001,
703 2.1349762e-003,
704 -1.4936346e-004,
705 6.7930892e-002,
706 3.2086590e-003,
707 -4.5878929e-002,
708 -4.4181125e-002,
709 2.4715658e-002,
710 7.9994617e-002,
711 5.2384101e-002,
712 -9.5190518e-003,
713 -3.7239495e-002,
714 1.9883359e-002,
715 4.0730677e-003,
716 -1.1677479e-001,
717 -2.6374780e-002,
718 -7.9398641e-002,
719 -3.5523570e-002,
720 -1.8151457e-002,
721 -3.7191923e-002,
722 -1.0831981e-001,
723 5.5198514e-002,
724 8.2754639e-002,
725 -5.5996264e-002,
726 -6.5431323e-002,
727 1.6211145e-002,
728 -6.8206035e-002,
729 -2.9416838e-002,
730 5.3307249e-002,
731 1.7472763e-002,
732 3.7312882e-003,
733 -5.1498829e-002,
734 -6.2257189e-002,
735 -2.9692831e-002,
736 -2.4493198e-002,
737 -2.7319437e-003,
738 5.8815114e-002,
739 -6.3249182e-002,
740 2.0730820e-002,
741 9.5563463e-003,
742 -2.2720249e-002,
743 2.5296131e-002,
744 -1.9878781e-002,
745 -3.4238910e-002,
746 -2.4677844e-002,
747 6.9236841e-002,
748 -3.4704441e-002,
749 -3.9318071e-002,
750 5.7750083e-002,
751 3.4211433e-002,
752 -5.0475709e-002,
753 2.5174181e-002,
754 -4.6996048e-002,
755 1.6221876e-002,
756 -2.6204170e-002,
757 1.0630488e-002,
758 4.5517196e-003,
759 8.3863415e-002,
760 4.8780028e-002,
761 2.3656142e-002,
762 -8.5385372e-002,
763 -7.6803464e-003,
764 1.3583644e-002,
765 1.0156741e-001,
766 1.1623477e-001,
767 3.0703572e-002,
768 -1.8790478e-002,
769 -2.5434562e-002,
770 2.6081461e-002,
771 -8.0973679e-002,
772 4.7528492e-003,
773 5.1709027e-002,
774 -2.7152886e-002,
775 3.3078882e-002,
776 9.5807816e-002,
777 -1.6742069e-002,
778 5.2847289e-002,
779 7.4190627e-002,
780 8.4661383e-003,
781 -1.7127745e-002,
782 2.5387176e-002,
783 -2.4425657e-002,
784 1.0363293e-002,
785 3.2901544e-002,
786 2.4049224e-002,
787 -3.6364045e-002,
788 -1.8374024e-002,
789 1.9170206e-002,
790 3.5899319e-002,
791 2.2884438e-002,
792 -4.2986435e-004,
793 -3.7263522e-002,
794 -2.4107817e-002,
795 -1.0160656e-002,
796 -5.2244378e-003,
797 8.4713192e-002,
798 -3.3175117e-003,
799 -6.8918873e-002,
800 -1.0757423e-001,
801 1.9995005e-002,
802 1.0018587e-002,
803 -1.0031442e-003,
804 -2.6646668e-002,
805 -1.4140223e-002,
806 -1.9093589e-002,
807 8.2412659e-002,
808 5.0569231e-002,
809 -1.9249580e-003,
810 1.6857775e-002,
811 4.4516048e-002,
812 2.9634803e-002,
813 -7.4675793e-002,
814 6.9128286e-002,
815 1.7838807e-002,
816 -1.5706998e-002,
817 2.3497836e-002,
818 -2.7256676e-002,
819 -1.6892391e-002,
820 -6.2498894e-002,
821 1.8814550e-002,
822 6.7802861e-002,
823 -4.5010985e-002,
824 -7.9693020e-004,
825 -1.6417629e-002,
826 -1.6571552e-002,
827 -3.2170429e-002,
828 -3.1451461e-002,
829 5.9127646e-002,
830 4.2496269e-002,
831 5.8440594e-002,
832 -3.7761868e-002,
833 1.4543937e-001,
834 4.6291259e-003,
835 -8.8031773e-003,
836 -3.7376149e-002,
837 4.4444334e-002,
838 -3.2946165e-002,
839 2.7709611e-002,
840 -4.6454274e-002,
841 -5.4184987e-003,
842 1.9082159e-002,
843 1.1097683e-003,
844 -7.1272377e-002,
845 1.8112885e-003,
846 2.6898226e-003,
847 -3.0686681e-002,
848 -1.9829229e-002,
849 3.0867601e-002,
850 -6.2758817e-002,
851 -2.2846248e-002,
852 6.0573296e-002,
853 3.7414532e-002,
854 3.6169907e-002,
855 -2.3442499e-003,
856 2.5963449e-002,
857 -5.0418274e-002,
858 -7.0858380e-003,
859 2.2793366e-002,
860 -4.5274123e-002,
861 4.4264571e-002,
862 -5.5435866e-002,
863 -6.0444822e-002,
864 -4.4730927e-002,
865 -2.6702128e-003,
866 3.0721521e-002,
867 3.9441000e-003,
868 8.3714830e-002,
869 -1.2824805e-002,
870 8.9065027e-002,
871 -4.1791317e-002,
872 -9.6506591e-004,
873 -2.2150161e-002,
874 -5.4266803e-002,
875 -7.9756811e-002,
876 2.9723999e-003,
877 -5.4652294e-004,
878 -8.3350132e-002,
879 1.0241351e-002,
880 -9.6004506e-002,
881 1.1043342e-002,
882 -1.0036827e-001,
883 5.4166215e-002,
884 5.3435462e-002,
885 1.0602215e-002,
886 2.9868847e-002,
887 -2.4597423e-003,
888 1.1437786e-002,
889 -4.2279579e-002,
890 -8.8732642e-003,
891 -2.9476925e-002,
892 3.6694209e-002,
893 3.3176455e-005,
894 -7.3778252e-003,
895 -3.9144818e-002,
896 -8.3308862e-003,
897 4.6791993e-002,
898 -1.7037485e-003,
899 4.5892237e-002,
900 1.5597981e-002,
901 -5.6087508e-002,
902 -4.1107610e-005,
903 -1.0683418e-002,
904 -2.6103976e-002,
905 -8.4348999e-003,
906 3.2082383e-002,
907 1.4938214e-001,
908 3.9964806e-002,
909 -7.8254583e-003,
910 4.6722479e-002,
911 9.3200915e-002,
912 2.4464994e-002,
913 8.3718835e-004,
914 1.5250387e-002,
915 -1.2400454e-001,
916 -2.8639656e-002,
917 -1.5938766e-002,
918 -2.5676238e-002,
919 -5.1847115e-002,
920 1.7639941e-003,
921 4.9326733e-003,
922 -1.5856443e-002,
923 -9.1307767e-004,
924 -1.5554562e-002,
925 2.5941199e-002,
926 -2.9757970e-002,
927 1.2201936e-001,
928 8.0973215e-002,
929 1.7146982e-002,
930 1.4736881e-002,
931 6.0467585e-002,
932 5.4698972e-002,
933 2.5876279e-002,
934 1.0164087e-002,
935 3.8201202e-002,
936 -6.0518215e-002,
937 -1.3895876e-002,
938 3.4728204e-002,
939 -1.1711300e-001,
940 -1.1216734e-002,
941 -3.9340786e-002,
942 -2.7309751e-002,
943 5.9063770e-003,
944 2.0738498e-002,
945 -1.3812395e-002,
946 -5.7982126e-002,
947 -9.3680977e-002,
948 -4.9666791e-002,
949 -2.6529709e-002,
950 5.2766295e-002,
951 -2.1506279e-002,
952 9.3091830e-002,
953 -3.5081971e-002,
954 1.4449703e-002,
955 5.8269304e-002,
956 1.0329005e-001,
957 -3.4264617e-002,
958 -1.9998674e-002,
959 4.0219340e-002,
960 2.0651887e-002,
961 5.2208561e-003,
962 2.1487670e-002,
963 2.4204968e-002,
964 3.0673837e-002,
965 -8.5293543e-003,
966 -5.3952186e-002,
967 8.9865270e-002,
968 1.0436717e-001,
969 -9.7344984e-003,
970 -9.7393746e-003,
971 5.2162345e-002,
972 6.8291250e-003,
973 -3.3926390e-002,
974 -3.5345884e-002,
975 -2.1419424e-002,
976 2.4503709e-002,
977 4.4872568e-002,
978 -3.6811060e-002,
979 4.6761401e-002,
980 4.9242905e-002,
981 2.9535711e-002,
982 -7.5315008e-003,
983 8.4931550e-003,
984 1.3235857e-001,
985 8.4181971e-002,
986 -6.3526263e-002,
987 4.1655473e-003,
988 6.3417279e-003,
989 -1.3065747e-002,
990 -5.7645495e-002,
991 1.8950407e-002,
992 3.6717958e-002,
993 1.2058270e-001,
994 2.9698808e-002,
995 6.3712863e-002,
996 -7.8927013e-002,
997 -1.1092228e-001,
998 7.5127329e-002,
999 3.6792936e-002,
1000 1.8047426e-002,
1001 1.6372435e-002,
1002 -1.1358573e-002,
1003 -1.1114199e-002,
1004 -3.1011890e-003,
1005 1.2753148e-001,
1006 -1.3063278e-003,
1007 2.9175038e-002,
1008 1.0744000e-002,
1009 8.5396074e-003,
1010 3.0555550e-002,
1011 1.9846964e-002,
1012 -2.0887290e-003,
1013 7.4108765e-004,
1014 -6.8980202e-002,
1015 -6.9539294e-002,
1016 -7.1891402e-002,
1017 2.6483042e-002,
1018 -1.0604522e-001,
1019 1.4946154e-002,
1020 -2.0885875e-002,
1021 8.1620406e-002,
1022 2.2391518e-003,
1023 -4.3108583e-002,
1024 -2.8345459e-002,
1025 2.1767961e-002,
1026 -4.1509277e-002,
1027 5.0332798e-002,
1028 -3.0747398e-003,
1029 8.1280247e-003,
1030 -2.8574311e-002,
1031 -3.7557299e-002,
1032 4.6116535e-002,
1033 -7.5548776e-002,
1034 4.2485208e-002,
1035 -1.2735059e-002,
1036 -4.8713882e-002,
1037 3.4080268e-002,
1038 3.8109829e-002,
1039 -7.9933234e-002,
1040 5.0868655e-003,
1041 -3.6956005e-002,
1042 -6.5608678e-003,
1043 6.1566793e-002,
1044 3.9747615e-002,
1045 -7.0776849e-003,
1046 -1.0039001e-002,
1047 1.0635588e-001,
1048 -3.2262564e-002,
1049 6.6284637e-002,
1050 -1.5602956e-002,
1051 9.8826341e-002,
1052 2.8765472e-002,
1053 4.9988770e-002,
1054 2.8083188e-002,
1055 3.7850396e-003,
1056 3.8099036e-002,
1057 -6.2803094e-002,
1058 -8.0284071e-003,
1059 1.7678623e-002,
1060 1.5384533e-001,
1061 3.0604908e-002,
1062 -2.2938654e-002,
1063 -6.6147444e-003,
1064 8.0228244e-003,
1065 6.3229249e-002,
1066 1.9888120e-002,
1067 -1.2483914e-002,
1068 -3.3020847e-002,
1069 5.4285124e-002,
1070 -2.2046600e-002,
1071 7.6270296e-002,
1072 -3.8125981e-002,
1073 4.2116981e-002,
1074 6.8249119e-002,
1075 4.9569658e-002,
1076 -1.2181580e-002,
1077 -3.3950151e-002,
1078 -3.3512560e-002,
1079 -4.0037716e-002,
1080 3.8517111e-002,
1081 -3.0444190e-002,
1082 -1.8608773e-002,
1083 1.5643509e-002,
1084 4.0250976e-002,
1085 1.9776990e-002,
1086 -3.1560979e-002,
1087 -3.1229293e-003,
1088 -2.5832801e-003,
1089 2.7968081e-002,
1090 -5.6392681e-002,
1091 4.7360525e-002,
1092 3.8619319e-003,
1093 9.9891506e-002,
1094 -1.8199130e-003,
1095 3.1119514e-003,
1096 -9.1106029e-002,
1097 -1.4519250e-002,
1098 3.7010312e-002,
1099 -1.1213690e-002,
1100 2.1256532e-002,
1101 -5.3987387e-002,
1102 5.7866117e-002,
1103 -4.2626330e-002,
1104 -3.3483769e-002,
1105 -5.2898877e-002,
1106 -6.7225352e-002,
1107 5.1417756e-002,
1108 1.3929020e-003,
1109 5.2022234e-002,
1110 1.0592230e-001,
1111 -6.8998892e-002,
1112 -7.3435118e-002,
1113 3.0523655e-002,
1114 -5.7162591e-003,
1115 -3.2771503e-002,
1116 9.2367770e-003,
1117 -6.7747716e-003,
1118 1.0333099e-002,
1119 -1.5577876e-002,
1120 -6.7817347e-002,
1121 -6.6533637e-002,
1122 -6.3984097e-002,
1123 5.6216531e-002,
1124 1.5579751e-002,
1125 -2.7104760e-003,
1126 2.0901166e-002,
1127 -1.1389339e-002,
1128 2.4314314e-002,
1129 9.6320945e-003,
1130 -3.5425250e-002,
1131 2.9816167e-002,
1132 -1.0582802e-001,
1133 7.9031755e-002,
1134 5.8936482e-002,
1135 4.9235081e-002,
1136 -2.0598427e-002,
1137 2.7257218e-002,
1138 8.3473318e-002,
1139 1.0047121e-001,
1140 7.7116867e-002,
1141 3.9518492e-002,
1142 6.3112265e-003,
1143 -6.8158283e-002,
1144 8.2755720e-003,
1145 -1.4671408e-002,
1146 1.0928921e-001,
1147 -5.3580922e-002,
1148 -4.9000311e-002,
1149 9.9920986e-002,
1150 3.5724099e-002,
1151 3.0645803e-002,
1152 2.1810846e-003,
1153 -3.5472111e-002,
1154 -5.8047398e-002,
1155 4.6521237e-002,
1156 5.3030675e-002,
1157 1.6183593e-002,
1158 4.7161315e-002,
1159 1.5496372e-002,
1160 -2.6065334e-002,
1161 5.4108355e-002,
1162 1.1113747e-001,
1163 -4.3256641e-002,
1164 1.6776514e-002,
1165 -9.2777987e-002,
1166 1.0831881e-001,
1167 2.6550297e-002,
1168 5.6809097e-002,
1169 4.1708284e-003,
1170 -9.3188930e-002,
1171 -3.7166019e-002,
1172 7.2595776e-002,
1173 -5.8774162e-002,
1174 -8.4078954e-003,
1175 -8.3732623e-002,
1176 -1.4874571e-002,
1177 4.1882968e-002,
1178 -3.2712401e-002,
1179 -2.7953154e-002,
1180 1.1313205e-002,
1181 4.9524990e-002,
1182 2.0294329e-003,
1183 3.8285760e-002,
1184 -1.4648978e-002,
1185 -3.5010308e-002,
1186 3.2018027e-002,
1187 -1.7151604e-002,
1188 -9.6536966e-002,
1189 -4.6726273e-002,
1190 1.7288478e-002,
1191 1.5788740e-002,
1192 5.2848095e-003,
1193 4.1795447e-002,
1194 4.6331282e-002,
1195 7.0958286e-002,
1196 -3.3004895e-002,
1197 -1.5541634e-002,
1198 -6.4899819e-002,
1199 4.4813983e-002,
1200 2.1314689e-002,
1201 2.5903378e-002,
1202 3.1412995e-002,
1203 2.7655815e-002,
1204 7.0916690e-003,
1205 3.6198660e-002,
1206 -2.9768515e-002,
1207 5.8014817e-002,
1208 -5.8727472e-002,
1209 -1.2787628e-002,
1210 1.2855854e-001,
1211 -7.0659467e-002,
1212 -9.9019211e-002,
1213 -3.2969432e-002,
1214 3.1190632e-002,
1215 6.5956753e-003,
1216 -1.6987652e-002,
1217 4.0088843e-002,
1218 -1.0857916e-001,
1219 1.1385790e-002,
1220 6.8736591e-002,
1221 9.1859027e-003,
1222 -2.2753959e-002,
1223 6.5639798e-002,
1224 4.4619698e-002,
1225 -5.3424194e-004,
1226 3.2475239e-002,
1227 -5.5982848e-002,
1228 -5.9416171e-003,
1229 -2.6137328e-002,
1230 4.7534015e-002,
1231 -4.3905563e-002,
1232 4.7139261e-002,
1233 -5.0539423e-002,
1234 -5.2509019e-003,
1235 -8.4340990e-003,
1236 1.7266091e-002,
1237 -6.5954891e-002,
1238 -1.1344100e-001,
1239 -2.5794929e-002,
1240 5.3678895e-002,
1241 -1.0500180e-002,
1242 5.6847837e-002,
1243 -3.0370988e-002,
1244 -9.2272021e-004,
1245 -1.1716566e-002,
1246 -6.7153889e-002,
1247 -4.9491944e-002,
1248 -2.7151079e-002,
1249 4.9084906e-003,
1250 -3.3137805e-002,
1251 -5.7067625e-002,
1252 -3.5807416e-003,
1253 -1.9012110e-002,
1254 -2.3489886e-002,
1255 -6.6147208e-002,
1256 -1.9730903e-002,
1257 -5.7617192e-002,
1258 -1.7743738e-002,
1259 6.2747755e-002,
1260 3.0746059e-002,
1261 -2.1208817e-002,
1262 1.0724738e-002,
1263 -9.5295048e-002,
1264 -8.3696293e-003,
1265 2.8928609e-002,
1266 7.7547429e-002,
1267 -2.8433474e-002,
1268 3.9000811e-002,
1269 1.8594177e-002,
1270 7.3604845e-002,
1271 -4.0570215e-002,
1272 4.0428101e-002,
1273 5.2162122e-002,
1274 6.9720490e-002,
1275 1.3917348e-003,
1276 -4.1967149e-002,
1277 1.2040326e-002,
1278 -9.0859684e-002,
1279 3.0619641e-002,
1280 7.9828021e-002,
1281 -9.5582231e-002,
1282 4.4977158e-003,
1283 5.3050166e-002,
1284 -3.9280557e-002,
1285 2.1825815e-003,
1286 2.6836286e-002,
1287 -1.0693240e-002,
1288 1.2507669e-002,
1289 8.7551531e-002,
1290 -4.2170924e-002,
1291 7.4021050e-002,
1292 -5.0257861e-002,
1293 4.2440318e-003,
1294 2.8498362e-002,
1295 4.0712278e-002,
1296 1.3630666e-002,
1297 3.7506385e-002,
1298 2.9021782e-002,
1299 9.4969857e-003,
1300 7.3668316e-002,
1301 -1.0430524e-002,
1302 7.8640111e-003,
1303 -1.9579539e-002,
1304 -1.3354780e-002,
1305 4.6553749e-002,
1306 -1.5359398e-002,
1307 -3.6958328e-002,
1308 3.9183126e-002,
1309 9.0763364e-002,
1310 -5.7310947e-002,
1311 6.8567752e-002,
1312 3.0379537e-002,
1313 -1.7131879e-002,
1314 -4.9845297e-002,
1315 6.6236979e-002,
1316 -3.5226094e-002,
1317 4.1319436e-002,
1318 -1.0414640e-002,
1319 -7.3110434e-002,
1320 -6.7060543e-003,
1321 -2.2661736e-003,
1322 5.4214708e-002,
1323 -5.6731971e-002,
1324 8.0169623e-002,
1325 6.8708173e-002,
1326 5.1555900e-002,
1327 -2.3028383e-002,
1328 2.3845756e-003,
1329 4.3290569e-002,
1330 -5.0088302e-003,
1331 -8.5495950e-003,
1332 -2.2929081e-002,
1333 -1.4934858e-002,
1334 -1.9331882e-002,
1335 3.1952820e-002,
1336 2.2837591e-002,
1337 -6.5833588e-003,
1338 9.3564125e-002,
1339 -5.3479061e-002,
1340 -4.7856971e-003,
1341 7.8291548e-002,
1342 -6.4278719e-002,
1343 5.2534052e-002,
1344 -8.4991604e-003,
1345 -2.5331472e-002,
1346 -1.1670703e-004,
1347 -1.6794583e-002,
1348 -3.6946100e-005,
1349 7.9706385e-002,
1350 1.8011858e-002,
1351 4.5273832e-002,
1352 1.9568899e-002,
1353 4.5061760e-002,
1354 -2.6682717e-002,
1355 -1.8814340e-002,
1356 -8.5389413e-003,
1357 -4.6897567e-002,
1358 -7.9016702e-002,
1359 -2.1058150e-005,
1360 5.8849807e-002,
1361 -2.5161493e-002,
1362 6.0245233e-002,
1363 -8.2636501e-002,
1364 -6.9368318e-002,
1365 -1.5064100e-002,
1366 -3.4932382e-002,
1367 4.4579915e-003,
1368 -5.9080060e-003,
1369 8.9889824e-002,
1370 8.1831512e-002,
1371 1.6338686e-002,
1372 -5.4180978e-002,
1373 -5.3267629e-003,
1374 -2.8476462e-003,
1375 1.7450439e-002,
1376 -2.4213885e-002,
1377 7.1383978e-003,
1378 -8.5575620e-002,
1379 -9.7688859e-002,
1380 5.4026353e-002,
1381 6.8738257e-002,
1382 -3.1782928e-002,
1383 2.9354257e-002,
1384 -1.6843133e-002,
1385 -3.4228093e-002,
1386 -4.9087072e-002,
1387 -8.8609944e-003,
1388 -4.2395609e-002,
1389 6.0299570e-002,
1390 -3.9805763e-002,
1391 -3.9969178e-002,
1392 -1.0972287e-002,
1393 -3.1903343e-002,
1394 -2.3021388e-002,
1395 9.5381824e-002,
1396 -3.8131819e-002,
1397 -2.7944014e-002,
1398 7.9797347e-002,
1399 1.5055618e-002,
1400 -6.0223999e-002,
1401 2.1349786e-002,
1402 1.4010766e-001,
1403 -7.0365161e-002,
1404 9.5470745e-002,
1405 -5.5280731e-002,
1406 9.0676740e-002,
1407 8.0165216e-003,
1408 3.8071961e-002,
1409 3.4452332e-002,
1410 1.2608974e-001,
1411 7.4568874e-003,
1412 2.2179776e-002,
1413 -5.1449927e-003,
1414 -1.5259731e-003,
1415 2.4388062e-002,
1416 2.8159902e-002,
1417 6.3528510e-002,
1418 7.2459203e-002,
1419 -6.6724867e-002,
1420 4.9840343e-002,
1421 1.0288982e-002,
1422 -3.7523292e-003,
1423 2.4660586e-002,
1424 1.0905181e-001,
1425 2.0534327e-002,
1426 -1.6624929e-002,
1427 -4.7427409e-002,
1428 7.1932143e-002,
1429 2.4785276e-002,
1430 -1.2656870e-002,
1431 -4.3142163e-003,
1432 -8.5065080e-002,
1433 1.1401731e-002,
1434 4.2186129e-002,
1435 1.7953548e-002,
1436 -9.5471407e-003,
1437 -2.7867915e-002,
1438 7.5845281e-003,
1439 3.6129267e-002,
1440 -1.2896952e-001,
1441 -1.4991468e-002,
1442 3.9146522e-002,
1443 -7.6952239e-002,
1444 2.3154057e-002,
1445 3.2631339e-002,
1446 3.6032235e-003,
1447 2.4348659e-002,
1448 -5.0004772e-003,
1449 -3.9711602e-002,
1450 -2.5957781e-002,
1451 -8.4744957e-003,
1452 -6.8234352e-002,
1453 -2.8744676e-002,
1454 2.3341254e-002,
1455 4.3007108e-002,
1456 1.2712390e-002,
1457 2.8427956e-002,
1458 -1.5923634e-002,
1459 4.4011784e-002,
1460 -1.5711433e-002,
1461 4.4606989e-002,
1462 -1.7483925e-002,
1463 -1.2423254e-001,
1464 6.2454024e-003,
1465 6.6168154e-002,
1466 2.1085300e-002,
1467 9.0749477e-003,
1468 -2.0534154e-002,
1469 6.9048807e-002,
1470 -9.2613632e-003,
1471 -2.7695812e-003,
1472 -4.1107764e-002,
1473 2.1935377e-002,
1474 -8.4933698e-003,
1475 7.9754080e-002,
1476 2.8930188e-002,
1477 -1.5746665e-002,
1478 -5.5368360e-002,
1479 4.8760088e-002,
1480 -2.3262447e-002,
1481 1.9970261e-003,
1482 1.7181455e-002,
1483 -2.6662315e-002,
1484 2.9476649e-003,
1485 3.6398404e-002,
1486 -1.0718664e-002,
1487 -1.3419702e-002,
1488 -1.4303328e-002,
1489 -5.1753021e-002,
1490 -8.8633620e-003,
1491 -6.6385388e-002,
1492 -1.8360778e-002,
1493 4.0996838e-002,
1494 -2.1821426e-002,
1495 1.9446502e-002,
1496 7.8258137e-002,
1497 1.1935359e-003,
1498 1.2671015e-001,
1499 5.4051017e-003,
1500 8.9554422e-002,
1501 5.1612989e-002,
1502 -5.9613506e-002,
1503 1.0465684e-001,
1504 3.5325477e-002,
1505 -7.4798564e-002,
1506 -6.6674861e-002,
1507 2.8210488e-002,
1508 3.9519939e-003,
1509 4.2419282e-002,
1510 4.8733699e-002,
1511 4.9734069e-002,
1512 -8.2263082e-002,
1513 -1.0431084e-003,
1514 6.5382265e-003,
1515 2.7104024e-002,
1516 -6.1504411e-002,
1517 -1.1030328e-001,
1518 -1.1088406e-001,
1519 4.6883361e-002,
1520 -4.8929726e-002,
1521 -1.1842483e-002,
1522 -3.2343663e-002,
1523 2.8083963e-002,
1524 6.5341653e-003,
1525 6.4197433e-003,
1526 -5.1922064e-002,
1527 5.9610106e-002,
1528 -3.0492144e-003,
1529 -2.0038627e-002,
1530 6.6832718e-003,
1531 3.5125897e-002,
1532 4.9157559e-002,
1533 -1.1599903e-002,
1534 -8.6904299e-004,
1535 -8.6599262e-002,
1536 6.2299405e-002,
1537 9.4208251e-003,
1538 7.3197513e-002,
1539 7.5060589e-003,
1540 1.5188546e-002,
1541 8.4467481e-003,
1542 1.6309540e-002,
1543 -3.6380831e-002,
1544 -1.5684802e-002,
1545 -1.2750901e-004,
1546 -3.9540578e-002,
1547 -2.6086647e-002,
1548 5.0982353e-002,
1549 -3.8994541e-002,
1550 -7.8152817e-002,
1551 -2.1288151e-002,
1552 3.2125646e-002,
1553 -4.9028664e-002,
1554 -5.2017685e-002,
1555 4.8786860e-003,
1556 8.7710015e-002,
1557 3.7430190e-002,
1558 3.6962894e-002,
1559 -1.4930609e-003,
1560 -6.6490921e-002,
1561 1.1278370e-001,
1562 1.6259975e-002,
1563 -1.1381280e-001,
1564 3.0235399e-002,
1565 7.9035487e-004,
1566 -3.8638327e-002,
1567 4.3147897e-002,
1568 8.8130106e-002,
1569 -1.4913096e-002,
1570 3.9678262e-003,
1571 3.6966598e-002,
1572 6.3040724e-002,
1573 -4.9035837e-002,
1574 -3.0293084e-003,
1575 7.2467143e-002,
1576 3.3553250e-003,
1577 1.1619490e-002,
1578 2.5048420e-002,
1579 -1.3875509e-003,
1580 4.3384801e-003,
1581 -1.9225635e-002,
1582 -3.4205233e-002,
1583 -6.1043519e-002,
1584 2.7920233e-002,
1585 1.5845125e-002,
1586 -3.1788360e-002,
1587 5.5265277e-003,
1588 -8.8053862e-003,
1589 5.1596808e-002,
1590 -2.6382888e-002,
1591 1.3528723e-002,
1592 9.7188179e-004,
1593 4.5393222e-002,
1594 1.4350879e-001,
1595 -8.3970455e-002,
1596 -5.3058686e-002,
1597 -1.7168532e-002,
1598 5.2123339e-002,
1599 -1.0874975e-001,
1600 -8.4692593e-002,
1601 2.0470836e-002,
1602 1.3786291e-002,
1603 -4.3504389e-002,
1604 -5.5751144e-003,
1605 -9.6933329e-002,
1606 -6.0058163e-002,
1607 -5.0236621e-002,
1608 2.1957145e-002,
1609 4.6918366e-002,
1610 5.4757597e-003,
1611 -1.2851732e-001,
1612 5.3503448e-002,
1613 -7.8722951e-002,
1614 2.5143808e-002,
1615 3.8130327e-002,
1616 1.1190727e-001,
1617 -2.2211112e-003,
1618 3.4395397e-003,
1619 -6.6144203e-002,
1620 -1.3250907e-002,
1621 1.4285490e-002,
1622 -4.7426798e-002,
1623 4.3459402e-002,
1624 1.9567583e-002,
1625 -3.2933903e-002,
1626 7.9884585e-003,
1627 -3.6921691e-002,
1628 -5.2601711e-002,
1629 -3.7588436e-002,
1630 -5.7858993e-002,
1631 -3.9355983e-003,
1632 -1.9668686e-002,
1633 1.7962753e-002,
1634 7.1980552e-002,
1635 -1.2059618e-002,
1636 3.4579944e-002,
1637 -1.8839556e-002,
1638 -1.7604317e-002,
1639 7.8825547e-002,
1640 8.4168663e-003,
1641 -1.6198144e-002,
1642 7.7326058e-003,
1643 -1.4566324e-001,
1644 7.0918323e-002,
1645 2.7943557e-002,
1646 1.5952735e-002,
1647 5.3303709e-002,
1648 -8.3804957e-002,
1649 -6.6985571e-002,
1650 -1.3191151e-002,
1651 -4.2864677e-002,
1652 -5.9477390e-002,
1653 4.9906263e-002,
1654 4.4401362e-002,
1655 4.7588494e-002,
1656 2.5451538e-002,
1657 -3.7015590e-002,
1658 1.8897192e-002,
1659 8.5686801e-002,
1660 5.1878702e-003,
1661 4.3894402e-003,
1662 1.8570041e-002,
1663 5.5022301e-002,
1664 -4.0645765e-002,
1665 -5.0799009e-002,
1666 -2.3060691e-002,
1667 -5.3046714e-002,
1668 -2.9921308e-002,
1669 -4.2374683e-002,
1670 -2.0684933e-003,
1671 -3.1561538e-002,
1672 -2.6520727e-002,
1673 2.2842715e-002,
1674 4.7241369e-002,
1675 1.5938051e-003,
1676 -3.1393040e-002,
1677 -2.2067479e-002,
1678 1.3659794e-002,
1679 -3.1810808e-002,
1680 5.2038109e-002,
1681 5.5282333e-002,
1682 7.3406997e-002,
1683 -8.5669402e-002,
1684 3.0521734e-002,
1685 1.3090940e-005,
1686 -4.7165506e-002,
1687 4.8765186e-003,
1688 -2.9407043e-002,
1689 1.9843096e-002,
1690 -2.7632043e-002,
1691 1.4379705e-002,
1692 3.2263917e-002,
1693 5.4751887e-002,
1694 -3.4032149e-002,
1695 -9.9526757e-003,
1696 2.5634676e-002,
1697 2.5738815e-003,
1698 -5.5256747e-003,
1699 4.1466343e-002,
1700 -2.8007927e-002,
1701 8.2962880e-002,
1702 5.3608424e-002,
1703 -6.6232246e-003,
1704 -1.1529210e-001,
1705 -3.5498392e-002,
1706 2.0099626e-002,
1707 4.5948750e-002,
1708 1.7926143e-002,
1709 -5.9056747e-002,
1710 -9.6797251e-002,
1711 -2.4358114e-002,
1712 -6.1063654e-002,
1713 2.0158520e-003,
1714 8.7163319e-002,
1715 -8.9921518e-002,
1716 -9.8666202e-003,
1717 -9.3794619e-004,
1718 4.5791584e-002,
1719 8.5254269e-003,
1720 3.7372616e-002,
1721 -5.3279812e-002,
1722 7.8030247e-004,
1723 1.1843336e-002,
1724 -7.4212330e-002,
1725 1.1414296e-001,
1726 -4.1485582e-002,
1727 -2.2089769e-003,
1728 -6.1672113e-003,
1729 9.8929283e-003,
1730 -7.8207292e-002,
1731 -4.8161136e-003,
1732 -7.2059255e-002,
1733 -3.5922784e-002,
1734 -1.9786275e-002,
1735 1.5833828e-002,
1736 5.2545743e-002,
1737 9.9962946e-003,
1738 1.0473584e-001,
1739 -2.6380727e-002,
1740 6.2664438e-002,
1741 -1.0710067e-002,
1742 -5.6621248e-002,
1743 -6.2640861e-002,
1744 2.4906349e-002,
1745 4.9470811e-002,
1746 1.5582134e-002,
1747 -1.1034795e-002,
1748 3.7179257e-002,
1749 -7.9083587e-002,
1750 3.1086424e-002,
1751 -1.3685837e-002,
1752 -3.7552842e-002,
1753 -2.9528094e-002,
1754 -1.7008381e-002,
1755 3.7137697e-002,
1756 4.5722891e-002,
1757 -6.7639973e-002,
1758 1.0411136e-002,
1759 -9.5948463e-002,
1760 -7.6491282e-002,
1761 1.0515447e-001,
1762 -7.2395284e-002,
1763 2.6384356e-002,
1764 -9.7803448e-004,
1765 -1.2178894e-002,
1766 -4.3298010e-002,
1767 -1.4118456e-002,
1768 -6.3811250e-003,
1769 3.5987445e-002,
1770 -8.0165530e-003,
1771 -2.0932915e-002,
1772 -1.3187860e-002,
1773 -4.3430054e-002,
1774 -3.0586505e-002,
1775 9.8974586e-002,
1776 5.5685044e-002,
1777 -1.1098877e-001,
1778 3.4420705e-002,
1779 2.6632342e-002,
1780 2.8768821e-002,
1781 -5.6656185e-002,
1782 -2.4035643e-002,
1783 4.4599132e-002,
1784 5.2401286e-002,
1785 -3.1991215e-002,
1786 3.8827361e-003,
1787 4.7437513e-002,
1788 6.7940056e-002,
1789 -2.3003581e-002,
1790 -6.3955657e-002,
1791 1.0081807e-001,
1792 -4.4211577e-003,
1793 -4.1263060e-002,
1794 -5.8970926e-002,
1795 -2.4349696e-002,
1796 3.2867209e-002,
1797 -2.4008048e-004,
1798 6.9810225e-002,
1799 1.5450610e-002,
1800 2.3319726e-002,
1801 -1.0005801e-001,
1802 6.2685066e-003,
1803 3.3200964e-003,
1804 -6.0496946e-002,
1805 -8.8884008e-003,
1806 1.6134449e-003,
1807 -7.2506916e-002,
1808 1.8835241e-003,
1809 -9.1372012e-003,
1810 -3.9166883e-002,
1811 -3.0408037e-002,
1812 1.3371700e-001,
1813 -8.4833604e-002,
1814 -2.0082991e-002,
1815 -6.7833227e-002,
1816 2.8939942e-002,
1817 3.2760884e-002,
1818 -1.1389661e-004,
1819 -4.3484404e-002,
1820 -5.9579661e-002,
1821 8.5932179e-002,
1822 -1.2312202e-001,
1823 4.5080645e-002,
1824 7.8749960e-002,
1825 8.5343585e-002,
1826 8.3452328e-003,
1827 3.8885343e-002,
1828 -5.4756855e-002,
1829 -5.2942923e-002,
1830 -8.5138845e-003,
1831 6.6560990e-002,
1832 -5.8418572e-002,
1833 2.3870988e-002,
1834 1.8931370e-002,
1835 5.9471104e-002,
1836 -8.6742031e-002,
1837 -4.4123808e-002,
1838 1.7375058e-002,
1839 -6.3987147e-002,
1840 6.3031471e-003,
1841 -5.2766788e-002,
1842 1.6462106e-001,
1843 3.4654166e-002,
1844 1.8664640e-002,
1845 2.0932790e-002,
1846 -4.3515283e-003,
1847 -2.2953377e-002,
1848 -4.1758215e-002,
1849 5.7430654e-002,
1850 -5.3591655e-002,
1851 -4.6850896e-002,
1852 4.1910973e-002,
1853 1.1157103e-004,
1854 -2.2629752e-002,
1855 6.5200275e-002,
1856 -2.2924410e-003,
1857 -1.0436647e-002,
1858 -5.9483696e-002,
1859 -3.6216756e-003,
1860 -1.3438807e-002,
1861 1.2187937e-002,
1862 -1.3021007e-002,
1863 3.3878909e-002,
1864 -2.2899083e-002,
1865 -2.3054076e-002,
1866 4.7348343e-002,
1867 2.8499078e-002,
1868 -1.7052032e-003,
1869 -1.3753287e-002,
1870 -2.9609163e-002,
1871 -1.3025597e-002,
1872 -6.1569574e-003,
1873 8.8234767e-003,
1874 -4.4598847e-002,
1875 -7.8588213e-002,
1876 -1.8194816e-002,
1877 -6.0633228e-002,
1878 3.4385559e-003,
1879 5.9361395e-002,
1880 8.2140593e-002,
1881 1.4939745e-002,
1882 -3.1639344e-002,
1883 -1.2825312e-002,
1884 -3.5217707e-002,
1885 -1.9635520e-002,
1886 3.1739325e-002,
1887 -2.7107236e-002,
1888 4.2299225e-002,
1889 1.9675302e-002,
1890 -2.6289167e-002,
1891 -3.7438885e-002,
1892 -6.5984833e-002,
1893 4.2748691e-003,
1894 -3.3482818e-002,
1895 -2.6690228e-002,
1896 -3.6330879e-002,
1897 -4.4149481e-002,
1898 -1.5138292e-002,
1899 2.8942426e-002,
1900 -1.6976163e-002,
1901 -5.9543856e-002,
1902 7.4778255e-002,
1903 2.8451870e-002,
1904 6.2164171e-002,
1905 -4.0415989e-002,
1906 -4.2244492e-002,
1907 4.6573272e-002,
1908 -1.8520798e-002,
1909 -6.9907182e-002,
1910 1.1254468e-002,
1911 7.4484796e-002,
1912 2.3774997e-003,
1913 -1.9725799e-002,
1914 -1.1798209e-002,
1915 -4.5521440e-002,
1916 2.7514728e-002,
1917 -7.2190342e-002,
1918 -2.9948385e-002,
1919 -4.6214661e-003,
1920 -7.9002112e-004,
1921 5.0066640e-002,
1922 5.3029490e-004,
1923 -1.8871680e-002,
1924 -1.9149132e-002,
1925 1.4202910e-002,
1926 3.0816823e-002,
1927 -9.0922658e-002,
1928 2.0531126e-002,
1929 -6.7237163e-002,
1930 3.5264507e-002,
1931 -4.3345885e-002,
1932 4.3736504e-002,
1933 -5.0592953e-002,
1934 -1.9560698e-002,
1935 7.4759581e-002,
1936 -1.5500722e-002,
1937 -3.2266454e-002,
1938 -1.4974813e-002,
1939 -3.1814004e-003,
1940 7.1627759e-002,
1941 -1.0014999e-002,
1942 -4.4711458e-002,
1943 8.7059742e-002,
1944 -6.6573462e-002,
1945 6.3231174e-002,
1946 -3.9306487e-002,
1947 -2.8763870e-002,
1948 -3.4594112e-002,
1949 -1.7333119e-002,
1950 2.7978317e-002,
1951 -4.4558274e-002,
1952 4.0316504e-002,
1953 -9.8056766e-003,
1954 -1.1169830e-001,
1955 2.6367365e-003,
1956 -6.3107346e-002,
1957 -4.7852804e-002,
1958 1.4822515e-002,
1959 -5.5825883e-002,
1960 8.4652163e-002,
1961 3.7276497e-002,
1962 5.8380260e-002,
1963 1.0308762e-003,
1964 -1.7541914e-002,
1965 -8.1294365e-002,
1966 2.6500601e-002,
1967 1.1576202e-002,
1968 -2.8475597e-002,
1969 -3.6427135e-002,
1970 1.0486963e-002,
1971 3.5852026e-002,
1972 1.7207452e-002,
1973 -4.2250927e-002,
1974 9.2791032e-002,
1975 2.0848079e-002,
1976 -1.0474350e-002,
1977 -1.8906142e-002,
1978 -3.9285383e-004,
1979 -1.0622005e-001,
1980 3.0895699e-002,
1981 7.2310785e-002,
1982 -4.9338252e-002,
1983 -6.6112754e-002,
1984 1.7508514e-002,
1985 1.1321926e-003,
1986 -2.4713477e-002,
1987 -4.2692403e-002,
1988 3.6496772e-002,
1989 -8.7503250e-003,
1990 -2.3071223e-002,
1991 6.0697872e-002,
1992 -1.6211612e-002,
1993 2.7467415e-002,
1994 -2.3241079e-002,
1995 7.6276171e-003,
1996 -6.3827211e-002,
1997 6.7257864e-002,
1998 2.2947393e-002,
1999 1.7785758e-002,
2000 4.1818868e-003,
2001 3.5410854e-002,
2002 1.0202987e-003,
2003 -7.0561943e-003,
2004 -2.0778987e-002,
2005 3.2302118e-002,
2006 4.8279751e-003,
2007 -2.3094511e-002,
2008 -5.9461961e-002,
2009 4.2486021e-002,
2010 -8.3970460e-002,
2011 3.1847805e-002,
2012 1.4792567e-002,
2013 8.3035216e-002,
2014 -1.9097569e-002,
2015 -3.7566345e-002,
2016 -1.9294024e-002,
2017 -2.9735991e-002,
2018 -1.6259656e-002,
2019 8.7230220e-003,
2020 1.5761104e-002,
2021 1.1869692e-002,
2022 3.3119792e-002,
2023 -1.4862967e-002,
2024 1.1372784e-002,
2025 -3.2009087e-002,
2026 -2.9738311e-002,
2027 7.4243184e-002,
2028 4.4110110e-002,
2029 -2.6555813e-002,
2030 -1.4281194e-002,
2031 -3.1948659e-002,
2032 2.7573051e-002,
2033 4.3762921e-003,
2034 -1.5129696e-002,
2035 -1.7735857e-002,
2036 -4.4445686e-003,
2037 -5.8616688e-002,
2038 -2.7569930e-002,
2039 -4.5140779e-002,
2040 -7.2200604e-002,
2041 1.3667304e-002,
2042 5.7192972e-002,
2043 -6.3690024e-002,
2044 5.5174808e-003,
2045 -5.8892530e-002,
2046 -3.6233013e-002,
2047 8.6180660e-002,
2048 -6.4381045e-002,
2049 8.1908618e-002,
2050 -8.2615195e-003,
2051 -8.7344886e-002,
2052 -3.6686884e-002,
2053 -4.3487249e-002,
2054 -2.7761943e-002,
2055 -4.3954059e-002,
2056 1.0761718e-001,
2057 -3.3942906e-002,
2058 -5.6751929e-002,
2059 5.3761364e-002,
2060 -8.2361460e-002,
2061 -2.0107493e-002,
2062 -1.3391457e-001,
2063 -2.7865675e-002,
2064 -3.7665218e-003,
2065 2.6626941e-003,
2066 2.1434427e-002,
2067 4.9598442e-002,
2068 -9.1795559e-002,
2069 5.6763841e-002,
2070 -7.2345509e-002,
2071 4.3385691e-002,
2072 -6.4303252e-002,
2073 -2.6067521e-002,
2074 3.1430980e-002,
2075 -4.8380081e-002,
2076 -1.7143742e-003,
2077 3.8524956e-002,
2078 4.7310190e-002,
2079 -8.4985104e-003,
2080 2.5096835e-002,
2081 -2.2478417e-003,
2082 4.8128123e-002,
2083 3.7762949e-002,
2084 1.4420063e-003,
2085 -4.4095518e-002,
2086 4.5456933e-003,
2087 -3.2426183e-003,
2088 -1.2533115e-002,
2089 4.7767545e-002,
2090 -2.8620801e-002,
2091 7.8751032e-002,
2092 -1.6406002e-002,
2093 6.0648681e-002,
2094 -5.7970442e-002,
2095 -1.7637331e-002,
2096 -6.9358645e-002,
2097 -3.7997615e-002,
2098 3.9156091e-002,
2099 1.1321921e-001,
2100 8.4415942e-002,
2101 -1.1387462e-002,
2102 -1.6199663e-002,
2103 -2.9916549e-002,
2104 -2.7917984e-003,
2105 -7.9695543e-002,
2106 8.2671498e-002,
2107 1.3319799e-002,
2108 -1.7930240e-002,
2109 -9.1601668e-003,
2110 4.1019127e-002,
2111 7.5932944e-002,
2112 1.0036314e-001,
2113 3.8966354e-002,
2114 4.6995786e-003,
2115 -4.5149567e-002,
2116 -4.8486656e-002,
2117 -4.1927255e-002,
2118 1.1311800e-002,
2119 3.6819401e-002,
2120 1.7973596e-002,
2121 6.7898952e-003,
2122 1.5963322e-002,
2123 -4.9877456e-002,
2124 -3.7059174e-002,
2125 1.4450399e-002,
2126 2.0093318e-002,
2127 3.4367981e-002,
2128 -5.5058558e-003,
2129 -6.7143431e-002,
2130 -4.8644499e-002,
2131 -6.9472431e-002,
2132 2.5107776e-002,
2133 -4.6781145e-002,
2134 -2.7352285e-002,
2135 -4.7986822e-002,
2136 -7.1934644e-003,
2137 -2.3173127e-002,
2138 6.4055565e-002,
2139 -1.9370286e-002,
2140 -4.9411717e-003,
2141 3.4615802e-002,
2142 -5.2643368e-002,
2143 -3.4227554e-002,
2144 5.9084487e-002,
2145 -6.7507249e-002,
2146 1.4470533e-003,
2147 7.4639509e-002,
2148 -3.9766965e-002,
2149 3.5756960e-002,
2150 -7.0471549e-003,
2151 -3.9222635e-003,
2152 7.3001614e-002,
2153 2.3197043e-002,
2154 -2.5701022e-003,
2155 -6.5877930e-002,
2156 2.7559657e-003,
2157 1.9592050e-002,
2158 -9.3462547e-002,
2159 -1.0871925e-002,
2160 -2.9680792e-002,
2161 -1.9738425e-002,
2162 -2.7152604e-002,
2163 2.3876803e-002,
2164 4.5884118e-002,
2165 -2.4799389e-002,
2166 -2.0581584e-002,
2167 -5.4267497e-002,
2168 -2.6460954e-003,
2169 5.1362202e-002,
2170 -6.9012380e-002,
2171 4.4005296e-002,
2172 6.3975781e-002,
2173 -2.6047622e-003,
2174 1.2042036e-002,
2175 1.6037381e-002,
2176 -5.1284209e-002,
2177 -4.2194785e-002,
2178 -1.6515324e-003,
2179 2.8902550e-002,
2180 2.6850380e-002,
2181 -6.0423448e-002,
2182 5.8605766e-003,
2183 1.2158635e-002,
2184 7.2552454e-002,
2185 3.1314062e-002,
2186 -9.3072204e-002,
2187 3.1162922e-002,
2188 1.3286605e-002,
2189 3.9595454e-002,
2190 4.0202073e-002,
2191 6.5767605e-002,
2192 -1.2155519e-002,
2193 3.3751439e-002,
2194 -3.2171914e-002,
2195 4.8066982e-002,
2196 -3.9282293e-002,
2197 8.3241192e-003,
2198 6.9639890e-002,
2199 2.7334229e-002,
2200 -1.5479579e-001,
2201 1.6788538e-002,
2202 -3.1497022e-002,
2203 -4.2282993e-002,
2204 6.3590085e-002,
2205 2.5116069e-002,
2206 -8.6396723e-003,
2207 3.3260424e-002,
2208 -8.4721611e-002,
2209 -3.3390999e-003,
2210 -1.1246017e-001,
2211 4.1668358e-002,
2212 -5.8633451e-002,
2213 1.8811584e-002,
2214 -2.6955831e-002,
2215 3.4502149e-002,
2216 -1.5140931e-002,
2217 -1.1615508e-001,
2218 1.9473941e-002,
2219 -2.4164678e-002,
2220 -4.7663500e-002,
2221 2.5149605e-002,
2222 -4.2667606e-002,
2223 -3.0691488e-002,
2224 -6.2397484e-002,
2225 -2.2317443e-002,
2226 7.1583564e-002,
2227 -1.7501358e-002,
2228 -7.4035381e-003,
2229 3.6729476e-002,
2230 -1.1245837e-002,
2231 2.6520782e-002,
2232 -8.1593552e-002,
2233 -6.9408470e-002,
2234 1.4619786e-003,
2235 3.8453478e-003,
2236 -6.3397206e-003,
2237 -6.0058523e-002,
2238 -4.8251718e-003,
2239 3.8074781e-002,
2240 -7.8163411e-002,
2241 2.1385600e-002,
2242 -2.1922130e-002,
2243 -4.0160455e-002,
2244 -6.8293755e-002,
2245 9.0554557e-004,
2246 2.6664980e-002,
2247 7.1501149e-004,
2248 2.0586511e-002,
2249 3.8317298e-002,
2250 1.2622402e-002,
2251 3.0425320e-002,
2252 -5.9992562e-003,
2253 -3.2448647e-002,
2254 -8.4599232e-002,
2255 2.0966498e-002,
2256 3.0616978e-002,
2257 -4.1909029e-003,
2258 4.3755380e-002,
2259 3.5853709e-002,
2260 8.2636139e-002,
2261 5.2616538e-002,
2262 -4.4023308e-002,
2263 -4.5906585e-002,
2264 2.5247372e-002,
2265 1.5587727e-002,
2266 -2.8171046e-002,
2267 -3.2571994e-003,
2268 3.1224580e-002,
2269 2.3534457e-002,
2270 2.4495916e-002,
2271 2.3711856e-002,
2272 4.4990479e-002,
2273 2.4656755e-002,
2274 1.2819956e-002,
2275 5.7528241e-002,
2276 -6.3140487e-003,
2277 -9.8533686e-002,
2278 -5.9046861e-002,
2279 4.5919961e-002,
2280 4.9303678e-002,
2281 -5.1366348e-002,
2282 2.4237326e-002,
2283 -3.5253937e-002,
2284 7.6315728e-002,
2285 -6.2809404e-002,
2286 -1.1060411e-002,
2287 1.2072602e-002,
2288 8.1692168e-002,
2289 8.2459510e-002,
2290 1.2056340e-003,
2291 -1.0799649e-001,
2292 -7.2058599e-002,
2293 5.1223849e-002,
2294 1.1635586e-001,
2295 6.3237829e-002,
2296 4.1510274e-002,
2297 -2.9788578e-002,
2298 4.8771019e-002,
2299 -5.6674600e-002,
2300 1.9869930e-002,
2301 -1.2678819e-002,
2302 -2.7919754e-002,
2303 2.8331693e-002,
2304 3.1691790e-002,
2305 1.1562239e-002,
2306 -2.8202192e-002,
2307 2.1270404e-002,
2308 -4.2846202e-002,
2309 -3.2805821e-002,
2310 1.5184402e-002,
2311 5.4017276e-002,
2312 -7.4480916e-003,
2313 3.9322390e-002,
2314 8.8590506e-002,
2315 1.8869046e-002,
2316 -4.8504749e-002,
2317 1.9943452e-002,
2318 -4.0731200e-002,
2319 -1.2975217e-003,
2320 -1.6745164e-003,
2321 4.7281664e-002,
2322 -2.7791569e-002,
2323 8.0857121e-003,
2324 -4.8178120e-002,
2325 -5.8281241e-002,
2326 -3.2593209e-002,
2327 -2.1746188e-002,
2328 -1.0017483e-002,
2329 2.9529554e-002,
2330 -1.4875157e-002,
2331 -4.5985303e-002,
2332 4.9477795e-002,
2333 -2.8808805e-002,
2334 -1.3613209e-002,
2335 -3.2427996e-002,
2336 -7.3709623e-002,
2337 2.9008787e-003,
2338 -2.4949574e-002,
2339 2.9417830e-002,
2340 -5.0911040e-002,
2341 7.2199223e-002,
2342 -3.8502572e-003,
2343 -9.9986041e-002,
2344 -1.0110846e-001,
2345 2.7240523e-002,
2346 3.7231607e-004,
2347 -4.8403626e-002,
2348 -4.2828865e-002,
2349 -4.0941132e-002,
2350 2.1262003e-002,
2351 2.8579653e-002,
2352 -3.8107106e-002,
2353 -2.5403299e-002,
2354 4.0409634e-002,
2355 -1.3506783e-001,
2356 6.7020935e-002,
2357 7.6919909e-002,
2358 -6.2598829e-002,
2359 -4.4526445e-002,
2360 1.2270630e-001,
2361 2.3974241e-002,
2362 -3.6434038e-003,
2363 4.6607563e-002,
2364 8.1524293e-002,
2365 -3.0664049e-002,
2366 4.4022028e-002,
2367 8.6563738e-002,
2368 6.5752991e-002,
2369 -6.7108146e-002,
2370 -1.0342413e-001,
2371 -1.8539076e-002,
2372 -3.0153611e-002,
2373 6.7396260e-003,
2374 -4.4950103e-002,
2375 -1.2515800e-003,
2376 3.0646680e-002,
2377 5.5510478e-002,
2378 -5.2142526e-002,
2379 -6.6687624e-002,
2380 1.5134636e-002,
2381 1.3498064e-002,
2382 -5.4450472e-002,
2383 -8.9529836e-003,
2384 3.0094154e-002,
2385 3.2202481e-002,
2386 1.3948693e-002,
2387 -6.7197034e-002,
2388 -8.5015250e-002,
2389 6.3266660e-002,
2390 4.2798636e-002,
2391 -2.0333357e-002,
2392 -4.0383900e-002,
2393 -1.3841616e-002,
2394 6.3539401e-002,
2395 -1.4953539e-002,
2396 7.3749647e-003,
2397 4.6124894e-002,
2398 -3.3099545e-002,
2399 1.6994609e-003,
2400 3.1756119e-002,
2401 1.1361146e-001,
2402 2.3601853e-002,
2403 -6.1163866e-003,
2404 1.4640892e-002,
2405 -1.3002994e-001,
2406 -5.9991837e-002,
2407 -2.2185968e-002,
2408 -3.5202454e-003,
2409 -3.2725772e-002,
2410 -1.6788319e-002,
2411 -6.9143762e-002,
2412 -3.0097649e-002,
2413 1.2429939e-001,
2414 3.2580395e-002,
2415 -5.0115073e-002,
2416 5.0306592e-003,
2417 -4.4954061e-002,
2418 3.6014498e-002,
2419 -1.3451790e-002,
2420 1.6399117e-002,
2421 1.3923416e-001,
2422 -4.9725951e-003,
2423 6.2052260e-003,
2424 -1.1645022e-001,
2425 -3.5608026e-003,
2426 6.4542089e-002,
2427 2.5646928e-002,
2428 -3.9385217e-002,
2429 3.4619781e-002,
2430 -5.5728973e-002,
2431 -4.1560782e-002,
2432 1.8601185e-003,
2433 -7.7632154e-002,
2434 -1.1198136e-001,
2435 1.7871366e-003,
2436 3.2749909e-002,
2437 6.3402834e-002,
2438 -5.4553077e-002,
2439 -5.3258342e-002,
2440 3.3343720e-002,
2441 5.6556702e-002,
2442 -2.8265688e-002,
2443 -2.3372050e-002,
2444 -7.1953496e-002,
2445 4.9907070e-002,
2446 -2.6195346e-002,
2447 -3.1269328e-002,
2448 -2.2738778e-002,
2449 -3.6952069e-003,
2450 2.3055605e-002,
2451 3.7713246e-002,
2452 -3.3123125e-002,
2453 6.3977198e-002,
2454 1.2888268e-002,
2455 -6.4863602e-002,
2456 -4.6370451e-002,
2457 -1.2762725e-002,
2458 -1.1385579e-002,
2459 5.3278522e-002,
2460 4.0903155e-003,
2461 2.4856544e-003,
2462 2.6887809e-002,
2463 -3.6020834e-002,
2464 1.7437443e-002,
2465 2.0139602e-002,
2466 2.9239905e-002,
2467 3.8038669e-002,
2468 -9.6656754e-002,
2469 1.5283078e-002,
2470 -9.4684237e-002,
2471 3.5509017e-002,
2472 -2.3867173e-002,
2473 4.9278727e-003,
2474 -3.9793551e-002,
2475 -1.1285602e-002,
2476 -1.1809578e-002,
2477 2.7623350e-002,
2478 2.1829332e-003,
2479 2.9116516e-002,
2480 -2.3743110e-002,
2481 -3.6766547e-002,
2482 2.0571789e-002,
2483 5.6084571e-002,
2484 1.3024358e-001,
2485 -7.5886589e-002,
2486 2.7947551e-002,
2487 2.3155403e-002,
2488 -3.1278004e-002,
2489 -1.4436652e-002,
2490 -2.4776289e-002,
2491 -6.8540264e-003,
2492 -1.0098350e-002,
2493 -8.8675200e-002,
2494 1.5859746e-001,
2495 -9.1002037e-002,
2496 1.2604720e-002,
2497 -1.0483836e-002,
2498 -2.8280415e-002,
2499 7.1881441e-002,
2500 -5.6741201e-002,
2501 6.6804943e-002,
2502 6.1990105e-002,
2503 8.1565279e-002,
2504 2.2720394e-002,
2505 -1.2405569e-002,
2506 7.1876233e-002,
2507 -1.0267524e-001,
2508 -3.0958839e-002,
2509 7.9476530e-002,
2510 2.1440879e-002,
2511 -3.6594375e-002,
2512 1.2693478e-002,
2513 -3.5996147e-002,
2514 -4.4807775e-002,
2515 3.0175162e-002,
2516 6.0207188e-002,
2517 -4.4551692e-003,
2518 5.2444239e-002,
2519 -6.7182348e-002,
2520 3.4282089e-002,
2521 1.2050117e-002,
2522 6.7343302e-003,
2523 -3.4597852e-002,
2524 6.2799536e-002,
2525 9.0535361e-002,
2526 4.6750855e-002,
2527 4.5616156e-002,
2528 -4.7775494e-002,
2529 3.3437120e-002,
2530 6.3247569e-002,
2531 -2.5086044e-002,
2532 6.0392800e-002,
2533 -1.0344192e-001,
2534 1.0532757e-002,
2535 8.0919299e-003,
2536 -2.0549100e-002,
2537 7.9851230e-002,
2538 5.9509621e-002,
2539 -1.0304151e-002,
2540 -3.6671778e-003,
2541 1.0290329e-002,
2542 -3.6286054e-002,
2543 -1.1732592e-002,
2544 -8.4237566e-002,
2545 3.3390752e-002,
2546 -5.1523669e-002,
2547 -7.7703392e-002,
2548 7.2951732e-002,
2549 5.5907824e-002,
2550 5.5894272e-003,
2551 5.4254663e-002,
2552 5.1024916e-002,
2553 -5.6879548e-002,
2554 -6.2027367e-002,
2555 -5.6508306e-002,
2556 -4.3199186e-002,
2557 -7.0858160e-002,
2558 -2.7514315e-002,
2559 -1.0304944e-002,
2560 9.7007038e-004,
2561 -6.7224049e-003,
2562 9.2200691e-003,
2563 3.8879401e-003,
2564 -6.5395433e-002,
2565 6.6739257e-002,
2566 6.1434975e-002,
2567 -7.8933867e-002,
2568 -8.4834779e-002,
2569 -2.7405250e-002,
2570 -2.6177970e-002,
2571 -3.3974921e-002,
2572 -3.5379505e-003,
2573 5.0807223e-002,
2574 -6.0485730e-002,
2575 -7.1839018e-003,
2576 2.6693750e-002,
2577 5.3186567e-002,
2578 1.4183779e-002,
2579 -2.2116051e-002,
2580 -1.3741848e-002,
2581 6.1342417e-002,
2582 -3.7993387e-003,
2583 3.7238204e-002,
2584 -1.0739599e-001,
2585 -1.4549117e-002,
2586 4.0386015e-002,
2587 1.2569153e-002,
2588 3.5445067e-002,
2589 -3.8437920e-002,
2590 -1.4546469e-002,
2591 2.3252293e-002,
2592 5.8740276e-002,
2593 -4.5320281e-002,
2594 4.8086444e-002,
2595 -4.6158419e-003,
2596 -5.5124482e-002,
2597 -3.3884263e-002,
2598 -1.6266463e-002,
2599 -1.6153097e-002,
2600 -7.1902422e-004,
2601 4.7423985e-002,
2602 4.5522942e-002,
2603 5.8189486e-002,
2604 -1.6178881e-002,
2605 -8.5068904e-003,
2606 -2.1481593e-002,
2607 5.9052882e-002,
2608 7.6940824e-002,
2609 -4.1182363e-002,
2610 9.3889318e-002,
2611 3.2541071e-002,
2612 -5.0966470e-002,
2613 1.1989934e-002,
2614 1.3485465e-002,
2615 1.1716420e-002,
2616 -3.3544036e-002,
2617 1.0756654e-001,
2618 2.3665782e-002,
2619 5.1632941e-002,
2620 3.3393177e-002,
2621 2.6965276e-002,
2622 -9.3765636e-003,
2623 -4.0374893e-002,
2624 -7.6274872e-002,
2625 1.8358287e-002,
2626 -5.4971891e-002,
2627 -6.1388507e-002,
2628 4.0747836e-002,
2629 -3.0364737e-002,
2630 -3.8176810e-002,
2631 2.1957238e-003,
2632 1.5046955e-002,
2633 -4.6671984e-003,
2634 -3.7148168e-002,
2635 -3.7455685e-002,
2636 3.7180183e-003,
2637 -8.5869921e-003,
2638 3.5823221e-002,
2639 2.0854178e-002,
2640 -5.6165218e-002,
2641 -9.2879840e-002,
2642 1.4952542e-002,
2643 -1.6637472e-002,
2644 2.7553373e-002,
2645 1.1493587e-001,
2646 -3.5352769e-002,
2647 -6.9065396e-002,
2648 7.7929176e-002,
2649 -5.9205594e-002,
2650 -1.8989624e-002,
2651 1.1827864e-002,
2652 -3.8579019e-002,
2653 1.6537438e-002,
2654 -4.5152596e-002,
2655 -8.0801346e-002,
2656 -3.4708707e-002,
2657 -2.0902185e-002,
2658 3.5484478e-002,
2659 -7.2048970e-002,
2660 3.9760809e-002,
2661 -2.1048159e-002,
2662 2.9412146e-003,
2663 -1.2228266e-002,
2664 -1.0549788e-002,
2665 -1.3705371e-002,
2666 -4.2308328e-002,
2667 -8.5322508e-002,
2668 5.6722120e-004,
2669 3.8264621e-002,
2670 4.3257303e-002,
2671 2.8754160e-002,
2672 3.3445727e-003,
2673 2.9282907e-002,
2674 4.8556817e-002,
2675 -3.3795246e-002,
2676 4.0977665e-002,
2677 3.6274969e-002,
2678 3.3552753e-002,
2679 2.9872002e-002,
2680 6.3307072e-002,
2681 1.4992383e-002,
2682 -5.8203262e-002,
2683 -3.0168145e-002,
2684 -3.2352139e-002,
2685 7.6165643e-002,
2686 7.1774864e-002,
2687 -1.7731640e-002,
2688 3.7646033e-002,
2689 5.8535492e-003,
2690 8.3961663e-002,
2691 -7.6352210e-003,
2692 -3.6557713e-003,
2693 -6.1713535e-002,
2694 -4.8057903e-002,
2695 -4.6264109e-002,
2696 -3.4792201e-002,
2697 -2.7416585e-002,
2698 -1.3744116e-003,
2699 -1.9306191e-002,
2700 -5.0539515e-002,
2701 2.7677455e-002,
2702 -2.2617917e-002,
2703 -8.4784776e-002,
2704 7.3259229e-002,
2705 5.9548509e-002,
2706 -7.2282648e-002,
2707 -5.0784237e-002,
2708 9.1028580e-002,
2709 1.6823871e-001,
2710 4.3922313e-002,
2711 2.0660018e-002,
2712 1.2905801e-003,
2713 -5.9644574e-003,
2714 -6.6967719e-003,
2715 2.1111482e-002,
2716 4.5767224e-002,
2717 1.9131948e-002,
2718 2.6813139e-002,
2719 -4.6825266e-002,
2720 1.1768354e-002,
2721 -3.0426377e-002,
2722 -7.0347178e-003,
2723 -7.6017599e-002,
2724 2.1078534e-002,
2725 -9.1780175e-002,
2726 2.7352079e-002,
2727 2.7780454e-002,
2728 8.3826886e-003,
2729 -1.5967673e-002,
2730 -1.0580313e-002,
2731 3.8124734e-002,
2732 3.6951219e-002,
2733 -2.5011240e-002,
2734 2.9019645e-002,
2735 3.3574092e-002,
2736 1.2199007e-002,
2737 -6.3328122e-002,
2738 -1.0293542e-001,
2739 6.2316941e-002,
2740 -1.1529230e-003,
2741 1.0592972e-001,
2742 -2.3803313e-002,
2743 -4.2884377e-002,
2744 -2.3136181e-002,
2745 9.6100002e-003,
2746 -3.8942235e-002,
2747 1.0613309e-001,
2748 1.1584978e-002,
2749 -2.8945108e-002,
2750 1.1978745e-001,
2751 3.3535039e-002,
2752 -3.3192905e-002,
2753 6.4322894e-002,
2754 4.3326082e-002,
2755 2.2661431e-002,
2756 2.1067896e-002,
2757 -1.6775258e-002,
2758 -1.1513173e-001,
2759 1.6050052e-002,
2760 3.6844183e-002,
2761 2.9072793e-002,
2762 -6.7255761e-002,
2763 5.7102385e-002,
2764 7.0546617e-002,
2765 -2.0826937e-002,
2766 -5.7583856e-002,
2767 3.0146035e-002,
2768 -1.9649341e-002,
2769 5.1108010e-002,
2770 -1.2049234e-001,
2771 9.1604975e-003,
2772 -4.4366320e-002,
2773 1.0940581e-002,
2774 -7.4110213e-002,
2775 1.0027252e-001,
2776 8.3559986e-002,
2777 -5.0547965e-002,
2778 3.0123395e-002,
2779 7.0196532e-002,
2780 -8.3469946e-002,
2781 3.3882963e-002,
2782 6.1607561e-002,
2783 4.4793665e-002,
2784 -9.6577712e-002,
2785 -5.0411980e-003,
2786 -1.5066601e-002,
2787 2.4904787e-002,
2788 1.1340361e-002,
2789 2.9052246e-002,
2790 2.6840614e-002,
2791 -1.9931112e-002,
2792 5.2525978e-002,
2793 -4.9751069e-002,
2794 -7.9276887e-002,
2795 2.8081748e-002,
2796 -4.1223168e-002,
2797 1.3105117e-002,
2798 -2.6569475e-003,
2799 -3.2102570e-002,
2800 -2.6357544e-002,
2801 2.2152608e-002,
2802 -3.1539891e-003,
2803 -3.4785718e-002,
2804 -1.0592171e-002,
2805 -4.0300905e-002,
2806 -1.5702723e-002,
2807 -1.8712957e-002,
2808 3.3197549e-002,
2809 -3.6279117e-002,
2810 4.2838238e-002,
2811 -1.6489429e-002,
2812 2.4648914e-002,
2813 5.1252616e-003,
2814 -8.1225473e-002,
2815 -5.6459253e-002,
2816 -5.2348110e-002,
2817 -7.0335906e-002,
2818 -3.3338823e-005,
2819 -3.2311169e-002,
2820 7.4676135e-002,
2821 -3.7143822e-002,
2822 -6.8303532e-002,
2823 -7.0033274e-004,
2824 -3.7552999e-002,
2825 -6.6305361e-002,
2826 1.2196684e-001,
2827 2.2084222e-002,
2828 4.1475857e-002,
2829 -1.0862949e-003,
2830 -4.0143874e-002,
2831 -3.7947485e-002,
2832 2.3605616e-002,
2833 2.3128901e-002,
2834 1.6999557e-001,
2835 8.7507268e-003,
2836 -1.6086519e-002,
2837 1.6438629e-002,
2838 5.3086378e-002,
2839 4.2778341e-002,
2840 -5.1411551e-002,
2841 -9.1155004e-003,
2842 7.1703894e-002,
2843 -6.2919585e-002,
2844 -4.1252239e-003,
2845 -2.7800338e-002,
2846 1.3406385e-002,
2847 -1.9639614e-002,
2848 2.0766865e-002,
2849 -8.0707557e-002,
2850 -7.9126401e-003,
2851 1.2061087e-002,
2852 7.8233420e-002,
2853 2.5787108e-003,
2854 9.6325419e-002,
2855 4.2169871e-002,
2856 4.5779560e-002,
2857 1.1692399e-002,
2858 3.6624616e-002,
2859 -2.1368960e-002,
2860 8.6087403e-002,
2861 -3.9290515e-002,
2862 -9.1694613e-003,
2863 3.1814092e-002,
2864 2.4160765e-002,
2865 -1.1817798e-003,
2866 1.1293805e-001,
2867 3.5901275e-002,
2868 2.3964131e-002,
2869 1.4594516e-002,
2870 8.3442765e-002,
2871 2.7873584e-003,
2872 9.2888387e-002,
2873 5.6597406e-002,
2874 3.3678386e-002,
2875 1.1285883e-002,
2876 -1.3345965e-002,
2877 -3.7971276e-002,
2878 3.8853868e-002,
2879 4.0434589e-002,
2880 -3.5457626e-002,
2881 3.4183998e-002,
2882 9.8248684e-002,
2883 -7.6115939e-002,
2884 -1.1769491e-002,
2885 -3.8386164e-002,
2886 -1.8975843e-002,
2887 -9.3988535e-002,
2888 -5.5576121e-003,
2889 -1.8636003e-002,
2890 2.8386234e-002,
2891 -2.4200578e-002,
2892 4.1252766e-002,
2893 -6.8000375e-002,
2894 -3.7388633e-002,
2895 -3.0010634e-002,
2896 -2.0049886e-002,
2897 2.5499201e-002,
2898 -3.7598273e-002,
2899 -4.4794045e-002,
2900 4.9668753e-002,
2901 2.8526404e-002,
2902 -7.6218361e-003,
2903 -1.0150563e-001,
2904 -3.1635380e-002,
2905 6.0899411e-002,
2906 -4.0702573e-003,
2907 3.6908492e-002,
2908 6.0695811e-002,
2909 -8.5097943e-002,
2910 5.3730269e-002,
2911 3.7528389e-003,
2912 9.3525516e-002,
2913 -1.4898976e-002,
2914 2.7723761e-002,
2915 -1.3087617e-002,
2916 -8.5905788e-003,
2917 -4.0551186e-003,
2918 5.2805805e-003,
2919 6.8736269e-002,
2920 1.5477601e-003,
2921 4.0766710e-003,
2922 2.4948069e-002,
2923 -2.3695927e-002,
2924 2.0778232e-002,
2925 7.7785189e-002,
2926 -6.5214959e-002,
2927 -1.6680307e-002,
2928 -5.1966107e-002,
2929 7.5663630e-003,
2930 -1.3256079e-002,
2931 2.9625848e-002,
2932 -3.9745297e-002,
2933 2.5236371e-002,
2934 -3.2270585e-002,
2935 6.2655107e-002,
2936 3.3731838e-002,
2937 2.2075588e-003,
2938 -2.9591354e-002,
2939 3.1341479e-002,
2940 -7.6083655e-002,
2941 6.1296972e-002,
2942 -5.6695620e-002,
2943 2.2323220e-002,
2944 2.3643317e-003,
2945 2.5031378e-002,
2946 5.5413805e-002,
2947 6.0973843e-002,
2948 -7.3883029e-002,
2949 1.3029020e-002,
2950 6.5448736e-002,
2951 -2.3732566e-002,
2952 -1.6089444e-002,
2953 -2.1074484e-002,
2954 5.7948843e-002,
2955 8.6615559e-002,
2956 -9.1319744e-002,
2957 -1.0161538e-002,
2958 1.9629470e-002,
2959 1.9360651e-002,
2960 -2.8093541e-002,
2961 -4.2935479e-002,
2962 1.0709420e-002,
2963 7.8669934e-002,
2964 2.3835887e-002,
2965 1.8165279e-002,
2966 -5.4214119e-003,
2967 -7.9902014e-003,
2968 4.5058379e-002,
2969 -3.2063499e-002,
2970 -5.8672800e-002,
2971 1.2173177e-002,
2972 5.9993154e-002,
2973 2.3138893e-002,
2974 8.0998931e-003,
2975 -4.4800380e-002,
2976 -2.4859361e-002,
2977 -1.5868492e-002,
2978 -5.2323712e-002,
2979 -4.5973299e-002,
2980 -2.3052455e-003,
2981 8.1582903e-003,
2982 6.8065483e-002,
2983 7.6438296e-004,
2984 4.0392238e-002,
2985 -6.5966937e-002,
2986 -5.0614520e-002,
2987 -5.5301523e-002,
2988 -4.2561773e-003,
2989 5.9937931e-002,
2990 -2.1382190e-002,
2991 -2.0676084e-002,
2992 -3.5839724e-002,
2993 -1.2403270e-002,
2994 -1.8285642e-002,
2995 -4.5681905e-002,
2996 2.5535673e-002,
2997 1.4234783e-002,
2998 -1.9259208e-002,
2999 -2.5661378e-002,
3000 3.0184961e-002,
3001 -5.6818389e-002,
3002 3.2310662e-002,
3003 -2.4301821e-003,
3004 -1.2328487e-002,
3005 -5.4786335e-002,
3006 -4.8916330e-002,
3007 4.8190116e-002,
3008 -6.0850449e-002,
3009 7.7620003e-002,
3010 -6.6473044e-002,
3011 5.1361693e-002,
3012 -4.4367608e-002,
3013 5.9245756e-002,
3014 5.3474787e-003,
3015 3.8059821e-003,
3016 -6.1171918e-002,
3017 -2.9543201e-002,
3018 -8.3560612e-003,
3019 -4.1202373e-002,
3020 -5.3271164e-002,
3021 7.6473415e-002,
3022 1.3747330e-002,
3023 -4.2692942e-002,
3024 -4.7688735e-002,
3025 9.0017757e-002,
3026 -5.5124068e-002,
3027 -4.9430822e-002,
3028 1.9839950e-002,
3029 6.1066303e-002,
3030 -1.3518935e-001,
3031 4.5758030e-002,
3032 2.8061894e-002,
3033 2.2738266e-002,
3034 -9.3128822e-003,
3035 7.9618280e-002,
3036 -1.2187199e-001,
3037 4.5605462e-002,
3038 -3.0479221e-002,
3039 3.8694000e-002,
3040 -1.8124762e-002,
3041 3.7759175e-002,
3042 1.8158014e-003,
3043 -2.7070632e-002,
3044 -2.3634825e-002,
3045 5.2676876e-002,
3046 -5.2016000e-003,
3047 -5.4593248e-002,
3048 -1.6338775e-002,
3049 -8.0919891e-002,
3050 8.7671746e-003,
3051 5.8316283e-002,
3052 -6.9144058e-002,
3053 -4.6936119e-002,
3054 1.6594244e-002,
3055 -7.6784768e-002,
3056 -6.3547981e-003,
3057 4.8236469e-002,
3058 1.6578926e-002,
3059 -2.8223303e-002,
3060 -8.7243754e-002,
3061 5.5790867e-002,
3062 4.5976330e-003,
3063 -4.0593161e-003,
3064 -7.1609202e-002,
3065 3.6451850e-002,
3066 -3.6051938e-002,
3067 1.0343606e-004,
3068 4.0493147e-002,
3069 2.1330427e-002,
3070 -3.3170735e-002,
3071 -4.4584020e-003,
3072 3.1555313e-002,
3073 -1.1414545e-001,
3074 5.6867307e-002,
3075 4.0626699e-002,
3076 -5.8860350e-002,
3077 -1.0003188e-001,
3078 -4.8326893e-002,
3079 -1.2614691e-002,
3080 -2.1586874e-002,
3081 -3.1935606e-002,
3082 2.4103451e-002,
3083 1.4488790e-002,
3084 -8.0859096e-004,
3085 -3.8980020e-003,
3086 7.4909148e-002,
3087 -2.8049185e-002,
3088 -2.0918789e-002,
3089 -2.4711940e-002,
3090 5.3455068e-002,
3091 -9.7517045e-003,
3092 -2.4433675e-002,
3093 3.7640959e-002,
3094 2.4437924e-002,
3095 4.6113770e-003,
3096 -2.1101125e-002,
3097 -2.2852117e-002,
3098 -7.2572348e-002,
3099 3.6761328e-002,
3100 2.6652183e-002,
3101 -4.3100149e-002,
3102 -5.4098286e-002,
3103 8.2220041e-002,
3104 5.5613895e-002,
3105 5.4603855e-002,
3106 -1.3589191e-001,
3107 2.3347518e-002,
3108 4.6453611e-002,
3109 2.2623921e-003,
3110 6.0644536e-002,
3111 -7.5601564e-002,
3112 -8.9194042e-002,
3113 -3.4410351e-002,
3114 -3.4360013e-003,
3115 5.1666691e-002,
3116 1.2464056e-002,
3117 -2.3030505e-003,
3118 -3.9004649e-002,
3119 1.1817405e-002,
3120 -3.4117635e-002,
3121 -2.8693035e-002,
3122 -1.5931261e-002,
3123 8.0677220e-004,
3124 1.8397691e-002,
3125 -3.1052320e-002,
3126 4.9726240e-002,
3127 -2.0747799e-002,
3128 -6.0637710e-003,
3129 -7.9396747e-002,
3130 4.8372461e-002,
3131 -7.1979765e-002,
3132 2.6832942e-002,
3133 2.9273777e-002,
3134 -4.8337996e-003,
3135 4.0391770e-003,
3136 -9.4918066e-002,
3137 6.2066596e-002,
3138 4.9875577e-002,
3139 -3.3753903e-002,
3140 -2.4500392e-002,
3141 9.0658929e-002,
3142 -9.8343476e-002,
3143 -6.2504733e-003,
3144 1.1991216e-001,
3145 2.8944337e-002,
3146 2.6898626e-003,
3147 -6.4267875e-002,
3148 2.9019187e-002,
3149 1.9971213e-002,
3150 8.0684873e-003,
3151 1.3081097e-002,
3152 -3.1283754e-002,
3153 -2.8489269e-002,
3154 -1.1686268e-001,
3155 -1.3745347e-002,
3156 5.3686243e-002,
3157 -5.2197217e-002,
3158 -3.3465705e-002,
3159 -3.5083431e-002,
3160 1.6015164e-002,
3161 2.4493466e-002,
3162 -2.3306198e-002,
3163 -1.9672026e-002,
3164 -7.6748565e-002,
3165 -7.1159132e-002,
3166 -3.6831968e-002,
3167 -1.1592501e-001,
3168 -1.1802673e-001,
3169 2.8843104e-002,
3170 -5.9118430e-002,
3171 -1.1106526e-002,
3172 -4.0643480e-002,
3173 -3.3903934e-002,
3174 6.9026642e-002,
3175 -3.3357058e-002,
3176 3.1574083e-002,
3177 4.0538895e-002,
3178 4.3133551e-002,
3179 3.7814770e-002,
3180 6.4315631e-002,
3181 -5.5887205e-002,
3182 -6.1198396e-002,
3183 7.2376501e-002,
3184 -4.4847288e-002,
3185 4.4972439e-002,
3186 8.9532496e-002,
3187 2.7491210e-002,
3188 3.5765916e-002,
3189 -5.8314299e-002,
3190 -1.5996091e-002,
3191 -4.3521287e-002,
3192 -2.8304205e-002,
3193 -4.3486571e-002,
3194 1.0849438e-001,
3195 2.2361367e-002,
3196 -6.1362009e-003,
3197 5.3111507e-002,
3198 -8.8565282e-002,
3199 8.4842988e-002,
3200 1.0627885e-002,
3201 4.4828472e-003,
3202 7.7250566e-003,
3203 -3.5888413e-002,
3204 4.5405946e-002,
3205 9.5357093e-003,
3206 3.8049221e-002,
3207 1.1798868e-002,
3208 8.5901681e-002,
3209 7.2651393e-002,
3210 -1.0648259e-002,
3211 -3.5412792e-002,
3212 -5.2852119e-003,
3213 -2.8006256e-002,
3214 -5.8455622e-003,
3215 9.2263862e-003,
3216 1.4651709e-002,
3217 -1.1429416e-001,
3218 8.0368439e-002,
3219 2.6278264e-002,
3220 2.0947848e-002,
3221 5.9186459e-002,
3222 3.0967487e-002,
3223 -1.1507298e-001,
3224 -3.4239562e-004,
3225 -2.0939429e-002,
3226 6.9101989e-002,
3227 1.9188787e-002,
3228 -1.7007634e-002,
3229 -1.4226805e-002,
3230 2.0497813e-003,
3231 4.8643630e-003,
3232 -5.0243128e-002,
3233 2.6571757e-002,
3234 -2.5756622e-002,
3235 -6.2136271e-002,
3236 3.0876774e-002,
3237 -3.2966648e-002,
3238 -4.6798326e-002,
3239 -7.2864522e-002,
3240 -7.0620327e-002,
3241 3.1514440e-002,
3242 4.7419175e-002,
3243 -2.9639040e-002,
3244 -7.4872381e-002,
3245 1.0268214e-001,
3246 -6.4408455e-002,
3247 -5.1714244e-002,
3248 -1.4811842e-002,
3249 -2.6652795e-002,
3250 -3.3398841e-002,
3251 -9.1093311e-002,
3252 -2.9613673e-002,
3253 -3.2849316e-002,
3254 -2.1792627e-002,
3255 -4.8905018e-002,
3256 3.8278002e-002,
3257 -1.0578267e-001,
3258 3.9883500e-002,
3259 -4.0322452e-002,
3260 -7.7085856e-002,
3261 -1.1560340e-002,
3262 -9.6078464e-003,
3263 -5.2790120e-003,
3264 -1.7445510e-002,
3265 4.1210396e-002,
3266 -3.1966850e-002,
3267 -4.2623715e-002,
3268 -3.8224686e-002,
3269 -2.3460384e-002,
3270 -1.8322700e-002,
3271 1.5049174e-001,
3272 -3.1993543e-002,
3273 4.3014183e-002,
3274 -4.4366020e-002,
3275 -1.9251396e-002,
3276 -1.2898947e-002,
3277 -6.0899923e-002,
3278 -5.9898591e-002,
3279 -5.6557253e-002,
3280 4.6067919e-002,
3281 2.0882012e-002,
3282 -7.1937529e-002,
3283 -9.5914837e-002,
3284 -1.2626698e-001,
3285 -3.6792717e-002,
3286 2.8022409e-002,
3287 -3.4921767e-002,
3288 -2.2305614e-002,
3289 -3.2328726e-002,
3290 -4.8809030e-002,
3291 -2.6925977e-002,
3292 -4.2114647e-002,
3293 8.7023862e-002,
3294 -3.7654336e-003,
3295 6.9322688e-002,
3296 9.2912513e-003,
3297 5.7435044e-002,
3298 1.9609569e-002,
3299 -1.1570562e-002,
3300 6.1049764e-002,
3301 -6.4977165e-002,
3302 -5.0641683e-002,
3303 -4.9830239e-002,
3304 2.9619165e-002,
3305 -4.3292073e-002,
3306 -6.2860680e-002,
3307 6.3449012e-002,
3308 6.3302743e-002,
3309 -3.7096028e-002,
3310 -4.6860354e-002,
3311 1.6643809e-002,
3312 -2.8812456e-002,
3313 -1.2949017e-004,
3314 -5.0303595e-003,
3315 -5.1531111e-002,
3316 1.0185519e-001,
3317 -8.8467370e-003,
3318 -6.4260237e-002,
3319 2.2972796e-002,
3320 -8.7208177e-003,
3321 2.1703090e-002,
3322 -3.2583688e-002,
3323 1.9180369e-002,
3324 -4.6604492e-002,
3325 5.9620323e-002,
3326 -2.3169309e-002,
3327 1.7923404e-002,
3328 7.0399591e-002,
3329 -6.3632676e-003,
3330 -6.2662420e-002,
3331 -5.0818406e-003,
3332 7.6310034e-002,
3333 3.8440333e-002,
3334 2.3108218e-002,
3335 1.0992061e-001,
3336 -6.6023131e-002,
3337 1.0339039e-002,
3338 -1.2454926e-002,
3339 3.0748449e-002,
3340 3.8733454e-002,
3341 -8.1029526e-002,
3342 -6.3890932e-003,
3343 -1.7310614e-003,
3344 -6.5448180e-002,
3345 -1.3567927e-002,
3346 -1.4651225e-002,
3347 -1.6402517e-003,
3348 -4.0889024e-002,
3349 3.3267739e-002,
3350 -8.7669631e-002,
3351 -1.1762527e-001,
3352 -3.0337637e-003,
3353 -1.0579264e-001,
3354 3.8458061e-002,
3355 6.1506618e-002,
3356 -1.2438319e-002,
3357 -2.0981512e-002,
3358 8.6707387e-003,
3359 4.1305048e-002,
3360 5.8010222e-002,
3361 3.4177414e-002,
3362 6.1614068e-002,
3363 3.7742022e-002,
3364 2.2274616e-003,
3365 -3.3374053e-002,
3366 -1.3841013e-002,
3367 -1.5519456e-002,
3368 -1.1770865e-001,
3369 -4.0589703e-002,
3370 1.1432496e-001,
3371 -2.8665001e-002,
3372 -9.7087434e-002,
3373 2.8739815e-002,
3374 9.2917531e-002,
3375 1.1938896e-001,
3376 -2.9010572e-002,
3377 -3.4721428e-002,
3378 -3.4855927e-002,
3379 -1.2121671e-002,
3380 -1.0158399e-001,
3381 9.7895131e-002,
3382 -7.8712576e-002,
3383 -7.9976995e-002,
3384 7.6185673e-002,
3385 -2.8833935e-002,
3386 1.8354206e-002,
3387 -1.7587259e-001,
3388 -7.8647771e-002,
3389 2.2256759e-002,
3390 -2.1611016e-002,
3391 2.4071583e-002,
3392 4.5227886e-004,
3393 -7.2657111e-002,
3394 -7.2168746e-002,
3395 -1.1452740e-002,
3396 1.6181869e-002,
3397 4.5831060e-002,
3398 -2.3369801e-003,
3399 -2.8727581e-002,
3400 7.5005238e-003,
3401 -8.9739571e-003,
3402 -4.1100109e-002,
3403 -1.6087343e-002,
3404 7.4606898e-003,
3405 2.9933544e-002,
3406 -1.2690286e-001,
3407 -3.9049832e-002,
3408 2.7720568e-002,
3409 1.7947841e-002,
3410 3.4410773e-002,
3411 5.5729818e-003,
3412 -1.8016513e-002,
3413 -4.8830323e-002,
3414 3.2716530e-002,
3415 -3.4232512e-002,
3416 -1.6426973e-002,
3417 5.0795800e-002,
3418 -3.1791729e-002,
3419 3.7707010e-002,
3420 4.5092581e-002,
3421 -4.8603247e-002,
3422 2.9459071e-002,
3423 -4.6422186e-002,
3424 3.9296295e-003,
3425 -2.8900220e-002,
3426 1.1207343e-002,
3427 -3.5131485e-002,
3428 3.0510860e-002,
3429 1.0155622e-001,
3430 6.2187792e-003,
3431 6.7503241e-002,
3432 4.7232070e-002,
3433 -2.1226837e-002,
3434 -8.4154353e-003,
3435 2.0913858e-002,
3436 7.0127327e-003,
3437 -1.2448522e-002,
3438 1.6449412e-002,
3439 4.5151926e-002,
3440 4.6836548e-002,
3441 -2.0687186e-002,
3442 -7.3644538e-002,
3443 -1.0260562e-001,
3444 4.1594354e-004,
3445 2.2962943e-002,
3446 -3.6753478e-002,
3447 -3.6656754e-002,
3448 -3.9912894e-002,
3449 1.1998781e-002,
3450 1.2228691e-002,
3451 6.9910277e-002,
3452 2.4035919e-002,
3453 7.1080248e-003,
3454 3.6471267e-002,
3455 -1.5899153e-003,
3456 -6.2981316e-002,
3457 -4.8019402e-003,
3458 9.9610031e-002,
3459 3.4685502e-002,
3460 -1.4906597e-001,
3461 6.2799402e-002,
3462 -3.8932025e-003,
3463 3.5313345e-002,
3464 6.4080127e-003,
3465 7.7712074e-002,
3466 1.9652177e-002,
3467 3.3529556e-002,
3468 6.7998095e-002,
3469 4.0481914e-002,
3470 -4.5148562e-002,
3471 1.2390995e-001,
3472 6.0472177e-002,
3473 -4.0537793e-002,
3474 -2.9016904e-002,
3475 1.0069785e-002,
3476 -4.3630516e-002,
3477 1.6317010e-002,
3478 -8.1563635e-003,
3479 -2.9428878e-002,
3480 -1.0007097e-002,
3481 1.1748494e-003,
3482 -3.7584384e-003,
3483 -1.0136314e-002,
3484 6.9501199e-002,
3485 -6.2079897e-002,
3486 5.6550846e-002,
3487 -3.1224895e-004,
3488 1.5172074e-002,
3489 3.5494228e-002,
3490 -2.8525286e-002,
3491 7.0934847e-002,
3492 -2.1855207e-002,
3493 -9.0589689e-002,
3494 -5.0420263e-002,
3495 -6.4220854e-002,
3496 8.0572534e-002,
3497 4.4657936e-002,
3498 3.8900053e-002,
3499 2.3038306e-002,
3500 -2.9059798e-002,
3501 4.1790833e-002,
3502 -1.4498459e-003,
3503 -1.4247977e-002,
3504 -7.2557019e-003,
3505 7.0209000e-002,
3506 7.1292433e-002,
3507 -1.0914340e-002,
3508 1.0671194e-001,
3509 -3.9136244e-002,
3510 -1.3175217e-002,
3511 1.3764681e-002,
3512 1.1563616e-001,
3513 -6.3896840e-003,
3514 -6.2527708e-002,
3515 8.8512912e-002,
3516 -2.9045669e-002,
3517 1.5227173e-002,
3518 -5.0667751e-002,
3519 1.2560643e-001,
3520 7.4986299e-002,
3521 3.3825251e-002,
3522 1.5514266e-003,
3523 -5.2532720e-002,
3524 1.7029297e-002,
3525 -3.2944301e-002,
3526 -6.1748947e-002,
3527 2.6402422e-002,
3528 -2.6902014e-002,
3529 -1.1054785e-001,
3530 4.5217579e-002,
3531 7.2634916e-002,
3532 4.7126396e-003,
3533 5.3388646e-002,
3534 1.4724645e-002,
3535 4.8733852e-002,
3536 -2.4509080e-002,
3537 -9.1580431e-002,
3538 5.2106999e-003,
3539 -1.5643665e-001,
3540 -4.8892928e-003,
3541 -5.3026671e-002,
3542 -4.4146053e-004,
3543 3.2444612e-002,
3544 -2.3101994e-003,
3545 9.4890488e-002,
3546 -7.8052719e-002,
3547 6.0338172e-003,
3548 -4.0433742e-002,
3549 -3.9104783e-002,
3550 4.0994343e-002,
3551 7.7513705e-002,
3552 -1.8133412e-002,
3553 -1.8801315e-002,
3554 9.9180571e-002,
3555 5.9051814e-002,
3556 3.2637953e-002,
3557 4.5773237e-002,
3558 9.2868125e-003,
3559 -4.4946634e-002,
3560 -5.0590403e-002,
3561 -3.3365865e-002,
3562 3.5527025e-002,
3563 7.4204867e-003,
3564 1.5004459e-002,
3565 -3.4647091e-003,
3566 5.5465088e-002,
3567 1.1416662e-001,
3568 -2.6462288e-002,
3569 6.8671916e-002,
3570 -6.3002510e-003,
3571 1.1583924e-002,
3572 3.1050102e-003,
3573 -1.0105237e-001,
3574 -1.0657225e-002,
3575 -9.8132990e-002,
3576 -2.8254118e-002,
3577 5.8377956e-002,
3578 -2.3015648e-002,
3579 -1.7437864e-002,
3580 -2.2634945e-002,
3581 -4.8192213e-002,
3582 -4.7584233e-002,
3583 1.9414654e-002,
3584 -2.7057831e-002,
3585 1.7158611e-002,
3586 1.3317117e-001,
3587 -5.5081291e-002,
3588 -5.0017430e-002,
3589 7.6813579e-002,
3590 9.4583304e-002,
3591 -6.9067814e-002,
3592 1.9120563e-002,
3593 2.1258087e-002,
3594 7.2055539e-002,
3595 -4.4266255e-002,
3596 -3.2205709e-002,
3597 -2.8779031e-002,
3598 -2.3481940e-002,
3599 1.7708910e-002,
3600 -1.9311139e-002,
3601 5.3418240e-002,
3602 2.4606925e-002,
3603 5.0846628e-003,
3604 -2.0453302e-002,
3605 3.5461384e-002,
3606 1.3245649e-002,
3607 -1.4856256e-002,
3608 -4.1995487e-002,
3609 -6.8461842e-003,
3610 4.3425178e-002,
3611 -4.2381240e-002,
3612 -1.2470922e-001,
3613 -6.6566711e-002,
3614 -1.5328279e-003,
3615 2.1121820e-002,
3616 -8.9850510e-002,
3617 2.0682240e-004,
3618 -5.8686388e-002,
3619 7.1519107e-002,
3620 2.7049268e-002,
3621 4.3271736e-003,
3622 -1.8990188e-002,
3623 4.1744154e-003,
3624 -6.7617528e-002,
3625 -1.5982309e-002,
3626 -8.6739389e-003,
3627 6.8767245e-003,
3628 -7.0052976e-003,
3629 8.3718019e-002,
3630 5.8127315e-002,
3631 -9.4223672e-002,
3632 -1.3478363e-002,
3633 -3.2457089e-002,
3634 -1.7549472e-001,
3635 2.8493349e-002,
3636 1.0412304e-001,
3637 -1.1173210e-003,
3638 7.1447946e-003,
3639 2.7052018e-002,
3640 2.1816972e-003,
3641 -8.8630176e-002,
3642 -1.0701357e-001,
3643 -4.1207617e-002,
3644 3.7077898e-003,
3645 8.7053488e-002,
3646 1.4283129e-002,
3647 6.4010086e-002,
3648 -3.7679928e-002,
3649 8.3111383e-002,
3650 5.6677718e-002,
3651 1.4063916e-003,
3652 -1.0364232e-001,
3653 3.6312049e-002,
3654 -2.6135054e-002,
3655 3.1703422e-002,
3656 -3.5189144e-002,
3657 1.6030282e-002,
3658 -7.0953448e-002,
3659 -1.6409520e-002,
3660 1.5861113e-002,
3661 -4.0344599e-002,
3662 9.3345150e-002,
3663 -3.2385751e-002,
3664 2.9194015e-002,
3665 -5.3074056e-002,
3666 -5.8395538e-002,
3667 1.4711047e-002,
3668 1.6754312e-002,
3669 -4.1092096e-002,
3670 -5.7509643e-002,
3671 5.8321957e-003,
3672 3.4401437e-002,
3673 3.5235160e-002,
3674 6.4540634e-003,
3675 6.8538944e-003,
3676 -1.0143565e-001,
3677 -2.5820489e-002,
3678 -2.0821741e-002,
3679 4.4652423e-002,
3680 -3.4072854e-002,
3681 -2.6609349e-002,
3682 3.3889860e-002,
3683 -5.3220787e-002,
3684 -2.4894595e-002,
3685 -9.6139329e-002,
3686 -3.3024922e-002,
3687 1.7823306e-002,
3688 -4.2192663e-003,
3689 -5.3704045e-002,
3690 1.1044474e-002,
3691 1.4159169e-002,
3692 5.6261779e-003,
3693 1.4544719e-001,
3694 -4.2079631e-003,
3695 -9.5725344e-002,
3696 -3.6408815e-003,
3697 6.0200088e-002,
3698 2.9998960e-002,
3699 -7.3398314e-002,
3700 -4.8228886e-002,
3701 3.3208412e-002,
3702 -5.6677275e-003,
3703 -6.6855312e-003,
3704 -3.0785426e-002,
3705 4.2126629e-003,
3706 7.0115500e-002,
3707 -3.9919529e-002,
3708 4.0614066e-002,
3709 -3.0371460e-002,
3710 7.2891063e-002,
3711 2.3537099e-002,
3712 2.9755936e-002,
3713 -3.7706444e-002,
3714 -8.3470665e-003,
3715 7.6886063e-003,
3716 -8.4313321e-002,
3717 -2.9399720e-002,
3718 -1.4589921e-002,
3719 1.7944446e-002,
3720 -1.1460170e-001,
3721 -6.2017760e-002,
3722 3.4407222e-002,
3723 -2.7741014e-002,
3724 -4.6295413e-002,
3725 -2.7812656e-002,
3726 -3.0886235e-002,
3727 1.1995511e-002,
3728 -3.2969544e-002,
3729 -6.9191631e-003,
3730 -2.9791556e-002,
3731 2.0392531e-002,
3732 -4.7567313e-003,
3733 -9.8443940e-002,
3734 -1.2686039e-002,
3735 -2.1886631e-002,
3736 -1.5455907e-002,
3737 -1.1782002e-001,
3738 6.1301396e-002,
3739 2.1872915e-002,
3740 -1.0561240e-002,
3741 -2.3193915e-002,
3742 6.9727656e-002,
3743 1.4693869e-003,
3744 -1.3543614e-001,
3745 -4.0815903e-004,
3746 5.6251246e-002,
3747 -9.1505709e-002,
3748 5.7185400e-003,
3749 7.1033142e-002,
3750 -7.9002590e-002,
3751 -4.1318689e-002,
3752 4.9841764e-002,
3753 1.7309114e-002,
3754 5.7136005e-002,
3755 -2.1199613e-002,
3756 -6.1231140e-002,
3757 7.2177738e-002,
3758 2.5816325e-002,
3759 -3.9691591e-002,
3760 -8.4077105e-002,
3761 1.8921121e-002,
3762 4.0273842e-002,
3763 -5.0316912e-002,
3764 -1.2301284e-002,
3765 1.4068218e-003,
3766 3.9074162e-002,
3767 1.1140969e-002,
3768 -9.0100129e-002,
3769 1.6566978e-002,
3770 2.2387085e-002,
3771 -5.5267138e-003,
3772 -1.4053472e-002,
3773 8.5720676e-002,
3774 6.6003080e-003,
3775 -3.4558594e-002,
3776 -2.1528224e-002,
3777 3.4199928e-002,
3778 8.3291659e-003,
3779 -3.4104982e-002,
3780 7.5554591e-003,
3781 1.0701557e-001,
3782 1.3371029e-002,
3783 -5.4777395e-002,
3784 -5.4878162e-002,
3785 -4.1852588e-002,
3786 -4.0276462e-003,
3787 1.0933072e-002,
3788 3.1101256e-002,
3789 -4.6169830e-002,
3790 -7.8623398e-002,
3791 -4.0709650e-002,
3792 -2.2176445e-002,
3793 -6.1230977e-002,
3794 1.6368772e-002,
3795 -1.0741991e-001,
3796 -3.4277843e-002,
3797 6.1009971e-002,
3798 -8.3667710e-002,
3799 1.1309839e-002,
3800 5.4127285e-004,
3801 8.4633157e-002,
3802 -6.3130402e-002,
3803 -1.1137924e-002,
3804 -5.0412645e-002,
3805 -5.4166796e-002,
3806 -4.6504636e-002,
3807 7.8517633e-002,
3808 3.1626107e-002,
3809 -1.8210994e-002,
3810 -3.5098136e-003,
3811 -1.2130004e-002,
3812 -1.3464374e-002,
3813 5.0731507e-002,
3814 -4.3012235e-003,
3815 8.2720477e-002,
3816 -1.3193101e-002,
3817 -1.3778387e-002,
3818 5.5452531e-003,
3819 -9.3586936e-003,
3820 -8.6317405e-003,
3821 -3.6862811e-002,
3822 -3.2830740e-002,
3823 8.4783068e-003,
3824 -1.5330067e-002,
3825 1.1130119e-001,
3826 7.3688984e-003,
3827 -6.4062197e-003,
3828 3.9423451e-002,
3829 8.1626914e-002,
3830 -2.2657562e-002,
3831 7.7429063e-002,
3832 -1.7196394e-003,
3833 -5.1547799e-002,
3834 8.5550269e-002,
3835 1.0233102e-003,
3836 -2.7193777e-002,
3837 5.8490358e-002,
3838 6.2673818e-002,
3839 -3.9346043e-002,
3840 -3.9066234e-002,
3841 -1.2783050e-002,
3842 -6.3166376e-002,
3843 2.7608238e-003,
3844 -4.7437497e-003,
3845 4.1786886e-003,
3846 -3.2351866e-003,
3847 -3.3156438e-002,
3848 -5.4098732e-002,
3849 -5.6553182e-002,
3850 5.8110628e-002,
3851 1.1522620e-002,
3852 -5.4533062e-003,
3853 -1.6040357e-002,
3854 -5.2050007e-002,
3855 1.1068723e-002,
3856 7.0599072e-002,
3857 -8.2637140e-002,
3858 -3.3101999e-002,
3859 -1.7103108e-002,
3860 -5.2723510e-002,
3861 1.1424693e-004,
3862 -2.0451276e-002,
3863 -3.8451163e-002,
3864 -3.9178471e-002,
3865 1.0882970e-001,
3866 -5.9520509e-002,
3867 -1.6406338e-002,
3868 -3.7464624e-002,
3869 -1.5850757e-002,
3870 2.8142632e-003,
3871 8.5106236e-003,
3872 -3.4606452e-002,
3873 2.1538352e-002,
3874 -5.1542008e-002,
3875 -6.0556592e-002,
3876 -3.0525775e-003,
3877 1.0188123e-001,
3878 -1.6159393e-002,
3879 -4.6398817e-003,
3880 -3.4883594e-002,
3881 5.7383438e-003,
3882 7.6872944e-002,
3883 1.6904979e-002,
3884 -3.9974367e-004,
3885 -6.4651835e-002,
3886 2.0519546e-002,
3887 1.4600580e-002,
3888 9.3830207e-002,
3889 1.1815421e-001,
3890 8.2952538e-002,
3891 1.3580903e-004,
3892 -4.5583612e-002,
3893 -8.4369787e-002,
3894 1.0032836e-002,
3895 7.8411529e-002,
3896 4.3200604e-002,
3897 -1.5040485e-001,
3898 -1.2045753e-001,
3899 -3.0628967e-002,
3900 4.6612260e-003,
3901 6.4710750e-002,
3902 -2.6463384e-002,
3903 8.0467496e-002,
3904 1.5772806e-002,
3905 -9.0031337e-002,
3906 3.8140960e-002,
3907 2.4067996e-002,
3908 -1.4456479e-002,
3909 2.5044977e-002,
3910 -5.5023682e-002,
3911 -3.1476503e-002,
3912 4.6154417e-002,
3913 4.1969567e-002,
3914 -2.1537004e-002,
3915 -1.3892791e-002,
3916 -7.9877470e-002,
3917 -6.6130095e-002,
3918 -3.3971108e-002,
3919 4.9723852e-004,
3920 -2.3332777e-002,
3921 4.4957143e-002,
3922 4.5955566e-002,
3923 7.3085106e-002,
3924 1.4327863e-002,
3925 4.4882884e-002,
3926 -4.5453744e-002,
3927 3.2494203e-002,
3928 -3.5223572e-004,
3929 -3.4399985e-002,
3930 -5.9070327e-002,
3931 -2.4763167e-002,
3932 5.4170280e-002,
3933 -9.3797557e-002,
3934 -2.4345173e-002,
3935 7.5789539e-003,
3936 6.5847677e-003,
3937 -1.1035459e-001,
3938 6.4245815e-002,
3939 -6.3677641e-002,
3940 -2.7625955e-002,
3941 -4.9760945e-002,
3942 1.9438298e-002,
3943 -2.0183031e-003,
3944 3.9238472e-002,
3945 7.3801148e-002,
3946 -7.4626808e-003,
3947 -3.5100675e-002,
3948 1.1826910e-002,
3949 -5.0622844e-002,
3950 4.3419831e-002,
3951 -2.2438311e-002,
3952 4.0482870e-002,
3953 -2.5746508e-002,
3954 -4.5886738e-003,
3955 -4.2692344e-002,
3956 6.0214404e-003,
3957 -4.9494823e-002,
3958 -6.9637679e-002,
3959 -6.0074768e-002,
3960 -1.3792535e-002,
3961 5.8374139e-002,
3962 4.0942951e-006,
3963 -4.1381257e-002,
3964 5.5951370e-002,
3965 -2.9628877e-002,
3966 1.2189054e-002,
3967 9.2356783e-003,
3968 1.9097401e-002,
3969 5.8341964e-002,
3970 -5.8640330e-002,
3971 -4.0346416e-002,
3972 -2.0148478e-002,
3973 -7.3979491e-002,
3974 -7.6507173e-003,
3975 -2.6376789e-002,
3976 9.3631448e-003,
3977 5.7075337e-004,
3978 -1.7237147e-002,
3979 -1.4088176e-002,
3980 -6.5722025e-002,
3981 1.7734913e-001,
3982 3.9188355e-002,
3983 -5.3138441e-003,
3984 6.6012838e-004,
3985 -3.7635320e-002,
3986 8.6939560e-002,
3987 2.5457618e-002,
3988 -5.3643902e-003,
3989 -3.5072285e-002,
3990 1.7654459e-002,
3991 -1.7002417e-002,
3992 -1.1934297e-002,
3993 1.0909989e-001,
3994 -4.5341914e-002,
3995 2.9654212e-002,
3996 -7.3979691e-002,
3997 8.1855730e-002,
3998 -4.1111527e-002,
3999 2.8178913e-002,
4000 3.0990023e-002,
4001 -3.8439631e-002,
4002 4.6092851e-002,
4003 2.0499136e-002,
4004 -4.0078674e-002,
4005 -7.5298075e-002,
4006 8.6249420e-002,
4007 2.0413103e-002,
4008 1.4283415e-002,
4009 3.3364666e-003,
4010 4.5625551e-002,
4011 2.8593452e-002,
4012 1.0294208e-001,
4013 4.6237012e-002,
4014 2.3737104e-002,
4015 1.4850043e-003,
4016 4.5627026e-002,
4017 -3.1300170e-002,
4018 2.7232389e-002,
4019 -2.5581725e-002,
4020 -4.2382451e-002,
4021 -4.1639602e-002,
4022 -1.2685580e-002,
4023 -6.8348575e-002,
4024 -3.5070023e-002,
4025 -1.9126421e-002,
4026 -5.1202221e-002,
4027 -2.1697346e-002,
4028 6.3981805e-003,
4029 6.1889782e-002,
4030 -9.5515388e-002,
4031 -3.5099019e-002,
4032 -7.5991979e-003,
4033 2.6608290e-002,
4034 -6.5628332e-003,
4035 4.0519304e-002,
4036 1.8759115e-004,
4037 -8.2745501e-002,
4038 4.8080126e-002,
4039 -9.4334121e-002,
4040 -1.7519517e-002,
4041 8.4578794e-003,
4042 -1.0547960e-002,
4043 -2.9348950e-003,
4044 2.2443020e-002,
4045 -8.3815521e-003,
4046 3.4363193e-002,
4047 3.5010892e-002,
4048 -2.7129950e-002,
4049 -1.8407294e-003,
4050 -2.7794904e-002,
4051 7.5761568e-002,
4052 -5.1005395e-002,
4053 2.2206192e-002,
4054 5.5815959e-003,
4055 1.3179272e-002,
4056 1.3743604e-002,
4057 8.4180570e-002,
4058 -4.5318175e-002,
4059 -4.0369759e-002,
4060 -5.5643911e-002,
4061 1.1111604e-002,
4062 4.9980927e-002,
4063 -5.3328516e-002,
4064 -2.5289654e-002,
4065 -5.3455028e-002,
4066 -4.5115993e-003,
4067 1.2552924e-002,
4068 2.4187614e-002,
4069 -6.5216647e-002,
4070 -6.7184717e-002,
4071 -3.4635282e-002,
4072 2.6037151e-002,
4073 -1.2958051e-002,
4074 -6.4529955e-002,
4075 -4.7775406e-002,
4076 7.7791690e-002,
4077 -4.1840856e-002,
4078 3.5508733e-002,
4079 3.6208672e-002,
4080 2.8883867e-002,
4081 -2.2614722e-002,
4082 -6.2467477e-002,
4083 2.1201398e-002,
4084 -6.4938220e-002,
4085 -2.5718030e-002,
4086 1.0132503e-001,
4087 -1.0989944e-001,
4088 1.7386332e-002,
4089 -1.9848054e-002,
4090 4.6500211e-002,
4091 8.7080916e-002,
4092 6.1051787e-002,
4093 -6.9658176e-002,
4094 1.8448919e-003,
4095 -6.3897477e-002,
4096 9.5246967e-003,
4097 -1.7099063e-002,
4098 8.6762837e-002,
4099 -5.1071138e-002,
4100 -4.1995939e-002,
4101 -1.5112140e-002,
4102 9.4802477e-002,
4103 -3.6319825e-003,
4104 5.6475075e-002,
4105 -5.2649820e-003,
4106 5.5494589e-002,
4107 -3.6195527e-002,
4108 3.0102603e-002,
4109 9.6119308e-002,
4110 2.9804096e-002,
4111 -8.3871467e-002,
4112 -4.6819532e-002,
4113 -6.6699175e-002,
4114 -7.8740356e-002,
4115 2.3100681e-002,
4116 4.0518590e-002,
4117 -5.5249251e-002,
4118 3.4210609e-002,
4119 6.3808433e-003,
4120 2.9561241e-002,
4121 -7.9993851e-002,
4122 -8.6030708e-003,
4123 4.9599184e-002,
4124 -5.3356684e-002,
4125 -4.3441101e-002,
4126 4.6557960e-003,
4127 -5.8349112e-002,
4128 7.0442125e-002,
4129 3.3583231e-002,
4130 3.5326691e-002,
4131 -1.4284013e-003,
4132 3.7155912e-003,
4133 -6.1957730e-002,
4134 -2.5175104e-002,
4135 1.0316170e-004,
4136 1.3785501e-002,
4137 -3.4528343e-002,
4138 9.4718664e-002,
4139 -8.5929124e-003,
4140 6.2353769e-003,
4141 -1.9235982e-002,
4142 -5.0684859e-002,
4143 -9.0890509e-002,
4144 2.9614723e-002,
4145 -5.8904724e-002,
4146 -5.9605704e-002,
4147 1.7332188e-002,
4148 -6.2983369e-004,
4149 7.6762655e-002,
4150 -1.5739418e-001,
4151 4.7428004e-002,
4152 -7.4437002e-003,
4153 3.2753497e-002,
4154 -6.4494291e-003,
4155 -1.0132357e-001,
4156 3.1793509e-002,
4157 -1.9653108e-002,
4158 -1.3986054e-002,
4159 -1.0375110e-001,
4160 5.9341902e-002,
4161 7.4338421e-002,
4162 -7.4336814e-002,
4163 -8.8261702e-004,
4164 8.4239417e-002,
4165 3.6771318e-002,
4166 4.6614615e-003,
4167 -1.0885608e-001,
4168 4.0218429e-002,
4169 -7.3328551e-002,
4170 3.4660924e-002,
4171 -2.2304889e-002,
4172 9.1183611e-003,
4173 -3.1063866e-002,
4174 3.7029187e-002,
4175 -8.5599164e-003,
4176 -3.1378391e-003,
4177 -3.4177850e-002,
4178 -3.6311985e-002,
4179 5.4941612e-002,
4180 -2.5856244e-002,
4181 9.8859541e-002,
4182 -4.1708361e-002,
4183 4.4676996e-002,
4184 1.0012678e-001,
4185 1.2298856e-002,
4186 3.9574107e-002,
4187 -5.4805478e-003,
4188 -2.5335550e-002,
4189 2.0495470e-002,
4190 -2.8777276e-003,
4191 -1.2280951e-002,
4192 -3.6926171e-002,
4193 -6.4637997e-002,
4194 3.1275904e-002,
4195 -4.0724158e-002,
4196 8.2545982e-002,
4197 1.7297459e-002,
4198 1.7103606e-003,
4199 -3.6063372e-002,
4200 -1.9411586e-002,
4201 2.5489285e-002,
4202 5.3618799e-002,
4203 -1.5847040e-003,
4204 -8.2607767e-002,
4205 6.4750926e-002,
4206 3.4155392e-002,
4207 1.2202950e-002,
4208 -6.3849575e-002,
4209 -4.2629288e-002,
4210 -9.3420039e-002,
4211 1.8591964e-002,
4212 -6.2494687e-002,
4213 2.7073439e-002,
4214 -1.6706104e-002,
4215 8.5702929e-004,
4216 5.5338380e-002,
4217 -1.1863343e-002,
4218 2.4120033e-002,
4219 -1.9673309e-002,
4220 -9.0836747e-003,
4221 -8.4090025e-002,
4222 -1.6605994e-002,
4223 1.2509049e-002,
4224 2.9654581e-003,
4225 3.5414725e-002,
4226 -9.1520329e-002,
4227 5.3251481e-004,
4228 -3.9064127e-002,
4229 4.3848196e-002,
4230 -6.5906592e-002,
4231 -6.2694114e-002,
4232 -7.5430627e-002,
4233 -6.9288028e-002,
4234 -7.3831218e-002,
4235 -2.2849271e-003,
4236 4.1968983e-002,
4237 9.1516100e-003,
4238 6.3003994e-002,
4239 4.0825527e-003,
4240 -1.1602298e-002,
4241 3.4062508e-002,
4242 -3.6760665e-002,
4243 -6.6458351e-003,
4244 4.5328593e-002,
4245 1.5333803e-002,
4246 3.1081863e-002,
4247 1.0997856e-003,
4248 4.0172982e-002,
4249 -5.1202051e-002,
4250 3.0204527e-002,
4251 -9.1683008e-002,
4252 6.6885251e-002,
4253 -1.4713293e-002,
4254 -1.8783233e-002,
4255 -2.6727404e-002,
4256 -4.0587117e-002,
4257 1.7352452e-002,
4258 2.4068866e-002,
4259 9.3813608e-002,
4260 1.4593201e-001,
4261 -2.6243684e-002,
4262 4.2410590e-003,
4263 5.7049362e-002,
4264 -1.0495092e-002,
4265 5.5352776e-002,
4266 -1.4966413e-002,
4267 5.8887924e-002,
4268 -2.9432846e-002,
4269 1.5016450e-002,
4270 1.8771912e-002,
4271 2.9731363e-002,
4272 -8.9727906e-002,
4273 -2.8879171e-002,
4274 -2.4530626e-002,
4275 -2.1755227e-002,
4276 2.6372269e-002,
4277 1.6464203e-002,
4278 -2.9595373e-003,
4279 -2.8033224e-002,
4280 -3.8960164e-002,
4281 -1.4500836e-002,
4282 1.2441672e-004,
4283 6.9888338e-002,
4284 -1.3326151e-002,
4285 -4.4177213e-002,
4286 1.0679639e-001,
4287 -7.7540624e-002,
4288 7.3527032e-002,
4289 7.1684818e-002,
4290 2.4447003e-002,
4291 1.3247555e-002,
4292 2.5484911e-002,
4293 -2.0333037e-002,
4294 1.0820256e-001,
4295 -1.5291962e-001,
4296 4.0764107e-002,
4297 -5.3576752e-002,
4298 -3.3726558e-002,
4299 5.9985203e-002,
4300 1.4311757e-002,
4301 1.0872979e-002,
4302 4.8154459e-002,
4303 -9.8724947e-002,
4304 3.5433564e-002,
4305 -3.0296223e-002,
4306 -4.9776503e-002,
4307 6.4312955e-002,
4308 -3.8636806e-002,
4309 4.1001924e-002,
4310 2.8324136e-002,
4311 -2.4954944e-002,
4312 3.0731417e-002,
4313 -4.0748527e-002,
4314 1.0071007e-001,
4315 -4.2444577e-002,
4316 7.4060614e-002,
4317 7.0443088e-002,
4318 -8.5281317e-002,
4319 2.2408837e-002,
4320 -3.0453603e-002,
4321 5.3244534e-002,
4322 -2.7097865e-002,
4323 9.3509025e-002,
4324 -4.0481022e-002,
4325 3.0984921e-002,
4326 6.2120102e-002,
4327 2.5263636e-002,
4328 4.7524005e-002,
4329 -8.3461434e-002,
4330 -4.0450596e-002,
4331 2.4301374e-002,
4332 2.4082281e-002,
4333 2.7165952e-002,
4334 2.5739840e-002,
4335 -4.4498403e-002,
4336 -9.3779267e-002,
4337 1.3230632e-002,
4338 5.6356340e-002,
4339 -3.1721297e-002,
4340 -1.1371059e-001,
4341 5.1330793e-002,
4342 3.9800143e-002,
4343 4.4602902e-002,
4344 4.0186966e-002,
4345 -3.3956201e-002,
4346 -3.4378181e-002,
4347 3.0222123e-002,
4348 1.3392410e-002,
4349 -1.1877032e-001,
4350 -6.1513207e-002,
4351 5.1308971e-002,
4352 -3.4406254e-004,
4353 -5.6836546e-002,
4354 3.1147677e-002,
4355 1.2984031e-001,
4356 6.9255265e-002,
4357 -7.3899471e-002,
4358 4.4113150e-002,
4359 4.1613437e-002,
4360 -8.3330499e-002,
4361 -6.7769626e-002,
4362 9.9577638e-003,
4363 8.5011488e-002,
4364 3.1777824e-002,
4365 -3.0275122e-002,
4366 -1.9721785e-003,
4367 -2.8670666e-002,
4368 -5.1951849e-002,
4369 2.6123845e-002,
4370 -4.6954628e-002,
4371 3.9325561e-002,
4372 -1.4539624e-001,
4373 -4.4989415e-002,
4374 1.2490030e-002,
4375 9.8158554e-002,
4376 -8.8549642e-002,
4377 7.0425741e-002,
4378 1.6289354e-002,
4379 7.6642414e-002,
4380 8.2615082e-002,
4381 1.5188920e-002,
4382 1.0717190e-001,
4383 7.8459410e-003,
4384 -9.8939081e-002,
4385 5.4496988e-002,
4386 -1.9598305e-002,
4387 -4.8340131e-002,
4388 9.1012052e-002,
4389 4.5089162e-002,
4390 2.7001089e-002,
4391 3.9597820e-002,
4392 -2.9912957e-002,
4393 -4.5233127e-002,
4394 -2.6888627e-002,
4395 8.2716012e-002,
4396 4.1938511e-002,
4397 -1.2290728e-002,
4398 -9.1141489e-002,
4399 -9.3716385e-002,
4400 5.0846593e-002,
4401 -6.9747424e-002,
4402 1.5936647e-002,
4403 9.0841003e-003,
4404 -7.9217963e-002,
4405 4.2523607e-002,
4406 -3.4283790e-002,
4407 6.2931211e-002,
4408 1.9054212e-002,
4409 1.0431108e-002,
4410 -1.7512053e-002,
4411 1.5995877e-002,
4412 -6.9853083e-002,
4413 -3.6133865e-002,
4414 5.1883029e-002,
4415 -5.4941971e-002,
4416 2.5099530e-002,
4417 2.1949930e-002,
4418 -7.2924143e-002,
4419 -1.2241689e-002,
4420 -2.5239538e-003,
4421 1.0240874e-002,
4422 -3.5188489e-002,
4423 -1.4637794e-002,
4424 4.2573102e-002,
4425 -4.6954972e-002,
4426 4.9757134e-002,
4427 8.9000907e-002,
4428 -5.7343223e-003,
4429 -9.4659733e-002,
4430 2.2731848e-002,
4431 -6.3526985e-002,
4432 -6.2729748e-002,
4433 -8.5124042e-002,
4434 -2.2742192e-002,
4435 4.9060274e-003,
4436 5.9105851e-002,
4437 6.6593845e-002,
4438 -2.0401971e-002,
4439 -3.4052538e-002,
4440 1.0187912e-001,
4441 -3.9129772e-002,
4442 1.6727491e-002,
4443 7.9581367e-002,
4444 2.3490622e-002,
4445 -8.5225499e-002,
4446 4.5609113e-002,
4447 2.5532693e-002,
4448 -1.3949777e-002,
4449 1.1939908e-001,
4450 3.1136484e-002,
4451 2.1065018e-002,
4452 -7.3998053e-002,
4453 -3.3433899e-002,
4454 6.4825970e-002,
4455 -6.6483460e-003,
4456 2.1878777e-002,
4457 -5.5590218e-002,
4458 6.2132974e-002,
4459 6.0099401e-002,
4460 2.6750906e-002,
4461 -3.2033687e-002,
4462 4.8448643e-002,
4463 -3.8771221e-003,
4464 -4.8090282e-002,
4465 -2.9473176e-002,
4466 -1.6510646e-002,
4467 5.6059374e-003,
4468 -2.8498771e-002,
4469 1.4581678e-001,
4470 7.2382639e-003,
4471 6.9060065e-002,
4472 3.1254099e-002,
4473 1.1295554e-001,
4474 -2.0791262e-002,
4475 2.6272472e-002,
4476 2.3832128e-004,
4477 1.7675185e-004,
4478 2.2985763e-002,
4479 5.8978432e-003,
4480 4.4429730e-003,
4481 7.5305836e-002,
4482 2.7519294e-002,
4483 2.6304737e-003,
4484 -7.5022497e-003,
4485 9.7612623e-002,
4486 -1.1392227e-003,
4487 6.3717011e-002,
4488 4.2435569e-002,
4489 -6.8014182e-002,
4490 7.4854037e-002,
4491 3.2524349e-002,
4492 7.0521866e-002,
4493 2.0297711e-002,
4494 -2.7255480e-002,
4495 -1.3079920e-002,
4496 -1.1988356e-001,
4497 4.2564644e-002,
4498 8.9756674e-002,
4499 1.7220549e-002,
4500 -4.4937423e-002,
4501 -2.9070759e-002,
4502 -4.4538021e-002,
4503 -7.8632839e-002,
4504 -2.8995185e-002,
4505 -1.4328207e-002,
4506 2.6443524e-002,
4507 8.9669124e-002,
4508 1.7624887e-003,
4509 3.2927633e-002,
4510 -3.1535117e-002,
4511 -6.6599096e-003,
4512 1.0186317e-001,
4513 8.9875545e-003,
4514 2.8378610e-002,
4515 -5.5136504e-002,
4516 3.3829370e-002,
4517 7.1374246e-003,
4518 -1.4538378e-002,
4519 3.9237476e-002,
4520 6.8685661e-002,
4521 -3.3057531e-003,
4522 1.1538617e-002,
4523 8.8143388e-003,
4524 -1.9900457e-002,
4525 2.0600418e-002,
4526 3.0249751e-002,
4527 -7.3517395e-003,
4528 6.4648004e-002,
4529 -8.6600526e-004,
4530 8.3511299e-003,
4531 -5.4627039e-002,
4532 -6.4363505e-003,
4533 1.6893141e-002,
4534 5.5401782e-003,
4535 -2.4244983e-003,
4536 -2.0950127e-002,
4537 -2.2956516e-002,
4538 7.8535473e-003,
4539 2.4067483e-002,
4540 6.1367370e-002,
4541 -3.3267227e-002,
4542 -1.7259358e-002,
4543 -7.3612541e-003,
4544 -1.5577290e-002,
4545 8.5933756e-002,
4546 5.0314067e-003,
4547 -5.7691721e-002,
4548 -3.1185546e-002,
4549 -1.0012818e-002,
4550 -9.3068008e-003,
4551 -1.2733027e-001,
4552 -2.4660461e-002,
4553 -6.9689614e-002,
4554 6.7705187e-002,
4555 -9.0527945e-002,
4556 -8.9240761e-003,
4557 -3.6546741e-002,
4558 -7.8518923e-003,
4559 6.0277518e-002,
4560 8.8143610e-002,
4561 -3.6670503e-002,
4562 5.9594768e-002,
4563 -6.2854695e-002,
4564 8.4561367e-003,
4565 4.2531503e-002,
4566 1.2490411e-001,
4567 -1.2983679e-002,
4568 4.8837441e-002,
4569 2.8397759e-002,
4570 4.9265357e-004,
4571 -5.0014029e-002,
4572 -6.4438003e-002,
4573 6.3709335e-002,
4574 -8.3485243e-002,
4575 -1.3662989e-002,
4576 -1.1010182e-002,
4577 -4.1630589e-004,
4578 3.7231066e-002,
4579 5.8354336e-002,
4580 1.4802151e-002,
4581 -9.2736005e-003,
4582 7.0150240e-002,
4583 -7.5624119e-002,
4584 -1.8709434e-002,
4585 8.1817931e-002,
4586 1.0532906e-001,
4587 -6.6715765e-002,
4588 1.1083842e-002,
4589 -7.4493893e-002,
4590 -9.9142748e-003,
4591 6.2718554e-002,
4592 2.7079763e-002,
4593 -2.5876824e-002,
4594 -4.8123789e-002,
4595 6.1857353e-002,
4596 -4.2675136e-002,
4597 -6.2163117e-002,
4598 -7.4268325e-002,
4599 -2.9318352e-002,
4600 -3.3154279e-002,
4601 4.8684897e-002,
4602 -2.4063594e-002,
4603 -8.6147192e-002,
4604 -7.1972623e-003,
4605 -4.4253121e-002,
4606 -2.1162236e-003,
4607 -3.5637316e-002,
4608 -5.0298912e-003,
4609 1.9549988e-002,
4610 -3.1928938e-002,
4611 -4.5581285e-002,
4612 4.7829407e-002,
4613 8.7149645e-002,
4614 4.0640515e-002,
4615 1.4297447e-002,
4616 9.8222629e-003,
4617 3.2853388e-002,
4618 6.8740447e-002,
4619 -1.2177132e-001,
4620 9.4625764e-002,
4621 -1.5776485e-002,
4622 -3.2495760e-002,
4623 3.0796063e-002,
4624 -1.5368625e-002,
4625 -7.9526144e-002,
4626 -6.2453602e-002,
4627 5.9616092e-002,
4628 -6.4260784e-002,
4629 1.5966646e-002,
4630 3.1495482e-002,
4631 6.5589632e-002,
4632 -3.4614182e-002,
4633 -6.9190746e-002,
4634 -2.0874294e-002,
4635 1.3630214e-002,
4636 5.3339825e-002,
4637 1.6147000e-002,
4638 4.2668360e-002,
4639 -2.5662017e-002,
4640 4.5348429e-003,
4641 6.1345954e-002,
4642 4.1541021e-002,
4643 -4.9887559e-002,
4644 -5.8465581e-002,
4645 -2.1207204e-002,
4646 7.9091417e-003,
4647 -1.2334773e-002,
4648 -1.0617181e-001,
4649 8.9782313e-002,
4650 -6.8274917e-002,
4651 2.1132464e-002,
4652 5.7348207e-003,
4653 -9.2561293e-003,
4654 -3.7038110e-002,
4655 -2.8239427e-002,
4656 1.8178841e-002,
4657 -3.9897232e-002,
4658 1.0250394e-002,
4659 6.3382126e-002,
4660 3.1483520e-002,
4661 -1.4611403e-002,
4662 -4.1066531e-003,
4663 5.7642552e-002,
4664 1.2244865e-002,
4665 3.7434406e-002,
4666 2.2822222e-002,
4667 9.2902509e-002,
4668 1.1325867e-002,
4669 -6.2025695e-002,
4670 1.5489679e-002,
4671 -1.6179136e-002,
4672 -1.7726855e-003,
4673 8.7415263e-002,
4674 2.9780528e-002,
4675 -6.5055050e-002,
4676 -1.7262184e-002,
4677 -1.2062737e-002,
4678 4.1904361e-002,
4679 -3.4331618e-002,
4680 1.2164792e-001,
4681 4.9603771e-002,
4682 -1.3061748e-002,
4683 1.1007232e-002,
4684 -1.4216546e-002,
4685 -3.5763228e-002,
4686 1.2025510e-002,
4687 8.2989866e-002,
4688 2.0160053e-002,
4689 -1.6822685e-002,
4690 7.3528826e-003,
4691 2.0923780e-002,
4692 5.2711615e-003,
4693 -2.5691601e-002,
4694 4.5395884e-002,
4695 -1.5802909e-003,
4696 6.8782769e-002,
4697 1.1122473e-001,
4698 1.0025602e-001,
4699 1.3910254e-001,
4700 -8.5937461e-002,
4701 3.2274784e-002,
4702 4.8447219e-002,
4703 -7.6279744e-002,
4704 -9.4932243e-002,
4705 -4.6596008e-002,
4706 6.9567452e-002,
4707 -2.0821944e-002,
4708 2.8782945e-002,
4709 -1.8673196e-002,
4710 -1.0249668e-003,
4711 3.0785039e-003,
4712 7.5883489e-002,
4713 -6.3193813e-003,
4714 7.7764074e-002,
4715 -4.3608077e-002,
4716 -1.3123466e-002,
4717 3.6824621e-003,
4718 -5.9201109e-002,
4719 -2.3113816e-002,
4720 -8.8488271e-002,
4721 -1.1032349e-002,
4722 -2.3364616e-003,
4723 -6.5601368e-002,
4724 1.4329878e-001,
4725 9.5131857e-002,
4726 4.2865722e-002,
4727 -9.6979502e-002,
4728 -3.5638863e-002,
4729 9.0205848e-002,
4730 1.9877782e-002,
4731 -1.2497646e-001,
4732 2.5802125e-002,
4733 4.6840610e-002,
4734 -4.7117859e-002,
4735 -1.0958747e-001,
4736 -4.6687284e-002,
4737 3.3044810e-003,
4738 -4.3352639e-002,
4739 5.5404689e-002,
4740 -1.4901969e-001,
4741 -6.5836290e-003,
4742 -8.3908961e-002,
4743 -8.4786953e-003,
4744 2.6778741e-002,
4745 -7.1364019e-002,
4746 2.9762397e-002,
4747 3.8378977e-002,
4748 -1.3678167e-002,
4749 1.0245114e-002,
4750 -6.8802397e-002,
4751 -7.9396342e-002,
4752 8.9092342e-002,
4753 -2.5071896e-002,
4754 1.6416317e-001,
4755 -3.3416141e-002,
4756 -8.8098549e-002,
4757 -2.8516999e-002,
4758 -2.8171336e-002,
4759 1.4735227e-002,
4760 2.1490528e-002,
4761 1.0996266e-002,
4762 -7.9010073e-002,
4763 1.3973632e-002,
4764 8.5196514e-002,
4765 -3.4922417e-002,
4766 3.4433947e-002,
4767 4.5850060e-002,
4768 -6.6284133e-002,
4769 -1.0572099e-001,
4770 -6.6431349e-002,
4771 6.0325770e-002,
4772 -9.2479536e-003,
4773 -2.2892434e-002,
4774 -3.9861268e-002,
4775 7.7138209e-002,
4776 1.1492915e-002,
4777 3.1465738e-002,
4778 -1.2138307e-002,
4779 4.7630033e-002,
4780 -9.7311603e-003,
4781 1.3770049e-002,
4782 -7.3660639e-003,
4783 7.4335649e-002,
4784 -3.6628135e-003,
4785 1.2752549e-002,
4786 1.3838186e-002,
4787 4.2180077e-004,
4788 -5.4375913e-002,
4789 2.1917738e-002,
4790 -1.2614454e-002,
4791 -2.3342227e-002,
4792 -6.4971690e-002,
4793 1.6110329e-002,
4794 1.4737048e-002,
4795 3.0388287e-002,
4796 -1.6824888e-002,
4797 1.7295248e-002,
4798 1.0812445e-002,
4799 -5.5425021e-002,
4800 -4.9277740e-002,
4801 5.0707632e-002,
4802 4.1922806e-002,
4803 1.8455962e-002,
4804 5.0365924e-002,
4805 4.4298398e-002,
4806 7.6431843e-003,
4807 5.9989537e-002,
4808 -7.6908515e-002,
4809 2.8530229e-002,
4810 9.5653590e-002,
4811 -7.2017798e-002,
4812 -8.0655593e-003,
4813 1.0083818e-001,
4814 4.9232556e-002,
4815 -6.6242009e-002,
4816 2.9556295e-003,
4817 -3.5960545e-002,
4818 1.1419955e-002,
4819 6.6825880e-003,
4820 2.9477422e-002,
4821 -2.9472636e-002,
4822 5.5236681e-002,
4823 2.8874435e-002,
4824 -2.2350145e-002,
4825 -1.4664332e-002,
4826 -6.8185763e-002,
4827 -2.0916584e-003,
4828 -6.2584599e-003,
4829 5.9273963e-003,
4830 9.7345621e-002,
4831 1.7069987e-002,
4832 -3.5800212e-002,
4833 3.8397984e-002,
4834 -4.6760839e-002,
4835 -5.0292748e-002,
4836 -2.1914980e-002,
4837 -1.8316586e-003,
4838 -5.2956111e-002,
4839 -4.4811672e-003,
4840 6.3511854e-002,
4841 -5.7468947e-002,
4842 3.3773578e-003,
4843 -6.2827625e-002,
4844 -1.0672637e-001,
4845 -2.3481169e-002,
4846 -4.9309562e-002,
4847 -9.6720496e-003,
4848 5.8540389e-002,
4849 -1.4927692e-002,
4850 4.5935378e-002,
4851 -1.5630681e-003,
4852 -1.8325545e-002,
4853 3.2884463e-002,
4854 2.3472286e-002,
4855 1.9480110e-002,
4856 -1.5164953e-002,
4857 5.0952861e-004,
4858 3.6924652e-002,
4859 3.9980199e-003,
4860 2.7122068e-002,
4861 4.0586323e-002,
4862 -6.8458269e-004,
4863 2.4214833e-002,
4864 -2.6547884e-002,
4865 -2.4783823e-002,
4866 8.8816623e-002,
4867 5.5882019e-002,
4868 5.3618064e-003,
4869 -1.1671543e-001,
4870 -8.2213149e-002,
4871 -9.6951820e-002,
4872 7.3380548e-002,
4873 -1.2640056e-003,
4874 4.1876563e-002,
4875 2.5405425e-002,
4876 2.4599929e-002,
4877 1.4178532e-002,
4878 5.5594418e-003,
4879 4.2950164e-002,
4880 1.8014601e-003,
4881 -1.2215360e-001,
4882 1.0493101e-001,
4883 3.1735201e-002,
4884 5.5741286e-003,
4885 -3.2479076e-002,
4886 2.6681545e-002,
4887 2.8019414e-002,
4888 -8.0179790e-003,
4889 3.1489206e-002,
4890 4.3033256e-003,
4891 -3.7630185e-002,
4892 5.3039128e-002,
4893 5.1506634e-002,
4894 -1.7820552e-002,
4895 -2.4621551e-002,
4896 -5.5322066e-002,
4897 2.5011123e-002,
4898 -4.7866728e-002,
4899 -1.0796552e-002,
4900 -3.3392282e-002,
4901 -4.7783524e-002,
4902 -1.8094968e-002,
4903 -7.2520784e-002,
4904 -6.5389567e-002,
4905 3.9464487e-002,
4906 -9.8809443e-003,
4907 3.1120895e-002,
4908 -5.4329781e-002,
4909 1.6954674e-002,
4910 -4.8954224e-002,
4911 7.3972200e-002,
4912 4.7640882e-002,
4913 3.0356780e-002,
4914 9.5741578e-003,
4915 -4.1590063e-002,
4916 1.1287435e-001,
4917 -8.6416889e-003,
4918 -2.2674367e-002,
4919 2.1388361e-003,
4920 5.5542441e-002,
4921 1.0045614e-002,
4922 -8.7522721e-002,
4923 8.7719983e-003,
4924 6.7355731e-002,
4925 -1.6159743e-002,
4926 8.7223484e-003,
4927 6.0092014e-002,
4928 -9.4184958e-002,
4929 -3.6268920e-002,
4930 -2.1332232e-002,
4931 -3.1682036e-002,
4932 2.8664908e-002,
4933 2.6541157e-002,
4934 -1.0689359e-001,
4935 -7.0862918e-002,
4936 -1.1433268e-001,
4937 3.4863935e-002,
4938 1.0709581e-002,
4939 -5.5513033e-002,
4940 -1.5617145e-002,
4941 1.9399041e-003,
4942 6.6680970e-002,
4943 -3.5719944e-002,
4944 -5.5335504e-002,
4945 -9.3481167e-002,
4946 2.3589372e-002,
4947 1.2307760e-002,
4948 -4.1853305e-002,
4949 3.2086368e-002,
4950 1.3207910e-002,
4951 -1.2902915e-002,
4952 4.0576229e-002,
4953 -3.1174299e-002,
4954 -4.7359539e-002,
4955 3.2639664e-002,
4956 6.8807350e-002,
4957 3.0052612e-002,
4958 -1.6360841e-002,
4959 7.3692525e-002,
4960 2.3214010e-002,
4961 -1.9279486e-003,
4962 -2.9304762e-002,
4963 1.4092775e-002,
4964 -3.8475139e-002,
4965 4.0205235e-002,
4966 3.5637448e-002,
4967 3.1815236e-002,
4968 5.4193437e-002,
4969 2.7101101e-002,
4970 -7.8492340e-002,
4971 -1.3053183e-002,
4972 9.8943970e-002,
4973 3.2605663e-002,
4974 -5.3326325e-002,
4975 4.7045271e-002,
4976 1.9171127e-002,
4977 -7.0639869e-002,
4978 -2.6942346e-002,
4979 2.1897131e-002,
4980 4.4342108e-002,
4981 2.5419609e-002,
4982 6.5525042e-002,
4983 -6.2924979e-002,
4984 4.2919074e-002,
4985 5.7909339e-002,
4986 -2.0016289e-002,
4987 -7.1844831e-004,
4988 3.3287795e-003,
4989 5.2391582e-002,
4990 5.1351648e-002,
4991 6.9345017e-002,
4992 1.6715079e-002,
4993 1.0245380e-001,
4994 6.5560454e-003,
4995 -4.2978289e-002,
4996 5.1857486e-002,
4997 1.6375558e-002,
4998 -1.1231560e-001,
4999 1.8452057e-002,
5000 2.7196151e-002,
5001 -4.7948818e-002,
5002 3.8838999e-002,
5003 -8.1296721e-002,
5004 -4.4213439e-002,
5005 3.3789367e-002,
5006 -8.9903386e-002,
5007 -4.8309819e-002,
5008 3.0350368e-002,
5009 9.3462798e-003,
5010 -4.3576313e-002,
5011 5.0364033e-002,
5012 -3.3705706e-002,
5013 6.9992170e-002,
5014 9.4421577e-002,
5015 -3.7859282e-002,
5016 -2.4699603e-002,
5017 5.0385013e-002,
5018 -5.4216273e-002,
5019 6.9692784e-002,
5020 1.0150382e-001,
5021 1.7548633e-002,
5022 9.8962282e-003,
5023 -5.6862743e-002,
5024 4.1445815e-002,
5025 1.9635439e-002,
5026 -3.1828877e-002,
5027 -7.5389343e-003,
5028 -2.2662898e-002,
5029 -9.3225720e-003,
5030 3.3794402e-002,
5031 -1.5022139e-002,
5032 -8.3952470e-002,
5033 -4.4638734e-003,
5034 5.0977217e-002,
5035 -5.6868826e-002,
5036 8.2257315e-002,
5037 -3.3527792e-002,
5038 -3.8753182e-002,
5039 -8.9806282e-002,
5040 6.8640832e-004,
5041 7.2265978e-002,
5042 -1.2264922e-001,
5043 1.0964559e-002,
5044 -6.3412284e-002,
5045 1.2106129e-001,
5046 -8.5320894e-002,
5047 -3.7961427e-002,
5048 -4.1350954e-002,
5049 -6.7090729e-002,
5050 4.9718886e-002,
5051 -3.3874055e-002,
5052 -7.1699033e-002,
5053 2.5203129e-002,
5054 2.0350140e-002,
5055 6.4638571e-002,
5056 -7.2804864e-002,
5057 2.3308871e-002,
5058 1.5264191e-003,
5059 -1.1191223e-001,
5060 -6.0619938e-002,
5061 -2.2397074e-003,
5062 6.8646240e-002,
5063 -9.5147638e-003,
5064 -8.9258460e-003,
5065 -2.2587656e-002,
5066 -8.8042374e-003,
5067 2.7917130e-002,
5068 3.0703476e-002,
5069 4.0753823e-002,
5070 -1.9174676e-002,
5071 7.6285732e-002,
5072 5.5310628e-003,
5073 6.7972330e-002,
5074 1.6915582e-002,
5075 -3.3407461e-002,
5076 2.3263797e-002,
5077 3.1563985e-002,
5078 6.0315051e-004,
5079 -3.1286618e-002,
5080 -1.1639905e-002,
5081 -1.2659763e-002,
5082 1.2883340e-003,
5083 -5.0171053e-002,
5084 -4.9900923e-003,
5085 -1.0228083e-001,
5086 -4.8479815e-002,
5087 -2.9928321e-002,
5088 -5.5916163e-002,
5089 4.7735428e-002,
5090 -1.3294429e-003,
5091 -7.5136122e-003,
5092 5.4331339e-002,
5093 -4.2475157e-002,
5094 -3.2342585e-002,
5095 -2.1096262e-002,
5096 4.8946925e-002,
5097 -7.7232620e-002,
5098 4.6424245e-002,
5099 -7.1029625e-002,
5100 -8.3080699e-003,
5101 -1.8848230e-002,
5102 -3.3058342e-002,
5103 2.4301547e-002,
5104 -1.9950837e-002,
5105 -2.6746721e-002,
5106 -3.1244062e-002,
5107 4.9214132e-002,
5108 -4.3837753e-002,
5109 -2.6533780e-002,
5110 -3.2174063e-002,
5111 3.1234554e-002,
5112 1.8396020e-002,
5113 4.2139477e-003,
5114 -6.3624347e-002,
5115 3.8068496e-002,
5116 -7.5273414e-002,
5117 -5.4282683e-002,
5118 1.0378638e-001,
5119 -5.4062955e-002,
5120 1.0025793e-002,
5121 -6.6450371e-003,
5122 8.2632045e-002,
5123 -1.1994389e-001,
5124 3.1022007e-002,
5125 -3.1118158e-002,
5126 5.0953443e-002,
5127 -5.1605376e-002,
5128 -4.8568100e-002,
5129 -7.4390375e-003,
5130 -4.7877758e-002,
5131 -9.4953155e-003,
5132 -2.6931667e-003,
5133 2.3165347e-002,
5134 5.9754385e-003,
5135 2.5900617e-002,
5136 -1.5042605e-002,
5137 -1.4480424e-002,
5138 4.2074657e-002,
5139 8.9476498e-002,
5140 4.5100917e-002,
5141 -5.1593045e-002,
5142 6.0834274e-002,
5143 4.0989664e-002,
5144 -1.7405350e-002,
5145 5.9998834e-002,
5146 1.2416742e-002,
5147 1.8605073e-002,
5148 1.0892550e-001,
5149 -3.2491824e-002,
5150 -3.1135526e-002,
5151 -2.9815887e-002,
5152 2.0205791e-002,
5153 1.6566794e-002,
5154 7.0071566e-002,
5155 -4.9569656e-002,
5156 3.9921784e-002,
5157 -2.8730117e-002,
5158 -1.7587977e-002,
5159 7.1500463e-002,
5160 3.6872018e-002,
5161 -3.4586232e-002,
5162 -1.6970720e-002,
5163 3.4644172e-002,
5164 -2.0901296e-002,
5165 4.2141589e-002,
5166 -7.6319420e-002,
5167 4.5998962e-002,
5168 -7.3399778e-002,
5169 -8.1916522e-002,
5170 3.8464961e-002,
5171 -1.1521599e-002,
5172 7.2694972e-002,
5173 -3.9337982e-002,
5174 5.9084598e-002,
5175 -3.4257913e-002,
5176 -8.6242832e-002,
5177 -2.5477654e-002,
5178 1.5161827e-002,
5179 4.3686125e-003,
5180 -1.1656981e-002,
5181 -1.5563664e-002,
5182 6.2510087e-002,
5183 -1.0836642e-002,
5184 1.2432558e-001,
5185 -2.2959202e-002,
5186 1.3783634e-003,
5187 3.3269441e-002,
5188 3.8750648e-002,
5189 -1.3656516e-002,
5190 5.9833997e-002,
5191 1.4796841e-002,
5192 -2.2627766e-003,
5193 4.9145114e-002,
5194 -1.1354640e-001,
5195 1.3391314e-002,
5196 -1.3806188e-002,
5197 2.7218571e-002,
5198 -3.9102606e-002,
5199 1.0801438e-002,
5200 -3.4971279e-002,
5201 -2.3190242e-002,
5202 -1.6194699e-002,
5203 -1.9332419e-002,
5204 -2.7390066e-003,
5205 1.8022691e-002,
5206 -1.5832667e-002,
5207 -9.2546225e-003,
5208 -6.4699491e-002,
5209 4.7590650e-002,
5210 5.4590011e-002,
5211 -2.0868480e-002,
5212 4.8372708e-003,
5213 3.5635613e-002,
5214 4.9026328e-002,
5215 -2.8886176e-002,
5216 2.4904926e-002,
5217 4.6825265e-002,
5218 -4.1467334e-003,
5219 -7.4816934e-002,
5220 2.4155196e-002,
5221 -1.2145775e-002,
5222 -4.8433817e-002,
5223 -5.1333974e-002,
5224 -7.6611960e-004,
5225 -2.0288664e-003,
5226 4.4132138e-002,
5227 1.3884023e-002,
5228 3.3438764e-002,
5229 -1.7045598e-002,
5230 -1.3981286e-003,
5231 6.0450703e-002,
5232 1.6026951e-002,
5233 -1.0038212e-002,
5234 -5.9082814e-002,
5235 -6.8065244e-003,
5236 -2.0735019e-002,
5237 6.4134665e-002,
5238 8.5071176e-003,
5239 -2.2373060e-002,
5240 4.3619700e-002,
5241 1.5963047e-002,
5242 -3.0249871e-002,
5243 -8.3796187e-002,
5244 -3.4276448e-002,
5245 5.3600630e-002,
5246 -4.6111635e-002,
5247 3.2125595e-002,
5248 5.8851999e-002,
5249 -7.8040384e-002,
5250 5.2267851e-002,
5251 3.4435223e-002,
5252 2.1556971e-002,
5253 -1.7163880e-002,
5254 -5.0843277e-002,
5255 -3.2488185e-002,
5256 -1.7547962e-002,
5257 3.1629302e-003,
5258 1.1087340e-001,
5259 5.8821833e-002,
5260 2.7600291e-003,
5261 -1.8466769e-002,
5262 3.1019364e-002,
5263 6.9714994e-002,
5264 2.6197162e-002,
5265 -2.5002333e-002,
5266 2.1238793e-003,
5267 6.3553430e-002,
5268 -3.4198265e-002,
5269 4.8709571e-002,
5270 -7.2299086e-002,
5271 -4.3035088e-002,
5272 3.5760525e-002,
5273 5.3143565e-002,
5274 2.8080467e-002,
5275 7.4687831e-004,
5276 3.3589299e-002,
5277 -2.7857822e-002,
5278 9.3293970e-002,
5279 -3.1352513e-003,
5280 -1.1227005e-003,
5281 -4.5092687e-002,
5282 -2.5306886e-002,
5283 -1.0822730e-001,
5284 -6.5870362e-002,
5285 5.0646576e-003,
5286 -5.7436235e-002,
5287 3.2011690e-002,
5288 -3.5040739e-003,
5289 -3.9957599e-002,
5290 1.6341870e-002,
5291 -7.6498865e-003,
5292 -2.5256813e-002,
5293 2.8585914e-002,
5294 -6.4304885e-002,
5295 -7.0698223e-002,
5296 -9.2642094e-002,
5297 -5.6328267e-002,
5298 -8.0773935e-002,
5299 -6.5074477e-002,
5300 2.0294178e-003,
5301 -2.4072922e-002,
5302 4.2458044e-002,
5303 4.7875614e-003,
5304 -4.2143264e-002,
5305 -2.8324995e-002,
5306 -2.9328658e-002,
5307 -9.2678479e-002,
5308 4.5617708e-002,
5309 1.2685434e-002,
5310 -5.4340728e-002,
5311 4.2087780e-002,
5312 4.0016732e-002,
5313 -1.2299481e-001,
5314 1.0379559e-001,
5315 5.7020403e-002,
5316 -3.9544599e-002,
5317 -1.8766513e-002,
5318 3.2158071e-002,
5319 7.3924530e-002,
5320 -4.6618108e-003,
5321 -5.5299328e-002,
5322 4.4245720e-002,
5323 3.7174478e-003,
5324 3.4306804e-003,
5325 4.2213951e-002,
5326 -9.1086002e-002,
5327 1.5797797e-003,
5328 -1.0094297e-001,
5329 -3.1042592e-002,
5330 1.6312788e-002,
5331 -5.7643992e-002,
5332 8.5044833e-003,
5333 -5.8166289e-002,
5334 1.9822525e-002,
5335 -1.4404965e-001,
5336 -5.5582362e-002,
5337 -4.5001443e-003,
5338 -8.6256453e-003,
5339 -1.0195382e-002,
5340 -3.5860515e-002,
5341 -6.9432334e-002,
5342 -3.8266022e-002,
5343 -4.0918161e-002,
5344 -1.1863163e-002,
5345 5.0949718e-002,
5346 -8.0206291e-002,
5347 -2.6240511e-002,
5348 7.6676678e-002,
5349 -6.5416559e-002,
5350 -1.4318918e-002,
5351 -4.3958025e-002,
5352 -2.1978148e-002,
5353 -6.4422744e-002,
5354 -2.2733013e-002,
5355 1.2900773e-002,
5356 -1.7819685e-002,
5357 -4.7785428e-003,
5358 3.4686226e-002,
5359 6.4004707e-002,
5360 -5.3322786e-002,
5361 -1.8493916e-002,
5362 4.9290003e-002,
5363 -4.5065517e-002,
5364 -2.9327742e-002,
5365 2.3212884e-002,
5366 -4.8985889e-002,
5367 2.9604806e-003,
5368 -7.0253020e-003,
5369 -9.2397443e-002,
5370 -7.6453564e-002,
5371 -3.4155955e-002,
5372 -1.0082514e-001,
5373 -8.0072913e-002,
5374 5.9487693e-002,
5375 -3.2053752e-002,
5376 -3.4654709e-002,
5377 -4.2857910e-002,
5378 4.3434899e-002,
5379 -6.1610488e-002,
5380 2.3564532e-002,
5381 5.0395882e-002,
5382 -1.0869004e-002,
5383 2.7674042e-002,
5384 4.1961384e-004,
5385 1.1474642e-001,
5386 1.5501309e-002,
5387 5.3729017e-002,
5388 8.2294950e-002,
5389 3.6090309e-002,
5390 3.2405617e-002,
5391 7.8649811e-002,
5392 1.3050292e-002,
5393 -1.6718241e-002,
5394 -4.2514925e-002,
5395 2.0638931e-003,
5396 -1.0261822e-001,
5397 5.5517573e-002,
5398 -2.6256624e-003,
5399 7.3917084e-002,
5400 -3.2038338e-002,
5401 5.9286807e-003,
5402 -4.9553265e-002,
5403 4.0402131e-003,
5404 1.9006069e-002,
5405 1.5037719e-002,
5406 -3.8431930e-002,
5407 -3.4089576e-003,
5408 -2.8898708e-003,
5409 -5.1916447e-002,
5410 -9.3843168e-002,
5411 2.9937678e-002,
5412 -3.9290957e-002,
5413 4.4290160e-002,
5414 -4.2250820e-002,
5415 -1.6616660e-002,
5416 -1.0653179e-002,
5417 -3.4916960e-002,
5418 -3.1852948e-002,
5419 1.8960722e-002,
5420 6.0590194e-002,
5421 1.7919981e-002,
5422 -2.1735260e-002,
5423 2.5431032e-003,
5424 -2.3276711e-003,
5425 4.7679757e-003,
5426 2.6771182e-002,
5427 -8.0137596e-002,
5428 -4.9700338e-002,
5429 2.4445536e-002,
5430 -7.2537218e-002,
5431 -1.8968099e-002,
5432 6.6550477e-002,
5433 6.7579085e-002,
5434 -3.1351180e-002,
5435 1.6129275e-002,
5436 3.6101242e-002,
5437 1.1199196e-002,
5438 7.9145428e-003,
5439 4.0067468e-002,
5440 6.0585461e-003,
5441 -7.4588015e-003,
5442 2.1235782e-002,
5443 6.3041751e-003,
5444 -1.1634076e-003,
5445 2.2258425e-002,
5446 -3.4248029e-002,
5447 -4.5811428e-002,
5448 1.0578831e-002,
5449 -5.5482586e-002,
5450 -6.8507992e-002,
5451 -7.7083934e-002,
5452 -5.3913115e-002,
5453 5.9790071e-002,
5454 -2.0841051e-002,
5455 2.3080531e-002,
5456 1.1187349e-001,
5457 -7.1392621e-002,
5458 2.9668837e-003,
5459 -2.9860507e-002,
5460 4.6683202e-002,
5461 8.5830739e-002,
5462 -2.0897455e-002,
5463 3.2863177e-002,
5464 2.2323987e-002,
5465 4.8358711e-002,
5466 8.7562303e-003,
5467 1.4793712e-002,
5468 -2.5985375e-002,
5469 -4.6720770e-002,
5470 -5.9782514e-002,
5471 -4.2989314e-002,
5472 7.8223798e-002,
5473 1.1501209e-001,
5474 1.2024343e-001,
5475 -5.6786240e-002,
5476 -4.8421534e-002,
5477 -2.5415443e-002,
5478 2.4664879e-002,
5479 1.7783775e-002,
5480 2.0466227e-002,
5481 7.8206669e-002,
5482 -8.2391143e-002,
5483 -1.3995146e-002,
5484 -2.0960454e-002,
5485 -5.6618569e-002,
5486 -2.6705178e-002,
5487 -8.1531358e-002,
5488 6.4664818e-003,
5489 5.6946318e-002,
5490 5.0003662e-002,
5491 3.5673980e-002,
5492 8.0875426e-002,
5493 -4.4495078e-002,
5494 -2.6194380e-002,
5495 4.5188183e-002,
5496 -4.2455744e-002,
5497 5.7249340e-002,
5498 -4.6127242e-002,
5499 -5.4839710e-002,
5500 -5.0448334e-002,
5501 -2.2395030e-004,
5502 -6.2981968e-002,
5503 3.6554485e-002,
5504 4.5243127e-003,
5505 6.8154599e-003,
5506 1.6305659e-001,
5507 3.9595164e-003,
5508 -1.0792651e-002,
5509 -2.8054860e-002,
5510 -9.9706967e-002,
5511 2.3929942e-002,
5512 -3.5658959e-004,
5513 6.6546468e-002,
5514 7.6294884e-002,
5515 -4.0440534e-002,
5516 -8.1371512e-002,
5517 -7.7127876e-002,
5518 3.4857333e-002,
5519 4.3231191e-002,
5520 2.2144645e-002,
5521 -3.8698213e-002,
5522 -5.4129054e-002,
5523 -3.2626325e-002,
5524 -7.0222190e-002,
5525 -5.1754787e-002,
5526 -9.5744838e-002,
5527 -1.7610262e-003,
5528 8.7360648e-003,
5529 -4.6748263e-002,
5530 -4.4850953e-002,
5531 8.2298815e-002,
5532 1.0185814e-002,
5533 -3.0866560e-004,
5534 1.6675645e-002,
5535 -4.2935404e-002,
5536 -3.1656641e-002,
5537 -5.6516863e-002,
5538 -4.7656267e-004,
5539 1.0889961e-001,
5540 1.2029252e-002,
5541 -1.3472583e-002,
5542 3.6157205e-002,
5543 4.4803936e-002,
5544 1.5275167e-002,
5545 -4.7686528e-002,
5546 6.0330901e-002,
5547 1.3728328e-002,
5548 4.8689836e-002,
5549 -3.5294359e-002,
5550 -7.4547708e-002,
5551 3.0394600e-002,
5552 8.6384237e-002,
5553 -4.9979038e-002,
5554 1.3943821e-002,
5555 -8.2317359e-002,
5556 2.6078427e-002,
5557 -4.8139628e-002,
5558 -5.8720671e-002,
5559 5.3289578e-003,
5560 -2.4543964e-002,
5561 -3.1049552e-002,
5562 -6.8795054e-002,
5563 2.6130466e-002,
5564 6.4881211e-003,
5565 -1.7466698e-002,
5566 6.9418212e-002,
5567 9.6543814e-002,
5568 1.6716383e-002,
5569 1.0116932e-001,
5570 3.1515754e-002,
5571 -1.5792490e-001,
5572 -3.1915346e-002,
5573 -4.3203259e-002,
5574 -1.3039328e-002,
5575 1.0861618e-002,
5576 2.0098174e-002,
5577 -5.8931575e-002,
5578 4.5019833e-002,
5579 -4.4827929e-002,
5580 -8.5719969e-002,
5581 4.7105627e-002,
5582 8.1454794e-002,
5583 1.5516734e-002,
5584 -5.0548980e-002,
5585 5.9127415e-003,
5586 -7.5578193e-002,
5587 1.1628813e-001,
5588 4.7500758e-002,
5589 4.9223640e-002,
5590 2.2248040e-002,
5591 -1.7063173e-002,
5592 6.7174653e-002,
5593 -8.8027078e-003,
5594 -7.9122977e-002,
5595 -2.7534155e-002,
5596 1.8033777e-002,
5597 -6.3064595e-002,
5598 -3.2992531e-002,
5599 -1.3414397e-002,
5600 -3.7650237e-002,
5601 -5.4990281e-003,
5602 4.9549050e-002,
5603 -7.8256965e-002,
5604 -4.6347502e-002,
5605 -3.7844657e-002,
5606 -4.6727423e-002,
5607 5.1371291e-002,
5608 -3.1964828e-002,
5609 -1.5232444e-003,
5610 -6.8143489e-002,
5611 -5.5095855e-002,
5612 -1.0895044e-002,
5613 -2.5604041e-003,
5614 2.7027105e-002,
5615 -7.6982878e-003,
5616 -9.5337685e-002,
5617 -1.8635429e-002,
5618 -1.0751357e-001,
5619 -5.6070283e-002,
5620 1.4123461e-002,
5621 -1.8192970e-002,
5622 4.4540436e-002,
5623 1.3600658e-002,
5624 3.2261098e-002,
5625 4.4861229e-002,
5626 -1.5863787e-002,
5627 -1.0092780e-002,
5628 -3.9516555e-003,
5629 3.8360973e-002,
5630 6.1804829e-002,
5631 1.0870303e-001,
5632 4.7383438e-002,
5633 -5.0590863e-002,
5634 -5.2113776e-002,
5635 5.2393207e-002,
5636 1.2177198e-002,
5637 6.2526425e-002,
5638 8.3174224e-003,
5639 -2.4071062e-002,
5640 2.8581013e-002,
5641 -6.0028375e-003,
5642 1.5238535e-002,
5643 5.2025149e-003,
5644 -3.6385591e-002,
5645 -9.3463539e-003,
5646 -9.7549044e-003,
5647 4.1434624e-002,
5648 -3.5638211e-002,
5649 6.1524697e-002,
5650 1.2879217e-002,
5651 -1.1074718e-002,
5652 7.5826917e-003,
5653 -4.3450751e-002,
5654 -3.4027473e-002,
5655 6.3700920e-002,
5656 -5.2272643e-002,
5657 -2.8750180e-002,
5658 4.0041018e-002,
5659 -8.1966458e-002,
5660 -1.0461089e-002,
5661 2.5452300e-002,
5662 6.7107297e-002,
5663 -3.3918191e-002,
5664 -1.0212989e-001,
5665 -6.3527291e-002,
5666 3.1678548e-002,
5667 -6.5778118e-002,
5668 -1.6823229e-002,
5669 2.2988117e-003,
5670 -4.8242461e-002,
5671 -1.4582693e-002,
5672 -4.9060246e-002,
5673 -3.4256626e-003,
5674 4.1172518e-002,
5675 3.2772250e-002,
5676 2.4890066e-002,
5677 3.4522929e-003,
5678 4.4704585e-002,
5679 -5.9967401e-002,
5680 1.4541680e-002,
5681 -7.9411114e-002,
5682 -6.5131143e-002,
5683 -4.2051810e-002,
5684 4.2103006e-002,
5685 -9.8683984e-004,
5686 -5.0962061e-003,
5687 -2.2606406e-002,
5688 -1.2325980e-001,
5689 9.5086419e-002,
5690 -1.9106034e-002,
5691 -5.1992218e-002,
5692 -6.7436377e-002,
5693 -1.5798067e-002,
5694 -7.5885603e-002,
5695 1.7614604e-002,
5696 3.0602185e-002,
5697 -4.5707990e-002,
5698 5.0279499e-002,
5699 1.3599448e-002,
5700 -8.4652879e-002,
5701 1.4275404e-002,
5702 5.3761838e-002,
5703 1.3130364e-002,
5704 -5.7785349e-003,
5705 1.0995249e-001,
5706 3.6117865e-002,
5707 2.2136081e-002,
5708 1.1263325e-002,
5709 -4.9338919e-002,
5710 4.2415991e-002,
5711 -6.3570185e-002,
5712 5.1525003e-002,
5713 8.9408937e-002,
5714 -4.3531507e-002,
5715 2.5382423e-002,
5716 5.7394710e-002,
5717 1.1827633e-001,
5718 -1.4335949e-002,
5719 2.4596850e-002,
5720 -1.8394004e-002,
5721 1.3479964e-002,
5722 -5.5450915e-002,
5723 -1.3887857e-002,
5724 3.7399926e-002,
5725 4.2692709e-002,
5726 -9.1345703e-002,
5727 -6.4179097e-002,
5728 5.1528849e-002,
5729 1.1923834e-001,
5730 8.0392828e-003,
5731 -7.4190647e-003,
5732 1.1158220e-002,
5733 2.3106872e-002,
5734 2.5289633e-002,
5735 -7.8109586e-002,
5736 4.4033891e-002,
5737 2.9868351e-002,
5738 2.5709704e-002,
5739 6.5446252e-003,
5740 1.7279125e-002,
5741 8.8849380e-002,
5742 -4.2399471e-002,
5743 3.2297167e-002,
5744 -3.3758385e-002,
5745 5.3666150e-002,
5746 3.7628322e-002,
5747 -1.3602948e-002,
5748 8.3115154e-002,
5749 -4.4130785e-002,
5750 1.5545953e-002,
5751 -5.7188645e-002,
5752 3.3708440e-002,
5753 7.9527486e-003,
5754 7.2838427e-002,
5755 -8.7159852e-004,
5756 9.8852335e-002,
5757 4.3261724e-002,
5758 -2.2410237e-002,
5759 -1.9969511e-002,
5760 1.3049591e-002,
5761 1.3520410e-001
5762};
5763
5764float audiobeam_mic_locations[15][3] = {
5765 {1.5, 2.79, 0},
5766 {1.5, 2.82, 0},
5767 {1.5, 2.85, 0},
5768 {1.5, 2.88, 0},
5769 {1.5, 2.91, 0},
5770 {1.5, 2.94, 0},
5771 {1.5, 2.97, 0},
5772 {1.5, 3, 0},
5773 {1.5, 3.03, 0},
5774 {1.5, 3.06, 0},
5775 {1.5, 3.09, 0},
5776 {1.5, 3.12, 0},
5777 {1.5, 3.15, 0},
5778 {1.5, 3.18, 0},
5779 {1.5, 3.21, 0}
5780};
5781
5782float audiobeam_source_location[3] = {1.1677, 2.1677, 1};
5783
5784float audiobeam_origin_location[3] = {1.5, 3, 0};
diff --git a/baseline/source/audiobeam/audiobeamlibm.c b/baseline/source/audiobeam/audiobeamlibm.c
new file mode 100644
index 0000000..259f40b
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeamlibm.c
@@ -0,0 +1,423 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeamlibm.c
7
8 Author: Ian Lance Taylor and J.T. Conklin
9
10 Function: IEEE754 software library routines.
11
12 Source: Sun Microsystems and Cygnus
13
14 Original name: Unknown
15
16 Changes: No major functional changes.
17
18 License: See the terms below.
19
20*/
21
22/*
23 ====================================================
24 Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
25
26 Developed at SunPro, a Sun Microsystems, Inc. business.
27 Permission to use, copy, modify, and distribute this
28 software is freely granted, provided that this notice
29 is preserved.
30 ====================================================
31*/
32
33
34#include "audiobeamlibm.h"
35#include "audiobeamlibmath.h"
36
37
38static const int audiobeam_npio2_hw[] = {
39 0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00,
40 0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00,
41 0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100,
42 0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00,
43 0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00,
44 0x4242c700, 0x42490f00
45};
46
47static const float
48audiobeam_invpio2 = 6.3661980629e-01f, /* 0x3f22f984 */
49audiobeam_pio2_1 = 1.5707855225e+00f, /* 0x3fc90f80 */
50audiobeam_pio2_1t = 1.0804334124e-05f, /* 0x37354443 */
51audiobeam_pio2_2 = 1.0804273188e-05f, /* 0x37354400 */
52audiobeam_pio2_2t = 6.0770999344e-11f, /* 0x2e85a308 */
53audiobeam_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */
54audiobeam_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */
55
56static const float
57audiobeam_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */
58audiobeam_C2 = -1.3888889225e-03f, /* 0xbab60b61 */
59audiobeam_C3 = 2.4801587642e-05f, /* 0x37d00d01 */
60audiobeam_C4 = -2.7557314297e-07f, /* 0xb493f27c */
61audiobeam_C5 = 2.0875723372e-09f, /* 0x310f74f6 */
62audiobeam_C6 = -1.1359647598e-11f; /* 0xad47d74e */
63
64static const float
65audiobeam_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */
66audiobeam_S2 = 8.3333337680e-03f, /* 0x3c088889 */
67audiobeam_S3 = -1.9841270114e-04f, /* 0xb9500d01 */
68audiobeam_S4 = 2.7557314297e-06f, /* 0x3638ef1b */
69audiobeam_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */
70audiobeam_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */
71
72static const float
73audiobeam_two25 = 3.355443200e+07f, /* 0x4c000000 */
74audiobeam_twom25 = 2.9802322388e-08f; /* 0x33000000 */
75
76
77int audiobeam___ieee754_rem_pio2f( float x, float *y )
78{
79 float z, w, t, r, fn;
80 int i, j, n = 0, ix, hx;
81
82 AUDIOBEAM_GET_FLOAT_WORD( hx, x );
83 ix = hx & 0x7fffffff;
84 if ( ix <= 0x3f490fd8 ) {
85 y[0] = x;
86 y[1] = 0;
87 return 0;
88 }
89 if ( ix < 0x4016cbe4 ) {
90 if ( hx > 0 ) {
91 z = x - audiobeam_pio2_1;
92 if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) {
93 y[0] = z - audiobeam_pio2_1t;
94 y[1] = ( z - y[0] ) - audiobeam_pio2_1t;
95 } else {
96 z -= audiobeam_pio2_2;
97 y[0] = z - audiobeam_pio2_2t;
98 y[1] = ( z - y[0] ) - audiobeam_pio2_2t;
99 }
100 return 1;
101 } else {
102 z = x + audiobeam_pio2_1;
103 if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) {
104 y[0] = z + audiobeam_pio2_1t;
105 y[1] = ( z - y[0] ) + audiobeam_pio2_1t;
106 } else {
107 z += audiobeam_pio2_2;
108 y[0] = z + audiobeam_pio2_2t;
109 y[1] = ( z - y[0] ) + audiobeam_pio2_2t;
110 }
111 return -1;
112 }
113 }
114 if ( ix <= 0x43490f80 ) {
115 t = audiobeam_fabsf( x );
116 n = ( int ) ( t * audiobeam_invpio2 + audiobeam_half );
117 fn = ( float )n;
118 r = t - fn * audiobeam_pio2_1;
119 w = fn * audiobeam_pio2_1t;
120 if ( n < 32 && ( int )( ix & 0xffffff00 ) != audiobeam_npio2_hw[n - 1] )
121 y[0] = r - w;
122 else {
123 unsigned int high;
124 j = ix >> 23;
125 y[0] = r - w;
126 AUDIOBEAM_GET_FLOAT_WORD( high, y[0] );
127 i = j - ( ( high >> 23 ) & 0xff );
128 if ( i > 8 ) {
129 t = r;
130 w = fn * audiobeam_pio2_2;
131 r = t - w;
132 w = fn * audiobeam_pio2_2t - ( ( t - r ) - w );
133 y[0] = r - w;
134 AUDIOBEAM_GET_FLOAT_WORD( high, y[0] );
135 i = j - ( ( high >> 23 ) & 0xff );
136 if ( i > 25 ) {
137 t = r;
138 w = fn * audiobeam_pio2_3;
139 r = t - w;
140 w = fn * audiobeam_pio2_3t - ( ( t - r ) - w );
141 y[0] = r - w;
142 }
143 }
144 }
145 y[1] = ( r - y[0] ) - w;
146 if ( hx < 0 ) {
147 y[0] = -y[0];
148 y[1] = -y[1];
149 return -n;
150 } else return n;
151 }
152 if ( ix >= 0x7f800000 ) {
153 y[0] = y[1] = x - x;
154 return 0;
155 }
156
157 return n;
158}
159
160
161float audiobeam___kernel_cosf( float x, float y )
162{
163 float a, hz, z, r, qx;
164 int ix;
165 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
166 ix &= 0x7fffffff;
167 if ( ix < 0x32000000 ) {
168 if ( ( ( int )x ) == 0 ) return audiobeam_one;
169 }
170 z = x * x;
171 r = z * ( audiobeam_C1 + z * ( audiobeam_C2 + z * ( audiobeam_C3 + z *
172 ( audiobeam_C4 + z *
173 ( audiobeam_C5 + z * audiobeam_C6 ) ) ) ) );
174 if ( ix < 0x3e99999a )
175 return audiobeam_one - ( ( float )0.5f * z - ( z * r - x * y ) );
176 else {
177 if ( ix > 0x3f480000 )
178 qx = ( float )0.28125f;
179 else
180 AUDIOBEAM_SET_FLOAT_WORD( qx, ix - 0x01000000 );
181 hz = ( float )0.5f * z - qx;
182 a = audiobeam_one - qx;
183 return a - ( hz - ( z * r - x * y ) );
184 }
185}
186
187
188float audiobeam___kernel_sinf( float x, float y, int iy )
189{
190 float z, r, v;
191 int ix;
192 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
193 ix &= 0x7fffffff;
194 if ( ix < 0x32000000 ) {
195 if ( ( int )x == 0 ) return x;
196 }
197 z = x * x;
198 v = z * x;
199 r = audiobeam_S2 + z * ( audiobeam_S3 + z * ( audiobeam_S4 + z * ( audiobeam_S5 + z * audiobeam_S6 ) ) );
200 if ( iy == 0 ) return x + v * ( audiobeam_S1 + z * r );
201 else return x - ( ( z * ( audiobeam_half * y - v * r ) - y ) - v * audiobeam_S1 );
202}
203
204
205float audiobeam___copysignf( float x, float y )
206{
207 unsigned int ix, iy;
208 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
209 AUDIOBEAM_GET_FLOAT_WORD( iy, y );
210 AUDIOBEAM_SET_FLOAT_WORD( x, ( ix & 0x7fffffff ) | ( iy & 0x80000000 ) );
211 return x;
212}
213
214
215float audiobeam___cosf( float x )
216{
217 float y[2], z = 0.0f;
218 int n, ix;
219
220 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
221
222 ix &= 0x7fffffff;
223 if ( ix <= 0x3f490fd8 ) return audiobeam___kernel_cosf( x, z );
224
225 else
226 if ( ix >= 0x7f800000 ) return x - x;
227
228 else {
229 y[0] = 0.0;
230 y[1] = 0.0;
231 n = audiobeam___ieee754_rem_pio2f( x, y );
232 switch ( n & 3 ) {
233 case 0:
234 return audiobeam___kernel_cosf( y[0], y[1] );
235 case 1:
236 return -audiobeam___kernel_sinf( y[0], y[1], 1 );
237 case 2:
238 return -audiobeam___kernel_cosf( y[0], y[1] );
239 default:
240 return audiobeam___kernel_sinf( y[0], y[1], 1 );
241 }
242 }
243}
244
245
246float audiobeam___fabsf( float x )
247{
248 unsigned int ix;
249 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
250 AUDIOBEAM_SET_FLOAT_WORD( x, ix & 0x7fffffff );
251 return x;
252}
253
254
255float audiobeam___floorf( float x )
256{
257 int i0, j0;
258 unsigned int i;
259 AUDIOBEAM_GET_FLOAT_WORD( i0, x );
260 j0 = ( ( i0 >> 23 ) & 0xff ) - 0x7f;
261 if ( j0 < 23 ) {
262 if ( j0 < 0 ) {
263 if ( audiobeam_huge + x > ( float )0.0f ) {
264 if ( i0 >= 0 )
265 i0 = 0;
266 else
267 if ( ( i0 & 0x7fffffff ) != 0 )
268 i0 = 0xbf800000;
269 }
270 } else {
271 i = ( 0x007fffff ) >> j0;
272 if ( ( i0 & i ) == 0 ) return x;
273 if ( audiobeam_huge + x > ( float )0.0f ) {
274 if ( i0 < 0 ) i0 += ( 0x00800000 ) >> j0;
275 i0 &= ( ~i );
276 }
277 }
278 } else {
279 if ( j0 == 0x80 ) return x + x;
280 else return x;
281 }
282 AUDIOBEAM_SET_FLOAT_WORD( x, i0 );
283 return x;
284}
285
286
287int audiobeam___isinff ( float x )
288{
289 int ix, t;
290 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
291 t = ix & 0x7fffffff;
292 t ^= 0x7f800000;
293 t |= -t;
294 return ~( t >> 31 ) & ( ix >> 30 );
295}
296
297
298float audiobeam___scalbnf ( float x, int n )
299{
300 int k, ix;
301 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
302 k = ( ix & 0x7f800000 ) >> 23;
303 if ( k == 0 ) {
304 if ( ( ix & 0x7fffffff ) == 0 ) return x;
305 x *= audiobeam_two25;
306 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
307 k = ( ( ix & 0x7f800000 ) >> 23 ) - 25;
308 }
309 if ( k == 0xff ) return x + x;
310 k = k + n;
311 if ( n > 50000 || k > 0xfe )
312 return audiobeam_huge * audiobeam___copysignf( audiobeam_huge,
313 x );
314 if ( n < -50000 )
315 return audiobeam_tiny * audiobeam___copysignf( audiobeam_tiny,
316 x );
317 if ( k > 0 ) {
318 AUDIOBEAM_SET_FLOAT_WORD( x, ( ix & 0x807fffff ) | ( k << 23 ) );
319 return x;
320 }
321 if ( k <= -25 )
322 return audiobeam_tiny * audiobeam___copysignf( audiobeam_tiny,
323 x );
324 k += 25;
325 AUDIOBEAM_SET_FLOAT_WORD( x, ( ix & 0x807fffff ) | ( k << 23 ) );
326 return x * audiobeam_twom25;
327}
328
329
330float audiobeam___ceilf( float x )
331{
332 int i0, j0;
333 unsigned int i;
334
335 AUDIOBEAM_GET_FLOAT_WORD( i0, x );
336 j0 = ( ( i0 >> 23 ) & 0xff ) - 0x7f;
337 if ( j0 < 23 ) {
338 if ( j0 < 0 ) {
339 if ( audiobeam_huge + x > ( float )0.0 ) {
340 if ( i0 < 0 )
341 i0 = 0x80000000;
342 else
343 if ( i0 != 0 )
344 i0 = 0x3f800000;
345 }
346 } else {
347 i = ( 0x007fffff ) >> j0;
348 if ( ( i0 & i ) == 0 ) return x;
349 if ( audiobeam_huge + x > ( float )0.0 ) {
350 if ( i0 > 0 ) i0 += ( 0x00800000 ) >> j0;
351 i0 &= ( ~i );
352 }
353 }
354 } else {
355 if ( j0 == 0x80 ) return x + x;
356 else return x;
357 }
358 AUDIOBEAM_SET_FLOAT_WORD( x, i0 );
359 return x;
360}
361
362
363float audiobeam___ieee754_sqrtf( float x )
364{
365 float z;
366 int sign = ( int )0x80000000;
367 int ix, s, q, m, t, i;
368 unsigned int r;
369
370 AUDIOBEAM_GET_FLOAT_WORD( ix, x );
371
372 if ( ( ix & 0x7f800000 ) == 0x7f800000 )
373 return x * x + x;
374 if ( ix <= 0 ) {
375 if ( ( ix & ( ~sign ) ) == 0 ) return x;
376 else
377 if ( ix < 0 )
378 return ( x - x ) / ( x - x );
379 }
380 m = ( ix >> 23 );
381 if ( m == 0 ) {
382 _Pragma( "loopbound min 0 max 0" )
383 for ( i = 0; ( ix & 0x00800000 ) == 0; i++ )
384 ix <<= 1;
385 m -= i - 1;
386 }
387 m -= 127;
388 ix = ( ix & 0x007fffff ) | 0x00800000;
389 if ( m & 1 )
390 ix += ix;
391 m >>= 1;
392
393 ix += ix;
394 q = s = 0;
395 r = 0x01000000;
396
397 _Pragma( "loopbound min 25 max 25" )
398 while ( r != 0 ) {
399 t = s + r;
400 if ( t <= ix ) {
401 s = t + r;
402 ix -= t;
403 q += r;
404 }
405 ix += ix;
406 r >>= 1;
407 }
408
409 if ( ix != 0 ) {
410 z = audiobeam_one - audiobeam_tiny;
411 if ( z >= audiobeam_one ) {
412 z = audiobeam_one + audiobeam_tiny;
413 if ( z > audiobeam_one )
414 q += 2;
415 else
416 q += ( q & 1 );
417 }
418 }
419 ix = ( q >> 1 ) + 0x3f000000;
420 ix += ( m << 23 );
421 AUDIOBEAM_SET_FLOAT_WORD( z, ix );
422 return z;
423}
diff --git a/baseline/source/audiobeam/audiobeamlibm.h b/baseline/source/audiobeam/audiobeamlibm.h
new file mode 100644
index 0000000..b06b563
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeamlibm.h
@@ -0,0 +1,59 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: quicksortlibm.c
7
8 Author: Ian Lance Taylor
9
10 Function: IEEE754 software library routines.
11
12 Source: Sun Microsystems and Cygnus
13
14 Original name: Unknown
15
16 Changes: No major functional changes.
17
18 License: See audiobeamlibm.c
19
20*/
21
22#ifndef AUDIOBEAM_LIBM
23#define AUDIOBEAM_LIBM
24
25#define audiobeam_M_PI 3.14159265358979323846
26
27static const float
28audiobeam_one = 1.0f,
29audiobeam_tiny = 1.0e-30f,
30audiobeam_half = 5.0000000000e-01, /* 0x3f000000 */
31audiobeam_huge = 1.0e30,
32audiobeam_two8 = 2.5600000000e+02, /* 0x43800000 */
33audiobeam_twon8 = 3.9062500000e-03, /* 0x3b800000 */
34audiobeam_zero = 0.0;
35
36#define audiobeam_cos audiobeam___cosf
37#define audiobeam_fabs audiobeam___fabsf
38#define audiobeam_fabsf audiobeam___fabsf
39#define audiobeam_isinf audiobeam___isinff
40#define audiobeam_sqrt audiobeam___ieee754_sqrtf
41#define audiobeam_ceil audiobeam___ceilf
42#define audiobeam_floor audiobeam___floorf
43
44float audiobeam___copysignf( float x, float y );
45float audiobeam___cosf( float x );
46float audiobeam___fabsf( float x );
47float audiobeam___floorf( float x );
48int audiobeam___ieee754_rem_pio2f( float x, float *y );
49float audiobeam___ieee754_sqrtf( float x );
50int audiobeam___isinff ( float x );
51float audiobeam___kernel_cosf( float x, float y );
52float audiobeam___kernel_sinf( float x, float y, int iy );
53int audiobeam___kernel_rem_pio2f( float *x, float *y, int e0, int nx,
54 int prec, const int *ipio2 );
55float audiobeam___scalbnf ( float x, int n );
56float audiobeam___ceilf( float x );
57float audiobeam___floorf( float x );
58
59#endif // AUDIOBEAM_LIBM
diff --git a/baseline/source/audiobeam/audiobeamlibmalloc.c b/baseline/source/audiobeam/audiobeamlibmalloc.c
new file mode 100644
index 0000000..50c3073
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeamlibmalloc.c
@@ -0,0 +1,14 @@
1#include "audiobeamlibmalloc.h"
2
3#define AUDIOBEAM_HEAP_SIZE 10000
4
5static char audiobeam_simulated_heap[AUDIOBEAM_HEAP_SIZE];
6static unsigned int audiobeam_freeHeapPos;
7
8void *audiobeam_malloc( unsigned int numberOfBytes )
9{
10 void *currentPos = ( void * )&audiobeam_simulated_heap[ audiobeam_freeHeapPos ];
11 /* Get a 4-byte address for alignment purposes */
12 audiobeam_freeHeapPos += ( ( numberOfBytes + 4 ) & ( unsigned int )0xfffffffc );
13 return currentPos;
14} \ No newline at end of file
diff --git a/baseline/source/audiobeam/audiobeamlibmalloc.h b/baseline/source/audiobeam/audiobeamlibmalloc.h
new file mode 100644
index 0000000..eccbdb9
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeamlibmalloc.h
@@ -0,0 +1,27 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeamlibmalloc.c
7
8 Author: unkown
9
10 Function: Memory allocation.
11
12 Source: Sun Microsystems and Cygnus
13
14 Original name: Unknown
15
16 Changes: No major functional changes.
17
18 License: see license.txt
19
20*/
21
22#ifndef AUDIOBEAM_MALLOC_H
23#define AUDIOBEAM_MALLOC_H
24
25void *audiobeam_malloc( unsigned int numberOfBytes );
26
27#endif
diff --git a/baseline/source/audiobeam/audiobeamlibmath.h b/baseline/source/audiobeam/audiobeamlibmath.h
new file mode 100644
index 0000000..77bda0f
--- /dev/null
+++ b/baseline/source/audiobeam/audiobeamlibmath.h
@@ -0,0 +1,69 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeamlibmath.h
7
8 Author: Unknown
9
10 Function: IEEE754 software library routines.
11
12 Source: Sun Microsystems
13
14 Original name: math_private.h
15
16 Changes: No major functional changes.
17
18 License: See the terms below.
19
20*/
21
22
23/*
24 ====================================================
25 Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
26
27 Developed at SunPro, a Sun Microsystems, Inc. business.
28 Permission to use, copy, modify, and distribute this
29 software is freely granted, provided that this notice
30 is preserved.
31 ====================================================
32*/
33
34/*
35 from: @(#)fdlibm.h 5.1 93/09/24
36*/
37
38#ifndef AUDIOBEAM_MATH_PRIVATE_H_
39#define AUDIOBEAM_MATH_PRIVATE_H_
40
41#include "audiobeamlibm.h"
42
43/* A union which permits us to convert between a float and a 32 bit
44 int. */
45
46typedef union {
47 float value;
48 unsigned int word;
49} audiobeam_ieee_float_shape_type;
50
51/* Get a 32 bit int from a float. */
52
53#define AUDIOBEAM_GET_FLOAT_WORD(i,d) \
54{ \
55 audiobeam_ieee_float_shape_type gf_u; \
56 gf_u.value = (d); \
57 (i) = gf_u.word; \
58}
59
60/* Set a float from a 32 bit int. */
61
62#define AUDIOBEAM_SET_FLOAT_WORD(d,i) \
63{ \
64 audiobeam_ieee_float_shape_type sf_u; \
65 sf_u.word = (i); \
66 (d) = sf_u.value; \
67}
68
69#endif /* _MATH_PRIVATE_H_ */
diff --git a/baseline/source/audiobeam/changeLog.txt b/baseline/source/audiobeam/changeLog.txt
new file mode 100644
index 0000000..b9b8933
--- /dev/null
+++ b/baseline/source/audiobeam/changeLog.txt
@@ -0,0 +1,36 @@
1File: audiobeam.c
2Original provenience: StreamIt
3 http://groups.csail.mit.edu/cag/streamit/
4
52015-12-29:
6- Removed original header comment, replaced by TACLeBench header.
7- Renamed libraryfiles according to TACLeBench naming scheme.
8- Removed all preprocessor macros, integrated them directly in the source code.
9- Added prefix "audiobeam_" to all global symbols.
10- Added explicit forward declarations of functions.
11- Added an empty init function
12- Added preprocessor command to determine if 32 or 64 bit in audiobeamlibmalloc.h
13- Added new function audiobeam_return producing a checksum as return value.
14- Added new function audiobeam_main according to TACLeBench guidelines.
15 audiobeam_main is annotated as entry-point for timing analysis.
16- Applied code formatting according to the following rules
17 - Lines shall not be wider than 80 characters; whenever possible, appropriate
18 line breaks shall be inserted to keep lines below 80 characters
19 - Indentation is done using whitespaces only, no tabs. Code is indented by
20 two whitespaces
21 - Two empty lines are put between any two functions
22 - In non-empty lists or index expressions, opening '(' and '[' are followed by
23 one whitespace, closing ')' and ']' are preceded by one whitespace
24 - In comma- or colon-separated argument lists, one whitespace is put after
25 each comma/colon
26 - Names of functions and global variables all start with a benchmark-specific
27 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
28 - For pointer types, one whitespace is put before the '*'
29 - Operators within expressions shall be preceded and followed by one
30 whitespace
31 - Code of then- and else-parts of if-then-else statements shall be put in
32 separate lines, not in the same lines as the if-condition or the keyword
33 "else"
34 - Opening braces '{' denoting the beginning of code for some if-else or loop
35 body shall be put at the end of the same line where the keywords "if",
36 "else", "for", "while" etc. occur \ No newline at end of file
diff --git a/baseline/source/audiobeam/license.txt b/baseline/source/audiobeam/license.txt
new file mode 100644
index 0000000..7029925
--- /dev/null
+++ b/baseline/source/audiobeam/license.txt
@@ -0,0 +1,21 @@
1The MIT License
2
3Copyright (c) <year> <copyright holders>
4
5Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
7in the Software without restriction, including without limitation the rights
8to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9copies of the Software, and to permit persons to whom the Software is
10furnished to do so, subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in
13all copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21THE SOFTWARE.
diff --git a/baseline/source/cjpeg_transupp/ChangeLog.txt b/baseline/source/cjpeg_transupp/ChangeLog.txt
new file mode 100644
index 0000000..df4383c
--- /dev/null
+++ b/baseline/source/cjpeg_transupp/ChangeLog.txt
@@ -0,0 +1,36 @@
1File: cjpeg_transupp.c
2Original provenience: MediaBench II benchmark suite,
3 http://euler.slu.edu/~fritts/mediabench (mirror)
4
52015-11-03:
6- Removed original header comment, replaced by TACLeBench header.
7- Removed unnecessary preprocessor macros.
8- Removed unnecessary code parts, simplified header files and include
9 relationships.
10- Added prefix "cjpeg_transupp" to all global symbols.
11- Added explicit forward declarations of functions.
12- Replaced initialization code by TACLeBench-compliant initialization code.
13- Added new function cjpeg_transupp_return producing a checksum as return value.
14- Added new function cjpeg_transupp_main according to TACLeBench guidelines.
15 cjpeg_transupp_main is annotated as entry-point for timing analysis.
16- Applied code formatting according to the following rules
17 - Lines shall not be wider than 80 characters; whenever possible, appropriate
18 line breaks shall be inserted to keep lines below 80 characters
19 - Indentation is done using whitespaces only, no tabs. Code is indented by
20 two whitespaces
21 - Two empty lines are put between any two functions
22 - In non-empty lists or index expressions, opening '(' and '[' are followed by
23 one whitespace, closing ')' and ']' are preceded by one whitespace
24 - In comma- or colon-separated argument lists, one whitespace is put after
25 each comma/colon
26 - Names of functions and global variables all start with a benchmark-specific
27 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
28 - For pointer types, one whitespace is put before the '*'
29 - Operators within expressions shall be preceded and followed by one
30 whitespace
31 - Code of then- and else-parts of if-then-else statements shall be put in
32 separate lines, not in the same lines as the if-condition or the keyword
33 "else"
34 - Opening braces '{' denoting the beginning of code for some if-else or loop
35 body shall be put at the end of the same line where the keywords "if",
36 "else", "for", "while" etc. occur
diff --git a/baseline/source/cjpeg_transupp/README b/baseline/source/cjpeg_transupp/README
new file mode 100644
index 0000000..8dba954
--- /dev/null
+++ b/baseline/source/cjpeg_transupp/README
@@ -0,0 +1,417 @@
1The Independent JPEG Group's JPEG software
2==========================================
3
4README for release 6a of 7-Feb-96
5=================================
6
7This distribution contains the sixth public release of the Independent JPEG
8Group's free JPEG software. You are welcome to redistribute this software and
9to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
10
11Serious users of this software (particularly those incorporating it into
12larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to
13our electronic mailing list. Mailing list members are notified of updates
14and have a chance to participate in technical discussions, etc.
15
16This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, Jim
17Boucher, Lee Crocker, Julian Minguillon, George Phillips, Davide Rossi,
18Ge' Weijers, and other members of the Independent JPEG Group.
19
20IJG is not affiliated with the official ISO JPEG standards committee.
21
22
23DOCUMENTATION ROADMAP
24=====================
25
26This file contains the following sections:
27
28OVERVIEW General description of JPEG and the IJG software.
29LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
30REFERENCES Where to learn more about JPEG.
31ARCHIVE LOCATIONS Where to find newer versions of this software.
32RELATED SOFTWARE Other stuff you should get.
33FILE FORMAT WARS Software *not* to get.
34TO DO Plans for future IJG releases.
35
36Other documentation files in the distribution are:
37
38User documentation:
39 install.doc How to configure and install the IJG software.
40 usage.doc Usage instructions for cjpeg, djpeg, jpegtran,
41 rdjpgcom, and wrjpgcom.
42 *.1 Unix-style man pages for programs (same info as usage.doc).
43 wizard.doc Advanced usage instructions for JPEG wizards only.
44 change.log Version-to-version change highlights.
45Programmer and internal documentation:
46 libjpeg.doc How to use the JPEG library in your own programs.
47 example.c Sample code for calling the JPEG library.
48 structure.doc Overview of the JPEG library's internal structure.
49 filelist.doc Road map of IJG files.
50 coderules.doc Coding style rules --- please read if you contribute code.
51
52Please read at least the files install.doc and usage.doc. Useful information
53can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
54ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
55
56If you want to understand how the JPEG code works, we suggest reading one or
57more of the REFERENCES, then looking at the documentation files (in roughly
58the order listed) before diving into the code.
59
60
61OVERVIEW
62========
63
64This package contains C software to implement JPEG image compression and
65decompression. JPEG (pronounced "jay-peg") is a standardized compression
66method for full-color and gray-scale images. JPEG is intended for compressing
67"real-world" scenes; line drawings, cartoons and other non-realistic images
68are not its strong suit. JPEG is lossy, meaning that the output image is not
69exactly identical to the input image. Hence you must not use JPEG if you
70have to have identical output bits. However, on typical photographic images,
71very good compression levels can be obtained with no visible change, and
72remarkably high compression levels are possible if you can tolerate a
73low-quality image. For more details, see the references, or just experiment
74with various compression settings.
75
76This software implements JPEG baseline, extended-sequential, and progressive
77compression processes. Provision is made for supporting all variants of these
78processes, although some uncommon parameter settings aren't implemented yet.
79For legal reasons, we are not distributing code for the arithmetic-coding
80variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting
81the hierarchical or lossless processes defined in the standard.
82
83We provide a set of library routines for reading and writing JPEG image files,
84plus two sample applications "cjpeg" and "djpeg", which use the library to
85perform conversion between JPEG and some other popular image file formats.
86The library is intended to be reused in other applications.
87
88In order to support file conversion and viewing software, we have included
89considerable functionality beyond the bare JPEG coding/decoding capability;
90for example, the color quantization modules are not strictly part of JPEG
91decoding, but they are essential for output to colormapped file formats or
92colormapped displays. These extra functions can be compiled out of the
93library if not required for a particular application. We have also included
94"jpegtran", a utility for lossless transcoding between different JPEG
95processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
96inserting and extracting textual comments in JFIF files.
97
98The emphasis in designing this software has been on achieving portability and
99flexibility, while also making it fast enough to be useful. In particular,
100the software is not intended to be read as a tutorial on JPEG. (See the
101REFERENCES section for introductory material.) Rather, it is intended to
102be reliable, portable, industrial-strength code. We do not claim to have
103achieved that goal in every aspect of the software, but we strive for it.
104
105We welcome the use of this software as a component of commercial products.
106No royalty is required, but we do ask for an acknowledgement in product
107documentation, as described under LEGAL ISSUES.
108
109Lossless image transformation routines. These routines work on DCT coefficient
110arrays and thus do not require any lossy decompression or recompression of the
111image. Thanks to Guido Vollbeding for the initial design and code of this
112feature.
113
114Horizontal flipping is done in-place, using a single top-to-bottom pass through
115the virtual source array. It will thus be much the fastest option for images
116larger than main memory.
117
118The other routines require a set of destination virtual arrays, so they need
119twice as much memory as jpegtran normally does. The destination arrays are
120always written in normal scan order (top to bottom) because the virtual array
121manager expects this. The source arrays will be scanned in the corresponding
122order, which means multiple passes through the source arrays for most of the
123transforms. That could result in much thrashing if the image is larger than main
124memory.
125
126Some notes about the operating environment of the individual transform routines:
1271. Both the source and destination virtual arrays are allocated from the source
128 JPEG object, and therefore should be manipulated by calling the source's
129 memory manager.
1302. The destination's component count should be used. It may be smaller than the
131 source's when forcing to grayscale.
1323. Likewise the destination's sampling factors should be used. When forcing to
133 grayscale the destination's sampling factors will be all 1, and we may as
134 well take that as the effective iMCU size.
1354. When "trim" is in effect, the destination's dimensions will be the trimmed
136 values but the source's will be untrimmed.
1375. All the routines assume that the source and destination buffers are padded
138 out to a full iMCU boundary. This is true, although for the source buffer it
139 is an undocumented property of jdcoefct.c.
140Notes 2,3,4 boil down to this: generally we should use the destination's
141dimensions and ignore the source's.
142
143
144LEGAL ISSUES
145============
146
147In plain English:
148
1491. We don't promise that this software works. (But if you find any bugs,
150 please let us know!)
1512. You can use this software for whatever you want. You don't have to pay us.
1523. You may not pretend that you wrote this software. If you use it in a
153 program, you must acknowledge somewhere in your documentation that
154 you've used the IJG code.
155
156In legalese:
157
158The authors make NO WARRANTY or representation, either express or implied,
159with respect to this software, its quality, accuracy, merchantability, or
160fitness for a particular purpose. This software is provided "AS IS", and you,
161its user, assume the entire risk as to its quality and accuracy.
162
163This software is copyright (C) 1991-1996, Thomas G. Lane.
164All Rights Reserved except as specified below.
165
166Permission is hereby granted to use, copy, modify, and distribute this
167software (or portions thereof) for any purpose, without fee, subject to these
168conditions:
169(1) If any part of the source code for this software is distributed, then this
170README file must be included, with this copyright and no-warranty notice
171unaltered; and any additions, deletions, or changes to the original files
172must be clearly indicated in accompanying documentation.
173(2) If only executable code is distributed, then the accompanying
174documentation must state that "this software is based in part on the work of
175the Independent JPEG Group".
176(3) Permission for use of this software is granted only if the user accepts
177full responsibility for any undesirable consequences; the authors accept
178NO LIABILITY for damages of any kind.
179
180These conditions apply to any software derived from or based on the IJG code,
181not just to the unmodified library. If you use our work, you ought to
182acknowledge us.
183
184Permission is NOT granted for the use of any IJG author's name or company name
185in advertising or publicity relating to this software or products derived from
186it. This software may be referred to only as "the Independent JPEG Group's
187software".
188
189We specifically permit and encourage the use of this software as the basis of
190commercial products, provided that all warranty or liability claims are
191assumed by the product vendor.
192
193
194ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
195sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
196ansi2knr.c is NOT covered by the above copyright and conditions, but instead
197by the usual distribution terms of the Free Software Foundation; principally,
198that you must include source code if you redistribute it. (See the file
199ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
200of any program generated from the IJG code, this does not limit you more than
201the foregoing paragraphs do.
202
203The configuration script "configure" was produced with GNU Autoconf. It
204is copyright by the Free Software Foundation but is freely distributable.
205
206It appears that the arithmetic coding option of the JPEG spec is covered by
207patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot
208legally be used without obtaining one or more licenses. For this reason,
209support for arithmetic coding has been removed from the free JPEG software.
210(Since arithmetic coding provides only a marginal gain over the unpatented
211Huffman mode, it is unlikely that very many implementations will support it.)
212So far as we are aware, there are no patent restrictions on the remaining
213code.
214
215WARNING: Unisys has begun to enforce their patent on LZW compression against
216GIF encoders and decoders. You will need a license from Unisys to use the
217included rdgif.c or wrgif.c files in a commercial or shareware application.
218At this time, Unisys is not enforcing their patent against freeware, so
219distribution of this package remains legal. However, we intend to remove
220GIF support from the IJG package as soon as a suitable replacement format
221becomes reasonably popular.
222
223We are required to state that
224 "The Graphics Interchange Format(c) is the Copyright property of
225 CompuServe Incorporated. GIF(sm) is a Service Mark property of
226 CompuServe Incorporated."
227
228
229REFERENCES
230==========
231
232We highly recommend reading one or more of these references before trying to
233understand the innards of the JPEG software.
234
235The best short technical introduction to the JPEG compression algorithm is
236 Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
237 Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
238(Adjacent articles in that issue discuss MPEG motion picture compression,
239applications of JPEG, and related topics.) If you don't have the CACM issue
240handy, a PostScript file containing a revised version of Wallace's article
241is available at ftp.uu.net, graphics/jpeg/wallace.ps.gz. The file (actually
242a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
243omits the sample images that appeared in CACM, but it includes corrections
244and some added material. Note: the Wallace article is copyright ACM and
245IEEE, and it may not be used for commercial purposes.
246
247A somewhat less technical, more leisurely introduction to JPEG can be found in
248"The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood
249City, CA), 1991, ISBN 1-55851-216-0. This book provides good explanations and
250example C code for a multitude of compression methods including JPEG. It is
251an excellent source if you are comfortable reading C code but don't know much
252about data compression in general. The book's JPEG sample code is far from
253industrial-strength, but when you are ready to look at a full implementation,
254you've got one here...
255
256The best full description of JPEG is the textbook "JPEG Still Image Data
257Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
258by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp.
259The book includes the complete text of the ISO JPEG standards (DIS 10918-1
260and draft DIS 10918-2). This is by far the most complete exposition of JPEG
261in existence, and we highly recommend it.
262
263The JPEG standard itself is not available electronically; you must order a
264paper copy through ISO or ITU. (Unless you feel a need to own a certified
265official copy, we recommend buying the Pennebaker and Mitchell book instead;
266it's much cheaper and includes a great deal of useful explanatory material.)
267In the USA, copies of the standard may be ordered from ANSI Sales at (212)
268642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI
269doesn't take credit card orders, but Global does.) It's not cheap: as of
2701992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
271shipping/handling. The standard is divided into two parts, Part 1 being the
272actual specification, while Part 2 covers compliance testing methods. Part 1
273is titled "Digital Compression and Coding of Continuous-tone Still Images,
274Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
27510918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
276Continuous-tone Still Images, Part 2: Compliance testing" and has document
277numbers ISO/IEC IS 10918-2, ITU-T T.83.
278
279Extensions to the original JPEG standard are defined in JPEG Part 3, a new ISO
280document. Part 3 is undergoing ISO balloting and is expected to be approved
281by the end of 1995; it will have document numbers ISO/IEC IS 10918-3, ITU-T
282T.84. IJG currently does not support any Part 3 extensions.
283
284The JPEG standard does not specify all details of an interchangeable file
285format. For the omitted details we follow the "JFIF" conventions, revision
2861.02. A copy of the JFIF spec is available from:
287 Literature Department
288 C-Cube Microsystems, Inc.
289 1778 McCarthy Blvd.
290 Milpitas, CA 95035
291 phone (408) 944-6300, fax (408) 944-6314
292A PostScript version of this document is available at ftp.uu.net, file
293graphics/jpeg/jfif.ps.gz. It can also be obtained by e-mail from the C-Cube
294mail server, netlib@c3.pla.ca.us. Send the message "send jfif_ps from jpeg"
295to the server to obtain the JFIF document; send the message "help" if you have
296trouble.
297
298The TIFF 6.0 file format specification can be obtained by FTP from sgi.com
299(192.48.153.1), file graphics/tiff/TIFF6.ps.Z; or you can order a printed
300copy from Aldus Corp. at (206) 628-6593. The JPEG incorporation scheme
301found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
302IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
303Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
304(Compression tag 7). Copies of this Note can be obtained from sgi.com or
305from ftp.uu.net:/graphics/jpeg/. It is expected that the next revision of
306the TIFF spec will replace the 6.0 JPEG design with the Note's design.
307Although IJG's own code does not support TIFF/JPEG, the free libtiff library
308uses our library to implement TIFF/JPEG per the Note. libtiff is available
309from sgi.com:/graphics/tiff/.
310
311
312ARCHIVE LOCATIONS
313=================
314
315The "official" archive site for this software is ftp.uu.net (Internet
316address 192.48.96.9). The most recent released version can always be found
317there in directory graphics/jpeg. This particular version will be archived
318as graphics/jpeg/jpegsrc.v6a.tar.gz. If you are on the Internet, you
319can retrieve files from ftp.uu.net by standard anonymous FTP. If you don't
320have FTP access, UUNET's archives are also available via UUCP; contact
321help@uunet.uu.net for information on retrieving files that way.
322
323Numerous Internet sites maintain copies of the UUNET files. However, only
324ftp.uu.net is guaranteed to have the latest official version.
325
326You can also obtain this software in DOS-compatible "zip" archive format from
327the SimTel archives (ftp.coast.net:/SimTel/msdos/graphics/), or on CompuServe
328in the Graphics Support forum (GO CIS:GRAPHSUP), library 12 "JPEG Tools".
329Again, these versions may sometimes lag behind the ftp.uu.net release.
330
331The JPEG FAQ (Frequently Asked Questions) article is a useful source of
332general information about JPEG. It is updated constantly and therefore is
333not included in this distribution. The FAQ is posted every two weeks to
334Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
335You can always obtain the latest version from the news.answers archive at
336rtfm.mit.edu. By FTP, fetch /pub/usenet/news.answers/jpeg-faq/part1 and
337.../part2. If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu
338with body
339 send usenet/news.answers/jpeg-faq/part1
340 send usenet/news.answers/jpeg-faq/part2
341
342
343RELATED SOFTWARE
344================
345
346Numerous viewing and image manipulation programs now support JPEG. (Quite a
347few of them use this library to do so.) The JPEG FAQ described above lists
348some of the more popular free and shareware viewers, and tells where to
349obtain them on Internet.
350
351If you are on a Unix machine, we highly recommend Jef Poskanzer's free
352PBMPLUS image software, which provides many useful operations on PPM-format
353image files. In particular, it can convert PPM images to and from a wide
354range of other formats. You can obtain this package by FTP from ftp.x.org
355(contrib/pbmplus*.tar.Z) or ftp.ee.lbl.gov (pbmplus*.tar.Z). There is also
356a newer update of this package called NETPBM, available from
357wuarchive.wustl.edu under directory /graphics/graphics/packages/NetPBM/.
358Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software
359is; you are likely to have difficulty making it work on any non-Unix machine.
360
361A different free JPEG implementation, written by the PVRG group at Stanford,
362is available from havefun.stanford.edu in directory pub/jpeg. This program
363is designed for research and experimentation rather than production use;
364it is slower, harder to use, and less portable than the IJG code, but it
365is easier to read and modify. Also, the PVRG code supports lossless JPEG,
366which we do not.
367
368
369FILE FORMAT WARS
370================
371
372Some JPEG programs produce files that are not compatible with our library.
373The root of the problem is that the ISO JPEG committee failed to specify a
374concrete file format. Some vendors "filled in the blanks" on their own,
375creating proprietary formats that no one else could read. (For example, none
376of the early commercial JPEG implementations for the Macintosh were able to
377exchange compressed files.)
378
379The file format we have adopted is called JFIF (see REFERENCES). This format
380has been agreed to by a number of major commercial JPEG vendors, and it has
381become the de facto standard. JFIF is a minimal or "low end" representation.
382We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
383Technical Note #2) for "high end" applications that need to record a lot of
384additional data about an image. TIFF/JPEG is fairly new and not yet widely
385supported, unfortunately.
386
387The upcoming JPEG Part 3 standard defines a file format called SPIFF.
388SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
389be able to read the most common variant of SPIFF. SPIFF has some technical
390advantages over JFIF, but its major claim to fame is simply that it is an
391official standard rather than an informal one. At this point it is unclear
392whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
393standard. IJG intends to support SPIFF once the standard is frozen, but we
394have not decided whether it should become our default output format or not.
395(In any case, our decoder will remain capable of reading JFIF indefinitely.)
396
397Various proprietary file formats incorporating JPEG compression also exist.
398We have little or no sympathy for the existence of these formats. Indeed,
399one of the original reasons for developing this free software was to help
400force convergence on common, open format standards for JPEG files. Don't
401use a proprietary file format!
402
403
404TO DO
405=====
406
407In future versions, we are considering supporting some of the upcoming JPEG
408Part 3 extensions --- principally, variable quantization and the SPIFF file
409format.
410
411Tuning the software for better behavior at low quality/high compression
412settings is also of interest. The current method for scaling the
413quantization tables is known not to be very good at low Q values.
414
415As always, speeding things up is high on our priority list.
416
417Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
diff --git a/baseline/source/cjpeg_transupp/cjpeg_transupp.c b/baseline/source/cjpeg_transupp/cjpeg_transupp.c
new file mode 100644
index 0000000..e77d15b
--- /dev/null
+++ b/baseline/source/cjpeg_transupp/cjpeg_transupp.c
@@ -0,0 +1,718 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: cjpeg_transupp
7
8 Author: Thomas G. Lane
9
10 Function: This file contains image transformation routines and other utility
11 code used by the jpegtran sample application. These are NOT part of the core
12 JPEG library. But we keep these routines separate from jpegtran.c to ease
13 the task of maintaining jpegtran-like programs that have other user
14 interfaces.
15
16 Source: MediaBench II
17 http://euler.slu.edu/~fritts/mediabench (mirror)
18
19 Original name: cjpeg
20
21 Changes: No major functional changes.
22
23 License: See the accompanying README file.
24
25*/
26
27
28/*
29 Include section
30*/
31
32#include "../extra.h"
33#include "jpeglib.h"
34
35
36/*
37 Forward declaration of functions
38*/
39
40void cjpeg_transupp_initSeed( void );
41signed char cjpeg_transupp_randomInteger( void );
42void cjpeg_transupp_init( void );
43int cjpeg_transupp_return( void );
44void cjpeg_transupp_do_flip_v( j_compress_ptr );
45void cjpeg_transupp_do_rot_90( j_compress_ptr );
46void cjpeg_transupp_do_rot_180( j_compress_ptr );
47void cjpeg_transupp_do_rot_270( j_compress_ptr );
48void cjpeg_transupp_do_transverse( j_compress_ptr );
49void cjpeg_transupp_main( void );
50//int main( void );
51
52
53/*
54 Declaration of global variables
55*/
56
57volatile int cjpeg_transupp_seed;
58
59signed char cjpeg_transupp_input[ 256 ];
60signed char cjpeg_transupp_input2[ 80 ];
61signed char cjpeg_transupp_input3[ 65 ];
62signed char cjpeg_transupp_input3_2[ 65 ];
63signed char cjpeg_transupp_input4[ 64 ];
64signed char cjpeg_transupp_input5[ 65 ];
65signed char cjpeg_transupp_input5_2[ 65 ];
66
67/* Output arrays replace writing of results into a file. */
68signed char cjpeg_transupp_output_data[ 512 ];
69signed char cjpeg_transupp_output_data2[ 512 ];
70signed char cjpeg_transupp_output_data3[ 512 ];
71signed char cjpeg_transupp_output_data4[ 512 ];
72signed char cjpeg_transupp_output_data5[ 512 ];
73
74struct jpeg_compress_struct cjpeg_transupp_dstinfo;
75
76
77/*
78 Initialization- and return-value-related functions
79*/
80
81void cjpeg_transupp_initSeed( void )
82{
83 cjpeg_transupp_seed = 0;
84}
85
86
87/*
88 cjpeg_transupp_RandomInteger generates random integers between -128 and 127.
89*/
90signed char cjpeg_transupp_randomInteger( void )
91{
92 cjpeg_transupp_seed = ( ( ( cjpeg_transupp_seed * 133 ) + 81 ) % 256 ) - 128;
93 return( cjpeg_transupp_seed );
94}
95
96
97void cjpeg_transupp_init( void )
98{
99 register int i;
100
101
102 cjpeg_transupp_dstinfo.max_h_samp_factor = 2;
103 cjpeg_transupp_dstinfo.max_v_samp_factor = 2;
104 cjpeg_transupp_dstinfo.num_components = 3;
105
106 cjpeg_transupp_initSeed();
107
108 _Pragma( "loopbound min 256 max 256" )
109 for ( i = 0; i < 256; i++ )
110 cjpeg_transupp_input[ i ] = cjpeg_transupp_randomInteger();
111
112 _Pragma( "loopbound min 80 max 80" )
113 for ( i = 0; i < 80; i++ )
114 cjpeg_transupp_input2[ i ] = cjpeg_transupp_randomInteger();
115
116 _Pragma( "loopbound min 65 max 65" )
117 for ( i = 0; i < 65; i++ )
118 cjpeg_transupp_input3[ i ] = cjpeg_transupp_randomInteger();
119
120 _Pragma( "loopbound min 65 max 65" )
121 for ( i = 0; i < 65; i++ )
122 cjpeg_transupp_input3_2[ i ] = cjpeg_transupp_randomInteger();
123
124 _Pragma( "loopbound min 64 max 64" )
125 for ( i = 0; i < 64; i++ )
126 cjpeg_transupp_input4[ i ] = cjpeg_transupp_randomInteger();
127
128 _Pragma( "loopbound min 65 max 65" )
129 for ( i = 0; i < 65; i++ )
130 cjpeg_transupp_input5[ i ] = cjpeg_transupp_randomInteger();
131
132 _Pragma( "loopbound min 65 max 65" )
133 for ( i = 0; i < 65; i++ )
134 cjpeg_transupp_input5_2[ i ] = cjpeg_transupp_randomInteger();
135}
136
137
138int cjpeg_transupp_return( void )
139{
140 int checksum = 0;
141 unsigned int i;
142
143
144 _Pragma( "loopbound min 512 max 512" )
145 for ( i = 0; i < 512; i++ )
146 checksum += cjpeg_transupp_output_data[ i ];
147
148 _Pragma( "loopbound min 512 max 512" )
149 for ( i = 0; i < 512; i++ )
150 checksum += cjpeg_transupp_output_data2[ i ];
151
152 _Pragma( "loopbound min 512 max 512" )
153 for ( i = 0; i < 512; i++ )
154 checksum += cjpeg_transupp_output_data3[ i ];
155
156 _Pragma( "loopbound min 512 max 512" )
157 for ( i = 0; i < 512; i++ )
158 checksum += cjpeg_transupp_output_data4[ i ];
159
160 _Pragma( "loopbound min 512 max 512" )
161 for ( i = 0; i < 512; i++ )
162 checksum += cjpeg_transupp_output_data5[ i ];
163
164 return( checksum );
165}
166
167
168/*
169 Algorithm core functions
170*/
171
172/*
173 Vertical flip
174*/
175void cjpeg_transupp_do_flip_v( j_compress_ptr dstinfo )
176{
177 unsigned int MCU_rows, comp_height, dst_blk_x, dst_blk_y;
178 int ci, i, j, offset_y;
179 JCOEFPTR src_ptr, dst_ptr;
180
181
182 /*
183 We output into a separate array because we can't touch different rows of the
184 source virtual array simultaneously. Otherwise, this is a pretty
185 straightforward analog of horizontal flip.
186 Within a DCT block, vertical mirroring is done by changing the signs of
187 odd-numbered rows.
188 Partial iMCUs at the bottom edge are copied verbatim.
189 */
190 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
191
192 int compptr_v_samp_factor = 8;
193 unsigned int compptr_height_in_blocks = 19;
194 unsigned int compptr_width_in_blocks = 29;
195
196 _Pragma( "loopbound min 3 max 3" )
197 for ( ci = 0; ci < dstinfo->num_components;
198 ci++, compptr_v_samp_factor = 1, compptr_width_in_blocks = 15 ) {
199 comp_height = MCU_rows * compptr_v_samp_factor;
200
201 compptr_height_in_blocks = 10;
202 _Pragma( "loopbound min 2 max 10" )
203 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
204 dst_blk_y += compptr_v_samp_factor ) {
205
206 _Pragma( "loopbound min 1 max 8" )
207 for ( offset_y = 0; offset_y < compptr_v_samp_factor; offset_y++ ) {
208 if ( dst_blk_y < comp_height ) {
209
210 /* Row is within the mirrorable area. */
211 _Pragma( "loopbound min 15 max 29" )
212 for ( dst_blk_x = 0; dst_blk_x < compptr_width_in_blocks;
213 dst_blk_x++ ) {
214
215 src_ptr = cjpeg_transupp_input;
216 dst_ptr = cjpeg_transupp_output_data;
217
218 _Pragma( "loopbound min 4 max 4" )
219 for ( i = 0; i < DCTSIZE; i += 2 ) {
220
221 /* copy even row */
222 j = 0;
223 _Pragma( "loopbound min 8 max 8" )
224 do {
225 if ( dst_blk_x < comp_height )
226 *dst_ptr++ = *src_ptr++;
227 j++;
228 } while ( j < DCTSIZE );
229
230 /* copy odd row with sign change */
231 j = 0;
232 _Pragma( "loopbound min 8 max 8" )
233 do {
234 if ( dst_blk_x < comp_height )
235 *dst_ptr++ = - *src_ptr++;
236 j++;
237 } while ( j < DCTSIZE );
238 }
239 }
240 }
241 }
242 }
243 }
244}
245
246
247/*
248 90 degree rotation is equivalent to
249 1. Transposing the image;
250 2. Horizontal mirroring.
251 These two steps are merged into a single processing routine.
252*/
253void cjpeg_transupp_do_rot_90( j_compress_ptr dstinfo )
254{
255 unsigned int MCU_cols, comp_width, dst_blk_x, dst_blk_y;
256 int ci, i, j, offset_x, offset_y;
257 JCOEFPTR src_ptr, dst_ptr;
258
259
260 /*
261 Because of the horizontal mirror step, we can't process partial iMCUs at the
262 (output) right edge properly. They just get transposed and not mirrored.
263 */
264 MCU_cols = dstinfo->image_width / ( dstinfo->max_h_samp_factor * DCTSIZE );
265
266 int compptr_h_samp_factor = 2;
267 int compptr_v_samp_factor = 8;
268 unsigned int compptr_height_in_blocks = 29;
269 unsigned int compptr_width_in_blocks = 19;
270
271
272 _Pragma( "loopbound min 3 max 3" )
273 for ( ci = 0; ci < dstinfo->num_components;
274 ci++, compptr_h_samp_factor = compptr_v_samp_factor = 1,
275 compptr_height_in_blocks = 15, compptr_width_in_blocks = 10 ) {
276
277 comp_width = MCU_cols * compptr_h_samp_factor;
278
279 _Pragma( "loopbound min 4 max 15" )
280 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
281 dst_blk_y += compptr_v_samp_factor ) {
282
283 offset_y = 0;
284 _Pragma( "loopbound min 1 max 8" )
285 for ( ; offset_y < compptr_v_samp_factor; offset_y++ ) {
286 dst_blk_x = 0;
287 _Pragma( "loopbound min 10 max 10" )
288 for ( ; dst_blk_x < compptr_width_in_blocks;
289 dst_blk_x += compptr_h_samp_factor ) {
290
291 offset_x = 0;
292 _Pragma( "loopbound min 1 max 2" )
293 for ( ; offset_x < compptr_h_samp_factor; offset_x++ ) {
294
295 src_ptr = cjpeg_transupp_input2;
296
297 if ( dst_blk_x < comp_width ) {
298
299 /* Block is within the mirrorable area. */
300 dst_ptr = cjpeg_transupp_output_data2;
301
302 _Pragma( "loopbound min 4 max 4" )
303 for ( i = 0; i < DCTSIZE; i++ ) {
304 j = 0;
305 _Pragma( "loopbound min 8 max 8" )
306 for ( ; j < DCTSIZE; j++ )
307 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
308
309 i++;
310
311 _Pragma( "loopbound min 8 max 8" )
312 for ( j = 0; j < DCTSIZE; j++ )
313 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
314 }
315 } else {
316 /* Edge blocks are transposed but not mirrored. */
317 dst_ptr = cjpeg_transupp_output_data2;
318
319 _Pragma( "loopbound min 8 max 8" )
320 for ( i = 0; i < DCTSIZE; i++ )
321 j = 0;
322 _Pragma( "loopbound min 8 max 8" )
323 for ( ; j < DCTSIZE; j++ ) {
324 if ( dst_blk_y < comp_width )
325 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
326 }
327 }
328 }
329 }
330 }
331 }
332 }
333}
334
335
336/*
337 270 degree rotation is equivalent to
338 1. Horizontal mirroring;
339 2. Transposing the image.
340 These two steps are merged into a single processing routine.
341*/
342void cjpeg_transupp_do_rot_270( j_compress_ptr dstinfo )
343{
344 unsigned int MCU_rows, comp_height, dst_blk_x, dst_blk_y;
345 int ci, i, j, offset_x, offset_y;
346 JCOEFPTR src_ptr, dst_ptr;
347
348
349 /*
350 Because of the horizontal mirror step, we can't process partial iMCUs at the
351 (output) bottom edge properly. They just get transposed and not mirrored.
352 */
353 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
354
355 int compptr_h_samp_factor = 2;
356 int compptr_v_samp_factor = 8;
357 unsigned int compptr_height_in_blocks = 29;
358 unsigned int compptr_width_in_blocks = 19;
359
360 _Pragma( "loopbound min 3 max 3" )
361 for ( ci = 0; ci < dstinfo->num_components;
362 ci++, compptr_h_samp_factor = compptr_v_samp_factor = 1,
363 compptr_height_in_blocks = 15, compptr_width_in_blocks = 10 ) {
364
365 comp_height = MCU_rows * compptr_v_samp_factor;
366
367 _Pragma( "loopbound min 4 max 15" )
368 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
369 dst_blk_y += compptr_v_samp_factor ) {
370
371 offset_y = 0;
372 _Pragma( "loopbound min 1 max 8" )
373 for ( ; offset_y < compptr_v_samp_factor; offset_y++ ) {
374 dst_blk_x = 0;
375 _Pragma( "loopbound min 10 max 10" )
376 for ( ; dst_blk_x < compptr_width_in_blocks;
377 dst_blk_x += compptr_h_samp_factor ) {
378
379 offset_x = 0;
380 _Pragma( "loopbound min 1 max 2" )
381 for ( ; offset_x < compptr_h_samp_factor; offset_x++ ) {
382
383 dst_ptr = cjpeg_transupp_output_data3;
384
385 if ( dst_blk_y < comp_height ) {
386
387 /* Block is within the mirrorable area. */
388 src_ptr = cjpeg_transupp_input3;
389
390 _Pragma( "loopbound min 8 max 8" )
391 for ( i = 0; i < DCTSIZE; i++ ) {
392 j = 0;
393 _Pragma( "loopbound min 4 max 4" )
394 for ( ; j < DCTSIZE; j++ ) {
395 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
396 j++;
397 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
398 }
399 }
400 } else {
401
402 /* Edge blocks are transposed but not mirrored. */
403 src_ptr = cjpeg_transupp_input3_2;
404
405 _Pragma( "loopbound min 8 max 8" )
406 for ( i = 0; i < DCTSIZE; i++ )
407 j = 0;
408 _Pragma( "loopbound min 8 max 8" )
409 for ( ; j < DCTSIZE; j++ ) {
410 if ( dst_blk_y < comp_height )
411 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
412 }
413 }
414 }
415 }
416 }
417 }
418 }
419}
420
421
422/*
423 180 degree rotation is equivalent to
424 1. Vertical mirroring;
425 2. Horizontal mirroring.
426 These two steps are merged into a single processing routine.
427*/
428void cjpeg_transupp_do_rot_180( j_compress_ptr dstinfo )
429{
430 unsigned int MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x,
431 dst_blk_y;
432 int ci, i, j, offset_y;
433 JCOEFPTR src_ptr, dst_ptr;
434
435 int compptr_h_samp_factor = 2;
436 int compptr_v_samp_factor = 8;
437 unsigned int compptr_width_in_blocks = 29;
438 unsigned int compptr_height_in_blocks = 19;
439
440
441 MCU_cols = dstinfo->image_width / ( dstinfo->max_h_samp_factor * DCTSIZE );
442 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
443
444 _Pragma( "loopbound min 3 max 3" )
445 for ( ci = 0; ci < dstinfo->num_components; ci++,
446 compptr_h_samp_factor = compptr_v_samp_factor = 1,
447 compptr_width_in_blocks = 15, compptr_height_in_blocks = 10 ) {
448
449 comp_width = MCU_cols * compptr_h_samp_factor;
450 comp_height = MCU_rows * compptr_v_samp_factor;
451
452 _Pragma( "loopbound min 3 max 10" )
453 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
454 dst_blk_y += compptr_v_samp_factor ) {
455 offset_y = 0;
456 _Pragma( "loopbound min 1 max 8" )
457 for ( ; offset_y < compptr_v_samp_factor; offset_y++ ) {
458 if ( dst_blk_y < comp_height ) {
459
460 /* Row is within the mirrorable area. */
461
462 /* Process the blocks that can be mirrored both ways. */
463 _Pragma( "loopbound min 14 max 28" )
464 for ( dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++ ) {
465 dst_ptr = cjpeg_transupp_output_data4;
466 src_ptr = cjpeg_transupp_input4;
467
468 _Pragma( "loopbound min 4 max 4" )
469 for ( i = 0; i < DCTSIZE; i += 2 ) {
470 j = 0;
471 /* For even row, negate every odd column. */
472 _Pragma( "loopbound min 4 max 4" )
473 for ( ; j < DCTSIZE; j += 2 ) {
474 if ( dst_blk_x < comp_height ) {
475 *dst_ptr++ = *src_ptr++;
476 *dst_ptr++ = - *src_ptr++;
477 }
478 }
479
480 j = 0;
481 /* For odd row, negate every even column. */
482 _Pragma( "loopbound min 4 max 4" )
483 for ( ; j < DCTSIZE; j += 2 ) {
484 if ( dst_blk_x < comp_height ) {
485 *dst_ptr++ = - *src_ptr++;
486 *dst_ptr++ = *src_ptr++;
487 }
488 }
489 }
490 }
491
492 /* Any remaining right-edge blocks are only mirrored vertically. */
493 _Pragma( "loopbound min 1 max 1" )
494 for ( ; dst_blk_x < compptr_width_in_blocks; dst_blk_x++ ) {
495
496 dst_ptr = cjpeg_transupp_output_data4;
497 src_ptr = cjpeg_transupp_input4;
498 _Pragma( "loopbound min 4 max 4" )
499 for ( i = 0; i < DCTSIZE; i += 2 ) {
500 j = 0;
501 _Pragma( "loopbound min 8 max 8" )
502 for ( ; j < DCTSIZE; j++ )
503 *dst_ptr++ = *src_ptr++;
504 j = 0;
505 _Pragma( "loopbound min 8 max 8" )
506 for ( ; j < DCTSIZE; j++ )
507 *dst_ptr++ = - *src_ptr++;
508 }
509 }
510 } else {
511
512 /* Remaining rows are just mirrored horizontally. */
513 dst_blk_x = 0;
514 /* Process the blocks that can be mirrored. */
515 _Pragma( "loopbound min 14 max 28" )
516 do {
517 dst_ptr = cjpeg_transupp_output_data4;
518 src_ptr = cjpeg_transupp_input4;
519
520 i = 0;
521 _Pragma( "loopbound min 32 max 32" )
522 while ( i < DCTSIZE2 ) {
523 *dst_ptr++ = *src_ptr++;
524 *dst_ptr++ = - *src_ptr++;
525 i += 2;
526 dst_ptr += 0;
527 }
528 dst_blk_x++;
529 dst_ptr += 0;
530 } while ( dst_blk_x < comp_width );
531
532 /* Any remaining right-edge blocks are only copied. */
533 _Pragma( "loopbound min 1 max 1" )
534 for ( ; dst_blk_x < compptr_width_in_blocks; dst_blk_x++ ) {
535
536 dst_ptr = cjpeg_transupp_output_data4;
537 src_ptr = cjpeg_transupp_input4;
538 _Pragma( "loopbound min 64 max 64" )
539 do {
540 *dst_ptr++ = *src_ptr++;
541 i++;
542 } while ( i < DCTSIZE2 );
543 }
544 }
545 }
546 }
547 }
548}
549
550
551/*
552 Transverse transpose is equivalent to
553 1. 180 degree rotation;
554 2. Transposition;
555 or
556 1. Horizontal mirroring;
557 2. Transposition;
558 3. Horizontal mirroring.
559 These steps are merged into a single processing routine.
560*/
561void cjpeg_transupp_do_transverse( j_compress_ptr dstinfo )
562{
563 unsigned int MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x,
564 dst_blk_y;
565 int ci, i, j, offset_x, offset_y;
566 JCOEFPTR src_ptr, dst_ptr;
567
568 int compptr_h_samp_factor = 2;
569 int compptr_v_samp_factor = 8;
570 unsigned int compptr_height_in_blocks = 29;
571 unsigned int compptr_width_in_blocks = 19;
572
573
574 MCU_cols = dstinfo->image_width / ( dstinfo->max_h_samp_factor * DCTSIZE );
575 MCU_rows = dstinfo->image_height / ( dstinfo->max_v_samp_factor * DCTSIZE );
576
577 _Pragma( "loopbound min 3 max 3" )
578 for ( ci = 0; ci < dstinfo->num_components; ci++,
579 compptr_h_samp_factor = compptr_v_samp_factor = 1,
580 compptr_height_in_blocks = 15, compptr_width_in_blocks = 10 ) {
581
582 comp_width = MCU_cols * compptr_h_samp_factor;
583 comp_height = MCU_rows * compptr_v_samp_factor;
584
585 _Pragma( "loopbound min 4 max 15" )
586 for ( dst_blk_y = 0; dst_blk_y < compptr_height_in_blocks;
587 dst_blk_y += compptr_v_samp_factor ) {
588 offset_y = 0;
589 _Pragma( "loopbound min 1 max 8" )
590 do {
591 dst_blk_x = 0;
592 _Pragma( "loopbound min 10 max 10" )
593 do {
594 offset_x = 0;
595 _Pragma( "loopbound min 1 max 2" )
596 for ( ; offset_x < compptr_h_samp_factor; offset_x++ ) {
597
598 if ( dst_blk_y < comp_height ) {
599 src_ptr = cjpeg_transupp_input5;
600
601 if ( dst_blk_x < comp_width ) {
602 /* Block is within the mirrorable area. */
603 dst_ptr = cjpeg_transupp_output_data5;
604
605 _Pragma( "loopbound min 4 max 4" )
606 for ( i = 0; i < DCTSIZE; i++ ) {
607 j = 0;
608 _Pragma( "loopbound min 4 max 4" )
609 for ( ; j < DCTSIZE; j++ ) {
610 if ( dst_blk_y < comp_width )
611 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
612 j++;
613 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
614 }
615 i++;
616 _Pragma( "loopbound min 4 max 4" )
617 for ( j = 0; j < DCTSIZE; j++ ) {
618 if ( dst_blk_y < comp_width )
619 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
620 j++;
621 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
622 }
623 }
624 } else {
625 /* Right-edge blocks are mirrored in y only */
626 dst_ptr = cjpeg_transupp_output_data5;
627 _Pragma( "loopbound min 8 max 8" )
628 for ( i = 0; i < DCTSIZE; i++ ) {
629 j = 0;
630 _Pragma( "loopbound min 4 max 4" )
631 for ( ; j < DCTSIZE; j++ ) {
632 if ( dst_blk_y < comp_width )
633 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
634 j++;
635 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
636 }
637 }
638 }
639 } else {
640 src_ptr = cjpeg_transupp_input5_2;
641
642 if ( dst_blk_x < comp_width ) {
643 /* Bottom-edge blocks are mirrored in x only */
644 dst_ptr = cjpeg_transupp_output_data5;
645
646 _Pragma( "loopbound min 4 max 4" )
647 for ( i = 0; i < DCTSIZE; i++ ) {
648 j = 0;
649 _Pragma( "loopbound min 8 max 8" )
650 for ( ; j < DCTSIZE; j++ )
651 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
652 i++;
653 _Pragma( "loopbound min 8 max 8" )
654 for ( j = 0; j < DCTSIZE; j++ )
655 dst_ptr[ j * DCTSIZE + i ] = -src_ptr[ i * DCTSIZE + j ];
656 }
657 } else {
658 /* At lower right corner, just transpose, no mirroring */
659 dst_ptr = cjpeg_transupp_output_data5;
660 _Pragma( "loopbound min 8 max 8" )
661 for ( i = 0; i < DCTSIZE; i++ )
662 j = 0;
663 _Pragma( "loopbound min 8 max 8" )
664 for ( ; j < DCTSIZE; j++ )
665 dst_ptr[ j * DCTSIZE + i ] = src_ptr[ i * DCTSIZE + j ];
666 }
667 }
668 dst_blk_x += compptr_h_samp_factor;
669 }
670 } while ( dst_blk_x < compptr_width_in_blocks );
671 offset_y++;
672 } while ( offset_y < compptr_v_samp_factor );
673 }
674 }
675}
676
677
678/*
679 Main functions
680*/
681
682void _Pragma ( "entrypoint" ) cjpeg_transupp_main( void )
683{
684 cjpeg_transupp_dstinfo.image_width = 227;
685 cjpeg_transupp_dstinfo.image_height = 149;
686
687 cjpeg_transupp_do_flip_v( &cjpeg_transupp_dstinfo );
688
689 cjpeg_transupp_dstinfo.image_width = 149;
690 cjpeg_transupp_dstinfo.image_height = 227;
691
692 cjpeg_transupp_do_rot_90( &cjpeg_transupp_dstinfo );
693 cjpeg_transupp_do_rot_270( &cjpeg_transupp_dstinfo );
694
695 cjpeg_transupp_dstinfo.image_width = 227;
696 cjpeg_transupp_dstinfo.image_height = 149;
697
698 cjpeg_transupp_do_rot_180( &cjpeg_transupp_dstinfo );
699
700 cjpeg_transupp_dstinfo.image_width = 149;
701 cjpeg_transupp_dstinfo.image_height = 227;
702
703 cjpeg_transupp_do_transverse( &cjpeg_transupp_dstinfo );
704}
705
706
707int main(int argc, char **argv)
708{
709 SET_UP
710 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
711 START_LOOP
712 cjpeg_transupp_init();
713 cjpeg_transupp_main();
714 STOP_LOOP
715 }
716 WRITE_TO_FILE
717 return ( cjpeg_transupp_return() - 660 != 0 );
718}
diff --git a/baseline/source/cjpeg_transupp/jpeglib.h b/baseline/source/cjpeg_transupp/jpeglib.h
new file mode 100644
index 0000000..bb4c940
--- /dev/null
+++ b/baseline/source/cjpeg_transupp/jpeglib.h
@@ -0,0 +1,757 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: jpeglib
7
8 Author: Thomas G. Lane
9
10 Function: This file defines the application interface for the JPEG library.
11 Most applications using the library need only include this file, and perhaps
12 jerror.h if they want to know the exact error codes.
13
14 Source: MediaBench II
15 http://euler.slu.edu/~fritts/mediabench (mirror)
16
17 Original name: cjpeg
18
19 Changes: No major functional changes.
20
21 License: See the accompanying README file.
22
23*/
24
25
26#ifndef JPEGLIB_H
27#define JPEGLIB_H
28
29/*
30 Various constants determining the sizes of things.
31 All of these are specified by the JPEG standard, so don't change them if you
32 want to be compatible.
33*/
34
35/* The basic DCT block is 8x8 samples */
36#define DCTSIZE 8
37
38/* DCTSIZE squared; # of elements in a block */
39#define DCTSIZE2 64
40
41
42/*
43 Data structures for images (arrays of samples and of DCT coefficients).
44 On 80x86 machines, the image arrays are too big for near pointers, but the
45 pointer arrays can fit in near memory.
46*/
47
48/* ptr to one image row of pixel samples. */
49typedef unsigned char *JSAMPROW;
50
51/* ptr to some rows (a 2-D sample array) */
52typedef JSAMPROW *JSAMPARRAY;
53
54/* one block of coefficients */
55typedef signed char JBLOCK[DCTSIZE2];
56
57/* pointer to one row of coefficient blocks */
58typedef JBLOCK *JBLOCKROW;
59
60/* a 2-D array of coefficient blocks */
61typedef JBLOCKROW *JBLOCKARRAY;
62
63/* useful in a couple of places */
64typedef signed char *JCOEFPTR;
65
66
67/*
68 DCT coefficient quantization tables.
69*/
70
71typedef struct {
72 /* quantization step for each coefficient */
73 /*
74 This array gives the coefficient quantizers in natural array order (not the
75 zigzag order in which they are stored in a JPEG DQT marker).
76 CAUTION: IJG versions prior to v6a kept this array in zigzag order.
77 */
78 unsigned short quantval[ DCTSIZE2 ];
79
80 /* 1 when table has been output */
81 /*
82 This field is used only during compression. It's initialized 0 when the
83 table is created, and set 1 when it's been output to the file. You could
84 suppress output of a table by setting this to 1. (See jpeg_suppress_tables
85 for an example.)
86 */
87 int sent_table;
88} JQUANT_TBL;
89
90
91/*
92 Huffman coding tables.
93*/
94
95typedef struct {
96 /* These two fields directly represent the contents of a JPEG DHT marker */
97
98 /* bits[k] = # of symbols with codes of */
99 /* length k bits; bits[0] is unused */
100 unsigned char bits[ 17 ];
101
102 /* The symbols, in order of incr code length */
103 /*
104 This field is used only during compression. It's initialized 0 when the
105 table is created, and set 1 when it's been output to the file. You could
106 suppress output of a table by setting this to 1. (See jpeg_suppress_tables
107 for an example.)
108 */
109 unsigned char huffval[ 256 ];
110
111 /* 1 when table has been output */
112 int sent_table;
113} JHUFF_TBL;
114
115
116/*
117 Basic info about one component (color channel).
118*/
119
120typedef struct {
121 /*
122 These values are fixed over the whole image. For compression, they must be
123 supplied by parameter setup; for decompression, they are read from the SOF
124 marker.
125 */
126
127 /* identifier for this component (0..255) */
128 int component_id;
129
130 /* its index in SOF or cinfo->comp_info[] */
131 int component_index;
132
133 /* horizontal sampling factor (1..4) */
134 int h_samp_factor;
135
136 /* vertical sampling factor (1..4) */
137 int v_samp_factor;
138
139 /* quantization table selector (0..3) */
140 int quant_tbl_no;
141
142 /*
143 These values may vary between scans. For compression, they must be supplied
144 by parameter setup; for decompression, they are read from the SOS marker.
145 The decompressor output side may not use these variables.
146 */
147
148 /* DC entropy table selector (0..3) */
149 int dc_tbl_no;
150
151 /* AC entropy table selector (0..3) */
152 int ac_tbl_no;
153
154 /* Remaining fields should be treated as private by applications. */
155
156 /*
157 These values are computed during compression or decompression startup:
158 Component's size in DCT blocks. Any dummy blocks added to complete an MCU
159 are not counted; therefore these values do not depend on whether a scan is
160 interleaved or not.
161 */
162 unsigned int width_in_blocks;
163 unsigned int height_in_blocks;
164
165 /*
166 Size of a DCT block in samples. Always DCTSIZE for compression. For
167 decompression this is the size of the output from one DCT block, reflecting
168 any scaling we choose to apply during the IDCT step. Values of 1,2,4,8 are
169 likely to be supported. Note that different components may receive different
170 IDCT scalings.
171 */
172 int DCT_scaled_size;
173
174 /*
175 The downsampled dimensions are the component's actual, unpadded number of
176 samples at the main buffer (preprocessing/compression interface), thus
177 downsampled_width = ceil(image_width * Hi/Hmax) and similarly for height.
178 For decompression, IDCT scaling is included, so
179 downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
180 */
181
182 /* actual width in samples */
183 unsigned int downsampled_width;
184
185 /* actual height in samples */
186 unsigned int downsampled_height;
187
188 /*
189 This flag is used only for decompression. In cases where some of the
190 components will be ignored (eg grayscale output from YCbCr image), we can
191 skip most computations for the unused components.
192 */
193
194 /* do we need the value of this component? */
195 int component_needed;
196
197 /*
198 These values are computed before starting a scan of the component. The
199 decompressor output side may not use these variables.
200 */
201
202 /* number of blocks per MCU, horizontally */
203 int MCU_width;
204
205 /* number of blocks per MCU, vertically */
206 int MCU_height;
207
208 /* MCU_width * MCU_height */
209 int MCU_blocks;
210
211 /* MCU width in samples, MCU_width*DCT_scaled_size */
212 int MCU_sample_width;
213
214 /* # of non-dummy blocks across in last MCU */
215 int last_col_width;
216
217 /* # of non-dummy blocks down in last MCU */
218 int last_row_height;
219
220 /*
221 Saved quantization table for component; (void*)0 if none yet saved. See
222 jdinput.c comments about the need for this information. This field is
223 currently used only for decompression.
224 */
225 JQUANT_TBL *quant_table;
226
227 /* Private per-component storage for DCT or IDCT subsystem. */
228 void *dct_table;
229} jpeg_component_info;
230
231
232/*
233 The script for encoding a multiple-scan file is an array of these:
234*/
235
236typedef struct {
237 /* number of components encoded in this scan */
238 int comps_in_scan;
239
240 /* their SOF/comp_info[] indexes */
241 int component_index[ 4 ];
242
243 /* progressive JPEG spectral selection parms */
244 int Ss, Se;
245
246 /* progressive JPEG successive approx. parms */
247 int Ah, Al;
248} jpeg_scan_info;
249
250
251/*
252 Known color spaces.
253*/
254
255typedef enum {
256 /* error/unspecified */
257 JCS_UNKNOWN,
258
259 /* monochrome */
260 JCS_GRAYSCALE,
261
262 /* red/green/blue */
263 JCS_RGB,
264
265 /* Y/Cb/Cr (also known as YUV) */
266 JCS_YCbCr,
267
268 /* C/M/Y/K */
269 JCS_CMYK,
270
271 /* Y/Cb/Cr/K */
272 JCS_YCCK
273} J_COLOR_SPACE;
274
275
276/*
277 DCT/IDCT algorithm options.
278*/
279
280typedef enum {
281 /* slow but accurate integer algorithm */
282 JDCT_ISLOW,
283
284 /* faster, less accurate integer method */
285 JDCT_IFAST,
286
287 /* floating-point: accurate, fast on fast HW */
288 JDCT_FLOAT
289} J_DCT_METHOD;
290
291
292/*
293 Common fields between JPEG compression and decompression master structs.
294*/
295
296#define jpeg_common_fields \
297 /* Error handler module */\
298 struct jpeg_error_mgr *err; \
299 /* Memory manager module */\
300 struct jpeg_memory_mgr *mem; \
301 /* Progress monitor, or (void*)0 if none */\
302 struct jpeg_progress_mgr *progress; \
303 /* Available for use by application */\
304 void *client_data; \
305 /* So common code can tell which is which */\
306 int is_decompressor; \
307 /* For checking call sequence validity */\
308 int global_state
309
310
311/*
312 Routines that are to be used by both halves of the library are declared to
313 receive a pointer to this structure. There are no actual instances of
314 jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
315*/
316
317struct jpeg_common_struct {
318 /* Fields common to both master struct types */
319 jpeg_common_fields;
320
321 /*
322 Additional fields follow in an actual jpeg_compress_struct or
323 jpeg_decompress_struct. All three structs must agree on these initial
324 fields! (This would be a lot cleaner in C++.)
325 */
326};
327
328typedef struct jpeg_common_struct *j_common_ptr;
329typedef struct jpeg_compress_struct *j_compress_ptr;
330typedef struct jpeg_decompress_struct *j_decompress_ptr;
331
332
333/*
334 Master record for a compression instance
335*/
336
337struct jpeg_compress_struct {
338 /* Fields shared with jpeg_decompress_struct */
339 jpeg_common_fields;
340
341 /* Destination for compressed data */
342 struct jpeg_destination_mgr *dest;
343
344 /*
345 Description of source image --- these fields must be filled in by outer
346 application before starting compression. in_color_space must be correct
347 before you can even call jpeg_set_defaults().
348 */
349
350 /* input image width */
351 unsigned int image_width;
352
353 /* input image height */
354 unsigned int image_height;
355
356 /* # of color components in input image */
357 int input_components;
358
359 /* colorspace of input image */
360 J_COLOR_SPACE in_color_space;
361
362 /* image gamma of input image */
363 double input_gamma;
364
365 /*
366 Compression parameters --- these fields must be set before calling
367 jpeg_start_compress(). We recommend calling jpeg_set_defaults() to
368 initialize everything to reasonable defaults, then changing anything the
369 application specifically wants to change. That way you won't get burnt when
370 new parameters are added. Also note that there are several helper routines
371 to simplify changing parameters.
372 */
373
374 /* bits of precision in image data */
375 int data_precision;
376
377 /* # of color components in JPEG image */
378 int num_components;
379
380 /* colorspace of JPEG image */
381 J_COLOR_SPACE jpeg_color_space;
382
383 /* comp_info[i] describes component that appears i'th in SOF */
384 jpeg_component_info *comp_info;
385
386 /* ptrs to coefficient quantization tables, or (void*)0 if not defined */
387 JQUANT_TBL *quant_tbl_ptrs[ 4 ];
388
389 /* ptrs to Huffman coding tables, or (void*)0 if not defined */
390 JHUFF_TBL *dc_huff_tbl_ptrs[ 4 ];
391 JHUFF_TBL *ac_huff_tbl_ptrs[ 4 ];
392
393 /* L values for DC arith-coding tables */
394 unsigned char arith_dc_L[ 16 ];
395
396 /* U values for DC arith-coding tables */
397 unsigned char arith_dc_U[ 16 ];
398
399 /* Kx values for AC arith-coding tables */
400 unsigned char arith_ac_K[ 16 ];
401
402 /* # of entries in scan_info array */
403 int num_scans;
404
405 /*
406 script for multi-scan file, or (void*)0
407 The default value of scan_info is (void*)0, which causes a single-scan
408 sequential JPEG file to be emitted. To create a multi-scan file, set
409 num_scans and scan_info to point to an array of scan definitions.
410 */
411 const jpeg_scan_info *scan_info;
412
413 /* 1=caller supplies downsampled data */
414 int raw_data_in;
415
416 /* 1=arithmetic coding, 0=Huffman */
417 int arith_code;
418
419 /* 1=optimize entropy encoding parms */
420 int optimize_coding;
421
422 /* 1=first samples are cosited */
423 int CCIR601_sampling;
424
425 /* 1..100, or 0 for no input smoothing */
426 int smoothing_factor;
427
428 /* DCT algorithm selector */
429 J_DCT_METHOD dct_method;
430
431
432 /*
433 The restart interval can be specified in absolute MCUs by setting
434 restart_interval, or in MCU rows by setting restart_in_rows (in which case
435 the correct restart_interval will be figured for each scan).
436 */
437
438 /* MCUs per restart, or 0 for no restart */
439 unsigned int restart_interval;
440
441 /* if > 0, MCU rows per restart interval */
442 int restart_in_rows;
443
444
445 /*
446 Parameters controlling emission of special markers.
447 */
448
449 /* should a JFIF marker be written? */
450 int write_JFIF_header;
451
452 /* What to write for the JFIF version number */
453 unsigned char JFIF_major_version;
454 unsigned char JFIF_minor_version;
455
456 /*
457 These three values are not used by the JPEG code, merely copied into the
458 JFIF APP0 marker. density_unit can be 0 for unknown, 1 for dots/inch, or 2
459 for dots/cm. Note that the pixel aspect ratio is defined by
460 X_density/Y_density even when density_unit=0.
461 */
462
463 /* JFIF code for pixel size units */
464 unsigned char density_unit;
465
466 /* Horizontal pixel density */
467 unsigned short X_density;
468
469 /* Vertical pixel density */
470 unsigned short Y_density;
471
472 /* should an Adobe marker be written? */
473 int write_Adobe_marker;
474
475 /*
476 State variable: index of next scanline to be written to
477 jpeg_write_scanlines(). Application may use this to control its processing
478 loop, e.g., "while (next_scanline < image_height)".
479 */
480
481 /* 0 .. image_height-1 */
482 unsigned int next_scanline;
483
484
485 /*
486 Remaining fields are known throughout compressor, but generally should not
487 be touched by a surrounding application.
488 */
489
490 /*
491 These fields are computed during compression startup
492 */
493
494 /* 1 if scan script uses progressive mode */
495 int progressive_mode;
496
497 /* largest h_samp_factor */
498 int max_h_samp_factor;
499
500 /* largest v_samp_factor */
501 int max_v_samp_factor;
502
503 /*
504 # of iMCU rows to be input to coef ctlr
505 The coefficient controller receives data in units of MCU rows as defined for
506 fully interleaved scans (whether the JPEG file is interleaved or not). There
507 are v_samp_factor * DCTSIZE sample rows of each component in an "iMCU"
508 (interleaved MCU) row.
509 */
510 unsigned int total_iMCU_rows;
511
512 /*
513 These fields are valid during any one scan. They describe the components
514 and MCUs actually appearing in the scan.
515 */
516
517 /* # of JPEG components in this scan */
518 int comps_in_scan;
519
520 /* *cur_comp_info[i] describes component that appears i'th in SOS */
521 jpeg_component_info *cur_comp_info[ 4 ];
522
523 /* # of MCUs across the image */
524 unsigned int MCUs_per_row;
525
526 /* # of MCU rows in the image */
527 unsigned int MCU_rows_in_scan;
528
529 /* # of DCT blocks per MCU */
530 int blocks_in_MCU;
531
532 /*
533 MCU_membership[i] is index in cur_comp_info of component owning i'th block
534 in an MCU
535 */
536 int MCU_membership[ 10 ];
537
538 /* progressive JPEG parameters for scan */
539 int Ss, Se, Ah, Al;
540
541 /*
542 Links to compression subobjects (methods and private variables of modules)
543 */
544
545 struct jpeg_comp_master *master;
546 struct jpeg_c_main_controller *main;
547 struct jpeg_c_prep_controller *prep;
548 struct jpeg_c_coef_controller *coef;
549 struct jpeg_marker_writer *marker;
550 struct jpeg_color_converter *cconvert;
551 struct jpeg_downsampler *downsample;
552 struct jpeg_forward_dct *fdct;
553 struct jpeg_entropy_encoder *entropy;
554
555 /* workspace for jpeg_simple_progression */
556 jpeg_scan_info *script_space;
557
558 int script_space_size;
559};
560
561
562/*
563 "Object" declarations for JPEG modules that may be supplied or called directly
564 by the surrounding application. As with all objects in the JPEG library, these
565 structs only define the publicly visible methods and state variables of a
566 module. Additional private fields may exist after the public ones.
567*/
568
569/*
570 Error handler object
571*/
572
573struct jpeg_error_mgr {
574 /* Error exit handler: does not return to caller */
575 void ( *error_exit ) ( j_common_ptr cinfo );
576
577 /* Conditionally emit a trace or warning message */
578 void ( *emit_message ) ( j_common_ptr cinfo, int msg_level );
579
580 /* Routine that actually outputs a trace or error message */
581 void ( *output_message ) ( j_common_ptr cinfo );
582
583 /* Format a message string for the most recent JPEG error or message */
584 void ( *format_message ) ( j_common_ptr cinfo, char *buffer );
585
586 /* Reset error state variables at start of a new image */
587 void ( *reset_error_mgr ) ( j_common_ptr cinfo );
588
589 /*
590 The message ID code and any parameters are saved here. A message can have
591 one string parameter or up to 8 int parameters.
592 */
593 int msg_code;
594
595 union {
596 int i[ 8 ];
597 char s[ 80 ];
598 } msg_parm;
599
600
601 /*
602 Standard state variables for error facility
603 */
604
605 /* max msg_level that will be displayed */
606 int trace_level;
607
608 /*
609 For recoverable corrupt-data errors, we emit a warning message, but keep
610 going unless emit_message chooses to abort. emit_message should count
611 warnings in num_warnings. The surrounding application can check for bad data
612 by seeing if num_warnings is nonzero at the end of processing.
613 */
614
615 /* number of corrupt-data warnings */
616 long num_warnings;
617
618 /*
619 These fields point to the table(s) of error message strings. An application
620 can change the table pointer to switch to a different message list
621 (typically, to change the language in which errors are reported). Some
622 applications may wish to add additional error codes that will be handled by
623 the JPEG library error mechanism; the second table pointer is used for this
624 purpose.
625
626 First table includes all errors generated by JPEG library itself. Error
627 code 0 is reserved for a "no such error string" message.
628 */
629
630 /* Library errors */
631 const char *const *jpeg_message_table;
632
633 /* Table contains strings 0..last_jpeg_message */
634 int last_jpeg_message;
635
636 /*
637 Second table can be added by application (see cjpeg/djpeg for example). It
638 contains strings numbered first_addon_message..last_addon_message.
639 */
640
641 /* Non-library errors */
642 const char *const *addon_message_table;
643
644 /* code for first string in addon table */
645 int first_addon_message;
646
647 /* code for last string in addon table */
648 int last_addon_message;
649};
650
651
652/*
653 Progress monitor object
654*/
655
656struct jpeg_progress_mgr {
657 void ( *progress_monitor ) ( j_common_ptr cinfo );
658
659 /* work units completed in this pass */
660 long pass_counter;
661
662 /* total number of work units in this pass */
663 long pass_limit;
664
665 /* passes completed so far */
666 int completed_passes;
667
668 /* total number of passes expected */
669 int total_passes;
670};
671
672
673/*
674 Data destination object for compression
675*/
676
677struct jpeg_destination_mgr {
678 /* => next byte to write in buffer */
679 unsigned char *next_output_byte;
680
681 /* # of byte spaces remaining in buffer */
682 long unsigned int free_in_buffer;
683
684 void ( *init_destination ) ( j_compress_ptr cinfo );
685 int ( *empty_output_buffer ) ( j_compress_ptr cinfo );
686 void ( *term_destination ) ( j_compress_ptr cinfo );
687};
688
689
690/*
691 Memory manager object.
692 Allocates "small" objects (a few K total), "large" objects (tens of K), and
693 "really big" objects (virtual arrays with backing store if needed). The memory
694 manager does not allow individual objects to be freed; rather, each created
695 object is assigned to a pool, and whole pools can be freed at once. This is
696 faster and more convenient than remembering exactly what to free, especially
697 where malloc()/free() are not too speedy.
698 NB: alloc routines never return (void*)0. They exit to error_exit if not
699 successful.
700*/
701
702typedef struct jvirt_sarray_control *jvirt_sarray_ptr;
703typedef struct jvirt_barray_control *jvirt_barray_ptr;
704
705struct jpeg_memory_mgr {
706 /*
707 Method pointers
708 */
709 void *( *alloc_small ) (
710 j_common_ptr cinfo, int pool_id, long unsigned int sizeofobject );
711
712 void *( *alloc_large ) (
713 j_common_ptr cinfo, int pool_id, long unsigned int sizeofobject );
714
715 JSAMPARRAY ( *alloc_sarray ) (
716 j_common_ptr cinfo, int pool_id, unsigned int samplesperrow,
717 unsigned int numrows );
718
719 JBLOCKARRAY ( *alloc_barray )(
720 j_common_ptr cinfo, int pool_id, unsigned int blocksperrow,
721 unsigned int numrows );
722
723 jvirt_sarray_ptr ( *request_virt_sarray ) (
724 j_common_ptr cinfo, int pool_id, int pre_zero, unsigned int samplesperrow,
725 unsigned int numrows, unsigned int maxaccess );
726
727 jvirt_barray_ptr ( *request_virt_barray ) (
728 j_common_ptr cinfo, int pool_id, int pre_zero, unsigned int blocksperrow,
729 unsigned int numrows, unsigned int maxaccess );
730
731 void ( *realize_virt_arrays ) ( j_common_ptr cinfo );
732
733 JSAMPARRAY ( *access_virt_sarray ) (
734 j_common_ptr cinfo, jvirt_sarray_ptr ptr, unsigned int start_row,
735 unsigned int num_rows, int writable );
736
737 JBLOCKARRAY ( *access_virt_barray ) (
738 j_common_ptr cinfo, jvirt_barray_ptr ptr, unsigned int start_row,
739 unsigned int num_rows, int writable );
740
741 void ( *free_pool ) ( j_common_ptr cinfo, int pool_id );
742
743 void ( *self_destruct ) ( j_common_ptr cinfo );
744
745 /*
746 Limit on memory allocation for this JPEG object. (Note that this is merely
747 advisory, not a guaranteed maximum; it only affects the space used for
748 virtual-array buffers.) May be changed by outer application after creating
749 the JPEG object.
750 */
751 long max_memory_to_use;
752
753 /* Maximum allocation request accepted by alloc_large. */
754 long max_alloc_chunk;
755};
756
757#endif /* JPEGLIB_H */
diff --git a/baseline/source/cjpeg_wrbmp/ChangeLog.txt b/baseline/source/cjpeg_wrbmp/ChangeLog.txt
new file mode 100644
index 0000000..df21770
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/ChangeLog.txt
@@ -0,0 +1,104 @@
1File: cjpeg_jpeg6b_wrbmp.c
2Original provenience:
3
42017-04-18:
5- Annotated cjpeg_wrbmp_main as entry-point for timing analysis
6
72015-10-14:
8- Remove comment on line 1
9- Added generic TACLeBench header to line 1
10- Changed struct name to cjpeg_jpeg6b_wrbmp_name
11- Changed the global variable from {name} to cjpeg_jpeg6b_wrbmp_{name}
12- Changed the functions from {name} to cjpeg_jpeg6b_wrbmp_{name}
13- Removed code in comment
14- Added cjpeg_jpeg6b_wrbmp_main()
15- Added cjpeg_jpeg6b_wrbmp_return()
16- Added cjpeg_jpeg6b_wrbmp_init()
17- Added forward declaration of the functions
18- Removed unused variables: test_image[] and color_map[]
19- Applied Code Style
20
21File: input.c
22Original provenience:
23
242015-10-12:
25- Remove comment on line 1
26- Added generic TACLeBench header to line 1
27- Removed _jpeg6b_ from the prefix
28- Changed the global variable from colormap to cjpeg_jpeg6b_wrbmp_colormap
29- Removed unused variables: test_image[] and color_map[]
30- Moved initialization of cjpeg_jpeg6b_wrbmp_colormap to function. This function is called from cjpeg_jpeg6b_wrbmp_init function
31- Applied Code Style
32
33File: cderror.h
34Original provenience:
35
362015-10-12:
37- Remove comment on line 1
38- Added generic TACLeBench header to line 1
39- Removed _jpeg6b_ from the prefix
40- Changed JMESSAGE to CJPEG_JPEG6B_WRBMP_JMESSAGE
41- Changed JMAKE_ENUM_LIST to CJPEG_JPEG6B_WRBMP_JMAKE_ENUM_LIST
42- Applied Code Style
43
44
45File: cdjpeg.h
46Original provenience:
47
482015-10-12:
49- Remove comment on line 1
50- Added generic TACLeBench header to line 1
51- Rename structs and typedef to cjpeg_jpeg6b_wrbmp_{name}
52- Removed unused defines
53
54File: jconfig.h
55Original provenience:
56
572015-10-12:
58- Remove comment on line 1
59- Added generic TACLeBench header to line 1
60- Change defines to CJPEG_JPEG6B_WRBMP_{NAME}
61- Removed _jpeg6b_ from the prefix
62- Applied Code Style
63
64
65File: jerror.h
66Original provenience:
67
682015-10-12:
69- Remove comment on line 1
70- Added generic TACLeBench header to line 1
71- Removed error and warning defines
72- Removed _jpeg6b_ from the prefix
73- Applied Code Style
74
75
76File: jmorecfg.h
77Original provenience:
78
792015-10-12:
80- Remove comment on line 1
81- Added generic TACLeBench header to line 1
82- Removed unused comments
83- Removed _jpeg6b_ from the prefix
84- Removed unused defines
85- Removed unused typedefs
86- Applied Code Style
87
88
89File: jpeglib.h
90Original provenience:
91
922015-10-12:
93- Remove comment on line 1
94- Used define value directly
95- Remove unused typedefs, defines
96- Removed _jpeg6b_ from the prefix
97- Changed struct name to cjpeg_jpeg6b_wrbmp_{name}
98- Changed define {name} to cjpeg_jpeg6b_wrbmp_{name}
99- Added generic TACLeBench header to line 1
100- Applied Code Style
101
102
103
104
diff --git a/baseline/source/cjpeg_wrbmp/README b/baseline/source/cjpeg_wrbmp/README
new file mode 100644
index 0000000..fa69a18
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/README
@@ -0,0 +1,383 @@
1The Independent JPEG Group's JPEG software
2==========================================
3
4README for release 6a of 7-Feb-96
5=================================
6
7This distribution contains the sixth public release of the Independent JPEG
8Group's free JPEG software. You are welcome to redistribute this software and
9to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
10
11Serious users of this software (particularly those incorporating it into
12larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to
13our electronic mailing list. Mailing list members are notified of updates
14and have a chance to participate in technical discussions, etc.
15
16This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, Jim
17Boucher, Lee Crocker, Julian Minguillon, George Phillips, Davide Rossi,
18Ge' Weijers, and other members of the Independent JPEG Group.
19
20IJG is not affiliated with the official ISO JPEG standards committee.
21
22
23DOCUMENTATION ROADMAP
24=====================
25
26This file contains the following sections:
27
28OVERVIEW General description of JPEG and the IJG software.
29LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
30REFERENCES Where to learn more about JPEG.
31ARCHIVE LOCATIONS Where to find newer versions of this software.
32RELATED SOFTWARE Other stuff you should get.
33FILE FORMAT WARS Software *not* to get.
34TO DO Plans for future IJG releases.
35
36Other documentation files in the distribution are:
37
38User documentation:
39 install.doc How to configure and install the IJG software.
40 usage.doc Usage instructions for cjpeg, djpeg, jpegtran,
41 rdjpgcom, and wrjpgcom.
42 *.1 Unix-style man pages for programs (same info as usage.doc).
43 wizard.doc Advanced usage instructions for JPEG wizards only.
44 change.log Version-to-version change highlights.
45Programmer and internal documentation:
46 libjpeg.doc How to use the JPEG library in your own programs.
47 example.c Sample code for calling the JPEG library.
48 structure.doc Overview of the JPEG library's internal structure.
49 filelist.doc Road map of IJG files.
50 coderules.doc Coding style rules --- please read if you contribute code.
51
52Please read at least the files install.doc and usage.doc. Useful information
53can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
54ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
55
56If you want to understand how the JPEG code works, we suggest reading one or
57more of the REFERENCES, then looking at the documentation files (in roughly
58the order listed) before diving into the code.
59
60
61OVERVIEW
62========
63
64This package contains C software to implement JPEG image compression and
65decompression. JPEG (pronounced "jay-peg") is a standardized compression
66method for full-color and gray-scale images. JPEG is intended for compressing
67"real-world" scenes; line drawings, cartoons and other non-realistic images
68are not its strong suit. JPEG is lossy, meaning that the output image is not
69exactly identical to the input image. Hence you must not use JPEG if you
70have to have identical output bits. However, on typical photographic images,
71very good compression levels can be obtained with no visible change, and
72remarkably high compression levels are possible if you can tolerate a
73low-quality image. For more details, see the references, or just experiment
74with various compression settings.
75
76This software implements JPEG baseline, extended-sequential, and progressive
77compression processes. Provision is made for supporting all variants of these
78processes, although some uncommon parameter settings aren't implemented yet.
79For legal reasons, we are not distributing code for the arithmetic-coding
80variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting
81the hierarchical or lossless processes defined in the standard.
82
83We provide a set of library routines for reading and writing JPEG image files,
84plus two sample applications "cjpeg" and "djpeg", which use the library to
85perform conversion between JPEG and some other popular image file formats.
86The library is intended to be reused in other applications.
87
88In order to support file conversion and viewing software, we have included
89considerable functionality beyond the bare JPEG coding/decoding capability;
90for example, the color quantization modules are not strictly part of JPEG
91decoding, but they are essential for output to colormapped file formats or
92colormapped displays. These extra functions can be compiled out of the
93library if not required for a particular application. We have also included
94"jpegtran", a utility for lossless transcoding between different JPEG
95processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
96inserting and extracting textual comments in JFIF files.
97
98The emphasis in designing this software has been on achieving portability and
99flexibility, while also making it fast enough to be useful. In particular,
100the software is not intended to be read as a tutorial on JPEG. (See the
101REFERENCES section for introductory material.) Rather, it is intended to
102be reliable, portable, industrial-strength code. We do not claim to have
103achieved that goal in every aspect of the software, but we strive for it.
104
105We welcome the use of this software as a component of commercial products.
106No royalty is required, but we do ask for an acknowledgement in product
107documentation, as described under LEGAL ISSUES.
108
109
110LEGAL ISSUES
111============
112
113In plain English:
114
1151. We don't promise that this software works. (But if you find any bugs,
116 please let us know!)
1172. You can use this software for whatever you want. You don't have to pay us.
1183. You may not pretend that you wrote this software. If you use it in a
119 program, you must acknowledge somewhere in your documentation that
120 you've used the IJG code.
121
122In legalese:
123
124The authors make NO WARRANTY or representation, either express or implied,
125with respect to this software, its quality, accuracy, merchantability, or
126fitness for a particular purpose. This software is provided "AS IS", and you,
127its user, assume the entire risk as to its quality and accuracy.
128
129This software is copyright (C) 1991-1996, Thomas G. Lane.
130All Rights Reserved except as specified below.
131
132Permission is hereby granted to use, copy, modify, and distribute this
133software (or portions thereof) for any purpose, without fee, subject to these
134conditions:
135(1) If any part of the source code for this software is distributed, then this
136README file must be included, with this copyright and no-warranty notice
137unaltered; and any additions, deletions, or changes to the original files
138must be clearly indicated in accompanying documentation.
139(2) If only executable code is distributed, then the accompanying
140documentation must state that "this software is based in part on the work of
141the Independent JPEG Group".
142(3) Permission for use of this software is granted only if the user accepts
143full responsibility for any undesirable consequences; the authors accept
144NO LIABILITY for damages of any kind.
145
146These conditions apply to any software derived from or based on the IJG code,
147not just to the unmodified library. If you use our work, you ought to
148acknowledge us.
149
150Permission is NOT granted for the use of any IJG author's name or company name
151in advertising or publicity relating to this software or products derived from
152it. This software may be referred to only as "the Independent JPEG Group's
153software".
154
155We specifically permit and encourage the use of this software as the basis of
156commercial products, provided that all warranty or liability claims are
157assumed by the product vendor.
158
159
160ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
161sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
162ansi2knr.c is NOT covered by the above copyright and conditions, but instead
163by the usual distribution terms of the Free Software Foundation; principally,
164that you must include source code if you redistribute it. (See the file
165ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
166of any program generated from the IJG code, this does not limit you more than
167the foregoing paragraphs do.
168
169The configuration script "configure" was produced with GNU Autoconf. It
170is copyright by the Free Software Foundation but is freely distributable.
171
172It appears that the arithmetic coding option of the JPEG spec is covered by
173patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot
174legally be used without obtaining one or more licenses. For this reason,
175support for arithmetic coding has been removed from the free JPEG software.
176(Since arithmetic coding provides only a marginal gain over the unpatented
177Huffman mode, it is unlikely that very many implementations will support it.)
178So far as we are aware, there are no patent restrictions on the remaining
179code.
180
181WARNING: Unisys has begun to enforce their patent on LZW compression against
182GIF encoders and decoders. You will need a license from Unisys to use the
183included rdgif.c or wrgif.c files in a commercial or shareware application.
184At this time, Unisys is not enforcing their patent against freeware, so
185distribution of this package remains legal. However, we intend to remove
186GIF support from the IJG package as soon as a suitable replacement format
187becomes reasonably popular.
188
189We are required to state that
190 "The Graphics Interchange Format(c) is the Copyright property of
191 CompuServe Incorporated. GIF(sm) is a Service Mark property of
192 CompuServe Incorporated."
193
194
195REFERENCES
196==========
197
198We highly recommend reading one or more of these references before trying to
199understand the innards of the JPEG software.
200
201The best short technical introduction to the JPEG compression algorithm is
202 Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
203 Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
204(Adjacent articles in that issue discuss MPEG motion picture compression,
205applications of JPEG, and related topics.) If you don't have the CACM issue
206handy, a PostScript file containing a revised version of Wallace's article
207is available at ftp.uu.net, graphics/jpeg/wallace.ps.gz. The file (actually
208a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
209omits the sample images that appeared in CACM, but it includes corrections
210and some added material. Note: the Wallace article is copyright ACM and
211IEEE, and it may not be used for commercial purposes.
212
213A somewhat less technical, more leisurely introduction to JPEG can be found in
214"The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood
215City, CA), 1991, ISBN 1-55851-216-0. This book provides good explanations and
216example C code for a multitude of compression methods including JPEG. It is
217an excellent source if you are comfortable reading C code but don't know much
218about data compression in general. The book's JPEG sample code is far from
219industrial-strength, but when you are ready to look at a full implementation,
220you've got one here...
221
222The best full description of JPEG is the textbook "JPEG Still Image Data
223Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
224by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp.
225The book includes the complete text of the ISO JPEG standards (DIS 10918-1
226and draft DIS 10918-2). This is by far the most complete exposition of JPEG
227in existence, and we highly recommend it.
228
229The JPEG standard itself is not available electronically; you must order a
230paper copy through ISO or ITU. (Unless you feel a need to own a certified
231official copy, we recommend buying the Pennebaker and Mitchell book instead;
232it's much cheaper and includes a great deal of useful explanatory material.)
233In the USA, copies of the standard may be ordered from ANSI Sales at (212)
234642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI
235doesn't take credit card orders, but Global does.) It's not cheap: as of
2361992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
237shipping/handling. The standard is divided into two parts, Part 1 being the
238actual specification, while Part 2 covers compliance testing methods. Part 1
239is titled "Digital Compression and Coding of Continuous-tone Still Images,
240Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
24110918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
242Continuous-tone Still Images, Part 2: Compliance testing" and has document
243numbers ISO/IEC IS 10918-2, ITU-T T.83.
244
245Extensions to the original JPEG standard are defined in JPEG Part 3, a new ISO
246document. Part 3 is undergoing ISO balloting and is expected to be approved
247by the end of 1995; it will have document numbers ISO/IEC IS 10918-3, ITU-T
248T.84. IJG currently does not support any Part 3 extensions.
249
250The JPEG standard does not specify all details of an interchangeable file
251format. For the omitted details we follow the "JFIF" conventions, revision
2521.02. A copy of the JFIF spec is available from:
253 Literature Department
254 C-Cube Microsystems, Inc.
255 1778 McCarthy Blvd.
256 Milpitas, CA 95035
257 phone (408) 944-6300, fax (408) 944-6314
258A PostScript version of this document is available at ftp.uu.net, file
259graphics/jpeg/jfif.ps.gz. It can also be obtained by e-mail from the C-Cube
260mail server, netlib@c3.pla.ca.us. Send the message "send jfif_ps from jpeg"
261to the server to obtain the JFIF document; send the message "help" if you have
262trouble.
263
264The TIFF 6.0 file format specification can be obtained by FTP from sgi.com
265(192.48.153.1), file graphics/tiff/TIFF6.ps.Z; or you can order a printed
266copy from Aldus Corp. at (206) 628-6593. The JPEG incorporation scheme
267found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
268IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
269Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
270(Compression tag 7). Copies of this Note can be obtained from sgi.com or
271from ftp.uu.net:/graphics/jpeg/. It is expected that the next revision of
272the TIFF spec will replace the 6.0 JPEG design with the Note's design.
273Although IJG's own code does not support TIFF/JPEG, the free libtiff library
274uses our library to implement TIFF/JPEG per the Note. libtiff is available
275from sgi.com:/graphics/tiff/.
276
277
278ARCHIVE LOCATIONS
279=================
280
281The "official" archive site for this software is ftp.uu.net (Internet
282address 192.48.96.9). The most recent released version can always be found
283there in directory graphics/jpeg. This particular version will be archived
284as graphics/jpeg/jpegsrc.v6a.tar.gz. If you are on the Internet, you
285can retrieve files from ftp.uu.net by standard anonymous FTP. If you don't
286have FTP access, UUNET's archives are also available via UUCP; contact
287help@uunet.uu.net for information on retrieving files that way.
288
289Numerous Internet sites maintain copies of the UUNET files. However, only
290ftp.uu.net is guaranteed to have the latest official version.
291
292You can also obtain this software in DOS-compatible "zip" archive format from
293the SimTel archives (ftp.coast.net:/SimTel/msdos/graphics/), or on CompuServe
294in the Graphics Support forum (GO CIS:GRAPHSUP), library 12 "JPEG Tools".
295Again, these versions may sometimes lag behind the ftp.uu.net release.
296
297The JPEG FAQ (Frequently Asked Questions) article is a useful source of
298general information about JPEG. It is updated constantly and therefore is
299not included in this distribution. The FAQ is posted every two weeks to
300Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
301You can always obtain the latest version from the news.answers archive at
302rtfm.mit.edu. By FTP, fetch /pub/usenet/news.answers/jpeg-faq/part1 and
303.../part2. If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu
304with body
305 send usenet/news.answers/jpeg-faq/part1
306 send usenet/news.answers/jpeg-faq/part2
307
308
309RELATED SOFTWARE
310================
311
312Numerous viewing and image manipulation programs now support JPEG. (Quite a
313few of them use this library to do so.) The JPEG FAQ described above lists
314some of the more popular free and shareware viewers, and tells where to
315obtain them on Internet.
316
317If you are on a Unix machine, we highly recommend Jef Poskanzer's free
318PBMPLUS image software, which provides many useful operations on PPM-format
319image files. In particular, it can convert PPM images to and from a wide
320range of other formats. You can obtain this package by FTP from ftp.x.org
321(contrib/pbmplus*.tar.Z) or ftp.ee.lbl.gov (pbmplus*.tar.Z). There is also
322a newer update of this package called NETPBM, available from
323wuarchive.wustl.edu under directory /graphics/graphics/packages/NetPBM/.
324Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software
325is; you are likely to have difficulty making it work on any non-Unix machine.
326
327A different free JPEG implementation, written by the PVRG group at Stanford,
328is available from havefun.stanford.edu in directory pub/jpeg. This program
329is designed for research and experimentation rather than production use;
330it is slower, harder to use, and less portable than the IJG code, but it
331is easier to read and modify. Also, the PVRG code supports lossless JPEG,
332which we do not.
333
334
335FILE FORMAT WARS
336================
337
338Some JPEG programs produce files that are not compatible with our library.
339The root of the problem is that the ISO JPEG committee failed to specify a
340concrete file format. Some vendors "filled in the blanks" on their own,
341creating proprietary formats that no one else could read. (For example, none
342of the early commercial JPEG implementations for the Macintosh were able to
343exchange compressed files.)
344
345The file format we have adopted is called JFIF (see REFERENCES). This format
346has been agreed to by a number of major commercial JPEG vendors, and it has
347become the de facto standard. JFIF is a minimal or "low end" representation.
348We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
349Technical Note #2) for "high end" applications that need to record a lot of
350additional data about an image. TIFF/JPEG is fairly new and not yet widely
351supported, unfortunately.
352
353The upcoming JPEG Part 3 standard defines a file format called SPIFF.
354SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
355be able to read the most common variant of SPIFF. SPIFF has some technical
356advantages over JFIF, but its major claim to fame is simply that it is an
357official standard rather than an informal one. At this point it is unclear
358whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
359standard. IJG intends to support SPIFF once the standard is frozen, but we
360have not decided whether it should become our default output format or not.
361(In any case, our decoder will remain capable of reading JFIF indefinitely.)
362
363Various proprietary file formats incorporating JPEG compression also exist.
364We have little or no sympathy for the existence of these formats. Indeed,
365one of the original reasons for developing this free software was to help
366force convergence on common, open format standards for JPEG files. Don't
367use a proprietary file format!
368
369
370TO DO
371=====
372
373In future versions, we are considering supporting some of the upcoming JPEG
374Part 3 extensions --- principally, variable quantization and the SPIFF file
375format.
376
377Tuning the software for better behavior at low quality/high compression
378settings is also of interest. The current method for scaling the
379quantization tables is known not to be very good at low Q values.
380
381As always, speeding things up is high on our priority list.
382
383Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
diff --git a/baseline/source/cjpeg_wrbmp/cderror.h b/baseline/source/cjpeg_wrbmp/cderror.h
new file mode 100644
index 0000000..e479834
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/cderror.h
@@ -0,0 +1,140 @@
1
2/*
3
4 This program is part of the TACLeBench benchmark suite.
5 Version V 1.x
6
7 Name: cderror.h
8
9 Author: Thomas G. Lane.
10
11 This file is part of the Independent JPEG Group's software.
12 For conditions of distribution and use, see the accompanying README file.
13
14 This file defines the error and message codes for the cjpeg/djpeg
15 applications. These strings are not needed as part of the JPEG library
16 proper.
17 Edit this file to add new codes, or to translate the message strings to
18 some other language.
19
20 Source: Independent JPEG Group's software
21
22 Changes: no major functional changes
23
24 License: See the accompanying README file
25
26 */
27
28#ifndef CJPEG_WRBMP_JMESSAGE
29#ifndef CDERROR_H
30#define CDERROR_H
31/*First time through, define the enum list*/
32#define CJPEG_WRBMP_JMAKE_ENUM_LIST
33#else
34/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined*/
35#define CJPEG_WRBMP_JMESSAGE(code,string)
36#endif
37#endif
38
39#ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
40
41typedef enum {
42
43#define CJPEG_WRBMP_JMESSAGE(code,string) code ,
44
45#endif
46
47 CJPEG_WRBMP_JMESSAGE( JMSG_FIRSTADDONCODE = 1000, NULL ) //Must be first entry!
48
49 #ifdef CJPEG_WRBMP_BMP_SUPPORTED
50 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADCMAP, "Unsupported BMP colormap format" )
51 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported" )
52 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADHEADER, "Invalid BMP file: bad header length" )
53 CJPEG_WRBMP_JMESSAGE( JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1" )
54 CJPEG_WRBMP_JMESSAGE( JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB" )
55 CJPEG_WRBMP_JMESSAGE( JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported" )
56 CJPEG_WRBMP_JMESSAGE( JERR_BMP_NOT, "Not a BMP file - does not start with BM" )
57 CJPEG_WRBMP_JMESSAGE( JTRC_BMP, "%ux%u 24-bit BMP image" )
58 CJPEG_WRBMP_JMESSAGE( JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image" )
59 CJPEG_WRBMP_JMESSAGE( JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image" )
60 CJPEG_WRBMP_JMESSAGE( JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image" )
61 #endif
62
63 #ifdef CJPEG_WRBMP_GIF_SUPPORTED
64 CJPEG_WRBMP_JMESSAGE( JERR_GIF_BUG, "GIF output got confused" )
65 CJPEG_WRBMP_JMESSAGE( JERR_GIF_CODESIZE, "Bogus GIF codesize %d" )
66 CJPEG_WRBMP_JMESSAGE( JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB" )
67 CJPEG_WRBMP_JMESSAGE( JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file" )
68 CJPEG_WRBMP_JMESSAGE( JERR_GIF_NOT, "Not a GIF file" )
69 CJPEG_WRBMP_JMESSAGE( JTRC_GIF, "%ux%ux%d GIF image" )
70 CJPEG_WRBMP_JMESSAGE( JTRC_GIF_BADVERSION,
71 "Warning: unexpected GIF version number '%c%c%c'" )
72 CJPEG_WRBMP_JMESSAGE( JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x" )
73 CJPEG_WRBMP_JMESSAGE( JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input" )
74 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_BADDATA, "Corrupt data in GIF file" )
75 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring" )
76 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_ENDCODE, "Premature end of GIF image" )
77 CJPEG_WRBMP_JMESSAGE( JWRN_GIF_NOMOREDATA, "Ran out of GIF bits" )
78 #endif
79
80 #ifdef CJPEG_WRBMP_PPM_SUPPORTED
81 CJPEG_WRBMP_JMESSAGE( JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB" )
82 CJPEG_WRBMP_JMESSAGE( JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file" )
83 CJPEG_WRBMP_JMESSAGE( JERR_PPM_NOT, "Not a PPM/PGM file" )
84 CJPEG_WRBMP_JMESSAGE( JTRC_PGM, "%ux%u PGM image" )
85 CJPEG_WRBMP_JMESSAGE( JTRC_PGM_TEXT, "%ux%u text PGM image" )
86 CJPEG_WRBMP_JMESSAGE( JTRC_PPM, "%ux%u PPM image" )
87 CJPEG_WRBMP_JMESSAGE( JTRC_PPM_TEXT, "%ux%u text PPM image" )
88 #endif
89
90 #ifdef RLE_SUPPORTED
91 CJPEG_WRBMP_JMESSAGE( JERR_RLE_BADERROR, "Bogus error code from RLE library" )
92 CJPEG_WRBMP_JMESSAGE( JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB" )
93 CJPEG_WRBMP_JMESSAGE( JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE" )
94 CJPEG_WRBMP_JMESSAGE( JERR_RLE_EMPTY, "Empty RLE file" )
95 CJPEG_WRBMP_JMESSAGE( JERR_RLE_EOF, "Premature EOF in RLE header" )
96 CJPEG_WRBMP_JMESSAGE( JERR_RLE_MEM, "Insufficient memory for RLE header" )
97 CJPEG_WRBMP_JMESSAGE( JERR_RLE_NOT, "Not an RLE file" )
98 CJPEG_WRBMP_JMESSAGE( JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE" )
99 CJPEG_WRBMP_JMESSAGE( JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup" )
100 CJPEG_WRBMP_JMESSAGE( JTRC_RLE, "%ux%u full-color RLE file" )
101 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d" )
102 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_GRAY, "%ux%u grayscale RLE file" )
103 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d" )
104 CJPEG_WRBMP_JMESSAGE( JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d" )
105 #endif
106
107 #ifdef CJPEG_WRBMP_TARGA_SUPPORTED
108 CJPEG_WRBMP_JMESSAGE( JERR_TGA_BADCMAP, "Unsupported Targa colormap format" )
109 CJPEG_WRBMP_JMESSAGE( JERR_TGA_BADPARMS, "Invalid or unsupported Targa file" )
110 CJPEG_WRBMP_JMESSAGE( JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB" )
111 CJPEG_WRBMP_JMESSAGE( JTRC_TGA, "%ux%u RGB Targa image" )
112 CJPEG_WRBMP_JMESSAGE( JTRC_TGA_GRAY, "%ux%u grayscale Targa image" )
113 CJPEG_WRBMP_JMESSAGE( JTRC_TGA_MAPPED, "%ux%u colormapped Targa image" )
114 #else
115 CJPEG_WRBMP_JMESSAGE( JERR_TGA_NOTCOMP, "Targa support was not compiled" )
116 #endif
117
118 CJPEG_WRBMP_JMESSAGE( JERR_BAD_CMAP_FILE,
119 "Color map file is invalid or of unsupported format" )
120 CJPEG_WRBMP_JMESSAGE( JERR_TOO_MANY_COLORS,
121 "Output file format cannot handle %d colormap entries" )
122 CJPEG_WRBMP_JMESSAGE( JERR_UNGETC_FAILED, "ungetc failed" )
123 #ifdef CJPEG_WRBMP_TARGA_SUPPORTED
124 CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_FORMAT,
125 "Unrecognized input file format --- perhaps you need -targa" )
126 #else
127 CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_FORMAT, "Unrecognized input file format" )
128 #endif
129 CJPEG_WRBMP_JMESSAGE( JERR_UNSUPPORTED_FORMAT, "Unsupported output file format" )
130
131 #ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
132
133 JMSG_LASTADDONCODE
134} CJPEG_WRBMP_ADDON_MESSAGE_CODE;
135
136#undef CJPEG_WRBMP_JMAKE_ENUM_LIST
137 #endif
138
139/* Zap JMESSAGE macro so that future re-inclusions do nothing by default*/
140#undef CJPEG_WRBMP_JMESSAGE
diff --git a/baseline/source/cjpeg_wrbmp/cdjpeg.h b/baseline/source/cjpeg_wrbmp/cdjpeg.h
new file mode 100644
index 0000000..6c3fc7b
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/cdjpeg.h
@@ -0,0 +1,105 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: cdjpeg.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 This file contains common declarations for the sample applications
14 cjpeg and djpeg. It is NOT used by the core JPEG library.
15
16 Source: Independent JPEG Group's software
17
18 Changes: no major functional changes
19
20 License: See the accompanying README file
21
22*/
23#ifndef CDJPEG_H
24#define CDJPEG_H
25
26#define CJPEG_WRBMP_JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */
27#define CJPEG_WRBMP_JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
28
29#include "jpeglib.h"
30#include "jerror.h" /* get library error codes too */
31#include "cderror.h" /* get application-specific error codes */
32
33typedef struct cjpeg_wrbmp_cjpeg_source_struct
34 *cjpeg_wrbmp_cjpeg_source_ptr;
35
36struct cjpeg_wrbmp_cjpeg_source_struct {
37 CJPEG_WRBMP_JMETHOD( void, start_input,
38 ( cjpeg_wrbmp_j_compress_ptr cinfo,
39 cjpeg_wrbmp_cjpeg_source_ptr sinfo ) );
40 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JDIMENSION, get_pixel_rows,
41 ( cjpeg_wrbmp_j_compress_ptr cinfo,
42 cjpeg_wrbmp_cjpeg_source_ptr sinfo ) );
43 CJPEG_WRBMP_JMETHOD( void, finish_input,
44 ( cjpeg_wrbmp_j_compress_ptr cinfo,
45 cjpeg_wrbmp_cjpeg_source_ptr sinfo ) );
46
47 CJPEG_WRBMP_FILE *input_file;
48
49 CJPEG_WRBMP_JSAMPARRAY buffer;
50 CJPEG_WRBMP_JDIMENSION buffer_height;
51};
52
53
54typedef struct cjpeg_wrbmp_djpeg_dest_struct
55 *cjpeg_wrbmp_djpeg_dest_ptr;
56
57struct cjpeg_wrbmp_djpeg_dest_struct {
58 CJPEG_WRBMP_JMETHOD( void, start_output,
59 ( cjpeg_wrbmp_j_decompress_ptr cinfo,
60 cjpeg_wrbmp_djpeg_dest_ptr dinfo ) );
61 /* Emit the specified number of pixel rows from the buffer. */
62 CJPEG_WRBMP_JMETHOD( void, put_pixel_rows,
63 ( cjpeg_wrbmp_j_decompress_ptr cinfo,
64 cjpeg_wrbmp_djpeg_dest_ptr dinfo,
65 CJPEG_WRBMP_JDIMENSION rows_supplied ) );
66 /* Finish up at the end of the image. */
67 CJPEG_WRBMP_JMETHOD( void, finish_output,
68 ( cjpeg_wrbmp_j_decompress_ptr cinfo,
69 cjpeg_wrbmp_djpeg_dest_ptr dinfo ) );
70
71 /* Target file spec; filled in by djpeg.c after object is created. */
72 CJPEG_WRBMP_FILE *output_file;
73
74 /* Output pixel-row buffer. Created by module init or start_output.
75 Width is cinfo->output_width * cinfo->output_components;
76 height is buffer_height.
77 */
78 CJPEG_WRBMP_JSAMPARRAY buffer;
79 CJPEG_WRBMP_JDIMENSION buffer_height;
80} ;
81
82
83
84/*
85 cjpeg/djpeg may need to perform extra passes to convert to or from
86 the source/destination file format. The JPEG library does not know
87 about these passes, but we'd like them to be counted by the progress
88 monitor. We use an expanded progress monitor object to hold the
89 additional pass count.
90*/
91
92struct cjpeg_wrbmp_cdjpeg_progress_mgr {
93 struct cjpeg_wrbmp_jpeg_progress_mgr
94 pub; /* fields known to JPEG library */
95 int completed_extra_passes; /* extra passes completed */
96 int total_extra_passes; /* total extra */
97 /* last printed percentage stored here to avoid multiple printouts */
98 int percent_done;
99};
100
101typedef struct cjpeg_wrbmp_cdjpeg_progress_mgr
102 *cjpeg_wrbmp_cd_progress_ptr;
103
104#endif
105
diff --git a/baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c b/baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c
new file mode 100644
index 0000000..7bef7ab
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c
@@ -0,0 +1,225 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: cjpeg_jpeg6b_wrbmp.c
7
8 Author: Thomas G. Lane.
9
10 Function: This file contains routines to write output images in Microsoft "BMP"
11 format (MS Windows 3.x and OS/2 1.x flavors).
12 Either 8-bit colormapped or 24-bit full-color format can be written.
13 No compression is supported.
14
15 These routines may need modification for non-Unix environments or
16 specialized applications. As they stand, they assume output to
17 an ordinary stdio stream.
18
19 Source: Independent JPEG Group's software
20
21 Changes: a brief summary of major functional changes (not formatting)
22
23 License: See the accompanying README file
24
25*/
26
27#include "../extra.h"
28#include "cdjpeg.h"
29
30#ifdef CJPEG_WRBMP_BMP_SUPPORTED
31
32/*
33 Declaration of global variables
34*/
35typedef struct {
36 struct cjpeg_wrbmp_djpeg_dest_struct pub; /* public fields */
37 cjpeg_wrbmp_boolean is_os2; /* saves the OS2 format request flag */
38 cjpeg_wrbmp_jvirt_sarray_ptr
39 whole_image; /* needed to reverse row order */
40 CJPEG_WRBMP_JDIMENSION data_width; /* JSAMPLEs per row */
41 CJPEG_WRBMP_JDIMENSION
42 row_width; /* physical width of one row in the BMP file */
43 int pad_bytes; /* number of padding bytes needed per row */
44 CJPEG_WRBMP_JDIMENSION
45 cur_output_row; /* next row# to write to virtual array */
46} cjpeg_wrbmp_bmp_dest_struct;
47
48typedef cjpeg_wrbmp_bmp_dest_struct *cjpeg_wrbmp_bmp_dest_ptr;
49extern unsigned char cjpeg_wrbmp_colormap[3][256];
50unsigned char cjpeg_wrbmp_output_array[6144];
51unsigned char *cjpeg_wrbmp_jpeg_stream /*= cjpeg_jpeg6b_wrbmp_output_array*/;
52int cjpeg_wrbmp_checksum;
53
54struct cjpeg_wrbmp_jpeg_decompress_struct
55 cjpeg_wrbmp_jpeg_dec_1;
56struct cjpeg_wrbmp_jpeg_decompress_struct
57 cjpeg_wrbmp_jpeg_dec_2;
58struct cjpeg_wrbmp_djpeg_dest_struct
59 cjpeg_wrbmp_djpeg_dest;
60cjpeg_wrbmp_bmp_dest_struct cjpeg_wrbmp_bmp_dest;
61
62/*
63 Forward declaration of functions
64*/
65void cjpeg_wrbmp_initInput( void );
66void cjpeg_wrbmp_finish_output_bmp( cjpeg_wrbmp_j_decompress_ptr cinfo);
67void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr
68 cinfo,
69 int map_colors, int map_entry_size,
70 int cMap );
71int cjpeg_wrbmp_putc_modified( int character );
72void cjpeg_wrbmp_init();
73void cjpeg_wrbmp_main();
74int cjpeg_wrbmp_return();
75//int main();
76
77/*
78 Initialization functions
79*/
80void cjpeg_wrbmp_init()
81{
82 cjpeg_wrbmp_initInput();
83
84 cjpeg_wrbmp_jpeg_dec_1.progress = 0;
85 cjpeg_wrbmp_jpeg_dec_1.output_height = 30;
86 cjpeg_wrbmp_jpeg_dec_1.actual_number_of_colors = 256;
87 cjpeg_wrbmp_jpeg_dec_1.out_color_components = 2;
88
89 cjpeg_wrbmp_jpeg_dec_2.progress = 0;
90 cjpeg_wrbmp_jpeg_dec_2.output_height = 30;
91 cjpeg_wrbmp_jpeg_dec_2.actual_number_of_colors = 256;
92 cjpeg_wrbmp_jpeg_dec_2.out_color_components = 3;
93
94 cjpeg_wrbmp_jpeg_stream = cjpeg_wrbmp_output_array;
95
96 cjpeg_wrbmp_checksum = 0;
97}
98
99/*
100 Calculation functions
101*/
102int cjpeg_wrbmp_putc_modified( int character )
103{
104 *( cjpeg_wrbmp_jpeg_stream ) = character;
105
106 ++cjpeg_wrbmp_jpeg_stream;
107
108 cjpeg_wrbmp_checksum += character;
109
110 return character;
111}
112
113void cjpeg_wrbmp_finish_output_bmp( cjpeg_wrbmp_j_decompress_ptr cinfo )
114{
115 CJPEG_WRBMP_JDIMENSION row;
116 cjpeg_wrbmp_cd_progress_ptr progress =
117 ( cjpeg_wrbmp_cd_progress_ptr ) cinfo->progress;
118
119 // Write the file body from our virtual array
120 _Pragma( "loopbound min 30 max 30" )
121 for ( row = cinfo->output_height; row > 0; --row ) {
122 if ( progress != 0 ) {
123 progress->pub.pass_counter = ( long )( cinfo->output_height - row );
124 progress->pub.pass_limit = ( long ) cinfo->output_height;
125 }
126 }
127
128 if ( progress != 0 )
129 progress->completed_extra_passes++;
130 }
131
132void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr
133 cinfo,
134 int map_colors, int map_entry_size, int cMap )
135{
136
137 int num_colors = cinfo->actual_number_of_colors;
138 int i;
139
140 if ( cMap != 0 ) {
141
142 if ( cinfo->out_color_components == 3 ) {
143 // Normal case with RGB colormap
144 _Pragma( "loopbound min 256 max 256" )
145 for ( i = 0; i < num_colors; i++ ) {
146 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
147 cjpeg_wrbmp_colormap[2][i] ) );
148 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
149 cjpeg_wrbmp_colormap[1][i] ) );
150 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
151 cjpeg_wrbmp_colormap[0][i] ) );
152
153 if ( map_entry_size == 4 )
154 cjpeg_wrbmp_putc_modified( 0 );
155 }
156 } else {
157 // Grayscale colormap (only happens with grayscale quantization)
158 _Pragma( "loopbound min 256 max 256" )
159 for ( i = 0; i < num_colors; i++ ) {
160
161 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
162 cjpeg_wrbmp_colormap[2][i] ) );
163 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
164 cjpeg_wrbmp_colormap[1][i] ) );
165 cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE(
166 cjpeg_wrbmp_colormap[0][i] ) );
167
168 if ( map_entry_size == 4 )
169 cjpeg_wrbmp_putc_modified( 0 );
170 }
171 }
172 } else {
173 // If no colormap, must be grayscale data. Generate a linear "map".
174 _Pragma( "loopbound min 256 max 256" )
175 for ( i = 0; i < 256; i++ ) {
176 cjpeg_wrbmp_putc_modified( i );
177 cjpeg_wrbmp_putc_modified( i );
178 cjpeg_wrbmp_putc_modified( i );
179
180 if ( map_entry_size == 4 )
181 cjpeg_wrbmp_putc_modified( 0 );
182 }
183 }
184
185 // Pad colormap with zeros to ensure specified number of colormap entries.
186 _Pragma( "loopbound min 512 max 512" )
187 for ( ; i < map_colors; i++ ) {
188 cjpeg_wrbmp_putc_modified( 0 );
189 cjpeg_wrbmp_putc_modified( 0 );
190 cjpeg_wrbmp_putc_modified( 0 );
191
192 if ( map_entry_size == 4 )
193 cjpeg_wrbmp_putc_modified( 0 );
194 }
195}
196
197void _Pragma( "entrypoint" ) cjpeg_wrbmp_main()
198{
199 cjpeg_wrbmp_finish_output_bmp( &cjpeg_wrbmp_jpeg_dec_1);
200 cjpeg_wrbmp_write_colormap( &cjpeg_wrbmp_jpeg_dec_1, 768, 4, 1 );
201
202 cjpeg_wrbmp_finish_output_bmp( &cjpeg_wrbmp_jpeg_dec_2 );
203 cjpeg_wrbmp_write_colormap( &cjpeg_wrbmp_jpeg_dec_2, 768, 4, 1 );
204}
205
206int cjpeg_wrbmp_return()
207{
208 return (cjpeg_wrbmp_checksum + (-209330) ) != 0;
209}
210
211int main(int argc, char **argv)
212{
213 SET_UP
214 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
215 START_LOOP
216 cjpeg_wrbmp_init();
217 cjpeg_wrbmp_main();
218 STOP_LOOP
219 }
220 WRITE_TO_FILE
221 return ( cjpeg_wrbmp_return() );
222}
223
224#endif /* BMP_SUPPORTED */
225
diff --git a/baseline/source/cjpeg_wrbmp/input.c b/baseline/source/cjpeg_wrbmp/input.c
new file mode 100644
index 0000000..08dec28
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/input.c
@@ -0,0 +1,79 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: input.c
7
8 Author: Thomas G. Lane.
9
10 Function: Input variables for the cjpeg_jpeg6b_wrbmp.c
11
12 Source: Independent JPEG Group's software
13
14 Changes: no major functional changes
15
16 License: See the accompanying README file
17
18*/
19
20unsigned char cjpeg_wrbmp_colormap[3][256];
21
22void cjpeg_wrbmp_initInput( void )
23{
24 int i, j;
25 volatile unsigned char tmp[3][256] = {{44 , 105 , 153 , 71 , 151 , 160 , 188 , 90 , 209 , 131 ,
26 221 , 114 , 93 , 124 , 208 , 207 , 218 , 54 , 145 , 113 , 153 , 239 , 226 , 83 , 243 , 151 ,
27 98 , 67 , 114 , 153 , 83 , 186 , 116 , 72 , 188 , 190 , 109 , 162 , 218 , 133 , 208 , 209,
28 115 , 251 , 135 , 89 , 143 , 226 , 230 , 246 , 152 , 243 , 152 , 115 , 180 , 78 , 246 , 164,
29 250 , 117 , 76 , 150 , 152 , 188 , 251 , 195 , 127 , 111 , 225 , 208 , 94 , 93 , 143 , 131,
30 201 , 211 , 99 , 93 , 190 , 157 , 121 , 240 , 117 , 185 , 167 , 137 , 152 , 188 , 250 , 59,
31 248 , 245 , 115 , 240 , 192 , 209 , 143 , 136 , 98 , 224 , 167 , 135 , 132 , 189 , 72 , 249,
32 205 , 44 , 106 , 96 , 147 , 247 , 249 , 228 , 224 , 249 , 190 , 112 , 135 , 168 , 95 , 205,
33 171 , 58 , 112 , 79 , 206 , 75 , 242 , 188 , 189 , 225 , 185 , 81 , 221 , 153 , 244 , 198,
34 171 , 163 , 159 , 209 , 240 , 138 , 148 , 207 , 166 , 192 , 188 , 151 , 98 , 190 , 209 , 154,
35 225 , 72 , 96 , 249 , 191 , 223 , 207 , 163 , 207 , 133 , 251 , 183 , 135 , 137 , 159 , 247,
36 167 , 83 , 123 , 199 , 203 , 144 , 142 , 237 , 77 , 128 , 117 , 169 , 202 , 136 , 128 , 188,
37 168 , 55 , 222 , 169 , 116 , 60 , 75 , 175 , 102 , 217 , 168 , 185 , 189 , 225 , 125 , 192,
38 112 , 111 , 168 , 239 , 225 , 168 , 97 , 129 , 190 , 175 , 169 , 225 , 170 , 226 , 225 , 226,
39 224 , 134 , 106 , 250 , 222 , 148 , 241 , 168 , 166 , 160 , 95 , 190 , 102 , 180 , 193 , 111,
40 151 , 165 , 171 , 200 , 52 , 134 , 169 , 223 , 166 , 225 , 169 , 111 , 185 , 109 , 56 , 244,
41 157 , 250 , 226 , 231 , 119 , 188 },{42 , 143 , 46 , 91 , 84 , 201 , 140 , 91 , 82 , 140 , 31,
42 88 , 44 , 171 , 57 , 115 , 206 , 59 , 145 , 117 , 116 , 53 , 232 , 117 , 80 , 60 , 66 , 64,
43 117 , 174 , 89 , 178 , 147 , 63 , 83 , 59 , 103 , 139 , 211 , 64 , 68 , 98 , 118 , 53 , 119,
44 90 , 161 , 232 , 171 , 98 , 176 , 236 , 118 , 157 , 180 , 77 , 114 , 88 , 28 , 119 , 40 , 97,
45 69 , 189 , 252 , 225 , 119 , 96 , 219 , 84 , 82 , 105 , 158 , 49 , 200 , 61 , 117 , 78 , 63,
46 147 , 140 , 69 , 108 , 90 , 161 , 105 , 190 , 114 , 84 , 76 , 70 , 43 , 156 , 222 , 96 , 72,
47 143 , 90 , 105 , 56 , 144 , 78 , 129 , 35 , 66 , 101 , 100 , 49 , 105 , 130 , 160 , 239 , 129,
48 141 , 83 , 43 , 68 , 106 , 132 , 83 , 92 , 130 , 175 , 63 , 131 , 79 , 192 , 105 , 57 , 160,
49 118 , 162 , 141 , 78 , 192 , 128 , 206 , 201 , 203 , 162 , 159 , 163 , 221 , 183 , 157 , 177,
50 189 , 192 , 129 , 130 , 54 , 104 , 45 , 101 , 252 , 52 , 91 , 177 , 49 , 221 , 116 , 111 , 143,
51 92 , 142 , 159 , 131 , 173 , 61 , 159 , 173 , 81 , 129 , 214 , 213 , 145 , 143 , 232 , 67,
52 145 , 130 , 99 , 237 , 110 , 160 , 131 , 67 , 50 , 129 , 131 , 127 , 76 , 92 , 203 , 96 , 206,
53 176 , 180 , 85 , 99 , 162 , 118 , 64 , 78 , 190 , 191 , 45 , 101 , 129 , 58 , 72 , 211 , 49,
54 115 , 115 , 85 , 61 , 100 , 116 , 107 , 143 , 117 , 219 , 154 , 225 , 174 , 160 , 163 , 119,
55 190 , 106 , 186 , 49 , 45 , 177 , 147 , 85 , 138 , 42 , 174 , 59 , 68 , 120 , 71 , 129 , 56,
56 149 , 97 , 68 , 88 , 148 , 60 , 239 , 179 , 149 , 104},{44 , 76 , 37 , 56 , 76 , 152 , 122,
57 153 , 77 , 191 , 41 , 76 , 39 , 97 , 46 , 109 , 172 , 43 , 116 , 91 , 102 , 49 , 201 , 68 , 88,
58 45 , 53 , 95 , 160 , 175 , 102 , 164 , 116 , 50 , 76 , 45 , 86 , 189 , 216 , 50 , 61 , 93 , 196,
59 91 , 100 , 58 , 116 , 223 , 166 , 102 , 126 , 221 , 158 , 86 , 235 , 55 , 113 , 120 , 52 , 115,
60 42 , 86 , 55 , 165 , 247 , 194 , 160 , 108 , 170 , 108 , 98 , 77 , 168 , 42 , 179 , 70 , 96,
61 62 , 71 , 216 , 100 , 71 , 155 , 121 , 146 , 86 , 134 , 105 , 114 , 49 , 100 , 50 , 119 , 218,
62 95 , 81 , 220 , 78 , 102 , 50 , 125 , 68 , 170 , 36 , 62 , 119 , 129 , 44 , 151 , 72 , 143,
63 241 , 131 , 137 , 79 , 73 , 55 , 122 , 204 , 73 , 74 , 131 , 221 , 53 , 89 , 72 , 178 , 60 , 64,
64 145 , 157 , 156 , 177 , 101 , 180 , 112 , 194 , 206 , 178 , 168 , 221 , 153 , 201 , 119 , 222,
65 165 , 188 , 212 , 117 , 180 , 45 , 134 , 42 , 130 , 229 , 47 , 107 , 172 , 40 , 221 , 146,
66 132 , 138 , 110 , 144 , 188 , 112 , 132 , 64 , 162 , 145 , 140 , 200 , 181 , 215 , 139 , 197,
67 183 , 106 , 126 , 116 , 89 , 204 , 152 , 123 , 161 , 52 , 46 , 131 , 167 , 173 , 62 , 70 , 151,
68 151 , 197 , 177 , 184 , 96 , 97 , 101 , 130 , 54 , 63 , 141 , 185 , 45 , 126 , 96 , 46 , 71,
69 172 , 38 , 114 , 100 , 106 , 69 , 118 , 138 , 127 , 99 , 127 , 198 , 204 , 242 , 248 , 197,
70 241 , 74 , 189 , 178 , 252 , 65 , 45 , 148 , 145 , 97 , 168 , 45 , 111 , 43 , 64 , 164 , 80,
71 113 , 47 , 136 , 83 , 42 , 91 , 197 , 95 , 222 , 167 , 92 , 98}};
72
73 for ( i = 0; i < 3; i++ ) {
74 for ( j = 0; j < 256; j++ )
75 {
76 cjpeg_wrbmp_colormap[i][j] = tmp[i][j];
77 }
78 }
79}
diff --git a/baseline/source/cjpeg_wrbmp/jconfig.h b/baseline/source/cjpeg_wrbmp/jconfig.h
new file mode 100644
index 0000000..9c73988
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/jconfig.h
@@ -0,0 +1,65 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: cderror.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 Source: Independent JPEG Group's software
14
15 Changes: no major functional changes
16
17 License: See the accompanying README files
18*/
19
20#ifndef JCONFIG_H
21#define JCONFIG_H
22
23#define CJPEG_WRBMP_HAVE_PROTOTYPES
24#define CJPEG_WRBMP_HAVE_UNSIGNED_CHAR
25#define CJPEG_WRBMP_HAVE_UNSIGNED_SHORT
26#undef void
27#undef const
28#undef CHAR_IS_UNSIGNED
29#define CJPEG_WRBMP_HAVE_STDDEF_H
30#define CJPEG_WRBMP_HAVE_STDLIB_H
31#undef NEED_BSD_STRINGS
32#undef NEED_SYS_TYPES_H
33#undef CJPEG_JPEG6B_WRBMP_NEED_FAR_POINTERS
34#undef NEED_SHORT_EXTERNAL_NAMES
35/* Define this if you get warnings about undefined structures. */
36#undef INCOMPLETE_TYPES_BROKEN
37
38#ifdef CJPEG_JPEG6B_WRBMP_JPEG_INTERNALS
39
40#undef RIGHT_SHIFT_IS_UNSIGNED
41#define INLINE __inline__
42/* These are for configuring the JPEG memory manager. */
43#undef DEFAULT_MAX_MEM
44#undef NO_MKTEMP
45
46#endif /* JPEG_INTERNALS */
47
48#ifdef CJPEG_WRBMP_JPEG_CJPEG_DJPEG
49
50#define CJPEG_WRBMP_BMP_SUPPORTED /* BMP image file format */
51#define CJPEG_WRBMP_GIF_SUPPORTED /* GIF image file format */
52#define CJPEG_WRBMP_PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */
53#undef RLE_SUPPORTED /* Utah RLE image file format */
54#define CJPEG_WRBMP_TARGA_SUPPORTED /* Targa image file format */
55
56#undef TWO_FILE_COMMANDLINE
57#undef NEED_SIGNAL_CATCHER
58#undef DONT_USE_B_MODE
59
60/* Define this if you want percent-done progress reports from cjpeg/djpeg. */
61#undef PROGRESS_REPORT
62
63#endif /* JPEG_CJPEG_DJPEG */
64
65#endif
diff --git a/baseline/source/cjpeg_wrbmp/jerror.h b/baseline/source/cjpeg_wrbmp/jerror.h
new file mode 100644
index 0000000..1dc2798
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/jerror.h
@@ -0,0 +1,203 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: jerror.h
7
8 Author: Thomas G. Lane.
9
10 This file defines the error and message codes for the JPEG library.
11 Edit this file to add new codes, or to translate the message strings to
12 some other language.
13 A set of error-reporting macros are defined too. Some applications using
14 the JPEG library may wish to include this file to get the error codes
15 sand/or the macros.
16
17 Source: Independent JPEG Group's software
18
19 Changes: no major functional changes
20
21 License: See the accompanying README file
22 */
23
24/*
25 To define the enum list of message codes, include this file without
26 defining macro JMESSAGE. To create a message string table, include it
27 again with a suitable JMESSAGE definition (see jerror.c for an example).
28*/
29#ifndef CJPEG_WRBMP_JMESSAGE
30#ifndef JERROR_H
31/* First time through, define the enum list */
32#define CJPEG_WRBMP_JMAKE_ENUM_LIST
33#else
34/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
35#define CJPEG_WRBMP_JMESSAGE(code,string)
36#endif /* JERROR_H */
37#endif /* JMESSAGE */
38
39#ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
40
41typedef enum {
42
43#define CJPEG_WRBMP_JMESSAGE(code,string) code ,
44
45#endif /* JMAKE_ENUM_LIST */
46
47 CJPEG_WRBMP_JMESSAGE( JMSG_NOMESSAGE, "Bogus message code %d" ) /* Must be first entry! */
48
49 /* For maintenance convenience, list is alphabetical by message code name */
50 CJPEG_WRBMP_JMESSAGE( JERR_ARITH_NOTIMPL,
51 "Sorry, there are legal restrictions on arithmetic coding" )
52 CJPEG_WRBMP_JMESSAGE( JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix" )
53 CJPEG_WRBMP_JMESSAGE( JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix" )
54 CJPEG_WRBMP_JMESSAGE( JERR_BAD_BUFFER_MODE, "Bogus buffer control mode" )
55 CJPEG_WRBMP_JMESSAGE( JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS" )
56 CJPEG_WRBMP_JMESSAGE( JERR_BAD_DCT_COEF, "DCT coefficient out of range" )
57 CJPEG_WRBMP_JMESSAGE( JERR_BAD_DCTSIZE, "IDCT output block size %d not supported" )
58 CJPEG_WRBMP_JMESSAGE( JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition" )
59 CJPEG_WRBMP_JMESSAGE( JERR_BAD_IN_COLORSPACE, "Bogus input colorspace" )
60 CJPEG_WRBMP_JMESSAGE( JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace" )
61 CJPEG_WRBMP_JMESSAGE( JERR_BAD_LENGTH, "Bogus marker length" )
62 CJPEG_WRBMP_JMESSAGE( JERR_BAD_LIB_VERSION,
63 "Wrong JPEG library version: library is %d, caller expects %d" )
64 CJPEG_WRBMP_JMESSAGE( JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan" )
65 CJPEG_WRBMP_JMESSAGE( JERR_BAD_POOL_ID, "Invalid memory pool code %d" )
66 CJPEG_WRBMP_JMESSAGE( JERR_BAD_PRECISION, "Unsupported JPEG data precision %d" )
67 CJPEG_WRBMP_JMESSAGE( JERR_BAD_PROGRESSION,
68 "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d" )
69 CJPEG_WRBMP_JMESSAGE( JERR_BAD_PROG_SCRIPT,
70 "Invalid progressive parameters at scan script entry %d" )
71 CJPEG_WRBMP_JMESSAGE( JERR_BAD_SAMPLING, "Bogus sampling factors" )
72 CJPEG_WRBMP_JMESSAGE( JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d" )
73 CJPEG_WRBMP_JMESSAGE( JERR_BAD_STATE, "Improper call to JPEG library in state %d" )
74 CJPEG_WRBMP_JMESSAGE( JERR_BAD_STRUCT_SIZE,
75 "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u" )
76 CJPEG_WRBMP_JMESSAGE( JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access" )
77 CJPEG_WRBMP_JMESSAGE( JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small" )
78 CJPEG_WRBMP_JMESSAGE( JERR_CANT_SUSPEND, "Suspension not allowed here" )
79 CJPEG_WRBMP_JMESSAGE( JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet" )
80 CJPEG_WRBMP_JMESSAGE( JERR_COMPONENT_COUNT, "Too many color components: %d, max %d" )
81 CJPEG_WRBMP_JMESSAGE( JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request" )
82 CJPEG_WRBMP_JMESSAGE( JERR_DAC_INDEX, "Bogus DAC index %d" )
83 CJPEG_WRBMP_JMESSAGE( JERR_DAC_VALUE, "Bogus DAC value 0x%x" )
84 CJPEG_WRBMP_JMESSAGE( JERR_DHT_INDEX, "Bogus DHT index %d" )
85 CJPEG_WRBMP_JMESSAGE( JERR_DQT_INDEX, "Bogus DQT index %d" )
86 CJPEG_WRBMP_JMESSAGE( JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)" )
87 CJPEG_WRBMP_JMESSAGE( JERR_EMS_READ, "Read from EMS failed" )
88 CJPEG_WRBMP_JMESSAGE( JERR_EMS_WRITE, "Write to EMS failed" )
89 CJPEG_WRBMP_JMESSAGE( JERR_EOI_EXPECTED, "Didn't expect more than one scan" )
90 CJPEG_WRBMP_JMESSAGE( JERR_FILE_READ, "Input file read error" )
91 CJPEG_WRBMP_JMESSAGE( JERR_FILE_WRITE, "Output file write error --- out of disk space?" )
92 CJPEG_WRBMP_JMESSAGE( JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet" )
93 CJPEG_WRBMP_JMESSAGE( JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow" )
94 CJPEG_WRBMP_JMESSAGE( JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry" )
95 CJPEG_WRBMP_JMESSAGE( JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels" )
96 CJPEG_WRBMP_JMESSAGE( JERR_INPUT_EMPTY, "Empty input file" )
97 CJPEG_WRBMP_JMESSAGE( JERR_INPUT_EOF, "Premature end of input file" )
98 CJPEG_WRBMP_JMESSAGE( JERR_MISMATCHED_QUANT_TABLE,
99 "Cannot transcode due to multiple use of quantization table %d" )
100 CJPEG_WRBMP_JMESSAGE( JERR_MISSING_DATA, "Scan script does not transmit all data" )
101 CJPEG_WRBMP_JMESSAGE( JERR_MODE_CHANGE, "Invalid color quantization mode change" )
102 CJPEG_WRBMP_JMESSAGE( JERR_NOTIMPL, "Not implemented yet" )
103 CJPEG_WRBMP_JMESSAGE( JERR_NOT_COMPILED, "Requested feature was omitted at compile time" )
104 CJPEG_WRBMP_JMESSAGE( JERR_NO_BACKING_STORE, "Backing store not supported" )
105 CJPEG_WRBMP_JMESSAGE( JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined" )
106 CJPEG_WRBMP_JMESSAGE( JERR_NO_IMAGE, "JPEG datastream contains no image" )
107 CJPEG_WRBMP_JMESSAGE( JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined" )
108 CJPEG_WRBMP_JMESSAGE( JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x" )
109 CJPEG_WRBMP_JMESSAGE( JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)" )
110 CJPEG_WRBMP_JMESSAGE( JERR_QUANT_COMPONENTS,
111 "Cannot quantize more than %d color components" )
112 CJPEG_WRBMP_JMESSAGE( JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors" )
113 CJPEG_WRBMP_JMESSAGE( JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors" )
114 CJPEG_WRBMP_JMESSAGE( JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers" )
115 CJPEG_WRBMP_JMESSAGE( JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker" )
116 CJPEG_WRBMP_JMESSAGE( JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x" )
117 CJPEG_WRBMP_JMESSAGE( JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers" )
118 CJPEG_WRBMP_JMESSAGE( JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF" )
119 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_CREATE, "Failed to create temporary file %s" )
120 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_READ, "Read failed on temporary file" )
121 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_SEEK, "Seek failed on temporary file" )
122 CJPEG_WRBMP_JMESSAGE( JERR_TFILE_WRITE,
123 "Write failed on temporary file --- out of disk space?" )
124 CJPEG_WRBMP_JMESSAGE( JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines" )
125 CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x" )
126 CJPEG_WRBMP_JMESSAGE( JERR_VIRTUAL_BUG, "Virtual array controller messed up" )
127 CJPEG_WRBMP_JMESSAGE( JERR_WIDTH_OVERFLOW, "Image too wide for this implementation" )
128 CJPEG_WRBMP_JMESSAGE( JERR_XMS_READ, "Read from XMS failed" )
129 CJPEG_WRBMP_JMESSAGE( JERR_XMS_WRITE, "Write to XMS failed" )
130 CJPEG_WRBMP_JMESSAGE( JMSG_COPYRIGHT, JCOPYRIGHT )
131 CJPEG_WRBMP_JMESSAGE( JMSG_VERSION, JVERSION )
132 CJPEG_WRBMP_JMESSAGE( JTRC_16BIT_TABLES,
133 "Caution: quantization tables are too coarse for baseline JPEG" )
134 CJPEG_WRBMP_JMESSAGE( JTRC_ADOBE,
135 "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d" )
136 CJPEG_WRBMP_JMESSAGE( JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u" )
137 CJPEG_WRBMP_JMESSAGE( JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u" )
138 CJPEG_WRBMP_JMESSAGE( JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x" )
139 CJPEG_WRBMP_JMESSAGE( JTRC_DHT, "Define Huffman Table 0x%02x" )
140 CJPEG_WRBMP_JMESSAGE( JTRC_DQT, "Define Quantization Table %d precision %d" )
141 CJPEG_WRBMP_JMESSAGE( JTRC_DRI, "Define Restart Interval %u" )
142 CJPEG_WRBMP_JMESSAGE( JTRC_EMS_CLOSE, "Freed EMS handle %u" )
143 CJPEG_WRBMP_JMESSAGE( JTRC_EMS_OPEN, "Obtained EMS handle %u" )
144 CJPEG_WRBMP_JMESSAGE( JTRC_EOI, "End Of Image" )
145 CJPEG_WRBMP_JMESSAGE( JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d" )
146 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d" )
147 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_BADTHUMBNAILSIZE,
148 "Warning: thumbnail image size does not match data length %u" )
149 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_EXTENSION,
150 "JFIF extension marker: type 0x%02x, length %u" )
151 CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image" )
152 CJPEG_WRBMP_JMESSAGE( JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u" )
153 CJPEG_WRBMP_JMESSAGE( JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x" )
154 CJPEG_WRBMP_JMESSAGE( JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u" )
155 CJPEG_WRBMP_JMESSAGE( JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors" )
156 CJPEG_WRBMP_JMESSAGE( JTRC_QUANT_NCOLORS, "Quantizing to %d colors" )
157 CJPEG_WRBMP_JMESSAGE( JTRC_QUANT_SELECTED, "Selected %d colors for quantization" )
158 CJPEG_WRBMP_JMESSAGE( JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d" )
159 CJPEG_WRBMP_JMESSAGE( JTRC_RST, "RST%d" )
160 CJPEG_WRBMP_JMESSAGE( JTRC_SMOOTH_NOTIMPL,
161 "Smoothing not supported with nonstandard sampling ratios" )
162 CJPEG_WRBMP_JMESSAGE( JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d" )
163 CJPEG_WRBMP_JMESSAGE( JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d" )
164 CJPEG_WRBMP_JMESSAGE( JTRC_SOI, "Start of Image" )
165 CJPEG_WRBMP_JMESSAGE( JTRC_SOS, "Start Of Scan: %d components" )
166 CJPEG_WRBMP_JMESSAGE( JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d" )
167 CJPEG_WRBMP_JMESSAGE( JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d" )
168 CJPEG_WRBMP_JMESSAGE( JTRC_TFILE_CLOSE, "Closed temporary file %s" )
169 CJPEG_WRBMP_JMESSAGE( JTRC_TFILE_OPEN, "Opened temporary file %s" )
170 CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_JPEG,
171 "JFIF extension marker: JPEG-compressed thumbnail image, length %u" )
172 CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_PALETTE,
173 "JFIF extension marker: palette thumbnail image, length %u" )
174 CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_RGB,
175 "JFIF extension marker: RGB thumbnail image, length %u" )
176 CJPEG_WRBMP_JMESSAGE( JTRC_UNKNOWN_IDS,
177 "Unrecognized component IDs %d %d %d, assuming YCbCr" )
178 CJPEG_WRBMP_JMESSAGE( JTRC_XMS_CLOSE, "Freed XMS handle %u" )
179 CJPEG_WRBMP_JMESSAGE( JTRC_XMS_OPEN, "Obtained XMS handle %u" )
180 CJPEG_WRBMP_JMESSAGE( JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d" )
181 CJPEG_WRBMP_JMESSAGE( JWRN_BOGUS_PROGRESSION,
182 "Inconsistent progression sequence for component %d coefficient %d" )
183 CJPEG_WRBMP_JMESSAGE( JWRN_EXTRANEOUS_DATA,
184 "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x" )
185 CJPEG_WRBMP_JMESSAGE( JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment" )
186 CJPEG_WRBMP_JMESSAGE( JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code" )
187 CJPEG_WRBMP_JMESSAGE( JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d" )
188 CJPEG_WRBMP_JMESSAGE( JWRN_JPEG_EOF, "Premature end of JPEG file" )
189 CJPEG_WRBMP_JMESSAGE( JWRN_MUST_RESYNC,
190 "Corrupt JPEG data: found marker 0x%02x instead of RST%d" )
191 CJPEG_WRBMP_JMESSAGE( JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG" )
192 CJPEG_WRBMP_JMESSAGE( JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines" )
193
194 #ifdef CJPEG_WRBMP_JMAKE_ENUM_LIST
195
196 JMSG_LASTMSGCODE
197} CJPEG_WRBMP_J_MESSAGE_CODE;
198
199#undef CJPEG_WRBMP_JMAKE_ENUM_LIST
200 #endif /* JMAKE_ENUM_LIST */
201
202/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
203#undef CJPEG_WRBMP_JMESSAGE
diff --git a/baseline/source/cjpeg_wrbmp/jmorecfg.h b/baseline/source/cjpeg_wrbmp/jmorecfg.h
new file mode 100644
index 0000000..84ee16a
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/jmorecfg.h
@@ -0,0 +1,95 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: jmorecfg.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 This file contains additional configuration options that customize the
14 JPEG software for special applications or support machine-dependent
15 optimizations. Most users will not need to touch this file.
16
17 Source: Independent JPEG Group's software
18
19 Changes: no major functional changes
20
21 License: See the accompanying README file
22*/
23
24#ifndef JMORECFG_H
25#define JMORECFG_H
26
27
28#define CJPEG_WRBMP_GETJSAMPLE(value) ((int) (value))
29
30typedef unsigned char CJPEG_WRBMP_JSAMPLE;
31typedef short CJPEG_WRBMP_JCOEF;
32typedef unsigned char CJPEG_WRBMP_JOCTET;
33
34/* These typedefs are used for various table entries and so forth.
35 They must be at least as wide as specified; but making them too big
36 won't cost a huge amount of memory, so we don't provide special
37 extraction code like we did for JSAMPLE. (In other words, these
38 typedefs live at a different point on the speed/space tradeoff curve.)
39*/
40
41/* UINT8 must hold at least the values 0..255. */
42
43typedef unsigned char CJPEG_WRBMP_UINT8;
44
45
46/* UINT16 must hold at least the values 0..65535. */
47
48typedef unsigned short CJPEG_WRBMP_UINT16;
49
50
51/* INT16 must hold at least the values -32768..32767. */
52
53#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */
54typedef short INT16;
55#endif
56
57/* INT32 must hold at least signed 32-bit values. */
58
59#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
60typedef long INT32;
61#endif
62
63typedef unsigned int CJPEG_WRBMP_JDIMENSION;
64
65/* This macro is used to declare a "method", that is, a function pointer.
66 We want to supply prototype parameters if the compiler can cope.
67 Note that the arglist parameter must be parenthesized!
68 Again, you can customize this if you need special linkage keywords.
69*/
70
71#define EXTERN(type) extern type
72
73#ifdef CJPEG_WRBMP_HAVE_PROTOTYPES
74#define CJPEG_WRBMP_JMETHOD(type,methodname,arglist) type (*methodname) arglist
75#else
76#define CJPEG_WRBMP_JMETHOD(type,methodname,arglist) type (*methodname) ()
77#endif
78
79
80/* Here is the pseudo-keyword for declaring pointers that must be "far"
81 on 80x86 machines. Most of the specialized coding for 80x86 is handled
82 by just saying "FAR *" where such a pointer is needed. In a few places
83 explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
84*/
85
86#ifdef CJPEG_JPEG6B_WRBMP_NEED_FAR_POINTERS
87#define CJPEG_WRBMP_FAR far
88#else
89#define CJPEG_WRBMP_FAR
90#endif
91
92#ifndef CJPEG_JPEG6B_WRBMP_HAVE_BOOLEAN
93typedef int cjpeg_wrbmp_boolean;
94#endif
95#endif
diff --git a/baseline/source/cjpeg_wrbmp/jpeglib.h b/baseline/source/cjpeg_wrbmp/jpeglib.h
new file mode 100644
index 0000000..ab3fba3
--- /dev/null
+++ b/baseline/source/cjpeg_wrbmp/jpeglib.h
@@ -0,0 +1,869 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: jpeglib.h
7
8 Author: Thomas G. Lane.
9
10 This file is part of the Independent JPEG Group's software.
11 For conditions of distribution and use, see the accompanying README file.
12
13 This file defines the application interface for the JPEG library.
14 Most applications using the library need only include this file,
15 and perhaps jerror.h if they want to know the exact error codes.
16
17 Source: Independent JPEG Group's software
18
19 Changes: no major functional changes
20
21 License: See the accompanying README file
22*/
23
24
25#ifndef JPEGLIB_H
26#define JPEGLIB_H
27
28typedef int CJPEG_WRBMP_FILE;
29typedef unsigned int cjpeg_wrbmp_size_x;
30
31/*
32 First we include the configuration files that record how this
33 installation of the JPEG library is set up. jconfig.h can be
34 generated automatically for many systems. jmorecfg.h contains
35 manual configuration options that most people need not worry about.
36*/
37
38#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */
39#include "jconfig.h" /* widely used configuration options */
40#endif
41#include "jmorecfg.h" /* seldom changed options */
42
43/* Data structures for images (arrays of samples and of DCT coefficients).
44 On 80x86 machines, the image arrays are too big for near pointers,
45 but the pointer arrays can fit in near memory.
46*/
47
48typedef CJPEG_WRBMP_JSAMPLE CJPEG_WRBMP_FAR
49*CJPEG_WRBMP_JSAMPROW; /* ptr to one image row of pixel samples. */
50typedef CJPEG_WRBMP_JSAMPROW
51*CJPEG_WRBMP_JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */
52typedef CJPEG_WRBMP_JSAMPARRAY
53*CJPEG_WRBMP_JSAMPIMAGE; /* a 3-D sample array: top index is color */
54
55typedef CJPEG_WRBMP_JCOEF
56CJPEG_WRBMP_JBLOCK[64]; /* one block of coefficients */
57typedef CJPEG_WRBMP_JBLOCK CJPEG_WRBMP_FAR
58*CJPEG_WRBMP_JBLOCKROW; /* pointer to one row of coefficient blocks */
59typedef CJPEG_WRBMP_JBLOCKROW
60*CJPEG_WRBMP_JBLOCKARRAY; /* a 2-D array of coefficient blocks */
61typedef CJPEG_WRBMP_JBLOCKARRAY
62*CJPEG_WRBMP_JBLOCKIMAGE; /* a 3-D array of coefficient blocks */
63
64typedef CJPEG_WRBMP_JCOEF CJPEG_WRBMP_FAR
65*JCOEFPTR; /* useful in a couple of places */
66
67
68/* Types for JPEG compression parameters and working tables. */
69
70
71/* DCT coefficient quantization tables. */
72
73typedef struct {
74 /* This array gives the coefficient quantizers in natural array order
75 (not the zigzag order in which they are stored in a JPEG DQT marker).
76 CAUTION: IJG versions prior to v6a kept this array in zigzag order.
77 */
78 CJPEG_WRBMP_UINT16
79 quantval[64]; /* quantization step for each coefficient */
80 /* This field is used only during compression. It's initialized FALSE when
81 the table is created, and set TRUE when it's been output to the file.
82 You could suppress output of a table by setting this to TRUE.
83 (See jpeg_suppress_tables for an example.)
84 */
85 cjpeg_wrbmp_boolean sent_table; /* TRUE when table has been output */
86} CJPEG_WRBMP_JQUANT_TBL;
87
88
89/* Huffman coding tables. */
90
91typedef struct {
92 /* These two fields directly represent the contents of a JPEG DHT marker */
93 CJPEG_WRBMP_UINT8 bits[17]; /* bits[k] = # of symbols with codes of */
94 /* length k bits; bits[0] is unused */
95 CJPEG_WRBMP_UINT8
96 huffval[256]; /* The symbols, in order of incr code length */
97 /* This field is used only during compression. It's initialized FALSE when
98 the table is created, and set TRUE when it's been output to the file.
99 You could suppress output of a table by setting this to TRUE.
100 (See jpeg_suppress_tables for an example.)
101 */
102 cjpeg_wrbmp_boolean sent_table; /* TRUE when table has been output */
103} CJPEG_WRBMP_JHUFF_TBL;
104
105
106/* Basic info about one component (color channel). */
107
108typedef struct {
109 /* These values are fixed over the whole image. */
110 /* For compression, they must be supplied by parameter setup; */
111 /* for decompression, they are read from the SOF marker. */
112 int component_id; /* identifier for this component (0..255) */
113 int component_index; /* its index in SOF or cinfo->comp_info[] */
114 int h_samp_factor; /* horizontal sampling factor (1..4) */
115 int v_samp_factor; /* vertical sampling factor (1..4) */
116 int quant_tbl_no; /* quantization table selector (0..3) */
117 /* These values may vary between scans. */
118 /* For compression, they must be supplied by parameter setup; */
119 /* for decompression, they are read from the SOS marker. */
120 /* The decompressor output side may not use these variables. */
121 int dc_tbl_no; /* DC entropy table selector (0..3) */
122 int ac_tbl_no; /* AC entropy table selector (0..3) */
123
124 /* Remaining fields should be treated as private by applications. */
125
126 /* These values are computed during compression or decompression startup: */
127 /* Component's size in DCT blocks.
128 Any dummy blocks added to complete an MCU are not counted; therefore
129 these values do not depend on whether a scan is interleaved or not.
130 */
131 CJPEG_WRBMP_JDIMENSION width_in_blocks;
132 CJPEG_WRBMP_JDIMENSION height_in_blocks;
133 /* Size of a DCT block in samples. Always DCTSIZE for compression.
134 For decompression this is the size of the output from one DCT block,
135 reflecting any scaling we choose to apply during the IDCT step.
136 Values of 1,2,4,8 are likely to be supported. Note that different
137 components may receive different IDCT scalings.
138 */
139 int DCT_scaled_size;
140 /* The downsampled dimensions are the component's actual, unpadded number
141 of samples at the main buffer (preprocessing/compression interface), thus
142 downsampled_width = ceil(image_width * Hi/Hmax)
143 and similarly for height. For decompression, IDCT scaling is included, so
144 downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
145 */
146 CJPEG_WRBMP_JDIMENSION downsampled_width; /* actual width in samples */
147 CJPEG_WRBMP_JDIMENSION downsampled_height; /* actual height in samples */
148 /* This flag is used only for decompression. In cases where some of the
149 components will be ignored (eg grayscale output from YCbCr image),
150 we can skip most computations for the unused components.
151 */
152 cjpeg_wrbmp_boolean
153 component_needed; /* do we need the value of this component? */
154
155 /* These values are computed before starting a scan of the component. */
156 /* The decompressor output side may not use these variables. */
157 int MCU_width; /* number of blocks per MCU, horizontally */
158 int MCU_height; /* number of blocks per MCU, vertically */
159 int MCU_blocks; /* MCU_width * MCU_height */
160 int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */
161 int last_col_width; /* # of non-dummy blocks across in last MCU */
162 int last_row_height; /* # of non-dummy blocks down in last MCU */
163
164 /* Saved quantization table for component; NULL if none yet saved.
165 See jdinput.c comments about the need for this information.
166 This field is currently used only for decompression.
167 */
168 CJPEG_WRBMP_JQUANT_TBL *quant_table;
169
170 /* Private per-component storage for DCT or IDCT subsystem. */
171 void *dct_table;
172} cjpeg_wrbmp_jpeg_component_info;
173
174
175/* The script for encoding a multiple-scan file is an array of these: */
176
177typedef struct {
178 int comps_in_scan; /* number of components encoded in this scan */
179 int component_index[4]; /* their SOF/comp_info[] indexes */
180 int Ss, Se; /* progressive JPEG spectral selection parms */
181 int Ah, Al; /* progressive JPEG successive approx. parms */
182} cjpeg_wrbmp_jpeg_scan_info;
183
184/* The decompressor can save APPn and COM markers in a list of these: */
185
186typedef struct cjpeg_wrbmp_jpeg_marker_struct CJPEG_WRBMP_FAR
187 *jpeg_saved_marker_ptr;
188
189struct cjpeg_wrbmp_jpeg_marker_struct {
190 jpeg_saved_marker_ptr next; /* next in list, or NULL */
191 CJPEG_WRBMP_UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */
192 unsigned int original_length; /* # bytes of data in the file */
193 unsigned int data_length; /* # bytes of data saved at data[] */
194 CJPEG_WRBMP_JOCTET CJPEG_WRBMP_FAR
195 *data; /* the data contained in the marker */
196 /* the marker length word is not counted in data_length or original_length */
197};
198
199/* Known color spaces. */
200
201typedef enum {
202 JCS_UNKNOWN, /* error/unspecified */
203 JCS_GRAYSCALE, /* monochrome */
204 JCS_RGB, /* red/green/blue */
205 JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */
206 JCS_CMYK, /* C/M/Y/K */
207 JCS_YCCK /* Y/Cb/Cr/K */
208} CJPEG_WRBMP_J_COLOR_SPACE;
209
210/* DCT/IDCT algorithm options. */
211
212typedef enum {
213 JDCT_ISLOW, /* slow but accurate integer algorithm */
214 JDCT_IFAST, /* faster, less accurate integer method */
215 JDCT_FLOAT /* floating-point: accurate, fast on fast HW */
216} CJPEG_WRBMP_J_DCT_METHOD;
217
218/* Dithering options for decompression. */
219
220typedef enum {
221 JDITHER_NONE, /* no dithering */
222 JDITHER_ORDERED, /* simple ordered dither */
223 JDITHER_FS /* Floyd-Steinberg error diffusion dither */
224} CJPEG_WRBMP_J_DITHER_MODE;
225
226
227/* Common fields between JPEG compression and decompression master structs. */
228
229#define cjpeg_wrbmp_jpeg_common_fields \
230 struct cjpeg_wrbmp_jpeg_error_mgr * err; /* Error handler module */\
231 struct cjpeg_wrbmp_jpeg_memory_mgr * mem; /* Memory manager module */\
232 struct cjpeg_wrbmp_jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
233 void * client_data; /* Available for use by application */\
234 cjpeg_wrbmp_boolean is_decompressor; /* So common code can tell which is which */\
235 int global_state /* For checking call sequence validity */
236
237/* Routines that are to be used by both halves of the library are declared
238 to receive a pointer to this structure. There are no actual instances of
239 jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
240*/
241struct cjpeg_wrbmp_jpeg_common_struct {
242 cjpeg_wrbmp_jpeg_common_fields; /* Fields common to both master struct types */
243 /* Additional fields follow in an actual jpeg_compress_struct or
244 jpeg_decompress_struct. All three structs must agree on these
245 initial fields! (This would be a lot cleaner in C++.)
246 */
247};
248
249typedef struct cjpeg_wrbmp_jpeg_common_struct
250 *cjpeg_wrbmp_j_common_ptr;
251typedef struct cjpeg_wrbmp_jpeg_compress_struct
252 *cjpeg_wrbmp_j_compress_ptr;
253typedef struct cjpeg_wrbmp_jpeg_decompress_struct
254 *cjpeg_wrbmp_j_decompress_ptr;
255
256
257/* Master record for a compression instance */
258
259struct cjpeg_wrbmp_jpeg_compress_struct {
260 cjpeg_wrbmp_jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */
261
262 /* Destination for compressed data */
263 struct cjpeg_wrbmp_jpeg_destination_mgr *dest;
264
265 /* Description of source image --- these fields must be filled in by
266 outer application before starting compression. in_color_space must
267 be correct before you can even call jpeg_set_defaults().
268 */
269
270 CJPEG_WRBMP_JDIMENSION image_width; /* input image width */
271 CJPEG_WRBMP_JDIMENSION image_height; /* input image height */
272 int input_components; /* # of color components in input image */
273 CJPEG_WRBMP_J_COLOR_SPACE in_color_space; /* colorspace of input image */
274
275 float input_gamma; /* image gamma of input image */
276
277 /* Compression parameters --- these fields must be set before calling
278 jpeg_start_compress(). We recommend calling jpeg_set_defaults() to
279 initialize everything to reasonable defaults, then changing anything
280 the application specifically wants to change. That way you won't get
281 burnt when new parameters are added. Also note that there are several
282 helper routines to simplify changing parameters.
283 */
284
285 int data_precision; /* bits of precision in image data */
286
287 int num_components; /* # of color components in JPEG image */
288 CJPEG_WRBMP_J_COLOR_SPACE
289 jpeg_color_space; /* colorspace of JPEG image */
290
291 cjpeg_wrbmp_jpeg_component_info *comp_info;
292 /* comp_info[i] describes component that appears i'th in SOF */
293
294 CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[4];
295 /* ptrs to coefficient quantization tables, or NULL if not defined */
296
297 CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[4];
298 CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[4];
299 /* ptrs to Huffman coding tables, or NULL if not defined */
300
301 CJPEG_WRBMP_UINT8
302 arith_dc_L[16]; /* L values for DC arith-coding tables */
303 CJPEG_WRBMP_UINT8
304 arith_dc_U[16]; /* U values for DC arith-coding tables */
305 CJPEG_WRBMP_UINT8
306 arith_ac_K[16]; /* Kx values for AC arith-coding tables */
307
308 int num_scans; /* # of entries in scan_info array */
309 const cjpeg_wrbmp_jpeg_scan_info
310 *scan_info; /* script for multi-scan file, or NULL */
311 /* The default value of scan_info is NULL, which causes a single-scan
312 sequential JPEG file to be emitted. To create a multi-scan file,
313 set num_scans and scan_info to point to an array of scan definitions.
314 */
315
316 cjpeg_wrbmp_boolean
317 raw_data_in; /* TRUE=caller supplies downsampled data */
318 cjpeg_wrbmp_boolean
319 arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
320 cjpeg_wrbmp_boolean
321 optimize_coding; /* TRUE=optimize entropy encoding parms */
322 cjpeg_wrbmp_boolean
323 CCIR601_sampling; /* TRUE=first samples are cosited */
324 int smoothing_factor; /* 1..100, or 0 for no input smoothing */
325 CJPEG_WRBMP_J_DCT_METHOD dct_method; /* DCT algorithm selector */
326
327 /* The restart interval can be specified in absolute MCUs by setting
328 restart_interval, or in MCU rows by setting restart_in_rows
329 (in which case the correct restart_interval will be figured
330 for each scan).
331 */
332 unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
333 int restart_in_rows; /* if > 0, MCU rows per restart interval */
334
335 /* Parameters controlling emission of special markers. */
336
337 cjpeg_wrbmp_boolean
338 write_JFIF_header; /* should a JFIF marker be written? */
339 CJPEG_WRBMP_UINT8
340 JFIF_major_version; /* What to write for the JFIF version number */
341 CJPEG_WRBMP_UINT8 JFIF_minor_version;
342 /* These three values are not used by the JPEG code, merely copied */
343 /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */
344 /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */
345 /* ratio is defined by X_density/Y_density even when density_unit=0. */
346 CJPEG_WRBMP_UINT8 density_unit; /* JFIF code for pixel size units */
347 CJPEG_WRBMP_UINT16 X_density; /* Horizontal pixel density */
348 CJPEG_WRBMP_UINT16 Y_density; /* Vertical pixel density */
349 cjpeg_wrbmp_boolean
350 write_Adobe_marker; /* should an Adobe marker be written? */
351
352 /* State variable: index of next scanline to be written to
353 jpeg_write_scanlines(). Application may use this to control its
354 processing loop, e.g., "while (next_scanline < image_height)".
355 */
356
357 CJPEG_WRBMP_JDIMENSION next_scanline; /* 0 .. image_height-1 */
358
359 /* Remaining fields are known throughout compressor, but generally
360 should not be touched by a surrounding application.
361 */
362
363 /*
364 These fields are computed during compression startup
365 */
366 cjpeg_wrbmp_boolean
367 progressive_mode; /* TRUE if scan script uses progressive mode */
368 int max_h_samp_factor; /* largest h_samp_factor */
369 int max_v_samp_factor; /* largest v_samp_factor */
370
371 CJPEG_WRBMP_JDIMENSION
372 total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */
373 /* The coefficient controller receives data in units of MCU rows as defined
374 for fully interleaved scans (whether the JPEG file is interleaved or not).
375 There are v_samp_factor * DCTSIZE sample rows of each component in an
376 "iMCU" (interleaved MCU) row.
377 */
378
379 /*
380 These fields are valid during any one scan.
381 They describe the components and MCUs actually appearing in the scan.
382 */
383 int comps_in_scan; /* # of JPEG components in this scan */
384 cjpeg_wrbmp_jpeg_component_info *cur_comp_info[4];
385 /* *cur_comp_info[i] describes component that appears i'th in SOS */
386
387 CJPEG_WRBMP_JDIMENSION MCUs_per_row; /* # of MCUs across the image */
388 CJPEG_WRBMP_JDIMENSION
389 MCU_rows_in_scan; /* # of MCU rows in the image */
390
391 int blocks_in_MCU; /* # of DCT blocks per MCU */
392 int MCU_membership[10];
393 /* MCU_membership[i] is index in cur_comp_info of component owning */
394 /* i'th block in an MCU */
395
396 int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */
397
398 cjpeg_wrbmp_jpeg_scan_info
399 *script_space; /* workspace for jpeg_simple_progression */
400 int script_space_size;
401};
402
403
404/* Master record for a decompression instance */
405
406struct cjpeg_wrbmp_jpeg_decompress_struct {
407 cjpeg_wrbmp_jpeg_common_fields; /* Fields shared with jpeg_compress_struct */
408
409 /* Source of compressed data */
410 struct cjpeg_wrbmp_jpeg_source_mgr *src;
411
412 /* Basic description of image --- filled in by jpeg_read_header(). */
413 /* Application may inspect these values to decide how to process image. */
414
415 CJPEG_WRBMP_JDIMENSION
416 image_width; /* nominal image width (from SOF marker) */
417 CJPEG_WRBMP_JDIMENSION image_height; /* nominal image height */
418 int num_components; /* # of color components in JPEG image */
419 CJPEG_WRBMP_J_COLOR_SPACE
420 jpeg_color_space; /* colorspace of JPEG image */
421
422 /* Decompression processing parameters --- these fields must be set before
423 calling jpeg_start_decompress(). Note that jpeg_read_header() initializes
424 them to default values.
425 */
426
427 CJPEG_WRBMP_J_COLOR_SPACE out_color_space; /* colorspace for output */
428
429 unsigned int scale_num, scale_denom; /* fraction by which to scale image */
430
431 float output_gamma; /* image gamma wanted in output */
432
433 cjpeg_wrbmp_boolean buffered_image; /* TRUE=multiple output passes */
434 cjpeg_wrbmp_boolean raw_data_out; /* TRUE=downsampled data wanted */
435
436 CJPEG_WRBMP_J_DCT_METHOD dct_method; /* IDCT algorithm selector */
437 cjpeg_wrbmp_boolean
438 do_fancy_upsampling; /* TRUE=apply fancy upsampling */
439 cjpeg_wrbmp_boolean
440 do_block_smoothing; /* TRUE=apply interblock smoothing */
441
442 cjpeg_wrbmp_boolean
443 quantize_colors; /* TRUE=colormapped output wanted */
444 /* the following are ignored if not quantize_colors: */
445 CJPEG_WRBMP_J_DITHER_MODE
446 dither_mode; /* type of color dithering to use */
447 cjpeg_wrbmp_boolean
448 two_pass_quantize; /* TRUE=use two-pass color quantization */
449 int desired_number_of_colors; /* max # colors to use in created colormap */
450 /* these are significant only in buffered-image mode: */
451 cjpeg_wrbmp_boolean
452 enable_1pass_quant; /* enable future use of 1-pass quantizer */
453 cjpeg_wrbmp_boolean
454 enable_EXTERNal_quant;/* enable future use of EXTERNal colormap */
455 cjpeg_wrbmp_boolean
456 enable_2pass_quant; /* enable future use of 2-pass quantizer */
457
458 /* Description of actual output image that will be returned to application.
459 These fields are computed by jpeg_start_decompress().
460 You can also use jpeg_calc_output_dimensions() to determine these values
461 in advance of calling jpeg_start_decompress().
462 */
463
464 CJPEG_WRBMP_JDIMENSION output_width; /* scaled image width */
465 CJPEG_WRBMP_JDIMENSION output_height; /* scaled image height */
466 int out_color_components; /* # of color components in out_color_space */
467 int output_components; /* # of color components returned */
468 /* output_components is 1 (a colormap index) when quantizing colors;
469 otherwise it equals out_color_components.
470 */
471 int rec_outbuf_height; /* min recommended height of scanline buffer */
472 /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
473 high, space and time will be wasted due to unnecessary data copying.
474 Usually rec_outbuf_height will be 1 or 2, at most 4.
475 */
476
477 /* When quantizing colors, the output colormap is described by these fields.
478 The application can supply a colormap by setting colormap non-NULL before
479 calling jpeg_start_decompress; otherwise a colormap is created during
480 jpeg_start_decompress or jpeg_start_output.
481 The map has out_color_components rows and actual_number_of_colors columns.
482 */
483 int actual_number_of_colors; /* number of entries in use */
484 CJPEG_WRBMP_JSAMPARRAY
485 colormap; /* The color map as a 2-D pixel array */
486
487 /* State variables: these variables indicate the progress of decompression.
488 The application may examine these but must not modify them.
489 */
490
491 /* Row index of next scanline to be read from jpeg_read_scanlines().
492 Application may use this to control its processing loop, e.g.,
493 "while (output_scanline < output_height)".
494 */
495 CJPEG_WRBMP_JDIMENSION output_scanline; /* 0 .. output_height-1 */
496
497 /* Current input scan number and number of iMCU rows completed in scan.
498 These indicate the progress of the decompressor input side.
499 */
500 int input_scan_number; /* Number of SOS markers seen so far */
501 CJPEG_WRBMP_JDIMENSION
502 input_iMCU_row; /* Number of iMCU rows completed */
503
504 /* The "output scan number" is the notional scan being displayed by the
505 output side. The decompressor will not allow output scan/row number
506 to get ahead of input scan/row, but it can fall arbitrarily far behind.
507 */
508 int output_scan_number; /* Nominal scan number being displayed */
509 CJPEG_WRBMP_JDIMENSION output_iMCU_row; /* Number of iMCU rows read */
510
511 /* Current progression status. coef_bits[c][i] indicates the precision
512 with which component c's DCT coefficient i (in zigzag order) is known.
513 It is -1 when no data has yet been received, otherwise it is the point
514 transform (shift) value for the most recent scan of the coefficient
515 (thus, 0 at completion of the progression).
516 This pointer is NULL when reading a non-progressive file.
517 */
518 int ( *coef_bits )[64]; /* -1 or current Al value for each coef */
519
520 /* Internal JPEG parameters --- the application usually need not look at
521 these fields. Note that the decompressor output side may not use
522 any parameters that can change between scans.
523 */
524
525 /* Quantization and Huffman tables are carried forward across input
526 datastreams when processing abbreviated JPEG datastreams.
527 */
528
529 CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[4];
530 /* ptrs to coefficient quantization tables, or NULL if not defined */
531
532 CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[4];
533 CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[4];
534 /* ptrs to Huffman coding tables, or NULL if not defined */
535
536 /* These parameters are never carried across datastreams, since they
537 are given in SOF/SOS markers or defined to be reset by SOI.
538 */
539
540 int data_precision; /* bits of precision in image data */
541
542 cjpeg_wrbmp_jpeg_component_info *comp_info;
543 /* comp_info[i] describes component that appears i'th in SOF */
544
545 cjpeg_wrbmp_boolean
546 progressive_mode; /* TRUE if SOFn specifies progressive mode */
547 cjpeg_wrbmp_boolean
548 arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
549
550 CJPEG_WRBMP_UINT8
551 arith_dc_L[16]; /* L values for DC arith-coding tables */
552 CJPEG_WRBMP_UINT8
553 arith_dc_U[16]; /* U values for DC arith-coding tables */
554 CJPEG_WRBMP_UINT8
555 arith_ac_K[16]; /* Kx values for AC arith-coding tables */
556
557 unsigned int
558 restart_interval; /* MCUs per restart interval, or 0 for no restart */
559
560 /* These fields record data obtained from optional markers recognized by
561 the JPEG library.
562 */
563 cjpeg_wrbmp_boolean
564 saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */
565 /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
566 CJPEG_WRBMP_UINT8 JFIF_major_version; /* JFIF version number */
567 CJPEG_WRBMP_UINT8 JFIF_minor_version;
568 CJPEG_WRBMP_UINT8 density_unit; /* JFIF code for pixel size units */
569 CJPEG_WRBMP_UINT16 X_density; /* Horizontal pixel density */
570 CJPEG_WRBMP_UINT16 Y_density; /* Vertical pixel density */
571 cjpeg_wrbmp_boolean
572 saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */
573 CJPEG_WRBMP_UINT8
574 Adobe_transform; /* Color transform code from Adobe marker */
575
576 cjpeg_wrbmp_boolean
577 CCIR601_sampling; /* TRUE=first samples are cosited */
578
579 /* Aside from the specific data retained from APPn markers known to the
580 library, the uninterpreted contents of any or all APPn and COM markers
581 can be saved in a list for examination by the application.
582 */
583 jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
584
585 /* Remaining fields are known throughout decompressor, but generally
586 should not be touched by a surrounding application.
587 */
588
589 /*
590 These fields are computed during decompression startup
591 */
592 int max_h_samp_factor; /* largest h_samp_factor */
593 int max_v_samp_factor; /* largest v_samp_factor */
594
595 int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */
596
597 CJPEG_WRBMP_JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */
598 /* The coefficient controller's input and output progress is measured in
599 units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows
600 in fully interleaved JPEG scans, but are used whether the scan is
601 interleaved or not. We define an iMCU row as v_samp_factor DCT block
602 rows of each component. Therefore, the IDCT output contains
603 v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
604 */
605
606 CJPEG_WRBMP_JSAMPLE
607 *sample_range_limit; /* table for fast range-limiting */
608
609 /*
610 These fields are valid during any one scan.
611 They describe the components and MCUs actually appearing in the scan.
612 Note that the decompressor output side must not use these fields.
613 */
614 int comps_in_scan; /* # of JPEG components in this scan */
615 cjpeg_wrbmp_jpeg_component_info *cur_comp_info[4];
616 /* *cur_comp_info[i] describes component that appears i'th in SOS */
617
618 CJPEG_WRBMP_JDIMENSION MCUs_per_row; /* # of MCUs across the image */
619 CJPEG_WRBMP_JDIMENSION
620 MCU_rows_in_scan; /* # of MCU rows in the image */
621
622 int blocks_in_MCU; /* # of DCT blocks per MCU */
623 int MCU_membership[10];
624 /* MCU_membership[i] is index in cur_comp_info of component owning */
625 /* i'th block in an MCU */
626
627 int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */
628
629 /* This field is shared between entropy decoder and marker parser.
630 It is either zero or the code of a JPEG marker that has been
631 read from the data source, but has not yet been processed.
632 */
633 int unread_marker;
634
635 /*
636 Links to decompression subobjects (methods, private variables of modules)
637 */
638 struct jpeg_decomp_master *master;
639 struct jpeg_d_main_controller *main;
640 struct jpeg_d_coef_controller *coef;
641 struct jpeg_d_post_controller *post;
642 struct jpeg_input_controller *inputctl;
643 struct jpeg_marker_reader *marker;
644 struct jpeg_entropy_decoder *entropy;
645 struct jpeg_inverse_dct *idct;
646 struct jpeg_upsampler *upsample;
647 struct jpeg_color_deconverter *cconvert;
648 struct jpeg_color_quantizer *cquantize;
649};
650
651
652/* "Object" declarations for JPEG modules that may be supplied or called
653 directly by the surrounding application.
654 As with all objects in the JPEG library, these structs only define the
655 publicly visible methods and state variables of a module. Additional
656 private fields may exist after the public ones.
657*/
658
659
660/* Error handler object */
661
662struct cjpeg_wrbmp_jpeg_error_mgr {
663 /* Error exit handler: does not return to caller */
664 CJPEG_WRBMP_JMETHOD( void, error_exit,
665 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
666 /* Conditionally emit a trace or warning message */
667 CJPEG_WRBMP_JMETHOD( void, emit_message,
668 ( cjpeg_wrbmp_j_common_ptr cinfo, int msg_level ) );
669 /* Routine that actually outputs a trace or error message */
670 CJPEG_WRBMP_JMETHOD( void, output_message,
671 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
672 /* Format a message string for the most recent JPEG error or message */
673 CJPEG_WRBMP_JMETHOD( void, format_message,
674 ( cjpeg_wrbmp_j_common_ptr cinfo, char *buffer ) );
675#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */
676 /* Reset error state variables at start of a new image */
677 CJPEG_WRBMP_JMETHOD( void, reset_error_mgr,
678 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
679
680 /* The message ID code and any parameters are saved here.
681 A message can have one string parameter or up to 8 int parameters.
682 */
683 int msg_code;
684#define JMSG_STR_PARM_MAX 80
685 /*
686 union {
687 int i[8];
688 char s[JMSG_STR_PARM_MAX];
689 } msg_parm;
690 */
691 /* Standard state variables for error facility */
692
693 int trace_level; /* max msg_level that will be displayed */
694
695 /* For recoverable corrupt-data errors, we emit a warning message,
696 but keep going unless emit_message chooses to abort. emit_message
697 should count warnings in num_warnings. The surrounding application
698 can check for bad data by seeing if num_warnings is nonzero at the
699 end of processing.
700 */
701 long num_warnings; /* number of corrupt-data warnings */
702
703 /* These fields point to the table(s) of error message strings.
704 An application can change the table pointer to switch to a different
705 message list (typically, to change the language in which errors are
706 reported). Some applications may wish to add additional error codes
707 that will be handled by the JPEG library error mechanism; the second
708 table pointer is used for this purpose.
709
710 First table includes all errors generated by JPEG library itself.
711 Error code 0 is reserved for a "no such error string" message.
712 */
713 const char *const *jpeg_message_table; /* Library errors */
714 int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */
715 /* Second table can be added by application (see cjpeg/djpeg for example).
716 It contains strings numbered first_addon_message..last_addon_message.
717 */
718 const char *const *addon_message_table; /* Non-library errors */
719 int first_addon_message; /* code for first string in addon table */
720 int last_addon_message; /* code for last string in addon table */
721};
722
723
724/* Progress monitor object */
725
726struct cjpeg_wrbmp_jpeg_progress_mgr {
727 CJPEG_WRBMP_JMETHOD( void, progress_monitor,
728 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
729
730 long pass_counter; /* work units completed in this pass */
731 long pass_limit; /* total number of work units in this pass */
732 int completed_passes; /* passes completed so far */
733 int total_passes; /* total number of passes expected */
734};
735
736
737/* Data destination object for compression */
738
739struct cjpeg_wrbmp_jpeg_destination_mgr {
740 CJPEG_WRBMP_JOCTET
741 *next_output_byte; /* => next byte to write in buffer */
742 cjpeg_wrbmp_size_x
743 free_in_buffer; /* # of byte spaces remaining in buffer */
744
745 CJPEG_WRBMP_JMETHOD( void, init_destination,
746 ( cjpeg_wrbmp_j_compress_ptr cinfo ) );
747 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, empty_output_buffer,
748 ( cjpeg_wrbmp_j_compress_ptr cinfo ) );
749 CJPEG_WRBMP_JMETHOD( void, term_destination,
750 ( cjpeg_wrbmp_j_compress_ptr cinfo ) );
751};
752
753
754/* Data source object for decompression */
755
756struct cjpeg_wrbmp_jpeg_source_mgr {
757 const CJPEG_WRBMP_JOCTET
758 *next_input_byte; /* => next byte to read from buffer */
759 cjpeg_wrbmp_size_x bytes_in_buffer; /* # of bytes remaining in buffer */
760
761 CJPEG_WRBMP_JMETHOD( void, init_source,
762 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
763 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, fill_input_buffer,
764 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
765 CJPEG_WRBMP_JMETHOD( void, skip_input_data,
766 ( cjpeg_wrbmp_j_decompress_ptr cinfo, long num_bytes ) );
767 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, resync_to_restart,
768 ( cjpeg_wrbmp_j_decompress_ptr cinfo, int desired ) );
769 CJPEG_WRBMP_JMETHOD( void, term_source,
770 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
771};
772
773
774/* Memory manager object.
775 Allocates "small" objects (a few K total), "large" objects (tens of K),
776 and "really big" objects (virtual arrays with backing store if needed).
777 The memory manager does not allow individual objects to be freed; rather,
778 each created object is assigned to a pool, and whole pools can be freed
779 at once. This is faster and more convenient than remembering exactly what
780 to free, especially where malloc()/free() are not too speedy.
781 NB: alloc routines never return NULL. They exit to error_exit if not
782 successful.
783*/
784
785typedef struct jvirt_sarray_control *cjpeg_wrbmp_jvirt_sarray_ptr;
786typedef struct jvirt_barray_control *cjpeg_wrbmp_jvirt_barray_ptr;
787
788
789struct cjpeg_wrbmp_jpeg_memory_mgr {
790 /* Method pointers */
791 CJPEG_WRBMP_JMETHOD( void *, alloc_small,
792 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
793 cjpeg_wrbmp_size_x sizeofobject ) );
794 CJPEG_WRBMP_JMETHOD( void CJPEG_WRBMP_FAR *, alloc_large,
795 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
796 cjpeg_wrbmp_size_x sizeofobject ) );
797 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JSAMPARRAY, alloc_sarray,
798 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
799 CJPEG_WRBMP_JDIMENSION samplesperrow,
800 CJPEG_WRBMP_JDIMENSION numrows ) );
801 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JBLOCKARRAY, alloc_barray,
802 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id,
803 CJPEG_WRBMP_JDIMENSION blocksperrow,
804 CJPEG_WRBMP_JDIMENSION numrows ) );
805 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_jvirt_sarray_ptr,
806 request_virt_sarray, ( cjpeg_wrbmp_j_common_ptr cinfo,
807 int pool_id,
808 cjpeg_wrbmp_boolean pre_zero,
809 CJPEG_WRBMP_JDIMENSION samplesperrow,
810 CJPEG_WRBMP_JDIMENSION numrows,
811 CJPEG_WRBMP_JDIMENSION maxaccess ) );
812 CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_jvirt_barray_ptr,
813 request_virt_barray, ( cjpeg_wrbmp_j_common_ptr cinfo,
814 int pool_id,
815 cjpeg_wrbmp_boolean pre_zero,
816 CJPEG_WRBMP_JDIMENSION blocksperrow,
817 CJPEG_WRBMP_JDIMENSION numrows,
818 CJPEG_WRBMP_JDIMENSION maxaccess ) );
819 CJPEG_WRBMP_JMETHOD( void, realize_virt_arrays,
820 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
821 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JSAMPARRAY, access_virt_sarray,
822 ( cjpeg_wrbmp_j_common_ptr cinfo,
823 cjpeg_wrbmp_jvirt_sarray_ptr ptr,
824 CJPEG_WRBMP_JDIMENSION start_row,
825 CJPEG_WRBMP_JDIMENSION num_rows,
826 cjpeg_wrbmp_boolean writable ) );
827 CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JBLOCKARRAY, access_virt_barray,
828 ( cjpeg_wrbmp_j_common_ptr cinfo,
829 cjpeg_wrbmp_jvirt_barray_ptr ptr,
830 CJPEG_WRBMP_JDIMENSION start_row,
831 CJPEG_WRBMP_JDIMENSION num_rows,
832 cjpeg_wrbmp_boolean writable ) );
833 CJPEG_WRBMP_JMETHOD( void, free_pool,
834 ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id ) );
835 CJPEG_WRBMP_JMETHOD( void, self_destruct,
836 ( cjpeg_wrbmp_j_common_ptr cinfo ) );
837
838 /* Limit on memory allocation for this JPEG object. (Note that this is
839 merely advisory, not a guaranteed maximum; it only affects the space
840 used for virtual-array buffers.) May be changed by outer application
841 after creating the JPEG object.
842 */
843 long max_memory_to_use;
844
845 /* Maximum allocation request accepted by alloc_large. */
846 long max_alloc_chunk;
847};
848
849
850/* Routine signature for application-supplied marker processing methods.
851 Need not pass marker code since it is stored in cinfo->unread_marker.
852*/
853typedef CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean,
854 jpeg_marker_parser_method,
855 ( cjpeg_wrbmp_j_decompress_ptr cinfo ) );
856
857/*
858 The JPEG library modules define JPEG_INTERNALS before including this file.
859 The internal structure declarations are read only when that is true.
860 Applications using the library should not include jpegint.h, but may wish
861 to include jerror.h.
862*/
863
864#ifdef CJPEG_JPEG6B_WRBMP_JPEG_INTERNALS
865#include "jpegint.h" /* fetch private declarations */
866#include "jerror.h" /* fetch error codes too */
867#endif
868
869#endif /* JPEGLIB_H */
diff --git a/baseline/source/dijkstra/ChangeLog.txt b/baseline/source/dijkstra/ChangeLog.txt
new file mode 100644
index 0000000..f96350b
--- /dev/null
+++ b/baseline/source/dijkstra/ChangeLog.txt
@@ -0,0 +1,44 @@
1File: dijkstra.c
2Original provenience: network section of MiBench
3
42015-11-30:
5- Replaced "NULL" with "0", remove #include of glibc_common.h
6- Removed commented code referring to variable "qKill"
7- Made ch, i, iPrev, iNode, iCost and iDist local variables
8- Stripped (inconsistently applied) Hungarian notation, replaced
9 prefix "q" with prefix "queue" for global variables, renamed
10 "next_in" to "queueNext" and "qNew" to "newItem"
11- Initialize queueHead statically (like queueCount and queueNext)
12- Prefixed all functions and global variables with "dijkstra_",
13 renaming "dijkstra" to "dijkstra_find"
14- Calculate a checksum in dijkstra_main, return its value in new
15 function dijkstra_return
16- Added (empty) function dijkstra_init and a main function
17- Reordered functions in source code: initialization- and
18 return-value-related functions first, followed by algorithm core
19 functions, followed by main functions
20- Added function prototypes
21- Applied code formatting with astyle as in the example
22- Added general TACLeBench header to beginning of source code
23
242016-03-15:
25- Return 0 if checksum is as expected, -1 otherwise
26- Make all initializations explicit
27- Touch input matrix with volatile to rule out optimizations
28- Add entrypoint pragma
29
302016-06-14:
31- Removed cast to make C++ compiler happy
32
33Files: input.h, input.c
34Original provenience: network section of MiBench
35
362015-11-30:
37- Prefix global variable "AdjMatrix" with "dijkstra_"
38- Applied code formatting with astyle as in the example
39
40File: glibc_common.h
41Original provenience: network section of MiBench
42
432015-11-30:
44- Removed file
diff --git a/baseline/source/dijkstra/dijkstra.c b/baseline/source/dijkstra/dijkstra.c
new file mode 100644
index 0000000..af86ea6
--- /dev/null
+++ b/baseline/source/dijkstra/dijkstra.c
@@ -0,0 +1,204 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: dijkstra
7
8 Author: unknown
9
10 Function: dijkstra finds the shortest path between nodes in a graph
11
12 Source: network section of MiBench
13
14 Changes: Made some variables local, compute checksum
15
16 License: GPL
17
18*/
19
20#include "../extra.h"
21#include "input.h"
22
23/*
24 Definitions of symbolic constants
25*/
26#define NONE 9999
27#define OUT_OF_MEMORY -1
28#define QUEUE_SIZE 1000
29
30/*
31 Type declarations
32*/
33struct _NODE {
34 int dist;
35 int prev;
36};
37
38struct _QITEM {
39 int node;
40 int dist;
41 int prev;
42 struct _QITEM *next;
43};
44
45/*
46 Global variable definitions
47*/
48struct _NODE dijkstra_rgnNodes[NUM_NODES];
49
50int dijkstra_queueCount;
51int dijkstra_queueNext;
52struct _QITEM *dijkstra_queueHead;
53struct _QITEM dijkstra_queueItems[QUEUE_SIZE];
54
55int dijkstra_checksum = 0;
56
57/*
58 Forward declaration of functions
59*/
60void dijkstra_init( void );
61int dijkstra_return( void );
62int dijkstra_enqueue( int node, int dist, int prev );
63void dijkstra_dequeue( int *node, int *dist, int *prev );
64int dijkstra_qcount( void );
65int dijkstra_find( int chStart, int chEnd );
66void dijkstra_main( void );
67//int main( void );
68
69void dijkstra_init( void )
70{
71 int i, k;
72 volatile int x = 0;
73 _Pragma( "loopbound min 100 max 100" )
74 for ( i = 0; i < NUM_NODES; i++ ) {
75 _Pragma( "loopbound min 100 max 100" )
76 for ( k = 0; k < NUM_NODES; k++ ) {
77 dijkstra_AdjMatrix[i][k] ^= x;
78 }
79 }
80
81 dijkstra_queueCount = 0;
82 dijkstra_queueNext = 0;
83 dijkstra_queueHead = ( struct _QITEM * )0;
84
85 dijkstra_checksum = 0;
86}
87
88int dijkstra_return( void )
89{
90 return ( ( dijkstra_checksum == 25 ) ? 0 : -1 );
91}
92
93int dijkstra_enqueue( int node, int dist, int prev )
94{
95 struct _QITEM *newItem = &dijkstra_queueItems[dijkstra_queueNext];
96 struct _QITEM *last = dijkstra_queueHead;
97
98 if ( ++dijkstra_queueNext >= QUEUE_SIZE )
99 return OUT_OF_MEMORY;
100 newItem->node = node;
101 newItem->dist = dist;
102 newItem->prev = prev;
103 newItem->next = 0;
104
105 if ( !last )
106 dijkstra_queueHead = newItem;
107 else {
108 /* TODO: where does this magic loop bound come from? */
109 _Pragma( "loopbound min 0 max 313" )
110 while ( last->next )
111 last = last->next;
112 last->next = newItem;
113 }
114 dijkstra_queueCount++;
115 return 0;
116}
117
118void dijkstra_dequeue( int *node, int *dist, int *prev )
119{
120 if ( dijkstra_queueHead ) {
121 *node = dijkstra_queueHead->node;
122 *dist = dijkstra_queueHead->dist;
123 *prev = dijkstra_queueHead->prev;
124 dijkstra_queueHead = dijkstra_queueHead->next;
125 dijkstra_queueCount--;
126 }
127}
128
129int dijkstra_qcount( void )
130{
131 return ( dijkstra_queueCount );
132}
133
134int dijkstra_find( int chStart, int chEnd )
135{
136 int ch;
137 int prev, node;
138 int cost, dist;
139 int i;
140
141 _Pragma( "loopbound min 100 max 100" )
142 for ( ch = 0; ch < NUM_NODES; ch++ ) {
143 dijkstra_rgnNodes[ch].dist = NONE;
144 dijkstra_rgnNodes[ch].prev = NONE;
145 }
146
147 if ( chStart == chEnd ) {
148 } else {
149 dijkstra_rgnNodes[chStart].dist = 0;
150 dijkstra_rgnNodes[chStart].prev = NONE;
151
152 if ( dijkstra_enqueue ( chStart, 0, NONE ) == OUT_OF_MEMORY )
153 return OUT_OF_MEMORY;
154
155 /* TODO: where does this magic loop bound come from? */
156 _Pragma( "loopbound min 618 max 928" )
157 while ( dijkstra_qcount() > 0 ) {
158 dijkstra_dequeue ( &node, &dist, &prev );
159 _Pragma( "loopbound min 100 max 100" )
160 for ( i = 0; i < NUM_NODES; i++ ) {
161 if ( ( cost = dijkstra_AdjMatrix[node][i] ) != NONE ) {
162 if ( ( NONE == dijkstra_rgnNodes[i].dist ) ||
163 ( dijkstra_rgnNodes[i].dist > ( cost + dist ) ) ) {
164 dijkstra_rgnNodes[i].dist = dist + cost;
165 dijkstra_rgnNodes[i].prev = node;
166 if ( dijkstra_enqueue ( i, dist + cost, node ) == OUT_OF_MEMORY )
167 return OUT_OF_MEMORY;
168 }
169 }
170 }
171 }
172 }
173 return 0;
174}
175
176void _Pragma( "entrypoint" ) dijkstra_main( void )
177{
178 int i, j;
179
180 /* finds 20 shortest paths between nodes */
181 _Pragma( "loopbound min 20 max 20" )
182 for ( i = 0, j = NUM_NODES / 2; i < 20; i++, j++ ) {
183 j = j % NUM_NODES;
184 if ( dijkstra_find( i, j ) == OUT_OF_MEMORY ) {
185 dijkstra_checksum += OUT_OF_MEMORY;
186 return;
187 } else
188 dijkstra_checksum += dijkstra_rgnNodes[j].dist;
189 dijkstra_queueNext = 0;
190 }
191}
192
193int main(int argc, char** argv )
194{
195 SET_UP
196 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
197 START_LOOP
198 dijkstra_init();
199 dijkstra_main();
200 STOP_LOOP
201 }
202 WRITE_TO_FILE
203 return ( dijkstra_return() );
204}
diff --git a/baseline/source/dijkstra/input.c b/baseline/source/dijkstra/input.c
new file mode 100644
index 0000000..ab7ffd5
--- /dev/null
+++ b/baseline/source/dijkstra/input.c
@@ -0,0 +1,105 @@
1#include "input.h"
2
3unsigned char dijkstra_AdjMatrix[NUM_NODES][NUM_NODES] = {
4 {32, 32, 54, 12, 52, 56, 8, 30, 44, 94, 44, 39, 65, 19, 51, 91, 1, 5, 89, 34, 25, 58, 20, 51, 38, 65, 30, 7, 20, 10, 51, 18, 43, 71, 97, 61, 26, 5, 57, 70, 65, 0, 75, 29, 86, 93, 87, 87, 64, 75, 88, 89, 100, 7, 40, 37, 38, 36, 44, 24, 46, 95, 43, 89, 32, 5, 15, 58, 77, 72, 95, 8, 38, 69, 37, 24, 27, 90, 77, 92, 31, 30, 80, 30, 37, 86, 33, 76, 21, 77, 100, 68, 37, 8, 22, 69, 81, 38, 94, 57},
5 {76, 54, 65, 14, 89, 69, 4, 16, 24, 47, 7, 21, 78, 53, 17, 81, 39, 50, 22, 60, 93, 89, 94, 30, 97, 16, 65, 43, 20, 24, 67, 62, 78, 98, 42, 67, 32, 46, 49, 57, 60, 56, 44, 37, 75, 62, 17, 13, 11, 40, 40, 4, 95, 100, 0, 57, 82, 31, 0, 1, 56, 67, 30, 100, 64, 72, 66, 63, 18, 81, 19, 44, 2, 63, 81, 78, 91, 64, 91, 2, 70, 97, 73, 64, 97, 39, 21, 78, 70, 21, 46, 25, 54, 76, 92, 84, 47, 57, 46, 31},
6 {38, 31, 75, 40, 61, 21, 84, 51, 86, 41, 19, 21, 37, 58, 86, 100, 97, 73, 44, 67, 60, 90, 58, 13, 31, 49, 63, 44, 73, 76, 76, 77, 73, 16, 83, 100, 4, 67, 51, 56, 7, 36, 77, 10, 95, 28, 10, 57, 0, 54, 23, 60, 9, 48, 39, 40, 97, 69, 84, 35, 44, 25, 11, 83, 8, 61, 83, 12, 27, 100, 34, 0, 35, 10, 10, 96, 39, 87, 53, 5, 40, 42, 66, 15, 90, 71, 55, 87, 39, 5, 88, 49, 97, 100, 32, 4, 60, 81, 83, 53},
7 {80, 16, 53, 14, 94, 29, 77, 99, 16, 29, 3, 22, 71, 35, 4, 61, 6, 25, 13, 11, 30, 0, 27, 94, 66, 25, 64, 92, 5, 47, 44, 85, 29, 63, 65, 89, 59, 41, 87, 41, 36, 57, 29, 7, 92, 33, 34, 64, 59, 47, 76, 55, 13, 2, 48, 46, 27, 12, 37, 99, 25, 48, 83, 20, 77, 13, 9, 35, 55, 62, 76, 57, 18, 72, 64, 10, 4, 64, 74, 63, 77, 15, 18, 91, 84, 32, 36, 77, 10, 39, 75, 35, 87, 23, 22, 30, 37, 31, 65, 58},
8 {59, 7, 14, 78, 79, 45, 54, 83, 8, 94, 12, 86, 9, 97, 42, 93, 95, 44, 70, 5, 83, 10, 40, 36, 34, 62, 66, 71, 59, 97, 95, 18, 3, 8, 62, 48, 19, 15, 98, 28, 8, 9, 80, 84, 72, 21, 43, 66, 65, 79, 71, 13, 89, 78, 49, 22, 5, 14, 59, 65, 11, 53, 49, 81, 28, 77, 29, 47, 92, 26, 41, 66, 1, 20, 50, 73, 7, 59, 4, 72, 37, 76, 86, 25, 19, 0, 14, 24, 15, 73, 55, 93, 93, 3, 73, 87, 80, 68, 100, 37},
9 {94, 41, 3, 61, 27, 19, 33, 35, 78, 38, 73, 14, 80, 58, 5, 99, 59, 19, 22, 40, 59, 78, 32, 17, 47, 71, 3, 94, 39, 2, 97, 99, 9, 66, 60, 37, 85, 59, 38, 28, 63, 10, 8, 8, 35, 81, 6, 60, 100, 96, 66, 24, 39, 64, 41, 52, 34, 10, 11, 39, 80, 8, 4, 89, 74, 64, 92, 25, 89, 29, 19, 18, 6, 28, 26, 7, 8, 33, 67, 74, 95, 32, 99, 33, 96, 5, 51, 96, 83, 63, 35, 62, 71, 39, 16, 10, 69, 8, 35, 23},
10 {3, 55, 41, 76, 49, 68, 83, 23, 67, 15, 97, 61, 13, 61, 60, 75, 33, 77, 71, 15, 39, 72, 43, 76, 77, 59, 53, 11, 33, 88, 34, 37, 8, 76, 79, 23, 9, 62, 46, 76, 43, 9, 2, 57, 70, 28, 31, 69, 4, 68, 84, 10, 39, 26, 52, 82, 52, 4, 93, 85, 59, 94, 21, 33, 35, 67, 57, 44, 28, 69, 86, 37, 78, 54, 94, 14, 48, 25, 83, 18, 59, 33, 28, 99, 25, 81, 46, 77, 51, 39, 62, 9, 32, 49, 43, 33, 15, 100, 77, 9},
11 {68, 28, 47, 12, 82, 6, 26, 96, 98, 75, 13, 57, 7, 8, 55, 33, 55, 0, 76, 5, 5, 3, 15, 3, 53, 58, 36, 34, 23, 79, 10, 57, 6, 23, 69, 54, 29, 61, 49, 27, 36, 63, 84, 9, 71, 4, 8, 25, 71, 85, 97, 77, 88, 11, 46, 6, 35, 83, 7, 24, 27, 17, 82, 34, 40, 16, 88, 69, 44, 3, 62, 46, 32, 45, 55, 2, 49, 64, 94, 87, 14, 90, 63, 68, 68, 75, 75, 2, 23, 82, 27, 51, 65, 75, 85, 71, 57, 38, 39, 0},
12 {7, 1, 46, 39, 12, 68, 41, 28, 31, 0, 14, 45, 91, 43, 12, 58, 17, 53, 26, 41, 0, 19, 92, 31, 60, 42, 1, 17, 46, 41, 84, 54, 8, 97, 93, 20, 64, 0, 14, 61, 0, 28, 72, 57, 71, 50, 81, 89, 70, 7, 96, 70, 26, 87, 1, 87, 95, 69, 70, 40, 9, 19, 94, 84, 15, 87, 71, 45, 87, 85, 5, 53, 13, 43, 10, 50, 94, 91, 38, 63, 98, 33, 99, 91, 86, 66, 43, 80, 35, 79, 20, 10, 98, 80, 61, 13, 66, 31, 24, 18},
13 {82, 97, 72, 61, 39, 48, 11, 99, 38, 49, 27, 2, 49, 26, 59, 0, 58, 1, 81, 59, 80, 67, 70, 77, 46, 97, 56, 79, 27, 81, 63, 75, 77, 0, 36, 82, 48, 47, 81, 53, 62, 7, 55, 77, 100, 13, 78, 24, 81, 24, 83, 26, 91, 18, 2, 2, 14, 25, 47, 7, 72, 10, 83, 14, 10, 18, 96, 25, 65, 42, 78, 93, 16, 32, 70, 15, 11, 47, 5, 58, 71, 89, 84, 27, 73, 86, 96, 88, 77, 43, 95, 48, 19, 43, 62, 96, 61, 24, 20, 92},
14 {66, 98, 85, 82, 96, 20, 64, 73, 67, 69, 30, 3, 23, 13, 97, 97, 66, 58, 50, 42, 0, 44, 57, 86, 54, 85, 82, 14, 8, 1, 73, 41, 66, 23, 22, 61, 43, 86, 0, 9, 21, 30, 79, 44, 44, 75, 40, 76, 99, 56, 17, 100, 67, 40, 51, 20, 25, 32, 0, 100, 0, 73, 40, 66, 96, 29, 93, 38, 81, 93, 13, 1, 90, 92, 46, 100, 32, 52, 75, 31, 8, 58, 97, 75, 99, 13, 61, 90, 46, 61, 89, 12, 34, 96, 78, 96, 24, 36, 34, 4},
15 {96, 13, 73, 85, 72, 18, 50, 70, 36, 24, 67, 10, 82, 29, 51, 80, 43, 11, 35, 89, 39, 24, 0, 73, 86, 44, 34, 9, 46, 34, 80, 41, 48, 52, 92, 19, 36, 41, 55, 39, 31, 22, 49, 13, 51, 67, 59, 94, 44, 95, 48, 83, 85, 48, 21, 70, 58, 56, 45, 4, 90, 91, 11, 3, 43, 70, 89, 45, 77, 44, 84, 8, 66, 100, 88, 83, 66, 46, 77, 76, 6, 24, 59, 91, 39, 46, 26, 97, 68, 37, 0, 58, 28, 79, 27, 37, 48, 16, 82, 24},
16 {60, 66, 32, 92, 65, 19, 74, 97, 32, 16, 72, 38, 41, 97, 96, 46, 43, 88, 42, 77, 25, 9, 34, 19, 88, 28, 56, 1, 44, 3, 25, 70, 69, 24, 27, 100, 9, 0, 96, 7, 84, 34, 12, 91, 30, 7, 36, 39, 95, 78, 16, 86, 53, 16, 71, 6, 44, 26, 7, 54, 30, 100, 23, 65, 23, 50, 65, 99, 17, 26, 73, 67, 60, 85, 57, 57, 92, 93, 96, 52, 36, 78, 4, 90, 61, 75, 96, 4, 68, 3, 25, 64, 69, 14, 28, 58, 31, 59, 56, 48},
17 {86, 28, 81, 45, 12, 37, 1, 70, 29, 64, 89, 31, 41, 93, 20, 1, 67, 83, 73, 0, 52, 98, 64, 20, 78, 93, 78, 8, 17, 100, 22, 2, 95, 2, 48, 6, 39, 15, 43, 34, 79, 31, 66, 87, 23, 52, 54, 56, 34, 93, 57, 52, 56, 87, 72, 34, 79, 15, 42, 63, 15, 65, 65, 9, 67, 79, 82, 73, 95, 91, 6, 39, 21, 38, 92, 10, 91, 46, 67, 91, 38, 90, 43, 95, 76, 81, 28, 21, 63, 70, 84, 78, 0, 48, 53, 68, 94, 0, 40, 88},
18 {92, 12, 93, 12, 17, 85, 23, 7, 30, 56, 64, 34, 45, 73, 28, 87, 20, 22, 7, 83, 59, 91, 26, 59, 5, 79, 26, 99, 79, 32, 52, 70, 11, 44, 83, 28, 95, 72, 1, 91, 27, 65, 25, 38, 4, 19, 24, 24, 8, 99, 73, 67, 89, 99, 25, 60, 77, 18, 24, 21, 16, 42, 58, 27, 53, 6, 55, 47, 78, 56, 38, 71, 88, 29, 8, 58, 48, 99, 48, 56, 97, 20, 89, 52, 18, 14, 78, 61, 99, 2, 48, 14, 44, 5, 42, 97, 11, 63, 10, 55},
19 {19, 48, 25, 73, 77, 100, 30, 91, 99, 78, 13, 95, 98, 1, 12, 82, 82, 91, 8, 80, 93, 22, 61, 2, 28, 2, 66, 5, 65, 76, 61, 50, 90, 86, 22, 32, 52, 52, 22, 50, 96, 1, 10, 59, 70, 90, 40, 51, 80, 14, 98, 38, 37, 58, 40, 31, 60, 72, 2, 91, 47, 63, 7, 2, 15, 29, 34, 67, 48, 23, 83, 9, 24, 59, 69, 94, 48, 8, 11, 27, 90, 8, 31, 93, 32, 38, 90, 58, 9, 92, 48, 23, 55, 55, 25, 36, 51, 60, 69, 65},
20 {83, 51, 74, 73, 76, 42, 67, 24, 17, 44, 17, 73, 18, 49, 65, 50, 87, 54, 7, 62, 11, 21, 85, 32, 77, 10, 68, 94, 70, 36, 24, 52, 53, 98, 24, 96, 6, 57, 86, 90, 67, 2, 62, 85, 17, 26, 34, 70, 46, 41, 32, 23, 63, 16, 56, 5, 26, 23, 65, 62, 26, 89, 80, 45, 52, 71, 6, 58, 27, 92, 47, 61, 61, 75, 45, 78, 67, 46, 14, 12, 53, 46, 36, 82, 28, 58, 87, 21, 47, 17, 83, 73, 72, 63, 85, 24, 33, 91, 48, 26},
21 {49, 62, 53, 9, 36, 99, 53, 3, 10, 67, 82, 63, 79, 84, 45, 7, 41, 98, 95, 89, 82, 43, 27, 53, 5, 78, 77, 4, 69, 25, 98, 17, 53, 16, 93, 89, 81, 45, 58, 91, 12, 40, 54, 91, 90, 65, 64, 31, 62, 58, 86, 43, 1, 12, 63, 73, 91, 39, 44, 25, 30, 7, 8, 83, 23, 0, 38, 4, 45, 96, 61, 23, 1, 14, 81, 92, 45, 44, 89, 74, 69, 74, 83, 36, 52, 45, 75, 8, 85, 18, 100, 81, 92, 7, 30, 82, 74, 34, 52, 86},
22 {96, 12, 8, 98, 94, 89, 55, 38, 100, 43, 11, 68, 83, 95, 3, 0, 39, 78, 9, 90, 63, 8, 37, 20, 83, 67, 1, 56, 67, 53, 7, 62, 66, 16, 25, 25, 71, 80, 63, 70, 89, 75, 3, 37, 35, 6, 38, 74, 51, 47, 30, 80, 21, 67, 100, 3, 100, 68, 26, 66, 87, 33, 27, 52, 15, 53, 43, 53, 99, 6, 22, 88, 47, 26, 24, 82, 99, 28, 21, 15, 75, 51, 95, 63, 84, 61, 66, 83, 28, 58, 14, 14, 58, 42, 33, 39, 61, 76, 92, 25},
23 {48, 14, 79, 95, 6, 70, 76, 4, 98, 98, 87, 39, 14, 81, 1, 99, 7, 33, 81, 1, 92, 96, 16, 15, 3, 15, 54, 30, 57, 12, 55, 5, 93, 0, 100, 99, 70, 42, 69, 67, 39, 21, 5, 53, 2, 6, 51, 76, 40, 99, 78, 98, 60, 60, 79, 63, 75, 99, 59, 98, 10, 80, 2, 2, 80, 69, 67, 49, 10, 2, 16, 49, 23, 88, 68, 92, 95, 86, 68, 0, 84, 11, 64, 43, 71, 42, 72, 45, 40, 97, 42, 17, 76, 11, 86, 56, 80, 19, 4, 90},
24 {88, 87, 4, 77, 75, 72, 69, 35, 23, 2, 35, 6, 80, 99, 15, 50, 6, 53, 61, 46, 49, 69, 29, 25, 80, 15, 47, 25, 34, 51, 14, 21, 38, 85, 98, 79, 57, 32, 13, 46, 0, 48, 53, 80, 12, 34, 29, 18, 54, 56, 30, 2, 25, 60, 94, 4, 41, 40, 30, 75, 58, 10, 62, 62, 96, 59, 40, 18, 58, 53, 64, 24, 67, 83, 4, 79, 17, 100, 63, 37, 56, 93, 39, 81, 18, 100, 51, 59, 5, 81, 100, 63, 58, 61, 24, 53, 87, 64, 37, 10},
25 {83, 67, 34, 49, 50, 38, 27, 33, 4, 56, 70, 60, 15, 75, 6, 33, 40, 57, 59, 46, 4, 24, 75, 62, 86, 100, 81, 38, 29, 17, 48, 79, 84, 48, 27, 100, 87, 21, 32, 57, 77, 68, 16, 92, 9, 22, 92, 49, 79, 16, 95, 83, 40, 70, 10, 25, 35, 91, 29, 30, 74, 43, 8, 24, 92, 2, 23, 44, 23, 22, 0, 66, 56, 16, 58, 65, 4, 15, 14, 49, 31, 75, 32, 71, 10, 8, 63, 45, 100, 92, 42, 73, 1, 50, 97, 93, 18, 87, 36, 41},
26 {75, 36, 7, 30, 18, 31, 96, 22, 12, 76, 71, 43, 50, 69, 80, 61, 78, 42, 72, 43, 0, 13, 15, 68, 30, 79, 60, 48, 31, 62, 56, 5, 98, 29, 1, 82, 26, 97, 3, 38, 72, 40, 81, 89, 76, 26, 15, 53, 35, 87, 96, 1, 67, 77, 69, 97, 21, 28, 10, 18, 90, 32, 23, 53, 61, 25, 34, 87, 88, 3, 91, 26, 9, 37, 81, 85, 64, 96, 3, 99, 82, 65, 100, 48, 42, 68, 10, 29, 62, 88, 48, 17, 19, 37, 70, 47, 28, 70, 100, 16},
27 {73, 91, 8, 82, 94, 89, 33, 57, 84, 36, 21, 31, 1, 87, 46, 9, 20, 56, 4, 82, 9, 52, 99, 96, 56, 34, 8, 84, 3, 7, 66, 42, 64, 74, 24, 58, 28, 23, 81, 11, 59, 2, 9, 26, 55, 55, 1, 76, 77, 6, 23, 87, 24, 89, 82, 80, 22, 90, 30, 93, 63, 96, 34, 27, 36, 24, 51, 30, 47, 98, 8, 73, 100, 17, 99, 21, 72, 0, 97, 48, 73, 86, 34, 97, 74, 82, 43, 63, 37, 73, 55, 0, 34, 55, 94, 36, 80, 10, 67, 93},
28 {7, 75, 65, 74, 92, 64, 95, 63, 30, 57, 77, 2, 42, 11, 65, 16, 59, 7, 45, 97, 46, 66, 63, 81, 20, 56, 83, 66, 32, 49, 59, 39, 90, 23, 12, 81, 53, 73, 9, 49, 29, 87, 17, 72, 64, 83, 54, 89, 90, 65, 85, 36, 30, 13, 83, 16, 35, 65, 83, 67, 14, 7, 73, 70, 97, 85, 51, 16, 24, 26, 65, 53, 79, 83, 91, 8, 65, 10, 98, 20, 41, 48, 22, 71, 62, 4, 54, 63, 36, 36, 30, 16, 9, 2, 86, 5, 53, 36, 88, 77},
29 {29, 53, 97, 74, 1, 53, 83, 32, 30, 46, 52, 71, 94, 41, 42, 21, 45, 62, 85, 81, 98, 81, 97, 73, 83, 83, 44, 1, 85, 32, 45, 80, 85, 41, 54, 52, 60, 2, 84, 90, 48, 1, 61, 7, 42, 69, 96, 54, 30, 46, 0, 94, 26, 64, 32, 75, 46, 76, 42, 97, 7, 87, 43, 58, 94, 97, 9, 54, 99, 59, 43, 12, 61, 70, 19, 69, 4, 14, 22, 0, 26, 23, 60, 52, 53, 92, 93, 65, 68, 35, 61, 75, 88, 70, 33, 82, 66, 8, 35, 30},
30 {68, 44, 8, 95, 81, 28, 63, 85, 8, 52, 86, 35, 41, 11, 53, 94, 3, 12, 58, 71, 13, 85, 11, 0, 55, 44, 82, 87, 19, 83, 84, 87, 27, 92, 81, 7, 86, 9, 58, 61, 27, 9, 62, 68, 21, 81, 61, 24, 93, 85, 61, 72, 70, 72, 73, 91, 16, 20, 77, 35, 3, 26, 88, 97, 18, 34, 3, 70, 9, 27, 30, 37, 37, 92, 4, 24, 73, 32, 48, 31, 83, 8, 3, 52, 80, 42, 8, 62, 62, 52, 63, 65, 78, 16, 27, 62, 50, 30, 32, 26},
31 {24, 62, 63, 27, 20, 67, 51, 59, 65, 65, 90, 48, 73, 93, 66, 18, 0, 75, 47, 63, 26, 76, 94, 3, 59, 21, 66, 75, 17, 64, 0, 41, 25, 63, 68, 11, 97, 85, 70, 61, 49, 60, 8, 88, 18, 41, 6, 19, 15, 19, 48, 41, 61, 41, 10, 19, 62, 42, 95, 46, 5, 95, 53, 98, 58, 21, 8, 20, 5, 79, 81, 21, 4, 56, 8, 89, 97, 81, 74, 11, 100, 21, 18, 61, 29, 95, 46, 57, 37, 40, 2, 42, 1, 56, 5, 59, 43, 14, 79, 14},
32 {59, 25, 35, 29, 81, 44, 84, 43, 24, 58, 20, 91, 45, 38, 17, 74, 100, 63, 31, 36, 3, 33, 44, 71, 55, 50, 96, 98, 30, 40, 12, 55, 65, 13, 50, 12, 57, 33, 55, 48, 91, 42, 38, 36, 46, 55, 76, 45, 17, 6, 81, 87, 6, 25, 57, 61, 41, 52, 25, 37, 92, 3, 92, 23, 16, 7, 35, 74, 40, 56, 21, 98, 98, 59, 100, 44, 80, 75, 89, 97, 82, 36, 50, 54, 27, 6, 14, 68, 25, 5, 4, 83, 8, 62, 5, 25, 69, 40, 65, 75},
33 {63, 52, 72, 60, 10, 71, 70, 56, 12, 59, 52, 94, 95, 68, 13, 21, 41, 94, 55, 66, 100, 25, 48, 7, 53, 54, 99, 88, 60, 63, 62, 22, 14, 34, 49, 91, 71, 18, 46, 83, 77, 65, 42, 37, 32, 55, 24, 39, 15, 45, 4, 14, 36, 19, 21, 89, 39, 87, 76, 99, 49, 4, 88, 64, 4, 36, 54, 75, 20, 67, 24, 64, 31, 32, 0, 29, 54, 92, 69, 69, 36, 39, 83, 39, 58, 70, 27, 63, 56, 70, 28, 5, 74, 15, 35, 78, 17, 55, 18, 37},
34 {88, 8, 0, 85, 41, 68, 14, 95, 59, 49, 63, 61, 54, 11, 66, 79, 81, 94, 41, 3, 29, 69, 75, 69, 50, 9, 46, 33, 30, 30, 71, 18, 39, 37, 2, 80, 4, 83, 40, 29, 98, 2, 57, 52, 13, 22, 30, 60, 82, 71, 29, 10, 6, 3, 79, 22, 79, 91, 56, 76, 21, 26, 94, 26, 63, 62, 72, 34, 45, 11, 29, 42, 13, 86, 94, 93, 75, 90, 18, 56, 27, 48, 33, 33, 17, 78, 55, 63, 69, 10, 38, 56, 2, 31, 48, 32, 93, 19, 32, 3},
35 {30, 61, 46, 43, 13, 5, 1, 88, 96, 86, 9, 89, 100, 42, 21, 17, 20, 42, 80, 55, 19, 17, 10, 88, 14, 58, 19, 6, 77, 17, 77, 73, 79, 22, 15, 58, 94, 83, 45, 55, 68, 20, 43, 68, 63, 30, 51, 49, 39, 97, 3, 58, 13, 80, 45, 27, 3, 31, 100, 80, 48, 76, 52, 93, 64, 33, 50, 24, 82, 61, 45, 15, 82, 89, 49, 10, 85, 100, 59, 23, 96, 28, 81, 75, 7, 93, 68, 10, 90, 34, 56, 3, 76, 74, 97, 6, 73, 12, 30, 20},
36 {40, 75, 35, 88, 29, 85, 64, 14, 50, 22, 37, 12, 16, 85, 87, 23, 77, 21, 100, 66, 55, 21, 35, 30, 95, 31, 2, 33, 10, 32, 53, 16, 74, 54, 70, 69, 38, 33, 83, 55, 55, 87, 67, 71, 71, 19, 60, 13, 40, 25, 45, 61, 46, 80, 58, 6, 78, 60, 39, 88, 93, 58, 70, 32, 11, 39, 0, 16, 72, 50, 71, 93, 36, 37, 29, 6, 56, 55, 19, 63, 80, 64, 23, 25, 43, 81, 98, 87, 41, 2, 40, 100, 60, 9, 31, 37, 14, 98, 53, 86},
37 {47, 90, 44, 83, 26, 73, 55, 49, 27, 40, 11, 73, 70, 0, 64, 13, 82, 61, 66, 89, 29, 6, 88, 89, 15, 85, 93, 30, 82, 11, 82, 96, 1, 26, 78, 27, 65, 100, 42, 93, 39, 53, 31, 9, 54, 96, 89, 1, 22, 54, 90, 52, 60, 43, 6, 42, 27, 99, 72, 75, 10, 19, 70, 11, 45, 14, 4, 10, 13, 47, 69, 52, 66, 100, 27, 86, 61, 15, 53, 84, 36, 42, 35, 96, 85, 41, 37, 78, 40, 75, 53, 16, 95, 22, 94, 5, 36, 98, 15, 15},
38 {10, 50, 34, 77, 16, 61, 28, 77, 43, 82, 60, 79, 90, 95, 74, 41, 2, 78, 18, 8, 18, 71, 24, 12, 60, 17, 85, 62, 81, 66, 78, 92, 16, 11, 34, 32, 38, 28, 75, 81, 9, 1, 59, 66, 62, 100, 6, 64, 43, 24, 72, 61, 62, 62, 40, 21, 79, 24, 49, 26, 90, 26, 84, 72, 3, 84, 70, 8, 11, 45, 89, 88, 46, 14, 53, 74, 80, 59, 38, 89, 83, 9, 15, 10, 38, 55, 31, 83, 45, 81, 8, 1, 73, 92, 73, 43, 75, 9, 51, 53},
39 {54, 5, 40, 66, 86, 59, 39, 31, 17, 43, 19, 66, 19, 1, 77, 57, 22, 74, 39, 68, 20, 14, 35, 60, 5, 7, 2, 47, 16, 19, 66, 36, 91, 5, 68, 43, 30, 74, 40, 47, 83, 26, 79, 1, 27, 21, 24, 49, 96, 64, 83, 82, 78, 17, 41, 49, 92, 9, 62, 74, 28, 27, 77, 86, 99, 44, 95, 28, 84, 34, 41, 33, 60, 20, 34, 87, 41, 59, 36, 2, 89, 85, 85, 32, 2, 25, 47, 94, 35, 9, 67, 29, 2, 43, 81, 1, 54, 75, 96, 3},
40 {9, 37, 36, 35, 23, 37, 22, 30, 62, 24, 33, 50, 8, 84, 48, 77, 8, 95, 70, 9, 70, 37, 5, 73, 46, 86, 74, 100, 27, 35, 70, 2, 72, 5, 37, 95, 42, 25, 25, 3, 49, 24, 19, 24, 7, 67, 0, 82, 28, 71, 92, 98, 74, 63, 70, 86, 14, 9, 52, 41, 45, 21, 43, 83, 93, 47, 44, 35, 72, 35, 4, 88, 59, 91, 11, 32, 57, 11, 13, 51, 48, 71, 49, 88, 33, 85, 40, 48, 61, 92, 55, 5, 79, 65, 54, 71, 11, 98, 72, 83},
41 {32, 43, 70, 57, 33, 47, 89, 56, 25, 69, 7, 73, 39, 56, 27, 39, 6, 67, 53, 67, 24, 74, 38, 2, 38, 93, 73, 49, 56, 11, 99, 89, 54, 34, 11, 87, 48, 67, 42, 73, 35, 49, 11, 40, 71, 4, 45, 78, 71, 98, 10, 95, 38, 49, 63, 76, 41, 36, 92, 97, 47, 56, 51, 0, 56, 63, 53, 3, 29, 95, 76, 30, 44, 54, 70, 81, 58, 82, 58, 96, 45, 69, 56, 83, 84, 19, 59, 24, 21, 16, 87, 34, 72, 4, 0, 27, 33, 53, 31, 28},
42 {47, 73, 58, 57, 26, 94, 38, 85, 75, 62, 80, 87, 97, 35, 69, 80, 20, 27, 3, 41, 43, 57, 75, 81, 27, 75, 8, 60, 27, 5, 88, 41, 78, 11, 98, 71, 71, 1, 55, 12, 64, 0, 99, 60, 1, 67, 40, 22, 61, 9, 63, 70, 32, 4, 51, 59, 79, 25, 18, 73, 30, 72, 13, 7, 49, 77, 78, 87, 79, 99, 99, 42, 65, 63, 68, 67, 96, 7, 55, 56, 84, 84, 93, 15, 88, 43, 75, 33, 34, 59, 72, 64, 98, 85, 37, 12, 27, 82, 99, 5},
43 {80, 63, 13, 11, 92, 48, 44, 88, 55, 99, 9, 4, 48, 1, 20, 2, 10, 61, 1, 44, 86, 73, 74, 83, 23, 11, 62, 50, 93, 26, 22, 38, 90, 1, 15, 47, 49, 59, 34, 71, 23, 44, 75, 38, 11, 61, 40, 22, 21, 41, 32, 7, 13, 6, 56, 36, 84, 17, 52, 76, 44, 74, 80, 100, 42, 96, 46, 91, 20, 81, 27, 10, 91, 2, 48, 1, 29, 88, 90, 51, 95, 22, 58, 7, 95, 13, 9, 78, 31, 61, 19, 41, 1, 65, 40, 43, 26, 86, 100, 47},
44 {32, 94, 23, 22, 62, 71, 91, 91, 58, 80, 41, 18, 68, 65, 25, 62, 79, 0, 5, 76, 27, 24, 83, 28, 56, 22, 37, 82, 74, 3, 95, 6, 97, 17, 95, 24, 54, 85, 14, 78, 31, 56, 96, 99, 20, 87, 27, 65, 87, 32, 6, 14, 23, 89, 8, 45, 77, 12, 26, 51, 82, 88, 23, 44, 71, 17, 68, 25, 69, 82, 2, 100, 3, 99, 64, 91, 85, 91, 21, 38, 90, 28, 52, 79, 83, 26, 23, 60, 38, 49, 10, 86, 2, 33, 29, 74, 16, 97, 65, 51},
45 {45, 67, 16, 48, 31, 81, 4, 16, 37, 26, 20, 93, 20, 38, 71, 2, 64, 94, 62, 69, 9, 72, 54, 11, 71, 84, 51, 54, 80, 15, 4, 24, 83, 88, 39, 80, 68, 43, 62, 71, 35, 82, 64, 55, 19, 0, 58, 84, 95, 19, 18, 3, 58, 72, 81, 95, 55, 32, 14, 1, 47, 19, 92, 96, 6, 30, 76, 40, 40, 37, 77, 75, 19, 6, 30, 38, 7, 54, 88, 68, 73, 5, 71, 97, 78, 51, 58, 99, 49, 72, 66, 97, 57, 58, 58, 63, 54, 33, 69, 60},
46 {37, 12, 1, 56, 18, 31, 60, 92, 51, 14, 59, 90, 19, 29, 87, 63, 47, 10, 28, 96, 82, 94, 58, 39, 17, 16, 68, 38, 15, 3, 64, 52, 15, 65, 74, 100, 62, 0, 92, 12, 14, 50, 2, 33, 46, 55, 63, 59, 65, 91, 20, 46, 50, 79, 51, 34, 61, 19, 72, 76, 89, 35, 95, 3, 67, 68, 69, 28, 68, 60, 41, 82, 77, 43, 82, 22, 98, 44, 47, 28, 0, 67, 74, 50, 11, 92, 84, 72, 77, 21, 14, 65, 23, 8, 34, 90, 42, 2, 84, 10},
47 {63, 24, 58, 5, 33, 5, 94, 97, 15, 40, 24, 15, 6, 65, 32, 18, 56, 82, 56, 32, 70, 70, 97, 93, 78, 30, 48, 87, 99, 31, 97, 27, 22, 20, 32, 55, 93, 25, 52, 7, 31, 42, 90, 4, 6, 88, 89, 62, 35, 44, 60, 4, 81, 56, 63, 24, 52, 10, 10, 17, 8, 73, 44, 30, 94, 77, 51, 86, 68, 69, 59, 66, 11, 48, 70, 84, 1, 58, 12, 37, 68, 72, 41, 48, 95, 71, 73, 12, 47, 83, 29, 55, 56, 74, 51, 15, 16, 2, 67, 50},
48 {71, 92, 15, 82, 6, 51, 66, 7, 75, 44, 44, 43, 15, 52, 57, 9, 22, 96, 89, 35, 79, 17, 91, 0, 57, 7, 82, 73, 9, 14, 90, 81, 5, 4, 28, 11, 22, 60, 19, 97, 3, 29, 5, 86, 81, 63, 61, 69, 58, 49, 71, 2, 67, 27, 69, 90, 34, 50, 29, 44, 64, 18, 91, 36, 89, 85, 47, 10, 45, 32, 7, 14, 62, 12, 100, 8, 41, 61, 44, 100, 9, 14, 68, 42, 41, 37, 99, 75, 87, 27, 85, 17, 45, 75, 53, 33, 26, 66, 10, 71},
49 {99, 84, 85, 60, 62, 51, 68, 3, 11, 11, 69, 87, 92, 36, 96, 32, 39, 94, 74, 93, 87, 58, 9, 31, 100, 28, 30, 25, 94, 6, 62, 92, 90, 12, 17, 52, 29, 86, 55, 40, 63, 90, 94, 21, 92, 55, 53, 31, 14, 93, 23, 0, 17, 99, 98, 16, 26, 27, 7, 86, 34, 35, 78, 90, 13, 95, 41, 43, 46, 62, 49, 76, 51, 42, 97, 9, 63, 15, 40, 77, 8, 63, 43, 25, 61, 40, 7, 53, 68, 81, 38, 68, 82, 82, 57, 95, 43, 65, 37, 55},
50 {93, 87, 30, 10, 95, 93, 19, 58, 75, 59, 0, 83, 88, 44, 74, 14, 50, 47, 67, 17, 94, 71, 51, 75, 53, 75, 69, 96, 5, 73, 16, 98, 59, 13, 7, 19, 5, 93, 43, 80, 17, 44, 28, 4, 54, 68, 18, 3, 14, 51, 88, 7, 22, 4, 48, 41, 45, 17, 2, 50, 90, 18, 14, 14, 31, 88, 33, 3, 81, 77, 49, 98, 87, 44, 2, 6, 11, 87, 76, 93, 4, 63, 66, 26, 34, 14, 33, 79, 98, 35, 29, 53, 19, 43, 67, 51, 30, 66, 20, 77},
51 {8, 69, 75, 61, 79, 43, 33, 91, 96, 9, 49, 100, 38, 14, 25, 72, 28, 58, 51, 92, 59, 46, 44, 79, 55, 77, 96, 51, 9, 15, 28, 17, 50, 69, 45, 29, 11, 78, 86, 6, 53, 34, 73, 92, 48, 98, 29, 43, 22, 46, 34, 47, 92, 79, 25, 12, 55, 87, 64, 64, 68, 58, 48, 18, 93, 59, 13, 70, 2, 99, 76, 56, 32, 14, 13, 46, 12, 42, 89, 0, 89, 23, 13, 46, 1, 5, 59, 22, 92, 89, 53, 60, 12, 67, 44, 4, 92, 57, 74, 94},
52 {55, 15, 15, 53, 30, 28, 99, 8, 71, 88, 75, 59, 77, 88, 4, 44, 93, 29, 66, 51, 17, 85, 10, 96, 17, 54, 100, 8, 77, 73, 2, 31, 89, 17, 50, 85, 46, 48, 93, 83, 35, 67, 7, 11, 54, 78, 21, 13, 7, 88, 64, 91, 38, 74, 87, 56, 94, 86, 64, 70, 25, 32, 67, 80, 50, 16, 64, 62, 30, 56, 10, 32, 89, 17, 9, 8, 95, 31, 21, 68, 18, 85, 59, 22, 24, 11, 78, 84, 97, 42, 19, 88, 40, 86, 67, 90, 68, 30, 17, 99},
53 {52, 27, 30, 40, 44, 5, 49, 5, 36, 70, 73, 20, 21, 31, 43, 11, 42, 20, 96, 5, 28, 14, 93, 69, 67, 26, 24, 34, 56, 8, 99, 75, 35, 95, 14, 46, 0, 29, 51, 36, 66, 23, 57, 87, 21, 100, 98, 29, 86, 59, 0, 81, 74, 60, 15, 40, 86, 39, 40, 7, 47, 5, 82, 49, 100, 63, 95, 66, 92, 11, 2, 57, 0, 25, 9, 21, 91, 74, 17, 76, 32, 17, 22, 72, 43, 37, 78, 28, 77, 18, 36, 90, 90, 84, 38, 89, 46, 99, 21, 4},
54 {9, 90, 27, 10, 14, 3, 98, 4, 77, 14, 46, 75, 99, 35, 47, 41, 72, 24, 70, 48, 8, 72, 4, 98, 55, 42, 53, 68, 7, 74, 72, 16, 63, 99, 26, 43, 1, 24, 13, 44, 4, 25, 19, 2, 60, 32, 10, 32, 22, 80, 46, 98, 17, 50, 95, 38, 59, 13, 5, 66, 87, 77, 48, 15, 42, 41, 58, 9, 31, 71, 54, 35, 97, 39, 4, 56, 37, 14, 88, 59, 60, 0, 56, 77, 50, 17, 81, 75, 30, 87, 6, 84, 29, 55, 99, 37, 96, 57, 47, 26},
55 {94, 67, 27, 56, 5, 98, 12, 8, 11, 66, 67, 37, 66, 90, 80, 83, 6, 61, 23, 2, 47, 30, 86, 42, 51, 51, 80, 46, 74, 26, 38, 67, 59, 31, 23, 64, 29, 1, 38, 6, 33, 4, 44, 100, 60, 90, 48, 32, 50, 71, 1, 63, 67, 87, 5, 17, 3, 51, 29, 77, 77, 33, 10, 35, 65, 100, 65, 60, 0, 2, 32, 33, 73, 42, 99, 100, 32, 12, 31, 48, 84, 99, 11, 50, 86, 83, 34, 55, 33, 63, 32, 76, 97, 8, 77, 27, 7, 7, 53, 74},
56 {76, 85, 73, 14, 27, 72, 13, 59, 50, 11, 73, 33, 9, 84, 50, 61, 32, 84, 16, 31, 12, 14, 6, 8, 89, 49, 1, 96, 56, 54, 35, 31, 39, 7, 46, 32, 45, 59, 57, 96, 36, 29, 95, 46, 80, 10, 73, 11, 94, 89, 9, 73, 69, 15, 47, 57, 31, 49, 18, 87, 69, 53, 18, 74, 27, 30, 5, 38, 55, 28, 33, 92, 58, 95, 3, 37, 4, 76, 14, 65, 31, 23, 37, 66, 5, 50, 23, 36, 99, 41, 22, 68, 61, 6, 7, 88, 2, 13, 92, 58},
57 {41, 92, 15, 65, 86, 18, 1, 56, 60, 83, 87, 57, 5, 90, 23, 10, 40, 12, 12, 38, 19, 35, 72, 80, 7, 80, 33, 10, 59, 25, 34, 66, 16, 49, 31, 68, 33, 99, 23, 59, 47, 10, 16, 53, 100, 5, 29, 39, 17, 42, 44, 2, 43, 82, 49, 16, 27, 82, 93, 86, 73, 26, 18, 55, 75, 49, 89, 7, 13, 79, 33, 61, 55, 15, 80, 20, 20, 75, 60, 3, 83, 70, 5, 92, 17, 54, 8, 45, 2, 0, 30, 41, 27, 14, 63, 68, 29, 51, 42, 43},
58 {96, 75, 70, 50, 90, 49, 71, 9, 90, 97, 79, 73, 66, 50, 64, 83, 4, 72, 27, 73, 39, 24, 80, 32, 4, 42, 100, 34, 60, 41, 43, 55, 82, 12, 5, 71, 27, 42, 46, 16, 38, 24, 89, 3, 41, 19, 52, 11, 57, 46, 84, 96, 36, 29, 27, 40, 72, 94, 40, 98, 0, 83, 18, 83, 95, 90, 53, 88, 31, 66, 71, 69, 56, 59, 38, 97, 44, 57, 7, 1, 2, 57, 97, 4, 87, 91, 10, 24, 84, 51, 21, 84, 33, 39, 66, 95, 96, 86, 82, 26},
59 {51, 52, 96, 73, 78, 33, 70, 21, 90, 77, 89, 58, 0, 86, 28, 87, 42, 39, 10, 25, 56, 98, 75, 89, 2, 7, 49, 98, 59, 98, 24, 76, 15, 86, 48, 59, 18, 17, 81, 75, 61, 69, 99, 61, 20, 27, 13, 62, 32, 90, 53, 88, 87, 95, 42, 89, 1, 58, 53, 60, 55, 43, 1, 70, 28, 49, 29, 12, 33, 76, 53, 60, 10, 52, 87, 98, 45, 100, 25, 43, 89, 79, 97, 41, 73, 4, 96, 40, 62, 48, 66, 16, 91, 67, 53, 85, 82, 48, 98, 14},
60 {90, 50, 74, 66, 68, 26, 63, 12, 25, 89, 55, 80, 33, 17, 20, 72, 22, 83, 11, 84, 30, 77, 67, 88, 9, 86, 72, 91, 33, 35, 72, 89, 86, 11, 54, 53, 38, 17, 32, 29, 72, 53, 76, 71, 71, 62, 42, 93, 44, 19, 76, 41, 62, 42, 28, 71, 27, 66, 27, 26, 1, 99, 14, 87, 10, 35, 5, 14, 52, 37, 43, 90, 91, 18, 60, 27, 81, 68, 19, 24, 87, 95, 31, 48, 3, 59, 18, 97, 92, 11, 90, 93, 10, 70, 45, 20, 4, 16, 34, 22},
61 {54, 43, 11, 10, 62, 37, 37, 8, 4, 22, 99, 57, 83, 30, 4, 86, 55, 89, 49, 46, 0, 38, 38, 77, 74, 49, 97, 79, 66, 97, 0, 86, 5, 79, 62, 33, 15, 65, 41, 87, 87, 6, 9, 35, 2, 14, 21, 57, 69, 36, 3, 35, 40, 7, 11, 13, 23, 74, 92, 55, 36, 93, 40, 42, 37, 68, 75, 18, 32, 83, 71, 85, 89, 81, 19, 91, 61, 6, 13, 29, 8, 16, 65, 48, 91, 76, 62, 80, 16, 19, 34, 52, 78, 74, 94, 14, 7, 69, 33, 5},
62 {17, 3, 56, 5, 84, 41, 62, 44, 48, 75, 40, 56, 58, 71, 71, 14, 12, 99, 94, 28, 17, 27, 81, 96, 67, 74, 76, 74, 8, 75, 45, 25, 79, 0, 97, 28, 41, 58, 39, 55, 100, 45, 11, 23, 15, 48, 37, 27, 46, 97, 56, 63, 90, 36, 24, 56, 76, 0, 96, 85, 41, 40, 9, 19, 6, 6, 14, 47, 30, 19, 2, 96, 64, 80, 18, 45, 27, 21, 72, 39, 17, 94, 1, 6, 96, 93, 28, 72, 59, 90, 56, 100, 96, 31, 86, 1, 3, 66, 15, 0},
63 {85, 17, 96, 14, 63, 81, 59, 90, 1, 97, 28, 19, 57, 96, 92, 52, 54, 87, 23, 12, 76, 45, 79, 72, 43, 64, 39, 46, 29, 54, 12, 80, 37, 8, 60, 100, 89, 85, 55, 56, 47, 49, 75, 3, 45, 33, 56, 99, 19, 45, 78, 61, 91, 56, 99, 33, 86, 4, 45, 81, 58, 58, 60, 96, 32, 19, 61, 87, 70, 16, 42, 16, 65, 84, 20, 76, 83, 42, 41, 68, 87, 18, 28, 77, 40, 94, 76, 25, 98, 88, 5, 21, 11, 31, 16, 43, 16, 44, 29, 86},
64 {60, 37, 1, 24, 20, 88, 67, 69, 29, 7, 36, 16, 25, 65, 59, 65, 24, 1, 56, 21, 89, 61, 42, 100, 58, 25, 8, 74, 69, 3, 25, 95, 40, 26, 85, 27, 81, 51, 96, 9, 58, 32, 25, 49, 63, 51, 80, 87, 52, 35, 74, 40, 62, 82, 5, 19, 73, 13, 59, 7, 16, 84, 1, 56, 77, 53, 49, 57, 3, 45, 66, 28, 43, 58, 77, 72, 8, 57, 58, 60, 92, 98, 66, 20, 79, 71, 39, 52, 84, 65, 59, 100, 48, 27, 21, 91, 80, 71, 47, 83},
65 {82, 80, 10, 24, 37, 54, 62, 45, 10, 86, 71, 68, 83, 36, 88, 27, 6, 94, 79, 56, 58, 4, 55, 72, 98, 42, 63, 77, 12, 9, 25, 60, 89, 2, 50, 92, 56, 11, 2, 32, 97, 73, 100, 79, 75, 88, 73, 47, 47, 17, 2, 4, 21, 23, 42, 18, 66, 4, 61, 44, 81, 87, 71, 35, 89, 20, 27, 10, 32, 96, 42, 95, 69, 41, 40, 9, 95, 12, 23, 41, 29, 25, 11, 17, 15, 54, 1, 47, 24, 63, 57, 4, 49, 27, 40, 3, 48, 33, 13, 46},
66 {95, 55, 40, 29, 96, 46, 39, 57, 58, 62, 98, 54, 53, 76, 71, 68, 29, 72, 81, 53, 34, 38, 24, 49, 65, 30, 52, 79, 29, 31, 24, 23, 86, 31, 53, 48, 77, 92, 4, 1, 19, 68, 55, 72, 9, 92, 6, 38, 63, 87, 58, 64, 24, 82, 79, 56, 78, 98, 34, 6, 28, 25, 29, 81, 22, 82, 28, 65, 39, 99, 66, 58, 32, 87, 97, 42, 78, 2, 46, 7, 55, 3, 71, 46, 51, 49, 1, 28, 46, 1, 34, 41, 26, 30, 21, 48, 11, 49, 80, 17},
67 {13, 45, 75, 11, 99, 37, 53, 76, 39, 66, 83, 95, 35, 19, 40, 87, 69, 7, 81, 81, 8, 82, 21, 35, 11, 42, 49, 89, 57, 95, 5, 36, 40, 47, 14, 38, 84, 33, 80, 23, 99, 29, 84, 34, 48, 90, 87, 16, 97, 67, 64, 71, 48, 51, 72, 59, 60, 88, 48, 83, 82, 53, 86, 21, 66, 100, 25, 50, 32, 72, 39, 31, 0, 22, 65, 48, 78, 51, 31, 40, 84, 61, 10, 32, 11, 83, 57, 71, 70, 4, 20, 51, 24, 5, 39, 90, 4, 30, 5, 36},
68 {1, 44, 33, 68, 66, 64, 16, 9, 81, 13, 49, 65, 74, 60, 97, 51, 42, 19, 89, 11, 24, 8, 28, 14, 13, 67, 70, 84, 64, 76, 86, 65, 19, 19, 100, 52, 83, 15, 61, 64, 95, 10, 95, 34, 70, 57, 85, 78, 76, 73, 55, 66, 47, 83, 80, 60, 16, 16, 9, 80, 92, 96, 10, 77, 14, 9, 28, 63, 91, 56, 93, 85, 32, 87, 18, 68, 43, 70, 45, 19, 42, 66, 85, 56, 48, 31, 82, 30, 47, 92, 9, 4, 87, 87, 81, 67, 96, 76, 29, 87},
69 {31, 89, 37, 63, 75, 22, 97, 85, 92, 41, 70, 100, 73, 20, 55, 20, 51, 37, 17, 64, 28, 93, 68, 81, 79, 15, 47, 75, 91, 42, 27, 88, 30, 64, 16, 72, 52, 12, 56, 43, 19, 25, 43, 92, 45, 64, 78, 63, 0, 95, 26, 95, 54, 61, 75, 32, 76, 88, 73, 32, 30, 66, 86, 26, 97, 1, 98, 48, 80, 19, 92, 99, 10, 0, 56, 56, 64, 33, 85, 65, 95, 77, 59, 48, 3, 0, 46, 45, 88, 19, 77, 84, 51, 62, 10, 47, 29, 74, 96, 8},
70 {94, 53, 73, 3, 53, 28, 25, 16, 62, 76, 47, 22, 53, 73, 70, 22, 73, 15, 68, 60, 0, 10, 44, 52, 73, 54, 65, 68, 94, 60, 77, 53, 79, 15, 23, 31, 44, 48, 14, 72, 91, 27, 94, 9, 100, 29, 31, 72, 44, 99, 32, 11, 9, 76, 29, 48, 96, 94, 15, 55, 20, 58, 8, 99, 40, 31, 97, 84, 45, 77, 55, 35, 3, 14, 44, 3, 43, 42, 75, 87, 40, 73, 64, 15, 14, 93, 29, 76, 53, 11, 31, 73, 69, 39, 37, 8, 70, 100, 58, 81},
71 {76, 79, 16, 80, 93, 26, 49, 35, 68, 23, 89, 75, 63, 18, 56, 77, 11, 86, 53, 30, 97, 84, 2, 31, 89, 5, 6, 24, 5, 64, 4, 47, 43, 87, 26, 1, 13, 41, 3, 47, 65, 92, 88, 94, 9, 44, 70, 87, 29, 89, 16, 25, 72, 85, 56, 26, 57, 62, 50, 62, 93, 55, 8, 1, 7, 1, 2, 20, 42, 5, 34, 73, 63, 21, 66, 39, 31, 2, 25, 60, 91, 8, 51, 29, 59, 74, 55, 15, 1, 5, 77, 94, 26, 52, 95, 33, 19, 64, 20, 27},
72 {35, 54, 0, 99, 41, 32, 37, 73, 34, 28, 99, 92, 2, 50, 20, 62, 23, 75, 77, 24, 46, 20, 85, 72, 38, 45, 72, 57, 75, 92, 84, 10, 11, 50, 75, 18, 83, 78, 91, 83, 72, 56, 74, 75, 72, 60, 36, 95, 1, 79, 85, 47, 99, 35, 19, 36, 47, 91, 59, 21, 48, 43, 31, 59, 59, 72, 77, 7, 49, 34, 91, 21, 56, 30, 96, 27, 57, 98, 88, 58, 76, 38, 4, 41, 74, 90, 43, 20, 46, 2, 7, 94, 11, 39, 18, 70, 77, 62, 78, 26},
73 {62, 34, 47, 17, 30, 8, 10, 87, 72, 98, 44, 47, 1, 15, 54, 75, 4, 98, 61, 17, 100, 69, 10, 10, 74, 96, 46, 50, 23, 23, 42, 85, 23, 55, 68, 54, 29, 44, 40, 0, 41, 51, 14, 42, 66, 68, 84, 36, 31, 10, 53, 30, 45, 30, 6, 85, 25, 53, 1, 14, 42, 43, 65, 66, 65, 32, 86, 94, 42, 25, 95, 83, 42, 8, 91, 74, 42, 40, 10, 74, 51, 63, 70, 62, 59, 77, 47, 50, 96, 48, 64, 3, 57, 28, 35, 21, 26, 20, 15, 68},
74 {12, 9, 16, 54, 84, 74, 28, 92, 13, 4, 65, 30, 33, 1, 93, 93, 78, 5, 42, 39, 53, 73, 42, 9, 0, 78, 98, 94, 98, 12, 61, 76, 88, 44, 30, 37, 17, 24, 28, 97, 28, 60, 27, 61, 27, 86, 53, 4, 91, 62, 9, 9, 34, 17, 85, 0, 61, 82, 94, 25, 60, 21, 0, 13, 65, 30, 50, 48, 54, 45, 44, 48, 71, 37, 9, 98, 89, 62, 68, 45, 23, 43, 54, 23, 60, 5, 24, 21, 87, 17, 12, 13, 4, 12, 26, 69, 9, 43, 83, 29},
75 {88, 94, 78, 24, 30, 87, 21, 86, 14, 55, 30, 4, 98, 51, 27, 57, 56, 17, 44, 8, 35, 56, 21, 39, 69, 14, 75, 44, 57, 23, 73, 10, 16, 50, 34, 13, 2, 55, 99, 17, 9, 95, 21, 6, 45, 14, 29, 0, 32, 74, 9, 33, 96, 97, 38, 30, 10, 79, 74, 33, 2, 47, 43, 85, 63, 77, 98, 66, 98, 62, 83, 73, 57, 70, 45, 68, 50, 75, 69, 82, 14, 44, 81, 9, 6, 19, 40, 84, 64, 80, 16, 66, 26, 60, 51, 90, 36, 14, 55, 34},
76 {43, 3, 73, 100, 73, 18, 67, 89, 93, 1, 37, 6, 11, 17, 82, 85, 2, 88, 68, 67, 68, 50, 99, 60, 9, 15, 49, 12, 30, 70, 12, 73, 73, 85, 38, 11, 2, 71, 67, 95, 39, 3, 67, 16, 20, 15, 0, 90, 69, 34, 22, 36, 85, 20, 63, 94, 36, 11, 72, 32, 48, 84, 71, 87, 69, 75, 65, 37, 11, 31, 99, 50, 34, 31, 33, 20, 46, 100, 76, 15, 34, 98, 17, 18, 18, 80, 78, 20, 58, 16, 18, 72, 100, 55, 58, 34, 96, 89, 72, 6},
77 {86, 36, 23, 86, 67, 56, 6, 80, 21, 48, 61, 55, 46, 78, 39, 30, 24, 84, 50, 48, 100, 34, 19, 65, 89, 43, 100, 84, 32, 37, 56, 17, 73, 79, 3, 5, 0, 76, 85, 22, 23, 45, 43, 35, 23, 83, 65, 13, 32, 14, 61, 31, 14, 46, 96, 2, 89, 61, 52, 87, 64, 8, 4, 2, 53, 74, 8, 54, 15, 93, 42, 38, 4, 85, 40, 94, 67, 4, 6, 99, 86, 33, 96, 100, 79, 58, 69, 33, 85, 20, 20, 49, 95, 91, 17, 14, 64, 25, 68, 79},
78 {85, 76, 83, 89, 60, 22, 82, 94, 27, 54, 58, 79, 87, 54, 78, 31, 78, 12, 64, 62, 100, 84, 10, 94, 74, 28, 7, 37, 19, 41, 82, 70, 16, 31, 58, 43, 19, 5, 36, 12, 59, 94, 91, 11, 13, 69, 42, 91, 81, 6, 53, 80, 90, 29, 40, 30, 23, 13, 33, 9, 21, 15, 79, 3, 12, 37, 46, 31, 8, 48, 44, 34, 42, 34, 45, 21, 69, 54, 12, 16, 60, 65, 96, 15, 60, 1, 45, 84, 82, 45, 93, 2, 60, 71, 5, 38, 74, 18, 69, 49},
79 {66, 12, 83, 74, 47, 94, 96, 15, 47, 74, 31, 6, 4, 94, 89, 64, 61, 100, 13, 42, 44, 72, 44, 70, 9, 16, 7, 83, 34, 77, 98, 66, 55, 80, 40, 1, 74, 1, 84, 20, 41, 81, 94, 45, 40, 48, 8, 1, 47, 89, 43, 58, 60, 54, 27, 69, 36, 1, 18, 70, 44, 15, 1, 99, 96, 7, 0, 35, 75, 50, 21, 15, 30, 14, 60, 37, 62, 35, 38, 76, 23, 47, 33, 49, 67, 60, 18, 2, 27, 2, 38, 71, 17, 6, 70, 79, 13, 36, 80, 89},
80 {86, 1, 3, 82, 15, 30, 18, 44, 31, 22, 19, 54, 36, 52, 69, 69, 78, 53, 72, 5, 55, 76, 42, 73, 82, 11, 17, 62, 47, 98, 50, 99, 99, 19, 81, 80, 15, 65, 23, 46, 54, 8, 66, 56, 60, 35, 24, 4, 88, 62, 76, 43, 38, 17, 82, 86, 29, 65, 47, 42, 62, 63, 41, 26, 49, 88, 6, 64, 18, 96, 10, 72, 4, 42, 94, 64, 77, 18, 34, 31, 80, 9, 40, 84, 27, 21, 70, 22, 86, 83, 64, 14, 46, 4, 40, 61, 92, 46, 24, 10},
81 {42, 0, 48, 12, 9, 42, 76, 86, 26, 77, 83, 5, 86, 22, 56, 79, 43, 92, 0, 96, 40, 65, 76, 52, 35, 15, 12, 94, 28, 3, 3, 36, 3, 17, 48, 79, 25, 90, 65, 51, 66, 47, 23, 18, 36, 79, 97, 79, 36, 98, 40, 76, 28, 15, 28, 63, 98, 40, 56, 25, 43, 25, 27, 13, 9, 75, 92, 34, 30, 22, 86, 97, 36, 75, 81, 72, 19, 77, 16, 55, 40, 23, 97, 68, 4, 24, 31, 1, 31, 53, 93, 40, 79, 19, 19, 88, 60, 78, 88, 91},
82 {66, 39, 53, 1, 13, 33, 39, 32, 76, 22, 53, 16, 11, 16, 84, 15, 40, 81, 17, 37, 34, 76, 44, 79, 96, 63, 32, 21, 6, 86, 11, 73, 25, 30, 40, 4, 29, 46, 3, 5, 68, 56, 21, 79, 72, 71, 60, 79, 18, 77, 82, 52, 53, 25, 97, 14, 55, 95, 35, 61, 80, 13, 33, 4, 9, 74, 9, 39, 19, 12, 10, 53, 34, 98, 98, 73, 68, 57, 17, 52, 0, 99, 3, 19, 24, 66, 100, 79, 60, 34, 39, 40, 13, 39, 44, 23, 79, 19, 28, 64},
83 {98, 38, 16, 32, 35, 80, 71, 69, 36, 88, 21, 2, 86, 91, 21, 76, 57, 87, 20, 83, 21, 26, 22, 0, 65, 33, 90, 9, 18, 17, 73, 16, 55, 55, 14, 56, 34, 85, 92, 36, 38, 79, 5, 90, 35, 93, 66, 58, 80, 86, 41, 67, 78, 29, 67, 8, 62, 57, 17, 47, 74, 90, 63, 96, 44, 43, 17, 44, 27, 75, 47, 65, 53, 52, 54, 55, 10, 86, 12, 90, 38, 53, 56, 15, 49, 23, 24, 77, 46, 41, 23, 19, 98, 86, 81, 7, 95, 65, 18, 21},
84 {39, 31, 52, 59, 49, 73, 13, 59, 24, 25, 49, 62, 45, 4, 44, 60, 94, 34, 36, 39, 41, 60, 25, 4, 11, 72, 12, 6, 36, 97, 94, 76, 27, 12, 34, 76, 85, 13, 34, 75, 4, 83, 3, 49, 54, 47, 8, 47, 47, 11, 53, 88, 71, 44, 59, 48, 15, 71, 54, 52, 67, 14, 27, 94, 26, 27, 69, 77, 6, 69, 51, 10, 52, 54, 26, 72, 67, 0, 85, 80, 11, 37, 34, 48, 81, 93, 97, 97, 29, 16, 14, 96, 30, 7, 55, 56, 34, 90, 99, 6},
85 {58, 50, 16, 76, 70, 8, 47, 3, 9, 32, 49, 87, 69, 83, 35, 16, 75, 98, 79, 3, 13, 93, 65, 44, 100, 86, 66, 100, 75, 65, 5, 33, 81, 88, 75, 16, 97, 22, 86, 72, 54, 35, 58, 89, 17, 59, 71, 59, 56, 49, 28, 70, 41, 60, 80, 40, 45, 11, 5, 20, 42, 10, 19, 22, 99, 94, 5, 61, 82, 91, 32, 1, 25, 90, 57, 9, 49, 27, 34, 71, 43, 62, 40, 50, 21, 86, 91, 33, 98, 62, 53, 39, 73, 38, 28, 37, 98, 33, 98, 80},
86 {90, 29, 47, 82, 85, 3, 57, 100, 98, 91, 71, 40, 18, 77, 90, 6, 63, 46, 39, 26, 8, 58, 31, 47, 96, 59, 84, 59, 58, 47, 38, 48, 76, 52, 96, 26, 55, 52, 26, 52, 42, 63, 58, 26, 5, 48, 32, 68, 60, 37, 60, 68, 95, 92, 14, 56, 16, 64, 15, 75, 10, 19, 89, 52, 71, 84, 79, 26, 1, 71, 44, 43, 100, 2, 35, 4, 16, 68, 39, 76, 4, 99, 10, 100, 56, 91, 21, 73, 55, 36, 13, 31, 56, 1, 84, 93, 51, 28, 85, 52},
87 {65, 29, 61, 64, 98, 96, 68, 13, 29, 73, 55, 34, 38, 65, 100, 94, 56, 87, 32, 77, 23, 45, 7, 45, 12, 91, 37, 29, 85, 22, 47, 49, 17, 74, 12, 14, 70, 47, 94, 65, 86, 48, 99, 23, 13, 64, 84, 35, 51, 15, 11, 40, 27, 18, 51, 5, 76, 88, 1, 26, 76, 48, 76, 59, 22, 54, 73, 58, 67, 32, 22, 53, 81, 88, 76, 60, 17, 25, 95, 34, 7, 5, 40, 34, 90, 91, 5, 31, 45, 6, 58, 20, 21, 33, 80, 9, 53, 18, 67, 20},
88 {51, 55, 73, 31, 42, 14, 57, 26, 40, 51, 60, 13, 22, 0, 47, 78, 91, 18, 9, 1, 92, 33, 22, 79, 32, 68, 88, 85, 86, 20, 71, 2, 75, 43, 100, 84, 24, 56, 9, 30, 6, 35, 43, 95, 1, 56, 73, 59, 40, 48, 60, 31, 81, 82, 9, 12, 15, 97, 63, 1, 83, 34, 70, 58, 43, 70, 41, 67, 25, 16, 63, 99, 17, 5, 93, 19, 27, 31, 78, 68, 79, 37, 99, 59, 86, 75, 37, 0, 37, 67, 68, 20, 0, 38, 78, 43, 7, 85, 77, 99},
89 {67, 39, 97, 84, 11, 90, 2, 38, 20, 46, 5, 100, 50, 71, 24, 35, 45, 28, 1, 82, 95, 36, 68, 61, 40, 11, 70, 47, 62, 46, 11, 28, 52, 8, 79, 63, 98, 81, 67, 84, 94, 39, 49, 43, 9, 40, 78, 20, 68, 45, 68, 28, 81, 36, 89, 20, 47, 58, 33, 9, 71, 45, 37, 22, 53, 82, 51, 16, 29, 84, 100, 22, 22, 15, 65, 98, 55, 8, 17, 22, 19, 86, 16, 0, 21, 4, 87, 34, 28, 20, 43, 99, 31, 47, 87, 50, 28, 3, 66, 57},
90 {88, 31, 45, 76, 46, 9, 74, 0, 84, 91, 89, 3, 42, 4, 3, 63, 8, 56, 98, 3, 76, 6, 1, 73, 53, 55, 22, 48, 58, 54, 71, 11, 86, 16, 88, 98, 92, 61, 99, 76, 17, 53, 79, 60, 58, 48, 89, 32, 3, 52, 35, 46, 59, 3, 18, 78, 24, 7, 92, 48, 61, 63, 60, 12, 79, 47, 10, 70, 74, 75, 11, 91, 27, 90, 16, 51, 3, 5, 84, 74, 57, 85, 19, 15, 54, 3, 60, 44, 10, 51, 93, 38, 13, 52, 50, 58, 65, 60, 28, 38},
91 {34, 39, 95, 28, 96, 11, 79, 99, 16, 28, 38, 73, 80, 57, 55, 100, 27, 14, 44, 3, 65, 36, 41, 79, 54, 92, 2, 18, 17, 30, 56, 18, 36, 50, 46, 98, 27, 24, 62, 43, 19, 0, 83, 99, 23, 37, 98, 50, 51, 41, 20, 82, 43, 61, 26, 97, 18, 29, 14, 2, 25, 36, 20, 61, 53, 66, 24, 80, 56, 87, 90, 41, 87, 72, 39, 9, 8, 3, 26, 25, 44, 46, 73, 54, 73, 100, 50, 58, 95, 31, 60, 19, 67, 80, 47, 86, 11, 71, 32, 33},
92 {23, 21, 75, 9, 93, 80, 86, 67, 83, 11, 58, 94, 23, 30, 47, 96, 96, 63, 19, 56, 94, 79, 42, 27, 24, 89, 12, 1, 25, 44, 35, 49, 65, 76, 58, 23, 21, 9, 90, 4, 87, 13, 64, 9, 10, 77, 72, 72, 39, 91, 28, 33, 70, 70, 60, 60, 24, 72, 62, 49, 83, 63, 64, 47, 4, 89, 37, 25, 98, 26, 96, 85, 6, 25, 94, 16, 1, 31, 54, 41, 22, 48, 74, 58, 17, 100, 17, 7, 71, 45, 57, 19, 74, 20, 67, 78, 75, 3, 70, 73},
93 {96, 65, 57, 68, 57, 16, 50, 58, 14, 4, 99, 36, 52, 38, 60, 36, 37, 43, 43, 75, 89, 66, 94, 62, 53, 60, 6, 27, 29, 76, 100, 92, 6, 22, 59, 63, 5, 9, 21, 19, 13, 86, 21, 31, 24, 47, 67, 61, 90, 10, 35, 44, 42, 29, 73, 95, 55, 79, 22, 51, 54, 88, 42, 26, 10, 0, 56, 82, 9, 77, 67, 89, 28, 88, 20, 52, 34, 53, 80, 90, 29, 14, 34, 72, 9, 6, 66, 65, 85, 54, 82, 4, 42, 23, 97, 18, 23, 52, 100, 100},
94 {95, 66, 54, 23, 19, 40, 75, 19, 60, 20, 8, 89, 35, 42, 60, 10, 48, 93, 41, 99, 46, 22, 69, 54, 45, 66, 38, 35, 17, 37, 0, 12, 69, 54, 35, 54, 61, 76, 73, 20, 97, 48, 8, 98, 90, 35, 7, 4, 94, 15, 69, 5, 37, 38, 60, 83, 3, 98, 84, 20, 1, 84, 99, 36, 3, 100, 57, 64, 76, 96, 50, 38, 43, 25, 35, 100, 60, 8, 70, 53, 23, 38, 58, 27, 42, 84, 76, 11, 48, 59, 99, 15, 8, 97, 51, 11, 97, 7, 42, 38},
95 {70, 58, 76, 12, 83, 77, 11, 42, 51, 47, 61, 75, 86, 86, 68, 94, 69, 43, 5, 16, 1, 3, 31, 9, 100, 49, 87, 62, 22, 95, 100, 92, 53, 41, 71, 35, 17, 48, 44, 69, 96, 4, 9, 47, 56, 77, 40, 25, 86, 45, 7, 87, 48, 5, 62, 14, 20, 48, 76, 8, 43, 76, 67, 62, 16, 37, 97, 0, 85, 6, 35, 80, 78, 10, 26, 33, 53, 33, 24, 38, 78, 32, 24, 93, 3, 52, 6, 90, 100, 48, 98, 8, 90, 64, 70, 6, 67, 33, 73, 52},
96 {39, 7, 98, 16, 84, 91, 16, 36, 23, 40, 74, 67, 38, 64, 59, 41, 15, 31, 97, 81, 80, 61, 56, 35, 24, 25, 41, 92, 24, 80, 9, 30, 53, 6, 12, 36, 97, 28, 72, 86, 69, 11, 53, 6, 75, 78, 14, 56, 76, 10, 37, 55, 37, 93, 56, 62, 84, 98, 19, 75, 43, 28, 4, 97, 0, 83, 32, 98, 11, 71, 49, 80, 82, 1, 52, 23, 80, 66, 45, 55, 43, 48, 76, 80, 40, 31, 7, 91, 95, 93, 31, 38, 20, 1, 0, 88, 84, 32, 51, 95},
97 {2, 100, 40, 85, 1, 59, 74, 47, 91, 18, 68, 33, 67, 9, 80, 73, 6, 53, 29, 1, 46, 60, 5, 32, 61, 5, 86, 11, 3, 36, 72, 6, 36, 12, 57, 37, 71, 97, 50, 61, 14, 17, 61, 47, 93, 6, 20, 99, 25, 15, 66, 37, 76, 71, 36, 2, 42, 21, 80, 12, 58, 52, 18, 94, 30, 41, 97, 67, 3, 12, 94, 17, 96, 54, 31, 88, 26, 51, 86, 18, 66, 52, 55, 7, 89, 91, 77, 98, 79, 56, 9, 36, 74, 94, 96, 3, 34, 92, 70, 37},
98 {3, 64, 20, 65, 84, 51, 52, 77, 68, 37, 95, 0, 55, 15, 7, 10, 6, 50, 7, 85, 73, 16, 87, 46, 9, 82, 50, 9, 39, 86, 12, 8, 49, 32, 73, 100, 50, 24, 76, 17, 27, 70, 17, 83, 51, 92, 93, 23, 7, 66, 74, 80, 82, 60, 26, 57, 41, 42, 66, 80, 27, 78, 88, 77, 76, 26, 42, 25, 50, 17, 9, 78, 53, 26, 26, 3, 84, 85, 27, 92, 50, 0, 71, 31, 27, 63, 88, 34, 4, 19, 14, 32, 97, 68, 75, 72, 95, 16, 64, 10},
99 {100, 73, 88, 52, 65, 80, 21, 49, 64, 14, 6, 13, 15, 77, 10, 8, 6, 64, 42, 10, 83, 22, 8, 45, 91, 49, 84, 51, 65, 47, 27, 30, 86, 82, 82, 50, 61, 70, 65, 92, 84, 71, 71, 65, 14, 82, 73, 20, 11, 15, 97, 61, 37, 5, 72, 94, 54, 55, 10, 86, 68, 38, 15, 53, 19, 64, 70, 80, 33, 34, 37, 16, 72, 8, 82, 86, 56, 54, 5, 33, 69, 1, 94, 73, 73, 66, 66, 27, 87, 77, 79, 55, 14, 94, 74, 100, 57, 43, 45, 90},
100 {44, 83, 73, 15, 91, 54, 0, 46, 74, 72, 79, 9, 39, 39, 82, 12, 71, 13, 5, 57, 90, 84, 11, 70, 77, 52, 69, 0, 95, 14, 56, 38, 63, 28, 19, 53, 48, 19, 65, 89, 57, 9, 98, 97, 14, 45, 8, 85, 58, 80, 42, 14, 63, 19, 50, 5, 71, 86, 72, 66, 66, 28, 70, 28, 56, 90, 81, 71, 75, 11, 59, 32, 87, 56, 28, 1, 67, 2, 86, 91, 82, 27, 71, 10, 47, 21, 82, 17, 6, 54, 49, 38, 82, 86, 66, 3, 75, 12, 74, 15},
101 {23, 99, 47, 9, 20, 75, 10, 87, 43, 63, 44, 91, 90, 14, 0, 2, 35, 83, 87, 7, 2, 1, 45, 84, 87, 77, 53, 27, 89, 94, 43, 78, 92, 90, 88, 12, 31, 64, 65, 74, 93, 8, 65, 49, 23, 31, 51, 24, 80, 3, 99, 82, 5, 9, 31, 92, 87, 85, 19, 41, 78, 62, 19, 35, 17, 73, 13, 48, 2, 79, 89, 96, 53, 19, 44, 42, 50, 61, 67, 30, 65, 31, 78, 36, 40, 9, 94, 93, 60, 12, 34, 3, 40, 53, 38, 24, 92, 52, 72, 94},
102 {97, 60, 89, 15, 79, 99, 58, 96, 26, 91, 92, 91, 21, 69, 93, 27, 44, 86, 20, 3, 65, 54, 6, 71, 73, 11, 95, 64, 29, 67, 23, 92, 93, 79, 6, 38, 77, 30, 33, 2, 20, 91, 59, 7, 59, 51, 1, 3, 3, 21, 73, 68, 41, 46, 4, 80, 57, 100, 9, 86, 32, 32, 43, 24, 10, 49, 28, 88, 80, 27, 56, 66, 17, 82, 40, 77, 32, 41, 46, 1, 28, 85, 35, 69, 30, 40, 14, 53, 39, 23, 4, 71, 55, 47, 61, 66, 97, 56, 19, 42},
103 {83, 41, 74, 0, 22, 80, 77, 21, 20, 89, 22, 14, 73, 58, 83, 70, 98, 63, 22, 2, 86, 27, 39, 41, 40, 66, 73, 36, 21, 92, 44, 4, 32, 85, 4, 21, 64, 47, 42, 85, 1, 64, 65, 40, 88, 48, 9, 51, 77, 99, 53, 63, 92, 58, 3, 31, 24, 76, 34, 11, 33, 44, 15, 31, 28, 86, 52, 93, 99, 94, 43, 100, 24, 7, 40, 11, 21, 15, 63, 99, 13, 82, 61, 4, 40, 30, 2, 30, 72, 36, 41, 71, 80, 23, 1, 8, 8, 20, 67, 7}
104};
105
diff --git a/baseline/source/dijkstra/input.h b/baseline/source/dijkstra/input.h
new file mode 100644
index 0000000..9701828
--- /dev/null
+++ b/baseline/source/dijkstra/input.h
@@ -0,0 +1,8 @@
1#ifndef INPUT_H
2#define INPUT_H
3
4#define NUM_NODES 100
5
6extern unsigned char dijkstra_AdjMatrix[NUM_NODES][NUM_NODES];
7
8#endif /* INPUT_H */
diff --git a/baseline/source/epic/ChangeLog.txt b/baseline/source/epic/ChangeLog.txt
new file mode 100644
index 0000000..5aad4f5
--- /dev/null
+++ b/baseline/source/epic/ChangeLog.txt
@@ -0,0 +1,56 @@
1Files: epic.c epic_data.h epic_data.c
2Original provenience: MediaBench benchmark suite,
3 http://euler.slu.edu/~fritts/mediabench/mb1/index.html
4
52016-02-03:
6- Added TACLeBench header, also kept original copyright notice
7- Removed commented-out code
8- Removed seemingly unnecessary empty lines
9- Removed unused function, variable, macro and type declarations except where
10 they may help understanding the program.
11- Slightly changed wording of original comments to keep them in line with the
12 modified/removed code parts.
13- Separated epic.c to epic.c and epic.h
14- Added proper '#ifndef __EPIC_DATA_H_' and friends to epic_data.h
15- Moved around all the following so that they are in the given order just after
16the header
17 - macro definitions
18 - forward declaration of functions
19 - declaration of global variables
20- Added a new main function that first calls init function then the old main
21 function sans init
22- Annotated epic_main() as the entry point of the analysis
23- Applied code formatting according to the following rules
24 - Lines shall not be wider than 80 characters; whenever possible, appropriate
25 line breaks shall be inserted to keep lines below 80 characters
26 - Indentation is done using whitespaces only, no tabs. Code is indented by
27 two whitespaces
28 - Two empty lines are put between any two functions
29 - In non-empty lists or index expressions, opening '(' and '[' are followed by
30 one whitespace, closing ')' and ']' are preceded by one whitespace
31 - In comma- or colon-separated argument lists, one whitespace is put after
32 each comma/colon
33 - Names of functions and global variables all start with a benchmark-specific
34 prefix (here: epic_) followed by lowercase letter
35 - For pointer types, one whitespace is put before the '*'
36 - Operators within expressions shall be preceded and followed by one
37 whitespace
38 - Code of then- and else-parts of if-then-else statements shall be put in
39 separate lines, not in the same lines as the if-condition or the keyword
40 "else"
41 - Opening braces '{' denoting the beginning of code for some if-else or loop
42 body shall be put at the end of the same line where the keywords "if",
43 "else", "for", "while" etc. occur
44
452016-10-10:
46- removed unused parameter 'char *edges' in epic_internal_filter()
47- included input data definition in epic.c, and removed epic_data.c and epic_data.h
48
492016-10-12:
50- added initial value to variable 'rt_edge_res_pos' (in case the first for loop
51at line 775) is not executed)
52- added initial value to variable 'first_col' (in case the first for loop
53at line 775) is not executed)
54
552016-10_14:
56- added epic_return() function
diff --git a/baseline/source/epic/epic.c b/baseline/source/epic/epic.c
new file mode 100644
index 0000000..13ba442
--- /dev/null
+++ b/baseline/source/epic/epic.c
@@ -0,0 +1,1141 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: epic
7
8 Author: Designed by Eero P. Simoncelli and Edward H. Adelson
9 Written by Eero P. Simoncelli
10 Developed at the Vision Science Group, The Media Laboratory
11 Copyright 1989, Massachusetts Institute of Technology
12 All rights reserved.
13
14 Function: Efficient Pyramid Image Coder
15
16 Source: MediaBench
17
18
19 Original name: epic
20
21 Changes: no major functional changes
22
23 License:
24 Permission to use, copy, or modify this software and its documentation
25 for educational and research purposes only and without fee is hereby
26 granted, provided that this copyright notice appear on all copies and
27 supporting documentation. For any other uses of this software, in
28 original or modified form, including but not limited to distribution
29 in whole or in part, specific prior permission must be obtained from
30 M.I.T. and the authors. These programs shall not be used, rewritten,
31 or adapted as the basis of a commercial software or hardware product
32 without first obtaining appropriate licenses from M.I.T. M.I.T. makes
33 no representations about the suitability of this software for any
34 purpose. It is provided "as is" without express or implied warranty.
35*/
36
37
38#include "../extra.h"
39#include "epic.h"
40
41#define X_SIZE 64
42#define Y_SIZE 64
43
44float epic_image[] = {
45 0x89, 0x88, 0x87, 0x86, 0x89, 0x87, 0x84, 0x86,
46 0x83, 0x89, 0x82, 0x83, 0x84, 0x81, 0x80, 0x80,
47 0x81, 0x83, 0x88, 0x8A, 0x8E, 0x90, 0x96, 0x98,
48 0x95, 0x92, 0x93, 0x88, 0x78, 0x7B, 0x60, 0x52,
49 0x41, 0x3F, 0x3A, 0x46, 0x46, 0x48, 0x49, 0x48,
50 0x4F, 0x4A, 0x49, 0x50, 0x4C, 0x4B, 0x4D, 0x4C,
51 0x4E, 0x4E, 0x4A, 0x49, 0x4D, 0x54, 0x50, 0x59,
52 0x51, 0x5A, 0x5E, 0x5A, 0x5D, 0x61, 0x59, 0x65,
53 0x63, 0x65, 0x60, 0x62, 0x68, 0x67, 0x64, 0x61,
54 0x64, 0x5E, 0x66, 0x63, 0x63, 0x61, 0x67, 0x68,
55 0x62, 0x64, 0x66, 0x67, 0x64, 0x63, 0x66, 0x64,
56 0x67, 0x66, 0x65, 0x64, 0x64, 0x6A, 0x66, 0x65,
57 0x68, 0x66, 0x69, 0x67, 0x6A, 0x66, 0x68, 0x66,
58 0x6C, 0x65, 0x69, 0x64, 0x65, 0x64, 0x66, 0x62,
59 0x63, 0x68, 0x68, 0x65, 0x64, 0x64, 0x62, 0x63,
60 0x68, 0x65, 0x66, 0x69, 0x66, 0x65, 0x61, 0x66,
61 0x6E, 0x69, 0x64, 0x61, 0x63, 0x63, 0x66, 0x63,
62 0x62, 0x64, 0x60, 0x68, 0x63, 0x61, 0x62, 0x65,
63 0x60, 0x63, 0x60, 0x62, 0x60, 0x5E, 0x61, 0x62,
64 0x5D, 0x5C, 0x57, 0x5B, 0x58, 0x53, 0x54, 0x47,
65 0x49, 0x54, 0x5C, 0x6B, 0x6F, 0x77, 0x7F, 0x80,
66 0x88, 0x8A, 0x8C, 0x85, 0x7A, 0x7D, 0x7F, 0x7D,
67 0x80, 0x80, 0x81, 0x80, 0x85, 0x82, 0x81, 0x7E,
68 0x80, 0x7F, 0x7F, 0x7E, 0x7D, 0x7E, 0x83, 0x7F,
69 0x81, 0x83, 0x87, 0x82, 0x83, 0x88, 0x84, 0x82,
70 0x82, 0x8A, 0xB3, 0xC5, 0xCD, 0xCF, 0xD4, 0xD3,
71 0xD6, 0xCC, 0xB5, 0x80, 0x4E, 0x48, 0x4D, 0x4D,
72 0x57, 0x5A, 0x59, 0x5C, 0x62, 0x58, 0x5C, 0x5B,
73 0x5B, 0x62, 0x5D, 0x5C, 0x59, 0x5C, 0x5A, 0x59,
74 0x5D, 0x5F, 0x5B, 0x5F, 0x60, 0x5E, 0x5E, 0x57,
75 0x5F, 0x5F, 0x60, 0x61, 0x5C, 0x61, 0x60, 0x5B,
76 0x56, 0x56, 0x57, 0x58, 0x6E, 0x91, 0x96, 0x7E,
77 0x89, 0x88, 0x87, 0x86, 0x8A, 0x87, 0x84, 0x87,
78 0x83, 0x89, 0x82, 0x83, 0x84, 0x81, 0x80, 0x80,
79 0x81, 0x83, 0x88, 0x8A, 0x8E, 0x90, 0x96, 0x98,
80 0x94, 0x93, 0x93, 0x88, 0x78, 0x7B, 0x60, 0x52,
81 0x41, 0x3F, 0x39, 0x46, 0x46, 0x48, 0x49, 0x47,
82 0x50, 0x4A, 0x49, 0x50, 0x4D, 0x4B, 0x4D, 0x4C,
83 0x4E, 0x4E, 0x4A, 0x49, 0x4E, 0x54, 0x4F, 0x59,
84 0x51, 0x5A, 0x5E, 0x5A, 0x5D, 0x61, 0x59, 0x65,
85 0x63, 0x65, 0x5F, 0x62, 0x68, 0x67, 0x64, 0x61,
86 0x64, 0x5E, 0x66, 0x63, 0x63, 0x61, 0x67, 0x69,
87 0x61, 0x63, 0x66, 0x67, 0x65, 0x63, 0x66, 0x64,
88 0x67, 0x67, 0x65, 0x64, 0x64, 0x6A, 0x66, 0x65,
89 0x68, 0x66, 0x69, 0x67, 0x6A, 0x67, 0x69, 0x66,
90 0x6C, 0x65, 0x69, 0x64, 0x65, 0x64, 0x66, 0x62,
91 0x63, 0x68, 0x68, 0x66, 0x64, 0x64, 0x62, 0x63,
92 0x68, 0x65, 0x66, 0x6A, 0x67, 0x65, 0x60, 0x66,
93 0x6F, 0x6A, 0x64, 0x61, 0x64, 0x63, 0x66, 0x63,
94 0x62, 0x64, 0x60, 0x69, 0x64, 0x61, 0x62, 0x65,
95 0x60, 0x63, 0x60, 0x62, 0x60, 0x5E, 0x61, 0x62,
96 0x5D, 0x5C, 0x57, 0x5B, 0x59, 0x53, 0x54, 0x47,
97 0x49, 0x54, 0x5C, 0x6B, 0x6F, 0x77, 0x7F, 0x80,
98 0x88, 0x8A, 0x8C, 0x85, 0x7A, 0x7D, 0x7F, 0x7C,
99 0x80, 0x80, 0x81, 0x80, 0x85, 0x82, 0x81, 0x7E,
100 0x80, 0x7F, 0x7F, 0x7E, 0x7D, 0x7E, 0x83, 0x7F,
101 0x81, 0x83, 0x87, 0x81, 0x83, 0x88, 0x84, 0x82,
102 0x82, 0x8A, 0xB5, 0xC5, 0xCD, 0xCF, 0xD4, 0xD3,
103 0xD6, 0xCC, 0xB4, 0x7E, 0x4D, 0x48, 0x4E, 0x4D,
104 0x57, 0x5A, 0x59, 0x5C, 0x62, 0x58, 0x5C, 0x5B,
105 0x5B, 0x62, 0x5D, 0x5C, 0x59, 0x5C, 0x5A, 0x59,
106 0x5D, 0x5F, 0x5B, 0x5F, 0x60, 0x5E, 0x5E, 0x57,
107 0x5F, 0x5F, 0x60, 0x61, 0x5C, 0x61, 0x60, 0x5B,
108 0x56, 0x56, 0x57, 0x58, 0x6F, 0x94, 0x9A, 0x82,
109 0x88, 0x89, 0x87, 0x86, 0x88, 0x86, 0x84, 0x85,
110 0x82, 0x87, 0x82, 0x81, 0x83, 0x81, 0x7F, 0x80,
111 0x82, 0x82, 0x87, 0x8A, 0x8F, 0x90, 0x95, 0x98,
112 0x95, 0x92, 0x92, 0x88, 0x79, 0x77, 0x5F, 0x51,
113 0x41, 0x3E, 0x3B, 0x44, 0x44, 0x46, 0x49, 0x4A,
114 0x4C, 0x49, 0x49, 0x4E, 0x4A, 0x4A, 0x4E, 0x4A,
115 0x4D, 0x4D, 0x48, 0x4A, 0x4C, 0x52, 0x52, 0x58,
116 0x52, 0x59, 0x5E, 0x5A, 0x5D, 0x5F, 0x59, 0x64,
117 0x64, 0x64, 0x62, 0x61, 0x66, 0x66, 0x64, 0x60,
118 0x62, 0x5F, 0x65, 0x63, 0x62, 0x62, 0x65, 0x66,
119 0x62, 0x65, 0x67, 0x66, 0x64, 0x64, 0x65, 0x65,
120 0x66, 0x65, 0x65, 0x63, 0x63, 0x67, 0x65, 0x64,
121 0x67, 0x67, 0x68, 0x66, 0x6A, 0x66, 0x67, 0x66,
122 0x6C, 0x65, 0x6A, 0x64, 0x64, 0x63, 0x66, 0x62,
123 0x63, 0x67, 0x69, 0x65, 0x64, 0x63, 0x62, 0x63,
124 0x68, 0x65, 0x66, 0x69, 0x66, 0x65, 0x61, 0x65,
125 0x6C, 0x69, 0x64, 0x61, 0x62, 0x62, 0x64, 0x63,
126 0x61, 0x63, 0x60, 0x66, 0x63, 0x61, 0x62, 0x65,
127 0x60, 0x62, 0x60, 0x62, 0x60, 0x5E, 0x60, 0x61,
128 0x5C, 0x5C, 0x59, 0x5B, 0x57, 0x53, 0x52, 0x47,
129 0x48, 0x54, 0x5C, 0x69, 0x6E, 0x77, 0x7D, 0x80,
130 0x88, 0x89, 0x8C, 0x84, 0x7B, 0x7D, 0x7E, 0x7D,
131 0x7F, 0x80, 0x81, 0x7F, 0x85, 0x82, 0x80, 0x7E,
132 0x7F, 0x7E, 0x7F, 0x7F, 0x7E, 0x7F, 0x82, 0x7F,
133 0x81, 0x83, 0x86, 0x82, 0x83, 0x87, 0x84, 0x82,
134 0x81, 0x88, 0xB0, 0xC5, 0xCD, 0xCF, 0xD4, 0xD4,
135 0xD6, 0xCD, 0xB8, 0x86, 0x51, 0x47, 0x4B, 0x4D,
136 0x56, 0x59, 0x59, 0x5B, 0x5F, 0x59, 0x5C, 0x5D,
137 0x5B, 0x62, 0x5D, 0x5B, 0x5B, 0x5C, 0x5B, 0x5A,
138 0x5E, 0x5F, 0x5D, 0x5F, 0x60, 0x5D, 0x5F, 0x58,
139 0x5E, 0x5F, 0x5F, 0x5F, 0x5B, 0x60, 0x60, 0x5C,
140 0x57, 0x56, 0x59, 0x5B, 0x6E, 0x8A, 0x87, 0x6C,
141 0x84, 0x88, 0x86, 0x84, 0x87, 0x85, 0x84, 0x82,
142 0x80, 0x84, 0x82, 0x7E, 0x82, 0x7F, 0x7C, 0x80,
143 0x84, 0x80, 0x84, 0x8B, 0x90, 0x92, 0x93, 0x95,
144 0x97, 0x91, 0x8E, 0x86, 0x79, 0x6F, 0x5B, 0x4F,
145 0x41, 0x3A, 0x3D, 0x3F, 0x40, 0x42, 0x48, 0x4B,
146 0x46, 0x48, 0x47, 0x4A, 0x46, 0x49, 0x4D, 0x48,
147 0x48, 0x4D, 0x46, 0x4C, 0x4B, 0x4F, 0x55, 0x55,
148 0x54, 0x58, 0x5D, 0x5B, 0x5D, 0x5C, 0x5A, 0x61,
149 0x62, 0x60, 0x65, 0x61, 0x63, 0x65, 0x64, 0x5F,
150 0x60, 0x61, 0x63, 0x63, 0x61, 0x63, 0x61, 0x63,
151 0x64, 0x66, 0x67, 0x66, 0x64, 0x65, 0x65, 0x67,
152 0x64, 0x64, 0x66, 0x63, 0x62, 0x64, 0x63, 0x62,
153 0x65, 0x67, 0x66, 0x65, 0x68, 0x65, 0x64, 0x64,
154 0x69, 0x63, 0x69, 0x65, 0x63, 0x61, 0x63, 0x61,
155 0x63, 0x68, 0x6B, 0x65, 0x63, 0x61, 0x62, 0x64,
156 0x66, 0x64, 0x65, 0x66, 0x63, 0x63, 0x63, 0x65,
157 0x65, 0x67, 0x65, 0x60, 0x60, 0x5E, 0x60, 0x64,
158 0x5E, 0x63, 0x60, 0x61, 0x5F, 0x60, 0x61, 0x63,
159 0x62, 0x62, 0x5E, 0x60, 0x61, 0x60, 0x5E, 0x5D,
160 0x5C, 0x5D, 0x5C, 0x5A, 0x54, 0x51, 0x4E, 0x4A,
161 0x46, 0x50, 0x59, 0x62, 0x6A, 0x75, 0x79, 0x80,
162 0x86, 0x86, 0x8B, 0x83, 0x7F, 0x7E, 0x7E, 0x7E,
163 0x7E, 0x81, 0x81, 0x7E, 0x83, 0x82, 0x80, 0x80,
164 0x7F, 0x7F, 0x7F, 0x81, 0x81, 0x81, 0x7F, 0x7E,
165 0x80, 0x82, 0x84, 0x83, 0x81, 0x84, 0x83, 0x82,
166 0x7F, 0x82, 0x9D, 0xBD, 0xC9, 0xCE, 0xD2, 0xD4,
167 0xD6, 0xD2, 0xC4, 0xA1, 0x68, 0x49, 0x48, 0x4D,
168 0x54, 0x56, 0x59, 0x5A, 0x5A, 0x5B, 0x5B, 0x60,
169 0x5B, 0x60, 0x5B, 0x5B, 0x5C, 0x5C, 0x5D, 0x5D,
170 0x60, 0x5C, 0x5E, 0x5E, 0x5E, 0x5B, 0x5E, 0x5C,
171 0x5D, 0x5E, 0x5F, 0x5C, 0x5C, 0x60, 0x61, 0x5E,
172 0x5A, 0x58, 0x5F, 0x62, 0x5F, 0x5D, 0x48, 0x32,
173 0x81, 0x85, 0x85, 0x81, 0x86, 0x83, 0x84, 0x80,
174 0x7F, 0x84, 0x83, 0x7E, 0x80, 0x7E, 0x7D, 0x80,
175 0x82, 0x7F, 0x85, 0x8D, 0x91, 0x93, 0x92, 0x95,
176 0x95, 0x8F, 0x8C, 0x84, 0x76, 0x6B, 0x5D, 0x50,
177 0x41, 0x38, 0x39, 0x3B, 0x41, 0x41, 0x46, 0x47,
178 0x45, 0x47, 0x44, 0x47, 0x45, 0x4A, 0x49, 0x48,
179 0x45, 0x4C, 0x48, 0x4C, 0x4E, 0x4E, 0x51, 0x56,
180 0x56, 0x59, 0x5A, 0x5C, 0x5C, 0x5E, 0x5A, 0x60,
181 0x5D, 0x60, 0x62, 0x61, 0x63, 0x64, 0x62, 0x5F,
182 0x61, 0x62, 0x64, 0x62, 0x61, 0x64, 0x61, 0x64,
183 0x63, 0x65, 0x65, 0x67, 0x63, 0x66, 0x65, 0x64,
184 0x63, 0x65, 0x66, 0x61, 0x60, 0x67, 0x64, 0x62,
185 0x63, 0x65, 0x64, 0x65, 0x65, 0x63, 0x62, 0x63,
186 0x63, 0x61, 0x67, 0x66, 0x63, 0x5F, 0x5E, 0x60,
187 0x63, 0x66, 0x6A, 0x64, 0x62, 0x60, 0x64, 0x63,
188 0x65, 0x62, 0x62, 0x62, 0x60, 0x62, 0x63, 0x63,
189 0x61, 0x64, 0x65, 0x60, 0x60, 0x5D, 0x61, 0x62,
190 0x5D, 0x61, 0x5E, 0x60, 0x5C, 0x60, 0x5F, 0x60,
191 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x5E, 0x5D,
192 0x5D, 0x5B, 0x5A, 0x58, 0x52, 0x51, 0x4E, 0x4D,
193 0x47, 0x4A, 0x51, 0x5B, 0x66, 0x70, 0x76, 0x7C,
194 0x81, 0x84, 0x8A, 0x85, 0x81, 0x80, 0x7F, 0x7C,
195 0x7F, 0x82, 0x82, 0x81, 0x82, 0x82, 0x81, 0x84,
196 0x80, 0x82, 0x81, 0x80, 0x81, 0x81, 0x80, 0x80,
197 0x81, 0x82, 0x81, 0x82, 0x7F, 0x81, 0x80, 0x81,
198 0x7F, 0x7D, 0x86, 0xAB, 0xC1, 0xCB, 0xCF, 0xD2,
199 0xD3, 0xD5, 0xCF, 0xBA, 0x8A, 0x57, 0x48, 0x4D,
200 0x51, 0x52, 0x55, 0x5A, 0x5A, 0x5B, 0x59, 0x5F,
201 0x59, 0x5C, 0x59, 0x5C, 0x5A, 0x5A, 0x5B, 0x5C,
202 0x5F, 0x5C, 0x5D, 0x5B, 0x5D, 0x5C, 0x5C, 0x5E,
203 0x5C, 0x5D, 0x61, 0x5E, 0x5D, 0x5F, 0x62, 0x61,
204 0x61, 0x5F, 0x60, 0x5A, 0x3D, 0x28, 0x19, 0x13,
205 0x82, 0x84, 0x83, 0x7F, 0x84, 0x83, 0x83, 0x81,
206 0x80, 0x83, 0x84, 0x82, 0x7F, 0x7F, 0x80, 0x7F,
207 0x81, 0x83, 0x87, 0x8E, 0x92, 0x91, 0x93, 0x94,
208 0x91, 0x8F, 0x8E, 0x83, 0x72, 0x6A, 0x60, 0x4F,
209 0x3F, 0x36, 0x37, 0x3D, 0x42, 0x3F, 0x43, 0x47,
210 0x45, 0x45, 0x46, 0x46, 0x47, 0x4B, 0x44, 0x46,
211 0x44, 0x47, 0x48, 0x4B, 0x51, 0x4D, 0x4F, 0x56,
212 0x56, 0x5A, 0x5A, 0x5B, 0x5B, 0x5D, 0x5B, 0x5F,
213 0x5C, 0x62, 0x5D, 0x61, 0x62, 0x63, 0x60, 0x63,
214 0x62, 0x63, 0x64, 0x60, 0x61, 0x64, 0x60, 0x66,
215 0x5F, 0x63, 0x65, 0x67, 0x63, 0x63, 0x63, 0x63,
216 0x63, 0x65, 0x63, 0x61, 0x62, 0x66, 0x63, 0x63,
217 0x62, 0x63, 0x61, 0x62, 0x64, 0x61, 0x64, 0x63,
218 0x61, 0x64, 0x66, 0x63, 0x63, 0x5E, 0x5D, 0x5E,
219 0x63, 0x61, 0x64, 0x63, 0x63, 0x60, 0x63, 0x62,
220 0x64, 0x62, 0x63, 0x61, 0x62, 0x61, 0x63, 0x60,
221 0x61, 0x61, 0x63, 0x63, 0x61, 0x62, 0x62, 0x60,
222 0x5E, 0x5F, 0x5F, 0x61, 0x5D, 0x61, 0x5F, 0x5F,
223 0x5F, 0x5E, 0x61, 0x60, 0x5F, 0x5F, 0x62, 0x61,
224 0x5D, 0x5A, 0x56, 0x58, 0x54, 0x52, 0x51, 0x4F,
225 0x4C, 0x47, 0x4B, 0x57, 0x61, 0x6C, 0x72, 0x79,
226 0x7E, 0x82, 0x89, 0x87, 0x82, 0x82, 0x7F, 0x7E,
227 0x80, 0x82, 0x86, 0x84, 0x85, 0x84, 0x83, 0x85,
228 0x82, 0x82, 0x82, 0x80, 0x81, 0x83, 0x82, 0x80,
229 0x80, 0x83, 0x80, 0x81, 0x7F, 0x81, 0x7F, 0x81,
230 0x83, 0x7A, 0x7D, 0x95, 0xB7, 0xC6, 0xCD, 0xD0,
231 0xD3, 0xD5, 0xD4, 0xC9, 0xA9, 0x73, 0x4B, 0x48,
232 0x4D, 0x50, 0x53, 0x57, 0x59, 0x5A, 0x57, 0x5C,
233 0x5B, 0x5A, 0x59, 0x5B, 0x59, 0x58, 0x58, 0x5A,
234 0x5F, 0x5D, 0x5B, 0x58, 0x5D, 0x5A, 0x5C, 0x5D,
235 0x5D, 0x5E, 0x5E, 0x5F, 0x5C, 0x5D, 0x62, 0x65,
236 0x66, 0x65, 0x55, 0x3D, 0x20, 0x13, 0x12, 0x17,
237 0x83, 0x83, 0x80, 0x81, 0x84, 0x82, 0x81, 0x81,
238 0x81, 0x83, 0x81, 0x83, 0x7F, 0x80, 0x80, 0x7E,
239 0x83, 0x8A, 0x8A, 0x90, 0x93, 0x91, 0x92, 0x92,
240 0x8F, 0x90, 0x8D, 0x83, 0x71, 0x69, 0x5D, 0x4D,
241 0x41, 0x37, 0x37, 0x3F, 0x3C, 0x3F, 0x42, 0x48,
242 0x44, 0x46, 0x49, 0x4B, 0x4A, 0x4A, 0x41, 0x45,
243 0x45, 0x44, 0x44, 0x48, 0x50, 0x4C, 0x51, 0x53,
244 0x57, 0x57, 0x5A, 0x5A, 0x5D, 0x5B, 0x5D, 0x5D,
245 0x5C, 0x5E, 0x5E, 0x62, 0x5E, 0x62, 0x60, 0x65,
246 0x63, 0x63, 0x61, 0x5F, 0x61, 0x63, 0x5E, 0x65,
247 0x5E, 0x61, 0x66, 0x63, 0x63, 0x61, 0x63, 0x65,
248 0x61, 0x62, 0x62, 0x64, 0x64, 0x63, 0x62, 0x62,
249 0x60, 0x63, 0x62, 0x61, 0x64, 0x61, 0x64, 0x63,
250 0x62, 0x66, 0x66, 0x63, 0x64, 0x5E, 0x60, 0x5F,
251 0x63, 0x62, 0x60, 0x63, 0x62, 0x60, 0x62, 0x62,
252 0x64, 0x66, 0x66, 0x63, 0x65, 0x61, 0x65, 0x61,
253 0x60, 0x61, 0x61, 0x64, 0x61, 0x63, 0x63, 0x61,
254 0x61, 0x5F, 0x61, 0x61, 0x5F, 0x62, 0x5E, 0x60,
255 0x5F, 0x5B, 0x5F, 0x61, 0x5E, 0x5F, 0x65, 0x60,
256 0x5A, 0x5B, 0x58, 0x59, 0x56, 0x53, 0x52, 0x50,
257 0x4E, 0x4B, 0x47, 0x51, 0x5A, 0x67, 0x6E, 0x77,
258 0x7B, 0x7F, 0x87, 0x87, 0x86, 0x84, 0x82, 0x83,
259 0x83, 0x83, 0x86, 0x87, 0x89, 0x88, 0x87, 0x84,
260 0x84, 0x83, 0x80, 0x80, 0x81, 0x84, 0x81, 0x81,
261 0x80, 0x81, 0x7F, 0x7F, 0x7F, 0x82, 0x80, 0x81,
262 0x84, 0x7C, 0x7E, 0x82, 0xA5, 0xC0, 0xCA, 0xCF,
263 0xD3, 0xD5, 0xD5, 0xD2, 0xBF, 0x96, 0x5C, 0x47,
264 0x4B, 0x4E, 0x50, 0x55, 0x55, 0x58, 0x57, 0x5A,
265 0x5D, 0x5A, 0x5C, 0x59, 0x5C, 0x55, 0x57, 0x5B,
266 0x60, 0x5B, 0x5B, 0x59, 0x5B, 0x5B, 0x5F, 0x5B,
267 0x5D, 0x5E, 0x5B, 0x5D, 0x5D, 0x5D, 0x65, 0x68,
268 0x63, 0x5A, 0x3A, 0x23, 0x19, 0x12, 0x17, 0x19,
269 0x83, 0x83, 0x81, 0x84, 0x82, 0x80, 0x82, 0x81,
270 0x81, 0x81, 0x80, 0x81, 0x80, 0x7F, 0x7E, 0x82,
271 0x86, 0x8C, 0x90, 0x91, 0x91, 0x92, 0x91, 0x92,
272 0x90, 0x8F, 0x87, 0x82, 0x72, 0x69, 0x5D, 0x4E,
273 0x42, 0x39, 0x37, 0x3E, 0x3A, 0x42, 0x44, 0x43,
274 0x46, 0x4B, 0x49, 0x4E, 0x4A, 0x49, 0x42, 0x48,
275 0x48, 0x44, 0x42, 0x45, 0x4C, 0x4D, 0x51, 0x51,
276 0x55, 0x56, 0x5A, 0x5C, 0x5E, 0x5C, 0x5C, 0x5F,
277 0x5D, 0x5C, 0x60, 0x60, 0x5C, 0x62, 0x62, 0x64,
278 0x63, 0x61, 0x61, 0x60, 0x61, 0x61, 0x60, 0x63,
279 0x61, 0x61, 0x65, 0x62, 0x62, 0x65, 0x65, 0x65,
280 0x61, 0x62, 0x64, 0x65, 0x66, 0x63, 0x64, 0x5F,
281 0x5F, 0x62, 0x65, 0x64, 0x64, 0x63, 0x62, 0x65,
282 0x63, 0x64, 0x65, 0x62, 0x65, 0x60, 0x63, 0x60,
283 0x61, 0x66, 0x61, 0x64, 0x5F, 0x60, 0x63, 0x62,
284 0x64, 0x67, 0x66, 0x67, 0x66, 0x61, 0x65, 0x64,
285 0x60, 0x65, 0x61, 0x62, 0x61, 0x60, 0x64, 0x5F,
286 0x63, 0x61, 0x60, 0x5F, 0x5F, 0x5E, 0x5D, 0x60,
287 0x61, 0x5D, 0x60, 0x61, 0x60, 0x60, 0x62, 0x5F,
288 0x59, 0x5D, 0x5B, 0x5A, 0x57, 0x54, 0x51, 0x56,
289 0x4E, 0x4E, 0x48, 0x4C, 0x55, 0x60, 0x6E, 0x75,
290 0x79, 0x7D, 0x84, 0x87, 0x89, 0x89, 0x87, 0x85,
291 0x84, 0x86, 0x87, 0x8A, 0x89, 0x8A, 0x8A, 0x85,
292 0x82, 0x84, 0x82, 0x81, 0x83, 0x83, 0x7D, 0x80,
293 0x80, 0x7E, 0x7F, 0x7C, 0x7E, 0x7F, 0x80, 0x80,
294 0x7F, 0x80, 0x7F, 0x7B, 0x8D, 0xB5, 0xC5, 0xCC,
295 0xD2, 0xD4, 0xD5, 0xD6, 0xCC, 0xB4, 0x7F, 0x4E,
296 0x4C, 0x4B, 0x4F, 0x51, 0x56, 0x55, 0x54, 0x59,
297 0x5C, 0x59, 0x5D, 0x59, 0x5B, 0x57, 0x57, 0x5D,
298 0x5D, 0x58, 0x5D, 0x5D, 0x5A, 0x5F, 0x61, 0x5D,
299 0x5F, 0x5E, 0x5D, 0x60, 0x60, 0x63, 0x69, 0x62,
300 0x50, 0x38, 0x1D, 0x1A, 0x1C, 0x17, 0x19, 0x18,
301 0x81, 0x82, 0x83, 0x82, 0x81, 0x7E, 0x83, 0x83,
302 0x80, 0x82, 0x82, 0x80, 0x80, 0x7D, 0x80, 0x88,
303 0x8A, 0x8D, 0x93, 0x8F, 0x91, 0x91, 0x90, 0x8F,
304 0x90, 0x8C, 0x84, 0x81, 0x71, 0x69, 0x5E, 0x4B,
305 0x40, 0x3A, 0x38, 0x3B, 0x3B, 0x45, 0x44, 0x3E,
306 0x46, 0x4B, 0x4A, 0x4B, 0x45, 0x47, 0x45, 0x49,
307 0x44, 0x45, 0x42, 0x47, 0x4A, 0x4F, 0x52, 0x51,
308 0x53, 0x57, 0x59, 0x5D, 0x5B, 0x5E, 0x5A, 0x60,
309 0x5F, 0x5F, 0x5F, 0x61, 0x5C, 0x61, 0x64, 0x63,
310 0x62, 0x60, 0x62, 0x62, 0x63, 0x60, 0x61, 0x60,
311 0x64, 0x64, 0x66, 0x63, 0x61, 0x68, 0x65, 0x65,
312 0x63, 0x66, 0x65, 0x63, 0x65, 0x63, 0x64, 0x61,
313 0x60, 0x60, 0x62, 0x66, 0x64, 0x61, 0x63, 0x65,
314 0x64, 0x62, 0x66, 0x60, 0x67, 0x63, 0x61, 0x5E,
315 0x5D, 0x66, 0x65, 0x63, 0x60, 0x60, 0x61, 0x62,
316 0x66, 0x68, 0x66, 0x6B, 0x65, 0x62, 0x65, 0x63,
317 0x63, 0x64, 0x63, 0x62, 0x60, 0x61, 0x62, 0x5D,
318 0x62, 0x62, 0x61, 0x5E, 0x5F, 0x5A, 0x5E, 0x5E,
319 0x61, 0x60, 0x62, 0x60, 0x62, 0x5E, 0x5F, 0x60,
320 0x5E, 0x5F, 0x59, 0x5B, 0x56, 0x54, 0x51, 0x59,
321 0x4E, 0x4E, 0x49, 0x47, 0x52, 0x5B, 0x6B, 0x72,
322 0x76, 0x7C, 0x82, 0x86, 0x87, 0x8E, 0x89, 0x85,
323 0x85, 0x87, 0x88, 0x8D, 0x89, 0x89, 0x8A, 0x89,
324 0x82, 0x84, 0x85, 0x86, 0x86, 0x80, 0x7E, 0x7E,
325 0x7E, 0x7F, 0x81, 0x7D, 0x7F, 0x7C, 0x7E, 0x7D,
326 0x7E, 0x80, 0x7D, 0x7C, 0x7B, 0x9F, 0xBD, 0xC9,
327 0xD0, 0xD3, 0xD5, 0xD6, 0xD3, 0xC6, 0xA3, 0x64,
328 0x4C, 0x47, 0x50, 0x4D, 0x58, 0x53, 0x52, 0x58,
329 0x59, 0x5A, 0x5C, 0x59, 0x5B, 0x5E, 0x58, 0x5E,
330 0x5B, 0x5D, 0x5F, 0x5C, 0x5B, 0x60, 0x63, 0x5F,
331 0x62, 0x62, 0x60, 0x64, 0x65, 0x68, 0x63, 0x4F,
332 0x30, 0x17, 0x14, 0x13, 0x17, 0x1A, 0x15, 0x17,
333 0x82, 0x83, 0x83, 0x80, 0x82, 0x7F, 0x83, 0x86,
334 0x83, 0x86, 0x81, 0x81, 0x80, 0x7F, 0x85, 0x88,
335 0x8C, 0x8F, 0x92, 0x8E, 0x93, 0x8F, 0x8E, 0x8B,
336 0x8E, 0x8A, 0x85, 0x7E, 0x71, 0x68, 0x5E, 0x4F,
337 0x42, 0x3E, 0x38, 0x39, 0x3D, 0x45, 0x42, 0x42,
338 0x44, 0x47, 0x4B, 0x49, 0x45, 0x46, 0x47, 0x46,
339 0x42, 0x45, 0x44, 0x48, 0x4A, 0x50, 0x52, 0x51,
340 0x55, 0x54, 0x57, 0x5A, 0x5A, 0x5D, 0x57, 0x5F,
341 0x5E, 0x60, 0x5D, 0x61, 0x5E, 0x61, 0x64, 0x62,
342 0x60, 0x62, 0x62, 0x63, 0x63, 0x62, 0x62, 0x61,
343 0x63, 0x62, 0x65, 0x63, 0x60, 0x65, 0x64, 0x63,
344 0x64, 0x66, 0x64, 0x61, 0x62, 0x64, 0x63, 0x63,
345 0x63, 0x5F, 0x61, 0x67, 0x62, 0x61, 0x64, 0x63,
346 0x63, 0x62, 0x65, 0x61, 0x68, 0x61, 0x63, 0x61,
347 0x5D, 0x65, 0x68, 0x62, 0x60, 0x5E, 0x5E, 0x63,
348 0x67, 0x69, 0x68, 0x69, 0x69, 0x64, 0x65, 0x64,
349 0x65, 0x61, 0x64, 0x64, 0x64, 0x62, 0x62, 0x5C,
350 0x60, 0x62, 0x63, 0x61, 0x61, 0x5B, 0x5C, 0x5C,
351 0x60, 0x60, 0x61, 0x5F, 0x63, 0x5B, 0x5D, 0x60,
352 0x61, 0x5F, 0x5B, 0x5C, 0x5A, 0x53, 0x52, 0x56,
353 0x4E, 0x4C, 0x48, 0x44, 0x4E, 0x5A, 0x65, 0x6F,
354 0x74, 0x7C, 0x81, 0x85, 0x85, 0x8E, 0x88, 0x87,
355 0x88, 0x87, 0x88, 0x8E, 0x89, 0x8A, 0x8A, 0x8B,
356 0x86, 0x83, 0x84, 0x87, 0x86, 0x83, 0x80, 0x7F,
357 0x7F, 0x81, 0x80, 0x7F, 0x7F, 0x7E, 0x7E, 0x7F,
358 0x80, 0x7D, 0x7C, 0x7C, 0x78, 0x84, 0xAD, 0xC3,
359 0xCC, 0xD2, 0xD4, 0xD6, 0xD6, 0xCF, 0xB9, 0x87,
360 0x54, 0x47, 0x51, 0x4D, 0x56, 0x53, 0x54, 0x59,
361 0x57, 0x5B, 0x5E, 0x5B, 0x5E, 0x61, 0x5A, 0x5E,
362 0x5A, 0x63, 0x5D, 0x5D, 0x5F, 0x5E, 0x62, 0x5F,
363 0x62, 0x65, 0x63, 0x68, 0x6A, 0x63, 0x4D, 0x33,
364 0x17, 0x12, 0x1B, 0x11, 0x16, 0x18, 0x14, 0x16,
365 0x84, 0x83, 0x82, 0x7F, 0x83, 0x81, 0x82, 0x86,
366 0x86, 0x85, 0x80, 0x83, 0x7E, 0x80, 0x85, 0x86,
367 0x8C, 0x90, 0x8F, 0x8E, 0x93, 0x8C, 0x8C, 0x8B,
368 0x88, 0x88, 0x84, 0x7C, 0x74, 0x68, 0x62, 0x5B,
369 0x45, 0x3F, 0x38, 0x3A, 0x3F, 0x42, 0x41, 0x45,
370 0x4D, 0x46, 0x49, 0x48, 0x44, 0x47, 0x45, 0x43,
371 0x47, 0x46, 0x45, 0x45, 0x4B, 0x51, 0x50, 0x52,
372 0x57, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x57, 0x5E,
373 0x5B, 0x5E, 0x5E, 0x60, 0x61, 0x60, 0x63, 0x61,
374 0x5E, 0x63, 0x61, 0x63, 0x62, 0x63, 0x63, 0x62,
375 0x61, 0x61, 0x63, 0x64, 0x60, 0x60, 0x64, 0x61,
376 0x63, 0x61, 0x63, 0x61, 0x61, 0x61, 0x63, 0x62,
377 0x64, 0x60, 0x61, 0x64, 0x60, 0x61, 0x61, 0x62,
378 0x63, 0x60, 0x61, 0x62, 0x65, 0x5F, 0x66, 0x63,
379 0x61, 0x63, 0x65, 0x62, 0x5E, 0x5E, 0x5F, 0x62,
380 0x65, 0x66, 0x67, 0x67, 0x6D, 0x64, 0x62, 0x63,
381 0x65, 0x61, 0x62, 0x62, 0x69, 0x61, 0x64, 0x5C,
382 0x5F, 0x61, 0x61, 0x60, 0x61, 0x5C, 0x5B, 0x5E,
383 0x60, 0x5F, 0x60, 0x60, 0x60, 0x5B, 0x5E, 0x5E,
384 0x60, 0x5C, 0x5D, 0x5C, 0x60, 0x57, 0x53, 0x53,
385 0x4E, 0x4D, 0x49, 0x44, 0x4C, 0x55, 0x61, 0x6C,
386 0x74, 0x7B, 0x80, 0x84, 0x86, 0x8B, 0x89, 0x89,
387 0x89, 0x87, 0x87, 0x8D, 0x89, 0x8C, 0x89, 0x8A,
388 0x89, 0x83, 0x83, 0x83, 0x85, 0x86, 0x7F, 0x81,
389 0x80, 0x82, 0x7E, 0x7F, 0x7D, 0x80, 0x7F, 0x81,
390 0x7F, 0x7C, 0x7D, 0x7B, 0x7B, 0x76, 0x95, 0xBA,
391 0xC7, 0xD0, 0xD2, 0xD5, 0xD7, 0xD4, 0xC8, 0xAA,
392 0x70, 0x48, 0x4F, 0x4D, 0x54, 0x52, 0x55, 0x58,
393 0x56, 0x59, 0x5A, 0x5C, 0x5F, 0x5E, 0x59, 0x5D,
394 0x5A, 0x5D, 0x5D, 0x62, 0x63, 0x61, 0x61, 0x62,
395 0x63, 0x66, 0x68, 0x6D, 0x65, 0x4A, 0x31, 0x1C,
396 0x12, 0x1B, 0x22, 0x16, 0x1B, 0x16, 0x16, 0x18,
397 0x84, 0x83, 0x7E, 0x82, 0x83, 0x81, 0x82, 0x85,
398 0x87, 0x84, 0x83, 0x84, 0x7D, 0x80, 0x83, 0x88,
399 0x8E, 0x90, 0x90, 0x8C, 0x8F, 0x8D, 0x8C, 0x88,
400 0x85, 0x86, 0x83, 0x7C, 0x78, 0x6A, 0x63, 0x5A,
401 0x43, 0x3A, 0x39, 0x3D, 0x3F, 0x3E, 0x42, 0x43,
402 0x57, 0x45, 0x48, 0x44, 0x43, 0x4B, 0x43, 0x44,
403 0x48, 0x46, 0x46, 0x46, 0x4C, 0x52, 0x4D, 0x52,
404 0x56, 0x59, 0x55, 0x58, 0x57, 0x5A, 0x5B, 0x5B,
405 0x5D, 0x5C, 0x5D, 0x60, 0x63, 0x62, 0x60, 0x61,
406 0x60, 0x5F, 0x62, 0x63, 0x5F, 0x60, 0x62, 0x62,
407 0x61, 0x61, 0x63, 0x64, 0x61, 0x60, 0x64, 0x63,
408 0x62, 0x60, 0x64, 0x63, 0x60, 0x5F, 0x63, 0x62,
409 0x61, 0x64, 0x5E, 0x61, 0x60, 0x60, 0x5E, 0x62,
410 0x60, 0x5F, 0x60, 0x60, 0x61, 0x5F, 0x61, 0x61,
411 0x61, 0x61, 0x61, 0x61, 0x5D, 0x60, 0x5E, 0x5F,
412 0x63, 0x62, 0x66, 0x66, 0x69, 0x64, 0x61, 0x62,
413 0x64, 0x62, 0x63, 0x61, 0x65, 0x61, 0x60, 0x5F,
414 0x5E, 0x63, 0x5E, 0x5D, 0x5D, 0x5D, 0x5B, 0x60,
415 0x5F, 0x5F, 0x5D, 0x5F, 0x5B, 0x5B, 0x5F, 0x5E,
416 0x5D, 0x5A, 0x5C, 0x5B, 0x5C, 0x58, 0x52, 0x51,
417 0x4E, 0x51, 0x4A, 0x47, 0x4D, 0x51, 0x5E, 0x69,
418 0x74, 0x7B, 0x7E, 0x82, 0x86, 0x89, 0x8B, 0x89,
419 0x88, 0x8A, 0x86, 0x88, 0x88, 0x8C, 0x88, 0x89,
420 0x89, 0x88, 0x85, 0x7F, 0x83, 0x84, 0x80, 0x80,
421 0x80, 0x81, 0x7C, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E,
422 0x7E, 0x7B, 0x7D, 0x7C, 0x78, 0x74, 0x7F, 0xA8,
423 0xC1, 0xCB, 0xD1, 0xD4, 0xD6, 0xD6, 0xD2, 0xC1,
424 0x94, 0x57, 0x49, 0x4C, 0x52, 0x53, 0x57, 0x5A,
425 0x57, 0x59, 0x53, 0x5A, 0x5E, 0x5C, 0x5A, 0x5A,
426 0x5A, 0x57, 0x60, 0x63, 0x65, 0x64, 0x63, 0x64,
427 0x66, 0x69, 0x6A, 0x67, 0x4E, 0x30, 0x1C, 0x12,
428 0x15, 0x19, 0x1F, 0x1A, 0x1A, 0x16, 0x1A, 0x1B,
429 0x81, 0x81, 0x7D, 0x83, 0x85, 0x81, 0x84, 0x84,
430 0x86, 0x83, 0x84, 0x83, 0x7E, 0x84, 0x86, 0x8B,
431 0x8F, 0x8F, 0x94, 0x8D, 0x8D, 0x8B, 0x8C, 0x85,
432 0x85, 0x85, 0x84, 0x7D, 0x79, 0x6B, 0x5C, 0x4F,
433 0x3F, 0x36, 0x36, 0x3A, 0x3E, 0x3B, 0x43, 0x44,
434 0x4E, 0x45, 0x47, 0x42, 0x45, 0x4B, 0x44, 0x44,
435 0x48, 0x44, 0x46, 0x4A, 0x4B, 0x4F, 0x4D, 0x50,
436 0x56, 0x5A, 0x57, 0x59, 0x56, 0x58, 0x5E, 0x5C,
437 0x5F, 0x5F, 0x5C, 0x5F, 0x5D, 0x65, 0x5D, 0x62,
438 0x5F, 0x5C, 0x61, 0x60, 0x5F, 0x5E, 0x61, 0x62,
439 0x61, 0x61, 0x63, 0x60, 0x5F, 0x61, 0x63, 0x63,
440 0x61, 0x61, 0x64, 0x62, 0x60, 0x61, 0x66, 0x63,
441 0x62, 0x64, 0x5E, 0x61, 0x60, 0x5F, 0x5C, 0x5F,
442 0x5C, 0x60, 0x5E, 0x5D, 0x5E, 0x5E, 0x5B, 0x5F,
443 0x60, 0x5D, 0x5E, 0x60, 0x5E, 0x60, 0x5B, 0x5E,
444 0x61, 0x60, 0x63, 0x64, 0x64, 0x65, 0x63, 0x61,
445 0x63, 0x61, 0x64, 0x64, 0x60, 0x62, 0x5C, 0x5F,
446 0x5D, 0x63, 0x5E, 0x5C, 0x5D, 0x5D, 0x5B, 0x5F,
447 0x5E, 0x60, 0x5D, 0x5D, 0x5B, 0x5D, 0x5E, 0x5E,
448 0x5C, 0x5B, 0x5D, 0x59, 0x5A, 0x58, 0x52, 0x4D,
449 0x4F, 0x4F, 0x4A, 0x4B, 0x50, 0x54, 0x5C, 0x66,
450 0x71, 0x79, 0x7C, 0x83, 0x85, 0x89, 0x8B, 0x8A,
451 0x87, 0x8D, 0x86, 0x84, 0x87, 0x89, 0x88, 0x88,
452 0x87, 0x89, 0x86, 0x81, 0x83, 0x84, 0x82, 0x80,
453 0x82, 0x80, 0x7C, 0x7D, 0x7F, 0x7D, 0x7D, 0x7C,
454 0x7F, 0x7C, 0x7C, 0x7D, 0x78, 0x75, 0x75, 0x91,
455 0xB7, 0xC7, 0xCF, 0xD4, 0xD5, 0xD6, 0xD7, 0xCE,
456 0xB2, 0x7C, 0x4A, 0x4A, 0x4F, 0x53, 0x58, 0x5B,
457 0x5B, 0x5C, 0x57, 0x59, 0x5E, 0x5C, 0x5A, 0x58,
458 0x59, 0x5B, 0x5E, 0x60, 0x61, 0x62, 0x63, 0x64,
459 0x69, 0x6B, 0x63, 0x50, 0x2B, 0x27, 0x19, 0x11,
460 0x13, 0x15, 0x15, 0x17, 0x14, 0x18, 0x1E, 0x1A,
461 0x7F, 0x7F, 0x81, 0x82, 0x84, 0x82, 0x85, 0x83,
462 0x83, 0x83, 0x85, 0x82, 0x81, 0x89, 0x8A, 0x8D,
463 0x8F, 0x90, 0x92, 0x8E, 0x8A, 0x87, 0x89, 0x85,
464 0x87, 0x87, 0x85, 0x7D, 0x78, 0x6C, 0x58, 0x4B,
465 0x3B, 0x33, 0x30, 0x36, 0x3E, 0x3D, 0x43, 0x46,
466 0x43, 0x46, 0x46, 0x45, 0x48, 0x47, 0x46, 0x44,
467 0x49, 0x42, 0x46, 0x4A, 0x4B, 0x4B, 0x4F, 0x4F,
468 0x56, 0x5B, 0x57, 0x58, 0x57, 0x5A, 0x5B, 0x5E,
469 0x5F, 0x61, 0x5C, 0x5E, 0x5D, 0x61, 0x5E, 0x62,
470 0x5D, 0x5E, 0x5F, 0x5E, 0x61, 0x61, 0x60, 0x62,
471 0x61, 0x61, 0x60, 0x5F, 0x5D, 0x60, 0x5F, 0x61,
472 0x61, 0x60, 0x62, 0x5E, 0x60, 0x64, 0x65, 0x63,
473 0x66, 0x65, 0x65, 0x60, 0x5F, 0x5C, 0x59, 0x5B,
474 0x5B, 0x5D, 0x59, 0x5C, 0x5B, 0x5D, 0x5E, 0x5F,
475 0x5F, 0x5A, 0x5C, 0x5E, 0x5E, 0x5F, 0x5A, 0x60,
476 0x5D, 0x5F, 0x5F, 0x63, 0x62, 0x64, 0x63, 0x61,
477 0x61, 0x63, 0x64, 0x66, 0x60, 0x61, 0x5E, 0x5D,
478 0x5D, 0x5F, 0x5E, 0x5D, 0x60, 0x5C, 0x5D, 0x5F,
479 0x5D, 0x5E, 0x5E, 0x5D, 0x5C, 0x60, 0x5E, 0x5D,
480 0x5D, 0x5B, 0x5C, 0x59, 0x5C, 0x5B, 0x53, 0x4E,
481 0x50, 0x4A, 0x48, 0x4B, 0x50, 0x56, 0x5C, 0x63,
482 0x6E, 0x74, 0x7E, 0x83, 0x84, 0x88, 0x8B, 0x89,
483 0x89, 0x8B, 0x85, 0x85, 0x87, 0x86, 0x88, 0x85,
484 0x86, 0x87, 0x86, 0x85, 0x82, 0x84, 0x82, 0x81,
485 0x83, 0x80, 0x7F, 0x7E, 0x7D, 0x7F, 0x7F, 0x7C,
486 0x7F, 0x7C, 0x7E, 0x7D, 0x7A, 0x78, 0x75, 0x7C,
487 0xA4, 0xC2, 0xCC, 0xD3, 0xD4, 0xD7, 0xD9, 0xD5,
488 0xC7, 0xA2, 0x60, 0x46, 0x4E, 0x50, 0x54, 0x57,
489 0x5C, 0x5E, 0x5D, 0x5A, 0x5D, 0x5A, 0x5A, 0x59,
490 0x59, 0x5E, 0x5E, 0x5D, 0x5E, 0x61, 0x63, 0x67,
491 0x69, 0x64, 0x4C, 0x2D, 0x12, 0x1C, 0x1B, 0x10,
492 0x0E, 0x14, 0x11, 0x13, 0x12, 0x1B, 0x1D, 0x1A,
493 0x82, 0x81, 0x85, 0x82, 0x83, 0x82, 0x85, 0x85,
494 0x84, 0x84, 0x87, 0x85, 0x84, 0x8C, 0x8C, 0x90,
495 0x91, 0x91, 0x8E, 0x8E, 0x87, 0x84, 0x85, 0x85,
496 0x86, 0x89, 0x86, 0x7F, 0x76, 0x69, 0x59, 0x4D,
497 0x3A, 0x35, 0x31, 0x36, 0x3F, 0x40, 0x42, 0x45,
498 0x45, 0x46, 0x49, 0x44, 0x49, 0x47, 0x48, 0x44,
499 0x47, 0x43, 0x46, 0x49, 0x4B, 0x4B, 0x50, 0x52,
500 0x54, 0x5A, 0x58, 0x58, 0x59, 0x5E, 0x5B, 0x5C,
501 0x5F, 0x5E, 0x5B, 0x5D, 0x62, 0x5F, 0x5F, 0x5F,
502 0x5D, 0x5E, 0x60, 0x5F, 0x63, 0x63, 0x5E, 0x62,
503 0x61, 0x60, 0x5E, 0x61, 0x60, 0x60, 0x5E, 0x62,
504 0x62, 0x5F, 0x5F, 0x5C, 0x60, 0x61, 0x60, 0x65,
505 0x67, 0x68, 0x68, 0x61, 0x5F, 0x5A, 0x58, 0x5A,
506 0x5A, 0x58, 0x57, 0x59, 0x5A, 0x5D, 0x5F, 0x60,
507 0x5D, 0x5C, 0x5C, 0x5C, 0x5B, 0x5D, 0x5C, 0x5F,
508 0x5E, 0x5F, 0x60, 0x60, 0x61, 0x62, 0x63, 0x65,
509 0x62, 0x64, 0x64, 0x64, 0x61, 0x60, 0x60, 0x5C,
510 0x5E, 0x5F, 0x5E, 0x60, 0x5E, 0x5D, 0x5C, 0x5E,
511 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x61, 0x5F, 0x5C,
512 0x5F, 0x5C, 0x5B, 0x5B, 0x57, 0x59, 0x56, 0x52,
513 0x50, 0x4C, 0x49, 0x4B, 0x4E, 0x55, 0x5E, 0x65,
514 0x6D, 0x73, 0x7F, 0x81, 0x85, 0x85, 0x8A, 0x89,
515 0x8A, 0x88, 0x86, 0x86, 0x88, 0x84, 0x89, 0x83,
516 0x88, 0x84, 0x84, 0x84, 0x82, 0x82, 0x82, 0x81,
517 0x83, 0x80, 0x80, 0x7F, 0x7F, 0x85, 0x80, 0x7E,
518 0x7D, 0x7D, 0x7E, 0x7D, 0x79, 0x79, 0x77, 0x73,
519 0x8B, 0xB6, 0xC7, 0xD0, 0xD3, 0xD5, 0xD8, 0xD8,
520 0xD2, 0xBC, 0x86, 0x4A, 0x48, 0x50, 0x52, 0x56,
521 0x58, 0x5A, 0x58, 0x5C, 0x5C, 0x59, 0x5B, 0x5B,
522 0x5A, 0x5E, 0x5E, 0x5E, 0x5F, 0x64, 0x66, 0x69,
523 0x62, 0x49, 0x27, 0x13, 0x0D, 0x14, 0x18, 0x10,
524 0x12, 0x12, 0x12, 0x14, 0x14, 0x1C, 0x19, 0x21,
525 0x82, 0x83, 0x86, 0x83, 0x83, 0x84, 0x84, 0x86,
526 0x86, 0x85, 0x85, 0x89, 0x8A, 0x8F, 0x8F, 0x91,
527 0x92, 0x8F, 0x8E, 0x8D, 0x86, 0x85, 0x84, 0x84,
528 0x85, 0x8A, 0x88, 0x83, 0x76, 0x69, 0x5E, 0x4E,
529 0x3D, 0x39, 0x34, 0x38, 0x3F, 0x40, 0x42, 0x45,
530 0x48, 0x47, 0x4C, 0x45, 0x4B, 0x49, 0x46, 0x44,
531 0x46, 0x43, 0x45, 0x48, 0x4A, 0x4A, 0x4F, 0x51,
532 0x53, 0x55, 0x59, 0x59, 0x5A, 0x5D, 0x5B, 0x59,
533 0x5F, 0x5C, 0x5D, 0x5C, 0x61, 0x61, 0x5F, 0x5D,
534 0x5D, 0x5B, 0x5F, 0x60, 0x61, 0x62, 0x5E, 0x60,
535 0x60, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x61,
536 0x61, 0x5F, 0x60, 0x5E, 0x61, 0x5C, 0x60, 0x65,
537 0x65, 0x64, 0x65, 0x62, 0x60, 0x5F, 0x5B, 0x58,
538 0x59, 0x55, 0x59, 0x57, 0x5B, 0x5A, 0x5C, 0x5F,
539 0x5E, 0x5C, 0x5C, 0x5D, 0x5D, 0x5A, 0x5C, 0x5D,
540 0x5E, 0x5F, 0x64, 0x5E, 0x60, 0x62, 0x61, 0x65,
541 0x67, 0x62, 0x64, 0x60, 0x60, 0x5D, 0x5F, 0x5E,
542 0x60, 0x61, 0x60, 0x60, 0x61, 0x5E, 0x58, 0x5E,
543 0x5C, 0x5A, 0x5D, 0x5B, 0x5B, 0x60, 0x5E, 0x5F,
544 0x5F, 0x61, 0x5A, 0x59, 0x55, 0x55, 0x57, 0x54,
545 0x4F, 0x4D, 0x4B, 0x4A, 0x4A, 0x55, 0x5F, 0x66,
546 0x6A, 0x74, 0x7B, 0x7D, 0x84, 0x84, 0x86, 0x89,
547 0x88, 0x87, 0x86, 0x84, 0x88, 0x82, 0x88, 0x84,
548 0x88, 0x84, 0x83, 0x83, 0x83, 0x82, 0x81, 0x81,
549 0x84, 0x81, 0x7F, 0x7F, 0x82, 0x88, 0x81, 0x83,
550 0x7D, 0x7F, 0x7D, 0x7D, 0x7A, 0x7A, 0x77, 0x72,
551 0x79, 0x9D, 0xBB, 0xCA, 0xD0, 0xD4, 0xD7, 0xD8,
552 0xD8, 0xCD, 0xAE, 0x6D, 0x49, 0x50, 0x50, 0x57,
553 0x55, 0x58, 0x54, 0x5B, 0x59, 0x5B, 0x5C, 0x5C,
554 0x5E, 0x5D, 0x5C, 0x61, 0x62, 0x66, 0x67, 0x65,
555 0x51, 0x27, 0x10, 0x0D, 0x15, 0x14, 0x15, 0x10,
556 0x16, 0x13, 0x15, 0x17, 0x17, 0x18, 0x19, 0x23
557};
558
559
560
561/*
562 Macro definitions
563*/
564
565#define abs(x) (x>=0 ? x : -(x))
566#define FILTER 0
567#define EXPAND 1
568#define IS ==
569#define ISNT !=
570#define AND &&
571#define OR ||
572
573#define NUM_LEVELS 4
574
575
576/*
577 Forward declaration of functions
578*/
579
580void epic_init( void );
581void epic_build_pyr( float *image, int x_size, int y_size, int num_levels,
582 float *lo_filter, float *hi_filter, int filter_size );
583void epic_build_level( float *image, int level_x_size, int level_y_size,
584 float *lo_filter, float *hi_filter,
585 int filter_size, float *result_block );
586void epic_internal_transpose( float *mat, int rows, int cols );
587void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt,
588 float *temp, int x_fdim, int y_fdim,
589 int xgrid_start, int xgrid_step, int ygrid_start,
590 int ygrid_step, float *result );
591void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos,
592 float *result, int f_or_e );
593void epic_main( void );
594//int main( void );
595
596
597/*
598 Declaration of global variables
599*/
600
601float epic_filtertemp[FILTER_SIZE];
602float epic_hi_imagetemp[X_SIZE * Y_SIZE / 2];
603float epic_lo_imagetemp[X_SIZE * Y_SIZE / 2];
604
605static float epic_lo_filter[FILTER_SIZE] = {
606 -0.0012475221, -0.0024950907, 0.0087309530, 0.0199579580,
607 -0.0505290000, -0.1205509700, 0.2930455800,
608 0.7061761600,
609 0.2930455800, -0.1205509700, -0.0505290000,
610 0.0199579580, 0.0087309530, -0.0024950907, -0.0012475221
611};
612
613static float epic_hi_filter[FILTER_SIZE] = {
614 0.0012475221, -0.0024950907, -0.0087309530, 0.0199579580,
615 0.0505290000, -0.1205509700, -0.2930455800,
616 0.7061761600,
617 -0.2930455800, -0.1205509700, 0.0505290000,
618 0.0199579580, -0.0087309530, -0.0024950907, 0.0012475221
619};
620
621
622/*
623 Initialization function
624*/
625
626void epic_init( void )
627{
628 int i;
629
630 _Pragma( "loopbound min 4096 max 9801" )
631 for ( i = 0; i < X_SIZE * Y_SIZE; ++i )
632 epic_image[i] *= SCALE_FACTOR;
633}
634
635
636/*
637 Algorithm core functions
638*/
639
640/*
641 ======================================================================
642 epic_build_pyr() -- builds a separable QMF-style pyramid. The pyramid
643 is written over the original image. NOTE: the image size must be
644 divisible by 2^num_levels, but we do not check this here.
645 ======================================================================
646*/
647void epic_build_pyr( float *image, int x_size, int y_size, int num_levels,
648 float *lo_filter, float *hi_filter, int filter_size )
649{
650 int x_level, y_level, level;
651
652 x_level = x_size;
653 y_level = y_size;
654
655 _Pragma( "loopbound min 4 max 4" )
656 for ( level = 0; level < num_levels; ++level ){
657 epic_build_level( image, x_level, y_level, lo_filter, hi_filter,
658 filter_size, image );
659 x_level /= 2;
660 y_level /= 2;
661 }
662}
663
664
665/*
666 ======================================================================
667 epic_build_level() -- builds a level of the pyramid by computing 4
668 filtered and subsampled images. Since the convolution is separable,
669 image and result-block can point to the same place! Image order is
670 lowpass, horizontal, vertical (transposed), and diagonal.
671 ======================================================================
672*/
673void epic_build_level( float *image, int level_x_size, int level_y_size,
674 float *lo_filter, float *hi_filter,
675 int filter_size, float *result_block )
676{
677 int total_size = level_x_size * level_y_size;
678
679 /* filter and subsample in the X direction */
680 epic_internal_filter ( image, level_x_size, level_y_size,
681 lo_filter, epic_filtertemp, filter_size, 1,
682 0, 2, 0, 1, epic_lo_imagetemp );
683 epic_internal_filter ( image, level_x_size, level_y_size,
684 hi_filter, epic_filtertemp, filter_size, 1,
685 1, 2, 0, 1, epic_hi_imagetemp );
686
687 level_x_size /= 2;
688 /* now filter and subsample in the Y direction */
689 epic_internal_filter ( epic_lo_imagetemp, level_x_size,
690 level_y_size, /* lowpass */
691 lo_filter, epic_filtertemp, 1, filter_size,
692 0, 1, 0, 2, result_block );
693 epic_internal_filter ( epic_lo_imagetemp, level_x_size,
694 level_y_size, /* horizontal */
695 hi_filter, epic_filtertemp, 1, filter_size,
696 0, 1, 1, 2, ( result_block += ( total_size / 4 ) ) );
697 epic_internal_filter ( epic_hi_imagetemp, level_x_size,
698 level_y_size, /* vertical */
699 lo_filter, epic_filtertemp, 1, filter_size,
700 0, 1, 0, 2, ( result_block += ( total_size / 4 ) ) );
701 /* transpose the vertical band for more efficient scanning */
702 epic_internal_transpose( result_block, level_y_size / 2, level_x_size );
703 epic_internal_filter ( epic_hi_imagetemp, level_x_size,
704 level_y_size, /* diagonal */
705 hi_filter, epic_filtertemp, 1, filter_size,
706 0, 1, 1, 2, ( result_block += ( total_size / 4 ) ) );
707}
708
709
710/*
711 ======================================================================
712 In-place matrix tranpose algorithm. Handles non-square matrices,
713 too! Is there a faster algorithm??
714 ======================================================================
715*/
716void epic_internal_transpose( float *mat, int rows, int cols )
717{
718 register int swap_pos;
719 register int modulus = rows * cols - 1;
720 register int current_pos;
721 register float swap_val;
722
723 /* loop, ignoring first and last elements */
724 _Pragma( "loopbound min 1022 max 2399" )
725 for ( current_pos = 1; current_pos < modulus; ++current_pos ) {
726 /* Compute swap position */
727 swap_pos = current_pos;
728
729 _Pragma( "loopbound min 1 max 2" )
730 do {
731 swap_pos = ( swap_pos * cols ) % modulus;
732 } while ( swap_pos < current_pos );
733
734 if ( current_pos != swap_pos ) {
735 swap_val = mat[swap_pos];
736 mat[swap_pos] = mat[current_pos];
737 mat[current_pos] = swap_val;
738 }
739 }
740}
741
742
743/* --------------------------------------------------------------------
744 Correlate FILT with IMAGE, subsampling according to GRID parameters,
745 with values placed into result array. TEMP is a temporary
746 array the size of the filter. EDGES is a string -- see convolve.h.
747 The convolution is done in 9 sections, where the border sections use
748 specially computed edge-handling filters (see edges.c). The origin
749 of the filter is assumed to be (floor(x_fdim/2), floor(y_fdim/2)).
750 10/6/89 - approximately optimized the choice of register vars on SPARCS.
751 ------------------------------------------------------------------------ */
752void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt,
753 float *temp, int x_fdim, int y_fdim,
754 int xgrid_start, int xgrid_step, int ygrid_start,
755 int ygrid_step, float *result )
756{
757 //register double sum;
758 register float sum;
759 register int x_filt, im_pos, y_filt_lin;
760 register int y_im_lin, x_pos, filt_size = x_fdim * y_fdim;
761 register int y_pos, res_pos;
762 register int last_ctr_col = x_dim - x_fdim;
763 int last_ctr_row = ( y_dim - y_fdim ) * x_dim;
764 int first_row, first_col ;
765 int x_fmid = x_fdim / 2;
766 int y_fmid = y_fdim / 2;
767 int x_stop = x_fdim - x_fmid + 1;
768 int y_stop = y_fdim - y_fmid + 1;
769 int ygrid_step_full = ygrid_step * x_dim;
770 int prev_res_pos, x_res_dim = ( x_dim - xgrid_start + xgrid_step - 1 ) /
771 xgrid_step;
772 int rt_edge_res_pos = x_res_dim;
773
774 res_pos = 0;
775 first_col = xgrid_start - x_fmid + xgrid_step;
776
777 _Pragma( "loopbound min 1 max 4" )
778 for ( y_pos = ygrid_start - y_fmid - 1; y_pos < 0; y_pos += ygrid_step ) {
779 _Pragma( "loopbound min 1 max 4" )
780 for ( x_pos = xgrid_start - x_fmid; /* top-left corner */
781 x_pos < 0;
782 x_pos += xgrid_step ) {
783 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
784 sum = 0.0f;
785 x_filt = y_im_lin = 0;
786 _Pragma( "loopbound min 1 max 15" )
787 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
788 y_filt_lin += x_fdim ) {
789 im_pos = y_im_lin;
790
791 _Pragma( "loopbound min 1 max 15" )
792 for ( ; x_filt < y_filt_lin; ++x_filt ) {
793 sum += image[im_pos] * temp[x_filt];
794 ++im_pos;
795 }
796 y_im_lin += x_dim;
797 }
798 result[res_pos] = sum;
799 ++res_pos;
800 }
801 first_col = x_pos + 1;
802 epic_reflect1( filt, x_fdim, y_fdim, 0, y_pos, temp, FILTER );
803 _Pragma( "loopbound min 41 max 46" )
804 for ( x_pos = first_col; /* top edge */
805 x_pos < last_ctr_col;
806 x_pos += xgrid_step ) {
807 sum = 0.0f;
808 x_filt = y_im_lin = 0;
809 _Pragma( "loopbound min 1 max 15" )
810 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
811 y_filt_lin += x_fdim ) {
812 im_pos = x_pos + y_im_lin;
813 _Pragma( "loopbound min 1 max 15" )
814 for ( ; x_filt < y_filt_lin; ++x_filt ) {
815 sum += image[im_pos] * temp[x_filt];
816 ++im_pos;
817 }
818 y_im_lin += x_dim;
819 }
820 result[res_pos] = sum;
821 ++res_pos;
822 }
823 rt_edge_res_pos = res_pos + x_res_dim; /* save this for later ... */
824 _Pragma( "loopbound min 1 max 4" )
825 for ( x_pos += ( 1 - last_ctr_col ); /* top-right corner */
826 x_pos < x_stop;
827 x_pos += xgrid_step ) {
828 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
829 sum = 0.0f;
830 x_filt = y_im_lin = 0;
831 _Pragma( "loopbound min 1 max 15" )
832 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
833 y_filt_lin += x_fdim ) {
834 im_pos = y_im_lin + last_ctr_col;
835
836 _Pragma( "loopbound min 1 max 15" )
837 for ( ; x_filt < y_filt_lin; ++x_filt ) {
838 sum += image[im_pos] * temp[x_filt];
839 ++im_pos;
840 }
841 y_im_lin += x_dim;
842 }
843 result[res_pos] = sum;
844 ++res_pos;
845 }
846 } /* end top */
847
848 first_row = x_dim * ( y_pos + 1 ); /* need this to go down the sides */
849 prev_res_pos = res_pos;
850 _Pragma( "loopbound min 1 max 4" )
851 for ( x_pos = xgrid_start - x_fmid; /* left edge */
852 x_pos < 1;
853 x_pos += xgrid_step ) {
854 res_pos = prev_res_pos;
855 epic_reflect1( filt, x_fdim, y_fdim, x_pos, 0, temp, FILTER );
856 _Pragma( "loopbound min 41 max 97" )
857 for ( y_pos = first_row; y_pos < last_ctr_row;
858 y_pos += ygrid_step_full ) {
859 sum = 0.0f;
860 x_filt = 0, y_im_lin = y_pos;
861 _Pragma( "loopbound min 1 max 15" )
862 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
863 y_filt_lin += x_fdim ) {
864 im_pos = y_im_lin;
865 _Pragma( "loopbound min 1 max 15" )
866 for ( ; x_filt < y_filt_lin; x_filt++ ) {
867 sum += image[im_pos] * temp[x_filt];
868 ++im_pos;
869 }
870 y_im_lin += x_dim;
871 }
872 result[res_pos] = sum;
873 res_pos += x_res_dim;
874 }
875 prev_res_pos++;
876 }
877 epic_reflect1( filt, x_fdim, y_fdim, 0, 0, temp, FILTER );
878 _Pragma( "loopbound min 41 max 97" )
879 for ( y_pos = first_row; /* center region of image */
880 y_pos < last_ctr_row;
881 y_pos += ygrid_step_full ) {
882 res_pos = prev_res_pos;
883 _Pragma( "loopbound min 41 max 46" )
884 for ( x_pos = first_col;
885 x_pos < last_ctr_col;
886 x_pos += xgrid_step ) {
887 sum = 0.0f;
888 x_filt = 0, y_im_lin = y_pos;
889 _Pragma( "loopbound min 1 max 15" )
890 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
891 y_filt_lin += x_fdim ) {
892 im_pos = x_pos + y_im_lin;
893 _Pragma( "loopbound min 1 max 15" )
894 for ( ; x_filt < y_filt_lin; ++x_filt ) {
895 sum += image[im_pos] * temp[x_filt];
896 ++im_pos;
897 }
898 y_im_lin += x_dim;
899 }
900 result[res_pos] = sum;
901 ++res_pos;
902 }
903 prev_res_pos += x_res_dim;
904 }
905 prev_res_pos = rt_edge_res_pos;
906 _Pragma( "loopbound min 1 max 4" )
907 for ( x_pos += ( 1 - last_ctr_col ); /* right edge */
908 x_pos < x_stop;
909 x_pos += xgrid_step ) {
910 res_pos = prev_res_pos;
911 epic_reflect1( filt, x_fdim, y_fdim, x_pos, 0, temp, FILTER );
912 _Pragma( "loopbound min 41 max 97" )
913 for ( y_pos = first_row; y_pos < last_ctr_row;
914 y_pos += ygrid_step_full ) {
915 sum = 0.0f;
916 x_filt = 0, y_im_lin = y_pos;
917 _Pragma( "loopbound min 1 max 15" )
918 for ( y_filt_lin = x_fdim;
919 y_filt_lin <= filt_size;
920 y_filt_lin += x_fdim ) {
921 _Pragma( "loopbound min 1 max 15" )
922 for ( im_pos = y_im_lin + last_ctr_col;
923 x_filt < y_filt_lin;
924 ++x_filt ) {
925 sum += image[im_pos] * temp[x_filt];
926 ++im_pos;
927 }
928 y_im_lin += x_dim;
929 }
930 result[res_pos] = sum;
931 res_pos += x_res_dim;
932 }
933 prev_res_pos++;
934 } /* end mid */
935
936 res_pos -= ( x_res_dim - 1 ); /* go to lower left corner */
937 _Pragma( "loopbound min 1 max 4" )
938 for ( y_pos = ( ( y_pos - last_ctr_row ) / x_dim ) + 1; /* bottom */
939 y_pos < y_stop;
940 y_pos += ygrid_step ) {
941 _Pragma( "loopbound min 1 max 4" )
942 for ( x_pos = xgrid_start - x_fmid; /* bottom-left corner */
943 x_pos < 1;
944 x_pos += xgrid_step ) {
945 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
946 sum = 0.0f;
947 x_filt = 0, y_im_lin = last_ctr_row;
948 _Pragma( "loopbound min 1 max 15" )
949 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
950 y_filt_lin += x_fdim ) {
951 _Pragma( "loopbound min 1 max 15" )
952 for ( im_pos = y_im_lin;
953 x_filt < y_filt_lin;
954 ++x_filt ) {
955 sum += image[im_pos] * temp[x_filt];
956 ++im_pos;
957 }
958 y_im_lin += x_dim;
959 }
960 result[res_pos] = sum;
961 ++res_pos;
962 }
963 epic_reflect1( filt, x_fdim, y_fdim, 0, y_pos, temp, FILTER );
964 _Pragma( "loopbound min 41 max 46" )
965 for ( x_pos = first_col; /* bottom edge */
966 x_pos < last_ctr_col;
967 x_pos += xgrid_step ) {
968 sum = 0.0f;
969 x_filt = 0, y_im_lin = last_ctr_row;
970 _Pragma( "loopbound min 1 max 15" )
971 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
972 y_filt_lin += x_fdim ) {
973 _Pragma( "loopbound min 1 max 15" )
974 for ( im_pos = x_pos + y_im_lin;
975 x_filt < y_filt_lin;
976 ++x_filt ) {
977 sum += image[im_pos] * temp[x_filt];
978 ++im_pos;
979 }
980 y_im_lin += x_dim;
981 }
982 result[res_pos] = sum;
983 ++res_pos;
984 }
985 _Pragma( "loopbound min 1 max 4" )
986 for ( x_pos += 1 - last_ctr_col; /* bottom-right corner */
987 x_pos < x_stop;
988 x_pos += xgrid_step ) {
989 epic_reflect1( filt, x_fdim, y_fdim, x_pos, y_pos, temp, FILTER );
990 sum = 0.0f;
991 x_filt = 0, y_im_lin = last_ctr_row;
992 _Pragma( "loopbound min 1 max 15" )
993 for ( y_filt_lin = x_fdim; y_filt_lin <= filt_size;
994 y_filt_lin += x_fdim ) {
995 _Pragma( "loopbound min 1 max 15" )
996 for ( im_pos = y_im_lin + last_ctr_col;
997 x_filt < y_filt_lin;
998 ++x_filt ) {
999 sum += image[im_pos] * temp[x_filt];
1000 ++im_pos;
1001 }
1002 y_im_lin += x_dim;
1003 }
1004 result[res_pos] = sum;
1005 ++res_pos;
1006 }
1007 } /* end bottom */
1008
1009} /* end of epic_internal_filter */
1010
1011
1012/*
1013 The following function determine how edges are to be handled
1014 when performing convolutions of images with linear filters.
1015 Any edge handling function which is local and linear may be defined,
1016 except (unfortunately) constants cannot be added. So to treat the
1017 edges as if the image is surrounded by a gray field, you must paste it
1018 into a gray image, convolve, and crop it out...
1019 The main convolution function is called epic_internal_filter. The idea
1020 is that the convolution function calls the edge handling function which
1021 computes a new filter based on the old filter and the distance to the
1022 edge of the image. For example, reflection is done by reflecting the
1023 filter through the appropriate axis and summing.
1024*/
1025
1026/*
1027 ---------------- EDGE HANDLER ARGUMENTS ------------------------
1028 filt - floating point array of filter taps.
1029 x_dim, y_dim - x and y dimensions of filt.
1030 x_pos - position of filter relative to the horizontal image edges. Negative
1031 values indicate left edge, positive indicate right edge. Zero
1032 indicates that the filter is not touching either edge. An absolute
1033 value of 1 indicates that the edge tap of the filter is over the
1034 edge pixel of the image.
1035 y_pos - analogous to x_pos.
1036 result - floating point array where the resulting filter will go. The edge
1037 of this filter will be aligned with the image for application...
1038 f_or_e - equal to one of the two constants EXPAND or FILTER.
1039 --------------------------------------------------------------------
1040*/
1041
1042/* --------------------------------------------------------------------
1043 epic_reflect1() - Reflection through the edge pixels. This is the right
1044 thing to do if you are subsampling by 2, since it maintains parity (even
1045 pixels positions remain even, odd ones remain odd). (note: procedure differs
1046 depending on f_or_e parameter). */
1047void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos,
1048 float *result, int f_or_e )
1049{
1050 int filt_sz = x_dim * y_dim;
1051 register int x_start = 0, y_start = 0, x_stop = x_dim, y_stop = filt_sz;
1052 register int y_filt, x_filt, y_edge, x_edge;
1053 register int x_base = ( x_pos > 0 ) ? ( x_dim - 1 ) : 0;
1054 register int y_base = ( y_pos > 0 ) ? ( x_dim * ( y_dim - 1 ) ) : 0;
1055 int x_edge_dist = ( x_pos > 0 ) ? ( x_pos - x_dim ) : ( ( x_pos < -1 ) ?
1056 ( x_pos + 1 ) : 0 );
1057 int y_edge_dist = x_dim * ( ( y_pos > 0 ) ? ( y_pos - y_dim ) : ( (
1058 y_pos < -1 ) ? ( y_pos + 1 ) : 0 ) );
1059 int i;
1060 int mx_pos = ( x_dim / 2 ) + 1;
1061 int my_pos = ( y_dim / 2 ) + 1;
1062
1063 _Pragma( "loopbound min 15 max 15" )
1064 for ( i = 0; i < filt_sz; ++i ) result[i] = 0.0f;
1065
1066 /* if EXPAND and filter is centered on image edge, do not reflect */
1067 if ( f_or_e IS EXPAND ) {
1068 if ( x_pos IS mx_pos ) x_stop = ( x_dim + 1 ) / 2;
1069 else
1070 if ( x_pos IS - mx_pos ) {
1071 x_start = x_dim / 2;
1072 x_edge_dist = 0;
1073 }
1074
1075 if ( y_pos IS my_pos ) y_stop = x_dim * ( ( y_dim + 1 ) / 2 );
1076 else
1077 if ( y_pos IS - my_pos ) {
1078 y_start = x_dim * ( y_dim / 2 );
1079 y_edge_dist = 0;
1080 }
1081 }
1082
1083 y_edge = y_edge_dist;
1084 /* reflect at boundary of image */
1085 _Pragma( "loopbound min 1 max 15" )
1086 for ( y_filt = y_start; y_filt < y_stop; y_filt += x_dim ) {
1087 x_edge = x_edge_dist;
1088 _Pragma( "loopbound min 1 max 15" )
1089 for ( x_filt = y_filt + x_start; x_filt < y_filt + x_stop; ++x_filt ) {
1090 result[abs( y_base - abs( y_edge ) ) + abs( x_base - abs( x_edge ) )]
1091 += filt[x_filt];
1092 ++x_edge;
1093 }
1094 y_edge += x_dim;
1095 }
1096
1097 /* if EXPAND and filter is not centered on image edge, mult edge by 2 */
1098 if ( f_or_e IS EXPAND ) {
1099 if ( ( abs( x_pos ) ISNT mx_pos ) AND ( x_pos ISNT 0 ) )
1100 _Pragma( "loopbound min 0 max 0" )
1101 for ( y_filt = x_base; y_filt < filt_sz; y_filt += x_dim )
1102 result[y_filt] += result[y_filt];
1103 if ( ( abs( y_pos ) ISNT my_pos ) AND ( y_pos ISNT 0 ) )
1104 _Pragma( "loopbound min 0 max 0" )
1105 for ( x_filt = y_base; x_filt < y_base + x_dim; ++x_filt )
1106 result[x_filt] += result[x_filt];
1107 }
1108}
1109
1110
1111/*
1112 Main functions
1113*/
1114
1115void _Pragma( "entrypoint" ) epic_main( void )
1116{
1117 epic_build_pyr( epic_image, X_SIZE, Y_SIZE, NUM_LEVELS, epic_lo_filter,
1118 epic_hi_filter, FILTER_SIZE );
1119}
1120
1121int epic_return(){
1122 int i;
1123 int checksum = 0;
1124 for ( i=0 ; i<X_SIZE*Y_SIZE ; i+=Y_SIZE+1 ){
1125 checksum += epic_image[i];
1126 }
1127 return ( checksum == 43968 ? 0 : 1);
1128}
1129
1130int main( int argc, char **argv )
1131{
1132 SET_UP
1133 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
1134 START_LOOP
1135 epic_init();
1136 epic_main();
1137 STOP_LOOP
1138 }
1139 WRITE_TO_FILE
1140 return epic_return();
1141}
diff --git a/baseline/source/epic/epic.h b/baseline/source/epic/epic.h
new file mode 100644
index 0000000..5e5675f
--- /dev/null
+++ b/baseline/source/epic/epic.h
@@ -0,0 +1,72 @@
1#ifndef __EPIC_H_
2#define __EPIC_H_
3
4#define EPIC_VERSION 1.1
5
6/* ============= FUNDAMENTAL LIMITATIONS ============= */
7
8/* Maximum x- or y-size of image */
9#define MAX_IMAGE_DIM 16384
10
11/* Maximum number of pyramid levels (value 3*levs+1 stored in 5 bits).
12 This doesn't need to be larger than log2(MAX_IMAGE_DIM/FILTER_SIZE). */
13#define MAX_LEVELS 10
14
15/* Maximum number of quantization bins. This essentially determines
16 the maximum depth image to be represented. */
17#define MAX_BINS 511
18
19/* ============= SECONDARY (derived) LIMITATIONS ============= */
20
21/* This number determines the precision of the stored binsizes:
22 stored coefficients are accurate to +/- (1/SCALE_FACTOR).
23 On the other hand, this number also will limit the maximum amount
24 of compression.
25 It should not be more than [2^(8*sizeof(BinValueType))]/256. */
26#define SCALE_FACTOR 128
27
28/* This number must be consistent with the filters that are
29 hardwired into epic.c */
30#define FILTER_SIZE 15
31
32/* Log (base 2) of MAX_IMAGE_DIM^2: (bits required to store the dimensions) */
33#define LOG_MAX_IMAGE_SIZE 32
34
35/* The type of the quantized images. Must be SIGNED, and capable of holding
36 values in the range [-MAX_BINS, MAX_BINS] */
37typedef short BinIndexType;
38
39/* The type used to represent the binsizes. Should be UNSIGNED. If this is
40 changed, be sure to change the places in epic.c and unepic.c where
41 binsizes are written or read from files. */
42typedef unsigned short BinValueType;
43
44/* Number of possible values for a symbol. This must be at least
45 (MAX_BINS * 4) (one sign bit, one tag bit)... */
46#define NUM_SYMBOL_VALUES 65536
47
48/* Function prototypes. */
49void epic_build_pyr( float *image, int x_size, int y_size, int num_levels,
50 float *lo_filter, float *hi_filter, int filter_size );
51
52void epic_build_level( float *image, int level_x_size, int level_y_size,
53 float *lo_filter, float *hi_filter,
54 int filter_size, float *result_block );
55
56void epic_internal_transpose( register float *mat, int rows,
57 register int cols );
58
59void epic_reflect1( register float *filt, register int x_dim, int y_dim,
60 int x_pos, int y_pos, register float *result, int f_or_e );
61
62void epic_internal_filter( register float *image, register int x_dim,
63 register int y_dim, float *filt,
64 register float *temp, register int x_fdim,
65 register int y_fdim, int xgrid_start,
66 int xgrid_step, int ygrid_start, int ygrid_step,
67 register float *result );
68
69void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos,
70 float *result, int f_or_e );
71
72#endif // __EPIC_H_
diff --git a/baseline/source/extra.h b/baseline/source/extra.h
new file mode 100644
index 0000000..ca92812
--- /dev/null
+++ b/baseline/source/extra.h
@@ -0,0 +1,116 @@
1#include <time.h>
2#include <sys/mman.h>
3#include <stdlib.h>
4#include <stdio.h>
5#include <string.h>
6#include <signal.h>
7#include <limits.h>
8
9#define L3_CACHE_SIZE (11264*1024)
10
11
12
13#define SET_UP char *thisProgram=argv[1];\
14 int maxJobs=atoi(argv[2]);\
15 char *thisCore=argv[3];\
16 char *otherCore=argv[4];\
17 char *otherProgram=argv[5];\
18 char *runID=argv[6];\
19 int output=atoi(argv[7]);\
20 pid_t killMe;\
21 struct timespec start, end;\
22 int jobsComplete;\
23 long progTime[maxJobs*output];\
24 char fileName[50];\
25 char *bigArray;\
26 int wasteCount;\
27 strcpy(fileName, runID);\
28 strcat(fileName, ".txt");\
29 mlockall(MCL_CURRENT || MCL_FUTURE);
30
31
32//if output==0, endless loop
33//avoids int overflow error with large numbers for background loops
34
35#define SAVE_RESULTS if(jobsComplete>-1) progTime[jobsComplete]=(end.tv_nsec-start.tv_nsec)+(1000000000*(end.tv_sec-start.tv_sec));
36
37#define WRITE_TO_FILE if (output){\
38 munlockall();\
39 FILE *fp=fopen(fileName, "a");\
40 if (fp == NULL) {\
41 perror("Error opening file. \n");\
42 exit(1);\
43 }\
44 for(jobsComplete=0; jobsComplete<maxJobs; jobsComplete++){\
45 fprintf(fp, "%s %s %s %s %d %ld %s %d \n",\
46 thisProgram, otherProgram, thisCore, otherCore, maxJobs,\
47 progTime[jobsComplete], runID, jobsComplete);\
48 }\
49 fclose(fp);\
50}
51
52// Call the wbinvld instruction (it's in a kernel module due to it being ring-0)
53#define FLUSH_CACHES FILE *fp = fopen("/proc/wbinvd", "r");\
54 if (fp == NULL) {\
55 perror("Cache flush module interface cannot be opened");\
56 exit(1);\
57 }\
58 char dummy;\
59 if (fread(&dummy, 1, 1, fp) == 0) {\
60 perror("Unable to access cache flush module interface");\
61 exit(1);\
62 }\
63 fclose(fp);
64
65//invoke start timer twice, stop timer to make sure timer and vars are in cache
66//#define START_TIMER clock_gettime(CLOCK_MONOTONIC, &start);\
67 clock_gettime(CLOCK_MONOTONIC, &end);\
68 clock_gettime(CLOCK_MONOTONIC, &start);\
69
70#define START_TIMER clock_gettime(CLOCK_MONOTONIC, &start);
71
72#define STOP_TIMER clock_gettime(CLOCK_MONOTONIC, &end);
73
74//waste a millisecond
75
76#define WASTE_TIME clock_gettime(CLOCK_MONOTONIC, &start);\
77do{clock_gettime(CLOCK_MONOTONIC, &end);}\
78while( (end.tv_sec*1000000000+end.tv_nsec)-(start.tv_sec*1000000000+start.tv_nsec) < 1000000);
79
80
81#define SLEEP nanosleep((const struct timespec[]){{0, 1000000}}, NULL);
82
83//#define LOOP_WASTE for(wasteCount=0; wasteCount<1000000; wasteCount++){}
84
85//at beginning of loop clear cache, waste some time
86//wasting time allows interfering process to build up some cache presence
87//using sleep instead of waste time loop causes problems
88//both sleeping and spinning give advantage to threaded task
89//#define START_LOOP if (output) {KILL_CACHE START_TIMER}
90
91//#define START_LOOP if (output){START_TIMER}
92
93//#define STOP_LOOP if (output) {STOP_TIMER SAVE_RESULTS}
94//if (!output) {jobsComplete--;}
95
96#define START_LOOP FLUSH_CACHES START_TIMER
97#define STOP_LOOP STOP_TIMER SAVE_RESULTS
98
99
100/*
101Intended structure
102
103main
104SET_UP
105notice that STOP LOOP negates the ++ if outout=0
106for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
107 KILL_CACHE
108 START_TIMER
109 tacleInit();
110 tacleMain();
111 STOP_TIMER
112 SAVE_RESULTS
113}
114WRITE_TO_FILE
115tacleReturn
116*/
diff --git a/baseline/source/fmref/Changelog.txt b/baseline/source/fmref/Changelog.txt
new file mode 100644
index 0000000..e9e7055
--- /dev/null
+++ b/baseline/source/fmref/Changelog.txt
@@ -0,0 +1,5 @@
12017-06-27
2- Remove unused variables
3- Introduce fmref_init and fmref_return functions.
4- Add prefix fmref_ to global variables.
5- Introduce dummy initialization in ieee754_rem_pio2f to please linter.
diff --git a/baseline/source/fmref/fmref.c b/baseline/source/fmref/fmref.c
new file mode 100644
index 0000000..6be1436
--- /dev/null
+++ b/baseline/source/fmref/fmref.c
@@ -0,0 +1,283 @@
1/*
2* fmref.c: C reference implementation of FM Radio
3* David Maze <dmaze@cag.lcs.mit.edu>
4* $Id: fmref.c,v 1.2 2010-10-04 21:21:26 garus Exp $
5*/
6
7
8#include "../extra.h"
9#include "wcclibm.h"
10#ifndef M_PI
11#define M_PI 3.1415926535897932384626433832795
12#endif
13
14// Defines
15#define SAMPLING_RATE 250000000
16#define CUTOFF_FREQUENCY 108000000
17#define NUM_TAPS 64
18#define MAX_AMPLITUDE 27000.0
19#define BANDWIDTH 10000
20#define DECIMATION 4
21/* Must be at least NUM_TAPS+1: */
22#define IN_BUFFER_LEN 200
23#define EQUALIZER_BANDS 10
24
25
26// Type declarations
27typedef struct FloatBuffer
28{
29 float buff[IN_BUFFER_LEN];
30 int rpos, rlen;
31}
32FloatBuffer;
33/* Low pass filter: */
34typedef struct LPFData
35{
36 float coeff[NUM_TAPS];
37 float freq;
38 int taps, decimation;
39}
40LPFData;
41typedef struct EqualizerData
42{
43 LPFData lpf[EQUALIZER_BANDS + 1];
44 FloatBuffer fb[EQUALIZER_BANDS + 1];
45 float gain[EQUALIZER_BANDS];
46}
47EqualizerData;
48
49// Global vars
50float fmref_lpf_coeff[NUM_TAPS];
51float fmref_eq_cutoffs[EQUALIZER_BANDS + 1] =
52 { 55.000004f, 77.78174f, 110.00001f, 155.56354f, 220.00002f, 311.12695f,
53 440.00003f, 622.25415f, 880.00006f, 1244.5078f, 1760.0001f };
54static int fmref_numiters = 2;
55
56// Forward declarations
57void fmref_fb_compact(FloatBuffer *fb);
58int fmref_fb_ensure_writable(FloatBuffer *fb, int amount);
59void fmref_get_floats(FloatBuffer *fb);
60void fmref_init_lpf_data(LPFData *data, float freq, int taps, int decimation);
61void fmref_run_lpf(FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data);
62void fmref_run_demod(FloatBuffer *fbin, FloatBuffer *fbout);
63void fmref_init_equalizer(EqualizerData *data);
64void fmref_run_equalizer(FloatBuffer *fbin, FloatBuffer *fbout, EqualizerData *data);
65void fmref_main(void);
66
67void fmref_init(void)
68{
69 // dummy init function
70}
71
72int fmref_return(void)
73{
74 // dummy return value
75 return 0;
76}
77
78int main(int argc, char **argv){
79
80 SET_UP
81 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
82 START_LOOP
83 fmref_init();
84 fmref_main();
85 STOP_LOOP
86 }
87 WRITE_TO_FILE
88 return fmref_return();
89}
90
91FloatBuffer fmref_fb1, fmref_fb2, fmref_fb3, fmref_fb4;
92LPFData fmref_lpf_data;
93
94void fmref_main(void)
95{
96 int i;
97 EqualizerData eq_data;
98
99 fmref_fb1.rpos = fmref_fb1.rlen = 0;
100 fmref_fb2.rpos = fmref_fb2.rlen = 0;
101 fmref_fb3.rpos = fmref_fb3.rlen = 0;
102 fmref_fb4.rpos = fmref_fb4.rlen = 0;
103
104 fmref_init_lpf_data(&fmref_lpf_data, CUTOFF_FREQUENCY, NUM_TAPS, DECIMATION);
105 fmref_init_equalizer(&eq_data);
106
107 /* Startup: */
108 fmref_get_floats(&fmref_fb1);
109 /* LPF needs at least NUM_TAPS+1 inputs; fmref_get_floats is fine. */
110 fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data);
111 /* run_demod needs 1 input, OK here. */
112 /* run_equalizer needs 51 inputs (same reason as for LPF). This means
113 * running the pipeline up to demod 50 times in advance: */
114 _Pragma( "loopbound min 64 max 64" )
115 for (i = 0; i < 64; i++) {
116 if (fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1)
117 fmref_get_floats(&fmref_fb1);
118 fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data);
119 fmref_run_demod(&fmref_fb2, &fmref_fb3);
120 }
121
122 /* Main loop: */
123 _Pragma( "loopbound min 2 max 2" )
124 while (fmref_numiters-- > 0) {
125 /* The low-pass filter will need NUM_TAPS+1 items; read them if we
126 * need to. */
127 if (fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1)
128 fmref_get_floats(&fmref_fb1);
129 fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data);
130 fmref_run_demod(&fmref_fb2, &fmref_fb3);
131 fmref_run_equalizer(&fmref_fb3, &fmref_fb4, &eq_data);
132
133 }
134}
135
136void fmref_fb_compact(FloatBuffer *fb)
137{
138
139 int i;
140 char *source;
141 char *target;
142 target = (char*)(fb->buff);
143 source = (char*)(fb->buff + fb->rpos);
144 _Pragma( "loopbound min 0 max 60" )
145 for (i = 0; i < fb->rlen - fb->rpos; i++) {
146 target[i] = source[i];
147 }
148 fb->rlen -= fb->rpos;
149 fb->rpos = 0;
150}
151
152int fmref_fb_ensure_writable(FloatBuffer *fb, int amount)
153{
154 int available = IN_BUFFER_LEN - fb->rlen;
155 if (available >= amount)
156 return 1;
157
158 /* Nope, not enough room, move current contents back to the beginning. */
159 fmref_fb_compact(fb);
160
161 available = IN_BUFFER_LEN - fb->rlen;
162 if (available >= amount)
163 return 1;
164
165 return 0;
166}
167
168void fmref_get_floats(FloatBuffer *fb)
169{
170 static int x = 0;
171 fmref_fb_compact(fb);
172
173 /* Fill the remaining space in fb with 1.0. */
174 _Pragma( "loopbound min 200 max 200" )
175 while (fb->rlen < IN_BUFFER_LEN) {
176 fb->buff[fb->rlen++] = (float)x;
177 x++;
178 }
179}
180
181void fmref_init_lpf_data(LPFData *data, float freq, int taps, int decimation)
182{
183 /* Assume that CUTOFF_FREQUENCY is non-zero. See comments in
184 * StreamIt LowPassFilter.java for origin. */
185 float w = 2 * M_PI * freq / SAMPLING_RATE;
186 int i;
187 float m = taps - 1.0f;
188
189 data->freq = freq;
190 data->taps = taps;
191 data->decimation = decimation;
192
193 _Pragma( "loopbound min 64 max 64" )
194 for (i = 0; i < taps; i++) {
195 if (i - m / 2 == 0.0f)
196 data->coeff[i] = w / M_PI;
197 else
198 data->coeff[i] = sin(w * (i - m / 2)) / M_PI / (i - m / 2) *
199 (0.54f - 0.46f * cos(2 * M_PI * i / m));
200 }
201}
202
203void fmref_run_lpf(FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data)
204{
205 float sum = 0.0f;
206 int i = 0;
207
208 _Pragma( "loopbound min 64 max 64" )
209 for (i = 0; i < data->taps; i++) {
210 sum += fbin->buff[fbin->rpos + i] * data->coeff[i];
211 }
212
213 fbin->rpos += data->decimation + 1;
214
215 /* Check that there's room in the output buffer; move data if necessary. */
216 fmref_fb_ensure_writable(fbout, 1);
217 fbout->buff[fbout->rlen++] = sum;
218}
219
220void fmref_run_demod(FloatBuffer *fbin, FloatBuffer *fbout)
221{
222 float temp, gain;
223 gain = MAX_AMPLITUDE * SAMPLING_RATE / (BANDWIDTH * M_PI);
224 temp = fbin->buff[fbin->rpos] * fbin->buff[fbin->rpos + 1];
225 temp = gain * atan(temp);
226 fbin->rpos++;
227 fmref_fb_ensure_writable(fbout, 1);
228 fbout->buff[fbout->rlen++] = temp;
229}
230
231void fmref_init_equalizer(EqualizerData *data)
232{
233 int i;
234
235 /* Equalizer structure: there are ten band-pass filters, with
236 * cutoffs as shown below. The outputs of these filters get added
237 * together. Each band-pass filter is LPF(high)-LPF(low). */
238 _Pragma( "loopbound min 11 max 11" )
239 for (i = 0; i < EQUALIZER_BANDS + 1; i++)
240 fmref_init_lpf_data(&data->lpf[i], fmref_eq_cutoffs[i], 64, 0);
241
242 /* Also initialize member buffers. */
243 _Pragma( "loopbound min 11 max 11" )
244 for (i = 0; i < EQUALIZER_BANDS + 1; i++)
245 data->fb[i].rpos = data->fb[i].rlen = 0;
246
247 _Pragma( "loopbound min 10 max 10" )
248 for (i = 0; i < EQUALIZER_BANDS; i++) {
249 // the gain amplifies the middle bands the most
250 float val = (((float)i) - (((float)(EQUALIZER_BANDS - 1)) / 2.0f)) / 5.0f;
251 data->gain[i] = val > 0 ? 2.0f - val : 2.0f + val;
252 }
253}
254
255void fmref_run_equalizer(FloatBuffer *fbin, FloatBuffer *fbout, EqualizerData *data)
256{
257 int i, rpos;
258 float lpf_out[EQUALIZER_BANDS + 1];
259 float sum = 0.0;
260
261 /* Save the input read location; we can reuse the same input data on all
262 * of the LPFs. */
263 rpos = fbin->rpos;
264
265 /* Run the child filters. */
266 _Pragma( "loopbound min 11 max 11" )
267 for (i = 0; i < EQUALIZER_BANDS + 1; i++) {
268 fbin->rpos = rpos;
269 fmref_run_lpf(fbin, &data->fb[i], &data->lpf[i]);
270 lpf_out[i] = data->fb[i].buff[data->fb[i].rpos++];
271 }
272
273 /* Now process the results of the filters. Remember that each band is
274 * output(hi)-output(lo). */
275 _Pragma( "loopbound min 10 max 10" )
276 for (i = 0; i < EQUALIZER_BANDS; i++)
277 sum += (lpf_out[i + 1] - lpf_out[i]) * data->gain[i];
278
279 /* Write that result. */
280 fmref_fb_ensure_writable(fbout, 1);
281 fbout->buff[fbout->rlen++] = sum;
282}
283
diff --git a/baseline/source/fmref/license.txt b/baseline/source/fmref/license.txt
new file mode 100644
index 0000000..7029925
--- /dev/null
+++ b/baseline/source/fmref/license.txt
@@ -0,0 +1,21 @@
1The MIT License
2
3Copyright (c) <year> <copyright holders>
4
5Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
7in the Software without restriction, including without limitation the rights
8to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9copies of the Software, and to permit persons to whom the Software is
10furnished to do so, subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in
13all copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21THE SOFTWARE.
diff --git a/baseline/source/fmref/math_private.h b/baseline/source/fmref/math_private.h
new file mode 100644
index 0000000..58d4354
--- /dev/null
+++ b/baseline/source/fmref/math_private.h
@@ -0,0 +1,178 @@
1/*
2 * ====================================================
3 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
4 *
5 * Developed at SunPro, a Sun Microsystems, Inc. business.
6 * Permission to use, copy, modify, and distribute this
7 * software is freely granted, provided that this notice
8 * is preserved.
9 * ====================================================
10 */
11
12/*
13 * from: @(#)fdlibm.h 5.1 93/09/24
14 */
15
16#ifndef _MATH_PRIVATE_H_
17#define _MATH_PRIVATE_H_
18
19#include "wcclibm.h"
20
21//#include <endian.h>
22//#include <sys/types.h>
23
24/* A representation of a double as a union. */
25union ieee754_double
26{
27 double d;
28
29 /* This is the IEEE 754 double-precision format. */
30 struct {
31 /* Together these comprise the mantissa. */
32 unsigned int mantissa1:32;
33 unsigned int mantissa0:20;
34 unsigned int exponent:11;
35 unsigned int negative:1;
36 } ieee;
37
38 /* This format makes it easier to see if a NaN is a signalling NaN. */
39 struct {
40 /* Together these comprise the mantissa. */
41 unsigned int mantissa1:32;
42 unsigned int mantissa0:19;
43 unsigned int quiet_nan:1;
44 unsigned int exponent:11;
45 unsigned int negative:1;
46 } ieee_nan;
47};
48
49/* The original fdlibm code used statements like:
50 n0 = ((*(int*)&one)>>29)^1; * index of high word *
51 ix0 = *(n0+(int*)&x); * high word of x *
52 ix1 = *((1-n0)+(int*)&x); * low word of x *
53 to dig two 32 bit words out of the 64 bit IEEE floating point
54 value. That is non-ANSI, and, moreover, the gcc instruction
55 scheduler gets it wrong. We instead use the following macros.
56 Unlike the original code, we determine the endianness at compile
57 time, not at run time; I don't see much benefit to selecting
58 endianness at run time. */
59
60/* A union which permits us to convert between a double and two 32 bit
61 ints. */
62
63/* #if __FLOAT_WORD_ORDER == BIG_ENDIAN */
64/* #warning USING Big Endian float word order */
65/* typedef union */
66/* { */
67/* double value; */
68/* struct */
69/* { */
70/* u_int16_t msw; */
71/* u_int16_t lsw; */
72/* } parts; */
73/* } ieeeDoubleShapeType; */
74
75/* #endif */
76
77/* #if __FLOAT_WORD_ORDER == LITTLE_ENDIAN */
78/* #warning USING Little Endian float word order */
79
80typedef union
81{
82 double value;
83 struct
84 {
85 u_int16_t lsw;
86 u_int16_t msw;
87 } parts;
88} ieeeDoubleShapeType;
89
90/* #endif */
91
92/* Get two 32 bit ints from a double. */
93
94#define EXTRACT_WORDS(ix0,ix1,d) \
95{ \
96 ieeeDoubleShapeType ew_u; \
97 ew_u.value = (d); \
98 (ix0) = ew_u.parts.msw; \
99 (ix1) = ew_u.parts.lsw; \
100}
101
102/* Get the more significant 32 bit int from a double. */
103
104#define GET_HIGH_WORD(i,d) \
105{ \
106 ieeeDoubleShapeType gh_u; \
107 gh_u.value = (d); \
108 (i) = gh_u.parts.msw; \
109}
110
111/* Get the less significant 32 bit int from a double. */
112
113#define GET_LOW_WORD(i,d) \
114{ \
115 ieeeDoubleShapeType gl_u; \
116 gl_u.value = (d); \
117 (i) = gl_u.parts.lsw; \
118}
119
120/* Set a double from two 32 bit ints. */
121
122#define INSERT_WORDS(d,ix0,ix1) \
123{ \
124 ieeeDoubleShapeType iw_u; \
125 iw_u.parts.msw = (ix0); \
126 iw_u.parts.lsw = (ix1); \
127 (d) = iw_u.value; \
128}
129
130/* Set the more significant 32 bits of a double from an int. */
131
132#define SET_HIGH_WORD(d,v) \
133{ \
134 ieeeDoubleShapeType sh_u; \
135 sh_u.value = (d); \
136 sh_u.parts.msw = (v); \
137 (d) = sh_u.value; \
138}
139
140/* Set the less significant 32 bits of a double from an int. */
141
142#define SET_LOW_WORD(d,v) \
143{ \
144 ieeeDoubleShapeType sl_u; \
145 sl_u.value = (d); \
146 sl_u.parts.lsw = (v); \
147 (d) = sl_u.value; \
148}
149
150/* A union which permits us to convert between a float and a 32 bit
151 int. */
152
153typedef union
154{
155 float value;
156 u_int32_t word;
157} ieee_float_shape_type;
158
159/* Get a 32 bit int from a float. */
160
161#define GET_FLOAT_WORD(i,d) \
162{ \
163 ieee_float_shape_type gf_u; \
164 gf_u.value = (d); \
165 (i) = gf_u.word; \
166}
167
168/* Set a float from a 32 bit int. */
169
170#define SET_FLOAT_WORD(d,i) \
171{ \
172 ieee_float_shape_type sf_u; \
173 sf_u.word = (i); \
174 (d) = sf_u.value; \
175}
176
177
178#endif /* _MATH_PRIVATE_H_ */
diff --git a/baseline/source/fmref/wcclibm.c b/baseline/source/fmref/wcclibm.c
new file mode 100644
index 0000000..39b8cbe
--- /dev/null
+++ b/baseline/source/fmref/wcclibm.c
@@ -0,0 +1,522 @@
1#include "math_private.h"
2#include "wcclibm.h"
3
4
5
6/* e_rem_pio2f.c -- float version of e_rem_pio2.c
7 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
8 */
9
10/*
11 * ====================================================
12 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
13 *
14 * Developed at SunPro, a Sun Microsystems, Inc. business.
15 * Permission to use, copy, modify, and distribute this
16 * software is freely granted, provided that this notice
17 * is preserved.
18 * ====================================================
19 */
20
21#if defined(LIBM_SCCS) && !defined(lint)
22static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $";
23#endif
24
25/* __ieee754_rem_pio2f(x,y)
26 *
27 * return the remainder of x rem pi/2 in y[0]+y[1]
28 * use __kernel_rem_pio2f()
29 */
30
31/* This array is like the one in e_rem_pio2.c, but the numbers are
32 single precision and the last 8 bits are forced to 0. */
33#ifdef __STDC__
34static const int32_t fmref_npio2_hw[] = {
35#else
36static int32_t fmref_npio2_hw[] = {
37#endif
380x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00,
390x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00,
400x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100,
410x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00,
420x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00,
430x4242c700, 0x42490f00
44};
45
46/*
47 * invpio2: 24 bits of 2/pi
48 * pio2_1: first 17 bit of pi/2
49 * pio2_1t: pi/2 - pio2_1
50 * pio2_2: second 17 bit of pi/2
51 * pio2_2t: pi/2 - (pio2_1+pio2_2)
52 * pio2_3: third 17 bit of pi/2
53 * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
54 */
55
56#ifdef __STDC__
57static const float
58#else
59static float
60#endif
61/* zero = 0.0000000000e+00f, /\* 0x00000000 *\/ */
62/* half = 5.0000000000e-01f, /\* 0x3f000000 *\/ */
63/* two8 = 2.5600000000e+02f, /\* 0x43800000 *\/ */
64fmref_invpio2 = 6.3661980629e-01f, /* 0x3f22f984 */
65fmref_pio2_1 = 1.5707855225e+00f, /* 0x3fc90f80 */
66fmref_pio2_1t = 1.0804334124e-05f, /* 0x37354443 */
67fmref_pio2_2 = 1.0804273188e-05f, /* 0x37354400 */
68fmref_pio2_2t = 6.0770999344e-11f, /* 0x2e85a308 */
69fmref_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */
70fmref_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */
71
72#ifdef __STDC__
73 int32_t fmref___ieee754_rem_pio2f(float x, float *y)
74#else
75 int32_t fmref___ieee754_rem_pio2f(x,y)
76 float x,y[];
77#endif
78{
79 float z,w,t,r,fn;
80 int32_t i,j,n,ix,hx;
81
82 GET_FLOAT_WORD(hx,x);
83 ix = hx&0x7fffffff;
84 if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */
85 {y[0] = x; y[1] = 0; return 0;}
86 if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */
87 if(hx>0) {
88 z = x - fmref_pio2_1;
89 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
90 y[0] = z - fmref_pio2_1t;
91 y[1] = (z-y[0])-fmref_pio2_1t;
92 } else { /* near pi/2, use 24+24+24 bit pi */
93 z -= fmref_pio2_2;
94 y[0] = z - fmref_pio2_2t;
95 y[1] = (z-y[0])-fmref_pio2_2t;
96 }
97 return 1;
98 } else { /* negative x */
99 z = x + fmref_pio2_1;
100 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
101 y[0] = z + fmref_pio2_1t;
102 y[1] = (z-y[0])+fmref_pio2_1t;
103 } else { /* near pi/2, use 24+24+24 bit pi */
104 z += fmref_pio2_2;
105 y[0] = z + fmref_pio2_2t;
106 y[1] = (z-y[0])+fmref_pio2_2t;
107 }
108 return -1;
109 }
110 }
111 if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */
112 t = fabsf(x);
113 n = (int32_t) (t*fmref_invpio2+fmref_half);
114 fn = (float)n;
115 r = t-fn*fmref_pio2_1;
116 w = fn*fmref_pio2_1t; /* 1st round good to 40 bit */
117 if(n<32&&(int32_t)(ix&0xffffff00)!=fmref_npio2_hw[n-1]) {
118 y[0] = r-w; /* quick check no cancellation */
119 } else {
120 u_int32_t high;
121 j = ix>>23;
122 y[0] = r-w;
123 GET_FLOAT_WORD(high,y[0]);
124 i = j-((high>>23)&0xff);
125 if(i>8) { /* 2nd iteration needed, good to 57 */
126 t = r;
127 w = fn*fmref_pio2_2;
128 r = t-w;
129 w = fn*fmref_pio2_2t-((t-r)-w);
130 y[0] = r-w;
131 GET_FLOAT_WORD(high,y[0]);
132 i = j-((high>>23)&0xff);
133 if(i>25) { /* 3rd iteration need, 74 bits acc */
134 t = r; /* will cover all possible cases */
135 w = fn*fmref_pio2_3;
136 r = t-w;
137 w = fn*fmref_pio2_3t-((t-r)-w);
138 y[0] = r-w;
139 }
140 }
141 }
142 y[1] = (r-y[0])-w;
143 if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
144 else return n;
145 }
146 /*
147 * all other (large) arguments
148 */
149 if(ix>=0x7f800000) { /* x is inf or NaN */
150 y[0]=y[1]=x-x; return 0;
151 }
152
153 y[0]=y[1]=x-x; /* dummy initialization */
154 return 0; /* doesn't happen for our input */
155}
156
157/* k_cosf.c -- float version of k_cos.c
158 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
159 */
160
161/*
162 * ====================================================
163 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
164 *
165 * Developed at SunPro, a Sun Microsystems, Inc. business.
166 * Permission to use, copy, modify, and distribute this
167 * software is freely granted, provided that this notice
168 * is preserved.
169 * ====================================================
170 */
171
172#if defined(LIBM_SCCS) && !defined(lint)
173static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $";
174#endif
175
176
177#ifdef __STDC__
178static const float
179#else
180static float
181#endif
182/* one = 1.0000000000e+00, /\* 0x3f800000 *\/ */
183fmref_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */
184fmref_C2 = -1.3888889225e-03f, /* 0xbab60b61 */
185fmref_C3 = 2.4801587642e-05f, /* 0x37d00d01 */
186fmref_C4 = -2.7557314297e-07f, /* 0xb493f27c */
187fmref_C5 = 2.0875723372e-09f, /* 0x310f74f6 */
188fmref_C6 = -1.1359647598e-11f; /* 0xad47d74e */
189
190#ifdef __STDC__
191 float fmref___kernel_cosf(float x, float y)
192#else
193 float fmref___kernel_cosf(x, y)
194 float x,y;
195#endif
196{
197 float a,hz,z,r,qx;
198 int32_t ix;
199 GET_FLOAT_WORD(ix,x);
200 ix &= 0x7fffffff; /* ix = |x|'s high word*/
201 if(ix<0x32000000) { /* if x < 2**27 */
202 if(((int)x)==0) return fmref_one; /* generate inexact */
203 }
204 z = x*x;
205 r = z*(fmref_C1+z*(fmref_C2+z*(fmref_C3+z*(fmref_C4+z*(fmref_C5+z*fmref_C6)))));
206 if(ix < 0x3e99999a) /* if |x| < 0.3 */
207 return fmref_one - ((float)0.5f*z - (z*r - x*y));
208 else {
209 if(ix > 0x3f480000) { /* x > 0.78125 */
210 qx = (float)0.28125f;
211 } else {
212 SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */
213 }
214 hz = (float)0.5f*z-qx;
215 a = fmref_one-qx;
216 return a - (hz - (z*r-x*y));
217 }
218}
219
220/* k_sinf.c -- float version of k_sin.c
221 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
222 */
223
224/*
225 * ====================================================
226 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
227 *
228 * Developed at SunPro, a Sun Microsystems, Inc. business.
229 * Permission to use, copy, modify, and distribute this
230 * software is freely granted, provided that this notice
231 * is preserved.
232 * ====================================================
233 */
234
235#if defined(LIBM_SCCS) && !defined(lint)
236static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $";
237#endif
238
239
240#ifdef __STDC__
241static const float
242#else
243static float
244#endif
245/* half = 5.0000000000e-01f,/\* 0x3f000000 *\/ */
246fmref_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */
247fmref_S2 = 8.3333337680e-03f, /* 0x3c088889 */
248fmref_S3 = -1.9841270114e-04f, /* 0xb9500d01 */
249fmref_S4 = 2.7557314297e-06f, /* 0x3638ef1b */
250fmref_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */
251fmref_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */
252
253#ifdef __STDC__
254 float fmref___kernel_sinf(float x, float y, int iy)
255#else
256 float fmref___kernel_sinf(x, y, iy)
257 float x,y; int iy; /* iy=0 if y is zero */
258#endif
259{
260 float z,r,v;
261 int32_t ix;
262 GET_FLOAT_WORD(ix,x);
263 ix &= 0x7fffffff; /* high word of x */
264 if(ix<0x32000000) /* |x| < 2**-27 */
265 {if((int)x==0) return x;} /* generate inexact */
266 z = x*x;
267 v = z*x;
268 r = fmref_S2+z*(fmref_S3+z*(fmref_S4+z*(fmref_S5+z*fmref_S6)));
269 if(iy==0) return x+v*(fmref_S1+z*r);
270 else return x-((z*(fmref_half*y-v*r)-y)-v*fmref_S1);
271}
272/* s_atanf.c -- float version of s_atan.c.
273 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
274 */
275
276/*
277 * ====================================================
278 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
279 *
280 * Developed at SunPro, a Sun Microsystems, Inc. business.
281 * Permission to use, copy, modify, and distribute this
282 * software is freely granted, provided that this notice
283 * is preserved.
284 * ====================================================
285 */
286
287#if defined(LIBM_SCCS) && !defined(lint)
288static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $";
289#endif
290
291
292#ifdef __STDC__
293static const float fmref_atanhi[] = {
294#else
295static float fmref_atanhi[] = {
296#endif
297 4.6364760399e-01f, /* atan(0.5)hi 0x3eed6338 */
298 7.8539812565e-01f, /* atan(1.0)hi 0x3f490fda */
299 9.8279368877e-01f, /* atan(1.5)hi 0x3f7b985e */
300 1.5707962513e+00f, /* atan(inf)hi 0x3fc90fda */
301};
302
303#ifdef __STDC__
304static const float fmref_atanlo[] = {
305#else
306static float fmref_atanlo[] = {
307#endif
308 5.0121582440e-09f, /* atan(0.5)lo 0x31ac3769 */
309 3.7748947079e-08f, /* atan(1.0)lo 0x33222168 */
310 3.4473217170e-08f, /* atan(1.5)lo 0x33140fb4 */
311 7.5497894159e-08f, /* atan(inf)lo 0x33a22168 */
312};
313
314#ifdef __STDC__
315static const float fmref_aT[] = {
316#else
317static float fmref_aT[] = {
318#endif
319 3.3333334327e-01f, /* 0x3eaaaaaa */
320 -2.0000000298e-01f, /* 0xbe4ccccd */
321 1.4285714924e-01f, /* 0x3e124925 */
322 -1.1111110449e-01f, /* 0xbde38e38 */
323 9.0908870101e-02f, /* 0x3dba2e6e */
324 -7.6918758452e-02f, /* 0xbd9d8795 */
325 6.6610731184e-02f, /* 0x3d886b35 */
326 -5.8335702866e-02f, /* 0xbd6ef16b */
327 4.9768779427e-02f, /* 0x3d4bda59 */
328 -3.6531571299e-02f, /* 0xbd15a221 */
329 1.6285819933e-02f, /* 0x3c8569d7 */
330};
331
332/* #ifdef __STDC__ */
333/* static const float */
334/* #else */
335/* static float */
336/* #endif */
337/* one = 1.0, */
338/* huge = 1.0e30; */
339
340#ifdef __STDC__
341 float fmref___atanf(float x)
342#else
343 float fmref___atanf(x)
344 float x;
345#endif
346{
347 float w,s1,s2,z;
348 int32_t ix,hx,id;
349
350 GET_FLOAT_WORD(hx,x);
351 ix = hx&0x7fffffff;
352 if(ix>=0x50800000) { /* if |x| >= 2^34 */
353 if(ix>0x7f800000)
354 return x+x; /* NaN */
355 if(hx>0) return fmref_atanhi[3]+fmref_atanlo[3];
356 else return -fmref_atanhi[3]-fmref_atanlo[3];
357 } if (ix < 0x3ee00000) { /* |x| < 0.4375 */
358 if (ix < 0x31000000) { /* |x| < 2^-29 */
359 if(fmref_huge+x>fmref_one) return x; /* raise inexact */
360 }
361 id = -1;
362 } else {
363 x = fabsf(x);
364 if (ix < 0x3f980000) { /* |x| < 1.1875 */
365 if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */
366 id = 0; x = ((float)2.0f*x-fmref_one)/((float)2.0f+x);
367 } else { /* 11/16<=|x|< 19/16 */
368 id = 1; x = (x-fmref_one)/(x+fmref_one);
369 }
370 } else {
371 if (ix < 0x401c0000) { /* |x| < 2.4375 */
372 id = 2; x = (x-(float)1.5f)/(fmref_one+(float)1.5f*x);
373 } else { /* 2.4375 <= |x| < 2^66 */
374 id = 3; x = -(float)1.0f/x;
375 }
376 }}
377 /* end of argument reduction */
378 z = x*x;
379 w = z*z;
380 /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
381 s1 = z*(fmref_aT[0]+w*(fmref_aT[2]+w*(fmref_aT[4]+w*(fmref_aT[6]+w*(fmref_aT[8]+w*fmref_aT[10])))));
382 s2 = w*(fmref_aT[1]+w*(fmref_aT[3]+w*(fmref_aT[5]+w*(fmref_aT[7]+w*fmref_aT[9]))));
383 if (id<0) return x - x*(s1+s2);
384 else {
385 z = fmref_atanhi[id] - ((x*(s1+s2) - fmref_atanlo[id]) - x);
386 return (hx<0)? -z:z;
387 }
388}
389//weak_alias (__atanf, atanf)
390
391/* s_cosf.c -- float version of s_cos.c.
392 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
393 */
394
395/*
396 * ====================================================
397 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
398 *
399 * Developed at SunPro, a Sun Microsystems, Inc. business.
400 * Permission to use, copy, modify, and distribute this
401 * software is freely granted, provided that this notice
402 * is preserved.
403 * ====================================================
404 */
405
406/* #ifdef __STDC__ */
407/* static const float one=1.0; */
408/* #else */
409/* static float one=1.0; */
410/* #endif */
411
412#ifdef __STDC__
413 float fmref___cosf(float x)
414#else
415 float fmref___cosf(x)
416 float x;
417#endif
418{
419 float y[2],z=0.0f;
420 int32_t n,ix;
421
422 GET_FLOAT_WORD(ix,x);
423
424 /* |x| ~< pi/4 */
425 ix &= 0x7fffffff;
426 if(ix <= 0x3f490fd8) return fmref___kernel_cosf(x,z);
427
428 /* cos(Inf or NaN) is NaN */
429 else if (ix>=0x7f800000) return x-x;
430
431 /* argument reduction needed */
432 else {
433 n = fmref___ieee754_rem_pio2f(x,y);
434 switch(n&3) {
435 case 0: return fmref___kernel_cosf(y[0],y[1]);
436 case 1: return -fmref___kernel_sinf(y[0],y[1],1);
437 case 2: return -fmref___kernel_cosf(y[0],y[1]);
438 default:
439 return fmref___kernel_sinf(y[0],y[1],1);
440 }
441 }
442}
443
444/* s_sinf.c -- float version of s_sin.c.
445 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
446 */
447
448/*
449 * ====================================================
450 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
451 *
452 * Developed at SunPro, a Sun Microsystems, Inc. business.
453 * Permission to use, copy, modify, and distribute this
454 * software is freely granted, provided that this notice
455 * is preserved.
456 * ====================================================
457 */
458
459 #ifdef __STDC__
460 float fmref___sinf(float x)
461#else
462 float fmref___sinf(x)
463 float x;
464#endif
465{
466 float y[2],z=0.0;
467 int32_t n, ix;
468
469 GET_FLOAT_WORD(ix,x);
470
471 /* |x| ~< pi/4 */
472 ix &= 0x7fffffff;
473 if(ix <= 0x3f490fd8) return fmref___kernel_sinf(x,z,0);
474
475 /* sin(Inf or NaN) is NaN */
476 else if (ix>=0x7f800000) return x-x;
477
478 /* argument reduction needed */
479 else {
480 n = fmref___ieee754_rem_pio2f(x,y);
481 switch(n&3) {
482 case 0: return fmref___kernel_sinf(y[0],y[1],1);
483 case 1: return fmref___kernel_cosf(y[0],y[1]);
484 case 2: return -fmref___kernel_sinf(y[0],y[1],1);
485 default:
486 return -fmref___kernel_cosf(y[0],y[1]);
487 }
488 }
489}
490
491/* s_fabsf.c -- float version of s_fabs.c.
492 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
493 */
494
495/*
496 * ====================================================
497 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
498 *
499 * Developed at SunPro, a Sun Microsystems, Inc. business.
500 * Permission to use, copy, modify, and distribute this
501 * software is freely granted, provided that this notice
502 * is preserved.
503 * ====================================================
504 */
505
506/*
507 * fabsf(x) returns the absolute value of x.
508 */
509
510
511#ifdef __STDC__
512 float fmref___fabsf(float x)
513#else
514 float fmref___fabsf(x)
515 float x;
516#endif
517{
518 u_int32_t ix;
519 GET_FLOAT_WORD(ix,x);
520 SET_FLOAT_WORD(x,ix&0x7fffffff);
521 return x;
522}
diff --git a/baseline/source/fmref/wcclibm.h b/baseline/source/fmref/wcclibm.h
new file mode 100644
index 0000000..c00738b
--- /dev/null
+++ b/baseline/source/fmref/wcclibm.h
@@ -0,0 +1,54 @@
1#ifndef _WCCLIBM
2#define _WCCLIBM
3
4#define size_x unsigned long
5#define int32_t int
6#define uint32_t unsigned int
7#define u_int16_t unsigned short
8#define u_int32_t unsigned int
9
10// Often used variables/consts
11#ifdef __STDC__
12static const float
13#else
14static float
15#endif
16fmref_one = 1.0f,
17fmref_half = 5.0000000000e-01f, /* 0x3f000000 */
18fmref_zero = 0.0f,
19fmref_huge = 1.0e30,
20fmref_two8 = 2.5600000000e+02f, /* 0x43800000 */
21fmref_twon8 = 3.9062500000e-03f; /* 0x3b800000 */
22
23// The following defines map the math functions to specialized calls
24#define acos fmref___ieee754_acosf
25#define atan fmref___atanf
26#define cos fmref___cosf
27#define fabs fmref___fabsf
28#define fabsf fmref___fabsf
29#define isinf fmref___isinff
30#define pow fmref___ieee754_powf
31#define sqrt fmref___ieee754_sqrtf
32#define log10 fmref___ieee754_log10f
33#define log fmref___ieee754_logf
34#define sin fmref___sinf
35
36float fmref___atanf(float x);
37float fmref___copysignf(float x, float y);
38float fmref___cosf(float x);
39float fmref___fabsf(float x);
40float fmref___floorf(float x);
41float fmref___ieee754_acosf(float x);
42float fmref___ieee754_powf(float x, float y);
43int32_t fmref___ieee754_rem_pio2f(float x, float *y);
44float fmref___ieee754_sqrtf(float x);
45int fmref___isinff (float x);
46float fmref___kernel_cosf(float x, float y);
47float fmref___kernel_sinf(float x, float y, int iy);
48int fmref___kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2);
49float fmref___scalbnf (float x, int n);
50float fmref___ieee754_logf(float x);
51float fmref___ieee754_log10f(float x);
52float fmref___sinf(float x);
53
54#endif // _WCCLIBM
diff --git a/baseline/source/g723_enc/ChangeLog.txt b/baseline/source/g723_enc/ChangeLog.txt
new file mode 100644
index 0000000..8657026
--- /dev/null
+++ b/baseline/source/g723_enc/ChangeLog.txt
@@ -0,0 +1,34 @@
1File: g723_enc.c
2Original provenience: SUN Microsystems
3
42016-03-02:
5 - Renamed file to g723_enc and removed all g721 dead code
6 - Added TACLeBench header to line 1
7 - Moved SUN license to license.txt
8 - Deleted unused code that was commented out
9 - Renamed functions prepended g723_enc to all function names
10 - Renamed function main to g723_enc_main
11 - Created new function main, calling g723_enc_init, g723_enc_main and
12 returning g723_enc_return
13 - Reordered functions in source code: initialization- and
14 return-value-related functions first, followed by algorithm core
15 functions, followed by main functions
16 - Applied code formatting with astyle as in the example
17
18 2016-03-09:
19 - Renamed global variables, prepended g723_enc_
20 - Removed static keyword from global variables
21 - Renamed datatype from g723_enc_g72x_state to g723_enc_state
22 - Renamed function g723_enc_g72x_init_state to g723_enc_init_state
23
24 2016-05-23:
25 - Added initialization with volatile int
26 - Added check_sum and comparison with expected result
27
282016-05-25
29 - Changed name of struct g723_enc_state to g723_enc_state_t
30 - Changed name of variable state to g723_enc_state
31
322017-07-10
33 - Fixed undefined behaviour introduced by accessing the result of a pointer
34 type cast.
diff --git a/baseline/source/g723_enc/g723_enc.c b/baseline/source/g723_enc/g723_enc.c
new file mode 100644
index 0000000..6f31210
--- /dev/null
+++ b/baseline/source/g723_enc/g723_enc.c
@@ -0,0 +1,887 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 1.x
5
6 Name: g723_enc
7
8 Author: Unknown
9
10 Function: g723 encoder.
11
12 Source: SUN Microsystems
13
14 Changes: The benchmark was changed to use the g723 encoder
15
16 License: "Unrestricted use" (see license.txt)
17
18*/
19
20/*
21 Declaration of data types
22*/
23
24/*
25 The following is the definition of the state structure
26 used by the G.721/G.723 encoder and decoder to preserve their internal
27 state between successive calls. The meanings of the majority
28 of the state structure fields are explained in detail in the
29 CCITT Recommendation G.721. The field names are essentially indentical
30 to variable names in the bit level description of the coding algorithm
31 included in this Recommendation.
32*/
33
34#include "../extra.h"
35struct g723_enc_state_t {
36 long yl; /* Locked or steady state step size multiplier. */
37 short yu; /* Unlocked or non-steady state step size multiplier. */
38 short dms; /* Short term energy estimate. */
39 short dml; /* Long term energy estimate. */
40 short ap; /* Linear weighting coefficient of 'yl' and 'yu'. */
41
42 short a[2]; /* Coefficients of pole portion of prediction filter. */
43 short b[6]; /* Coefficients of zero portion of prediction filter. */
44 short pk[2]; /*
45 Signs of previous two samples of a partially
46 reconstructed signal.
47*/
48 short dq[6]; /*
49 Previous 6 samples of the quantized difference
50 signal represented in an internal floating point
51 format.
52*/
53 short sr[2]; /*
54 Previous 2 samples of the quantized difference
55 signal represented in an internal floating point
56 format.
57*/
58 char td; /* delayed tone detect, new in 1988 version */
59};
60
61
62/*
63 Forward declaration of functions
64*/
65
66int g723_enc_abs( int num );
67void g723_enc_init_state( struct g723_enc_state_t *state_ptr );
68int g723_enc_predictor_zero( struct g723_enc_state_t *state_ptr );
69int g723_enc_fmult( int an, int srn );
70int g723_enc_predictor_pole( struct g723_enc_state_t *state_ptr );
71int g723_enc_step_size( struct g723_enc_state_t *state_ptr );
72int g723_enc_quantize(
73 int d, /* Raw difference signal sample */
74 int y, /* Step size multiplier */
75 short *table, /* quantization table */
76 int size ); /* table size of short integers */
77int g723_enc_reconstruct(
78 int sign, /* 0 for non-negative value */
79 int dqln, /* G.72x codeword */
80 int y ); /* Step size multiplier */
81void g723_enc_update(
82 int code_size, /* distinguish 723_40 with others */
83 int y, /* quantizer step size */
84 int wi, /* scale factor multiplier */
85 int fi, /* for long/short term energies */
86 int dq, /* quantized prediction difference */
87 int sr, /* reconstructed signal */
88 int dqsez, /* difference from 2-pole predictor */
89 struct g723_enc_state_t *state_ptr ); /* coder state pointer */
90int g723_enc_quan(
91 int val,
92 short *table,
93 int size );
94int g723_enc_search(
95 int val,
96 short *table,
97 int size );
98int g723_enc_alaw2linear( unsigned char a_val );
99int g723_enc_ulaw2linear( unsigned char u_val );
100int g723_enc_g723_24_encoder(
101 int sample,
102 int in_coding,
103 struct g723_enc_state_t *state_ptr );
104int g723_enc_pack_output(
105 unsigned char code,
106 int bits );
107
108void g723_enc_init();
109int g723_enc_return();
110void g723_enc_main();
111//int main( void );
112
113/*
114 Declaration of global variables
115*/
116
117struct g723_enc_state_t g723_enc_state;
118
119unsigned int g723_enc_INPUT[256] = {
120 51, 17, 31, 53, 95, 17, 70, 22, 49, 12, 8, 39, 28, 37, 99, 54,
121 77, 65, 77, 78, 83, 15, 63, 31, 35, 92, 52, 40, 61, 79, 94, 87,
122 87, 68, 76, 58, 39, 35, 20, 83, 42, 46, 98, 12, 21, 96, 74, 41,
123 78, 76, 96, 2, 32, 76, 24, 59, 4, 96, 32, 5, 44, 92, 57, 12,
124 57, 25, 50, 23, 48, 41, 88, 43, 36, 38, 4, 16, 52, 70, 9, 40,
125 78, 24, 34, 23, 30, 30, 89, 3, 65, 40, 68, 73, 94, 23, 84, 97,
126 78, 43, 68, 81, 16, 28, 13, 87, 75, 21, 14, 29, 81, 22, 56, 72,
127 19, 99, 25, 43, 76, 86, 90, 98, 39, 43, 12, 46, 24, 99, 65, 61,
128 24, 45, 79, 7, 48, 15, 24, 95, 62, 99, 48, 80, 75, 38, 48, 53,
129 9, 60, 35, 14, 78, 71, 45, 71, 9, 97, 55, 74, 58, 64, 78, 18,
130 30, 28, 69, 29, 57, 42, 30, 44, 57, 49, 61, 42, 13, 25, 3, 98,
131 11, 38, 65, 35, 55, 36, 57, 48, 16, 62, 17, 56, 29, 88, 84, 85,
132 90, 60, 54, 16, 66, 69, 26, 10, 82, 19, 42, 35, 84, 13, 26, 17,
133 48, 38, 50, 50, 35, 53, 12, 52, 61, 74, 56, 34, 80, 59, 26, 67,
134 55, 79, 89, 89, 6, 80, 91, 65, 16, 30, 16, 28, 85, 54, 3, 20,
135 2, 36, 62, 52, 55, 15, 83, 3, 2, 38, 62, 2, 63, 92, 37, 73
136};
137
138
139
140unsigned int g723_enc_OUTPUT[256];
141
142short g723_enc_power2[15] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80,
143 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000
144 };
145
146
147/*
148 Maps G.723_24 code word to reconstructed scale factor normalized log
149 magnitude values.
150*/
151
152short g723_enc_qtab_723_24[3] = {8, 218, 331};
153
154/*
155 Maps G.721 code word to reconstructed scale factor normalized log
156 magnitude values.
157*/
158short g723_enc_dqlntab[16] = { -2048, 4, 135, 213, 273, 323, 373, 425,
159 425, 373, 323, 273, 213, 135, 4, -2048
160 };
161
162/* Maps G.721 code word to log of scale factor multiplier. */
163short g723_enc_witab[16] = { -12, 18, 41, 64, 112, 198, 355, 1122,
164 1122, 355, 198, 112, 64, 41, 18, -12
165 };
166/*
167 Maps G.721 code words to a set of values whose long and short
168 term averages are computed and then compared to give an indication
169 how stationary (steady state) the signal is.
170*/
171short g723_enc_fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00,
172 0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0
173 };
174
175
176/*
177 Declaration of macros
178*/
179
180
181#define AUDIO_ENCODING_ULAW (1) /* ISDN u-law */
182#define AUDIO_ENCODING_ALAW (2) /* ISDN A-law */
183#define AUDIO_ENCODING_LINEAR (3) /* PCM 2's-complement (0-center) */
184
185#define BIAS (0x84) /* Bias for linear code. */
186
187#define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */
188#define QUANT_MASK (0xf) /* Quantization field mask. */
189#define SEG_SHIFT (4) /* Left shift for segment number. */
190#define SEG_MASK (0x70) /* Segment field mask. */
191
192/*
193 Arithmetic math functions
194*/
195
196/*
197 g723_enc_fmult()
198
199 returns the integer product of the 14-bit integer "an" and
200 "floating point" representation (4-bit exponent, 6-bit mantessa) "srn".
201*/
202int g723_enc_fmult(
203 int an,
204 int srn )
205{
206 short anmag, anexp, anmant;
207 short wanexp, wanmant;
208 short retval;
209
210 anmag = ( an > 0 ) ? an : ( ( -an ) & 0x1FFF );
211 anexp = g723_enc_quan( anmag, g723_enc_power2, 3 ) - 6;
212 anmant = ( anmag == 0 ) ? 32 :
213 ( anexp >= 0 ) ? anmag >> anexp : anmag << -anexp;
214 wanexp = anexp + ( ( srn >> 6 ) & 0xF ) - 13;
215
216 wanmant = ( anmant * ( srn & 077 ) + 0x30 ) >> 4;
217 retval = ( wanexp >= 0 ) ? ( ( wanmant << wanexp ) & 0x7FFF ) :
218 ( wanmant >> -wanexp );
219
220 return ( ( ( an ^ srn ) < 0 ) ? -retval : retval );
221}
222
223
224/* Manish Verma */
225int g723_enc_abs( int num )
226{
227 return ( num < 0 ) ? -num : num;
228}
229
230
231/*
232 Algorithm core functions
233*/
234
235
236/*
237 g723_enc_quan()
238
239 quantizes the input val against the table of size short integers.
240 It returns i if table[i - 1] <= val < table[i].
241
242 Using linear search for simple coding.
243*/
244int g723_enc_quan(
245 int val,
246 short *table,
247 int size )
248{
249 int i,
250 j = 0,
251 k = 1;
252
253 _Pragma( "loopbound min 3 max 15" )
254 for ( i = 0; i < size; ++i ) {
255
256 if ( k ) {
257 if ( val < *table++ ) {
258 j = i;
259 k = 0;
260 }
261 }
262 }
263
264 return ( j );
265}
266
267
268/*
269 g723_enc_predictor_zero()
270
271 computes the estimated signal from 6-zero predictor.
272
273*/
274int
275g723_enc_predictor_zero(
276 struct g723_enc_state_t *state_ptr )
277{
278 int i;
279 int sezi;
280
281 sezi = g723_enc_fmult( state_ptr->b[0] >> 2, state_ptr->dq[0] );
282 _Pragma( "loopbound min 5 max 5" )
283 for ( i = 1; i < 6; i++ ) /* ACCUM */
284 sezi += g723_enc_fmult( state_ptr->b[i] >> 2, state_ptr->dq[i] );
285
286 return ( sezi );
287}
288
289
290/*
291 g723_enc_predictor_pole()
292
293 computes the estimated signal from 2-pole predictor.
294
295*/
296int
297g723_enc_predictor_pole(
298 struct g723_enc_state_t *state_ptr )
299{
300 return ( g723_enc_fmult( state_ptr->a[1] >> 2, state_ptr->sr[1] ) +
301 g723_enc_fmult( state_ptr->a[0] >> 2, state_ptr->sr[0] ) );
302}
303
304/*
305 g723_enc_step_size()
306
307 computes the quantization step size of the adaptive quantizer.
308
309*/
310int
311g723_enc_step_size(
312 struct g723_enc_state_t *state_ptr )
313{
314 int y;
315 int dif;
316 int al;
317
318 if ( state_ptr->ap >= 256 )
319 return ( state_ptr->yu );
320 else {
321 y = state_ptr->yl >> 6;
322 dif = state_ptr->yu - y;
323 al = state_ptr->ap >> 2;
324 if ( dif > 0 )
325 y += ( dif * al ) >> 6;
326 else
327 if ( dif < 0 )
328 y += ( dif * al + 0x3F ) >> 6;
329
330 return ( y );
331 }
332}
333
334/*
335 g723_enc_quantize()
336
337 Given a raw sample, 'd', of the difference signal and a
338 quantization step size scale factor, 'y', this routine returns the
339 ADPCM codeword to which that sample gets quantized. The step
340 size scale factor division operation is done in the log base 2 domain
341 as a subtraction.
342*/
343int
344g723_enc_quantize(
345 int d, /* Raw difference signal sample */
346 int y, /* Step size multiplier */
347 short *table, /* quantization table */
348 int size ) /* table size of short integers */
349{
350 short dqm; /* Magnitude of 'd' */
351 short exp; /* Integer part of base 2 log of 'd' */
352 short mant; /* Fractional part of base 2 log */
353 short dl; /* Log of magnitude of 'd' */
354 short dln; /* Step size scale factor normalized log */
355 int i;
356
357 /*
358 LOG
359
360 Compute base 2 log of 'd', and store in 'dl'.
361 */
362 dqm = g723_enc_abs( d );
363 exp = g723_enc_quan( dqm >> 1, g723_enc_power2, 15 );
364 mant = ( ( dqm << 7 ) >> exp ) & 0x7F; /* Fractional portion. */
365 dl = ( exp << 7 ) + mant;
366
367 /*
368 SUBTB
369
370 "Divide" by step size multiplier.
371 */
372 dln = dl - ( y >> 2 );
373
374 /*
375 QUAN
376
377 Obtain codword i for 'd'.
378 */
379 i = g723_enc_quan( dln, table, size );
380
381 if ( d < 0 ) /* take 1's complement of i */
382 return ( ( size << 1 ) + 1 - i );
383 else
384 if ( i == 0 ) /* take 1's complement of 0 */
385 return ( ( size << 1 ) + 1 ); /* new in 1988 */
386 else
387 return ( i );
388}
389/*
390 g723_enc_reconstruct()
391
392 Returns reconstructed difference signal 'dq' obtained from
393 codeword 'i' and quantization step size scale factor 'y'.
394 Multiplication is performed in log base 2 domain as addition.
395*/
396int
397g723_enc_reconstruct(
398 int sign, /* 0 for non-negative value */
399 int dqln, /* G.72x codeword */
400 int y ) /* Step size multiplier */
401{
402 short dql; /* Log of 'dq' magnitude */
403 short dex; /* Integer part of log */
404 short dqt;
405 short dq; /* Reconstructed difference signal sample */
406
407 dql = dqln + ( y >> 2 ); /* ADDA */
408
409 if ( dql < 0 )
410 return ( ( sign ) ? -0x8000 : 0 );
411 else { /* ANTILOG */
412 dex = ( dql >> 7 ) & 15;
413 dqt = 128 + ( dql & 127 );
414 dq = ( dqt << 7 ) >> ( 14 - dex );
415 return ( ( sign ) ? ( dq - 0x8000 ) : dq );
416 }
417}
418
419
420/*
421 g723_enc_update()
422
423 updates the state variables for each output code
424*/
425void
426g723_enc_update(
427 int code_size, /* distinguish 723_40 with others */
428 int y, /* quantizer step size */
429 int wi, /* scale factor multiplier */
430 int fi, /* for long/short term energies */
431 int dq, /* quantized prediction difference */
432 int sr, /* reconstructed signal */
433 int dqsez, /* difference from 2-pole predictor */
434 struct g723_enc_state_t *state_ptr ) /* coder state pointer */
435{
436 int cnt;
437 short mag, exp; /* Adaptive predictor, FLOAT A */
438 short a2p; /* LIMC */
439 short a1ul; /* UPA1 */
440 short pks1; /* UPA2 */
441 short fa1;
442 char tr; /* tone/transition detector */
443 short ylint, thr2, dqthr;
444 short ylfrac, thr1;
445 short pk0;
446
447 pk0 = ( dqsez < 0 ) ? 1 : 0; /* needed in updating predictor poles */
448
449 mag = dq & 0x7FFF; /* prediction difference magnitude */
450 /* TRANS */
451 ylint = state_ptr->yl >> 15; /* exponent part of yl */
452 ylfrac = ( state_ptr->yl >> 10 ) & 0x1F; /* fractional part of yl */
453 thr1 = ( 32 + ylfrac ) << ylint; /* threshold */
454 thr2 = ( ylint > 9 ) ? 31 << 10 : thr1; /* limit thr2 to 31 << 10 */
455 dqthr = ( thr2 + ( thr2 >> 1 ) ) >> 1; /* dqthr = 0.75 * thr2 */
456 if ( state_ptr->td == 0 ) /* signal supposed voice */
457 tr = 0;
458 else
459 if ( mag <= dqthr ) /* supposed data, but small mag */
460 tr = 0; /* treated as voice */
461 else /* signal is data (modem) */
462 tr = 1;
463
464 /*
465 Quantizer scale factor adaptation.
466 */
467
468 /* FUNCTW & FILTD & DELAY */
469 /* update non-steady state step size multiplier */
470 state_ptr->yu = y + ( ( wi - y ) >> 5 );
471
472 /* LIMB */
473 if ( state_ptr->yu < 544 ) /* 544 <= yu <= 5120 */
474 state_ptr->yu = 544;
475 else
476 if ( state_ptr->yu > 5120 )
477 state_ptr->yu = 5120;
478
479 /* FILTE & DELAY */
480 /* update steady state step size multiplier */
481 state_ptr->yl += state_ptr->yu + ( ( -state_ptr->yl ) >> 6 );
482
483 /*
484 Adaptive predictor coefficients.
485 */
486 if ( tr == 1 ) { /* reset a's and b's for modem signal */
487 state_ptr->a[0] = 0;
488 state_ptr->a[1] = 0;
489 state_ptr->b[0] = 0;
490 state_ptr->b[1] = 0;
491 state_ptr->b[2] = 0;
492 state_ptr->b[3] = 0;
493 state_ptr->b[4] = 0;
494 state_ptr->b[5] = 0;
495 } else { /* update a's and b's */
496 pks1 = pk0 ^ state_ptr->pk[0]; /* UPA2 */
497
498 /* update predictor pole a[1] */
499 a2p = state_ptr->a[1] - ( state_ptr->a[1] >> 7 );
500 if ( dqsez != 0 ) {
501 fa1 = ( pks1 ) ? state_ptr->a[0] : -state_ptr->a[0];
502 if ( fa1 < -8191 ) /* a2p = function of fa1 */
503 a2p -= 0x100;
504 else
505 if ( fa1 > 8191 )
506 a2p += 0xFF;
507 else
508 a2p += fa1 >> 5;
509 if ( pk0 ^ state_ptr->pk[1] )
510 /* LIMC */
511 if ( a2p <= -12160 )
512 a2p = -12288;
513 else
514 if ( a2p >= 12416 )
515 a2p = 12288;
516 else
517 a2p -= 0x80;
518 else
519 if ( a2p <= -12416 )
520 a2p = -12288;
521 else
522 if ( a2p >= 12160 )
523 a2p = 12288;
524 else
525 a2p += 0x80;
526
527 }
528
529 /* TRIGB & DELAY */
530 state_ptr->a[1] = a2p;
531
532 /* UPA1 */
533 /* update predictor pole a[0] */
534 state_ptr->a[0] -= state_ptr->a[0] >> 8;
535 if ( dqsez != 0 ) {
536 if ( pks1 == 0 )
537 state_ptr->a[0] += 192;
538 else
539 state_ptr->a[0] -= 192;
540 }
541
542 /* LIMD */
543 a1ul = 15360 - a2p;
544 if ( state_ptr->a[0] < -a1ul )
545 state_ptr->a[0] = -a1ul;
546 else
547 if ( state_ptr->a[0] > a1ul )
548 state_ptr->a[0] = a1ul;
549
550 /* UPB : update predictor zeros b[6] */
551 _Pragma( "loopbound min 6 max 6" )
552 for ( cnt = 0; cnt < 6; cnt++ ) {
553 if ( code_size == 5 ) /* for 40Kbps G.723 */
554 state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9;
555 else /* for G.721 and 24Kbps G.723 */
556 state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8;
557 if ( dq & 0x7FFF ) { /* XOR */
558 if ( ( dq ^ state_ptr->dq[cnt] ) >= 0 )
559 state_ptr->b[cnt] += 128;
560 else
561 state_ptr->b[cnt] -= 128;
562 }
563
564 }
565 }
566
567 _Pragma( "loopbound min 5 max 5" )
568 for ( cnt = 5; cnt > 0; cnt-- )
569 state_ptr->dq[cnt] = state_ptr->dq[cnt - 1];
570 /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
571 if ( mag == 0 )
572 state_ptr->dq[0] = ( dq >= 0 ) ? 0x20 : 0xFC20;
573 else {
574 exp = g723_enc_quan( mag, g723_enc_power2, 15 );
575 state_ptr->dq[0] = ( dq >= 0 ) ?
576 ( exp << 6 ) + ( ( mag << 6 ) >> exp ) :
577 ( exp << 6 ) + ( ( mag << 6 ) >> exp ) - 0x400;
578
579 }
580
581 state_ptr->sr[1] = state_ptr->sr[0];
582 /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
583 if ( sr == 0 )
584 state_ptr->sr[0] = 0x20;
585 else
586 if ( sr > 0 ) {
587 exp = g723_enc_quan( sr, g723_enc_power2, 15 );
588 state_ptr->sr[0] = ( exp << 6 ) + ( ( sr << 6 ) >> exp );
589 } else
590 if ( sr > -32768 ) {
591 mag = -sr;
592 exp = g723_enc_quan( mag, g723_enc_power2, 15 );
593 state_ptr->sr[0] = ( exp << 6 ) + ( ( mag << 6 ) >> exp ) - 0x400;
594 } else
595 state_ptr->sr[0] = 0xFC20;
596
597 /* DELAY A */
598 state_ptr->pk[1] = state_ptr->pk[0];
599 state_ptr->pk[0] = pk0;
600
601 /* TONE */
602 if ( tr == 1 ) /* this sample has been treated as data */
603 state_ptr->td = 0; /* next one will be treated as voice */
604 else
605 if ( a2p < -11776 ) /* small sample-to-sample correlation */
606 state_ptr->td = 1; /* signal may be data */
607 else /* signal is voice */
608 state_ptr->td = 0;
609
610 /*
611 Adaptation speed control.
612 */
613 state_ptr->dms += ( fi - state_ptr->dms ) >> 5; /* FILTA */
614 state_ptr->dml += ( ( ( fi << 2 ) - state_ptr->dml ) >> 7 ); /* FILTB */
615
616 if ( tr == 1 )
617 state_ptr->ap = 256;
618 else
619 if ( y < 1536 ) /* SUBTC */
620 state_ptr->ap += ( 0x200 - state_ptr->ap ) >> 4;
621 else
622 if ( state_ptr->td == 1 )
623 state_ptr->ap += ( 0x200 - state_ptr->ap ) >> 4;
624 else
625 if ( g723_enc_abs( ( state_ptr->dms << 2 ) - state_ptr->dml ) >=
626 ( state_ptr->dml >> 3 ) )
627 state_ptr->ap += ( 0x200 - state_ptr->ap ) >> 4;
628 else
629 state_ptr->ap += ( -state_ptr->ap ) >> 4;
630
631}
632
633
634/*
635 g723_enc_alaw2linear() - Convert an A-law value to 16-bit linear PCM
636
637*/
638int
639g723_enc_alaw2linear(
640 unsigned char a_val )
641{
642 int t;
643 int seg;
644
645 a_val ^= 0x55;
646
647 t = ( a_val & QUANT_MASK ) << 4;
648 seg = ( ( unsigned )a_val & SEG_MASK ) >> SEG_SHIFT;
649 switch ( seg ) {
650 case 0:
651 t += 8;
652 break;
653 case 1:
654 t += 0x108;
655 break;
656 default:
657 t += 0x108;
658 t <<= seg - 1;
659 }
660 return ( ( a_val & SIGN_BIT ) ? t : -t );
661}
662
663
664/*
665 g723_enc_ulaw2linear() - Convert a u-law value to 16-bit linear PCM
666
667 First, a biased linear code is derived from the code word. An unbiased
668 output can then be obtained by subtracting 33 from the biased code.
669
670 Note that this function expects to be passed the complement of the
671 original code word. This is in keeping with ISDN conventions.
672*/
673int
674g723_enc_ulaw2linear(
675 unsigned char u_val )
676{
677 int t;
678
679 /* Complement to obtain normal u-law value. */
680 u_val = ~u_val;
681
682 /*
683 Extract and bias the quantization bits. Then
684 shift up by the segment number and subtract out the bias.
685 */
686 t = ( ( u_val & QUANT_MASK ) << 3 ) + BIAS;
687 t <<= ( ( unsigned int )u_val & SEG_MASK ) >> SEG_SHIFT;
688
689 return ( ( u_val & SIGN_BIT ) ? ( BIAS - t ) : ( t - BIAS ) );
690}
691
692
693/*
694 g723_enc_g723_24_encoder()
695
696 Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code.
697 Returns -1 if invalid input coding value.
698*/
699int
700g723_enc_g723_24_encoder(
701 int sl,
702 int in_coding,
703 struct g723_enc_state_t *state_ptr )
704{
705 short sei, sezi, se, sez; /* ACCUM */
706 short d; /* SUBTA */
707 short y; /* MIX */
708 short sr; /* ADDB */
709 short dqsez; /* ADDC */
710 short dq, i;
711
712 switch ( in_coding ) { /* linearize input sample to 14-bit PCM */
713 case AUDIO_ENCODING_ALAW:
714 sl = g723_enc_alaw2linear( sl ) >> 2;
715 break;
716 case AUDIO_ENCODING_ULAW:
717 sl = g723_enc_ulaw2linear( sl ) >> 2;
718 break;
719 case AUDIO_ENCODING_LINEAR:
720 sl >>= 2; /* sl of 14-bit dynamic range */
721 break;
722 default:
723 return ( -1 );
724 }
725
726 sezi = g723_enc_predictor_zero( state_ptr );
727 sez = sezi >> 1;
728 sei = sezi + g723_enc_predictor_pole( state_ptr );
729 se = sei >> 1; /* se = estimated signal */
730
731 d = sl - se; /* d = estimation diff. */
732
733 /* quantize prediction difference d */
734 y = g723_enc_step_size( state_ptr ); /* quantizer step size */
735 i = g723_enc_quantize( d, y, g723_enc_qtab_723_24, 3 ); /* i = ADPCM code */
736 dq = g723_enc_reconstruct( i & 4, g723_enc_dqlntab[i], y ); /* quantized diff. */
737
738 sr = ( dq < 0 ) ? se - ( dq & 0x3FFF ) : se + dq; /* reconstructed signal */
739
740 dqsez = sr + sez - se; /* pole prediction diff. */
741
742 g723_enc_update( 3, y, g723_enc_witab[i], g723_enc_fitab[i], dq, sr, dqsez, state_ptr );
743
744 return ( i );
745}
746
747/*
748 Pack output codes into bytes and write them to stdout.
749 Returns 1 if there is residual output, else returns 0.
750*/
751int
752g723_enc_pack_output(
753 unsigned char code,
754 int bits )
755{
756 static unsigned int out_buffer = 0;
757 static int out_bits = 0;
758 unsigned char out_byte;
759 static int i = 0;
760
761 out_buffer |= ( code << out_bits );
762 out_bits += bits;
763 if ( out_bits >= 8 ) {
764 out_byte = out_buffer & 0xff;
765 out_bits -= 8;
766 out_buffer >>= 8;
767 //fwrite(&out_byte, sizeof (char), 1, fp_out);
768 //fwrite(&out_byte, 1, 1, fp_out);
769 g723_enc_OUTPUT[i] = out_byte;
770 i = i + 1;
771 }
772
773 return ( out_bits > 0 );
774}
775
776/*
777 Initialization- and return-value-related functions
778*/
779
780/*
781 g723_enc_init_state()
782
783 This routine initializes and/or resets the g72x_state structure
784 pointed to by 'state_ptr'.
785 All the initial state values are specified in the CCITT G.721 document.
786*/
787void
788g723_enc_init_state(
789 struct g723_enc_state_t *state_ptr )
790{
791 int cnta;
792
793 state_ptr->yl = 34816;
794 state_ptr->yu = 544;
795 state_ptr->dms = 0;
796 state_ptr->dml = 0;
797 state_ptr->ap = 0;
798
799 _Pragma( "loopbound min 2 max 2" )
800 for ( cnta = 0; cnta < 2; cnta++ ) {
801 state_ptr->a[cnta] = 0;
802 state_ptr->pk[cnta] = 0;
803 state_ptr->sr[cnta] = 32;
804 }
805 _Pragma( "loopbound min 6 max 6" )
806 for ( cnta = 0; cnta < 6; cnta++ ) {
807 state_ptr->b[cnta] = 0;
808 state_ptr->dq[cnta] = 32;
809 }
810 state_ptr->td = 0;
811}
812
813
814void g723_enc_init()
815{
816 int i;
817 volatile int x = 0;
818 g723_enc_init_state( &g723_enc_state );
819
820 _Pragma( "loopbound min 256 max 256" )
821 for ( i = 0; i < 256; i++ ) {
822 g723_enc_INPUT[i] += x;
823 }
824}
825
826
827int g723_enc_return()
828{
829 int i;
830 int check_sum = 0;
831
832 _Pragma( "loopbound min 256 max 256" )
833 for ( i = 0; i < 256; i++ ) {
834 check_sum += g723_enc_OUTPUT[i];
835 }
836
837 return ( check_sum != 24284 );
838}
839
840/*
841 Main functions
842*/
843
844void _Pragma( "entrypoint" ) g723_enc_main()
845{
846// struct g72x_state state;
847 short sample_short; //mv
848 unsigned char code;
849 int resid;
850 int in_coding;
851 short *in_buf;
852 int enc_bits;
853 int i = 0;
854
855 enc_bits = 3;
856 in_coding = AUDIO_ENCODING_ALAW;
857 in_buf = &sample_short;
858
859 _Pragma( "loopbound min 256 max 256" )
860 for ( i = 0; i < 256; i++ ) {
861 *in_buf = g723_enc_INPUT[i];
862 code = g723_enc_g723_24_encoder( sample_short, in_coding, &g723_enc_state );
863 resid = g723_enc_pack_output( code, enc_bits );
864 }
865
866 /* Write zero codes until all residual codes are written out */
867 _Pragma( "loopbound min 0 max 0" )
868 while ( resid )
869 resid = g723_enc_pack_output( 0, enc_bits );
870}
871
872
873int main( int argc, char **argv )
874{
875 //SET_UP
876 int jobsComplete;
877 int maxJobs=9;
878 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
879 // START_LOOP
880 g723_enc_init();
881 g723_enc_main();
882 // STOP_LOOP
883 }
884 //WRITE_TO_FILE
885 return ( g723_enc_return() );
886}
887
diff --git a/baseline/source/g723_enc/license.txt b/baseline/source/g723_enc/license.txt
new file mode 100644
index 0000000..80cf21f
--- /dev/null
+++ b/baseline/source/g723_enc/license.txt
@@ -0,0 +1,23 @@
1This source code is a product of Sun Microsystems, Inc. and is provided
2for unrestricted use. Users may copy or modify this source code without
3charge.
4
5SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
6THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
7PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
8
9Sun source code is provided with no support and without any obligation on
10the part of Sun Microsystems, Inc. to assist in its use, correction,
11modification or enhancement.
12
13SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
14INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
15OR ANY PART THEREOF.
16
17In no event will Sun Microsystems, Inc. be liable for any lost revenue
18or profits or other special, indirect and consequential damages, even if
19Sun has been advised of the possibility of such damages.
20
21Sun Microsystems, Inc.
222550 Garcia Avenue
23Mountain View, California 94043 \ No newline at end of file
diff --git a/baseline/source/gsm_dec/COPYRIGHT b/baseline/source/gsm_dec/COPYRIGHT
new file mode 100644
index 0000000..eba0e52
--- /dev/null
+++ b/baseline/source/gsm_dec/COPYRIGHT
@@ -0,0 +1,16 @@
1Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
2Technische Universitaet Berlin
3
4Any use of this software is permitted provided that this notice is not
5removed and that neither the authors nor the Technische Universitaet Berlin
6are deemed to have made any representations as to the suitability of this
7software for any purpose nor are held responsible for any defects of
8this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
9
10As a matter of courtesy, the authors request to be informed about uses
11this software has found, about bugs in this software, and about any
12improvements that may be of general interest.
13
14Berlin, 28.11.1994
15Jutta Degener
16Carsten Bormann
diff --git a/baseline/source/gsm_dec/ChangeLog.txt b/baseline/source/gsm_dec/ChangeLog.txt
new file mode 100644
index 0000000..3d03d86
--- /dev/null
+++ b/baseline/source/gsm_dec/ChangeLog.txt
@@ -0,0 +1,87 @@
1File: gsm_dec.c
2Original provenience: Jutta Degener and Carsten Bormann,
3 Technische Universitaet Berlin
4
52017-04-18:
6- Annotated gsm_dec_main as entry-point for timing analysis
7
82016-03-07:
9- Add generic TACLeBench header
10- Split code into gsm.h, data.h, config.h, private.h, proto.h
11- Remove code undefined through macros and unnecessay include guards
12- Rename function 'decode' to 'gsm_decode_main'
13- Add functions 'gsm_decode_init', 'gsm_decode_return'
14- Remove line: /* lpc.c */
15- Remove line: #undef P
162016-04-27:
17- Rename benchmark to from 'gsm_decode' to 'gsm_dec'
18- Remove unused content of proto.h and config.h
19- Remove usages of prototype macros 'P' and 'GSM_P' and checks if standard
20 prototypes are availables: use standard prototypes
21- Remove functions only defined for debugging purpose
22- Remove block around "#ifndef GSM_TABLE_C", since 'GSM_TABLE_C' is defined,
23 remove define of 'GSM_TABLE_C'
24- Define 'SASR' macro once, remove blocks if 'SASR' is not defined
25- Remove variables 'f_fast' and 'f_verbose' (both set to 0). Consequently,
26 remove unused 'function gsm_option' and the defines 'GSM_OPT_VERBOSE' and
27 'GSM_OPT_FAST' only used inside 'gsm_option'
28- Remove unused variables 'verbose' and 'fast' from 'struct gsm_state'
29- Remove unused function declarations 'gsm_explode' and 'gsm_implode'
30- Remove unused defines 'GSM_PATCHLEVEL', 'GSM_MINOR', and 'GSM_MAJOR'
31- Remove irrelevant comment "// OK" in line calling function 'create'
32- Remove unused variable 'd' of type 'word*' from 'gsm_dec_main'
33- Remove unused parameter 'struct gsm_state * S' of function 'Gsm_RPE_Decoding'
34- Remove block in function 'Gsm_Short_Term_Synthesis_Filter' that is compiled
35 when 'FAST' macro is defined (per default not activated)
36- Replace macro 'FILTER' by its expanded value 'Short_term_synthesis_filtering'
37 in function 'Gsm_Short_Term_Synthesis_Filter'
38- Remove unused 'int j' in function 'Short_term_synthesis_filtering'
39- Make iteration variable 'i' in function 'create' type 'unsigned int' to avoid
40 compiler warnings
41- Use rewritten Duff's device for WCET analysis, remove commented original
42 varinat, keep comment in code marking this change
43- Remove unused variable 'temp_sat' of type 'longword' in function
44 'APCM_inverse_quantization'
45- Remove unused parameter 'S' of type 'struct gsm_state*' in function
46 'Gsm_RPE_Decoding' and the respective calls of this function
47- Remove unused function
48 'Gsm_Update_of_reconstructed_short_time_residual_signal'
49- Remove code block activatable by defining 'USE_TABLE_MUL', since macro never
50 defined
51- Rename global variable 'gsmstate' to 'gsm_dec_state'
52- Remove lines with #undef GSM_P
53- Update function 'create': add void parameter to defintion
54- Introduce 'gsm_dec_state_ptr' that points to 'gsm_dec_state', which is
55 initialized in function 'create'. This is required to maintain the void-void
56 signature for 'gsm_dec_init' and 'gsm_dec_main'.
57- Remove unused commented version of 'GSM_MULT_R'
58- Move macros 'GSM_MULT|ADD|SUB' into separate header
59- Give include guards unique names: prefix with 'GSM_DEC_'
60- Remove unused functions 'gsm_div', 'gsm_add', 'gsm_mult', 'gsm_mult_r',
61 'gsm_abs', 'gsm_L_mult', 'gsm_L_add', 'gsm_L_sub', 'gsm_norm' (and array
62 'bitoff' used in this function), 'gsm_L_asl', 'gsm_L_asr'
63- Rename 'Gsm_Short_Term_Synthesis_Filter' to
64 'gsm_dec_Short_Term_Synthesis_Filter'
65- Rename 'Gsm_RPE_Decoding' to 'gsm_dec_RPE_Decoding'
66- Rename 'Gsm_Long_Term_Synthesis_Filtering' to
67 'gsm_dec_Long_Term_Synthesis_Filtering'
68- Rename 'Gsm_Decoder' to 'gsm_dec_Decoder'
69- Remove unused function declaration of 'decode'
70- Prefix all global symbols with benchmark name
71- Store return value of in introduced variable 'gsm_dec_result', which is
72 volatile to avoid optimizations on this variable
73- Avoid constant propagation through addition with volatile variable on each
74 element of the 'gsm_dec_state' structure
752016-05-10:
76- Change coefficients for variable 'B' of 'STEP' macro in function
77 'gsm_dec_Decoding_of_the_coded_Log_Area_Ratios' from negative to positive,
78 since bit shifts of signed values are undefined
79- Fix comment why variable 'long ltmp' ist required in function
80 'gsm_dec_Decoding_of_the_coded_Log_Area_Ratios'
81- Apply code formatting with with astyle
82- Manual text formattings: removal of empty lines in function prototypes,
83- Indent all multi-line block comments by two spaces
842016-05-10:
85- Remove 'static' declaration of global variables and functions
86- Remove unused global variables 'gsm_DLB', 'gsm_INVA', 'gsm_MAC', 'gsm_MIC',
87 'gsm_A', 'gsm_B', 'gsm_H'
diff --git a/baseline/source/gsm_dec/add.h b/baseline/source/gsm_dec/add.h
new file mode 100644
index 0000000..ffe79b7
--- /dev/null
+++ b/baseline/source/gsm_dec/add.h
@@ -0,0 +1,55 @@
1#ifndef GSM_DEC_ADD_H
2#define GSM_DEC_ADD_H
3
4#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \
5 (SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
6
7# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \
8 (SASR( ((longword)(a) * (longword)(b)), 15 ))
9
10# define GSM_L_MULT(a, b) /* word a, word b */ \
11 (((longword)(a) * (longword)(b)) << 1)
12
13# define GSM_L_ADD(a, b) \
14 ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
15 : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
16 >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
17 : ((b) <= 0 ? (a) + (b) \
18 : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \
19 ? MAX_LONGWORD : utmp))
20
21/*
22 # define GSM_ADD(a, b) \
23 ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \
24 ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
25*/
26/* Nonportable, but faster: */
27
28#define GSM_ADD(a, b) \
29 ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \
30 MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
31
32# define GSM_SUB(a, b) \
33 ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \
34 ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
35
36# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
37
38#define saturate(x) \
39 ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
40
41/* Use these if necessary:
42
43 # define GSM_MULT_R(a, b) gsm_mult_r(a, b)
44 # define GSM_MULT(a, b) gsm_mult(a, b)
45 # define GSM_L_MULT(a, b) gsm_L_mult(a, b)
46
47 # define GSM_L_ADD(a, b) gsm_L_add(a, b)
48 # define GSM_ADD(a, b) gsm_add(a, b)
49 # define GSM_SUB(a, b) gsm_sub(a, b)
50
51 # define GSM_ABS(a) gsm_abs(a)
52
53*/
54
55#endif /* GSM_DEC_ADD_H */
diff --git a/baseline/source/gsm_dec/data.h b/baseline/source/gsm_dec/data.h
new file mode 100644
index 0000000..81bf20d
--- /dev/null
+++ b/baseline/source/gsm_dec/data.h
@@ -0,0 +1,865 @@
1#ifndef GSM_DEC_DATA_H
2#define GSM_DEC_DATA_H
3
4gsm_signal gsm_dec_pcmdata[] = {
5 ( short )0x0000, ( short )0x0000, ( short )0x0010, ( short )0x0010,
6 ( short )0x0010, ( short )0x0020, ( short )0x0020, ( short )0x0018,
7 ( short )0x0028, ( short )0x0020, ( short )0x0020, ( short )0x0028,
8 ( short )0x0028, ( short )0x0020, ( short )0x0030, ( short )0x0030,
9 ( short )0x0028, ( short )0x0010, ( short )0x0008, ( short )0x0000,
10 ( short )0x0050, ( short )0x0060, ( short )0x0058, ( short )0x00D0,
11 ( short )0x00E0, ( short )0x00D0, ( short )0x0118, ( short )0x0128,
12 ( short )0x0118, ( short )0x0128, ( short )0x0110, ( short )0x0100,
13 ( short )0x00A0, ( short )0x0058, ( short )0x0048, ( short )0x0058,
14 ( short )0x0060, ( short )0x0058, ( short )0x0050, ( short )0x0048,
15 ( short )0x0040, ( short )0x0030, ( short )0x0020, ( short )0x0010,
16 ( short )0x0008, ( short )0xFFF8, ( short )0xFFE8, ( short )0xFFE0,
17 ( short )0xFFD8, ( short )0xFFC8, ( short )0xFFC0, ( short )0xFFC0,
18 ( short )0xFF98, ( short )0xFF78, ( short )0xFF78, ( short )0xFFC8,
19 ( short )0x0000, ( short )0x0010, ( short )0x0040, ( short )0x0060,
20 ( short )0x0068, ( short )0x0078, ( short )0x0078, ( short )0x0070,
21 ( short )0x00A8, ( short )0x00C8, ( short )0x00C8, ( short )0x00E0,
22 ( short )0x00F0, ( short )0x00E8, ( short )0x00F8, ( short )0x00F8,
23 ( short )0x00F0, ( short )0x00E0, ( short )0x00C8, ( short )0x00B8,
24 ( short )0x00E8, ( short )0x0100, ( short )0x00F8, ( short )0x00E8,
25 ( short )0x00D8, ( short )0x00C0, ( short )0x00A8, ( short )0x0020,
26 ( short )0xFFC0, ( short )0xFFA0, ( short )0xFFA0, ( short )0xFFA8,
27 ( short )0xFFB0, ( short )0xFFD0, ( short )0xFFF8, ( short )0x0000,
28 ( short )0x0020, ( short )0x0030, ( short )0x0030, ( short )0x0030,
29 ( short )0x0028, ( short )0x0020, ( short )0xFFF0, ( short )0xFFD0,
30 ( short )0xFFC8, ( short )0xFFC8, ( short )0xFFD0, ( short )0xFFD8,
31 ( short )0xFFE8, ( short )0xFFF8, ( short )0xFFF8, ( short )0x0008,
32 ( short )0x0018, ( short )0x0018, ( short )0x0078, ( short )0x00B8,
33 ( short )0x00C0, ( short )0x0100, ( short )0x0130, ( short )0x0128,
34 ( short )0x0108, ( short )0x00D8, ( short )0x00C0, ( short )0x0078,
35 ( short )0x0038, ( short )0x0020, ( short )0x0020, ( short )0x0000,
36 ( short )0xFFE0, ( short )0xFFE0, ( short )0xFFD8, ( short )0xFFC8,
37 ( short )0xFFC8, ( short )0xFFA0, ( short )0xFF88, ( short )0xFF98,
38 ( short )0xFF80, ( short )0xFF70, ( short )0xFF80, ( short )0xFF78,
39 ( short )0xFF78, ( short )0xFF90, ( short )0xFF80, ( short )0xFF78,
40 ( short )0xFF78, ( short )0xFF50, ( short )0xFF30, ( short )0xFF50,
41 ( short )0xFF38, ( short )0xFF30, ( short )0xFF40, ( short )0xFF58,
42 ( short )0xFF70, ( short )0xFF80, ( short )0xFF50, ( short )0xFF38,
43 ( short )0xFF40, ( short )0xFF18, ( short )0xFF00, ( short )0xFF08,
44 ( short )0xFF40, ( short )0xFF68, ( short )0xFF80, ( short )0xFF88,
45 ( short )0xFF88, ( short )0xFF88, ( short )0xFF88, ( short )0xFFB8,
46 ( short )0xFFE0, ( short )0xFFF0, ( short )0xFFD0, ( short )0xFFB8,
47 ( short )0xFFB8, ( short )0xFF90, ( short )0xFF70, ( short )0xFF70,
48 ( short )0xFF50, ( short )0xFF40, ( short )0xFF40, ( short )0xFF58,
49 ( short )0xFF70, ( short )0xFF80, ( short )0xFFC8, ( short )0x0000,
50 ( short )0x0018, ( short )0x0030, ( short )0x0048, ( short )0x0048,
51 ( short )0x0028, ( short )0x0008, ( short )0xFFF8, ( short )0xFFD8,
52 ( short )0xFFC8, ( short )0xFFB8, ( short )0xFF98, ( short )0xFF78,
53 ( short )0xFF70, ( short )0xFFF0, ( short )0x0058, ( short )0x0088,
54 ( short )0x00B8, ( short )0x00D0, ( short )0x00D8, ( short )0x00E8,
55 ( short )0x0138, ( short )0x0160, ( short )0x0158, ( short )0x0170,
56 ( short )0x0178, ( short )0x0160, ( short )0x0168, ( short )0x0160,
57 ( short )0x0140, ( short )0x0118, ( short )0x00F0, ( short )0x00C8,
58 ( short )0x0098, ( short )0x0078, ( short )0x0060, ( short )0x0018,
59 ( short )0xFFC0, ( short )0xFF90, ( short )0xFF48, ( short )0xFF00,
60 ( short )0xFEE8, ( short )0xFEC8, ( short )0xFEB8, ( short )0xFEB8,
61 ( short )0xFEA0, ( short )0xFE88, ( short )0xFE80, ( short )0xFEB8,
62 ( short )0xFEF8, ( short )0xFF38, ( short )0xFFA0, ( short )0xFFE8,
63 ( short )0x0008, ( short )0x0030, ( short )0x0058, ( short )0x0068,
64 ( short )0x0068, ( short )0x0070, ( short )0x0068, ( short )0x0050,
65 ( short )0x0040, ( short )0x0040, ( short )0x0020, ( short )0x0000,
66 ( short )0xFFE8, ( short )0xFFF0, ( short )0xFFF8, ( short )0xFFF8,
67 ( short )0x0038, ( short )0x0068, ( short )0x0078, ( short )0x0038,
68 ( short )0x0008, ( short )0xFFF0, ( short )0xFFE0, ( short )0xFFD8,
69 ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFD0, ( short )0xFFC8,
70 ( short )0x0000, ( short )0x0030, ( short )0x0048, ( short )0x0068,
71 ( short )0x0080, ( short )0x0088, ( short )0x0088, ( short )0x0088,
72 ( short )0x0088, ( short )0x0088, ( short )0x0088, ( short )0x0078,
73 ( short )0x0098, ( short )0x00B0, ( short )0x00B8, ( short )0x0098,
74 ( short )0x0070, ( short )0x0058, ( short )0x0060, ( short )0x0078,
75 ( short )0x00A8, ( short )0x00B8, ( short )0x00A8, ( short )0x00A0,
76 ( short )0x0080, ( short )0x0068, ( short )0x0060, ( short )0x0058,
77 ( short )0x0048, ( short )0x0030, ( short )0x0038, ( short )0x0038,
78 ( short )0x0030, ( short )0x0050, ( short )0x0058, ( short )0x0060,
79 ( short )0x0030, ( short )0x0008, ( short )0xFFF8, ( short )0xFF90,
80 ( short )0xFF48, ( short )0xFF28, ( short )0xFF10, ( short )0xFEF8,
81 ( short )0xFEF0, ( short )0xFED8, ( short )0xFEB0, ( short )0xFEB0,
82 ( short )0xFEA8, ( short )0xFEB8, ( short )0xFED8, ( short )0xFEF8,
83 ( short )0xFF10, ( short )0xFF20, ( short )0xFF40, ( short )0xFF58,
84 ( short )0xFF80, ( short )0xFFA0, ( short )0xFFB8, ( short )0xFFC8,
85 ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFF0, ( short )0x0048,
86 ( short )0x0098, ( short )0x00B0, ( short )0x0068, ( short )0x0018,
87 ( short )0xFFF8, ( short )0xFFE8, ( short )0xFFF0, ( short )0xFFF8,
88 ( short )0x0020, ( short )0x0038, ( short )0x0038, ( short )0x0050,
89 ( short )0x0068, ( short )0x0070, ( short )0x0068, ( short )0x0060,
90 ( short )0x0060, ( short )0x0038, ( short )0x0020, ( short )0x0018,
91 ( short )0x0040, ( short )0x0060, ( short )0x0068, ( short )0x0040,
92 ( short )0x0010, ( short )0x0000, ( short )0xFFB0, ( short )0xFF78,
93 ( short )0xFF70, ( short )0xFF90, ( short )0xFFA8, ( short )0xFFC8,
94 ( short )0xFF98, ( short )0xFF50, ( short )0xFF50, ( short )0xFF50,
95 ( short )0xFF58, ( short )0xFF68, ( short )0xFF48, ( short )0xFF20,
96 ( short )0xFF18, ( short )0xFF38, ( short )0xFF60, ( short )0xFF70,
97 ( short )0xFF80, ( short )0xFF98, ( short )0xFFA0, ( short )0xFFB8,
98 ( short )0xFFD0, ( short )0xFFE0, ( short )0x0018, ( short )0x0048,
99 ( short )0x0058, ( short )0x00B0, ( short )0x00F8, ( short )0x0108,
100 ( short )0x0118, ( short )0x0120, ( short )0x0118, ( short )0x0130,
101 ( short )0x0148, ( short )0x0140, ( short )0x0130, ( short )0x0120,
102 ( short )0x0108, ( short )0x0098, ( short )0x0038, ( short )0x0018,
103 ( short )0xFFD0, ( short )0xFF90, ( short )0xFF80, ( short )0xFF58,
104 ( short )0xFF38, ( short )0xFF30, ( short )0xFF48, ( short )0xFF68,
105 ( short )0xFF78, ( short )0xFF88, ( short )0xFFB8, ( short )0xFFD8,
106 ( short )0xFFE8, ( short )0xFFD8, ( short )0xFFF0, ( short )0x0010,
107 ( short )0x0020, ( short )0x0020, ( short )0x0018, ( short )0x0028,
108 ( short )0x0030, ( short )0x0030, ( short )0x0038, ( short )0x0060,
109 ( short )0x0080, ( short )0x0080, ( short )0x00B0, ( short )0x00D8,
110 ( short )0x00D0, ( short )0x00B8, ( short )0x00A8, ( short )0x00A8,
111 ( short )0x00A0, ( short )0x0090, ( short )0x0078, ( short )0x0070,
112 ( short )0x0068, ( short )0x0048, ( short )0x0018, ( short )0x0008,
113 ( short )0x0008, ( short )0x0000, ( short )0x0000, ( short )0xFFE8,
114 ( short )0xFFB0, ( short )0xFF90, ( short )0xFF88, ( short )0xFF70,
115 ( short )0xFF60, ( short )0xFF60, ( short )0xFF90, ( short )0xFFC0,
116 ( short )0xFFD0, ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFE8,
117 ( short )0x0018, ( short )0x0050, ( short )0x0058, ( short )0x0030,
118 ( short )0x0008, ( short )0x0000, ( short )0x0018, ( short )0x0038,
119 ( short )0x0038, ( short )0x0048, ( short )0x0050, ( short )0x0050,
120 ( short )0x0020, ( short )0x0000, ( short )0xFFF8, ( short )0xFFB0,
121 ( short )0xFF70, ( short )0xFF68, ( short )0xFFB0, ( short )0xFFE8,
122 ( short )0xFFF8, ( short )0xFFF8, ( short )0xFFF8, ( short )0xFFF0,
123 ( short )0x0030, ( short )0x0070, ( short )0x0090, ( short )0x0098,
124 ( short )0x0098, ( short )0x0090, ( short )0x00A0, ( short )0x00B0,
125 ( short )0x00B8, ( short )0x00C0, ( short )0x00C0, ( short )0x00A8,
126 ( short )0x0098, ( short )0x0088, ( short )0x0078, ( short )0x0050,
127 ( short )0x0030, ( short )0x0020, ( short )0xFFD8, ( short )0xFF98,
128 ( short )0xFF88, ( short )0xFF50, ( short )0xFF20, ( short )0xFF18,
129 ( short )0xFEF8, ( short )0xFEE0, ( short )0xFEE8, ( short )0xFE70,
130 ( short )0xFE08, ( short )0xFE00, ( short )0xFE48, ( short )0xFE98,
131 ( short )0xFEB8, ( short )0xFEE8, ( short )0xFF10, ( short )0xFF28,
132 ( short )0xFF18, ( short )0xFF10, ( short )0xFF18, ( short )0xFF48,
133 ( short )0xFF70, ( short )0xFF88, ( short )0xFFE0, ( short )0x0028,
134 ( short )0x0040, ( short )0x0058, ( short )0x0068, ( short )0x0070,
135 ( short )0x0078, ( short )0x0070, ( short )0x0068, ( short )0x0068,
136 ( short )0x0078, ( short )0x0080, ( short )0x0080, ( short )0x0088,
137 ( short )0x0088, ( short )0x0080, ( short )0x0058, ( short )0x0030,
138 ( short )0x0020, ( short )0x0018, ( short )0x0018, ( short )0x0018,
139 ( short )0x0050, ( short )0x0090, ( short )0x00A0, ( short )0x0080,
140 ( short )0x0060, ( short )0x0050, ( short )0x0030, ( short )0x0018,
141 ( short )0x0010, ( short )0x0028, ( short )0x0038, ( short )0x0038,
142 ( short )0x0018, ( short )0xFFF8, ( short )0xFFF0, ( short )0x0000,
143 ( short )0x0020, ( short )0x0020, ( short )0x0030, ( short )0x0030,
144 ( short )0x0030, ( short )0x0040, ( short )0x0050, ( short )0x0050,
145 ( short )0x0050, ( short )0x0048, ( short )0x0048, ( short )0x0048,
146 ( short )0x0048, ( short )0x0048, ( short )0x0078, ( short )0x00A0,
147 ( short )0x00A8, ( short )0x00C0, ( short )0x00C8, ( short )0x00C0,
148 ( short )0x00D0, ( short )0x00E0, ( short )0x00D8, ( short )0x00E8,
149 ( short )0x00F0, ( short )0x00E0, ( short )0x0100, ( short )0x0118,
150 ( short )0x0110, ( short )0x0100, ( short )0x00F0, ( short )0x00D8,
151 ( short )0x0090, ( short )0x0048, ( short )0x0028, ( short )0x0020,
152 ( short )0x0020, ( short )0x0020, ( short )0x0038, ( short )0x0050,
153 ( short )0x0050, ( short )0x0050, ( short )0x0048, ( short )0x0040,
154 ( short )0x0050, ( short )0x0060, ( short )0x0060, ( short )0x0040,
155 ( short )0xFFC0, ( short )0xFF58, ( short )0xFF40, ( short )0xFF90,
156 ( short )0xFFE8, ( short )0x0000, ( short )0x0020, ( short )0x0030,
157 ( short )0x0030, ( short )0x0068, ( short )0x0098, ( short )0x00A8,
158 ( short )0x0110, ( short )0x0168, ( short )0x0170, ( short )0x0148,
159 ( short )0x0118, ( short )0x00F0, ( short )0x00E8, ( short )0x00E0,
160 ( short )0x00D0, ( short )0x0098, ( short )0x0060, ( short )0x0040,
161 ( short )0x0000, ( short )0xFFD8, ( short )0xFFD8, ( short )0xFFC0,
162 ( short )0xFFB0, ( short )0xFFB0, ( short )0xFF78, ( short )0xFF30,
163 ( short )0xFF10, ( short )0xFEF0, ( short )0xFEE8, ( short )0xFEF0,
164 ( short )0xFEC8, ( short )0xFED0, ( short )0xFEF8, ( short )0xFF00,
165 ( short )0xFF10, ( short )0xFF20, ( short )0xFF50, ( short )0xFF78,
166 ( short )0xFF90, ( short )0xFF80, ( short )0xFF70, ( short )0xFF70,
167 ( short )0xFF80, ( short )0xFF98, ( short )0xFFA0, ( short )0xFFB8,
168 ( short )0xFFD0, ( short )0xFFD8, ( short )0xFFF0, ( short )0x0000,
169 ( short )0x0008, ( short )0x0028, ( short )0x0048, ( short )0x0058,
170 ( short )0x0078, ( short )0x0070, ( short )0x0058, ( short )0x0068,
171 ( short )0x0098, ( short )0x00B8, ( short )0x00D8, ( short )0x00F0,
172 ( short )0x00F0, ( short )0x00E8, ( short )0x00F8, ( short )0x0100,
173 ( short )0x00D8, ( short )0x00D0, ( short )0x00C8, ( short )0x00E8,
174 ( short )0x0100, ( short )0x00F0, ( short )0x00E0, ( short )0x00C8,
175 ( short )0x00B8, ( short )0x00A0, ( short )0x0078, ( short )0x0058,
176 ( short )0x0038, ( short )0x0020, ( short )0x0010, ( short )0x0010,
177 ( short )0x0018, ( short )0x0010, ( short )0x0010, ( short )0x0010,
178 ( short )0x0018, ( short )0x0028, ( short )0x0008, ( short )0xFFE0,
179 ( short )0xFFC8, ( short )0xFF80, ( short )0xFF48, ( short )0xFF38,
180 ( short )0xFF40, ( short )0xFF48, ( short )0xFF48, ( short )0xFF70,
181 ( short )0xFF90, ( short )0xFFA8, ( short )0xFFB8, ( short )0xFFC0,
182 ( short )0xFFC8, ( short )0xFFC0, ( short )0xFFC0, ( short )0xFFC0,
183 ( short )0xFFB0, ( short )0xFFA0, ( short )0xFFA0, ( short )0xFFA0,
184 ( short )0xFFA8, ( short )0xFFB0, ( short )0xFF68, ( short )0xFF28,
185 ( short )0xFF08, ( short )0xFEF8, ( short )0xFEF8, ( short )0xFEE8,
186 ( short )0xFEE0, ( short )0xFED8, ( short )0xFEA8, ( short )0xFE98,
187 ( short )0xFEA8, ( short )0xFEA8, ( short )0xFEA0, ( short )0xFEA0,
188 ( short )0xFED0, ( short )0xFF00, ( short )0xFF30, ( short )0xFF28,
189 ( short )0xFF38, ( short )0xFF58, ( short )0xFF48, ( short )0xFF40,
190 ( short )0xFF48, ( short )0xFFB0, ( short )0x0010, ( short )0x0038,
191 ( short )0x0028, ( short )0x0010, ( short )0x0008, ( short )0x0050,
192 ( short )0x00A0, ( short )0x00B8, ( short )0x00A0, ( short )0x0080,
193 ( short )0x0070, ( short )0x0090, ( short )0x00B0, ( short )0x00B0,
194 ( short )0x00B8, ( short )0x00B8, ( short )0x00B0, ( short )0x00C0,
195 ( short )0x00D0, ( short )0x00C8, ( short )0x00A0, ( short )0x0068,
196 ( short )0x0038, ( short )0xFFF0, ( short )0xFFB0, ( short )0xFF88,
197 ( short )0xFF78, ( short )0xFF68, ( short )0xFF60, ( short )0xFF90,
198 ( short )0xFFC0, ( short )0xFFE0, ( short )0x0000, ( short )0x0020,
199 ( short )0x0030, ( short )0x00A0, ( short )0x0110, ( short )0x0138,
200 ( short )0x0140, ( short )0x0148, ( short )0x0148, ( short )0x0110,
201 ( short )0x00E8, ( short )0x00C0, ( short )0x00A0, ( short )0x0088,
202 ( short )0x0068, ( short )0x0008, ( short )0xFFB0, ( short )0xFF88,
203 ( short )0xFF58, ( short )0xFF30, ( short )0xFF20, ( short )0xFEF8,
204 ( short )0xFED8, ( short )0xFED8, ( short )0xFF00, ( short )0xFF20,
205 ( short )0xFF38, ( short )0xFF50, ( short )0xFF68, ( short )0xFF88,
206 ( short )0xFFA0, ( short )0xFFB8, ( short )0x0020, ( short )0x0080,
207 ( short )0x00A0, ( short )0x00D8, ( short )0x0100, ( short )0x0100,
208 ( short )0x0138, ( short )0x0168, ( short )0x0148, ( short )0x0128,
209 ( short )0x0120, ( short )0x00F8, ( short )0x00E8, ( short )0x00E0,
210 ( short )0x00C0, ( short )0x00A8, ( short )0x00B0, ( short )0x0098,
211 ( short )0x0070, ( short )0x0048, ( short )0x0030, ( short )0xFFD0,
212 ( short )0xFF60, ( short )0xFF48, ( short )0xFF10, ( short )0xFEA8,
213 ( short )0xFEA8, ( short )0xFEC0, ( short )0xFEC0, ( short )0xFEE8,
214 ( short )0xFEB0, ( short )0xFE58, ( short )0xFE88, ( short )0xFED0,
215 ( short )0xFEB8, ( short )0xFE48, ( short )0xFE58, ( short )0xFEE8,
216 ( short )0xFF28, ( short )0xFF18, ( short )0xFF60, ( short )0x00A0,
217 ( short )0x01A0, ( short )0x0188, ( short )0x0178, ( short )0x0208,
218 ( short )0x0208, ( short )0x0100, ( short )0x0018, ( short )0xFFE0,
219 ( short )0xFEE0, ( short )0xFD68, ( short )0xFD00, ( short )0xFD60,
220 ( short )0xFD70, ( short )0xFDA8, ( short )0xFF00, ( short )0x00A0,
221 ( short )0x0170, ( short )0x0210, ( short )0x02D8, ( short )0x0310,
222 ( short )0x0218, ( short )0x00A0, ( short )0xFFA0, ( short )0xFDF0,
223 ( short )0xFBD8, ( short )0xFB08, ( short )0xF9C0, ( short )0xF830,
224 ( short )0xF8D8, ( short )0xFCC0, ( short )0x0038, ( short )0x01A0,
225 ( short )0x0380, ( short )0x0A18, ( short )0x0F50, ( short )0x0DB0,
226 ( short )0x0C30, ( short )0x0E18, ( short )0x0CA8, ( short )0x0570,
227 ( short )0xFF98, ( short )0xFE38, ( short )0xFBA0, ( short )0xF700,
228 ( short )0xF5D0, ( short )0xF7C8, ( short )0xF9A8, ( short )0xFB48,
229 ( short )0xFBB0, ( short )0xFC78, ( short )0xFF00, ( short )0xFE98,
230 ( short )0xFB20, ( short )0xFA48, ( short )0xFAC0, ( short )0xF8C8,
231 ( short )0xF6E0, ( short )0xF9C0, ( short )0xFE08, ( short )0xFF80,
232 ( short )0x0428, ( short )0x0B70, ( short )0x0E18, ( short )0x0D38,
233 ( short )0x0D38, ( short )0x0C28, ( short )0x01D0, ( short )0xF578,
234 ( short )0xF108, ( short )0xFB50, ( short )0x0498, ( short )0x0428,
235 ( short )0x0CE8, ( short )0x2190, ( short )0x29F0, ( short )0x22E0,
236 ( short )0x1F68, ( short )0x2050, ( short )0x1810, ( short )0x0710,
237 ( short )0xFA98, ( short )0xF438, ( short )0xEE68, ( short )0xE950,
238 ( short )0xEBC8, ( short )0xF538, ( short )0xFEB8, ( short )0x0240,
239 ( short )0x0460, ( short )0x09D0, ( short )0x0978, ( short )0xFFF8,
240 ( short )0xF810, ( short )0xF190, ( short )0xE8D0, ( short )0xE290,
241 ( short )0xDF60, ( short )0xDFF0, ( short )0xE668, ( short )0xEC20,
242 ( short )0xF138, ( short )0xFAC0, ( short )0x04F0, ( short )0x08D0,
243 ( short )0x08C8, ( short )0x0B18, ( short )0x09F8, ( short )0x0230,
244 ( short )0xFA38, ( short )0xFA68, ( short )0xFC78, ( short )0xF9B8,
245 ( short )0xF850, ( short )0xFEA8, ( short )0x05B8, ( short )0x0690,
246 ( short )0x02E8, ( short )0x0268, ( short )0x0498, ( short )0xFCB0,
247 ( short )0xF018, ( short )0xEDF8, ( short )0x0090, ( short )0x0F48,
248 ( short )0x0C70, ( short )0x1278, ( short )0x27B8, ( short )0x2EA0,
249 ( short )0x21F8, ( short )0x1920, ( short )0x1918, ( short )0x1530,
250 ( short )0x0638, ( short )0xF858, ( short )0xF720, ( short )0xF9F8,
251 ( short )0xF600, ( short )0xF850, ( short )0x0590, ( short )0x0EE0,
252 ( short )0x1000, ( short )0x10D8, ( short )0x1460, ( short )0x10F8,
253 ( short )0x0500, ( short )0xFBC0, ( short )0xF7A8, ( short )0xF250,
254 ( short )0xEC00, ( short )0xEB30, ( short )0xF1C8, ( short )0xF920,
255 ( short )0xFC90, ( short )0x0190, ( short )0x0A60, ( short )0x0E80,
256 ( short )0x0DB0, ( short )0x0AD8, ( short )0x0690, ( short )0x0168,
257 ( short )0xFF20, ( short )0xFBD0, ( short )0xF6F8, ( short )0xF660,
258 ( short )0xF680, ( short )0xF5B0, ( short )0xF7C0, ( short )0xF120,
259 ( short )0xEA90, ( short )0xF030, ( short )0xEC18, ( short )0xE190,
260 ( short )0xE558, ( short )0xFF20, ( short )0x1090, ( short )0x0C50,
261 ( short )0x1248, ( short )0x2788, ( short )0x2AD0, ( short )0x1628,
262 ( short )0x08F0, ( short )0x0BA8, ( short )0x0538, ( short )0xEF48,
263 ( short )0xE410, ( short )0xEB10, ( short )0xEF68, ( short )0xEA28,
264 ( short )0xEC40, ( short )0xFC18, ( short )0x08A8, ( short )0x0818,
265 ( short )0x0778, ( short )0x0858, ( short )0x02F8, ( short )0xF8E8,
266 ( short )0xF1F0, ( short )0xEF40, ( short )0xECD0, ( short )0xE958,
267 ( short )0xEA70, ( short )0xF260, ( short )0xFAF0, ( short )0xFFA0,
268 ( short )0x04A0, ( short )0x0CF8, ( short )0x10F8, ( short )0x0EA0,
269 ( short )0x0D48, ( short )0x0BE8, ( short )0x05E0, ( short )0x03B0,
270 ( short )0x0358, ( short )0xFF18, ( short )0xFB40, ( short )0xF9B0,
271 ( short )0xF9C0, ( short )0xF7C0, ( short )0xEE90, ( short )0xEAA0,
272 ( short )0xEE00, ( short )0xE888, ( short )0xE200, ( short )0xEF00,
273 ( short )0x0948, ( short )0x1400, ( short )0x1270, ( short )0x1D88,
274 ( short )0x2CD8, ( short )0x2488, ( short )0x0DA8, ( short )0x04B8,
275 ( short )0x0548, ( short )0xF7B0, ( short )0xE3F0, ( short )0xE268,
276 ( short )0xEFF8, ( short )0xF5A0, ( short )0xF320, ( short )0xFC68,
277 ( short )0x0BF0, ( short )0x0FA0, ( short )0x0A50, ( short )0x01F8,
278 ( short )0xFE60, ( short )0xFC48, ( short )0xF340, ( short )0xEB28,
279 ( short )0xED58, ( short )0xF3C0, ( short )0xF5B8, ( short )0xF738,
280 ( short )0x00F8, ( short )0x0C70, ( short )0x0E90, ( short )0x0DE8,
281 ( short )0x1190, ( short )0x12B0, ( short )0x1058, ( short )0x0B98,
282 ( short )0x0638, ( short )0x0868, ( short )0x0998, ( short )0x02B0,
283 ( short )0xFE50, ( short )0x0120, ( short )0x02A0, ( short )0xFC90,
284 ( short )0xF810, ( short )0xF9D0, ( short )0xF818, ( short )0xF290,
285 ( short )0xF240, ( short )0xF6D0, ( short )0x0A48, ( short )0x1AD8,
286 ( short )0x1840, ( short )0x1C18, ( short )0x2B18, ( short )0x29F0,
287 ( short )0x1608, ( short )0x08B8, ( short )0x0778, ( short )0x0128,
288 ( short )0xF118, ( short )0xE868, ( short )0xEDA0, ( short )0xF310,
289 ( short )0xF248, ( short )0xF558, ( short )0x0058, ( short )0x0970,
290 ( short )0x0688, ( short )0x0108, ( short )0xFD08, ( short )0xF988,
291 ( short )0xF558, ( short )0xF0A0, ( short )0xF0B0, ( short )0xF540,
292 ( short )0xF6E8, ( short )0xFCA0, ( short )0x0758, ( short )0x0CD0,
293 ( short )0x0F60, ( short )0x1338, ( short )0x1458, ( short )0x1278,
294 ( short )0x0FD0, ( short )0x0CA8, ( short )0x0D50, ( short )0x0D10,
295 ( short )0x0798, ( short )0x0398, ( short )0x0428, ( short )0x04F0,
296 ( short )0x0278, ( short )0xFF98, ( short )0x0178, ( short )0x0088,
297 ( short )0xFB08, ( short )0xF660, ( short )0xF1A8, ( short )0xEF18,
298 ( short )0xF9E8, ( short )0x0C00, ( short )0x11C8, ( short )0x1260,
299 ( short )0x1B60, ( short )0x21B0, ( short )0x18E0, ( short )0x0B08,
300 ( short )0x04C8, ( short )0x0078, ( short )0xF730, ( short )0xEF60,
301 ( short )0xEB18, ( short )0xEC10, ( short )0xF290, ( short )0xF800,
302 ( short )0xFB60, ( short )0xFF60, ( short )0x0080, ( short )0xFFA8,
303 ( short )0xFB08, ( short )0xF1A8, ( short )0xED10, ( short )0xEFF0,
304 ( short )0xEED0, ( short )0xEB10, ( short )0xEFE8, ( short )0xF8F0,
305 ( short )0xFDE0, ( short )0x0298, ( short )0x0528, ( short )0x0598,
306 ( short )0x0928, ( short )0x0A30, ( short )0x0670, ( short )0x08E8,
307 ( short )0x0BC0, ( short )0x0698, ( short )0x0210, ( short )0x0390,
308 ( short )0x0560, ( short )0x0288, ( short )0xF910, ( short )0xF468,
309 ( short )0xF560, ( short )0xF3E0, ( short )0xEE10, ( short )0xE8B0,
310 ( short )0xE508, ( short )0xEED0, ( short )0x03E0, ( short )0x0638,
311 ( short )0xFFA8, ( short )0x0BB8, ( short )0x2078, ( short )0x1FA8,
312 ( short )0x0EF0, ( short )0x0648, ( short )0x05C8, ( short )0xFF18,
313 ( short )0xF588, ( short )0xEE20, ( short )0xED88, ( short )0xF5A0,
314 ( short )0xFBA8, ( short )0xFBC0, ( short )0xFA98, ( short )0xFA20,
315 ( short )0xF7D8, ( short )0xF2D0, ( short )0xEF48, ( short )0xE998,
316 ( short )0xE378, ( short )0xE530, ( short )0xE868, ( short )0xE890,
317 ( short )0xEDD0, ( short )0xF798, ( short )0xFBC0, ( short )0xFD20,
318 ( short )0x0178, ( short )0x0490, ( short )0x04A0, ( short )0x0758,
319 ( short )0x0858, ( short )0x0490, ( short )0x04F8, ( short )0x0858,
320 ( short )0x06F0, ( short )0x05F8, ( short )0x0450, ( short )0x0098,
321 ( short )0xFE60, ( short )0xFDA0, ( short )0xF9E0, ( short )0xF358,
322 ( short )0xEDC0, ( short )0xF308, ( short )0xFFE0, ( short )0x0018,
323 ( short )0xFB80, ( short )0x0948, ( short )0x1DB8, ( short )0x1D08,
324 ( short )0x0F88, ( short )0x0B48, ( short )0x0C50, ( short )0x09C0,
325 ( short )0xFF78, ( short )0xF1A0, ( short )0xEF28, ( short )0xF6B8,
326 ( short )0xF9F0, ( short )0xF6F0, ( short )0xF688, ( short )0xF9E0,
327 ( short )0xF9C0, ( short )0xF4C8, ( short )0xEBD8, ( short )0xE7E8,
328 ( short )0xEBE0, ( short )0xE8C8, ( short )0xE100, ( short )0xE518,
329 ( short )0xF0B8, ( short )0xF728, ( short )0xF770, ( short )0xF878,
330 ( short )0xFF58, ( short )0x06B0, ( short )0x0430, ( short )0x0060,
331 ( short )0x0390, ( short )0x0A18, ( short )0x0B98, ( short )0x06C8,
332 ( short )0x0710, ( short )0x0CF0, ( short )0x08D0, ( short )0x01F8,
333 ( short )0x0280, ( short )0x0238, ( short )0xFD78, ( short )0xF868,
334 ( short )0xF198, ( short )0xF670, ( short )0x0930, ( short )0x0A78,
335 ( short )0xFB38, ( short )0x04F0, ( short )0x1EB8, ( short )0x1E98,
336 ( short )0x0F68, ( short )0x0EC8, ( short )0x1548, ( short )0x1480,
337 ( short )0x0C60, ( short )0x00B0, ( short )0xFEF8, ( short )0x0830,
338 ( short )0x0838, ( short )0x0160, ( short )0x0380, ( short )0x07E8,
339 ( short )0x0270, ( short )0xFBA0, ( short )0xF9C0, ( short )0xF450,
340 ( short )0xEE08, ( short )0xED08, ( short )0xEE10, ( short )0xEF20,
341 ( short )0xF1C0, ( short )0xF800, ( short )0xFE70, ( short )0x00B0,
342 ( short )0x02D8, ( short )0x07C8, ( short )0x09F0, ( short )0x09A8,
343 ( short )0x0A60, ( short )0x0B28, ( short )0x0C80, ( short )0x0D58,
344 ( short )0x0BD0, ( short )0x0A48, ( short )0x0900, ( short )0x0768,
345 ( short )0x03D0, ( short )0x00E0, ( short )0xFFF8, ( short )0xFBD8,
346 ( short )0xF5E8, ( short )0xFE18, ( short )0x0FE8, ( short )0x1060,
347 ( short )0x05C8, ( short )0x1078, ( short )0x2638, ( short )0x2580,
348 ( short )0x1740, ( short )0x14E8, ( short )0x19D0, ( short )0x17D8,
349 ( short )0x0E10, ( short )0x0270, ( short )0x0120, ( short )0x0900,
350 ( short )0x0870, ( short )0x0290, ( short )0x03A0, ( short )0x0600,
351 ( short )0x0100, ( short )0xFE28, ( short )0xFF28, ( short )0xF838,
352 ( short )0xF0B8, ( short )0xF238, ( short )0xF530, ( short )0xF440,
353 ( short )0xF440, ( short )0xFA38, ( short )0x0198, ( short )0x03A8,
354 ( short )0x03D0, ( short )0x0780, ( short )0x0AB8, ( short )0x0B58,
355 ( short )0x0B10, ( short )0x0AD8, ( short )0x0A08, ( short )0x0878,
356 ( short )0x07C8, ( short )0x0648, ( short )0x01A0, ( short )0xFF48,
357 ( short )0xFE58, ( short )0xFA68, ( short )0xF7D0, ( short )0xF758,
358 ( short )0xF470, ( short )0xF5B0, ( short )0x02A8, ( short )0x0A58,
359 ( short )0x0448, ( short )0x07C8, ( short )0x1708, ( short )0x1970,
360 ( short )0x0EC8, ( short )0x0A40, ( short )0x0CD0, ( short )0x0D28,
361 ( short )0x0838, ( short )0x0010, ( short )0xFAE0, ( short )0xFCB0,
362 ( short )0xFEB8, ( short )0xFCE8, ( short )0xFBA8, ( short )0xFD10,
363 ( short )0xFBC8, ( short )0xF910, ( short )0xF960, ( short )0xF830,
364 ( short )0xF4D8, ( short )0xF500, ( short )0xF860, ( short )0xF9F0,
365 ( short )0xFB58, ( short )0xFE48, ( short )0x0050, ( short )0x0418,
366 ( short )0x0910, ( short )0x0940, ( short )0x0830, ( short )0x0AC8,
367 ( short )0x0C88, ( short )0x0A50, ( short )0x07C0, ( short )0x0700,
368 ( short )0x0590, ( short )0x0268, ( short )0xFFF0, ( short )0xFBA8,
369 ( short )0xF720, ( short )0xF698, ( short )0xF2E0, ( short )0xEB68,
370 ( short )0xEDA0, ( short )0xFC00, ( short )0x0358, ( short )0xFF30,
371 ( short )0x0398, ( short )0x1220, ( short )0x1860, ( short )0x1368,
372 ( short )0x10C0, ( short )0x12F0, ( short )0x12A0, ( short )0x0E08,
373 ( short )0x0780, ( short )0x0010, ( short )0xFAD8, ( short )0xF990,
374 ( short )0xF7E0, ( short )0xF278, ( short )0xEE10, ( short )0xEB98,
375 ( short )0xE7A0, ( short )0xE6F8, ( short )0xEA30, ( short )0xE980,
376 ( short )0xE420, ( short )0xE440, ( short )0xEBA8, ( short )0xEF98,
377 ( short )0xEF68, ( short )0xF288, ( short )0xF7A8, ( short )0xFC90,
378 ( short )0x01F8, ( short )0x0528, ( short )0x0630, ( short )0x08E8,
379 ( short )0x0C98, ( short )0x0D50, ( short )0x0B98, ( short )0x0920,
380 ( short )0x0678, ( short )0x03F0, ( short )0x0260, ( short )0xFE00,
381 ( short )0xF810, ( short )0xF4B8, ( short )0xF0C0, ( short )0xEB68,
382 ( short )0xEF58, ( short )0xFAE8, ( short )0xFDE0, ( short )0xF680,
383 ( short )0xF910, ( short )0x06E0, ( short )0x0C20, ( short )0x05D8,
384 ( short )0x0408, ( short )0x05C8, ( short )0x0450, ( short )0x02D0,
385 ( short )0x0128, ( short )0xFB78, ( short )0xF668, ( short )0xF430,
386 ( short )0xF150, ( short )0xED90, ( short )0xE870, ( short )0xE448,
387 ( short )0xE2E0, ( short )0xE048, ( short )0xDDD0, ( short )0xDF08,
388 ( short )0xE0E0, ( short )0xE098, ( short )0xE258, ( short )0xE520,
389 ( short )0xE6A8, ( short )0xEA28, ( short )0xEF88, ( short )0xF2A8,
390 ( short )0xF548, ( short )0xFBA8, ( short )0x01C8, ( short )0x03F8,
391 ( short )0x0748, ( short )0x0C88, ( short )0x0E98, ( short )0x0DB8,
392 ( short )0x0D98, ( short )0x0D50, ( short )0x0B68, ( short )0x0970,
393 ( short )0x06C0, ( short )0x0238, ( short )0xFE18, ( short )0xFB08,
394 ( short )0xF820, ( short )0xF780, ( short )0xF970, ( short )0xF9B0,
395 ( short )0xF880, ( short )0xFA28, ( short )0x0028, ( short )0x0698,
396 ( short )0x0948, ( short )0x08D0, ( short )0x09E0, ( short )0x0DD0,
397 ( short )0x1010, ( short )0x0D40, ( short )0x0958, ( short )0x0728,
398 ( short )0x0308, ( short )0xFDA0, ( short )0xF9F8, ( short )0xF418,
399 ( short )0xEC98, ( short )0xE8B8, ( short )0xE618, ( short )0xE200,
400 ( short )0xDED0, ( short )0xDF48, ( short )0xE100, ( short )0xE180,
401 ( short )0xE160, ( short )0xE3C8, ( short )0xE898, ( short )0xEDD8,
402 ( short )0xF250, ( short )0xF558, ( short )0xFB00, ( short )0x02F8,
403 ( short )0x07B0, ( short )0x0B80, ( short )0x1108, ( short )0x1518,
404 ( short )0x1660, ( short )0x1770, ( short )0x1870, ( short )0x16F8,
405 ( short )0x1300, ( short )0x0F78, ( short )0x0FC0, ( short )0x1070,
406 ( short )0x0CE8, ( short )0x0AF8, ( short )0x0BD8, ( short )0x0D28,
407 ( short )0x10A8, ( short )0x1370, ( short )0x10A0, ( short )0x1040,
408 ( short )0x1518, ( short )0x1740, ( short )0x1550, ( short )0x1398,
409 ( short )0x10E0, ( short )0x0AC8, ( short )0x0640, ( short )0x0348,
410 ( short )0xFD18, ( short )0xF658, ( short )0xF1D8, ( short )0xEC20,
411 ( short )0xE760, ( short )0xE550, ( short )0xE4B8, ( short )0xE418,
412 ( short )0xE438, ( short )0xE508, ( short )0xE738, ( short )0xEB18,
413 ( short )0xF0C8, ( short )0xF618, ( short )0xF988, ( short )0xFEC8,
414 ( short )0x0518, ( short )0x09D8, ( short )0x1118, ( short )0x17F0,
415 ( short )0x1BB0, ( short )0x1E28, ( short )0x2120, ( short )0x23D8,
416 ( short )0x2638, ( short )0x2418, ( short )0x2080, ( short )0x1D30,
417 ( short )0x1CE8, ( short )0x1D98, ( short )0x1CA8, ( short )0x1AD8,
418 ( short )0x1960, ( short )0x17F8, ( short )0x1A40, ( short )0x1CF8,
419 ( short )0x1D38, ( short )0x1C30, ( short )0x1A68, ( short )0x1860,
420 ( short )0x1480, ( short )0x1020, ( short )0x0B68, ( short )0x03E8,
421 ( short )0xFBA8, ( short )0xF508, ( short )0xEE40, ( short )0xE820,
422 ( short )0xE338, ( short )0xDE88, ( short )0xDA30, ( short )0xD7D0,
423 ( short )0xD728, ( short )0xD7D8, ( short )0xD998, ( short )0xDC10,
424 ( short )0xDFB0, ( short )0xE470, ( short )0xE948, ( short )0xEF98,
425 ( short )0xF5F0, ( short )0xFC38, ( short )0x0228, ( short )0x0798,
426 ( short )0x0D98, ( short )0x1320, ( short )0x1760, ( short )0x1A70,
427 ( short )0x1BE0, ( short )0x1CC0, ( short )0x1D98, ( short )0x1A88,
428 ( short )0x1658, ( short )0x12A0, ( short )0x1180, ( short )0x10A8,
429 ( short )0x0ED0, ( short )0x0CC8, ( short )0x0AD8, ( short )0x0920,
430 ( short )0x0B70, ( short )0x0E30, ( short )0x0EE8, ( short )0x0D80,
431 ( short )0x0BE0, ( short )0x0AC0, ( short )0x09B8, ( short )0x0890,
432 ( short )0x0690, ( short )0x01F8, ( short )0xFD30, ( short )0xF9F0,
433 ( short )0xF5B0, ( short )0xF188, ( short )0xEE38, ( short )0xE9E8,
434 ( short )0xE5E8, ( short )0xE3E0, ( short )0xE4A0, ( short )0xE608,
435 ( short )0xE738, ( short )0xE858, ( short )0xE980, ( short )0xEC20,
436 ( short )0xF030, ( short )0xF450, ( short )0xF878, ( short )0xFC68,
437 ( short )0xFF68, ( short )0x03C8, ( short )0x08B8, ( short )0x0D00,
438 ( short )0x1038, ( short )0x12D8, ( short )0x1490, ( short )0x1648,
439 ( short )0x16B8, ( short )0x1468, ( short )0x1160, ( short )0x0FA8,
440 ( short )0x1038, ( short )0x1058, ( short )0x0F88, ( short )0x0E50,
441 ( short )0x0CC8, ( short )0x0CC0, ( short )0x0FC0, ( short )0x1220,
442 ( short )0x12A0, ( short )0x10F8, ( short )0x0F20, ( short )0x0D28,
443 ( short )0x0C78, ( short )0x0BB8, ( short )0x08D0, ( short )0x01C8,
444 ( short )0xFB38, ( short )0xF660, ( short )0xF330, ( short )0xF078,
445 ( short )0xEC28, ( short )0xE6C8, ( short )0xE2C0, ( short )0xE050,
446 ( short )0xDFC8, ( short )0xE038, ( short )0xE160, ( short )0xE300,
447 ( short )0xE568, ( short )0xE6B8, ( short )0xE9A0, ( short )0xED50,
448 ( short )0xF238, ( short )0xF6D8, ( short )0xFB08, ( short )0xFF10,
449 ( short )0x02E8, ( short )0x06A0, ( short )0x0AC0, ( short )0x0DC8,
450 ( short )0x1010, ( short )0x1168, ( short )0x1018, ( short )0x0E90,
451 ( short )0x0BF8, ( short )0x0B08, ( short )0x0A50, ( short )0x09F0,
452 ( short )0x0960, ( short )0x0888, ( short )0x0808, ( short )0x09C8,
453 ( short )0x0BA8, ( short )0x0EE8, ( short )0x1070, ( short )0x10D0,
454 ( short )0x0F58, ( short )0x0D60, ( short )0x0BA0, ( short )0x0A60,
455 ( short )0x08F0, ( short )0x0608, ( short )0xFFB0, ( short )0xF938,
456 ( short )0xF360, ( short )0xF030, ( short )0xEE20, ( short )0xEB70,
457 ( short )0xE7A8, ( short )0xE410, ( short )0xE140, ( short )0xDFC8,
458 ( short )0xDFF8, ( short )0xE1F0, ( short )0xE448, ( short )0xE6D0,
459 ( short )0xE780, ( short )0xE9E8, ( short )0xECF0, ( short )0xF248,
460 ( short )0xF730, ( short )0xFBC0, ( short )0xFF80, ( short )0x0310,
461 ( short )0x0670, ( short )0x0A98, ( short )0x0D88, ( short )0x0FD8,
462 ( short )0x10C0, ( short )0x0EB0, ( short )0x0C48, ( short )0x08B8,
463 ( short )0x0998, ( short )0x0AC0, ( short )0x0C68, ( short )0x0B78,
464 ( short )0x09C8, ( short )0x0838, ( short )0x08F8, ( short )0x0A80,
465 ( short )0x0CA0, ( short )0x0E10, ( short )0x0E48, ( short )0x0D58,
466 ( short )0x0A28, ( short )0x0750, ( short )0x04F0, ( short )0x0228,
467 ( short )0xFEE8, ( short )0xFA80, ( short )0xF468, ( short )0xEED0,
468 ( short )0xEAE0, ( short )0xE8B8, ( short )0xE718, ( short )0xE5B0,
469 ( short )0xE4A8, ( short )0xE410, ( short )0xE480, ( short )0xE548,
470 ( short )0xE738, ( short )0xE9B0, ( short )0xED80, ( short )0xF0B8,
471 ( short )0xF480, ( short )0xF7B0, ( short )0xFB70, ( short )0xFED0,
472 ( short )0x0328, ( short )0x0720, ( short )0x0A98, ( short )0x0E00,
473 ( short )0x10F8, ( short )0x12E0, ( short )0x12A8, ( short )0x11B0,
474 ( short )0x0F58, ( short )0x0F38, ( short )0x0E88, ( short )0x0F08,
475 ( short )0x0FC0, ( short )0x0FF0, ( short )0x10B8, ( short )0x1138,
476 ( short )0x1198, ( short )0x13D0, ( short )0x1638, ( short )0x17E8,
477 ( short )0x1758, ( short )0x1628, ( short )0x1460, ( short )0x10E8,
478 ( short )0x0CA0, ( short )0x0848, ( short )0x0280, ( short )0xFC90,
479 ( short )0xF700, ( short )0xF0F8, ( short )0xEB18, ( short )0xE638,
480 ( short )0xE1B8, ( short )0xDE78, ( short )0xDC58, ( short )0xDBB8,
481 ( short )0xDC28, ( short )0xDDB0, ( short )0xE030, ( short )0xE330,
482 ( short )0xE6F0, ( short )0xEC20, ( short )0xF210, ( short )0xF7C0,
483 ( short )0xFCE0, ( short )0x0150, ( short )0x0570, ( short )0x08F0,
484 ( short )0x0C70, ( short )0x0F50, ( short )0x12B8, ( short )0x1560,
485 ( short )0x16E0, ( short )0x1630, ( short )0x14E8, ( short )0x1298,
486 ( short )0x11B8, ( short )0x1170, ( short )0x11B8, ( short )0x11C0,
487 ( short )0x0FE8, ( short )0x0E58, ( short )0x0CB8, ( short )0x0C50,
488 ( short )0x0D68, ( short )0x0E98, ( short )0x0E30, ( short )0x0C28,
489 ( short )0x0A10, ( short )0x06D8, ( short )0x02E0, ( short )0xFEA0,
490 ( short )0xFA18, ( short )0xF4E8, ( short )0xF018, ( short )0xEB68,
491 ( short )0xE6E8, ( short )0xE310, ( short )0xDFC8, ( short )0xDD38,
492 ( short )0xDBF8, ( short )0xDC38, ( short )0xDDD0, ( short )0xE070,
493 ( short )0xE390, ( short )0xE760, ( short )0xEB88, ( short )0xEF20,
494 ( short )0xF378, ( short )0xF830, ( short )0xFCE0, ( short )0x00F8,
495 ( short )0x0480, ( short )0x0768, ( short )0x0968, ( short )0x0AE0,
496 ( short )0x0BB8, ( short )0x0C10, ( short )0x0BB0, ( short )0x0A78,
497 ( short )0x08E0, ( short )0x06E8, ( short )0x0540, ( short )0x0870,
498 ( short )0x0BE0, ( short )0x0ED0, ( short )0x0E40, ( short )0x0D10,
499 ( short )0x0CC8, ( short )0x0E28, ( short )0x0FA0, ( short )0x0FB0,
500 ( short )0x0F18, ( short )0x0DD0, ( short )0x0BC8, ( short )0x08E8,
501 ( short )0x0628, ( short )0x0300, ( short )0xFF18, ( short )0xFB40,
502 ( short )0xF780, ( short )0xF388, ( short )0xF028, ( short )0xED80,
503 ( short )0xEB18, ( short )0xE968, ( short )0xE8C0, ( short )0xE738,
504 ( short )0xE658, ( short )0xE698, ( short )0xE888, ( short )0xEB38,
505 ( short )0xEDA0, ( short )0xF178, ( short )0xF5B8, ( short )0xFA28,
506 ( short )0xFEA8, ( short )0x0300, ( short )0x06C8, ( short )0x0960,
507 ( short )0x0B70, ( short )0x0CE0, ( short )0x0D70, ( short )0x0D50,
508 ( short )0x0C60, ( short )0x0890, ( short )0x0418, ( short )0x0028,
509 ( short )0x01D0, ( short )0x03F8, ( short )0x05A8, ( short )0x0700,
510 ( short )0x0808, ( short )0x09A0, ( short )0x0B18, ( short )0x0CC8,
511 ( short )0x0D90, ( short )0x0E68, ( short )0x0EC0, ( short )0x0E30,
512 ( short )0x0C28, ( short )0x09D8, ( short )0x0730, ( short )0x0308,
513 ( short )0xFED8, ( short )0xFAC0, ( short )0xF598, ( short )0xF0D8,
514 ( short )0xECE0, ( short )0xEAA8, ( short )0xE948, ( short )0xE8D0,
515 ( short )0xE850, ( short )0xE888, ( short )0xE910, ( short )0xEAD0,
516 ( short )0xED68, ( short )0xF018, ( short )0xF350, ( short )0xF6B8,
517 ( short )0xFAE0, ( short )0xFF00, ( short )0x02D8, ( short )0x05E8,
518 ( short )0x0830, ( short )0x09F8, ( short )0x0B08, ( short )0x0B80,
519 ( short )0x0B60, ( short )0x0988, ( short )0x0648, ( short )0x02D0,
520 ( short )0x0150, ( short )0x01E8, ( short )0x0270, ( short )0x03E0,
521 ( short )0x0538, ( short )0x0658, ( short )0x0918, ( short )0x0C00,
522 ( short )0x0E88, ( short )0x10B8, ( short )0x12A0, ( short )0x13E0,
523 ( short )0x1488, ( short )0x1448, ( short )0x1368, ( short )0x1120,
524 ( short )0x0DD0, ( short )0x0A40, ( short )0x0608, ( short )0x0148,
525 ( short )0xFC80, ( short )0xF860, ( short )0xF4D8, ( short )0xF1C0,
526 ( short )0xF008, ( short )0xEF38, ( short )0xEE78, ( short )0xEE98,
527 ( short )0xEF90, ( short )0xF170, ( short )0xF390, ( short )0xF5C0,
528 ( short )0xF888, ( short )0xFB48, ( short )0xFDF0, ( short )0x0078,
529 ( short )0x03D0, ( short )0x06C8, ( short )0x08F8, ( short )0x0AA0,
530 ( short )0x0BC8, ( short )0x0C48, ( short )0x0B30, ( short )0x0978,
531 ( short )0x06A8, ( short )0x0530, ( short )0x03F0, ( short )0x0438,
532 ( short )0x03C0, ( short )0x0350, ( short )0x0360, ( short )0x04E8,
533 ( short )0x0698, ( short )0x07D0, ( short )0x08D0, ( short )0x0998,
534 ( short )0x0A70, ( short )0x0B48, ( short )0x0B70, ( short )0x0AD0,
535 ( short )0x09C0, ( short )0x0890, ( short )0x0730, ( short )0x0588,
536 ( short )0x0358, ( short )0x0140, ( short )0xFF58, ( short )0xFD40,
537 ( short )0xFB68, ( short )0xF9E8, ( short )0xF828, ( short )0xF6D0,
538 ( short )0xF608, ( short )0xF5D8, ( short )0xF610, ( short )0xF668,
539 ( short )0xF778, ( short )0xF8E8, ( short )0xFA48, ( short )0xFCC8,
540 ( short )0xFF50, ( short )0x01C8, ( short )0x0428, ( short )0x0640,
541 ( short )0x07D0, ( short )0x09D0, ( short )0x0B40, ( short )0x0BF8,
542 ( short )0x0C30, ( short )0x0C08, ( short )0x0B08, ( short )0x0988,
543 ( short )0x07C0, ( short )0x0670, ( short )0x0608, ( short )0x0590,
544 ( short )0x0588, ( short )0x05B0, ( short )0x05E0, ( short )0x06B8,
545 ( short )0x0748, ( short )0x0758, ( short )0x0700, ( short )0x06A8,
546 ( short )0x0620, ( short )0x05D8, ( short )0x0590, ( short )0x0528,
547 ( short )0x03A8, ( short )0x0240, ( short )0x0108, ( short )0xFF38,
548 ( short )0xFD50, ( short )0xFBA0, ( short )0xFA38, ( short )0xF920,
549 ( short )0xF860, ( short )0xF6E8, ( short )0xF640, ( short )0xF628,
550 ( short )0xF680, ( short )0xF720, ( short )0xF800, ( short )0xF8E0,
551 ( short )0xF9A0, ( short )0xFA78, ( short )0xFB88, ( short )0xFD20,
552 ( short )0xFEA0, ( short )0x0008, ( short )0x0110, ( short )0x0200,
553 ( short )0x0360, ( short )0x04E0, ( short )0x0608, ( short )0x0738,
554 ( short )0x0838, ( short )0x08D8, ( short )0x0828, ( short )0x0738,
555 ( short )0x0600, ( short )0x04A8, ( short )0x02E0, ( short )0x0130,
556 ( short )0xFFA0, ( short )0xFF48, ( short )0xFF10, ( short )0xFEF0,
557 ( short )0xFF30, ( short )0xFFD0, ( short )0x0090, ( short )0x0090,
558 ( short )0x0070, ( short )0x0060, ( short )0xFFE8, ( short )0xFF50,
559 ( short )0xFEB8, ( short )0xFE98, ( short )0xFE88, ( short )0xFE80,
560 ( short )0xFE58, ( short )0xFE50, ( short )0xFE58, ( short )0xFDB0,
561 ( short )0xFD08, ( short )0xFC80, ( short )0xFAF8, ( short )0xF988,
562 ( short )0xF860, ( short )0xF798, ( short )0xF720, ( short )0xF6E8,
563 ( short )0xF728, ( short )0xF7C0, ( short )0xF8A8, ( short )0xF8F8,
564 ( short )0xF960, ( short )0xFA18, ( short )0xFAC0, ( short )0xFB58,
565 ( short )0xFC18, ( short )0xFCE0, ( short )0xFDA0, ( short )0xFE20,
566 ( short )0xFE88, ( short )0xFEF8, ( short )0xFEF0, ( short )0xFEC8,
567 ( short )0xFEA8, ( short )0xFDE0, ( short )0xFD10, ( short )0xFC70,
568 ( short )0xFBA8, ( short )0xFB10, ( short )0xFAB8, ( short )0xFAA0,
569 ( short )0xFAD0, ( short )0xFB18, ( short )0xFA90, ( short )0xFA18,
570 ( short )0xFA10, ( short )0xFA80, ( short )0xFB10, ( short )0xFB88,
571 ( short )0xFC90, ( short )0xFDB8, ( short )0xFEB8, ( short )0xFF80,
572 ( short )0x0058, ( short )0x0138, ( short )0x0118, ( short )0x00C8,
573 ( short )0x00C0, ( short )0xFF98, ( short )0xFE30, ( short )0xFD38,
574 ( short )0xFC68, ( short )0xFB78, ( short )0xFAB8, ( short )0xFAE8,
575 ( short )0xFB78, ( short )0xFBD0, ( short )0xFBE8, ( short )0xFC18,
576 ( short )0xFC98, ( short )0xFD28, ( short )0xFD48, ( short )0xFD68,
577 ( short )0xFD68, ( short )0xFD90, ( short )0xFDB8, ( short )0xFD90,
578 ( short )0xFD68, ( short )0xFD78, ( short )0xFCA0, ( short )0xFB70,
579 ( short )0xFAD0, ( short )0xF9F0, ( short )0xF870, ( short )0xF748,
580 ( short )0xF748, ( short )0xF770, ( short )0xF748, ( short )0xF720,
581 ( short )0xF7A8, ( short )0xF878, ( short )0xF930, ( short )0xF998,
582 ( short )0xFA38, ( short )0xFC10, ( short )0xFDA0, ( short )0xFE70,
583 ( short )0x0030, ( short )0x0248, ( short )0x03A0, ( short )0x0568,
584 ( short )0x0738, ( short )0x0870, ( short )0x0960, ( short )0x0A10,
585 ( short )0x0A40, ( short )0x0A28, ( short )0x09B8, ( short )0x08E8,
586 ( short )0x07E8, ( short )0x06E0, ( short )0x0588, ( short )0x0430,
587 ( short )0x0300, ( short )0x0260, ( short )0x01D0, ( short )0x0118,
588 ( short )0xFFB0, ( short )0xFE98, ( short )0xFE18, ( short )0xFDA0,
589 ( short )0xFD08, ( short )0xFCB8, ( short )0xFCF8, ( short )0xFD60,
590 ( short )0xFD90, ( short )0xFD90, ( short )0xFDD8, ( short )0xFE50,
591 ( short )0xFDA0, ( short )0xFCE0, ( short )0xFCC0, ( short )0xFCE8,
592 ( short )0xFCB0, ( short )0xFC60, ( short )0xFC70, ( short )0xFCB8,
593 ( short )0xFCE0, ( short )0xFD40, ( short )0xFDD8, ( short )0xFE68,
594 ( short )0xFF78, ( short )0x0068, ( short )0x0108, ( short )0x0278,
595 ( short )0x03A0, ( short )0x0420, ( short )0x0590, ( short )0x0708,
596 ( short )0x07B8, ( short )0x07D8, ( short )0x0808, ( short )0x0838,
597 ( short )0x07D8, ( short )0x06E8, ( short )0x0600, ( short )0x05B0,
598 ( short )0x0518, ( short )0x0410, ( short )0x02A0, ( short )0x0198,
599 ( short )0x00D0, ( short )0x00C8, ( short )0x00B0, ( short )0x0068,
600 ( short )0x00C0, ( short )0x0150, ( short )0x0180, ( short )0x0220,
601 ( short )0x02D8, ( short )0x0340, ( short )0x0360, ( short )0x0380,
602 ( short )0x0380, ( short )0x0338, ( short )0x02C8, ( short )0x02B8,
603 ( short )0x0280, ( short )0x0200, ( short )0x0100, ( short )0x0098,
604 ( short )0x0080, ( short )0x0020, ( short )0xFFF0, ( short )0x0000,
605 ( short )0x0020, ( short )0x0098, ( short )0x0120, ( short )0x0170,
606 ( short )0x0230, ( short )0x02F0, ( short )0x0350, ( short )0x0480,
607 ( short )0x05B8, ( short )0x0650, ( short )0x06A8, ( short )0x0738,
608 ( short )0x0798, ( short )0x07B0, ( short )0x07C0, ( short )0x0798,
609 ( short )0x0668, ( short )0x0598, ( short )0x0530, ( short )0x04C8,
610 ( short )0x0410, ( short )0x0350, ( short )0x0278, ( short )0x01D8,
611 ( short )0x0148, ( short )0x0080, ( short )0x0000, ( short )0xFFC0,
612 ( short )0xFFD8, ( short )0xFFA8, ( short )0xFF60, ( short )0xFF80,
613 ( short )0x0018, ( short )0x0070, ( short )0xFFE0, ( short )0xFF88,
614 ( short )0xFFC0, ( short )0xFF38, ( short )0xFE98, ( short )0xFE50,
615 ( short )0xFE10, ( short )0xFDD8, ( short )0xFD90, ( short )0xFD30,
616 ( short )0xFDB8, ( short )0xFE68, ( short )0xFE70, ( short )0xFE60,
617 ( short )0xFE70, ( short )0xFED0, ( short )0xFF90, ( short )0xFFE0,
618 ( short )0xFFF0, ( short )0x00A8, ( short )0x0168, ( short )0x01D0,
619 ( short )0x01F8, ( short )0x0210, ( short )0x0278, ( short )0x0268,
620 ( short )0x0208, ( short )0x0220, ( short )0x01F8, ( short )0x0198,
621 ( short )0x0158, ( short )0x0100, ( short )0x00C0, ( short )0x00A0,
622 ( short )0x0018, ( short )0xFF98, ( short )0xFF28, ( short )0xFEC0,
623 ( short )0xFE80, ( short )0xFE60, ( short )0xFD88, ( short )0xFCF0,
624 ( short )0xFCC8, ( short )0xFC70, ( short )0xFC10, ( short )0xFBC8,
625 ( short )0xFBB0, ( short )0xFBE8, ( short )0xFBE8, ( short )0xFB80,
626 ( short )0xFB88, ( short )0xFB40, ( short )0xFB18, ( short )0xFB20,
627 ( short )0xFAB8, ( short )0xFA50, ( short )0xFA50, ( short )0xFAB8,
628 ( short )0xFAF8, ( short )0xFB18, ( short )0xFBB0, ( short )0xFC88,
629 ( short )0xFD10, ( short )0xFD40, ( short )0xFD98, ( short )0xFE38,
630 ( short )0xFEE0, ( short )0xFEF8, ( short )0xFEF0, ( short )0xFF18,
631 ( short )0xFF18, ( short )0xFF18, ( short )0xFF68, ( short )0xFF98,
632 ( short )0xFF98, ( short )0xFFD0, ( short )0xFFF8, ( short )0x0048,
633 ( short )0x0038, ( short )0x0008, ( short )0x0008, ( short )0xFFE0,
634 ( short )0xFFB0, ( short )0xFFB8, ( short )0xFED0, ( short )0xFE18,
635 ( short )0xFE18, ( short )0xFDF0, ( short )0xFE38, ( short )0xFE90,
636 ( short )0xFE90, ( short )0xFDA8, ( short )0xFD48, ( short )0xFD70,
637 ( short )0xFD68, ( short )0xFD00, ( short )0xFCB8, ( short )0xFCB8,
638 ( short )0xFCF8, ( short )0xFD00, ( short )0xFC30, ( short )0xFBD0,
639 ( short )0xFC10, ( short )0xFC20, ( short )0xFBE0, ( short )0xFBA8,
640 ( short )0xFC30, ( short )0xFD00, ( short )0xFD50, ( short )0xFD90,
641 ( short )0xFE10, ( short )0xFEA8, ( short )0xFF40, ( short )0xFFA0,
642 ( short )0xFFD0, ( short )0xFFC8, ( short )0xFFC8, ( short )0xFFD8,
643 ( short )0xFFA0, ( short )0xFF98, ( short )0xFFB8, ( short )0x0050,
644 ( short )0x00B8, ( short )0x00B0, ( short )0x01B0, ( short )0x02E0,
645 ( short )0x0318, ( short )0x0330, ( short )0x02E0, ( short )0x02C8,
646 ( short )0x0278, ( short )0x0150, ( short )0x0050, ( short )0xFFC0,
647 ( short )0xFF88, ( short )0xFF18, ( short )0xFE90, ( short )0xFE40,
648 ( short )0xFE30, ( short )0xFDE8, ( short )0xFDD0, ( short )0xFD70,
649 ( short )0xFD48, ( short )0xFD10, ( short )0xFC98, ( short )0xFC38,
650 ( short )0xFC38, ( short )0xFC78, ( short )0xFC98, ( short )0xFCF0,
651 ( short )0xFDA8, ( short )0xFE48, ( short )0xFEC8, ( short )0xFF30,
652 ( short )0xFF98, ( short )0x0000, ( short )0x0050, ( short )0x0058,
653 ( short )0x00A8, ( short )0x00E8, ( short )0x00D0, ( short )0x0138,
654 ( short )0x01E0, ( short )0x0218, ( short )0x0208, ( short )0x0230,
655 ( short )0x0258, ( short )0x0248, ( short )0x02B0, ( short )0x0318,
656 ( short )0x0330, ( short )0x0358, ( short )0x0380, ( short )0x0378,
657 ( short )0x0408, ( short )0x0480, ( short )0x0460, ( short )0x03C8,
658 ( short )0x0318, ( short )0x02B0, ( short )0x01E8, ( short )0x00B8,
659 ( short )0xFFD8, ( short )0xFF30, ( short )0xFEC8, ( short )0xFE60,
660 ( short )0xFE60, ( short )0xFE78, ( short )0xFE78, ( short )0xFDC0,
661 ( short )0xFD70, ( short )0xFD50, ( short )0xFD08, ( short )0xFC88,
662 ( short )0xFC28, ( short )0xFC98, ( short )0xFD18, ( short )0xFD60,
663 ( short )0xFD60, ( short )0xFDD8, ( short )0xFE90, ( short )0xFEE8,
664 ( short )0xFF10, ( short )0xFF58, ( short )0xFF90, ( short )0xFFB8,
665 ( short )0xFFE0, ( short )0xFFF0, ( short )0xFFF0, ( short )0x00D0,
666 ( short )0x0190, ( short )0x01C8, ( short )0x0180, ( short )0x0188,
667 ( short )0x01B0, ( short )0x0238, ( short )0x0298, ( short )0x02B8,
668 ( short )0x0268, ( short )0x0258, ( short )0x0258, ( short )0x0230,
669 ( short )0x0228, ( short )0x0230, ( short )0x0258, ( short )0x0248,
670 ( short )0x01F8, ( short )0x0150, ( short )0x00C8, ( short )0x0058,
671 ( short )0x0058, ( short )0x0038, ( short )0x0000, ( short )0xFF50,
672 ( short )0xFF00, ( short )0xFEF8, ( short )0xFE80, ( short )0xFDB8,
673 ( short )0xFD70, ( short )0xFD00, ( short )0xFC90, ( short )0xFC40,
674 ( short )0xFC28, ( short )0xFC58, ( short )0xFC98, ( short )0xFD10,
675 ( short )0xFD78, ( short )0xFDE0, ( short )0xFE80, ( short )0xFF08,
676 ( short )0xFF60, ( short )0xFFD0, ( short )0x0030, ( short )0x0068,
677 ( short )0x0110, ( short )0x0198, ( short )0x01C0, ( short )0x0208,
678 ( short )0x0260, ( short )0x0280, ( short )0x0320, ( short )0x0390,
679 ( short )0x0398, ( short )0x0410, ( short )0x0488, ( short )0x04A0,
680 ( short )0x0448, ( short )0x0408, ( short )0x03E0, ( short )0x03C8,
681 ( short )0x0398, ( short )0x0350, ( short )0x0308, ( short )0x02C8,
682 ( short )0x0278, ( short )0x01D8, ( short )0x0148, ( short )0x00E8,
683 ( short )0x0040, ( short )0xFFA0, ( short )0xFF50, ( short )0xFDC0,
684 ( short )0xFC88, ( short )0xFC30, ( short )0xFB88, ( short )0xFAA8,
685 ( short )0xFA50, ( short )0xFA30, ( short )0xFA40, ( short )0xFA70,
686 ( short )0xFAB8, ( short )0xFAE0, ( short )0xFB28, ( short )0xFB58,
687 ( short )0xFB80, ( short )0xFBB0, ( short )0xFC00, ( short )0xFC80,
688 ( short )0xFCF0, ( short )0xFDB8, ( short )0xFE58, ( short )0xFED8,
689 ( short )0x0008, ( short )0x0100, ( short )0x0180, ( short )0x01D0,
690 ( short )0x0210, ( short )0x0248, ( short )0x0238, ( short )0x0200,
691 ( short )0x01D0, ( short )0x02D0, ( short )0x03A0, ( short )0x03D8,
692 ( short )0x03C0, ( short )0x03D8, ( short )0x03F8, ( short )0x0370,
693 ( short )0x02C0, ( short )0x0258, ( short )0x01B8, ( short )0x0120,
694 ( short )0x0090, ( short )0x0088, ( short )0x00A8, ( short )0x00A8,
695 ( short )0x0088, ( short )0x0068, ( short )0x0060, ( short )0xFFE0,
696 ( short )0xFF00, ( short )0xFE50, ( short )0xFDC8, ( short )0xFCF0,
697 ( short )0xFC30, ( short )0xFBB0, ( short )0xFBD8, ( short )0xFC20,
698 ( short )0xFC58, ( short )0xFC30, ( short )0xFC40, ( short )0xFC78,
699 ( short )0xFCC0, ( short )0xFCE8, ( short )0xFD10, ( short )0xFD48,
700 ( short )0xFD88, ( short )0xFDE8, ( short )0xFF10, ( short )0x0020,
701 ( short )0x0110, ( short )0x01B8, ( short )0x0248, ( short )0x02C0,
702 ( short )0x0358, ( short )0x03B8, ( short )0x03C8, ( short )0x0320,
703 ( short )0x0288, ( short )0x0280, ( short )0x0300, ( short )0x0340,
704 ( short )0x0320, ( short )0x0380, ( short )0x03F8, ( short )0x0418,
705 ( short )0x0378, ( short )0x02E0, ( short )0x0288, ( short )0x0280,
706 ( short )0x0238, ( short )0x01D0, ( short )0x0168, ( short )0x0138,
707 ( short )0x0110, ( short )0x0140, ( short )0x0148, ( short )0x0150,
708 ( short )0x00A8, ( short )0x0010, ( short )0xFFB0, ( short )0xFEB8,
709 ( short )0xFDE0, ( short )0xFD48, ( short )0xFCE8, ( short )0xFCA8,
710 ( short )0xFC78, ( short )0xFC48, ( short )0xFC50, ( short )0xFC70,
711 ( short )0xFCA8, ( short )0xFCE8, ( short )0xFD28, ( short )0xFDD0,
712 ( short )0xFE70, ( short )0xFED8, ( short )0x0040, ( short )0x0188,
713 ( short )0x0258, ( short )0x03C0, ( short )0x04F0, ( short )0x05B8,
714 ( short )0x0638, ( short )0x0670, ( short )0x0690, ( short )0x0708,
715 ( short )0x0708, ( short )0x06B8, ( short )0x0660, ( short )0x0650,
716 ( short )0x0630, ( short )0x05C8, ( short )0x0578, ( short )0x0548,
717 ( short )0x0508, ( short )0x0470, ( short )0x03D0, ( short )0x0350,
718 ( short )0x0278, ( short )0x01A0, ( short )0x00F8, ( short )0x00B0,
719 ( short )0x0078, ( short )0x0030, ( short )0xFFE8, ( short )0xFFC8,
720 ( short )0xFFB8, ( short )0xFED0, ( short )0xFE08, ( short )0xFD98,
721 ( short )0xFC70, ( short )0xFB60, ( short )0xFAA8, ( short )0xFA10,
722 ( short )0xF9B8, ( short )0xF980, ( short )0xF9A0, ( short )0xFA00,
723 ( short )0xFA68, ( short )0xFB90, ( short )0xFCB8, ( short )0xFD98,
724 ( short )0xFE68, ( short )0xFF18, ( short )0xFFC0, ( short )0x0078,
725 ( short )0x00F8, ( short )0x0218, ( short )0x0320, ( short )0x03C0,
726 ( short )0x0478, ( short )0x0510, ( short )0x0570, ( short )0x05D8,
727 ( short )0x05E0, ( short )0x05B8, ( short )0x0508, ( short )0x0468,
728 ( short )0x03E0, ( short )0x02F0, ( short )0x0218, ( short )0x0168,
729 ( short )0x00F0, ( short )0x0060, ( short )0xFFD0, ( short )0xFF58,
730 ( short )0xFEC0, ( short )0xFE48, ( short )0xFDB0, ( short )0xFD58,
731 ( short )0xFD38, ( short )0xFCD8, ( short )0xFC80, ( short )0xFC50,
732 ( short )0xFC08, ( short )0xFB48, ( short )0xFA98, ( short )0xF9F8,
733 ( short )0xF8F8, ( short )0xF810, ( short )0xF7F8, ( short )0xF818,
734 ( short )0xF848, ( short )0xF8E8, ( short )0xF9E0, ( short )0xFB08,
735 ( short )0xFC38, ( short )0xFD10, ( short )0xFDE8, ( short )0xFF10,
736 ( short )0xFFD0, ( short )0x0048, ( short )0x00E0, ( short )0x0160,
737 ( short )0x01B8, ( short )0x01C8, ( short )0x01E0, ( short )0x0200,
738 ( short )0x0228, ( short )0x0240, ( short )0x0240, ( short )0x0240,
739 ( short )0x0260, ( short )0x0280, ( short )0x0280, ( short )0x02F0,
740 ( short )0x0370, ( short )0x03C8, ( short )0x03C8, ( short )0x03A8,
741 ( short )0x03A0, ( short )0x02F8, ( short )0x0220, ( short )0x0150,
742 ( short )0x0098, ( short )0xFFE0, ( short )0xFF20, ( short )0xFEA0,
743 ( short )0xFE50, ( short )0xFE18, ( short )0xFD38, ( short )0xFC60,
744 ( short )0xFBE0, ( short )0xFAC8, ( short )0xF9A0, ( short )0xF8B8,
745 ( short )0xF830, ( short )0xF888, ( short )0xF8B8, ( short )0xF908,
746 ( short )0xFA80, ( short )0xFBF8, ( short )0xFD48, ( short )0xFEC8,
747 ( short )0x0040, ( short )0x01B0, ( short )0x0298, ( short )0x0338,
748 ( short )0x03C0, ( short )0x0470, ( short )0x0520, ( short )0x0588,
749 ( short )0x0610, ( short )0x0688, ( short )0x06C8, ( short )0x0670,
750 ( short )0x05E8, ( short )0x0578, ( short )0x0580, ( short )0x0578,
751 ( short )0x0528, ( short )0x0498, ( short )0x0408, ( short )0x0390,
752 ( short )0x03F8, ( short )0x0458, ( short )0x0488, ( short )0x0468,
753 ( short )0x0450, ( short )0x0458, ( short )0x03A8, ( short )0x02D0,
754 ( short )0x0210, ( short )0x0158, ( short )0x0088, ( short )0xFFA8,
755 ( short )0xFF00, ( short )0xFE88, ( short )0xFE30, ( short )0xFD88,
756 ( short )0xFCB8, ( short )0xFC28, ( short )0xFB30, ( short )0xF9F0,
757 ( short )0xF8E8, ( short )0xF890, ( short )0xF890, ( short )0xF8C0,
758 ( short )0xF978, ( short )0xFA78, ( short )0xFBE8, ( short )0xFD20,
759 ( short )0xFE28, ( short )0xFF60, ( short )0x00D8, ( short )0x0220,
760 ( short )0x02F8, ( short )0x0378, ( short )0x03E0, ( short )0x0438,
761 ( short )0x0488, ( short )0x0498, ( short )0x04A8, ( short )0x0480,
762 ( short )0x0440, ( short )0x03C0, ( short )0x02D8, ( short )0x01E8,
763 ( short )0x0140, ( short )0x00D8, ( short )0x0068, ( short )0xFFE0,
764 ( short )0x0068, ( short )0x0130, ( short )0x0228, ( short )0x0260,
765 ( short )0x0278, ( short )0x02D0, ( short )0x02D8, ( short )0x0290,
766 ( short )0x01E0, ( short )0x00D0, ( short )0xFFE0, ( short )0xFEF8,
767 ( short )0xFE08, ( short )0xFD28, ( short )0xFC88, ( short )0xFBE0,
768 ( short )0xFB60, ( short )0xFAD8, ( short )0xFA08, ( short )0xF978,
769 ( short )0xF8E8, ( short )0xF8B0, ( short )0xF8B0, ( short )0xF8D0,
770 ( short )0xF9D0, ( short )0xFAF8, ( short )0xFC18, ( short )0xFDB0,
771 ( short )0xFF38, ( short )0x00A0, ( short )0x01F8, ( short )0x02F8,
772 ( short )0x03C0, ( short )0x0460, ( short )0x04B8, ( short )0x04C8,
773 ( short )0x04C8, ( short )0x04C0, ( short )0x0498, ( short )0x0490,
774 ( short )0x0478, ( short )0x0448, ( short )0x0420, ( short )0x03F8,
775 ( short )0x0328, ( short )0x0238, ( short )0x01B0, ( short )0x0170,
776 ( short )0x0128, ( short )0x0090, ( short )0x00E8, ( short )0x01B8,
777 ( short )0x02B8, ( short )0x0280, ( short )0x0218, ( short )0x0218,
778 ( short )0x01F0, ( short )0x0148, ( short )0x0000, ( short )0xFEC0,
779 ( short )0xFE08, ( short )0xFD70, ( short )0xFCA0, ( short )0xFBF0,
780 ( short )0xFBC0, ( short )0xFBA0, ( short )0xFB80, ( short )0xFB18,
781 ( short )0xFB28, ( short )0xFB98, ( short )0xFBC0, ( short )0xFBD0,
782 ( short )0xFC08, ( short )0xFC78, ( short )0xFDC8, ( short )0xFEC8,
783 ( short )0xFF78, ( short )0x00D0, ( short )0x0238, ( short )0x0360,
784 ( short )0x0398, ( short )0x0360, ( short )0x0368, ( short )0x0380,
785 ( short )0x0318, ( short )0x0250, ( short )0x0208, ( short )0x0220,
786 ( short )0x0218, ( short )0x01F0, ( short )0x01C8, ( short )0x0210,
787 ( short )0x0270, ( short )0x0270, ( short )0x0240, ( short )0x0290,
788 ( short )0x0310, ( short )0x0360, ( short )0x0340, ( short )0x0310,
789 ( short )0x0318, ( short )0x0320, ( short )0x02D8, ( short )0x0240,
790 ( short )0x0158, ( short )0x00A0, ( short )0x0008, ( short )0xFF30,
791 ( short )0xFE50, ( short )0xFDA8, ( short )0xFD28, ( short )0xFCC8,
792 ( short )0xFC60, ( short )0xFBA8, ( short )0xFB40, ( short )0xFB10,
793 ( short )0xFB18, ( short )0xFB28, ( short )0xFB48, ( short )0xFB68,
794 ( short )0xFBA8, ( short )0xFBF8, ( short )0xFCB8, ( short )0xFD78,
795 ( short )0xFE00, ( short )0xFE88, ( short )0xFF30, ( short )0xFF98,
796 ( short )0xFFC8, ( short )0xFFE8, ( short )0x0050, ( short )0x00B0,
797 ( short )0x00E0, ( short )0x0040, ( short )0xFF68, ( short )0xFED8,
798 ( short )0xFEE8, ( short )0xFEE0, ( short )0xFE90, ( short )0xFEA8,
799 ( short )0xFF88, ( short )0x0080, ( short )0x0188, ( short )0x0208,
800 ( short )0x0290, ( short )0x0390, ( short )0x0438, ( short )0x0450,
801 ( short )0x0428, ( short )0x03F8, ( short )0x03E0, ( short )0x0388,
802 ( short )0x02E0, ( short )0x0240, ( short )0x0190, ( short )0x00D0,
803 ( short )0x0000, ( short )0x0000, ( short )0x0018, ( short )0x00FF,
804 ( short )0x0068, ( short )0x00FE, ( short )0x00F8, ( short )0x00FD
805};
806
807gsm_byte gsm_dec_gsmdata[] = {
808 0xD5, 0x1F, 0x74, 0x21, 0xA0, 0x50, 0x40, 0xC9, 0x24, 0x7B, 0xFA, 0x6B,
809 0x52, 0xE0, 0xB6, 0xD6, 0x8E, 0xB9, 0x2B, 0xAE, 0xE0, 0x8B, 0x23, 0x52,
810 0x3B, 0x13, 0x86, 0xE0, 0x14, 0x4A, 0x41, 0x44, 0x32, 0xD3, 0xA1, 0x83,
811 0xA1, 0x1D, 0xA6, 0x80, 0xBA, 0xD2, 0x96, 0x26, 0xFB, 0x84, 0x80, 0x6D,
812 0x9C, 0x25, 0x1D, 0x9B, 0xAA, 0xC0, 0xBB, 0x4C, 0x95, 0xB9, 0x53, 0xAE,
813 0xA0, 0xB6, 0xE4, 0x46, 0x37, 0x1B, 0xD4, 0xA5, 0x7B, 0x1D, 0x22, 0x97,
814 0x00, 0xBA, 0xA5, 0x6D, 0xD2, 0xA1, 0x7E, 0xC0, 0xB9, 0x25, 0xD2, 0xB4,
815 0x94, 0x9E, 0xE0, 0x3E, 0xDE, 0xED, 0xD6, 0xD2, 0xE2, 0xC0, 0xD7, 0x5D,
816 0x8D, 0x59, 0xAC, 0xD3, 0xE4, 0x83, 0x95, 0x59, 0xC0, 0xA1, 0x48, 0xD2,
817 0x66, 0xC7, 0x2C, 0x9E, 0xA0, 0x2A, 0xD3, 0xEE, 0x45, 0x1C, 0x80, 0xE0,
818 0x6B, 0x34, 0x8C, 0x4B, 0x29, 0xCB, 0x00, 0xBA, 0xF6, 0x0D, 0x26, 0x9A,
819 0xD3, 0xA4, 0x82, 0x9D, 0x63, 0x7A, 0xC0, 0x67, 0x24, 0xBA, 0xD6, 0x7C,
820 0xC2, 0xC0, 0x37, 0x20, 0x4F, 0x10, 0xE0, 0xC7, 0x80, 0x6A, 0x77, 0x63,
821 0xBE, 0x6B, 0x5A, 0xC0, 0xB5, 0x34, 0xD1, 0x34, 0x9C, 0xD4, 0xE8, 0x56,
822 0xB2, 0x58, 0x5F, 0x00, 0xB7, 0xAF, 0x92, 0x12, 0x90, 0xD5, 0xA4, 0x39,
823 0x23, 0x4E, 0x46, 0x87, 0x51, 0xAC, 0xD8, 0xDB, 0x6D, 0xCB, 0x17, 0x50,
824 0x89, 0x7B, 0x44, 0x28, 0x03, 0x6B, 0xD5, 0xA9, 0x36, 0x36, 0xD9, 0x6B,
825 0xA8, 0x93, 0x3A, 0x96, 0xEE, 0xFF, 0x67, 0x8B, 0x36, 0xDA, 0x09, 0xB4,
826 0x99, 0x67, 0x2B, 0x88, 0xE4, 0xB5, 0xA5, 0xDA, 0x65, 0x47, 0xDA, 0x1E,
827 0x96, 0xFA, 0xEC, 0xD5, 0xA9, 0x45, 0x63, 0x1A, 0xCB, 0xC9, 0x48, 0x9D,
828 0x83, 0x5F, 0x6F, 0xCB, 0x08, 0x1B, 0x97, 0xC9, 0x18, 0x0A, 0x63, 0xCB,
829 0xA6, 0xE1, 0x84, 0xF5, 0x62, 0x61, 0x6A, 0x84, 0xDC, 0xB6, 0x37, 0x9E,
830 0xD6, 0xAB, 0x3C, 0x53, 0x93, 0xC1, 0x2A, 0xAA, 0x81, 0x8D, 0x6B, 0x65,
831 0x60, 0xA8, 0xFB, 0x2E, 0x22, 0x59, 0x74, 0x61, 0xA6, 0x5D, 0x73, 0x94,
832 0xF8, 0xE4, 0xC1, 0x46, 0x26, 0x5E, 0x8A, 0x86, 0xED, 0xD4, 0xA6, 0x2D,
833 0x57, 0x6B, 0xBE, 0xE8, 0x58, 0xDA, 0x3D, 0x98, 0x99, 0xBE, 0xA8, 0xC2,
834 0xDB, 0x6A, 0x2E, 0x51, 0x62, 0xE5, 0x80, 0x58, 0x76, 0xB8, 0xE4, 0x6C,
835 0x84, 0xCA, 0x98, 0x06, 0x0B, 0xFC, 0xD2, 0x66, 0x7C, 0x62, 0x3A, 0x5B,
836 0xC5, 0xDF, 0x7D, 0x75, 0x49, 0x1E, 0x52, 0xC7, 0x55, 0xF7, 0x84, 0xA6,
837 0xDA, 0x5D, 0x43, 0x26, 0x85, 0x98, 0xD8, 0x8F, 0xB6, 0xC5, 0x28, 0xEB,
838 0x3E, 0x75, 0x04, 0xD2, 0x27, 0xBA, 0x2A, 0x2B, 0xB7, 0x03, 0x13, 0x45,
839 0x35, 0x1B, 0x78, 0x5F, 0xC3, 0xBA, 0xDB, 0xAE, 0x27, 0xC2, 0x5E, 0xA4,
840 0x50, 0x8C, 0x8A, 0xBB, 0x4F, 0x60, 0xC3, 0xEE, 0x41, 0x46, 0x4A, 0xDF,
841 0xD2, 0x27, 0xB2, 0xAD, 0xEB, 0x5F, 0x43, 0x4C, 0x6A, 0x09, 0x2A, 0xCC,
842 0xB7, 0x47, 0x2A, 0xB9, 0x91, 0xB6, 0xD4, 0x5B, 0x25, 0x58, 0xD8, 0xFD,
843 0x46, 0x95, 0x5A, 0xC3, 0x27, 0x5B, 0x3F, 0xFB, 0x12, 0xD2, 0x26, 0xC3,
844 0xA9, 0xA1, 0xB6, 0xA2, 0xCB, 0x1B, 0xD0, 0x73, 0xE4, 0xBA, 0xA1, 0xE9,
845 0x05, 0xBE, 0x79, 0x23, 0xA4, 0xC2, 0x3A, 0x4B, 0x11, 0xE5, 0x68, 0xC4,
846 0xC1, 0xBA, 0xC1, 0xCC, 0x8B, 0x02, 0xD2, 0x63, 0x6C, 0xEE, 0x19, 0x5E,
847 0xE1, 0xB6, 0x4C, 0x1A, 0xB4, 0x5E, 0xF0, 0xC2, 0x27, 0x20, 0x55, 0xBD,
848 0x6D, 0x64, 0xE1, 0xC7, 0x45, 0xA9, 0x65, 0x6D, 0x7D, 0x42, 0x56, 0xD8,
849 0xB2, 0xB6, 0xEC, 0xD3, 0x61, 0x5B, 0x62, 0x61, 0x60, 0xA1, 0x5B, 0xD6,
850 0x15, 0x29, 0x09, 0x6C, 0xA1, 0x3E, 0xAD, 0x65, 0x34, 0xC3, 0xC0, 0xC1,
851 0x22, 0x6D, 0x4C, 0x57, 0x10, 0xDB, 0x41, 0xD2, 0xE1, 0x77, 0x64, 0xF7,
852 0xD3, 0x21, 0x73, 0xA9, 0x29, 0x58, 0xC1, 0xA1, 0x5A, 0x52, 0xB7, 0x32,
853 0x64, 0xC1, 0x67, 0x42, 0x74, 0x2C, 0xDC, 0x61, 0x61, 0x65, 0x8B, 0xCB,
854 0x04, 0xE5, 0x60, 0xC1, 0xC9, 0x5E, 0x8E, 0x36, 0x83, 0xD2, 0xA2, 0x83,
855 0xA9, 0xD9, 0xCD, 0x21, 0xB9, 0x25, 0xCD, 0xE6, 0x1D, 0x60, 0xA1, 0xB4,
856 0xAA, 0x8F, 0xBA, 0x75, 0xC3, 0x01, 0x0B, 0x3B, 0x51, 0xDB, 0xEC, 0x62,
857 0xE1, 0x38, 0xCD, 0x40, 0x3B, 0xD3, 0xD2, 0x26, 0x94, 0x29, 0xD2, 0x61,
858 0x21, 0x6B, 0x4A, 0x8D, 0x24, 0xB5, 0xBB, 0x21, 0x12, 0xA5, 0x99, 0xA5,
859 0x1A, 0xCA, 0xA1, 0xEF, 0x5D, 0xAA, 0xAE, 0xD3, 0x64, 0xE1, 0xA3, 0x6B,
860 0xAE, 0x35, 0x39, 0xD2, 0x66, 0x73, 0xB6, 0x90, 0xC6, 0xC1, 0x32, 0xD1,
861 0xBA, 0xC9, 0x25, 0x65, 0x81, 0xA8, 0xD2, 0xB1, 0xE7, 0x18, 0xBE, 0xC0,
862 0xFC, 0xE4, 0x85, 0xB5, 0x06, 0xB4, 0x81, 0x35, 0x46, 0xB6, 0xC8, 0x9B
863};
864
865#endif /* GSM_DEC_DATA_H */
diff --git a/baseline/source/gsm_dec/gsm.h b/baseline/source/gsm_dec/gsm.h
new file mode 100644
index 0000000..1d89577
--- /dev/null
+++ b/baseline/source/gsm_dec/gsm.h
@@ -0,0 +1,14 @@
1#ifndef GSM_DEC_GSM_H
2#define GSM_DEC_GSM_H
3
4/*
5 Interface
6*/
7typedef struct gsm_state *gsm;
8typedef short gsm_signal; /* signed 16 bit */
9typedef unsigned char gsm_byte;
10typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */
11
12#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */
13
14#endif /* GSM_DEC_GSM_H */
diff --git a/baseline/source/gsm_dec/gsm_dec.c b/baseline/source/gsm_dec/gsm_dec.c
new file mode 100644
index 0000000..7a0a1bd
--- /dev/null
+++ b/baseline/source/gsm_dec/gsm_dec.c
@@ -0,0 +1,764 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: gsm_dec
7
8 Author: Jutta Degener and Carsten Bormann,
9 Technische Universitaet Berlin
10
11 Function: Decoding of GSM data
12
13 Source: included in MediaBench/gsm
14
15 Original name: gsm_decode
16
17 Changes: no major functional changes
18
19 License: see the accompanying COPYRIGHT file
20
21*/
22
23
24#include "../extra.h"
25#include "gsm.h"
26#include "add.h"
27#include "data.h"
28#include "private.h"
29
30#define SAMPLES 20
31
32/*
33 Forward declaration of global variables
34*/
35
36struct gsm_state gsm_dec_state;
37gsm gsm_dec_state_ptr;
38volatile int gsm_dec_result;
39
40/*
41 Forward declaration of functions
42*/
43
44extern word gsm_dec_sub( word a, word b );
45extern word gsm_dec_asl( word a, int n );
46void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios(
47 word *LARc, /* coded log area ratio [0..7] IN */
48 word *LARpp ); /* out: decoded .. */
49
50void gsm_dec_Coefficients_0_12( word *LARpp_j_1, word *LARpp_j, word *LARp );
51
52void gsm_dec_LARp_to_rp( word *LARp ); /* [0..7] IN/OUT */
53
54extern int gsm_dec_decode( gsm, gsm_byte *, gsm_signal * );
55
56extern void gsm_dec_Decoder( struct gsm_state *S,
57 word *LARcr, /* [0..7] IN */
58 word *Ncr, /* [0..3] IN */
59 word *bcr, /* [0..3] IN */
60 word *Mcr, /* [0..3] IN */
61 word *xmaxcr, /* [0..3] IN */
62 word *xMcr, /* [0..13*4] IN */
63 word *s ); /* [0..159] OUT */
64
65extern void gsm_dec_Long_Term_Synthesis_Filtering(
66 struct gsm_state *S, word Ncr, word bcr,
67 word *erp, /* [0..39] IN */
68 word *drp ); /* [-120..-1] IN, [0..40] OUT */
69
70void gsm_dec_RPE_Decoding( word xmaxcr, word Mcr,
71 word *xMcr, /* [0..12], 3 bits IN */
72 word *erp ); /* [0..39] OUT */
73
74void gsm_dec_RPE_grid_positioning( word Mc, /* grid position IN */
75 word *xMp, /* [0..12] IN */
76 word *ep /* [0..39] OUT */
77 );
78
79void gsm_dec_APCM_inverse_quantization( word *xMc, /* [0..12] IN */
80 word mant, word exp,
81 word *xMp ); /* [0..12] OUT */
82
83extern word gsm_dec_asr( word a, int n );
84
85void gsm_dec_APCM_quantization_xmaxc_to_exp_mant(
86 word xmaxc, /* IN */
87 word *exp_out, /* OUT */
88 word *mant_out ); /* OUT */
89
90void gsm_dec_Postprocessing( struct gsm_state *S, word *s );
91
92void gsm_dec_Coefficients_13_26( word *LARpp_j_1, word *LARpp_j,
93 word *LARp );
94
95void gsm_dec_Coefficients_40_159( word *LARpp_j, word *LARp );
96
97void gsm_dec_Short_term_synthesis_filtering( struct gsm_state *S,
98 word *rrp, /* [0..7] IN */
99 int k, /* k_end - k_start */
100 word *wt, /* [0..k-1] IN */
101 word *sr /* [0..k-1] OUT */
102 );
103
104void gsm_dec_Short_Term_Synthesis_Filter(
105 struct gsm_state *S, word *LARcr, /* received log area ratios [0..7] IN */
106 word *wt, /* received d [0..159] IN */
107 word *s /* signal s [0..159] OUT */
108);
109
110void gsm_dec_Coefficients_27_39( word *LARpp_j_1, word *LARpp_j, word *LARp );
111
112gsm gsm_dec_create( void );
113void gsm_dec_init( void );
114void gsm_dec_main( void );
115//int main( void );
116
117/* add.c */
118
119word gsm_dec_sub( word a, word b )
120{
121 longword diff = ( longword )a - ( longword )b;
122 return saturate( diff );
123}
124
125word gsm_dec_asl( word a, int n )
126{
127 if ( n >= 16 )
128 return 0;
129 if ( n <= -16 )
130 return -( a < 0 );
131 if ( n < 0 )
132 return gsm_dec_asr( a, -n );
133 return a << n;
134}
135
136/* short_term.c */
137/*
138 SHORT TERM ANALYSIS FILTERING SECTION
139*/
140
141/* 4.2.8 */
142
143void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios(
144 word *LARc, /* coded log area ratio [0..7] IN */
145 word *LARpp ) /* out: decoded .. */
146{
147 word temp1 /* for STEP */;
148 long ltmp; /* for GSM_ADD */
149
150 /* This procedure requires for efficient implementation
151 two tables.
152
153 INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
154 MIC[1..8] = minimum value of the LARc[1..8]
155 */
156
157 /* Compute the LARpp[1..8]
158 */
159
160 /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) {
161
162 temp1 = GSM_ADD( *LARc, *MIC ) << 10;
163 temp2 = *B << 1;
164 temp1 = GSM_SUB( temp1, temp2 );
165
166 temp1 = GSM_MULT_R( *INVA, temp1 );
167 LARpp = GSM_ADD( temp1, temp1 );
168 }
169 */
170
171#undef STEP
172#define STEP(B, MIC, INVA) \
173 temp1 = GSM_ADD(*LARc++, MIC) << 10; \
174 temp1 = GSM_SUB(temp1, B << 1); \
175 temp1 = GSM_MULT_R(INVA, temp1); \
176 *LARpp++ = GSM_ADD(temp1, temp1);
177
178 STEP( 0, -32, 13107 );
179 STEP( 0, -32, 13107 );
180 STEP( 2048, -16, 13107 );
181 STEP( 2560, -16, 13107 );
182
183 STEP( 94, -8, 19223 );
184 STEP( 1792, -8, 17476 );
185 STEP( 341, -4, 31454 );
186 STEP( 1144, -4, 29708 );
187
188 /* NOTE: the addition of *MIC is used to restore the sign of *LARc.
189 */
190}
191
192/* 4.2.9 */
193/* Computation of the quantized reflection coefficients
194*/
195
196/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8]
197*/
198
199/*
200 Within each frame of 160 analyzed speech samples the short term
201 analysis and synthesis filters operate with four different sets of
202 coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
203 and the actual set of decoded LARs (LARpp(j))
204
205 (Initial value: LARpp(j-1)[1..8] = 0.)
206*/
207
208
209void gsm_dec_Coefficients_0_12( word *LARpp_j_1, word *LARpp_j, word *LARp )
210{
211 int i;
212 longword ltmp;
213
214 _Pragma( "loopbound min 8 max 8" )
215 for ( i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++ ) {
216 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ) );
217 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1 ) );
218 }
219}
220
221/* 4.2.9.2 */
222
223void gsm_dec_LARp_to_rp( word *LARp ) /* [0..7] IN/OUT */
224/*
225 The input of this procedure is the interpolated LARp[0..7] array.
226 The reflection coefficients, rp[i], are used in the analysis
227 filter and in the synthesis filter.
228*/
229{
230 int i;
231 word temp;
232 longword ltmp;
233
234 _Pragma( "loopbound min 8 max 8" )
235 for ( i = 1; i <= 8; i++, LARp++ ) {
236
237 /* temp = GSM_ABS( *LARp );
238
239 if (temp < 11059) temp <<= 1;
240 else if (temp < 20070) temp += 11059;
241 else temp = GSM_ADD( temp >> 2, 26112 );
242
243 * *LARp = *LARp < 0 ? -temp : temp;
244 */
245
246 if ( *LARp < 0 ) {
247 temp = *LARp == MIN_WORD ? MAX_WORD : -( *LARp );
248 *LARp = -( ( temp < 11059 ) ? temp << 1
249 : ( ( temp < 20070 ) ? temp + 11059
250 : GSM_ADD( temp >> 2, 26112 ) ) );
251 } else {
252 temp = *LARp;
253 *LARp = ( temp < 11059 )
254 ? temp << 1
255 : ( ( temp < 20070 ) ? temp + 11059 : GSM_ADD( temp >> 2, 26112 ) );
256 }
257 }
258}
259
260void gsm_dec_Decoder( struct gsm_state *S,
261 word *LARcr, /* [0..7] IN */
262 word *Ncr, /* [0..3] IN */
263 word *bcr, /* [0..3] IN */
264 word *Mcr, /* [0..3] IN */
265 word *xmaxcr, /* [0..3] IN */
266 word *xMcr, /* [0..13*4] IN */
267 word *s ) /* [0..159] OUT */
268{
269 int j, k;
270 word erp[40], wt[160];
271 word *drp = S->dp0 + 120;
272
273 _Pragma( "loopbound min 4 max 4" )
274 for ( j = 0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13 ) {
275
276 gsm_dec_RPE_Decoding( *xmaxcr, *Mcr, xMcr, erp );
277 gsm_dec_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp );
278
279 _Pragma( "loopbound min 40 max 40" )
280 for ( k = 0; k <= 39; k++ )
281 wt[j * 40 + k] = drp[k];
282 }
283
284 gsm_dec_Short_Term_Synthesis_Filter( S, LARcr, wt, s );
285 gsm_dec_Postprocessing( S, s );
286}
287
288/* 4.3.2 */
289void gsm_dec_Long_Term_Synthesis_Filtering(
290 struct gsm_state *S,
291 word Ncr, word bcr, word *erp, /* [0..39] IN */
292 word *drp /* [-120..-1] IN, [0..40] OUT */
293)
294/*
295 This procedure uses the bcr and Ncr parameter to realize the
296 long term synthesis filtering. The decoding of bcr needs
297 table 4.3b.
298*/
299{
300 longword ltmp; /* for ADD */
301 int k;
302 word brp, drpp, Nr;
303
304 /* Check the limits of Nr.
305 */
306 Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr;
307 S->nrp = Nr;
308
309 /* Decoding of the LTP gain bcr
310 */
311 brp = gsm_dec_QLB[bcr];
312
313 /* Computation of the reconstructed short term residual
314 signal drp[0..39]
315 */
316
317 _Pragma( "loopbound min 40 max 40" )
318 for ( k = 0; k <= 39; k++ ) {
319 drpp = GSM_MULT_R( brp, drp[k - Nr] );
320 drp[k] = GSM_ADD( erp[k], drpp );
321 }
322
323 /*
324 Update of the reconstructed short term residual signal
325 drp[ -1..-120 ]
326 */
327
328 _Pragma( "loopbound min 120 max 120" )
329 for ( k = 0; k <= 119; k++ )
330 drp[-120 + k] = drp[-80 + k];
331}
332
333void gsm_dec_RPE_Decoding( word xmaxcr, word Mcr,
334 word *xMcr, /* [0..12], 3 bits IN */
335 word *erp ) /* [0..39] OUT */
336{
337 word exp, mant;
338 word xMp[13];
339
340 gsm_dec_APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant );
341 gsm_dec_APCM_inverse_quantization( xMcr, mant, exp, xMp );
342 gsm_dec_RPE_grid_positioning( Mcr, xMp, erp );
343}
344
345/* 4.2.17 */
346void gsm_dec_RPE_grid_positioning(
347 word Mc, /* grid position IN */
348 word *xMp, /* [0..12] IN */
349 word *ep /* [0..39] OUT */ )
350/*
351 This procedure computes the reconstructed long term residual signal
352 ep[0..39] for the LTP analysis filter. The inputs are the Mc
353 which is the grid position selection and the xMp[0..12] decoded
354 RPE samples which are upsampled by a factor of 3 by inserting zero
355 values.
356*/
357{
358 int i = 13;
359
360 /* Rewritten Duff's device for WCET analysis! */
361 switch ( Mc ) {
362 case 3:
363 *ep++ = 0;
364 case 2:
365 *ep++ = 0;
366 case 1:
367 *ep++ = 0;
368 case 0:
369 *ep++ = *xMp++;
370 i--;
371 }
372
373 _Pragma( "loopbound min 12 max 12" )
374 do {
375 *ep++ = 0;
376 *ep++ = 0;
377 *ep++ = *xMp++;
378 } while ( --i );
379
380 _Pragma( "loopbound min 0 max 2" )
381 while ( ++Mc < 4 )
382 *ep++ = 0;
383
384}
385
386/* 4.2.16 */
387void gsm_dec_APCM_inverse_quantization( word *xMc, /* [0..12] IN */
388 word mant,
389 word exp,
390 word *xMp ) /* [0..12] OUT */
391/*
392 This part is for decoding the RPE sequence of coded xMc[0..12]
393 samples to obtain the xMp[0..12] array. Table 4.6 is used to get
394 the mantissa of xmaxc (FAC[0..7]).
395*/
396{
397 int i;
398 word temp, temp1, temp2, temp3;
399 longword ltmp;
400
401 temp1 = gsm_dec_FAC[mant]; /* see 4.2-15 for mant */
402 temp2 = gsm_dec_sub( 6, exp ); /* see 4.2-15 for exp */
403 temp3 = gsm_dec_asl( 1, gsm_dec_sub( temp2, 1 ) );
404
405 _Pragma( "loopbound min 13 max 13" )
406 for ( i = 13; i--; ) {
407
408 /* temp = gsm_sub( *xMc++ << 1, 7 ); */
409 temp = ( *xMc++ << 1 ) - 7; /* restore sign */
410
411 temp <<= 12; /* 16 bit signed */
412 temp = GSM_MULT_R( temp1, temp );
413 temp = GSM_ADD( temp, temp3 );
414 *xMp++ = gsm_dec_asr( temp, temp2 );
415 }
416}
417
418/*
419 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
420*/
421word gsm_dec_asr( word a, int n )
422{
423 if ( n >= 16 )
424 return -( a < 0 );
425 if ( n <= -16 )
426 return 0;
427 if ( n < 0 )
428 return a << -n;
429
430 return a >> n;
431}
432
433/* rpe.c */
434/* 4.12.15 */
435void gsm_dec_APCM_quantization_xmaxc_to_exp_mant( word xmaxc, /* IN */
436 word *exp_out, /* OUT */
437 word *mant_out ) /* OUT */
438{
439 word exp, mant;
440
441 /* Compute exponent and mantissa of the decoded version of xmaxc
442 */
443 exp = 0;
444 if ( xmaxc > 15 )
445 exp = SASR( xmaxc, 3 ) - 1;
446 mant = xmaxc - ( exp << 3 );
447
448 if ( mant == 0 ) {
449 exp = -4;
450 mant = 7;
451 } else {
452 _Pragma( "loopbound min 0 max 3" )
453 while ( mant <= 7 ) {
454 mant = mant << 1 | 1;
455 exp--;
456 }
457 mant -= 8;
458 }
459
460 *exp_out = exp;
461 *mant_out = mant;
462}
463
464/* decode.c */
465/*
466 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER
467*/
468void gsm_dec_Postprocessing( struct gsm_state *S, word *s )
469{
470 int k;
471 word msr = S->msr;
472 longword ltmp; /* for GSM_ADD */
473 word tmp;
474
475 _Pragma( "loopbound min 159 max 159" )
476 for ( k = 160; --k; ++s ) {
477 tmp = GSM_MULT_R( msr, 28180 );
478 msr = GSM_ADD( *s, tmp ); /* Deemphasis */
479 *s = GSM_ADD( msr, msr ) & 0xFFF8; /* Truncation & Upscaling */
480 }
481 S->msr = msr;
482}
483
484void gsm_dec_Coefficients_13_26( word *LARpp_j_1, word *LARpp_j, word *LARp )
485{
486 int i;
487 longword ltmp;
488 _Pragma( "loopbound min 8 max 8" )
489 for ( i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++ )
490 *LARp = GSM_ADD( SASR( *LARpp_j_1, 1 ), SASR( *LARpp_j, 1 ) );
491}
492
493void gsm_dec_Coefficients_40_159( word *LARpp_j, word *LARp )
494{
495 int i;
496
497 _Pragma( "loopbound min 8 max 8" )
498 for ( i = 1; i <= 8; i++, LARp++, LARpp_j++ )
499 *LARp = *LARpp_j;
500}
501
502void gsm_dec_Short_term_synthesis_filtering( struct gsm_state *S,
503 word *rrp, /* [0..7] IN */
504 int k, /* k_end - k_start */
505 word *wt, /* [0..k-1] IN */
506 word *sr ) /* [0..k-1] OUT */
507{
508 word *v = S->v;
509 int i;
510 word sri, tmp1, tmp2;
511 longword ltmp; /* for GSM_ADD & GSM_SUB */
512
513 _Pragma( "loopbound min 12 max 118" )
514 while ( --k ) {
515 sri = *wt++;
516 _Pragma( "loopbound min 8 max 8" )
517 for ( i = 8; i--; ) {
518
519 /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) );
520 */
521 tmp1 = rrp[i];
522 tmp2 = v[i];
523 tmp2 =
524 ( tmp1 == MIN_WORD && tmp2 == MIN_WORD
525 ? MAX_WORD
526 : 0x0FFFF & ( ( ( longword )tmp1 * ( longword )tmp2 + 16384 ) >> 15 ) );
527
528 sri = GSM_SUB( sri, tmp2 );
529
530 /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) );
531 */
532 tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD
533 ? MAX_WORD
534 : 0x0FFFF & ( ( ( longword )tmp1 * ( longword )sri + 16384 ) >> 15 ) );
535
536 v[i + 1] = GSM_ADD( v[i], tmp1 );
537 }
538 *sr++ = v[0] = sri;
539 }
540}
541
542void gsm_dec_Short_Term_Synthesis_Filter(
543 struct gsm_state *S,
544 word *LARcr, /* received log area ratios [0..7] IN */
545 word *wt, /* received d [0..159] IN */
546 word *s /* signal s [0..159] OUT */
547)
548{
549 word *LARpp_j = S->LARpp[S->j];
550 word *LARpp_j_1 = S->LARpp[S->j ^= 1];
551
552 word LARp[8];
553
554 gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j );
555
556 gsm_dec_Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
557 gsm_dec_LARp_to_rp( LARp );
558 gsm_dec_Short_term_synthesis_filtering( S, LARp, 13, wt, s );
559
560 gsm_dec_Coefficients_13_26( LARpp_j_1, LARpp_j, LARp );
561 gsm_dec_LARp_to_rp( LARp );
562 gsm_dec_Short_term_synthesis_filtering( S, LARp, 14, wt + 13, s + 13 );
563
564 gsm_dec_Coefficients_27_39( LARpp_j_1, LARpp_j, LARp );
565 gsm_dec_LARp_to_rp( LARp );
566 gsm_dec_Short_term_synthesis_filtering( S, LARp, 13, wt + 27, s + 27 );
567
568 gsm_dec_Coefficients_40_159( LARpp_j, LARp );
569 gsm_dec_LARp_to_rp( LARp );
570 gsm_dec_Short_term_synthesis_filtering( S, LARp, 120, wt + 40, s + 40 );
571}
572
573void gsm_dec_Coefficients_27_39( word *LARpp_j_1, word *LARpp_j, word *LARp )
574{
575 int i;
576 longword ltmp;
577
578 _Pragma( "loopbound min 8 max 8" )
579 for ( i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++ ) {
580 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ) );
581 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 ) );
582 }
583}
584
585/*
586 Initialization- and return-value-related functions
587*/
588
589gsm gsm_dec_create( void )
590{
591 unsigned int i;
592 gsm r;
593 volatile char x = 0;
594
595 r = &gsm_dec_state;
596
597 _Pragma( "loopbound min 648 max 648" )
598 for ( i = 0; i < sizeof( *r ); i++ )
599 ( ( char * )r )[i] = 0 + x;
600
601 r->nrp = 40;
602
603 return r;
604}
605
606void gsm_dec_init( void )
607{
608 gsm_dec_state_ptr = gsm_dec_create();
609}
610
611int gsm_dec_return( void )
612{
613 return gsm_dec_result;
614}
615
616/*
617 Main functions
618*/
619
620/* gsm_decode.c */
621int gsm_dec_decode( gsm s, gsm_byte *c, gsm_signal *target )
622{
623 word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13 * 4];
624
625 /* GSM_MAGIC = (*c >> 4) & 0xF; */
626
627 if ( ( ( *c >> 4 ) & 0x0F ) != GSM_MAGIC )
628 return -1;
629
630 LARc[0] = ( *c++ & 0xF ) << 2; /* 1 */
631 LARc[0] |= ( *c >> 6 ) & 0x3;
632 LARc[1] = *c++ & 0x3F;
633 LARc[2] = ( *c >> 3 ) & 0x1F;
634 LARc[3] = ( *c++ & 0x7 ) << 2;
635 LARc[3] |= ( *c >> 6 ) & 0x3;
636 LARc[4] = ( *c >> 2 ) & 0xF;
637 LARc[5] = ( *c++ & 0x3 ) << 2;
638 LARc[5] |= ( *c >> 6 ) & 0x3;
639 LARc[6] = ( *c >> 3 ) & 0x7;
640 LARc[7] = *c++ & 0x7;
641 Nc[0] = ( *c >> 1 ) & 0x7F;
642 bc[0] = ( *c++ & 0x1 ) << 1;
643 bc[0] |= ( *c >> 7 ) & 0x1;
644 Mc[0] = ( *c >> 5 ) & 0x3;
645 xmaxc[0] = ( *c++ & 0x1F ) << 1;
646 xmaxc[0] |= ( *c >> 7 ) & 0x1;
647 xmc[0] = ( *c >> 4 ) & 0x7;
648 xmc[1] = ( *c >> 1 ) & 0x7;
649 xmc[2] = ( *c++ & 0x1 ) << 2;
650 xmc[2] |= ( *c >> 6 ) & 0x3;
651 xmc[3] = ( *c >> 3 ) & 0x7;
652 xmc[4] = *c++ & 0x7;
653 xmc[5] = ( *c >> 5 ) & 0x7;
654 xmc[6] = ( *c >> 2 ) & 0x7;
655 xmc[7] = ( *c++ & 0x3 ) << 1; /* 10 */
656 xmc[7] |= ( *c >> 7 ) & 0x1;
657 xmc[8] = ( *c >> 4 ) & 0x7;
658 xmc[9] = ( *c >> 1 ) & 0x7;
659 xmc[10] = ( *c++ & 0x1 ) << 2;
660 xmc[10] |= ( *c >> 6 ) & 0x3;
661 xmc[11] = ( *c >> 3 ) & 0x7;
662 xmc[12] = *c++ & 0x7;
663 Nc[1] = ( *c >> 1 ) & 0x7F;
664 bc[1] = ( *c++ & 0x1 ) << 1;
665 bc[1] |= ( *c >> 7 ) & 0x1;
666 Mc[1] = ( *c >> 5 ) & 0x3;
667 xmaxc[1] = ( *c++ & 0x1F ) << 1;
668 xmaxc[1] |= ( *c >> 7 ) & 0x1;
669 xmc[13] = ( *c >> 4 ) & 0x7;
670 xmc[14] = ( *c >> 1 ) & 0x7;
671 xmc[15] = ( *c++ & 0x1 ) << 2;
672 xmc[15] |= ( *c >> 6 ) & 0x3;
673 xmc[16] = ( *c >> 3 ) & 0x7;
674 xmc[17] = *c++ & 0x7;
675 xmc[18] = ( *c >> 5 ) & 0x7;
676 xmc[19] = ( *c >> 2 ) & 0x7;
677 xmc[20] = ( *c++ & 0x3 ) << 1;
678 xmc[20] |= ( *c >> 7 ) & 0x1;
679 xmc[21] = ( *c >> 4 ) & 0x7;
680 xmc[22] = ( *c >> 1 ) & 0x7;
681 xmc[23] = ( *c++ & 0x1 ) << 2;
682 xmc[23] |= ( *c >> 6 ) & 0x3;
683 xmc[24] = ( *c >> 3 ) & 0x7;
684 xmc[25] = *c++ & 0x7;
685 Nc[2] = ( *c >> 1 ) & 0x7F;
686 bc[2] = ( *c++ & 0x1 ) << 1; /* 20 */
687 bc[2] |= ( *c >> 7 ) & 0x1;
688 Mc[2] = ( *c >> 5 ) & 0x3;
689 xmaxc[2] = ( *c++ & 0x1F ) << 1;
690 xmaxc[2] |= ( *c >> 7 ) & 0x1;
691 xmc[26] = ( *c >> 4 ) & 0x7;
692 xmc[27] = ( *c >> 1 ) & 0x7;
693 xmc[28] = ( *c++ & 0x1 ) << 2;
694 xmc[28] |= ( *c >> 6 ) & 0x3;
695 xmc[29] = ( *c >> 3 ) & 0x7;
696 xmc[30] = *c++ & 0x7;
697 xmc[31] = ( *c >> 5 ) & 0x7;
698 xmc[32] = ( *c >> 2 ) & 0x7;
699 xmc[33] = ( *c++ & 0x3 ) << 1;
700 xmc[33] |= ( *c >> 7 ) & 0x1;
701 xmc[34] = ( *c >> 4 ) & 0x7;
702 xmc[35] = ( *c >> 1 ) & 0x7;
703 xmc[36] = ( *c++ & 0x1 ) << 2;
704 xmc[36] |= ( *c >> 6 ) & 0x3;
705 xmc[37] = ( *c >> 3 ) & 0x7;
706 xmc[38] = *c++ & 0x7;
707 Nc[3] = ( *c >> 1 ) & 0x7F;
708 bc[3] = ( *c++ & 0x1 ) << 1;
709 bc[3] |= ( *c >> 7 ) & 0x1;
710 Mc[3] = ( *c >> 5 ) & 0x3;
711 xmaxc[3] = ( *c++ & 0x1F ) << 1;
712 xmaxc[3] |= ( *c >> 7 ) & 0x1;
713 xmc[39] = ( *c >> 4 ) & 0x7;
714 xmc[40] = ( *c >> 1 ) & 0x7;
715 xmc[41] = ( *c++ & 0x1 ) << 2;
716 xmc[41] |= ( *c >> 6 ) & 0x3;
717 xmc[42] = ( *c >> 3 ) & 0x7;
718 xmc[43] = *c++ & 0x7; /* 30 */
719 xmc[44] = ( *c >> 5 ) & 0x7;
720 xmc[45] = ( *c >> 2 ) & 0x7;
721 xmc[46] = ( *c++ & 0x3 ) << 1;
722 xmc[46] |= ( *c >> 7 ) & 0x1;
723 xmc[47] = ( *c >> 4 ) & 0x7;
724 xmc[48] = ( *c >> 1 ) & 0x7;
725 xmc[49] = ( *c++ & 0x1 ) << 2;
726 xmc[49] |= ( *c >> 6 ) & 0x3;
727 xmc[50] = ( *c >> 3 ) & 0x7;
728 xmc[51] = *c & 0x7; /* 33 */
729
730 gsm_dec_Decoder( s, LARc, Nc, bc, Mc, xmaxc, xmc, target );
731
732 return 0;
733}
734
735void _Pragma( "entrypoint" ) gsm_dec_main( void )
736{
737 gsm r;
738 unsigned i;
739 gsm_dec_result = 0;
740
741 r = gsm_dec_state_ptr;
742
743 _Pragma( "loopbound min 1 max 1" )
744 for ( i = 0; i < SAMPLES; i++ ) {
745 if ( gsm_dec_decode( r, gsm_dec_gsmdata + i * sizeof( gsm_frame ),
746 gsm_dec_pcmdata + i * 160 ) ) {
747 gsm_dec_result = 1;
748 return;
749 }
750 }
751}
752
753int main( int argc, char **argv)
754{
755 SET_UP
756 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
757 START_LOOP
758 gsm_dec_init();
759 gsm_dec_main();
760 STOP_LOOP
761 }
762 WRITE_TO_FILE
763 return ( gsm_dec_return() );
764}
diff --git a/baseline/source/gsm_dec/private.h b/baseline/source/gsm_dec/private.h
new file mode 100644
index 0000000..80b5c83
--- /dev/null
+++ b/baseline/source/gsm_dec/private.h
@@ -0,0 +1,44 @@
1#ifndef GSM_DEC_PRIVATE_H
2#define GSM_DEC_PRIVATE_H
3
4typedef short word; /* 16 bit signed int */
5typedef long longword; /* 32 bit signed int */
6
7typedef unsigned short uword; /* unsigned word */
8typedef unsigned long ulongword; /* unsigned longword */
9
10/* Table 4.6 Normalized direct mantissa used to compute xM/xmax
11*/
12/* i 0 1 2 3 4 5 6 7 */
13word gsm_dec_FAC[8] = {
14 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 };
15
16struct gsm_state {
17 word dp0[ 280 ];
18 word z1; /* preprocessing.c, Offset_com. */
19 longword L_z2; /* Offset_com. */
20 int mp; /* Preemphasis */
21 word u[8]; /* short_term_aly_filter.c */
22 word LARpp[2][8]; /* */
23 word j; /* */
24 word nrp; /* 40 */ /* long_term.c, synthesis */
25 word v[9]; /* short_term.c, synthesis */
26 word msr; /* decoder.c, Postprocessing */
27};
28
29
30#define MIN_WORD ((-32767)-1)
31#define MAX_WORD ( 32767)
32
33#define MIN_LONGWORD ((-2147483647)-1)
34#define MAX_LONGWORD ( 2147483647)
35
36/* >> is a signed arithmetic shift right */
37#define SASR(x, by) ((x) >> (by))
38
39/* Table 4.3b Quantization levels of the LTP gain quantizer
40*/
41/* bc 0 1 2 3 */
42word gsm_dec_QLB[4] = { 3277, 11469, 21299, 32767 };
43
44#endif /* GSM_DEC_PRIVATE_H */
diff --git a/baseline/source/gsm_enc/COPYRIGHT b/baseline/source/gsm_enc/COPYRIGHT
new file mode 100644
index 0000000..eba0e52
--- /dev/null
+++ b/baseline/source/gsm_enc/COPYRIGHT
@@ -0,0 +1,16 @@
1Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
2Technische Universitaet Berlin
3
4Any use of this software is permitted provided that this notice is not
5removed and that neither the authors nor the Technische Universitaet Berlin
6are deemed to have made any representations as to the suitability of this
7software for any purpose nor are held responsible for any defects of
8this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
9
10As a matter of courtesy, the authors request to be informed about uses
11this software has found, about bugs in this software, and about any
12improvements that may be of general interest.
13
14Berlin, 28.11.1994
15Jutta Degener
16Carsten Bormann
diff --git a/baseline/source/gsm_enc/ChangeLog.txt b/baseline/source/gsm_enc/ChangeLog.txt
new file mode 100644
index 0000000..4dbeeda
--- /dev/null
+++ b/baseline/source/gsm_enc/ChangeLog.txt
@@ -0,0 +1,8 @@
12017-06-28:
2- Rename benchmark to gsm_enc.
3- Add prefix 'gsm_enc_'.
4- Introduce gsm_enc_init and gsm_enc_return functions.
5- Rewrite negative shifts to avoid undefined behavior.
6- Fix comparisons between signed and unsigned types.
7- Remove unused variables and parameters.
8- Fix memory corruption in gsm_enc_Short_term_analysis_filtering.
diff --git a/baseline/source/gsm_enc/data.h b/baseline/source/gsm_enc/data.h
new file mode 100644
index 0000000..e656335
--- /dev/null
+++ b/baseline/source/gsm_enc/data.h
@@ -0,0 +1,452 @@
1#ifndef DATA_H
2#define DATA_H
3
4gsm_signal gsm_enc_pcmdata[] = {
5 (short)0x0000, (short)0x0000, (short)0x0010, (short)0x0010, (short)0x0010, (short)0x0020, (short)0x0020, (short)0x0018,
6 (short)0x0028, (short)0x0020, (short)0x0020, (short)0x0028, (short)0x0028, (short)0x0020, (short)0x0030, (short)0x0030,
7 (short)0x0028, (short)0x0010, (short)0x0008, (short)0x0000, (short)0x0050, (short)0x0060, (short)0x0058, (short)0x00D0,
8 (short)0x00E0, (short)0x00D0, (short)0x0118, (short)0x0128, (short)0x0118, (short)0x0128, (short)0x0110, (short)0x0100,
9 (short)0x00A0, (short)0x0058, (short)0x0048, (short)0x0058, (short)0x0060, (short)0x0058, (short)0x0050, (short)0x0048,
10 (short)0x0040, (short)0x0030, (short)0x0020, (short)0x0010, (short)0x0008, (short)0xFFF8, (short)0xFFE8, (short)0xFFE0,
11 (short)0xFFD8, (short)0xFFC8, (short)0xFFC0, (short)0xFFC0, (short)0xFF98, (short)0xFF78, (short)0xFF78, (short)0xFFC8,
12 (short)0x0000, (short)0x0010, (short)0x0040, (short)0x0060, (short)0x0068, (short)0x0078, (short)0x0078, (short)0x0070,
13 (short)0x00A8, (short)0x00C8, (short)0x00C8, (short)0x00E0, (short)0x00F0, (short)0x00E8, (short)0x00F8, (short)0x00F8,
14 (short)0x00F0, (short)0x00E0, (short)0x00C8, (short)0x00B8, (short)0x00E8, (short)0x0100, (short)0x00F8, (short)0x00E8,
15 (short)0x00D8, (short)0x00C0, (short)0x00A8, (short)0x0020, (short)0xFFC0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA8,
16 (short)0xFFB0, (short)0xFFD0, (short)0xFFF8, (short)0x0000, (short)0x0020, (short)0x0030, (short)0x0030, (short)0x0030,
17 (short)0x0028, (short)0x0020, (short)0xFFF0, (short)0xFFD0, (short)0xFFC8, (short)0xFFC8, (short)0xFFD0, (short)0xFFD8,
18 (short)0xFFE8, (short)0xFFF8, (short)0xFFF8, (short)0x0008, (short)0x0018, (short)0x0018, (short)0x0078, (short)0x00B8,
19 (short)0x00C0, (short)0x0100, (short)0x0130, (short)0x0128, (short)0x0108, (short)0x00D8, (short)0x00C0, (short)0x0078,
20 (short)0x0038, (short)0x0020, (short)0x0020, (short)0x0000, (short)0xFFE0, (short)0xFFE0, (short)0xFFD8, (short)0xFFC8,
21 (short)0xFFC8, (short)0xFFA0, (short)0xFF88, (short)0xFF98, (short)0xFF80, (short)0xFF70, (short)0xFF80, (short)0xFF78,
22 (short)0xFF78, (short)0xFF90, (short)0xFF80, (short)0xFF78, (short)0xFF78, (short)0xFF50, (short)0xFF30, (short)0xFF50,
23 (short)0xFF38, (short)0xFF30, (short)0xFF40, (short)0xFF58, (short)0xFF70, (short)0xFF80, (short)0xFF50, (short)0xFF38,
24 (short)0xFF40, (short)0xFF18, (short)0xFF00, (short)0xFF08, (short)0xFF40, (short)0xFF68, (short)0xFF80, (short)0xFF88,
25 (short)0xFF88, (short)0xFF88, (short)0xFF88, (short)0xFFB8, (short)0xFFE0, (short)0xFFF0, (short)0xFFD0, (short)0xFFB8,
26 (short)0xFFB8, (short)0xFF90, (short)0xFF70, (short)0xFF70, (short)0xFF50, (short)0xFF40, (short)0xFF40, (short)0xFF58,
27 (short)0xFF70, (short)0xFF80, (short)0xFFC8, (short)0x0000, (short)0x0018, (short)0x0030, (short)0x0048, (short)0x0048,
28 (short)0x0028, (short)0x0008, (short)0xFFF8, (short)0xFFD8, (short)0xFFC8, (short)0xFFB8, (short)0xFF98, (short)0xFF78,
29 (short)0xFF70, (short)0xFFF0, (short)0x0058, (short)0x0088, (short)0x00B8, (short)0x00D0, (short)0x00D8, (short)0x00E8,
30 (short)0x0138, (short)0x0160, (short)0x0158, (short)0x0170, (short)0x0178, (short)0x0160, (short)0x0168, (short)0x0160,
31 (short)0x0140, (short)0x0118, (short)0x00F0, (short)0x00C8, (short)0x0098, (short)0x0078, (short)0x0060, (short)0x0018,
32 (short)0xFFC0, (short)0xFF90, (short)0xFF48, (short)0xFF00, (short)0xFEE8, (short)0xFEC8, (short)0xFEB8, (short)0xFEB8,
33 (short)0xFEA0, (short)0xFE88, (short)0xFE80, (short)0xFEB8, (short)0xFEF8, (short)0xFF38, (short)0xFFA0, (short)0xFFE8,
34 (short)0x0008, (short)0x0030, (short)0x0058, (short)0x0068, (short)0x0068, (short)0x0070, (short)0x0068, (short)0x0050,
35 (short)0x0040, (short)0x0040, (short)0x0020, (short)0x0000, (short)0xFFE8, (short)0xFFF0, (short)0xFFF8, (short)0xFFF8,
36 (short)0x0038, (short)0x0068, (short)0x0078, (short)0x0038, (short)0x0008, (short)0xFFF0, (short)0xFFE0, (short)0xFFD8,
37 (short)0xFFD8, (short)0xFFE0, (short)0xFFD0, (short)0xFFC8, (short)0x0000, (short)0x0030, (short)0x0048, (short)0x0068,
38 (short)0x0080, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0078,
39 (short)0x0098, (short)0x00B0, (short)0x00B8, (short)0x0098, (short)0x0070, (short)0x0058, (short)0x0060, (short)0x0078,
40 (short)0x00A8, (short)0x00B8, (short)0x00A8, (short)0x00A0, (short)0x0080, (short)0x0068, (short)0x0060, (short)0x0058,
41 (short)0x0048, (short)0x0030, (short)0x0038, (short)0x0038, (short)0x0030, (short)0x0050, (short)0x0058, (short)0x0060,
42 (short)0x0030, (short)0x0008, (short)0xFFF8, (short)0xFF90, (short)0xFF48, (short)0xFF28, (short)0xFF10, (short)0xFEF8,
43 (short)0xFEF0, (short)0xFED8, (short)0xFEB0, (short)0xFEB0, (short)0xFEA8, (short)0xFEB8, (short)0xFED8, (short)0xFEF8,
44 (short)0xFF10, (short)0xFF20, (short)0xFF40, (short)0xFF58, (short)0xFF80, (short)0xFFA0, (short)0xFFB8, (short)0xFFC8,
45 (short)0xFFD8, (short)0xFFE0, (short)0xFFF0, (short)0x0048, (short)0x0098, (short)0x00B0, (short)0x0068, (short)0x0018,
46 (short)0xFFF8, (short)0xFFE8, (short)0xFFF0, (short)0xFFF8, (short)0x0020, (short)0x0038, (short)0x0038, (short)0x0050,
47 (short)0x0068, (short)0x0070, (short)0x0068, (short)0x0060, (short)0x0060, (short)0x0038, (short)0x0020, (short)0x0018,
48 (short)0x0040, (short)0x0060, (short)0x0068, (short)0x0040, (short)0x0010, (short)0x0000, (short)0xFFB0, (short)0xFF78,
49 (short)0xFF70, (short)0xFF90, (short)0xFFA8, (short)0xFFC8, (short)0xFF98, (short)0xFF50, (short)0xFF50, (short)0xFF50,
50 (short)0xFF58, (short)0xFF68, (short)0xFF48, (short)0xFF20, (short)0xFF18, (short)0xFF38, (short)0xFF60, (short)0xFF70,
51 (short)0xFF80, (short)0xFF98, (short)0xFFA0, (short)0xFFB8, (short)0xFFD0, (short)0xFFE0, (short)0x0018, (short)0x0048,
52 (short)0x0058, (short)0x00B0, (short)0x00F8, (short)0x0108, (short)0x0118, (short)0x0120, (short)0x0118, (short)0x0130,
53 (short)0x0148, (short)0x0140, (short)0x0130, (short)0x0120, (short)0x0108, (short)0x0098, (short)0x0038, (short)0x0018,
54 (short)0xFFD0, (short)0xFF90, (short)0xFF80, (short)0xFF58, (short)0xFF38, (short)0xFF30, (short)0xFF48, (short)0xFF68,
55 (short)0xFF78, (short)0xFF88, (short)0xFFB8, (short)0xFFD8, (short)0xFFE8, (short)0xFFD8, (short)0xFFF0, (short)0x0010,
56 (short)0x0020, (short)0x0020, (short)0x0018, (short)0x0028, (short)0x0030, (short)0x0030, (short)0x0038, (short)0x0060,
57 (short)0x0080, (short)0x0080, (short)0x00B0, (short)0x00D8, (short)0x00D0, (short)0x00B8, (short)0x00A8, (short)0x00A8,
58 (short)0x00A0, (short)0x0090, (short)0x0078, (short)0x0070, (short)0x0068, (short)0x0048, (short)0x0018, (short)0x0008,
59 (short)0x0008, (short)0x0000, (short)0x0000, (short)0xFFE8, (short)0xFFB0, (short)0xFF90, (short)0xFF88, (short)0xFF70,
60 (short)0xFF60, (short)0xFF60, (short)0xFF90, (short)0xFFC0, (short)0xFFD0, (short)0xFFD8, (short)0xFFE0, (short)0xFFE8,
61 (short)0x0018, (short)0x0050, (short)0x0058, (short)0x0030, (short)0x0008, (short)0x0000, (short)0x0018, (short)0x0038,
62 (short)0x0038, (short)0x0048, (short)0x0050, (short)0x0050, (short)0x0020, (short)0x0000, (short)0xFFF8, (short)0xFFB0,
63 (short)0xFF70, (short)0xFF68, (short)0xFFB0, (short)0xFFE8, (short)0xFFF8, (short)0xFFF8, (short)0xFFF8, (short)0xFFF0,
64 (short)0x0030, (short)0x0070, (short)0x0090, (short)0x0098, (short)0x0098, (short)0x0090, (short)0x00A0, (short)0x00B0,
65 (short)0x00B8, (short)0x00C0, (short)0x00C0, (short)0x00A8, (short)0x0098, (short)0x0088, (short)0x0078, (short)0x0050,
66 (short)0x0030, (short)0x0020, (short)0xFFD8, (short)0xFF98, (short)0xFF88, (short)0xFF50, (short)0xFF20, (short)0xFF18,
67 (short)0xFEF8, (short)0xFEE0, (short)0xFEE8, (short)0xFE70, (short)0xFE08, (short)0xFE00, (short)0xFE48, (short)0xFE98,
68 (short)0xFEB8, (short)0xFEE8, (short)0xFF10, (short)0xFF28, (short)0xFF18, (short)0xFF10, (short)0xFF18, (short)0xFF48,
69 (short)0xFF70, (short)0xFF88, (short)0xFFE0, (short)0x0028, (short)0x0040, (short)0x0058, (short)0x0068, (short)0x0070,
70 (short)0x0078, (short)0x0070, (short)0x0068, (short)0x0068, (short)0x0078, (short)0x0080, (short)0x0080, (short)0x0088,
71 (short)0x0088, (short)0x0080, (short)0x0058, (short)0x0030, (short)0x0020, (short)0x0018, (short)0x0018, (short)0x0018,
72 (short)0x0050, (short)0x0090, (short)0x00A0, (short)0x0080, (short)0x0060, (short)0x0050, (short)0x0030, (short)0x0018,
73 (short)0x0010, (short)0x0028, (short)0x0038, (short)0x0038, (short)0x0018, (short)0xFFF8, (short)0xFFF0, (short)0x0000,
74 (short)0x0020, (short)0x0020, (short)0x0030, (short)0x0030, (short)0x0030, (short)0x0040, (short)0x0050, (short)0x0050,
75 (short)0x0050, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0078, (short)0x00A0,
76 (short)0x00A8, (short)0x00C0, (short)0x00C8, (short)0x00C0, (short)0x00D0, (short)0x00E0, (short)0x00D8, (short)0x00E8,
77 (short)0x00F0, (short)0x00E0, (short)0x0100, (short)0x0118, (short)0x0110, (short)0x0100, (short)0x00F0, (short)0x00D8,
78 (short)0x0090, (short)0x0048, (short)0x0028, (short)0x0020, (short)0x0020, (short)0x0020, (short)0x0038, (short)0x0050,
79 (short)0x0050, (short)0x0050, (short)0x0048, (short)0x0040, (short)0x0050, (short)0x0060, (short)0x0060, (short)0x0040,
80 (short)0xFFC0, (short)0xFF58, (short)0xFF40, (short)0xFF90, (short)0xFFE8, (short)0x0000, (short)0x0020, (short)0x0030,
81 (short)0x0030, (short)0x0068, (short)0x0098, (short)0x00A8, (short)0x0110, (short)0x0168, (short)0x0170, (short)0x0148,
82 (short)0x0118, (short)0x00F0, (short)0x00E8, (short)0x00E0, (short)0x00D0, (short)0x0098, (short)0x0060, (short)0x0040,
83 (short)0x0000, (short)0xFFD8, (short)0xFFD8, (short)0xFFC0, (short)0xFFB0, (short)0xFFB0, (short)0xFF78, (short)0xFF30,
84 (short)0xFF10, (short)0xFEF0, (short)0xFEE8, (short)0xFEF0, (short)0xFEC8, (short)0xFED0, (short)0xFEF8, (short)0xFF00,
85 (short)0xFF10, (short)0xFF20, (short)0xFF50, (short)0xFF78, (short)0xFF90, (short)0xFF80, (short)0xFF70, (short)0xFF70,
86 (short)0xFF80, (short)0xFF98, (short)0xFFA0, (short)0xFFB8, (short)0xFFD0, (short)0xFFD8, (short)0xFFF0, (short)0x0000,
87 (short)0x0008, (short)0x0028, (short)0x0048, (short)0x0058, (short)0x0078, (short)0x0070, (short)0x0058, (short)0x0068,
88 (short)0x0098, (short)0x00B8, (short)0x00D8, (short)0x00F0, (short)0x00F0, (short)0x00E8, (short)0x00F8, (short)0x0100,
89 (short)0x00D8, (short)0x00D0, (short)0x00C8, (short)0x00E8, (short)0x0100, (short)0x00F0, (short)0x00E0, (short)0x00C8,
90 (short)0x00B8, (short)0x00A0, (short)0x0078, (short)0x0058, (short)0x0038, (short)0x0020, (short)0x0010, (short)0x0010,
91 (short)0x0018, (short)0x0010, (short)0x0010, (short)0x0010, (short)0x0018, (short)0x0028, (short)0x0008, (short)0xFFE0,
92 (short)0xFFC8, (short)0xFF80, (short)0xFF48, (short)0xFF38, (short)0xFF40, (short)0xFF48, (short)0xFF48, (short)0xFF70,
93 (short)0xFF90, (short)0xFFA8, (short)0xFFB8, (short)0xFFC0, (short)0xFFC8, (short)0xFFC0, (short)0xFFC0, (short)0xFFC0,
94 (short)0xFFB0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA8, (short)0xFFB0, (short)0xFF68, (short)0xFF28,
95 (short)0xFF08, (short)0xFEF8, (short)0xFEF8, (short)0xFEE8, (short)0xFEE0, (short)0xFED8, (short)0xFEA8, (short)0xFE98,
96 (short)0xFEA8, (short)0xFEA8, (short)0xFEA0, (short)0xFEA0, (short)0xFED0, (short)0xFF00, (short)0xFF30, (short)0xFF28,
97 (short)0xFF38, (short)0xFF58, (short)0xFF48, (short)0xFF40, (short)0xFF48, (short)0xFFB0, (short)0x0010, (short)0x0038,
98 (short)0x0028, (short)0x0010, (short)0x0008, (short)0x0050, (short)0x00A0, (short)0x00B8, (short)0x00A0, (short)0x0080,
99 (short)0x0070, (short)0x0090, (short)0x00B0, (short)0x00B0, (short)0x00B8, (short)0x00B8, (short)0x00B0, (short)0x00C0,
100 (short)0x00D0, (short)0x00C8, (short)0x00A0, (short)0x0068, (short)0x0038, (short)0xFFF0, (short)0xFFB0, (short)0xFF88,
101 (short)0xFF78, (short)0xFF68, (short)0xFF60, (short)0xFF90, (short)0xFFC0, (short)0xFFE0, (short)0x0000, (short)0x0020,
102 (short)0x0030, (short)0x00A0, (short)0x0110, (short)0x0138, (short)0x0140, (short)0x0148, (short)0x0148, (short)0x0110,
103 (short)0x00E8, (short)0x00C0, (short)0x00A0, (short)0x0088, (short)0x0068, (short)0x0008, (short)0xFFB0, (short)0xFF88,
104 (short)0xFF58, (short)0xFF30, (short)0xFF20, (short)0xFEF8, (short)0xFED8, (short)0xFED8, (short)0xFF00, (short)0xFF20,
105 (short)0xFF38, (short)0xFF50, (short)0xFF68, (short)0xFF88, (short)0xFFA0, (short)0xFFB8, (short)0x0020, (short)0x0080,
106 (short)0x00A0, (short)0x00D8, (short)0x0100, (short)0x0100, (short)0x0138, (short)0x0168, (short)0x0148, (short)0x0128,
107 (short)0x0120, (short)0x00F8, (short)0x00E8, (short)0x00E0, (short)0x00C0, (short)0x00A8, (short)0x00B0, (short)0x0098,
108 (short)0x0070, (short)0x0048, (short)0x0030, (short)0xFFD0, (short)0xFF60, (short)0xFF48, (short)0xFF10, (short)0xFEA8,
109 (short)0xFEA8, (short)0xFEC0, (short)0xFEC0, (short)0xFEE8, (short)0xFEB0, (short)0xFE58, (short)0xFE88, (short)0xFED0,
110 (short)0xFEB8, (short)0xFE48, (short)0xFE58, (short)0xFEE8, (short)0xFF28, (short)0xFF18, (short)0xFF60, (short)0x00A0,
111 (short)0x01A0, (short)0x0188, (short)0x0178, (short)0x0208, (short)0x0208, (short)0x0100, (short)0x0018, (short)0xFFE0,
112 (short)0xFEE0, (short)0xFD68, (short)0xFD00, (short)0xFD60, (short)0xFD70, (short)0xFDA8, (short)0xFF00, (short)0x00A0,
113 (short)0x0170, (short)0x0210, (short)0x02D8, (short)0x0310, (short)0x0218, (short)0x00A0, (short)0xFFA0, (short)0xFDF0,
114 (short)0xFBD8, (short)0xFB08, (short)0xF9C0, (short)0xF830, (short)0xF8D8, (short)0xFCC0, (short)0x0038, (short)0x01A0,
115 (short)0x0380, (short)0x0A18, (short)0x0F50, (short)0x0DB0, (short)0x0C30, (short)0x0E18, (short)0x0CA8, (short)0x0570,
116 (short)0xFF98, (short)0xFE38, (short)0xFBA0, (short)0xF700, (short)0xF5D0, (short)0xF7C8, (short)0xF9A8, (short)0xFB48,
117 (short)0xFBB0, (short)0xFC78, (short)0xFF00, (short)0xFE98, (short)0xFB20, (short)0xFA48, (short)0xFAC0, (short)0xF8C8,
118 (short)0xF6E0, (short)0xF9C0, (short)0xFE08, (short)0xFF80, (short)0x0428, (short)0x0B70, (short)0x0E18, (short)0x0D38,
119 (short)0x0D38, (short)0x0C28, (short)0x01D0, (short)0xF578, (short)0xF108, (short)0xFB50, (short)0x0498, (short)0x0428,
120 (short)0x0CE8, (short)0x2190, (short)0x29F0, (short)0x22E0, (short)0x1F68, (short)0x2050, (short)0x1810, (short)0x0710,
121 (short)0xFA98, (short)0xF438, (short)0xEE68, (short)0xE950, (short)0xEBC8, (short)0xF538, (short)0xFEB8, (short)0x0240,
122 (short)0x0460, (short)0x09D0, (short)0x0978, (short)0xFFF8, (short)0xF810, (short)0xF190, (short)0xE8D0, (short)0xE290,
123 (short)0xDF60, (short)0xDFF0, (short)0xE668, (short)0xEC20, (short)0xF138, (short)0xFAC0, (short)0x04F0, (short)0x08D0,
124 (short)0x08C8, (short)0x0B18, (short)0x09F8, (short)0x0230, (short)0xFA38, (short)0xFA68, (short)0xFC78, (short)0xF9B8,
125 (short)0xF850, (short)0xFEA8, (short)0x05B8, (short)0x0690, (short)0x02E8, (short)0x0268, (short)0x0498, (short)0xFCB0,
126 (short)0xF018, (short)0xEDF8, (short)0x0090, (short)0x0F48, (short)0x0C70, (short)0x1278, (short)0x27B8, (short)0x2EA0,
127 (short)0x21F8, (short)0x1920, (short)0x1918, (short)0x1530, (short)0x0638, (short)0xF858, (short)0xF720, (short)0xF9F8,
128 (short)0xF600, (short)0xF850, (short)0x0590, (short)0x0EE0, (short)0x1000, (short)0x10D8, (short)0x1460, (short)0x10F8,
129 (short)0x0500, (short)0xFBC0, (short)0xF7A8, (short)0xF250, (short)0xEC00, (short)0xEB30, (short)0xF1C8, (short)0xF920,
130 (short)0xFC90, (short)0x0190, (short)0x0A60, (short)0x0E80, (short)0x0DB0, (short)0x0AD8, (short)0x0690, (short)0x0168,
131 (short)0xFF20, (short)0xFBD0, (short)0xF6F8, (short)0xF660, (short)0xF680, (short)0xF5B0, (short)0xF7C0, (short)0xF120,
132 (short)0xEA90, (short)0xF030, (short)0xEC18, (short)0xE190, (short)0xE558, (short)0xFF20, (short)0x1090, (short)0x0C50,
133 (short)0x1248, (short)0x2788, (short)0x2AD0, (short)0x1628, (short)0x08F0, (short)0x0BA8, (short)0x0538, (short)0xEF48,
134 (short)0xE410, (short)0xEB10, (short)0xEF68, (short)0xEA28, (short)0xEC40, (short)0xFC18, (short)0x08A8, (short)0x0818,
135 (short)0x0778, (short)0x0858, (short)0x02F8, (short)0xF8E8, (short)0xF1F0, (short)0xEF40, (short)0xECD0, (short)0xE958,
136 (short)0xEA70, (short)0xF260, (short)0xFAF0, (short)0xFFA0, (short)0x04A0, (short)0x0CF8, (short)0x10F8, (short)0x0EA0,
137 (short)0x0D48, (short)0x0BE8, (short)0x05E0, (short)0x03B0, (short)0x0358, (short)0xFF18, (short)0xFB40, (short)0xF9B0,
138 (short)0xF9C0, (short)0xF7C0, (short)0xEE90, (short)0xEAA0, (short)0xEE00, (short)0xE888, (short)0xE200, (short)0xEF00,
139 (short)0x0948, (short)0x1400, (short)0x1270, (short)0x1D88, (short)0x2CD8, (short)0x2488, (short)0x0DA8, (short)0x04B8,
140 (short)0x0548, (short)0xF7B0, (short)0xE3F0, (short)0xE268, (short)0xEFF8, (short)0xF5A0, (short)0xF320, (short)0xFC68,
141 (short)0x0BF0, (short)0x0FA0, (short)0x0A50, (short)0x01F8, (short)0xFE60, (short)0xFC48, (short)0xF340, (short)0xEB28,
142 (short)0xED58, (short)0xF3C0, (short)0xF5B8, (short)0xF738, (short)0x00F8, (short)0x0C70, (short)0x0E90, (short)0x0DE8,
143 (short)0x1190, (short)0x12B0, (short)0x1058, (short)0x0B98, (short)0x0638, (short)0x0868, (short)0x0998, (short)0x02B0,
144 (short)0xFE50, (short)0x0120, (short)0x02A0, (short)0xFC90, (short)0xF810, (short)0xF9D0, (short)0xF818, (short)0xF290,
145 (short)0xF240, (short)0xF6D0, (short)0x0A48, (short)0x1AD8, (short)0x1840, (short)0x1C18, (short)0x2B18, (short)0x29F0,
146 (short)0x1608, (short)0x08B8, (short)0x0778, (short)0x0128, (short)0xF118, (short)0xE868, (short)0xEDA0, (short)0xF310,
147 (short)0xF248, (short)0xF558, (short)0x0058, (short)0x0970, (short)0x0688, (short)0x0108, (short)0xFD08, (short)0xF988,
148 (short)0xF558, (short)0xF0A0, (short)0xF0B0, (short)0xF540, (short)0xF6E8, (short)0xFCA0, (short)0x0758, (short)0x0CD0,
149 (short)0x0F60, (short)0x1338, (short)0x1458, (short)0x1278, (short)0x0FD0, (short)0x0CA8, (short)0x0D50, (short)0x0D10,
150 (short)0x0798, (short)0x0398, (short)0x0428, (short)0x04F0, (short)0x0278, (short)0xFF98, (short)0x0178, (short)0x0088,
151 (short)0xFB08, (short)0xF660, (short)0xF1A8, (short)0xEF18, (short)0xF9E8, (short)0x0C00, (short)0x11C8, (short)0x1260,
152 (short)0x1B60, (short)0x21B0, (short)0x18E0, (short)0x0B08, (short)0x04C8, (short)0x0078, (short)0xF730, (short)0xEF60,
153 (short)0xEB18, (short)0xEC10, (short)0xF290, (short)0xF800, (short)0xFB60, (short)0xFF60, (short)0x0080, (short)0xFFA8,
154 (short)0xFB08, (short)0xF1A8, (short)0xED10, (short)0xEFF0, (short)0xEED0, (short)0xEB10, (short)0xEFE8, (short)0xF8F0,
155 (short)0xFDE0, (short)0x0298, (short)0x0528, (short)0x0598, (short)0x0928, (short)0x0A30, (short)0x0670, (short)0x08E8,
156 (short)0x0BC0, (short)0x0698, (short)0x0210, (short)0x0390, (short)0x0560, (short)0x0288, (short)0xF910, (short)0xF468,
157 (short)0xF560, (short)0xF3E0, (short)0xEE10, (short)0xE8B0, (short)0xE508, (short)0xEED0, (short)0x03E0, (short)0x0638,
158 (short)0xFFA8, (short)0x0BB8, (short)0x2078, (short)0x1FA8, (short)0x0EF0, (short)0x0648, (short)0x05C8, (short)0xFF18,
159 (short)0xF588, (short)0xEE20, (short)0xED88, (short)0xF5A0, (short)0xFBA8, (short)0xFBC0, (short)0xFA98, (short)0xFA20,
160 (short)0xF7D8, (short)0xF2D0, (short)0xEF48, (short)0xE998, (short)0xE378, (short)0xE530, (short)0xE868, (short)0xE890,
161 (short)0xEDD0, (short)0xF798, (short)0xFBC0, (short)0xFD20, (short)0x0178, (short)0x0490, (short)0x04A0, (short)0x0758,
162 (short)0x0858, (short)0x0490, (short)0x04F8, (short)0x0858, (short)0x06F0, (short)0x05F8, (short)0x0450, (short)0x0098,
163 (short)0xFE60, (short)0xFDA0, (short)0xF9E0, (short)0xF358, (short)0xEDC0, (short)0xF308, (short)0xFFE0, (short)0x0018,
164 (short)0xFB80, (short)0x0948, (short)0x1DB8, (short)0x1D08, (short)0x0F88, (short)0x0B48, (short)0x0C50, (short)0x09C0,
165 (short)0xFF78, (short)0xF1A0, (short)0xEF28, (short)0xF6B8, (short)0xF9F0, (short)0xF6F0, (short)0xF688, (short)0xF9E0,
166 (short)0xF9C0, (short)0xF4C8, (short)0xEBD8, (short)0xE7E8, (short)0xEBE0, (short)0xE8C8, (short)0xE100, (short)0xE518,
167 (short)0xF0B8, (short)0xF728, (short)0xF770, (short)0xF878, (short)0xFF58, (short)0x06B0, (short)0x0430, (short)0x0060,
168 (short)0x0390, (short)0x0A18, (short)0x0B98, (short)0x06C8, (short)0x0710, (short)0x0CF0, (short)0x08D0, (short)0x01F8,
169 (short)0x0280, (short)0x0238, (short)0xFD78, (short)0xF868, (short)0xF198, (short)0xF670, (short)0x0930, (short)0x0A78,
170 (short)0xFB38, (short)0x04F0, (short)0x1EB8, (short)0x1E98, (short)0x0F68, (short)0x0EC8, (short)0x1548, (short)0x1480,
171 (short)0x0C60, (short)0x00B0, (short)0xFEF8, (short)0x0830, (short)0x0838, (short)0x0160, (short)0x0380, (short)0x07E8,
172 (short)0x0270, (short)0xFBA0, (short)0xF9C0, (short)0xF450, (short)0xEE08, (short)0xED08, (short)0xEE10, (short)0xEF20,
173 (short)0xF1C0, (short)0xF800, (short)0xFE70, (short)0x00B0, (short)0x02D8, (short)0x07C8, (short)0x09F0, (short)0x09A8,
174 (short)0x0A60, (short)0x0B28, (short)0x0C80, (short)0x0D58, (short)0x0BD0, (short)0x0A48, (short)0x0900, (short)0x0768,
175 (short)0x03D0, (short)0x00E0, (short)0xFFF8, (short)0xFBD8, (short)0xF5E8, (short)0xFE18, (short)0x0FE8, (short)0x1060,
176 (short)0x05C8, (short)0x1078, (short)0x2638, (short)0x2580, (short)0x1740, (short)0x14E8, (short)0x19D0, (short)0x17D8,
177 (short)0x0E10, (short)0x0270, (short)0x0120, (short)0x0900, (short)0x0870, (short)0x0290, (short)0x03A0, (short)0x0600,
178 (short)0x0100, (short)0xFE28, (short)0xFF28, (short)0xF838, (short)0xF0B8, (short)0xF238, (short)0xF530, (short)0xF440,
179 (short)0xF440, (short)0xFA38, (short)0x0198, (short)0x03A8, (short)0x03D0, (short)0x0780, (short)0x0AB8, (short)0x0B58,
180 (short)0x0B10, (short)0x0AD8, (short)0x0A08, (short)0x0878, (short)0x07C8, (short)0x0648, (short)0x01A0, (short)0xFF48,
181 (short)0xFE58, (short)0xFA68, (short)0xF7D0, (short)0xF758, (short)0xF470, (short)0xF5B0, (short)0x02A8, (short)0x0A58,
182 (short)0x0448, (short)0x07C8, (short)0x1708, (short)0x1970, (short)0x0EC8, (short)0x0A40, (short)0x0CD0, (short)0x0D28,
183 (short)0x0838, (short)0x0010, (short)0xFAE0, (short)0xFCB0, (short)0xFEB8, (short)0xFCE8, (short)0xFBA8, (short)0xFD10,
184 (short)0xFBC8, (short)0xF910, (short)0xF960, (short)0xF830, (short)0xF4D8, (short)0xF500, (short)0xF860, (short)0xF9F0,
185 (short)0xFB58, (short)0xFE48, (short)0x0050, (short)0x0418, (short)0x0910, (short)0x0940, (short)0x0830, (short)0x0AC8,
186 (short)0x0C88, (short)0x0A50, (short)0x07C0, (short)0x0700, (short)0x0590, (short)0x0268, (short)0xFFF0, (short)0xFBA8,
187 (short)0xF720, (short)0xF698, (short)0xF2E0, (short)0xEB68, (short)0xEDA0, (short)0xFC00, (short)0x0358, (short)0xFF30,
188 (short)0x0398, (short)0x1220, (short)0x1860, (short)0x1368, (short)0x10C0, (short)0x12F0, (short)0x12A0, (short)0x0E08,
189 (short)0x0780, (short)0x0010, (short)0xFAD8, (short)0xF990, (short)0xF7E0, (short)0xF278, (short)0xEE10, (short)0xEB98,
190 (short)0xE7A0, (short)0xE6F8, (short)0xEA30, (short)0xE980, (short)0xE420, (short)0xE440, (short)0xEBA8, (short)0xEF98,
191 (short)0xEF68, (short)0xF288, (short)0xF7A8, (short)0xFC90, (short)0x01F8, (short)0x0528, (short)0x0630, (short)0x08E8,
192 (short)0x0C98, (short)0x0D50, (short)0x0B98, (short)0x0920, (short)0x0678, (short)0x03F0, (short)0x0260, (short)0xFE00,
193 (short)0xF810, (short)0xF4B8, (short)0xF0C0, (short)0xEB68, (short)0xEF58, (short)0xFAE8, (short)0xFDE0, (short)0xF680,
194 (short)0xF910, (short)0x06E0, (short)0x0C20, (short)0x05D8, (short)0x0408, (short)0x05C8, (short)0x0450, (short)0x02D0,
195 (short)0x0128, (short)0xFB78, (short)0xF668, (short)0xF430, (short)0xF150, (short)0xED90, (short)0xE870, (short)0xE448,
196 (short)0xE2E0, (short)0xE048, (short)0xDDD0, (short)0xDF08, (short)0xE0E0, (short)0xE098, (short)0xE258, (short)0xE520,
197 (short)0xE6A8, (short)0xEA28, (short)0xEF88, (short)0xF2A8, (short)0xF548, (short)0xFBA8, (short)0x01C8, (short)0x03F8,
198 (short)0x0748, (short)0x0C88, (short)0x0E98, (short)0x0DB8, (short)0x0D98, (short)0x0D50, (short)0x0B68, (short)0x0970,
199 (short)0x06C0, (short)0x0238, (short)0xFE18, (short)0xFB08, (short)0xF820, (short)0xF780, (short)0xF970, (short)0xF9B0,
200 (short)0xF880, (short)0xFA28, (short)0x0028, (short)0x0698, (short)0x0948, (short)0x08D0, (short)0x09E0, (short)0x0DD0,
201 (short)0x1010, (short)0x0D40, (short)0x0958, (short)0x0728, (short)0x0308, (short)0xFDA0, (short)0xF9F8, (short)0xF418,
202 (short)0xEC98, (short)0xE8B8, (short)0xE618, (short)0xE200, (short)0xDED0, (short)0xDF48, (short)0xE100, (short)0xE180,
203 (short)0xE160, (short)0xE3C8, (short)0xE898, (short)0xEDD8, (short)0xF250, (short)0xF558, (short)0xFB00, (short)0x02F8,
204 (short)0x07B0, (short)0x0B80, (short)0x1108, (short)0x1518, (short)0x1660, (short)0x1770, (short)0x1870, (short)0x16F8,
205 (short)0x1300, (short)0x0F78, (short)0x0FC0, (short)0x1070, (short)0x0CE8, (short)0x0AF8, (short)0x0BD8, (short)0x0D28,
206 (short)0x10A8, (short)0x1370, (short)0x10A0, (short)0x1040, (short)0x1518, (short)0x1740, (short)0x1550, (short)0x1398,
207 (short)0x10E0, (short)0x0AC8, (short)0x0640, (short)0x0348, (short)0xFD18, (short)0xF658, (short)0xF1D8, (short)0xEC20,
208 (short)0xE760, (short)0xE550, (short)0xE4B8, (short)0xE418, (short)0xE438, (short)0xE508, (short)0xE738, (short)0xEB18,
209 (short)0xF0C8, (short)0xF618, (short)0xF988, (short)0xFEC8, (short)0x0518, (short)0x09D8, (short)0x1118, (short)0x17F0,
210 (short)0x1BB0, (short)0x1E28, (short)0x2120, (short)0x23D8, (short)0x2638, (short)0x2418, (short)0x2080, (short)0x1D30,
211 (short)0x1CE8, (short)0x1D98, (short)0x1CA8, (short)0x1AD8, (short)0x1960, (short)0x17F8, (short)0x1A40, (short)0x1CF8,
212 (short)0x1D38, (short)0x1C30, (short)0x1A68, (short)0x1860, (short)0x1480, (short)0x1020, (short)0x0B68, (short)0x03E8,
213 (short)0xFBA8, (short)0xF508, (short)0xEE40, (short)0xE820, (short)0xE338, (short)0xDE88, (short)0xDA30, (short)0xD7D0,
214 (short)0xD728, (short)0xD7D8, (short)0xD998, (short)0xDC10, (short)0xDFB0, (short)0xE470, (short)0xE948, (short)0xEF98,
215 (short)0xF5F0, (short)0xFC38, (short)0x0228, (short)0x0798, (short)0x0D98, (short)0x1320, (short)0x1760, (short)0x1A70,
216 (short)0x1BE0, (short)0x1CC0, (short)0x1D98, (short)0x1A88, (short)0x1658, (short)0x12A0, (short)0x1180, (short)0x10A8,
217 (short)0x0ED0, (short)0x0CC8, (short)0x0AD8, (short)0x0920, (short)0x0B70, (short)0x0E30, (short)0x0EE8, (short)0x0D80,
218 (short)0x0BE0, (short)0x0AC0, (short)0x09B8, (short)0x0890, (short)0x0690, (short)0x01F8, (short)0xFD30, (short)0xF9F0,
219 (short)0xF5B0, (short)0xF188, (short)0xEE38, (short)0xE9E8, (short)0xE5E8, (short)0xE3E0, (short)0xE4A0, (short)0xE608,
220 (short)0xE738, (short)0xE858, (short)0xE980, (short)0xEC20, (short)0xF030, (short)0xF450, (short)0xF878, (short)0xFC68,
221 (short)0xFF68, (short)0x03C8, (short)0x08B8, (short)0x0D00, (short)0x1038, (short)0x12D8, (short)0x1490, (short)0x1648,
222 (short)0x16B8, (short)0x1468, (short)0x1160, (short)0x0FA8, (short)0x1038, (short)0x1058, (short)0x0F88, (short)0x0E50,
223 (short)0x0CC8, (short)0x0CC0, (short)0x0FC0, (short)0x1220, (short)0x12A0, (short)0x10F8, (short)0x0F20, (short)0x0D28,
224 (short)0x0C78, (short)0x0BB8, (short)0x08D0, (short)0x01C8, (short)0xFB38, (short)0xF660, (short)0xF330, (short)0xF078,
225 (short)0xEC28, (short)0xE6C8, (short)0xE2C0, (short)0xE050, (short)0xDFC8, (short)0xE038, (short)0xE160, (short)0xE300,
226 (short)0xE568, (short)0xE6B8, (short)0xE9A0, (short)0xED50, (short)0xF238, (short)0xF6D8, (short)0xFB08, (short)0xFF10,
227 (short)0x02E8, (short)0x06A0, (short)0x0AC0, (short)0x0DC8, (short)0x1010, (short)0x1168, (short)0x1018, (short)0x0E90,
228 (short)0x0BF8, (short)0x0B08, (short)0x0A50, (short)0x09F0, (short)0x0960, (short)0x0888, (short)0x0808, (short)0x09C8,
229 (short)0x0BA8, (short)0x0EE8, (short)0x1070, (short)0x10D0, (short)0x0F58, (short)0x0D60, (short)0x0BA0, (short)0x0A60,
230 (short)0x08F0, (short)0x0608, (short)0xFFB0, (short)0xF938, (short)0xF360, (short)0xF030, (short)0xEE20, (short)0xEB70,
231 (short)0xE7A8, (short)0xE410, (short)0xE140, (short)0xDFC8, (short)0xDFF8, (short)0xE1F0, (short)0xE448, (short)0xE6D0,
232 (short)0xE780, (short)0xE9E8, (short)0xECF0, (short)0xF248, (short)0xF730, (short)0xFBC0, (short)0xFF80, (short)0x0310,
233 (short)0x0670, (short)0x0A98, (short)0x0D88, (short)0x0FD8, (short)0x10C0, (short)0x0EB0, (short)0x0C48, (short)0x08B8,
234 (short)0x0998, (short)0x0AC0, (short)0x0C68, (short)0x0B78, (short)0x09C8, (short)0x0838, (short)0x08F8, (short)0x0A80,
235 (short)0x0CA0, (short)0x0E10, (short)0x0E48, (short)0x0D58, (short)0x0A28, (short)0x0750, (short)0x04F0, (short)0x0228,
236 (short)0xFEE8, (short)0xFA80, (short)0xF468, (short)0xEED0, (short)0xEAE0, (short)0xE8B8, (short)0xE718, (short)0xE5B0,
237 (short)0xE4A8, (short)0xE410, (short)0xE480, (short)0xE548, (short)0xE738, (short)0xE9B0, (short)0xED80, (short)0xF0B8,
238 (short)0xF480, (short)0xF7B0, (short)0xFB70, (short)0xFED0, (short)0x0328, (short)0x0720, (short)0x0A98, (short)0x0E00,
239 (short)0x10F8, (short)0x12E0, (short)0x12A8, (short)0x11B0, (short)0x0F58, (short)0x0F38, (short)0x0E88, (short)0x0F08,
240 (short)0x0FC0, (short)0x0FF0, (short)0x10B8, (short)0x1138, (short)0x1198, (short)0x13D0, (short)0x1638, (short)0x17E8,
241 (short)0x1758, (short)0x1628, (short)0x1460, (short)0x10E8, (short)0x0CA0, (short)0x0848, (short)0x0280, (short)0xFC90,
242 (short)0xF700, (short)0xF0F8, (short)0xEB18, (short)0xE638, (short)0xE1B8, (short)0xDE78, (short)0xDC58, (short)0xDBB8,
243 (short)0xDC28, (short)0xDDB0, (short)0xE030, (short)0xE330, (short)0xE6F0, (short)0xEC20, (short)0xF210, (short)0xF7C0,
244 (short)0xFCE0, (short)0x0150, (short)0x0570, (short)0x08F0, (short)0x0C70, (short)0x0F50, (short)0x12B8, (short)0x1560,
245 (short)0x16E0, (short)0x1630, (short)0x14E8, (short)0x1298, (short)0x11B8, (short)0x1170, (short)0x11B8, (short)0x11C0,
246 (short)0x0FE8, (short)0x0E58, (short)0x0CB8, (short)0x0C50, (short)0x0D68, (short)0x0E98, (short)0x0E30, (short)0x0C28,
247 (short)0x0A10, (short)0x06D8, (short)0x02E0, (short)0xFEA0, (short)0xFA18, (short)0xF4E8, (short)0xF018, (short)0xEB68,
248 (short)0xE6E8, (short)0xE310, (short)0xDFC8, (short)0xDD38, (short)0xDBF8, (short)0xDC38, (short)0xDDD0, (short)0xE070,
249 (short)0xE390, (short)0xE760, (short)0xEB88, (short)0xEF20, (short)0xF378, (short)0xF830, (short)0xFCE0, (short)0x00F8,
250 (short)0x0480, (short)0x0768, (short)0x0968, (short)0x0AE0, (short)0x0BB8, (short)0x0C10, (short)0x0BB0, (short)0x0A78,
251 (short)0x08E0, (short)0x06E8, (short)0x0540, (short)0x0870, (short)0x0BE0, (short)0x0ED0, (short)0x0E40, (short)0x0D10,
252 (short)0x0CC8, (short)0x0E28, (short)0x0FA0, (short)0x0FB0, (short)0x0F18, (short)0x0DD0, (short)0x0BC8, (short)0x08E8,
253 (short)0x0628, (short)0x0300, (short)0xFF18, (short)0xFB40, (short)0xF780, (short)0xF388, (short)0xF028, (short)0xED80,
254 (short)0xEB18, (short)0xE968, (short)0xE8C0, (short)0xE738, (short)0xE658, (short)0xE698, (short)0xE888, (short)0xEB38,
255 (short)0xEDA0, (short)0xF178, (short)0xF5B8, (short)0xFA28, (short)0xFEA8, (short)0x0300, (short)0x06C8, (short)0x0960,
256 (short)0x0B70, (short)0x0CE0, (short)0x0D70, (short)0x0D50, (short)0x0C60, (short)0x0890, (short)0x0418, (short)0x0028,
257 (short)0x01D0, (short)0x03F8, (short)0x05A8, (short)0x0700, (short)0x0808, (short)0x09A0, (short)0x0B18, (short)0x0CC8,
258 (short)0x0D90, (short)0x0E68, (short)0x0EC0, (short)0x0E30, (short)0x0C28, (short)0x09D8, (short)0x0730, (short)0x0308,
259 (short)0xFED8, (short)0xFAC0, (short)0xF598, (short)0xF0D8, (short)0xECE0, (short)0xEAA8, (short)0xE948, (short)0xE8D0,
260 (short)0xE850, (short)0xE888, (short)0xE910, (short)0xEAD0, (short)0xED68, (short)0xF018, (short)0xF350, (short)0xF6B8,
261 (short)0xFAE0, (short)0xFF00, (short)0x02D8, (short)0x05E8, (short)0x0830, (short)0x09F8, (short)0x0B08, (short)0x0B80,
262 (short)0x0B60, (short)0x0988, (short)0x0648, (short)0x02D0, (short)0x0150, (short)0x01E8, (short)0x0270, (short)0x03E0,
263 (short)0x0538, (short)0x0658, (short)0x0918, (short)0x0C00, (short)0x0E88, (short)0x10B8, (short)0x12A0, (short)0x13E0,
264 (short)0x1488, (short)0x1448, (short)0x1368, (short)0x1120, (short)0x0DD0, (short)0x0A40, (short)0x0608, (short)0x0148,
265 (short)0xFC80, (short)0xF860, (short)0xF4D8, (short)0xF1C0, (short)0xF008, (short)0xEF38, (short)0xEE78, (short)0xEE98,
266 (short)0xEF90, (short)0xF170, (short)0xF390, (short)0xF5C0, (short)0xF888, (short)0xFB48, (short)0xFDF0, (short)0x0078,
267 (short)0x03D0, (short)0x06C8, (short)0x08F8, (short)0x0AA0, (short)0x0BC8, (short)0x0C48, (short)0x0B30, (short)0x0978,
268 (short)0x06A8, (short)0x0530, (short)0x03F0, (short)0x0438, (short)0x03C0, (short)0x0350, (short)0x0360, (short)0x04E8,
269 (short)0x0698, (short)0x07D0, (short)0x08D0, (short)0x0998, (short)0x0A70, (short)0x0B48, (short)0x0B70, (short)0x0AD0,
270 (short)0x09C0, (short)0x0890, (short)0x0730, (short)0x0588, (short)0x0358, (short)0x0140, (short)0xFF58, (short)0xFD40,
271 (short)0xFB68, (short)0xF9E8, (short)0xF828, (short)0xF6D0, (short)0xF608, (short)0xF5D8, (short)0xF610, (short)0xF668,
272 (short)0xF778, (short)0xF8E8, (short)0xFA48, (short)0xFCC8, (short)0xFF50, (short)0x01C8, (short)0x0428, (short)0x0640,
273 (short)0x07D0, (short)0x09D0, (short)0x0B40, (short)0x0BF8, (short)0x0C30, (short)0x0C08, (short)0x0B08, (short)0x0988,
274 (short)0x07C0, (short)0x0670, (short)0x0608, (short)0x0590, (short)0x0588, (short)0x05B0, (short)0x05E0, (short)0x06B8,
275 (short)0x0748, (short)0x0758, (short)0x0700, (short)0x06A8, (short)0x0620, (short)0x05D8, (short)0x0590, (short)0x0528,
276 (short)0x03A8, (short)0x0240, (short)0x0108, (short)0xFF38, (short)0xFD50, (short)0xFBA0, (short)0xFA38, (short)0xF920,
277 (short)0xF860, (short)0xF6E8, (short)0xF640, (short)0xF628, (short)0xF680, (short)0xF720, (short)0xF800, (short)0xF8E0,
278 (short)0xF9A0, (short)0xFA78, (short)0xFB88, (short)0xFD20, (short)0xFEA0, (short)0x0008, (short)0x0110, (short)0x0200,
279 (short)0x0360, (short)0x04E0, (short)0x0608, (short)0x0738, (short)0x0838, (short)0x08D8, (short)0x0828, (short)0x0738,
280 (short)0x0600, (short)0x04A8, (short)0x02E0, (short)0x0130, (short)0xFFA0, (short)0xFF48, (short)0xFF10, (short)0xFEF0,
281 (short)0xFF30, (short)0xFFD0, (short)0x0090, (short)0x0090, (short)0x0070, (short)0x0060, (short)0xFFE8, (short)0xFF50,
282 (short)0xFEB8, (short)0xFE98, (short)0xFE88, (short)0xFE80, (short)0xFE58, (short)0xFE50, (short)0xFE58, (short)0xFDB0,
283 (short)0xFD08, (short)0xFC80, (short)0xFAF8, (short)0xF988, (short)0xF860, (short)0xF798, (short)0xF720, (short)0xF6E8,
284 (short)0xF728, (short)0xF7C0, (short)0xF8A8, (short)0xF8F8, (short)0xF960, (short)0xFA18, (short)0xFAC0, (short)0xFB58,
285 (short)0xFC18, (short)0xFCE0, (short)0xFDA0, (short)0xFE20, (short)0xFE88, (short)0xFEF8, (short)0xFEF0, (short)0xFEC8,
286 (short)0xFEA8, (short)0xFDE0, (short)0xFD10, (short)0xFC70, (short)0xFBA8, (short)0xFB10, (short)0xFAB8, (short)0xFAA0,
287 (short)0xFAD0, (short)0xFB18, (short)0xFA90, (short)0xFA18, (short)0xFA10, (short)0xFA80, (short)0xFB10, (short)0xFB88,
288 (short)0xFC90, (short)0xFDB8, (short)0xFEB8, (short)0xFF80, (short)0x0058, (short)0x0138, (short)0x0118, (short)0x00C8,
289 (short)0x00C0, (short)0xFF98, (short)0xFE30, (short)0xFD38, (short)0xFC68, (short)0xFB78, (short)0xFAB8, (short)0xFAE8,
290 (short)0xFB78, (short)0xFBD0, (short)0xFBE8, (short)0xFC18, (short)0xFC98, (short)0xFD28, (short)0xFD48, (short)0xFD68,
291 (short)0xFD68, (short)0xFD90, (short)0xFDB8, (short)0xFD90, (short)0xFD68, (short)0xFD78, (short)0xFCA0, (short)0xFB70,
292 (short)0xFAD0, (short)0xF9F0, (short)0xF870, (short)0xF748, (short)0xF748, (short)0xF770, (short)0xF748, (short)0xF720,
293 (short)0xF7A8, (short)0xF878, (short)0xF930, (short)0xF998, (short)0xFA38, (short)0xFC10, (short)0xFDA0, (short)0xFE70,
294 (short)0x0030, (short)0x0248, (short)0x03A0, (short)0x0568, (short)0x0738, (short)0x0870, (short)0x0960, (short)0x0A10,
295 (short)0x0A40, (short)0x0A28, (short)0x09B8, (short)0x08E8, (short)0x07E8, (short)0x06E0, (short)0x0588, (short)0x0430,
296 (short)0x0300, (short)0x0260, (short)0x01D0, (short)0x0118, (short)0xFFB0, (short)0xFE98, (short)0xFE18, (short)0xFDA0,
297 (short)0xFD08, (short)0xFCB8, (short)0xFCF8, (short)0xFD60, (short)0xFD90, (short)0xFD90, (short)0xFDD8, (short)0xFE50,
298 (short)0xFDA0, (short)0xFCE0, (short)0xFCC0, (short)0xFCE8, (short)0xFCB0, (short)0xFC60, (short)0xFC70, (short)0xFCB8,
299 (short)0xFCE0, (short)0xFD40, (short)0xFDD8, (short)0xFE68, (short)0xFF78, (short)0x0068, (short)0x0108, (short)0x0278,
300 (short)0x03A0, (short)0x0420, (short)0x0590, (short)0x0708, (short)0x07B8, (short)0x07D8, (short)0x0808, (short)0x0838,
301 (short)0x07D8, (short)0x06E8, (short)0x0600, (short)0x05B0, (short)0x0518, (short)0x0410, (short)0x02A0, (short)0x0198,
302 (short)0x00D0, (short)0x00C8, (short)0x00B0, (short)0x0068, (short)0x00C0, (short)0x0150, (short)0x0180, (short)0x0220,
303 (short)0x02D8, (short)0x0340, (short)0x0360, (short)0x0380, (short)0x0380, (short)0x0338, (short)0x02C8, (short)0x02B8,
304 (short)0x0280, (short)0x0200, (short)0x0100, (short)0x0098, (short)0x0080, (short)0x0020, (short)0xFFF0, (short)0x0000,
305 (short)0x0020, (short)0x0098, (short)0x0120, (short)0x0170, (short)0x0230, (short)0x02F0, (short)0x0350, (short)0x0480,
306 (short)0x05B8, (short)0x0650, (short)0x06A8, (short)0x0738, (short)0x0798, (short)0x07B0, (short)0x07C0, (short)0x0798,
307 (short)0x0668, (short)0x0598, (short)0x0530, (short)0x04C8, (short)0x0410, (short)0x0350, (short)0x0278, (short)0x01D8,
308 (short)0x0148, (short)0x0080, (short)0x0000, (short)0xFFC0, (short)0xFFD8, (short)0xFFA8, (short)0xFF60, (short)0xFF80,
309 (short)0x0018, (short)0x0070, (short)0xFFE0, (short)0xFF88, (short)0xFFC0, (short)0xFF38, (short)0xFE98, (short)0xFE50,
310 (short)0xFE10, (short)0xFDD8, (short)0xFD90, (short)0xFD30, (short)0xFDB8, (short)0xFE68, (short)0xFE70, (short)0xFE60,
311 (short)0xFE70, (short)0xFED0, (short)0xFF90, (short)0xFFE0, (short)0xFFF0, (short)0x00A8, (short)0x0168, (short)0x01D0,
312 (short)0x01F8, (short)0x0210, (short)0x0278, (short)0x0268, (short)0x0208, (short)0x0220, (short)0x01F8, (short)0x0198,
313 (short)0x0158, (short)0x0100, (short)0x00C0, (short)0x00A0, (short)0x0018, (short)0xFF98, (short)0xFF28, (short)0xFEC0,
314 (short)0xFE80, (short)0xFE60, (short)0xFD88, (short)0xFCF0, (short)0xFCC8, (short)0xFC70, (short)0xFC10, (short)0xFBC8,
315 (short)0xFBB0, (short)0xFBE8, (short)0xFBE8, (short)0xFB80, (short)0xFB88, (short)0xFB40, (short)0xFB18, (short)0xFB20,
316 (short)0xFAB8, (short)0xFA50, (short)0xFA50, (short)0xFAB8, (short)0xFAF8, (short)0xFB18, (short)0xFBB0, (short)0xFC88,
317 (short)0xFD10, (short)0xFD40, (short)0xFD98, (short)0xFE38, (short)0xFEE0, (short)0xFEF8, (short)0xFEF0, (short)0xFF18,
318 (short)0xFF18, (short)0xFF18, (short)0xFF68, (short)0xFF98, (short)0xFF98, (short)0xFFD0, (short)0xFFF8, (short)0x0048,
319 (short)0x0038, (short)0x0008, (short)0x0008, (short)0xFFE0, (short)0xFFB0, (short)0xFFB8, (short)0xFED0, (short)0xFE18,
320 (short)0xFE18, (short)0xFDF0, (short)0xFE38, (short)0xFE90, (short)0xFE90, (short)0xFDA8, (short)0xFD48, (short)0xFD70,
321 (short)0xFD68, (short)0xFD00, (short)0xFCB8, (short)0xFCB8, (short)0xFCF8, (short)0xFD00, (short)0xFC30, (short)0xFBD0,
322 (short)0xFC10, (short)0xFC20, (short)0xFBE0, (short)0xFBA8, (short)0xFC30, (short)0xFD00, (short)0xFD50, (short)0xFD90,
323 (short)0xFE10, (short)0xFEA8, (short)0xFF40, (short)0xFFA0, (short)0xFFD0, (short)0xFFC8, (short)0xFFC8, (short)0xFFD8,
324 (short)0xFFA0, (short)0xFF98, (short)0xFFB8, (short)0x0050, (short)0x00B8, (short)0x00B0, (short)0x01B0, (short)0x02E0,
325 (short)0x0318, (short)0x0330, (short)0x02E0, (short)0x02C8, (short)0x0278, (short)0x0150, (short)0x0050, (short)0xFFC0,
326 (short)0xFF88, (short)0xFF18, (short)0xFE90, (short)0xFE40, (short)0xFE30, (short)0xFDE8, (short)0xFDD0, (short)0xFD70,
327 (short)0xFD48, (short)0xFD10, (short)0xFC98, (short)0xFC38, (short)0xFC38, (short)0xFC78, (short)0xFC98, (short)0xFCF0,
328 (short)0xFDA8, (short)0xFE48, (short)0xFEC8, (short)0xFF30, (short)0xFF98, (short)0x0000, (short)0x0050, (short)0x0058,
329 (short)0x00A8, (short)0x00E8, (short)0x00D0, (short)0x0138, (short)0x01E0, (short)0x0218, (short)0x0208, (short)0x0230,
330 (short)0x0258, (short)0x0248, (short)0x02B0, (short)0x0318, (short)0x0330, (short)0x0358, (short)0x0380, (short)0x0378,
331 (short)0x0408, (short)0x0480, (short)0x0460, (short)0x03C8, (short)0x0318, (short)0x02B0, (short)0x01E8, (short)0x00B8,
332 (short)0xFFD8, (short)0xFF30, (short)0xFEC8, (short)0xFE60, (short)0xFE60, (short)0xFE78, (short)0xFE78, (short)0xFDC0,
333 (short)0xFD70, (short)0xFD50, (short)0xFD08, (short)0xFC88, (short)0xFC28, (short)0xFC98, (short)0xFD18, (short)0xFD60,
334 (short)0xFD60, (short)0xFDD8, (short)0xFE90, (short)0xFEE8, (short)0xFF10, (short)0xFF58, (short)0xFF90, (short)0xFFB8,
335 (short)0xFFE0, (short)0xFFF0, (short)0xFFF0, (short)0x00D0, (short)0x0190, (short)0x01C8, (short)0x0180, (short)0x0188,
336 (short)0x01B0, (short)0x0238, (short)0x0298, (short)0x02B8, (short)0x0268, (short)0x0258, (short)0x0258, (short)0x0230,
337 (short)0x0228, (short)0x0230, (short)0x0258, (short)0x0248, (short)0x01F8, (short)0x0150, (short)0x00C8, (short)0x0058,
338 (short)0x0058, (short)0x0038, (short)0x0000, (short)0xFF50, (short)0xFF00, (short)0xFEF8, (short)0xFE80, (short)0xFDB8,
339 (short)0xFD70, (short)0xFD00, (short)0xFC90, (short)0xFC40, (short)0xFC28, (short)0xFC58, (short)0xFC98, (short)0xFD10,
340 (short)0xFD78, (short)0xFDE0, (short)0xFE80, (short)0xFF08, (short)0xFF60, (short)0xFFD0, (short)0x0030, (short)0x0068,
341 (short)0x0110, (short)0x0198, (short)0x01C0, (short)0x0208, (short)0x0260, (short)0x0280, (short)0x0320, (short)0x0390,
342 (short)0x0398, (short)0x0410, (short)0x0488, (short)0x04A0, (short)0x0448, (short)0x0408, (short)0x03E0, (short)0x03C8,
343 (short)0x0398, (short)0x0350, (short)0x0308, (short)0x02C8, (short)0x0278, (short)0x01D8, (short)0x0148, (short)0x00E8,
344 (short)0x0040, (short)0xFFA0, (short)0xFF50, (short)0xFDC0, (short)0xFC88, (short)0xFC30, (short)0xFB88, (short)0xFAA8,
345 (short)0xFA50, (short)0xFA30, (short)0xFA40, (short)0xFA70, (short)0xFAB8, (short)0xFAE0, (short)0xFB28, (short)0xFB58,
346 (short)0xFB80, (short)0xFBB0, (short)0xFC00, (short)0xFC80, (short)0xFCF0, (short)0xFDB8, (short)0xFE58, (short)0xFED8,
347 (short)0x0008, (short)0x0100, (short)0x0180, (short)0x01D0, (short)0x0210, (short)0x0248, (short)0x0238, (short)0x0200,
348 (short)0x01D0, (short)0x02D0, (short)0x03A0, (short)0x03D8, (short)0x03C0, (short)0x03D8, (short)0x03F8, (short)0x0370,
349 (short)0x02C0, (short)0x0258, (short)0x01B8, (short)0x0120, (short)0x0090, (short)0x0088, (short)0x00A8, (short)0x00A8,
350 (short)0x0088, (short)0x0068, (short)0x0060, (short)0xFFE0, (short)0xFF00, (short)0xFE50, (short)0xFDC8, (short)0xFCF0,
351 (short)0xFC30, (short)0xFBB0, (short)0xFBD8, (short)0xFC20, (short)0xFC58, (short)0xFC30, (short)0xFC40, (short)0xFC78,
352 (short)0xFCC0, (short)0xFCE8, (short)0xFD10, (short)0xFD48, (short)0xFD88, (short)0xFDE8, (short)0xFF10, (short)0x0020,
353 (short)0x0110, (short)0x01B8, (short)0x0248, (short)0x02C0, (short)0x0358, (short)0x03B8, (short)0x03C8, (short)0x0320,
354 (short)0x0288, (short)0x0280, (short)0x0300, (short)0x0340, (short)0x0320, (short)0x0380, (short)0x03F8, (short)0x0418,
355 (short)0x0378, (short)0x02E0, (short)0x0288, (short)0x0280, (short)0x0238, (short)0x01D0, (short)0x0168, (short)0x0138,
356 (short)0x0110, (short)0x0140, (short)0x0148, (short)0x0150, (short)0x00A8, (short)0x0010, (short)0xFFB0, (short)0xFEB8,
357 (short)0xFDE0, (short)0xFD48, (short)0xFCE8, (short)0xFCA8, (short)0xFC78, (short)0xFC48, (short)0xFC50, (short)0xFC70,
358 (short)0xFCA8, (short)0xFCE8, (short)0xFD28, (short)0xFDD0, (short)0xFE70, (short)0xFED8, (short)0x0040, (short)0x0188,
359 (short)0x0258, (short)0x03C0, (short)0x04F0, (short)0x05B8, (short)0x0638, (short)0x0670, (short)0x0690, (short)0x0708,
360 (short)0x0708, (short)0x06B8, (short)0x0660, (short)0x0650, (short)0x0630, (short)0x05C8, (short)0x0578, (short)0x0548,
361 (short)0x0508, (short)0x0470, (short)0x03D0, (short)0x0350, (short)0x0278, (short)0x01A0, (short)0x00F8, (short)0x00B0,
362 (short)0x0078, (short)0x0030, (short)0xFFE8, (short)0xFFC8, (short)0xFFB8, (short)0xFED0, (short)0xFE08, (short)0xFD98,
363 (short)0xFC70, (short)0xFB60, (short)0xFAA8, (short)0xFA10, (short)0xF9B8, (short)0xF980, (short)0xF9A0, (short)0xFA00,
364 (short)0xFA68, (short)0xFB90, (short)0xFCB8, (short)0xFD98, (short)0xFE68, (short)0xFF18, (short)0xFFC0, (short)0x0078,
365 (short)0x00F8, (short)0x0218, (short)0x0320, (short)0x03C0, (short)0x0478, (short)0x0510, (short)0x0570, (short)0x05D8,
366 (short)0x05E0, (short)0x05B8, (short)0x0508, (short)0x0468, (short)0x03E0, (short)0x02F0, (short)0x0218, (short)0x0168,
367 (short)0x00F0, (short)0x0060, (short)0xFFD0, (short)0xFF58, (short)0xFEC0, (short)0xFE48, (short)0xFDB0, (short)0xFD58,
368 (short)0xFD38, (short)0xFCD8, (short)0xFC80, (short)0xFC50, (short)0xFC08, (short)0xFB48, (short)0xFA98, (short)0xF9F8,
369 (short)0xF8F8, (short)0xF810, (short)0xF7F8, (short)0xF818, (short)0xF848, (short)0xF8E8, (short)0xF9E0, (short)0xFB08,
370 (short)0xFC38, (short)0xFD10, (short)0xFDE8, (short)0xFF10, (short)0xFFD0, (short)0x0048, (short)0x00E0, (short)0x0160,
371 (short)0x01B8, (short)0x01C8, (short)0x01E0, (short)0x0200, (short)0x0228, (short)0x0240, (short)0x0240, (short)0x0240,
372 (short)0x0260, (short)0x0280, (short)0x0280, (short)0x02F0, (short)0x0370, (short)0x03C8, (short)0x03C8, (short)0x03A8,
373 (short)0x03A0, (short)0x02F8, (short)0x0220, (short)0x0150, (short)0x0098, (short)0xFFE0, (short)0xFF20, (short)0xFEA0,
374 (short)0xFE50, (short)0xFE18, (short)0xFD38, (short)0xFC60, (short)0xFBE0, (short)0xFAC8, (short)0xF9A0, (short)0xF8B8,
375 (short)0xF830, (short)0xF888, (short)0xF8B8, (short)0xF908, (short)0xFA80, (short)0xFBF8, (short)0xFD48, (short)0xFEC8,
376 (short)0x0040, (short)0x01B0, (short)0x0298, (short)0x0338, (short)0x03C0, (short)0x0470, (short)0x0520, (short)0x0588,
377 (short)0x0610, (short)0x0688, (short)0x06C8, (short)0x0670, (short)0x05E8, (short)0x0578, (short)0x0580, (short)0x0578,
378 (short)0x0528, (short)0x0498, (short)0x0408, (short)0x0390, (short)0x03F8, (short)0x0458, (short)0x0488, (short)0x0468,
379 (short)0x0450, (short)0x0458, (short)0x03A8, (short)0x02D0, (short)0x0210, (short)0x0158, (short)0x0088, (short)0xFFA8,
380 (short)0xFF00, (short)0xFE88, (short)0xFE30, (short)0xFD88, (short)0xFCB8, (short)0xFC28, (short)0xFB30, (short)0xF9F0,
381 (short)0xF8E8, (short)0xF890, (short)0xF890, (short)0xF8C0, (short)0xF978, (short)0xFA78, (short)0xFBE8, (short)0xFD20,
382 (short)0xFE28, (short)0xFF60, (short)0x00D8, (short)0x0220, (short)0x02F8, (short)0x0378, (short)0x03E0, (short)0x0438,
383 (short)0x0488, (short)0x0498, (short)0x04A8, (short)0x0480, (short)0x0440, (short)0x03C0, (short)0x02D8, (short)0x01E8,
384 (short)0x0140, (short)0x00D8, (short)0x0068, (short)0xFFE0, (short)0x0068, (short)0x0130, (short)0x0228, (short)0x0260,
385 (short)0x0278, (short)0x02D0, (short)0x02D8, (short)0x0290, (short)0x01E0, (short)0x00D0, (short)0xFFE0, (short)0xFEF8,
386 (short)0xFE08, (short)0xFD28, (short)0xFC88, (short)0xFBE0, (short)0xFB60, (short)0xFAD8, (short)0xFA08, (short)0xF978,
387 (short)0xF8E8, (short)0xF8B0, (short)0xF8B0, (short)0xF8D0, (short)0xF9D0, (short)0xFAF8, (short)0xFC18, (short)0xFDB0,
388 (short)0xFF38, (short)0x00A0, (short)0x01F8, (short)0x02F8, (short)0x03C0, (short)0x0460, (short)0x04B8, (short)0x04C8,
389 (short)0x04C8, (short)0x04C0, (short)0x0498, (short)0x0490, (short)0x0478, (short)0x0448, (short)0x0420, (short)0x03F8,
390 (short)0x0328, (short)0x0238, (short)0x01B0, (short)0x0170, (short)0x0128, (short)0x0090, (short)0x00E8, (short)0x01B8,
391 (short)0x02B8, (short)0x0280, (short)0x0218, (short)0x0218, (short)0x01F0, (short)0x0148, (short)0x0000, (short)0xFEC0,
392 (short)0xFE08, (short)0xFD70, (short)0xFCA0, (short)0xFBF0, (short)0xFBC0, (short)0xFBA0, (short)0xFB80, (short)0xFB18,
393 (short)0xFB28, (short)0xFB98, (short)0xFBC0, (short)0xFBD0, (short)0xFC08, (short)0xFC78, (short)0xFDC8, (short)0xFEC8,
394 (short)0xFF78, (short)0x00D0, (short)0x0238, (short)0x0360, (short)0x0398, (short)0x0360, (short)0x0368, (short)0x0380,
395 (short)0x0318, (short)0x0250, (short)0x0208, (short)0x0220, (short)0x0218, (short)0x01F0, (short)0x01C8, (short)0x0210,
396 (short)0x0270, (short)0x0270, (short)0x0240, (short)0x0290, (short)0x0310, (short)0x0360, (short)0x0340, (short)0x0310,
397 (short)0x0318, (short)0x0320, (short)0x02D8, (short)0x0240, (short)0x0158, (short)0x00A0, (short)0x0008, (short)0xFF30,
398 (short)0xFE50, (short)0xFDA8, (short)0xFD28, (short)0xFCC8, (short)0xFC60, (short)0xFBA8, (short)0xFB40, (short)0xFB10,
399 (short)0xFB18, (short)0xFB28, (short)0xFB48, (short)0xFB68, (short)0xFBA8, (short)0xFBF8, (short)0xFCB8, (short)0xFD78,
400 (short)0xFE00, (short)0xFE88, (short)0xFF30, (short)0xFF98, (short)0xFFC8, (short)0xFFE8, (short)0x0050, (short)0x00B0,
401 (short)0x00E0, (short)0x0040, (short)0xFF68, (short)0xFED8, (short)0xFEE8, (short)0xFEE0, (short)0xFE90, (short)0xFEA8,
402 (short)0xFF88, (short)0x0080, (short)0x0188, (short)0x0208, (short)0x0290, (short)0x0390, (short)0x0438, (short)0x0450,
403 (short)0x0428, (short)0x03F8, (short)0x03E0, (short)0x0388, (short)0x02E0, (short)0x0240, (short)0x0190, (short)0x00D0,
404 (short)0x0000, (short)0x0000, (short)0x0018, (short)0x00FF, (short)0x0068, (short)0x00FE, (short)0x00F8, (short)0x00FD
405};
406
407gsm_byte gsm_enc_gsmdata[] = {
408 0xD5, 0x1F, 0x74, 0x21, 0xA0, 0x50, 0x40, 0xC9, 0x24, 0x7B, 0xFA, 0x6B, 0x52, 0xE0, 0xB6, 0xD6,
409 0x8E, 0xB9, 0x2B, 0xAE, 0xE0, 0x8B, 0x23, 0x52, 0x3B, 0x13, 0x86, 0xE0, 0x14, 0x4A, 0x41, 0x44,
410 0x32, 0xD3, 0xA1, 0x83, 0xA1, 0x1D, 0xA6, 0x80, 0xBA, 0xD2, 0x96, 0x26, 0xFB, 0x84, 0x80, 0x6D,
411 0x9C, 0x25, 0x1D, 0x9B, 0xAA, 0xC0, 0xBB, 0x4C, 0x95, 0xB9, 0x53, 0xAE, 0xA0, 0xB6, 0xE4, 0x46,
412 0x37, 0x1B, 0xD4, 0xA5, 0x7B, 0x1D, 0x22, 0x97, 0x00, 0xBA, 0xA5, 0x6D, 0xD2, 0xA1, 0x7E, 0xC0,
413 0xB9, 0x25, 0xD2, 0xB4, 0x94, 0x9E, 0xE0, 0x3E, 0xDE, 0xED, 0xD6, 0xD2, 0xE2, 0xC0, 0xD7, 0x5D,
414 0x8D, 0x59, 0xAC, 0xD3, 0xE4, 0x83, 0x95, 0x59, 0xC0, 0xA1, 0x48, 0xD2, 0x66, 0xC7, 0x2C, 0x9E,
415 0xA0, 0x2A, 0xD3, 0xEE, 0x45, 0x1C, 0x80, 0xE0, 0x6B, 0x34, 0x8C, 0x4B, 0x29, 0xCB, 0x00, 0xBA,
416 0xF6, 0x0D, 0x26, 0x9A, 0xD3, 0xA4, 0x82, 0x9D, 0x63, 0x7A, 0xC0, 0x67, 0x24, 0xBA, 0xD6, 0x7C,
417 0xC2, 0xC0, 0x37, 0x20, 0x4F, 0x10, 0xE0, 0xC7, 0x80, 0x6A, 0x77, 0x63, 0xBE, 0x6B, 0x5A, 0xC0,
418 0xB5, 0x34, 0xD1, 0x34, 0x9C, 0xD4, 0xE8, 0x56, 0xB2, 0x58, 0x5F, 0x00, 0xB7, 0xAF, 0x92, 0x12,
419 0x90, 0xD5, 0xA4, 0x39, 0x23, 0x4E, 0x46, 0x87, 0x51, 0xAC, 0xD8, 0xDB, 0x6D, 0xCB, 0x17, 0x50,
420 0x89, 0x7B, 0x44, 0x28, 0x03, 0x6B, 0xD5, 0xA9, 0x36, 0x36, 0xD9, 0x6B, 0xA8, 0x93, 0x3A, 0x96,
421 0xEE, 0xFF, 0x67, 0x8B, 0x36, 0xDA, 0x09, 0xB4, 0x99, 0x67, 0x2B, 0x88, 0xE4, 0xB5, 0xA5, 0xDA,
422 0x65, 0x47, 0xDA, 0x1E, 0x96, 0xFA, 0xEC, 0xD5, 0xA9, 0x45, 0x63, 0x1A, 0xCB, 0xC9, 0x48, 0x9D,
423 0x83, 0x5F, 0x6F, 0xCB, 0x08, 0x1B, 0x97, 0xC9, 0x18, 0x0A, 0x63, 0xCB, 0xA6, 0xE1, 0x84, 0xF5,
424 0x62, 0x61, 0x6A, 0x84, 0xDC, 0xB6, 0x37, 0x9E, 0xD6, 0xAB, 0x3C, 0x53, 0x93, 0xC1, 0x2A, 0xAA,
425 0x81, 0x8D, 0x6B, 0x65, 0x60, 0xA8, 0xFB, 0x2E, 0x22, 0x59, 0x74, 0x61, 0xA6, 0x5D, 0x73, 0x94,
426 0xF8, 0xE4, 0xC1, 0x46, 0x26, 0x5E, 0x8A, 0x86, 0xED, 0xD4, 0xA6, 0x2D, 0x57, 0x6B, 0xBE, 0xE8,
427 0x58, 0xDA, 0x3D, 0x98, 0x99, 0xBE, 0xA8, 0xC2, 0xDB, 0x6A, 0x2E, 0x51, 0x62, 0xE5, 0x80, 0x58,
428 0x76, 0xB8, 0xE4, 0x6C, 0x84, 0xCA, 0x98, 0x06, 0x0B, 0xFC, 0xD2, 0x66, 0x7C, 0x62, 0x3A, 0x5B,
429 0xC5, 0xDF, 0x7D, 0x75, 0x49, 0x1E, 0x52, 0xC7, 0x55, 0xF7, 0x84, 0xA6, 0xDA, 0x5D, 0x43, 0x26,
430 0x85, 0x98, 0xD8, 0x8F, 0xB6, 0xC5, 0x28, 0xEB, 0x3E, 0x75, 0x04, 0xD2, 0x27, 0xBA, 0x2A, 0x2B,
431 0xB7, 0x03, 0x13, 0x45, 0x35, 0x1B, 0x78, 0x5F, 0xC3, 0xBA, 0xDB, 0xAE, 0x27, 0xC2, 0x5E, 0xA4,
432 0x50, 0x8C, 0x8A, 0xBB, 0x4F, 0x60, 0xC3, 0xEE, 0x41, 0x46, 0x4A, 0xDF, 0xD2, 0x27, 0xB2, 0xAD,
433 0xEB, 0x5F, 0x43, 0x4C, 0x6A, 0x09, 0x2A, 0xCC, 0xB7, 0x47, 0x2A, 0xB9, 0x91, 0xB6, 0xD4, 0x5B,
434 0x25, 0x58, 0xD8, 0xFD, 0x46, 0x95, 0x5A, 0xC3, 0x27, 0x5B, 0x3F, 0xFB, 0x12, 0xD2, 0x26, 0xC3,
435 0xA9, 0xA1, 0xB6, 0xA2, 0xCB, 0x1B, 0xD0, 0x73, 0xE4, 0xBA, 0xA1, 0xE9, 0x05, 0xBE, 0x79, 0x23,
436 0xA4, 0xC2, 0x3A, 0x4B, 0x11, 0xE5, 0x68, 0xC4, 0xC1, 0xBA, 0xC1, 0xCC, 0x8B, 0x02, 0xD2, 0x63,
437 0x6C, 0xEE, 0x19, 0x5E, 0xE1, 0xB6, 0x4C, 0x1A, 0xB4, 0x5E, 0xF0, 0xC2, 0x27, 0x20, 0x55, 0xBD,
438 0x6D, 0x64, 0xE1, 0xC7, 0x45, 0xA9, 0x65, 0x6D, 0x7D, 0x42, 0x56, 0xD8, 0xB2, 0xB6, 0xEC, 0xD3,
439 0x61, 0x5B, 0x62, 0x61, 0x60, 0xA1, 0x5B, 0xD6, 0x15, 0x29, 0x09, 0x6C, 0xA1, 0x3E, 0xAD, 0x65,
440 0x34, 0xC3, 0xC0, 0xC1, 0x22, 0x6D, 0x4C, 0x57, 0x10, 0xDB, 0x41, 0xD2, 0xE1, 0x77, 0x64, 0xF7,
441 0xD3, 0x21, 0x73, 0xA9, 0x29, 0x58, 0xC1, 0xA1, 0x5A, 0x52, 0xB7, 0x32, 0x64, 0xC1, 0x67, 0x42,
442 0x74, 0x2C, 0xDC, 0x61, 0x61, 0x65, 0x8B, 0xCB, 0x04, 0xE5, 0x60, 0xC1, 0xC9, 0x5E, 0x8E, 0x36,
443 0x83, 0xD2, 0xA2, 0x83, 0xA9, 0xD9, 0xCD, 0x21, 0xB9, 0x25, 0xCD, 0xE6, 0x1D, 0x60, 0xA1, 0xB4,
444 0xAA, 0x8F, 0xBA, 0x75, 0xC3, 0x01, 0x0B, 0x3B, 0x51, 0xDB, 0xEC, 0x62, 0xE1, 0x38, 0xCD, 0x40,
445 0x3B, 0xD3, 0xD2, 0x26, 0x94, 0x29, 0xD2, 0x61, 0x21, 0x6B, 0x4A, 0x8D, 0x24, 0xB5, 0xBB, 0x21,
446 0x12, 0xA5, 0x99, 0xA5, 0x1A, 0xCA, 0xA1, 0xEF, 0x5D, 0xAA, 0xAE, 0xD3, 0x64, 0xE1, 0xA3, 0x6B,
447 0xAE, 0x35, 0x39, 0xD2, 0x66, 0x73, 0xB6, 0x90, 0xC6, 0xC1, 0x32, 0xD1, 0xBA, 0xC9, 0x25, 0x65,
448 0x81, 0xA8, 0xD2, 0xB1, 0xE7, 0x18, 0xBE, 0xC0, 0xFC, 0xE4, 0x85, 0xB5, 0x06, 0xB4, 0x81, 0x35,
449 0x46, 0xB6, 0xC8, 0x9B
450};
451
452#endif /* end of include guard: DATA_H */
diff --git a/baseline/source/gsm_enc/gsm_enc.c b/baseline/source/gsm_enc/gsm_enc.c
new file mode 100644
index 0000000..cdac899
--- /dev/null
+++ b/baseline/source/gsm_enc/gsm_enc.c
@@ -0,0 +1,2072 @@
1/* gsm_enc_encode.c */
2/*
3 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
4 * Universitaet Berlin. See the accompanying file "COPYRIGHT" for
5 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
6 */
7
8#include "../extra.h"
9#include "private.h"
10
11/*
12 * Prototypes from add.c
13 */
14
15extern word gsm_enc_div (word num, word denum);
16
17extern word gsm_enc_sub (word a, word b);
18
19extern word gsm_enc_norm ( longword a );
20
21extern word gsm_enc_asl (word a, int n);
22
23extern word gsm_enc_asr (word a, int n);
24
25/*
26 * Inlined functions from add.h
27 */
28
29#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \
30 (SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
31
32# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \
33 (SASR( ((longword)(a) * (longword)(b)), 15 ))
34
35# define GSM_L_ADD(a, b) \
36 ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
37 : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
38 >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
39 : ((b) <= 0 ? (a) + (b) \
40 : (utmp = (ulongword)(a) + (ulongword)(b)) >= (ulongword)MAX_LONGWORD \
41 ? MAX_LONGWORD : a + b))
42
43#define GSM_ADD(a, b) \
44 ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \
45 MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
46
47# define GSM_SUB(a, b) \
48 ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \
49 ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
50
51# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
52
53#define saturate(x) \
54 ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
55
56/* Use these if necessary:
57
58# define GSM_MULT_R(a, b) gsm_enc_mult_r(a, b)
59# define GSM_MULT(a, b) gsm_enc_mult(a, b)
60# define GSM_L_MULT(a, b) gsm_enc_L_mult(a, b)
61
62# define GSM_L_ADD(a, b) gsm_enc_L_add(a, b)
63# define GSM_ADD(a, b) gsm_enc_add(a, b)
64# define GSM_SUB(a, b) gsm_enc_sub(a, b)
65
66# define GSM_ABS(a) gsm_enc_abs(a)
67*/
68
69/*
70 * More prototypes from implementations..
71 */
72extern void gsm_enc_Gsm_Coder (
73 struct gsm_state * S,
74 word * s, /* [0..159] samples IN */
75 word * LARc, /* [0..7] LAR coefficients OUT */
76 word * Nc, /* [0..3] LTP lag OUT */
77 word * bc, /* [0..3] coded LTP gain OUT */
78 word * Mc, /* [0..3] RPE grid selection OUT */
79 word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
80 word * xMc /* [13*4] normalized RPE samples OUT */);
81
82extern void gsm_enc_Gsm_Long_Term_Predictor ( /* 4x for 160 samples */
83 word * d, /* [0..39] residual signal IN */
84 word * dp, /* [-120..-1] d' IN */
85 word * e, /* [0..40] OUT */
86 word * dpp, /* [0..40] OUT */
87 word * Nc, /* correlation lag OUT */
88 word * bc /* gain factor OUT */);
89
90extern void gsm_enc_Gsm_LPC_Analysis (
91 word * s, /* 0..159 signals IN/OUT */
92 word * LARc); /* 0..7 LARc's OUT */
93
94extern void gsm_enc_Gsm_Preprocess (
95 struct gsm_state * S,
96 word * s, word * so);
97
98extern void gsm_enc_Gsm_Short_Term_Analysis_Filter (
99 struct gsm_state * S,
100 word * LARc, /* coded log area ratio [0..7] IN */
101 word * d /* st res. signal [0..159] IN/OUT */);
102
103void gsm_enc_Gsm_RPE_Encoding (
104 word * e, /* -5..-1][0..39][40..44 IN/OUT */
105 word * xmaxc, /* OUT */
106 word * Mc, /* OUT */
107 word * xMc); /* [0..12] OUT */
108
109
110/**************** end #include "private.h" **********************************/
111
112/*
113 * Interface
114 */
115
116typedef struct gsm_state * gsm;
117typedef short gsm_signal; /* signed 16 bit */
118typedef unsigned char gsm_byte;
119typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */
120
121#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */
122
123#define GSM_PATCHLEVEL 6
124#define GSM_MINOR 0
125#define GSM_MAJOR 1
126
127#include "data.h"
128
129extern void gsm_enc_encode (gsm, gsm_signal *, gsm_byte *);
130
131extern int gsm_enc_explode (gsm, gsm_byte *, gsm_signal *);
132extern void gsm_enc_implode (gsm, gsm_signal *, gsm_byte *);
133
134
135/******************* end #include "gsm.h" **********************************/
136
137#define SAMPLES 20
138
139/*
140 Forward declaration of global variables
141*/
142
143struct gsm_state gsm_enc_state;
144gsm gsm_enc_state_ptr;
145volatile int gsm_enc_result;
146
147
148/* add.c */
149
150word gsm_enc_sub (word a, word b)
151{
152 longword diff = (longword)a - (longword)b;
153 return saturate(diff);
154}
155
156
157unsigned char gsm_enc_bitoff[ 256 ] = {
158 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
159 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
160 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
161 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
162 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
163 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
164 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
165 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
166 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
170 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
171 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
172 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
173 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
174};
175
176void gsm_enc_encode (gsm s, gsm_signal * source, gsm_byte * c)
177{
178 word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
179
180 gsm_enc_Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc);
181
182
183 /* variable size
184
185 GSM_MAGIC 4
186
187 LARc[0] 6
188 LARc[1] 6
189 LARc[2] 5
190 LARc[3] 5
191 LARc[4] 4
192 LARc[5] 4
193 LARc[6] 3
194 LARc[7] 3
195
196 Nc[0] 7
197 bc[0] 2
198 Mc[0] 2
199 xmaxc[0] 6
200 xmc[0] 3
201 xmc[1] 3
202 xmc[2] 3
203 xmc[3] 3
204 xmc[4] 3
205 xmc[5] 3
206 xmc[6] 3
207 xmc[7] 3
208 xmc[8] 3
209 xmc[9] 3
210 xmc[10] 3
211 xmc[11] 3
212 xmc[12] 3
213
214 Nc[1] 7
215 bc[1] 2
216 Mc[1] 2
217 xmaxc[1] 6
218 xmc[13] 3
219 xmc[14] 3
220 xmc[15] 3
221 xmc[16] 3
222 xmc[17] 3
223 xmc[18] 3
224 xmc[19] 3
225 xmc[20] 3
226 xmc[21] 3
227 xmc[22] 3
228 xmc[23] 3
229 xmc[24] 3
230 xmc[25] 3
231
232 Nc[2] 7
233 bc[2] 2
234 Mc[2] 2
235 xmaxc[2] 6
236 xmc[26] 3
237 xmc[27] 3
238 xmc[28] 3
239 xmc[29] 3
240 xmc[30] 3
241 xmc[31] 3
242 xmc[32] 3
243 xmc[33] 3
244 xmc[34] 3
245 xmc[35] 3
246 xmc[36] 3
247 xmc[37] 3
248 xmc[38] 3
249
250 Nc[3] 7
251 bc[3] 2
252 Mc[3] 2
253 xmaxc[3] 6
254 xmc[39] 3
255 xmc[40] 3
256 xmc[41] 3
257 xmc[42] 3
258 xmc[43] 3
259 xmc[44] 3
260 xmc[45] 3
261 xmc[46] 3
262 xmc[47] 3
263 xmc[48] 3
264 xmc[49] 3
265 xmc[50] 3
266 xmc[51] 3
267 */
268
269
270 *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */
271 | ((LARc[0] >> 2) & 0xF);
272 *c++ = ((LARc[0] & 0x3) << 6)
273 | (LARc[1] & 0x3F);
274 *c++ = ((LARc[2] & 0x1F) << 3)
275 | ((LARc[3] >> 2) & 0x7);
276 *c++ = ((LARc[3] & 0x3) << 6)
277 | ((LARc[4] & 0xF) << 2)
278 | ((LARc[5] >> 2) & 0x3);
279 *c++ = ((LARc[5] & 0x3) << 6)
280 | ((LARc[6] & 0x7) << 3)
281 | (LARc[7] & 0x7);
282 *c++ = ((Nc[0] & 0x7F) << 1)
283 | ((bc[0] >> 1) & 0x1);
284 *c++ = ((bc[0] & 0x1) << 7)
285 | ((Mc[0] & 0x3) << 5)
286 | ((xmaxc[0] >> 1) & 0x1F);
287 *c++ = ((xmaxc[0] & 0x1) << 7)
288 | ((xmc[0] & 0x7) << 4)
289 | ((xmc[1] & 0x7) << 1)
290 | ((xmc[2] >> 2) & 0x1);
291 *c++ = ((xmc[2] & 0x3) << 6)
292 | ((xmc[3] & 0x7) << 3)
293 | (xmc[4] & 0x7);
294 *c++ = ((xmc[5] & 0x7) << 5) /* 10 */
295 | ((xmc[6] & 0x7) << 2)
296 | ((xmc[7] >> 1) & 0x3);
297 *c++ = ((xmc[7] & 0x1) << 7)
298 | ((xmc[8] & 0x7) << 4)
299 | ((xmc[9] & 0x7) << 1)
300 | ((xmc[10] >> 2) & 0x1);
301 *c++ = ((xmc[10] & 0x3) << 6)
302 | ((xmc[11] & 0x7) << 3)
303 | (xmc[12] & 0x7);
304 *c++ = ((Nc[1] & 0x7F) << 1)
305 | ((bc[1] >> 1) & 0x1);
306 *c++ = ((bc[1] & 0x1) << 7)
307 | ((Mc[1] & 0x3) << 5)
308 | ((xmaxc[1] >> 1) & 0x1F);
309 *c++ = ((xmaxc[1] & 0x1) << 7)
310 | ((xmc[13] & 0x7) << 4)
311 | ((xmc[14] & 0x7) << 1)
312 | ((xmc[15] >> 2) & 0x1);
313 *c++ = ((xmc[15] & 0x3) << 6)
314 | ((xmc[16] & 0x7) << 3)
315 | (xmc[17] & 0x7);
316 *c++ = ((xmc[18] & 0x7) << 5)
317 | ((xmc[19] & 0x7) << 2)
318 | ((xmc[20] >> 1) & 0x3);
319 *c++ = ((xmc[20] & 0x1) << 7)
320 | ((xmc[21] & 0x7) << 4)
321 | ((xmc[22] & 0x7) << 1)
322 | ((xmc[23] >> 2) & 0x1);
323 *c++ = ((xmc[23] & 0x3) << 6)
324 | ((xmc[24] & 0x7) << 3)
325 | (xmc[25] & 0x7);
326 *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */
327 | ((bc[2] >> 1) & 0x1);
328 *c++ = ((bc[2] & 0x1) << 7)
329 | ((Mc[2] & 0x3) << 5)
330 | ((xmaxc[2] >> 1) & 0x1F);
331 *c++ = ((xmaxc[2] & 0x1) << 7)
332 | ((xmc[26] & 0x7) << 4)
333 | ((xmc[27] & 0x7) << 1)
334 | ((xmc[28] >> 2) & 0x1);
335 *c++ = ((xmc[28] & 0x3) << 6)
336 | ((xmc[29] & 0x7) << 3)
337 | (xmc[30] & 0x7);
338 *c++ = ((xmc[31] & 0x7) << 5)
339 | ((xmc[32] & 0x7) << 2)
340 | ((xmc[33] >> 1) & 0x3);
341 *c++ = ((xmc[33] & 0x1) << 7)
342 | ((xmc[34] & 0x7) << 4)
343 | ((xmc[35] & 0x7) << 1)
344 | ((xmc[36] >> 2) & 0x1);
345 *c++ = ((xmc[36] & 0x3) << 6)
346 | ((xmc[37] & 0x7) << 3)
347 | (xmc[38] & 0x7);
348 *c++ = ((Nc[3] & 0x7F) << 1)
349 | ((bc[3] >> 1) & 0x1);
350 *c++ = ((bc[3] & 0x1) << 7)
351 | ((Mc[3] & 0x3) << 5)
352 | ((xmaxc[3] >> 1) & 0x1F);
353 *c++ = ((xmaxc[3] & 0x1) << 7)
354 | ((xmc[39] & 0x7) << 4)
355 | ((xmc[40] & 0x7) << 1)
356 | ((xmc[41] >> 2) & 0x1);
357 *c++ = ((xmc[41] & 0x3) << 6) /* 30 */
358 | ((xmc[42] & 0x7) << 3)
359 | (xmc[43] & 0x7);
360 *c++ = ((xmc[44] & 0x7) << 5)
361 | ((xmc[45] & 0x7) << 2)
362 | ((xmc[46] >> 1) & 0x3);
363 *c++ = ((xmc[46] & 0x1) << 7)
364 | ((xmc[47] & 0x7) << 4)
365 | ((xmc[48] & 0x7) << 1)
366 | ((xmc[49] >> 2) & 0x1);
367 *c++ = ((xmc[49] & 0x3) << 6)
368 | ((xmc[50] & 0x7) << 3)
369 | (xmc[51] & 0x7);
370
371}
372
373/* decode.c */
374/*
375 * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER
376 */
377
378/* code.c */
379void gsm_enc_Gsm_Coder (
380
381 struct gsm_state * S,
382
383 word * s, /* [0..159] samples IN */
384
385/*
386 * The RPE-LTD coder works on a frame by frame basis. The length of
387 * the frame is equal to 160 samples. Some computations are done
388 * once per frame to produce at the output of the coder the
389 * LARc[1..8] parameters which are the coded LAR coefficients and
390 * also to realize the inverse filtering operation for the entire
391 * frame (160 samples of signal d[0..159]). These parts produce at
392 * the output of the coder:
393 */
394
395 word * LARc, /* [0..7] LAR coefficients OUT */
396
397/*
398 * Procedure 4.2.11 to 4.2.18 are to be executed four times per
399 * frame. That means once for each sub-segment RPE-LTP analysis of
400 * 40 samples. These parts produce at the output of the coder:
401 */
402
403 word * Nc, /* [0..3] LTP lag OUT */
404 word * bc, /* [0..3] coded LTP gain OUT */
405 word * Mc, /* [0..3] RPE grid selection OUT */
406 word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
407 word * xMc /* [13*4] normalized RPE samples OUT */
408)
409{
410 int k;
411 word * dp = S->dp0 + 120; /* [ -120...-1 ] */
412 word * dpp = dp; /* [ 0...39 ] */
413
414 static word e [50] = {0};
415
416 word so[160];
417
418 gsm_enc_Gsm_Preprocess (S, s, so);
419 gsm_enc_Gsm_LPC_Analysis (so, LARc);
420 gsm_enc_Gsm_Short_Term_Analysis_Filter (S, LARc, so);
421
422 _Pragma("loopbound min 4 max 4")
423 for (k = 0; k <= 3; k++, xMc += 13) {
424
425 gsm_enc_Gsm_Long_Term_Predictor (
426 so+k*40, /* d [0..39] IN */
427 dp, /* dp [-120..-1] IN */
428 e + 5, /* e [0..39] OUT */
429 dpp, /* dpp [0..39] OUT */
430 Nc++,
431 bc++);
432
433 gsm_enc_Gsm_RPE_Encoding (
434 e + 5, /* e ][0..39][ IN/OUT */
435 xmaxc++, Mc++, xMc );
436 /*
437 * gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal
438 * ( dpp, e + 5, dp );
439 */
440
441 { int i;
442 longword ltmp;
443 _Pragma("loopbound min 40 max 40")
444 for (i = 0; i <= 39; i++) {
445 dp[ i ] = GSM_ADD( e[5 + i], dpp[i] );
446 }
447 }
448
449 dp += 40;
450 dpp += 40;
451
452 }
453// //(void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160),
454// // 120 * sizeof(*S->dp0) );
455}
456
457/* rpe.c */
458/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION
459 */
460
461/* 4.2.13 */
462
463void gsm_enc_Weighting_filter (
464 word * e, /* signal [-5..0.39.44] IN */
465 word * x /* signal [0..39] OUT */
466)
467/*
468 * The coefficients of the weighting filter are stored in a table
469 * (see table 4.4). The following scaling is used:
470 *
471 * H[0..10] = integer( real_H[ 0..10] * 8192 );
472 */
473{
474 /* word wt[ 50 ]; */
475
476 longword L_result;
477 int k /* , i */ ;
478
479 /* Initialization of a temporary working array wt[0...49]
480 */
481
482 /* for (k = 0; k <= 4; k++) wt[k] = 0;
483 * for (k = 5; k <= 44; k++) wt[k] = *e++;
484 * for (k = 45; k <= 49; k++) wt[k] = 0;
485 *
486 * (e[-5..-1] and e[40..44] are allocated by the caller,
487 * are initially zero and are not written anywhere.)
488 */
489 e -= 5;
490
491 /* Compute the signal x[0..39]
492 */
493 _Pragma("loopbound min 40 max 40")
494 for (k = 0; k <= 39; k++) {
495
496 L_result = 8192 >> 1;
497
498 /* for (i = 0; i <= 10; i++) {
499 * L_temp = GSM_L_MULT( wt[k+i], gsm_enc_H[i] );
500 * L_result = GSM_L_ADD( L_result, L_temp );
501 * }
502 */
503
504#undef STEP
505#define STEP( i, H ) (e[ k + i ] * (longword)H)
506
507 /* Every one of these multiplications is done twice --
508 * but I don't see an elegant way to optimize this.
509 * Do you?
510 */
511
512#ifdef STUPID_COMPILER
513 L_result += STEP( 0, -134 ) ;
514 L_result += STEP( 1, -374 ) ;
515 /* + STEP( 2, 0 ) */
516 L_result += STEP( 3, 2054 ) ;
517 L_result += STEP( 4, 5741 ) ;
518 L_result += STEP( 5, 8192 ) ;
519 L_result += STEP( 6, 5741 ) ;
520 L_result += STEP( 7, 2054 ) ;
521 /* + STEP( 8, 0 ) */
522 L_result += STEP( 9, -374 ) ;
523 L_result += STEP( 10, -134 ) ;
524#else
525 L_result +=
526 STEP( 0, -134 )
527 + STEP( 1, -374 )
528 /* + STEP( 2, 0 ) */
529 + STEP( 3, 2054 )
530 + STEP( 4, 5741 )
531 + STEP( 5, 8192 )
532 + STEP( 6, 5741 )
533 + STEP( 7, 2054 )
534 /* + STEP( 8, 0 ) */
535 + STEP( 9, -374 )
536 + STEP(10, -134 )
537 ;
538#endif
539 /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *)
540 * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *)
541 *
542 * x[k] = SASR( L_result, 16 );
543 */
544
545 /* 2 adds vs. >>16 => 14, minus one shift to compensate for
546 * those we lost when replacing L_MULT by '*'.
547 */
548
549 L_result = SASR( L_result, 13 );
550 x[k] = ( L_result < MIN_WORD ? MIN_WORD
551 : (L_result > MAX_WORD ? MAX_WORD : L_result ));
552 }
553}
554
555/* 4.2.14 */
556
557void gsm_enc_RPE_grid_selection (
558 word * x, /* [0..39] IN */
559 word * xM, /* [0..12] OUT */
560 word * Mc_out /* OUT */
561)
562/*
563 * The signal x[0..39] is used to select the RPE grid which is
564 * represented by Mc.
565 */
566{
567 /* word temp1; */
568 int /* m, */ i;
569 longword L_result, L_temp;
570 longword EM; /* xxx should be L_EM? */
571 word Mc;
572
573 longword L_common_0_3;
574
575 Mc = 0;
576
577#undef STEP
578#define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \
579 L_result += L_temp * L_temp;
580
581 /* common part of 0 and 3 */
582
583 L_result = 0;
584 STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 );
585 STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 );
586 STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12);
587 L_common_0_3 = L_result;
588
589 /* i = 0 */
590
591 STEP( 0, 0 );
592 L_result <<= 1; /* implicit in L_MULT */
593 EM = L_result;
594
595 /* i = 1 */
596
597 L_result = 0;
598 STEP( 1, 0 );
599 STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 );
600 STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 );
601 STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12);
602 L_result <<= 1;
603 if (L_result > EM) {
604 Mc = 1;
605 EM = L_result;
606 }
607
608 /* i = 2 */
609
610 L_result = 0;
611 STEP( 2, 0 );
612 STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 );
613 STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 );
614 STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12);
615 L_result <<= 1;
616 if (L_result > EM) {
617 Mc = 2;
618 EM = L_result;
619 }
620
621 /* i = 3 */
622
623 L_result = L_common_0_3;
624 STEP( 3, 12 );
625 L_result <<= 1;
626 if (L_result > EM) {
627 Mc = 3;
628 }
629
630 /**/
631
632 /* Down-sampling by a factor 3 to get the selected xM[0..12]
633 * RPE sequence.
634 */
635 _Pragma("loopbound min 13 max 13")
636 for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i];
637 *Mc_out = Mc;
638
639}
640
641/* 4.12.15 */
642
643void gsm_enc_APCM_quantization_xmaxc_to_exp_mant (
644 word xmaxc, /* IN */
645 word * exp_out, /* OUT */
646 word * mant_out ) /* OUT */
647{
648 word exp, mant;
649
650 /* Compute exponent and mantissa of the decoded version of xmaxc
651 */
652 exp = 0;
653 if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1;
654 mant = xmaxc - (exp << 3);
655
656 if (mant == 0) {
657 exp = -4;
658 mant = 7;
659 }
660 else {
661 _Pragma("loopbound min 0 max 3")
662 while (mant <= 7) {
663 mant = mant << 1 | 1;
664 exp--;
665 }
666 mant -= 8;
667 }
668
669 *exp_out = exp;
670 *mant_out = mant;
671
672}
673
674void gsm_enc_APCM_quantization (
675 word * xM, /* [0..12] IN */
676
677 word * xMc, /* [0..12] OUT */
678 word * mant_out, /* OUT */
679 word * exp_out, /* OUT */
680 word * xmaxc_out /* OUT */
681)
682{
683 int i, itest;
684
685 word xmax, xmaxc, temp, temp1, temp2;
686 word exp, mant;
687
688
689 /* Find the maximum absolute value xmax of xM[0..12].
690 */
691
692 xmax = 0;
693
694 _Pragma("loopbound min 13 max 13")
695 for (i = 0; i <= 12; i++) {
696 temp = xM[i];
697 temp = GSM_ABS(temp);
698 if (temp > xmax) xmax = temp;
699 }
700
701 /* Qantizing and coding of xmax to get xmaxc.
702 */
703
704 exp = 0;
705 temp = SASR( xmax, 9 );
706 itest = 0;
707
708 _Pragma("loopbound min 6 max 6")
709 for (i = 0; i <= 5; i++) {
710
711 itest |= (temp <= 0);
712 temp = SASR( temp, 1 );
713
714 if (itest == 0) exp++; // exp = add (exp, 1)
715 }
716
717 temp = exp + 5;
718
719 //xmaxc = gsm_enc_add( SASR(xmax, temp), exp << 3 );
720 xmaxc = saturate( ( SASR(xmax, temp) + (exp << 3) ));
721
722 /* Quantizing and coding of the xM[0..12] RPE sequence
723 * to get the xMc[0..12]
724 */
725
726 gsm_enc_APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant );
727
728 /* This computation uses the fact that the decoded version of xmaxc
729 * can be calculated by using the exponent and the mantissa part of
730 * xmaxc (logarithmic table).
731 * So, this method avoids any division and uses only a scaling
732 * of the RPE samples by a function of the exponent. A direct
733 * multiplication by the inverse of the mantissa (NRFAC[0..7]
734 * found in table 4.5) gives the 3 bit coded version xMc[0..12]
735 * of the RPE samples.
736 */
737
738
739 /* Direct computation of xMc[0..12] using table 4.5
740 */
741
742
743 temp1 = 6 - exp; /* normalization by the exponent */
744 temp2 = gsm_enc_NRFAC[ mant ]; /* inverse mantissa */
745
746 _Pragma("loopbound min 13 max 13")
747 for (i = 0; i <= 12; i++) {
748
749 temp = xM[i] << temp1;
750 temp = GSM_MULT( temp, temp2 );
751 temp = SASR(temp, 12);
752 xMc[i] = temp + 4; /* see note below */
753 }
754
755 /* NOTE: This equation is used to make all the xMc[i] positive.
756 */
757
758 *mant_out = mant;
759 *exp_out = exp;
760 *xmaxc_out = xmaxc;
761
762}
763
764/* 4.2.16 */
765
766void gsm_enc_APCM_inverse_quantization (
767 word * xMc, /* [0..12] IN */
768 word mant,
769 word exp,
770 word * xMp) /* [0..12] OUT */
771/*
772 * This part is for decoding the RPE sequence of coded xMc[0..12]
773 * samples to obtain the xMp[0..12] array. Table 4.6 is used to get
774 * the mantissa of xmaxc (FAC[0..7]).
775 */
776{
777 int i;
778 word temp, temp1, temp2, temp3;
779 longword ltmp;
780
781 temp1 = gsm_enc_FAC[ mant ]; /* see 4.2-15 for mant */
782 temp2 = gsm_enc_sub( 6, exp ); /* see 4.2-15 for exp */
783 temp3 = gsm_enc_asl( 1, gsm_enc_sub( temp2, 1 ));
784
785 _Pragma("loopbound min 13 max 13")
786 for (i = 13; i--;) {
787
788 /* temp = gsm_enc_sub( *xMc++ << 1, 7 ); */
789 temp = (*xMc++ << 1) - 7; /* restore sign */
790
791 temp <<= 12; /* 16 bit signed */
792 temp = GSM_MULT_R( temp1, temp );
793 temp = GSM_ADD( temp, temp3 );
794 *xMp++ = gsm_enc_asr( temp, temp2 );
795 }
796}
797
798/* 4.2.17 */
799
800void gsm_enc_RPE_grid_positioning (
801 word Mc, /* grid position IN */
802 word * xMp, /* [0..12] IN */
803 word * ep /* [0..39] OUT */
804)
805/*
806 * This procedure computes the reconstructed long term residual signal
807 * ep[0..39] for the LTP analysis filter. The inputs are the Mc
808 * which is the grid position selection and the xMp[0..12] decoded
809 * RPE samples which are upsampled by a factor of 3 by inserting zero
810 * values.
811 */
812{
813 int i = 13;
814
815 //
816 // TODO: rewritten Duff's device for WCET analysis!
817 //
818 switch (Mc) {
819 case 3: *ep++ = 0;
820 case 2: *ep++ = 0;
821 case 1: *ep++ = 0;
822 case 0: *ep++ = *xMp++;
823 i--;
824 }
825
826 _Pragma("loopbound min 12 max 12")
827 do {
828 *ep++ = 0;
829 *ep++ = 0;
830 *ep++ = *xMp++;
831 } while (--i);
832
833 _Pragma("loopbound min 0 max 3")
834 while (++Mc < 4) *ep++ = 0;
835
836}
837/*
838{
839 int i = 13;
840
841 //
842 //TODO: removed for WCET analysis
843//_Pragma("marker outside")
844 switch (Mc) {
845 case 3: *ep++ = 0;
846 case 2:
847 _Pragma("loopbound min 13 max 13")
848 do {
849 *ep++ = 0;
850 case 1: *ep++ = 0;
851 case 0:
852 //_Pragma("marker inside")
853 *ep++ = *xMp++;
854 } while (--i);
855 }
856
857 //_Pragma("flowrestriction 1*inside <= 13*outside")
858
859 _Pragma("loopbound min 0 max 3")
860 while (++Mc < 4) *ep++ = 0;
861
862}
863*/
864
865/* 4.2.18 */
866
867/* This procedure adds the reconstructed long term residual signal
868 * ep[0..39] to the estimated signal dpp[0..39] from the long term
869 * analysis filter to compute the reconstructed short term residual
870 * signal dp[-40..-1]; also the reconstructed short term residual
871 * array dp[-120..-41] is updated.
872 */
873
874#if 0 /* Has been inlined in code.c */
875void gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp),
876 word * dpp, /* [0...39] IN */
877 word * ep, /* [0...39] IN */
878 word * dp) /* [-120...-1] IN/OUT */
879{
880 int k;
881
882 for (k = 0; k <= 79; k++)
883 dp[ -120 + k ] = dp[ -80 + k ];
884
885 for (k = 0; k <= 39; k++)
886 dp[ -40 + k ] = gsm_enc_add( ep[k], dpp[k] );
887}
888#endif /* Has been inlined in code.c */
889
890void gsm_enc_Gsm_RPE_Encoding (
891
892 word * e, /* -5..-1][0..39][40..44 IN/OUT */
893 word * xmaxc, /* OUT */
894 word * Mc, /* OUT */
895 word * xMc) /* [0..12] OUT */
896{
897 word x[40];
898 word xM[13], xMp[13];
899 word mant, exp;
900
901 gsm_enc_Weighting_filter(e, x);
902 gsm_enc_RPE_grid_selection(x, xM, Mc);
903
904 gsm_enc_APCM_quantization( xM, xMc, &mant, &exp, xmaxc);
905 gsm_enc_APCM_inverse_quantization( xMc, mant, exp, xMp);
906
907 gsm_enc_RPE_grid_positioning( *Mc, xMp, e );
908
909}
910
911/* long_term.c */
912#ifdef USE_TABLE_MUL
913
914unsigned int umul_table[ 513 ][ 256 ];
915
916# define umul(x9, x15) \
917 ((int)(umul_table[x9][x15 & 0x0FF] + (umul_table[x9][ x15 >> 8 ] << 8)))
918
919# define table_mul(a, b) \
920 ( (a < 0) ? ((b < 0) ? umul(-a, -b) : -umul(-a, b)) \
921 : ((b < 0) ? -umul(a, -b) : umul(a, b)))
922
923#endif /* USE_TABLE_MUL */
924
925
926
927/*
928 * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION
929 */
930
931
932/*
933 * This procedure computes the LTP gain (bc) and the LTP lag (Nc)
934 * for the long term analysis filter. This is done by calculating a
935 * maximum of the cross-correlation function between the current
936 * sub-segment short term residual signal d[0..39] (output of
937 * the short term analysis filter; for simplification the index
938 * of this array begins at 0 and ends at 39 for each sub-segment of the
939 * RPE-LTP analysis) and the previous reconstructed short term
940 * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be
941 * performed to avoid overflow.
942 */
943
944 /* This procedure exists in four versions. First, the two integer
945 * versions with or without table-multiplication (as one function);
946 * then, the two floating point versions (as another function), with
947 * or without scaling.
948 */
949
950#ifndef USE_FLOAT_MUL
951
952void gsm_enc_Calculation_of_the_LTP_parameters (
953 word * d, /* [0..39] IN */
954 word * dp, /* [-120..-1] IN */
955 word * bc_out, /* OUT */
956 word * Nc_out /* OUT */
957)
958{
959 int k, lambda;
960 word Nc, bc;
961 word wt[40];
962
963 longword L_max, L_power;
964 word R, S, dmax, scal;
965 word temp;
966
967 /* Search of the optimum scaling of d[0..39].
968 */
969 dmax = 0;
970
971 _Pragma("loopbound min 40 max 40")
972 for (k = 0; k <= 39; k++) {
973 temp = d[k];
974 temp = GSM_ABS( temp );
975 if (temp > dmax) dmax = temp;
976 }
977
978 temp = 0;
979 if (dmax != 0)
980 temp = gsm_enc_norm( (longword)dmax << 16 );
981
982 if (temp > 6) scal = 0;
983 else scal = 6 - temp;
984
985
986 /* Initialization of a working array wt
987 */
988
989 _Pragma("loopbound min 40 max 40")
990 for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal );
991
992 /* Search for the maximum cross-correlation and coding of the LTP lag
993 */
994 L_max = 0;
995 Nc = 40; /* index for the maximum cross-correlation */
996
997 _Pragma("loopbound min 81 max 81")
998 for (lambda = 40; lambda <= 120; lambda++) {
999
1000# undef STEP
1001# ifdef USE_TABLE_MUL
1002# define STEP(k) (table_mul(wt[k], dp[k - lambda]))
1003# else
1004# define STEP(k) (wt[k] * dp[k - lambda])
1005# endif
1006
1007 longword L_result;
1008
1009 L_result = STEP(0) ; L_result += STEP(1) ;
1010 L_result += STEP(2) ; L_result += STEP(3) ;
1011 L_result += STEP(4) ; L_result += STEP(5) ;
1012 L_result += STEP(6) ; L_result += STEP(7) ;
1013 L_result += STEP(8) ; L_result += STEP(9) ;
1014 L_result += STEP(10) ; L_result += STEP(11) ;
1015 L_result += STEP(12) ; L_result += STEP(13) ;
1016 L_result += STEP(14) ; L_result += STEP(15) ;
1017 L_result += STEP(16) ; L_result += STEP(17) ;
1018 L_result += STEP(18) ; L_result += STEP(19) ;
1019 L_result += STEP(20) ; L_result += STEP(21) ;
1020 L_result += STEP(22) ; L_result += STEP(23) ;
1021 L_result += STEP(24) ; L_result += STEP(25) ;
1022 L_result += STEP(26) ; L_result += STEP(27) ;
1023 L_result += STEP(28) ; L_result += STEP(29) ;
1024 L_result += STEP(30) ; L_result += STEP(31) ;
1025 L_result += STEP(32) ; L_result += STEP(33) ;
1026 L_result += STEP(34) ; L_result += STEP(35) ;
1027 L_result += STEP(36) ; L_result += STEP(37) ;
1028 L_result += STEP(38) ; L_result += STEP(39) ;
1029
1030 if (L_result > L_max) {
1031
1032 Nc = lambda;
1033 L_max = L_result;
1034 }
1035 }
1036
1037 *Nc_out = Nc;
1038
1039 L_max <<= 1;
1040
1041 /* Rescaling of L_max
1042 */
1043 L_max = L_max >> (6 - scal); /* sub(6, scal) */
1044
1045 /* Compute the power of the reconstructed short term residual
1046 * signal dp[..]
1047 */
1048 L_power = 0;
1049 _Pragma("loopbound min 40 max 40")
1050 for (k = 0; k <= 39; k++) {
1051
1052 longword L_temp;
1053
1054 L_temp = SASR( dp[k - Nc], 3 );
1055 L_power += L_temp * L_temp;
1056 }
1057 L_power <<= 1; /* from L_MULT */
1058
1059 /* Normalization of L_max and L_power
1060 */
1061
1062 if (L_max <= 0) {
1063 *bc_out = 0;
1064 return;
1065 }
1066 if (L_max >= L_power) {
1067 *bc_out = 3;
1068 return;
1069 }
1070
1071 temp = gsm_enc_norm( L_power );
1072
1073 R = SASR( L_max << temp, 16 );
1074 S = SASR( L_power << temp, 16 );
1075
1076 /* Coding of the LTP gain
1077 */
1078
1079 /* Table 4.3a must be used to obtain the level DLB[i] for the
1080 * quantization of the LTP gain b to get the coded version bc.
1081 */
1082 _Pragma("loopbound min 3 max 3")
1083 for (bc = 0; bc <= 2; bc++)
1084 /* Replaced by macro function. */
1085 //if (R <= gsm_enc_mult(S, gsm_enc_DLB[bc]))
1086 if (R <= GSM_MULT(S, gsm_enc_DLB[bc]))
1087 break;
1088
1089 *bc_out = bc;
1090}
1091
1092#else /* USE_FLOAT_MUL */
1093
1094void gsm_enc_Calculation_of_the_LTP_parameters (
1095 word * d, /* [0..39] IN */
1096 word * dp, /* [-120..-1] IN */
1097 word * bc_out, /* OUT */
1098 word * Nc_out /* OUT */
1099)
1100{
1101 int k, lambda;
1102 word Nc, bc;
1103
1104 float wt_float[40];
1105 float dp_float_base[120], * dp_float = dp_float_base + 120;
1106
1107 longword L_max, L_power;
1108 word R, S, dmax, scal;
1109 word temp;
1110
1111 /* Search of the optimum scaling of d[0..39].
1112 */
1113 dmax = 0;
1114
1115 for (k = 0; k <= 39; k++) {
1116 temp = d[k];
1117 temp = GSM_ABS( temp );
1118 if (temp > dmax) dmax = temp;
1119 }
1120
1121 temp = 0;
1122 if (dmax == 0) scal = 0;
1123 else {
1124 temp = gsm_enc_norm( (longword)dmax << 16 );
1125 }
1126
1127 if (temp > 6) scal = 0;
1128 else scal = 6 - temp;
1129
1130 /* Initialization of a working array wt
1131 */
1132
1133 for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal );
1134 for (k = -120; k < 0; k++) dp_float[k] = dp[k];
1135
1136 /* Search for the maximum cross-correlation and coding of the LTP lag
1137 */
1138 L_max = 0;
1139 Nc = 40; /* index for the maximum cross-correlation */
1140
1141 for (lambda = 40; lambda <= 120; lambda += 9) {
1142
1143 /* Calculate L_result for l = lambda .. lambda + 9.
1144 */
1145 float *lp = dp_float - lambda;
1146
1147 float W;
1148 float a = lp[-8], b = lp[-7], c = lp[-6],
1149 d = lp[-5], e = lp[-4], f = lp[-3],
1150 g = lp[-2], h = lp[-1];
1151 float E;
1152 float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
1153 S5 = 0, S6 = 0, S7 = 0, S8 = 0;
1154
1155# undef STEP
1156# define STEP(K, a, b, c, d, e, f, g, h) \
1157 W = wt_float[K]; \
1158 E = W * a; S8 += E; \
1159 E = W * b; S7 += E; \
1160 E = W * c; S6 += E; \
1161 E = W * d; S5 += E; \
1162 E = W * e; S4 += E; \
1163 E = W * f; S3 += E; \
1164 E = W * g; S2 += E; \
1165 E = W * h; S1 += E; \
1166 a = lp[K]; \
1167 E = W * a; S0 += E
1168
1169# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h)
1170# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a)
1171# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b)
1172# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c)
1173# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d)
1174# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e)
1175# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f)
1176# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g)
1177
1178 STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
1179 STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
1180
1181 STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
1182 STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
1183
1184 STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
1185 STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
1186
1187 STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
1188 STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
1189
1190 STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
1191 STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
1192
1193 if (S0 > L_max) { L_max = S0; Nc = lambda; }
1194 if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
1195 if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
1196 if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
1197 if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
1198 if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
1199 if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
1200 if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
1201 if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
1202 }
1203 *Nc_out = Nc;
1204
1205 L_max <<= 1;
1206
1207 /* Rescaling of L_max
1208 */
1209 L_max = L_max >> (6 - scal); /* sub(6, scal) */
1210
1211 /* Compute the power of the reconstructed short term residual
1212 * signal dp[..]
1213 */
1214 L_power = 0;
1215 for (k = 0; k <= 39; k++) {
1216
1217 longword L_temp;
1218
1219 L_temp = SASR( dp[k - Nc], 3 );
1220 L_power += L_temp * L_temp;
1221 }
1222 L_power <<= 1; /* from L_MULT */
1223
1224 /* Normalization of L_max and L_power
1225 */
1226
1227 if (L_max <= 0) {
1228 *bc_out = 0;
1229 return;
1230 }
1231 if (L_max >= L_power) {
1232 *bc_out = 3;
1233 return;
1234 }
1235
1236 temp = gsm_enc_norm( L_power );
1237
1238 R = SASR( L_max << temp, 16 );
1239 S = SASR( L_power << temp, 16 );
1240
1241 /* Coding of the LTP gain
1242 */
1243
1244 /* Table 4.3a must be used to obtain the level DLB[i] for the
1245 * quantization of the LTP gain b to get the coded version bc.
1246 */
1247 // Replaced by macro function.
1248 //for (bc = 0; bc <= 2; bc++) if (R <= gsm_enc_mult(S, gsm_enc_DLB[bc])) break;
1249 for (bc = 0; bc <= 2; bc++) if (R <= GSM_MULT(S, gsm_enc_DLB[bc])) break;
1250 *bc_out = bc;
1251}
1252
1253#endif /* USE_FLOAT_MUL */
1254
1255
1256/* 4.2.12 */
1257
1258void gsm_enc_Long_term_analysis_filtering (
1259 word bc, /* IN */
1260 word Nc, /* IN */
1261 word * dp, /* previous d [-120..-1] IN */
1262 word * d, /* d [0..39] IN */
1263 word * dpp, /* estimate [0..39] OUT */
1264 word * e /* long term res. signal [0..39] OUT */
1265)
1266/*
1267 * In this part, we have to decode the bc parameter to compute
1268 * the samples of the estimate dpp[0..39]. The decoding of bc needs the
1269 * use of table 4.3b. The long term residual signal e[0..39]
1270 * is then calculated to be fed to the RPE encoding section.
1271 */
1272{
1273 int k;
1274 longword ltmp;
1275
1276# undef STEP
1277# define STEP(BP) \
1278 _Pragma("loopbound min 40 max 40") \
1279 for (k = 0; k <= 39; k++) { \
1280 dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \
1281 e[k] = GSM_SUB( d[k], dpp[k] ); \
1282 }
1283
1284 switch (bc) {
1285 case 0: STEP( 3277 ); break;
1286 case 1: STEP( 11469 ); break;
1287 case 2: STEP( 21299 ); break;
1288 case 3: STEP( 32767 ); break;
1289 }
1290}
1291
1292void gsm_enc_Gsm_Long_Term_Predictor (
1293
1294 word * d, /* [0..39] residual signal IN */
1295 word * dp, /* [-120..-1] d' IN */
1296
1297 word * e, /* [0..39] OUT */
1298 word * dpp, /* [0..39] OUT */
1299 word * Nc, /* correlation lag OUT */
1300 word * bc /* gain factor OUT */
1301)
1302{
1303
1304 gsm_enc_Calculation_of_the_LTP_parameters( d, dp, bc, Nc );
1305
1306 gsm_enc_Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e );
1307}
1308
1309/* short_term.c */
1310/*
1311 * SHORT TERM ANALYSIS FILTERING SECTION
1312 */
1313
1314/* 4.2.8 */
1315
1316void gsm_enc_Decoding_of_the_coded_Log_Area_Ratios (
1317 word * LARc, /* coded log area ratio [0..7] IN */
1318 word * LARpp) /* out: decoded .. */
1319{
1320 word temp1 /* , temp2 */;
1321 long ltmp; /* for GSM_ADD */
1322
1323 /* This procedure requires for efficient implementation
1324 * two tables.
1325 *
1326 * INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
1327 * MIC[1..8] = minimum value of the LARc[1..8]
1328 */
1329
1330 /* Compute the LARpp[1..8]
1331 */
1332
1333#undef STEP
1334#define STEP( B, MIC, INVA ) \
1335 temp1 = GSM_ADD( *LARc++, MIC ) << 10; \
1336 temp1 = GSM_SUB( temp1, (B >= 0 ? B << 1 : -((-B) << 1))); \
1337 temp1 = GSM_MULT_R( INVA, temp1 ); \
1338 *LARpp++ = GSM_ADD( temp1, temp1 );
1339
1340 STEP( 0, -32, 13107 );
1341 STEP( 0, -32, 13107 );
1342 STEP( 2048, -16, 13107 );
1343 STEP( -2560, -16, 13107 );
1344
1345 STEP( 94, -8, 19223 );
1346 STEP( -1792, -8, 17476 );
1347 STEP( -341, -4, 31454 );
1348 STEP( -1144, -4, 29708 );
1349
1350 /* NOTE: the addition of *MIC is used to restore
1351 * the sign of *LARc.
1352 */
1353}
1354
1355/* 4.2.9 */
1356/* Computation of the quantized reflection coefficients
1357 */
1358
1359/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8]
1360 */
1361
1362/*
1363 * Within each frame of 160 analyzed speech samples the short term
1364 * analysis and synthesis filters operate with four different sets of
1365 * coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
1366 * and the actual set of decoded LARs (LARpp(j))
1367 *
1368 * (Initial value: LARpp(j-1)[1..8] = 0.)
1369 */
1370
1371void gsm_enc_Coefficients_0_12 (
1372 word * LARpp_j_1,
1373 word * LARpp_j,
1374 word * LARp)
1375{
1376 int i;
1377 longword ltmp;
1378
1379 _Pragma("loopbound min 8 max 8")
1380 for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) {
1381 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ));
1382 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1));
1383 }
1384}
1385
1386void gsm_enc_Coefficients_13_26 (
1387 word * LARpp_j_1,
1388 word * LARpp_j,
1389 word * LARp)
1390{
1391 int i;
1392 longword ltmp;
1393 _Pragma("loopbound min 8 max 8")
1394 for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
1395 *LARp = GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 ));
1396 }
1397}
1398
1399void gsm_enc_Coefficients_27_39 (
1400 word * LARpp_j_1,
1401 word * LARpp_j,
1402 word * LARp)
1403{
1404 int i;
1405 longword ltmp;
1406
1407 _Pragma("loopbound min 8 max 8")
1408 for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
1409 *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ));
1410 *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 ));
1411 }
1412}
1413
1414
1415void gsm_enc_Coefficients_40_159 (
1416 word * LARpp_j,
1417 word * LARp)
1418{
1419 int i;
1420
1421 _Pragma("loopbound min 8 max 8")
1422 for (i = 1; i <= 8; i++, LARp++, LARpp_j++) {
1423 *LARp = *LARpp_j;
1424 }
1425}
1426
1427/* 4.2.9.2 */
1428
1429void gsm_enc_LARp_to_rp (
1430 word * LARp) /* [0..7] IN/OUT */
1431/*
1432 * The input of this procedure is the interpolated LARp[0..7] array.
1433 * The reflection coefficients, rp[i], are used in the analysis
1434 * filter and in the synthesis filter.
1435 */
1436{
1437 int i;
1438 word temp;
1439 longword ltmp;
1440
1441 _Pragma("loopbound min 8 max 8")
1442 for (i = 1; i <= 8; i++, LARp++) {
1443
1444 /* temp = GSM_ABS( *LARp );
1445 *
1446 * if (temp < 11059) temp <<= 1;
1447 * else if (temp < 20070) temp += 11059;
1448 * else temp = GSM_ADD( temp >> 2, 26112 );
1449 *
1450 * *LARp = *LARp < 0 ? -temp : temp;
1451 */
1452
1453 if (*LARp < 0) {
1454 temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp);
1455 *LARp = - ((temp < 11059) ? temp << 1
1456 : ((temp < 20070) ? temp + 11059
1457 : GSM_ADD( temp >> 2, 26112 )));
1458 } else {
1459 temp = *LARp;
1460 *LARp = (temp < 11059) ? temp << 1
1461 : ((temp < 20070) ? temp + 11059
1462 : GSM_ADD( temp >> 2, 26112 ));
1463 }
1464 }
1465}
1466
1467
1468/* 4.2.10 */
1469void gsm_enc_Short_term_analysis_filtering (
1470 struct gsm_state * S,
1471 word * rp, /* [0..7] IN */
1472 int k_n, /* k_end - k_start */
1473 word * s /* [0..n-1] IN/OUT */
1474)
1475/*
1476 * This procedure computes the short term residual signal d[..] to be fed
1477 * to the RPE-LTP loop from the s[..] signal and from the local rp[..]
1478 * array (quantized reflection coefficients). As the call of this
1479 * procedure can be done in many ways (see the interpolation of the LAR
1480 * coefficient), it is assumed that the computation begins with index
1481 * k_start (for arrays d[..] and s[..]) and stops with index k_end
1482 * (k_start and k_end are defined in 4.2.9.1). This procedure also
1483 * needs to keep the array u[0..7] in memory for each call.
1484 */
1485{
1486 word * u = S->u;
1487 int i;
1488 word di, zzz, ui, sav, rpi;
1489 longword ltmp;
1490 int j;
1491
1492 _Pragma("loopbound min 13 max 120")
1493 for (j=0; j<k_n; ++j) {
1494
1495 di = sav = *s;
1496
1497 _Pragma("loopbound min 8 max 8")
1498 for (i = 0; i < 8; i++) { /* YYY */
1499
1500 ui = u[i];
1501 rpi = rp[i];
1502 u[i] = sav;
1503
1504 zzz = GSM_MULT_R(rpi, di);
1505 sav = GSM_ADD( ui, zzz);
1506
1507 zzz = GSM_MULT_R(rpi, ui);
1508 di = GSM_ADD( di, zzz );
1509
1510 }
1511
1512 *s = di;
1513 }
1514}
1515
1516void gsm_enc_Gsm_Short_Term_Analysis_Filter (
1517
1518 struct gsm_state * S,
1519
1520 word * LARc, /* coded log area ratio [0..7] IN */
1521 word * s /* signal [0..159] IN/OUT */
1522)
1523{
1524 word * LARpp_j = S->LARpp[ S->j ];
1525 word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ];
1526
1527 word LARp[8];
1528
1529#undef FILTER
1530# define FILTER gsm_enc_Short_term_analysis_filtering
1531
1532 gsm_enc_Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j );
1533
1534 gsm_enc_Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
1535 gsm_enc_LARp_to_rp( LARp );
1536 FILTER( S, LARp, 13, s);
1537
1538 gsm_enc_Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
1539 gsm_enc_LARp_to_rp( LARp );
1540 FILTER( S, LARp, 14, s + 13);
1541
1542 gsm_enc_Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
1543 gsm_enc_LARp_to_rp( LARp );
1544 FILTER( S, LARp, 13, s + 27);
1545
1546 gsm_enc_Coefficients_40_159( LARpp_j, LARp);
1547 gsm_enc_LARp_to_rp( LARp );
1548 FILTER( S, LARp, 120, s + 40);
1549}
1550
1551/* lpc.c */
1552#undef P
1553
1554/*
1555 * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
1556 */
1557
1558/* 4.2.4 */
1559
1560
1561void gsm_enc_Autocorrelation (
1562 word * s, /* [0..159] IN/OUT */
1563 longword * L_ACF) /* [0..8] OUT */
1564/*
1565 * The goal is to compute the array L_ACF[k]. The signal s[i] must
1566 * be scaled in order to avoid an overflow situation.
1567 */
1568{
1569 int k, i;
1570
1571 word temp, smax, scalauto;
1572
1573 /* Dynamic scaling of the array s[0..159]
1574 */
1575
1576 /* Search for the maximum.
1577 */
1578 smax = 0;
1579
1580 _Pragma("loopbound min 160 max 160")
1581 for (k = 0; k <= 159; k++) {
1582 temp = GSM_ABS( s[k] );
1583 if (temp > smax) smax = temp;
1584 }
1585
1586 /* Computation of the scaling factor.
1587 */
1588 if (smax == 0) scalauto = 0;
1589 else {
1590 scalauto = 4 - gsm_enc_norm( (longword)smax << 16 );/* sub(4,..) */
1591 }
1592
1593 /* Scaling of the array s[0...159]
1594 */
1595
1596 if (scalauto > 0) {
1597
1598# define SCALE(n) \
1599 case n: \
1600 _Pragma("loopbound min 160 max 160") \
1601 for (k = 0; k <= 159; k++) \
1602 s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\
1603 break;
1604
1605 switch (scalauto) {
1606 SCALE(1)
1607 SCALE(2)
1608 SCALE(3)
1609 SCALE(4)
1610 }
1611# undef SCALE
1612 }
1613
1614 /* Compute the L_ACF[..].
1615 */
1616 {
1617 word * sp = s;
1618 word sl = *sp;
1619#undef STEP
1620# define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]);
1621
1622# define NEXTI sl = *++sp
1623
1624
1625 _Pragma("loopbound min 9 max 9")
1626 for (k = 9; k--; L_ACF[k] = 0) ;
1627
1628 STEP (0);
1629 NEXTI;
1630 STEP(0); STEP(1);
1631 NEXTI;
1632 STEP(0); STEP(1); STEP(2);
1633 NEXTI;
1634 STEP(0); STEP(1); STEP(2); STEP(3);
1635 NEXTI;
1636 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4);
1637 NEXTI;
1638 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5);
1639 NEXTI;
1640 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6);
1641 NEXTI;
1642 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7);
1643
1644 _Pragma("loopbound min 152 max 152")
1645 for (i = 8; i <= 159; i++) {
1646
1647 NEXTI;
1648
1649 STEP(0);
1650 STEP(1); STEP(2); STEP(3); STEP(4);
1651 STEP(5); STEP(6); STEP(7); STEP(8);
1652 }
1653
1654 _Pragma("loopbound min 9 max 9")
1655 for (k = 9; k--; L_ACF[k] <<= 1) ;
1656
1657 }
1658 /* Rescaling of the array s[0..159]
1659 */
1660 if (scalauto > 0) {
1661 _Pragma("loopbound min 160 max 160")
1662 for (k = 160; k--; *s++ <<= scalauto) ;
1663 }
1664}
1665
1666/* 4.2.5 */
1667
1668void gsm_enc_Reflection_coefficients (
1669 longword * L_ACF, /* 0...8 IN */
1670 word * r /* 0...7 OUT */
1671)
1672{
1673 int i, m, n;
1674 word temp;
1675 longword ltmp;
1676 word ACF[9]; /* 0..8 */
1677 word P[ 9]; /* 0..8 */
1678 word K[ 9]; /* 2..8 */
1679
1680 /* Schur recursion with 16 bits arithmetic.
1681 */
1682
1683 if (L_ACF[0] == 0) {
1684 _Pragma("loopbound min 8 max 8")
1685 for (i = 8; i--; *r++ = 0) ;
1686 return;
1687 }
1688
1689 temp = gsm_enc_norm( L_ACF[0] );
1690
1691 /* ? overflow ? */
1692 _Pragma("loopbound min 9 max 9")
1693 for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 );
1694
1695 /* Initialize array P[..] and K[..] for the recursion.
1696 */
1697
1698 _Pragma("loopbound min 7 max 7")
1699 for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ];
1700
1701 _Pragma("loopbound min 9 max 9")
1702 for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ];
1703
1704 /* Compute reflection coefficients
1705 */
1706 _Pragma("loopbound min 8 max 8")
1707 for (n = 1; n <= 8; n++, r++) {
1708
1709 temp = P[1];
1710 temp = GSM_ABS(temp);
1711 if (P[0] < temp) {
1712 _Pragma("loopbound min 8 max 8")
1713 for (i = n; i <= 8; i++) *r++ = 0;
1714 return;
1715 }
1716
1717 *r = gsm_enc_div( temp, P[0] );
1718
1719 if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */
1720 if (n == 8) return;
1721
1722 /* Schur recursion
1723 */
1724 temp = GSM_MULT_R( P[1], *r );
1725 P[0] = GSM_ADD( P[0], temp );
1726
1727 _Pragma("loopbound min 1 max 7")
1728 for (m = 1; m <= 8 - n; ++m) {
1729 temp = GSM_MULT_R( K[ m ], *r );
1730 P[m] = GSM_ADD( P[ m+1 ], temp );
1731
1732 temp = GSM_MULT_R( P[ m+1 ], *r );
1733 K[m] = GSM_ADD( K[ m ], temp );
1734 }
1735 }
1736}
1737
1738/* 4.2.6 */
1739
1740void gsm_enc_Transformation_to_Log_Area_Ratios (
1741 word * r /* 0..7 IN/OUT */
1742)
1743/*
1744 * The following scaling for r[..] and LAR[..] has been used:
1745 *
1746 * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1.
1747 * LAR[..] = integer( real_LAR[..] * 16384 );
1748 * with -1.625 <= real_LAR <= 1.625
1749 */
1750{
1751 word temp;
1752 int i;
1753
1754
1755 /* Computation of the LAR[0..7] from the r[0..7]
1756 */
1757 _Pragma("loopbound min 8 max 8")
1758 for (i = 1; i <= 8; i++, r++) {
1759
1760 temp = *r;
1761 temp = GSM_ABS(temp);
1762
1763 if (temp < 22118) {
1764 temp >>= 1;
1765 } else if (temp < 31130) {
1766 temp -= 11059;
1767 } else {
1768 temp -= 26112;
1769 temp <<= 2;
1770 }
1771
1772 *r = *r < 0 ? -temp : temp;
1773 }
1774}
1775
1776/* 4.2.7 */
1777
1778void gsm_enc_Quantization_and_coding (
1779 word * LAR /* [0..7] IN/OUT */
1780)
1781{
1782 word temp;
1783 longword ltmp;
1784
1785
1786 /* This procedure needs four tables; the following equations
1787 * give the optimum scaling for the constants:
1788 *
1789 * A[0..7] = integer( real_A[0..7] * 1024 )
1790 * B[0..7] = integer( real_B[0..7] * 512 )
1791 * MAC[0..7] = maximum of the LARc[0..7]
1792 * MIC[0..7] = minimum of the LARc[0..7]
1793 */
1794
1795# undef STEP
1796# define STEP( A, B, MAC, MIC ) \
1797 temp = GSM_MULT( A, *LAR ); \
1798 temp = GSM_ADD( temp, B ); \
1799 temp = GSM_ADD( temp, 256 ); \
1800 temp = SASR( temp, 9 ); \
1801 *LAR = temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \
1802 LAR++;
1803
1804 STEP( 20480, 0, 31, -32 );
1805 STEP( 20480, 0, 31, -32 );
1806 STEP( 20480, 2048, 15, -16 );
1807 STEP( 20480, -2560, 15, -16 );
1808
1809 STEP( 13964, 94, 7, -8 );
1810 STEP( 15360, -1792, 7, -8 );
1811 STEP( 8534, -341, 3, -4 );
1812 STEP( 9036, -1144, 3, -4 );
1813
1814# undef STEP
1815}
1816
1817void gsm_enc_Gsm_LPC_Analysis (
1818 word * s, /* 0..159 signals IN/OUT */
1819 word * LARc) /* 0..7 LARc's OUT */
1820{
1821 longword L_ACF[9];
1822
1823 gsm_enc_Autocorrelation (s, L_ACF );
1824 gsm_enc_Reflection_coefficients (L_ACF, LARc );
1825 gsm_enc_Transformation_to_Log_Area_Ratios (LARc);
1826 gsm_enc_Quantization_and_coding (LARc);
1827}
1828
1829/* preprocess.c */
1830/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION
1831 *
1832 * After A-law to linear conversion (or directly from the
1833 * Ato D converter) the following scaling is assumed for
1834 * input to the RPE-LTP algorithm:
1835 *
1836 * in: 0.1.....................12
1837 * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.*
1838 *
1839 * Where S is the sign bit, v a valid bit, and * a "don't care" bit.
1840 * The original signal is called sop[..]
1841 *
1842 * out: 0.1................... 12
1843 * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0
1844 */
1845
1846
1847void gsm_enc_Gsm_Preprocess (
1848 struct gsm_state * S,
1849 word * s,
1850 word * so ) /* [0..159] IN/OUT */
1851{
1852
1853 word z1 = S->z1;
1854 longword L_z2 = S->L_z2;
1855 word mp = S->mp;
1856
1857 word s1;
1858 longword L_s2;
1859
1860 longword L_temp;
1861
1862 word msp, lsp;
1863 word SO;
1864
1865 longword ltmp; /* for ADD */
1866 ulongword utmp; /* for L_ADD */
1867
1868 int k = 160;
1869
1870 _Pragma("loopbound min 160 max 160")
1871 while (k--) {
1872
1873 /* 4.2.1 Downscaling of the input signal
1874 */
1875 SO = SASR( *s, 3 ) << 2;
1876 s++;
1877
1878 /* 4.2.2 Offset compensation
1879 *
1880 * This part implements a high-pass filter and requires extended
1881 * arithmetic precision for the recursive part of this filter.
1882 * The input of this procedure is the array so[0...159] and the
1883 * output the array sof[ 0...159 ].
1884 */
1885 /* Compute the non-recursive part
1886 */
1887
1888 s1 = SO - z1; /* s1 = gsm_enc_sub( *so, z1 ); */
1889 z1 = SO;
1890
1891 /* Compute the recursive part
1892 */
1893 L_s2 = s1;
1894 L_s2 <<= 15;
1895
1896 /* Execution of a 31 bv 16 bits multiplication
1897 */
1898
1899 msp = SASR( L_z2, 15 );
1900 lsp = L_z2-((longword)msp<<15); /* gsm_enc_L_sub(L_z2,(msp<<15)); */
1901
1902 L_s2 += GSM_MULT_R( lsp, 32735 );
1903 L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/
1904 L_z2 = GSM_L_ADD( L_temp, L_s2 );
1905
1906 /* Compute sof[k] with rounding
1907 */
1908 L_temp = GSM_L_ADD( L_z2, 16384 );
1909
1910 /* 4.2.3 Preemphasis
1911 */
1912
1913 msp = GSM_MULT_R( mp, -28180 );
1914 mp = SASR( L_temp, 15 );
1915 *so++ = GSM_ADD( mp, msp );
1916 }
1917
1918 S->z1 = z1;
1919 S->L_z2 = L_z2;
1920 S->mp = mp;
1921}
1922
1923/* gsm_enc_bench.c */
1924
1925word gsm_enc_norm (longword a )
1926/*
1927 * the number of left shifts needed to normalize the 32 bit
1928 * variable L_var1 for positive values on the interval
1929 *
1930 * with minimum of
1931 * minimum of 1073741824 (01000000000000000000000000000000) and
1932 * maximum of 2147483647 (01111111111111111111111111111111)
1933 *
1934 *
1935 * and for negative values on the interval with
1936 * minimum of -2147483648 (-10000000000000000000000000000000) and
1937 * maximum of -1073741824 ( -1000000000000000000000000000000).
1938 *
1939 * in order to normalize the result, the following
1940 * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 );
1941 *
1942 * (That's 'ffs', only from the left, not the right..)
1943 */
1944{
1945 if (a < 0) {
1946 if (a <= -1073741824) return 0;
1947 a = ~a;
1948 }
1949
1950 return a & 0xffff0000
1951 ? ( a & 0xff000000
1952 ? -1 + gsm_enc_bitoff[ 0xFF & (a >> 24) ]
1953 : 7 + gsm_enc_bitoff[ 0xFF & (a >> 16) ] )
1954 : ( a & 0xff00
1955 ? 15 + gsm_enc_bitoff[ 0xFF & (a >> 8) ]
1956 : 23 + gsm_enc_bitoff[ 0xFF & a ] );
1957}
1958
1959word gsm_enc_asl (word a, int n)
1960{
1961 if (n >= 16) return 0;
1962 if (n <= -16) return -(a < 0);
1963 if (n < 0) return gsm_enc_asr(a, -n);
1964 return a << n;
1965}
1966
1967word gsm_enc_asr (word a, int n)
1968{
1969 if (n >= 16) return -(a < 0);
1970 if (n <= -16) return 0;
1971 if (n < 0) return a << -n;
1972
1973# ifdef SASR
1974 return a >> n;
1975# else
1976 if (a >= 0) return a >> n;
1977 else return -(word)( -(uword)a >> n );
1978# endif
1979}
1980
1981/*
1982 * (From p. 46, end of section 4.2.5)
1983 *
1984 * NOTE: The following lines gives [sic] one correct implementation
1985 * of the div(num, denum) arithmetic operation. Compute div
1986 * which is the integer division of num by denum: with denum
1987 * >= num > 0
1988 */
1989
1990word gsm_enc_div ( word num, word denum)
1991{
1992 longword L_num = num;
1993 longword L_denum = denum;
1994 word div = 0;
1995 int k = 15;
1996
1997 /* The parameter num sometimes becomes zero.
1998 * Although this is explicitly guarded against in 4.2.5,
1999 * we assume that the result should then be zero as well.
2000 */
2001
2002 if (num == 0)
2003 return 0;
2004
2005 _Pragma("loopbound min 15 max 15")
2006 while (k--) {
2007 div <<= 1;
2008 L_num <<= 1;
2009
2010 if (L_num >= L_denum) {
2011 L_num -= L_denum;
2012 div++;
2013 }
2014 }
2015
2016 return div;
2017}
2018
2019
2020
2021gsm gsm_enc_create( void )
2022{
2023 unsigned int i;
2024 gsm r;
2025
2026 r = &gsm_enc_state;
2027
2028 _Pragma("loopbound min 648 max 648")
2029 for(i=0; i < sizeof(*r); i++)
2030 ((char *)r)[i]=0;
2031
2032 r->nrp = 40;
2033
2034 return r;
2035}
2036
2037void gsm_enc_init( void )
2038{
2039 gsm_enc_state_ptr = gsm_enc_create();
2040}
2041
2042int gsm_enc_return( void )
2043{
2044 return gsm_enc_result;
2045}
2046
2047void gsm_enc_main( void )
2048{
2049 gsm r;
2050 unsigned i;
2051 gsm_enc_result = 0;
2052
2053 r = gsm_enc_state_ptr;
2054
2055 _Pragma("loopbound min 20 max 20")
2056 for (i=0; i < SAMPLES; i++) {
2057 gsm_enc_encode(r, gsm_enc_pcmdata + i * 160, gsm_enc_gsmdata + i * sizeof(gsm_frame));
2058 }
2059}
2060
2061int main( int argc, char** argv )
2062{
2063 SET_UP
2064 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
2065 START_LOOP
2066 gsm_enc_init();
2067 gsm_enc_main();
2068 STOP_LOOP
2069 }
2070 WRITE_TO_FILE
2071 return ( gsm_enc_return() );
2072}
diff --git a/baseline/source/gsm_enc/private.h b/baseline/source/gsm_enc/private.h
new file mode 100644
index 0000000..48786b3
--- /dev/null
+++ b/baseline/source/gsm_enc/private.h
@@ -0,0 +1,56 @@
1#ifndef PRIVATE_H
2#define PRIVATE_H
3
4typedef short word; /* 16 bit signed int */
5typedef long longword; /* 32 bit signed int */
6
7typedef unsigned short uword; /* unsigned word */
8typedef unsigned long ulongword; /* unsigned longword */
9
10struct gsm_state {
11
12 word dp0[ 280 ];
13
14 word z1; /* preprocessing.c, Offset_com. */
15 longword L_z2; /* Offset_com. */
16 int mp; /* Preemphasis */
17
18 word u[8]; /* short_term_aly_filter.c */
19 word LARpp[2][8]; /* */
20 word j; /* */
21
22 word nrp; /* 40 */ /* long_term.c, synthesis */
23 word v[9]; /* short_term.c, synthesis */
24 word msr; /* decoder.c, Postprocessing */
25
26 char verbose; /* only used if !NDEBUG */
27 char fast; /* only used if FAST */
28
29};
30
31
32#define MIN_WORD ((-32767)-1)
33#define MAX_WORD ( 32767)
34
35#define MIN_LONGWORD ((-2147483647)-1)
36#define MAX_LONGWORD ( 2147483647)
37
38#define SASR(x, by) ((x) >> (by))
39
40/* Table 4.3a Decision level of the LTP gain quantizer
41 */
42/* bc 0 1 2 3 */
43word gsm_enc_DLB[4] = { 6554, 16384, 26214, 32767 };
44
45
46/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax
47 */
48/* i 0 1 2 3 4 5 6 7 */
49word gsm_enc_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 };
50
51
52/* Table 4.6 Normalized direct mantissa used to compute xM/xmax
53 */
54/* i 0 1 2 3 4 5 6 7 */
55word gsm_enc_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 };
56#endif /* PRIVATE_H */
diff --git a/baseline/source/h264_dec/changeLog.txt b/baseline/source/h264_dec/changeLog.txt
new file mode 100644
index 0000000..2d5d97f
--- /dev/null
+++ b/baseline/source/h264_dec/changeLog.txt
@@ -0,0 +1,41 @@
1File: h264dec_ldecode_macroblock.c
2Original provenience:
3
42015-12-21:
5- Filename changed to h264dec.c
6- global.h renamed to h264dec.h
7- Removed commented out includes
8- Removed all obsolete typedefs, enums and structs. Only remaining ones are
9 struct img_par and
10 enum SliceType
11- Renamed function decode_one_macroblock to h264dec_decode_one_macroblock
12- Function h264dec_decode_one_macroblock changed to void (i.e., removed statement return 0;)
13- Added functions h264dec_init, h264dec_return and main
14- Added forward declarations of all functions before the declarations of global
15 variables
16- Struct 'ImageParameters' renamed to 'h264dec_ImageParameters'
17- Re-ordered functions to fit template-order
18- Applied code formatting according to the following rules
19 (incomplete, to be discussed; I basically used astyle with the attached
20 options file):
21 - Lines shall not be wider than 80 characters; whenever possible, appropriate
22 line breaks shall be inserted to keep lines below 80 characters
23 - Indentation is done using whitespaces only, no tabs. Code is indented by
24 two whitespaces
25 - Two empty lines are put between any two functions
26 - In non-empty lists or index expressions, opening '(' and '[' are followed by
27 one whitespace, closing ')' and ']' are preceded by one whitespace
28 - In comma- or colon-separated argument lists, one whitespace is put after
29 each comma/colon
30 - Names of functions and global variables all start with a benchmark-specific
31 prefix (here: st_) followed by lowercase letter (e.g., st_square)
32 - For pointer types, one whitespace is put before the '*'
33 - Operators within expressions shall be preceded and followed by one
34 whitespace
35 - Code of then- and else-parts of if-then-else statements shall be put in
36 separate lines, not in the same lines as the if-condition or the keyword
37 "else"
38 - Opening braces '{' denoting the beginning of code for some if-else or loop
39 body shall be put at the end of the same line where the keywords "if",
40 "else", "for", "while" etc. occur
41- Added general TACLeBench header to beginning of source code \ No newline at end of file
diff --git a/baseline/source/h264_dec/copyright.txt b/baseline/source/h264_dec/copyright.txt
new file mode 100644
index 0000000..fe3eece
--- /dev/null
+++ b/baseline/source/h264_dec/copyright.txt
@@ -0,0 +1,32 @@
1/*
2***********************************************************************
3* COPYRIGHT AND WARRANTY INFORMATION
4*
5* Copyright 2001, International Telecommunications Union, Geneva
6*
7* DISCLAIMER OF WARRANTY
8*
9* These software programs are available to the user without any
10* license fee or royalty on an "as is" basis. The ITU disclaims
11* any and all warranties, whether express, implied, or
12* statutory, including any implied warranties of merchantability
13* or of fitness for a particular purpose. In no event shall the
14* contributor or the ITU be liable for any incidental, punitive, or
15* consequential damages of any kind whatsoever arising from the
16* use of these programs.
17*
18* This disclaimer of warranty extends to the user of these programs
19* and user's customers, employees, agents, transferees, successors,
20* and assigns.
21*
22* The ITU does not represent or warrant that the programs furnished
23* hereunder are free of infringement of any third-party patents.
24* Commercial implementations of ITU-T Recommendations, including
25* shareware, may be subject to royalty fees to patent holders.
26* Information regarding the ITU-T patent policy is available from
27* the ITU Web site at http://www.itu.int.
28*
29* THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE ITU-T PATENT POLICY.
30************************************************************************
31*/
32
diff --git a/baseline/source/h264_dec/h264_dec.c b/baseline/source/h264_dec/h264_dec.c
new file mode 100644
index 0000000..76af705
--- /dev/null
+++ b/baseline/source/h264_dec/h264_dec.c
@@ -0,0 +1,610 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: h264_dec_ldecode_macroblock.c
7
8 Author: Inge Lille-Langoy et al.
9
10 Function: H.264 decoder
11
12 Source: MediaBench II
13 http://euler.slu.edu/~fritts/mediabench (mirror)
14
15 Original name: h264_dec_ldecode_macroblock.c
16
17 Changes: no functional changes
18
19 License: see copyright.txt
20
21*/
22
23
24/*
25 Include section
26*/
27
28#include "../extra.h"
29#include "h264_dec.h"
30
31
32/*
33 Forward declaration of functions
34*/
35
36void h264_dec_init ();
37int h264_dec_return ();
38void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img );
39void h264_dec_main( void );
40//int main( void );
41
42
43/*
44 Declaration of global variables
45*/
46
47extern signed char h264_dec_mv_array[65][65][2];
48extern short h264_dec_list_imgUV[2][45][45];
49extern int h264_dec_img_m7[16][16];
50
51char h264_dec_img_mpr[7][7];
52char h264_dec_dec_picture_imgUV[2][64][54];
53struct h264_dec_img_par h264_dec_img;
54
55
56/*
57 Initialization- and return-value-related functions
58*/
59
60int h264_dec_return ()
61{
62 return ( h264_dec_img_mpr[0][0] + h264_dec_dec_picture_imgUV[0][0][0] + 128 !=
63 0 );
64}
65
66void h264_dec_init ()
67{
68 unsigned int i;
69 unsigned char *p;
70 volatile char bitmask = 0;
71
72 /*
73 Apply volatile XOR-bitmask to entire input array.
74 */
75 p = ( unsigned char * ) &h264_dec_mv_array[ 0 ];
76 _Pragma( "loopbound min 33800 max 33800" )
77 for ( i = 0; i < sizeof( h264_dec_mv_array ); ++i, ++p )
78 *p ^= bitmask;
79
80 p = ( unsigned char * ) &h264_dec_list_imgUV[ 0 ];
81 _Pragma( "loopbound min 16200 max 16200" )
82 for ( i = 0; i < sizeof( h264_dec_list_imgUV ); ++i, ++p )
83 *p ^= bitmask;
84
85 p = ( unsigned char * ) &h264_dec_img_m7[ 0 ];
86 _Pragma( "loopbound min 1024 max 1024" )
87 for ( i = 0; i < sizeof( h264_dec_img_m7 ); ++i, ++p )
88 *p ^= bitmask;
89
90 h264_dec_img.mb_cr_size_x = 8;
91 h264_dec_img.mb_cr_size_y = 8;
92 h264_dec_img.num_blk8x8_uv = 2;
93 h264_dec_img.pix_c_x = 256;
94 h264_dec_img.pix_c_y = 256;
95 h264_dec_img.width_cr = 352;
96 h264_dec_img.apply_weights = 0;
97 h264_dec_img.direct_spatial_mv_pred_flag = 1;
98 h264_dec_img.type = 1;
99 h264_dec_img.wp_round_chroma = 0;
100 h264_dec_img.chroma_log2_weight_denom = 0;
101}
102
103
104/*
105 Algorithm core functions
106*/
107
108void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img )
109{
110 int i = 0, j = 0, ii = 0, jj = 0, i1 = 0, j1 = 0, j4 = 0, i4 = 0;
111 int uv;
112 int ioff, joff;
113 int bw_pred = 0, fw_pred = 0, ifx;
114 int ii0, jj0, ii1, jj1, if1, jf1, if0, jf0;
115 int f1_x, f1_y, f2_x, f2_y, f3, f4;
116
117 short fw_refframe = -1, bw_refframe = -1;
118 int mv_mode, pred_dir, intra_prediction; // = currMB->ref_frame;
119 short fw_ref_idx = -1, bw_ref_idx = -1;
120
121 int mb_nr = 0;
122 short dec_picture_ref_idx = 0;
123
124 short active_sps_chroma_format_idc = 1;
125 short active_pps_weighted_pred_flag = 0;
126 short active_pps_weighted_bipred_idc = 0;
127
128 int smb = 0;
129 int max_y_cr = 287;
130
131 int jf;
132
133 int direct_pdir = -1;
134
135 int curr_mb_field = 0;
136
137 int b8, b4;
138
139 int residue_transform_flag = 0;
140
141 if ( 1 ) {
142 f1_x = 64 / img->mb_cr_size_x;
143 f2_x = f1_x - 1;
144
145 f1_y = 64 / img->mb_cr_size_y;
146 f2_y = f1_y - 1;
147
148 f3 = f1_x * f1_y;
149 f4 = f3 >> 1;
150
151 _Pragma( "loopbound min 2 max 2" )
152 for ( uv = 0; uv < 2; uv++ ) {
153 intra_prediction = 0;
154
155
156 _Pragma( "loopbound min 1 max 1" )
157 for ( b8 = 0; b8 < ( img->num_blk8x8_uv / 2 ); b8++ ) {
158 _Pragma( "loopbound min 4 max 4" )
159 for ( b4 = 0; b4 < 4; b4++ ) {
160 joff = 0;
161 j4 = img->pix_c_y + joff;
162 ioff = 0;
163 i4 = img->pix_c_x + ioff;
164
165 mv_mode = 1;
166 pred_dir = -1;
167
168 if ( !intra_prediction ) {
169 if ( pred_dir != 2 ) {
170
171 _Pragma( "loopbound min 4 max 4" )
172 for ( jj = 0; jj < 4; jj++ ) {
173 jf = ( ( j4 + jj ) / ( img->mb_cr_size_y / 4 ) ) % 64;
174 _Pragma( "loopbound min 4 max 4" )
175 for ( ii = 0; ii < 4; ii++ ) {
176 ifx = ( ( i4 + ii ) / ( img->mb_cr_size_x / 4 ) ) % 64;
177 i1 = ( i4 + ii ) * f1_x + h264_dec_mv_array[jf][ifx][0];
178
179 if ( !curr_mb_field )
180 j1 = ( j4 + jj ) * f1_y + h264_dec_mv_array[jf][ifx][1];
181 else {
182 if ( mb_nr % 2 == 0 ) {
183 j1 = ( ( img->pix_c_y / 2 ) + jj + joff ) * f1_y +
184 h264_dec_mv_array[jf][ifx][1];
185 } else {
186 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2
187 + jj + joff ) * f1_y +
188 h264_dec_mv_array[jf][ifx][1];
189 }
190 ++mb_nr;
191 }
192
193 if ( active_sps_chroma_format_idc == 1 )
194 j1 += 0;
195
196 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
197 img->width_cr - 1 : i1 / f1_x ) ) ?
198 ( ( i1 / f1_x > img->width_cr - 1 ) ?
199 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
200 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
201 max_y_cr : j1 / f1_y ) ) ?
202 ( ( j1 / f1_y > max_y_cr ) ?
203 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
204 ii1 = ( ( ( 0 < (
205 ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
206 ? img->width_cr - 1 : ( i1 + f2_x ) / f1_x ) )
207 ? ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
208 ? img->width_cr - 1 :
209 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
210 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr )
211 ? max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
212 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
213 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 ) ) % 45;
214
215 if1 = ( i1 & f2_x );
216 jf1 = ( j1 & f2_y );
217 if0 = f1_x - if1;
218 jf0 = f1_y - jf1;
219
220 if ( img->apply_weights ) {
221 } else {
222 h264_dec_img_mpr[ii + ioff][jj + joff]
223 = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0]
224 + if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1]
225 + if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0]
226 + if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1]
227 + f4 ) / f3;
228 }
229 }
230 }
231 } else {
232
233 _Pragma( "loopbound min 4 max 4" )
234 for ( jj = 0; jj < 4; jj++ ) {
235 jf = ( j4 + jj ) / ( img->mb_cr_size_y / 4 );
236 _Pragma( "loopbound min 4 max 4" )
237 for ( ii = 0; ii < 4; ii++ ) {
238 ifx = ( i4 + ii ) / ( img->mb_cr_size_x / 4 );
239 direct_pdir = 2;
240
241 if ( mv_mode == 0 && img->direct_spatial_mv_pred_flag ) {
242 if ( dec_picture_ref_idx != -1 ) {
243 fw_refframe = 0;
244 fw_ref_idx = fw_refframe;
245 }
246 if ( dec_picture_ref_idx != -1 ) {
247 bw_refframe = 0;
248 bw_ref_idx = bw_refframe;
249 }
250
251 if ( dec_picture_ref_idx == -1 ) direct_pdir = 0;
252 else
253 if ( dec_picture_ref_idx == -1 ) direct_pdir = 1;
254
255 if ( direct_pdir == 0 || direct_pdir == 2 ) {
256 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
257 h264_dec_mv_array[jf][ifx][0];
258
259 if ( !curr_mb_field ) {
260 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
261 h264_dec_mv_array[jf][ifx][1];
262 } else {
263 if ( mb_nr % 2 == 0 ) {
264 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) *
265 f1_y + h264_dec_mv_array[jf][ifx][1];
266 } else {
267 j1 = ( ( img->pix_c_y - img->mb_cr_size_y )
268 / 2 + jj + joff ) * f1_y
269 + h264_dec_mv_array[jf][ifx][1];
270 }
271 }
272
273 if ( active_sps_chroma_format_idc == 1 )
274 j1 += 0;
275
276 ii0 = ( (
277 ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
278 img->width_cr - 1 : i1 / f1_x ) ) ?
279 ( ( i1 / f1_x > img->width_cr - 1 ) ?
280 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
281 jj0 = ( (
282 ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
283 max_y_cr : j1 / f1_y ) ) ? ( (
284 j1 / f1_y > max_y_cr ) ?
285 max_y_cr : j1 / f1_y ) : 0 )
286 ) % 45;
287 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
288 f1_x > img->width_cr - 1 ) ?
289 img->width_cr - 1 :
290 ( i1 + f2_x ) / f1_x ) ) ?
291 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
292 ? img->width_cr - 1 :
293 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
294 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
295 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
296 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
297 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 )
298 ) % 45;
299
300
301 if1 = ( i1 & f2_x );
302 jf1 = ( j1 & f2_y );
303 if0 = f1_x - if1;
304 jf0 = f1_y - jf1;
305
306 fw_pred = ( if0 * jf0 *
307 h264_dec_list_imgUV[uv][jj0][ii0] +
308 if1 * jf0 *
309 h264_dec_list_imgUV[uv][jj0][ii1] +
310 if0 * jf1 *
311 h264_dec_list_imgUV[uv][jj1][ii0] +
312 if1 * jf1 *
313 h264_dec_list_imgUV[uv][jj1][ii1] +
314 f4 ) / f3;
315 }
316 if ( direct_pdir == 1 || direct_pdir == 2 ) {
317 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
318 h264_dec_mv_array[jf][ifx][0];
319
320 if ( !curr_mb_field ) {
321 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
322 h264_dec_mv_array[jf][ifx][1];
323 } else {
324 if ( mb_nr % 2 == 0 ) {
325 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y
326 + h264_dec_mv_array[jf][ifx][1];
327 } else {
328 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2
329 + jj + joff ) * f1_y
330 + h264_dec_mv_array[jf][ifx][1];
331 }
332 }
333 if ( active_sps_chroma_format_idc == 1 )
334 j1 += 0;
335
336 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
337 img->width_cr - 1 : i1 / f1_x ) ) ?
338 ( ( i1 / f1_x > img->width_cr - 1 ) ?
339 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
340 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
341 max_y_cr : j1 / f1_y ) ) ?
342 ( ( j1 / f1_y > max_y_cr ) ?
343 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
344 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
345 f1_x > img->width_cr - 1 ) ?
346 img->width_cr - 1 :
347 ( i1 + f2_x ) / f1_x ) ) ?
348 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 )
349 ? img->width_cr - 1 :
350 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
351 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
352 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
353 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
354 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 ) )
355 % 45;
356
357 if1 = ( i1 & f2_x );
358 jf1 = ( j1 & f2_y );
359 if0 = f1_x - if1;
360 jf0 = f1_y - jf1;
361
362 bw_pred = ( if0 * jf0 *
363 h264_dec_list_imgUV[uv][jj0][ii0] +
364 if1 * jf0 *
365 h264_dec_list_imgUV[uv][jj0][ii1] +
366 if0 * jf1 *
367 h264_dec_list_imgUV[uv][jj1][ii0] +
368 if1 * jf1 *
369 h264_dec_list_imgUV[uv][jj1][ii1] +
370 f4 ) / f3;
371 }
372
373 } else {
374 fw_refframe = 0;
375 bw_refframe = 0;
376
377 fw_ref_idx = fw_refframe;
378 bw_ref_idx = bw_refframe;
379
380 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
381 h264_dec_mv_array[jf][ifx][0];
382
383 if ( !curr_mb_field ) {
384 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
385 h264_dec_mv_array[jf][ifx][1];
386 } else {
387 if ( mb_nr % 2 == 0 ) {
388 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y +
389 h264_dec_mv_array[jf][ifx][1];
390 } else {
391 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2
392 + jj + joff ) * f1_y
393 + h264_dec_mv_array[jf][ifx][1];
394 }
395 }
396
397 if ( active_sps_chroma_format_idc == 1 )
398 j1 += 0;
399
400 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
401 img->width_cr - 1 : i1 / f1_x ) ) ?
402 ( ( i1 / f1_x > img->width_cr - 1 ) ?
403 img->width_cr - 1 : i1 / f1_x ) : 0 ) )
404 % 45;
405 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
406 max_y_cr : j1 / f1_y ) ) ?
407 ( ( j1 / f1_y > max_y_cr ) ?
408 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
409 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
410 f1_x > img->width_cr - 1 ) ?
411 img->width_cr - 1 :
412 ( i1 + f2_x ) / f1_x ) ) ?
413 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 ) ?
414 img->width_cr - 1 :
415 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
416 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
417 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
418 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
419 max_y_cr :
420 ( j1 + f2_y ) / f1_y ) : 0 ) ) % 45;
421
422 if1 = ( i1 & f2_x );
423 jf1 = ( j1 & f2_y );
424 if0 = f1_x - if1;
425 jf0 = f1_y - jf1;
426
427 fw_pred = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0] +
428 if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1] +
429 if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0] +
430 if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1] +
431 f4 ) / f3;
432
433 i1 = ( img->pix_c_x + ii + ioff ) * f1_x +
434 h264_dec_mv_array[jf][ifx][0];
435
436 if ( !curr_mb_field ) {
437 j1 = ( img->pix_c_y + jj + joff ) * f1_y +
438 h264_dec_mv_array[jf][ifx][1];
439 } else {
440 if ( mb_nr % 2 == 0 ) {
441 j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y
442 + h264_dec_mv_array[jf][ifx][1];
443 } else {
444 j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2 + jj
445 + joff ) * f1_y
446 + h264_dec_mv_array[jf][ifx][1];
447 }
448 }
449
450 if ( active_sps_chroma_format_idc == 1 )
451 j1 += 0;
452
453 ii0 = ( ( ( 0 < ( ( i1 / f1_x > img->width_cr - 1 ) ?
454 img->width_cr - 1 : i1 / f1_x ) ) ?
455 ( ( i1 / f1_x > img->width_cr - 1 ) ?
456 img->width_cr - 1 : i1 / f1_x ) : 0 ) ) % 45;
457 jj0 = ( ( ( 0 < ( ( j1 / f1_y > max_y_cr ) ?
458 max_y_cr : j1 / f1_y ) ) ?
459 ( ( j1 / f1_y > max_y_cr ) ?
460 max_y_cr : j1 / f1_y ) : 0 ) ) % 45;
461 ii1 = ( ( ( 0 < ( ( ( i1 + f2_x ) /
462 f1_x > img->width_cr - 1 ) ?
463 img->width_cr - 1 :
464 ( i1 + f2_x ) / f1_x ) ) ?
465 ( ( ( i1 + f2_x ) / f1_x > img->width_cr - 1 ) ?
466 img->width_cr - 1 :
467 ( i1 + f2_x ) / f1_x ) : 0 ) ) % 45;
468 jj1 = ( ( ( 0 < ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
469 max_y_cr : ( j1 + f2_y ) / f1_y ) ) ?
470 ( ( ( j1 + f2_y ) / f1_y > max_y_cr ) ?
471 max_y_cr : ( j1 + f2_y ) / f1_y ) : 0 ) ) % 45;
472
473 if1 = ( i1 & f2_x );
474 jf1 = ( j1 & f2_y );
475 if0 = f1_x - if1;
476 jf0 = f1_y - jf1;
477
478 bw_pred = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0] +
479 if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1] +
480 if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0] +
481 if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1] +
482 f4 ) / f3;
483 }
484
485 if ( img->apply_weights ) {
486 if ( ( ( active_pps_weighted_pred_flag &&
487 ( img->type == P_SLICE || img->type == SP_SLICE ) )
488 || ( active_pps_weighted_bipred_idc == 1 &&
489 ( img->type == B_SLICE ) ) )
490 && curr_mb_field ) {
491 fw_ref_idx >>= 1;
492 bw_ref_idx >>= 1;
493 }
494
495 if ( img->direct_spatial_mv_pred_flag
496 && direct_pdir == 1 ) {
497 img->mpr[ii + ioff][jj + joff] =
498 ( ( ( img->wp_round_chroma ) >>
499 img->chroma_log2_weight_denom ) < 0 ? 0 :
500 ( ( img->wp_round_chroma ) >>
501 img->chroma_log2_weight_denom ) ) + 0;
502 } else
503 if ( img->direct_spatial_mv_pred_flag
504 && direct_pdir == 0 ) {
505 img->mpr[ii + ioff][jj + joff] =
506 ( ( ( ( img->wp_round_chroma ) >>
507 img->chroma_log2_weight_denom ) ) < 0 ?
508 0 :
509 ( ( ( img->wp_round_chroma ) >>
510 img->chroma_log2_weight_denom ) ) ) ;
511 } else {
512
513 int alpha_fw = 0;
514 int alpha_bw = 0;
515
516 img->mpr[ii + ioff][jj + joff] =
517 ( ( ( alpha_fw * fw_pred + alpha_bw *
518 bw_pred +
519 ( 1 << img->chroma_log2_weight_denom ) ) >> (
520 img->chroma_log2_weight_denom + 1 ) ) < 0 ?
521 0 : ( ( alpha_fw * fw_pred + alpha_bw *
522 bw_pred +
523 ( 1 << img->chroma_log2_weight_denom ) ) >>
524 ( img->chroma_log2_weight_denom + 1 ) ) );
525 }
526 } else {
527 if ( img->direct_spatial_mv_pred_flag
528 && direct_pdir == 1 )
529 img->mpr[ii + ioff][jj + joff] = bw_pred;
530 else
531 if ( img->direct_spatial_mv_pred_flag
532 && direct_pdir == 0 )
533 img->mpr[ii + ioff][jj + joff] = fw_pred;
534 else {
535 img->mpr[ii + ioff][jj + joff] = ( fw_pred + bw_pred
536 +
537 1 ) / 2;
538 }
539 }
540 }
541 }
542 }
543 }
544
545 if ( !smb ) {
546 _Pragma( "loopbound min 4 max 4" )
547 for ( ii = 0; ii < 4; ii++ ) {
548 jj = 0;
549 _Pragma( "loopbound min 4 max 4" )
550 for ( ; jj < 4; jj++ ) {
551 if ( !residue_transform_flag ) {
552 h264_dec_dec_picture_imgUV[uv][( j4 + jj ) % 64]
553 [( i4 + ii ) % 54]
554 = h264_dec_img_m7[ii][jj];
555 }
556 }
557 }
558 }
559 }
560 }
561
562 if ( smb ) {
563 _Pragma( "loopbound min 2 max 2" )
564 for ( j = 4; j < 6; j++ ) {
565 joff = ( j - 4 ) * 4;
566 j4 = img->pix_c_y + joff;
567 _Pragma( "loopbound min 2 max 2" )
568 for ( i = 0; i < 2; i++ ) {
569 ioff = i * 4;
570 i4 = img->pix_c_x + ioff;
571
572 _Pragma( "loopbound min 4 max 4" )
573 for ( ii = 0; ii < 4; ii++ )
574 _Pragma( "loopbound min 4 max 4" )
575 for ( jj = 0; jj < 4; jj++ ) {
576 h264_dec_dec_picture_imgUV[uv][( j4 + jj ) % 64]
577 [( i4 + ii ) % 54]
578 = h264_dec_img_m7[ii][jj];
579 }
580 }
581 }
582 }
583 }
584 }
585}
586
587
588/*
589 Main functions
590*/
591
592void _Pragma( "entrypoint" ) h264_dec_main( void )
593{
594 h264_dec_decode_one_macroblock( &h264_dec_img );
595}
596
597
598int main( int argc, char** argv )
599{
600 SET_UP
601 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
602 START_LOOP
603 h264_dec_init();
604 h264_dec_main();
605 STOP_LOOP
606 }
607 WRITE_TO_FILE
608
609 return ( h264_dec_return() );
610}
diff --git a/baseline/source/h264_dec/h264_dec.h b/baseline/source/h264_dec/h264_dec.h
new file mode 100644
index 0000000..ad33a25
--- /dev/null
+++ b/baseline/source/h264_dec/h264_dec.h
@@ -0,0 +1,29 @@
1#ifndef __H264DEC_H
2#define __H264DEC_H
3
4typedef enum {
5 P_SLICE = 0,
6 B_SLICE,
7 I_SLICE,
8 SP_SLICE,
9 SI_SLICE
10} h264_dec_SliceType;
11
12// image parameters
13typedef struct h264_dec_img_par {
14 int direct_spatial_mv_pred_flag;
15 int type;
16 int width_cr;
17 int pix_c_y;
18 int pix_c_x;
19 unsigned short mpr[16][16];
20 unsigned int chroma_log2_weight_denom;
21 int wp_round_chroma;
22 unsigned int apply_weights;
23 int num_blk8x8_uv;
24 int mb_cr_size_x;
25 int mb_cr_size_y;
26
27} h264_dec_ImageParameters;
28
29#endif
diff --git a/baseline/source/h264_dec/h264_decinput.c b/baseline/source/h264_dec/h264_decinput.c
new file mode 100644
index 0000000..5055179
--- /dev/null
+++ b/baseline/source/h264_dec/h264_decinput.c
@@ -0,0 +1,801 @@
1signed char h264_dec_mv_array[65][65][2] = {
2 { {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},
3 {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},
4 {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},
5 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
6 },
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},
8 {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},
9 {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},
10 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
11 },
12 { {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},
13 {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},
14 {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},
15 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
16 },
17 { {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},
18 {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},
19 {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},
20 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
21 },
22 { {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},
23 {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},
24 {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},
25 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
26 },
27 { {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},
28 {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},
29 {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},
30 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
31 },
32 { {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},
33 {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},
34 {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},
35 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
36 },
37 { {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},
38 {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},
39 {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},
40 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
41 },
42 { {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},
43 {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},
44 {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},
45 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
46 },
47 { {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},
48 {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},
49 {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},
50 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
51 },
52 { {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},
53 {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},
54 {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},
55 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
56 },
57 { {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},
58 {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},
59 {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},
60 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
61 },
62 { {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},
63 {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},
64 {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},
65 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
66 },
67 { {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},
68 {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},
69 {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},
70 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
71 },
72 { {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},
73 {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},
74 {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},
75 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
76 },
77 { {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},
78 {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},
79 {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},
80 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
81 },
82 { {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},
83 {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},
84 {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},
85 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
86 },
87 { {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},
88 {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},
89 {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},
90 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
91 },
92 { {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},
93 {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},
94 {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},
95 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
96 },
97 { {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},
98 {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},
99 {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},
100 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
101 },
102 { {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},
103 {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},
104 {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},
105 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
106 },
107 { {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},
108 {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},
109 {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},
110 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
111 },
112 { {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},
113 {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},
114 {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},
115 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
116 },
117 { {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},
118 {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},
119 {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},
120 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
121 },
122 { {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},
123 {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},
124 {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},
125 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
126 },
127 { {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},
128 {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},
129 {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},
130 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
131 },
132 { {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},
133 {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},
134 {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},
135 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
136 },
137 { {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},
138 {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},
139 {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},
140 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
141 },
142 { {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},
143 {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},
144 {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},
145 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
146 },
147 { {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},
148 {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},
149 {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},
150 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
151 },
152 { {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},
153 {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},
154 {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},
155 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
156 },
157 { {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},
158 {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},
159 {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},
160 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
161 },
162 { {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},
163 {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},
164 {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},
165 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
166 },
167 { {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},
168 {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},
169 {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},
170 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
171 },
172 { {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},
173 {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},
174 {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},
175 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
176 },
177 { {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},
178 {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},
179 {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},
180 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
181 },
182 { {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},
183 {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},
184 {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},
185 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
186 },
187 { {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},
188 {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},
189 {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},
190 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
191 },
192 { {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},
193 {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},
194 {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},
195 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
196 },
197 { {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},
198 {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},
199 {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},
200 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
201 },
202 { {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},
203 {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},
204 {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},
205 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
206 },
207 { {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},
208 {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},
209 {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},
210 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
211 },
212 { {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},
213 {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},
214 {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},
215 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
216 },
217 { {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},
218 {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},
219 {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},
220 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
221 },
222 { {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},
223 {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},
224 {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},
225 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
226 },
227 { {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},
228 {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},
229 {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},
230 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
231 },
232 { {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},
233 {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},
234 {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},
235 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
236 },
237 { {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},
238 {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},
239 {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},
240 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
241 },
242 { {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},
243 {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},
244 {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},
245 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
246 },
247 { {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},
248 {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},
249 {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},
250 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
251 },
252 { {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},
253 {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},
254 {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},
255 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
256 },
257 { {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},
258 {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},
259 {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},
260 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
261 },
262 { {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},
263 {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},
264 {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},
265 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
266 },
267 { {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},
268 {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},
269 {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},
270 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
271 },
272 { {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},
273 {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},
274 {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},
275 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
276 },
277 { {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},
278 {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},
279 {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},
280 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
281 },
282 { {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},
283 {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},
284 {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},
285 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
286 },
287 { {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},
288 {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},
289 {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},
290 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
291 },
292 { {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},
293 {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},
294 {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},
295 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
296 },
297 { {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},
298 {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},
299 {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},
300 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
301 },
302 { {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},
303 {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},
304 {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},
305 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
306 },
307 { {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},
308 {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},
309 {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},
310 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
311 },
312 { {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},
313 {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},
314 {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},
315 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
316 },
317 { {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},
318 {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},
319 {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},
320 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
321 },
322 { {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},
323 {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},
324 {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},
325 {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}
326 }
327};
328
329short h264_dec_list_imgUV[2][45][45] = {{
330 {
331 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124,
332 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
333 124, 125, 126, 126, 126, 126, 126, 126, 126, 125, 123, 122, 122, 122, 122
334 },
335 {
336 122, 122, 122, 122, 122, 122, 123, 123, 124, 124, 124, 124, 124, 124, 124,
337 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 122,
338 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 120, 121, 121
339 },
340 {
341 121, 121, 121, 121, 121, 121, 120, 120, 120, 122, 122, 124, 124, 124, 123,
342 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
343 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
344 },
345 {
346 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
347 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
348 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121
349 },
350 {
351 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
352 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
353 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121
354 },
355 {
356 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
357 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
358 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125, 125, 125, 125
359 },
360 {
361 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128, 128, 128, 127,
362 130, 135, 137, 139, 140, 140, 140, 140, 140, 140, 141, 142, 143, 143, 143,
363 143, 143, 143, 143, 142, 142, 142, 141, 141, 140, 140, 139, 138, 137, 137
364 },
365 {
366 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135, 135, 135, 135,
367 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134,
368 134, 134, 134, 134, 134, 134, 134, 123, 123, 123, 123, 123, 123, 123, 123
369 },
370 {
371 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
372 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
373 124, 124, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123
374 },
375 {
376 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
377 124, 124, 124, 124, 123, 122, 122, 121, 121, 120, 120, 120, 119, 119, 119,
378 119, 119, 119, 119, 120, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120
379 },
380 {
381 120, 122, 122, 124, 124, 124, 123, 122, 122, 122, 122, 122, 122, 122, 121,
382 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
383 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
384 },
385 {
386 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
387 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
388 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
389 },
390 {
391 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
392 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122,
393 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121
394 },
395 {
396 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122,
397 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
398 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 127
399 },
400 {
401 127, 127, 128, 128, 128, 128, 127, 130, 135, 137, 139, 140, 140, 140, 140,
402 140, 140, 141, 142, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141,
403 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135, 135, 134, 133, 133
404 },
405 {
406 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134,
407 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 123,
408 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
409 },
410 {
411 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
412 124, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
413 122, 122, 122, 122, 122, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
414 },
415 {
416 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 122, 121,
417 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 120, 121, 121, 121,
418 121, 121, 121, 121, 121, 120, 120, 120, 122, 122, 124, 124, 124, 123, 122
419 },
420 {
421 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121,
422 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
423 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122
424 },
425 {
426 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
427 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
428 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
429 },
430 {
431 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
432 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121,
433 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122
434 },
435 {
436 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123,
437 123, 123, 123, 123, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
438 125, 126, 126, 127, 127, 127, 128, 128, 128, 128, 127, 130, 135, 137, 139
439 },
440 {
441 140, 140, 140, 140, 140, 140, 141, 142, 143, 143, 143, 143, 143, 143, 143,
442 142, 142, 142, 141, 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135,
443 135, 134, 133, 133, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135
444 },
445 {
446 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
447 134, 134, 134, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125,
448 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124
449 },
450 {
451 124, 124, 124, 124, 123, 123, 122, 122, 122, 122, 122, 122, 122, 123, 123,
452 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
453 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
454 },
455 {
456 123, 122, 122, 121, 121, 120, 120, 120, 119, 118, 118, 118, 118, 118, 118,
457 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 121, 121, 123,
458 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121
459 },
460 {
461 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
462 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122,
463 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123
464 },
465 {
466 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122,
467 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
468 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
469 },
470 {
471 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
472 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
473 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122
474 },
475 {
476 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125,
477 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128,
478 128, 128, 128, 130, 134, 136, 138, 139, 139, 139, 139, 139, 139, 140, 142
479 },
480 {
481 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 141, 141, 140, 140, 139,
482 138, 137, 137, 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135,
483 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134
484 },
485 {
486 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 124, 124, 124, 124, 124,
487 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
488 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 122, 122, 122
489 },
490 {
491 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
492 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124,
493 124, 124, 124, 124, 124, 124, 124, 123, 122, 122, 121, 121, 120, 120, 119
494 },
495 {
496 118, 118, 118, 118, 118, 118, 118, 118, 119, 120, 120, 120, 120, 120, 120,
497 120, 119, 119, 119, 121, 121, 123, 123, 123, 122, 122, 122, 122, 122, 122,
498 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
499 },
500 {
501 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
502 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
503 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123
504 },
505 {
506 123, 123, 123, 123, 123, 123, 122, 121, 121, 121, 121, 121, 121, 121, 121,
507 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
508 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
509 },
510 {
511 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 125, 124, 123,
512 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
513 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122
514 },
515 {
516 122, 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125, 125, 125,
517 125, 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128, 128, 129,
518 128, 131, 134, 136, 138, 139, 139, 139, 139, 139, 139, 140, 142, 143, 143
519 },
520 {
521 142, 141, 140, 140, 141, 142, 142, 142, 141, 141, 140, 140, 139, 138, 137,
522 137, 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135, 135, 135,
523 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134
524 },
525 {
526 134, 134, 134, 134, 134, 134, 134, 134, 125, 125, 125, 125, 125, 125, 125,
527 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
528 126, 126, 125, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123
529 },
530 {
531 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123,
532 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 124, 124, 124,
533 124, 124, 124, 124, 124, 123, 122, 122, 121, 121, 120, 120, 119, 118, 117
534 },
535 {
536 117, 117, 117, 117, 117, 118, 119, 119, 119, 119, 119, 119, 119, 119, 118,
537 118, 118, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
538 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
539 },
540 {
541 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
542 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
543 122, 122, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124
544 },
545 {
546 124, 124, 124, 123, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
547 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
548 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122
549 },
550 {
551 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
552 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122,
553 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123
554 }
555 },
556 { {
557 123, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126,
558 127, 127, 127, 128, 128, 128, 129, 129, 131, 133, 135, 137, 138, 138, 138,
559 138, 138, 138, 139, 142, 143, 143, 142, 140, 139, 139, 140, 141, 142, 142
560 },
561 {
562 141, 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135, 135, 134, 133,
563 133, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134,
564 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134
565 },
566 {
567 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126,
568 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 124, 124, 124, 124, 124,
569 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124
570 },
571 {
572 124, 124, 124, 124, 124, 124, 123, 123, 122, 122, 122, 122, 122, 122, 122,
573 122, 122, 122, 123, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 122,
574 121, 121, 120, 120, 119, 118, 117, 117, 117, 117, 117, 117, 118, 119, 119
575 },
576 {
577 119, 119, 119, 119, 119, 119, 118, 118, 118, 120, 120, 122, 122, 122, 122,
578 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121,
579 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
580 },
581 {
582 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
583 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 124, 124, 124, 124, 124,
584 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 122, 121, 121, 121
585 },
586 {
587 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
588 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
589 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121
590 },
591 {
592 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
593 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
594 122, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 125, 125, 125, 125
595 },
596 {
597 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129,
598 131, 133, 135, 137, 138, 138, 138, 138, 138, 138, 139, 142, 143, 143, 142,
599 140, 139, 139, 140, 141, 142, 142, 141, 141, 140, 140, 139, 138, 137, 137
600 },
601 {
602 136, 136, 135, 135, 135, 134, 133, 133, 134, 134, 135, 135, 135, 135, 135,
603 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134,
604 134, 134, 134, 134, 134, 134, 134, 125, 125, 125, 125, 125, 125, 125, 125
605 },
606 {
607 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
608 126, 125, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123,
609 123, 123, 124, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123
610 },
611 {
612 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124,
613 124, 124, 124, 124, 122, 121, 121, 120, 120, 119, 119, 118, 117, 116, 116,
614 117, 117, 117, 117, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119
615 },
616 {
617 119, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121,
618 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122,
619 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
620 },
621 {
622 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
623 122, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
624 124, 124, 124, 123, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121
625 },
626 {
627 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
628 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122,
629 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121
630 },
631 {
632 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122,
633 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
634 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127
635 },
636 {
637 127, 127, 128, 128, 128, 129, 129, 131, 132, 134, 137, 138, 138, 138, 138,
638 138, 138, 139, 142, 142, 142, 141, 140, 139, 139, 140, 141, 141, 141, 141,
639 141, 140, 140, 139, 138, 137, 137, 136, 136, 135, 135, 135, 134, 133, 133
640 },
641 {
642 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 133,
643 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 125,
644 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125
645 },
646 {
647 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 123, 121, 121,
648 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122,
649 122, 122, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124
650 },
651 {
652 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 121, 119, 119, 118,
653 118, 117, 117, 116, 116, 115, 115, 116, 116, 117, 117, 118, 119, 119, 120,
654 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122
655 },
656 {
657 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 122, 122, 122, 123, 123,
658 123, 123, 123, 123, 123, 123, 123, 122, 121, 121, 121, 121, 121, 121, 121,
659 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
660 },
661 {
662 121, 121, 121, 121, 122, 122, 123, 123, 124, 125, 125, 125, 125, 125, 125,
663 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 123, 123, 122, 122,
664 121, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
665 },
666 {
667 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121,
668 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
669 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121
670 },
671 {
672 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 123,
673 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125,
674 125, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 130
675 },
676 {
677 131, 133, 136, 137, 137, 138, 138, 139, 139, 140, 141, 141, 141, 140, 140,
678 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 139, 138, 137, 137, 136,
679 136, 135, 135, 135, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135
680 },
681 {
682 135, 135, 135, 135, 134, 133, 132, 132, 133, 133, 134, 134, 134, 134, 134,
683 134, 134, 134, 134, 134, 134, 125, 125, 125, 125, 125, 125, 125, 125, 125,
684 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125
685 },
686 {
687 125, 125, 125, 123, 122, 120, 120, 121, 122, 123, 123, 123, 123, 123, 123,
688 123, 122, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 124,
689 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124
690 },
691 {
692 124, 124, 123, 120, 118, 118, 117, 117, 116, 116, 115, 115, 114, 114, 115,
693 116, 117, 117, 118, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120,
694 120, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121
695 },
696 {
697 121, 121, 122, 122, 122, 123, 124, 124, 124, 124, 123, 123, 123, 123, 122,
698 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
699 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 123, 123
700 },
701 {
702 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
703 125, 125, 124, 123, 123, 122, 122, 121, 120, 120, 121, 121, 121, 121, 121,
704 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122
705 },
706 {
707 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122,
708 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121,
709 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122
710 },
711 {
712 122, 122, 122, 122, 122, 122, 123, 124, 124, 124, 124, 124, 124, 124, 124,
713 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 127, 127, 127, 128, 128,
714 128, 128, 128, 128, 129, 129, 130, 130, 132, 135, 136, 137, 138, 138, 139
715 },
716 {
717 139, 139, 140, 140, 140, 139, 139, 138, 138, 138, 139, 139, 139, 139, 139,
718 139, 139, 139, 138, 137, 136, 136, 135, 135, 134, 134, 134, 134, 134, 134,
719 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 133, 132, 131, 131
720 },
721 {
722 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 125, 125,
723 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
724 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 122, 120, 120, 121
725 },
726 {
727 122, 123, 123, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121,
728 121, 122, 122, 122, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124,
729 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 120, 118, 117, 117, 116
730 },
731 {
732 116, 115, 115, 114, 114, 114, 115, 116, 117, 117, 118, 119, 120, 120, 120,
733 120, 121, 121, 121, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122,
734 122, 122, 122, 122, 122, 121, 121, 121, 121, 122, 122, 122, 123, 124, 124
735 },
736 {
737 124, 124, 123, 123, 123, 123, 122, 121, 121, 121, 121, 121, 121, 121, 121,
738 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
739 121, 121, 121, 122, 122, 123, 123, 124, 125, 125, 125, 125, 125, 125, 125
740 },
741 {
742 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 123, 123, 122, 122, 121,
743 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
744 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121
745 },
746 {
747 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
748 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
749 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 123, 124
750 },
751 {
752 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
753 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 130, 130,
754 132, 135, 136, 136, 137, 138, 139, 139, 139, 140, 140, 140, 139, 139, 138
755 },
756 {
757 138, 138, 139, 139, 139, 139, 139, 139, 139, 138, 137, 136, 135, 135, 134,
758 134, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133,
759 133, 133, 133, 133, 132, 131, 131, 132, 132, 133, 132, 132, 133, 133, 133
760 },
761 {
762 133, 133, 133, 133, 133, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
763 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
764 124, 124, 123, 121, 120, 120, 121, 122, 122, 122, 122, 122, 122, 122, 122
765 },
766 {
767 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 124, 124,
768 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123,
769 123, 122, 118, 116, 116, 115, 115, 114, 114, 114, 114, 114, 115, 116, 117
770 },
771 {
772 117, 117, 118, 120, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120,
773 121, 121, 121, 122, 122, 121, 121, 121, 122, 122, 122, 122, 121, 121, 121,
774 121, 122, 122, 122, 123, 124, 124, 124, 124, 123, 123, 123, 123, 122, 121
775 },
776 {
777 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122,
778 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 124, 124, 124,
779 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125
780 }
781 }
782};
783
784int h264_dec_img_m7[16][16] = {
785 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
786 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
787 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
788 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
789 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
790 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
791 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
792 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
793 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
794 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
795 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
796 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
797 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
798 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
799 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
800 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
801};
diff --git a/baseline/source/huff_dec/ChangeLog.txt b/baseline/source/huff_dec/ChangeLog.txt
new file mode 100644
index 0000000..865c263
--- /dev/null
+++ b/baseline/source/huff_dec/ChangeLog.txt
@@ -0,0 +1,20 @@
1File: huff_dec.c
2Original provenience: David Bourgin (David.Bourgin@ufrima.imag.fr)
3
42016-03-23:
5- Replaced dynamic memory allocation by a fixed array with 514 entries
6- Replaced memset() with loops
7- Replaced file I/O by reading and writing to char arrays
8- Added huff_dec_main(), huff_dec_init() and huff_dec_return()
9- Added huff_dec_ prefix to all functions, types and global variables
10- Changed function arguments to ANSI style
11- Replaced macro definitions
12- Added generic TACLeBench header replacing previous header
13- Included license from compress.txt
14- Corrected loop bounds in huff_dec_read_header()
15
162016-05-24:
17- static removed and huff_dec prefix added
18
192016-05-25:
20- added const to void g++ warning
diff --git a/baseline/source/huff_dec/compress.txt b/baseline/source/huff_dec/compress.txt
new file mode 100644
index 0000000..5966bcf
--- /dev/null
+++ b/baseline/source/huff_dec/compress.txt
@@ -0,0 +1,1107 @@
1+===========================================================+
2| Introduction to the losslessy compression schemes |
3| Description of the codec source codes |
4+-----------------------------------------------------------+
5| From David Bourgin (E-mail: david.bourgin@ufrima.imag.fr) |
6| Date: 22/9/94 |
7+===========================================================+
8
9 ------ BE CARE ------
10This file (compress.txt) is copyrighted. (c) David Bourgin - 1994
11Permission to use this documentation for any purpose other than
12its incorporation into a commercial product is hereby granted without fee.
13Permission to copy and distribute this documentation only for non-commercial use
14is also granted without fee, provided, however, that the above copyright notice
15appears in all copies, that both that copyright notice and this permission notice appear in supporting documentation. The author makes no representations about
16the suitability of this documentation for any purpose. It is provided "as is"
17without express or implied warranty.
18
19The source codes you obtain with this file are *NOT* covered by the same
20copyright, because you can include them for both commercial and non-commercial
21use. See below for more infos.
22
23The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
24dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
25They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
26on 22/5/94 and have been modified on 22/9/94.
27(c) David Bourgin - 1994
28The source codes I provide have no buggs (!) but being that I make them
29available for free I have some notes to make. They can change at any time
30without notice. I assume no responsability or liability for any errors or
31inaccurracies, make no warranty of any kind (express, implied or statutory)
32with respect to this publication and expressly disclaim any and all warranties
33of merchantability, fitness for particular purposes. Of course, if you have
34some problems to use the information presented here, I will try to help you if
35I can.
36
37If you include the source codes in your application, here are the conditions:
38- You have to put my name in the header of your source file (not in the
39excutable program if you don't want) (this item is a must)
40- I would like to see your resulting application, if possible (this item is not
41a must, because some applications must remain secret)
42- Whenever you gain money with your application, I would like to receive a very
43little part in order to be encouraged to update my source codes and to develop
44new schemes (this item is not a must)
45 ---------------------
46
47There are several means to compress data. Here, we are only going to deal with
48the losslessy schemes. These schemes are also called non-destructive because
49you always recover the initial data you had, and this, as soon as you need them.
50With losslessy schemes, you won't never lose any informations (except perhaps
51when you store or transmit your data but this is another problem...).
52
53In this introduction, we are going to see:
54- The RLE scheme (with different possible algorithms)
55- The Huffman schemes (dynamical scheme)
56- And the LZW scheme
57
58For the novice, a compresser is a program able to read several data (e.g. bytes)
59in input and to write several data in output. The data you obtain from the
60output (also called compressed data) will - of course - take less space than
61the the input data. This is true in most of cases, if the compresser works
62and if the type of the data is correct to be compressed with the given scheme.
63The codec (coder-decoder) enables you to save space on your hard disk and/or
64to save the communication costs because you always store/transmit the compressed
65data. You'll use the decompresser as soon as you need to recover your initial
66useful data. Note that the compressed data are useless if you have not
67the decoder...
68
69You are doubtless asking "How can I reduce the data size without losing some
70informations?". It's easy to answer to this question. I'll only take an example.
71I'm sure you have heard about the morse. This system established in the 19th
72century use a scheme very close to the huffman one. In the morse you encode
73the letters to transmit with two kinds of signs. If you encode these two sign
74possibilities in one bit, the symbol 'e' is transmitted in a single bit and
75the symbols 'y' and 'z' need four bits. Look at the symbols in the text you are
76reading, you'll fast understand the compression ratio...
77
78Important: The source codes associated to the algorithms I present are
79completely adaptative on what you need to compress. They all use basical
80macros on the top of the file. Usually the macros to change are:
81
82- beginning_of_data
83- end_of_data
84- read_byte
85- read_block
86- write_byte
87- write_block
88
89These allow the programmer to modify only a little part of the header
90of the source codes in order to compress as well memory as files.
91
92beginning_of_data(): Macro used to set the program so that the next read_byte()
93call will read the first byte to compress.
94end_of_data(): Returns a boolean to know whether there is no more bytes to read
95from the input stream. Return 0 if there is no more byte to compress, another
96non-zero value otherwise.
97read_byte(): Returns a byte read from the input stream if available.
98write_byte(x): Writes the byte 'x' to the output stream.
99read_block(...) and write_block(...): Same use as read_byte and write_byte(x)
100but these macros work on blocks of bytes and not only on a single byte.
101
102If you want to compress *from* the memory, before entering in a xxxcoding
103procedure ('xxx' is the actual extension to replace with a given codec), you
104have to add a pointer set up to the beginning of the zone to compress. Note
105that the following pointer 'source_memory_base' is not to add, it is just given
106here to specify a name to the address of the memory zone you are going to
107encode or decode. That is the same about source_memory_end which can be either
108a pointer to create or an existing pointer.
109
110unsigned char *source_memory_base, /* Base of the source memory */
111 *source_memory_end, /* Last address to read.
112 source_memory_end=source_memory_base+source_zone_length-1 */
113 *source_ptr; /* Used in the xxxcoding procedure */
114void pre_start()
115{ source_ptr=source_memory_base;
116 xxxcoding();
117}
118
119end_of_data() and read_byte() are also to modify to compress *from* memory:
120
121#define end_of_data() (source_ptr>source_memory_end)
122#define read_byte() (*(source_ptr++))
123
124If you want to compress *to* memory, before entering in a xxxcoding procedure
125('xxx' is the actual extension to replace with a given codec), you have to add
126a pointer. Note that the pointer 'dest_memory_base' is not to add, it is just
127given there to specify the address of the destination memory zone you are
128going to encode or decode.
129
130unsigned char *dest_memory_base, /* Base of the destination memory */
131 *dest_ptr; /* Used in the xxxcoding procedure */
132void pre_start()
133{ dest_ptr=dest_memory_base;
134 xxxcoding();
135}
136
137Of course, you can combine both from and to memory in the pre_start() procedure.
138The files dest_file and source_file handled in the main() function are
139to remove...
140
141void pre_start()
142{ source_ptr=source_memory_base;
143 dest_ptr=dest_memory_base;
144 xxxcoding();
145}
146
147In fact, to write to memory, the problem is in the write_byte(x) procedure.
148This problem exists because your destination zone can either be a static
149zone or a dynamically allocated zone. In the two cases, you have to check
150if there is no overflow, especially if the coder is not efficient and must
151produce more bytes than you reserved in memory.
152
153In the first case, with a *static* zone, write_byte(x) macro should look like
154that:
155
156unsigned long int dest_zone_length,
157 current_size;
158
159#define write_byte(x) { if (current_size==dest_zone_length) \
160 exit(1); \
161 dest_ptr[current_size++]=(unsigned char)(x); \
162 }
163
164In the static version, the pre_start() procedure is to modify as following:
165
166void pre_start()
167{ source_ptr=source_memory_base;
168 dest_ptr=dest_memory_base;
169 dest_zone_length=...; /* Set up to the actual destination zone length */
170 current_size=0; /* Number of written bytes */
171 xxxcoding();
172}
173Otherwise, dest_ptr is a zone created by the malloc instruction and you can try
174to resize the allocated zone with the realloc instruction. Note that I increment
175the zone one kilo-bytes by one kylo-bytes. You have to add two other variables:
176
177unsigned long int dest_zone_length,
178 current_size;
179
180#define write_byte(x) { if (current_size==dest_zone_length) \
181 { dest_zone_length += 1024; \
182 if ((dest_ptr=(unsigned char *)realloc(dest_ptr,dest_zone_length*sizeof(unsigned char)))==NULL) \
183 exit(1); /* You can't compress in memory \
184 => I exit but *you* can make a routine to swap on disk */ \
185 } \
186 dest_ptr[current_size++]=(unsigned char)(x); \
187 }
188
189With the dynamically allocated version, change the pre_start() routine as following:
190
191void pre_start()
192{ source_ptr=source_memory_base;
193 dest_ptr=dest_memory_base;
194 dest_zone_length=1024;
195 if ((dest_ptr=(unsigned char *)malloc(dest_zone_length*sizeof(unsigned char)))==NULL)
196 exit(1); /* You need at least 1 kb in the dynamical memory ! */
197 current_size=0; /* Number of written bytes */
198 xxxcoding();
199 /* Handle the bytes in dest_ptr but don't forget to free these bytes with:
200 free(dest_ptr);
201 */
202}
203
204The previously given macros work as:
205
206void demo() /* The file opening, closing and variables
207 must be set up by the calling procedure */
208{ unsigned char byte;
209 /* And not 'char byte' (!) */
210 while (!end_of_data())
211 { byte=read_byte();
212 printf("Byte read=%c\n",byte);
213 }
214}
215
216You must not change the rest of the program unless you're really sure and
217really need to do it!
218
219+==========================================================+
220| The RLE encoding |
221+==========================================================+
222
223RLE is an acronym that stands for Run Length Encoding. You may encounter it
224as an other acronym: RLC, Run Length Coding.
225
226The idea in this scheme is to recode your data with regard to the repetition
227frames. A frame is one or more bytes that occurr one or several times.
228
229There are several means to encode occurrences. So, you'll have several codecs.
230For example, you may have a sequence such as:
2310,0,0,0,0,0,255,255,255,2,3,4,2,3,4,5,8,11
232
233Some codecs will only deal with the repetitions of '0' and '255' but some other
234will deal with the repetitions of '0', '255', and '2,3,4'.
235
236You have to keep in your mind something important based on this example. A codec
237won't work on all the data you will try to compress. So, in case of non
238existence of sequence repetitions, the codecs based on RLE schemes must not
239display a message to say: "Bye bye". Actually, they will try to encode these
240non repeted data with a value that says "Sorry, I only make a copy of the inital
241input". Of course, a copy of the input data with an header in front of this copy
242will make a biggest output data but if you consider the whole data to compress,
243the encoding of repeated frames will take less space than the encoding
244of non-repeated frames.
245
246All of the algorithms with the name of RLE have the following look with three
247or four values:
248- Value saying if there's a repetition
249- Value saying how many repetitions (or non repetition)
250- Value of the length of the frame (useless if you just encode frame
251with one byte as maximum length)
252- Value of the frame to repeat (or not)
253
254I gave four algorithms to explain what I say.
255
256*** First RLE scheme ***
257
258The first scheme is the simpliest I know, and looks like the one used in MAC
259system (MacPackBit) and some image file formats such as Targa, PCX, TIFF, ...
260
261Here, all compressed blocks begin with a byte, named header, which description
262is:
263
264Bits 7 6 5 4 3 2 1 0
265Header X X X X X X X X
266
267Bits 7: Compression status (1=Compression applied)
268 0 to 6: Number of bytes to handle
269
270So, if the bit 7 is set up to 0, the 0 to 6 bits give the number of bytes
271that follow (minus 1, to gain more over compress) and that were not compressed
272(native bytes). If the bit 7 is set up to 1, the same 0 to 6 bits give
273the number of repetition (minus 2) of the following byte.
274
275As you see, this method only handle frame with one byte.
276
277Additional note: You have 'minus 1' for non-repeated frames because you must
278have at least one byte to compress and 'minus 2' for repeated frames because the
279repetition must be 2, at least.
280
281Compression scheme:
282
283 First byte=Next
284 /\
285 / \
286Count the byte Count the occurrence of NON identical
287occurrences bytes (maximum 128 times)
288(maximum 129 times) and store them in an array
289 | |
290 | |
291 1 bit '1' 1 bit '0'
292+ 7 bits giving + 7 bits giving
293 the number (-2) the number (-1)
294 of repetitions of non repetition
295+ repeated byte + n non repeated bytes
296 | |
297 1xxxxxxx,yyyyyyyy 0xxxxxxx,n bytes
298[-----------------] [----------------]
299
300Example:
301
302Sequence of bytes to encode | Coded values | Differences with compression
303 | | (unit: byte)
304-------------------------------------------------------------------------
305 255,15, | 1,255,15, | -1
306 255,255, | 128,255, | 0
307 15,15, | 128,15, | 0
308 255,255,255, | 129,255, | +1
309 15,15,15, | 129,15, | +1
310 255,255,255,255, | 130,255, | +2
311 15,15,15,15 | 130,15 | +2
312
313See codecs source codes: codrle1.c and dcodrle1.c
314
315*** Second RLE scheme ***
316
317In the second scheme of RLE compression you look for the less frequent byte
318in the source to compress and use it as an header for all compressed block.
319
320In the best cases, the occurrence of this byte is zero in the data to compress.
321
322Two possible schemes, firstly with handling frames with only one byte,
323secondly with handling frames with one byte *and* more. The first case is
324the subject of this current compression scheme, the second is the subject
325of next compression scheme.
326
327For the frame of one byte, header byte is written in front of all repetition
328with at least 4 bytes. It is then followed by the repetition number minus 1 and
329the repeated byte.
330Header byte, Occurrence number-1, repeated byte
331
332If a byte don't repeat more than tree times, the three bytes are written without
333changes in the destination stream (no header nor length, nor repetition in front
334or after theses bytes).
335
336An exception: If the header byte appears in the source one, two, three and up
337times, it'll be respectively encoded as following:
338- Header byte, 0
339- Header byte, 1
340- Header byte, 2
341- Header byte, Occurrence number-1, Header byte
342
343Example, let's take the previous example. A non frequent byte is zero-ASCII
344because it never appears.
345
346Sequence of bytes to encode | Coded values | Differences with compression
347 | | (unit: byte)
348-------------------------------------------------------------------------
349 255,15, | 255,15, | -1
350 255,255, | 255,255, | 0
351 15,15, | 15,15, | 0
352 255,255,255, | 255,255,255, | 0
353 15,15,15, | 15,15,15, | 0
354 255,255,255,255, | 0,3,255, | -1
355 15,15,15,15 | 0,3,15 | -1
356
357If the header would appear, we would see:
358
359Sequence of bytes to encode | Coded values | Differences with compression
360 | | (unit: byte)
361-------------------------------------------------------------------------
362 0, | 0,0, | +1
363 255, | 255, | 0
364 0,0, | 0,1, | 0
365 15, | 15, | 0
366 0,0,0, | 0,2, | -1
367 255, | 255, | 0
368 0,0,0,0 | 0,3,0 | -1
369
370See codecs source codes: codrle2.c and dcodrle2.c
371
372*** Third RLE scheme ***
373
374It's the same idea as the second scheme but we can encode frames with
375more than one byte. So we have three cases:
376
377- If it was the header byte, whatever is its occurrence, you encode it with:
378Header byte,0,number of occurrence-1
379- For frames which (repetition-1)*length>3, encode it as:
380Header byte, Number of frame repetition-1, frame length-1,bytes of frame
381- If no previous cases were detected, you write them as originally (no header,
382nor length, nor repetition in front or after theses bytes).
383
384Example based on the previous examples:
385
386Sequence of bytes to encode | Coded values | Differences with compression
387 | | (unit: byte)
388-----------------------------------------------------------------------------
389 255,15, | 255,15, | 0
390 255,255, | 255,255, | 0
391 15,15, | 15,15, | 0
392 255,255,255, | 255,255,255, | 0
393 15,15,15, | 15,15,15, | 0
394 255,255,255,255, | 255,255,255,255, | 0
395 15,15,15,15, | 15,15,15,15, | 0
396 16,17,18,16,17,18, |16,17,18,16,17,18,| 0
397 255,255,255,255,255, | 0,4,0,255, | -1
398 15,15,15,15,15, | 0,4,0,15, | -1
399 16,17,18,16,17,18,16,17,18,| 0,2,2,16,17,18, | -3
400 16,17,18,19,16,17,18,19 |0,1,3,16,17,18,19 | -1
401
402If the header (value 0) would be met, we would see:
403
404Sequence of bytes to encode | Coded values | Differences with compression
405 | | (unit: byte)
406--------------------------------------------------------------------------
407 0, | 0,0,0, | +2
408 255, | 255, | 0
409 0,0, | 0,0,1, | +1
410 15, | 15, | 0
411 0,0,0, | 0,0,2, | 0
412 255, | 255, | 0
413 0,0,0,0 | 0,0,3 | -1
414
415See codecs source codes: codrle3.c and dcodrle3.c
416
417*** Fourth RLE scheme ***
418
419This last RLE algorithm better handles repetitions of any kind (one byte
420and more) and non repetitions, including few non repetitions, and does not
421read the source by twice as RLE type 3.
422
423Compression scheme is:
424
425 First byte=Next byte?
426 /\
427 Yes / \ No
428 / \
429 1 bit '0' 1 bit '1'
430 / \
431 / \
432 Count the Motif of several
433 occurrences repeated byte?
434 of 1 repeated ( 65 bytes repeated
435 byte (maximum 257 times maxi)
436 16449 times) /\
437 /\ / \
438 / \ / \
439 / \ / \
440 / \ / \
441 1 bit '0' 1 bit '1' 1 bit '0' 1 bit '1'
442+ 6 bits + 14 bits + 6 bits of |
443giving the giving the the length Number of non repetition
444length (-2) length (-66) of the motif (maximum 8224)
445of the of the + 8 bits of /\
446repeated byte repeated byte the number (-2) < 33 / \ > 32
447+ repeated byte + repeated byte of repetition / \
448 | | + bytes of the 1 bit '0' 1 bit '1'
449 | | motif + 5 bits of + 13 bits
450 | | | the numer (-1) of the
451 | | | of non number (-33)
452 | | | repetition of repetition
453 | | | + non + non
454 | | | repeated repeated
455 | | | bytes bytes
456 | | | | |
457 | | | | 111xxxxx,xxxxxxxx,n bytes
458 | | | | [-------------------------]
459 | | | |
460 | | | 110xxxxx,n bytes
461 | | | [----------------]
462 | | |
463 | | 10xxxxxx,yyyyyyyy,n bytes
464 | | [-------------------------]
465 | |
466 | 01xxxxxx,xxxxxxxx,1 byte
467 | [------------------------]
468 |
469 00xxxxxx,1 byte
470[---------------]
471
472Example, same as previously:
473
474Sequence of bytes to encode | Coded values | Differences with compression
475 | | (unit: byte)
476--------------------------------------------------------------------------
477 255,15 | 11000001b,255,15, | +1
478 255,255 | 00000000b,255, | 0
479 15,15 | 00000000b,15, | 0
480 255,255,255 | 00000001b,255, | -1
481 15,15,15 | 00000001b,15, | -1
482 255,255,255,255 | 00000010b,255, | -2
483 15,15,15,15 | 00000010b,15, | -2
484 16,17,18,16,17,18 |10000001b,0,16,17,18,| -1
485 255,255,255,255,255 | 00000011b,255, | -3
486 15,15,15,15,15 | 00000011b,15, | -3
487 16,17,18,16,17,18,16,17,18 | 10000001b,16,17,18, | -4
488 16,17,18,19,16,17,18,19 |10000010b,16,17,18,19| -2
489
490+==========================================================+
491| The Huffman encoding |
492+==========================================================+
493
494This method comes from the searcher who established the algorithm in 1952.
495This method allows both a dynamic and static statistic schemes. A statistic
496scheme works on the data occurrences. It is not as with RLE where you had
497a consideration of the current occurrence of a frame but rather a consideration
498of the global occurrences of each data in the input stream. In this last case,
499frames can be any kinds of sequences you want. On the other hand, Huffman
500static encoding appears in some compressers such as ARJ on PCs. This enforces
501the encoder to consider every statistic as the same for all the data you have.
502Of course, the results are not as good as if it were a dynamic encoding.
503The static encoding is faster than the dynamic encoding but the dynamic encoding
504will be adapted to the statistic of the bytes of the input stream and will
505of course become more efficient by producing shortest output.
506
507The main idea in Huffman encoding is to re-code every byte with regard to its
508occurrence. The more frequent bytes in the data to compress will be encoded with
509less than 8 bits and the others could need 8 bits see even more to be encoded.
510You immediately see that the codes associated to the different bytes won't have
511identical size. The Huffman method will actually require that the binary codes
512have not a fixed size. We speak then about variable length codes.
513
514The dynamical Huffman scheme needs the binary trees for the encoding. This
515enables you to obtain the best codes, adapted to the source data.
516The demonstration won't be given there. To help the neophyt, I will just explain
517what is a binary tree.
518
519A binary tree is special fashion to represent the data. A binary tree is
520a structure with an associated value with two pointers. The term of binary has
521been given because of the presence of two pointers. Because of some conventions,
522one of the pointer is called left pointer and the second pointer is called right
523pointer. Here is a visual representation of a binary tree.
524
525 Value
526 / \
527 / \
528 Value Value
529 / \ / \
530... ... ... ...
531
532One problem with a binary encoding is a prefix problem. A prefix is the first
533part of the representation of a value, e.g. "h" and "he" are prefixes of "hello"
534but not "el". To understand the problem, let's code the letters "A", "B", "C",
535"D", and "E" respectively as 00b, 01b, 10b, 11b, and 100b. When you read
536the binary sequence 00100100b, you are unable to say if this comes from "ACBA"
537or "AEE". To avoid such situations, the codes must have a prefix property.
538And the letter "E" mustn't begin with the sequence of an other code. With "A",
539"B", "C", "D", and "E" respectively affected with 1b, 01b, 001b, 0001b, and
5400000b, the sequence 1001011b will only be decoded as "ACBA".
541
542 1 0
543<- /\ ->
544 / \
545 "A" /\
546 "B" \
547 /\
548 "C" \
549 /\
550 "D" "E"
551
552As you see, with this tree, an encoding will have the prefix property
553if the bytes are at the end of each "branch" and you have no byte at the "node".
554You also see that if you try to reach a character by the right pointer you add
555a bit set to 0 and by the left pointer, you add a bit set to 1 to the current
556code. The previous *bad* encoding provide the following bad tree:
557
558 /\
559 / \
560 / \
561 /\ /\
562 / \ "B" "A"
563 / \
564"D" "C"\
565 / \
566 "E"
567
568You see here that the coder shouldn't put the "C" at a node...
569
570As you see, the largest binary code are those with the longest distance
571from the top of the tree. Finally, the more frequent bytes will be the highest
572in the tree in order you have the shortest encoding and the less frequent bytes
573will be the lowest in the tree.
574
575From an algorithmic point of view, you make a list of each byte you encountered
576in the stream to compress. This list will always be sorted. The zero-occurrence
577bytes are removed from this list. You take the two bytes with the smallest
578occurrences in the list. Whenever two bytes have the same "weight", you take two
579of them regardless to their ASCII value. You join them in a node. This node will
580have a fictive byte value (256 will be a good one!) and its weight will be
581the sum of the two joined bytes. You replace then the two joined bytes with
582the fictive byte. And you continue so until you have one byte (fictive or not)
583in the list. Of course, this process will produce the shortest codes if the list
584remains sorted. I will not explain with arcana hard maths why the result
585is a set of the shortest bytes...
586
587Important: I use as convention that the right sub-trees have a weight greater
588or equal to the weight of the left sub-trees.
589
590Example: Let's take a file to compress where we notice the following
591occurrences:
592
593Listed bytes | Frequences (Weight)
594----------------------------------
595 0 | 338
596 255 | 300
597 31 | 280
598 77 | 24
599 115 | 21
600 83 | 20
601 222 | 5
602
603We will begin by joining the bytes 83 and 222. This will produce a fictive node
6041 with a weight of 20+5=25.
605
606(Fictive 1,25)
607 /\
608 / \
609(222,5) (83,20)
610
611Listed bytes | Frequences (Weight)
612----------------------------------
613 0 | 338
614 255 | 300
615 31 | 280
616 Fictive 1 | 25
617 77 | 24
618 115 | 21
619
620Note that the list is sorted... The smallest values in the frequences are 21 and
62124. That is why we will take the bytes 77 and 115 to build the fictive node 2.
622
623(Fictive 2,45)
624 /\
625 / \
626(115,21) (77,25)
627
628Listed bytes | Frequences (Weight)
629----------------------------------
630 0 | 338
631 255 | 300
632 31 | 280
633 Fictive 2 | 45
634 Fictive 1 | 25
635
636The nodes with smallest weights are the fictive 1 and 2 nodes. These are joined
637to build the fictive node 3 whose weight is 40+25=70.
638
639 (Fictive 3,70)
640 / \
641 / \
642 / \
643 /\ / \
644 / \ / \
645(222,5) (83,20) (115,21) (77,25)
646
647Listed bytes | Frequences (Weight)
648----------------------------------
649 0 | 338
650 255 | 300
651 31 | 280
652 Fictive 3 | 70
653
654The fictive node 3 is linked to the byte 31. Total weight: 280+70=350.
655
656 (Fictive 4,350)
657 / \
658 / \
659 / \
660 / \ (31,280)
661 / \
662 / \
663 /\ / \
664 / \ / \
665(222,5) (83,20) (115,21) (77,25)
666
667Listed bytes | Frequences (Weight)
668----------------------------------
669 Fictive 4 | 350
670 0 | 338
671 255 | 300
672
673As you see, being that we sort the list, the fictive node 4 has become the first
674of the list. We join the bytes 0 and 255 in a same fictive node, the number 5
675whose weight is 338+300=638.
676
677(Fictive 5,638)
678 /\
679 / \
680(255,300) (0,338)
681
682Listed bytes | Frequences (Weight)
683----------------------------------
684 Fictive 5 | 638
685 Fictive 4 | 350
686
687The fictive nodes 4 and 5 are finally joined. Final weight: 638+350=998 bytes.
688It is actually the total byte number in the initial file: 338+300+24+21+20+5.
689
690 (Tree,998)
691 1 / \ 0
692 <- / \ ->
693 / \
694 / \
695 / \
696 / \ / \
697 / \ / \
698 / \ / \
699 / \ (31,280) (255,300) (0,338)
700 / \
701 / \
702 /\ / \
703 / \ / \
704(222,5) (83,20) (115,21) (77,25)
705
706Bytes | Huffman codes | Frequences | Binary length*Frequence
707------------------------------------------------------------
708 0 | 00b | 338 | 676
709 255 | 01b | 300 | 600
710 31 | 10b | 280 | 560
711 77 | 1101b | 24 | 96
712 115 | 1100b | 21 | 84
713 83 | 1110b | 20 | 80
714 222 | 1111b | 5 | 20
715
716Results: Original file size: (338+300+280+24+21+20+5)*8=7904 bits (=998 bytes)
717versus 676+600+560+96+84+80+20=2116 bits, i.e. 2116/8=265 bytes.
718
719Now you know how to code an input stream. The last problem is to decode all this
720stuff. Actually, when you meet a binary sequence you can't say whether it comes
721from such byte list or such other one. Furthermore, if you change the occurrence
722of one or two bytes, you won't obtain the same resulting binary tree. Try for
723example to encode the previous list but with the following occurrences:
724
725Listed bytes | Frequences (Weight)
726----------------------------------
727 255 | 418
728 0 | 300
729 31 | 100
730 77 | 24
731 115 | 21
732 83 | 20
733 222 | 5
734
735As you can observe it, the resulting binary tree is quite different, we had yet
736the same initial bytes. To not be in such a situation we will put an header
737in front of all data. I can't comment longly this header but I can say
738I minimize it as much as I could. The header is divided into two parts.
739The first part of this header looks closely to a boolean table (coded more or
740less in binary to save space) and the second part provide to the decoder
741the binary code associated to each byte encountered in the original input
742stream.
743
744Here is a summary of the header:
745
746First part
747----------
748 First bit
749 / \
750 1 / \ 0
751 / \
752 256 bits set to 0 or 1 5 bits for the number n (minus 1)
753 depending whether the of bytes encountered
754 corresponding byte was in the file to compres
755 in the file to compress |
756 (=> n bits set to 1, \ /
757 n>32) n values of 8-bits (n<=32)
758 \ /
759 \ /
760 \ /
761Second part |
762----------- |
763 |
764 +------------->|
765(n+1) times | |
766(n bytes of | First bit?
767the values | / \
768encountered | 1 / \ 0
769in the | / \
770source file | 8 bits of 5 bits of the
771+ the code | the length length (-1)
772of a | (-1) of the of the following
773fictive | following binary
774byte | binary code code
775to stop the | (length>32) (length<=32)
776decoding. | \ /
777The fictive | \ /
778is set to | \ /
779256 in the | |
780Huffman | binary code
781-tree of | |
782encoding) +--------------|
783 |
784 Binary encoding of the source file
785 |
786 Code of end of encoding
787 |
788
789
790With my codecs I can handle binary sequences with a length of 256 bits.
791This correspond to encode all the input stream from one byte to infinite length.
792In fact if a byte had a range from 0 to 257 instead of 0 to 255, I would have a
793bug with my codecs with an input stream of at least 370,959,230,771,131,880,927,
794453,318,055,001,997,489,772,178,180,790,105 bytes !!!
795
796Where come this explosive number? In fact, to have a severe bug, I must have
797a completely unbalanced tree:
798
799 Tree
800 /\
801 \
802 /\
803 \
804 /\
805 \
806 ...
807 /\
808 \
809 /\
810
811Let's take the following example:
812
813Listed bytes | Frequences (Weight)
814----------------------------------
815 32 | 5
816 101 | 3
817 97 | 2
818 100 | 1
819 115 | 1
820
821This produces the following unbalanced tree:
822
823 Tree
824 /\
825(32,5) \
826 /\
827 (101,3) \
828 /\
829 (97,2) \
830 /\
831 (115,1) (100,1)
832
833Let's speak about a mathematical series: The Fibonacci series. It is defined as
834following:
835
836{ Fib(0)=0
837{ Fib(1)=1
838{ Fib(n)=Fib(n-2)+Fib(n-1)
839
840Fib(0)=0, Fib(1)=1, Fib(2)=1, Fib(3)=2, Fib(4)=3, Fib(5)=5, Fib(6)=8, Fib(7)=13,
841etc.
842
843But 1, 1, 2, 3, 5, 8 are the occurrences of our list! We can actually
844demonstrate that to have an unbalanced tree, we have to take a list with
845an occurrence based on the Fibonacci series (these values are minimal).
846If the data to compress have m different bytes, when the tree is unbalanced,
847the longest code need m-1 bits. In our little previous example where m=5,
848the longest codes are associated to the bytes 100 and 115, respectively coded
8490001b and 0000b. We can also say that to have an unbalanced tree we must have
850at least 5+3+2+1+1=12=Fib(7)-1. To conclude about all that, with a coder that
851uses m-1 bits, you must never have an input stream size over than Fib(m+2)-1,
852otherwise, there could be a bug in the output stream. Of course, with my codecs
853there will never be a bug because I can deal with binary code sizes of 1 to 256
854bits. Some encoder could use that with m=31, Fib(31+2)-1=3,524,577 and m=32,
855Fib(32+2)-1=5,702,886. And an encoder that uses unisgned integer of 32 bits
856shouldn't have a bug until about 4 Gb...
857
858+==========================================================+
859| The LZW encoding |
860+==========================================================+
861
862The LZW scheme is due to three searchers, i.e. Abraham Lempel and Jacob Ziv
863worked on it in 1977, and Terry Welch achieved this scheme in 1984.
864
865LZW is patented in USA. This patent, number 4,558,302, is covered by Unisys
866Corporation. You can usually write (without fees) software codecs which use
867the LZW scheme but hardware companies can't do so. You may get a limited
868licence by writting to:
869Welch Licencing Department
870Office of the General Counsel
871M/S C1SW19
872Unisys corporation
873Blue Bell
874Pennsylvania, 19424 (USA)
875
876If you're occidental, you are surely using an LZW encoding every time you are
877speaking, especially when you use a dictionary. Let's consider, for example,
878the word "Cirrus". As you read a dictionary, you begin with "A", "Aa", and so
879on. But a computer has no experience and it must suppose that some words
880already exist. That is why with "Cirrus", it supposes that "C", "Ci", "Cir",
881"Cirr", "Cirru", and "Cirrus" exist. Of course, being that this is a computer,
882all these words are encoded as index numbers. Every time you go forward, you add
883a new number associated to the new word. Being that a computer is byte-based
884and not alphabetic-based, you have an initial dictionary of 256 letters instead
885of our 26 ('A' to 'Z') letters.
886
887Example: Let's code "XYXYZ". First step, "X" is recognized in the initial
888dictionary of 256 letters as the 89th. Second step, "Y" is read. Does "XY"
889exist? No, then "XY" is stored as the word 256. You write in the output stream
890the ASCII of "X", i.e. 88. Now "YX" is tested as not referenced in the current
891dictionary. It is stored as the word 257. You write now in the output stream 89
892(ASCII of "Y"). "XY" is now met. But now "XY" is known as the reference 256.
893Being that "XY" exists, you test the sequence with one more letter, i.e. "XYZ".
894This last word is not referenced in the current dictionary. You write then the
895value 256. Finally, you reach the last letter ("Z"). You add "YZ" as the
896reference 258 but it is the last letter. That is why you just write the value
89790 (ASCII of "Z").
898
899Another encoding sample with the string "ABADABCCCABCEABCECCA".
900
901+----+-----+---------------+------+----------+-------------------------+------+
902|Step|Input|Dictionary test|Prefix|New symbol|Dictionary |Output|
903| | | | | |D0=ASCII with 256 letters| |
904+----+-----+---------------+------+----------+-------------------------+------+
905| 1 | "A" |"A" in D0 | "A" | "B" | D1=D0 | 65 |
906| | "B" |"AB" not in D0 | | | and "AB"=256 | |
907+----+-----+---------------+------+----------+-------------------------+------+
908| 2 | "A" |"B" in D1 | "B" | "A" | D2=D1 | 66 |
909| | |"BA" not in D1 | | | and "BA"=257 | |
910+----+-----+---------------+------+----------+-------------------------+------+
911| 3 | "D" |"A" in D2 | "A" | "D" | D3=D2 | 65 |
912| | |"AD" not in D2 | | | and "AD"=258 | |
913+----+-----+---------------+------+----------+-------------------------+------+
914| 4 | "A" |"D" in D3 | "D" | "A" | D4=D3 | 68 |
915| | |"DA" not in D3 | | | and "DA"=259 | |
916+----+-----+---------------+------+----------+-------------------------+------+
917| 5 | "B" |"A" in D4 | "AB" | "C" | D5=D4 | 256 |
918| | "C" |"AB" in D4 | | | and "ABC"=260 | |
919| | |"ABC" not in D4| | | | |
920+----+-----+---------------+------+----------+-------------------------+------+
921| 6 | "C" |"C" in D5 | "C" | "C" | D6=D5 | 67 |
922| | |"CC" not in D5 | | | and "CC"=261 | |
923+----+-----+---------------+------+----------+-------------------------+------+
924| 7 | "C" |"C" in D6 | "CC" | "A" | D7=D6 | 261 |
925| | "A" |"CC" in D6 | | | and "CCA"=262 | |
926| | |"CCA" not in D6| | | | |
927+----+-----+---------------+------+----------+-------------------------+------+
928| 8 | "B" |"A" in D7 | "ABC"| "E" | D8=D7 | 260 |
929| | "C" |"AB" in D7 | | | and "ABCE"=263 | |
930| | "E" |"ABC" in D7 | | | | |
931| | <"ABCE" not in D7| | | | |
932+----+-----+---------------+------+----------+-------------------------+------+
933| 9 | "A" |"E" in D8 | "E" | "A" | D9=D8 | 69 |
934| | |"EA" not in D8 | | | and "EA"=264 | |
935+----+-----+---------------+------+----------+-------------------------+------+
936| 10 | "B" |"A" in D9 |"ABCE"| "C" | D10=D9 | 263 |
937| | "C" |"AB" in D9 | | | and "ABCEC"=265 | |
938| | "E" |"ABC" in D9 | | | | |
939| | "C" |"ABCE" in D9 | | | | |
940| | <"ABCEC" not in D9> | | | |
941+----+-----+---------------+------+----------+-------------------------+------+
942| 11 | "C" |"C" in D10 | "CCA"| | | 262 |
943| | "A" |"CC" in D10 | | | | |
944| | <"CCA" not in D10| | | | |
945+----+-----+---------------+------+----------+-------------------------+------+
946
947You will notice a problem with the above output: How to write a code of 256
948(for example) on 8 bits? It's simple to solve this problem. You just say that
949the encoding starts with 9 bits and as you reach the 512th word, you use a
95010-bits encoding. With 1024 words, you use 11 bits; with 2048 words, 12 bits;
951and so on with all numbers of 2^n (n is positive). To better synchronize
952the coder and the decoder with all that, most of implementations use two
953additional references. The word 256 is a code of reinitialisation (the codec
954must reinitialize completely the current dictionary to its 256 initial letters)
955and the word 257 is a code of end of information (no more data to read).
956Of course, you start your first new word as the code number 258.
957
958You can also do so as in the GIF file format and start with an initial
959dictionary of 18 words to code an input stream with only letters coded on 4 bits
960(you start with codes of 5 bits in the output stream!). The 18 initial words
961are: 0 to 15 (initial letters), 16 (reinit the dictionary), and 17 (end of
962information). First new word has code 18, second word, code 19, ...
963
964Important: You can consider that your dictionary is limited to 4096 different
965words (as in GIF and TIFF file formats). But if your dictionary is full, you
966can decide to send old codes *without* reinitializing the dictionary. All the
967decoders must be compliant with this. This enables you to consider that it is
968not efficient to reinitialize the full dictionary. Instead of this, you don't
969change the dictionary and you send/receive (depending if it's a coder or a
970decoder) existing codes in the full dictionary.
971
972My codecs are able to deal as well with most of initial size of data in the
973initial dictionary as with full dictionary.
974
975Let's see how to decode an LZW encoding. We saw with true dynamical Huffman
976scheme that you needed an header in the encoding codes. Any header is useless
977in LZW scheme. When two successive bytes are read, the first must exist in the
978dictionary. This code can be immediately decoded and written in the output
979stream. If the second code is equal or less than the word number in the current
980dictionary, this code is decoded as the first one. At the opposite, if the
981second code is equal to the word number in dictionary plus one, this means you
982have to write a word composed with the word (the sentence, not the code number)
983of the last code plus the first character of the last code. In between, you make
984appear a new word. This new word is the one you just sent to the output stream,
985it means composed by all the letters of the word associated to the first code
986and the first letter of the word of the second code. You continue the processing
987with the second and third codes read in the input stream (of codes)...
988
989Example: Let's decode the previous encoding given a bit more above.
990
991+------+-------+----------------+----------+------------------+--------+
992| Step | Input | Code to decode | New code | Dictionary | Output |
993+------+-------+----------------+----------+------------------+--------+
994| 1 | 65 | 65 | 66 | 65,66=256 | "A" |
995| | 66 | | | | |
996+------+-------+----------------+----------+------------------+--------+
997| 2 | 65 | 66 | 65 | 66,65=257 | "B" |
998+------+-------+----------------+----------+------------------+--------+
999| 3 | 68 | 65 | 68 | 65,68=258 | "A" |
1000+------+-------+----------------+----------+------------------+--------+
1001| 4 | 256 | 68 | 256 | 68,65=259 | "D" |
1002+------+-------+----------------+----------+------------------+--------+
1003| 5 | 67 | 256 | 67 | 65,66,67=260 | "AB" |
1004+------+-------+----------------+----------+------------------+--------+
1005| 6 | 261 | 67 | 261 | 67,67=261 | "C" |
1006+------+-------+----------------+----------+------------------+--------+
1007| 7 | 260 | 261 | 260 | 67,67,65=262 | "CC" |
1008+------+-------+----------------+----------+------------------+--------+
1009| 8 | 69 | 260 | 69 | 65,66,67,69=263 | "ABC" |
1010+------+-------+----------------+----------+------------------+--------+
1011| 9 | 263 | 69 | 263 | 69,65=264 | "E" |
1012+------+-------+----------------+----------+------------------+--------+
1013| 10 | 262 | 263 | 262 |65,66,67,69,67=256| "ABCE" |
1014+------+-------+----------------+----------+------------------+--------+
1015| 11 | | 262 | | | "CCA" |
1016+------+-------+----------------+----------+------------------+--------+
1017
1018Summary: The step 4 is an explicit example. The code to decode is 68 ("D" in
1019ASCII) and the new code is 256. The new word to add to the dictionary is the
1020letters of the first word plus the the first letter of the second code (code
1021256), i.e. 65 ("A" in ASCII) plus 68 ("D"). So the new word has the letters 68
1022and 65 ("AD").
1023
1024The step 6 is quite special. The first code to decode is referenced but the
1025second new code is not referenced being that the dictionary is limited to 260
1026referenced words. We have to make it as the second previously given case, it
1027means you must take the word to decode plus its first letter, i.e. "C"+"C"="CC".
1028Be care, if any encountered code is *upper* than the dictionary size plus 1, it
1029means you have a problem in your data and/or your codecs are...bad!
1030
1031Tricks to improve LZW encoding (but it becomes a non-standard encoding):
1032- To limit the dictionary to an high amount of words (4096 words maximum enable
1033you to encode a stream of a maximmum 7,370,880 letters with the same dictionary)
1034- To use a dictionary of less than 258 if possible (example, with 16 color
1035pictures, you start with a dictionary of 18 words)
1036- To not reinitialize a dictionary when it is full
1037- To reinitialize a dictionary with the most frequent of the previous dictionary
1038- To use the codes from (current dictionary size+1) to (maximum dictionary size)
1039because these codes are not used in the standard LZW scheme.
1040Such a compression scheme has been used (successfully) by Robin Watts
1041<ct93008@ox.ac.uk>.
1042
1043+==========================================================+
1044| Summary |
1045+==========================================================+
1046
1047-------------------------------------------------
1048RLE type 1:
1049Fastest compression. Good ratio for general purpose.
1050Doesn't need to read the data by twice.
1051Decoding fast.
1052-------------------------------------------------
1053RLE type 2:
1054Fast compression. Very good ratio in general (even for general purposes).
1055Need to read the data by twice.
1056Decoding fast.
1057-------------------------------------------------
1058RLE type 3:
1059Slowest compression. Good ratio on image file,quite middle for general purposes.
1060Need to read the data by twice.
1061Change line:
1062#define MAX_RASTER_SIZE 256
1063into:
1064#define MAX_RASTER_SIZE 16
1065to speed up the encoding (but the result decreases in ratio). If you compress
1066with memory buffers, do not modify this line...
1067Decoding fast.
1068-------------------------------------------------
1069RLE type 4:
1070Slow compression. Good ratio on image file, middle in general purposes.
1071Change line:
1072#define MAX_RASTER_SIZE 66
1073into:
1074#define MAX_RASTER_SIZE 16
1075to speed up the encoding (but the result decreases in ratio). If you compress
1076with memory buffers, do not modify this line...
1077Decoding fast.
1078-------------------------------------------------
1079Huffman:
1080Fast compression. Good ratio on text files and similar, middle for general
1081purposes. Interesting method to use to compress a buffer already compressed by
1082RLE types 1 or 2 methods...
1083Decoding fast.
1084-------------------------------------------------
1085LZW:
1086Quite fast compression. Good, see even very good ratio, for general purposes.
1087Bigger the data are, better the compression ratio is.
1088Decoding quite fast.
1089-------------------------------------------------
1090
1091The source codes work on all kinds of computers with a C compiler.
1092With the compiler, optimize the speed run option instead of space option.
1093With UNIX system, it's better to compile them with option -O.
1094If you don't use a GNU compiler, the source file MUST NOT have a size
1095over 4 Gb for RLE 2, 3, and Huffman, because I count the number
1096of occurrences of the bytes.
1097So, with GNU compilers, 'unsigned lont int' is 8 bytes instead of 4 bytes
1098(as normal C UNIX compilers and PCs' compilers, such as Microsoft C++
1099and Borland C++).
1100Actually:
1101* Normal UNIX compilers, => 4 Gb (unsigned long int = 4 bytes)
1102 Microsoft C++ and Borland C++ for PCs
1103* GNU UNIX compilers => 17179869184 Gb (unsigned long int = 8 bytes)
1104
1105+==========================================================+
1106| END |
1107+==========================================================+
diff --git a/baseline/source/huff_dec/huff_dec.c b/baseline/source/huff_dec/huff_dec.c
new file mode 100644
index 0000000..48bdf4b
--- /dev/null
+++ b/baseline/source/huff_dec/huff_dec.c
@@ -0,0 +1,393 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: huff_dec
7
8 Author: David Bourgin (David.Bourgin@ufrima.imag.fr)
9
10 Function: Example of Huffman decoding
11
12 Source: ftp://turing.imag.fr/pub/compression/ (1994-09-26)
13
14 Original name: dcodhuff.c
15
16 Changes: I/O to char arrays instead of file i/o.
17 Dynamic memory allocation replaced by array.
18
19 License:
20
21The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
22dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
23They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
24on 22/5/94 and have been modified on 22/9/94.
25(c) David Bourgin - 1994
26The source codes I provide have no buggs (!) but being that I make them
27available for free I have some notes to make. They can change at any time
28without notice. I assume no responsability or liability for any errors or
29inaccurracies, make no warranty of any kind (express, implied or statutory)
30with respect to this publication and expressly disclaim any and all warranties
31of merchantability, fitness for particular purposes. Of course, if you have
32some problems to use the information presented here, I will try to help you if
33I can.
34
35If you include the source codes in your application, here are the conditions:
36- You have to put my name in the header of your source file (not in the
37excutable program if you don't want) (this item is a must)
38- I would like to see your resulting application, if possible (this item is not
39a must, because some applications must remain secret)
40- Whenever you gain money with your application, I would like to receive a very
41little part in order to be encouraged to update my source codes and to develop
42new schemes (this item is not a must)
43
44*/
45
46
47/*
48 Declaration of types
49*/
50
51
52#include "../extra.h"
53typedef struct s_tree {
54 unsigned int byte; /* A byte has to be coded as an unsigned integer to
55 allow a node to have a value over 255 */
56 struct s_tree *left_ptr;
57 struct s_tree *right_ptr;
58} huff_dec_t_tree;
59
60typedef struct {
61 unsigned char bits[32];
62 unsigned int bits_nb;
63 unsigned char presence;
64} t_bin_val;
65
66
67/*
68 Forward declaration of functions
69*/
70
71void huff_dec_init( void );
72int huff_dec_return( void );
73int huff_dec_end_of_data();
74int huff_dec_read_byte();
75void huff_dec_write_byte( char ch );
76unsigned char huff_dec_read_code_1_bit();
77unsigned int huff_dec_read_code_n_bits( unsigned int n );
78void huff_dec_read_header( t_bin_val codes_table[257] );
79huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[257],
80 huff_dec_t_tree heap[514] );
81void huff_dec_main( void );
82//int main( void );
83
84
85/*
86 Declaration of global variables
87*/
88
89static int huff_dec_input_pos;
90static int huff_dec_output_pos;
91static char huff_dec_output[1024];
92unsigned char huff_dec_byte_nb_to_read = 0;
93unsigned int huff_dec_val_to_read = 0;
94
95
96/*
97 Initialization- and return-value-related functions
98*/
99
100#define huff_dec_plaintext_len 600
101static const char *huff_dec_plaintext =
102 "You are doubtless asking \"How can I reduce the data size without losing "
103 "some informations?\". It's easy to answer to this question. I'll only take "
104 "an example. I'm sure you have heard about the morse. This system established "
105 "in the 19th century use a scheme very close to the huffman one. In the morse "
106 "you encode the letters to transmit with two kinds of signs. If you encode "
107 "these two sign possibilities in one bit, the symbol 'e' is transmitted in a "
108 "single bit and the symbols 'y' and 'z' need four bits. Look at the symbols "
109 "in the text you are reading, you'll fast understand the compression ratio...";
110
111#define huff_dec_encoded_len 419
112static unsigned char huff_dec_encoded[huff_dec_encoded_len] = {
113 128, 0, 0, 0, 80, 133, 32, 32, 128, 100, 4, 32, 63, 239, 255, 240,
114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
115 4, 7, 167, 21, 129, 232, 69, 120, 132, 217, 20, 162, 19, 164, 39, 133,
116 252, 138, 105, 20, 194, 19, 129, 240, 172, 138, 248, 150, 11, 11, 240, 201,
117 68, 64, 114, 53, 17, 42, 37, 195, 128, 212, 116, 194, 41, 98, 52, 51,
118 12, 132, 112, 244, 3, 36, 33, 52, 39, 135, 164, 33, 62, 156, 87, 14,
119 110, 22, 87, 50, 85, 198, 99, 142, 140, 194, 81, 78, 158, 84, 129, 254,
120 129, 248, 110, 179, 159, 192, 145, 133, 184, 184, 28, 210, 96, 146, 73, 10,
121 226, 21, 83, 152, 74, 13, 111, 132, 199, 202, 219, 241, 74, 193, 167, 105,
122 222, 31, 147, 6, 55, 31, 129, 40, 232, 52, 153, 160, 148, 18, 36, 197,
123 45, 216, 202, 86, 30, 31, 177, 90, 133, 138, 248, 23, 81, 195, 160, 100,
124 215, 93, 50, 185, 225, 251, 23, 6, 230, 225, 229, 112, 71, 80, 96, 141,
125 205, 176, 230, 85, 196, 9, 24, 93, 90, 121, 225, 76, 68, 152, 63, 25,
126 107, 140, 101, 204, 214, 77, 26, 194, 96, 18, 48, 77, 210, 137, 1, 253,
127 4, 230, 248, 56, 240, 224, 111, 163, 95, 10, 12, 223, 7, 234, 167, 129,
128 40, 36, 96, 135, 125, 245, 250, 2, 198, 120, 127, 0, 145, 133, 213, 167,
129 135, 149, 195, 67, 235, 108, 9, 24, 87, 17, 102, 152, 37, 4, 222, 131,
130 188, 144, 73, 36, 128, 73, 20, 81, 152, 177, 133, 248, 28, 165, 131, 120,
131 127, 240, 242, 184, 104, 125, 109, 129, 35, 30, 4, 145, 65, 202, 88, 9,
132 138, 103, 44, 205, 100, 167, 24, 152, 11, 24, 51, 37, 66, 9, 24, 31,
133 174, 202, 212, 49, 152, 18, 96, 155, 208, 119, 146, 45, 97, 48, 56, 28,
134 194, 90, 224, 204, 144, 232, 176, 36, 96, 126, 187, 43, 83, 12, 121, 129,
135 209, 96, 197, 35, 2, 54, 176, 249, 92, 208, 204, 145, 188, 41, 170, 180,
136 71, 16, 36, 96, 126, 187, 43, 83, 19, 0, 145, 129, 100, 209, 15, 43,
137 135, 55, 6, 238, 180, 194, 90, 17, 229, 115, 21, 168, 251, 140, 131, 162,
138 217, 166, 93, 22, 4, 140, 31, 91, 166, 55, 25, 202, 192, 111, 20, 171,
139 207, 39, 192,
140};
141
142
143void huff_dec_init( void )
144{
145 huff_dec_input_pos = 0;
146 huff_dec_output_pos = 0;
147}
148
149
150int huff_dec_return( void )
151{
152 int i;
153 _Pragma( "loopbound min 1 max 600" )
154 for ( i = 0; i < huff_dec_plaintext_len; i++ ) {
155 if ( huff_dec_plaintext[i] != huff_dec_output[i] ) return i + 1;
156 }
157 return 0;
158}
159
160
161/*
162 Input / output functions
163*/
164
165int huff_dec_end_of_data()
166{
167 return huff_dec_input_pos >= huff_dec_encoded_len;
168}
169
170
171int huff_dec_read_byte()
172{
173 return huff_dec_encoded[huff_dec_input_pos++];
174}
175
176
177void huff_dec_write_byte( char ch )
178{
179 huff_dec_output[huff_dec_output_pos++] = ch;
180}
181
182
183unsigned char huff_dec_read_code_1_bit()
184/* Returned parameters: Returns an unsigned integer with the 0-bit (on the
185 right of the integer) valid
186 Action: Reads the next bit in the stream of data to compress
187 Errors: An input/output error could disturb the running of the program
188 The source must have enough bits to read
189*/
190{
191 if ( huff_dec_byte_nb_to_read ) {
192 huff_dec_byte_nb_to_read--;
193 return ( ( huff_dec_val_to_read >> huff_dec_byte_nb_to_read ) & 1 );
194 } else {
195 huff_dec_val_to_read = huff_dec_read_byte();
196 huff_dec_byte_nb_to_read = 7;
197 return ( ( huff_dec_val_to_read >> 7 ) & 1 );
198 }
199}
200
201
202unsigned int huff_dec_read_code_n_bits( unsigned int n )
203/* Returned parameters: Returns an unsigned integer with the n-bits (on the
204 right of the integer) valid
205 Action: Reads the next n bits in the stream of data to compress
206 Errors: An input/output error could disturb the running of the program
207 The source must have enough bits to read
208*/
209{
210 unsigned int result = 0;
211 unsigned i = n;
212
213 _Pragma ( "loopbound min 1 max 1" )
214 while ( i ) {
215 _Pragma ( "loopbound min 0 max 2" )
216 while ( ( huff_dec_byte_nb_to_read < 9 ) && ( !huff_dec_end_of_data() ) ) {
217 huff_dec_val_to_read = ( huff_dec_val_to_read << 8 ) + huff_dec_read_byte();
218 huff_dec_byte_nb_to_read += 8;
219 }
220 if ( i >= huff_dec_byte_nb_to_read ) {
221 result = ( result << huff_dec_byte_nb_to_read ) + huff_dec_val_to_read;
222 i -= huff_dec_byte_nb_to_read;
223 huff_dec_byte_nb_to_read = 0;
224 } else {
225 result = ( result << i ) + ( ( huff_dec_val_to_read >>
226 ( huff_dec_byte_nb_to_read - i ) ) & ( ( 1 << i ) - 1 ) );
227 huff_dec_byte_nb_to_read -= i;
228 i = 0;
229 }
230 }
231 return ( result );
232}
233
234
235void huff_dec_read_header( t_bin_val codes_table[257] )
236/* Returned parameters: The contain of 'codes_table' is modified
237 Action: Rebuilds the binary encoding array by using the header
238 Errors: An input/output error could disturb the running of the program
239*/
240{
241 unsigned int i, j;
242 unsigned num_byte;
243
244 _Pragma ( "loopbound min 257 max 257" )
245 for ( i = 0; i < 257; i++ ) {
246 codes_table[i].bits_nb = 0;
247 _Pragma ( "loopbound min 32 max 32" )
248 for ( j = 0; j < 32; j++ ) {
249 codes_table[i].bits[j] = 0;
250 }
251 }
252
253 /* == Decoding of the first part of the header === */
254 if ( huff_dec_read_code_1_bit() )
255 /* First bit=0 => Present bytes coded on n*8 bits
256 =1 => Present bytes coded on 256 bits */
257 _Pragma ( "loopbound min 256 max 256" )
258 for ( i = 0; i <= 255; i++ )
259 codes_table[i].presence = huff_dec_read_code_1_bit();
260 else {
261 i = huff_dec_read_code_n_bits( 5 ) + 1;
262 _Pragma ( "loopbound min 1 max 32" )
263 while ( i ) {
264 codes_table[huff_dec_read_code_n_bits( 8 )].presence = 1;
265 i--;
266 }
267 }
268 codes_table[256].presence = 1;
269 /* Presence of a fictive 256-byte is enforced! */
270
271 /* == Decoding the second part of the header == */
272 _Pragma ( "loopbound min 257 max 257" )
273 for ( i = 0; i <= 256; i++ )
274 if ( codes_table[i].presence ) {
275 if ( huff_dec_read_code_1_bit() )
276 /* First bit=0 => 5 bits of binary length-1 followed by a binary word
277 =1 => 8 bits of binary length-1 followed by a binary word */
278 j = huff_dec_read_code_n_bits( 8 ) + 1;
279 else j = huff_dec_read_code_n_bits( 5 ) + 1;
280 codes_table[i].bits_nb = j;
281 /* Reading of a binary word */
282 num_byte = ( j - 1 ) >> 3;
283 if ( j & 7 ) {
284 /* Reads the bits that takes less than one byte */
285 codes_table[i].bits[num_byte] =
286 ( unsigned char )huff_dec_read_code_n_bits( j & 7 );
287 j -= j & 7;
288 num_byte--;
289 }
290
291 _Pragma ( "loopbound min 0 max 1" )
292 while ( j >= 8 ) {
293 /* Reads the bits that takes one byte, at least */
294 codes_table[i].bits[num_byte] =
295 ( unsigned char )huff_dec_read_code_n_bits( 8 );
296 j -= 8;
297 num_byte--;
298 }
299 }
300}
301
302
303huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[257],
304 huff_dec_t_tree heap[514] )
305/* Returned parameters: A binary tree is returned
306 Action: Returns the decoding binary tree built from 'codes_table'
307 Errors: None
308*/
309{
310 unsigned int i;
311 unsigned int j;
312 unsigned int heap_top = 0;
313 huff_dec_t_tree *ptr_tree;
314 huff_dec_t_tree *current_node;
315
316 ptr_tree = &heap[heap_top++];
317 ptr_tree->byte = 257;
318 ptr_tree->left_ptr = 0;
319 ptr_tree->right_ptr = 0;
320 _Pragma ( "loopbound min 257 max 257" )
321 for ( i = 0; i <= 256; i++ ) {
322 _Pragma ( "loopbound min 0 max 9" )
323 for ( current_node = ptr_tree, j = codes_table[i].bits_nb; j; j-- ) {
324 if ( codes_table[i].bits[( j - 1 ) >> 3] & ( 1 << ( (
325 j - 1 ) & 7 ) ) )
326 if ( current_node->left_ptr == 0 ) {
327 current_node->left_ptr = &heap[heap_top++];
328 current_node = current_node->left_ptr;
329 current_node->left_ptr = 0;
330 current_node->right_ptr = 0;
331 } else current_node = current_node->left_ptr;
332 else
333 if ( current_node->right_ptr == 0 ) {
334 current_node->right_ptr = &heap[heap_top++];
335 current_node = current_node->right_ptr;
336 current_node->left_ptr = 0;
337 current_node->right_ptr = 0;
338 } else current_node = current_node->right_ptr;
339 if ( j == 1 )
340 current_node->byte = i;
341 else current_node->byte = 257;
342 }
343 };
344 return ( ptr_tree );
345}
346
347
348void _Pragma( "entrypoint" ) huff_dec_main( void )
349/* Returned parameters: None
350 Action: Decompresses with Huffman method all bytes read by the function
351 'read_code_1_bit' and 'read_code_n_bits'
352 Errors: An input/output error could disturb the running of the program
353*/
354{
355 t_bin_val encoding_table[257];
356 huff_dec_t_tree heap[514]; /* space for dynamically allocated nodes */
357 huff_dec_t_tree *ptr_tree;
358 huff_dec_t_tree *current_node;
359
360 if ( !huff_dec_end_of_data() ) { /* Are there data to compress? */
361 huff_dec_read_header( encoding_table );
362 ptr_tree = huff_dec_tree_encoding( encoding_table, heap );
363 _Pragma ( "loopbound min 602 max 602" )
364 do {
365 current_node = ptr_tree;
366 _Pragma ( "loopbound min 3 max 9" )
367 while ( current_node->byte == 257 )
368 if ( huff_dec_read_code_1_bit() )
369 /* Bit=1 => Got to left in the node of the tree
370 =0 => Got to right in the node of the tree */
371 current_node = current_node->left_ptr;
372 else current_node = current_node->right_ptr;
373 if ( current_node->byte <= 255 )
374 huff_dec_write_byte( current_node->byte );
375 } while ( current_node->byte != 256 );
376 }
377}
378
379
380int main( int argc, char **argv )
381{
382 //SET_UP
383 int jobsComplete;
384 int maxJobs=5;
385 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
386 // START_LOOP
387 huff_dec_init();
388 huff_dec_main();
389 // STOP_LOOP
390 }
391 //WRITE_TO_FILE
392 return ( huff_dec_return() );
393}
diff --git a/baseline/source/huff_enc/ChangeLog.txt b/baseline/source/huff_enc/ChangeLog.txt
new file mode 100644
index 0000000..020dc4f
--- /dev/null
+++ b/baseline/source/huff_enc/ChangeLog.txt
@@ -0,0 +1,27 @@
1File: huff_enc.c
2Original provenience: David Bourgin (David.Bourgin@ufrima.imag.fr)
3
42017-04-18:
5- Annotated huff_enc_main as entry-point for timing analysis
6
72016-03-24:
8- Replaced dynamic memory allocation by a fixed array with 514 entries
9- Replaced memset() with loops
10- Added source code for a special qsort() implementation without
11 function pointer
12- Replaced file I/O by reading and writing to char arrays
13- Added huff_dec_main(), huff_dec_init() and huff_dec_return()
14- Added huff_dec_ prefix to all functions, types and global variables
15- Changed function arguments to ANSI style
16- Replaced macro definitions
17- Added forward declarations of all functions
18- Added generic TACLeBench header replacing previous header
19- Included license from compress.txt
20- Applied code formatting with astyle
21
222016-05-24:
23- Changed type of j to unsigned to avoid warning
24- Removed static declarations
25
262016-05-25:
27- Precise types to avoid gcc++ warnings
diff --git a/baseline/source/huff_enc/compress.txt b/baseline/source/huff_enc/compress.txt
new file mode 100644
index 0000000..5966bcf
--- /dev/null
+++ b/baseline/source/huff_enc/compress.txt
@@ -0,0 +1,1107 @@
1+===========================================================+
2| Introduction to the losslessy compression schemes |
3| Description of the codec source codes |
4+-----------------------------------------------------------+
5| From David Bourgin (E-mail: david.bourgin@ufrima.imag.fr) |
6| Date: 22/9/94 |
7+===========================================================+
8
9 ------ BE CARE ------
10This file (compress.txt) is copyrighted. (c) David Bourgin - 1994
11Permission to use this documentation for any purpose other than
12its incorporation into a commercial product is hereby granted without fee.
13Permission to copy and distribute this documentation only for non-commercial use
14is also granted without fee, provided, however, that the above copyright notice
15appears in all copies, that both that copyright notice and this permission notice appear in supporting documentation. The author makes no representations about
16the suitability of this documentation for any purpose. It is provided "as is"
17without express or implied warranty.
18
19The source codes you obtain with this file are *NOT* covered by the same
20copyright, because you can include them for both commercial and non-commercial
21use. See below for more infos.
22
23The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
24dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
25They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
26on 22/5/94 and have been modified on 22/9/94.
27(c) David Bourgin - 1994
28The source codes I provide have no buggs (!) but being that I make them
29available for free I have some notes to make. They can change at any time
30without notice. I assume no responsability or liability for any errors or
31inaccurracies, make no warranty of any kind (express, implied or statutory)
32with respect to this publication and expressly disclaim any and all warranties
33of merchantability, fitness for particular purposes. Of course, if you have
34some problems to use the information presented here, I will try to help you if
35I can.
36
37If you include the source codes in your application, here are the conditions:
38- You have to put my name in the header of your source file (not in the
39excutable program if you don't want) (this item is a must)
40- I would like to see your resulting application, if possible (this item is not
41a must, because some applications must remain secret)
42- Whenever you gain money with your application, I would like to receive a very
43little part in order to be encouraged to update my source codes and to develop
44new schemes (this item is not a must)
45 ---------------------
46
47There are several means to compress data. Here, we are only going to deal with
48the losslessy schemes. These schemes are also called non-destructive because
49you always recover the initial data you had, and this, as soon as you need them.
50With losslessy schemes, you won't never lose any informations (except perhaps
51when you store or transmit your data but this is another problem...).
52
53In this introduction, we are going to see:
54- The RLE scheme (with different possible algorithms)
55- The Huffman schemes (dynamical scheme)
56- And the LZW scheme
57
58For the novice, a compresser is a program able to read several data (e.g. bytes)
59in input and to write several data in output. The data you obtain from the
60output (also called compressed data) will - of course - take less space than
61the the input data. This is true in most of cases, if the compresser works
62and if the type of the data is correct to be compressed with the given scheme.
63The codec (coder-decoder) enables you to save space on your hard disk and/or
64to save the communication costs because you always store/transmit the compressed
65data. You'll use the decompresser as soon as you need to recover your initial
66useful data. Note that the compressed data are useless if you have not
67the decoder...
68
69You are doubtless asking "How can I reduce the data size without losing some
70informations?". It's easy to answer to this question. I'll only take an example.
71I'm sure you have heard about the morse. This system established in the 19th
72century use a scheme very close to the huffman one. In the morse you encode
73the letters to transmit with two kinds of signs. If you encode these two sign
74possibilities in one bit, the symbol 'e' is transmitted in a single bit and
75the symbols 'y' and 'z' need four bits. Look at the symbols in the text you are
76reading, you'll fast understand the compression ratio...
77
78Important: The source codes associated to the algorithms I present are
79completely adaptative on what you need to compress. They all use basical
80macros on the top of the file. Usually the macros to change are:
81
82- beginning_of_data
83- end_of_data
84- read_byte
85- read_block
86- write_byte
87- write_block
88
89These allow the programmer to modify only a little part of the header
90of the source codes in order to compress as well memory as files.
91
92beginning_of_data(): Macro used to set the program so that the next read_byte()
93call will read the first byte to compress.
94end_of_data(): Returns a boolean to know whether there is no more bytes to read
95from the input stream. Return 0 if there is no more byte to compress, another
96non-zero value otherwise.
97read_byte(): Returns a byte read from the input stream if available.
98write_byte(x): Writes the byte 'x' to the output stream.
99read_block(...) and write_block(...): Same use as read_byte and write_byte(x)
100but these macros work on blocks of bytes and not only on a single byte.
101
102If you want to compress *from* the memory, before entering in a xxxcoding
103procedure ('xxx' is the actual extension to replace with a given codec), you
104have to add a pointer set up to the beginning of the zone to compress. Note
105that the following pointer 'source_memory_base' is not to add, it is just given
106here to specify a name to the address of the memory zone you are going to
107encode or decode. That is the same about source_memory_end which can be either
108a pointer to create or an existing pointer.
109
110unsigned char *source_memory_base, /* Base of the source memory */
111 *source_memory_end, /* Last address to read.
112 source_memory_end=source_memory_base+source_zone_length-1 */
113 *source_ptr; /* Used in the xxxcoding procedure */
114void pre_start()
115{ source_ptr=source_memory_base;
116 xxxcoding();
117}
118
119end_of_data() and read_byte() are also to modify to compress *from* memory:
120
121#define end_of_data() (source_ptr>source_memory_end)
122#define read_byte() (*(source_ptr++))
123
124If you want to compress *to* memory, before entering in a xxxcoding procedure
125('xxx' is the actual extension to replace with a given codec), you have to add
126a pointer. Note that the pointer 'dest_memory_base' is not to add, it is just
127given there to specify the address of the destination memory zone you are
128going to encode or decode.
129
130unsigned char *dest_memory_base, /* Base of the destination memory */
131 *dest_ptr; /* Used in the xxxcoding procedure */
132void pre_start()
133{ dest_ptr=dest_memory_base;
134 xxxcoding();
135}
136
137Of course, you can combine both from and to memory in the pre_start() procedure.
138The files dest_file and source_file handled in the main() function are
139to remove...
140
141void pre_start()
142{ source_ptr=source_memory_base;
143 dest_ptr=dest_memory_base;
144 xxxcoding();
145}
146
147In fact, to write to memory, the problem is in the write_byte(x) procedure.
148This problem exists because your destination zone can either be a static
149zone or a dynamically allocated zone. In the two cases, you have to check
150if there is no overflow, especially if the coder is not efficient and must
151produce more bytes than you reserved in memory.
152
153In the first case, with a *static* zone, write_byte(x) macro should look like
154that:
155
156unsigned long int dest_zone_length,
157 current_size;
158
159#define write_byte(x) { if (current_size==dest_zone_length) \
160 exit(1); \
161 dest_ptr[current_size++]=(unsigned char)(x); \
162 }
163
164In the static version, the pre_start() procedure is to modify as following:
165
166void pre_start()
167{ source_ptr=source_memory_base;
168 dest_ptr=dest_memory_base;
169 dest_zone_length=...; /* Set up to the actual destination zone length */
170 current_size=0; /* Number of written bytes */
171 xxxcoding();
172}
173Otherwise, dest_ptr is a zone created by the malloc instruction and you can try
174to resize the allocated zone with the realloc instruction. Note that I increment
175the zone one kilo-bytes by one kylo-bytes. You have to add two other variables:
176
177unsigned long int dest_zone_length,
178 current_size;
179
180#define write_byte(x) { if (current_size==dest_zone_length) \
181 { dest_zone_length += 1024; \
182 if ((dest_ptr=(unsigned char *)realloc(dest_ptr,dest_zone_length*sizeof(unsigned char)))==NULL) \
183 exit(1); /* You can't compress in memory \
184 => I exit but *you* can make a routine to swap on disk */ \
185 } \
186 dest_ptr[current_size++]=(unsigned char)(x); \
187 }
188
189With the dynamically allocated version, change the pre_start() routine as following:
190
191void pre_start()
192{ source_ptr=source_memory_base;
193 dest_ptr=dest_memory_base;
194 dest_zone_length=1024;
195 if ((dest_ptr=(unsigned char *)malloc(dest_zone_length*sizeof(unsigned char)))==NULL)
196 exit(1); /* You need at least 1 kb in the dynamical memory ! */
197 current_size=0; /* Number of written bytes */
198 xxxcoding();
199 /* Handle the bytes in dest_ptr but don't forget to free these bytes with:
200 free(dest_ptr);
201 */
202}
203
204The previously given macros work as:
205
206void demo() /* The file opening, closing and variables
207 must be set up by the calling procedure */
208{ unsigned char byte;
209 /* And not 'char byte' (!) */
210 while (!end_of_data())
211 { byte=read_byte();
212 printf("Byte read=%c\n",byte);
213 }
214}
215
216You must not change the rest of the program unless you're really sure and
217really need to do it!
218
219+==========================================================+
220| The RLE encoding |
221+==========================================================+
222
223RLE is an acronym that stands for Run Length Encoding. You may encounter it
224as an other acronym: RLC, Run Length Coding.
225
226The idea in this scheme is to recode your data with regard to the repetition
227frames. A frame is one or more bytes that occurr one or several times.
228
229There are several means to encode occurrences. So, you'll have several codecs.
230For example, you may have a sequence such as:
2310,0,0,0,0,0,255,255,255,2,3,4,2,3,4,5,8,11
232
233Some codecs will only deal with the repetitions of '0' and '255' but some other
234will deal with the repetitions of '0', '255', and '2,3,4'.
235
236You have to keep in your mind something important based on this example. A codec
237won't work on all the data you will try to compress. So, in case of non
238existence of sequence repetitions, the codecs based on RLE schemes must not
239display a message to say: "Bye bye". Actually, they will try to encode these
240non repeted data with a value that says "Sorry, I only make a copy of the inital
241input". Of course, a copy of the input data with an header in front of this copy
242will make a biggest output data but if you consider the whole data to compress,
243the encoding of repeated frames will take less space than the encoding
244of non-repeated frames.
245
246All of the algorithms with the name of RLE have the following look with three
247or four values:
248- Value saying if there's a repetition
249- Value saying how many repetitions (or non repetition)
250- Value of the length of the frame (useless if you just encode frame
251with one byte as maximum length)
252- Value of the frame to repeat (or not)
253
254I gave four algorithms to explain what I say.
255
256*** First RLE scheme ***
257
258The first scheme is the simpliest I know, and looks like the one used in MAC
259system (MacPackBit) and some image file formats such as Targa, PCX, TIFF, ...
260
261Here, all compressed blocks begin with a byte, named header, which description
262is:
263
264Bits 7 6 5 4 3 2 1 0
265Header X X X X X X X X
266
267Bits 7: Compression status (1=Compression applied)
268 0 to 6: Number of bytes to handle
269
270So, if the bit 7 is set up to 0, the 0 to 6 bits give the number of bytes
271that follow (minus 1, to gain more over compress) and that were not compressed
272(native bytes). If the bit 7 is set up to 1, the same 0 to 6 bits give
273the number of repetition (minus 2) of the following byte.
274
275As you see, this method only handle frame with one byte.
276
277Additional note: You have 'minus 1' for non-repeated frames because you must
278have at least one byte to compress and 'minus 2' for repeated frames because the
279repetition must be 2, at least.
280
281Compression scheme:
282
283 First byte=Next
284 /\
285 / \
286Count the byte Count the occurrence of NON identical
287occurrences bytes (maximum 128 times)
288(maximum 129 times) and store them in an array
289 | |
290 | |
291 1 bit '1' 1 bit '0'
292+ 7 bits giving + 7 bits giving
293 the number (-2) the number (-1)
294 of repetitions of non repetition
295+ repeated byte + n non repeated bytes
296 | |
297 1xxxxxxx,yyyyyyyy 0xxxxxxx,n bytes
298[-----------------] [----------------]
299
300Example:
301
302Sequence of bytes to encode | Coded values | Differences with compression
303 | | (unit: byte)
304-------------------------------------------------------------------------
305 255,15, | 1,255,15, | -1
306 255,255, | 128,255, | 0
307 15,15, | 128,15, | 0
308 255,255,255, | 129,255, | +1
309 15,15,15, | 129,15, | +1
310 255,255,255,255, | 130,255, | +2
311 15,15,15,15 | 130,15 | +2
312
313See codecs source codes: codrle1.c and dcodrle1.c
314
315*** Second RLE scheme ***
316
317In the second scheme of RLE compression you look for the less frequent byte
318in the source to compress and use it as an header for all compressed block.
319
320In the best cases, the occurrence of this byte is zero in the data to compress.
321
322Two possible schemes, firstly with handling frames with only one byte,
323secondly with handling frames with one byte *and* more. The first case is
324the subject of this current compression scheme, the second is the subject
325of next compression scheme.
326
327For the frame of one byte, header byte is written in front of all repetition
328with at least 4 bytes. It is then followed by the repetition number minus 1 and
329the repeated byte.
330Header byte, Occurrence number-1, repeated byte
331
332If a byte don't repeat more than tree times, the three bytes are written without
333changes in the destination stream (no header nor length, nor repetition in front
334or after theses bytes).
335
336An exception: If the header byte appears in the source one, two, three and up
337times, it'll be respectively encoded as following:
338- Header byte, 0
339- Header byte, 1
340- Header byte, 2
341- Header byte, Occurrence number-1, Header byte
342
343Example, let's take the previous example. A non frequent byte is zero-ASCII
344because it never appears.
345
346Sequence of bytes to encode | Coded values | Differences with compression
347 | | (unit: byte)
348-------------------------------------------------------------------------
349 255,15, | 255,15, | -1
350 255,255, | 255,255, | 0
351 15,15, | 15,15, | 0
352 255,255,255, | 255,255,255, | 0
353 15,15,15, | 15,15,15, | 0
354 255,255,255,255, | 0,3,255, | -1
355 15,15,15,15 | 0,3,15 | -1
356
357If the header would appear, we would see:
358
359Sequence of bytes to encode | Coded values | Differences with compression
360 | | (unit: byte)
361-------------------------------------------------------------------------
362 0, | 0,0, | +1
363 255, | 255, | 0
364 0,0, | 0,1, | 0
365 15, | 15, | 0
366 0,0,0, | 0,2, | -1
367 255, | 255, | 0
368 0,0,0,0 | 0,3,0 | -1
369
370See codecs source codes: codrle2.c and dcodrle2.c
371
372*** Third RLE scheme ***
373
374It's the same idea as the second scheme but we can encode frames with
375more than one byte. So we have three cases:
376
377- If it was the header byte, whatever is its occurrence, you encode it with:
378Header byte,0,number of occurrence-1
379- For frames which (repetition-1)*length>3, encode it as:
380Header byte, Number of frame repetition-1, frame length-1,bytes of frame
381- If no previous cases were detected, you write them as originally (no header,
382nor length, nor repetition in front or after theses bytes).
383
384Example based on the previous examples:
385
386Sequence of bytes to encode | Coded values | Differences with compression
387 | | (unit: byte)
388-----------------------------------------------------------------------------
389 255,15, | 255,15, | 0
390 255,255, | 255,255, | 0
391 15,15, | 15,15, | 0
392 255,255,255, | 255,255,255, | 0
393 15,15,15, | 15,15,15, | 0
394 255,255,255,255, | 255,255,255,255, | 0
395 15,15,15,15, | 15,15,15,15, | 0
396 16,17,18,16,17,18, |16,17,18,16,17,18,| 0
397 255,255,255,255,255, | 0,4,0,255, | -1
398 15,15,15,15,15, | 0,4,0,15, | -1
399 16,17,18,16,17,18,16,17,18,| 0,2,2,16,17,18, | -3
400 16,17,18,19,16,17,18,19 |0,1,3,16,17,18,19 | -1
401
402If the header (value 0) would be met, we would see:
403
404Sequence of bytes to encode | Coded values | Differences with compression
405 | | (unit: byte)
406--------------------------------------------------------------------------
407 0, | 0,0,0, | +2
408 255, | 255, | 0
409 0,0, | 0,0,1, | +1
410 15, | 15, | 0
411 0,0,0, | 0,0,2, | 0
412 255, | 255, | 0
413 0,0,0,0 | 0,0,3 | -1
414
415See codecs source codes: codrle3.c and dcodrle3.c
416
417*** Fourth RLE scheme ***
418
419This last RLE algorithm better handles repetitions of any kind (one byte
420and more) and non repetitions, including few non repetitions, and does not
421read the source by twice as RLE type 3.
422
423Compression scheme is:
424
425 First byte=Next byte?
426 /\
427 Yes / \ No
428 / \
429 1 bit '0' 1 bit '1'
430 / \
431 / \
432 Count the Motif of several
433 occurrences repeated byte?
434 of 1 repeated ( 65 bytes repeated
435 byte (maximum 257 times maxi)
436 16449 times) /\
437 /\ / \
438 / \ / \
439 / \ / \
440 / \ / \
441 1 bit '0' 1 bit '1' 1 bit '0' 1 bit '1'
442+ 6 bits + 14 bits + 6 bits of |
443giving the giving the the length Number of non repetition
444length (-2) length (-66) of the motif (maximum 8224)
445of the of the + 8 bits of /\
446repeated byte repeated byte the number (-2) < 33 / \ > 32
447+ repeated byte + repeated byte of repetition / \
448 | | + bytes of the 1 bit '0' 1 bit '1'
449 | | motif + 5 bits of + 13 bits
450 | | | the numer (-1) of the
451 | | | of non number (-33)
452 | | | repetition of repetition
453 | | | + non + non
454 | | | repeated repeated
455 | | | bytes bytes
456 | | | | |
457 | | | | 111xxxxx,xxxxxxxx,n bytes
458 | | | | [-------------------------]
459 | | | |
460 | | | 110xxxxx,n bytes
461 | | | [----------------]
462 | | |
463 | | 10xxxxxx,yyyyyyyy,n bytes
464 | | [-------------------------]
465 | |
466 | 01xxxxxx,xxxxxxxx,1 byte
467 | [------------------------]
468 |
469 00xxxxxx,1 byte
470[---------------]
471
472Example, same as previously:
473
474Sequence of bytes to encode | Coded values | Differences with compression
475 | | (unit: byte)
476--------------------------------------------------------------------------
477 255,15 | 11000001b,255,15, | +1
478 255,255 | 00000000b,255, | 0
479 15,15 | 00000000b,15, | 0
480 255,255,255 | 00000001b,255, | -1
481 15,15,15 | 00000001b,15, | -1
482 255,255,255,255 | 00000010b,255, | -2
483 15,15,15,15 | 00000010b,15, | -2
484 16,17,18,16,17,18 |10000001b,0,16,17,18,| -1
485 255,255,255,255,255 | 00000011b,255, | -3
486 15,15,15,15,15 | 00000011b,15, | -3
487 16,17,18,16,17,18,16,17,18 | 10000001b,16,17,18, | -4
488 16,17,18,19,16,17,18,19 |10000010b,16,17,18,19| -2
489
490+==========================================================+
491| The Huffman encoding |
492+==========================================================+
493
494This method comes from the searcher who established the algorithm in 1952.
495This method allows both a dynamic and static statistic schemes. A statistic
496scheme works on the data occurrences. It is not as with RLE where you had
497a consideration of the current occurrence of a frame but rather a consideration
498of the global occurrences of each data in the input stream. In this last case,
499frames can be any kinds of sequences you want. On the other hand, Huffman
500static encoding appears in some compressers such as ARJ on PCs. This enforces
501the encoder to consider every statistic as the same for all the data you have.
502Of course, the results are not as good as if it were a dynamic encoding.
503The static encoding is faster than the dynamic encoding but the dynamic encoding
504will be adapted to the statistic of the bytes of the input stream and will
505of course become more efficient by producing shortest output.
506
507The main idea in Huffman encoding is to re-code every byte with regard to its
508occurrence. The more frequent bytes in the data to compress will be encoded with
509less than 8 bits and the others could need 8 bits see even more to be encoded.
510You immediately see that the codes associated to the different bytes won't have
511identical size. The Huffman method will actually require that the binary codes
512have not a fixed size. We speak then about variable length codes.
513
514The dynamical Huffman scheme needs the binary trees for the encoding. This
515enables you to obtain the best codes, adapted to the source data.
516The demonstration won't be given there. To help the neophyt, I will just explain
517what is a binary tree.
518
519A binary tree is special fashion to represent the data. A binary tree is
520a structure with an associated value with two pointers. The term of binary has
521been given because of the presence of two pointers. Because of some conventions,
522one of the pointer is called left pointer and the second pointer is called right
523pointer. Here is a visual representation of a binary tree.
524
525 Value
526 / \
527 / \
528 Value Value
529 / \ / \
530... ... ... ...
531
532One problem with a binary encoding is a prefix problem. A prefix is the first
533part of the representation of a value, e.g. "h" and "he" are prefixes of "hello"
534but not "el". To understand the problem, let's code the letters "A", "B", "C",
535"D", and "E" respectively as 00b, 01b, 10b, 11b, and 100b. When you read
536the binary sequence 00100100b, you are unable to say if this comes from "ACBA"
537or "AEE". To avoid such situations, the codes must have a prefix property.
538And the letter "E" mustn't begin with the sequence of an other code. With "A",
539"B", "C", "D", and "E" respectively affected with 1b, 01b, 001b, 0001b, and
5400000b, the sequence 1001011b will only be decoded as "ACBA".
541
542 1 0
543<- /\ ->
544 / \
545 "A" /\
546 "B" \
547 /\
548 "C" \
549 /\
550 "D" "E"
551
552As you see, with this tree, an encoding will have the prefix property
553if the bytes are at the end of each "branch" and you have no byte at the "node".
554You also see that if you try to reach a character by the right pointer you add
555a bit set to 0 and by the left pointer, you add a bit set to 1 to the current
556code. The previous *bad* encoding provide the following bad tree:
557
558 /\
559 / \
560 / \
561 /\ /\
562 / \ "B" "A"
563 / \
564"D" "C"\
565 / \
566 "E"
567
568You see here that the coder shouldn't put the "C" at a node...
569
570As you see, the largest binary code are those with the longest distance
571from the top of the tree. Finally, the more frequent bytes will be the highest
572in the tree in order you have the shortest encoding and the less frequent bytes
573will be the lowest in the tree.
574
575From an algorithmic point of view, you make a list of each byte you encountered
576in the stream to compress. This list will always be sorted. The zero-occurrence
577bytes are removed from this list. You take the two bytes with the smallest
578occurrences in the list. Whenever two bytes have the same "weight", you take two
579of them regardless to their ASCII value. You join them in a node. This node will
580have a fictive byte value (256 will be a good one!) and its weight will be
581the sum of the two joined bytes. You replace then the two joined bytes with
582the fictive byte. And you continue so until you have one byte (fictive or not)
583in the list. Of course, this process will produce the shortest codes if the list
584remains sorted. I will not explain with arcana hard maths why the result
585is a set of the shortest bytes...
586
587Important: I use as convention that the right sub-trees have a weight greater
588or equal to the weight of the left sub-trees.
589
590Example: Let's take a file to compress where we notice the following
591occurrences:
592
593Listed bytes | Frequences (Weight)
594----------------------------------
595 0 | 338
596 255 | 300
597 31 | 280
598 77 | 24
599 115 | 21
600 83 | 20
601 222 | 5
602
603We will begin by joining the bytes 83 and 222. This will produce a fictive node
6041 with a weight of 20+5=25.
605
606(Fictive 1,25)
607 /\
608 / \
609(222,5) (83,20)
610
611Listed bytes | Frequences (Weight)
612----------------------------------
613 0 | 338
614 255 | 300
615 31 | 280
616 Fictive 1 | 25
617 77 | 24
618 115 | 21
619
620Note that the list is sorted... The smallest values in the frequences are 21 and
62124. That is why we will take the bytes 77 and 115 to build the fictive node 2.
622
623(Fictive 2,45)
624 /\
625 / \
626(115,21) (77,25)
627
628Listed bytes | Frequences (Weight)
629----------------------------------
630 0 | 338
631 255 | 300
632 31 | 280
633 Fictive 2 | 45
634 Fictive 1 | 25
635
636The nodes with smallest weights are the fictive 1 and 2 nodes. These are joined
637to build the fictive node 3 whose weight is 40+25=70.
638
639 (Fictive 3,70)
640 / \
641 / \
642 / \
643 /\ / \
644 / \ / \
645(222,5) (83,20) (115,21) (77,25)
646
647Listed bytes | Frequences (Weight)
648----------------------------------
649 0 | 338
650 255 | 300
651 31 | 280
652 Fictive 3 | 70
653
654The fictive node 3 is linked to the byte 31. Total weight: 280+70=350.
655
656 (Fictive 4,350)
657 / \
658 / \
659 / \
660 / \ (31,280)
661 / \
662 / \
663 /\ / \
664 / \ / \
665(222,5) (83,20) (115,21) (77,25)
666
667Listed bytes | Frequences (Weight)
668----------------------------------
669 Fictive 4 | 350
670 0 | 338
671 255 | 300
672
673As you see, being that we sort the list, the fictive node 4 has become the first
674of the list. We join the bytes 0 and 255 in a same fictive node, the number 5
675whose weight is 338+300=638.
676
677(Fictive 5,638)
678 /\
679 / \
680(255,300) (0,338)
681
682Listed bytes | Frequences (Weight)
683----------------------------------
684 Fictive 5 | 638
685 Fictive 4 | 350
686
687The fictive nodes 4 and 5 are finally joined. Final weight: 638+350=998 bytes.
688It is actually the total byte number in the initial file: 338+300+24+21+20+5.
689
690 (Tree,998)
691 1 / \ 0
692 <- / \ ->
693 / \
694 / \
695 / \
696 / \ / \
697 / \ / \
698 / \ / \
699 / \ (31,280) (255,300) (0,338)
700 / \
701 / \
702 /\ / \
703 / \ / \
704(222,5) (83,20) (115,21) (77,25)
705
706Bytes | Huffman codes | Frequences | Binary length*Frequence
707------------------------------------------------------------
708 0 | 00b | 338 | 676
709 255 | 01b | 300 | 600
710 31 | 10b | 280 | 560
711 77 | 1101b | 24 | 96
712 115 | 1100b | 21 | 84
713 83 | 1110b | 20 | 80
714 222 | 1111b | 5 | 20
715
716Results: Original file size: (338+300+280+24+21+20+5)*8=7904 bits (=998 bytes)
717versus 676+600+560+96+84+80+20=2116 bits, i.e. 2116/8=265 bytes.
718
719Now you know how to code an input stream. The last problem is to decode all this
720stuff. Actually, when you meet a binary sequence you can't say whether it comes
721from such byte list or such other one. Furthermore, if you change the occurrence
722of one or two bytes, you won't obtain the same resulting binary tree. Try for
723example to encode the previous list but with the following occurrences:
724
725Listed bytes | Frequences (Weight)
726----------------------------------
727 255 | 418
728 0 | 300
729 31 | 100
730 77 | 24
731 115 | 21
732 83 | 20
733 222 | 5
734
735As you can observe it, the resulting binary tree is quite different, we had yet
736the same initial bytes. To not be in such a situation we will put an header
737in front of all data. I can't comment longly this header but I can say
738I minimize it as much as I could. The header is divided into two parts.
739The first part of this header looks closely to a boolean table (coded more or
740less in binary to save space) and the second part provide to the decoder
741the binary code associated to each byte encountered in the original input
742stream.
743
744Here is a summary of the header:
745
746First part
747----------
748 First bit
749 / \
750 1 / \ 0
751 / \
752 256 bits set to 0 or 1 5 bits for the number n (minus 1)
753 depending whether the of bytes encountered
754 corresponding byte was in the file to compres
755 in the file to compress |
756 (=> n bits set to 1, \ /
757 n>32) n values of 8-bits (n<=32)
758 \ /
759 \ /
760 \ /
761Second part |
762----------- |
763 |
764 +------------->|
765(n+1) times | |
766(n bytes of | First bit?
767the values | / \
768encountered | 1 / \ 0
769in the | / \
770source file | 8 bits of 5 bits of the
771+ the code | the length length (-1)
772of a | (-1) of the of the following
773fictive | following binary
774byte | binary code code
775to stop the | (length>32) (length<=32)
776decoding. | \ /
777The fictive | \ /
778is set to | \ /
779256 in the | |
780Huffman | binary code
781-tree of | |
782encoding) +--------------|
783 |
784 Binary encoding of the source file
785 |
786 Code of end of encoding
787 |
788
789
790With my codecs I can handle binary sequences with a length of 256 bits.
791This correspond to encode all the input stream from one byte to infinite length.
792In fact if a byte had a range from 0 to 257 instead of 0 to 255, I would have a
793bug with my codecs with an input stream of at least 370,959,230,771,131,880,927,
794453,318,055,001,997,489,772,178,180,790,105 bytes !!!
795
796Where come this explosive number? In fact, to have a severe bug, I must have
797a completely unbalanced tree:
798
799 Tree
800 /\
801 \
802 /\
803 \
804 /\
805 \
806 ...
807 /\
808 \
809 /\
810
811Let's take the following example:
812
813Listed bytes | Frequences (Weight)
814----------------------------------
815 32 | 5
816 101 | 3
817 97 | 2
818 100 | 1
819 115 | 1
820
821This produces the following unbalanced tree:
822
823 Tree
824 /\
825(32,5) \
826 /\
827 (101,3) \
828 /\
829 (97,2) \
830 /\
831 (115,1) (100,1)
832
833Let's speak about a mathematical series: The Fibonacci series. It is defined as
834following:
835
836{ Fib(0)=0
837{ Fib(1)=1
838{ Fib(n)=Fib(n-2)+Fib(n-1)
839
840Fib(0)=0, Fib(1)=1, Fib(2)=1, Fib(3)=2, Fib(4)=3, Fib(5)=5, Fib(6)=8, Fib(7)=13,
841etc.
842
843But 1, 1, 2, 3, 5, 8 are the occurrences of our list! We can actually
844demonstrate that to have an unbalanced tree, we have to take a list with
845an occurrence based on the Fibonacci series (these values are minimal).
846If the data to compress have m different bytes, when the tree is unbalanced,
847the longest code need m-1 bits. In our little previous example where m=5,
848the longest codes are associated to the bytes 100 and 115, respectively coded
8490001b and 0000b. We can also say that to have an unbalanced tree we must have
850at least 5+3+2+1+1=12=Fib(7)-1. To conclude about all that, with a coder that
851uses m-1 bits, you must never have an input stream size over than Fib(m+2)-1,
852otherwise, there could be a bug in the output stream. Of course, with my codecs
853there will never be a bug because I can deal with binary code sizes of 1 to 256
854bits. Some encoder could use that with m=31, Fib(31+2)-1=3,524,577 and m=32,
855Fib(32+2)-1=5,702,886. And an encoder that uses unisgned integer of 32 bits
856shouldn't have a bug until about 4 Gb...
857
858+==========================================================+
859| The LZW encoding |
860+==========================================================+
861
862The LZW scheme is due to three searchers, i.e. Abraham Lempel and Jacob Ziv
863worked on it in 1977, and Terry Welch achieved this scheme in 1984.
864
865LZW is patented in USA. This patent, number 4,558,302, is covered by Unisys
866Corporation. You can usually write (without fees) software codecs which use
867the LZW scheme but hardware companies can't do so. You may get a limited
868licence by writting to:
869Welch Licencing Department
870Office of the General Counsel
871M/S C1SW19
872Unisys corporation
873Blue Bell
874Pennsylvania, 19424 (USA)
875
876If you're occidental, you are surely using an LZW encoding every time you are
877speaking, especially when you use a dictionary. Let's consider, for example,
878the word "Cirrus". As you read a dictionary, you begin with "A", "Aa", and so
879on. But a computer has no experience and it must suppose that some words
880already exist. That is why with "Cirrus", it supposes that "C", "Ci", "Cir",
881"Cirr", "Cirru", and "Cirrus" exist. Of course, being that this is a computer,
882all these words are encoded as index numbers. Every time you go forward, you add
883a new number associated to the new word. Being that a computer is byte-based
884and not alphabetic-based, you have an initial dictionary of 256 letters instead
885of our 26 ('A' to 'Z') letters.
886
887Example: Let's code "XYXYZ". First step, "X" is recognized in the initial
888dictionary of 256 letters as the 89th. Second step, "Y" is read. Does "XY"
889exist? No, then "XY" is stored as the word 256. You write in the output stream
890the ASCII of "X", i.e. 88. Now "YX" is tested as not referenced in the current
891dictionary. It is stored as the word 257. You write now in the output stream 89
892(ASCII of "Y"). "XY" is now met. But now "XY" is known as the reference 256.
893Being that "XY" exists, you test the sequence with one more letter, i.e. "XYZ".
894This last word is not referenced in the current dictionary. You write then the
895value 256. Finally, you reach the last letter ("Z"). You add "YZ" as the
896reference 258 but it is the last letter. That is why you just write the value
89790 (ASCII of "Z").
898
899Another encoding sample with the string "ABADABCCCABCEABCECCA".
900
901+----+-----+---------------+------+----------+-------------------------+------+
902|Step|Input|Dictionary test|Prefix|New symbol|Dictionary |Output|
903| | | | | |D0=ASCII with 256 letters| |
904+----+-----+---------------+------+----------+-------------------------+------+
905| 1 | "A" |"A" in D0 | "A" | "B" | D1=D0 | 65 |
906| | "B" |"AB" not in D0 | | | and "AB"=256 | |
907+----+-----+---------------+------+----------+-------------------------+------+
908| 2 | "A" |"B" in D1 | "B" | "A" | D2=D1 | 66 |
909| | |"BA" not in D1 | | | and "BA"=257 | |
910+----+-----+---------------+------+----------+-------------------------+------+
911| 3 | "D" |"A" in D2 | "A" | "D" | D3=D2 | 65 |
912| | |"AD" not in D2 | | | and "AD"=258 | |
913+----+-----+---------------+------+----------+-------------------------+------+
914| 4 | "A" |"D" in D3 | "D" | "A" | D4=D3 | 68 |
915| | |"DA" not in D3 | | | and "DA"=259 | |
916+----+-----+---------------+------+----------+-------------------------+------+
917| 5 | "B" |"A" in D4 | "AB" | "C" | D5=D4 | 256 |
918| | "C" |"AB" in D4 | | | and "ABC"=260 | |
919| | |"ABC" not in D4| | | | |
920+----+-----+---------------+------+----------+-------------------------+------+
921| 6 | "C" |"C" in D5 | "C" | "C" | D6=D5 | 67 |
922| | |"CC" not in D5 | | | and "CC"=261 | |
923+----+-----+---------------+------+----------+-------------------------+------+
924| 7 | "C" |"C" in D6 | "CC" | "A" | D7=D6 | 261 |
925| | "A" |"CC" in D6 | | | and "CCA"=262 | |
926| | |"CCA" not in D6| | | | |
927+----+-----+---------------+------+----------+-------------------------+------+
928| 8 | "B" |"A" in D7 | "ABC"| "E" | D8=D7 | 260 |
929| | "C" |"AB" in D7 | | | and "ABCE"=263 | |
930| | "E" |"ABC" in D7 | | | | |
931| | <"ABCE" not in D7| | | | |
932+----+-----+---------------+------+----------+-------------------------+------+
933| 9 | "A" |"E" in D8 | "E" | "A" | D9=D8 | 69 |
934| | |"EA" not in D8 | | | and "EA"=264 | |
935+----+-----+---------------+------+----------+-------------------------+------+
936| 10 | "B" |"A" in D9 |"ABCE"| "C" | D10=D9 | 263 |
937| | "C" |"AB" in D9 | | | and "ABCEC"=265 | |
938| | "E" |"ABC" in D9 | | | | |
939| | "C" |"ABCE" in D9 | | | | |
940| | <"ABCEC" not in D9> | | | |
941+----+-----+---------------+------+----------+-------------------------+------+
942| 11 | "C" |"C" in D10 | "CCA"| | | 262 |
943| | "A" |"CC" in D10 | | | | |
944| | <"CCA" not in D10| | | | |
945+----+-----+---------------+------+----------+-------------------------+------+
946
947You will notice a problem with the above output: How to write a code of 256
948(for example) on 8 bits? It's simple to solve this problem. You just say that
949the encoding starts with 9 bits and as you reach the 512th word, you use a
95010-bits encoding. With 1024 words, you use 11 bits; with 2048 words, 12 bits;
951and so on with all numbers of 2^n (n is positive). To better synchronize
952the coder and the decoder with all that, most of implementations use two
953additional references. The word 256 is a code of reinitialisation (the codec
954must reinitialize completely the current dictionary to its 256 initial letters)
955and the word 257 is a code of end of information (no more data to read).
956Of course, you start your first new word as the code number 258.
957
958You can also do so as in the GIF file format and start with an initial
959dictionary of 18 words to code an input stream with only letters coded on 4 bits
960(you start with codes of 5 bits in the output stream!). The 18 initial words
961are: 0 to 15 (initial letters), 16 (reinit the dictionary), and 17 (end of
962information). First new word has code 18, second word, code 19, ...
963
964Important: You can consider that your dictionary is limited to 4096 different
965words (as in GIF and TIFF file formats). But if your dictionary is full, you
966can decide to send old codes *without* reinitializing the dictionary. All the
967decoders must be compliant with this. This enables you to consider that it is
968not efficient to reinitialize the full dictionary. Instead of this, you don't
969change the dictionary and you send/receive (depending if it's a coder or a
970decoder) existing codes in the full dictionary.
971
972My codecs are able to deal as well with most of initial size of data in the
973initial dictionary as with full dictionary.
974
975Let's see how to decode an LZW encoding. We saw with true dynamical Huffman
976scheme that you needed an header in the encoding codes. Any header is useless
977in LZW scheme. When two successive bytes are read, the first must exist in the
978dictionary. This code can be immediately decoded and written in the output
979stream. If the second code is equal or less than the word number in the current
980dictionary, this code is decoded as the first one. At the opposite, if the
981second code is equal to the word number in dictionary plus one, this means you
982have to write a word composed with the word (the sentence, not the code number)
983of the last code plus the first character of the last code. In between, you make
984appear a new word. This new word is the one you just sent to the output stream,
985it means composed by all the letters of the word associated to the first code
986and the first letter of the word of the second code. You continue the processing
987with the second and third codes read in the input stream (of codes)...
988
989Example: Let's decode the previous encoding given a bit more above.
990
991+------+-------+----------------+----------+------------------+--------+
992| Step | Input | Code to decode | New code | Dictionary | Output |
993+------+-------+----------------+----------+------------------+--------+
994| 1 | 65 | 65 | 66 | 65,66=256 | "A" |
995| | 66 | | | | |
996+------+-------+----------------+----------+------------------+--------+
997| 2 | 65 | 66 | 65 | 66,65=257 | "B" |
998+------+-------+----------------+----------+------------------+--------+
999| 3 | 68 | 65 | 68 | 65,68=258 | "A" |
1000+------+-------+----------------+----------+------------------+--------+
1001| 4 | 256 | 68 | 256 | 68,65=259 | "D" |
1002+------+-------+----------------+----------+------------------+--------+
1003| 5 | 67 | 256 | 67 | 65,66,67=260 | "AB" |
1004+------+-------+----------------+----------+------------------+--------+
1005| 6 | 261 | 67 | 261 | 67,67=261 | "C" |
1006+------+-------+----------------+----------+------------------+--------+
1007| 7 | 260 | 261 | 260 | 67,67,65=262 | "CC" |
1008+------+-------+----------------+----------+------------------+--------+
1009| 8 | 69 | 260 | 69 | 65,66,67,69=263 | "ABC" |
1010+------+-------+----------------+----------+------------------+--------+
1011| 9 | 263 | 69 | 263 | 69,65=264 | "E" |
1012+------+-------+----------------+----------+------------------+--------+
1013| 10 | 262 | 263 | 262 |65,66,67,69,67=256| "ABCE" |
1014+------+-------+----------------+----------+------------------+--------+
1015| 11 | | 262 | | | "CCA" |
1016+------+-------+----------------+----------+------------------+--------+
1017
1018Summary: The step 4 is an explicit example. The code to decode is 68 ("D" in
1019ASCII) and the new code is 256. The new word to add to the dictionary is the
1020letters of the first word plus the the first letter of the second code (code
1021256), i.e. 65 ("A" in ASCII) plus 68 ("D"). So the new word has the letters 68
1022and 65 ("AD").
1023
1024The step 6 is quite special. The first code to decode is referenced but the
1025second new code is not referenced being that the dictionary is limited to 260
1026referenced words. We have to make it as the second previously given case, it
1027means you must take the word to decode plus its first letter, i.e. "C"+"C"="CC".
1028Be care, if any encountered code is *upper* than the dictionary size plus 1, it
1029means you have a problem in your data and/or your codecs are...bad!
1030
1031Tricks to improve LZW encoding (but it becomes a non-standard encoding):
1032- To limit the dictionary to an high amount of words (4096 words maximum enable
1033you to encode a stream of a maximmum 7,370,880 letters with the same dictionary)
1034- To use a dictionary of less than 258 if possible (example, with 16 color
1035pictures, you start with a dictionary of 18 words)
1036- To not reinitialize a dictionary when it is full
1037- To reinitialize a dictionary with the most frequent of the previous dictionary
1038- To use the codes from (current dictionary size+1) to (maximum dictionary size)
1039because these codes are not used in the standard LZW scheme.
1040Such a compression scheme has been used (successfully) by Robin Watts
1041<ct93008@ox.ac.uk>.
1042
1043+==========================================================+
1044| Summary |
1045+==========================================================+
1046
1047-------------------------------------------------
1048RLE type 1:
1049Fastest compression. Good ratio for general purpose.
1050Doesn't need to read the data by twice.
1051Decoding fast.
1052-------------------------------------------------
1053RLE type 2:
1054Fast compression. Very good ratio in general (even for general purposes).
1055Need to read the data by twice.
1056Decoding fast.
1057-------------------------------------------------
1058RLE type 3:
1059Slowest compression. Good ratio on image file,quite middle for general purposes.
1060Need to read the data by twice.
1061Change line:
1062#define MAX_RASTER_SIZE 256
1063into:
1064#define MAX_RASTER_SIZE 16
1065to speed up the encoding (but the result decreases in ratio). If you compress
1066with memory buffers, do not modify this line...
1067Decoding fast.
1068-------------------------------------------------
1069RLE type 4:
1070Slow compression. Good ratio on image file, middle in general purposes.
1071Change line:
1072#define MAX_RASTER_SIZE 66
1073into:
1074#define MAX_RASTER_SIZE 16
1075to speed up the encoding (but the result decreases in ratio). If you compress
1076with memory buffers, do not modify this line...
1077Decoding fast.
1078-------------------------------------------------
1079Huffman:
1080Fast compression. Good ratio on text files and similar, middle for general
1081purposes. Interesting method to use to compress a buffer already compressed by
1082RLE types 1 or 2 methods...
1083Decoding fast.
1084-------------------------------------------------
1085LZW:
1086Quite fast compression. Good, see even very good ratio, for general purposes.
1087Bigger the data are, better the compression ratio is.
1088Decoding quite fast.
1089-------------------------------------------------
1090
1091The source codes work on all kinds of computers with a C compiler.
1092With the compiler, optimize the speed run option instead of space option.
1093With UNIX system, it's better to compile them with option -O.
1094If you don't use a GNU compiler, the source file MUST NOT have a size
1095over 4 Gb for RLE 2, 3, and Huffman, because I count the number
1096of occurrences of the bytes.
1097So, with GNU compilers, 'unsigned lont int' is 8 bytes instead of 4 bytes
1098(as normal C UNIX compilers and PCs' compilers, such as Microsoft C++
1099and Borland C++).
1100Actually:
1101* Normal UNIX compilers, => 4 Gb (unsigned long int = 4 bytes)
1102 Microsoft C++ and Borland C++ for PCs
1103* GNU UNIX compilers => 17179869184 Gb (unsigned long int = 8 bytes)
1104
1105+==========================================================+
1106| END |
1107+==========================================================+
diff --git a/baseline/source/huff_enc/huff_enc.c b/baseline/source/huff_enc/huff_enc.c
new file mode 100644
index 0000000..2e739e6
--- /dev/null
+++ b/baseline/source/huff_enc/huff_enc.c
@@ -0,0 +1,589 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: huff_enc
7
8 Author: David Bourgin (David.Bourgin@ufrima.imag.fr)
9
10 Function: Example of Huffman encoding
11
12 Source: ftp://turing.imag.fr/pub/compression/ (1994-09-22)
13
14 Original name: codhuff.c
15
16 Changes: I/O to char arrays instead of file i/o.
17 Dynamic memory allocation replaced by array.
18 Explicit sorting algorithm.
19
20 License:
21
22The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c,
23dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted.
24They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression
25on 22/5/94 and have been modified on 22/9/94.
26(c) David Bourgin - 1994
27The source codes I provide have no buggs (!) but being that I make them
28available for free I have some notes to make. They can change at any time
29without notice. I assume no responsability or liability for any errors or
30inaccurracies, make no warranty of any kind (express, implied or statutory)
31with respect to this publication and expressly disclaim any and all warranties
32of merchantability, fitness for particular purposes. Of course, if you have
33some problems to use the information presented here, I will try to help you if
34I can.
35
36If you include the source codes in your application, here are the conditions:
37- You have to put my name in the header of your source file (not in the
38excutable program if you don't want) (this item is a must)
39- I would like to see your resulting application, if possible (this item is not
40a must, because some applications must remain secret)
41- Whenever you gain money with your application, I would like to receive a very
42little part in order to be encouraged to update my source codes and to develop
43new schemes (this item is not a must)
44
45*/
46
47
48/*
49 Declaration of types
50*/
51
52
53#include "../extra.h"
54typedef struct huff_enc_s_tree {
55 unsigned int byte; /* A byte has to be coded as an unsigned integer to
56 allow a node to have a value over 255 */
57 unsigned long int weight;
58 struct huff_enc_s_tree *left_ptr;
59 struct huff_enc_s_tree *right_ptr;
60} huff_enc_t_tree;
61
62typedef struct {
63 unsigned char bits[32];
64 unsigned int bits_nb;
65} huff_enc_t_bin_val;
66
67
68/*
69 Forward declaration of functions
70*/
71
72void huff_enc_init( void );
73int huff_enc_return( void );
74void huff_enc_beginning_of_data();
75int huff_enc_end_of_data();
76int huff_enc_read_byte();
77void huff_enc_write_byte( char ch );
78void huff_enc_write_bin_val( huff_enc_t_bin_val bin_val );
79void huff_enc_fill_encoding( void );
80void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] );
81int huff_enc_weighhuff_enc_t_tree_comp( const void *t1, const void *t2 );
82void huff_enc_swapi( char *ii, char *ij, unsigned long es );
83char *huff_enc_pivot( char *a, unsigned long n, unsigned long es );
84void huff_enc_qsort( char *a, unsigned long n, unsigned long es );
85huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] );
86void huff_enc_encode_codes_table( huff_enc_t_tree *tree,
87 huff_enc_t_bin_val codes_table[257], huff_enc_t_bin_val *code_val );
88void huff_enc_create_codes_table( huff_enc_t_tree *tree,
89 huff_enc_t_bin_val codes_table[257] );
90void huff_enc_main();
91//int main( void );
92
93
94/*
95 Declaration of global variables
96*/
97
98static int huff_enc_input_pos;
99static int huff_enc_output_pos;
100static unsigned char huff_enc_output[1024];
101static unsigned char huff_enc_byte_nb_to_write = 0;
102static unsigned char huff_enc_val_to_write = 0;
103
104
105/*
106 Initialization- and return-value-related functions
107*/
108
109#define huff_enc_plaintext_len 600
110static const char *huff_enc_plaintext =
111 "You are doubtless asking \"How can I reduce the data size without losing "
112 "some informations?\". It's easy to answer to this question. I'll only take "
113 "an example. I'm sure you have heard about the morse. This system established "
114 "in the 19th century use a scheme very close to the huffman one. In the morse "
115 "you encode the letters to transmit with two kinds of signs. If you encode "
116 "these two sign possibilities in one bit, the symbol 'e' is transmitted in a "
117 "single bit and the symbols 'y' and 'z' need four bits. Look at the symbols "
118 "in the text you are reading, you'll fast understand the compression ratio...";
119
120#define huff_enc_encoded_len 419
121static unsigned char huff_enc_encoded[huff_enc_encoded_len] = {
122 128, 0, 0, 0, 80, 133, 32, 32, 128, 100, 4, 32, 63, 239, 255, 240,
123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124 4, 7, 167, 21, 129, 232, 69, 120, 132, 217, 20, 162, 19, 164, 39, 133,
125 252, 138, 105, 20, 194, 19, 129, 240, 172, 138, 248, 150, 11, 11, 240, 201,
126 68, 64, 114, 53, 17, 42, 37, 195, 128, 212, 116, 194, 41, 98, 52, 51,
127 12, 132, 112, 244, 3, 36, 33, 52, 39, 135, 164, 33, 62, 156, 87, 14,
128 110, 22, 87, 50, 85, 198, 99, 142, 140, 194, 81, 78, 158, 84, 129, 254,
129 129, 248, 110, 179, 159, 192, 145, 133, 184, 184, 28, 210, 96, 146, 73, 10,
130 226, 21, 83, 152, 74, 13, 111, 132, 199, 202, 219, 241, 74, 193, 167, 105,
131 222, 31, 147, 6, 55, 31, 129, 40, 232, 52, 153, 160, 148, 18, 36, 197,
132 45, 216, 202, 86, 30, 31, 177, 90, 133, 138, 248, 23, 81, 195, 160, 100,
133 215, 93, 50, 185, 225, 251, 23, 6, 230, 225, 229, 112, 71, 80, 96, 141,
134 205, 176, 230, 85, 196, 9, 24, 93, 90, 121, 225, 76, 68, 152, 63, 25,
135 107, 140, 101, 204, 214, 77, 26, 194, 96, 18, 48, 77, 210, 137, 1, 253,
136 4, 230, 248, 56, 240, 224, 111, 163, 95, 10, 12, 223, 7, 234, 167, 129,
137 40, 36, 96, 135, 125, 245, 250, 2, 198, 120, 127, 0, 145, 133, 213, 167,
138 135, 149, 195, 67, 235, 108, 9, 24, 87, 17, 102, 152, 37, 4, 222, 131,
139 188, 144, 73, 36, 128, 73, 20, 81, 152, 177, 133, 248, 28, 165, 131, 120,
140 127, 240, 242, 184, 104, 125, 109, 129, 35, 30, 4, 145, 65, 202, 88, 9,
141 138, 103, 44, 205, 100, 167, 24, 152, 11, 24, 51, 37, 66, 9, 24, 31,
142 174, 202, 212, 49, 152, 18, 96, 155, 208, 119, 146, 45, 97, 48, 56, 28,
143 194, 90, 224, 204, 144, 232, 176, 36, 96, 126, 187, 43, 83, 12, 121, 129,
144 209, 96, 197, 35, 2, 54, 176, 249, 92, 208, 204, 145, 188, 41, 170, 180,
145 71, 16, 36, 96, 126, 187, 43, 83, 19, 0, 145, 129, 100, 209, 15, 43,
146 135, 55, 6, 238, 180, 194, 90, 17, 229, 115, 21, 168, 251, 140, 131, 162,
147 217, 166, 93, 22, 4, 140, 31, 91, 166, 55, 25, 202, 192, 111, 20, 171,
148 207, 39, 192,
149};
150
151
152void huff_enc_init( void )
153{
154 huff_enc_input_pos = 0;
155 huff_enc_output_pos = 0;
156}
157
158
159int huff_enc_return( void )
160{
161 int i;
162 _Pragma( "loopbound min 1 max 419" )
163 for ( i = 0; i < huff_enc_encoded_len; i++ ) {
164 if ( huff_enc_encoded[i] != huff_enc_output[i] ) return i + 1;
165 }
166 return 0;
167}
168
169
170/*
171 Input / output functions
172*/
173
174void huff_enc_beginning_of_data()
175{
176 huff_enc_input_pos = 0;
177}
178
179
180int huff_enc_end_of_data()
181{
182 return huff_enc_input_pos >= huff_enc_plaintext_len;
183}
184
185
186int huff_enc_read_byte()
187{
188 return huff_enc_plaintext[huff_enc_input_pos++];
189}
190
191
192void huff_enc_write_byte( char ch )
193{
194 huff_enc_output[huff_enc_output_pos++] = ch;
195}
196
197
198void huff_enc_write_bin_val( huff_enc_t_bin_val bin_val )
199/* Returned parameters: None
200 Action: Writes in the output stream the value binary-coded into 'bin_val'
201 Errors: An input/output error could disturb the running of the program
202*/
203{
204 unsigned char bit_indice;
205 unsigned char bin_pos = ( bin_val.bits_nb - 1 ) & 7;
206 unsigned int pos_byte = ( bin_val.bits_nb - 1 ) >> 3;
207
208 for ( bit_indice = 1;
209 bit_indice <= bin_val.bits_nb;
210 bit_indice++ ) {
211 /* Watch for the current bit to write */
212 huff_enc_val_to_write = ( huff_enc_val_to_write << 1 ) |
213 ( ( bin_val.bits[pos_byte] >> bin_pos ) & 1 );
214 /* Move to the next bit to write */
215 if ( !bin_pos ) {
216 pos_byte--;
217 bin_pos = 7;
218 } else bin_pos--;
219 if ( huff_enc_byte_nb_to_write == 7 ) {
220 /* Are already 8 bits written? */
221 huff_enc_write_byte( huff_enc_val_to_write );
222 huff_enc_byte_nb_to_write = 0;
223 huff_enc_val_to_write = 0;
224 } else /* No, then the next writting will be in the next bit */
225 huff_enc_byte_nb_to_write++;
226 }
227}
228
229
230void huff_enc_fill_encoding( void )
231/* Returned parameters: None
232 Action: Fills the last byte to write in the output stream with zero values
233 Errors: An input/output error could disturb the running of the program
234*/
235{
236 if ( huff_enc_byte_nb_to_write )
237 huff_enc_write_byte( huff_enc_val_to_write <<
238 ( 8 - huff_enc_byte_nb_to_write ) );
239}
240
241
242void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] )
243/* Returned parameters: None
244 Action: Writes the header in the stream of codes
245 Errors: An input/output error could disturb the running of the program
246*/
247{
248 unsigned int i, j;
249 huff_enc_t_bin_val bin_val_to_0;
250 huff_enc_t_bin_val bin_val_to_1;
251 huff_enc_t_bin_val bin_val;
252 /* Is used to send in binary mode via huff_enc_write_bin_val */
253
254 *bin_val_to_0.bits = 0;
255 bin_val_to_0.bits_nb = 1;
256 *bin_val_to_1.bits = 1;
257 bin_val_to_1.bits_nb = 1;
258 for ( i = 0, j = 0; j <= 255; j++ )
259 if ( codes_table[j].bits_nb ) i++;
260 /* From there, i contains the number of bytes of the several
261 non 0 occurrences to encode.
262 First part of the header: Specifies the bytes that appear
263 in the source of encoding */
264 if ( i < 32 ) {
265 /* Encoding of the appeared bytes with a block of bytes */
266 huff_enc_write_bin_val( bin_val_to_0 );
267 bin_val.bits_nb = 5;
268 *bin_val.bits = ( unsigned char )( i - 1 );
269 huff_enc_write_bin_val( bin_val );
270 bin_val.bits_nb = 8;
271 for ( j = 0; j <= 255; j++ )
272 if ( codes_table[j].bits_nb ) {
273 *bin_val.bits = ( unsigned char )j;
274 huff_enc_write_bin_val( bin_val );
275 }
276 } else {
277 /* Encoding of the appeared bytes with a block of bits */
278 huff_enc_write_bin_val( bin_val_to_1 );
279 for ( j = 0; j <= 255; j++ )
280 if ( codes_table[j].bits_nb )
281 huff_enc_write_bin_val( bin_val_to_1 );
282 else huff_enc_write_bin_val( bin_val_to_0 );
283 };
284 /* Second part of the header: Specifies the encoding of the bytes
285 (fictive or not) that appear in the source of encoding */
286 for ( i = 0; i <= 256; i++ )
287 if ( ( j = codes_table[i].bits_nb ) != 0 ) {
288 if ( j < 33 ) {
289 huff_enc_write_bin_val( bin_val_to_0 );
290 bin_val.bits_nb = 5;
291 } else {
292 huff_enc_write_bin_val( bin_val_to_1 );
293 bin_val.bits_nb = 8;
294 }
295 *bin_val.bits = ( unsigned char )( j - 1 );
296 huff_enc_write_bin_val( bin_val );
297 huff_enc_write_bin_val( codes_table[i] );
298 }
299}
300
301
302int huff_enc_weighhuff_enc_t_tree_comp( const void *t1, const void *t2 )
303/* Returned parameters: Returns a comparison status
304 Action: Returns a negative, zero or positive integer depending on the weight
305 of 'tree2' is less than, equal to, or greater than the weight of
306 'tree1'
307 Errors: None
308*/
309{
310 huff_enc_t_tree *const *tree1 = ( huff_enc_t_tree *const * ) t1;
311 huff_enc_t_tree *const *tree2 = ( huff_enc_t_tree *const * ) t2;
312 return ( ( *tree2 )->weight ^ ( *tree1 )->weight )
313 ? ( ( ( *tree2 )->weight < ( *tree1 )->weight ) ? -1 : 1 ) : 0;
314}
315
316
317void huff_enc_swapi( char *ii, char *ij, unsigned long es )
318{
319 char *i, *j, c;
320
321 i = ( char * )ii;
322 j = ( char * )ij;
323 _Pragma( "loopbound min 4 max 4" )
324 do {
325 c = *i;
326 *i++ = *j;
327 *j++ = c;
328 es -= sizeof( char );
329 } while ( es != 0 );
330}
331
332
333char *huff_enc_pivot( char *a, unsigned long n, unsigned long es )
334{
335 long j;
336 char *pi, *pj, *pk;
337
338 j = n / 6 * es;
339 pi = a + j; /* 1/6 */
340 j += j;
341 pj = pi + j; /* 1/2 */
342 pk = pj + j; /* 5/6 */
343 if ( huff_enc_weighhuff_enc_t_tree_comp( pi, pj ) < 0 ) {
344 if ( huff_enc_weighhuff_enc_t_tree_comp( pi, pk ) < 0 ) {
345 if ( huff_enc_weighhuff_enc_t_tree_comp( pj, pk ) < 0 )
346 return pj;
347 return pk;
348 }
349 return pi;
350 }
351 if ( huff_enc_weighhuff_enc_t_tree_comp( pj, pk ) < 0 ) {
352 if ( huff_enc_weighhuff_enc_t_tree_comp( pi, pk ) < 0 )
353 return pi;
354 return pk;
355 }
356 return pj;
357}
358
359
360void huff_enc_qsort( char *a, unsigned long n, unsigned long es )
361{
362 unsigned long j;
363 char *pi, *pj, *pn;
364 unsigned int flowfactdummy = 0;
365
366 _Pragma( "loopbound min 0 max 8" )
367 while ( n > 1 ) {
368 if ( n > 10 ) {
369 pi = huff_enc_pivot( a, n, es );
370 } else {
371 pi = a + ( n >> 1 ) * es;
372 }
373
374 huff_enc_swapi( a, pi, es );
375 pi = a;
376 pn = a + n * es;
377 pj = pn;
378 _Pragma( "loopbound min 1 max 110" )
379 while ( 1 ) {
380 /* wcc note: this assignment expression was added to avoid assignment of
381 * multiple loop bound annotations to same loop (cf. Ticket #0002323). */
382 flowfactdummy++;
383 _Pragma( "loopbound min 1 max 19" )
384 do {
385 pi += es;
386 } while ( pi < pn && huff_enc_weighhuff_enc_t_tree_comp( pi, a ) < 0 );
387 _Pragma( "loopbound min 1 max 25" )
388 do {
389 pj -= es;
390 } while ( pj > a && huff_enc_weighhuff_enc_t_tree_comp( pj, a ) > 0 );
391 if ( pj < pi )
392 break;
393 huff_enc_swapi( pi, pj, es );
394 }
395 huff_enc_swapi( a, pj, es );
396 j = ( pj - a ) / es;
397
398 n = n - j - 1;
399 if ( j >= n ) {
400 huff_enc_qsort( a, j, es );
401 a += ( j + 1 ) * es;
402 } else {
403 huff_enc_qsort( a + ( j + 1 )*es, n, es );
404 n = j;
405 }
406 }
407}
408
409
410huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] )
411/* Returned parameters: Returns a tree of encoding
412 Action: Generates an Huffman encoding tree based on the data from
413 the stream to compress
414 Errors: None
415*/
416{
417 unsigned int i;
418 unsigned int heap_top = 0;
419 huff_enc_t_tree *occurrences_table[257];
420 huff_enc_t_tree *ptr_fictive_tree;
421
422 /* Sets up the occurrences number of all bytes to 0 */
423 for ( i = 0; i <= 256; i++ ) {
424 occurrences_table[i] = &heap[heap_top++];
425 occurrences_table[i]->byte = i;
426 occurrences_table[i]->weight = 0;
427 occurrences_table[i]->left_ptr = 0;
428 occurrences_table[i]->right_ptr = 0;
429 }
430 /* Valids the occurrences of 'occurrences_table' with regard to the data to
431 compress */
432 if ( !huff_enc_end_of_data() ) {
433 while ( !huff_enc_end_of_data() ) {
434 i = huff_enc_read_byte();
435 occurrences_table[i]->weight++;
436 }
437 occurrences_table[256]->weight = 1;
438
439 /* Sorts the occurrences table depending on the weight of each character */
440 huff_enc_qsort( ( char * )occurrences_table, 257, sizeof( huff_enc_t_tree * ) );
441
442 for ( i = 256; ( i != 0 ) && ( !occurrences_table[i]->weight ); i-- )
443 ;
444 i++;
445 /* From there, 'i' gives the number of different bytes with a 0 occurrence
446 in the stream to compress */
447 while ( i > 0 ) {
448 /* Looks up (i+1)/2 times the occurrence table to link the nodes in an
449 unique tree */
450 ptr_fictive_tree = &heap[heap_top++];
451 ptr_fictive_tree->byte = 257;
452 ptr_fictive_tree->weight = occurrences_table[--i]->weight;
453 ptr_fictive_tree->left_ptr = occurrences_table[i];
454 if ( i ) {
455 i--;
456 ptr_fictive_tree->weight += occurrences_table[i]->weight;
457 ptr_fictive_tree->right_ptr = occurrences_table[i];
458 } else ptr_fictive_tree->right_ptr = 0;
459 occurrences_table[i] = ptr_fictive_tree;
460
461 //qsort( ( char * )occurrences_table, i + 1, sizeof( *huff_enc_t_tree ),
462 //huff_enc_weighhuff_enc_t_tree_comp );
463 huff_enc_qsort( ( char * )occurrences_table, i + 1,
464 sizeof( huff_enc_t_tree * ) );
465
466 if ( i ) /* Is there an other node in the occurrence tables? */
467 i++; /* Yes, then takes care to the fictive node */
468 }
469 }
470 return ( *occurrences_table );
471}
472
473
474void huff_enc_encode_codes_table( huff_enc_t_tree *tree,
475 huff_enc_t_bin_val codes_table[257],
476 huff_enc_t_bin_val *code_val )
477/* Returned parameters: The data of 'codes_table' can have been modified
478 Action: Stores the encoding tree as a binary encoding table to speed up the
479 access. 'val_code' gives the encoding for the current node of the tree
480 Errors: None
481*/
482{
483 unsigned int i;
484 huff_enc_t_bin_val tmp_code_val;
485
486 if ( tree->byte == 257 ) {
487 if ( tree->left_ptr != 0 )
488 /* The sub-trees on left begin with an bit set to 1 */
489 {
490 tmp_code_val = *code_val;
491 for ( i = 31; i > 0; i-- )
492 code_val->bits[i] = ( code_val->bits[i] << 1 ) |
493 ( code_val->bits[i - 1] >> 7 );
494 *code_val->bits = ( *code_val->bits << 1 ) | 1;
495 code_val->bits_nb++;
496 huff_enc_encode_codes_table( tree->left_ptr, codes_table, code_val );
497 *code_val = tmp_code_val;
498 };
499 if ( tree->right_ptr != 0 )
500 /* The sub-trees on right begin with an bit set to 0 */
501 {
502 tmp_code_val = *code_val;
503 for ( i = 31; i > 0; i-- )
504 code_val->bits[i] = ( code_val->bits[i] << 1 ) |
505 ( code_val->bits[i - 1] >> 7 );
506 *code_val->bits <<= 1;
507 code_val->bits_nb++;
508 huff_enc_encode_codes_table( tree->right_ptr, codes_table, code_val );
509 *code_val = tmp_code_val;
510 };
511 } else codes_table[tree->byte] = *code_val;
512}
513
514
515void huff_enc_create_codes_table( huff_enc_t_tree *tree,
516 huff_enc_t_bin_val codes_table[257] )
517/* Returned parameters: The data in 'codes_table' will be modified
518 Action: Stores the encoding tree as a binary encoding table to speed up
519 the access by calling encode_codes_table
520 Errors: None
521*/
522{
523 unsigned int i, j;
524 huff_enc_t_bin_val code_val;
525
526 _Pragma( "loopbound min 32 max 32" )
527 for ( i = 0; i < 32; i++ ) {
528 code_val.bits[i] = 0;
529 }
530 code_val.bits_nb = 0;
531 _Pragma( "loopbound min 257 max 257" )
532 for ( j = 0; j < 257; j++ ) {
533 _Pragma( "loopbound min 32 max 32" )
534 for ( i = 0; i < 32; i++ ) {
535 codes_table[j].bits[i] = 0;
536 }
537 codes_table[j].bits_nb = 0;
538 }
539 _Pragma( "marker call_encode" )
540 _Pragma( "flowrestriction 1*huff_enc_encode_codes_table <= 77*call_encode" )
541 huff_enc_encode_codes_table( tree, codes_table, &code_val );
542}
543
544
545void _Pragma( "entrypoint" ) huff_enc_main()
546/* Returned parameters: None
547 Action: Compresses with Huffman method all bytes read by the function
548 'huff_enc_read_byte'
549 Errors: None
550*/
551{
552 huff_enc_t_tree *tree;
553 huff_enc_t_tree heap[514];
554 huff_enc_t_bin_val encoding_table[257];
555 unsigned char byte_read;
556
557 if ( !huff_enc_end_of_data() ) {
558 /* Generates only whether there are data */
559 tree = huff_enc_build_tree_encoding( heap );
560 /* Creation of the best adapted tree */
561 huff_enc_create_codes_table( tree, encoding_table );
562 /* Obtains the binary encoding in an array to speed up the accesses */
563 huff_enc_write_header( encoding_table );
564 /* Writes the defintion of the encoding */
565 huff_enc_beginning_of_data(); /* Real compression of the data */
566 while ( !huff_enc_end_of_data() ) {
567 byte_read = huff_enc_read_byte();
568 huff_enc_write_bin_val( encoding_table[byte_read] );
569 }
570 huff_enc_write_bin_val( encoding_table[256] );
571 /* Code of the end of encoding */
572 huff_enc_fill_encoding();
573 /* Fills the last byte before closing file, if any */
574 }
575}
576
577
578int main( int argc, char **argv )
579{
580 SET_UP
581 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
582 START_LOOP
583 huff_enc_init();
584 huff_enc_main();
585 STOP_LOOP
586 }
587 WRITE_TO_FILE
588 return ( huff_enc_return() );
589}
diff --git a/baseline/source/litmusStuff.h b/baseline/source/litmusStuff.h
new file mode 100644
index 0000000..dca2360
--- /dev/null
+++ b/baseline/source/litmusStuff.h
@@ -0,0 +1,80 @@
1#include <time.h>
2#include <sys/mman.h>
3#include <stdlib.h>
4#include <stdio.h>
5#include <string.h>
6#include <signal.h>
7#include <limits.h>
8#include <../litmus.h>
9
10#define L3_CACHE_SIZE (11264*1024)
11
12#define SAVE_RESULTS if(jobsComplete>-1) progTime[jobsComplete]=(end.tv_nsec-start.tv_nsec)+(1000000000*(end.tv_sec-start.tv_sec));
13
14
15#define SET_UP char *thisProgram=argv[1];\
16 int maxJobs=atoi(argv[2]);\
17 char *thisCore=argv[3];\
18 char *otherCore=argv[4];\
19 char *otherProgram=argv[5];\
20 char *runID=argv[6];\
21 int output=atoi(argv[7]);\
22 struct timespec start, end;\
23 int jobsComplete;\
24 long progTime[maxJobs*output];\
25 char fileName[50];\
26 char *bigArray;\
27 strcpy(fileName, runID);\
28 strcat(fileName, ".txt");\
29 mlockall(MCL_CURRENT || MCL_FUTURE);
30
31#define WRITE_TO_FILE if (output){\
32 munlockall();\
33 FILE *fp=fopen(fileName, "a");\
34 for(jobsComplete=0; jobsComplete<maxJobs; jobsComplete++){\
35 fprintf(fp, "%s %s %s %s %d %ld %s %d \n",\
36 thisProgram, otherProgram, thisCore, otherCore, maxJobs,\
37 progTime[jobsComplete], runID, jobsComplete);\
38 }\
39 fclose(fp);\
40 }
41
42#define KILL_CACHE bigArray=(char *)malloc(L3_CACHE_SIZE);\
43if (bigArray==NULL) perror("Malloc failed.\n");\
44memset(bigArray, 1, L3_CACHE_SIZE);\
45munlock(bigArray, L3_CACHE_SIZE);\
46free(bigArray);\
47bigArray=NULL;
48
49
50
51//invoke start timer twice, stop timer to make sure timer and vars are in cache
52#define START_TIMER clock_gettime(CLOCK_MONOTONIC, &start);\
53 clock_gettime(CLOCK_MONOTONIC, &end);\
54 clock_gettime(CLOCK_MONOTONIC, &start);\
55
56#define STOP_TIMER clock_gettime(CLOCK_MONOTONIC, &end);
57
58
59#define START_LOOP START_TIMER
60
61#define STOP_LOOP if (output) {STOP_TIMER SAVE_RESULTS} sleep_next_period();
62
63
64/*
65Intended structure
66
67main
68SET_UP
69notice that STOP LOOP negates the ++ if outout=0
70for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
71 KILL_CACHE
72 START_TIMER
73 tacleInit();
74 tacleMain();
75 STOP_TIMER
76 SAVE_RESULTS
77}
78WRITE_TO_FILE
79tacleReturn
80*/
diff --git a/baseline/source/mpeg2/ChangeLog.txt b/baseline/source/mpeg2/ChangeLog.txt
new file mode 100644
index 0000000..f644576
--- /dev/null
+++ b/baseline/source/mpeg2/ChangeLog.txt
@@ -0,0 +1,35 @@
1File: mpeg2.c
2Original provenience: MediaBench II benchmark suite,
3 http://euler.slu.edu/~fritts/mediabench (mirror)
4
52015-11-05:
6- Removed original header comment, replaced by TACLeBench header.
7- Removed unnecessary preprocessor macros, integrated required preprocessor
8 macros directly in the source code.
9- Added prefix "mpeg2_" to all global symbols.
10- Added explicit forward declarations of functions.
11- Added TACLeBench-compliant initialization code.
12- Added new function mpeg2_return producing a checksum as return value.
13- Added new function mpeg2_main according to TACLeBench guidelines.
14 mpeg2_main is annotated as entry-point for timing analysis.
15- Applied code formatting according to the following rules
16 - Lines shall not be wider than 80 characters; whenever possible, appropriate
17 line breaks shall be inserted to keep lines below 80 characters
18 - Indentation is done using whitespaces only, no tabs. Code is indented by
19 two whitespaces
20 - Two empty lines are put between any two functions
21 - In non-empty lists or index expressions, opening '(' and '[' are followed by
22 one whitespace, closing ')' and ']' are preceded by one whitespace
23 - In comma- or colon-separated argument lists, one whitespace is put after
24 each comma/colon
25 - Names of functions and global variables all start with a benchmark-specific
26 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
27 - For pointer types, one whitespace is put before the '*'
28 - Operators within expressions shall be preceded and followed by one
29 whitespace
30 - Code of then- and else-parts of if-then-else statements shall be put in
31 separate lines, not in the same lines as the if-condition or the keyword
32 "else"
33 - Opening braces '{' denoting the beginning of code for some if-else or loop
34 body shall be put at the end of the same line where the keywords "if",
35 "else", "for", "while" etc. occur
diff --git a/baseline/source/mpeg2/mpeg2.c b/baseline/source/mpeg2/mpeg2.c
new file mode 100644
index 0000000..e89e1f9
--- /dev/null
+++ b/baseline/source/mpeg2/mpeg2.c
@@ -0,0 +1,13218 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: mpeg2
7
8 Author: MPEG Software Simulation Group
9
10 Function: This file contains MPEG 2 motion estimation code.
11
12 Source: MediaBench II
13 http://euler.slu.edu/~fritts/mediabench (mirror)
14
15 Original name: MPEG-2
16
17 Changes: For TACLeBench, the code has been changed such that input and
18 output arrays are scaled down so that the code plus its data fits to the
19 memories of typical resource-constrained embedded devices.
20
21 License: See the following disclaimer from the original source codes.
22
23 Disclaimer of Warranty
24
25 These software programs are available to the user without any license fee or
26 royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
27 any and all warranties, whether express, implied, or statuary, including any
28 implied warranties or merchantability or of fitness for a particular
29 purpose. In no event shall the copyright-holder be liable for any
30 incidental, punitive, or consequential damages of any kind whatsoever
31 arising from the use of these programs.
32
33 This disclaimer of warranty extends to the user of these programs and user's
34 customers, employees, agents, transferees, successors, and assigns.
35
36 The MPEG Software Simulation Group does not represent or warrant that the
37 programs furnished hereunder are free of infringement of any third-party
38 patents.
39
40 Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
41 are subject to royalty fees to patent holders. Many of these patents are
42 general enough such that they are unavoidable regardless of implementation
43 design.
44
45*/
46
47
48/*
49 Forward declaration of data types
50*/
51#include "../extra.h"
52struct mbinfo;
53
54
55/*
56 Forward declaration of functions
57*/
58
59void mpeg2_init( void );
60int mpeg2_return( void );
61void mpeg2_motion_estimation( unsigned char *, unsigned char *, unsigned char *,
62 unsigned char *, unsigned char *, unsigned char *,
63 int, int, int, int, struct mbinfo *, int, int );
64void mpeg2_frame_ME( unsigned char *, unsigned char *, unsigned char *,
65 unsigned char *, unsigned char *, int, int, int, int, int,
66 int, struct mbinfo * );
67void mpeg2_field_ME( unsigned char *, unsigned char *, unsigned char *,
68 unsigned char *, unsigned char *, unsigned char *, int,
69 int, int, int, int, int, struct mbinfo *, int, int );
70void mpeg2_frame_estimate( unsigned char *, unsigned char *, unsigned char *,
71 int, int, int, int, int *, int *, int *, int *,
72 int *, int *, int *, int *, int *, int *,
73 int[ 2 ][ 2 ], int[ 2 ][ 2 ] );
74void mpeg2_field_estimate( unsigned char *, unsigned char *, unsigned char *,
75 unsigned char *, unsigned char *, int, int, int, int,
76 int, int *, int *, int *, int *, int *, int *, int *,
77 int *, int *, int *, int *, int *, int *, int * );
78void mpeg2_dpframe_estimate( unsigned char *, unsigned char *, int, int,
79 int[ 2 ][ 2 ], int[ 2 ][ 2 ], int *, int *, int *,
80 int *, int *, int * );
81void mpeg2_dpfield_estimate( unsigned char *, unsigned char *, unsigned char *,
82 int, int, int, int, int *, int *, int *, int * );
83int mpeg2_fullsearch( unsigned char *, unsigned char *, unsigned char *, int,
84 int, int, int, int, int, int, int, int *, int * );
85int mpeg2_dist1( unsigned char *, unsigned char *, int, int, int, int, int );
86int mpeg2_dist2( unsigned char *, unsigned char *, int, int, int, int );
87int mpeg2_bdist1( unsigned char *, unsigned char *, unsigned char *, int, int,
88 int, int, int, int );
89int mpeg2_bdist2( unsigned char *, unsigned char *, unsigned char *, int, int,
90 int, int, int, int );
91int mpeg2_variance( unsigned char *, int );
92void mpeg2_main( void );
93//int main( void );
94
95
96/*
97 Declaration of global variables
98*/
99
100struct mbinfo {
101 int mb_type;
102 int motion_type;
103 int dct_type;
104 int mquant;
105 int cbp;
106 int skipped;
107 int MV[ 2 ][ 2 ][ 2 ];
108 int mv_field_sel[ 2 ][ 2 ];
109 int dmvector[ 2 ];
110 double act;
111 int var;
112};
113
114volatile int mpeg2_width = 352;
115volatile int mpeg2_height = 256;
116volatile int mpeg2_width2 = 352;
117volatile int mpeg2_height2 = 256;
118volatile int mpeg2_M = 3;
119volatile int mpeg2_pict_type = 3;
120volatile int mpeg2_pict_struct = 3;
121volatile int mpeg2_topfirst = 1;
122volatile int mpeg2_frame_pred_dct = 0;
123struct mbinfo mpeg2_mbinfo[ 352 ];
124
125unsigned char mpeg2_oldorgframe[] = {
126 0x9f, 0x9d, 0x9b, 0x9d, 0x9f, 0xa1, 0xa2, 0xa3,
127 0x9e, 0xa2, 0xa5, 0xa5, 0xa2, 0xa1, 0xa4, 0xa7,
128 0xa3, 0xa3, 0xa5, 0xa6, 0xa5, 0xa5, 0xa3, 0xa2,
129 0x9d, 0xa1, 0xa5, 0xa8, 0xa6, 0xa1, 0x9a, 0x95,
130 0x8e, 0x7e, 0x7a, 0x78, 0x70, 0x76, 0x7c, 0x73,
131 0x7d, 0x7a, 0x7a, 0x79, 0x7b, 0x83, 0x82, 0x74,
132 0x64, 0x57, 0x48, 0x5e, 0x7e, 0x84, 0x6f, 0x4a,
133 0x31, 0x43, 0x61, 0x81, 0x9b, 0xac, 0xb6, 0xb9,
134 0xb0, 0xa8, 0x9e, 0x9a, 0x9b, 0xa1, 0xaa, 0xb1,
135 0x9d, 0x83, 0x65, 0x49, 0x33, 0x30, 0x34, 0x32,
136 0x4b, 0x54, 0x68, 0x83, 0x99, 0x9f, 0x94, 0x87,
137 0x4f, 0x5e, 0x72, 0x7f, 0x75, 0x52, 0x23, 0x02,
138 0x1a, 0x24, 0x24, 0x1b, 0x14, 0x13, 0x1e, 0x30,
139 0x43, 0x60, 0x7b, 0x8a, 0x96, 0x9c, 0x97, 0x90,
140 0x99, 0x99, 0x92, 0x88, 0x7f, 0x80, 0x97, 0xb5,
141 0xa0, 0x94, 0x9a, 0x96, 0x66, 0x2d, 0x14, 0x12,
142 0x15, 0x17, 0x27, 0x1c, 0x15, 0x1e, 0x25, 0x3b,
143 0x7a, 0xa2, 0xbe, 0xbf, 0xb2, 0x9f, 0x9e, 0xaf,
144 0xba, 0x7b, 0x64, 0x8a, 0xa9, 0xa7, 0xa4, 0xaa,
145 0xa8, 0xab, 0xad, 0xab, 0xa7, 0xa6, 0xaa, 0xaf,
146 0xa4, 0xa6, 0xa9, 0xab, 0xac, 0xac, 0xaa, 0xa9,
147 0xa7, 0xaf, 0xba, 0xbc, 0xaf, 0x94, 0x75, 0x60,
148 0x7a, 0x85, 0x90, 0x9a, 0xa7, 0xa2, 0x7c, 0x50,
149 0x2f, 0x48, 0x65, 0x77, 0x7e, 0x8b, 0xa3, 0xb7,
150 0xae, 0x95, 0x7a, 0x6f, 0x75, 0x79, 0x73, 0x69,
151 0x56, 0x63, 0x6e, 0x6e, 0x6a, 0x6b, 0x72, 0x78,
152 0x65, 0x67, 0x61, 0x51, 0x3f, 0x36, 0x3b, 0x43,
153 0x33, 0x24, 0x25, 0x3d, 0x4d, 0x4b, 0x48, 0x4d,
154 0x57, 0x4b, 0x42, 0x47, 0x56, 0x62, 0x63, 0x5f,
155 0x60, 0x6d, 0x6f, 0x5b, 0x3f, 0x38, 0x4d, 0x67,
156 0x4c, 0x3c, 0x2d, 0x2f, 0x3a, 0x3e, 0x33, 0x25,
157 0x3b, 0x4e, 0x6d, 0x84, 0x82, 0x75, 0x71, 0x78,
158 0x7f, 0x78, 0x6c, 0x61, 0x5a, 0x58, 0x5a, 0x5d,
159 0x69, 0x64, 0x59, 0x4c, 0x41, 0x3c, 0x3f, 0x43,
160 0x32, 0x3c, 0x26, 0x26, 0x2f, 0x2b, 0x2e, 0x1f,
161 0x34, 0x8e, 0xbb, 0xaf, 0xae, 0xb0, 0xa7, 0xa8,
162 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
163 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
164 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
165 0xa8, 0xa5, 0xa4, 0xa5, 0xa7, 0xa7, 0xa5, 0xa4,
166 0xa0, 0xac, 0xa1, 0x97, 0xa7, 0xac, 0xa5, 0xa9,
167 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
168 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
169 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
170 0x8b, 0x86, 0x87, 0x8e, 0x95, 0x94, 0x90, 0x8d,
171 0x92, 0x94, 0x97, 0x9b, 0x9f, 0xa0, 0x9e, 0x9d,
172 0x99, 0x9b, 0x9e, 0x9d, 0x98, 0x8e, 0x83, 0x7c,
173 0x80, 0x7b, 0x76, 0x74, 0x78, 0x83, 0x8f, 0x97,
174 0x92, 0x8f, 0x99, 0xaf, 0xb8, 0xa8, 0x99, 0x9b,
175 0x97, 0xb9, 0xc0, 0xb5, 0xb2, 0x9e, 0x8a, 0x90,
176 0xa7, 0xc1, 0x9d, 0x6a, 0x56, 0x4a, 0x48, 0x4c,
177 0x58, 0x86, 0xb9, 0xca, 0xb8, 0xa1, 0x9c, 0xa1,
178 0xbd, 0xc1, 0xba, 0x99, 0x63, 0x30, 0x11, 0x06,
179 0x1b, 0x33, 0x5d, 0x7f, 0x91, 0xa7, 0xbf, 0xcb,
180 0xbb, 0xb5, 0xb1, 0xb2, 0xb5, 0xb0, 0xa2, 0x95,
181 0xca, 0xc3, 0xa6, 0x74, 0x4f, 0x5d, 0x99, 0xd1,
182 0xcb, 0xbb, 0xb0, 0x95, 0x69, 0x54, 0x52, 0x48,
183 0x5a, 0x51, 0x3d, 0x42, 0x5d, 0x64, 0x73, 0x9c,
184 0x9d, 0x91, 0x96, 0x9f, 0x9b, 0x98, 0x91, 0x7f,
185 0x64, 0x41, 0x15, 0x12, 0x39, 0x5f, 0x74, 0x83,
186 0x86, 0x80, 0x7b, 0x84, 0x8a, 0x7c, 0x5e, 0x41,
187 0x36, 0x42, 0x6f, 0xa7, 0xbb, 0xa8, 0x91, 0x89,
188 0x88, 0x98, 0xb2, 0xbc, 0xb2, 0xae, 0xb3, 0xb4,
189 0xb6, 0xb4, 0xb3, 0xb5, 0xb9, 0xbb, 0xbc, 0xbb,
190 0xb6, 0xb6, 0xb6, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2,
191 0x9d, 0x80, 0x61, 0x5e, 0x79, 0x9c, 0xb3, 0xbb,
192 0xca, 0xc1, 0xaf, 0xa3, 0xac, 0xb9, 0xaf, 0x98,
193 0x6e, 0x48, 0x2b, 0x41, 0x7a, 0xa5, 0xa7, 0x96,
194 0x9d, 0x87, 0x6e, 0x65, 0x6c, 0x72, 0x6e, 0x67,
195 0x66, 0x78, 0x7d, 0x76, 0x7f, 0x96, 0x99, 0x89,
196 0x6a, 0x78, 0x87, 0x8a, 0x80, 0x72, 0x6a, 0x68,
197 0x56, 0x5a, 0x59, 0x55, 0x55, 0x59, 0x5e, 0x60,
198 0x5a, 0x86, 0xb2, 0xb6, 0x92, 0x69, 0x57, 0x57,
199 0x6a, 0x59, 0x46, 0x3b, 0x39, 0x34, 0x29, 0x1f,
200 0x26, 0x25, 0x23, 0x21, 0x21, 0x26, 0x2e, 0x35,
201 0x5c, 0x6e, 0x7a, 0x74, 0x6c, 0x6f, 0x77, 0x7c,
202 0x6a, 0x67, 0x62, 0x5d, 0x5b, 0x5b, 0x5d, 0x5f,
203 0x54, 0x50, 0x4c, 0x4d, 0x4f, 0x49, 0x3c, 0x31,
204 0x35, 0x24, 0x2d, 0x2f, 0x2e, 0x2a, 0x22, 0x3a,
205 0x87, 0xaf, 0xb9, 0xab, 0xac, 0xb0, 0xac, 0xad,
206 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
207 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
208 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
209 0xac, 0xa6, 0xa2, 0xa5, 0xad, 0xb0, 0xac, 0xa6,
210 0xb1, 0xaa, 0x9d, 0x99, 0xa5, 0xad, 0xaa, 0xa7,
211 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
212 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
213 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
214 0x97, 0xa2, 0xa5, 0x9b, 0x93, 0x94, 0x97, 0x96,
215 0x8c, 0x84, 0x7c, 0x76, 0x73, 0x6f, 0x69, 0x63,
216 0x68, 0x6e, 0x79, 0x87, 0x94, 0x9e, 0xa6, 0xa9,
217 0xaa, 0xac, 0xaf, 0xb3, 0xb5, 0xb6, 0xb7, 0xb6,
218 0xaa, 0xab, 0x98, 0x90, 0xa3, 0xab, 0xa5, 0xa7,
219 0x9e, 0x91, 0x82, 0x7a, 0x85, 0xa2, 0xbb, 0xc0,
220 0xba, 0x79, 0x34, 0x26, 0x35, 0x53, 0x73, 0x75,
221 0x82, 0x83, 0x87, 0x8b, 0x89, 0x7d, 0x69, 0x59,
222 0x27, 0x1c, 0x0f, 0x0c, 0x17, 0x29, 0x39, 0x41,
223 0x3e, 0x3a, 0x3c, 0x39, 0x2d, 0x25, 0x21, 0x18,
224 0x2b, 0x29, 0x2e, 0x42, 0x60, 0x7b, 0x89, 0x8d,
225 0xae, 0x89, 0x6b, 0x7a, 0xab, 0xd3, 0xd9, 0xce,
226 0x92, 0x7e, 0x99, 0xba, 0xb8, 0xb8, 0xa3, 0x6e,
227 0x59, 0x67, 0x79, 0x76, 0x5d, 0x4f, 0x4c, 0x46,
228 0x5d, 0x6c, 0x73, 0x86, 0x99, 0x7c, 0x48, 0x34,
229 0x4c, 0x6d, 0x82, 0x81, 0x7b, 0x6d, 0x63, 0x67,
230 0x8d, 0x87, 0x77, 0x91, 0xa9, 0xa0, 0x8a, 0x61,
231 0x39, 0x1f, 0x32, 0x64, 0x79, 0x6e, 0x59, 0x46,
232 0x54, 0x74, 0x9f, 0xb7, 0xb8, 0xb8, 0xb6, 0xac,
233 0xad, 0xb7, 0xba, 0xa8, 0x8b, 0x79, 0x7c, 0x86,
234 0x83, 0x83, 0x84, 0x85, 0x88, 0x8c, 0x90, 0x92,
235 0x95, 0xa7, 0xbe, 0xcb, 0xcb, 0xc3, 0xbb, 0xb7,
236 0x9e, 0xa8, 0xaf, 0xb7, 0xc6, 0xce, 0xba, 0x9d,
237 0x5f, 0x55, 0x54, 0x6a, 0x8c, 0x9d, 0x95, 0x85,
238 0x79, 0x68, 0x56, 0x53, 0x5f, 0x6a, 0x6d, 0x6b,
239 0x85, 0x7c, 0x6b, 0x5c, 0x59, 0x56, 0x45, 0x31,
240 0x5f, 0x67, 0x6e, 0x70, 0x6c, 0x69, 0x6a, 0x6d,
241 0x6a, 0x79, 0x76, 0x5c, 0x52, 0x64, 0x76, 0x7a,
242 0x6a, 0x63, 0x5d, 0x5f, 0x63, 0x62, 0x58, 0x4e,
243 0x3e, 0x3b, 0x37, 0x36, 0x37, 0x37, 0x34, 0x31,
244 0x3d, 0x3a, 0x3e, 0x53, 0x6d, 0x7c, 0x78, 0x6f,
245 0x67, 0x66, 0x5e, 0x58, 0x5b, 0x62, 0x5d, 0x52,
246 0x56, 0x57, 0x58, 0x57, 0x54, 0x50, 0x4b, 0x48,
247 0x4a, 0x4d, 0x4e, 0x45, 0x39, 0x30, 0x30, 0x34,
248 0x22, 0x2d, 0x23, 0x29, 0x30, 0x1c, 0x3d, 0x8f,
249 0xb2, 0xb3, 0xb0, 0xad, 0xad, 0xaf, 0xad, 0xaa,
250 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
251 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
252 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
253 0xa9, 0xad, 0xab, 0xa4, 0xa3, 0xa9, 0xa6, 0x9e,
254 0xa4, 0xa4, 0xa1, 0xa3, 0xa8, 0xa8, 0xa8, 0xb0,
255 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
256 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
257 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
258 0xa6, 0xa3, 0xa0, 0x9f, 0xa2, 0xa4, 0xa0, 0x9b,
259 0x89, 0x90, 0x9d, 0xab, 0xb5, 0xb6, 0xb1, 0xab,
260 0xa7, 0xa6, 0xa3, 0x9c, 0x92, 0x86, 0x7c, 0x75,
261 0x78, 0x79, 0x7b, 0x7c, 0x7c, 0x7a, 0x79, 0x78,
262 0x8d, 0x95, 0x87, 0x79, 0x89, 0xa3, 0xae, 0xb2,
263 0x9e, 0x86, 0x88, 0x95, 0x97, 0x98, 0x7a, 0x42,
264 0x12, 0x2d, 0x4a, 0x85, 0xba, 0xbd, 0xac, 0x9f,
265 0xaf, 0x8c, 0x58, 0x2a, 0x18, 0x23, 0x3e, 0x54,
266 0x6e, 0x8b, 0xaa, 0xb5, 0xb5, 0xbb, 0xca, 0xd6,
267 0xca, 0xc1, 0xc3, 0xcc, 0xce, 0xc9, 0xb6, 0x9f,
268 0x88, 0x77, 0x61, 0x52, 0x48, 0x3d, 0x2e, 0x22,
269 0x24, 0x32, 0x51, 0x7d, 0xa2, 0xa9, 0x94, 0x7d,
270 0x9d, 0x8d, 0x93, 0x93, 0x7b, 0x75, 0x75, 0x5f,
271 0x33, 0x3f, 0x2c, 0x2d, 0x61, 0x7e, 0x74, 0x73,
272 0x52, 0x5f, 0x82, 0x7e, 0x48, 0x3f, 0x78, 0xa7,
273 0xa4, 0x94, 0x83, 0x6a, 0x52, 0x5a, 0x78, 0x8a,
274 0x85, 0x84, 0x7a, 0x7f, 0x83, 0x82, 0x86, 0x7f,
275 0x6a, 0x4c, 0x39, 0x3f, 0x51, 0x69, 0x79, 0x7a,
276 0x71, 0x6e, 0x77, 0x81, 0x80, 0x78, 0x69, 0x57,
277 0x4a, 0x4a, 0x54, 0x70, 0x94, 0xae, 0xb7, 0xb6,
278 0xb1, 0xb0, 0xb0, 0xb1, 0xb4, 0xb9, 0xbe, 0xc0,
279 0xba, 0xc3, 0xbe, 0x9f, 0x7a, 0x71, 0x8b, 0xab,
280 0xc3, 0xc2, 0xb6, 0xa7, 0xa4, 0xa6, 0x97, 0x80,
281 0x6c, 0x6f, 0x64, 0x49, 0x37, 0x4c, 0x85, 0xb8,
282 0xc4, 0xae, 0x91, 0x7b, 0x6f, 0x68, 0x5f, 0x58,
283 0x4a, 0x2c, 0x26, 0x3f, 0x46, 0x33, 0x32, 0x46,
284 0x57, 0x62, 0x72, 0x7e, 0x83, 0x82, 0x7e, 0x7b,
285 0x89, 0x92, 0x8f, 0x7a, 0x68, 0x60, 0x59, 0x51,
286 0x2c, 0x3f, 0x48, 0x37, 0x22, 0x2c, 0x59, 0x86,
287 0x71, 0x57, 0x42, 0x4b, 0x70, 0x96, 0xa7, 0xa9,
288 0x7d, 0x7d, 0x7e, 0x7d, 0x7b, 0x79, 0x76, 0x74,
289 0x73, 0x5c, 0x4a, 0x4d, 0x57, 0x5a, 0x58, 0x57,
290 0x53, 0x51, 0x4e, 0x4c, 0x4b, 0x4c, 0x4d, 0x4e,
291 0x50, 0x45, 0x37, 0x2d, 0x2a, 0x2a, 0x2c, 0x2c,
292 0x20, 0x27, 0x28, 0x26, 0x1d, 0x41, 0x91, 0xb8,
293 0xad, 0xa5, 0xab, 0xb2, 0xac, 0xaa, 0xac, 0xa6,
294 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
295 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
296 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
297 0xae, 0xa4, 0xa5, 0xaf, 0xb0, 0xa8, 0xa8, 0xb1,
298 0xa9, 0xa6, 0x9e, 0xa4, 0xb0, 0xa9, 0xa0, 0xa7,
299 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
300 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
301 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
302 0xa8, 0x9c, 0x9a, 0xa1, 0x9b, 0x8b, 0x86, 0x8f,
303 0xa6, 0xa6, 0xa6, 0xa3, 0xa0, 0xa0, 0xa3, 0xa6,
304 0xad, 0xa9, 0xa4, 0xa1, 0xa3, 0xa9, 0xb2, 0xb7,
305 0xaf, 0xaf, 0xad, 0xa9, 0xa4, 0x9e, 0x99, 0x96,
306 0x88, 0x75, 0x70, 0x73, 0x6f, 0x72, 0x81, 0x89,
307 0x94, 0xb7, 0xbf, 0x8e, 0x4b, 0x27, 0x31, 0x4d,
308 0x85, 0xa9, 0xb4, 0xb0, 0x99, 0x69, 0x48, 0x3d,
309 0x37, 0x49, 0x6b, 0x95, 0xb8, 0xca, 0xcc, 0xc7,
310 0xc3, 0xc4, 0xbd, 0xb0, 0xa9, 0xab, 0xac, 0xa9,
311 0xa4, 0xa0, 0xa4, 0xa9, 0xa9, 0xab, 0xab, 0xa4,
312 0x90, 0x8d, 0x8d, 0x96, 0xa2, 0xa6, 0xa0, 0x97,
313 0x7e, 0x7c, 0x67, 0x3d, 0x1d, 0x28, 0x5d, 0x8f,
314 0x6f, 0x6e, 0x75, 0x84, 0x8d, 0x82, 0x64, 0x4a,
315 0x3e, 0x35, 0x33, 0x38, 0x35, 0x27, 0x26, 0x33,
316 0x73, 0x6c, 0x3e, 0x21, 0x3d, 0x62, 0x79, 0x90,
317 0x80, 0x75, 0x6c, 0x5e, 0x51, 0x5e, 0x74, 0x7c,
318 0x7d, 0x81, 0x8b, 0x7e, 0x71, 0x73, 0x7a, 0x8d,
319 0x9c, 0x87, 0x60, 0x4c, 0x5e, 0x7a, 0x89, 0x8f,
320 0x92, 0x8b, 0x92, 0x97, 0x82, 0x6a, 0x6a, 0x74,
321 0x85, 0x85, 0x82, 0x7e, 0x79, 0x72, 0x6c, 0x68,
322 0x73, 0x71, 0x6d, 0x6a, 0x67, 0x64, 0x63, 0x63,
323 0x6b, 0x64, 0x61, 0x6a, 0x76, 0x79, 0x6f, 0x63,
324 0x58, 0x55, 0x46, 0x38, 0x42, 0x5c, 0x6a, 0x68,
325 0x6f, 0x75, 0x79, 0x76, 0x71, 0x73, 0x7f, 0x8b,
326 0x7c, 0x6e, 0x5c, 0x51, 0x4e, 0x51, 0x54, 0x55,
327 0x57, 0x44, 0x47, 0x5e, 0x5d, 0x4b, 0x57, 0x79,
328 0xb3, 0xb0, 0xab, 0xa5, 0x9d, 0x94, 0x8a, 0x83,
329 0x8a, 0x73, 0x5e, 0x58, 0x52, 0x48, 0x45, 0x49,
330 0x5d, 0x4f, 0x3f, 0x3b, 0x43, 0x4b, 0x4b, 0x48,
331 0x47, 0x58, 0x74, 0x8e, 0x92, 0x77, 0x48, 0x23,
332 0x44, 0x46, 0x4a, 0x51, 0x5b, 0x66, 0x70, 0x75,
333 0x5a, 0x56, 0x57, 0x5d, 0x5d, 0x5a, 0x5f, 0x6a,
334 0x66, 0x66, 0x66, 0x61, 0x58, 0x4c, 0x40, 0x39,
335 0x34, 0x30, 0x2c, 0x2b, 0x2c, 0x2c, 0x29, 0x27,
336 0x26, 0x1d, 0x30, 0x1c, 0x3c, 0x9c, 0xb4, 0xa9,
337 0xb0, 0xa7, 0xae, 0xb2, 0xa6, 0xa8, 0xae, 0xa6,
338 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
339 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
340 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
341 0xa3, 0xac, 0xb0, 0xac, 0xa8, 0xaa, 0xaf, 0xb1,
342 0xaf, 0xa4, 0xa3, 0xaa, 0xac, 0xa9, 0xaa, 0xab,
343 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
344 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
345 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
346 0x91, 0x9d, 0xa0, 0x93, 0x85, 0x88, 0x99, 0xa8,
347 0xa1, 0xa5, 0xa7, 0xa5, 0xa1, 0x9f, 0xa2, 0xa6,
348 0x98, 0x97, 0x97, 0x99, 0xa0, 0xa9, 0xb2, 0xb8,
349 0xb2, 0xb3, 0xb4, 0xb5, 0xb5, 0xb4, 0xb2, 0xb1,
350 0xbd, 0x9f, 0x9c, 0xa8, 0xa2, 0x92, 0x7a, 0x5d,
351 0x5e, 0x38, 0x1b, 0x1b, 0x3f, 0x82, 0xb5, 0xbe,
352 0x90, 0x80, 0x62, 0x48, 0x35, 0x49, 0x82, 0x9f,
353 0xc5, 0xc6, 0xc4, 0xbd, 0xb4, 0xac, 0xa9, 0xa8,
354 0xa0, 0xa7, 0xa6, 0x9e, 0x9c, 0xa4, 0xa7, 0xa4,
355 0x9e, 0x9e, 0xa6, 0xa9, 0xa3, 0xa2, 0xa6, 0xa3,
356 0x88, 0x85, 0x85, 0x8e, 0x99, 0x9b, 0x93, 0x8a,
357 0x9a, 0x9e, 0xa1, 0x99, 0x84, 0x65, 0x47, 0x33,
358 0x36, 0x53, 0x69, 0x6d, 0x64, 0x50, 0x44, 0x49,
359 0x3e, 0x37, 0x2c, 0x27, 0x2f, 0x42, 0x60, 0x7a,
360 0x4c, 0x2d, 0x34, 0x49, 0x3d, 0x34, 0x45, 0x54,
361 0x67, 0x6f, 0x62, 0x51, 0x5b, 0x6c, 0x71, 0x73,
362 0x78, 0x75, 0x81, 0x75, 0x6d, 0x73, 0x6e, 0x7c,
363 0x79, 0x68, 0x4d, 0x50, 0x77, 0x8e, 0x8f, 0x91,
364 0x81, 0x8e, 0x8a, 0x6c, 0x5d, 0x75, 0x8e, 0x8c,
365 0x85, 0x88, 0x8b, 0x8d, 0x8b, 0x89, 0x86, 0x85,
366 0x85, 0x86, 0x86, 0x85, 0x82, 0x7e, 0x79, 0x76,
367 0x70, 0x75, 0x79, 0x77, 0x70, 0x6b, 0x6b, 0x6e,
368 0x60, 0x6b, 0x6e, 0x68, 0x69, 0x71, 0x6e, 0x61,
369 0x6e, 0x68, 0x67, 0x73, 0x82, 0x82, 0x6f, 0x5b,
370 0x69, 0x5e, 0x4e, 0x41, 0x3b, 0x3c, 0x41, 0x45,
371 0x5b, 0x68, 0x6d, 0x66, 0x62, 0x6f, 0x81, 0x8c,
372 0x82, 0x77, 0x6c, 0x69, 0x71, 0x7d, 0x85, 0x89,
373 0x6c, 0x50, 0x42, 0x4f, 0x5a, 0x57, 0x58, 0x62,
374 0x32, 0x30, 0x31, 0x38, 0x44, 0x4d, 0x50, 0x50,
375 0x46, 0x50, 0x53, 0x45, 0x32, 0x30, 0x43, 0x59,
376 0x2b, 0x45, 0x62, 0x69, 0x59, 0x41, 0x31, 0x2b,
377 0x3d, 0x4a, 0x54, 0x57, 0x59, 0x5e, 0x5c, 0x56,
378 0x58, 0x5b, 0x5d, 0x5c, 0x55, 0x49, 0x3d, 0x35,
379 0x25, 0x2c, 0x31, 0x2e, 0x25, 0x20, 0x22, 0x26,
380 0x23, 0x20, 0x27, 0x37, 0x81, 0xbb, 0xad, 0xb0,
381 0xab, 0xa5, 0xaa, 0xae, 0xa8, 0xac, 0xaf, 0xa4,
382 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
383 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
384 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
385 0xac, 0xac, 0xa5, 0x9e, 0xa7, 0xb2, 0xab, 0x99,
386 0x8e, 0x7d, 0x88, 0x9a, 0x9a, 0xa7, 0xb3, 0xa6,
387 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
388 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
389 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
390 0x97, 0x9a, 0x91, 0x82, 0x87, 0x9d, 0xa6, 0x9f,
391 0xa3, 0xa1, 0x9f, 0x9d, 0x9d, 0x9f, 0xa3, 0xa7,
392 0xac, 0xae, 0xb0, 0xab, 0x9d, 0x89, 0x75, 0x68,
393 0x68, 0x65, 0x61, 0x62, 0x69, 0x76, 0x84, 0x8d,
394 0x9f, 0x9f, 0xa9, 0xaf, 0x9b, 0x71, 0x44, 0x26,
395 0x20, 0x2b, 0x73, 0xb5, 0xc1, 0xc5, 0xa8, 0x62,
396 0x51, 0x64, 0x59, 0x6b, 0xa2, 0xbe, 0xbe, 0xb8,
397 0xa6, 0xa6, 0xa4, 0xa2, 0xa1, 0xa3, 0xa5, 0xa7,
398 0xa5, 0xa7, 0x9f, 0x92, 0x93, 0xa2, 0xaa, 0xa7,
399 0x9b, 0x98, 0x9d, 0xa2, 0xa1, 0xa6, 0xab, 0xa8,
400 0x92, 0x85, 0x76, 0x6f, 0x71, 0x71, 0x6c, 0x65,
401 0x75, 0x82, 0x91, 0x95, 0x89, 0x72, 0x5a, 0x4c,
402 0x36, 0x36, 0x41, 0x48, 0x42, 0x3c, 0x34, 0x26,
403 0x1f, 0x38, 0x24, 0x32, 0x80, 0x87, 0x44, 0x24,
404 0x1a, 0x37, 0x3c, 0x2f, 0x2d, 0x2e, 0x2f, 0x36,
405 0x45, 0x5a, 0x5f, 0x58, 0x5c, 0x61, 0x63, 0x69,
406 0x53, 0x4f, 0x50, 0x53, 0x5b, 0x65, 0x67, 0x69,
407 0x71, 0x5e, 0x4f, 0x59, 0x73, 0x84, 0x87, 0x87,
408 0x80, 0x68, 0x6b, 0x84, 0x87, 0x7a, 0x7b, 0x85,
409 0x81, 0x83, 0x86, 0x8a, 0x8e, 0x8d, 0x89, 0x85,
410 0x84, 0x89, 0x90, 0x95, 0x96, 0x92, 0x8c, 0x88,
411 0x7e, 0x6f, 0x63, 0x67, 0x76, 0x7e, 0x78, 0x6e,
412 0x6f, 0x79, 0x79, 0x6b, 0x65, 0x69, 0x65, 0x5a,
413 0x71, 0x7b, 0x86, 0x8b, 0x87, 0x7f, 0x78, 0x75,
414 0x7e, 0x73, 0x61, 0x4c, 0x3d, 0x38, 0x3b, 0x3f,
415 0x4c, 0x5c, 0x5a, 0x4b, 0x51, 0x6d, 0x7c, 0x76,
416 0x7a, 0x7b, 0x80, 0x8c, 0x96, 0x94, 0x88, 0x7b,
417 0x67, 0x70, 0x81, 0x8f, 0x8c, 0x77, 0x5d, 0x4d,
418 0x3b, 0x45, 0x4e, 0x4c, 0x40, 0x34, 0x2e, 0x2e,
419 0x34, 0x38, 0x41, 0x4d, 0x52, 0x4b, 0x3a, 0x2c,
420 0x48, 0x43, 0x3f, 0x40, 0x45, 0x4b, 0x50, 0x52,
421 0x50, 0x4c, 0x41, 0x3b, 0x43, 0x51, 0x53, 0x4c,
422 0x59, 0x51, 0x45, 0x3a, 0x32, 0x30, 0x31, 0x33,
423 0x36, 0x2c, 0x22, 0x20, 0x23, 0x25, 0x22, 0x1d,
424 0x24, 0x20, 0x48, 0x80, 0x99, 0xa6, 0xb3, 0xb6,
425 0xa2, 0xa0, 0xa5, 0xad, 0xad, 0xac, 0xac, 0xaa,
426 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
427 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
428 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
429 0xa9, 0xa7, 0xad, 0xad, 0x92, 0x74, 0x7a, 0x95,
430 0x99, 0x9d, 0x9b, 0x8e, 0x84, 0x8a, 0x9b, 0xa9,
431 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
432 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
433 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
434 0x8b, 0x7f, 0x81, 0x95, 0xa5, 0xa5, 0xa2, 0xa4,
435 0xa3, 0xa3, 0xa5, 0xa8, 0xa8, 0xa2, 0x96, 0x8d,
436 0x5c, 0x56, 0x4f, 0x4d, 0x55, 0x66, 0x78, 0x84,
437 0x8f, 0x90, 0x90, 0x8e, 0x86, 0x7b, 0x70, 0x69,
438 0x6a, 0x73, 0x75, 0x68, 0x42, 0x1e, 0x41, 0x8e,
439 0x9a, 0x98, 0xa1, 0xa8, 0xa7, 0xaa, 0xa0, 0x86,
440 0x9d, 0x87, 0x80, 0xa5, 0xba, 0xac, 0xa6, 0xa4,
441 0xa5, 0xa5, 0xa5, 0xa4, 0xa3, 0xa3, 0xa4, 0xa6,
442 0xa4, 0xa2, 0x97, 0x8c, 0x93, 0xa5, 0xa8, 0x9f,
443 0xa2, 0xa3, 0xaa, 0xac, 0xa3, 0xa1, 0xa3, 0xa0,
444 0x8d, 0x76, 0x57, 0x43, 0x3e, 0x40, 0x40, 0x3e,
445 0x47, 0x43, 0x42, 0x4a, 0x55, 0x57, 0x4e, 0x43,
446 0x38, 0x28, 0x36, 0x3a, 0x22, 0x27, 0x35, 0x25,
447 0x3a, 0x29, 0x84, 0xaa, 0x52, 0x55, 0x94, 0x7c,
448 0x89, 0x77, 0x6e, 0x69, 0x54, 0x39, 0x2c, 0x29,
449 0x2e, 0x22, 0x26, 0x33, 0x35, 0x38, 0x3f, 0x3e,
450 0x40, 0x45, 0x3e, 0x4c, 0x56, 0x58, 0x66, 0x61,
451 0x5e, 0x53, 0x51, 0x52, 0x53, 0x67, 0x7f, 0x84,
452 0x6d, 0x6d, 0x6f, 0x6e, 0x6f, 0x7a, 0x7f, 0x76,
453 0x69, 0x68, 0x6d, 0x78, 0x86, 0x8c, 0x88, 0x82,
454 0x7b, 0x81, 0x8a, 0x8f, 0x8e, 0x87, 0x7d, 0x76,
455 0x75, 0x7d, 0x86, 0x88, 0x84, 0x80, 0x80, 0x82,
456 0x61, 0x71, 0x78, 0x72, 0x73, 0x7c, 0x7e, 0x76,
457 0x6f, 0x80, 0x8d, 0x85, 0x71, 0x6a, 0x79, 0x8b,
458 0x7b, 0x72, 0x62, 0x50, 0x42, 0x3e, 0x43, 0x49,
459 0x3c, 0x37, 0x34, 0x40, 0x5a, 0x75, 0x84, 0x87,
460 0x87, 0x82, 0x7f, 0x84, 0x89, 0x85, 0x77, 0x69,
461 0x62, 0x76, 0x7e, 0x6d, 0x60, 0x60, 0x5e, 0x55,
462 0x44, 0x49, 0x48, 0x3c, 0x2d, 0x2c, 0x3a, 0x4a,
463 0x52, 0x50, 0x49, 0x3e, 0x35, 0x36, 0x41, 0x4b,
464 0x3d, 0x4a, 0x54, 0x4e, 0x3f, 0x39, 0x43, 0x51,
465 0x51, 0x44, 0x3a, 0x37, 0x35, 0x31, 0x36, 0x3f,
466 0x39, 0x3a, 0x3c, 0x3b, 0x38, 0x34, 0x2e, 0x2b,
467 0x25, 0x26, 0x26, 0x23, 0x21, 0x22, 0x26, 0x2a,
468 0x1e, 0x36, 0x8c, 0x9f, 0x9c, 0xae, 0xa0, 0xab,
469 0xab, 0xaa, 0xab, 0xaf, 0xab, 0xa4, 0xaa, 0xba,
470 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
471 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
472 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
473 0xa1, 0xa7, 0xa9, 0xa7, 0xad, 0xb9, 0xbb, 0xb3,
474 0xb0, 0x8e, 0x41, 0x36, 0x89, 0xb6, 0xa7, 0xa6,
475 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
476 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3,
477 0x9e, 0xa0, 0x9d, 0x9a, 0xa1, 0x95, 0x1d, 0x06,
478 0x65, 0x7d, 0x9b, 0xab, 0xaa, 0xa4, 0xa1, 0xa3,
479 0xa2, 0x9a, 0x88, 0x6f, 0x5b, 0x54, 0x5c, 0x66,
480 0x82, 0x9e, 0xac, 0xb3, 0xbc, 0xb3, 0xb0, 0xc3,
481 0xb0, 0xac, 0xb7, 0xb2, 0xa6, 0xbf, 0xc1, 0x94,
482 0x4e, 0x4c, 0x53, 0x57, 0x44, 0x5b, 0xa5, 0xc8,
483 0xb9, 0xab, 0xa2, 0x8f, 0x8d, 0x84, 0x6f, 0x83,
484 0x97, 0x8a, 0x91, 0xa2, 0xa6, 0xa7, 0xa6, 0x9d,
485 0xa6, 0xa5, 0xa4, 0xa2, 0xa1, 0x9f, 0x9e, 0x9d,
486 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2,
487 0xa1, 0xaa, 0x99, 0xa8, 0xab, 0xa1, 0xa9, 0x8c,
488 0xa8, 0xaf, 0xa2, 0x6b, 0x35, 0x32, 0x40, 0x39,
489 0x30, 0x32, 0x33, 0x31, 0x30, 0x34, 0x3e, 0x46,
490 0x43, 0x40, 0x3b, 0x35, 0x31, 0x3e, 0x6d, 0xa2,
491 0xc2, 0xb3, 0x77, 0x50, 0x84, 0xc4, 0xb3, 0x7d,
492 0x99, 0xa7, 0x93, 0xab, 0xcc, 0xc0, 0xb5, 0xa6,
493 0x77, 0x71, 0x64, 0x4f, 0x36, 0x22, 0x18, 0x15,
494 0x25, 0x28, 0x2f, 0x35, 0x33, 0x30, 0x36, 0x3f,
495 0x45, 0x46, 0x4f, 0x5b, 0x5e, 0x56, 0x50, 0x4f,
496 0x4a, 0x53, 0x5a, 0x5b, 0x5d, 0x64, 0x69, 0x69,
497 0x5a, 0x60, 0x69, 0x72, 0x78, 0x7b, 0x7c, 0x7c,
498 0x83, 0x8b, 0x7b, 0x6d, 0x76, 0x74, 0x64, 0x5f,
499 0x74, 0x82, 0x81, 0x75, 0x70, 0x6f, 0x69, 0x62,
500 0x55, 0x62, 0x75, 0x84, 0x8a, 0x84, 0x79, 0x70,
501 0x7a, 0x7e, 0x83, 0x87, 0x89, 0x88, 0x85, 0x83,
502 0x7b, 0x7e, 0x7b, 0x6a, 0x51, 0x3f, 0x3a, 0x3c,
503 0x37, 0x38, 0x3e, 0x4b, 0x5c, 0x69, 0x6f, 0x70,
504 0x79, 0x82, 0x86, 0x7d, 0x6c, 0x64, 0x69, 0x72,
505 0x86, 0x87, 0x80, 0x6c, 0x52, 0x40, 0x3b, 0x3d,
506 0x35, 0x42, 0x41, 0x35, 0x3b, 0x5b, 0x78, 0x83,
507 0x63, 0x54, 0x43, 0x39, 0x3a, 0x3f, 0x42, 0x42,
508 0x3e, 0x39, 0x34, 0x33, 0x34, 0x34, 0x30, 0x2c,
509 0x2b, 0x30, 0x38, 0x3e, 0x40, 0x3f, 0x3c, 0x3a,
510 0x35, 0x34, 0x31, 0x2e, 0x2a, 0x27, 0x24, 0x23,
511 0x22, 0x23, 0x27, 0x24, 0x1d, 0x1e, 0x23, 0x20,
512 0x2f, 0x84, 0x97, 0x90, 0x9d, 0xa2, 0xaa, 0xaf,
513 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
514 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
515 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
516 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
517 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
518 0xa9, 0xa2, 0xa3, 0xac, 0xae, 0xa8, 0xa9, 0xb0,
519 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
520 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa3, 0xa3,
521 0xa2, 0xa0, 0x9f, 0xa0, 0xa6, 0x94, 0x1b, 0x06,
522 0x7f, 0x89, 0x95, 0x99, 0x92, 0x83, 0x73, 0x6a,
523 0x4c, 0x5b, 0x6f, 0x82, 0x92, 0xa3, 0xb5, 0xc2,
524 0xb8, 0xa9, 0xa6, 0xad, 0xa9, 0x9e, 0xa0, 0xa8,
525 0x98, 0xa8, 0xa0, 0xa3, 0xb2, 0x8c, 0x52, 0x46,
526 0x51, 0x5b, 0x81, 0xa4, 0x83, 0x5d, 0x6f, 0x7c,
527 0x8b, 0x8f, 0xa0, 0xb2, 0xa7, 0x95, 0xa3, 0xb8,
528 0x99, 0x88, 0x8a, 0x9a, 0xa3, 0xaa, 0xaa, 0xa2,
529 0xa7, 0xa6, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1,
530 0x9e, 0x9f, 0xa0, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7,
531 0xa6, 0x9d, 0xa5, 0xaa, 0xa8, 0x9f, 0x91, 0x8f,
532 0xbc, 0xa7, 0x85, 0x8e, 0xa0, 0x6b, 0x42, 0x62,
533 0x3a, 0x5f, 0x59, 0x48, 0x4e, 0x42, 0x43, 0x6d,
534 0x72, 0x74, 0x7a, 0x87, 0xa8, 0xd5, 0xe3, 0xd1,
535 0x7e, 0x3a, 0x67, 0xbc, 0xba, 0xae, 0xa0, 0x6a,
536 0x88, 0x92, 0x7f, 0x74, 0x84, 0x9b, 0xb4, 0xc4,
537 0xc9, 0xcd, 0xcf, 0xcb, 0xc2, 0xba, 0xb6, 0xb6,
538 0xaa, 0x95, 0x6e, 0x4a, 0x3c, 0x3a, 0x2f, 0x1e,
539 0x20, 0x29, 0x2f, 0x31, 0x35, 0x3e, 0x40, 0x3d,
540 0x3c, 0x47, 0x4f, 0x4c, 0x49, 0x4f, 0x58, 0x5d,
541 0x5f, 0x62, 0x63, 0x61, 0x5f, 0x63, 0x6d, 0x76,
542 0x6e, 0x62, 0x65, 0x72, 0x6d, 0x5f, 0x64, 0x76,
543 0x68, 0x74, 0x76, 0x6f, 0x6e, 0x6f, 0x6a, 0x63,
544 0x6a, 0x69, 0x67, 0x67, 0x67, 0x69, 0x6a, 0x6c,
545 0x7d, 0x7f, 0x81, 0x81, 0x7f, 0x7a, 0x74, 0x71,
546 0x7f, 0x82, 0x83, 0x7c, 0x6f, 0x62, 0x5a, 0x57,
547 0x6a, 0x5d, 0x4d, 0x47, 0x4e, 0x5d, 0x6d, 0x75,
548 0x77, 0x79, 0x74, 0x69, 0x61, 0x6c, 0x87, 0x9f,
549 0xa5, 0x90, 0x71, 0x56, 0x4a, 0x4b, 0x52, 0x58,
550 0x48, 0x49, 0x51, 0x60, 0x69, 0x68, 0x62, 0x5e,
551 0x3f, 0x45, 0x53, 0x66, 0x77, 0x7b, 0x75, 0x6c,
552 0x4b, 0x4f, 0x51, 0x4b, 0x41, 0x3c, 0x3e, 0x43,
553 0x40, 0x42, 0x43, 0x41, 0x3d, 0x39, 0x38, 0x38,
554 0x37, 0x35, 0x32, 0x2d, 0x27, 0x23, 0x1f, 0x1d,
555 0x28, 0x1e, 0x20, 0x24, 0x1e, 0x1e, 0x21, 0x1c,
556 0x7f, 0xaa, 0xaf, 0x99, 0x97, 0xa6, 0xaf, 0xa8,
557 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
558 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
559 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
560 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
561 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
562 0xa1, 0x74, 0x68, 0x92, 0xb3, 0xab, 0x9f, 0xa4,
563 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
564 0xa6, 0xa6, 0xa6, 0xa5, 0xa4, 0xa4, 0xa3, 0xa3,
565 0xa2, 0xa0, 0x9f, 0xa0, 0xa7, 0x95, 0x1b, 0x06,
566 0x74, 0x6c, 0x60, 0x59, 0x5f, 0x73, 0x8c, 0x9e,
567 0xad, 0xb3, 0xb7, 0xb5, 0xaf, 0xa9, 0xa9, 0xab,
568 0xa1, 0xa8, 0xae, 0xa9, 0xa1, 0xa2, 0xa3, 0xa0,
569 0x9c, 0xae, 0xaf, 0x81, 0x4a, 0x4a, 0x81, 0xb1,
570 0x78, 0xa3, 0xbd, 0xae, 0x8a, 0x89, 0x97, 0x7e,
571 0x6c, 0x6e, 0x7a, 0x9d, 0x9d, 0x94, 0xa7, 0x9c,
572 0x8f, 0x90, 0x9b, 0xa4, 0xa1, 0xa1, 0xa7, 0xab,
573 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
574 0x97, 0x99, 0x9c, 0xa1, 0xa5, 0xaa, 0xad, 0xaf,
575 0xaa, 0xa2, 0xae, 0xa7, 0xa3, 0xa5, 0x98, 0xa3,
576 0x95, 0x7e, 0x9c, 0xa2, 0x77, 0x8c, 0xb6, 0xa2,
577 0x81, 0x9f, 0x88, 0x90, 0xcf, 0xc8, 0x9c, 0xab,
578 0xb9, 0xbb, 0xb8, 0xac, 0x9a, 0x7c, 0x4b, 0x1c,
579 0x46, 0xa0, 0xca, 0xb4, 0xab, 0xaf, 0xa1, 0x93,
580 0x79, 0x98, 0xaf, 0x9f, 0x95, 0xa0, 0xa1, 0xa1,
581 0xab, 0xac, 0xad, 0xad, 0xae, 0xb2, 0xb9, 0xbf,
582 0xc4, 0xc9, 0xce, 0xca, 0xbd, 0xaf, 0xaa, 0xac,
583 0xa0, 0x89, 0x60, 0x39, 0x28, 0x2a, 0x2f, 0x2e,
584 0x2e, 0x31, 0x32, 0x31, 0x32, 0x34, 0x2e, 0x25,
585 0x2e, 0x33, 0x39, 0x3e, 0x42, 0x46, 0x4a, 0x4d,
586 0x46, 0x4d, 0x54, 0x58, 0x5d, 0x64, 0x62, 0x59,
587 0x64, 0x66, 0x65, 0x5e, 0x5c, 0x61, 0x63, 0x5f,
588 0x63, 0x65, 0x68, 0x6a, 0x6a, 0x69, 0x67, 0x65,
589 0x5f, 0x62, 0x66, 0x69, 0x6a, 0x68, 0x65, 0x62,
590 0x72, 0x73, 0x75, 0x77, 0x74, 0x68, 0x57, 0x4a,
591 0x45, 0x38, 0x32, 0x44, 0x66, 0x80, 0x85, 0x80,
592 0x7e, 0x7c, 0x72, 0x60, 0x54, 0x5b, 0x75, 0x8c,
593 0x8c, 0x81, 0x75, 0x72, 0x73, 0x6d, 0x5d, 0x4f,
594 0x67, 0x64, 0x71, 0x83, 0x7a, 0x57, 0x40, 0x3f,
595 0x3f, 0x5c, 0x77, 0x73, 0x57, 0x3d, 0x38, 0x3e,
596 0x46, 0x3e, 0x32, 0x2a, 0x2a, 0x30, 0x38, 0x3d,
597 0x3d, 0x35, 0x2b, 0x28, 0x2c, 0x30, 0x30, 0x2e,
598 0x2f, 0x2e, 0x2d, 0x2a, 0x28, 0x26, 0x24, 0x23,
599 0x23, 0x24, 0x1f, 0x24, 0x2a, 0x21, 0x30, 0x5b,
600 0xa7, 0xa9, 0xa9, 0x90, 0x89, 0xa7, 0xb0, 0x9f,
601 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
602 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
603 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
604 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
605 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
606 0xa7, 0xb0, 0xb4, 0xad, 0xa8, 0xaa, 0xae, 0xae,
607 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
608 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4,
609 0xa2, 0xa1, 0x9f, 0xa1, 0xa7, 0x95, 0x1b, 0x06,
610 0x74, 0x88, 0xa1, 0xb1, 0xb4, 0xb1, 0xb0, 0xb1,
611 0xaa, 0xab, 0xa9, 0xa5, 0x9f, 0x9e, 0xa2, 0xa6,
612 0x9e, 0xa9, 0xa7, 0xa2, 0xab, 0xad, 0xa1, 0x99,
613 0xb9, 0xb4, 0x72, 0x40, 0x71, 0xac, 0x98, 0x67,
614 0x79, 0x9b, 0xac, 0xa1, 0x8a, 0x92, 0xae, 0xa8,
615 0xa7, 0x8a, 0x67, 0x6c, 0x8a, 0xaa, 0xb2, 0x90,
616 0x9a, 0x94, 0x94, 0x9a, 0xa1, 0xa5, 0xa5, 0xa1,
617 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa7, 0xa7, 0xa7,
618 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa1,
619 0xa1, 0x9d, 0xa2, 0xae, 0xaf, 0x9f, 0x98, 0xa4,
620 0x7d, 0xb4, 0x81, 0x4d, 0x8e, 0xb6, 0x96, 0x8d,
621 0x53, 0x86, 0xa2, 0xaf, 0xbc, 0xa6, 0x91, 0xa1,
622 0xba, 0x9e, 0xa4, 0xd1, 0xb6, 0x4c, 0x3a, 0x92,
623 0xbf, 0xb8, 0xaa, 0x9d, 0xa1, 0xab, 0xa2, 0x8b,
624 0x95, 0xab, 0xb6, 0xa3, 0x91, 0x9d, 0xab, 0xa8,
625 0xa3, 0xa5, 0xa8, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8,
626 0xac, 0xa9, 0xac, 0xb3, 0xb1, 0xa9, 0xa8, 0xaf,
627 0xc6, 0xaf, 0xa4, 0xb6, 0xc9, 0xbd, 0x97, 0x76,
628 0x61, 0x5f, 0x59, 0x51, 0x4d, 0x49, 0x3e, 0x32,
629 0x1e, 0x19, 0x18, 0x20, 0x2c, 0x33, 0x30, 0x2b,
630 0x29, 0x2d, 0x2e, 0x31, 0x35, 0x37, 0x44, 0x5a,
631 0x58, 0x4c, 0x45, 0x45, 0x46, 0x4c, 0x4c, 0x40,
632 0x49, 0x4d, 0x52, 0x57, 0x5a, 0x5a, 0x58, 0x56,
633 0x59, 0x5c, 0x61, 0x66, 0x68, 0x67, 0x65, 0x64,
634 0x78, 0x75, 0x75, 0x7a, 0x7b, 0x6e, 0x54, 0x3f,
635 0x4b, 0x2e, 0x1c, 0x34, 0x69, 0x93, 0x9b, 0x91,
636 0x55, 0x62, 0x6f, 0x71, 0x6e, 0x71, 0x80, 0x8e,
637 0x9a, 0x89, 0x73, 0x63, 0x5c, 0x59, 0x56, 0x53,
638 0x71, 0x71, 0x71, 0x69, 0x57, 0x54, 0x70, 0x94,
639 0x77, 0x6a, 0x5b, 0x55, 0x55, 0x54, 0x4d, 0x45,
640 0x23, 0x2c, 0x3e, 0x58, 0x70, 0x7d, 0x7d, 0x79,
641 0x5c, 0x52, 0x44, 0x38, 0x33, 0x33, 0x36, 0x39,
642 0x3b, 0x39, 0x34, 0x2f, 0x29, 0x23, 0x1f, 0x1c,
643 0x21, 0x24, 0x26, 0x29, 0x21, 0x20, 0x54, 0x9f,
644 0xa2, 0x99, 0x9f, 0x90, 0x92, 0xb5, 0xb6, 0xa6,
645 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
646 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
647 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
648 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
649 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
650 0xa7, 0xab, 0xab, 0xa7, 0xa8, 0xac, 0xad, 0xa9,
651 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
652 0xa7, 0xa7, 0xa7, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4,
653 0xa3, 0xa1, 0xa0, 0xa1, 0xa8, 0x96, 0x1c, 0x07,
654 0xa1, 0xa7, 0xac, 0xab, 0xa5, 0xa2, 0xa3, 0xa7,
655 0x9d, 0xa0, 0xa3, 0xa4, 0xa4, 0xa4, 0xa6, 0xa8,
656 0xa3, 0x9c, 0xa7, 0xaa, 0x99, 0x9b, 0xac, 0xb0,
657 0xa6, 0x5f, 0x4e, 0x8d, 0xb0, 0x8f, 0x77, 0x83,
658 0x9b, 0xa3, 0xa8, 0xac, 0x95, 0x83, 0x9c, 0xaf,
659 0xac, 0xb2, 0xa9, 0x83, 0x74, 0x7c, 0x83, 0x97,
660 0xae, 0xa4, 0x98, 0x97, 0xa4, 0xac, 0xaa, 0xa5,
661 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
662 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
663 0xa5, 0xae, 0x8f, 0x5f, 0x60, 0x83, 0x91, 0x8b,
664 0x9d, 0x33, 0x54, 0xb5, 0xa7, 0x85, 0x92, 0x90,
665 0x77, 0x88, 0xb8, 0xc3, 0x9b, 0x91, 0xa3, 0x9f,
666 0xb4, 0xb2, 0xb0, 0x6f, 0x28, 0x5b, 0xb4, 0xbe,
667 0xb0, 0xa7, 0xb7, 0xad, 0x90, 0xa8, 0xaf, 0x75,
668 0x97, 0xa9, 0xa5, 0xa2, 0x93, 0x90, 0xac, 0xaa,
669 0xaa, 0xaa, 0xaa, 0xab, 0xab, 0xaa, 0xa8, 0xa6,
670 0xab, 0xae, 0xac, 0xa9, 0xad, 0xb0, 0xa4, 0x93,
671 0x69, 0x7e, 0x9f, 0xb7, 0xba, 0xb0, 0xad, 0xb2,
672 0x81, 0xa0, 0xc2, 0xd3, 0xd6, 0xd4, 0xd0, 0xcc,
673 0xc2, 0xbd, 0xb7, 0xb2, 0xa7, 0x92, 0x74, 0x5f,
674 0x37, 0x25, 0x22, 0x28, 0x2c, 0x37, 0x37, 0x23,
675 0x32, 0x2c, 0x35, 0x35, 0x26, 0x26, 0x33, 0x33,
676 0x36, 0x31, 0x2a, 0x28, 0x2c, 0x38, 0x45, 0x4e,
677 0x4e, 0x51, 0x55, 0x59, 0x5a, 0x58, 0x55, 0x53,
678 0x68, 0x67, 0x69, 0x71, 0x75, 0x6b, 0x54, 0x3f,
679 0x38, 0x46, 0x64, 0x88, 0x9a, 0x86, 0x55, 0x2c,
680 0x56, 0x68, 0x79, 0x79, 0x6b, 0x5c, 0x57, 0x59,
681 0x51, 0x53, 0x51, 0x4a, 0x42, 0x40, 0x47, 0x4e,
682 0x3e, 0x5e, 0x79, 0x79, 0x71, 0x72, 0x77, 0x78,
683 0x67, 0x5f, 0x4d, 0x36, 0x27, 0x2b, 0x3f, 0x51,
684 0x88, 0x93, 0x9e, 0xa0, 0x99, 0x8f, 0x88, 0x86,
685 0x7c, 0x78, 0x6a, 0x52, 0x38, 0x2b, 0x2f, 0x38,
686 0x35, 0x35, 0x33, 0x31, 0x2f, 0x2d, 0x2c, 0x2b,
687 0x25, 0x1f, 0x27, 0x26, 0x1e, 0x3e, 0x7a, 0x9d,
688 0x98, 0x99, 0xa0, 0x96, 0xa1, 0xb7, 0xae, 0xa9,
689 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
690 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
691 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
692 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
693 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
694 0xa9, 0xa7, 0xaa, 0xad, 0xa7, 0x9e, 0xa1, 0xab,
695 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
696 0xa8, 0xa8, 0xa7, 0xa7, 0xa6, 0xa5, 0xa5, 0xa5,
697 0xa3, 0xa2, 0xa1, 0xa2, 0xa8, 0x96, 0x1d, 0x08,
698 0xa4, 0xa2, 0xa1, 0xa4, 0xa7, 0xa8, 0xa5, 0xa1,
699 0xa2, 0xa3, 0xa4, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
700 0x9a, 0x96, 0xb0, 0xaa, 0x8c, 0xa7, 0xb8, 0x88,
701 0x45, 0x5d, 0xaa, 0xc5, 0x91, 0x88, 0x9e, 0x8d,
702 0x6d, 0x8c, 0x9e, 0xa5, 0x99, 0x8f, 0x9d, 0xa0,
703 0xa7, 0xa4, 0xa9, 0x9b, 0x92, 0x7a, 0x56, 0x67,
704 0xa2, 0xa4, 0x9c, 0x99, 0xa1, 0xa6, 0xa4, 0xa2,
705 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa3, 0xa3, 0xa3,
706 0xa9, 0xa8, 0xa7, 0xa6, 0xa4, 0xa3, 0xa2, 0xa1,
707 0xa5, 0xa0, 0xac, 0xaa, 0xa7, 0x8a, 0x5d, 0x64,
708 0x2c, 0x8f, 0x92, 0x6c, 0x99, 0xc1, 0xb7, 0xbb,
709 0xa5, 0x7c, 0x92, 0xa4, 0x8b, 0xa8, 0xcc, 0xad,
710 0xbe, 0x9f, 0x49, 0x3d, 0x90, 0xa9, 0x94, 0xaa,
711 0xa2, 0xa6, 0xa5, 0xad, 0xbd, 0xb5, 0x99, 0x88,
712 0x99, 0xb0, 0xa9, 0xb0, 0xa1, 0x8b, 0xa5, 0xab,
713 0xaf, 0xaa, 0xa5, 0xa4, 0xa6, 0xa9, 0xaa, 0xaa,
714 0xa9, 0xae, 0xaf, 0xab, 0xa5, 0xa3, 0xa6, 0xa8,
715 0xba, 0xaa, 0x97, 0x94, 0xa4, 0xaf, 0xa2, 0x8c,
716 0x91, 0xa0, 0xad, 0xad, 0xaa, 0xad, 0xb2, 0xb5,
717 0xbc, 0xbf, 0xc2, 0xc5, 0xc6, 0xc8, 0xcb, 0xce,
718 0xd4, 0xd1, 0xd4, 0xa0, 0x53, 0x60, 0x9b, 0xa5,
719 0x6c, 0x40, 0x2a, 0x2c, 0x2b, 0x34, 0x36, 0x23,
720 0x21, 0x22, 0x23, 0x25, 0x28, 0x2b, 0x2e, 0x2f,
721 0x2f, 0x34, 0x3c, 0x44, 0x4b, 0x4e, 0x4f, 0x4f,
722 0x45, 0x49, 0x52, 0x5d, 0x63, 0x60, 0x56, 0x4d,
723 0x4c, 0x59, 0x64, 0x5f, 0x4d, 0x41, 0x42, 0x49,
724 0x41, 0x54, 0x6a, 0x74, 0x71, 0x6f, 0x76, 0x7e,
725 0x53, 0x52, 0x4c, 0x41, 0x3b, 0x46, 0x5f, 0x75,
726 0x50, 0x54, 0x4e, 0x43, 0x4d, 0x5f, 0x5a, 0x46,
727 0x4b, 0x36, 0x26, 0x35, 0x5b, 0x79, 0x7f, 0x79,
728 0x9d, 0xa0, 0xa2, 0x9f, 0x96, 0x8a, 0x7f, 0x78,
729 0x63, 0x59, 0x4b, 0x3e, 0x36, 0x31, 0x2b, 0x28,
730 0x41, 0x3f, 0x3b, 0x36, 0x30, 0x2b, 0x27, 0x24,
731 0x1b, 0x2d, 0x1f, 0x20, 0x58, 0x87, 0x8d, 0x8e,
732 0x91, 0x9d, 0x9b, 0x94, 0xa3, 0xab, 0xa2, 0xa8,
733 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
734 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
735 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
736 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
737 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
738 0xa5, 0xab, 0xa9, 0xa4, 0xa8, 0xb2, 0xb1, 0xa7,
739 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
740 0xa8, 0xa8, 0xa8, 0xa7, 0xa7, 0xa6, 0xa6, 0xa5,
741 0xa4, 0xa2, 0xa1, 0xa3, 0xa9, 0x97, 0x1d, 0x08,
742 0xaa, 0xa5, 0x9f, 0x9f, 0xa2, 0xa4, 0xa3, 0xa0,
743 0xa5, 0xa3, 0xa0, 0x9e, 0x9e, 0xa0, 0xa1, 0xa2,
744 0xaf, 0xa7, 0xa0, 0x9d, 0xa5, 0xb0, 0x8a, 0x47,
745 0x75, 0xb4, 0xbd, 0x93, 0x80, 0x80, 0x82, 0x8d,
746 0x88, 0x95, 0x93, 0x94, 0x89, 0x81, 0x9b, 0xb1,
747 0xab, 0x9e, 0x9e, 0xa8, 0xa6, 0x93, 0x87, 0x91,
748 0x75, 0x76, 0x6e, 0x75, 0x94, 0xab, 0xad, 0xad,
749 0xa9, 0xa8, 0xa7, 0xa6, 0xa5, 0xa4, 0xa4, 0xa3,
750 0xa1, 0xa2, 0xa3, 0xa5, 0xa6, 0xa8, 0xa9, 0xa9,
751 0xad, 0xa9, 0xa9, 0xac, 0xa6, 0x7f, 0x60, 0x72,
752 0xaf, 0x7d, 0x88, 0xaa, 0xa3, 0xa7, 0xb9, 0xae,
753 0x99, 0x82, 0x90, 0x95, 0x7e, 0x8d, 0xa9, 0x9c,
754 0x3e, 0x14, 0x57, 0xbd, 0xc0, 0xa7, 0xad, 0xaa,
755 0xaa, 0xa5, 0xa4, 0x9e, 0x9e, 0xae, 0xa5, 0x7e,
756 0x94, 0xac, 0xac, 0xaf, 0xa8, 0x94, 0x9b, 0xab,
757 0xac, 0xaa, 0xab, 0xae, 0xb1, 0xb0, 0xaa, 0xa5,
758 0xaf, 0xa9, 0xa9, 0xb0, 0xaf, 0xa6, 0xa4, 0xa9,
759 0xab, 0xb4, 0xb3, 0xa1, 0x91, 0x92, 0x9e, 0xa7,
760 0xaf, 0xb0, 0xad, 0xa8, 0xaa, 0xaf, 0xaf, 0xaa,
761 0xa6, 0xac, 0xb0, 0xae, 0xa9, 0xa6, 0xa8, 0xab,
762 0xb3, 0xa7, 0xb3, 0xb5, 0x89, 0x68, 0x85, 0xb7,
763 0x94, 0x3b, 0x08, 0x21, 0x5e, 0xaa, 0xd2, 0xc7,
764 0xc9, 0xc8, 0xc0, 0xae, 0x8e, 0x67, 0x42, 0x2c,
765 0x27, 0x29, 0x2d, 0x2f, 0x2f, 0x2c, 0x28, 0x26,
766 0x3b, 0x44, 0x4f, 0x55, 0x56, 0x56, 0x58, 0x5a,
767 0x4d, 0x4d, 0x44, 0x32, 0x27, 0x36, 0x5b, 0x7c,
768 0x9c, 0xa4, 0xa5, 0x94, 0x76, 0x5d, 0x52, 0x52,
769 0x3e, 0x42, 0x46, 0x45, 0x3f, 0x37, 0x30, 0x2d,
770 0x41, 0x3a, 0x39, 0x48, 0x60, 0x67, 0x53, 0x3a,
771 0x38, 0x47, 0x5b, 0x6b, 0x75, 0x7d, 0x88, 0x90,
772 0x9c, 0x92, 0x86, 0x81, 0x81, 0x80, 0x7a, 0x74,
773 0x69, 0x5f, 0x56, 0x59, 0x60, 0x60, 0x56, 0x4a,
774 0x39, 0x38, 0x36, 0x33, 0x30, 0x2e, 0x2c, 0x2b,
775 0x16, 0x2f, 0x21, 0x3c, 0x94, 0xaa, 0x8b, 0x90,
776 0x95, 0xa4, 0x9b, 0x9b, 0xa8, 0xa7, 0xa7, 0xad,
777 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
778 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
779 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
780 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
781 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
782 0xaa, 0xa8, 0xa7, 0xaa, 0xab, 0xa9, 0xa9, 0xaa,
783 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
784 0xa9, 0xa9, 0xa8, 0xa8, 0xa7, 0xa6, 0xa6, 0xa6,
785 0xa4, 0xa3, 0xa2, 0xa3, 0xa9, 0x97, 0x1e, 0x09,
786 0xa0, 0xa1, 0xa2, 0xa1, 0xa0, 0xa1, 0xa3, 0xa5,
787 0xa9, 0xa8, 0xa6, 0xa6, 0xa7, 0xa6, 0xa4, 0xa2,
788 0x9e, 0xa7, 0x97, 0xa5, 0xb5, 0x73, 0x4e, 0x8a,
789 0xb4, 0xb3, 0x9a, 0x82, 0x8d, 0xa5, 0xa8, 0x9e,
790 0x9e, 0xad, 0xa9, 0xa3, 0x93, 0x84, 0x94, 0xa2,
791 0xa6, 0x9f, 0x97, 0xa4, 0x99, 0x92, 0xa9, 0xa5,
792 0x9d, 0x9b, 0x83, 0x6d, 0x73, 0x83, 0x92, 0xa1,
793 0xad, 0xac, 0xab, 0xa9, 0xa8, 0xa6, 0xa5, 0xa4,
794 0xa7, 0xa7, 0xa6, 0xa6, 0xa5, 0xa5, 0xa4, 0xa4,
795 0xad, 0xaa, 0x79, 0x72, 0x6d, 0x56, 0x75, 0x94,
796 0x82, 0xa9, 0xbf, 0xbd, 0xb4, 0xa4, 0x9f, 0xae,
797 0xaf, 0x87, 0x65, 0x6a, 0x81, 0x77, 0x40, 0x0a,
798 0x4f, 0x9e, 0xc4, 0xb1, 0xaa, 0xad, 0xaa, 0xa9,
799 0xa9, 0xa7, 0xa9, 0xa3, 0xa1, 0xb1, 0xa6, 0x7c,
800 0x99, 0xaa, 0xad, 0xa7, 0xaa, 0x9c, 0x8f, 0xa1,
801 0xac, 0xa8, 0xa5, 0xa6, 0xac, 0xaf, 0xae, 0xac,
802 0xa6, 0xaa, 0xab, 0xa8, 0xaa, 0xae, 0xae, 0xa9,
803 0xa6, 0xa9, 0xaf, 0xb0, 0xa4, 0x96, 0x96, 0x9f,
804 0xae, 0xb2, 0xb0, 0xa9, 0xa6, 0xa9, 0xab, 0xaa,
805 0xab, 0xaa, 0xa8, 0xa6, 0xa6, 0xa8, 0xaa, 0xad,
806 0xa5, 0xb3, 0xa9, 0xb4, 0xbd, 0x75, 0x3a, 0x55,
807 0x7d, 0x80, 0xb1, 0xd7, 0xcb, 0xc3, 0xc8, 0xbd,
808 0xb9, 0xbe, 0xc5, 0xcb, 0xce, 0xcb, 0xc7, 0xc4,
809 0xa9, 0xa4, 0x98, 0x86, 0x70, 0x59, 0x46, 0x3b,
810 0x2b, 0x35, 0x3d, 0x3b, 0x33, 0x31, 0x38, 0x40,
811 0x4a, 0x50, 0x5c, 0x69, 0x6e, 0x68, 0x5a, 0x4e,
812 0x61, 0x71, 0x7f, 0x7c, 0x6b, 0x5a, 0x53, 0x54,
813 0x51, 0x43, 0x35, 0x37, 0x47, 0x5b, 0x67, 0x6b,
814 0x68, 0x5b, 0x5f, 0x77, 0x81, 0x72, 0x5e, 0x57,
815 0x69, 0x75, 0x82, 0x85, 0x7a, 0x6b, 0x5f, 0x5a,
816 0x60, 0x6f, 0x83, 0x8d, 0x88, 0x79, 0x68, 0x5e,
817 0x58, 0x60, 0x64, 0x5e, 0x4e, 0x40, 0x3b, 0x3b,
818 0x3b, 0x39, 0x36, 0x32, 0x2e, 0x29, 0x26, 0x25,
819 0x25, 0x15, 0x2c, 0x6d, 0x97, 0x90, 0x83, 0x87,
820 0x99, 0xa6, 0x9a, 0xa1, 0xa9, 0xa3, 0xaa, 0xa8,
821 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
822 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
823 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
824 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
825 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
826 0xab, 0xa5, 0xa5, 0xab, 0xac, 0xa7, 0xa7, 0xab,
827 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
828 0xa9, 0xa9, 0xa8, 0xa8, 0xa7, 0xa7, 0xa6, 0xa6,
829 0xa5, 0xa3, 0xa2, 0xa3, 0xa9, 0x97, 0x1e, 0x09,
830 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
831 0xa3, 0xa0, 0xac, 0xa7, 0xa6, 0xa5, 0x97, 0x9e,
832 0x99, 0xa8, 0xb5, 0xa4, 0x5e, 0x4d, 0x8e, 0xa9,
833 0xb6, 0x99, 0x81, 0x91, 0xae, 0xa9, 0xa1, 0xb0,
834 0x9c, 0xa3, 0xa8, 0xad, 0xa3, 0x8b, 0x8f, 0xaf,
835 0xaa, 0x9c, 0x8e, 0x8d, 0x9a, 0xa6, 0xab, 0xaa,
836 0xab, 0xa4, 0xa1, 0x9e, 0x8e, 0x74, 0x61, 0x5b,
837 0x6a, 0x7f, 0x94, 0x9e, 0xa7, 0xb2, 0xb5, 0xb2,
838 0xa2, 0xb5, 0xb7, 0xad, 0xae, 0xaf, 0xb0, 0xb7,
839 0xb2, 0xab, 0x91, 0x4f, 0x54, 0x86, 0x8e, 0xa5,
840 0xb0, 0xb0, 0xaa, 0xa3, 0xa6, 0xac, 0xaa, 0xa5,
841 0xaa, 0x9f, 0x7b, 0x73, 0x6f, 0x3f, 0x49, 0xa1,
842 0xb9, 0xb6, 0xb1, 0xac, 0xa8, 0xa5, 0xa4, 0xa3,
843 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
844 0x9b, 0xa4, 0xa9, 0xa7, 0xa5, 0xa4, 0x9c, 0x92,
845 0xaa, 0xaf, 0xac, 0xa4, 0xa3, 0xaa, 0xab, 0xa5,
846 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
847 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
848 0x87, 0x9b, 0xab, 0xab, 0xa7, 0xa9, 0xac, 0xac,
849 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
850 0xb2, 0xaa, 0xa1, 0xab, 0xad, 0x86, 0x58, 0x4d,
851 0x6c, 0xaa, 0xc3, 0xac, 0xa3, 0xab, 0xab, 0xa7,
852 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb0, 0xb1,
853 0xb7, 0xbf, 0xca, 0xd2, 0xd2, 0xca, 0xbf, 0xb7,
854 0x85, 0x5c, 0x2a, 0x0f, 0x12, 0x1e, 0x24, 0x23,
855 0x2f, 0x36, 0x3a, 0x3a, 0x3f, 0x42, 0x37, 0x26,
856 0x41, 0x4f, 0x60, 0x6b, 0x6a, 0x5e, 0x50, 0x46,
857 0x48, 0x4f, 0x58, 0x5d, 0x63, 0x72, 0x88, 0x9a,
858 0x9a, 0x94, 0x8f, 0x91, 0x94, 0x8c, 0x7a, 0x6a,
859 0x79, 0x70, 0x64, 0x5a, 0x56, 0x5a, 0x62, 0x68,
860 0x76, 0x83, 0x7e, 0x67, 0x61, 0x6c, 0x69, 0x58,
861 0x5a, 0x5b, 0x5c, 0x5a, 0x55, 0x4d, 0x45, 0x3f,
862 0x3e, 0x34, 0x2a, 0x27, 0x2c, 0x2f, 0x2c, 0x27,
863 0x1c, 0x5f, 0x97, 0x89, 0x95, 0x9c, 0x7c, 0x90,
864 0xaa, 0x9b, 0xa2, 0xac, 0xa5, 0xa6, 0xac, 0xa6,
865 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
866 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
867 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
868 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
869 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
870 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
871 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
872 0xa9, 0xa9, 0xa8, 0xa7, 0xa7, 0xa6, 0xa5, 0xa5,
873 0xa4, 0xa3, 0xa1, 0xa2, 0xab, 0x9e, 0x16, 0x07,
874 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
875 0xa3, 0xa6, 0x97, 0xaf, 0xb1, 0x9a, 0xa9, 0xaa,
876 0x9f, 0xa8, 0xa5, 0x58, 0x4b, 0x96, 0xb4, 0xbc,
877 0x9a, 0x88, 0x91, 0xa8, 0xaa, 0xa6, 0xa7, 0xa2,
878 0x9d, 0xa3, 0xa8, 0xac, 0xa4, 0x8d, 0x8f, 0xac,
879 0xa6, 0x9b, 0x90, 0x91, 0x9d, 0xa7, 0xaa, 0xa8,
880 0xa5, 0xaa, 0xae, 0xaf, 0xae, 0xaa, 0xa3, 0x9d,
881 0x99, 0x8e, 0x7e, 0x72, 0x6a, 0x66, 0x67, 0x6a,
882 0x7e, 0x75, 0x82, 0x8e, 0x88, 0x87, 0x7d, 0x61,
883 0x5c, 0x87, 0x83, 0x6a, 0x8e, 0x87, 0x4f, 0x5e,
884 0xa3, 0xa4, 0x9e, 0x9f, 0xac, 0xad, 0xa3, 0x9f,
885 0xae, 0xbe, 0xa9, 0x7d, 0x5a, 0x8a, 0xcc, 0xb0,
886 0xb2, 0xb0, 0xad, 0xaa, 0xa8, 0xa7, 0xa8, 0xa8,
887 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
888 0x9d, 0xa6, 0xaa, 0xa8, 0xa7, 0xa6, 0x9f, 0x95,
889 0xa4, 0xab, 0xad, 0xa7, 0xa5, 0xaa, 0xab, 0xa7,
890 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
891 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
892 0xa2, 0x99, 0x98, 0xa4, 0xac, 0xab, 0xa9, 0xab,
893 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
894 0xa8, 0xa2, 0xb1, 0xab, 0x94, 0xa4, 0xac, 0x88,
895 0x62, 0x8f, 0xa9, 0xaa, 0xae, 0xae, 0xa6, 0xa3,
896 0xab, 0xab, 0xac, 0xac, 0xad, 0xae, 0xaf, 0xaf,
897 0xb8, 0xb4, 0xae, 0xaa, 0xaa, 0xae, 0xb4, 0xb8,
898 0xb9, 0xbd, 0xc5, 0xcf, 0xcf, 0xbd, 0x9e, 0x86,
899 0x5f, 0x40, 0x3c, 0x5a, 0x6c, 0x68, 0x74, 0x90,
900 0x8d, 0x7e, 0x6e, 0x69, 0x6a, 0x65, 0x58, 0x4b,
901 0x74, 0x77, 0x78, 0x72, 0x6d, 0x71, 0x7e, 0x8b,
902 0x8a, 0x74, 0x56, 0x40, 0x3b, 0x42, 0x4c, 0x54,
903 0x57, 0x54, 0x4e, 0x48, 0x42, 0x3d, 0x3b, 0x39,
904 0x51, 0x5d, 0x66, 0x67, 0x66, 0x64, 0x59, 0x4c,
905 0x4c, 0x4f, 0x53, 0x57, 0x57, 0x55, 0x52, 0x50,
906 0x28, 0x2c, 0x30, 0x2f, 0x2a, 0x27, 0x28, 0x2a,
907 0x16, 0x61, 0x91, 0x93, 0xa3, 0x9c, 0x85, 0xa2,
908 0xb1, 0xa1, 0x9b, 0xa0, 0xa2, 0xa6, 0xad, 0xaf,
909 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
910 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
911 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
912 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
913 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
914 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
915 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
916 0xa9, 0xa9, 0xa8, 0xa8, 0xa7, 0xa6, 0xa6, 0xa5,
917 0xa4, 0xa3, 0xa2, 0xa3, 0xab, 0x9e, 0x17, 0x07,
918 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
919 0xa6, 0x9a, 0xa2, 0xa3, 0x9f, 0xac, 0xac, 0x9b,
920 0xb1, 0x9c, 0x55, 0x4b, 0x91, 0xb1, 0xa9, 0xaf,
921 0x83, 0x88, 0xa0, 0xaf, 0xa6, 0xa3, 0xa6, 0x9f,
922 0x9d, 0xa4, 0xa7, 0xab, 0xa5, 0x91, 0x90, 0xa6,
923 0xa1, 0x9a, 0x94, 0x98, 0xa2, 0xa9, 0xa8, 0xa5,
924 0xa0, 0xa8, 0xaa, 0xa4, 0xa4, 0xaa, 0xa8, 0x9f,
925 0x8d, 0x8a, 0x95, 0xaa, 0xb6, 0xaf, 0xa5, 0xa3,
926 0x99, 0x9e, 0x9d, 0x95, 0x90, 0x93, 0xa3, 0xb6,
927 0xcb, 0x91, 0x62, 0x75, 0xa8, 0xb0, 0xa6, 0xb9,
928 0xac, 0xa5, 0xa2, 0xa2, 0xa1, 0xa5, 0xa8, 0xa6,
929 0xc1, 0x8a, 0x54, 0x3d, 0x81, 0xc0, 0xaa, 0xa4,
930 0xaa, 0xa9, 0xa7, 0xa7, 0xa7, 0xa9, 0xab, 0xad,
931 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
932 0xa0, 0xa8, 0xad, 0xaa, 0xa9, 0xa9, 0xa2, 0x9a,
933 0x9b, 0xa6, 0xad, 0xac, 0xa8, 0xaa, 0xab, 0xaa,
934 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
935 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
936 0xb1, 0xa0, 0x95, 0x9c, 0xa7, 0xaa, 0xa9, 0xaa,
937 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
938 0xa5, 0xb0, 0xaf, 0x9c, 0x93, 0xa5, 0xb6, 0xb5,
939 0xb9, 0xba, 0xb3, 0xae, 0xaf, 0xaa, 0xa8, 0xaf,
940 0xaa, 0xaa, 0xaa, 0xab, 0xab, 0xac, 0xac, 0xad,
941 0xb1, 0xac, 0xa5, 0xa1, 0xa1, 0xa5, 0xac, 0xb1,
942 0xb4, 0xb5, 0xb6, 0xb6, 0xb8, 0xbc, 0xc2, 0xc6,
943 0xc4, 0xaf, 0x80, 0x52, 0x49, 0x59, 0x5a, 0x49,
944 0x45, 0x4d, 0x53, 0x4d, 0x43, 0x43, 0x4f, 0x5c,
945 0x71, 0x6a, 0x64, 0x65, 0x6d, 0x75, 0x79, 0x7a,
946 0x64, 0x72, 0x82, 0x88, 0x7f, 0x6e, 0x5e, 0x54,
947 0x5f, 0x56, 0x48, 0x3f, 0x40, 0x4a, 0x58, 0x62,
948 0x51, 0x50, 0x52, 0x57, 0x57, 0x52, 0x50, 0x52,
949 0x48, 0x49, 0x49, 0x48, 0x45, 0x41, 0x3d, 0x3a,
950 0x36, 0x34, 0x2e, 0x25, 0x20, 0x24, 0x31, 0x3c,
951 0x48, 0x9d, 0x9f, 0x8b, 0xa3, 0xa2, 0x8b, 0x89,
952 0xaa, 0xa1, 0x98, 0xa0, 0xae, 0xae, 0xa8, 0xaa,
953 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
954 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
955 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
956 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
957 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
958 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
959 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
960 0xaa, 0xaa, 0xa9, 0xa8, 0xa8, 0xa7, 0xa6, 0xa6,
961 0xa5, 0xa4, 0xa2, 0xa3, 0xac, 0x9f, 0x17, 0x08,
962 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
963 0xa7, 0xa1, 0xa0, 0x98, 0xab, 0xab, 0x96, 0xb6,
964 0xa0, 0x57, 0x52, 0xa5, 0xb4, 0xa3, 0xa7, 0x76,
965 0x85, 0xa0, 0xa7, 0xa1, 0xa5, 0xa4, 0xa2, 0xa9,
966 0x9f, 0xa5, 0xa7, 0xa9, 0xa7, 0x96, 0x90, 0x9f,
967 0x9c, 0x99, 0x99, 0x9e, 0xa6, 0xa9, 0xa7, 0xa3,
968 0xa6, 0xaa, 0xaa, 0xa6, 0xa7, 0xac, 0xae, 0xab,
969 0xb7, 0xa7, 0x99, 0x96, 0x99, 0xa0, 0xaa, 0xb5,
970 0xaa, 0xbb, 0xb7, 0xae, 0xb3, 0xb2, 0xb0, 0xba,
971 0x7c, 0x53, 0x6e, 0xb7, 0xc3, 0xb2, 0xb2, 0xa7,
972 0xbc, 0xb5, 0xba, 0xb5, 0xaa, 0xb8, 0xbd, 0xa3,
973 0x53, 0x2d, 0x77, 0x96, 0x7d, 0x99, 0xa8, 0xa3,
974 0xa7, 0xa6, 0xa5, 0xa5, 0xa6, 0xa9, 0xab, 0xad,
975 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
976 0xa3, 0xab, 0xae, 0xac, 0xab, 0xab, 0xa7, 0x9e,
977 0x95, 0xa1, 0xac, 0xae, 0xab, 0xa9, 0xaa, 0xac,
978 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
979 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
980 0xaa, 0xad, 0xa8, 0x9d, 0x9b, 0xa4, 0xaa, 0xa8,
981 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
982 0xb6, 0xa8, 0xab, 0xa3, 0x8c, 0x9b, 0xb0, 0xa4,
983 0xae, 0xa7, 0xa2, 0xa7, 0xad, 0xab, 0xaa, 0xb0,
984 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
985 0xaa, 0xab, 0xab, 0xac, 0xac, 0xab, 0xab, 0xaa,
986 0xa1, 0xa6, 0xaa, 0xaa, 0xa7, 0xa5, 0xa8, 0xab,
987 0xaa, 0xa1, 0x75, 0x43, 0x44, 0x6a, 0x75, 0x60,
988 0x59, 0x4c, 0x3b, 0x33, 0x39, 0x4d, 0x65, 0x76,
989 0x7a, 0x68, 0x59, 0x5f, 0x73, 0x7e, 0x76, 0x69,
990 0x77, 0x79, 0x75, 0x65, 0x50, 0x44, 0x46, 0x4d,
991 0x4c, 0x5c, 0x71, 0x81, 0x83, 0x76, 0x62, 0x54,
992 0x59, 0x54, 0x49, 0x3e, 0x39, 0x3b, 0x3f, 0x41,
993 0x3c, 0x3d, 0x3d, 0x3e, 0x3e, 0x3d, 0x3c, 0x3c,
994 0x55, 0x4c, 0x41, 0x38, 0x34, 0x33, 0x32, 0x31,
995 0x56, 0x97, 0x87, 0x88, 0x8c, 0x5d, 0x6d, 0xa5,
996 0xaf, 0xa5, 0x91, 0x94, 0xac, 0xaf, 0xaa, 0xb3,
997 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
998 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
999 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1000 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1001 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1002 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1003 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1004 0xab, 0xaa, 0xaa, 0xa9, 0xa8, 0xa8, 0xa7, 0xa7,
1005 0xa5, 0xa4, 0xa3, 0xa4, 0xad, 0x9f, 0x18, 0x09,
1006 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
1007 0xa1, 0xac, 0xa2, 0xa7, 0xa4, 0xa5, 0xb5, 0x9f,
1008 0x5f, 0x5a, 0xab, 0xc3, 0xa0, 0xa5, 0x99, 0x7c,
1009 0x9a, 0xaf, 0xac, 0x9f, 0xa4, 0xa9, 0xa6, 0xa7,
1010 0xa0, 0xa6, 0xa6, 0xa7, 0xa9, 0x9c, 0x91, 0x97,
1011 0x99, 0x9a, 0x9c, 0xa2, 0xa7, 0xa9, 0xa7, 0xa4,
1012 0xa4, 0x9f, 0x9f, 0xa3, 0xa5, 0xa4, 0xa7, 0xae,
1013 0xa8, 0xab, 0xa7, 0x9d, 0x98, 0x9c, 0xa0, 0xa1,
1014 0xaf, 0xa3, 0x9f, 0x9b, 0x9a, 0xa7, 0x9f, 0x7d,
1015 0x59, 0x80, 0xab, 0xc2, 0xb4, 0x9d, 0x91, 0x84,
1016 0x6f, 0x78, 0x8e, 0xae, 0xc6, 0xb4, 0x6c, 0x22,
1017 0x6c, 0x9c, 0x99, 0xa0, 0x91, 0x77, 0x9c, 0xb0,
1018 0xaa, 0xa9, 0xa7, 0xa6, 0xa6, 0xa7, 0xa9, 0xaa,
1019 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1020 0xa5, 0xac, 0xaf, 0xac, 0xab, 0xad, 0xaa, 0xa2,
1021 0x96, 0x9d, 0xa8, 0xae, 0xad, 0xaa, 0xa9, 0xac,
1022 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1023 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1024 0xa5, 0xaf, 0xb2, 0xa6, 0x9d, 0x9f, 0xa4, 0xa5,
1025 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1026 0xb2, 0xaa, 0xa1, 0x99, 0x9c, 0xaf, 0xb2, 0xa0,
1027 0xa1, 0xa4, 0xab, 0xb0, 0xb1, 0xaf, 0xaa, 0xa3,
1028 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9,
1029 0xac, 0xaa, 0xa8, 0xa7, 0xa7, 0xa8, 0xaa, 0xac,
1030 0xb1, 0xaf, 0xad, 0xaa, 0xaa, 0xaa, 0xab, 0xac,
1031 0xa5, 0xa1, 0x8b, 0x67, 0x4e, 0x48, 0x45, 0x40,
1032 0x42, 0x4f, 0x5a, 0x58, 0x4e, 0x4b, 0x55, 0x62,
1033 0x6b, 0x63, 0x5d, 0x62, 0x6e, 0x75, 0x73, 0x6d,
1034 0x67, 0x71, 0x79, 0x75, 0x68, 0x5e, 0x5d, 0x62,
1035 0x72, 0x68, 0x59, 0x4c, 0x44, 0x44, 0x48, 0x4c,
1036 0x5e, 0x76, 0x84, 0x7f, 0x7b, 0x78, 0x64, 0x48,
1037 0x4e, 0x4c, 0x4a, 0x47, 0x44, 0x42, 0x41, 0x41,
1038 0x37, 0x31, 0x28, 0x22, 0x22, 0x28, 0x30, 0x36,
1039 0x6d, 0xb2, 0x94, 0x89, 0x8e, 0x73, 0x91, 0xb6,
1040 0xac, 0xa3, 0x90, 0x95, 0xad, 0xb1, 0xab, 0xb4,
1041 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1042 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1043 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1044 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1045 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1046 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1047 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1048 0xab, 0xab, 0xaa, 0xaa, 0xa9, 0xa8, 0xa8, 0xa7,
1049 0xa6, 0xa5, 0xa4, 0xa5, 0xad, 0xa0, 0x19, 0x09,
1050 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
1051 0x9f, 0xa5, 0xab, 0xa4, 0xa1, 0xb4, 0x9e, 0x52,
1052 0x69, 0xa7, 0xbc, 0xab, 0xa8, 0x90, 0x82, 0xac,
1053 0xa9, 0xa9, 0xb1, 0xad, 0xa4, 0xac, 0xae, 0x9b,
1054 0xa1, 0xa7, 0xa5, 0xa5, 0xab, 0xa1, 0x91, 0x90,
1055 0x9a, 0x9b, 0x9f, 0xa2, 0xa6, 0xa8, 0xa8, 0xa7,
1056 0xb2, 0xa9, 0xa6, 0xab, 0xa9, 0xa1, 0xa1, 0xa8,
1057 0xa2, 0xad, 0xaf, 0xa5, 0xa0, 0xa6, 0xab, 0xa9,
1058 0xa1, 0x9e, 0xa1, 0xab, 0xb4, 0xa9, 0x7b, 0x49,
1059 0x8b, 0x92, 0x7e, 0x58, 0x52, 0x68, 0x80, 0x98,
1060 0x97, 0x9c, 0x81, 0x5a, 0x37, 0x1e, 0x4f, 0xb1,
1061 0xae, 0xa6, 0x93, 0xaf, 0xa4, 0x76, 0x8b, 0xad,
1062 0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa7, 0xa8, 0xa9,
1063 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1064 0xa6, 0xac, 0xae, 0xaa, 0xaa, 0xad, 0xab, 0xa5,
1065 0x9e, 0x9d, 0xa1, 0xaa, 0xad, 0xaa, 0xa8, 0xaa,
1066 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1067 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1068 0xad, 0xa9, 0xaa, 0xae, 0xab, 0xa1, 0x9e, 0xa2,
1069 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1070 0xaa, 0xa5, 0x8d, 0x91, 0xb4, 0xb2, 0xa4, 0xb2,
1071 0xa4, 0xa6, 0xab, 0xa8, 0xa4, 0xad, 0xb2, 0xaa,
1072 0xad, 0xac, 0xac, 0xab, 0xab, 0xaa, 0xaa, 0xaa,
1073 0xad, 0xad, 0xab, 0xab, 0xab, 0xab, 0xad, 0xad,
1074 0xac, 0xa8, 0xa4, 0xa5, 0xaa, 0xaf, 0xb1, 0xb0,
1075 0xb1, 0xb5, 0xa6, 0x7d, 0x53, 0x45, 0x52, 0x63,
1076 0x54, 0x3c, 0x2a, 0x33, 0x4e, 0x5e, 0x56, 0x45,
1077 0x59, 0x65, 0x6f, 0x6e, 0x66, 0x66, 0x71, 0x7c,
1078 0x81, 0x84, 0x84, 0x7b, 0x6d, 0x5e, 0x55, 0x51,
1079 0x68, 0x64, 0x5e, 0x57, 0x50, 0x4c, 0x49, 0x48,
1080 0xa4, 0xab, 0x99, 0x74, 0x66, 0x70, 0x6e, 0x5b,
1081 0x58, 0x54, 0x4c, 0x44, 0x3d, 0x38, 0x35, 0x34,
1082 0x2f, 0x30, 0x2c, 0x20, 0x1a, 0x27, 0x44, 0x5d,
1083 0xa2, 0xa6, 0x7a, 0x92, 0xa4, 0x79, 0x84, 0xa0,
1084 0xa0, 0x9a, 0x96, 0xa2, 0xb3, 0xb3, 0xab, 0xac,
1085 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1086 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1087 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1088 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1089 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1090 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1091 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1092 0xac, 0xac, 0xab, 0xaa, 0xaa, 0xa9, 0xa8, 0xa8,
1093 0xa7, 0xa6, 0xa4, 0xa5, 0xae, 0xa1, 0x19, 0x0a,
1094 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
1095 0xa7, 0xa1, 0xa1, 0xa0, 0xb4, 0x92, 0x51, 0x6a,
1096 0xb0, 0xac, 0x9b, 0xb1, 0xa0, 0x80, 0xa0, 0xad,
1097 0xa6, 0xa5, 0xae, 0xaf, 0xa4, 0xa8, 0xab, 0x9f,
1098 0xa2, 0xa8, 0xa4, 0xa4, 0xad, 0xa5, 0x92, 0x8a,
1099 0x9c, 0x9d, 0xa0, 0xa1, 0xa3, 0xa6, 0xa9, 0xac,
1100 0xa8, 0xa7, 0xa7, 0xa8, 0xa8, 0xa5, 0xa3, 0xa4,
1101 0xac, 0xa8, 0xa0, 0x98, 0x96, 0x9b, 0xa3, 0xa7,
1102 0xa9, 0xaa, 0xa4, 0xad, 0xb5, 0x8c, 0x55, 0x42,
1103 0x1e, 0x4b, 0x9d, 0xbe, 0xc0, 0xc0, 0xb5, 0xc0,
1104 0xd2, 0xc7, 0x77, 0x29, 0x4a, 0xa4, 0xca, 0xc0,
1105 0xb1, 0x8f, 0x9c, 0xae, 0xab, 0x8f, 0x7a, 0xa1,
1106 0xaf, 0xad, 0xab, 0xa9, 0xa8, 0xa9, 0xaa, 0xab,
1107 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1108 0xa5, 0xab, 0xac, 0xa9, 0xa9, 0xad, 0xac, 0xa6,
1109 0xa7, 0x9d, 0x9b, 0xa5, 0xad, 0xab, 0xa8, 0xa8,
1110 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1111 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1112 0xb0, 0xa8, 0xa6, 0xad, 0xad, 0xa5, 0x9f, 0xa0,
1113 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1114 0xae, 0x89, 0x93, 0xb1, 0xa9, 0xa2, 0xac, 0xac,
1115 0xb1, 0xab, 0xaf, 0xaf, 0xa9, 0xaf, 0xb2, 0xa5,
1116 0xaf, 0xaf, 0xae, 0xad, 0xac, 0xac, 0xab, 0xab,
1117 0xab, 0xad, 0xb1, 0xb3, 0xb3, 0xb1, 0xad, 0xab,
1118 0xaf, 0xac, 0xaa, 0xa9, 0xaa, 0xa9, 0xa7, 0xa4,
1119 0xac, 0xa8, 0xae, 0xac, 0x85, 0x4d, 0x37, 0x42,
1120 0x51, 0x57, 0x60, 0x69, 0x6b, 0x66, 0x5d, 0x56,
1121 0x78, 0x82, 0x88, 0x82, 0x75, 0x6e, 0x73, 0x7c,
1122 0x61, 0x65, 0x6c, 0x72, 0x70, 0x63, 0x4f, 0x40,
1123 0x36, 0x39, 0x3c, 0x3e, 0x3e, 0x3c, 0x39, 0x36,
1124 0x36, 0x44, 0x4b, 0x47, 0x48, 0x4d, 0x47, 0x39,
1125 0x3f, 0x3d, 0x39, 0x36, 0x36, 0x38, 0x3c, 0x3e,
1126 0x3c, 0x41, 0x3e, 0x30, 0x20, 0x20, 0x32, 0x45,
1127 0x8d, 0xa4, 0x8b, 0x81, 0x82, 0x81, 0x97, 0x97,
1128 0xa2, 0x96, 0x98, 0xa4, 0xa9, 0xae, 0xb2, 0xb3,
1129 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1130 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1131 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1132 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1133 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1134 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1135 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1136 0xad, 0xac, 0xac, 0xab, 0xaa, 0xaa, 0xa9, 0xa9,
1137 0xa7, 0xa6, 0xa5, 0xa6, 0xaf, 0xa1, 0x1a, 0x0b,
1138 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
1139 0xaf, 0x9b, 0xa7, 0xbf, 0x87, 0x4d, 0x79, 0xb3,
1140 0xb0, 0x96, 0xa6, 0x9d, 0x8d, 0xa7, 0xb1, 0xa6,
1141 0x9e, 0xaa, 0xa6, 0xa1, 0xa5, 0xa2, 0xa1, 0xaf,
1142 0xa2, 0xa9, 0xa4, 0xa3, 0xad, 0xa7, 0x92, 0x87,
1143 0x9d, 0x9f, 0xa0, 0xa0, 0xa1, 0xa4, 0xaa, 0xae,
1144 0xa3, 0xaa, 0xab, 0xa5, 0xa3, 0xa6, 0xa2, 0x9a,
1145 0x95, 0x8e, 0x90, 0x9e, 0xa8, 0xa9, 0xa9, 0xac,
1146 0x9d, 0xa3, 0xbf, 0xc0, 0x88, 0x56, 0x61, 0x83,
1147 0x6c, 0x92, 0xc5, 0xb6, 0xaa, 0xb1, 0xac, 0xce,
1148 0x86, 0x2b, 0x2c, 0x8e, 0xc8, 0xc2, 0xb1, 0xa3,
1149 0xa2, 0x93, 0x97, 0xae, 0xb4, 0x9a, 0x81, 0x84,
1150 0xae, 0xad, 0xab, 0xaa, 0xaa, 0xab, 0xad, 0xaf,
1151 0xa8, 0xa8, 0xaa, 0xa7, 0xa7, 0xae, 0xa0, 0x82,
1152 0xa5, 0xaa, 0xab, 0xa7, 0xa8, 0xac, 0xab, 0xa6,
1153 0xae, 0x9e, 0x97, 0xa1, 0xac, 0xab, 0xa7, 0xa6,
1154 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1155 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1156 0xaa, 0xaf, 0xae, 0xa6, 0xa5, 0xa8, 0xa6, 0x9f,
1157 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1158 0x99, 0x9a, 0xae, 0xb9, 0xad, 0xaa, 0xb0, 0xac,
1159 0xb5, 0xa5, 0xa6, 0xac, 0xa9, 0xaf, 0xb3, 0xa7,
1160 0xb1, 0xb0, 0xb0, 0xaf, 0xae, 0xad, 0xac, 0xab,
1161 0xaa, 0xaa, 0xab, 0xac, 0xac, 0xab, 0xaa, 0xaa,
1162 0xab, 0xad, 0xaf, 0xaf, 0xad, 0xac, 0xab, 0xac,
1163 0xb9, 0xaa, 0xa8, 0xb1, 0x9d, 0x6c, 0x47, 0x3f,
1164 0x4d, 0x5b, 0x69, 0x6c, 0x65, 0x62, 0x68, 0x71,
1165 0x6e, 0x6c, 0x6c, 0x72, 0x7b, 0x7f, 0x7d, 0x78,
1166 0x76, 0x6e, 0x67, 0x67, 0x68, 0x60, 0x4e, 0x3e,
1167 0x59, 0x4e, 0x3d, 0x30, 0x2e, 0x36, 0x43, 0x4c,
1168 0x37, 0x37, 0x3a, 0x3f, 0x3f, 0x3c, 0x3a, 0x3b,
1169 0x48, 0x44, 0x3f, 0x3a, 0x39, 0x3a, 0x3d, 0x40,
1170 0x4e, 0x45, 0x37, 0x28, 0x23, 0x2d, 0x41, 0x52,
1171 0x9d, 0xa0, 0x88, 0x79, 0x79, 0x89, 0xa4, 0x9e,
1172 0x98, 0x8f, 0x9f, 0xb1, 0xae, 0xaf, 0xb2, 0xaa,
1173 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1174 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1175 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1176 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1177 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1178 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1179 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1180 0xad, 0xad, 0xac, 0xab, 0xab, 0xaa, 0xa9, 0xa9,
1181 0xa8, 0xa7, 0xa5, 0xa6, 0xaf, 0xa2, 0x1a, 0x0b,
1182 0xac, 0xad, 0x9f, 0xa6, 0xa8, 0xa2, 0xa9, 0x9e,
1183 0xa5, 0xa5, 0xb6, 0x85, 0x52, 0x77, 0xa7, 0xb5,
1184 0xab, 0xa6, 0x95, 0x8b, 0x98, 0xaa, 0xab, 0xa4,
1185 0xa6, 0xa6, 0xa7, 0xa7, 0xa6, 0xa4, 0xa1, 0x9f,
1186 0xa3, 0x9b, 0xa1, 0xa1, 0xac, 0xa2, 0x7e, 0x8c,
1187 0x9b, 0x98, 0xa0, 0xa3, 0x9b, 0x9f, 0xa9, 0xa7,
1188 0xa2, 0xa3, 0xa5, 0xa6, 0xa7, 0xa6, 0xa5, 0xa4,
1189 0xa1, 0xa9, 0xac, 0xa7, 0xa6, 0xac, 0xb2, 0xb2,
1190 0xb4, 0xa1, 0x7d, 0x5b, 0x46, 0x71, 0xb8, 0xbc,
1191 0xbb, 0x88, 0x48, 0x7c, 0xb1, 0xb9, 0xaa, 0x44,
1192 0x15, 0x85, 0xc0, 0xbd, 0xb3, 0xad, 0xaf, 0xab,
1193 0x96, 0x74, 0x95, 0xa5, 0xab, 0xba, 0x9b, 0x87,
1194 0xa2, 0xb4, 0xad, 0xaa, 0xac, 0xa7, 0xaa, 0xa7,
1195 0xa9, 0xac, 0xa6, 0xa5, 0xa8, 0xb4, 0x90, 0x85,
1196 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
1197 0xab, 0xab, 0x9a, 0x93, 0xa3, 0xa9, 0xa8, 0xb2,
1198 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1199 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1200 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1201 0x9b, 0xa7, 0xa5, 0xa5, 0xb0, 0xab, 0x9f, 0xa1,
1202 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1203 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1204 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1205 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1206 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1207 0xb0, 0xac, 0xac, 0xaf, 0xa2, 0x7c, 0x4b, 0x28,
1208 0x47, 0x55, 0x60, 0x5e, 0x58, 0x59, 0x62, 0x68,
1209 0x64, 0x67, 0x6b, 0x6c, 0x68, 0x60, 0x57, 0x51,
1210 0x5e, 0x5c, 0x55, 0x4a, 0x41, 0x44, 0x52, 0x5e,
1211 0x34, 0x3f, 0x4b, 0x4f, 0x49, 0x40, 0x3c, 0x3b,
1212 0x40, 0x3b, 0x36, 0x36, 0x3a, 0x3c, 0x3a, 0x37,
1213 0x3d, 0x3a, 0x36, 0x31, 0x2f, 0x2e, 0x2f, 0x30,
1214 0x39, 0x32, 0x30, 0x28, 0x31, 0x35, 0x31, 0x4e,
1215 0xa2, 0xac, 0x88, 0x7c, 0x85, 0x8c, 0xa4, 0xa4,
1216 0x8c, 0x9a, 0x9e, 0xa4, 0xb3, 0xb2, 0xaa, 0xb1,
1217 0xad, 0xae, 0xaf, 0xb0, 0xb0, 0xae, 0xac, 0xab,
1218 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1219 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1220 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1221 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1222 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1223 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1224 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1225 0xaa, 0xab, 0xad, 0xb0, 0xb8, 0xa8, 0x1c, 0x0a,
1226 0xa4, 0x9b, 0xae, 0xae, 0xa5, 0xa5, 0x9d, 0xa3,
1227 0xa6, 0xb7, 0x7f, 0x56, 0x7b, 0xae, 0xbb, 0x9f,
1228 0xab, 0xa1, 0x88, 0x8b, 0xa9, 0xab, 0x9f, 0xa9,
1229 0xa5, 0xa6, 0xa6, 0xa5, 0xa3, 0xa4, 0xa8, 0xab,
1230 0xad, 0xa8, 0xa5, 0xa5, 0xad, 0x9f, 0x87, 0x8f,
1231 0x96, 0x98, 0xa7, 0xaf, 0xa7, 0xa6, 0xaa, 0xa4,
1232 0xaa, 0xa9, 0xa8, 0xa7, 0xa7, 0xa8, 0xa9, 0xaa,
1233 0xa7, 0xaa, 0xaf, 0xb6, 0xb7, 0xaa, 0x8f, 0x77,
1234 0x67, 0x91, 0xaa, 0x82, 0x87, 0xaf, 0xac, 0xb6,
1235 0xac, 0x7d, 0x60, 0x84, 0x5c, 0x0f, 0x1a, 0x1e,
1236 0x92, 0xaf, 0xb1, 0xaf, 0xab, 0xa1, 0xa4, 0xa3,
1237 0xb0, 0x8d, 0xad, 0xbd, 0xb5, 0xaf, 0x92, 0x8c,
1238 0x9f, 0xb2, 0xab, 0xa9, 0xac, 0xa7, 0xab, 0xa8,
1239 0xa9, 0xac, 0xa6, 0xa6, 0xa9, 0xb3, 0x90, 0x86,
1240 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
1241 0xa8, 0xac, 0xa2, 0x96, 0x9d, 0xa9, 0xad, 0xad,
1242 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1243 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1244 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1245 0x90, 0x9d, 0xa7, 0xa8, 0xa9, 0xaf, 0xab, 0x9c,
1246 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1247 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1248 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1249 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1250 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1251 0xaf, 0xb0, 0xb3, 0xb6, 0xb1, 0x9a, 0x72, 0x52,
1252 0x56, 0x60, 0x67, 0x66, 0x60, 0x60, 0x66, 0x6c,
1253 0x5f, 0x63, 0x69, 0x6f, 0x72, 0x71, 0x6f, 0x6e,
1254 0x5c, 0x4f, 0x46, 0x4d, 0x61, 0x73, 0x78, 0x76,
1255 0x65, 0x69, 0x6a, 0x65, 0x5e, 0x5c, 0x60, 0x66,
1256 0x6c, 0x5c, 0x47, 0x39, 0x35, 0x38, 0x3b, 0x3c,
1257 0x3c, 0x38, 0x31, 0x2b, 0x2a, 0x32, 0x41, 0x4c,
1258 0x49, 0x34, 0x30, 0x28, 0x24, 0x2c, 0x46, 0x79,
1259 0x99, 0xaa, 0x8d, 0x75, 0x77, 0x8b, 0xa6, 0x9d,
1260 0x8c, 0x99, 0x9e, 0xa5, 0xb3, 0xb2, 0xac, 0xb1,
1261 0xac, 0xad, 0xaf, 0xb0, 0xb0, 0xaf, 0xad, 0xac,
1262 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1263 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1264 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1265 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1266 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1267 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1268 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1269 0xaa, 0xac, 0xad, 0xb0, 0xb8, 0xa7, 0x1c, 0x0a,
1270 0xa3, 0xa3, 0xa3, 0x9c, 0xae, 0xb6, 0xa1, 0xa9,
1271 0xb8, 0x7b, 0x52, 0x83, 0xb0, 0xa9, 0xa8, 0xa4,
1272 0xab, 0x8f, 0x80, 0x97, 0xaf, 0xa8, 0x9f, 0xa7,
1273 0xa4, 0xa9, 0xac, 0xaa, 0xa4, 0xa3, 0xa8, 0xad,
1274 0xac, 0xaf, 0xa4, 0xa9, 0xae, 0x9e, 0x97, 0x96,
1275 0x9b, 0x98, 0x9f, 0xa2, 0x9a, 0xa0, 0xab, 0xab,
1276 0xa7, 0xa6, 0xa5, 0xa5, 0xa8, 0xad, 0xb3, 0xb6,
1277 0xae, 0xa8, 0x97, 0x7b, 0x66, 0x6d, 0x91, 0xb4,
1278 0xc0, 0xb8, 0x7e, 0x65, 0x93, 0xb5, 0xb2, 0xaa,
1279 0xa0, 0x7f, 0x6a, 0x7b, 0x7c, 0x87, 0xb7, 0xcb,
1280 0xc2, 0xb3, 0xa6, 0xaf, 0xae, 0xa9, 0xb3, 0xae,
1281 0x71, 0x5f, 0x73, 0x74, 0x80, 0xa3, 0x9b, 0x89,
1282 0x9b, 0xae, 0xa8, 0xa7, 0xab, 0xa8, 0xac, 0xaa,
1283 0xaa, 0xac, 0xa7, 0xa8, 0xaa, 0xb1, 0x8f, 0x89,
1284 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1285 0xa5, 0xab, 0xaa, 0x9d, 0x97, 0xa7, 0xb1, 0xa8,
1286 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1287 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1288 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1289 0xa4, 0x9a, 0xa1, 0xab, 0xaa, 0xaf, 0xa9, 0x8f,
1290 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1291 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1292 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1293 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1294 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1295 0xa8, 0xae, 0xb2, 0xb1, 0xb2, 0xac, 0x91, 0x73,
1296 0x45, 0x4a, 0x53, 0x5d, 0x63, 0x69, 0x74, 0x7d,
1297 0x70, 0x6f, 0x6d, 0x6b, 0x67, 0x63, 0x60, 0x5e,
1298 0x5d, 0x5f, 0x5f, 0x5d, 0x5b, 0x5a, 0x5d, 0x60,
1299 0x5d, 0x63, 0x6a, 0x6c, 0x6d, 0x72, 0x7c, 0x85,
1300 0x71, 0x62, 0x4e, 0x43, 0x44, 0x4d, 0x56, 0x5b,
1301 0x2e, 0x38, 0x44, 0x46, 0x41, 0x3c, 0x3e, 0x42,
1302 0x29, 0x1d, 0x20, 0x25, 0x31, 0x37, 0x4e, 0x8c,
1303 0xa6, 0xa1, 0x79, 0x61, 0x75, 0xa2, 0xad, 0x81,
1304 0x8d, 0x98, 0x9f, 0xa7, 0xb2, 0xb3, 0xae, 0xb1,
1305 0xab, 0xad, 0xaf, 0xb0, 0xb0, 0xaf, 0xad, 0xac,
1306 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1307 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1308 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1309 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1310 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1311 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1312 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1313 0xab, 0xac, 0xae, 0xb0, 0xb8, 0xa7, 0x1b, 0x09,
1314 0xa7, 0xa6, 0x9a, 0xa9, 0xaa, 0x9a, 0xaa, 0xb9,
1315 0x82, 0x55, 0x83, 0xb7, 0xaf, 0xa3, 0xa2, 0xa8,
1316 0xa6, 0x7e, 0x8a, 0xa8, 0xa3, 0xa3, 0xac, 0xa1,
1317 0xa4, 0xac, 0xb3, 0xb1, 0xa9, 0xa3, 0xa4, 0xa8,
1318 0xa1, 0xaa, 0x9c, 0xa6, 0xa9, 0x9e, 0xa7, 0xa0,
1319 0x8b, 0x90, 0xa2, 0xae, 0xac, 0xb0, 0xb7, 0xb4,
1320 0xad, 0xae, 0xaf, 0xac, 0xa1, 0x92, 0x83, 0x79,
1321 0x6c, 0x74, 0x89, 0xa5, 0xb7, 0xb8, 0xb1, 0xac,
1322 0xc0, 0x8f, 0x63, 0x8b, 0xb0, 0xad, 0xb1, 0xa3,
1323 0x9c, 0x95, 0xa5, 0xb8, 0xbd, 0xc2, 0xbe, 0xb2,
1324 0xb1, 0xa5, 0xa1, 0xa9, 0xa5, 0xac, 0xb5, 0x95,
1325 0x32, 0x43, 0x69, 0x75, 0x8c, 0xb5, 0xac, 0x90,
1326 0x98, 0xac, 0xa6, 0xa6, 0xab, 0xa8, 0xad, 0xab,
1327 0xaa, 0xac, 0xa8, 0xab, 0xab, 0xaf, 0x8e, 0x8c,
1328 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1329 0xa8, 0xa7, 0xae, 0xa8, 0x99, 0xa2, 0xaf, 0xa7,
1330 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1331 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1332 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1333 0xae, 0x98, 0x9b, 0xb0, 0xb3, 0xac, 0xaa, 0xab,
1334 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1335 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1336 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1337 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1338 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1339 0xa7, 0xb0, 0xb0, 0xaa, 0xac, 0xb0, 0x9f, 0x85,
1340 0x57, 0x52, 0x54, 0x60, 0x69, 0x6d, 0x73, 0x7b,
1341 0x74, 0x72, 0x6e, 0x6a, 0x65, 0x61, 0x5f, 0x5d,
1342 0x82, 0x80, 0x75, 0x63, 0x53, 0x54, 0x65, 0x75,
1343 0x69, 0x72, 0x7a, 0x78, 0x6c, 0x5f, 0x56, 0x53,
1344 0x4d, 0x51, 0x58, 0x60, 0x62, 0x58, 0x47, 0x39,
1345 0x35, 0x47, 0x5b, 0x5f, 0x52, 0x3e, 0x2f, 0x2a,
1346 0x2d, 0x26, 0x1b, 0x1b, 0x3d, 0x51, 0x61, 0x9b,
1347 0x8a, 0x95, 0x86, 0x61, 0x57, 0x7f, 0x9b, 0x8a,
1348 0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb2, 0xb0, 0xb0,
1349 0xaa, 0xac, 0xae, 0xb0, 0xb0, 0xb0, 0xae, 0xad,
1350 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1351 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1352 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1353 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1354 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1355 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1356 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1357 0xac, 0xad, 0xae, 0xb1, 0xb8, 0xa6, 0x1a, 0x08,
1358 0xa7, 0xa4, 0xa5, 0xab, 0x9b, 0xa0, 0xac, 0x85,
1359 0x4f, 0x7f, 0xb7, 0xb1, 0xa3, 0xb1, 0xae, 0xab,
1360 0x96, 0x87, 0x9c, 0xaa, 0x99, 0xa1, 0xb1, 0xa2,
1361 0xa6, 0xaa, 0xad, 0xac, 0xa7, 0xa5, 0xa9, 0xae,
1362 0xa6, 0xb2, 0xab, 0xb4, 0xad, 0x9f, 0xa5, 0x95,
1363 0x8c, 0x8c, 0x97, 0x99, 0x8a, 0x82, 0x7f, 0x75,
1364 0x7a, 0x79, 0x78, 0x7c, 0x86, 0x95, 0xa4, 0xae,
1365 0xb0, 0xb8, 0xbe, 0xb9, 0xac, 0xa2, 0xa3, 0xa8,
1366 0xa7, 0x73, 0x87, 0xa4, 0xa7, 0xa7, 0x9c, 0xa5,
1367 0x93, 0x9a, 0xb5, 0xb9, 0xac, 0xa7, 0xa5, 0xae,
1368 0xab, 0xa6, 0xa9, 0xb1, 0xa8, 0xaa, 0x9c, 0x5e,
1369 0x7e, 0xc1, 0xcd, 0x7e, 0x5f, 0x95, 0x9d, 0x70,
1370 0x99, 0xac, 0xa7, 0xa7, 0xac, 0xa9, 0xae, 0xac,
1371 0xab, 0xac, 0xa9, 0xae, 0xac, 0xad, 0x8d, 0x8f,
1372 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1373 0xad, 0xa3, 0xac, 0xb1, 0xa2, 0x9d, 0xa7, 0xa8,
1374 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1375 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1376 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1377 0xa6, 0xa5, 0xa8, 0xb4, 0xb4, 0x9c, 0x8f, 0x9c,
1378 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1379 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1380 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1381 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1382 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1383 0xaf, 0xb7, 0xb5, 0xad, 0xb0, 0xb9, 0xb0, 0x9b,
1384 0x75, 0x65, 0x60, 0x70, 0x7d, 0x7f, 0x82, 0x8a,
1385 0x7c, 0x7c, 0x7a, 0x78, 0x74, 0x6f, 0x6b, 0x69,
1386 0x5d, 0x56, 0x54, 0x5e, 0x6d, 0x76, 0x71, 0x6a,
1387 0x5f, 0x6a, 0x76, 0x79, 0x72, 0x69, 0x65, 0x64,
1388 0x64, 0x58, 0x48, 0x40, 0x42, 0x49, 0x4e, 0x50,
1389 0x57, 0x5b, 0x5a, 0x51, 0x43, 0x39, 0x36, 0x38,
1390 0x2f, 0x23, 0x24, 0x1e, 0x30, 0x59, 0x78, 0x96,
1391 0x89, 0x90, 0x84, 0x5e, 0x55, 0x77, 0x90, 0x92,
1392 0x95, 0x99, 0xa4, 0xad, 0xb0, 0xb1, 0xb0, 0xac,
1393 0xa9, 0xab, 0xae, 0xb0, 0xb1, 0xb0, 0xaf, 0xae,
1394 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1395 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1396 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1397 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1398 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1399 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1400 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1401 0xad, 0xae, 0xaf, 0xb1, 0xb8, 0xa6, 0x19, 0x07,
1402 0xa4, 0xa6, 0xa9, 0x9d, 0xa9, 0xac, 0x7d, 0x5d,
1403 0x8b, 0xaa, 0xab, 0xad, 0xad, 0xa8, 0xae, 0xa4,
1404 0x89, 0xa1, 0xa8, 0x9e, 0x9c, 0xa4, 0xa8, 0xaa,
1405 0xa8, 0xa5, 0xa2, 0xa1, 0xa4, 0xaa, 0xaf, 0xb3,
1406 0xa9, 0x9f, 0x88, 0x73, 0x60, 0x66, 0x7d, 0x7b,
1407 0x75, 0x78, 0x8a, 0x97, 0x98, 0xa2, 0xb0, 0xb0,
1408 0xbb, 0xbc, 0xbd, 0xbc, 0xb9, 0xb4, 0xaf, 0xab,
1409 0xb2, 0xb3, 0xac, 0xa2, 0xa2, 0xac, 0xb1, 0xaf,
1410 0x7f, 0x88, 0x9c, 0xa3, 0xab, 0xb5, 0xab, 0x9c,
1411 0x9d, 0xaa, 0xb3, 0xa6, 0xa3, 0xb2, 0xb3, 0xaf,
1412 0xab, 0xaa, 0xaf, 0xb9, 0xb0, 0xb1, 0xae, 0x82,
1413 0x89, 0x86, 0x85, 0x8f, 0xa8, 0xbc, 0xb2, 0x9a,
1414 0x9d, 0xb0, 0xaa, 0xa9, 0xad, 0xaa, 0xae, 0xac,
1415 0xac, 0xab, 0xaa, 0xb1, 0xad, 0xab, 0x8c, 0x93,
1416 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1417 0xb0, 0xa4, 0xa9, 0xb4, 0xac, 0x9e, 0x9f, 0xa7,
1418 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1419 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1420 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1421 0xaa, 0xa3, 0x89, 0x7f, 0x95, 0xa1, 0x9e, 0xa1,
1422 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1423 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1424 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1425 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1426 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1427 0xad, 0xb2, 0xb2, 0xad, 0xb2, 0xbb, 0xb8, 0xac,
1428 0x7e, 0x64, 0x5a, 0x6e, 0x81, 0x82, 0x83, 0x8a,
1429 0x71, 0x75, 0x7a, 0x7c, 0x7a, 0x75, 0x6e, 0x69,
1430 0x6a, 0x6d, 0x74, 0x7b, 0x7d, 0x79, 0x6f, 0x67,
1431 0x57, 0x5e, 0x65, 0x67, 0x68, 0x6d, 0x77, 0x80,
1432 0x6e, 0x69, 0x64, 0x64, 0x65, 0x63, 0x5d, 0x58,
1433 0x61, 0x59, 0x4c, 0x43, 0x40, 0x42, 0x46, 0x4a,
1434 0x3b, 0x25, 0x3b, 0x2e, 0x14, 0x42, 0x74, 0x79,
1435 0x7d, 0x8f, 0x84, 0x54, 0x4e, 0x6e, 0x80, 0x97,
1436 0x9c, 0x9d, 0xa8, 0xb0, 0xae, 0xae, 0xae, 0xa7,
1437 0xa8, 0xaa, 0xad, 0xaf, 0xb1, 0xb1, 0xb0, 0xaf,
1438 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1439 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1440 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1441 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1442 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1443 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1444 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1445 0xae, 0xaf, 0xaf, 0xb1, 0xb7, 0xa5, 0x19, 0x06,
1446 0xa4, 0xa1, 0xa8, 0xae, 0xa8, 0x77, 0x5d, 0x98,
1447 0xbd, 0xb3, 0xa5, 0xab, 0xa7, 0xa8, 0xad, 0x8c,
1448 0x8f, 0xae, 0xaa, 0x98, 0xa0, 0xa7, 0xa5, 0xad,
1449 0xaa, 0xa5, 0xa2, 0xa6, 0xac, 0xad, 0xa4, 0x9b,
1450 0x7b, 0x83, 0x9e, 0xa3, 0xa1, 0xb5, 0xbe, 0xb9,
1451 0x90, 0x97, 0xad, 0xba, 0xb3, 0xb0, 0xae, 0xa4,
1452 0xa9, 0xaa, 0xab, 0xac, 0xac, 0xab, 0xaa, 0xa9,
1453 0xab, 0xb1, 0xac, 0xa2, 0xa8, 0xb4, 0xaa, 0x93,
1454 0x79, 0xaa, 0xab, 0xad, 0xaf, 0xa9, 0xae, 0x95,
1455 0xa3, 0xae, 0xb2, 0xb2, 0xb0, 0xad, 0xad, 0xac,
1456 0xae, 0xae, 0xa9, 0xac, 0xaa, 0xb2, 0xb8, 0x9b,
1457 0x95, 0xa3, 0xa8, 0xae, 0xb4, 0xb2, 0xa5, 0x92,
1458 0xa2, 0xb5, 0xae, 0xac, 0xaf, 0xab, 0xae, 0xab,
1459 0xac, 0xab, 0xaa, 0xb3, 0xae, 0xaa, 0x8c, 0x95,
1460 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1461 0xaf, 0xab, 0xa8, 0xaf, 0xb2, 0xa5, 0x9c, 0xa1,
1462 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1463 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1464 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1465 0xba, 0xaf, 0x9c, 0x98, 0xaf, 0xc1, 0xb3, 0x9b,
1466 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1467 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1468 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1469 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1470 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1471 0xac, 0xad, 0xac, 0xad, 0xb1, 0xb5, 0xb3, 0xaf,
1472 0x94, 0x6f, 0x5a, 0x68, 0x75, 0x6d, 0x65, 0x69,
1473 0x55, 0x5f, 0x6e, 0x7c, 0x81, 0x7f, 0x77, 0x71,
1474 0x78, 0x76, 0x6b, 0x55, 0x41, 0x3e, 0x4d, 0x5d,
1475 0x40, 0x4a, 0x57, 0x60, 0x69, 0x75, 0x85, 0x91,
1476 0x8d, 0x84, 0x7a, 0x73, 0x6f, 0x6a, 0x63, 0x5c,
1477 0x58, 0x4e, 0x45, 0x46, 0x4e, 0x52, 0x4b, 0x43,
1478 0x34, 0x1e, 0x2f, 0x27, 0x1d, 0x50, 0x8b, 0xa3,
1479 0x9b, 0xa7, 0x84, 0x4d, 0x6c, 0x9d, 0x93, 0x97,
1480 0xa3, 0xa0, 0xab, 0xb3, 0xac, 0xab, 0xac, 0xa1,
1481 0xa8, 0xaa, 0xad, 0xaf, 0xb1, 0xb1, 0xb1, 0xb0,
1482 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1483 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1484 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1485 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1486 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1487 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1488 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1489 0xae, 0xaf, 0xb0, 0xb1, 0xb7, 0xa5, 0x18, 0x05,
1490 0xa8, 0xa6, 0xad, 0xae, 0x7a, 0x61, 0x95, 0xb7,
1491 0xaa, 0xa5, 0xb0, 0xa3, 0xa3, 0xb6, 0xa4, 0x8b,
1492 0x9e, 0xaa, 0xa8, 0x9d, 0x9e, 0xa8, 0xab, 0xa8,
1493 0xab, 0xa9, 0xac, 0xb5, 0xba, 0xad, 0x90, 0x78,
1494 0x9a, 0x99, 0xb7, 0xac, 0x9d, 0xac, 0xa5, 0x9e,
1495 0x8d, 0x90, 0xa0, 0xaa, 0xa3, 0xa4, 0xa8, 0xa3,
1496 0xaa, 0xa9, 0xa7, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8,
1497 0x9c, 0xae, 0xb1, 0xa7, 0xab, 0xb3, 0x9e, 0x79,
1498 0x9d, 0x9c, 0xab, 0xac, 0xb1, 0xb2, 0x9b, 0x98,
1499 0xa6, 0xb7, 0xb0, 0xaa, 0xaa, 0xaa, 0xb1, 0xab,
1500 0xa7, 0xaf, 0xab, 0xb2, 0xb8, 0xaf, 0x83, 0x3a,
1501 0x8f, 0xb1, 0xac, 0x96, 0x9b, 0xae, 0xa8, 0x84,
1502 0xa6, 0xb8, 0xb1, 0xae, 0xb0, 0xab, 0xae, 0xab,
1503 0xac, 0xab, 0xab, 0xb4, 0xae, 0xa9, 0x8b, 0x96,
1504 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1505 0xac, 0xb2, 0xaa, 0xa9, 0xb4, 0xac, 0x9b, 0x9c,
1506 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1507 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1508 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1509 0x99, 0x86, 0x7d, 0x79, 0x78, 0x8c, 0xa1, 0xa1,
1510 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1511 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1512 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1513 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1514 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1515 0xb6, 0xb2, 0xb1, 0xb3, 0xb4, 0xb2, 0xaf, 0xaf,
1516 0x99, 0x70, 0x5a, 0x6a, 0x7a, 0x73, 0x6a, 0x6e,
1517 0x69, 0x74, 0x82, 0x8c, 0x8c, 0x81, 0x71, 0x67,
1518 0x41, 0x42, 0x48, 0x52, 0x5b, 0x59, 0x4d, 0x41,
1519 0x72, 0x7b, 0x83, 0x81, 0x74, 0x66, 0x5d, 0x5a,
1520 0x67, 0x65, 0x65, 0x68, 0x6c, 0x6b, 0x64, 0x5d,
1521 0x5c, 0x4e, 0x42, 0x46, 0x52, 0x56, 0x4a, 0x3b,
1522 0x35, 0x2f, 0x2d, 0x28, 0x3b, 0x4e, 0x5a, 0x7d,
1523 0x72, 0xa3, 0x8c, 0x3d, 0x4e, 0x7f, 0x7e, 0x96,
1524 0xa7, 0xa2, 0xae, 0xb4, 0xab, 0xaa, 0xaa, 0x9e,
1525 0xa7, 0xa9, 0xac, 0xaf, 0xb1, 0xb1, 0xb1, 0xb0,
1526 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1527 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1528 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1529 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1530 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1531 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1532 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1533 0xaf, 0xb0, 0xb0, 0xb1, 0xb7, 0xa5, 0x18, 0x05,
1534 0xa7, 0xb0, 0xa9, 0x7a, 0x5e, 0x8a, 0xb5, 0xa9,
1535 0xa9, 0xa2, 0xae, 0xa7, 0xa7, 0xaa, 0x97, 0x99,
1536 0xa7, 0xab, 0xab, 0xa2, 0x98, 0x99, 0xa5, 0xb2,
1537 0xab, 0xa7, 0xb0, 0xb5, 0x96, 0x70, 0x79, 0xa0,
1538 0xa8, 0xb3, 0xa2, 0x97, 0xaa, 0xae, 0xa6, 0xad,
1539 0x8c, 0x81, 0xad, 0xad, 0x9e, 0xaf, 0xa7, 0xa7,
1540 0xab, 0xa5, 0xa5, 0xab, 0xab, 0xa7, 0xa8, 0xae,
1541 0xa7, 0xb8, 0xa8, 0xa1, 0xb6, 0x9d, 0x7f, 0x9d,
1542 0xad, 0x9a, 0xa7, 0xae, 0xb0, 0xa9, 0x97, 0xa4,
1543 0xb3, 0xb3, 0xb1, 0xb0, 0xaf, 0xae, 0xae, 0xad,
1544 0xb1, 0xad, 0xa6, 0xad, 0xb4, 0xa4, 0xa1, 0xbc,
1545 0xc7, 0xb0, 0xa8, 0xa0, 0xa5, 0xb1, 0xa6, 0x9d,
1546 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1547 0xb2, 0xb2, 0xaa, 0xb1, 0xaf, 0xa7, 0x8a, 0xa2,
1548 0xb0, 0xb0, 0xaf, 0xae, 0xae, 0xad, 0xac, 0xac,
1549 0xaf, 0xae, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9,
1550 0x97, 0xae, 0xb0, 0xa9, 0xb0, 0xaf, 0xa8, 0xac,
1551 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1552 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1553 0x97, 0x4d, 0x28, 0x59, 0x98, 0xa5, 0x96, 0x8e,
1554 0xa2, 0xab, 0xb0, 0xac, 0xaa, 0xad, 0xae, 0xab,
1555 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1556 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1557 0xae, 0xae, 0xaf, 0xb0, 0xb0, 0xb1, 0xb2, 0xb2,
1558 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1559 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1560 0x95, 0x6e, 0x54, 0x5f, 0x71, 0x74, 0x76, 0x7d,
1561 0x77, 0x7b, 0x82, 0x85, 0x81, 0x75, 0x66, 0x5b,
1562 0x63, 0x5a, 0x57, 0x5f, 0x6d, 0x6f, 0x63, 0x54,
1563 0x65, 0x6f, 0x6f, 0x5b, 0x3f, 0x33, 0x40, 0x53,
1564 0x6a, 0x6f, 0x75, 0x78, 0x74, 0x6a, 0x5e, 0x56,
1565 0x55, 0x55, 0x54, 0x51, 0x4c, 0x45, 0x3e, 0x3a,
1566 0x2c, 0x37, 0x34, 0x27, 0x52, 0x64, 0x49, 0x66,
1567 0x80, 0x9c, 0x74, 0x4f, 0x68, 0x79, 0x82, 0xa4,
1568 0xa5, 0x9c, 0xa5, 0xb3, 0xb0, 0xa9, 0xa8, 0xa5,
1569 0xa2, 0xa9, 0xb1, 0xb4, 0xb3, 0xb0, 0xaf, 0xaf,
1570 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1571 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1572 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1573 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1574 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1575 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1576 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1577 0xaf, 0xae, 0xae, 0xb3, 0xbc, 0xaa, 0x19, 0x02,
1578 0xab, 0xac, 0x7b, 0x61, 0x96, 0xbf, 0xb0, 0x9e,
1579 0xa5, 0xaa, 0xaa, 0xa6, 0xac, 0xa4, 0x94, 0xa0,
1580 0xa7, 0xab, 0xad, 0xa9, 0xa1, 0x9d, 0xa1, 0xa6,
1581 0xac, 0xa7, 0x8d, 0x6f, 0x76, 0x9e, 0xb9, 0xba,
1582 0xb3, 0xab, 0x9f, 0x9d, 0x9f, 0xa0, 0xaa, 0xbc,
1583 0x96, 0x7c, 0x9f, 0xac, 0xab, 0xb8, 0xab, 0xaa,
1584 0xab, 0xad, 0xad, 0xaa, 0xa5, 0xa3, 0xa9, 0xb1,
1585 0xaa, 0xa9, 0xad, 0xad, 0xab, 0x92, 0x89, 0xba,
1586 0xab, 0x9d, 0xaa, 0xb0, 0xae, 0xa7, 0x99, 0xa7,
1587 0xb0, 0xac, 0xa8, 0xa5, 0xa5, 0xa9, 0xaf, 0xb3,
1588 0xb2, 0xae, 0xae, 0xb5, 0xb3, 0xa3, 0xa2, 0xb5,
1589 0xb9, 0xab, 0xae, 0xae, 0xb3, 0xb6, 0xa0, 0x92,
1590 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1591 0xb2, 0xb2, 0xab, 0xb1, 0xaf, 0xa7, 0x8b, 0xa3,
1592 0xb0, 0xb0, 0xaf, 0xaf, 0xae, 0xad, 0xad, 0xac,
1593 0xaf, 0xae, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xaa,
1594 0x9a, 0xab, 0xb0, 0xac, 0xad, 0xaf, 0xab, 0xab,
1595 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1596 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1597 0xba, 0xc2, 0xcb, 0xcb, 0xbf, 0xad, 0xa0, 0x9a,
1598 0xa3, 0xac, 0xb0, 0xac, 0xaa, 0xad, 0xae, 0xab,
1599 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1600 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1601 0xae, 0xaf, 0xaf, 0xb0, 0xb1, 0xb1, 0xb2, 0xb2,
1602 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1603 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1604 0xa6, 0x82, 0x67, 0x6b, 0x74, 0x70, 0x6d, 0x70,
1605 0x6a, 0x75, 0x7e, 0x79, 0x6a, 0x5f, 0x60, 0x66,
1606 0x63, 0x63, 0x66, 0x6a, 0x6d, 0x68, 0x5e, 0x56,
1607 0x69, 0x65, 0x5e, 0x57, 0x55, 0x5c, 0x69, 0x72,
1608 0x6d, 0x70, 0x73, 0x73, 0x6e, 0x63, 0x58, 0x51,
1609 0x5b, 0x5b, 0x5b, 0x59, 0x54, 0x4e, 0x48, 0x45,
1610 0x26, 0x29, 0x31, 0x38, 0x65, 0x7b, 0x62, 0x6e,
1611 0x9e, 0xa9, 0x86, 0x61, 0x5c, 0x7d, 0xa4, 0x99,
1612 0xa1, 0xa2, 0xae, 0xb3, 0xa7, 0xa1, 0xa8, 0xaa,
1613 0xa3, 0xa9, 0xb1, 0xb4, 0xb3, 0xb0, 0xaf, 0xb0,
1614 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1615 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1616 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1617 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1618 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1619 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1620 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1621 0xb2, 0xb0, 0xb1, 0xb5, 0xbe, 0xac, 0x1b, 0x03,
1622 0xa2, 0x79, 0x6a, 0x94, 0xbc, 0xb3, 0xa5, 0xaf,
1623 0xa2, 0xb1, 0xa6, 0xa7, 0xaf, 0x9b, 0x95, 0xa8,
1624 0xa7, 0xaa, 0xae, 0xae, 0xab, 0xa5, 0x9e, 0x9a,
1625 0xb2, 0xa6, 0x9e, 0xa5, 0xb4, 0xb9, 0xb1, 0xa5,
1626 0xac, 0xa9, 0xa6, 0xa1, 0xa5, 0xb8, 0xc0, 0xb4,
1627 0x83, 0x65, 0x7f, 0x91, 0x94, 0x9e, 0x99, 0xa3,
1628 0xa4, 0xa9, 0xae, 0xae, 0xac, 0xac, 0xae, 0xb1,
1629 0xac, 0xb3, 0xa7, 0xb7, 0x8f, 0x7d, 0xbd, 0xb7,
1630 0xa6, 0xa1, 0xae, 0xb2, 0xab, 0xa2, 0x9c, 0xac,
1631 0xb4, 0xb1, 0xad, 0xaa, 0xab, 0xae, 0xb2, 0xb5,
1632 0xab, 0xa6, 0xad, 0xb2, 0xa7, 0x9f, 0xa9, 0xb6,
1633 0xb0, 0xaa, 0xb2, 0xb6, 0xbb, 0xb6, 0x9b, 0x91,
1634 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1635 0xb2, 0xb2, 0xab, 0xb2, 0xb0, 0xa7, 0x8b, 0xa3,
1636 0xb1, 0xb1, 0xb0, 0xaf, 0xaf, 0xae, 0xad, 0xad,
1637 0xae, 0xae, 0xae, 0xad, 0xad, 0xac, 0xac, 0xab,
1638 0xa0, 0xa6, 0xaf, 0xb0, 0xab, 0xae, 0xb0, 0xaa,
1639 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1640 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1641 0xa5, 0xb7, 0xbc, 0xb0, 0xaa, 0xaf, 0xab, 0x9e,
1642 0xa3, 0xac, 0xb1, 0xad, 0xab, 0xae, 0xaf, 0xac,
1643 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1644 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1645 0xaf, 0xaf, 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3,
1646 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1647 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1648 0xad, 0x8a, 0x69, 0x60, 0x64, 0x67, 0x6e, 0x77,
1649 0x6c, 0x77, 0x82, 0x83, 0x7b, 0x71, 0x6c, 0x6c,
1650 0x6f, 0x6d, 0x68, 0x61, 0x5d, 0x62, 0x6c, 0x75,
1651 0x62, 0x5c, 0x58, 0x5b, 0x64, 0x6c, 0x70, 0x6f,
1652 0x6b, 0x6f, 0x73, 0x75, 0x70, 0x67, 0x5c, 0x55,
1653 0x58, 0x59, 0x59, 0x58, 0x55, 0x50, 0x4b, 0x48,
1654 0x4c, 0x30, 0x2a, 0x38, 0x62, 0x82, 0x75, 0x6e,
1655 0x52, 0x70, 0x84, 0x65, 0x52, 0x7a, 0x99, 0x96,
1656 0xa3, 0xa7, 0xb0, 0xad, 0xa0, 0xa1, 0xaa, 0xa8,
1657 0xa5, 0xaa, 0xb1, 0xb4, 0xb2, 0xb0, 0xb0, 0xb1,
1658 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1659 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1660 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1661 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1662 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1663 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1664 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1665 0xb4, 0xb3, 0xb2, 0xb6, 0xc0, 0xad, 0x1c, 0x04,
1666 0x72, 0x75, 0xa0, 0xbc, 0xa8, 0xa1, 0xaf, 0xab,
1667 0xa4, 0xb1, 0xa5, 0xac, 0xaa, 0x93, 0x9e, 0xac,
1668 0xa9, 0xa9, 0xaa, 0xae, 0xb0, 0xac, 0xa2, 0x9a,
1669 0xad, 0xb0, 0xab, 0x9e, 0x9c, 0xa7, 0xaf, 0xae,
1670 0xb0, 0xa7, 0x99, 0x9b, 0xb3, 0xb2, 0x73, 0x29,
1671 0x55, 0x64, 0x9b, 0xaf, 0x9f, 0x98, 0x9f, 0xb6,
1672 0xb3, 0xab, 0xa6, 0xa9, 0xab, 0xac, 0xb0, 0xb6,
1673 0xad, 0xa8, 0xc1, 0x9d, 0x84, 0xac, 0xb0, 0xa1,
1674 0xa3, 0xa6, 0xb2, 0xb4, 0xa9, 0x9f, 0xa2, 0xb1,
1675 0xb3, 0xb4, 0xb5, 0xb6, 0xb4, 0xb2, 0xaf, 0xad,
1676 0xb8, 0xb0, 0xb6, 0xb4, 0xa0, 0xa0, 0xb1, 0xb6,
1677 0xb3, 0xad, 0xb2, 0xb2, 0xb7, 0xb1, 0x9b, 0x9d,
1678 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1679 0xb3, 0xb3, 0xac, 0xb3, 0xb0, 0xa8, 0x8c, 0xa4,
1680 0xb2, 0xb1, 0xb1, 0xb0, 0xaf, 0xaf, 0xae, 0xae,
1681 0xae, 0xae, 0xae, 0xae, 0xae, 0xad, 0xad, 0xad,
1682 0xa7, 0xa2, 0xad, 0xb2, 0xa9, 0xae, 0xb4, 0xaa,
1683 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1684 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1685 0xac, 0xae, 0xad, 0xab, 0xac, 0xae, 0xa7, 0x9d,
1686 0xa4, 0xad, 0xb1, 0xad, 0xab, 0xae, 0xaf, 0xac,
1687 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1688 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1689 0xb0, 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4,
1690 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1691 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1692 0xbb, 0x9e, 0x7b, 0x65, 0x5f, 0x62, 0x6b, 0x74,
1693 0x74, 0x7b, 0x80, 0x7e, 0x72, 0x62, 0x54, 0x4e,
1694 0x5f, 0x64, 0x6a, 0x6d, 0x6f, 0x72, 0x77, 0x7b,
1695 0x77, 0x7d, 0x84, 0x88, 0x85, 0x7c, 0x71, 0x6a,
1696 0x7c, 0x81, 0x85, 0x82, 0x74, 0x5e, 0x47, 0x38,
1697 0x4d, 0x4e, 0x4f, 0x4f, 0x4c, 0x48, 0x43, 0x40,
1698 0x3f, 0x39, 0x4a, 0x4f, 0x43, 0x51, 0x70, 0x85,
1699 0x92, 0x6f, 0x87, 0x72, 0x66, 0x8e, 0x86, 0x78,
1700 0xaa, 0xa9, 0xaa, 0xa4, 0x9e, 0xa8, 0xac, 0xa0,
1701 0xa7, 0xac, 0xb1, 0xb3, 0xb2, 0xb0, 0xb1, 0xb3,
1702 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1703 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1704 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1705 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1706 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1707 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1708 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1709 0xb4, 0xb2, 0xb2, 0xb6, 0xbf, 0xac, 0x1a, 0x02,
1710 0x6d, 0xa0, 0xbc, 0xae, 0xa6, 0xaf, 0xaf, 0xa2,
1711 0xab, 0xaa, 0xa7, 0xb0, 0x9f, 0x93, 0xab, 0xaa,
1712 0xac, 0xa8, 0xa5, 0xa8, 0xae, 0xb0, 0xab, 0xa5,
1713 0x8c, 0xa1, 0xa9, 0x9d, 0x9b, 0xaa, 0xaf, 0xa7,
1714 0xab, 0xad, 0xa3, 0xa6, 0xb1, 0x96, 0x65, 0x50,
1715 0x9f, 0x98, 0xa2, 0xa9, 0xad, 0xb4, 0xae, 0xa8,
1716 0xb3, 0xab, 0xac, 0xb3, 0xb0, 0xa4, 0xa6, 0xb2,
1717 0xb5, 0xad, 0xa0, 0x7e, 0x99, 0xbd, 0xa3, 0xa3,
1718 0xa1, 0xab, 0xb3, 0xb4, 0xa8, 0x9e, 0xa8, 0xb4,
1719 0xaa, 0xac, 0xaf, 0xb1, 0xb1, 0xaf, 0xac, 0xaa,
1720 0xad, 0xaa, 0xb2, 0xae, 0x9e, 0xa4, 0xb4, 0xb2,
1721 0xb5, 0xb0, 0xb2, 0xaf, 0xb5, 0xac, 0x9b, 0xa9,
1722 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1723 0xb4, 0xb4, 0xad, 0xb3, 0xb1, 0xa9, 0x8d, 0xa5,
1724 0xb2, 0xb2, 0xb1, 0xb1, 0xb0, 0xaf, 0xaf, 0xae,
1725 0xae, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf,
1726 0xab, 0xa2, 0xaa, 0xb2, 0xab, 0xae, 0xb4, 0xac,
1727 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1728 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
1729 0xab, 0xab, 0xaf, 0xb3, 0xb3, 0xac, 0xa5, 0xa1,
1730 0xa5, 0xae, 0xb2, 0xae, 0xac, 0xaf, 0xb0, 0xad,
1731 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1732 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1733 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
1734 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1735 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1736 0xb6, 0xab, 0x97, 0x82, 0x78, 0x79, 0x7e, 0x80,
1737 0x70, 0x7a, 0x80, 0x78, 0x66, 0x5b, 0x5e, 0x66,
1738 0x79, 0x6d, 0x60, 0x5c, 0x63, 0x73, 0x82, 0x8c,
1739 0x85, 0x89, 0x90, 0x95, 0x93, 0x87, 0x75, 0x68,
1740 0x6c, 0x69, 0x65, 0x60, 0x5c, 0x59, 0x57, 0x56,
1741 0x4a, 0x4b, 0x4b, 0x4a, 0x47, 0x42, 0x3d, 0x3a,
1742 0x31, 0x26, 0x3b, 0x56, 0x50, 0x55, 0x6d, 0x6d,
1743 0x94, 0x74, 0x87, 0x98, 0x86, 0x8b, 0x9a, 0x92,
1744 0xa8, 0xa7, 0xa8, 0xa3, 0x9e, 0xa8, 0xad, 0xa0,
1745 0xa9, 0xad, 0xb1, 0xb3, 0xb1, 0xb1, 0xb3, 0xb5,
1746 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1747 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1748 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1749 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1750 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1751 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1752 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1753 0xb3, 0xb2, 0xb1, 0xb4, 0xbd, 0xaa, 0x18, 0x00,
1754 0xa5, 0xaf, 0xaa, 0xaa, 0xb6, 0xb1, 0xa7, 0xac,
1755 0xb0, 0xa6, 0xaa, 0xac, 0x97, 0x9b, 0xb2, 0xa8,
1756 0xae, 0xa9, 0xa4, 0xa6, 0xac, 0xb0, 0xb0, 0xae,
1757 0xa8, 0x98, 0x97, 0xab, 0xb7, 0xb2, 0xaf, 0xb4,
1758 0xaa, 0xad, 0x9d, 0xa0, 0xb2, 0x90, 0x53, 0x3b,
1759 0x93, 0x99, 0xa0, 0xa4, 0xa8, 0xae, 0xae, 0xac,
1760 0xa4, 0xa6, 0xac, 0xb1, 0xaa, 0xa4, 0xad, 0xbd,
1761 0xb2, 0x9e, 0x72, 0x9c, 0xb4, 0xa6, 0xbb, 0xa0,
1762 0xa1, 0xb0, 0xb2, 0xb4, 0xa9, 0xa0, 0xae, 0xb5,
1763 0xad, 0xad, 0xad, 0xae, 0xb0, 0xb3, 0xb5, 0xb7,
1764 0xac, 0xb1, 0xb3, 0xaa, 0xa3, 0xac, 0xb2, 0xa9,
1765 0xb0, 0xb1, 0xb4, 0xb3, 0xb8, 0xab, 0x98, 0xae,
1766 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1767 0xb5, 0xb5, 0xad, 0xb4, 0xb2, 0xaa, 0x8d, 0xa5,
1768 0xb3, 0xb3, 0xb2, 0xb1, 0xb1, 0xb0, 0xaf, 0xaf,
1769 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1,
1770 0xae, 0xa5, 0xa7, 0xaf, 0xaf, 0xaf, 0xb1, 0xaf,
1771 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1772 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
1773 0xb6, 0xb6, 0xaf, 0xa8, 0xa9, 0xad, 0xa8, 0x9e,
1774 0xa5, 0xae, 0xb3, 0xaf, 0xad, 0xb0, 0xb1, 0xae,
1775 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1776 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1777 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5,
1778 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
1779 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
1780 0xb7, 0xb3, 0x9c, 0x78, 0x62, 0x61, 0x67, 0x68,
1781 0x67, 0x6e, 0x77, 0x7c, 0x7e, 0x7e, 0x81, 0x84,
1782 0x76, 0x72, 0x6e, 0x6f, 0x73, 0x75, 0x73, 0x71,
1783 0x73, 0x6c, 0x69, 0x71, 0x7e, 0x7f, 0x71, 0x62,
1784 0x5e, 0x6b, 0x7d, 0x88, 0x85, 0x74, 0x5e, 0x4e,
1785 0x55, 0x55, 0x54, 0x51, 0x4c, 0x46, 0x3f, 0x3c,
1786 0x30, 0x30, 0x41, 0x5c, 0x4e, 0x44, 0x63, 0x6c,
1787 0x94, 0xb1, 0x65, 0x79, 0xbb, 0x9f, 0x8e, 0x86,
1788 0x9e, 0xa2, 0xac, 0xaa, 0x9e, 0xa1, 0xaa, 0xa8,
1789 0xab, 0xae, 0xb2, 0xb2, 0xb1, 0xb1, 0xb4, 0xb7,
1790 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1791 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1792 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1793 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1794 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1795 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1796 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1797 0xb6, 0xb4, 0xb3, 0xb6, 0xbe, 0xab, 0x18, 0x00,
1798 0xb9, 0xad, 0xa9, 0xaa, 0xaa, 0xae, 0xaf, 0xa9,
1799 0xb1, 0xa9, 0xad, 0x9f, 0x95, 0xa8, 0xb1, 0xa9,
1800 0xaf, 0xac, 0xa9, 0xa9, 0xab, 0xae, 0xaf, 0xaf,
1801 0xaf, 0x9f, 0x93, 0x9a, 0xa7, 0xaf, 0xb3, 0xb5,
1802 0xa6, 0xa7, 0x9f, 0xa3, 0xb4, 0xb1, 0x9f, 0x98,
1803 0xb1, 0xa4, 0x94, 0x98, 0xa3, 0xa8, 0xae, 0xb0,
1804 0xab, 0xad, 0xa7, 0x9d, 0x9f, 0xae, 0xb6, 0xb4,
1805 0x98, 0x7a, 0x9f, 0xc0, 0xba, 0xb9, 0xab, 0x96,
1806 0xa3, 0xb2, 0xaf, 0xb2, 0xaa, 0xa3, 0xb3, 0xb4,
1807 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4,
1808 0xc1, 0xc6, 0xb6, 0xa0, 0xa3, 0xb1, 0xb3, 0xad,
1809 0xae, 0xb1, 0xb5, 0xb5, 0xba, 0xa9, 0x96, 0xb2,
1810 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1811 0xb5, 0xb5, 0xae, 0xb5, 0xb2, 0xaa, 0x8e, 0xa6,
1812 0xb4, 0xb3, 0xb3, 0xb2, 0xb1, 0xb1, 0xb0, 0xb0,
1813 0xad, 0xae, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb2,
1814 0xaf, 0xa9, 0xa4, 0xab, 0xb4, 0xb1, 0xad, 0xb4,
1815 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1816 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1817 0xa4, 0xb0, 0xb5, 0xad, 0xa9, 0xad, 0xae, 0xa9,
1818 0xa6, 0xaf, 0xb3, 0xaf, 0xad, 0xb0, 0xb1, 0xae,
1819 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1820 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1821 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6,
1822 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1823 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1824 0xbe, 0xbd, 0xa3, 0x77, 0x60, 0x6c, 0x80, 0x88,
1825 0x82, 0x7f, 0x81, 0x8c, 0x98, 0x98, 0x8c, 0x7f,
1826 0x7c, 0x79, 0x73, 0x6b, 0x66, 0x68, 0x72, 0x7a,
1827 0x75, 0x70, 0x6e, 0x74, 0x7d, 0x7d, 0x74, 0x69,
1828 0x5b, 0x5a, 0x5a, 0x5b, 0x5c, 0x5e, 0x61, 0x62,
1829 0x60, 0x5f, 0x5d, 0x58, 0x51, 0x49, 0x41, 0x3c,
1830 0x4e, 0x3d, 0x31, 0x55, 0x64, 0x5a, 0x68, 0x61,
1831 0x71, 0xc5, 0x60, 0x23, 0x7a, 0x87, 0x75, 0x98,
1832 0x99, 0x9b, 0xa8, 0xaf, 0xa4, 0xa1, 0xa8, 0xab,
1833 0xac, 0xaf, 0xb2, 0xb2, 0xb0, 0xb1, 0xb5, 0xb9,
1834 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
1835 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1836 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1837 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1838 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1839 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1840 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1841 0xbc, 0xba, 0xb9, 0xbb, 0xc3, 0xaf, 0x1d, 0x05,
1842 0xad, 0xa9, 0xa6, 0xa7, 0xa9, 0xa9, 0xa8, 0xa5,
1843 0xb0, 0xae, 0xaf, 0x95, 0x96, 0xb1, 0xac, 0xaa,
1844 0xb0, 0xaf, 0xae, 0xad, 0xac, 0xab, 0xab, 0xab,
1845 0xae, 0xad, 0xa8, 0x9e, 0x98, 0x99, 0xa1, 0xa8,
1846 0xb9, 0x98, 0x90, 0xa7, 0xb2, 0xae, 0xb4, 0xc1,
1847 0xba, 0xad, 0x9f, 0xad, 0xb7, 0xac, 0xac, 0xb1,
1848 0xa9, 0xb4, 0xb3, 0xac, 0xb8, 0xc2, 0xa1, 0x70,
1849 0x7f, 0xa7, 0xba, 0xad, 0xad, 0xb5, 0xaa, 0xa1,
1850 0xa5, 0xb4, 0xad, 0xb1, 0xac, 0xa5, 0xb6, 0xb3,
1851 0xb8, 0xb9, 0xbb, 0xb9, 0xb4, 0xab, 0xa1, 0x9b,
1852 0xa4, 0xa8, 0x8d, 0x76, 0x8c, 0xae, 0xbc, 0xc2,
1853 0xb1, 0xb4, 0xb4, 0xb1, 0xb7, 0xa6, 0x97, 0xb9,
1854 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1855 0xb5, 0xb5, 0xae, 0xb5, 0xb3, 0xaa, 0x8e, 0xa6,
1856 0xb4, 0xb4, 0xb3, 0xb2, 0xb2, 0xb1, 0xb0, 0xb0,
1857 0xad, 0xae, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3,
1858 0xaf, 0xad, 0xa3, 0xa8, 0xb8, 0xb2, 0xaa, 0xb6,
1859 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1860 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1861 0xb6, 0xb0, 0xaa, 0xaa, 0xae, 0xaf, 0xaa, 0xa5,
1862 0xa6, 0xaf, 0xb4, 0xb0, 0xae, 0xb1, 0xb2, 0xaf,
1863 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1864 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1865 0xb2, 0xb2, 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6,
1866 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
1867 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1868 0xb8, 0xbd, 0xa8, 0x7d, 0x66, 0x73, 0x88, 0x8f,
1869 0x79, 0x76, 0x74, 0x74, 0x76, 0x76, 0x73, 0x70,
1870 0x66, 0x72, 0x7a, 0x76, 0x6a, 0x67, 0x71, 0x7e,
1871 0x7e, 0x89, 0x93, 0x92, 0x86, 0x77, 0x6e, 0x6b,
1872 0x66, 0x6d, 0x75, 0x79, 0x73, 0x65, 0x55, 0x4a,
1873 0x64, 0x63, 0x60, 0x5a, 0x51, 0x47, 0x3e, 0x39,
1874 0x32, 0x38, 0x3b, 0x6b, 0x7d, 0x69, 0x73, 0x73,
1875 0x7f, 0xac, 0x8a, 0x1d, 0x50, 0xb5, 0x9a, 0x98,
1876 0x9c, 0x94, 0x9e, 0xae, 0xad, 0xa8, 0xa8, 0xa7,
1877 0xad, 0xb0, 0xb2, 0xb1, 0xb0, 0xb1, 0xb5, 0xb9,
1878 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1879 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1880 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1881 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
1882 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1883 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
1884 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
1885 0xc1, 0xbf, 0xbe, 0xc0, 0xc8, 0xb4, 0x21, 0x09,
1886 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1887 0xab, 0xb9, 0x9e, 0x95, 0xaa, 0xae, 0xad, 0xad,
1888 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1889 0xae, 0xb2, 0xb3, 0xaf, 0xa6, 0x9d, 0x99, 0x98,
1890 0xaf, 0x9a, 0xa4, 0xb4, 0xac, 0xac, 0xb1, 0xa5,
1891 0xae, 0xa7, 0x9b, 0xa8, 0xb0, 0xac, 0xb1, 0xad,
1892 0xb6, 0xa4, 0xb1, 0xcb, 0xb1, 0x79, 0x79, 0xa6,
1893 0xc6, 0xac, 0xab, 0xac, 0xb7, 0xb5, 0x99, 0x99,
1894 0xb3, 0xaf, 0xb0, 0xa8, 0x9e, 0xac, 0xba, 0xb2,
1895 0xb6, 0xb2, 0xb1, 0xb5, 0xb2, 0x99, 0x6e, 0x4c,
1896 0x77, 0x97, 0xae, 0xae, 0xb0, 0xbb, 0xbc, 0xb1,
1897 0xb7, 0xb3, 0xab, 0xbf, 0xb3, 0x93, 0xa7, 0xbf,
1898 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1899 0xb3, 0xb4, 0xb9, 0xb1, 0xb6, 0xaa, 0x96, 0xb9,
1900 0xb5, 0xb5, 0xb4, 0xb3, 0xb3, 0xb2, 0xb1, 0xb1,
1901 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1902 0xae, 0xb4, 0xa8, 0xa0, 0xae, 0xb5, 0xb0, 0xb2,
1903 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1904 0xae, 0xaf, 0xb0, 0xb1, 0xb1, 0xaf, 0xad, 0xac,
1905 0xb2, 0xae, 0xac, 0xaf, 0xb4, 0xb1, 0xa5, 0x9a,
1906 0x98, 0xa9, 0xb1, 0xaa, 0xab, 0xb6, 0xb8, 0xae,
1907 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1908 0xb0, 0xb0, 0xb1, 0xb2, 0xb2, 0xb3, 0xb4, 0xb4,
1909 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7,
1910 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1911 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
1912 0xc0, 0xb1, 0xa1, 0x80, 0x70, 0x74, 0x6e, 0x70,
1913 0x77, 0x75, 0x78, 0x7d, 0x7c, 0x78, 0x7c, 0x85,
1914 0x77, 0x79, 0x7b, 0x7a, 0x78, 0x78, 0x7b, 0x7e,
1915 0x7b, 0x7a, 0x82, 0x8b, 0x83, 0x71, 0x6f, 0x7a,
1916 0x82, 0x79, 0x6d, 0x62, 0x5d, 0x5c, 0x5c, 0x5d,
1917 0x59, 0x54, 0x51, 0x51, 0x53, 0x51, 0x4b, 0x45,
1918 0x40, 0x43, 0x2f, 0x48, 0x77, 0x55, 0x31, 0x58,
1919 0x7a, 0x8e, 0x7e, 0x31, 0x3e, 0x68, 0x97, 0x8d,
1920 0x98, 0x9e, 0xa3, 0xac, 0xa6, 0xa0, 0xae, 0xaf,
1921 0xb7, 0xb2, 0xad, 0xae, 0xb3, 0xb6, 0xb4, 0xb1,
1922 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7,
1923 0xb9, 0xb8, 0xb6, 0xb4, 0xb4, 0xb5, 0xb6, 0xb7,
1924 0xb8, 0xb7, 0xb4, 0xb2, 0xb2, 0xb5, 0xb8, 0xba,
1925 0xc6, 0xc3, 0xbe, 0xb9, 0xb7, 0xb7, 0xb9, 0xba,
1926 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2,
1927 0xb6, 0xb8, 0xbb, 0xbf, 0xc4, 0xc8, 0xcc, 0xcd,
1928 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0xcb, 0xcb, 0xcb,
1929 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
1930 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
1931 0xab, 0xb8, 0x9e, 0x97, 0xab, 0xae, 0xae, 0xae,
1932 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1933 0xb4, 0xaf, 0xa9, 0xaa, 0xad, 0xac, 0xa4, 0x9c,
1934 0x90, 0x84, 0x98, 0xb2, 0xb1, 0xb4, 0xb8, 0xab,
1935 0xb1, 0xa8, 0x99, 0xa5, 0xae, 0xae, 0xb8, 0xb7,
1936 0xbc, 0xbe, 0xa1, 0x73, 0x70, 0x99, 0xb5, 0xb2,
1937 0xaf, 0xb2, 0xa9, 0xaf, 0xb6, 0xa0, 0x94, 0xa2,
1938 0xb2, 0xae, 0xaf, 0xa8, 0xa0, 0xad, 0xb9, 0xb3,
1939 0xb4, 0xb1, 0xaf, 0xb1, 0xb4, 0xb2, 0xa9, 0xa2,
1940 0xc0, 0xc9, 0xc4, 0xb1, 0xa5, 0xaa, 0xb2, 0xb2,
1941 0xb5, 0xb3, 0xb1, 0xbe, 0xad, 0x95, 0xac, 0xbe,
1942 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
1943 0xb4, 0xb5, 0xb9, 0xb2, 0xb6, 0xa9, 0x99, 0xba,
1944 0xb5, 0xb5, 0xb4, 0xb4, 0xb3, 0xb2, 0xb2, 0xb1,
1945 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1946 0xaf, 0xb4, 0xa9, 0xa2, 0xae, 0xb5, 0xb1, 0xb2,
1947 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
1948 0xad, 0xae, 0xb0, 0xb1, 0xb1, 0xb0, 0xae, 0xad,
1949 0xac, 0xab, 0xac, 0xaf, 0xb2, 0xb3, 0xb1, 0xaf,
1950 0x9c, 0xa7, 0xb0, 0xb2, 0xb2, 0xb4, 0xb3, 0xb1,
1951 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1952 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
1953 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb7,
1954 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
1955 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
1956 0xbd, 0xb4, 0xac, 0x90, 0x81, 0x83, 0x7c, 0x7e,
1957 0x78, 0x72, 0x73, 0x7c, 0x81, 0x7f, 0x7c, 0x7e,
1958 0x92, 0x86, 0x75, 0x69, 0x68, 0x70, 0x7b, 0x83,
1959 0x80, 0x7b, 0x7b, 0x7d, 0x75, 0x69, 0x6c, 0x78,
1960 0x77, 0x64, 0x50, 0x4c, 0x54, 0x5b, 0x57, 0x50,
1961 0x43, 0x41, 0x43, 0x47, 0x4c, 0x4a, 0x42, 0x3a,
1962 0x3e, 0x53, 0x46, 0x45, 0x63, 0x56, 0x37, 0x3f,
1963 0x88, 0x93, 0x7f, 0x5e, 0x47, 0x4a, 0x51, 0x5f,
1964 0x84, 0xa5, 0xb5, 0xac, 0x99, 0x9b, 0xb0, 0xae,
1965 0xb1, 0xae, 0xad, 0xaf, 0xb4, 0xb6, 0xb4, 0xb0,
1966 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb7,
1967 0xb9, 0xb8, 0xb6, 0xb4, 0xb4, 0xb5, 0xb7, 0xb8,
1968 0xb9, 0xb7, 0xb6, 0xb5, 0xb6, 0xb9, 0xbc, 0xbe,
1969 0xc3, 0xc1, 0xbe, 0xbb, 0xb8, 0xb7, 0xb7, 0xb7,
1970 0xb4, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba,
1971 0xbe, 0xbf, 0xc1, 0xc4, 0xc7, 0xca, 0xcc, 0xcd,
1972 0xcd, 0xcd, 0xcd, 0xcc, 0xcb, 0xcb, 0xca, 0xca,
1973 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
1974 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
1975 0xac, 0xb5, 0x9d, 0x9a, 0xac, 0xae, 0xaf, 0xae,
1976 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
1977 0xae, 0xae, 0xae, 0xac, 0xab, 0xac, 0xae, 0xb0,
1978 0xad, 0x93, 0x89, 0x88, 0x81, 0x8e, 0xa4, 0xa7,
1979 0xa9, 0xa8, 0xa3, 0xb2, 0xb6, 0xa6, 0x9d, 0x90,
1980 0x6c, 0x6c, 0x80, 0xa5, 0xbf, 0xc0, 0xb7, 0xb4,
1981 0xa2, 0xb2, 0xad, 0xb7, 0xac, 0x91, 0xa0, 0xac,
1982 0xb2, 0xad, 0xac, 0xa8, 0xa4, 0xae, 0xb8, 0xb3,
1983 0xab, 0xb1, 0xb7, 0xb8, 0xb7, 0xb8, 0xbd, 0xc2,
1984 0xbb, 0xbb, 0xb8, 0xaf, 0xa9, 0xac, 0xb6, 0xbe,
1985 0xb3, 0xb4, 0xb9, 0xbc, 0xa4, 0x9a, 0xb4, 0xbb,
1986 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
1987 0xb5, 0xb6, 0xb8, 0xb4, 0xb6, 0xa8, 0x9e, 0xbb,
1988 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb3, 0xb2, 0xb2,
1989 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1990 0xb0, 0xb4, 0xac, 0xa4, 0xac, 0xb3, 0xb2, 0xb2,
1991 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
1992 0xac, 0xae, 0xb0, 0xb1, 0xb1, 0xb0, 0xae, 0xad,
1993 0xb5, 0xb5, 0xb4, 0xb1, 0xae, 0xad, 0xb0, 0xb3,
1994 0x98, 0x9e, 0xaa, 0xb4, 0xb5, 0xb1, 0xaf, 0xb2,
1995 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
1996 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5,
1997 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8,
1998 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
1999 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2000 0xbc, 0xb5, 0xad, 0x91, 0x81, 0x86, 0x85, 0x8c,
2001 0x84, 0x89, 0x8f, 0x8e, 0x80, 0x72, 0x74, 0x7e,
2002 0x86, 0x78, 0x6a, 0x67, 0x71, 0x7e, 0x86, 0x89,
2003 0x7d, 0x80, 0x87, 0x8d, 0x86, 0x76, 0x6f, 0x70,
2004 0x6a, 0x64, 0x61, 0x65, 0x69, 0x61, 0x4d, 0x3b,
2005 0x39, 0x46, 0x4d, 0x44, 0x36, 0x36, 0x4b, 0x61,
2006 0x4c, 0x44, 0x39, 0x43, 0x51, 0x46, 0x46, 0x60,
2007 0x80, 0xa6, 0x86, 0x68, 0x57, 0x84, 0x76, 0x6b,
2008 0x8d, 0xc6, 0xae, 0x9e, 0x9f, 0x9d, 0xb5, 0xac,
2009 0xa9, 0xa9, 0xac, 0xb1, 0xb6, 0xb7, 0xb3, 0xb0,
2010 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8,
2011 0xb9, 0xb7, 0xb6, 0xb5, 0xb5, 0xb6, 0xb8, 0xb9,
2012 0xba, 0xb9, 0xb9, 0xba, 0xbc, 0xbf, 0xc2, 0xc4,
2013 0xc0, 0xc0, 0xc0, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4,
2014 0xb6, 0xb7, 0xb8, 0xba, 0xbc, 0xbe, 0xbf, 0xc0,
2015 0xc5, 0xc6, 0xc7, 0xc8, 0xca, 0xcb, 0xcd, 0xcd,
2016 0xce, 0xcd, 0xcc, 0xcc, 0xcb, 0xca, 0xc9, 0xc9,
2017 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2018 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
2019 0xad, 0xb1, 0x9d, 0x9f, 0xae, 0xae, 0xb1, 0xaf,
2020 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
2021 0xab, 0xae, 0xaf, 0xac, 0xa7, 0xa9, 0xb0, 0xb8,
2022 0xa6, 0xa3, 0xaf, 0xb7, 0xab, 0xa0, 0x95, 0x84,
2023 0x8d, 0x82, 0x70, 0x7a, 0x86, 0x8b, 0x9c, 0xa0,
2024 0xb9, 0xc2, 0xc0, 0xb4, 0xb3, 0xba, 0xb3, 0xa1,
2025 0xad, 0xab, 0xb3, 0xb6, 0x99, 0x9a, 0xb8, 0xae,
2026 0xb1, 0xac, 0xa9, 0xa7, 0xa9, 0xb0, 0xb5, 0xb4,
2027 0xab, 0xb5, 0xbf, 0xc0, 0xb8, 0xb2, 0xb1, 0xb3,
2028 0xb2, 0xb0, 0xb3, 0xb8, 0xb4, 0xad, 0xb0, 0xb8,
2029 0xb1, 0xb5, 0xbe, 0xb7, 0x9d, 0xa2, 0xba, 0xb9,
2030 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2031 0xb7, 0xb7, 0xb6, 0xb7, 0xb6, 0xa7, 0xa5, 0xbd,
2032 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb3, 0xb3,
2033 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2034 0xb1, 0xb4, 0xaf, 0xa7, 0xaa, 0xb1, 0xb3, 0xb2,
2035 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2036 0xab, 0xad, 0xaf, 0xb1, 0xb1, 0xb1, 0xaf, 0xae,
2037 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb2, 0xb3, 0xb3,
2038 0x91, 0x9b, 0xa9, 0xb2, 0xb4, 0xb3, 0xb2, 0xb1,
2039 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2040 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6,
2041 0xb5, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9,
2042 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2043 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2044 0xc0, 0xaf, 0x97, 0x6b, 0x51, 0x56, 0x5a, 0x67,
2045 0x73, 0x6b, 0x69, 0x71, 0x77, 0x76, 0x74, 0x75,
2046 0x88, 0x7a, 0x6c, 0x6c, 0x77, 0x7f, 0x7d, 0x77,
2047 0x78, 0x7f, 0x8b, 0x93, 0x8f, 0x82, 0x75, 0x6f,
2048 0x79, 0x76, 0x6d, 0x5c, 0x46, 0x35, 0x2c, 0x2a,
2049 0x4c, 0x41, 0x35, 0x33, 0x3b, 0x44, 0x49, 0x48,
2050 0x3a, 0x44, 0x44, 0x38, 0x3a, 0x54, 0x67, 0x64,
2051 0x75, 0xa7, 0x7f, 0x4a, 0x62, 0xaf, 0x96, 0x5c,
2052 0x91, 0xa5, 0xbd, 0x9d, 0x94, 0xaf, 0xac, 0xb0,
2053 0xa3, 0xa7, 0xad, 0xb4, 0xb8, 0xb7, 0xb3, 0xb0,
2054 0xb5, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9,
2055 0xb8, 0xb7, 0xb6, 0xb5, 0xb6, 0xb8, 0xba, 0xbb,
2056 0xbb, 0xbc, 0xbe, 0xc0, 0xc3, 0xc6, 0xc9, 0xca,
2057 0xc2, 0xc3, 0xc5, 0xc5, 0xc3, 0xbe, 0xb9, 0xb6,
2058 0xba, 0xbb, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xbf,
2059 0xc6, 0xc6, 0xc8, 0xc9, 0xcb, 0xcd, 0xce, 0xcf,
2060 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc8, 0xc7, 0xc7,
2061 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2062 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
2063 0xad, 0xad, 0x9d, 0xa4, 0xb0, 0xae, 0xb2, 0xaf,
2064 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
2065 0xb4, 0xad, 0xa6, 0xa6, 0xab, 0xb0, 0xaf, 0xad,
2066 0x97, 0x9d, 0xac, 0xb7, 0xb9, 0xbc, 0xbd, 0xb6,
2067 0xb9, 0xb3, 0xa8, 0xb4, 0xbc, 0xb8, 0xbc, 0xb8,
2068 0xb0, 0xae, 0xae, 0xaf, 0xad, 0xa9, 0xaa, 0xad,
2069 0xb8, 0xa8, 0xb0, 0x9e, 0x8f, 0xae, 0xbd, 0xac,
2070 0xb0, 0xab, 0xa6, 0xa7, 0xaf, 0xb2, 0xb2, 0xb5,
2071 0xb3, 0xb7, 0xba, 0xb9, 0xb7, 0xb7, 0xb9, 0xbc,
2072 0xbc, 0xb3, 0xaf, 0xb0, 0xa9, 0x9d, 0x9d, 0xa7,
2073 0xb2, 0xb7, 0xbf, 0xaf, 0x9d, 0xab, 0xbb, 0xb9,
2074 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2075 0xb9, 0xb9, 0xb5, 0xb9, 0xb5, 0xa6, 0xac, 0xbf,
2076 0xb7, 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4, 0xb3,
2077 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2078 0xb3, 0xb4, 0xb2, 0xab, 0xa8, 0xb0, 0xb5, 0xb2,
2079 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2080 0xaa, 0xac, 0xaf, 0xb1, 0xb2, 0xb1, 0xb0, 0xaf,
2081 0xb1, 0xae, 0xad, 0xb1, 0xb6, 0xb5, 0xac, 0xa4,
2082 0xa2, 0xb3, 0xbc, 0xb7, 0xb4, 0xb8, 0xb4, 0xaa,
2083 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2084 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb6,
2085 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xb9,
2086 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2087 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2088 0xca, 0xb6, 0x9c, 0x72, 0x60, 0x6c, 0x76, 0x86,
2089 0x7d, 0x6e, 0x65, 0x6e, 0x7b, 0x7e, 0x7c, 0x7a,
2090 0x84, 0x73, 0x62, 0x60, 0x6b, 0x76, 0x79, 0x75,
2091 0x78, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x78, 0x74,
2092 0x7a, 0x7d, 0x7b, 0x72, 0x67, 0x64, 0x6c, 0x75,
2093 0x60, 0x68, 0x6e, 0x67, 0x57, 0x45, 0x3b, 0x38,
2094 0x2e, 0x41, 0x52, 0x4d, 0x4a, 0x5f, 0x65, 0x50,
2095 0x71, 0x8b, 0x74, 0x4a, 0x86, 0xa8, 0x8f, 0x59,
2096 0x78, 0xb6, 0x9a, 0x84, 0xa3, 0xab, 0xb1, 0xb7,
2097 0xa2, 0xa8, 0xaf, 0xb5, 0xb7, 0xb6, 0xb4, 0xb2,
2098 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xb9,
2099 0xb8, 0xb7, 0xb6, 0xb6, 0xb7, 0xb9, 0xbb, 0xbd,
2100 0xbe, 0xc0, 0xc2, 0xc5, 0xc8, 0xcb, 0xcc, 0xcd,
2101 0xc6, 0xc8, 0xca, 0xca, 0xc7, 0xc3, 0xbe, 0xba,
2102 0xc0, 0xbf, 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xbb,
2103 0xc2, 0xc3, 0xc5, 0xc8, 0xcb, 0xce, 0xd0, 0xd1,
2104 0xce, 0xcd, 0xcc, 0xcb, 0xc9, 0xc7, 0xc6, 0xc5,
2105 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2106 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
2107 0xae, 0xa9, 0x9d, 0xa8, 0xb2, 0xaf, 0xb4, 0xb0,
2108 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2109 0xb0, 0xae, 0xab, 0xab, 0xab, 0xad, 0xad, 0xac,
2110 0x9b, 0xa3, 0xa9, 0xa9, 0xa7, 0xaa, 0xab, 0xa8,
2111 0xad, 0xa7, 0x9d, 0xa9, 0xb0, 0xa9, 0xab, 0xa4,
2112 0xa0, 0xa9, 0xae, 0xac, 0xb0, 0xb5, 0xad, 0x9e,
2113 0xb5, 0xad, 0xa5, 0x88, 0x94, 0xb5, 0xad, 0xac,
2114 0xaf, 0xaa, 0xa3, 0xa7, 0xb4, 0xb4, 0xb0, 0xb5,
2115 0xb1, 0xb1, 0xb1, 0xb3, 0xb7, 0xba, 0xbd, 0xbe,
2116 0xc0, 0xb8, 0xb7, 0xbc, 0xbb, 0xb4, 0xb5, 0xbd,
2117 0xb6, 0xba, 0xbb, 0xa5, 0xa3, 0xb5, 0xb7, 0xba,
2118 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2119 0xbb, 0xba, 0xb4, 0xbc, 0xb5, 0xa5, 0xb3, 0xc0,
2120 0xb8, 0xb8, 0xb7, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4,
2121 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2122 0xb4, 0xb4, 0xb5, 0xae, 0xa6, 0xae, 0xb6, 0xb2,
2123 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2124 0xa9, 0xab, 0xae, 0xb0, 0xb2, 0xb2, 0xb1, 0xb0,
2125 0xb8, 0xb3, 0xb0, 0xb3, 0xb7, 0xb3, 0xa5, 0x98,
2126 0x91, 0xa4, 0xae, 0xa8, 0xaa, 0xb7, 0xb9, 0xaf,
2127 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2128 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7,
2129 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba,
2130 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2131 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2132 0xbd, 0xab, 0x96, 0x73, 0x66, 0x6f, 0x6f, 0x76,
2133 0x7c, 0x77, 0x77, 0x7d, 0x81, 0x80, 0x83, 0x8a,
2134 0x82, 0x7a, 0x74, 0x78, 0x83, 0x8d, 0x8f, 0x8d,
2135 0x7b, 0x7d, 0x7b, 0x76, 0x79, 0x7d, 0x79, 0x6f,
2136 0x78, 0x76, 0x75, 0x74, 0x72, 0x6d, 0x66, 0x61,
2137 0x5a, 0x4e, 0x47, 0x51, 0x61, 0x61, 0x4d, 0x38,
2138 0x37, 0x37, 0x46, 0x58, 0x5f, 0x62, 0x64, 0x61,
2139 0x71, 0x87, 0x78, 0x52, 0x97, 0xa9, 0x9f, 0x84,
2140 0x6e, 0xc3, 0xa7, 0xa0, 0xb3, 0xa3, 0xb2, 0xb2,
2141 0xa7, 0xad, 0xb3, 0xb6, 0xb6, 0xb5, 0xb5, 0xb6,
2142 0xb6, 0xb6, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba,
2143 0xb8, 0xb7, 0xb6, 0xb6, 0xb8, 0xba, 0xbd, 0xbf,
2144 0xc1, 0xc3, 0xc6, 0xca, 0xcc, 0xcd, 0xcc, 0xcc,
2145 0xca, 0xca, 0xca, 0xc9, 0xc6, 0xc3, 0xc0, 0xbe,
2146 0xc4, 0xc3, 0xc2, 0xc0, 0xbe, 0xbc, 0xbb, 0xba,
2147 0xc3, 0xc4, 0xc6, 0xc9, 0xcc, 0xcf, 0xd2, 0xd3,
2148 0xce, 0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4, 0xc3,
2149 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2150 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2151 0xaf, 0xa6, 0x9d, 0xac, 0xb3, 0xaf, 0xb5, 0xb0,
2152 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
2153 0xa9, 0xb0, 0xb6, 0xb5, 0xaf, 0xab, 0xaf, 0xb4,
2154 0x8d, 0x9f, 0xac, 0xaf, 0xb0, 0xb0, 0xab, 0xa6,
2155 0xb1, 0xab, 0xa0, 0xad, 0xb4, 0xae, 0xb1, 0xac,
2156 0xb5, 0xb0, 0xaa, 0xaa, 0xb0, 0xb5, 0xb4, 0xb1,
2157 0xae, 0xb1, 0xa0, 0x91, 0xa1, 0xa9, 0xa4, 0xae,
2158 0xaf, 0xaa, 0xa0, 0xa7, 0xb8, 0xb5, 0xae, 0xb6,
2159 0xaf, 0xb1, 0xb4, 0xb6, 0xb6, 0xb5, 0xb4, 0xb4,
2160 0xb3, 0xb2, 0xb6, 0xbd, 0xbf, 0xbb, 0xb8, 0xb8,
2161 0xb9, 0xbd, 0xb4, 0x9c, 0xab, 0xbd, 0xb1, 0xbc,
2162 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2163 0xbd, 0xbb, 0xb3, 0xbe, 0xb5, 0xa5, 0xb8, 0xc2,
2164 0xb9, 0xb8, 0xb8, 0xb7, 0xb6, 0xb6, 0xb5, 0xb5,
2165 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2166 0xb5, 0xb4, 0xb8, 0xb1, 0xa5, 0xad, 0xb8, 0xb2,
2167 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2168 0xa9, 0xab, 0xae, 0xb0, 0xb2, 0xb2, 0xb2, 0xb1,
2169 0xaf, 0xae, 0xae, 0xb2, 0xb6, 0xb7, 0xb2, 0xad,
2170 0xba, 0xc2, 0xc2, 0xb8, 0xb2, 0xb5, 0xb5, 0xb0,
2171 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2172 0xb4, 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7, 0xb8,
2173 0xb7, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb,
2174 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2175 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2176 0xba, 0xa9, 0x99, 0x7e, 0x76, 0x7c, 0x6f, 0x6b,
2177 0x76, 0x6e, 0x6d, 0x74, 0x76, 0x6d, 0x62, 0x5d,
2178 0x70, 0x6e, 0x6b, 0x6b, 0x6c, 0x6d, 0x6d, 0x6d,
2179 0x84, 0x87, 0x82, 0x7a, 0x7b, 0x7e, 0x74, 0x63,
2180 0x64, 0x61, 0x5d, 0x58, 0x55, 0x55, 0x56, 0x57,
2181 0x62, 0x61, 0x5c, 0x51, 0x47, 0x44, 0x48, 0x4d,
2182 0x3a, 0x4a, 0x4a, 0x45, 0x59, 0x74, 0x74, 0x65,
2183 0x75, 0x97, 0x76, 0x50, 0x86, 0xaa, 0x94, 0x7c,
2184 0x80, 0x6f, 0xd4, 0xe6, 0xab, 0xad, 0xa8, 0xa8,
2185 0xaf, 0xb3, 0xb7, 0xb6, 0xb3, 0xb3, 0xb6, 0xba,
2186 0xb7, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb,
2187 0xb8, 0xb7, 0xb6, 0xb7, 0xb8, 0xbb, 0xbe, 0xc0,
2188 0xc4, 0xc6, 0xca, 0xcc, 0xcd, 0xcc, 0xcb, 0xc9,
2189 0xcb, 0xc9, 0xc6, 0xc3, 0xc0, 0xbf, 0xbf, 0xbf,
2190 0xc6, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0,
2191 0xca, 0xcb, 0xcc, 0xce, 0xd0, 0xd1, 0xd2, 0xd3,
2192 0xcf, 0xce, 0xcc, 0xca, 0xc7, 0xc5, 0xc3, 0xc2,
2193 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2194 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2195 0xaf, 0xa5, 0x9d, 0xae, 0xb4, 0xaf, 0xb6, 0xb1,
2196 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
2197 0xaf, 0xae, 0xb0, 0xb5, 0xba, 0xba, 0xb5, 0xb0,
2198 0x9a, 0xab, 0xb2, 0xad, 0xae, 0xb1, 0xb0, 0xae,
2199 0xb3, 0xac, 0x9e, 0xaa, 0xb3, 0xb1, 0xb9, 0xb7,
2200 0xb4, 0xb8, 0xb7, 0xb2, 0xb0, 0xb1, 0xae, 0xa8,
2201 0xac, 0xb0, 0xa3, 0xab, 0xa9, 0x9a, 0xa9, 0xb0,
2202 0xae, 0xa9, 0x9f, 0xa7, 0xba, 0xb6, 0xad, 0xb6,
2203 0xb9, 0xbb, 0xbc, 0xb8, 0xb4, 0xb3, 0xb7, 0xbc,
2204 0xb4, 0xb4, 0xb4, 0xb5, 0xb8, 0xb9, 0xb7, 0xb5,
2205 0xbc, 0xbe, 0xaf, 0x97, 0xb1, 0xc2, 0xad, 0xbe,
2206 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2207 0xbe, 0xbc, 0xb2, 0xbf, 0xb5, 0xa4, 0xbb, 0xc3,
2208 0xb9, 0xb9, 0xb8, 0xb7, 0xb7, 0xb6, 0xb5, 0xb5,
2209 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2210 0xb6, 0xb4, 0xb9, 0xb2, 0xa4, 0xac, 0xb8, 0xb2,
2211 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2212 0xa8, 0xaa, 0xad, 0xb0, 0xb2, 0xb2, 0xb2, 0xb1,
2213 0xb5, 0xb6, 0xb5, 0xb3, 0xb2, 0xb2, 0xb4, 0xb6,
2214 0xb5, 0xb4, 0xb4, 0xb2, 0xaf, 0xaf, 0xb3, 0xb9,
2215 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2216 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7, 0xb8, 0xb8,
2217 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb,
2218 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2219 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2220 0xc4, 0xae, 0x97, 0x77, 0x69, 0x65, 0x4d, 0x3f,
2221 0x5d, 0x6c, 0x81, 0x8b, 0x81, 0x72, 0x72, 0x7a,
2222 0x71, 0x6b, 0x61, 0x58, 0x59, 0x66, 0x79, 0x87,
2223 0x91, 0x8b, 0x78, 0x63, 0x61, 0x6c, 0x6a, 0x5e,
2224 0x4b, 0x5e, 0x6f, 0x6d, 0x5a, 0x48, 0x42, 0x45,
2225 0x34, 0x39, 0x40, 0x43, 0x45, 0x4a, 0x54, 0x5b,
2226 0x52, 0x51, 0x4b, 0x59, 0x70, 0x6a, 0x59, 0x59,
2227 0x6f, 0x90, 0x66, 0x67, 0x95, 0xbb, 0x82, 0x6a,
2228 0x97, 0x65, 0x6a, 0xca, 0xd0, 0xa7, 0xbc, 0xa7,
2229 0xb4, 0xb7, 0xb9, 0xb6, 0xb2, 0xb1, 0xb7, 0xbc,
2230 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb,
2231 0xb7, 0xb7, 0xb6, 0xb7, 0xb9, 0xbc, 0xbf, 0xc1,
2232 0xc6, 0xc8, 0xcb, 0xcd, 0xce, 0xcc, 0xc9, 0xc7,
2233 0xca, 0xc6, 0xc1, 0xbd, 0xba, 0xbb, 0xbc, 0xbe,
2234 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8,
2235 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3,
2236 0xcf, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc2, 0xc1,
2237 0xc6, 0xc7, 0xc3, 0xc9, 0xd4, 0xb4, 0x18, 0x07,
2238 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2239 0xba, 0xa3, 0xa0, 0xae, 0xb1, 0xb0, 0xb2, 0xb2,
2240 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2241 0xad, 0x97, 0x8a, 0x87, 0x87, 0x8a, 0x84, 0x75,
2242 0x9d, 0xa8, 0xb3, 0xb5, 0xb0, 0xad, 0xb2, 0xb9,
2243 0xba, 0xb3, 0x94, 0x9e, 0xb2, 0xac, 0xb2, 0xb5,
2244 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2245 0xb0, 0xb0, 0xaf, 0xae, 0xac, 0xab, 0xac, 0xaf,
2246 0xbc, 0x9e, 0x9d, 0xb2, 0xb5, 0xb2, 0xb4, 0xb3,
2247 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2248 0xbc, 0xbd, 0xbe, 0xbe, 0xbc, 0xb9, 0xb5, 0xb2,
2249 0xc5, 0xb4, 0xa0, 0xa7, 0xbe, 0xbf, 0xb7, 0xbe,
2250 0xb9, 0xb9, 0xba, 0xbb, 0xbb, 0xbc, 0xbd, 0xbd,
2251 0xbf, 0xba, 0xbd, 0xb9, 0xab, 0xac, 0xba, 0xc1,
2252 0xbb, 0xbb, 0xba, 0xb9, 0xb9, 0xb8, 0xb7, 0xb7,
2253 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2254 0xbb, 0xb9, 0xb7, 0xbe, 0xa6, 0x9a, 0xb8, 0xb8,
2255 0xb6, 0xb5, 0xb4, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
2256 0xb0, 0xa2, 0xa9, 0xb5, 0xb2, 0xb3, 0xb8, 0xb2,
2257 0xb1, 0xb1, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5,
2258 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2259 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2260 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb,
2261 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2262 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2263 0xbc, 0xbb, 0xbd, 0xc1, 0xc5, 0xc3, 0xba, 0xb2,
2264 0xc2, 0xb4, 0xab, 0x7c, 0x5c, 0x63, 0x59, 0x53,
2265 0x66, 0x6b, 0x69, 0x64, 0x6c, 0x7b, 0x7f, 0x79,
2266 0x78, 0x75, 0x78, 0x82, 0x8c, 0x8a, 0x7a, 0x6b,
2267 0x57, 0x5a, 0x5f, 0x66, 0x6a, 0x6c, 0x6a, 0x68,
2268 0x7a, 0x78, 0x77, 0x73, 0x65, 0x57, 0x58, 0x61,
2269 0x63, 0x5c, 0x51, 0x4a, 0x4a, 0x4f, 0x57, 0x5c,
2270 0x55, 0x46, 0x3d, 0x42, 0x70, 0x5f, 0x54, 0x5a,
2271 0x69, 0x7e, 0x65, 0x6e, 0x9f, 0xa5, 0x8f, 0x7b,
2272 0x73, 0x88, 0x94, 0x69, 0xac, 0xab, 0xa8, 0xb3,
2273 0xb2, 0xb2, 0xb6, 0xb9, 0xb7, 0xb4, 0xb2, 0xb0,
2274 0xbf, 0xaa, 0xbd, 0xc1, 0xcb, 0xc3, 0xbe, 0xb6,
2275 0xac, 0xbf, 0xb5, 0xc1, 0xb8, 0xbf, 0xc4, 0xbf,
2276 0xc5, 0xbf, 0xcc, 0xca, 0xce, 0xd4, 0xc6, 0xc9,
2277 0xc8, 0xcd, 0xcc, 0xc0, 0xb2, 0xb0, 0xbe, 0xcd,
2278 0xcd, 0xcb, 0xc8, 0xc6, 0xc4, 0xc4, 0xc5, 0xc6,
2279 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
2280 0xc6, 0xcd, 0xd2, 0xce, 0xc5, 0xc1, 0xc5, 0xcc,
2281 0xbe, 0xc4, 0xcb, 0xce, 0xd1, 0xb7, 0x1f, 0x03,
2282 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2283 0xba, 0xa3, 0xa1, 0xaf, 0xb2, 0xb0, 0xb3, 0xb3,
2284 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2285 0xb5, 0xb0, 0xc1, 0xc1, 0xa4, 0xa1, 0xac, 0xa4,
2286 0xab, 0xa7, 0xa4, 0xa8, 0xaf, 0xb4, 0xb2, 0xaf,
2287 0xbd, 0xbd, 0xa8, 0xa3, 0xb0, 0xb1, 0xb2, 0xb3,
2288 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2289 0xbc, 0xaf, 0xa7, 0xab, 0xb0, 0xae, 0xaa, 0xa9,
2290 0xb4, 0xa0, 0xa4, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4,
2291 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2292 0xb9, 0xb8, 0xb6, 0xb5, 0xb7, 0xba, 0xbe, 0xc0,
2293 0xbb, 0xa2, 0xa5, 0xba, 0xbb, 0xb4, 0xb9, 0xbd,
2294 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbd,
2295 0xbe, 0xbb, 0xbd, 0xb9, 0xab, 0xad, 0xbb, 0xc1,
2296 0xbb, 0xbb, 0xba, 0xba, 0xb9, 0xb8, 0xb8, 0xb7,
2297 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2298 0xb1, 0xc0, 0xb7, 0xb8, 0xaf, 0x9d, 0xaa, 0xb5,
2299 0xb4, 0xb6, 0xb8, 0xb9, 0xb7, 0xb2, 0xac, 0xa8,
2300 0xb0, 0xa3, 0xa9, 0xb4, 0xb2, 0xb3, 0xb7, 0xb3,
2301 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6,
2302 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2303 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2304 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb, 0xbb,
2305 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2306 0xba, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2307 0xbe, 0xbd, 0xbd, 0xc0, 0xc3, 0xc1, 0xbb, 0xb5,
2308 0xb7, 0xb6, 0xb4, 0x80, 0x53, 0x5c, 0x6b, 0x7c,
2309 0x77, 0x6f, 0x6e, 0x76, 0x7c, 0x78, 0x74, 0x74,
2310 0x85, 0x74, 0x5f, 0x52, 0x50, 0x53, 0x55, 0x54,
2311 0x57, 0x5a, 0x60, 0x67, 0x6d, 0x72, 0x75, 0x76,
2312 0x77, 0x6b, 0x63, 0x63, 0x62, 0x5a, 0x55, 0x56,
2313 0x44, 0x49, 0x50, 0x58, 0x5b, 0x57, 0x4d, 0x45,
2314 0x56, 0x4e, 0x5c, 0x54, 0x61, 0x67, 0x77, 0x65,
2315 0x83, 0x82, 0x6b, 0x64, 0x93, 0xa1, 0x80, 0x84,
2316 0x78, 0x9f, 0xd0, 0x81, 0x7c, 0xae, 0x9f, 0xab,
2317 0xae, 0xb1, 0xba, 0xb9, 0xb1, 0xb6, 0xbd, 0xb9,
2318 0xb4, 0xc0, 0xd6, 0xd2, 0xdf, 0xda, 0xd9, 0xce,
2319 0xd0, 0xc0, 0xc4, 0xbe, 0xb3, 0xc3, 0xb0, 0xc4,
2320 0xc2, 0xcd, 0xc6, 0xcb, 0xc7, 0xbf, 0xcb, 0xc8,
2321 0xce, 0xcb, 0xc6, 0xc0, 0xbd, 0xbf, 0xc3, 0xc6,
2322 0xcb, 0xc9, 0xc7, 0xc6, 0xc5, 0xc6, 0xc7, 0xc8,
2323 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
2324 0xd4, 0xcc, 0xc4, 0xc2, 0xc5, 0xc8, 0xc6, 0xc2,
2325 0xc0, 0xc2, 0xbb, 0xc0, 0xd8, 0xc1, 0x1f, 0x03,
2326 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2327 0xb8, 0xa4, 0xa3, 0xb2, 0xb4, 0xb1, 0xb4, 0xb5,
2328 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2329 0xb3, 0xb4, 0xc0, 0x97, 0x4a, 0x4d, 0x97, 0xc3,
2330 0xb8, 0xad, 0xa3, 0xa5, 0xaf, 0xb6, 0xb4, 0xae,
2331 0xb5, 0xb2, 0xad, 0xa4, 0xab, 0xb2, 0xad, 0xb5,
2332 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
2333 0xbc, 0xaf, 0xa6, 0xaa, 0xb1, 0xb1, 0xae, 0xae,
2334 0xa7, 0xa5, 0xae, 0xb6, 0xb5, 0xb8, 0xba, 0xb5,
2335 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2336 0xb8, 0xb6, 0xb5, 0xb4, 0xb6, 0xb9, 0xbc, 0xbf,
2337 0xa7, 0xa2, 0xb2, 0xc1, 0xb8, 0xb2, 0xb8, 0xba,
2338 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe,
2339 0xbe, 0xbb, 0xbd, 0xb8, 0xac, 0xb0, 0xbd, 0xc0,
2340 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9, 0xb8, 0xb8,
2341 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2342 0xba, 0xbb, 0xb3, 0xb8, 0xb3, 0xa7, 0xb2, 0xbb,
2343 0xb4, 0xb7, 0xba, 0xbc, 0xba, 0xb6, 0xb0, 0xac,
2344 0xb0, 0xa5, 0xa8, 0xb2, 0xb2, 0xb3, 0xb6, 0xb5,
2345 0xb3, 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7,
2346 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2347 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2348 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc,
2349 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2350 0xbb, 0xbc, 0xbc, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe,
2351 0xc1, 0xbf, 0xbd, 0xbd, 0xbf, 0xbf, 0xbd, 0xba,
2352 0xc5, 0xc0, 0xb9, 0x8b, 0x61, 0x62, 0x6d, 0x77,
2353 0x7f, 0x6d, 0x62, 0x68, 0x71, 0x72, 0x73, 0x77,
2354 0x78, 0x7e, 0x85, 0x88, 0x83, 0x74, 0x62, 0x55,
2355 0x6e, 0x6d, 0x70, 0x77, 0x7c, 0x79, 0x6e, 0x63,
2356 0x59, 0x50, 0x4d, 0x55, 0x5c, 0x59, 0x56, 0x56,
2357 0x60, 0x66, 0x6a, 0x64, 0x54, 0x45, 0x3d, 0x3b,
2358 0x49, 0x46, 0x5e, 0x5a, 0x64, 0x6b, 0x7c, 0x62,
2359 0x7a, 0x71, 0x66, 0x63, 0x95, 0x9c, 0x6a, 0x7b,
2360 0x96, 0x95, 0x9b, 0x81, 0x76, 0xb0, 0xe2, 0xb7,
2361 0xb4, 0xbc, 0xba, 0xb4, 0xb6, 0xba, 0xb6, 0xb2,
2362 0xb3, 0xd2, 0xc4, 0x84, 0x6e, 0x72, 0xb2, 0xe5,
2363 0xe7, 0xda, 0xc3, 0xcf, 0xca, 0xcb, 0xbe, 0xba,
2364 0xc0, 0xc7, 0xbf, 0xc9, 0xcc, 0xc7, 0xd0, 0xc9,
2365 0xc3, 0xc2, 0xc4, 0xc8, 0xcd, 0xcd, 0xc9, 0xc5,
2366 0xc9, 0xc8, 0xc6, 0xc6, 0xc6, 0xc8, 0xca, 0xcb,
2367 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
2368 0xce, 0xce, 0xcb, 0xc3, 0xbb, 0xba, 0xc1, 0xc8,
2369 0xba, 0xa7, 0xa8, 0xc2, 0xd4, 0xb2, 0x14, 0x00,
2370 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2371 0xb6, 0xa4, 0xa6, 0xb5, 0xb6, 0xb2, 0xb5, 0xb8,
2372 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2373 0xb9, 0xac, 0xb4, 0xb6, 0xa9, 0xb2, 0xc5, 0xc0,
2374 0xb8, 0xb7, 0xb6, 0xb4, 0xb2, 0xb3, 0xb5, 0xb8,
2375 0xba, 0xad, 0xb2, 0xab, 0xaf, 0xb7, 0xae, 0xbb,
2376 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2377 0xb1, 0xb3, 0xb2, 0xae, 0xae, 0xb4, 0xb8, 0xb9,
2378 0x9e, 0xab, 0xb7, 0xb8, 0xb6, 0xbb, 0xbd, 0xb7,
2379 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2380 0xbb, 0xbc, 0xbc, 0xbc, 0xb9, 0xb5, 0xb1, 0xae,
2381 0x9d, 0xba, 0xc0, 0xb5, 0xb8, 0xbc, 0xb7, 0xb6,
2382 0xbb, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2383 0xbe, 0xbc, 0xbd, 0xb6, 0xac, 0xb4, 0xc0, 0xbf,
2384 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9, 0xb9,
2385 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2386 0xb5, 0xb5, 0xb1, 0xbe, 0xc2, 0xae, 0xaa, 0xbb,
2387 0xc1, 0xbf, 0xbd, 0xb9, 0xb7, 0xb5, 0xb3, 0xb3,
2388 0xb1, 0xa8, 0xa7, 0xaf, 0xb3, 0xb3, 0xb5, 0xb7,
2389 0xb4, 0xb5, 0xb5, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
2390 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2391 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2392 0xb9, 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd,
2393 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2394 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2395 0xc3, 0xc1, 0xbe, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe,
2396 0xb8, 0xbd, 0xb7, 0x89, 0x52, 0x46, 0x58, 0x68,
2397 0x6d, 0x6b, 0x6c, 0x73, 0x7f, 0x86, 0x7f, 0x73,
2398 0x77, 0x7b, 0x7e, 0x7e, 0x7a, 0x76, 0x74, 0x73,
2399 0x6e, 0x63, 0x5a, 0x5e, 0x69, 0x6a, 0x5e, 0x50,
2400 0x48, 0x4b, 0x55, 0x61, 0x61, 0x58, 0x55, 0x59,
2401 0x56, 0x53, 0x4e, 0x49, 0x46, 0x47, 0x4c, 0x50,
2402 0x41, 0x3e, 0x4c, 0x57, 0x7c, 0x71, 0x6a, 0x5f,
2403 0x79, 0x7b, 0x64, 0x73, 0xab, 0xa3, 0x7c, 0x8d,
2404 0x91, 0x9a, 0x90, 0xa3, 0x90, 0x6f, 0xc8, 0xd2,
2405 0xa8, 0xba, 0xb7, 0xb2, 0xbe, 0xba, 0xb6, 0xc7,
2406 0xcb, 0xc5, 0x95, 0x71, 0x7e, 0x58, 0x38, 0x29,
2407 0x62, 0x96, 0xb9, 0xef, 0xeb, 0xd9, 0xd1, 0xc5,
2408 0xcc, 0xc3, 0xcc, 0xc5, 0xc6, 0xce, 0xc6, 0xcd,
2409 0xcc, 0xcb, 0xca, 0xc6, 0xc3, 0xc3, 0xc7, 0xca,
2410 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xca, 0xcc, 0xce,
2411 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2412 0xc5, 0xce, 0xd3, 0xc9, 0xb8, 0xb2, 0xbc, 0xc9,
2413 0xc6, 0xba, 0xad, 0xbc, 0xd8, 0xba, 0x18, 0x06,
2414 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2415 0xb4, 0xa4, 0xa9, 0xb9, 0xb8, 0xb3, 0xb7, 0xba,
2416 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2417 0xba, 0xbb, 0xbb, 0xbd, 0xc0, 0xbe, 0xb8, 0xb6,
2418 0xb3, 0xba, 0xc1, 0xbf, 0xb7, 0xb2, 0xb5, 0xb9,
2419 0xba, 0xb1, 0xb6, 0xa7, 0xa7, 0xb8, 0xb2, 0xb4,
2420 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
2421 0xb1, 0xbc, 0xbd, 0xb1, 0xaf, 0xba, 0xbb, 0xb1,
2422 0x9e, 0xb2, 0xbd, 0xb9, 0xb8, 0xbd, 0xbd, 0xba,
2423 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2424 0xc0, 0xc0, 0xc0, 0xbd, 0xb9, 0xb4, 0xae, 0xab,
2425 0xae, 0xc6, 0xc4, 0xb3, 0xb7, 0xc0, 0xbb, 0xb5,
2426 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf,
2427 0xbe, 0xbd, 0xbd, 0xb4, 0xad, 0xb8, 0xc4, 0xbe,
2428 0xbd, 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9,
2429 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2430 0xba, 0xc3, 0xbd, 0xbc, 0xc0, 0xa6, 0xa0, 0xcf,
2431 0xc3, 0xc1, 0xbd, 0xb8, 0xb3, 0xb0, 0xad, 0xac,
2432 0xb1, 0xaa, 0xa6, 0xac, 0xb3, 0xb3, 0xb3, 0xba,
2433 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba,
2434 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2435 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2436 0xb9, 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbd,
2437 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2438 0xbf, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2439 0xc3, 0xc2, 0xc0, 0xbe, 0xbd, 0xbd, 0xbe, 0xc0,
2440 0xbb, 0xb9, 0xa8, 0x81, 0x55, 0x4e, 0x69, 0x78,
2441 0x79, 0x73, 0x6f, 0x72, 0x78, 0x78, 0x71, 0x69,
2442 0x76, 0x76, 0x75, 0x71, 0x6c, 0x68, 0x68, 0x69,
2443 0x6e, 0x6f, 0x6b, 0x5e, 0x4d, 0x43, 0x43, 0x48,
2444 0x42, 0x47, 0x57, 0x68, 0x6a, 0x5c, 0x50, 0x4c,
2445 0x61, 0x54, 0x49, 0x48, 0x50, 0x51, 0x48, 0x3d,
2446 0x44, 0x40, 0x50, 0x56, 0x74, 0x71, 0x74, 0x66,
2447 0x81, 0x91, 0x53, 0x69, 0xa6, 0x91, 0x89, 0x95,
2448 0x9e, 0x9b, 0x8a, 0xa0, 0xa8, 0x8a, 0x73, 0xc1,
2449 0xbd, 0xc2, 0xc5, 0xbf, 0xb2, 0xa8, 0xb3, 0xc9,
2450 0xa5, 0x82, 0x57, 0x5d, 0x98, 0x78, 0x46, 0x39,
2451 0x1c, 0x29, 0x35, 0x35, 0x52, 0xa7, 0xbc, 0xca,
2452 0xf6, 0xe3, 0xde, 0xce, 0xcc, 0xd3, 0xc8, 0xcd,
2453 0xca, 0xcb, 0xca, 0xc7, 0xc4, 0xc4, 0xc7, 0xcb,
2454 0xc8, 0xc7, 0xc7, 0xc7, 0xc8, 0xca, 0xcd, 0xcf,
2455 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2456 0xcd, 0xc9, 0xc6, 0xc7, 0xca, 0xc7, 0xbf, 0xb8,
2457 0xc0, 0xd7, 0xc1, 0xb9, 0xe1, 0xc8, 0x15, 0x00,
2458 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2459 0xb2, 0xa5, 0xac, 0xbc, 0xba, 0xb4, 0xb8, 0xbd,
2460 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2461 0xba, 0xc1, 0xb9, 0xb5, 0xbe, 0xba, 0xb1, 0xb7,
2462 0xb4, 0xb7, 0xbb, 0xbd, 0xbb, 0xb8, 0xb5, 0xb3,
2463 0xb1, 0xb8, 0xbc, 0xa6, 0x9f, 0xb9, 0xc4, 0xbd,
2464 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
2465 0xb9, 0xbe, 0xba, 0xb2, 0xb6, 0xbd, 0xb1, 0x9d,
2466 0xa6, 0xb9, 0xbd, 0xb8, 0xba, 0xbd, 0xbc, 0xbc,
2467 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2468 0xc1, 0xbf, 0xbb, 0xb8, 0xb6, 0xb7, 0xb8, 0xba,
2469 0xc7, 0xbe, 0xbf, 0xbe, 0xb5, 0xb9, 0xbf, 0xb7,
2470 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf, 0xc0, 0xc0,
2471 0xbe, 0xbe, 0xbd, 0xb3, 0xad, 0xbc, 0xc7, 0xbd,
2472 0xbe, 0xbe, 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba,
2473 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2474 0xc0, 0xbc, 0xc5, 0xaf, 0x86, 0x74, 0x7a, 0x90,
2475 0xaf, 0xb2, 0xb6, 0xb8, 0xb8, 0xb4, 0xaf, 0xac,
2476 0xb1, 0xad, 0xa5, 0xa9, 0xb3, 0xb3, 0xb2, 0xbc,
2477 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xba, 0xbb, 0xbb,
2478 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2479 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
2480 0xba, 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe,
2481 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2482 0xc1, 0xc0, 0xc0, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe,
2483 0xc0, 0xc2, 0xc4, 0xc2, 0xbf, 0xbd, 0xbe, 0xc0,
2484 0xb6, 0xad, 0x96, 0x81, 0x66, 0x5e, 0x71, 0x70,
2485 0x72, 0x6c, 0x78, 0x93, 0x96, 0x81, 0x73, 0x77,
2486 0x91, 0x87, 0x79, 0x6f, 0x6c, 0x70, 0x77, 0x7b,
2487 0x8b, 0x6e, 0x4e, 0x42, 0x4c, 0x5c, 0x63, 0x62,
2488 0x64, 0x5d, 0x60, 0x6f, 0x75, 0x63, 0x47, 0x33,
2489 0x3a, 0x3d, 0x40, 0x3e, 0x3b, 0x39, 0x3c, 0x3f,
2490 0x3c, 0x3b, 0x5e, 0x50, 0x46, 0x60, 0x85, 0x5f,
2491 0x77, 0x99, 0x4a, 0x60, 0x9d, 0x7e, 0x7b, 0x79,
2492 0xa8, 0x9f, 0x91, 0xa7, 0x92, 0xb9, 0x67, 0x87,
2493 0xc5, 0xae, 0xb5, 0xbd, 0xaf, 0xb8, 0xc5, 0xb6,
2494 0x8a, 0x61, 0x47, 0x4c, 0x8c, 0x85, 0x69, 0x7a,
2495 0x5d, 0x3d, 0x2d, 0x3d, 0x2f, 0x25, 0x26, 0x4d,
2496 0x74, 0xa1, 0xc8, 0xea, 0xe9, 0xd3, 0xd1, 0xc7,
2497 0xd6, 0xd0, 0xc9, 0xc6, 0xc8, 0xca, 0xca, 0xc8,
2498 0xcb, 0xca, 0xc8, 0xc8, 0xc8, 0xca, 0xcc, 0xce,
2499 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
2500 0xd1, 0xc8, 0xc3, 0xca, 0xd5, 0xd5, 0xc6, 0xb5,
2501 0xcc, 0xcc, 0xd4, 0xcf, 0xbc, 0x9f, 0x1a, 0x0e,
2502 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2503 0xb0, 0xa5, 0xaf, 0xbf, 0xbc, 0xb5, 0xb9, 0xbf,
2504 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2505 0xb5, 0xbd, 0xbf, 0xbd, 0xbd, 0xb7, 0xb4, 0xb8,
2506 0xba, 0xb8, 0xb7, 0xb9, 0xbd, 0xbe, 0xbb, 0xb8,
2507 0xb9, 0xc0, 0xc0, 0xb1, 0x98, 0x9c, 0xbb, 0xc3,
2508 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2509 0xb0, 0xae, 0xaf, 0xb7, 0xbc, 0xb5, 0xa6, 0x9a,
2510 0xb2, 0xbe, 0xbb, 0xb6, 0xbc, 0xbc, 0xb9, 0xbf,
2511 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2512 0xbe, 0xbc, 0xba, 0xb9, 0xba, 0xbc, 0xc0, 0xc2,
2513 0xc5, 0xba, 0xbd, 0xc0, 0xb6, 0xb6, 0xbd, 0xbb,
2514 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xc0, 0xc0, 0xc1,
2515 0xbe, 0xbe, 0xbd, 0xb2, 0xae, 0xbf, 0xc9, 0xbd,
2516 0xbf, 0xbe, 0xbe, 0xbd, 0xbc, 0xbc, 0xbb, 0xbb,
2517 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2518 0xbe, 0xc2, 0xd0, 0xb4, 0xa1, 0xb6, 0xb7, 0xad,
2519 0xb0, 0xb3, 0xb7, 0xba, 0xbb, 0xb8, 0xb3, 0xb0,
2520 0xb1, 0xae, 0xa5, 0xa7, 0xb4, 0xb2, 0xb1, 0xbe,
2521 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbb, 0xbc, 0xbc,
2522 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2523 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2524 0xbb, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf,
2525 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2526 0xc2, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbe, 0xbd,
2527 0xbc, 0xc1, 0xc7, 0xc7, 0xc2, 0xbe, 0xbd, 0xbe,
2528 0xb2, 0xba, 0xb2, 0xa2, 0x7a, 0x63, 0x79, 0x7e,
2529 0x8f, 0x7c, 0x75, 0x7b, 0x72, 0x60, 0x64, 0x79,
2530 0x7f, 0x76, 0x6c, 0x6a, 0x6d, 0x70, 0x6d, 0x69,
2531 0x5e, 0x70, 0x7c, 0x70, 0x54, 0x43, 0x48, 0x55,
2532 0x42, 0x3a, 0x3e, 0x54, 0x64, 0x5f, 0x4c, 0x3d,
2533 0x39, 0x43, 0x4a, 0x45, 0x3a, 0x38, 0x43, 0x51,
2534 0x32, 0x36, 0x60, 0x52, 0x42, 0x5b, 0x7d, 0x50,
2535 0x76, 0xa1, 0x5e, 0x67, 0xa7, 0x91, 0x7d, 0x79,
2536 0x8e, 0x88, 0x91, 0xab, 0x9d, 0xd5, 0xaf, 0x70,
2537 0xae, 0xaa, 0xb0, 0xb3, 0xb6, 0xbe, 0xa9, 0x7a,
2538 0x75, 0x71, 0x84, 0x6b, 0x84, 0x81, 0x61, 0x75,
2539 0x99, 0xa5, 0x80, 0x7d, 0x69, 0x5c, 0x4d, 0x29,
2540 0x33, 0x2c, 0x1e, 0x43, 0x7c, 0xb0, 0xdf, 0xe7,
2541 0xde, 0xda, 0xd4, 0xcd, 0xc9, 0xca, 0xcd, 0xd0,
2542 0xce, 0xcd, 0xcb, 0xc9, 0xc8, 0xc9, 0xca, 0xcb,
2543 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
2544 0xcd, 0xcc, 0xcd, 0xd1, 0xd3, 0xd2, 0xcd, 0xc8,
2545 0xc0, 0xbd, 0xec, 0xf4, 0xb8, 0x92, 0x1e, 0x04,
2546 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2547 0xaf, 0xa5, 0xb0, 0xc0, 0xbc, 0xb5, 0xba, 0xc0,
2548 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2549 0xb6, 0xb6, 0xbf, 0xc2, 0xba, 0xba, 0xbe, 0xbb,
2550 0xc0, 0xbe, 0xbc, 0xbb, 0xbc, 0xbf, 0xc3, 0xc5,
2551 0xbf, 0xb5, 0xac, 0xaa, 0x7a, 0x57, 0x7f, 0xa0,
2552 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2553 0x9d, 0x9a, 0xa7, 0xbd, 0xbe, 0xaa, 0xa1, 0xa8,
2554 0xba, 0xc1, 0xb9, 0xb5, 0xbe, 0xbb, 0xb7, 0xc0,
2555 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2556 0xba, 0xbc, 0xbf, 0xc1, 0xc1, 0xc0, 0xbe, 0xbc,
2557 0xb2, 0xc2, 0xbf, 0xb5, 0xb8, 0xb9, 0xb7, 0xbc,
2558 0xbd, 0xbd, 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1,
2559 0xbd, 0xbf, 0xbc, 0xb1, 0xae, 0xc1, 0xca, 0xbc,
2560 0xbf, 0xbf, 0xbe, 0xbd, 0xbd, 0xbc, 0xbb, 0xbb,
2561 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2562 0xb6, 0xd0, 0x9b, 0x58, 0x90, 0xc8, 0xb5, 0xc3,
2563 0xcf, 0xcb, 0xc6, 0xbf, 0xb7, 0xb2, 0xad, 0xab,
2564 0xb1, 0xaf, 0xa4, 0xa6, 0xb4, 0xb2, 0xb1, 0xbf,
2565 0xb9, 0xb9, 0xba, 0xbb, 0xbb, 0xbc, 0xbd, 0xbd,
2566 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2567 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
2568 0xbb, 0xbb, 0xbc, 0xbd, 0xbd, 0xbe, 0xbf, 0xbf,
2569 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2570 0xc3, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbe, 0xbd,
2571 0xb9, 0xc1, 0xc9, 0xca, 0xc4, 0xbe, 0xbc, 0xbc,
2572 0xbb, 0xbb, 0xaa, 0x9e, 0x7e, 0x6b, 0x83, 0x85,
2573 0x83, 0x76, 0x68, 0x5f, 0x59, 0x60, 0x78, 0x92,
2574 0x81, 0x77, 0x6d, 0x6d, 0x71, 0x6f, 0x64, 0x58,
2575 0x84, 0x7f, 0x72, 0x5f, 0x50, 0x4d, 0x57, 0x62,
2576 0x67, 0x60, 0x60, 0x67, 0x66, 0x5a, 0x4c, 0x47,
2577 0x4b, 0x45, 0x40, 0x45, 0x4d, 0x4e, 0x44, 0x39,
2578 0x36, 0x3c, 0x5e, 0x63, 0x6f, 0x6c, 0x6d, 0x4c,
2579 0x78, 0x9a, 0x5e, 0x53, 0x98, 0x9c, 0x82, 0x8d,
2580 0x9d, 0x95, 0xb1, 0x8c, 0xa7, 0xb9, 0xbf, 0x88,
2581 0x6b, 0xa7, 0xb9, 0xaf, 0xbd, 0xb5, 0x84, 0x5f,
2582 0x60, 0x6c, 0x91, 0x64, 0x79, 0x93, 0x74, 0x7a,
2583 0x79, 0x81, 0x91, 0x96, 0x86, 0x8a, 0x74, 0x7c,
2584 0x4d, 0x48, 0x4d, 0x3b, 0x2f, 0x33, 0x32, 0x42,
2585 0x9c, 0xba, 0xdf, 0xf2, 0xf0, 0xe4, 0xdd, 0xdc,
2586 0xd0, 0xcf, 0xcc, 0xc9, 0xc8, 0xc8, 0xc9, 0xca,
2587 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
2588 0xcf, 0xd0, 0xd0, 0xd1, 0xd1, 0xd2, 0xd3, 0xd4,
2589 0xc9, 0xdb, 0xd2, 0xa6, 0x94, 0x9b, 0x24, 0x09,
2590 0xc3, 0xb9, 0xc0, 0xb3, 0xb2, 0xbc, 0xb5, 0xc1,
2591 0xa9, 0xa0, 0xb8, 0xb6, 0xbf, 0xc0, 0xc0, 0xb9,
2592 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2593 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2594 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2595 0xb5, 0xbe, 0xa8, 0x6c, 0x5f, 0xa5, 0xcc, 0xa6,
2596 0xbb, 0xbb, 0xba, 0xb9, 0xb9, 0xb8, 0xb7, 0xb7,
2597 0x92, 0x81, 0x91, 0xba, 0xc1, 0xa7, 0xa2, 0xb8,
2598 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2599 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2600 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2601 0xc0, 0xbf, 0xbd, 0xbc, 0xbc, 0xbd, 0xbf, 0xc0,
2602 0xbd, 0xbd, 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1,
2603 0xc5, 0xc2, 0xb9, 0xbb, 0xaf, 0xca, 0xc2, 0xc8,
2604 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2605 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2606 0xbd, 0xc0, 0xc6, 0xcd, 0xcf, 0xc7, 0xb7, 0xaa,
2607 0x86, 0xb9, 0xcc, 0xbb, 0xb7, 0xba, 0xb7, 0xb6,
2608 0xbb, 0xaf, 0xa6, 0xa7, 0xa7, 0xb2, 0xb9, 0xb7,
2609 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2610 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2611 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2612 0xbe, 0xbe, 0xbf, 0xc0, 0xc0, 0xc1, 0xc2, 0xc2,
2613 0xc2, 0xc2, 0xc3, 0xc4, 0xc4, 0xc5, 0xc6, 0xc6,
2614 0xc1, 0xc2, 0xc3, 0xc3, 0xc1, 0xbf, 0xbc, 0xbb,
2615 0xbb, 0xbe, 0xc6, 0xc6, 0xc2, 0xc5, 0xbf, 0xab,
2616 0xb5, 0xb6, 0xb6, 0xa4, 0x85, 0x75, 0x76, 0x73,
2617 0x5a, 0x5f, 0x65, 0x6a, 0x6c, 0x6c, 0x6d, 0x6e,
2618 0x64, 0x5d, 0x65, 0x74, 0x6c, 0x56, 0x5b, 0x75,
2619 0x7b, 0x68, 0x5d, 0x65, 0x6a, 0x64, 0x5d, 0x5c,
2620 0x50, 0x69, 0x7f, 0x7c, 0x64, 0x4e, 0x4b, 0x51,
2621 0x47, 0x4b, 0x51, 0x59, 0x5d, 0x58, 0x4c, 0x43,
2622 0x3f, 0x44, 0x5d, 0x66, 0x7f, 0x76, 0x7d, 0x7b,
2623 0x6f, 0x85, 0x5c, 0x65, 0x94, 0x76, 0x67, 0x94,
2624 0xa3, 0x9d, 0xa1, 0xa2, 0x9c, 0xb1, 0xa9, 0xbd,
2625 0x86, 0x89, 0xc3, 0xb0, 0x8e, 0x8c, 0x65, 0x5e,
2626 0x88, 0x80, 0x85, 0x76, 0x67, 0x89, 0x62, 0x5b,
2627 0x8f, 0x7e, 0x78, 0x85, 0x72, 0x70, 0x95, 0x94,
2628 0x9b, 0x9a, 0x7c, 0x70, 0x5d, 0x2f, 0x52, 0x2f,
2629 0x1b, 0x27, 0x35, 0x5e, 0xa1, 0xba, 0xe6, 0xfa,
2630 0xee, 0xe0, 0xd7, 0xcb, 0xc9, 0xcd, 0xc7, 0xc8,
2631 0xd3, 0xce, 0xcf, 0xd6, 0xd4, 0xcb, 0xc6, 0xc9,
2632 0xd8, 0xd6, 0xd7, 0xd7, 0xcc, 0xcb, 0xd7, 0xd8,
2633 0xf4, 0xe6, 0x96, 0x63, 0x51, 0x52, 0x2f, 0x0a,
2634 0xbf, 0xb3, 0xbd, 0xbc, 0xbf, 0xc3, 0xb8, 0xc1,
2635 0xad, 0xa4, 0xbd, 0xba, 0xc2, 0xc1, 0xc0, 0xb9,
2636 0xbf, 0xbf, 0xbe, 0xbe, 0xbd, 0xbc, 0xbc, 0xbb,
2637 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2638 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2639 0xd0, 0xc7, 0x8a, 0x64, 0x8c, 0xb6, 0xbe, 0xc9,
2640 0xbc, 0xbb, 0xbb, 0xba, 0xb9, 0xb9, 0xb8, 0xb8,
2641 0xae, 0x9b, 0x95, 0xa1, 0xa4, 0x9c, 0xa5, 0xba,
2642 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2643 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2644 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2645 0xc0, 0xbe, 0xbd, 0xbb, 0xbb, 0xbd, 0xbe, 0xc0,
2646 0xbe, 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1, 0xc2,
2647 0xcb, 0xc5, 0xd5, 0xb5, 0x9e, 0xcf, 0xbe, 0xcc,
2648 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2649 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2650 0xc2, 0xc2, 0xc3, 0xc6, 0xc9, 0xc5, 0xbd, 0xb5,
2651 0x9f, 0xc0, 0xc9, 0xbd, 0xbd, 0xc0, 0xb8, 0xb3,
2652 0xb2, 0xb7, 0xa1, 0xb0, 0xa9, 0xb6, 0xb2, 0xb5,
2653 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2654 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2655 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2656 0xbe, 0xbf, 0xbf, 0xc0, 0xc1, 0xc1, 0xc2, 0xc2,
2657 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6, 0xc6,
2658 0xc3, 0xc4, 0xc4, 0xc4, 0xc2, 0xbf, 0xbc, 0xba,
2659 0xb6, 0xb8, 0xc0, 0xc3, 0xc3, 0xca, 0xc8, 0xb7,
2660 0xac, 0xb5, 0xb0, 0xb0, 0x8a, 0x64, 0x6c, 0x68,
2661 0x66, 0x6e, 0x75, 0x77, 0x74, 0x71, 0x71, 0x72,
2662 0x6f, 0x6f, 0x65, 0x5b, 0x67, 0x7f, 0x85, 0x7a,
2663 0x71, 0x72, 0x79, 0x82, 0x81, 0x74, 0x64, 0x5c,
2664 0x58, 0x64, 0x6c, 0x63, 0x52, 0x49, 0x51, 0x5d,
2665 0x55, 0x58, 0x5b, 0x59, 0x54, 0x4f, 0x4c, 0x4b,
2666 0x3c, 0x3d, 0x5b, 0x63, 0x74, 0x6d, 0x7a, 0x73,
2667 0x61, 0x7b, 0x58, 0x62, 0x93, 0x82, 0x7a, 0xa1,
2668 0x9c, 0x90, 0x96, 0xa9, 0xad, 0xbb, 0xa8, 0xb4,
2669 0xab, 0x77, 0xa9, 0xcd, 0x72, 0x3c, 0x60, 0x6d,
2670 0x7e, 0x82, 0x78, 0x7c, 0x6b, 0x89, 0x85, 0x5c,
2671 0x85, 0x6f, 0x71, 0x87, 0x90, 0x83, 0x7a, 0x86,
2672 0x79, 0x86, 0x8c, 0x98, 0xa6, 0x83, 0x81, 0x64,
2673 0x62, 0x3b, 0x3e, 0x2d, 0x26, 0x24, 0x3e, 0x5b,
2674 0xaa, 0xce, 0xdb, 0xeb, 0xe4, 0xd3, 0xdb, 0xcd,
2675 0xd2, 0xd8, 0xdd, 0xdb, 0xd6, 0xd0, 0xcb, 0xc7,
2676 0xda, 0xd2, 0xcd, 0xd3, 0xdf, 0xd0, 0xd0, 0xfd,
2677 0xe9, 0xab, 0x8e, 0x8f, 0x90, 0x7d, 0x1f, 0x04,
2678 0xc2, 0xc4, 0xc9, 0xbb, 0xbc, 0xcb, 0xc8, 0xc7,
2679 0xb1, 0xa7, 0xbc, 0xb6, 0xbc, 0xbe, 0xc2, 0xbf,
2680 0xc2, 0xc1, 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, 0xbd,
2681 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2682 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2683 0xbe, 0xc4, 0xc9, 0xd2, 0xd3, 0xc2, 0xb6, 0xbb,
2684 0xbd, 0xbc, 0xbc, 0xbb, 0xba, 0xba, 0xb9, 0xb9,
2685 0xc3, 0xc2, 0xa9, 0x87, 0x87, 0xa8, 0xc0, 0xc1,
2686 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2687 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2688 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2689 0xbf, 0xbe, 0xbc, 0xbb, 0xbb, 0xbc, 0xbe, 0xbf,
2690 0xbf, 0xbf, 0xc0, 0xc0, 0xc1, 0xc2, 0xc2, 0xc3,
2691 0xb4, 0xbf, 0xb3, 0xc2, 0xaf, 0xb3, 0xc9, 0xbd,
2692 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2693 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2694 0xc7, 0xc3, 0xc0, 0xc0, 0xc2, 0xc4, 0xc4, 0xc3,
2695 0xc5, 0xce, 0xca, 0xc1, 0xc2, 0xbf, 0xb3, 0xac,
2696 0xb7, 0xc5, 0x98, 0xa9, 0xa0, 0xb2, 0xb1, 0xc0,
2697 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2698 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2699 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2700 0xbf, 0xbf, 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3,
2701 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7,
2702 0xc7, 0xc7, 0xc7, 0xc5, 0xc2, 0xbf, 0xbb, 0xb9,
2703 0xc1, 0xbe, 0xc2, 0xc3, 0xc0, 0xc6, 0xc5, 0xb8,
2704 0xab, 0xb6, 0xad, 0xb6, 0x8d, 0x5a, 0x6a, 0x69,
2705 0x63, 0x6f, 0x7c, 0x7f, 0x79, 0x74, 0x77, 0x7c,
2706 0x64, 0x62, 0x64, 0x6b, 0x72, 0x74, 0x6f, 0x6a,
2707 0x66, 0x68, 0x64, 0x5a, 0x55, 0x58, 0x5c, 0x5d,
2708 0x56, 0x62, 0x70, 0x71, 0x69, 0x60, 0x5d, 0x5f,
2709 0x5e, 0x5f, 0x5c, 0x53, 0x48, 0x43, 0x47, 0x4d,
2710 0x39, 0x39, 0x5c, 0x61, 0x65, 0x63, 0x77, 0x6b,
2711 0x72, 0x8b, 0x67, 0x65, 0x89, 0x7d, 0x76, 0x8e,
2712 0x9d, 0x99, 0x98, 0x9f, 0xa2, 0xb6, 0xa5, 0xa3,
2713 0xc7, 0xb7, 0x81, 0xcf, 0xc0, 0x51, 0x7a, 0x98,
2714 0x8e, 0x84, 0x6f, 0x75, 0x5e, 0x77, 0x8d, 0x5e,
2715 0x88, 0x7c, 0x8c, 0x8d, 0x85, 0x77, 0x66, 0x80,
2716 0x96, 0x8b, 0x7e, 0x79, 0x8a, 0x7a, 0x85, 0x9f,
2717 0x9e, 0x7f, 0x84, 0x67, 0x4f, 0x35, 0x2e, 0x30,
2718 0x28, 0x21, 0x4f, 0x73, 0xab, 0xe1, 0xdf, 0xf1,
2719 0xeb, 0xeb, 0xe3, 0xda, 0xda, 0xde, 0xd5, 0xc4,
2720 0xb8, 0xc2, 0xe5, 0xe3, 0xc6, 0xd4, 0xe3, 0xcb,
2721 0x80, 0x7e, 0x8e, 0x5f, 0x41, 0x62, 0x25, 0x04,
2722 0xd8, 0xcc, 0xc9, 0xcb, 0xcd, 0xca, 0xc4, 0xc5,
2723 0xb4, 0xad, 0xc6, 0xbf, 0xc2, 0xbe, 0xbf, 0xba,
2724 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2725 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2726 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2727 0xc6, 0xaf, 0xbb, 0xc7, 0xb8, 0xbb, 0xc7, 0xbc,
2728 0xbe, 0xbe, 0xbd, 0xbd, 0xbc, 0xbb, 0xbb, 0xba,
2729 0xbb, 0xbb, 0xc0, 0xca, 0xcb, 0xc4, 0xc0, 0xc1,
2730 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2731 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2732 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2733 0xbf, 0xbe, 0xbc, 0xbb, 0xbb, 0xbc, 0xbe, 0xbf,
2734 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4, 0xc4,
2735 0xc3, 0xc1, 0xcd, 0xc2, 0xb4, 0xc8, 0xcd, 0xd0,
2736 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2737 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2738 0xc6, 0xc3, 0xc0, 0xbf, 0xc2, 0xc5, 0xc8, 0xca,
2739 0xc8, 0xc5, 0xc0, 0xc0, 0xc5, 0xc5, 0xc1, 0xc0,
2740 0xab, 0xc3, 0xa1, 0xad, 0xb2, 0xb0, 0xac, 0xb7,
2741 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2742 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2743 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2744 0xc0, 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4,
2745 0xc4, 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8,
2746 0xc9, 0xc9, 0xc9, 0xc7, 0xc4, 0xc0, 0xbc, 0xb9,
2747 0xbc, 0xb7, 0xbb, 0xc1, 0xc2, 0xc9, 0xcd, 0xc5,
2748 0xc0, 0xb3, 0xa4, 0xa7, 0x90, 0x71, 0x70, 0x65,
2749 0x67, 0x74, 0x7f, 0x7c, 0x6e, 0x64, 0x66, 0x6c,
2750 0x60, 0x43, 0x44, 0x6d, 0x85, 0x6f, 0x50, 0x46,
2751 0x48, 0x5b, 0x6b, 0x73, 0x7e, 0x89, 0x86, 0x7b,
2752 0x71, 0x75, 0x79, 0x77, 0x6e, 0x63, 0x5a, 0x55,
2753 0x5b, 0x58, 0x51, 0x49, 0x44, 0x41, 0x43, 0x44,
2754 0x3b, 0x3e, 0x63, 0x62, 0x5d, 0x5c, 0x77, 0x69,
2755 0x77, 0x8b, 0x6b, 0x65, 0x7f, 0x7c, 0x7c, 0x87,
2756 0x8a, 0x93, 0x95, 0xa0, 0x9f, 0xb2, 0xab, 0xac,
2757 0xc7, 0xaa, 0x51, 0x96, 0xdd, 0x96, 0x71, 0x5f,
2758 0x6f, 0x71, 0x84, 0x87, 0x68, 0x6e, 0x7e, 0x72,
2759 0x84, 0x77, 0x7f, 0x76, 0x6d, 0x81, 0x8d, 0x90,
2760 0x77, 0x7c, 0x77, 0x76, 0x82, 0x7d, 0x78, 0x75,
2761 0x6d, 0x87, 0x8e, 0x94, 0xa8, 0x8c, 0x74, 0x4d,
2762 0x41, 0x44, 0x24, 0x34, 0x33, 0x2d, 0x68, 0x7e,
2763 0xbf, 0xdb, 0xf7, 0xfb, 0xf1, 0xe7, 0xe2, 0xdf,
2764 0xc8, 0xce, 0xd2, 0xdf, 0xd5, 0xe3, 0xe8, 0x96,
2765 0x90, 0x72, 0x40, 0x43, 0x7b, 0x77, 0x14, 0x0f,
2766 0xcc, 0xd3, 0xd6, 0xd7, 0xd2, 0xd2, 0xde, 0xe6,
2767 0xbb, 0xb3, 0xc9, 0xbf, 0xbe, 0xbb, 0xbf, 0xbd,
2768 0xbc, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2,
2769 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2770 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2771 0xca, 0xc0, 0xb7, 0xbc, 0xc9, 0xcb, 0xc4, 0xc0,
2772 0xc0, 0xbf, 0xbf, 0xbe, 0xbd, 0xbd, 0xbc, 0xbc,
2773 0xbe, 0xb3, 0xb3, 0xbd, 0xbf, 0xb8, 0xbb, 0xc7,
2774 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2775 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2776 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2777 0xc1, 0xc0, 0xbe, 0xbd, 0xbd, 0xbe, 0xc0, 0xc1,
2778 0xc2, 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6,
2779 0xd0, 0xdc, 0xe5, 0xb5, 0xa7, 0xc6, 0xd1, 0xda,
2780 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2781 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2782 0xc1, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc9, 0xcb,
2783 0xc8, 0xc1, 0xc0, 0xc2, 0xc1, 0xc1, 0xc5, 0xc9,
2784 0xa8, 0xba, 0xb0, 0xa7, 0xc0, 0xa9, 0xad, 0xb1,
2785 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2786 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2787 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2788 0xc0, 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4, 0xc4,
2789 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2790 0xca, 0xca, 0xca, 0xc8, 0xc6, 0xc2, 0xbe, 0xbc,
2791 0xbb, 0xb4, 0xb9, 0xc1, 0xc2, 0xc8, 0xcc, 0xc7,
2792 0xb1, 0xb7, 0xca, 0xac, 0x77, 0x5f, 0x59, 0x68,
2793 0x5b, 0x67, 0x72, 0x71, 0x66, 0x62, 0x68, 0x72,
2794 0x63, 0x69, 0x74, 0x7e, 0x80, 0x7a, 0x79, 0x7c,
2795 0x77, 0x75, 0x6a, 0x60, 0x65, 0x72, 0x70, 0x63,
2796 0x67, 0x69, 0x6b, 0x6a, 0x64, 0x5c, 0x54, 0x4e,
2797 0x57, 0x4e, 0x47, 0x49, 0x4f, 0x50, 0x47, 0x3e,
2798 0x3e, 0x4c, 0x6f, 0x64, 0x5c, 0x5b, 0x76, 0x6e,
2799 0x73, 0x7e, 0x63, 0x5f, 0x70, 0x72, 0x7a, 0x7d,
2800 0x97, 0x99, 0x92, 0xa5, 0xa7, 0xb4, 0xb3, 0xb7,
2801 0xb4, 0xa0, 0x5e, 0x52, 0xd0, 0xe9, 0x7a, 0x71,
2802 0x86, 0x7b, 0x73, 0x6c, 0x71, 0x7b, 0x7b, 0x63,
2803 0x5a, 0x73, 0x83, 0x89, 0x7c, 0x78, 0x7d, 0x69,
2804 0x63, 0x8b, 0x8f, 0x87, 0x7a, 0x87, 0x93, 0x70,
2805 0x6f, 0x86, 0x83, 0x78, 0x88, 0x85, 0x9b, 0x9a,
2806 0xa1, 0x7d, 0x7b, 0x54, 0x43, 0x44, 0x20, 0x2a,
2807 0x2a, 0x2b, 0x46, 0x82, 0xc4, 0xef, 0xff, 0xff,
2808 0xf4, 0xd4, 0xe0, 0xdf, 0xf9, 0xe2, 0x8a, 0x9f,
2809 0x94, 0x54, 0x69, 0x98, 0x8a, 0x75, 0x2d, 0x04,
2810 0xe1, 0xde, 0xdb, 0xe7, 0xdb, 0xba, 0xaf, 0xab,
2811 0xa2, 0xa6, 0xcc, 0xce, 0xd0, 0xc6, 0xc2, 0xbc,
2812 0xbf, 0xc0, 0xc0, 0xc1, 0xc1, 0xc2, 0xc2, 0xc3,
2813 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2814 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2815 0xc4, 0xc8, 0xc3, 0xc2, 0xc5, 0xb8, 0xb4, 0xc9,
2816 0xc1, 0xc1, 0xc0, 0xc0, 0xbf, 0xbe, 0xbe, 0xbd,
2817 0xbd, 0xc6, 0xc6, 0xbd, 0xbd, 0xc6, 0xc6, 0xbc,
2818 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2819 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2820 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2821 0xc4, 0xc2, 0xc0, 0xbf, 0xbf, 0xc0, 0xc2, 0xc4,
2822 0xc3, 0xc4, 0xc4, 0xc5, 0xc6, 0xc6, 0xc7, 0xc7,
2823 0xc1, 0x7f, 0x40, 0x44, 0x8e, 0xaa, 0xb8, 0xc2,
2824 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2825 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2826 0xc0, 0xc4, 0xc9, 0xcb, 0xc9, 0xc8, 0xc8, 0xc9,
2827 0xd0, 0xca, 0xca, 0xc7, 0xbb, 0xb9, 0xbf, 0xc1,
2828 0xb4, 0xb2, 0xba, 0x9d, 0xb8, 0xa4, 0xb0, 0xb7,
2829 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2830 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2831 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
2832 0xc1, 0xc1, 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5,
2833 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9,
2834 0xc8, 0xc9, 0xc9, 0xc9, 0xc8, 0xc5, 0xc2, 0xc0,
2835 0xbf, 0xb6, 0xbb, 0xc4, 0xc3, 0xc1, 0xc2, 0xbc,
2836 0xb2, 0xaa, 0xc6, 0xaf, 0x93, 0x8e, 0x71, 0x71,
2837 0x6c, 0x71, 0x74, 0x6d, 0x62, 0x5f, 0x65, 0x6e,
2838 0x76, 0x71, 0x69, 0x67, 0x6f, 0x78, 0x76, 0x6e,
2839 0x6f, 0x6a, 0x65, 0x67, 0x72, 0x7a, 0x72, 0x65,
2840 0x62, 0x64, 0x66, 0x63, 0x5d, 0x55, 0x4f, 0x4c,
2841 0x56, 0x4d, 0x48, 0x50, 0x5d, 0x5f, 0x51, 0x42,
2842 0x3e, 0x5d, 0x79, 0x61, 0x5f, 0x5a, 0x71, 0x74,
2843 0x87, 0x83, 0x6d, 0x73, 0x7c, 0x7d, 0x8e, 0x90,
2844 0x82, 0x96, 0x90, 0xa0, 0xa7, 0xb6, 0xa0, 0x7b,
2845 0x69, 0x65, 0x7f, 0x70, 0x77, 0xcd, 0xcb, 0x62,
2846 0x5e, 0x81, 0x8a, 0x84, 0x82, 0x78, 0x8d, 0x78,
2847 0x70, 0x94, 0x89, 0x82, 0x7c, 0x69, 0x78, 0x88,
2848 0x8f, 0x92, 0x7e, 0x81, 0x6c, 0x7b, 0x99, 0x8f,
2849 0x83, 0x66, 0x7b, 0x7f, 0x8d, 0x8b, 0x86, 0x82,
2850 0x6d, 0x97, 0x97, 0xa5, 0xa0, 0x89, 0x80, 0x52,
2851 0x4b, 0x44, 0x39, 0x2a, 0x1d, 0x2a, 0x5a, 0x8b,
2852 0xc4, 0xf5, 0xef, 0xff, 0xc2, 0x66, 0x86, 0x8a,
2853 0x52, 0x67, 0x72, 0x4e, 0x57, 0x6e, 0x17, 0x04,
2854 0xe8, 0xdd, 0xd8, 0xe7, 0xbf, 0x85, 0xa3, 0xdb,
2855 0xd0, 0xcd, 0xea, 0xe1, 0xdd, 0xd5, 0xd6, 0xd4,
2856 0xcb, 0xcb, 0xc9, 0xc7, 0xc6, 0xc4, 0xc2, 0xc2,
2857 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2858 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2859 0xc4, 0xb9, 0xba, 0xc0, 0xbc, 0xbd, 0xc6, 0xcb,
2860 0xc2, 0xc2, 0xc1, 0xc1, 0xc0, 0xbf, 0xbf, 0xbe,
2861 0xc0, 0xbc, 0xbe, 0xc6, 0xc6, 0xbc, 0xb9, 0xbd,
2862 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2863 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2864 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2865 0xc6, 0xc5, 0xc3, 0xc2, 0xc2, 0xc3, 0xc5, 0xc6,
2866 0xc4, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2867 0xc5, 0xb5, 0xb1, 0x50, 0x85, 0xc4, 0x82, 0x7d,
2868 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
2869 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
2870 0xc3, 0xc8, 0xcc, 0xcc, 0xc8, 0xc6, 0xc8, 0xca,
2871 0xca, 0xc6, 0xca, 0xc8, 0xbe, 0xc3, 0xcc, 0xc6,
2872 0xb6, 0xaa, 0xc0, 0xa5, 0xaf, 0xab, 0xab, 0xb6,
2873 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2874 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2875 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2876 0xc2, 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6,
2877 0xc6, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9, 0xca,
2878 0xc6, 0xc7, 0xc8, 0xca, 0xc9, 0xc8, 0xc6, 0xc5,
2879 0xb4, 0xac, 0xb5, 0xc5, 0xc6, 0xc3, 0xc3, 0xbe,
2880 0xb0, 0xa9, 0xbd, 0xab, 0x87, 0x71, 0x58, 0x5a,
2881 0x6f, 0x70, 0x6d, 0x68, 0x65, 0x6a, 0x75, 0x7e,
2882 0x7b, 0x72, 0x6e, 0x6e, 0x64, 0x59, 0x5f, 0x6e,
2883 0x68, 0x68, 0x72, 0x82, 0x8c, 0x89, 0x7f, 0x79,
2884 0x7f, 0x7b, 0x71, 0x61, 0x52, 0x4a, 0x4d, 0x51,
2885 0x55, 0x4f, 0x4d, 0x54, 0x5e, 0x5f, 0x54, 0x47,
2886 0x3a, 0x6a, 0x7c, 0x59, 0x60, 0x57, 0x67, 0x78,
2887 0x65, 0x55, 0x47, 0x5c, 0x66, 0x68, 0x83, 0x8b,
2888 0x97, 0xa4, 0x8e, 0x99, 0xa0, 0xb2, 0xa9, 0x89,
2889 0x6b, 0x91, 0x86, 0x75, 0x62, 0x8a, 0xd5, 0xb9,
2890 0x78, 0x73, 0x7f, 0x75, 0x68, 0x56, 0x6f, 0x6a,
2891 0x5c, 0x70, 0x65, 0x64, 0x7d, 0x83, 0x7b, 0x7f,
2892 0x8e, 0x75, 0x68, 0x8d, 0x91, 0x8f, 0x77, 0x76,
2893 0x7e, 0x70, 0x93, 0x92, 0x86, 0x73, 0x7c, 0x92,
2894 0x92, 0x8a, 0x8f, 0x78, 0x79, 0x94, 0x97, 0xa5,
2895 0xa7, 0x87, 0x60, 0x4a, 0x45, 0x3f, 0x33, 0x28,
2896 0x31, 0x22, 0x72, 0x83, 0x7a, 0x87, 0x51, 0x34,
2897 0x66, 0x64, 0x75, 0x80, 0x8a, 0x83, 0x24, 0x03,
2898 0xe0, 0xef, 0xe6, 0xee, 0xf8, 0xf9, 0xf7, 0xd9,
2899 0x49, 0x66, 0xb3, 0xd8, 0xee, 0xe9, 0xe1, 0xd5,
2900 0xd6, 0xd5, 0xd2, 0xce, 0xc9, 0xc5, 0xc2, 0xc0,
2901 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2902 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2903 0xbf, 0xc4, 0xc5, 0xc0, 0xbe, 0xc2, 0xc1, 0xbc,
2904 0xc3, 0xc3, 0xc2, 0xc1, 0xc1, 0xc0, 0xbf, 0xbf,
2905 0xbc, 0xbc, 0xbd, 0xbf, 0xc0, 0xbf, 0xbf, 0xc0,
2906 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2907 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2908 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2909 0xc8, 0xc7, 0xc5, 0xc4, 0xc4, 0xc5, 0xc7, 0xc8,
2910 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9,
2911 0xb9, 0x86, 0x7e, 0x6d, 0xa5, 0x90, 0x73, 0xca,
2912 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
2913 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2914 0xc7, 0xcb, 0xcd, 0xcb, 0xc6, 0xc4, 0xc8, 0xcd,
2915 0xce, 0xc9, 0xcd, 0xca, 0xc1, 0xca, 0xcf, 0xc2,
2916 0xc5, 0xac, 0xbb, 0x9f, 0x97, 0xae, 0xab, 0xc4,
2917 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2918 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2919 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
2920 0xc2, 0xc2, 0xc3, 0xc4, 0xc4, 0xc5, 0xc6, 0xc6,
2921 0xc6, 0xc6, 0xc7, 0xc8, 0xc8, 0xc9, 0xca, 0xca,
2922 0xc4, 0xc5, 0xc8, 0xca, 0xcb, 0xca, 0xc9, 0xc8,
2923 0xb8, 0xaf, 0xb8, 0xc8, 0xc6, 0xbe, 0xb9, 0xb3,
2924 0xac, 0xa8, 0xb3, 0xb0, 0x8c, 0x6d, 0x6a, 0x74,
2925 0x7a, 0x75, 0x6d, 0x66, 0x65, 0x6c, 0x77, 0x7f,
2926 0x85, 0x72, 0x62, 0x60, 0x63, 0x64, 0x6a, 0x73,
2927 0x74, 0x75, 0x81, 0x8e, 0x87, 0x70, 0x5f, 0x5d,
2928 0x5b, 0x65, 0x6f, 0x6e, 0x64, 0x5b, 0x58, 0x5a,
2929 0x51, 0x4f, 0x4e, 0x51, 0x55, 0x54, 0x4f, 0x49,
2930 0x35, 0x70, 0x7c, 0x53, 0x60, 0x54, 0x5e, 0x79,
2931 0x74, 0x59, 0x49, 0x5e, 0x5e, 0x58, 0x72, 0x7a,
2932 0x8c, 0x89, 0x89, 0xc1, 0xbb, 0x8f, 0x72, 0x6a,
2933 0x73, 0x72, 0x76, 0x8b, 0x8d, 0x72, 0x98, 0xfe,
2934 0xa7, 0x68, 0x90, 0x8d, 0x76, 0x5c, 0x60, 0x78,
2935 0x68, 0x7b, 0x8f, 0x7d, 0x7f, 0x8d, 0x6f, 0x55,
2936 0x8d, 0x91, 0x8f, 0x84, 0x71, 0x7e, 0x6a, 0x8f,
2937 0xa1, 0x94, 0x78, 0x72, 0x89, 0x7c, 0x8b, 0x8e,
2938 0x86, 0x7e, 0x7c, 0x8e, 0x8f, 0x7e, 0x7e, 0x84,
2939 0x6b, 0x86, 0xa0, 0xa3, 0x97, 0x81, 0x66, 0x50,
2940 0x39, 0x46, 0x20, 0x48, 0x92, 0x77, 0x5f, 0x82,
2941 0x84, 0x8b, 0x74, 0x75, 0x6b, 0x5e, 0x32, 0x08,
2942 0xf1, 0xeb, 0xe4, 0xf6, 0xb8, 0x65, 0x7a, 0x96,
2943 0x89, 0x75, 0x7d, 0x83, 0xb4, 0xe4, 0xd8, 0xe3,
2944 0xe2, 0xe2, 0xe0, 0xdf, 0xdd, 0xdb, 0xda, 0xd9,
2945 0xdb, 0xd9, 0xd6, 0xd1, 0xcc, 0xc7, 0xc3, 0xc1,
2946 0xbe, 0xbf, 0xc1, 0xc3, 0xc5, 0xc7, 0xc8, 0xc9,
2947 0xc5, 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2948 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc2,
2949 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2950 0xc2, 0xc3, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc7,
2951 0xc7, 0xc7, 0xc8, 0xc9, 0xc9, 0xca, 0xcb, 0xcb,
2952 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2953 0xc6, 0xca, 0xcc, 0xc9, 0xc3, 0xc0, 0xc2, 0xc6,
2954 0xc4, 0xc9, 0xcf, 0xcf, 0xcb, 0xc9, 0xcb, 0xce,
2955 0xc6, 0xa0, 0x74, 0xc7, 0xec, 0xb3, 0xc3, 0xdb,
2956 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
2957 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
2958 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2959 0xcc, 0xcb, 0xc9, 0xc8, 0xc8, 0xc9, 0xcb, 0xcc,
2960 0xae, 0xb8, 0xb6, 0x8a, 0x9e, 0x9d, 0x95, 0xc1,
2961 0xc5, 0xc6, 0xc9, 0xcb, 0xcb, 0xcb, 0xca, 0xc9,
2962 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
2963 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
2964 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
2965 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2966 0xbe, 0xc4, 0xc9, 0xca, 0xc7, 0xc6, 0xc9, 0xcd,
2967 0xc1, 0xa8, 0xa0, 0xcc, 0xcb, 0xca, 0xbb, 0xc7,
2968 0xa6, 0xa1, 0xbf, 0xbd, 0x9c, 0x7f, 0x65, 0x62,
2969 0x6a, 0x6b, 0x6f, 0x75, 0x7d, 0x84, 0x87, 0x88,
2970 0x73, 0x69, 0x5d, 0x5a, 0x64, 0x75, 0x84, 0x8d,
2971 0x8d, 0x8a, 0x87, 0x86, 0x84, 0x7c, 0x70, 0x66,
2972 0x7d, 0x74, 0x69, 0x63, 0x61, 0x62, 0x61, 0x5f,
2973 0x64, 0x56, 0x48, 0x46, 0x4d, 0x53, 0x51, 0x4c,
2974 0x48, 0x85, 0x74, 0x5d, 0x5d, 0x56, 0x6b, 0x7b,
2975 0x63, 0x4b, 0x5b, 0x4e, 0x5f, 0x83, 0x80, 0xa5,
2976 0x93, 0x84, 0xa1, 0xcf, 0xa9, 0x60, 0x5d, 0x7d,
2977 0x88, 0x7b, 0x87, 0x7f, 0x67, 0x5c, 0x71, 0xa8,
2978 0xde, 0x80, 0x65, 0x73, 0x7e, 0x7a, 0x6d, 0x7f,
2979 0x69, 0x79, 0x89, 0x7c, 0x66, 0x73, 0x8b, 0x8f,
2980 0x7b, 0x7b, 0x86, 0x71, 0x79, 0x95, 0x83, 0x79,
2981 0x79, 0x84, 0x80, 0x80, 0x8b, 0x85, 0x76, 0x77,
2982 0x88, 0x8e, 0x96, 0x8a, 0x90, 0x78, 0x5a, 0x8c,
2983 0x8f, 0x94, 0x84, 0x84, 0x79, 0x7c, 0xa1, 0x9e,
2984 0x94, 0x6b, 0x46, 0x57, 0x76, 0x67, 0x54, 0x62,
2985 0x5f, 0x6a, 0x66, 0x6c, 0x6d, 0x78, 0x26, 0x10,
2986 0xe8, 0xf8, 0xeb, 0xf4, 0xd4, 0x95, 0xb5, 0xf2,
2987 0xfd, 0xff, 0xf0, 0x92, 0x8c, 0xd8, 0xe9, 0xea,
2988 0xeb, 0xea, 0xe9, 0xe7, 0xe6, 0xe4, 0xe3, 0xe2,
2989 0xe8, 0xe6, 0xe3, 0xe0, 0xdc, 0xd8, 0xd5, 0xd3,
2990 0xcd, 0xcb, 0xca, 0xc7, 0xc4, 0xc2, 0xc0, 0xbf,
2991 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2992 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
2993 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2994 0xc4, 0xc4, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc8,
2995 0xc8, 0xc8, 0xc9, 0xc9, 0xca, 0xcb, 0xcb, 0xcc,
2996 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2997 0xcc, 0xcb, 0xc9, 0xc8, 0xc7, 0xc6, 0xc4, 0xc3,
2998 0xc5, 0xca, 0xcf, 0xcf, 0xcc, 0xca, 0xcc, 0xce,
2999 0xd8, 0xc8, 0xc8, 0xcc, 0x7e, 0x6c, 0xc5, 0xd4,
3000 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3001 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3002 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3003 0xcf, 0xcf, 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca,
3004 0xab, 0xaa, 0xbd, 0x8f, 0xa1, 0xaa, 0x97, 0xbd,
3005 0xc6, 0xc7, 0xca, 0xcc, 0xcc, 0xcc, 0xcb, 0xca,
3006 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3007 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
3008 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
3009 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3010 0xd0, 0xcc, 0xc6, 0xc3, 0xc3, 0xc5, 0xc7, 0xc8,
3011 0xd4, 0xbb, 0xa9, 0xc2, 0xba, 0xba, 0xb6, 0xca,
3012 0xd6, 0xb8, 0xcd, 0xc0, 0x83, 0x67, 0x66, 0x6b,
3013 0x74, 0x7f, 0x89, 0x85, 0x76, 0x6a, 0x68, 0x6c,
3014 0x6e, 0x7b, 0x87, 0x86, 0x7c, 0x75, 0x79, 0x80,
3015 0x80, 0x75, 0x6c, 0x6d, 0x76, 0x7b, 0x75, 0x6d,
3016 0x68, 0x64, 0x5e, 0x5c, 0x5c, 0x5a, 0x54, 0x4f,
3017 0x58, 0x4e, 0x45, 0x46, 0x4d, 0x4f, 0x49, 0x42,
3018 0x3d, 0x7d, 0x78, 0x67, 0x66, 0x5a, 0x62, 0x67,
3019 0x5b, 0x4e, 0x51, 0x35, 0x48, 0x70, 0x73, 0xa1,
3020 0x97, 0x98, 0xab, 0xa0, 0x74, 0x5f, 0x6f, 0x88,
3021 0x6b, 0x71, 0x8a, 0x8b, 0x85, 0x80, 0x72, 0x7a,
3022 0xd1, 0xc7, 0x84, 0x6d, 0x74, 0x62, 0x6a, 0x7d,
3023 0x73, 0x66, 0x75, 0x80, 0x8c, 0x9b, 0x8a, 0x72,
3024 0x79, 0x73, 0x8c, 0x9f, 0x93, 0x75, 0x6b, 0x84,
3025 0x77, 0x80, 0x9b, 0x96, 0x73, 0x75, 0x8c, 0x8a,
3026 0x92, 0x74, 0x82, 0x7f, 0x7d, 0x93, 0x8b, 0x7f,
3027 0x89, 0x6b, 0x78, 0x8d, 0x8d, 0x91, 0x8d, 0x7c,
3028 0x73, 0x95, 0xb8, 0x87, 0x3c, 0x56, 0x8e, 0x86,
3029 0x79, 0x80, 0x74, 0x71, 0x6b, 0x72, 0x1f, 0x09,
3030 0xec, 0xf3, 0xe5, 0xef, 0xf0, 0xee, 0xfe, 0xf0,
3031 0x67, 0xa8, 0xec, 0xeb, 0xec, 0xfa, 0xe6, 0xe6,
3032 0xef, 0xef, 0xee, 0xed, 0xeb, 0xea, 0xe9, 0xe9,
3033 0xf0, 0xef, 0xee, 0xec, 0xe9, 0xe7, 0xe6, 0xe5,
3034 0xe4, 0xe3, 0xdf, 0xdb, 0xd6, 0xd2, 0xcf, 0xcd,
3035 0xcd, 0xcd, 0xcc, 0xca, 0xc9, 0xc8, 0xc7, 0xc6,
3036 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5,
3037 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6,
3038 0xc7, 0xc7, 0xc8, 0xc8, 0xc9, 0xc9, 0xca, 0xca,
3039 0xca, 0xca, 0xca, 0xcb, 0xcc, 0xcd, 0xcd, 0xcd,
3040 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3041 0xd2, 0xcd, 0xc8, 0xc8, 0xcb, 0xcc, 0xc7, 0xc1,
3042 0xc7, 0xcb, 0xcf, 0xd0, 0xce, 0xcc, 0xcd, 0xce,
3043 0xd0, 0xd4, 0xdd, 0xd0, 0xa5, 0xb7, 0xe6, 0xcf,
3044 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3045 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3046 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3047 0xd3, 0xd4, 0xd5, 0xd5, 0xd3, 0xcf, 0xca, 0xc7,
3048 0xc4, 0xb4, 0xd0, 0x9f, 0xa6, 0xb8, 0xa1, 0xbe,
3049 0xc8, 0xc9, 0xcb, 0xcd, 0xce, 0xce, 0xcc, 0xcb,
3050 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3051 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
3052 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
3053 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3054 0xce, 0xca, 0xc6, 0xc7, 0xcb, 0xcb, 0xc5, 0xbf,
3055 0xc9, 0xbc, 0xb0, 0xbe, 0xb8, 0xb6, 0xb3, 0xc4,
3056 0xba, 0xa2, 0xca, 0xc2, 0x77, 0x59, 0x5f, 0x63,
3057 0x69, 0x6f, 0x72, 0x6b, 0x63, 0x65, 0x72, 0x80,
3058 0x85, 0x87, 0x89, 0x87, 0x83, 0x7f, 0x7d, 0x7d,
3059 0x85, 0x6f, 0x59, 0x56, 0x65, 0x76, 0x7d, 0x7c,
3060 0x68, 0x62, 0x5c, 0x5b, 0x5d, 0x5e, 0x5c, 0x5a,
3061 0x4a, 0x46, 0x44, 0x47, 0x4a, 0x46, 0x39, 0x2d,
3062 0x30, 0x72, 0x76, 0x62, 0x62, 0x61, 0x61, 0x58,
3063 0x5a, 0x53, 0x43, 0x2f, 0x69, 0x9c, 0x8b, 0xa2,
3064 0x9a, 0x86, 0x88, 0x68, 0x5d, 0x7f, 0x85, 0x89,
3065 0x92, 0x7f, 0x70, 0x5d, 0x71, 0x95, 0x86, 0x72,
3066 0x81, 0xbf, 0xa9, 0x84, 0x7c, 0x6e, 0x62, 0x4e,
3067 0x69, 0x69, 0x93, 0x92, 0x7c, 0x78, 0x6f, 0x7c,
3068 0x8e, 0x84, 0x72, 0x75, 0x78, 0x79, 0x8a, 0x93,
3069 0x85, 0x7e, 0x7c, 0x85, 0x89, 0x81, 0x83, 0x93,
3070 0x84, 0x6d, 0x8d, 0x98, 0x86, 0x90, 0x88, 0x69,
3071 0x73, 0x86, 0x94, 0x80, 0x8b, 0x88, 0x6b, 0x90,
3072 0x8a, 0x93, 0x6d, 0x60, 0x93, 0xa1, 0x8a, 0x8e,
3073 0x63, 0x6d, 0x65, 0x68, 0x67, 0x71, 0x20, 0x0a,
3074 0xea, 0xf6, 0xf3, 0xed, 0xe5, 0xef, 0xf2, 0xc5,
3075 0x8a, 0xb5, 0xe9, 0xf4, 0xfa, 0xfb, 0xe8, 0xee,
3076 0xed, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8, 0xe8,
3077 0xee, 0xed, 0xed, 0xec, 0xec, 0xeb, 0xeb, 0xea,
3078 0xee, 0xee, 0xec, 0xeb, 0xe9, 0xe7, 0xe6, 0xe5,
3079 0xdd, 0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd3, 0xd2,
3080 0xcb, 0xcb, 0xca, 0xca, 0xc9, 0xc9, 0xc8, 0xc8,
3081 0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcc, 0xcc, 0xcb,
3082 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
3083 0xcc, 0xcc, 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0,
3084 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3085 0xd3, 0xd0, 0xcc, 0xcb, 0xcc, 0xcb, 0xc8, 0xc4,
3086 0xc9, 0xcc, 0xcf, 0xd0, 0xd0, 0xcf, 0xcf, 0xcf,
3087 0xc7, 0xd1, 0xd1, 0xcd, 0xdc, 0xe8, 0xde, 0xd2,
3088 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3089 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3090 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3091 0xd3, 0xd6, 0xd8, 0xd9, 0xd5, 0xce, 0xc7, 0xc2,
3092 0xc1, 0xab, 0xc1, 0x9b, 0x9e, 0xb3, 0xb3, 0xc6,
3093 0xca, 0xcb, 0xce, 0xd0, 0xd0, 0xd0, 0xcf, 0xce,
3094 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3095 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3096 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
3097 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3098 0xd3, 0xcb, 0xc1, 0xbc, 0xc0, 0xc8, 0xcf, 0xd3,
3099 0xd6, 0xca, 0xb6, 0xb0, 0xaf, 0xae, 0xac, 0xb6,
3100 0x8c, 0x95, 0xc7, 0xbb, 0x79, 0x5d, 0x5a, 0x5e,
3101 0x71, 0x67, 0x5a, 0x54, 0x58, 0x64, 0x72, 0x7b,
3102 0x77, 0x6a, 0x5f, 0x60, 0x6e, 0x7c, 0x83, 0x84,
3103 0x6e, 0x69, 0x67, 0x6c, 0x74, 0x74, 0x6a, 0x5f,
3104 0x74, 0x6f, 0x68, 0x64, 0x63, 0x60, 0x5a, 0x55,
3105 0x44, 0x46, 0x4b, 0x53, 0x56, 0x4f, 0x41, 0x35,
3106 0x51, 0x91, 0x94, 0x69, 0x64, 0x77, 0x70, 0x54,
3107 0x54, 0x6c, 0x5c, 0x3e, 0x6d, 0x95, 0x8a, 0xa9,
3108 0x9f, 0x80, 0x92, 0x78, 0x69, 0x7e, 0x77, 0x8a,
3109 0x69, 0x7d, 0x94, 0x81, 0x79, 0x84, 0x73, 0x69,
3110 0x5a, 0x96, 0xe1, 0xb7, 0x69, 0x65, 0x6f, 0x71,
3111 0x7d, 0x59, 0x69, 0x6d, 0x70, 0x7f, 0x77, 0x84,
3112 0x6e, 0x80, 0x6c, 0x6e, 0x81, 0x94, 0x9d, 0x76,
3113 0x75, 0x85, 0x85, 0x89, 0x95, 0x83, 0x6b, 0x70,
3114 0x97, 0x86, 0x81, 0x83, 0x80, 0x73, 0x74, 0x8d,
3115 0x89, 0x73, 0x85, 0x73, 0x65, 0x9d, 0xa1, 0x65,
3116 0x79, 0x56, 0x5f, 0x7d, 0x6f, 0x55, 0x5b, 0x6c,
3117 0x7a, 0x86, 0x80, 0x82, 0x7a, 0x79, 0x1c, 0x00,
3118 0xeb, 0xfb, 0xf3, 0xf0, 0xf6, 0xef, 0xf1, 0xfc,
3119 0xf8, 0xff, 0xff, 0xec, 0xed, 0xf5, 0xf0, 0xf4,
3120 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xe9, 0xe9, 0xe9,
3121 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea,
3122 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
3123 0xe8, 0xe7, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdd,
3124 0xd7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd3, 0xd2,
3125 0xd1, 0xd1, 0xd0, 0xcf, 0xce, 0xcd, 0xcd, 0xcc,
3126 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xce, 0xce, 0xce,
3127 0xce, 0xcf, 0xcf, 0xd0, 0xd1, 0xd1, 0xd2, 0xd2,
3128 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3129 0xd1, 0xd3, 0xd3, 0xcf, 0xca, 0xc6, 0xc6, 0xc8,
3130 0xcc, 0xcd, 0xcf, 0xd1, 0xd3, 0xd3, 0xd1, 0xcf,
3131 0xd2, 0xcd, 0xd7, 0xd7, 0xd4, 0xd3, 0xca, 0xce,
3132 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3133 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3134 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3135 0xd3, 0xd5, 0xd8, 0xd7, 0xd4, 0xcc, 0xc4, 0xbf,
3136 0xc8, 0xb6, 0xbb, 0xa4, 0x9d, 0x9e, 0xb1, 0xb8,
3137 0xcc, 0xce, 0xd0, 0xd2, 0xd3, 0xd2, 0xd1, 0xd0,
3138 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3139 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3140 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
3141 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3142 0xc4, 0xc8, 0xcc, 0xcd, 0xca, 0xc8, 0xc9, 0xca,
3143 0xd4, 0xd0, 0xbe, 0xb0, 0xbd, 0xbd, 0xb3, 0xac,
3144 0xa1, 0xbd, 0xd2, 0xa9, 0x7a, 0x67, 0x5e, 0x6d,
3145 0x65, 0x61, 0x5e, 0x5f, 0x65, 0x6e, 0x76, 0x7a,
3146 0x80, 0x78, 0x6d, 0x66, 0x66, 0x68, 0x68, 0x68,
3147 0x65, 0x6e, 0x7a, 0x81, 0x7d, 0x71, 0x62, 0x59,
3148 0x5e, 0x5c, 0x5c, 0x60, 0x63, 0x62, 0x5c, 0x57,
3149 0x60, 0x62, 0x64, 0x65, 0x60, 0x53, 0x41, 0x35,
3150 0x5f, 0x9c, 0xa0, 0x64, 0x58, 0x77, 0x63, 0x33,
3151 0x37, 0x67, 0x6a, 0x5b, 0x86, 0x9e, 0x92, 0xaa,
3152 0x76, 0x55, 0x74, 0x73, 0x71, 0x80, 0x6f, 0x81,
3153 0x83, 0x72, 0x6e, 0x63, 0x6f, 0x88, 0x85, 0x89,
3154 0x68, 0x59, 0xad, 0xd5, 0xa1, 0x7d, 0x6d, 0x66,
3155 0x77, 0x69, 0x81, 0x81, 0x6b, 0x65, 0x64, 0x77,
3156 0x76, 0x8f, 0x8e, 0x90, 0x79, 0x63, 0x7f, 0x8a,
3157 0x86, 0x80, 0x7d, 0x6c, 0x64, 0x87, 0x9c, 0x84,
3158 0x83, 0x87, 0x77, 0x83, 0x97, 0x7e, 0x6e, 0x85,
3159 0x82, 0x74, 0x77, 0xa3, 0x98, 0x60, 0x78, 0xb6,
3160 0x73, 0x5d, 0x56, 0x56, 0x5a, 0x76, 0x8d, 0x86,
3161 0x85, 0x84, 0x6b, 0x5f, 0x57, 0x63, 0x1a, 0x0a,
3162 0xfb, 0xf5, 0xea, 0xe9, 0xef, 0xf1, 0xee, 0xed,
3163 0xf6, 0xf4, 0xee, 0xef, 0xf3, 0xeb, 0xe8, 0xf5,
3164 0xee, 0xee, 0xee, 0xee, 0xee, 0xed, 0xed, 0xed,
3165 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3166 0xe9, 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe6,
3167 0xea, 0xe9, 0xe8, 0xe7, 0xe6, 0xe4, 0xe3, 0xe3,
3168 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe0, 0xdf, 0xdf,
3169 0xd3, 0xd3, 0xd2, 0xd0, 0xcf, 0xce, 0xcd, 0xcc,
3170 0xd3, 0xd3, 0xd2, 0xd2, 0xd1, 0xd1, 0xd0, 0xd0,
3171 0xd1, 0xd1, 0xd1, 0xd2, 0xd3, 0xd4, 0xd4, 0xd4,
3172 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3173 0xd0, 0xd3, 0xd5, 0xd0, 0xc8, 0xc3, 0xc5, 0xc8,
3174 0xcf, 0xce, 0xcf, 0xd2, 0xd5, 0xd6, 0xd2, 0xcf,
3175 0xd6, 0xcf, 0xd2, 0xd3, 0xd9, 0xdc, 0xd1, 0xcd,
3176 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3177 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3178 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3179 0xd5, 0xd6, 0xd6, 0xd5, 0xd2, 0xcc, 0xc6, 0xc3,
3180 0xb8, 0xb0, 0xb4, 0xb1, 0xac, 0x9a, 0xb5, 0xc4,
3181 0xce, 0xd0, 0xd2, 0xd4, 0xd5, 0xd4, 0xd3, 0xd2,
3182 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3183 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3184 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
3185 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3186 0xd1, 0xd3, 0xd1, 0xc9, 0xc2, 0xc0, 0xc5, 0xcc,
3187 0xc0, 0xcc, 0xc6, 0xb8, 0xd4, 0xd5, 0xc4, 0xb0,
3188 0xb0, 0xc7, 0xc9, 0x9d, 0x83, 0x74, 0x61, 0x75,
3189 0x7d, 0x7f, 0x7c, 0x6f, 0x62, 0x61, 0x6d, 0x7b,
3190 0x78, 0x6e, 0x65, 0x64, 0x6b, 0x70, 0x6f, 0x6c,
3191 0x64, 0x6b, 0x70, 0x6e, 0x67, 0x62, 0x62, 0x65,
3192 0x64, 0x5c, 0x53, 0x50, 0x56, 0x5f, 0x66, 0x69,
3193 0x65, 0x65, 0x63, 0x5e, 0x55, 0x49, 0x3c, 0x34,
3194 0x3b, 0x6c, 0x80, 0x53, 0x4e, 0x6f, 0x53, 0x23,
3195 0x35, 0x54, 0x51, 0x54, 0x84, 0x9e, 0x9c, 0xab,
3196 0x92, 0x74, 0x81, 0x7f, 0x86, 0x98, 0x82, 0x75,
3197 0x7b, 0x77, 0x89, 0x8a, 0x81, 0x75, 0x61, 0x69,
3198 0x8e, 0x69, 0x77, 0xc7, 0xb8, 0x63, 0x55, 0x62,
3199 0x8f, 0x74, 0x64, 0x68, 0x6b, 0x77, 0x88, 0x85,
3200 0x9e, 0x82, 0x67, 0x74, 0x86, 0x88, 0x90, 0x91,
3201 0x7e, 0x74, 0x77, 0x86, 0x8e, 0x8f, 0x8e, 0x8b,
3202 0x71, 0x89, 0x8e, 0x95, 0x8f, 0x7a, 0x74, 0x6a,
3203 0x90, 0x88, 0x84, 0x87, 0x68, 0x78, 0x9d, 0x61,
3204 0x55, 0x92, 0x96, 0x82, 0x90, 0x85, 0x6a, 0x72,
3205 0x60, 0x75, 0x7e, 0x8c, 0x8b, 0x89, 0x28, 0x06,
3206 0xf1, 0xed, 0xf9, 0xf5, 0xeb, 0xf9, 0xfd, 0xeb,
3207 0xe9, 0xf4, 0xef, 0xed, 0xf3, 0xf3, 0xf4, 0xf6,
3208 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3209 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec,
3210 0xec, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea,
3211 0xe9, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3212 0xec, 0xeb, 0xea, 0xe9, 0xe7, 0xe5, 0xe4, 0xe4,
3213 0xdb, 0xda, 0xd9, 0xd8, 0xd6, 0xd5, 0xd3, 0xd3,
3214 0xd6, 0xd6, 0xd5, 0xd4, 0xd3, 0xd3, 0xd2, 0xd2,
3215 0xd2, 0xd3, 0xd3, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6,
3216 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3217 0xd2, 0xd2, 0xd0, 0xcd, 0xc9, 0xc5, 0xc4, 0xc3,
3218 0xd1, 0xcf, 0xcf, 0xd2, 0xd7, 0xd8, 0xd4, 0xcf,
3219 0xd0, 0xd9, 0xcd, 0xc6, 0xd0, 0xd4, 0xd4, 0xd9,
3220 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3221 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3222 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3223 0xd9, 0xd9, 0xd7, 0xd5, 0xd2, 0xcf, 0xcd, 0xcc,
3224 0xb8, 0xab, 0xb3, 0xae, 0xa7, 0x89, 0x9c, 0xc1,
3225 0xd0, 0xd2, 0xd4, 0xd6, 0xd7, 0xd6, 0xd5, 0xd4,
3226 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3227 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3228 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
3229 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3230 0xca, 0xce, 0xd3, 0xd4, 0xd0, 0xc9, 0xc1, 0xbc,
3231 0xc2, 0xd3, 0xcb, 0xac, 0xcb, 0xd0, 0xca, 0xba,
3232 0xa9, 0xa4, 0xab, 0xa0, 0x91, 0x7b, 0x63, 0x72,
3233 0x7c, 0x7c, 0x77, 0x6a, 0x60, 0x64, 0x77, 0x88,
3234 0x6f, 0x64, 0x59, 0x57, 0x5d, 0x64, 0x66, 0x65,
3235 0x79, 0x7c, 0x7e, 0x7d, 0x79, 0x76, 0x75, 0x76,
3236 0x7d, 0x70, 0x60, 0x57, 0x56, 0x5c, 0x61, 0x63,
3237 0x4b, 0x4b, 0x4b, 0x49, 0x48, 0x48, 0x4a, 0x4c,
3238 0x3c, 0x4d, 0x68, 0x58, 0x5a, 0x72, 0x5a, 0x42,
3239 0x58, 0x5e, 0x44, 0x34, 0x41, 0x54, 0x73, 0x92,
3240 0x72, 0x72, 0x84, 0x84, 0x7b, 0x84, 0x8a, 0x86,
3241 0x88, 0x6b, 0x64, 0x64, 0x74, 0x85, 0x80, 0x8a,
3242 0x76, 0x66, 0x56, 0x9c, 0xda, 0xb8, 0x85, 0x64,
3243 0x7f, 0x80, 0x70, 0x84, 0x87, 0x7d, 0x81, 0x55,
3244 0x78, 0x84, 0x96, 0x8f, 0x84, 0x7e, 0x6c, 0x67,
3245 0x8c, 0x8c, 0x84, 0x8a, 0x8f, 0x70, 0x6b, 0x96,
3246 0x94, 0x96, 0x85, 0x7d, 0x67, 0x63, 0x85, 0x84,
3247 0x76, 0x96, 0x72, 0x54, 0x74, 0x7a, 0x54, 0x3c,
3248 0x80, 0x5b, 0x64, 0x6f, 0x57, 0x66, 0x87, 0x7d,
3249 0x86, 0x85, 0x6d, 0x63, 0x5d, 0x6c, 0x24, 0x15,
3250 0xf6, 0xf3, 0xf2, 0xf0, 0xf7, 0xf3, 0xe8, 0xf4,
3251 0xfa, 0xfa, 0xea, 0xe9, 0xef, 0xea, 0xec, 0xf0,
3252 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3253 0xee, 0xee, 0xee, 0xed, 0xec, 0xeb, 0xeb, 0xeb,
3254 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xec, 0xed, 0xee,
3255 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xec, 0xec, 0xed,
3256 0xea, 0xea, 0xe8, 0xe7, 0xe5, 0xe3, 0xe2, 0xe1,
3257 0xe5, 0xe4, 0xe3, 0xe1, 0xe0, 0xde, 0xdd, 0xdc,
3258 0xd8, 0xd7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd3,
3259 0xd3, 0xd3, 0xd4, 0xd5, 0xd5, 0xd6, 0xd7, 0xd7,
3260 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
3261 0xd6, 0xd0, 0xcb, 0xc9, 0xca, 0xc9, 0xc3, 0xbe,
3262 0xd2, 0xd0, 0xcf, 0xd2, 0xd8, 0xd9, 0xd5, 0xcf,
3263 0xcc, 0xd2, 0xd4, 0xda, 0xd3, 0xd3, 0xe0, 0xd9,
3264 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3265 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3266 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3267 0xdd, 0xdb, 0xd8, 0xd5, 0xd3, 0xd2, 0xd2, 0xd3,
3268 0xc0, 0xa9, 0xb8, 0xad, 0xa8, 0x8d, 0x9b, 0xda,
3269 0xd1, 0xd3, 0xd5, 0xd7, 0xd8, 0xd7, 0xd6, 0xd5,
3270 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3271 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3272 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3273 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
3274 0xc9, 0xc9, 0xca, 0xcf, 0xd3, 0xd1, 0xc8, 0xc0,
3275 0xa6, 0xc5, 0xc9, 0xaa, 0xcb, 0xd1, 0xcf, 0xc0,
3276 0xbb, 0x91, 0x99, 0xa6, 0x95, 0x79, 0x66, 0x73,
3277 0x82, 0x7d, 0x75, 0x6f, 0x69, 0x65, 0x60, 0x5d,
3278 0x5d, 0x6b, 0x75, 0x70, 0x63, 0x60, 0x6e, 0x7e,
3279 0x81, 0x76, 0x68, 0x5f, 0x5f, 0x64, 0x69, 0x6b,
3280 0x57, 0x5a, 0x60, 0x69, 0x70, 0x6f, 0x67, 0x60,
3281 0x5e, 0x5a, 0x53, 0x4a, 0x44, 0x44, 0x49, 0x4d,
3282 0x5d, 0x4c, 0x5d, 0x59, 0x58, 0x61, 0x4d, 0x4e,
3283 0x68, 0x59, 0x3f, 0x44, 0x55, 0x59, 0x5b, 0x56,
3284 0x73, 0x68, 0x6b, 0x7e, 0x7c, 0x77, 0x7a, 0x6d,
3285 0x6c, 0x6f, 0x87, 0x88, 0x84, 0x7e, 0x68, 0x67,
3286 0x83, 0x8b, 0x78, 0x59, 0x8e, 0xc2, 0x8e, 0x5b,
3287 0x79, 0x8b, 0x6c, 0x74, 0x6a, 0x65, 0x8e, 0x6e,
3288 0x67, 0x60, 0x72, 0x6d, 0x74, 0x84, 0x7a, 0x84,
3289 0x81, 0x77, 0x70, 0x6b, 0x77, 0x97, 0x9c, 0x7d,
3290 0x7d, 0x76, 0x6b, 0x90, 0x9b, 0x81, 0x80, 0x71,
3291 0x58, 0x75, 0x8d, 0x93, 0xa2, 0x73, 0x3a, 0x6a,
3292 0x72, 0x7c, 0x78, 0x7b, 0x88, 0x7c, 0x69, 0x6c,
3293 0x65, 0x73, 0x72, 0x7b, 0x7c, 0x84, 0x2f, 0x16,
3294 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3295 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3296 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3297 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3298 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3299 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3300 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3301 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3302 0xe5, 0xe5, 0xe4, 0xe3, 0xe3, 0xe2, 0xe1, 0xe1,
3303 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3304 0xdb, 0xda, 0xda, 0xd9, 0xd8, 0xd8, 0xd7, 0xd7,
3305 0xd9, 0xd4, 0xd2, 0xcc, 0xc5, 0xcb, 0xcc, 0xc0,
3306 0xcd, 0xd8, 0xc5, 0xcf, 0xdd, 0xd3, 0xd8, 0xd8,
3307 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3308 0xd7, 0xd8, 0xd9, 0xdb, 0xdd, 0xdf, 0xe0, 0xe1,
3309 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3310 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3311 0xdd, 0xd9, 0xdc, 0xe3, 0xe0, 0xd5, 0xcf, 0xd1,
3312 0xc6, 0xa7, 0xad, 0xb5, 0xbb, 0x83, 0xaa, 0xcd,
3313 0xcd, 0xd6, 0xda, 0xd5, 0xd3, 0xd7, 0xd8, 0xd5,
3314 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3315 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3316 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
3317 0xd1, 0xd2, 0xd2, 0xd2, 0xd0, 0xcd, 0xca, 0xc8,
3318 0xc6, 0xdc, 0xca, 0xcd, 0xd5, 0xbc, 0xbc, 0xd0,
3319 0xc2, 0xbc, 0xb1, 0xa7, 0xb6, 0xa8, 0xb7, 0xa8,
3320 0xbe, 0xa2, 0xab, 0xc1, 0x95, 0x73, 0x7f, 0x6b,
3321 0x76, 0x71, 0x69, 0x62, 0x65, 0x6c, 0x6d, 0x69,
3322 0x7b, 0x76, 0x6c, 0x65, 0x6a, 0x71, 0x6d, 0x62,
3323 0x5d, 0x5c, 0x5e, 0x67, 0x72, 0x77, 0x75, 0x70,
3324 0x6d, 0x69, 0x64, 0x5f, 0x5b, 0x56, 0x51, 0x4d,
3325 0x53, 0x48, 0x4f, 0x52, 0x45, 0x43, 0x43, 0x33,
3326 0x50, 0x5e, 0x55, 0x43, 0x4e, 0x61, 0x55, 0x3b,
3327 0x51, 0x54, 0x50, 0x53, 0x58, 0x45, 0x2f, 0x2e,
3328 0x5f, 0x61, 0x69, 0x74, 0x76, 0x75, 0x80, 0x8f,
3329 0x75, 0x68, 0x65, 0x72, 0x7c, 0x7b, 0x7a, 0x7f,
3330 0x71, 0x69, 0x71, 0x71, 0x59, 0x94, 0xc7, 0x72,
3331 0x65, 0x76, 0x71, 0x7b, 0x90, 0x88, 0x79, 0x7c,
3332 0x7b, 0x59, 0x7e, 0x77, 0x87, 0x7f, 0x80, 0x81,
3333 0x67, 0x84, 0x92, 0x9c, 0x81, 0x6f, 0x7d, 0x61,
3334 0x84, 0x94, 0x80, 0x6b, 0x76, 0x74, 0x6d, 0x7b,
3335 0x85, 0x5c, 0x4c, 0x7e, 0x71, 0x5d, 0x92, 0x94,
3336 0x89, 0x70, 0x72, 0x6f, 0x57, 0x63, 0x77, 0x68,
3337 0x84, 0x8f, 0x87, 0x8a, 0x87, 0x83, 0x1d, 0x00,
3338 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3339 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3340 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3341 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3342 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3343 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3344 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3345 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3346 0xe6, 0xe5, 0xe5, 0xe4, 0xe3, 0xe3, 0xe2, 0xe2,
3347 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3348 0xdf, 0xdf, 0xdf, 0xde, 0xdd, 0xdc, 0xdc, 0xdc,
3349 0xd7, 0xda, 0xdb, 0xd0, 0xc6, 0xcd, 0xce, 0xbe,
3350 0xc3, 0xd5, 0xcb, 0xd0, 0xda, 0xd3, 0xd8, 0xd7,
3351 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3352 0xd8, 0xd9, 0xda, 0xdc, 0xdd, 0xdf, 0xe0, 0xe1,
3353 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3354 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3355 0xda, 0xdd, 0xe0, 0xdf, 0xdc, 0xd9, 0xd3, 0xce,
3356 0xd1, 0xb5, 0x96, 0xb1, 0xc1, 0x88, 0x95, 0xc7,
3357 0xcc, 0xd5, 0xdb, 0xd7, 0xd5, 0xd8, 0xd7, 0xd4,
3358 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3359 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3360 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3361 0xd2, 0xd2, 0xd3, 0xd3, 0xd1, 0xce, 0xcb, 0xc9,
3362 0xba, 0xbc, 0xcf, 0xd2, 0xd4, 0xca, 0xb5, 0xc1,
3363 0xdc, 0xc4, 0xc0, 0x98, 0x9c, 0xd3, 0xc9, 0xc9,
3364 0xa1, 0xa7, 0xc1, 0xd2, 0x9c, 0x6a, 0x76, 0x76,
3365 0x78, 0x7a, 0x7d, 0x80, 0x81, 0x7c, 0x6f, 0x63,
3366 0x7a, 0x7c, 0x76, 0x6d, 0x6c, 0x74, 0x79, 0x77,
3367 0x80, 0x7c, 0x75, 0x6d, 0x67, 0x65, 0x67, 0x6a,
3368 0x6a, 0x60, 0x58, 0x5a, 0x62, 0x64, 0x5c, 0x52,
3369 0x59, 0x50, 0x56, 0x58, 0x4d, 0x4b, 0x4a, 0x3e,
3370 0x4c, 0x61, 0x58, 0x40, 0x49, 0x5f, 0x5b, 0x48,
3371 0x66, 0x74, 0x69, 0x56, 0x56, 0x54, 0x48, 0x43,
3372 0x76, 0x72, 0x79, 0x89, 0x8d, 0x80, 0x70, 0x69,
3373 0x84, 0x8d, 0x8c, 0x7f, 0x76, 0x74, 0x6c, 0x60,
3374 0x8c, 0x7e, 0x89, 0x93, 0x74, 0x76, 0xa4, 0xac,
3375 0x75, 0x68, 0x60, 0x57, 0x84, 0x8b, 0x5e, 0x89,
3376 0x7b, 0x74, 0x81, 0x69, 0x81, 0x6e, 0x6f, 0x98,
3377 0x98, 0x94, 0x73, 0x80, 0x8e, 0x7d, 0x89, 0x98,
3378 0x92, 0x77, 0x73, 0x6d, 0x60, 0x7d, 0x97, 0x83,
3379 0x56, 0x7b, 0xae, 0x5d, 0x59, 0x91, 0x5f, 0x6d,
3380 0x5a, 0x66, 0x7c, 0x87, 0x88, 0x96, 0x98, 0x84,
3381 0x78, 0x58, 0x4e, 0x75, 0x82, 0x81, 0x29, 0x13,
3382 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3383 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3384 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3385 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3386 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3387 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3388 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3389 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3390 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3, 0xe3,
3391 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3392 0xe5, 0xe5, 0xe4, 0xe3, 0xe3, 0xe2, 0xe1, 0xe1,
3393 0xdb, 0xda, 0xdd, 0xd9, 0xce, 0xcc, 0xc9, 0xbc,
3394 0xb4, 0xd0, 0xd2, 0xd3, 0xd6, 0xd4, 0xd9, 0xd5,
3395 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3396 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xe0, 0xe1, 0xe1,
3397 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3398 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3399 0xd8, 0xe1, 0xe3, 0xdc, 0xd9, 0xdc, 0xd7, 0xcc,
3400 0xd8, 0xe2, 0x96, 0x92, 0xaf, 0xa1, 0xa7, 0xc9,
3401 0xca, 0xd5, 0xdc, 0xda, 0xd8, 0xd9, 0xd7, 0xd2,
3402 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3403 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3404 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
3405 0xd2, 0xd3, 0xd4, 0xd4, 0xd2, 0xd0, 0xcd, 0xcb,
3406 0xbf, 0xb0, 0xc1, 0xc7, 0xc9, 0xd1, 0xca, 0xcd,
3407 0xd2, 0xe4, 0xd9, 0xb9, 0x98, 0xcc, 0xd1, 0xc1,
3408 0x5a, 0xaf, 0xd3, 0xb4, 0x7c, 0x67, 0x73, 0x65,
3409 0x7a, 0x6f, 0x64, 0x62, 0x69, 0x74, 0x7d, 0x83,
3410 0x7d, 0x81, 0x7b, 0x6a, 0x60, 0x65, 0x6f, 0x75,
3411 0x87, 0x87, 0x86, 0x82, 0x7c, 0x77, 0x74, 0x72,
3412 0x5d, 0x62, 0x67, 0x69, 0x68, 0x6a, 0x6f, 0x74,
3413 0x5e, 0x58, 0x59, 0x56, 0x49, 0x43, 0x41, 0x38,
3414 0x45, 0x6a, 0x73, 0x67, 0x6d, 0x70, 0x60, 0x52,
3415 0x40, 0x5d, 0x66, 0x5d, 0x5f, 0x66, 0x72, 0x85,
3416 0x7e, 0x6e, 0x64, 0x6a, 0x74, 0x79, 0x7f, 0x87,
3417 0x75, 0x6f, 0x63, 0x5f, 0x6f, 0x83, 0x83, 0x74,
3418 0x79, 0x5d, 0x5e, 0x6e, 0x6f, 0x69, 0x8d, 0xd9,
3419 0xc2, 0x7e, 0x72, 0x6e, 0x7b, 0x82, 0x6f, 0x95,
3420 0x7a, 0x65, 0x6b, 0x63, 0x8b, 0xa3, 0x8f, 0x65,
3421 0x71, 0x80, 0x72, 0x7b, 0x8f, 0x87, 0x7c, 0x70,
3422 0x7e, 0x72, 0x77, 0x8b, 0x84, 0x67, 0x69, 0x89,
3423 0x96, 0xa0, 0x4e, 0x4d, 0x74, 0x6f, 0x84, 0x84,
3424 0x85, 0x90, 0x82, 0x69, 0x64, 0x5d, 0x4d, 0x45,
3425 0x7a, 0x7b, 0x88, 0x8a, 0x5b, 0x53, 0x11, 0x00,
3426 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3427 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3428 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3429 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3430 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3431 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3432 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3433 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3434 0xe8, 0xe8, 0xe7, 0xe7, 0xe6, 0xe5, 0xe5, 0xe4,
3435 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3436 0xe7, 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3,
3437 0xe3, 0xd5, 0xd6, 0xdd, 0xd6, 0xcc, 0xc3, 0xb8,
3438 0xa8, 0xc8, 0xd9, 0xd5, 0xd2, 0xd7, 0xdb, 0xd5,
3439 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3440 0xdd, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe1, 0xe2,
3441 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3442 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3443 0xdc, 0xe1, 0xe1, 0xdd, 0xda, 0xda, 0xd6, 0xd0,
3444 0xb3, 0xe3, 0xa5, 0x87, 0xad, 0xb3, 0xc1, 0xc8,
3445 0xc9, 0xd5, 0xdd, 0xdc, 0xda, 0xda, 0xd7, 0xd2,
3446 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3447 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3448 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
3449 0xd3, 0xd3, 0xd4, 0xd5, 0xd4, 0xd2, 0xcf, 0xce,
3450 0xc5, 0xc6, 0xc3, 0xd4, 0xd6, 0xca, 0xc6, 0xaf,
3451 0xb7, 0xd4, 0xcb, 0xd2, 0xbc, 0xca, 0xd9, 0xaf,
3452 0x86, 0xd0, 0xdf, 0xba, 0x84, 0x59, 0x5d, 0x68,
3453 0x70, 0x6e, 0x75, 0x80, 0x83, 0x77, 0x68, 0x61,
3454 0x6e, 0x73, 0x6d, 0x60, 0x5b, 0x66, 0x76, 0x7e,
3455 0x8c, 0x8a, 0x89, 0x89, 0x87, 0x81, 0x78, 0x72,
3456 0x5c, 0x67, 0x6e, 0x68, 0x5a, 0x54, 0x5b, 0x66,
3457 0x60, 0x5f, 0x5f, 0x5a, 0x4f, 0x49, 0x48, 0x45,
3458 0x4e, 0x69, 0x6f, 0x6c, 0x6d, 0x5d, 0x50, 0x5e,
3459 0x41, 0x34, 0x2e, 0x4a, 0x6e, 0x6d, 0x62, 0x6a,
3460 0x65, 0x6c, 0x7b, 0x87, 0x82, 0x71, 0x6a, 0x6d,
3461 0x71, 0x73, 0x7d, 0x87, 0x80, 0x71, 0x6e, 0x76,
3462 0x79, 0x84, 0x9c, 0x8b, 0x74, 0x61, 0x64, 0xa2,
3463 0xdd, 0x9d, 0x68, 0x69, 0x72, 0x73, 0x7c, 0x81,
3464 0x83, 0x67, 0x7b, 0x8e, 0x7e, 0x6b, 0x75, 0x7f,
3465 0x6e, 0x87, 0x9c, 0x8b, 0x64, 0x67, 0x86, 0x8b,
3466 0x86, 0x9c, 0x80, 0x6a, 0x83, 0x7d, 0x5b, 0x59,
3467 0x6a, 0x5a, 0x5c, 0x87, 0x92, 0x7a, 0x7a, 0x7c,
3468 0x67, 0x71, 0x61, 0x60, 0x7a, 0x78, 0x75, 0x95,
3469 0x8f, 0x66, 0x5f, 0x6d, 0x4a, 0x4b, 0x18, 0x0e,
3470 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3471 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3472 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3473 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3474 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3475 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3476 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3477 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3478 0xea, 0xe9, 0xe9, 0xe8, 0xe7, 0xe7, 0xe6, 0xe6,
3479 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3480 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3, 0xe3,
3481 0xe2, 0xd8, 0xd5, 0xd6, 0xd5, 0xd5, 0xc7, 0xaf,
3482 0xa3, 0xc0, 0xdb, 0xd7, 0xd1, 0xda, 0xde, 0xd9,
3483 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3484 0xdf, 0xe0, 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
3485 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3486 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
3487 0xe2, 0xde, 0xdd, 0xe0, 0xde, 0xd6, 0xd4, 0xd6,
3488 0xc4, 0xd3, 0xab, 0x85, 0x9e, 0x87, 0xb0, 0xca,
3489 0xcb, 0xd6, 0xde, 0xdc, 0xd9, 0xdb, 0xd9, 0xd4,
3490 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3491 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
3492 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3493 0xd3, 0xd4, 0xd5, 0xd6, 0xd6, 0xd4, 0xd2, 0xd0,
3494 0xbf, 0xba, 0x9f, 0xaa, 0xc4, 0xcd, 0xd3, 0xc6,
3495 0xae, 0xb9, 0xd4, 0xd0, 0xb7, 0x9d, 0xb9, 0xc5,
3496 0x98, 0xc9, 0xc0, 0xa0, 0x81, 0x61, 0x69, 0x7e,
3497 0x86, 0x77, 0x70, 0x75, 0x74, 0x6a, 0x65, 0x68,
3498 0x7f, 0x7d, 0x72, 0x62, 0x5d, 0x67, 0x70, 0x72,
3499 0x85, 0x86, 0x84, 0x7e, 0x77, 0x76, 0x7c, 0x82,
3500 0x90, 0x8b, 0x82, 0x77, 0x6b, 0x60, 0x57, 0x52,
3501 0x4a, 0x4f, 0x4f, 0x49, 0x44, 0x3f, 0x40, 0x46,
3502 0x5b, 0x6a, 0x6d, 0x78, 0x78, 0x4e, 0x3b, 0x61,
3503 0x48, 0x47, 0x4b, 0x5f, 0x6c, 0x61, 0x66, 0x86,
3504 0x78, 0x76, 0x7a, 0x7f, 0x7b, 0x76, 0x7e, 0x8b,
3505 0x7e, 0x67, 0x5b, 0x69, 0x7e, 0x86, 0x87, 0x89,
3506 0x70, 0x6b, 0x78, 0x6b, 0x72, 0x85, 0x6c, 0x60,
3507 0x9f, 0xbe, 0x8b, 0x56, 0x6b, 0x7b, 0x7c, 0x8e,
3508 0x84, 0x75, 0x5a, 0x6d, 0x82, 0x79, 0x79, 0x9b,
3509 0x91, 0x73, 0x78, 0x88, 0x88, 0x8b, 0x8f, 0x8d,
3510 0x81, 0x76, 0x8b, 0x9b, 0x88, 0x84, 0x97, 0xa0,
3511 0x71, 0x5b, 0x8f, 0x7d, 0x5a, 0x6a, 0x61, 0x6f,
3512 0x91, 0x8d, 0x7f, 0x8a, 0x96, 0x6e, 0x57, 0x7a,
3513 0x57, 0x68, 0x7a, 0x82, 0x6f, 0x82, 0x37, 0x08,
3514 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3515 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3516 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3517 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3518 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3519 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3520 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3521 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3522 0xeb, 0xeb, 0xea, 0xea, 0xe9, 0xe8, 0xe8, 0xe7,
3523 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3524 0xe7, 0xe6, 0xe6, 0xe5, 0xe4, 0xe4, 0xe3, 0xe3,
3525 0xdd, 0xe1, 0xdd, 0xce, 0xcd, 0xde, 0xd4, 0xaf,
3526 0xa6, 0xb8, 0xd9, 0xd9, 0xd2, 0xde, 0xe1, 0xe1,
3527 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
3528 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3529 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3530 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3531 0xe6, 0xde, 0xdc, 0xe1, 0xdf, 0xd5, 0xd3, 0xd9,
3532 0xc9, 0xc6, 0xc4, 0xa5, 0xb0, 0x80, 0x98, 0xb0,
3533 0xd0, 0xd9, 0xdd, 0xd9, 0xd6, 0xda, 0xdb, 0xd8,
3534 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3535 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3536 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
3537 0xd4, 0xd5, 0xd6, 0xd7, 0xd7, 0xd6, 0xd4, 0xd3,
3538 0xd4, 0xdb, 0xdb, 0xb7, 0xa4, 0xad, 0xbb, 0xe0,
3539 0xeb, 0xd8, 0xcc, 0xd0, 0xce, 0x9a, 0xb9, 0xcd,
3540 0xae, 0xda, 0xc4, 0x96, 0x79, 0x6a, 0x74, 0x78,
3541 0x77, 0x6b, 0x6b, 0x7a, 0x7b, 0x6b, 0x61, 0x64,
3542 0x6f, 0x6f, 0x69, 0x5f, 0x60, 0x6d, 0x77, 0x79,
3543 0x7d, 0x89, 0x90, 0x88, 0x79, 0x73, 0x7c, 0x88,
3544 0x94, 0x91, 0x8b, 0x82, 0x77, 0x6e, 0x68, 0x65,
3545 0x59, 0x60, 0x5a, 0x4d, 0x44, 0x3a, 0x37, 0x42,
3546 0x62, 0x71, 0x75, 0x86, 0x8b, 0x54, 0x36, 0x5e,
3547 0x67, 0x60, 0x4e, 0x47, 0x52, 0x53, 0x56, 0x66,
3548 0x82, 0x78, 0x76, 0x7f, 0x83, 0x7c, 0x74, 0x72,
3549 0x71, 0x7e, 0x84, 0x79, 0x70, 0x6e, 0x68, 0x5e,
3550 0x91, 0x84, 0x85, 0x73, 0x65, 0x72, 0x70, 0x61,
3551 0x75, 0x9d, 0xa9, 0x5a, 0x54, 0x8a, 0x73, 0x64,
3552 0x5d, 0x85, 0x84, 0x8d, 0x82, 0x85, 0x76, 0x61,
3553 0x80, 0x89, 0x90, 0x86, 0x85, 0x78, 0x61, 0x70,
3554 0x8f, 0x8e, 0x93, 0x84, 0x77, 0x94, 0x97, 0x65,
3555 0x50, 0x67, 0x60, 0x75, 0x7d, 0x80, 0x9d, 0x8a,
3556 0x8b, 0x74, 0x60, 0x66, 0x69, 0x55, 0x58, 0x7a,
3557 0x76, 0x7d, 0x60, 0x42, 0x2b, 0x3c, 0x0c, 0x18,
3558 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3559 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3560 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3561 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3562 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3563 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3564 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3565 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3566 0xec, 0xec, 0xeb, 0xeb, 0xea, 0xe9, 0xe9, 0xe8,
3567 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3568 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5, 0xe5,
3569 0xe0, 0xe4, 0xe4, 0xd7, 0xcf, 0xda, 0xd9, 0xc4,
3570 0xad, 0xb2, 0xd4, 0xd9, 0xd4, 0xe1, 0xe4, 0xe9,
3571 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3572 0xe4, 0xe4, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3573 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3574 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
3575 0xe4, 0xe1, 0xdf, 0xde, 0xdb, 0xd8, 0xd7, 0xd8,
3576 0xc5, 0xc3, 0xc4, 0xa8, 0xb4, 0xa3, 0xa0, 0xb3,
3577 0xd5, 0xdb, 0xdc, 0xd5, 0xd3, 0xd8, 0xdd, 0xdd,
3578 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3579 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3580 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
3581 0xd4, 0xd5, 0xd7, 0xd8, 0xd9, 0xd7, 0xd6, 0xd5,
3582 0xd4, 0xce, 0xdb, 0xcf, 0xc2, 0xbf, 0xa4, 0x91,
3583 0xba, 0xcb, 0xd0, 0xf5, 0xfd, 0xc7, 0xc4, 0xd6,
3584 0xa1, 0xbd, 0xb9, 0xa7, 0x7e, 0x59, 0x6a, 0x82,
3585 0x84, 0x75, 0x75, 0x84, 0x82, 0x6b, 0x5c, 0x5f,
3586 0x6e, 0x76, 0x75, 0x68, 0x60, 0x65, 0x6e, 0x73,
3587 0x8f, 0x92, 0x92, 0x8b, 0x7d, 0x70, 0x66, 0x63,
3588 0x7a, 0x7e, 0x80, 0x7d, 0x76, 0x73, 0x75, 0x79,
3589 0x5a, 0x63, 0x59, 0x47, 0x3c, 0x2e, 0x2a, 0x38,
3590 0x67, 0x78, 0x6a, 0x68, 0x75, 0x53, 0x3d, 0x63,
3591 0x59, 0x5e, 0x58, 0x53, 0x56, 0x57, 0x6b, 0x8f,
3592 0x71, 0x69, 0x6b, 0x79, 0x82, 0x7e, 0x78, 0x78,
3593 0x72, 0x71, 0x6b, 0x6a, 0x7a, 0x8e, 0x8f, 0x83,
3594 0x75, 0x6d, 0x6a, 0x7d, 0x88, 0x8d, 0x8d, 0x76,
3595 0x5b, 0x7d, 0xe7, 0xc3, 0x59, 0x60, 0x7b, 0x80,
3596 0x8b, 0x78, 0x5f, 0x80, 0x63, 0x6f, 0x8c, 0x90,
3597 0x78, 0x81, 0x81, 0x66, 0x74, 0x90, 0x89, 0x99,
3598 0x78, 0x8b, 0x75, 0x69, 0x77, 0x61, 0x52, 0x76,
3599 0x7a, 0x92, 0x91, 0x7b, 0x7a, 0x7d, 0x6b, 0x5e,
3600 0x53, 0x60, 0x7d, 0x8a, 0x79, 0x62, 0x45, 0x22,
3601 0x20, 0x2d, 0x5c, 0xd8, 0xff, 0xbf, 0x19, 0x18,
3602 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3603 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3604 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3605 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3606 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3607 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3608 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3609 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3610 0xed, 0xed, 0xec, 0xeb, 0xeb, 0xea, 0xe9, 0xe9,
3611 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3612 0xeb, 0xeb, 0xea, 0xea, 0xe9, 0xe8, 0xe8, 0xe7,
3613 0xe9, 0xe0, 0xe4, 0xe7, 0xd7, 0xce, 0xd5, 0xdd,
3614 0xb3, 0xae, 0xd1, 0xda, 0xd6, 0xe3, 0xe5, 0xee,
3615 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3616 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe3,
3617 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3618 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3619 0xe1, 0xe6, 0xe3, 0xda, 0xd7, 0xdc, 0xdb, 0xd5,
3620 0xc7, 0xc4, 0xc0, 0xb2, 0xbb, 0xb4, 0x86, 0x97,
3621 0xd8, 0xdc, 0xdb, 0xd2, 0xd0, 0xd8, 0xdf, 0xe0,
3622 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3623 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
3624 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3625 0xd4, 0xd5, 0xd7, 0xd9, 0xd9, 0xd8, 0xd7, 0xd6,
3626 0xd4, 0xd3, 0xd7, 0xdd, 0xc9, 0xca, 0xdb, 0xbb,
3627 0x73, 0x4f, 0x43, 0x3f, 0x5e, 0x8d, 0x7a, 0xc5,
3628 0xa6, 0xe3, 0xf0, 0xc5, 0x85, 0x69, 0x79, 0x77,
3629 0x6c, 0x5c, 0x5f, 0x73, 0x76, 0x63, 0x5a, 0x62,
3630 0x6b, 0x7c, 0x84, 0x78, 0x6a, 0x6d, 0x7b, 0x85,
3631 0x93, 0x7f, 0x6b, 0x68, 0x6f, 0x70, 0x61, 0x51,
3632 0x60, 0x56, 0x4e, 0x50, 0x59, 0x5c, 0x54, 0x4a,
3633 0x4e, 0x5c, 0x55, 0x47, 0x44, 0x3b, 0x3b, 0x4e,
3634 0x61, 0x82, 0x77, 0x6e, 0x82, 0x6b, 0x4d, 0x62,
3635 0x73, 0x59, 0x4a, 0x61, 0x76, 0x68, 0x68, 0x86,
3636 0x88, 0x86, 0x88, 0x88, 0x7d, 0x6e, 0x6c, 0x74,
3637 0x74, 0x6c, 0x6d, 0x78, 0x7c, 0x75, 0x74, 0x79,
3638 0x7c, 0x8d, 0x7e, 0x80, 0x79, 0x68, 0x74, 0x6f,
3639 0x67, 0x50, 0x98, 0xda, 0xa0, 0x6d, 0x7b, 0x73,
3640 0x79, 0x82, 0x5d, 0x87, 0x8a, 0x84, 0x72, 0x71,
3641 0x71, 0x67, 0x92, 0x9c, 0x8c, 0x88, 0x78, 0x7c,
3642 0x63, 0x92, 0x83, 0x84, 0xb4, 0x91, 0x5e, 0x7f,
3643 0x78, 0x60, 0x58, 0x64, 0x6f, 0x70, 0x77, 0x8c,
3644 0x6f, 0x5a, 0x3f, 0x13, 0x09, 0x54, 0x97, 0x8f,
3645 0xbc, 0xff, 0xff, 0xe9, 0xf9, 0xd5, 0x2a, 0x00,
3646 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3647 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3648 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3649 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3650 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3651 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3652 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3653 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3654 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3655 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3656 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3657 0xed, 0xea, 0xe6, 0xe0, 0xdb, 0xda, 0xdc, 0xdf,
3658 0xc6, 0xac, 0xbb, 0xc2, 0xdb, 0xe8, 0xe9, 0xe6,
3659 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe5, 0xe5, 0xe4,
3660 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3661 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3662 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3663 0xe4, 0xe3, 0xe2, 0xe0, 0xde, 0xdd, 0xdd, 0xde,
3664 0xcf, 0xc6, 0xd4, 0xa2, 0xc3, 0xc1, 0x94, 0xa3,
3665 0xcf, 0xde, 0xce, 0xcf, 0xcc, 0xd7, 0xde, 0xe3,
3666 0xd8, 0xd9, 0xdb, 0xdc, 0xdb, 0xda, 0xd8, 0xd7,
3667 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3668 0xdd, 0xdd, 0xdc, 0xdc, 0xdb, 0xdb, 0xda, 0xda,
3669 0xd9, 0xd9, 0xd8, 0xd7, 0xd6, 0xd5, 0xd5, 0xd5,
3670 0xe6, 0xd1, 0xce, 0xce, 0xd3, 0xdc, 0xad, 0x63,
3671 0x6d, 0x72, 0x48, 0x4d, 0x2a, 0x2e, 0x48, 0x51,
3672 0x3e, 0x6d, 0x8e, 0x83, 0x6b, 0x67, 0x6f, 0x72,
3673 0x73, 0x6b, 0x70, 0x7b, 0x74, 0x5f, 0x5a, 0x66,
3674 0x6b, 0x79, 0x7c, 0x6d, 0x60, 0x5e, 0x5c, 0x57,
3675 0x4a, 0x4a, 0x53, 0x65, 0x70, 0x6c, 0x66, 0x65,
3676 0x6a, 0x69, 0x64, 0x5d, 0x5b, 0x5b, 0x52, 0x46,
3677 0x4f, 0x50, 0x4c, 0x48, 0x41, 0x37, 0x47, 0x69,
3678 0x7b, 0x77, 0x6e, 0x70, 0x73, 0x60, 0x56, 0x66,
3679 0x68, 0x49, 0x69, 0x51, 0x57, 0x78, 0x85, 0x86,
3680 0x7f, 0x7d, 0x75, 0x6f, 0x74, 0x7e, 0x7e, 0x77,
3681 0x82, 0x62, 0x5c, 0x5d, 0x75, 0x8a, 0x7e, 0x82,
3682 0x7a, 0x70, 0x61, 0x5b, 0x69, 0x7e, 0x82, 0x7a,
3683 0x6c, 0x5c, 0x62, 0xaf, 0xcf, 0xa0, 0x83, 0x77,
3684 0x81, 0x90, 0x7c, 0x53, 0x74, 0x88, 0x69, 0x80,
3685 0x7d, 0x96, 0x84, 0x65, 0x6c, 0x7b, 0x80, 0x8a,
3686 0xa4, 0x6f, 0x6b, 0x96, 0x76, 0x55, 0x6a, 0x51,
3687 0x87, 0x7d, 0x7f, 0x8a, 0x79, 0x49, 0x1f, 0x0f,
3688 0x39, 0x7a, 0xce, 0xff, 0xff, 0xff, 0xfa, 0xfe,
3689 0xd3, 0xcc, 0xbf, 0x97, 0x5d, 0x64, 0x2e, 0x00,
3690 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3691 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3692 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3693 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3694 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3695 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3696 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3697 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3698 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3699 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3700 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3701 0xea, 0xe8, 0xe6, 0xe3, 0xdf, 0xdb, 0xd6, 0xd3,
3702 0xd6, 0xbe, 0xbf, 0xc6, 0xe6, 0xec, 0xe8, 0xe1,
3703 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5, 0xe5,
3704 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3705 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3706 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3707 0xe1, 0xe4, 0xe6, 0xe2, 0xdd, 0xda, 0xdd, 0xe1,
3708 0xd3, 0xc1, 0xcc, 0xc2, 0xc4, 0xad, 0x82, 0xa0,
3709 0xcf, 0xd2, 0xce, 0xd9, 0xca, 0xd0, 0xdd, 0xdf,
3710 0xd9, 0xda, 0xdc, 0xdd, 0xdd, 0xdc, 0xda, 0xd9,
3711 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3712 0xdd, 0xdd, 0xdd, 0xdc, 0xdb, 0xdb, 0xda, 0xda,
3713 0xd9, 0xd9, 0xd8, 0xd8, 0xd7, 0xd6, 0xd6, 0xd5,
3714 0xd9, 0xd0, 0xda, 0xcc, 0xe8, 0xd6, 0x6a, 0x4f,
3715 0x8c, 0x67, 0x49, 0x5f, 0x58, 0x67, 0x6c, 0x7d,
3716 0x44, 0x3e, 0x36, 0x3a, 0x4d, 0x61, 0x67, 0x62,
3717 0x53, 0x5a, 0x67, 0x72, 0x71, 0x69, 0x65, 0x67,
3718 0x78, 0x82, 0x81, 0x72, 0x66, 0x67, 0x6b, 0x6b,
3719 0x79, 0x6d, 0x65, 0x67, 0x6b, 0x6c, 0x6f, 0x75,
3720 0x63, 0x65, 0x63, 0x5f, 0x61, 0x65, 0x5f, 0x55,
3721 0x48, 0x46, 0x41, 0x43, 0x43, 0x39, 0x40, 0x5a,
3722 0x75, 0x6e, 0x6a, 0x6e, 0x69, 0x59, 0x59, 0x69,
3723 0x4e, 0x59, 0x66, 0x3c, 0x54, 0x75, 0x70, 0x61,
3724 0x6c, 0x7a, 0x84, 0x83, 0x80, 0x81, 0x80, 0x7d,
3725 0x7c, 0x78, 0x70, 0x87, 0x85, 0x6a, 0x71, 0x74,
3726 0x70, 0x87, 0x93, 0x81, 0x68, 0x60, 0x68, 0x71,
3727 0x6b, 0x71, 0x67, 0x73, 0xd7, 0xd8, 0x6c, 0x70,
3728 0x82, 0x68, 0x75, 0x79, 0x7c, 0x87, 0x87, 0x9b,
3729 0x65, 0x79, 0x87, 0x7c, 0x7b, 0x94, 0x8f, 0x65,
3730 0x6e, 0x94, 0x76, 0x40, 0x5d, 0x8c, 0x91, 0x97,
3731 0x75, 0x49, 0x15, 0x10, 0x56, 0xbb, 0xfa, 0xff,
3732 0xff, 0xfc, 0xf8, 0xf6, 0xe9, 0xc2, 0x8b, 0x61,
3733 0x51, 0x2f, 0x2d, 0x49, 0x3f, 0x3e, 0x16, 0x13,
3734 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3735 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3736 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3737 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3738 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3739 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3740 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3741 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3742 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3743 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3744 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3745 0xe8, 0xe6, 0xe5, 0xe6, 0xe5, 0xde, 0xd2, 0xc8,
3746 0xd7, 0xbc, 0xad, 0xc7, 0xf1, 0xe0, 0xe0, 0xee,
3747 0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6,
3748 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3749 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3750 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
3751 0xe0, 0xe5, 0xe9, 0xe5, 0xdd, 0xda, 0xdd, 0xe3,
3752 0xd9, 0xc5, 0xb9, 0xcc, 0xb5, 0xae, 0x86, 0x8d,
3753 0xdd, 0xd0, 0xce, 0xe2, 0xca, 0xce, 0xdc, 0xd7,
3754 0xdb, 0xdc, 0xdd, 0xdf, 0xdf, 0xde, 0xdc, 0xdb,
3755 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
3756 0xde, 0xdd, 0xdd, 0xdc, 0xdc, 0xdb, 0xdb, 0xdb,
3757 0xd9, 0xd9, 0xd9, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7,
3758 0xdd, 0xdb, 0xdb, 0xef, 0xa6, 0x63, 0x82, 0x6f,
3759 0x84, 0x5f, 0x7c, 0xa8, 0x99, 0x7d, 0x49, 0x50,
3760 0x61, 0x49, 0x3d, 0x52, 0x73, 0x82, 0x77, 0x67,
3761 0x61, 0x6e, 0x7a, 0x7b, 0x76, 0x6f, 0x66, 0x5e,
3762 0x74, 0x79, 0x76, 0x68, 0x5e, 0x62, 0x6c, 0x71,
3763 0x76, 0x6a, 0x62, 0x61, 0x5c, 0x51, 0x49, 0x48,
3764 0x5e, 0x61, 0x60, 0x5e, 0x60, 0x64, 0x60, 0x57,
3765 0x4b, 0x4a, 0x45, 0x44, 0x44, 0x3f, 0x4e, 0x6f,
3766 0x77, 0x7c, 0x7d, 0x84, 0x81, 0x62, 0x4e, 0x5b,
3767 0x55, 0x5e, 0x4b, 0x33, 0x69, 0x7a, 0x7d, 0x8e,
3768 0x72, 0x7a, 0x7b, 0x75, 0x74, 0x7e, 0x89, 0x8e,
3769 0x68, 0x73, 0x60, 0x5f, 0x71, 0x88, 0x9a, 0x85,
3770 0x85, 0x7a, 0x68, 0x61, 0x6f, 0x85, 0x8b, 0x83,
3771 0x77, 0x68, 0x6d, 0x63, 0xa5, 0xe7, 0xab, 0x7c,
3772 0x64, 0x82, 0x85, 0x6f, 0x7c, 0x7e, 0x6d, 0x85,
3773 0x96, 0x77, 0x7c, 0x8d, 0x77, 0x65, 0x79, 0x91,
3774 0x9e, 0x8b, 0x82, 0x63, 0x58, 0x41, 0x10, 0x18,
3775 0x90, 0xd0, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf9,
3776 0xe0, 0xb2, 0x71, 0x41, 0x33, 0x40, 0x57, 0x67,
3777 0x4c, 0x3d, 0x34, 0x50, 0x69, 0x71, 0x21, 0x00,
3778 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3779 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3780 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3781 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3782 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3783 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3784 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3785 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3786 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3787 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3788 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3789 0xea, 0xe6, 0xe4, 0xe7, 0xe9, 0xe4, 0xd6, 0xcb,
3790 0xd0, 0xd1, 0xb4, 0xb2, 0xde, 0xdd, 0xe3, 0xe5,
3791 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7,
3792 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3793 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3794 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3795 0xe2, 0xe5, 0xe7, 0xe6, 0xe1, 0xde, 0xdf, 0xe0,
3796 0xda, 0xbf, 0xa4, 0xcf, 0x94, 0x8a, 0x7c, 0x8b,
3797 0xc7, 0xbf, 0xc3, 0xde, 0xd2, 0xda, 0xe1, 0xd4,
3798 0xdc, 0xdd, 0xdf, 0xe0, 0xe1, 0xe0, 0xdf, 0xde,
3799 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3800 0xde, 0xde, 0xde, 0xdd, 0xdc, 0xdc, 0xdb, 0xdb,
3801 0xda, 0xda, 0xda, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
3802 0xda, 0xd1, 0xed, 0xd4, 0x6c, 0x54, 0x87, 0x87,
3803 0x9a, 0x5f, 0x67, 0x7d, 0x71, 0x6b, 0x69, 0x8a,
3804 0x9e, 0x90, 0x7d, 0x6f, 0x6b, 0x6d, 0x70, 0x71,
3805 0x6c, 0x72, 0x7a, 0x7a, 0x73, 0x68, 0x61, 0x5e,
3806 0x68, 0x6b, 0x6a, 0x61, 0x59, 0x5b, 0x66, 0x6f,
3807 0x6e, 0x6b, 0x70, 0x7c, 0x7f, 0x74, 0x67, 0x62,
3808 0x6d, 0x71, 0x6f, 0x69, 0x66, 0x66, 0x61, 0x59,
3809 0x4b, 0x4d, 0x4f, 0x54, 0x54, 0x48, 0x4d, 0x65,
3810 0x76, 0x9b, 0x89, 0x64, 0x6f, 0x79, 0x63, 0x52,
3811 0x57, 0x76, 0x59, 0x32, 0x65, 0x76, 0x70, 0x60,
3812 0x7d, 0x80, 0x80, 0x7d, 0x7d, 0x7a, 0x6c, 0x5c,
3813 0x7f, 0x7c, 0x87, 0x78, 0x72, 0x78, 0x69, 0x6d,
3814 0x71, 0x80, 0x87, 0x7e, 0x74, 0x73, 0x74, 0x73,
3815 0x7b, 0x67, 0x6a, 0x77, 0x66, 0xa8, 0xf3, 0xaf,
3816 0x6a, 0x63, 0x6b, 0x6b, 0x72, 0x90, 0x8c, 0x67,
3817 0x68, 0x69, 0x60, 0x6a, 0x91, 0xa3, 0x7c, 0x4c,
3818 0x31, 0x30, 0x1b, 0x27, 0x94, 0xee, 0xf5, 0xff,
3819 0xf5, 0xff, 0xff, 0xff, 0xd7, 0x91, 0x57, 0x3c,
3820 0x31, 0x29, 0x25, 0x2e, 0x41, 0x50, 0x54, 0x51,
3821 0x3f, 0x64, 0x5e, 0x48, 0x48, 0x5e, 0x22, 0x06,
3822 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3823 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3824 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3825 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3826 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3827 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3828 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3829 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3830 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3831 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3832 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3833 0xed, 0xe8, 0xe4, 0xe6, 0xea, 0xe8, 0xdf, 0xd7,
3834 0xd7, 0xd7, 0xaf, 0xa5, 0xda, 0xe3, 0xeb, 0xeb,
3835 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3836 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3837 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3838 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3839 0xe7, 0xe5, 0xe4, 0xe5, 0xe7, 0xe6, 0xe0, 0xdc,
3840 0xde, 0xd5, 0xae, 0xc5, 0x97, 0xbe, 0xba, 0x8e,
3841 0xbb, 0xc0, 0xbc, 0xc9, 0xc0, 0xd1, 0xe0, 0xdd,
3842 0xdb, 0xdd, 0xdf, 0xe1, 0xe1, 0xe1, 0xe0, 0xdf,
3843 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
3844 0xdf, 0xdf, 0xde, 0xde, 0xdd, 0xdc, 0xdc, 0xdc,
3845 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3846 0xd2, 0xe9, 0xa8, 0x65, 0x74, 0x88, 0x79, 0x69,
3847 0x77, 0x51, 0x69, 0x8f, 0x90, 0x7f, 0x76, 0x6a,
3848 0x74, 0x7b, 0x71, 0x58, 0x53, 0x6d, 0x8f, 0xa0,
3849 0x87, 0x7f, 0x7e, 0x82, 0x78, 0x66, 0x62, 0x6c,
3850 0x68, 0x6b, 0x6e, 0x6b, 0x64, 0x62, 0x6a, 0x75,
3851 0x75, 0x6c, 0x68, 0x6d, 0x6d, 0x66, 0x60, 0x60,
3852 0x6b, 0x70, 0x6e, 0x66, 0x5f, 0x5d, 0x59, 0x51,
3853 0x53, 0x4c, 0x44, 0x44, 0x45, 0x3a, 0x3c, 0x51,
3854 0x7c, 0x5d, 0x53, 0x66, 0x6c, 0x5b, 0x55, 0x5f,
3855 0x51, 0x60, 0x4e, 0x35, 0x64, 0x83, 0x92, 0x80,
3856 0x6e, 0x70, 0x6f, 0x6e, 0x77, 0x82, 0x82, 0x7a,
3857 0x8c, 0x73, 0x69, 0x59, 0x69, 0x89, 0x89, 0x90,
3858 0x82, 0x75, 0x63, 0x5c, 0x6b, 0x82, 0x88, 0x81,
3859 0x7a, 0x93, 0x6c, 0x73, 0x61, 0x5c, 0xb7, 0xc7,
3860 0x8e, 0x69, 0x67, 0x7e, 0x72, 0x66, 0x83, 0x9c,
3861 0x73, 0x79, 0x92, 0x9c, 0x6f, 0x34, 0x36, 0x60,
3862 0xb6, 0xe3, 0xfc, 0xfe, 0xf1, 0xfb, 0xff, 0xe6,
3863 0xaf, 0x73, 0x43, 0x3b, 0x34, 0x1f, 0x1a, 0x28,
3864 0x31, 0x30, 0x31, 0x36, 0x41, 0x4f, 0x5c, 0x63,
3865 0x47, 0x3f, 0x27, 0x31, 0x4c, 0x5c, 0x17, 0x02,
3866 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3867 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3868 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3869 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3870 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3871 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3872 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3873 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3874 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3875 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3876 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3877 0xef, 0xea, 0xe6, 0xe6, 0xe8, 0xe8, 0xe4, 0xe0,
3878 0xdf, 0xc6, 0x9f, 0xa1, 0xdc, 0xe2, 0xe6, 0xf1,
3879 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xea, 0xea, 0xea,
3880 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3881 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3882 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3883 0xe9, 0xe5, 0xe3, 0xe6, 0xeb, 0xea, 0xe2, 0xd9,
3884 0xcc, 0xc9, 0xba, 0xcd, 0x9e, 0xb0, 0xc1, 0x9c,
3885 0xbc, 0xcb, 0xc8, 0xcb, 0xba, 0xca, 0xe0, 0xe4,
3886 0xda, 0xdc, 0xde, 0xe0, 0xe1, 0xe1, 0xe0, 0xe0,
3887 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3888 0xdf, 0xdf, 0xdf, 0xde, 0xde, 0xdd, 0xdd, 0xdc,
3889 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdd, 0xdd, 0xdd,
3890 0xec, 0xd7, 0x73, 0x5d, 0x7a, 0x85, 0x96, 0x75,
3891 0x8a, 0x60, 0x6c, 0x76, 0x72, 0x6e, 0x82, 0x78,
3892 0x79, 0x83, 0x7f, 0x70, 0x76, 0x92, 0xa2, 0x9f,
3893 0x80, 0x72, 0x6f, 0x74, 0x69, 0x55, 0x54, 0x64,
3894 0x6b, 0x6b, 0x6e, 0x6e, 0x68, 0x62, 0x6a, 0x77,
3895 0x6d, 0x63, 0x5e, 0x64, 0x67, 0x65, 0x65, 0x68,
3896 0x6b, 0x72, 0x73, 0x6c, 0x66, 0x65, 0x63, 0x5e,
3897 0x5f, 0x5e, 0x55, 0x4a, 0x3e, 0x38, 0x53, 0x7e,
3898 0x80, 0x68, 0x74, 0x78, 0x64, 0x74, 0x7b, 0x50,
3899 0x5a, 0x50, 0x5d, 0x5f, 0x76, 0x70, 0x69, 0x5b,
3900 0x83, 0x8a, 0x88, 0x7b, 0x71, 0x70, 0x71, 0x70,
3901 0x54, 0x82, 0x8b, 0x83, 0x6d, 0x63, 0x70, 0x64,
3902 0x5d, 0x74, 0x88, 0x8a, 0x82, 0x79, 0x6b, 0x5e,
3903 0x61, 0x80, 0x60, 0x64, 0x7f, 0x5b, 0x6c, 0xc1,
3904 0xe5, 0xa9, 0x52, 0x55, 0x7d, 0x6c, 0x64, 0x7c,
3905 0x86, 0x70, 0x73, 0x72, 0x7d, 0xca, 0xff, 0xf4,
3906 0xff, 0xfd, 0xff, 0xe6, 0x89, 0x76, 0x8c, 0x39,
3907 0x17, 0x11, 0x18, 0x28, 0x2a, 0x24, 0x33, 0x4d,
3908 0x58, 0x64, 0x70, 0x6e, 0x5f, 0x4d, 0x43, 0x40,
3909 0x5a, 0x52, 0x4d, 0x60, 0x62, 0x5e, 0x1e, 0x10,
3910 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3911 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3912 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3913 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3914 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3915 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3916 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3917 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3918 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3919 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3920 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3921 0xed, 0xeb, 0xe9, 0xe7, 0xe5, 0xe4, 0xe1, 0xe0,
3922 0xd8, 0xd2, 0xb9, 0x9d, 0xc8, 0xe5, 0xe3, 0xdc,
3923 0xe7, 0xe8, 0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xeb,
3924 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3925 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3926 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
3927 0xe8, 0xe6, 0xe6, 0xe9, 0xec, 0xe9, 0xe2, 0xdb,
3928 0xcf, 0xce, 0xcd, 0xc1, 0xa0, 0xa7, 0xba, 0x7e,
3929 0xa9, 0xb3, 0xc4, 0xde, 0xcd, 0xd9, 0xe8, 0xdf,
3930 0xd8, 0xda, 0xdc, 0xdf, 0xe0, 0xe0, 0xe0, 0xdf,
3931 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3932 0xe0, 0xe0, 0xdf, 0xdf, 0xde, 0xdd, 0xdd, 0xdd,
3933 0xdb, 0xdb, 0xdc, 0xdc, 0xdd, 0xde, 0xde, 0xdf,
3934 0xb7, 0x5c, 0x77, 0x7f, 0x63, 0x71, 0x6e, 0x77,
3935 0x84, 0x4b, 0x6c, 0x6a, 0x6c, 0x79, 0x8f, 0x94,
3936 0x7e, 0x7a, 0x6d, 0x60, 0x64, 0x72, 0x77, 0x71,
3937 0x6e, 0x6b, 0x6e, 0x74, 0x70, 0x67, 0x69, 0x73,
3938 0x6e, 0x69, 0x67, 0x66, 0x5e, 0x59, 0x65, 0x77,
3939 0x7c, 0x73, 0x71, 0x75, 0x73, 0x68, 0x5e, 0x5b,
3940 0x62, 0x6b, 0x6e, 0x66, 0x60, 0x60, 0x60, 0x5d,
3941 0x49, 0x53, 0x57, 0x52, 0x43, 0x35, 0x48, 0x70,
3942 0x89, 0x6d, 0x73, 0x77, 0x5a, 0x56, 0x63, 0x58,
3943 0x54, 0x50, 0x66, 0x51, 0x6a, 0x83, 0x84, 0x7f,
3944 0x74, 0x78, 0x73, 0x69, 0x69, 0x79, 0x8c, 0x95,
3945 0x80, 0x78, 0x65, 0x6d, 0x63, 0x52, 0x72, 0x8a,
3946 0x8a, 0x8b, 0x7e, 0x66, 0x5b, 0x68, 0x7d, 0x8a,
3947 0x85, 0x71, 0x70, 0x76, 0x87, 0x69, 0x41, 0x6f,
3948 0xd7, 0xcb, 0x8d, 0x5f, 0x56, 0x6f, 0x87, 0x67,
3949 0x7d, 0x87, 0x9b, 0x85, 0x71, 0xb2, 0xdf, 0xb4,
3950 0x69, 0x39, 0x10, 0x1c, 0x1b, 0x01, 0x39, 0xa4,
3951 0x58, 0x3e, 0x30, 0x42, 0x5c, 0x68, 0x6a, 0x6c,
3952 0x6f, 0x63, 0x57, 0x58, 0x62, 0x67, 0x61, 0x59,
3953 0x61, 0x51, 0x49, 0x50, 0x50, 0x6a, 0x31, 0x03,
3954 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1,
3955 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3956 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3957 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
3958 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3959 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
3960 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3961 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3962 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3963 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3964 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
3965 0xeb, 0xec, 0xeb, 0xe8, 0xe3, 0xdf, 0xdc, 0xdb,
3966 0xd0, 0xd6, 0xd2, 0xad, 0xc7, 0xe5, 0xe8, 0xe6,
3967 0xe7, 0xe8, 0xe8, 0xe9, 0xea, 0xeb, 0xeb, 0xec,
3968 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3969 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
3970 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
3971 0xe5, 0xe7, 0xea, 0xeb, 0xeb, 0xe7, 0xe2, 0xde,
3972 0xd4, 0xcc, 0xdf, 0xd1, 0xb4, 0xa0, 0xc2, 0xa0,
3973 0xb3, 0x9f, 0xab, 0xd1, 0xc2, 0xd5, 0xeb, 0xd9,
3974 0xd7, 0xd9, 0xdb, 0xde, 0xdf, 0xe0, 0xdf, 0xdf,
3975 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3976 0xe0, 0xe0, 0xdf, 0xdf, 0xde, 0xde, 0xdd, 0xdd,
3977 0xdb, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xdf, 0xdf,
3978 0x70, 0x5c, 0x68, 0x85, 0x8f, 0x7f, 0x70, 0x78,
3979 0xab, 0x55, 0x84, 0x80, 0x8a, 0x8f, 0x73, 0x65,
3980 0x77, 0x74, 0x70, 0x6a, 0x64, 0x63, 0x6c, 0x76,
3981 0x6d, 0x75, 0x79, 0x76, 0x6f, 0x6a, 0x66, 0x63,
3982 0x76, 0x6d, 0x66, 0x62, 0x5a, 0x56, 0x66, 0x7c,
3983 0x71, 0x68, 0x65, 0x6a, 0x6a, 0x61, 0x59, 0x58,
3984 0x66, 0x6f, 0x72, 0x69, 0x61, 0x60, 0x5f, 0x5c,
3985 0x69, 0x5d, 0x50, 0x50, 0x53, 0x45, 0x3f, 0x4c,
3986 0x72, 0x77, 0x7c, 0x84, 0x7b, 0x59, 0x4f, 0x6b,
3987 0x60, 0x45, 0x58, 0x48, 0x5f, 0x66, 0x61, 0x81,
3988 0x74, 0x7b, 0x7e, 0x7e, 0x7e, 0x7a, 0x69, 0x56,
3989 0x6d, 0x73, 0x92, 0x94, 0x8a, 0x7f, 0x69, 0x71,
3990 0x6e, 0x75, 0x7b, 0x80, 0x89, 0x8e, 0x81, 0x6f,
3991 0x7c, 0x55, 0x66, 0x7f, 0x92, 0x8b, 0x62, 0x61,
3992 0xa2, 0xfd, 0xcd, 0x74, 0x67, 0x7a, 0x8b, 0x82,
3993 0x87, 0x70, 0x73, 0x80, 0x77, 0x6d, 0x69, 0x60,
3994 0x60, 0x55, 0x4a, 0x32, 0x37, 0x39, 0x3b, 0x77,
3995 0x74, 0x67, 0x6b, 0x7c, 0x7b, 0x65, 0x59, 0x5e,
3996 0x78, 0x8b, 0x9d, 0x9c, 0x84, 0x66, 0x51, 0x48,
3997 0x38, 0x3f, 0x5e, 0x6e, 0x4f, 0x55, 0x28, 0x04,
3998 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
3999 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4000 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4001 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4002 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4003 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4004 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4005 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4006 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4007 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4008 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4009 0xe9, 0xe9, 0xea, 0xea, 0xe9, 0xe6, 0xe4, 0xe2,
4010 0xe4, 0xdd, 0xda, 0x9a, 0xa0, 0xc9, 0xec, 0xe3,
4011 0xe2, 0xe5, 0xe8, 0xeb, 0xed, 0xec, 0xeb, 0xea,
4012 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4013 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4014 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4015 0xed, 0xe7, 0xe9, 0xec, 0xe7, 0xe4, 0xe2, 0xdc,
4016 0xe3, 0xa5, 0xb2, 0xb9, 0x8a, 0x83, 0xb6, 0xa5,
4017 0xbf, 0xa8, 0xad, 0xb6, 0xbd, 0xdc, 0xe0, 0xdb,
4018 0xd7, 0xe2, 0xe2, 0xe3, 0xed, 0xe8, 0xdf, 0xe4,
4019 0xdc, 0xdd, 0xe0, 0xe2, 0xe2, 0xe2, 0xe1, 0xe1,
4020 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
4021 0xdf, 0xe1, 0xd8, 0xdf, 0xe1, 0xea, 0xc3, 0x41,
4022 0x46, 0x79, 0x8d, 0x7c, 0x71, 0x94, 0x8d, 0x95,
4023 0x88, 0x57, 0x82, 0x8d, 0x6c, 0x7a, 0x71, 0x4c,
4024 0x6d, 0x6c, 0x6a, 0x66, 0x67, 0x70, 0x7d, 0x86,
4025 0x68, 0x6f, 0x74, 0x6e, 0x65, 0x62, 0x69, 0x72,
4026 0x7a, 0x6f, 0x67, 0x6d, 0x7e, 0x89, 0x89, 0x84,
4027 0x7a, 0x72, 0x71, 0x77, 0x77, 0x69, 0x5b, 0x54,
4028 0x64, 0x68, 0x6a, 0x68, 0x65, 0x5f, 0x54, 0x4a,
4029 0x53, 0x56, 0x56, 0x4b, 0x3b, 0x3b, 0x58, 0x78,
4030 0x83, 0x79, 0x69, 0x6e, 0x7a, 0x67, 0x55, 0x5f,
4031 0x5c, 0x58, 0x64, 0x50, 0x59, 0x7f, 0x7f, 0x8a,
4032 0x6f, 0x6c, 0x75, 0x75, 0x70, 0x82, 0x8d, 0x7a,
4033 0x93, 0x7c, 0x7a, 0x68, 0x6a, 0x7a, 0x72, 0x7d,
4034 0x82, 0x7c, 0x77, 0x65, 0x68, 0x63, 0x82, 0x7f,
4035 0x69, 0x65, 0x81, 0x4b, 0x31, 0x10, 0x16, 0x2f,
4036 0x47, 0xa0, 0xef, 0xac, 0x5a, 0x65, 0x6d, 0x67,
4037 0x8d, 0x8a, 0x8c, 0x7b, 0x7e, 0x7e, 0x6e, 0x90,
4038 0x84, 0x8e, 0x9c, 0x88, 0x6e, 0x67, 0x5a, 0x4f,
4039 0x59, 0x63, 0x5a, 0x49, 0x76, 0xa5, 0xaa, 0x8d,
4040 0x65, 0x3b, 0x23, 0x33, 0x43, 0x3d, 0x36, 0x3b,
4041 0x4e, 0x4f, 0x4e, 0x3e, 0x47, 0x45, 0x1a, 0x0b,
4042 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4043 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4044 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4045 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4046 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4047 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4048 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4049 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4050 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4051 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4052 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4053 0xe9, 0xea, 0xea, 0xea, 0xe9, 0xe7, 0xe4, 0xe3,
4054 0xda, 0xdc, 0xd3, 0x80, 0x8f, 0xd1, 0xdd, 0xed,
4055 0xe3, 0xe5, 0xe8, 0xeb, 0xec, 0xec, 0xeb, 0xea,
4056 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4057 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4058 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4059 0xec, 0xe7, 0xe9, 0xeb, 0xe7, 0xe7, 0xe1, 0xd5,
4060 0xea, 0xcc, 0xc0, 0xc7, 0x96, 0x8f, 0xdb, 0xa7,
4061 0xc0, 0xc1, 0x96, 0xa9, 0xda, 0xda, 0xe7, 0xe3,
4062 0xdf, 0xe1, 0xde, 0xdb, 0xde, 0xde, 0xdc, 0xe0,
4063 0xdf, 0xe0, 0xe1, 0xe3, 0xe3, 0xe3, 0xe1, 0xe0,
4064 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
4065 0xd8, 0xdc, 0xd4, 0xd9, 0xf3, 0xcc, 0x78, 0x64,
4066 0x7d, 0x91, 0x91, 0x85, 0x77, 0x85, 0x73, 0x7f,
4067 0x71, 0x49, 0x68, 0x85, 0x8f, 0x97, 0x88, 0x8f,
4068 0x85, 0x7b, 0x6b, 0x60, 0x66, 0x74, 0x78, 0x73,
4069 0x78, 0x79, 0x78, 0x74, 0x6f, 0x6d, 0x6e, 0x70,
4070 0x5f, 0x64, 0x6d, 0x76, 0x79, 0x73, 0x65, 0x59,
4071 0x76, 0x73, 0x75, 0x77, 0x6f, 0x5e, 0x53, 0x53,
4072 0x5a, 0x59, 0x57, 0x53, 0x4d, 0x4a, 0x4f, 0x56,
4073 0x55, 0x4d, 0x47, 0x43, 0x40, 0x43, 0x52, 0x63,
4074 0x77, 0x80, 0x81, 0x7d, 0x70, 0x50, 0x40, 0x50,
4075 0x69, 0x58, 0x54, 0x37, 0x43, 0x70, 0x75, 0x80,
4076 0x7d, 0x7e, 0x84, 0x85, 0x7f, 0x7e, 0x79, 0x6c,
4077 0x72, 0x70, 0x81, 0x7b, 0x7c, 0x7f, 0x65, 0x5e,
4078 0x6b, 0x71, 0x8f, 0x70, 0x78, 0x6c, 0x4d, 0x4f,
4079 0x23, 0x4d, 0xa1, 0xb5, 0xf1, 0xff, 0xf4, 0xc2,
4080 0x88, 0x59, 0x9f, 0xd6, 0xa5, 0x78, 0x77, 0x8f,
4081 0x65, 0x7c, 0x7d, 0x65, 0x73, 0x8c, 0x87, 0x87,
4082 0x96, 0x83, 0x74, 0x6a, 0x6e, 0x79, 0x72, 0x66,
4083 0x69, 0x6e, 0x78, 0x91, 0x5c, 0x18, 0x1c, 0x3d,
4084 0x23, 0x2c, 0x45, 0x5d, 0x5a, 0x48, 0x46, 0x54,
4085 0x67, 0x5c, 0x52, 0x48, 0x5e, 0x5d, 0x22, 0x02,
4086 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4087 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4088 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4089 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4090 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4091 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4092 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4093 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4094 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4095 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4096 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4097 0xea, 0xea, 0xeb, 0xeb, 0xe9, 0xe7, 0xe5, 0xe3,
4098 0xe1, 0xc7, 0xd7, 0x94, 0x84, 0xe8, 0xe5, 0xd9,
4099 0xe5, 0xe6, 0xe8, 0xea, 0xeb, 0xeb, 0xeb, 0xea,
4100 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4101 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4102 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4103 0xea, 0xe8, 0xea, 0xe9, 0xe8, 0xeb, 0xe0, 0xca,
4104 0xe5, 0xd4, 0xbf, 0xdd, 0xb5, 0x7b, 0xbe, 0xae,
4105 0xaf, 0xb1, 0x81, 0x9c, 0xe5, 0xca, 0xd5, 0xd9,
4106 0xd9, 0xd7, 0xdb, 0xdd, 0xda, 0xd9, 0xda, 0xd5,
4107 0xe2, 0xe3, 0xe4, 0xe5, 0xe4, 0xe3, 0xe1, 0xe0,
4108 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
4109 0xe8, 0xd5, 0xcf, 0xfd, 0xc7, 0x59, 0x63, 0x90,
4110 0x8b, 0x79, 0x6c, 0x7d, 0x8b, 0x95, 0x72, 0x77,
4111 0x70, 0x77, 0x9c, 0x97, 0x89, 0x7e, 0x61, 0x6c,
4112 0x74, 0x80, 0x84, 0x7a, 0x6e, 0x6c, 0x6d, 0x6c,
4113 0x66, 0x64, 0x63, 0x65, 0x69, 0x6c, 0x6b, 0x69,
4114 0x5b, 0x63, 0x6c, 0x6f, 0x6a, 0x62, 0x5c, 0x59,
4115 0x66, 0x67, 0x6c, 0x6e, 0x64, 0x58, 0x57, 0x5f,
4116 0x63, 0x5b, 0x5e, 0x6c, 0x71, 0x64, 0x56, 0x52,
4117 0x58, 0x49, 0x3c, 0x3a, 0x3f, 0x4c, 0x62, 0x75,
4118 0x8b, 0x7d, 0x69, 0x67, 0x70, 0x66, 0x52, 0x4b,
4119 0x5a, 0x51, 0x5c, 0x4e, 0x61, 0x87, 0x7c, 0x7a,
4120 0x7f, 0x77, 0x6a, 0x69, 0x74, 0x78, 0x7b, 0x85,
4121 0x7a, 0x7c, 0x7f, 0x68, 0x61, 0x72, 0x7a, 0x85,
4122 0x7a, 0x7b, 0x57, 0x53, 0x60, 0x5f, 0xb4, 0xc7,
4123 0xdc, 0xfc, 0xf2, 0xd0, 0xfb, 0xe3, 0xc3, 0xeb,
4124 0xff, 0x89, 0x7e, 0xce, 0xdb, 0x88, 0x3c, 0x3b,
4125 0x57, 0x54, 0x5a, 0x84, 0x92, 0x70, 0x68, 0x7b,
4126 0x5c, 0x84, 0x97, 0x87, 0x75, 0x74, 0x74, 0x6d,
4127 0x94, 0xb2, 0xa7, 0xbe, 0x60, 0x2d, 0x4c, 0x5f,
4128 0x68, 0x60, 0x58, 0x51, 0x47, 0x3c, 0x36, 0x37,
4129 0x4f, 0x4b, 0x4b, 0x49, 0x61, 0x60, 0x24, 0x04,
4130 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4131 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4132 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4133 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4134 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4135 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4136 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4137 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4138 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4139 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4140 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4141 0xea, 0xeb, 0xeb, 0xeb, 0xea, 0xe8, 0xe5, 0xe4,
4142 0xef, 0xd8, 0xdd, 0xa7, 0x8b, 0xef, 0xe9, 0xe9,
4143 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xea, 0xea, 0xea,
4144 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4145 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4146 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4147 0xe9, 0xe9, 0xea, 0xe8, 0xe9, 0xee, 0xe0, 0xc4,
4148 0xe9, 0xe1, 0xbb, 0xc7, 0xbe, 0x78, 0x98, 0xb9,
4149 0x81, 0x8e, 0xa3, 0xa4, 0xda, 0xd7, 0xe1, 0xe6,
4150 0xca, 0xc6, 0xd3, 0xdd, 0xda, 0xe0, 0xe6, 0xdf,
4151 0xe4, 0xe5, 0xe6, 0xe6, 0xe5, 0xe4, 0xe2, 0xe0,
4152 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
4153 0xdf, 0xdd, 0xf6, 0xcb, 0x71, 0x64, 0x80, 0x7e,
4154 0x90, 0x87, 0x80, 0x87, 0x82, 0x86, 0x7a, 0x9b,
4155 0x7a, 0x6d, 0x7e, 0x6c, 0x67, 0x80, 0x78, 0x79,
4156 0x93, 0x81, 0x6d, 0x64, 0x66, 0x6e, 0x7b, 0x86,
4157 0x7c, 0x7c, 0x7c, 0x7a, 0x78, 0x74, 0x71, 0x6f,
4158 0x79, 0x79, 0x78, 0x74, 0x6e, 0x6b, 0x6b, 0x6d,
4159 0x7d, 0x76, 0x70, 0x6b, 0x61, 0x56, 0x58, 0x60,
4160 0x6b, 0x5f, 0x5a, 0x5a, 0x4f, 0x42, 0x4c, 0x62,
4161 0x4e, 0x4e, 0x4f, 0x4d, 0x45, 0x45, 0x58, 0x6e,
4162 0x83, 0x85, 0x81, 0x7a, 0x74, 0x67, 0x53, 0x46,
4163 0x52, 0x49, 0x51, 0x3b, 0x46, 0x6b, 0x65, 0x6a,
4164 0x74, 0x81, 0x83, 0x87, 0x89, 0x74, 0x6b, 0x80,
4165 0x66, 0x7b, 0x8a, 0x7f, 0x70, 0x64, 0x4d, 0x3a,
4166 0x31, 0x50, 0x9e, 0xa5, 0xed, 0xff, 0xdd, 0xe5,
4167 0xf4, 0xa7, 0x7b, 0x65, 0x40, 0x11, 0x12, 0x2c,
4168 0x5a, 0x70, 0x58, 0x5b, 0xab, 0xd3, 0xcd, 0xe8,
4169 0x9c, 0x8f, 0x59, 0x40, 0x39, 0x42, 0x72, 0x86,
4170 0x97, 0x94, 0x7a, 0x7e, 0x9a, 0xad, 0xb7, 0xb2,
4171 0xb9, 0xc2, 0xa7, 0xf4, 0x90, 0x45, 0x57, 0x5a,
4172 0x4c, 0x3f, 0x32, 0x33, 0x43, 0x4c, 0x42, 0x32,
4173 0x35, 0x49, 0x5e, 0x57, 0x59, 0x4c, 0x1c, 0x0d,
4174 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4175 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4176 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4177 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4178 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4179 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4180 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4181 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4182 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4183 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4184 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4185 0xeb, 0xeb, 0xec, 0xec, 0xea, 0xe8, 0xe6, 0xe4,
4186 0xe7, 0xd7, 0xe1, 0xcf, 0x9c, 0xe4, 0xef, 0xed,
4187 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xea, 0xeb,
4188 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4189 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4190 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4191 0xe9, 0xe9, 0xeb, 0xe8, 0xe9, 0xef, 0xe2, 0xc5,
4192 0xc1, 0xe4, 0xc1, 0xb0, 0xc0, 0x95, 0x95, 0xa3,
4193 0xab, 0xb3, 0xd4, 0xa7, 0xc2, 0xdf, 0xe2, 0xd1,
4194 0xda, 0xd1, 0xd6, 0xd9, 0xd4, 0xdc, 0xe7, 0xe3,
4195 0xe3, 0xe4, 0xe5, 0xe6, 0xe5, 0xe4, 0xe2, 0xe1,
4196 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
4197 0xdf, 0xff, 0xd6, 0x62, 0x4a, 0x8b, 0x9b, 0x86,
4198 0x71, 0x81, 0x8e, 0x96, 0x87, 0x80, 0x65, 0x79,
4199 0x63, 0x55, 0x74, 0x81, 0x89, 0x8c, 0x6f, 0x73,
4200 0x7f, 0x71, 0x72, 0x82, 0x84, 0x74, 0x6e, 0x75,
4201 0x63, 0x6d, 0x76, 0x78, 0x73, 0x71, 0x75, 0x7b,
4202 0x78, 0x7b, 0x81, 0x88, 0x8d, 0x8d, 0x87, 0x82,
4203 0x7f, 0x70, 0x65, 0x65, 0x68, 0x69, 0x6e, 0x75,
4204 0x73, 0x5c, 0x50, 0x58, 0x5c, 0x53, 0x50, 0x56,
4205 0x48, 0x48, 0x47, 0x40, 0x37, 0x40, 0x63, 0x87,
4206 0x79, 0x7a, 0x78, 0x75, 0x78, 0x79, 0x65, 0x48,
4207 0x38, 0x3f, 0x57, 0x48, 0x50, 0x73, 0x73, 0x7f,
4208 0x73, 0x71, 0x64, 0x66, 0x75, 0x71, 0x73, 0x8d,
4209 0x85, 0x5f, 0x2a, 0x1c, 0x47, 0x8f, 0xcc, 0xe2,
4210 0xf7, 0xff, 0xac, 0xb9, 0xf3, 0x8f, 0x53, 0x3c,
4211 0x37, 0x3e, 0x28, 0x3b, 0x54, 0x36, 0x14, 0x27,
4212 0x4b, 0x3a, 0x27, 0x5b, 0xb1, 0xc1, 0xa7, 0xa0,
4213 0xad, 0xcd, 0xe2, 0xf8, 0xd5, 0x8d, 0x69, 0x45,
4214 0x23, 0x3a, 0x53, 0x9e, 0xcd, 0xb7, 0xb0, 0xb6,
4215 0x9c, 0xa2, 0x94, 0xff, 0xb4, 0x4d, 0x5a, 0x63,
4216 0x59, 0x5c, 0x58, 0x4c, 0x40, 0x39, 0x35, 0x31,
4217 0x4d, 0x6a, 0x84, 0x72, 0x60, 0x46, 0x17, 0x10,
4218 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4219 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4220 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4221 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4222 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4223 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4224 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4225 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4226 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4227 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4228 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4229 0xeb, 0xec, 0xec, 0xec, 0xeb, 0xe9, 0xe6, 0xe5,
4230 0xeb, 0xc3, 0xba, 0xba, 0x86, 0xc4, 0xe9, 0xe1,
4231 0xea, 0xe9, 0xe8, 0xe7, 0xe7, 0xe8, 0xea, 0xeb,
4232 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4233 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4234 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4235 0xe9, 0xe8, 0xea, 0xea, 0xea, 0xee, 0xe4, 0xcf,
4236 0xcd, 0xeb, 0xc9, 0xb3, 0xb2, 0x7b, 0x88, 0xae,
4237 0x81, 0x8d, 0xb1, 0xad, 0xca, 0xd6, 0xdd, 0xdc,
4238 0xe3, 0xdf, 0xde, 0xdd, 0xd9, 0xdb, 0xdf, 0xdd,
4239 0xdf, 0xe1, 0xe3, 0xe4, 0xe5, 0xe4, 0xe3, 0xe3,
4240 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
4241 0xf3, 0xc8, 0x7f, 0x6d, 0x7b, 0x7e, 0x88, 0x87,
4242 0x92, 0x8c, 0x7c, 0x78, 0x79, 0x8f, 0x80, 0x91,
4243 0x74, 0x7e, 0x8c, 0x7a, 0x80, 0x82, 0x66, 0x7a,
4244 0x86, 0x7d, 0x7e, 0x81, 0x75, 0x63, 0x67, 0x79,
4245 0x69, 0x75, 0x7f, 0x7d, 0x71, 0x6a, 0x6c, 0x71,
4246 0x7a, 0x7c, 0x82, 0x8a, 0x90, 0x90, 0x8a, 0x85,
4247 0x81, 0x71, 0x64, 0x64, 0x66, 0x63, 0x61, 0x62,
4248 0x4e, 0x54, 0x64, 0x72, 0x6b, 0x58, 0x50, 0x54,
4249 0x40, 0x40, 0x40, 0x3e, 0x37, 0x38, 0x4b, 0x62,
4250 0x81, 0x87, 0x86, 0x72, 0x62, 0x65, 0x5b, 0x3e,
4251 0x42, 0x48, 0x5c, 0x43, 0x41, 0x60, 0x65, 0x76,
4252 0x75, 0x85, 0x90, 0x8d, 0x78, 0x4e, 0x2b, 0x22,
4253 0x59, 0xa1, 0xe8, 0xff, 0xff, 0xe1, 0xde, 0xdf,
4254 0xe3, 0x81, 0x5e, 0x34, 0x40, 0x2e, 0x13, 0x3b,
4255 0x26, 0x31, 0x50, 0x74, 0x3d, 0x2b, 0x2e, 0x17,
4256 0x41, 0x3e, 0x3e, 0x31, 0x36, 0x98, 0xd1, 0x80,
4257 0x1d, 0x3b, 0x60, 0x86, 0xa0, 0xc2, 0xe8, 0xe8,
4258 0xd5, 0xbb, 0x6d, 0x73, 0xa9, 0xb7, 0xba, 0xa7,
4259 0xae, 0xbf, 0xa6, 0xf3, 0xb0, 0x5d, 0x67, 0x59,
4260 0x70, 0x6a, 0x5d, 0x48, 0x33, 0x2d, 0x3e, 0x54,
4261 0x5a, 0x6d, 0x7e, 0x6f, 0x68, 0x53, 0x1f, 0x0f,
4262 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4263 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4264 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4265 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4266 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4267 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4268 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4269 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4270 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4271 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4272 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4273 0xec, 0xec, 0xed, 0xed, 0xeb, 0xe9, 0xe7, 0xe5,
4274 0xeb, 0xe4, 0xc4, 0xb8, 0xaf, 0xcb, 0xce, 0xe5,
4275 0xec, 0xea, 0xe8, 0xe7, 0xe6, 0xe8, 0xea, 0xeb,
4276 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4277 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4278 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4279 0xeb, 0xe7, 0xea, 0xed, 0xeb, 0xeb, 0xe7, 0xdb,
4280 0xc3, 0xce, 0xcc, 0xc4, 0xc7, 0x83, 0x7f, 0xd7,
4281 0xb2, 0x7f, 0x74, 0x9c, 0xca, 0xd0, 0xcc, 0xd1,
4282 0xd6, 0xdb, 0xdc, 0xdd, 0xe3, 0xe4, 0xe2, 0xe5,
4283 0xdb, 0xdd, 0xdf, 0xe2, 0xe4, 0xe5, 0xe4, 0xe4,
4284 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
4285 0xe1, 0x6c, 0x5f, 0x76, 0x86, 0x92, 0x7a, 0x82,
4286 0x85, 0x8a, 0x84, 0x7b, 0x6c, 0x76, 0x6f, 0x8e,
4287 0x62, 0x6b, 0x78, 0x61, 0x73, 0x98, 0x89, 0x8b,
4288 0x96, 0x89, 0x77, 0x6c, 0x6c, 0x6f, 0x6c, 0x66,
4289 0x5c, 0x65, 0x6f, 0x73, 0x70, 0x6d, 0x6d, 0x6f,
4290 0x87, 0x86, 0x82, 0x7a, 0x73, 0x71, 0x75, 0x7a,
4291 0x6f, 0x6c, 0x6f, 0x78, 0x79, 0x71, 0x6b, 0x6c,
4292 0x6d, 0x63, 0x59, 0x57, 0x5b, 0x60, 0x63, 0x66,
4293 0x59, 0x51, 0x49, 0x45, 0x44, 0x4d, 0x66, 0x7e,
4294 0x79, 0x74, 0x72, 0x70, 0x78, 0x88, 0x6a, 0x2b,
4295 0x30, 0x3e, 0x5e, 0x52, 0x53, 0x69, 0x5c, 0x60,
4296 0x8a, 0x5a, 0x36, 0x46, 0x86, 0xd2, 0xf9, 0xf7,
4297 0xf8, 0xff, 0xff, 0xff, 0xd6, 0x83, 0x4e, 0x2a,
4298 0x1f, 0x31, 0x44, 0x47, 0x4e, 0x66, 0x94, 0x53,
4299 0x20, 0x46, 0x3b, 0x65, 0x61, 0x42, 0x2d, 0x45,
4300 0x58, 0x51, 0x46, 0x2c, 0x18, 0x74, 0xe0, 0xc4,
4301 0x7c, 0x26, 0x18, 0x3e, 0x39, 0x1e, 0x2f, 0x66,
4302 0x8b, 0xd7, 0xd3, 0xcf, 0xc7, 0xa7, 0xb0, 0xaf,
4303 0xaf, 0xa6, 0x92, 0xdd, 0xb7, 0x43, 0x3a, 0x39,
4304 0x42, 0x35, 0x31, 0x38, 0x38, 0x33, 0x3f, 0x54,
4305 0x50, 0x58, 0x62, 0x5a, 0x62, 0x57, 0x22, 0x0c,
4306 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4307 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4308 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4309 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4310 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4311 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4312 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4313 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4314 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4315 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4316 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4317 0xec, 0xed, 0xed, 0xed, 0xec, 0xe9, 0xe7, 0xe5,
4318 0xed, 0xf4, 0xe3, 0xc4, 0xad, 0xba, 0xc0, 0xe9,
4319 0xed, 0xeb, 0xe8, 0xe6, 0xe6, 0xe7, 0xea, 0xeb,
4320 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4321 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4322 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4323 0xec, 0xe6, 0xea, 0xef, 0xeb, 0xe9, 0xe9, 0xe4,
4324 0xc8, 0xcc, 0xce, 0x9d, 0xb9, 0x9b, 0x68, 0xc8,
4325 0xb5, 0x98, 0xb1, 0xd3, 0xd1, 0xcd, 0xca, 0xdd,
4326 0xe2, 0xe6, 0xdc, 0xd6, 0xde, 0xdd, 0xdc, 0xe6,
4327 0xd8, 0xda, 0xdd, 0xe1, 0xe3, 0xe5, 0xe5, 0xe5,
4328 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
4329 0x68, 0x64, 0x6c, 0x7a, 0x8d, 0x94, 0x88, 0x82,
4330 0x7f, 0x82, 0x83, 0x88, 0x7d, 0x7e, 0x6c, 0x88,
4331 0x62, 0x5c, 0x88, 0x80, 0x62, 0x6c, 0x6b, 0x6e,
4332 0x79, 0x8a, 0x8a, 0x75, 0x6b, 0x71, 0x6c, 0x5b,
4333 0x5b, 0x5e, 0x63, 0x69, 0x6b, 0x68, 0x62, 0x5d,
4334 0x65, 0x6d, 0x72, 0x6e, 0x68, 0x6c, 0x7c, 0x8c,
4335 0x7c, 0x84, 0x94, 0x9f, 0x98, 0x86, 0x7b, 0x7b,
4336 0x6a, 0x68, 0x62, 0x59, 0x55, 0x58, 0x5d, 0x5e,
4337 0x53, 0x50, 0x4c, 0x48, 0x42, 0x45, 0x5b, 0x72,
4338 0x71, 0x7b, 0x82, 0x75, 0x6d, 0x7f, 0x75, 0x48,
4339 0x4f, 0x4e, 0x5d, 0x46, 0x49, 0x64, 0x5a, 0x5d,
4340 0x7b, 0x98, 0xcf, 0xf6, 0xff, 0xff, 0xf3, 0xcd,
4341 0xbe, 0x7c, 0x26, 0x18, 0x1e, 0x23, 0x49, 0x5b,
4342 0x2d, 0x3d, 0x54, 0x59, 0x8a, 0x7a, 0x4a, 0x2e,
4343 0x20, 0x48, 0x37, 0x61, 0x5f, 0x4f, 0x3e, 0x49,
4344 0x54, 0x53, 0x2a, 0x2f, 0x49, 0x5a, 0x95, 0xc3,
4345 0xc8, 0x5a, 0x33, 0x33, 0x28, 0x1f, 0x22, 0x48,
4346 0x3f, 0x2f, 0x03, 0x57, 0xbb, 0xbc, 0xc0, 0xbe,
4347 0xb4, 0xa5, 0x9c, 0xdc, 0xb9, 0x29, 0x1d, 0x34,
4348 0x42, 0x37, 0x3c, 0x4c, 0x47, 0x36, 0x3e, 0x58,
4349 0x55, 0x5b, 0x62, 0x55, 0x5a, 0x4f, 0x1b, 0x06,
4350 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4351 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4352 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4353 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4354 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4355 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4356 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4357 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4358 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4359 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4360 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4361 0xee, 0xee, 0xe9, 0xe6, 0xea, 0xef, 0xe9, 0xdd,
4362 0xd7, 0xf0, 0xeb, 0xc4, 0xb3, 0xb8, 0xba, 0xde,
4363 0xf4, 0xeb, 0xd9, 0xf5, 0xe8, 0xe8, 0xee, 0xed,
4364 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4365 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4366 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4367 0xeb, 0xec, 0xed, 0xeb, 0xe9, 0xe9, 0xec, 0xf0,
4368 0xcd, 0xbc, 0xe0, 0xba, 0x9c, 0x95, 0x90, 0xaa,
4369 0xad, 0xa6, 0xa7, 0xcb, 0xd2, 0xb8, 0xc5, 0xe2,
4370 0xd2, 0xc9, 0xd0, 0xd8, 0xd9, 0xe4, 0xe7, 0xd5,
4371 0xd9, 0xe8, 0xdd, 0xe0, 0xe6, 0xe2, 0xe6, 0xdd,
4372 0xe1, 0xdf, 0xe1, 0xe8, 0xd2, 0xf7, 0xe4, 0x67,
4373 0x64, 0x8e, 0x93, 0x90, 0x91, 0x83, 0x84, 0x93,
4374 0x9f, 0x8b, 0x69, 0x62, 0x7c, 0x86, 0x7a, 0x76,
4375 0x4a, 0x67, 0x7b, 0x84, 0x85, 0x75, 0x69, 0x6f,
4376 0x82, 0x82, 0x7b, 0x6d, 0x65, 0x69, 0x74, 0x7d,
4377 0x74, 0x6e, 0x6f, 0x76, 0x73, 0x65, 0x5d, 0x5f,
4378 0x60, 0x62, 0x63, 0x65, 0x6b, 0x7a, 0x8d, 0x9b,
4379 0x90, 0x76, 0x66, 0x6f, 0x7b, 0x77, 0x6a, 0x63,
4380 0x57, 0x58, 0x4d, 0x3e, 0x3f, 0x50, 0x5c, 0x5d,
4381 0x42, 0x47, 0x46, 0x3d, 0x3e, 0x53, 0x73, 0x8a,
4382 0x89, 0x64, 0x69, 0x60, 0x68, 0x7f, 0x61, 0x4c,
4383 0x54, 0x61, 0x55, 0x2b, 0x4b, 0x57, 0x55, 0xcd,
4384 0xff, 0xf3, 0xf6, 0xed, 0x84, 0x3b, 0x43, 0x1b,
4385 0x24, 0x31, 0x2e, 0x2f, 0x2e, 0x2f, 0x28, 0x48,
4386 0x62, 0x3e, 0x5f, 0x71, 0x5f, 0x5d, 0x4a, 0x32,
4387 0x48, 0x51, 0x5e, 0x6e, 0x6e, 0x52, 0x44, 0x55,
4388 0x58, 0x41, 0x2f, 0x52, 0x67, 0x30, 0x30, 0x8f,
4389 0xe3, 0xe3, 0x5c, 0x12, 0x22, 0x2b, 0x3c, 0x2a,
4390 0x15, 0x0c, 0x07, 0x39, 0xbe, 0xce, 0xba, 0xbc,
4391 0xab, 0xab, 0x9d, 0xe8, 0xff, 0x71, 0x4b, 0x62,
4392 0x4b, 0x38, 0x2e, 0x3a, 0x4a, 0x50, 0x52, 0x55,
4393 0x43, 0x5b, 0x59, 0x6d, 0x60, 0x47, 0x1f, 0x11,
4394 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4395 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4396 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4397 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4398 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4399 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4400 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4401 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4402 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4403 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4404 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4405 0xf0, 0xec, 0xe9, 0xe9, 0xe9, 0xe6, 0xe3, 0xe2,
4406 0xd8, 0xe7, 0xf4, 0xc2, 0x9b, 0xc0, 0xcb, 0xd1,
4407 0xd6, 0xea, 0xda, 0xe7, 0xe7, 0xed, 0xea, 0xea,
4408 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4409 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4410 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4411 0xeb, 0xec, 0xed, 0xeb, 0xe8, 0xe8, 0xec, 0xef,
4412 0xd6, 0xa2, 0xe0, 0xcf, 0x8a, 0x7b, 0x80, 0xab,
4413 0x9a, 0x94, 0x8e, 0xc6, 0xcc, 0xbb, 0xcb, 0xea,
4414 0xd2, 0xd4, 0xe2, 0xe7, 0xde, 0xdf, 0xe0, 0xd3,
4415 0xd3, 0xdc, 0xdd, 0xe5, 0xe7, 0xdc, 0xdd, 0xe5,
4416 0xdf, 0xe1, 0xe2, 0xe6, 0xfb, 0xce, 0x66, 0x5c,
4417 0x5f, 0x50, 0x46, 0x52, 0x47, 0x44, 0x50, 0x30,
4418 0x2b, 0x4c, 0x65, 0x74, 0x7f, 0x79, 0x76, 0x83,
4419 0x64, 0x72, 0x88, 0x87, 0x81, 0x96, 0x91, 0x62,
4420 0x6c, 0x7e, 0x85, 0x7a, 0x73, 0x74, 0x6c, 0x5c,
4421 0x61, 0x5f, 0x64, 0x6f, 0x71, 0x6a, 0x68, 0x6b,
4422 0x74, 0x79, 0x7b, 0x73, 0x69, 0x68, 0x74, 0x80,
4423 0x7b, 0x77, 0x79, 0x80, 0x7b, 0x6e, 0x69, 0x6d,
4424 0x5c, 0x61, 0x5f, 0x56, 0x54, 0x59, 0x58, 0x51,
4425 0x41, 0x43, 0x42, 0x3d, 0x3c, 0x48, 0x61, 0x76,
4426 0x8c, 0x7d, 0x8d, 0x77, 0x5d, 0x5e, 0x4b, 0x46,
4427 0x4a, 0x57, 0x48, 0x28, 0x48, 0x5a, 0x5f, 0xb4,
4428 0x8e, 0x4a, 0x13, 0x42, 0x56, 0x27, 0x28, 0x3f,
4429 0x41, 0x39, 0x51, 0x58, 0x3e, 0x48, 0x63, 0x85,
4430 0x90, 0x7d, 0x86, 0x86, 0x80, 0x69, 0x47, 0x51,
4431 0x65, 0x8d, 0x8d, 0x84, 0x8f, 0x79, 0x51, 0x4d,
4432 0x43, 0x37, 0x52, 0x66, 0x46, 0x2f, 0x35, 0x34,
4433 0x9a, 0xdc, 0xbd, 0x3e, 0x12, 0x3f, 0x3d, 0x17,
4434 0x1b, 0x16, 0x11, 0x3b, 0xb3, 0xb4, 0x92, 0x8a,
4435 0xa1, 0xbc, 0xaa, 0xca, 0xe3, 0x6d, 0x48, 0x44,
4436 0x39, 0x47, 0x4e, 0x41, 0x2e, 0x29, 0x37, 0x47,
4437 0x48, 0x51, 0x3d, 0x42, 0x3d, 0x37, 0x14, 0x04,
4438 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4439 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4440 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4441 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4442 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4443 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4444 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4445 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4446 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4447 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4448 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4449 0xf1, 0xeb, 0xea, 0xec, 0xe8, 0xdf, 0xde, 0xe4,
4450 0xc9, 0xce, 0xf9, 0xe3, 0xad, 0xc1, 0xbe, 0xd0,
4451 0xc6, 0xdf, 0xdb, 0xe6, 0xec, 0xf4, 0xf0, 0xee,
4452 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4453 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4454 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4455 0xeb, 0xec, 0xed, 0xea, 0xe8, 0xe8, 0xeb, 0xee,
4456 0xe9, 0xa1, 0xc7, 0xd5, 0xb3, 0xa5, 0x8e, 0xbd,
4457 0xa6, 0x9c, 0x89, 0xc3, 0xcb, 0xbe, 0xd0, 0xde,
4458 0xde, 0xe5, 0xda, 0xce, 0xda, 0xe6, 0xdd, 0xd1,
4459 0xec, 0xe8, 0xe6, 0xe3, 0xe4, 0xe1, 0xde, 0xed,
4460 0xe9, 0xf9, 0xfd, 0xff, 0x9c, 0x1e, 0x43, 0x82,
4461 0xa0, 0xbf, 0xc9, 0xd3, 0xe0, 0xfc, 0xee, 0x92,
4462 0x45, 0x5c, 0x6d, 0x7e, 0x90, 0x8b, 0x7c, 0x7d,
4463 0x63, 0x6a, 0x7e, 0x7f, 0x6c, 0x6a, 0x6a, 0x5b,
4464 0x6d, 0x6c, 0x70, 0x74, 0x70, 0x67, 0x65, 0x6a,
4465 0x64, 0x67, 0x6d, 0x6f, 0x68, 0x5e, 0x5c, 0x62,
4466 0x6a, 0x71, 0x74, 0x6a, 0x5d, 0x5d, 0x6d, 0x7d,
4467 0x7a, 0x7d, 0x83, 0x84, 0x78, 0x6b, 0x6a, 0x73,
4468 0x78, 0x79, 0x74, 0x69, 0x63, 0x63, 0x60, 0x5a,
4469 0x52, 0x58, 0x50, 0x3e, 0x3b, 0x4e, 0x63, 0x6b,
4470 0x5b, 0x43, 0x48, 0x5b, 0x95, 0xce, 0xa8, 0x64,
4471 0x59, 0x69, 0x5e, 0x54, 0x68, 0x5e, 0x34, 0x2e,
4472 0x39, 0x55, 0x47, 0x2c, 0x32, 0x5c, 0x67, 0x2d,
4473 0x54, 0x2e, 0x5e, 0x95, 0x95, 0x73, 0x5e, 0x71,
4474 0x54, 0x5e, 0x87, 0x8e, 0x74, 0x53, 0x4a, 0x77,
4475 0x98, 0xa5, 0x97, 0x77, 0x66, 0x62, 0x5e, 0x5a,
4476 0x37, 0x55, 0x5a, 0x41, 0x37, 0x45, 0x48, 0x39,
4477 0x64, 0xae, 0xcc, 0x8d, 0x32, 0x1c, 0x35, 0x2d,
4478 0x25, 0x1c, 0x0f, 0x31, 0xae, 0xc4, 0xb8, 0xbd,
4479 0xc1, 0xb9, 0x98, 0xbe, 0xe7, 0x7c, 0x5b, 0x67,
4480 0x64, 0x74, 0x76, 0x5e, 0x46, 0x41, 0x43, 0x43,
4481 0x60, 0x6d, 0x60, 0x60, 0x54, 0x4a, 0x1c, 0x08,
4482 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4483 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4484 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4485 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4486 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4487 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4488 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4489 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4490 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4491 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4492 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4493 0xee, 0xeb, 0xeb, 0xed, 0xea, 0xe2, 0xdd, 0xdd,
4494 0xcf, 0xc5, 0xe3, 0xdf, 0xbe, 0xc3, 0xad, 0xe5,
4495 0xd6, 0xd2, 0xd8, 0xe9, 0xea, 0xee, 0xef, 0xe5,
4496 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4497 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4498 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4499 0xeb, 0xec, 0xec, 0xea, 0xe7, 0xe7, 0xea, 0xed,
4500 0xea, 0xbc, 0xcc, 0xe1, 0xbc, 0x98, 0x84, 0xad,
4501 0xa0, 0x9e, 0x9a, 0xc8, 0xdf, 0xcc, 0xe0, 0xd0,
4502 0xea, 0xea, 0xca, 0xb9, 0xc3, 0xb9, 0xb6, 0xd7,
4503 0xe1, 0xe7, 0xee, 0xde, 0xe0, 0xef, 0xef, 0xff,
4504 0xd7, 0x90, 0x45, 0x67, 0xc7, 0xf4, 0xff, 0xe3,
4505 0xa5, 0x99, 0x8b, 0x7d, 0x67, 0x5b, 0x58, 0x4c,
4506 0x55, 0x6b, 0x76, 0x7a, 0x81, 0x7f, 0x7f, 0x8e,
4507 0x4d, 0x6b, 0x72, 0x74, 0x7e, 0x6f, 0x69, 0x87,
4508 0xa2, 0x7c, 0x63, 0x6b, 0x74, 0x6e, 0x6a, 0x70,
4509 0x73, 0x6b, 0x65, 0x68, 0x6c, 0x69, 0x5f, 0x56,
4510 0x56, 0x60, 0x6a, 0x6c, 0x69, 0x6b, 0x75, 0x7e,
4511 0x76, 0x6f, 0x6a, 0x6b, 0x6f, 0x72, 0x76, 0x79,
4512 0x80, 0x80, 0x7b, 0x73, 0x6c, 0x67, 0x62, 0x5d,
4513 0x4e, 0x4f, 0x4c, 0x3f, 0x30, 0x38, 0x60, 0x89,
4514 0xb6, 0xe5, 0xfa, 0xc7, 0x9a, 0xa1, 0x8d, 0x59,
4515 0x33, 0x60, 0x69, 0x5b, 0x51, 0x4e, 0x53, 0x4e,
4516 0x6b, 0x4f, 0x41, 0x4a, 0x50, 0x5c, 0x67, 0x5a,
4517 0x55, 0x61, 0x69, 0x2b, 0x28, 0x32, 0x2b, 0x3f,
4518 0x51, 0x2d, 0x5b, 0x7d, 0x6c, 0x6c, 0x78, 0x88,
4519 0x88, 0x71, 0x94, 0x9e, 0x67, 0x60, 0x79, 0x62,
4520 0x61, 0x51, 0x41, 0x41, 0x4c, 0x4c, 0x40, 0x37,
4521 0x25, 0x85, 0xe5, 0xec, 0x81, 0x29, 0x2d, 0x32,
4522 0x24, 0x25, 0x1d, 0x3b, 0xb3, 0xc6, 0xb5, 0xb4,
4523 0xb0, 0x99, 0x8c, 0xd2, 0xff, 0x94, 0x4c, 0x4c,
4524 0x4b, 0x51, 0x55, 0x5b, 0x67, 0x74, 0x75, 0x6f,
4525 0x54, 0x50, 0x44, 0x50, 0x57, 0x56, 0x21, 0x0f,
4526 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4527 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4528 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4529 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4530 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4531 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4532 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4533 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4534 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4535 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4536 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4537 0xea, 0xec, 0xec, 0xec, 0xee, 0xec, 0xe1, 0xd4,
4538 0xd4, 0xcd, 0xd1, 0xc5, 0xb4, 0xc8, 0xa0, 0xd1,
4539 0xd7, 0xc3, 0xc8, 0xd6, 0xe5, 0xee, 0xee, 0xe4,
4540 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4541 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4542 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4543 0xec, 0xed, 0xec, 0xea, 0xe6, 0xe6, 0xe8, 0xeb,
4544 0xf8, 0xc5, 0xc0, 0xec, 0xc2, 0x84, 0x8c, 0x8b,
4545 0x9b, 0x86, 0x9f, 0xc8, 0xdc, 0xaa, 0xdc, 0xf1,
4546 0xdb, 0xe9, 0xd0, 0xac, 0xaf, 0xc4, 0xd0, 0xd7,
4547 0xc9, 0xca, 0xd7, 0xda, 0xe1, 0xc9, 0x80, 0x54,
4548 0x94, 0xd5, 0xff, 0xeb, 0xb7, 0xcb, 0xf5, 0xeb,
4549 0x98, 0x8f, 0xa3, 0xa7, 0xaf, 0xbf, 0x97, 0x62,
4550 0x6b, 0x83, 0x8e, 0x8c, 0x89, 0x7b, 0x74, 0x80,
4551 0x5a, 0x84, 0x7c, 0x6c, 0x8b, 0x97, 0x83, 0x7f,
4552 0x80, 0x77, 0x6c, 0x68, 0x6b, 0x6d, 0x6a, 0x66,
4553 0x66, 0x6a, 0x6e, 0x6d, 0x6b, 0x6b, 0x6c, 0x6c,
4554 0x68, 0x6e, 0x78, 0x7f, 0x81, 0x7c, 0x72, 0x6b,
4555 0x66, 0x60, 0x5b, 0x5f, 0x6f, 0x7f, 0x85, 0x84,
4556 0x70, 0x74, 0x7b, 0x7f, 0x79, 0x6a, 0x5b, 0x52,
4557 0x4c, 0x4f, 0x40, 0x37, 0x66, 0xbb, 0xf3, 0xfc,
4558 0xf5, 0xe4, 0xae, 0x67, 0x44, 0x59, 0x65, 0x44,
4559 0x50, 0x62, 0x58, 0x4d, 0x54, 0x5e, 0x54, 0x2e,
4560 0x72, 0x7d, 0x6a, 0x58, 0x64, 0x56, 0x42, 0x5b,
4561 0x42, 0x6e, 0x95, 0x3c, 0x3e, 0x55, 0x47, 0x40,
4562 0x6d, 0x45, 0x64, 0x72, 0x56, 0x5b, 0x6f, 0x82,
4563 0x5a, 0x41, 0x71, 0x8f, 0x69, 0x6f, 0x7e, 0x4d,
4564 0x5b, 0x70, 0x69, 0x59, 0x57, 0x4a, 0x43, 0x54,
4565 0x49, 0x2c, 0x8e, 0xfa, 0xeb, 0x75, 0x17, 0x2b,
4566 0x36, 0x39, 0x2c, 0x3c, 0xab, 0xc0, 0xb1, 0xaf,
4567 0xcd, 0xbe, 0xa9, 0xc6, 0xfa, 0x9d, 0x5c, 0x59,
4568 0x3c, 0x3a, 0x3e, 0x44, 0x44, 0x3e, 0x3e, 0x43,
4569 0x50, 0x4c, 0x57, 0x73, 0x7d, 0x70, 0x25, 0x10,
4570 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4571 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4572 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4573 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4574 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4575 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4576 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4577 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4578 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4579 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4580 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4581 0xea, 0xec, 0xec, 0xea, 0xef, 0xf2, 0xe6, 0xd6,
4582 0xbf, 0xc4, 0xd3, 0xd8, 0xbc, 0xd4, 0xb3, 0xd5,
4583 0xd8, 0xc9, 0xc5, 0xc4, 0xe9, 0xf5, 0xed, 0xe9,
4584 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4585 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4586 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4587 0xec, 0xed, 0xec, 0xe9, 0xe5, 0xe5, 0xe7, 0xea,
4588 0xe8, 0xd2, 0xbd, 0xe8, 0xdb, 0x7c, 0xa0, 0xb2,
4589 0x86, 0x78, 0x8e, 0x99, 0xc2, 0xcb, 0xe9, 0xcd,
4590 0xac, 0x9a, 0xb8, 0xea, 0xf1, 0xe7, 0xea, 0xed,
4591 0xeb, 0xe9, 0xe9, 0xe8, 0xea, 0xe6, 0xe1, 0xef,
4592 0xbe, 0xaf, 0xba, 0xde, 0xd8, 0xf3, 0xfa, 0xe3,
4593 0xac, 0xb6, 0xc4, 0xc2, 0xca, 0xb9, 0x7d, 0x5e,
4594 0x5f, 0x75, 0x7e, 0x80, 0x83, 0x7a, 0x75, 0x80,
4595 0x50, 0x66, 0x6d, 0x65, 0x64, 0x63, 0x57, 0x4c,
4596 0x67, 0x6a, 0x70, 0x77, 0x79, 0x77, 0x75, 0x74,
4597 0x75, 0x7e, 0x80, 0x74, 0x67, 0x62, 0x64, 0x65,
4598 0x85, 0x7e, 0x76, 0x75, 0x76, 0x76, 0x6f, 0x69,
4599 0x75, 0x7c, 0x7f, 0x7d, 0x7f, 0x86, 0x8b, 0x8b,
4600 0x7c, 0x7c, 0x81, 0x86, 0x81, 0x72, 0x66, 0x63,
4601 0x62, 0x63, 0x4d, 0x3c, 0x62, 0x9a, 0x95, 0x67,
4602 0x31, 0x1f, 0x15, 0x34, 0x4f, 0x62, 0x6f, 0x55,
4603 0x54, 0x64, 0x63, 0x4f, 0x5c, 0x7d, 0x86, 0x86,
4604 0x7d, 0x4f, 0x43, 0x52, 0x6b, 0x76, 0x71, 0x87,
4605 0x9c, 0x84, 0xad, 0x51, 0x3f, 0x4d, 0x56, 0x55,
4606 0x43, 0x5e, 0x87, 0x78, 0x51, 0x37, 0x34, 0x5d,
4607 0x8a, 0x82, 0x76, 0x65, 0x6a, 0x8c, 0x84, 0x4f,
4608 0x66, 0x7a, 0x63, 0x50, 0x6c, 0x73, 0x64, 0x6a,
4609 0x5d, 0x48, 0x58, 0x9a, 0xcb, 0xae, 0x5a, 0x1b,
4610 0x3d, 0x3f, 0x2a, 0x2f, 0x9f, 0xc2, 0xc4, 0xcb,
4611 0xa2, 0xa1, 0xa9, 0xc6, 0xf1, 0x90, 0x47, 0x4c,
4612 0x36, 0x31, 0x34, 0x3c, 0x39, 0x30, 0x34, 0x41,
4613 0x7e, 0x5e, 0x4f, 0x5b, 0x71, 0x75, 0x22, 0x03,
4614 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4615 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4616 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4617 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4618 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4619 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4620 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4621 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4622 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4623 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4624 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4625 0xee, 0xec, 0xea, 0xea, 0xed, 0xee, 0xea, 0xe5,
4626 0xcc, 0xc3, 0xc3, 0xd1, 0xa5, 0xb6, 0xa1, 0xc2,
4627 0xe7, 0xcf, 0xcd, 0xca, 0xed, 0xef, 0xe4, 0xe8,
4628 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4629 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4630 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4631 0xec, 0xed, 0xec, 0xe9, 0xe5, 0xe4, 0xe6, 0xe9,
4632 0xf0, 0xe2, 0xae, 0xb9, 0xe6, 0x88, 0xa0, 0xb3,
4633 0x90, 0x75, 0x9b, 0xc9, 0xbe, 0xaa, 0xa6, 0xbb,
4634 0xc1, 0xba, 0xd3, 0xeb, 0xdd, 0xd1, 0xdc, 0xe3,
4635 0xe2, 0xe7, 0xe2, 0xe4, 0xe6, 0xe1, 0xec, 0xfc,
4636 0xff, 0xc2, 0xaf, 0x73, 0x25, 0xbc, 0xff, 0xe0,
4637 0x9b, 0xb5, 0xae, 0xbc, 0xc8, 0x94, 0x63, 0x5b,
4638 0x78, 0x94, 0x9d, 0x8e, 0x7b, 0x6c, 0x73, 0x8f,
4639 0x56, 0x6f, 0x83, 0x8d, 0x8a, 0x74, 0x6d, 0x7f,
4640 0x84, 0x6d, 0x5f, 0x6a, 0x79, 0x79, 0x6c, 0x61,
4641 0x6c, 0x67, 0x61, 0x64, 0x75, 0x84, 0x7e, 0x6f,
4642 0x7f, 0x77, 0x6c, 0x67, 0x69, 0x6f, 0x75, 0x79,
4643 0x8b, 0x98, 0x9a, 0x8c, 0x81, 0x84, 0x8a, 0x8c,
4644 0x90, 0x88, 0x85, 0x88, 0x82, 0x75, 0x6f, 0x72,
4645 0x7d, 0x65, 0x54, 0x4d, 0x38, 0x22, 0x2e, 0x4d,
4646 0x49, 0x59, 0x64, 0x7d, 0x74, 0x62, 0x6c, 0x54,
4647 0x4e, 0x57, 0x60, 0x4d, 0x61, 0x6b, 0x3b, 0x32,
4648 0x4f, 0x3c, 0x7f, 0x97, 0x7a, 0x8b, 0x96, 0x8a,
4649 0x5b, 0x8a, 0xef, 0x7a, 0x4f, 0x54, 0x4f, 0x39,
4650 0x39, 0x53, 0x78, 0x71, 0x66, 0x5c, 0x3c, 0x38,
4651 0x6f, 0x7c, 0x75, 0x5f, 0x65, 0x7b, 0x66, 0x33,
4652 0x6b, 0x52, 0x5c, 0x70, 0x65, 0x5b, 0x61, 0x62,
4653 0x53, 0x65, 0x39, 0x55, 0xa5, 0xdd, 0xcf, 0x56,
4654 0x3c, 0x47, 0x37, 0x37, 0x9c, 0xb3, 0xa7, 0xa3,
4655 0xac, 0xa3, 0xa5, 0xbc, 0xf6, 0xad, 0x5f, 0x5b,
4656 0x5a, 0x54, 0x4b, 0x44, 0x3d, 0x37, 0x36, 0x38,
4657 0x3b, 0x5d, 0x7b, 0x67, 0x4a, 0x4a, 0x12, 0x12,
4658 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2,
4659 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4660 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
4661 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4662 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4663 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4664 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4665 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4666 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4667 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4668 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4669 0xf2, 0xec, 0xe9, 0xeb, 0xea, 0xe7, 0xec, 0xf4,
4670 0xdc, 0xc7, 0xac, 0xbe, 0xaa, 0xca, 0xb3, 0xc6,
4671 0xde, 0xb0, 0xc1, 0xd2, 0xec, 0xe7, 0xeb, 0xf5,
4672 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4673 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4674 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4675 0xec, 0xed, 0xec, 0xe9, 0xe5, 0xe3, 0xe6, 0xe8,
4676 0xeb, 0xe7, 0xcc, 0xad, 0xc7, 0x7b, 0xac, 0xbb,
4677 0x8f, 0x73, 0x80, 0xb0, 0xac, 0xe1, 0xc9, 0xcd,
4678 0xd5, 0xe5, 0xe7, 0xe1, 0xe6, 0xe8, 0xe3, 0xe0,
4679 0xe1, 0xf2, 0xe8, 0xe7, 0xe9, 0xe4, 0xec, 0xe7,
4680 0xf7, 0xb3, 0x23, 0x41, 0x66, 0xcb, 0xfe, 0xe4,
4681 0xa7, 0xb6, 0xae, 0xcd, 0xb2, 0x66, 0x65, 0x63,
4682 0x71, 0x78, 0x74, 0x78, 0x88, 0x86, 0x7a, 0x7a,
4683 0x4d, 0x86, 0x81, 0x75, 0x9a, 0x94, 0x6e, 0x72,
4684 0x7c, 0x86, 0x82, 0x6e, 0x68, 0x73, 0x78, 0x71,
4685 0x74, 0x7e, 0x7e, 0x70, 0x65, 0x65, 0x68, 0x66,
4686 0x68, 0x6f, 0x77, 0x7b, 0x7a, 0x79, 0x7a, 0x7b,
4687 0x83, 0x8b, 0x87, 0x77, 0x71, 0x7d, 0x8a, 0x8e,
4688 0x85, 0x80, 0x82, 0x89, 0x82, 0x6e, 0x61, 0x61,
4689 0x5f, 0x66, 0x67, 0x5a, 0x44, 0x37, 0x3a, 0x43,
4690 0x51, 0x6e, 0x69, 0x68, 0x60, 0x69, 0x76, 0x45,
4691 0x33, 0x4a, 0x66, 0x46, 0x4e, 0x5a, 0x39, 0x5e,
4692 0x6f, 0x4f, 0x75, 0x8a, 0x85, 0x83, 0x6c, 0x6c,
4693 0x7b, 0x9e, 0xda, 0x51, 0x45, 0x49, 0x44, 0x55,
4694 0x42, 0x40, 0x68, 0x5c, 0x3e, 0x57, 0x5a, 0x41,
4695 0x30, 0x3d, 0x6a, 0x7a, 0x65, 0x6b, 0x6e, 0x4b,
4696 0x53, 0x6c, 0x6a, 0x5b, 0x5f, 0x63, 0x5e, 0x61,
4697 0x68, 0x6d, 0x59, 0x53, 0x74, 0xb4, 0xcd, 0x9d,
4698 0x65, 0x6a, 0x4b, 0x3d, 0x9a, 0xb4, 0xb0, 0xb0,
4699 0xa1, 0xb7, 0xba, 0xb3, 0xff, 0xe2, 0x69, 0x11,
4700 0x2e, 0x3b, 0x3d, 0x33, 0x2e, 0x3a, 0x49, 0x4f,
4701 0x52, 0x70, 0x82, 0x5f, 0x4e, 0x63, 0x1e, 0x01,
4702 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5,
4703 0xf3, 0xf3, 0xf3, 0xf3, 0xf2, 0xf2, 0xf2, 0xf2,
4704 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4705 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4706 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4707 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4708 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4709 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4710 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4711 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4712 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed,
4713 0xeb, 0xef, 0xf0, 0xe6, 0xe7, 0xf0, 0xf0, 0xf2,
4714 0xe7, 0xe4, 0xc0, 0xbc, 0xa5, 0xb4, 0xb7, 0x9d,
4715 0xcf, 0xb3, 0xad, 0xc2, 0xe6, 0xe8, 0xf1, 0xef,
4716 0xec, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xeb, 0xeb,
4717 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4718 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4719 0xea, 0xe8, 0xeb, 0xf1, 0xed, 0xe2, 0xde, 0xe1,
4720 0xe5, 0xdb, 0xd3, 0xd5, 0xc1, 0x84, 0xad, 0xc9,
4721 0x97, 0xa1, 0x9c, 0x97, 0x7d, 0xae, 0xbc, 0xcc,
4722 0xef, 0xea, 0xe5, 0xe4, 0xe6, 0xe8, 0xe7, 0xe5,
4723 0xe7, 0xe8, 0xe6, 0xdd, 0xea, 0xe3, 0xff, 0xea,
4724 0xf6, 0xb8, 0x7e, 0x96, 0xcc, 0xf9, 0xff, 0xd8,
4725 0xa2, 0xb6, 0xc0, 0xbe, 0x71, 0x67, 0x5b, 0x75,
4726 0x94, 0x9a, 0x90, 0x83, 0x69, 0x62, 0x73, 0x61,
4727 0x42, 0x74, 0x79, 0x87, 0x79, 0x8c, 0x7b, 0x8a,
4728 0x86, 0x76, 0x62, 0x57, 0x5d, 0x69, 0x6f, 0x6f,
4729 0x6c, 0x69, 0x61, 0x61, 0x74, 0x89, 0x86, 0x75,
4730 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, 0x80,
4731 0x9c, 0x93, 0x85, 0x7a, 0x77, 0x7c, 0x85, 0x8c,
4732 0x79, 0x76, 0x7c, 0x88, 0x86, 0x77, 0x6d, 0x6f,
4733 0x52, 0x62, 0x67, 0x50, 0x34, 0x38, 0x62, 0x8c,
4734 0x95, 0x8b, 0x5d, 0x51, 0x63, 0x71, 0x7b, 0x6e,
4735 0x40, 0x4b, 0x46, 0x44, 0x53, 0x5b, 0x5c, 0x66,
4736 0x5f, 0x61, 0x7a, 0x7f, 0x7b, 0x75, 0x6f, 0x88,
4737 0x8d, 0x93, 0xbf, 0x70, 0x49, 0x53, 0x50, 0x53,
4738 0x61, 0x37, 0x4f, 0x6a, 0x57, 0x3a, 0x33, 0x54,
4739 0x58, 0x43, 0x3e, 0x5e, 0x56, 0x3d, 0x20, 0x63,
4740 0x78, 0x65, 0x5e, 0x5c, 0x57, 0x61, 0x6b, 0x64,
4741 0x65, 0x5b, 0x5e, 0x4c, 0x4d, 0x7c, 0xb4, 0xe8,
4742 0x89, 0x4b, 0x4f, 0x42, 0xa8, 0xcb, 0xb8, 0xcd,
4743 0xbf, 0xbd, 0xa9, 0xb5, 0xf1, 0xf1, 0x85, 0x13,
4744 0x24, 0x3b, 0x33, 0x32, 0x2e, 0x3d, 0x38, 0x45,
4745 0x32, 0x3e, 0x52, 0x47, 0x57, 0x5d, 0x26, 0x0f,
4746 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
4747 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
4748 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4749 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4750 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4751 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4752 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4753 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4754 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4755 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4756 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4757 0xf3, 0xf1, 0xea, 0xe9, 0xe2, 0xec, 0xfb, 0xe3,
4758 0xf8, 0xdc, 0xbb, 0xb6, 0x8e, 0x91, 0x9e, 0x92,
4759 0xd5, 0xc6, 0xa7, 0xb2, 0xe7, 0xe7, 0xea, 0xea,
4760 0xec, 0xec, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4761 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4762 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4763 0xea, 0xe9, 0xea, 0xee, 0xed, 0xe6, 0xe1, 0xdf,
4764 0xed, 0xe0, 0xd2, 0xd4, 0xc5, 0x84, 0xa3, 0xcf,
4765 0x84, 0x7b, 0x8b, 0xd0, 0xa9, 0xb0, 0xe8, 0xe9,
4766 0xe4, 0xe6, 0xe7, 0xe4, 0xe1, 0xe0, 0xe4, 0xe8,
4767 0xe1, 0xe6, 0xdf, 0xe8, 0xfd, 0xc4, 0xd3, 0xf3,
4768 0xff, 0xb5, 0xa9, 0xd6, 0xd3, 0xf9, 0xf8, 0xe1,
4769 0xa4, 0xaf, 0xc5, 0x9e, 0x64, 0x5a, 0x65, 0x70,
4770 0x86, 0x77, 0x73, 0x8b, 0x83, 0x70, 0x7d, 0x78,
4771 0x4c, 0xac, 0x78, 0x4a, 0x69, 0x80, 0x59, 0x87,
4772 0x79, 0x6a, 0x59, 0x55, 0x5f, 0x6c, 0x6f, 0x6d,
4773 0x6e, 0x65, 0x60, 0x6d, 0x87, 0x96, 0x8a, 0x74,
4774 0x6f, 0x7a, 0x83, 0x80, 0x74, 0x6c, 0x6d, 0x72,
4775 0x87, 0x7f, 0x75, 0x6e, 0x6e, 0x71, 0x74, 0x75,
4776 0x73, 0x78, 0x88, 0x95, 0x8f, 0x78, 0x67, 0x63,
4777 0x68, 0x5c, 0x50, 0x50, 0x56, 0x55, 0x49, 0x3c,
4778 0x46, 0x5b, 0x60, 0x6c, 0x71, 0x75, 0x82, 0x71,
4779 0x41, 0x6a, 0x5f, 0x34, 0x44, 0x76, 0x80, 0x6d,
4780 0x5e, 0x3d, 0x73, 0x94, 0x72, 0x69, 0x80, 0x97,
4781 0x72, 0x75, 0x9b, 0x51, 0x33, 0x44, 0x45, 0x44,
4782 0x55, 0x37, 0x48, 0x50, 0x4b, 0x57, 0x61, 0x77,
4783 0x5a, 0x39, 0x38, 0x72, 0x82, 0x6a, 0x36, 0x60,
4784 0x86, 0x75, 0x6b, 0x63, 0x58, 0x5f, 0x6c, 0x6b,
4785 0x60, 0x70, 0x62, 0x72, 0x70, 0x65, 0xa4, 0xdf,
4786 0xb8, 0x6a, 0x39, 0x3a, 0xa2, 0xb4, 0xa3, 0x9b,
4787 0xb3, 0xb8, 0xad, 0xba, 0xe9, 0xe6, 0x8e, 0x37,
4788 0x3d, 0x33, 0x39, 0x62, 0x71, 0x8a, 0x7d, 0x68,
4789 0x7d, 0x7d, 0x72, 0x66, 0x95, 0x91, 0x2e, 0x06,
4790 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
4791 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
4792 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4793 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4794 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4795 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4796 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4797 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4798 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4799 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4800 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xea,
4801 0xea, 0xf0, 0xe8, 0xf1, 0xe1, 0xd8, 0xf1, 0xdd,
4802 0xf0, 0xe5, 0xcf, 0xb9, 0xa0, 0xba, 0xb8, 0x8b,
4803 0xd0, 0xce, 0xa5, 0xa9, 0xd3, 0xc9, 0xde, 0xed,
4804 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4805 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4806 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4807 0xeb, 0xeb, 0xea, 0xe9, 0xec, 0xec, 0xe5, 0xdc,
4808 0xe1, 0xf2, 0xd9, 0xb1, 0xa9, 0x8f, 0xa2, 0xc1,
4809 0x64, 0x8d, 0x9d, 0xcb, 0xb3, 0xaf, 0xe1, 0xce,
4810 0xdd, 0xe0, 0xe4, 0xe4, 0xe1, 0xdf, 0xe1, 0xe3,
4811 0xdd, 0xec, 0xdd, 0xff, 0xd3, 0x5d, 0xc5, 0xff,
4812 0xff, 0xb4, 0x3a, 0x2d, 0x12, 0xa3, 0xff, 0xe0,
4813 0xa9, 0xc7, 0xa9, 0x70, 0x5f, 0x5f, 0x7b, 0x91,
4814 0x84, 0x7b, 0x6e, 0x75, 0x74, 0x79, 0x87, 0x71,
4815 0x92, 0x6e, 0x48, 0x74, 0x8f, 0x7e, 0x60, 0x86,
4816 0x76, 0x6c, 0x5f, 0x55, 0x51, 0x55, 0x5e, 0x66,
4817 0x66, 0x5a, 0x59, 0x6a, 0x7a, 0x77, 0x65, 0x55,
4818 0x67, 0x75, 0x84, 0x87, 0x7e, 0x74, 0x6f, 0x70,
4819 0x70, 0x6b, 0x68, 0x6c, 0x77, 0x7f, 0x81, 0x80,
4820 0x7b, 0x7a, 0x79, 0x74, 0x64, 0x52, 0x4c, 0x4f,
4821 0x6e, 0x6a, 0x61, 0x54, 0x47, 0x3d, 0x3a, 0x3a,
4822 0x4b, 0x5d, 0x6f, 0x7a, 0x64, 0x60, 0x72, 0x59,
4823 0x43, 0x54, 0x4f, 0x45, 0x4f, 0x55, 0x50, 0x51,
4824 0x74, 0x57, 0x6b, 0x82, 0x84, 0x7d, 0x7b, 0x96,
4825 0x85, 0x5f, 0x81, 0x6f, 0x64, 0x4a, 0x35, 0x39,
4826 0x41, 0x45, 0x68, 0x69, 0x64, 0x72, 0x5c, 0x43,
4827 0x57, 0x52, 0x51, 0x61, 0x5d, 0x69, 0x59, 0x85,
4828 0x63, 0x66, 0x73, 0x79, 0x70, 0x68, 0x63, 0x59,
4829 0x57, 0x5e, 0x61, 0x65, 0x66, 0x51, 0x60, 0xa4,
4830 0xd5, 0xa7, 0x34, 0x1d, 0xa1, 0xcf, 0xc6, 0xb6,
4831 0xbc, 0xbf, 0xae, 0xb4, 0xe1, 0xee, 0xbc, 0x87,
4832 0x9a, 0xa1, 0x9b, 0x93, 0x74, 0x7d, 0x6e, 0x55,
4833 0x67, 0x71, 0x68, 0x43, 0x4f, 0x4b, 0x14, 0x17,
4834 0xf4, 0xf4, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2,
4835 0xf2, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf5,
4836 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4837 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4838 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4839 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4840 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4841 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4842 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4843 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4844 0xed, 0xed, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xeb,
4845 0xe2, 0xea, 0xe1, 0xed, 0xe7, 0xd0, 0xd9, 0xda,
4846 0xe3, 0xdd, 0xcb, 0xae, 0xa2, 0xc0, 0xbc, 0x8b,
4847 0xc0, 0xc7, 0xaa, 0xb8, 0xd4, 0xc2, 0xe8, 0xf8,
4848 0xe9, 0xe9, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb,
4849 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4850 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4851 0xec, 0xed, 0xe9, 0xe6, 0xeb, 0xf0, 0xe8, 0xdb,
4852 0xe5, 0xe5, 0xd8, 0xd5, 0xd4, 0x9c, 0x90, 0xd2,
4853 0x5b, 0x3f, 0x8a, 0xef, 0xcc, 0xa3, 0xe1, 0xec,
4854 0xeb, 0xe4, 0xdc, 0xd9, 0xdc, 0xe1, 0xe4, 0xe4,
4855 0xe1, 0xe3, 0xff, 0xce, 0x50, 0x4d, 0xe8, 0xf8,
4856 0xfb, 0xcf, 0x30, 0x5c, 0x7e, 0xe6, 0xf9, 0xda,
4857 0xa6, 0xc8, 0x85, 0x71, 0x6b, 0x70, 0x76, 0x78,
4858 0x69, 0x7f, 0x8a, 0x91, 0x7e, 0x64, 0x49, 0x0f,
4859 0x2f, 0x76, 0x8f, 0x86, 0x85, 0x85, 0x76, 0x7a,
4860 0x7c, 0x71, 0x63, 0x59, 0x53, 0x53, 0x5f, 0x6c,
4861 0x75, 0x65, 0x5e, 0x64, 0x64, 0x5b, 0x5d, 0x68,
4862 0x79, 0x73, 0x6c, 0x69, 0x6b, 0x6c, 0x6b, 0x68,
4863 0x6b, 0x66, 0x65, 0x6e, 0x7f, 0x8c, 0x91, 0x90,
4864 0x85, 0x7f, 0x74, 0x64, 0x57, 0x56, 0x63, 0x72,
4865 0x6c, 0x6c, 0x67, 0x5a, 0x49, 0x3f, 0x3e, 0x40,
4866 0x46, 0x4c, 0x63, 0x77, 0x64, 0x6d, 0x89, 0x67,
4867 0x54, 0x5f, 0x55, 0x4b, 0x5a, 0x67, 0x6d, 0x77,
4868 0x74, 0x72, 0x7a, 0x77, 0x87, 0x90, 0x82, 0x8e,
4869 0x85, 0x6e, 0x75, 0x49, 0x54, 0x6a, 0x5e, 0x36,
4870 0x42, 0x45, 0x5f, 0x55, 0x50, 0x65, 0x52, 0x34,
4871 0x3f, 0x55, 0x4f, 0x3c, 0x41, 0x84, 0x7a, 0x75,
4872 0x7b, 0x69, 0x5b, 0x5f, 0x6c, 0x74, 0x6c, 0x5e,
4873 0x60, 0x5f, 0x65, 0x5b, 0x65, 0x6a, 0x5c, 0x7a,
4874 0xbb, 0xf2, 0x94, 0x31, 0x80, 0xb3, 0xa4, 0xb6,
4875 0xae, 0xa7, 0xb4, 0xda, 0xd9, 0x95, 0x5e, 0x63,
4876 0x1b, 0x2f, 0x28, 0x33, 0x3b, 0x47, 0x2e, 0x26,
4877 0x40, 0x4d, 0x6f, 0x62, 0x53, 0x48, 0x1b, 0x0f,
4878 0xf5, 0xf4, 0xf4, 0xf3, 0xf2, 0xf2, 0xf1, 0xf1,
4879 0xf0, 0xf0, 0xf1, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4,
4880 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4881 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4882 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4883 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4884 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4885 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4886 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4887 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4888 0xf0, 0xef, 0xef, 0xee, 0xed, 0xed, 0xec, 0xec,
4889 0xed, 0xe5, 0xdd, 0xde, 0xe3, 0xdf, 0xd4, 0xd0,
4890 0xd7, 0xf0, 0xec, 0xaf, 0x8a, 0xb6, 0xc7, 0x7c,
4891 0xb2, 0xc5, 0xa1, 0xa1, 0xc5, 0xc3, 0xec, 0xfb,
4892 0xe8, 0xe8, 0xe9, 0xe9, 0xea, 0xeb, 0xeb, 0xec,
4893 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4894 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4895 0xed, 0xed, 0xe9, 0xe5, 0xea, 0xf1, 0xea, 0xde,
4896 0xe1, 0xe0, 0xd2, 0xc8, 0xd0, 0xb6, 0xa8, 0xf9,
4897 0x8d, 0x5c, 0x8b, 0xbb, 0x92, 0x77, 0xd9, 0xe5,
4898 0xe8, 0xe5, 0xe2, 0xe2, 0xe5, 0xe5, 0xe2, 0xdf,
4899 0xe6, 0xf0, 0xcf, 0x8d, 0x6f, 0x7c, 0xe2, 0xf5,
4900 0xfe, 0xd9, 0x7b, 0xad, 0xb2, 0xfc, 0xf0, 0xf2,
4901 0xcb, 0x9c, 0x69, 0x66, 0x64, 0x86, 0x95, 0x88,
4902 0x84, 0x79, 0x74, 0x83, 0x71, 0x5d, 0x6e, 0x6d,
4903 0x70, 0x6e, 0x6d, 0x7d, 0x9d, 0x8f, 0x7a, 0x7a,
4904 0x6e, 0x68, 0x69, 0x72, 0x74, 0x6b, 0x61, 0x60,
4905 0x5a, 0x59, 0x67, 0x7e, 0x7f, 0x70, 0x70, 0x7d,
4906 0x70, 0x6b, 0x67, 0x6a, 0x72, 0x76, 0x73, 0x6f,
4907 0x75, 0x6e, 0x68, 0x6a, 0x73, 0x7d, 0x83, 0x85,
4908 0x81, 0x80, 0x7a, 0x6d, 0x63, 0x62, 0x67, 0x6c,
4909 0x70, 0x69, 0x5d, 0x51, 0x48, 0x44, 0x45, 0x47,
4910 0x43, 0x53, 0x74, 0x8a, 0x6d, 0x65, 0x70, 0x44,
4911 0x5a, 0x5e, 0x50, 0x45, 0x4e, 0x52, 0x53, 0x5f,
4912 0x3f, 0x4f, 0x94, 0x98, 0x68, 0x6e, 0x85, 0x8b,
4913 0x84, 0x59, 0x58, 0x43, 0x45, 0x3e, 0x46, 0x43,
4914 0x5d, 0x5d, 0x7d, 0x7c, 0x6f, 0x71, 0x56, 0x3e,
4915 0x56, 0x70, 0x68, 0x3e, 0x29, 0x6a, 0x63, 0x52,
4916 0x6d, 0x79, 0x7f, 0x79, 0x6d, 0x63, 0x63, 0x69,
4917 0x68, 0x71, 0x60, 0x66, 0x6d, 0x69, 0x6d, 0x53,
4918 0x86, 0xc8, 0xb7, 0x5b, 0x75, 0xc1, 0xb2, 0xd0,
4919 0xaa, 0xc6, 0xa8, 0x79, 0x92, 0xbc, 0xa0, 0x63,
4920 0x6a, 0xb6, 0xa7, 0x63, 0x4e, 0x81, 0x6e, 0x3e,
4921 0x49, 0x42, 0x5a, 0x50, 0x45, 0x42, 0x1b, 0x0d,
4922 0xf5, 0xf4, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, 0xef,
4923 0xed, 0xee, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3,
4924 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4925 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4926 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4927 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4928 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4929 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4930 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4931 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4932 0xf0, 0xef, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea,
4933 0xf4, 0xe8, 0xeb, 0xdd, 0xce, 0xda, 0xdb, 0xcb,
4934 0xda, 0xd2, 0xd6, 0xc1, 0x91, 0x95, 0xc3, 0x92,
4935 0x98, 0xd2, 0xac, 0x89, 0xb0, 0xb3, 0xce, 0xe8,
4936 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xeb, 0xec,
4937 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4938 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4939 0xee, 0xec, 0xe9, 0xe7, 0xeb, 0xee, 0xea, 0xe3,
4940 0xe7, 0xe1, 0xd9, 0xcb, 0xc8, 0xb6, 0x96, 0xe4,
4941 0x9d, 0x87, 0xba, 0xff, 0xee, 0x8d, 0xce, 0xd5,
4942 0xe1, 0xe5, 0xea, 0xea, 0xe6, 0xe4, 0xe4, 0xe5,
4943 0xfb, 0xe8, 0x63, 0x4e, 0x81, 0x79, 0xe4, 0xfc,
4944 0xf9, 0xd5, 0x86, 0x9c, 0x87, 0xca, 0xf1, 0xff,
4945 0xcb, 0x68, 0x6b, 0x5a, 0x77, 0x87, 0x7a, 0x72,
4946 0x8c, 0x8b, 0x85, 0x87, 0x73, 0x69, 0x80, 0x7d,
4947 0x69, 0x74, 0x83, 0x76, 0x82, 0x78, 0x78, 0x6c,
4948 0x67, 0x5f, 0x5f, 0x67, 0x67, 0x63, 0x6c, 0x7c,
4949 0x7b, 0x6d, 0x68, 0x6f, 0x6d, 0x63, 0x68, 0x78,
4950 0x61, 0x62, 0x63, 0x62, 0x60, 0x60, 0x62, 0x64,
4951 0x79, 0x76, 0x71, 0x6d, 0x6d, 0x72, 0x7a, 0x7f,
4952 0x8a, 0x8b, 0x85, 0x79, 0x71, 0x6d, 0x65, 0x5c,
4953 0x67, 0x68, 0x61, 0x4e, 0x3a, 0x36, 0x44, 0x53,
4954 0x2c, 0x4f, 0x74, 0x86, 0x69, 0x5a, 0x66, 0x4c,
4955 0x42, 0x49, 0x47, 0x4d, 0x5c, 0x5c, 0x5b, 0x68,
4956 0x6e, 0x4e, 0x6a, 0x8e, 0x9d, 0x9c, 0x77, 0x5a,
4957 0x4e, 0x66, 0x79, 0x47, 0x39, 0x4a, 0x6b, 0x59,
4958 0x60, 0x56, 0x6f, 0x67, 0x50, 0x4e, 0x42, 0x41,
4959 0x3c, 0x48, 0x57, 0x51, 0x39, 0x6c, 0x77, 0x88,
4960 0x7b, 0x75, 0x68, 0x64, 0x6e, 0x6f, 0x67, 0x64,
4961 0x62, 0x61, 0x64, 0x6d, 0x6c, 0x66, 0x60, 0x4f,
4962 0x5c, 0x82, 0xd1, 0xc2, 0x99, 0xc2, 0xa0, 0xa3,
4963 0xbc, 0xbd, 0xbe, 0xd9, 0xfc, 0xe7, 0xa5, 0x77,
4964 0x8a, 0x82, 0x6a, 0x53, 0x2e, 0x3c, 0x39, 0x2c,
4965 0x32, 0x3d, 0x56, 0x4b, 0x49, 0x3a, 0x0b, 0x0f,
4966 0xf5, 0xf5, 0xf4, 0xf2, 0xf1, 0xf0, 0xef, 0xee,
4967 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
4968 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
4969 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
4970 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
4971 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
4972 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
4973 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4974 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
4975 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4976 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe7, 0xe7, 0xe6,
4977 0xeb, 0xec, 0xf1, 0xe8, 0xc8, 0xbe, 0xcb, 0xc5,
4978 0xd5, 0xda, 0xcb, 0xb5, 0x94, 0x89, 0xc8, 0xac,
4979 0x7f, 0xca, 0xbf, 0x9d, 0xbb, 0xb1, 0xbb, 0xe0,
4980 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xeb, 0xec, 0xec,
4981 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
4982 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
4983 0xee, 0xeb, 0xe9, 0xeb, 0xeb, 0xe9, 0xe8, 0xea,
4984 0xd4, 0xeb, 0xe5, 0xae, 0xa6, 0xd0, 0xb3, 0xdd,
4985 0x91, 0x59, 0xa8, 0xf1, 0xdc, 0x88, 0xda, 0xd8,
4986 0xe6, 0xe5, 0xe1, 0xdc, 0xdb, 0xe2, 0xee, 0xf7,
4987 0xd9, 0x66, 0x52, 0x73, 0x6b, 0x6b, 0xd9, 0xf7,
4988 0xf6, 0xdb, 0x91, 0xc8, 0xf0, 0xe7, 0xe9, 0xff,
4989 0xb2, 0x5a, 0x6b, 0x65, 0x90, 0x8c, 0x75, 0x80,
4990 0x6c, 0x7c, 0x79, 0x74, 0x67, 0x6b, 0x77, 0x59,
4991 0x64, 0x8c, 0x8b, 0x70, 0x95, 0x5e, 0x40, 0x59,
4992 0x7d, 0x6e, 0x69, 0x72, 0x74, 0x6c, 0x6b, 0x73,
4993 0x66, 0x64, 0x6a, 0x71, 0x6e, 0x67, 0x6d, 0x7a,
4994 0x8d, 0x81, 0x6f, 0x60, 0x5a, 0x5c, 0x65, 0x6b,
4995 0x7b, 0x7f, 0x80, 0x79, 0x6f, 0x6b, 0x71, 0x78,
4996 0x88, 0x88, 0x82, 0x7d, 0x83, 0x8a, 0x83, 0x75,
4997 0x5c, 0x5e, 0x5e, 0x56, 0x4c, 0x46, 0x48, 0x4d,
4998 0x44, 0x64, 0x6f, 0x72, 0x61, 0x55, 0x60, 0x54,
4999 0x48, 0x5e, 0x50, 0x34, 0x41, 0x5e, 0x66, 0x62,
5000 0x51, 0x50, 0x5a, 0x5d, 0x66, 0x5b, 0x3e, 0x4d,
5001 0x4b, 0x47, 0x5c, 0x56, 0x4f, 0x48, 0x84, 0xa3,
5002 0x32, 0x42, 0x76, 0x79, 0x60, 0x59, 0x49, 0x43,
5003 0x48, 0x2d, 0x36, 0x5a, 0x66, 0x93, 0x7a, 0x67,
5004 0x6d, 0x6d, 0x62, 0x5f, 0x6a, 0x6b, 0x64, 0x68,
5005 0x63, 0x5a, 0x6a, 0x64, 0x68, 0x6d, 0x56, 0x65,
5006 0x45, 0x77, 0xc6, 0xe1, 0xb2, 0xd8, 0xe6, 0xff,
5007 0xff, 0xfc, 0xd0, 0x9b, 0x6f, 0x44, 0x32, 0x3f,
5008 0x2f, 0x36, 0x3e, 0x43, 0x1d, 0x21, 0x30, 0x43,
5009 0x3a, 0x38, 0x4b, 0x46, 0x4b, 0x41, 0x13, 0x12,
5010 0xf5, 0xf5, 0xf4, 0xf2, 0xf1, 0xef, 0xee, 0xee,
5011 0xe8, 0xe9, 0xea, 0xeb, 0xed, 0xee, 0xef, 0xf0,
5012 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
5013 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
5014 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
5015 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
5016 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
5017 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
5018 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec,
5019 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5020 0xe9, 0xe9, 0xe8, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2,
5021 0xe5, 0xec, 0xe2, 0xef, 0xd9, 0xab, 0xb0, 0xb7,
5022 0xcd, 0xf1, 0xd7, 0xc2, 0xa6, 0x6e, 0xa1, 0xae,
5023 0x7f, 0xa9, 0xa6, 0x96, 0xb7, 0xb3, 0xc7, 0xf7,
5024 0xe5, 0xe5, 0xe6, 0xe8, 0xe9, 0xeb, 0xec, 0xec,
5025 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5026 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5027 0xef, 0xe9, 0xe9, 0xed, 0xeb, 0xe6, 0xe7, 0xee,
5028 0xdd, 0xdd, 0xdf, 0xbb, 0xa7, 0xb5, 0x88, 0xbb,
5029 0x72, 0x4a, 0xb5, 0xeb, 0xf7, 0xa6, 0xc4, 0xd8,
5030 0xd9, 0xd9, 0xdb, 0xe2, 0xea, 0xee, 0xee, 0xeb,
5031 0x6a, 0x59, 0x84, 0x94, 0x7e, 0x93, 0xfc, 0xf7,
5032 0xe7, 0xd7, 0xcf, 0xc3, 0xcc, 0xf3, 0xff, 0xfc,
5033 0xae, 0x63, 0x60, 0x7b, 0x7d, 0x7c, 0x81, 0x86,
5034 0x93, 0x82, 0x75, 0x83, 0x78, 0x65, 0x68, 0x55,
5035 0x77, 0x33, 0x39, 0x58, 0x97, 0xb6, 0xf8, 0xff,
5036 0xff, 0xbd, 0x79, 0x67, 0x71, 0x6f, 0x63, 0x5a,
5037 0x53, 0x61, 0x72, 0x75, 0x66, 0x57, 0x5d, 0x6b,
5038 0x70, 0x6a, 0x69, 0x72, 0x7f, 0x83, 0x79, 0x6d,
5039 0x83, 0x8b, 0x8e, 0x81, 0x6b, 0x5b, 0x59, 0x5e,
5040 0x5d, 0x5e, 0x5c, 0x5d, 0x69, 0x72, 0x64, 0x4d,
5041 0x60, 0x62, 0x5e, 0x51, 0x44, 0x48, 0x5b, 0x6e,
5042 0x6d, 0x81, 0x72, 0x6d, 0x6b, 0x5d, 0x54, 0x41,
5043 0x43, 0x3b, 0x37, 0x49, 0x59, 0x4e, 0x51, 0x6f,
5044 0x5e, 0x4a, 0x58, 0x43, 0x2f, 0x52, 0x64, 0x5a,
5045 0x47, 0x40, 0x51, 0x51, 0x4d, 0x38, 0x5b, 0x61,
5046 0x53, 0x60, 0x81, 0x67, 0x42, 0x47, 0x4a, 0x4d,
5047 0x5b, 0x3b, 0x33, 0x41, 0x49, 0x88, 0x7d, 0x68,
5048 0x70, 0x77, 0x6f, 0x6a, 0x70, 0x69, 0x5f, 0x64,
5049 0x64, 0x6e, 0x4c, 0x3e, 0x44, 0x34, 0x2e, 0x31,
5050 0x5b, 0x99, 0x9f, 0xca, 0xd0, 0xc1, 0x64, 0x2f,
5051 0x1c, 0x13, 0x0b, 0x22, 0x47, 0x4c, 0x45, 0x50,
5052 0x4a, 0x49, 0x2f, 0x34, 0x38, 0x45, 0x3e, 0x4e,
5053 0x4c, 0x37, 0x54, 0x4d, 0x35, 0x31, 0x19, 0x12,
5054 0xfb, 0xf6, 0xf7, 0xe5, 0xf0, 0xea, 0xec, 0xf3,
5055 0xef, 0xe9, 0xf4, 0xf7, 0xec, 0xe5, 0xe7, 0xf2,
5056 0xe8, 0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xec, 0xec,
5057 0xf1, 0xf1, 0xf0, 0xef, 0xef, 0xee, 0xed, 0xed,
5058 0xef, 0xf0, 0xf1, 0xf1, 0xf0, 0xed, 0xeb, 0xe9,
5059 0xed, 0xec, 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xeb,
5060 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xec, 0xeb,
5061 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
5062 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5063 0xf4, 0xed, 0xe8, 0xe9, 0xeb, 0xe9, 0xe7, 0xe8,
5064 0xde, 0xde, 0xea, 0xea, 0xd6, 0xde, 0xd2, 0xe0,
5065 0xdf, 0xdf, 0xe3, 0xe8, 0xe0, 0xbe, 0xac, 0xc0,
5066 0xcc, 0xc4, 0xfc, 0xde, 0xb9, 0x95, 0x92, 0x87,
5067 0x95, 0xab, 0xae, 0x8b, 0xc4, 0xbc, 0xc8, 0xd8,
5068 0xe1, 0xee, 0xef, 0xed, 0xf4, 0xed, 0xe6, 0xef,
5069 0xe4, 0xdb, 0xe3, 0xef, 0xec, 0xe7, 0xea, 0xeb,
5070 0xf4, 0xeb, 0xef, 0xf1, 0xe7, 0xea, 0xf0, 0xe9,
5071 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5072 0xe7, 0xc9, 0xea, 0xeb, 0xdd, 0xaf, 0x7b, 0xf4,
5073 0xaa, 0x2c, 0xa8, 0xfb, 0xee, 0xb2, 0xc9, 0xef,
5074 0xf5, 0xd3, 0xdd, 0xe8, 0xdf, 0xf0, 0xd6, 0x7b,
5075 0x79, 0x92, 0x98, 0x77, 0x78, 0xc2, 0xf3, 0xde,
5076 0xd0, 0xec, 0xf6, 0xf8, 0xff, 0xe0, 0x91, 0x50,
5077 0x58, 0x73, 0x78, 0x90, 0x8d, 0x78, 0x81, 0x74,
5078 0x7f, 0x75, 0x7d, 0x55, 0x37, 0x25, 0x1c, 0x5f,
5079 0xab, 0xff, 0xfd, 0xff, 0xd8, 0xa0, 0xe9, 0xa3,
5080 0x5e, 0x5d, 0x5d, 0x63, 0x6d, 0x6f, 0x62, 0x52,
5081 0x69, 0x64, 0x6f, 0x86, 0x8d, 0x7d, 0x6c, 0x68,
5082 0x61, 0x5d, 0x65, 0x7b, 0x88, 0x82, 0x76, 0x6f,
5083 0x68, 0x63, 0x66, 0x70, 0x73, 0x6f, 0x70, 0x77,
5084 0x68, 0x54, 0x49, 0x55, 0x67, 0x6c, 0x67, 0x61,
5085 0x5b, 0x5f, 0x5a, 0x4f, 0x46, 0x41, 0x51, 0x6c,
5086 0x48, 0x4b, 0x74, 0x72, 0x66, 0x69, 0x4e, 0x45,
5087 0x3b, 0x30, 0x4b, 0x6f, 0x72, 0x6c, 0x60, 0x49,
5088 0x56, 0x61, 0x5c, 0x58, 0x38, 0x34, 0x65, 0x6b,
5089 0x5f, 0x39, 0x35, 0x3a, 0x32, 0x4c, 0x64, 0x53,
5090 0x32, 0x26, 0x66, 0x7b, 0x31, 0x55, 0x44, 0x2f,
5091 0x43, 0x64, 0x7a, 0x79, 0x7b, 0x94, 0x7e, 0x6b,
5092 0x71, 0x78, 0x76, 0x6b, 0x62, 0x5e, 0x57, 0x4e,
5093 0x3f, 0x37, 0x46, 0x7e, 0xc6, 0xf6, 0xfd, 0xf3,
5094 0xe5, 0x9d, 0x67, 0xab, 0xdb, 0xc5, 0x82, 0x00,
5095 0x21, 0x3b, 0x35, 0x39, 0x37, 0x32, 0x42, 0x36,
5096 0x38, 0x34, 0x3b, 0x42, 0x37, 0x28, 0x32, 0x4c,
5097 0x54, 0x53, 0x4e, 0x5f, 0x4e, 0x40, 0x1f, 0x14,
5098 0xfb, 0xea, 0xed, 0xee, 0xf3, 0xe3, 0xeb, 0xe3,
5099 0xef, 0xf2, 0xe4, 0xdf, 0xe8, 0xec, 0xed, 0xef,
5100 0xe7, 0xe8, 0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xeb,
5101 0xe8, 0xe8, 0xe8, 0xe7, 0xe6, 0xe5, 0xe5, 0xe5,
5102 0xeb, 0xec, 0xee, 0xef, 0xf0, 0xef, 0xed, 0xec,
5103 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xec, 0xec,
5104 0xf0, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xec, 0xeb,
5105 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5106 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5107 0xf2, 0xe5, 0xe9, 0xef, 0xe8, 0xe9, 0xe7, 0xd7,
5108 0xe9, 0xeb, 0xdf, 0xe3, 0xc7, 0xd6, 0xed, 0xe1,
5109 0xe6, 0xb8, 0xe7, 0xe6, 0xc6, 0xcb, 0xae, 0x9c,
5110 0x95, 0xce, 0xdb, 0xde, 0xd7, 0x8e, 0x7f, 0x94,
5111 0x8e, 0x9e, 0xc4, 0x93, 0xb7, 0xb7, 0xb3, 0xc3,
5112 0xf0, 0xee, 0xed, 0xeb, 0xe7, 0xe7, 0xeb, 0xeb,
5113 0xed, 0xe1, 0xe4, 0xee, 0xea, 0xe8, 0xeb, 0xea,
5114 0xed, 0xe6, 0xeb, 0xee, 0xe7, 0xeb, 0xf1, 0xeb,
5115 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5116 0xeb, 0xd3, 0xea, 0xe9, 0xd7, 0xb3, 0x4c, 0x7c,
5117 0xab, 0x53, 0xad, 0xf8, 0xff, 0xb0, 0xbf, 0xea,
5118 0xe8, 0xff, 0xdc, 0xd7, 0xff, 0xdc, 0x71, 0x54,
5119 0x69, 0x89, 0x9e, 0x86, 0x7d, 0xbf, 0xff, 0xff,
5120 0xf7, 0xea, 0xa6, 0x60, 0x5d, 0x72, 0x64, 0x49,
5121 0x46, 0x5c, 0x75, 0x77, 0x7b, 0x84, 0x7b, 0x6f,
5122 0x5f, 0x40, 0x31, 0x7c, 0xd2, 0xf3, 0xff, 0xf2,
5123 0xff, 0xfa, 0xd1, 0x7a, 0x64, 0x45, 0x21, 0x00,
5124 0x14, 0x35, 0x5e, 0x73, 0x75, 0x6f, 0x6d, 0x6e,
5125 0x80, 0x81, 0x88, 0x8c, 0x7e, 0x6c, 0x6c, 0x79,
5126 0x7f, 0x6a, 0x62, 0x74, 0x88, 0x86, 0x74, 0x65,
5127 0x5b, 0x5b, 0x65, 0x74, 0x76, 0x6b, 0x64, 0x65,
5128 0x6b, 0x62, 0x5f, 0x68, 0x6c, 0x64, 0x58, 0x52,
5129 0x60, 0x62, 0x54, 0x4a, 0x4b, 0x40, 0x36, 0x3e,
5130 0x47, 0x34, 0x38, 0x5a, 0x77, 0x5c, 0x3c, 0x56,
5131 0x3e, 0x30, 0x2b, 0x2a, 0x37, 0x5d, 0x69, 0x4d,
5132 0x63, 0x60, 0x53, 0x31, 0x46, 0x61, 0x43, 0x3e,
5133 0x3e, 0x3e, 0x5b, 0x5f, 0x39, 0x31, 0x3d, 0x31,
5134 0x48, 0x29, 0x6b, 0x94, 0x53, 0x60, 0x4e, 0x4d,
5135 0x36, 0x50, 0x43, 0x43, 0x5a, 0x76, 0x7a, 0x71,
5136 0x75, 0x5c, 0x40, 0x38, 0x4c, 0x75, 0xa4, 0xc5,
5137 0xee, 0xee, 0xed, 0xd2, 0x8a, 0x39, 0x19, 0x22,
5138 0x22, 0x24, 0x19, 0x4d, 0x93, 0xd5, 0xdf, 0x74,
5139 0x1a, 0x2a, 0x32, 0x32, 0x3d, 0x3d, 0x2e, 0x2d,
5140 0x3e, 0x36, 0x39, 0x40, 0x39, 0x2d, 0x35, 0x49,
5141 0x38, 0x34, 0x2e, 0x43, 0x3c, 0x36, 0x1a, 0x11,
5142 0xf9, 0xf2, 0xee, 0xe2, 0xe0, 0xec, 0xff, 0xcb,
5143 0xf0, 0xf3, 0xe7, 0xf3, 0xf0, 0xe0, 0xea, 0xe7,
5144 0xe6, 0xe7, 0xe7, 0xe8, 0xe9, 0xe9, 0xea, 0xea,
5145 0xe9, 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5,
5146 0xe7, 0xe8, 0xeb, 0xee, 0xef, 0xef, 0xee, 0xee,
5147 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
5148 0xef, 0xee, 0xee, 0xed, 0xed, 0xec, 0xec, 0xec,
5149 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5150 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5151 0xf0, 0xdc, 0xe5, 0xee, 0xda, 0xd7, 0xe4, 0xe1,
5152 0xf6, 0xe8, 0xd3, 0xd2, 0xb5, 0xd7, 0xf7, 0xdd,
5153 0xd9, 0xab, 0xce, 0xe7, 0xba, 0xbc, 0xde, 0xd8,
5154 0xaf, 0xdd, 0xc6, 0xd8, 0xe8, 0xbd, 0x95, 0xa2,
5155 0xb5, 0x8a, 0x90, 0x81, 0xaa, 0xa7, 0xce, 0xed,
5156 0xf4, 0xe7, 0xe9, 0xeb, 0xe1, 0xe7, 0xef, 0xe5,
5157 0xec, 0xdf, 0xe0, 0xe8, 0xe9, 0xeb, 0xed, 0xe8,
5158 0xea, 0xe6, 0xea, 0xec, 0xe7, 0xe9, 0xed, 0xe8,
5159 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5160 0xef, 0xdf, 0xe3, 0xe4, 0xd7, 0xe3, 0x90, 0xbd,
5161 0x72, 0x37, 0x88, 0xe1, 0xff, 0xae, 0xc1, 0xdd,
5162 0xf0, 0xe9, 0xe7, 0xeb, 0xc6, 0x76, 0x5b, 0x85,
5163 0x80, 0x85, 0x82, 0x6a, 0x67, 0x93, 0x9f, 0x76,
5164 0x6a, 0x62, 0x4b, 0x36, 0x22, 0x0b, 0x16, 0x3c,
5165 0x68, 0x68, 0x89, 0x73, 0x4c, 0x40, 0x46, 0x80,
5166 0xde, 0xfd, 0xf1, 0xf1, 0xfb, 0xfc, 0xdf, 0x8e,
5167 0x24, 0x00, 0x0d, 0x0e, 0x5c, 0x5d, 0x35, 0x6c,
5168 0x5d, 0x5e, 0x60, 0x62, 0x65, 0x6e, 0x80, 0x90,
5169 0xa3, 0x95, 0x88, 0x83, 0x7c, 0x73, 0x71, 0x75,
5170 0x6c, 0x62, 0x62, 0x70, 0x7b, 0x7c, 0x7c, 0x7f,
5171 0x7f, 0x78, 0x76, 0x7a, 0x77, 0x6d, 0x69, 0x6d,
5172 0x7a, 0x71, 0x6b, 0x6a, 0x65, 0x5b, 0x57, 0x5a,
5173 0x5a, 0x53, 0x4b, 0x4b, 0x44, 0x2b, 0x24, 0x39,
5174 0x48, 0x5e, 0x68, 0x67, 0x56, 0x52, 0x5b, 0x4b,
5175 0x43, 0x2b, 0x21, 0x29, 0x38, 0x56, 0x74, 0x7d,
5176 0x81, 0x5f, 0x42, 0x27, 0x3c, 0x50, 0x42, 0x5c,
5177 0x4a, 0x34, 0x3e, 0x51, 0x52, 0x58, 0x4e, 0x2a,
5178 0x4a, 0x2f, 0x74, 0x91, 0x4f, 0x52, 0x4e, 0x5e,
5179 0x3f, 0x40, 0x34, 0x51, 0x84, 0xa3, 0x9d, 0x60,
5180 0x6d, 0xb2, 0xec, 0xf8, 0xf5, 0xe5, 0xab, 0x67,
5181 0x2d, 0x19, 0x15, 0x28, 0x33, 0x29, 0x22, 0x26,
5182 0x24, 0x2d, 0x25, 0x3c, 0x5b, 0x9b, 0xdf, 0xc5,
5183 0x43, 0x23, 0x33, 0x38, 0x38, 0x38, 0x26, 0x3a,
5184 0x3d, 0x35, 0x37, 0x40, 0x3a, 0x28, 0x20, 0x25,
5185 0x29, 0x29, 0x2b, 0x4b, 0x4c, 0x44, 0x1c, 0x09,
5186 0xe8, 0xe1, 0xdf, 0xe2, 0xe6, 0xee, 0xe7, 0x73,
5187 0x96, 0xe5, 0xeb, 0xe3, 0xe2, 0xdf, 0xf0, 0xe5,
5188 0xe5, 0xe5, 0xe6, 0xe6, 0xe7, 0xe8, 0xe8, 0xe9,
5189 0xeb, 0xeb, 0xea, 0xe9, 0xe9, 0xe8, 0xe7, 0xe7,
5190 0xe7, 0xe8, 0xeb, 0xed, 0xed, 0xed, 0xec, 0xeb,
5191 0xed, 0xed, 0xee, 0xee, 0xef, 0xef, 0xf0, 0xf0,
5192 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xec,
5193 0xec, 0xec, 0xec, 0xeb, 0xeb, 0xea, 0xea, 0xea,
5194 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5195 0xe8, 0xe5, 0xe0, 0xc7, 0xab, 0xb6, 0xd9, 0xec,
5196 0xf5, 0xe7, 0xec, 0xda, 0xb4, 0xd6, 0xe5, 0xe8,
5197 0xd6, 0xdc, 0xc6, 0xb8, 0xb5, 0xd4, 0xfd, 0xed,
5198 0x82, 0x88, 0xad, 0xcb, 0xaf, 0xba, 0x8c, 0x77,
5199 0xb3, 0x94, 0x83, 0x97, 0xb2, 0x95, 0xe5, 0xe8,
5200 0xea, 0xe3, 0xe6, 0xea, 0xe7, 0xea, 0xea, 0xe2,
5201 0xe1, 0xd8, 0xdc, 0xe6, 0xe9, 0xee, 0xee, 0xe4,
5202 0xed, 0xec, 0xed, 0xed, 0xea, 0xe9, 0xe8, 0xe5,
5203 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5204 0xe2, 0xdf, 0xdd, 0xec, 0xdb, 0xdb, 0x79, 0xab,
5205 0x9f, 0x4a, 0x96, 0xe0, 0xe7, 0xae, 0xda, 0xe8,
5206 0xdd, 0xd2, 0xff, 0xef, 0x7b, 0x50, 0x79, 0x85,
5207 0xa9, 0x74, 0x74, 0x9c, 0x9a, 0x78, 0x5a, 0x45,
5208 0x23, 0x22, 0x23, 0x44, 0x7a, 0x91, 0x89, 0x87,
5209 0x66, 0x46, 0x5b, 0x96, 0xe1, 0xff, 0xfd, 0xfc,
5210 0xff, 0xeb, 0xac, 0x4c, 0x18, 0x0c, 0x06, 0x17,
5211 0x3b, 0x43, 0x45, 0x50, 0x90, 0x7e, 0x6a, 0x78,
5212 0x78, 0x66, 0x5b, 0x64, 0x78, 0x8d, 0xa2, 0xb1,
5213 0xa3, 0x88, 0x6a, 0x5a, 0x5c, 0x65, 0x6f, 0x76,
5214 0x60, 0x60, 0x67, 0x6f, 0x6f, 0x6a, 0x70, 0x7b,
5215 0x80, 0x75, 0x6f, 0x6f, 0x6b, 0x64, 0x65, 0x6c,
5216 0x7c, 0x71, 0x69, 0x68, 0x66, 0x60, 0x61, 0x66,
5217 0x6d, 0x54, 0x43, 0x42, 0x59, 0x82, 0x87, 0x65,
5218 0x86, 0xa7, 0x8d, 0x63, 0x37, 0x28, 0x4c, 0x52,
5219 0x32, 0x3b, 0x56, 0x6b, 0x60, 0x4b, 0x4b, 0x57,
5220 0x51, 0x40, 0x3a, 0x66, 0x78, 0x70, 0x69, 0x39,
5221 0x3a, 0x32, 0x3d, 0x44, 0x3b, 0x3c, 0x3f, 0x31,
5222 0x4e, 0x4e, 0x95, 0x88, 0x3f, 0x49, 0x55, 0x64,
5223 0x3a, 0x31, 0x43, 0x44, 0x5c, 0x8a, 0xa5, 0x73,
5224 0x9d, 0x8e, 0x6c, 0x41, 0x21, 0x19, 0x22, 0x2c,
5225 0x23, 0x2c, 0x2f, 0x29, 0x27, 0x2e, 0x32, 0x31,
5226 0x17, 0x32, 0x2d, 0x20, 0x29, 0x74, 0xda, 0xec,
5227 0xca, 0x50, 0x21, 0x34, 0x45, 0x4c, 0x38, 0x28,
5228 0x49, 0x38, 0x2b, 0x2e, 0x32, 0x33, 0x38, 0x41,
5229 0x48, 0x3e, 0x34, 0x4e, 0x4f, 0x4c, 0x27, 0x15,
5230 0xed, 0xed, 0xe2, 0xd8, 0xdd, 0xe9, 0xe2, 0x6c,
5231 0x9c, 0xff, 0xf4, 0xd8, 0xe6, 0xdf, 0xe1, 0xe1,
5232 0xe3, 0xe4, 0xe4, 0xe5, 0xe6, 0xe6, 0xe7, 0xe7,
5233 0xe7, 0xe7, 0xe6, 0xe5, 0xe5, 0xe4, 0xe3, 0xe3,
5234 0xe9, 0xea, 0xeb, 0xec, 0xeb, 0xe9, 0xe7, 0xe5,
5235 0xeb, 0xec, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf0,
5236 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec,
5237 0xed, 0xed, 0xec, 0xeb, 0xeb, 0xea, 0xe9, 0xe9,
5238 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5239 0xea, 0xed, 0xf0, 0xf1, 0xd9, 0xaa, 0xa0, 0xc0,
5240 0xf8, 0xea, 0xe7, 0xdf, 0xc7, 0xd1, 0xc1, 0xc3,
5241 0xea, 0xd3, 0xab, 0x9f, 0xdb, 0xf9, 0xdd, 0xe9,
5242 0xc1, 0x72, 0x8b, 0xcb, 0xb5, 0xda, 0xaa, 0x55,
5243 0x72, 0x96, 0xad, 0xa1, 0xa0, 0x97, 0xf5, 0xe2,
5244 0xe7, 0xeb, 0xe6, 0xe3, 0xe8, 0xe4, 0xde, 0xe2,
5245 0xe2, 0xde, 0xe5, 0xeb, 0xeb, 0xed, 0xea, 0xdd,
5246 0xe9, 0xec, 0xed, 0xee, 0xef, 0xed, 0xe9, 0xe9,
5247 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5248 0xf1, 0xea, 0xcf, 0xdf, 0xe7, 0xeb, 0x7f, 0xa5,
5249 0xbe, 0x5d, 0xb4, 0xe8, 0xd1, 0xa0, 0xd7, 0xed,
5250 0xf1, 0xff, 0xd1, 0x7e, 0x69, 0x84, 0x84, 0x6a,
5251 0x70, 0x81, 0x93, 0x6c, 0x1d, 0x07, 0x31, 0x53,
5252 0x73, 0x93, 0x9a, 0x7b, 0x4e, 0x39, 0x62, 0xa7,
5253 0xf5, 0xff, 0xf2, 0xf8, 0xff, 0xf6, 0x9e, 0x26,
5254 0x03, 0x23, 0x26, 0x21, 0x32, 0x36, 0x45, 0x74,
5255 0x73, 0x79, 0x6a, 0x70, 0x87, 0x6b, 0x7b, 0x60,
5256 0x79, 0x6c, 0x6b, 0x77, 0x7e, 0x7c, 0x81, 0x8c,
5257 0x72, 0x79, 0x7a, 0x72, 0x6a, 0x6c, 0x76, 0x7f,
5258 0x5c, 0x58, 0x5d, 0x6e, 0x79, 0x78, 0x74, 0x76,
5259 0x77, 0x73, 0x76, 0x7f, 0x7e, 0x74, 0x70, 0x73,
5260 0x72, 0x69, 0x67, 0x6f, 0x73, 0x6b, 0x61, 0x5d,
5261 0x54, 0x4a, 0x54, 0x4c, 0x4a, 0x9a, 0xe4, 0xdb,
5262 0xbb, 0xae, 0x91, 0x83, 0x65, 0x60, 0x67, 0x2c,
5263 0x3e, 0x66, 0x80, 0x7a, 0x6d, 0x65, 0x5c, 0x54,
5264 0x7d, 0x82, 0x62, 0x46, 0x38, 0x4e, 0x67, 0x38,
5265 0x25, 0x40, 0x62, 0x65, 0x46, 0x35, 0x3c, 0x42,
5266 0x4b, 0x52, 0x98, 0x76, 0x36, 0x35, 0x37, 0x36,
5267 0x43, 0x35, 0x43, 0x20, 0x4c, 0x7b, 0x8e, 0x7e,
5268 0x3e, 0x2a, 0x23, 0x2c, 0x2e, 0x23, 0x22, 0x2d,
5269 0x24, 0x27, 0x21, 0x1c, 0x26, 0x35, 0x32, 0x22,
5270 0x23, 0x2a, 0x2a, 0x2a, 0x25, 0x45, 0x91, 0xc0,
5271 0xd8, 0x97, 0x4d, 0x45, 0x54, 0x5c, 0x6d, 0x66,
5272 0x4a, 0x38, 0x26, 0x22, 0x26, 0x28, 0x2b, 0x2e,
5273 0x3b, 0x3a, 0x3d, 0x5e, 0x5d, 0x4e, 0x1b, 0x00,
5274 0xe7, 0xdf, 0xdf, 0xec, 0xf5, 0xce, 0x9d, 0x45,
5275 0x64, 0xc0, 0xf4, 0xfa, 0xe9, 0xdd, 0xe7, 0xde,
5276 0xe2, 0xe2, 0xe3, 0xe3, 0xe4, 0xe5, 0xe5, 0xe6,
5277 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe6, 0xe5, 0xe5,
5278 0xe9, 0xea, 0xeb, 0xeb, 0xe9, 0xe7, 0xe4, 0xe2,
5279 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xee, 0xef, 0xef,
5280 0xe9, 0xea, 0xea, 0xeb, 0xeb, 0xec, 0xec, 0xec,
5281 0xee, 0xee, 0xed, 0xec, 0xea, 0xe9, 0xe8, 0xe8,
5282 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5283 0xee, 0xe9, 0xe5, 0xf5, 0xf4, 0xbf, 0xa0, 0xbb,
5284 0xcf, 0xda, 0xd1, 0xe7, 0xdc, 0xd4, 0xcf, 0xc6,
5285 0xcd, 0xdf, 0xb3, 0x9a, 0xc4, 0xda, 0xcd, 0xc6,
5286 0xc9, 0x81, 0x74, 0xb7, 0xb4, 0xba, 0xb9, 0x76,
5287 0x69, 0x7d, 0xb0, 0x84, 0x88, 0xa5, 0xec, 0xf7,
5288 0xee, 0xf5, 0xe7, 0xda, 0xdd, 0xd8, 0xd6, 0xe6,
5289 0xea, 0xeb, 0xf1, 0xef, 0xe6, 0xe7, 0xe6, 0xda,
5290 0xe0, 0xe7, 0xe9, 0xeb, 0xf2, 0xef, 0xea, 0xed,
5291 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5292 0xe5, 0xee, 0xd9, 0xdb, 0xeb, 0xfb, 0x96, 0x9a,
5293 0xbe, 0x6e, 0xc8, 0xf5, 0xda, 0x9a, 0xc8, 0xef,
5294 0xfd, 0xd7, 0x7c, 0x4e, 0x75, 0x91, 0x88, 0x8e,
5295 0x7c, 0x7f, 0x87, 0x7e, 0x7a, 0x95, 0x99, 0x73,
5296 0x4d, 0x52, 0x77, 0xc7, 0xff, 0xff, 0xf2, 0xff,
5297 0xf5, 0xe9, 0x83, 0x24, 0x00, 0x12, 0x55, 0x58,
5298 0x79, 0xaa, 0x76, 0x65, 0x54, 0x3c, 0x74, 0x83,
5299 0x5f, 0x5a, 0x80, 0x97, 0x95, 0x87, 0xbb, 0xc3,
5300 0xa7, 0x85, 0x6e, 0x73, 0x77, 0x69, 0x5d, 0x5c,
5301 0x43, 0x52, 0x5e, 0x62, 0x64, 0x68, 0x65, 0x5d,
5302 0x53, 0x59, 0x69, 0x7a, 0x7e, 0x7a, 0x80, 0x8c,
5303 0x8b, 0x82, 0x7c, 0x7c, 0x77, 0x6c, 0x69, 0x6e,
5304 0x77, 0x6a, 0x64, 0x69, 0x6b, 0x65, 0x5c, 0x59,
5305 0x5f, 0x47, 0x49, 0x4c, 0x69, 0xbf, 0xd1, 0x7f,
5306 0xa4, 0xd3, 0x8e, 0x43, 0x3d, 0x23, 0x26, 0x63,
5307 0x43, 0x52, 0x55, 0x56, 0x61, 0x61, 0x5c, 0x60,
5308 0x50, 0x6a, 0x79, 0x51, 0x41, 0x42, 0x30, 0x45,
5309 0x30, 0x3a, 0x49, 0x4f, 0x49, 0x3e, 0x34, 0x2d,
5310 0x37, 0x3c, 0x8d, 0x7c, 0x5d, 0x58, 0x54, 0x4d,
5311 0x59, 0x56, 0x56, 0x4c, 0xa7, 0x9e, 0x87, 0x80,
5312 0x56, 0x3d, 0x2a, 0x31, 0x42, 0x44, 0x33, 0x23,
5313 0x25, 0x29, 0x31, 0x38, 0x39, 0x39, 0x3d, 0x44,
5314 0x59, 0x43, 0x48, 0x63, 0x58, 0x3b, 0x4e, 0x7c,
5315 0xb9, 0xce, 0x7a, 0x3f, 0x4b, 0x4f, 0x4b, 0x35,
5316 0x36, 0x31, 0x2f, 0x34, 0x3b, 0x3d, 0x39, 0x34,
5317 0x3b, 0x39, 0x37, 0x53, 0x50, 0x46, 0x1d, 0x09,
5318 0xe9, 0xe5, 0xe4, 0xd2, 0xa7, 0x49, 0x32, 0x4e,
5319 0x5e, 0x33, 0x69, 0xdf, 0xff, 0xe7, 0xdb, 0xd6,
5320 0xe1, 0xe1, 0xe2, 0xe2, 0xe3, 0xe4, 0xe4, 0xe5,
5321 0xe9, 0xe9, 0xe9, 0xe8, 0xe7, 0xe6, 0xe6, 0xe6,
5322 0xe5, 0xe6, 0xe8, 0xe9, 0xe9, 0xe7, 0xe5, 0xe4,
5323 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xec, 0xed, 0xee,
5324 0xe8, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xec, 0xed,
5325 0xef, 0xef, 0xed, 0xec, 0xea, 0xe9, 0xe7, 0xe7,
5326 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5327 0xe3, 0xf9, 0xf2, 0xdf, 0xe0, 0xd5, 0xb3, 0x99,
5328 0xb9, 0xdc, 0xee, 0xf9, 0xcd, 0xc3, 0xd3, 0xd3,
5329 0xcd, 0xd9, 0xb5, 0xd1, 0xe1, 0xc9, 0xed, 0xff,
5330 0xad, 0x83, 0x66, 0x89, 0xc6, 0xd3, 0xc2, 0x79,
5331 0x85, 0x7e, 0xae, 0x83, 0x94, 0xa7, 0xcc, 0xe3,
5332 0xe6, 0xeb, 0xe8, 0xdd, 0xd4, 0xd3, 0xde, 0xec,
5333 0xe6, 0xe9, 0xed, 0xe3, 0xd6, 0xdc, 0xe6, 0xe2,
5334 0xdf, 0xe9, 0xe7, 0xe7, 0xee, 0xe7, 0xde, 0xe1,
5335 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5336 0xe3, 0xec, 0xea, 0xd5, 0xd0, 0xe9, 0xaa, 0x98,
5337 0xb3, 0x62, 0x9f, 0xdd, 0xe0, 0xa2, 0xdd, 0xff,
5338 0xb3, 0x79, 0x6d, 0x8d, 0x90, 0x7f, 0x7e, 0x85,
5339 0x9d, 0x6f, 0x71, 0x86, 0x6f, 0x65, 0x9c, 0xdb,
5340 0xf6, 0xff, 0xff, 0xfe, 0xf7, 0xc3, 0x68, 0x26,
5341 0x02, 0x0c, 0x17, 0x2f, 0x47, 0x4d, 0x41, 0x29,
5342 0x4d, 0x48, 0x28, 0x5a, 0x51, 0x39, 0x87, 0x88,
5343 0xa2, 0xb6, 0xde, 0xc7, 0xa1, 0x96, 0xc4, 0xb8,
5344 0x97, 0x70, 0x5b, 0x6e, 0x82, 0x7b, 0x6e, 0x6b,
5345 0x6a, 0x67, 0x5d, 0x57, 0x64, 0x77, 0x79, 0x6d,
5346 0x66, 0x72, 0x81, 0x81, 0x6f, 0x63, 0x72, 0x8a,
5347 0xa2, 0x92, 0x84, 0x7c, 0x74, 0x6c, 0x6f, 0x79,
5348 0x75, 0x6b, 0x63, 0x61, 0x5d, 0x57, 0x58, 0x5f,
5349 0x5a, 0x55, 0x42, 0x38, 0x7a, 0xea, 0xee, 0x91,
5350 0x95, 0x33, 0x48, 0x65, 0x32, 0x3b, 0x64, 0x59,
5351 0x58, 0x5c, 0x60, 0x75, 0x82, 0x67, 0x4e, 0x58,
5352 0x88, 0x56, 0x3a, 0x2d, 0x38, 0x30, 0x24, 0x57,
5353 0x5e, 0x59, 0x4e, 0x45, 0x42, 0x3d, 0x39, 0x39,
5354 0x40, 0x56, 0xa2, 0x6a, 0x3f, 0x38, 0x3b, 0x30,
5355 0x4b, 0x59, 0x6b, 0x96, 0xc7, 0x6a, 0x87, 0x92,
5356 0x7a, 0x49, 0x2c, 0x3b, 0x49, 0x41, 0x42, 0x52,
5357 0x3b, 0x4a, 0x5f, 0x6b, 0x69, 0x60, 0x55, 0x4e,
5358 0x62, 0x6a, 0x6e, 0x63, 0x5f, 0x5a, 0x46, 0x3a,
5359 0x82, 0xd2, 0xce, 0x7c, 0x47, 0x41, 0x47, 0x47,
5360 0x47, 0x3f, 0x32, 0x27, 0x26, 0x2b, 0x2f, 0x30,
5361 0x30, 0x39, 0x45, 0x65, 0x5e, 0x4b, 0x1c, 0x06,
5362 0xea, 0xe4, 0x97, 0x22, 0x0f, 0x10, 0x1c, 0x34,
5363 0x2e, 0x24, 0x0e, 0x1a, 0x76, 0xd0, 0xe4, 0xde,
5364 0xe0, 0xe0, 0xe1, 0xe2, 0xe2, 0xe3, 0xe4, 0xe4,
5365 0xe1, 0xe1, 0xe0, 0xdf, 0xdf, 0xde, 0xdd, 0xdd,
5366 0xe1, 0xe3, 0xe5, 0xe8, 0xe9, 0xe9, 0xe8, 0xe7,
5367 0xe3, 0xe4, 0xe5, 0xe7, 0xe9, 0xeb, 0xec, 0xed,
5368 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xec, 0xed,
5369 0xf0, 0xef, 0xee, 0xec, 0xea, 0xe8, 0xe7, 0xe6,
5370 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5371 0xec, 0xe9, 0xe7, 0xe8, 0xe9, 0xe7, 0xe3, 0xdf,
5372 0x9d, 0xa4, 0xcb, 0xd3, 0xb6, 0xd6, 0xd9, 0xcc,
5373 0xdf, 0xc0, 0xad, 0xce, 0xf1, 0xe8, 0xe4, 0xf6,
5374 0xdf, 0xcb, 0xb7, 0x7e, 0xb9, 0xe4, 0xc7, 0x8a,
5375 0x77, 0x97, 0xb5, 0x82, 0x92, 0xa5, 0xdf, 0xe8,
5376 0xd4, 0xd7, 0xe6, 0xe7, 0xd5, 0xd7, 0xea, 0xf1,
5377 0xd8, 0xdc, 0xdf, 0xd3, 0xc6, 0xd4, 0xe9, 0xed,
5378 0xe7, 0xf0, 0xea, 0xe5, 0xe8, 0xdc, 0xcd, 0xd0,
5379 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5380 0xf4, 0xeb, 0xf7, 0xde, 0xcc, 0xe4, 0xbc, 0x99,
5381 0xcc, 0x6a, 0x8a, 0xdc, 0xec, 0xa6, 0xde, 0xe1,
5382 0x86, 0x88, 0x83, 0x7b, 0x7b, 0x80, 0x72, 0x5b,
5383 0x4d, 0x6c, 0x8d, 0x96, 0xa8, 0xdf, 0xf0, 0xc6,
5384 0xda, 0x8e, 0x31, 0x13, 0x30, 0x3b, 0x27, 0x19,
5385 0x48, 0x5f, 0x84, 0x71, 0x66, 0x6b, 0x46, 0x35,
5386 0x44, 0x36, 0x4d, 0x61, 0x40, 0x6a, 0xc5, 0xbb,
5387 0xc8, 0xba, 0xb1, 0xbe, 0xb0, 0x85, 0xb8, 0xac,
5388 0x9e, 0x7f, 0x6b, 0x6a, 0x61, 0x51, 0x5a, 0x72,
5389 0x6a, 0x81, 0x90, 0x8c, 0x87, 0x87, 0x80, 0x73,
5390 0x71, 0x6f, 0x70, 0x71, 0x6b, 0x67, 0x73, 0x85,
5391 0x6f, 0x69, 0x68, 0x6d, 0x6d, 0x68, 0x68, 0x6f,
5392 0x5f, 0x61, 0x67, 0x69, 0x60, 0x53, 0x54, 0x5d,
5393 0x60, 0x59, 0x53, 0x54, 0x47, 0x27, 0x16, 0x1e,
5394 0x35, 0x45, 0x46, 0x31, 0x4a, 0x4e, 0x28, 0x40,
5395 0x59, 0x75, 0x74, 0x68, 0x6f, 0x6e, 0x67, 0x6f,
5396 0x68, 0x45, 0x2f, 0x4c, 0x42, 0x29, 0x3e, 0x3b,
5397 0x56, 0x49, 0x35, 0x33, 0x44, 0x4e, 0x4a, 0x48,
5398 0x2e, 0x6a, 0xba, 0x53, 0x17, 0x29, 0x4c, 0x47,
5399 0x3d, 0x32, 0x57, 0xc8, 0xcc, 0x3b, 0x8b, 0x75,
5400 0x65, 0x68, 0x67, 0x60, 0x5e, 0x64, 0x68, 0x68,
5401 0x42, 0x5f, 0x69, 0x56, 0x4b, 0x55, 0x58, 0x4d,
5402 0x61, 0x64, 0x64, 0x59, 0x60, 0x65, 0x4c, 0x3c,
5403 0x6a, 0x96, 0xd4, 0x96, 0x35, 0x31, 0x3c, 0x37,
5404 0x4a, 0x45, 0x39, 0x2c, 0x27, 0x2d, 0x33, 0x36,
5405 0x39, 0x41, 0x4b, 0x66, 0x59, 0x45, 0x1a, 0x09,
5406 0xf3, 0xf7, 0xd2, 0xa4, 0xbe, 0xad, 0x8a, 0x84,
5407 0x5f, 0x56, 0x9b, 0xa0, 0xd3, 0xe2, 0xec, 0xd5,
5408 0xde, 0xde, 0xdf, 0xe0, 0xe0, 0xe1, 0xe2, 0xe2,
5409 0xdf, 0xe0, 0xe1, 0xe2, 0xe4, 0xe5, 0xe6, 0xe7,
5410 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
5411 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5412 0xf0, 0xd4, 0xf4, 0xe9, 0xe1, 0xe5, 0xf2, 0xe7,
5413 0xea, 0xec, 0xee, 0xef, 0xee, 0xeb, 0xe7, 0xe5,
5414 0xef, 0xe8, 0xe3, 0xe6, 0xe9, 0xe4, 0xe1, 0xe3,
5415 0xe1, 0xda, 0xe0, 0xe8, 0xd1, 0xb2, 0xe4, 0xf1,
5416 0xda, 0xcb, 0xd9, 0xc6, 0xcf, 0xd1, 0xd9, 0xc6,
5417 0xec, 0xc1, 0xb8, 0xd2, 0xea, 0xec, 0xd1, 0xd5,
5418 0xd3, 0xd9, 0xda, 0x9f, 0x91, 0xba, 0xd8, 0x9d,
5419 0x83, 0x62, 0x88, 0x87, 0x6d, 0x8c, 0xe3, 0xe7,
5420 0xe1, 0xf1, 0xd4, 0xcc, 0xd5, 0xd7, 0xea, 0xf5,
5421 0xcb, 0xd9, 0xee, 0xf4, 0xd3, 0xcd, 0xe8, 0xd8,
5422 0xdb, 0xea, 0xea, 0xe9, 0xe2, 0xc7, 0xc4, 0xe4,
5423 0xeb, 0xef, 0xeb, 0xe0, 0xdf, 0xe8, 0xe9, 0xe3,
5424 0xe9, 0xef, 0xe7, 0xee, 0xe4, 0xc8, 0xc8, 0xa9,
5425 0xad, 0x4f, 0x5e, 0xb6, 0xe5, 0xac, 0xbb, 0x7b,
5426 0x77, 0x66, 0x67, 0x60, 0x4e, 0x70, 0xc3, 0xfe,
5427 0xf8, 0xff, 0xcd, 0x92, 0x85, 0x6f, 0x4b, 0x41,
5428 0x1a, 0x24, 0x21, 0x1f, 0x3f, 0x6b, 0x74, 0x64,
5429 0x4a, 0x4f, 0x40, 0x34, 0x36, 0x33, 0x49, 0x78,
5430 0x54, 0x2b, 0x38, 0x7b, 0x54, 0x49, 0xac, 0xb2,
5431 0xb4, 0xb3, 0xaf, 0xb6, 0xa0, 0x7e, 0xbf, 0xb3,
5432 0x8d, 0x71, 0x5d, 0x64, 0x72, 0x73, 0x6b, 0x66,
5433 0x73, 0x7c, 0x81, 0x7f, 0x82, 0x87, 0x81, 0x75,
5434 0x62, 0x6f, 0x76, 0x72, 0x70, 0x75, 0x78, 0x76,
5435 0x64, 0x6d, 0x7a, 0x83, 0x82, 0x78, 0x6b, 0x61,
5436 0x58, 0x5a, 0x5f, 0x65, 0x67, 0x62, 0x57, 0x4d,
5437 0x54, 0x51, 0x54, 0x5f, 0x4a, 0x42, 0x6d, 0x86,
5438 0x7d, 0x66, 0x57, 0x44, 0x2c, 0x37, 0x53, 0x59,
5439 0x4f, 0x5b, 0x68, 0x6b, 0x63, 0x5a, 0x57, 0x59,
5440 0x71, 0x43, 0x3f, 0x40, 0x4e, 0x52, 0x34, 0x3d,
5441 0x3c, 0x44, 0x3f, 0x2e, 0x2d, 0x48, 0x6b, 0x7f,
5442 0x59, 0x76, 0x95, 0x65, 0x58, 0x5e, 0x32, 0x3f,
5443 0x48, 0x31, 0x50, 0xe2, 0x87, 0x41, 0x87, 0x76,
5444 0x5b, 0x50, 0x5a, 0x4c, 0x42, 0x55, 0x5b, 0x5d,
5445 0x5d, 0x58, 0x63, 0x4e, 0x49, 0x57, 0x47, 0x4a,
5446 0x4f, 0x6c, 0x6b, 0x52, 0x4e, 0x57, 0x5b, 0x5e,
5447 0x42, 0x4c, 0x9b, 0xca, 0x89, 0x47, 0x46, 0x50,
5448 0x2e, 0x40, 0x37, 0x38, 0x37, 0x36, 0x42, 0x34,
5449 0x2a, 0x3c, 0x29, 0x3e, 0x4f, 0x46, 0x1d, 0x11,
5450 0xe7, 0xeb, 0xdb, 0xbf, 0xdb, 0xd7, 0xda, 0xfa,
5451 0xe2, 0xf2, 0xe7, 0xc8, 0xec, 0xe3, 0xe3, 0xd3,
5452 0xde, 0xde, 0xdf, 0xdf, 0xe0, 0xe1, 0xe1, 0xe2,
5453 0xdf, 0xe0, 0xe1, 0xe3, 0xe4, 0xe6, 0xe7, 0xe7,
5454 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
5455 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5456 0xee, 0xdd, 0xe8, 0xef, 0xe1, 0xe8, 0xec, 0xec,
5457 0xea, 0xeb, 0xed, 0xee, 0xed, 0xeb, 0xe8, 0xe5,
5458 0xe8, 0xef, 0xea, 0xe6, 0xed, 0xec, 0xe5, 0xe7,
5459 0xc8, 0xdf, 0xdd, 0xe3, 0xcf, 0x95, 0xc3, 0xea,
5460 0xd8, 0xdb, 0xce, 0xba, 0xe5, 0xe0, 0xce, 0xc9,
5461 0xf0, 0xa3, 0xdf, 0xf6, 0xed, 0xd9, 0xc2, 0xbe,
5462 0xc5, 0xf7, 0xd7, 0xd1, 0xa9, 0x6a, 0xaf, 0x86,
5463 0x79, 0x82, 0x9f, 0x95, 0x9c, 0xb5, 0xe7, 0xea,
5464 0xcb, 0xcb, 0xd6, 0xde, 0xc8, 0xd7, 0xfa, 0xdf,
5465 0xd8, 0xf2, 0xdc, 0xe2, 0xd6, 0xcd, 0xee, 0xd2,
5466 0xc8, 0xe0, 0xe3, 0xeb, 0xdc, 0xd3, 0xf0, 0xf2,
5467 0xf2, 0xeb, 0xe8, 0xee, 0xf0, 0xeb, 0xe7, 0xe8,
5468 0xe4, 0xea, 0xe2, 0xea, 0xf1, 0xe5, 0xc4, 0xb7,
5469 0xae, 0x4f, 0x7f, 0xc1, 0xd5, 0x87, 0x4b, 0x3a,
5470 0x64, 0x75, 0xb4, 0xef, 0xfa, 0xf9, 0xf9, 0xec,
5471 0xaa, 0x86, 0x43, 0x26, 0x3e, 0x43, 0x38, 0x43,
5472 0x64, 0x4e, 0x4d, 0x76, 0x89, 0x5f, 0x38, 0x3f,
5473 0x61, 0x3b, 0x30, 0x49, 0x56, 0x4c, 0x41, 0x40,
5474 0x44, 0x56, 0x64, 0x76, 0x4e, 0x5d, 0xc3, 0xce,
5475 0xb1, 0xb6, 0xc5, 0xd4, 0xb6, 0x89, 0xc1, 0xb4,
5476 0x84, 0x6f, 0x65, 0x72, 0x7f, 0x7a, 0x6a, 0x5f,
5477 0x6b, 0x6e, 0x6b, 0x68, 0x6e, 0x76, 0x70, 0x61,
5478 0x5e, 0x78, 0x8b, 0x84, 0x74, 0x70, 0x76, 0x7c,
5479 0x81, 0x7f, 0x7b, 0x75, 0x6d, 0x66, 0x5f, 0x5b,
5480 0x71, 0x72, 0x74, 0x76, 0x76, 0x6e, 0x61, 0x57,
5481 0x5f, 0x43, 0x4f, 0x66, 0x37, 0x15, 0x2b, 0x29,
5482 0x0e, 0x3d, 0x58, 0x53, 0x42, 0x27, 0x23, 0x3d,
5483 0x6a, 0x66, 0x6b, 0x72, 0x6a, 0x5b, 0x5d, 0x6b,
5484 0x73, 0x3c, 0x34, 0x3b, 0x40, 0x38, 0x2c, 0x4f,
5485 0x36, 0x36, 0x46, 0x59, 0x54, 0x3d, 0x38, 0x45,
5486 0x11, 0x54, 0x8c, 0x66, 0x43, 0x3d, 0x30, 0x4f,
5487 0x67, 0x33, 0x9d, 0xf7, 0x6f, 0x2b, 0x66, 0x83,
5488 0x67, 0x52, 0x62, 0x64, 0x59, 0x55, 0x48, 0x48,
5489 0x59, 0x45, 0x49, 0x56, 0x5c, 0x56, 0x4b, 0x55,
5490 0x5c, 0x51, 0x5e, 0x5f, 0x4d, 0x5a, 0x6c, 0x5c,
5491 0x55, 0x49, 0x6f, 0xbc, 0xc1, 0x69, 0x28, 0x2d,
5492 0x47, 0x31, 0x28, 0x27, 0x41, 0x48, 0x37, 0x4f,
5493 0x60, 0x59, 0x49, 0x58, 0x50, 0x49, 0x24, 0x07,
5494 0xe1, 0xe1, 0xda, 0xba, 0xc3, 0xb0, 0xa2, 0xb4,
5495 0xaf, 0xda, 0xb8, 0xc2, 0xeb, 0xe0, 0xe9, 0xe1,
5496 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0, 0xe1, 0xe1,
5497 0xe0, 0xe1, 0xe2, 0xe3, 0xe5, 0xe6, 0xe7, 0xe8,
5498 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
5499 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5500 0xe9, 0xeb, 0xdb, 0xf0, 0xe2, 0xea, 0xe8, 0xef,
5501 0xea, 0xeb, 0xec, 0xec, 0xec, 0xea, 0xe8, 0xe7,
5502 0xdd, 0xed, 0xed, 0xe7, 0xec, 0xee, 0xe8, 0xe7,
5503 0xdb, 0xe1, 0xdf, 0xea, 0xd6, 0xaf, 0xe3, 0xec,
5504 0xd9, 0xd4, 0xd9, 0xcd, 0xd1, 0xd5, 0xe6, 0xe2,
5505 0xc6, 0xcb, 0xf3, 0xc9, 0xe9, 0xd8, 0xc8, 0xe4,
5506 0xe9, 0xc2, 0xd7, 0xd0, 0xc3, 0xae, 0xae, 0xa2,
5507 0x8e, 0x7e, 0x73, 0x61, 0x83, 0xa6, 0xd8, 0xe9,
5508 0xd9, 0xcd, 0xd6, 0xe4, 0xd5, 0xde, 0xf2, 0xd5,
5509 0xd7, 0xe3, 0xc9, 0xdb, 0xd7, 0xbb, 0xdd, 0xec,
5510 0xde, 0xd9, 0xe9, 0xf2, 0xd7, 0xd7, 0xec, 0xda,
5511 0xe6, 0xe3, 0xe7, 0xef, 0xee, 0xe3, 0xe0, 0xe5,
5512 0xe7, 0xda, 0xe2, 0xf0, 0xe3, 0xf4, 0xbc, 0x96,
5513 0xd4, 0x61, 0x6e, 0xdf, 0xbc, 0x67, 0xaa, 0xff,
5514 0xff, 0xef, 0xff, 0xf9, 0x9f, 0x3c, 0x1a, 0x1e,
5515 0x1f, 0x29, 0x36, 0x4f, 0x5f, 0x51, 0x54, 0x78,
5516 0x57, 0x69, 0x62, 0x45, 0x46, 0x67, 0x66, 0x40,
5517 0x68, 0x3c, 0x3b, 0x4d, 0x3a, 0x2f, 0x49, 0x5f,
5518 0x57, 0x61, 0x64, 0x56, 0x22, 0x50, 0xcb, 0xd4,
5519 0xcd, 0xce, 0xc5, 0xac, 0x96, 0x95, 0xd6, 0xb8,
5520 0x8f, 0x78, 0x68, 0x70, 0x7c, 0x7b, 0x74, 0x70,
5521 0x72, 0x6e, 0x67, 0x69, 0x7b, 0x8e, 0x8b, 0x7c,
5522 0x80, 0x85, 0x82, 0x7b, 0x7b, 0x84, 0x88, 0x84,
5523 0x6f, 0x72, 0x76, 0x77, 0x75, 0x6f, 0x68, 0x63,
5524 0x69, 0x69, 0x6a, 0x6b, 0x6b, 0x63, 0x57, 0x4d,
5525 0x4e, 0x4b, 0x50, 0x54, 0x52, 0x93, 0xf4, 0xff,
5526 0xfc, 0xee, 0xb5, 0x73, 0x4a, 0x30, 0x2f, 0x49,
5527 0x4e, 0x6f, 0x7b, 0x68, 0x60, 0x6a, 0x60, 0x44,
5528 0x42, 0x3c, 0x46, 0x42, 0x4a, 0x5c, 0x5b, 0x65,
5529 0x4d, 0x4c, 0x4f, 0x57, 0x62, 0x60, 0x4c, 0x36,
5530 0x31, 0x7e, 0xa3, 0x6b, 0x2f, 0x29, 0x4e, 0x80,
5531 0x5a, 0x1e, 0xcf, 0xd5, 0x4d, 0x3e, 0x65, 0x8d,
5532 0x76, 0x4d, 0x53, 0x5f, 0x5c, 0x57, 0x50, 0x5c,
5533 0x4f, 0x5e, 0x60, 0x5e, 0x53, 0x49, 0x50, 0x4e,
5534 0x48, 0x50, 0x40, 0x3d, 0x53, 0x4d, 0x42, 0x55,
5535 0x2d, 0x30, 0x3f, 0x8f, 0xdd, 0xb7, 0x7a, 0x88,
5536 0x82, 0x92, 0x8d, 0x6a, 0x6b, 0x61, 0x35, 0x36,
5537 0x2f, 0x32, 0x30, 0x3c, 0x2d, 0x2d, 0x17, 0x0e,
5538 0xdd, 0xe0, 0xe0, 0xb4, 0xb9, 0xb3, 0xa5, 0xb2,
5539 0xb9, 0xce, 0xb4, 0xe2, 0xe9, 0xdb, 0xe6, 0xde,
5540 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0, 0xe0,
5541 0xe1, 0xe1, 0xe2, 0xe4, 0xe5, 0xe7, 0xe8, 0xe9,
5542 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5543 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5544 0xe2, 0xf3, 0xda, 0xe3, 0xe6, 0xea, 0xec, 0xed,
5545 0xe9, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xe9, 0xe8,
5546 0xda, 0xdd, 0xe7, 0xeb, 0xe7, 0xe7, 0xe9, 0xe5,
5547 0xd1, 0xc2, 0xd9, 0xf6, 0xe5, 0xbc, 0xd5, 0xd4,
5548 0xef, 0xe7, 0xcd, 0xbd, 0xc1, 0xc6, 0xd9, 0xe1,
5549 0xbf, 0xdb, 0xfa, 0xdc, 0xd5, 0xbb, 0xd2, 0xdc,
5550 0xa9, 0xcd, 0xff, 0xff, 0xf0, 0xc0, 0xa5, 0x9f,
5551 0xae, 0x7c, 0x7e, 0x91, 0xb2, 0xc2, 0xe4, 0xe2,
5552 0xcc, 0xe4, 0xcb, 0xc2, 0xea, 0xf0, 0xd1, 0xc4,
5553 0xfc, 0xe9, 0xe4, 0xee, 0xe0, 0xbd, 0xbf, 0xe7,
5554 0xe2, 0xb7, 0xde, 0xeb, 0xde, 0xeb, 0xe0, 0xdf,
5555 0xd9, 0xe4, 0xeb, 0xe8, 0xe1, 0xdf, 0xe3, 0xe5,
5556 0xf0, 0xee, 0xec, 0xf3, 0xe0, 0xff, 0xbf, 0x86,
5557 0xdd, 0x60, 0x4d, 0xd7, 0xff, 0xcd, 0xa5, 0xdc,
5558 0x8a, 0x3b, 0x2b, 0x51, 0x40, 0x1b, 0x32, 0x63,
5559 0x62, 0x57, 0x50, 0x5c, 0x66, 0x5a, 0x4e, 0x51,
5560 0x6f, 0x67, 0x87, 0x9b, 0x88, 0x89, 0x95, 0x84,
5561 0x43, 0x27, 0x2a, 0x43, 0x46, 0x3f, 0x41, 0x42,
5562 0x31, 0x37, 0x34, 0x3f, 0x3f, 0x5d, 0xa8, 0xbf,
5563 0xaa, 0x7a, 0x74, 0x97, 0xa9, 0x90, 0xb8, 0xb8,
5564 0x91, 0x7a, 0x69, 0x6e, 0x77, 0x78, 0x77, 0x79,
5565 0x73, 0x67, 0x57, 0x54, 0x67, 0x7a, 0x74, 0x61,
5566 0x61, 0x6f, 0x71, 0x61, 0x51, 0x51, 0x59, 0x5f,
5567 0x62, 0x69, 0x71, 0x77, 0x74, 0x6a, 0x5e, 0x55,
5568 0x5a, 0x5a, 0x5b, 0x5e, 0x60, 0x5b, 0x52, 0x4a,
5569 0x58, 0x4d, 0x50, 0x98, 0xe9, 0xfd, 0xd1, 0x8a,
5570 0x47, 0x2a, 0x20, 0x24, 0x27, 0x3b, 0x47, 0x3a,
5571 0x53, 0x5a, 0x68, 0x74, 0x6e, 0x59, 0x46, 0x3f,
5572 0x73, 0x82, 0x81, 0x66, 0x62, 0x71, 0x67, 0x51,
5573 0x58, 0x6a, 0x68, 0x47, 0x2d, 0x33, 0x46, 0x50,
5574 0x2e, 0x53, 0x55, 0x47, 0x4a, 0x5a, 0x5f, 0x48,
5575 0x36, 0x3c, 0xef, 0x96, 0x25, 0x48, 0x68, 0x81,
5576 0x6b, 0x43, 0x4b, 0x5e, 0x62, 0x60, 0x55, 0x5a,
5577 0x45, 0x62, 0x5b, 0x58, 0x51, 0x50, 0x65, 0x59,
5578 0x52, 0x4c, 0x51, 0x55, 0x51, 0x5a, 0x64, 0x60,
5579 0x8f, 0x7f, 0x57, 0x65, 0xb7, 0xd9, 0xa2, 0x68,
5580 0x58, 0x5f, 0x45, 0x41, 0x38, 0x1f, 0x2f, 0x44,
5581 0x65, 0x6d, 0x65, 0x78, 0x88, 0x75, 0x20, 0x02,
5582 0xe2, 0xe7, 0xed, 0xba, 0xaa, 0x88, 0x6a, 0x85,
5583 0xb8, 0xb8, 0xb0, 0xe2, 0xdc, 0xe2, 0xdd, 0xd0,
5584 0xdc, 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0,
5585 0xe1, 0xe2, 0xe3, 0xe5, 0xe6, 0xe8, 0xe9, 0xe9,
5586 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
5587 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5588 0xde, 0xf2, 0xdf, 0xd0, 0xe9, 0xe7, 0xf2, 0xe7,
5589 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xea,
5590 0xe4, 0xcf, 0xdf, 0xf3, 0xe5, 0xe1, 0xeb, 0xe7,
5591 0xc5, 0xc1, 0xe1, 0xef, 0xdf, 0xa3, 0xaa, 0xdf,
5592 0xe1, 0xd6, 0xd1, 0xdc, 0xca, 0xd2, 0xf2, 0xea,
5593 0xb4, 0xe5, 0xff, 0xd7, 0x9f, 0xb9, 0xdc, 0xb4,
5594 0xd7, 0xef, 0xeb, 0xca, 0xef, 0xd6, 0xa6, 0xa4,
5595 0x5c, 0x49, 0x63, 0x70, 0x81, 0x94, 0xce, 0xe4,
5596 0xe5, 0xe3, 0xba, 0xbc, 0xf1, 0xdd, 0xb8, 0xde,
5597 0xe8, 0xd4, 0xdc, 0xe9, 0xe8, 0xe0, 0xd6, 0xd9,
5598 0xf0, 0xcb, 0xe1, 0xe2, 0xdb, 0xe2, 0xd1, 0xdd,
5599 0xe6, 0xe6, 0xe5, 0xe5, 0xe5, 0xe6, 0xea, 0xed,
5600 0xde, 0xed, 0xd4, 0xe3, 0xca, 0xaa, 0x67, 0x75,
5601 0xc6, 0x6e, 0x56, 0xde, 0xe5, 0x82, 0x33, 0x1d,
5602 0x18, 0x00, 0x21, 0x64, 0x76, 0x6b, 0x68, 0x68,
5603 0x67, 0x64, 0x5e, 0x57, 0x60, 0x7c, 0x8e, 0x8a,
5604 0x68, 0x81, 0x7f, 0x5d, 0x4e, 0x5b, 0x4c, 0x21,
5605 0x22, 0x40, 0x54, 0x5d, 0x61, 0x51, 0x41, 0x43,
5606 0x48, 0x5b, 0x36, 0x2a, 0x3e, 0x2d, 0x26, 0x42,
5607 0x4f, 0x2b, 0x2c, 0x54, 0x79, 0x4f, 0x4d, 0x51,
5608 0x77, 0x69, 0x65, 0x70, 0x77, 0x71, 0x68, 0x66,
5609 0x6b, 0x61, 0x55, 0x58, 0x70, 0x89, 0x87, 0x77,
5610 0x5c, 0x77, 0x8e, 0x8f, 0x85, 0x7f, 0x7c, 0x78,
5611 0x76, 0x78, 0x79, 0x79, 0x77, 0x72, 0x6d, 0x6a,
5612 0x6a, 0x68, 0x67, 0x69, 0x6a, 0x66, 0x5e, 0x57,
5613 0x3c, 0x4e, 0x43, 0x3e, 0x3f, 0x46, 0x5e, 0x67,
5614 0x92, 0x84, 0x7b, 0x5f, 0x34, 0x2c, 0x40, 0x46,
5615 0x6f, 0x5b, 0x5c, 0x70, 0x6d, 0x51, 0x48, 0x57,
5616 0x6d, 0x64, 0x52, 0x50, 0x55, 0x59, 0x5d, 0x57,
5617 0x37, 0x27, 0x27, 0x38, 0x42, 0x3a, 0x36, 0x3b,
5618 0x67, 0x5b, 0x62, 0x81, 0x71, 0x41, 0x37, 0x40,
5619 0x21, 0x82, 0xf8, 0x77, 0x25, 0x45, 0x78, 0x9f,
5620 0x72, 0x4c, 0x4b, 0x4f, 0x51, 0x59, 0x52, 0x54,
5621 0x62, 0x4f, 0x31, 0x47, 0x57, 0x4b, 0x50, 0x43,
5622 0x4c, 0x5b, 0x6a, 0x64, 0x5f, 0x75, 0x89, 0x84,
5623 0x85, 0x72, 0x56, 0x45, 0x75, 0xd3, 0xd7, 0x81,
5624 0x10, 0x12, 0x24, 0x56, 0x66, 0x6a, 0x88, 0x89,
5625 0x75, 0x78, 0x76, 0x88, 0x99, 0x87, 0x28, 0x09,
5626 0xeb, 0xe0, 0xea, 0xca, 0xb7, 0x5a, 0x00, 0x18,
5627 0x58, 0x9c, 0xd1, 0xee, 0xd9, 0xdb, 0xcf, 0xd9,
5628 0xdb, 0xdb, 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf,
5629 0xe2, 0xe3, 0xe4, 0xe5, 0xe7, 0xe8, 0xe9, 0xea,
5630 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5631 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5632 0xdf, 0xe7, 0xdf, 0xc8, 0xe6, 0xe5, 0xf0, 0xe5,
5633 0xe8, 0xe7, 0xe6, 0xe6, 0xe6, 0xe8, 0xea, 0xeb,
5634 0xf1, 0xd2, 0xdb, 0xf3, 0xea, 0xe3, 0xec, 0xec,
5635 0xc3, 0xcb, 0xe7, 0xd6, 0xb8, 0x9f, 0xc0, 0xe7,
5636 0xf2, 0xcf, 0xd5, 0xef, 0xb7, 0xc9, 0xff, 0xe8,
5637 0xd0, 0xeb, 0xe9, 0xc4, 0xb5, 0xca, 0xd0, 0xf3,
5638 0xe6, 0xd3, 0xeb, 0xe5, 0xe6, 0xd8, 0xca, 0xb1,
5639 0x8a, 0x82, 0x76, 0x5c, 0x81, 0xb1, 0xe2, 0xe6,
5640 0xfa, 0xd8, 0xcd, 0xdb, 0xe0, 0xc1, 0xb1, 0xda,
5641 0xdd, 0xd7, 0xd3, 0xe9, 0xe4, 0xcf, 0xd1, 0xc4,
5642 0xe1, 0xe3, 0xd8, 0xd7, 0xd9, 0xde, 0xed, 0xf0,
5643 0xf1, 0xd8, 0xcf, 0xe1, 0xec, 0xe6, 0xe4, 0xed,
5644 0xeb, 0xed, 0xca, 0xa6, 0x61, 0x41, 0x36, 0x5a,
5645 0x5e, 0x4b, 0x57, 0xde, 0x9f, 0x50, 0x8b, 0x77,
5646 0x6e, 0x76, 0x7b, 0x65, 0x51, 0x66, 0x6f, 0x4f,
5647 0x3a, 0x56, 0x70, 0x61, 0x46, 0x55, 0x6d, 0x66,
5648 0x76, 0x8b, 0x8c, 0xa5, 0xc5, 0x92, 0x4b, 0x45,
5649 0x2b, 0x42, 0x39, 0x2e, 0x40, 0x40, 0x2e, 0x2c,
5650 0x24, 0x2e, 0x3b, 0x31, 0x28, 0x44, 0x58, 0x45,
5651 0x45, 0x5a, 0x55, 0x4a, 0x7f, 0x76, 0x71, 0x7f,
5652 0x6d, 0x60, 0x5a, 0x62, 0x67, 0x63, 0x61, 0x64,
5653 0x72, 0x6c, 0x61, 0x5e, 0x6c, 0x7a, 0x74, 0x62,
5654 0x6a, 0x7b, 0x8b, 0x92, 0x96, 0x97, 0x8d, 0x7f,
5655 0x7b, 0x7c, 0x7e, 0x7e, 0x7b, 0x77, 0x71, 0x6e,
5656 0x72, 0x6e, 0x6a, 0x68, 0x65, 0x60, 0x56, 0x4f,
5657 0x4d, 0x55, 0x51, 0x53, 0x60, 0x86, 0xa0, 0x81,
5658 0x64, 0x52, 0x33, 0x3a, 0x69, 0x7c, 0x6e, 0x68,
5659 0x67, 0x5b, 0x59, 0x65, 0x66, 0x57, 0x4e, 0x50,
5660 0x5d, 0x62, 0x51, 0x52, 0x5a, 0x5f, 0x64, 0x4f,
5661 0x59, 0x47, 0x32, 0x26, 0x27, 0x32, 0x45, 0x55,
5662 0x42, 0x56, 0x5e, 0x3d, 0x2f, 0x4d, 0x51, 0x36,
5663 0x30, 0xa4, 0xa8, 0x50, 0x34, 0x35, 0x6a, 0x9b,
5664 0x77, 0x4f, 0x47, 0x42, 0x40, 0x50, 0x58, 0x64,
5665 0x52, 0x46, 0x38, 0x4a, 0x63, 0x6b, 0x6c, 0x5f,
5666 0x7d, 0xa2, 0x95, 0x70, 0x6d, 0x6c, 0x64, 0x6c,
5667 0x47, 0x37, 0x3a, 0x31, 0x3d, 0x9d, 0xe7, 0xd1,
5668 0x98, 0x7a, 0x89, 0x80, 0x6a, 0x75, 0x6e, 0x5f,
5669 0x6b, 0x5f, 0x67, 0x67, 0x54, 0x51, 0x18, 0x0a,
5670 0xe4, 0xd1, 0xdd, 0xdb, 0xf1, 0x95, 0x28, 0x4a,
5671 0xdb, 0xf6, 0xe9, 0xd9, 0xda, 0xe8, 0xdf, 0xe1,
5672 0xda, 0xdb, 0xdb, 0xdc, 0xdd, 0xdd, 0xde, 0xde,
5673 0xe3, 0xe3, 0xe4, 0xe6, 0xe7, 0xe9, 0xea, 0xeb,
5674 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5675 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5676 0xe5, 0xd9, 0xd4, 0xcf, 0xde, 0xe5, 0xe3, 0xe9,
5677 0xe8, 0xe7, 0xe5, 0xe4, 0xe5, 0xe7, 0xea, 0xed,
5678 0xf4, 0xe0, 0xd5, 0xe2, 0xee, 0xe8, 0xe5, 0xed,
5679 0xcb, 0xdd, 0xeb, 0xe2, 0xc4, 0xbb, 0xf0, 0xdf,
5680 0xfb, 0xd5, 0xa5, 0xc1, 0xbc, 0xd4, 0xf2, 0xe0,
5681 0xc1, 0xe9, 0xdc, 0xa0, 0xb7, 0xd7, 0xd9, 0xe1,
5682 0xc9, 0xc2, 0xb2, 0xdd, 0xbb, 0x8f, 0xde, 0x8f,
5683 0x85, 0xb5, 0xdd, 0xa7, 0x7d, 0x89, 0xc6, 0xd1,
5684 0xab, 0xae, 0xcc, 0xd2, 0xcf, 0xd6, 0xcf, 0xd3,
5685 0xe8, 0xea, 0xde, 0xe5, 0xe4, 0xcf, 0xce, 0xd4,
5686 0xdd, 0xdf, 0xca, 0xd6, 0xe3, 0xe5, 0xf7, 0xec,
5687 0xe4, 0xd0, 0xce, 0xe2, 0xe9, 0xde, 0xdd, 0xea,
5688 0xe7, 0x98, 0x6e, 0x4e, 0x5a, 0xb2, 0xb7, 0x81,
5689 0x6b, 0x57, 0x43, 0x62, 0x73, 0x87, 0x94, 0x88,
5690 0x62, 0x65, 0x75, 0x84, 0x9d, 0xba, 0x98, 0x46,
5691 0x78, 0x61, 0x60, 0x5f, 0x56, 0x6b, 0x7f, 0x71,
5692 0x76, 0x7b, 0x89, 0xaf, 0xb9, 0x7a, 0x40, 0x43,
5693 0x32, 0x46, 0x4d, 0x3f, 0x30, 0x2c, 0x38, 0x49,
5694 0x40, 0x41, 0x70, 0x61, 0x31, 0x5d, 0x75, 0x33,
5695 0x44, 0x4f, 0x3f, 0x44, 0x8c, 0x5d, 0x42, 0x87,
5696 0x79, 0x69, 0x5e, 0x60, 0x64, 0x64, 0x6b, 0x75,
5697 0x6c, 0x70, 0x70, 0x6f, 0x79, 0x84, 0x80, 0x72,
5698 0x6b, 0x81, 0x8d, 0x7e, 0x67, 0x5f, 0x63, 0x67,
5699 0x7b, 0x78, 0x73, 0x6c, 0x65, 0x5e, 0x58, 0x55,
5700 0x6b, 0x66, 0x60, 0x5d, 0x5a, 0x55, 0x4c, 0x45,
5701 0x5c, 0x49, 0x42, 0x5f, 0x71, 0x75, 0x80, 0x72,
5702 0x56, 0x67, 0x63, 0x5b, 0x5c, 0x50, 0x47, 0x54,
5703 0x6d, 0x4b, 0x4b, 0x70, 0x74, 0x52, 0x47, 0x5c,
5704 0x44, 0x65, 0x5e, 0x5c, 0x5c, 0x60, 0x68, 0x48,
5705 0x4d, 0x4c, 0x42, 0x3e, 0x51, 0x64, 0x55, 0x34,
5706 0x34, 0x3f, 0x79, 0x71, 0x43, 0x3c, 0x48, 0x6f,
5707 0x80, 0xd8, 0x78, 0x50, 0x56, 0x43, 0x69, 0x96,
5708 0x6d, 0x48, 0x51, 0x5d, 0x55, 0x4e, 0x4d, 0x60,
5709 0x36, 0x41, 0x4c, 0x43, 0x46, 0x53, 0x46, 0x37,
5710 0x37, 0x33, 0x41, 0x3b, 0x25, 0x34, 0x47, 0x36,
5711 0x65, 0x50, 0x45, 0x45, 0x4d, 0x71, 0xab, 0xd2,
5712 0xc0, 0x76, 0x61, 0x5e, 0x54, 0x53, 0x54, 0x68,
5713 0x73, 0x5b, 0x64, 0x6f, 0x6e, 0x70, 0x22, 0x02,
5714 0xd9, 0xd1, 0xda, 0xcd, 0xe5, 0x8c, 0x1d, 0x46,
5715 0xd0, 0xe5, 0xdc, 0xd6, 0xd6, 0xd4, 0xd9, 0xda,
5716 0xda, 0xda, 0xdb, 0xdc, 0xdc, 0xdd, 0xde, 0xde,
5717 0xe3, 0xe4, 0xe5, 0xe6, 0xe8, 0xe9, 0xea, 0xeb,
5718 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
5719 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea,
5720 0xeb, 0xcf, 0xc8, 0xda, 0xd7, 0xe7, 0xd7, 0xee,
5721 0xe8, 0xe6, 0xe4, 0xe3, 0xe4, 0xe7, 0xeb, 0xed,
5722 0xee, 0xea, 0xcf, 0xce, 0xed, 0xea, 0xdb, 0xea,
5723 0xd0, 0xe5, 0xcb, 0xd8, 0xcd, 0x9d, 0xd8, 0xdd,
5724 0xf5, 0xd7, 0xc3, 0xf7, 0xe3, 0xe4, 0xe4, 0xaf,
5725 0xc1, 0xfe, 0xd5, 0x97, 0xdd, 0xe3, 0xf1, 0xe9,
5726 0xed, 0xe4, 0xdc, 0xbf, 0xc5, 0xca, 0xe6, 0xe8,
5727 0x75, 0x78, 0xa9, 0x87, 0x50, 0x73, 0xd5, 0xd8,
5728 0xdc, 0xc7, 0xc5, 0xc5, 0xca, 0xba, 0xac, 0xd8,
5729 0xe4, 0xea, 0xde, 0xbe, 0xd8, 0xf1, 0xd6, 0xdc,
5730 0xe9, 0xc9, 0xc0, 0xdb, 0xf1, 0xf1, 0xe5, 0xd5,
5731 0xd4, 0xda, 0xe5, 0xec, 0xe7, 0xde, 0xe3, 0xf0,
5732 0xec, 0x7f, 0x8e, 0x94, 0x7f, 0x72, 0x52, 0x55,
5733 0x66, 0x66, 0x42, 0x5e, 0x7d, 0x85, 0x9e, 0x8b,
5734 0xbe, 0xac, 0xbd, 0xd6, 0xcc, 0xb1, 0x8b, 0x5f,
5735 0x5e, 0x47, 0x57, 0x66, 0x4e, 0x59, 0x8c, 0xa8,
5736 0x5a, 0x51, 0x79, 0x8c, 0x60, 0x4c, 0x57, 0x4d,
5737 0x64, 0x3e, 0x33, 0x3e, 0x42, 0x52, 0x5f, 0x56,
5738 0x52, 0x65, 0x5d, 0x2f, 0x29, 0x46, 0x3f, 0x2c,
5739 0x31, 0x3e, 0x22, 0x27, 0x8f, 0x6a, 0x45, 0x95,
5740 0x7b, 0x72, 0x71, 0x7a, 0x7d, 0x76, 0x75, 0x7a,
5741 0x81, 0x8a, 0x8d, 0x8a, 0x8c, 0x90, 0x89, 0x7c,
5742 0x6a, 0x7a, 0x85, 0x82, 0x7c, 0x7b, 0x75, 0x6e,
5743 0x87, 0x7b, 0x69, 0x5d, 0x5c, 0x68, 0x78, 0x84,
5744 0x6c, 0x67, 0x63, 0x62, 0x62, 0x5f, 0x59, 0x54,
5745 0x53, 0x61, 0x49, 0x45, 0x55, 0x51, 0x50, 0x4e,
5746 0x5a, 0x57, 0x64, 0x63, 0x4e, 0x51, 0x64, 0x66,
5747 0x7a, 0x6b, 0x5f, 0x5f, 0x66, 0x6b, 0x6c, 0x6d,
5748 0x5e, 0x6a, 0x5e, 0x6e, 0x65, 0x50, 0x6a, 0x70,
5749 0x48, 0x41, 0x3f, 0x42, 0x3c, 0x2d, 0x27, 0x2c,
5750 0x18, 0x44, 0x85, 0x4c, 0x22, 0x48, 0x30, 0x12,
5751 0x6f, 0xc8, 0x4b, 0x3b, 0x41, 0x35, 0x65, 0x9a,
5752 0x8a, 0x58, 0x5c, 0x69, 0x55, 0x3c, 0x3b, 0x5e,
5753 0x4e, 0x3e, 0x52, 0x5a, 0x5f, 0x58, 0x33, 0x2f,
5754 0x38, 0x3c, 0x3b, 0x43, 0x57, 0x5e, 0x61, 0x6e,
5755 0x64, 0x7d, 0x81, 0x83, 0x7f, 0x5f, 0x7b, 0xd7,
5756 0xeb, 0xa0, 0x42, 0x35, 0x4f, 0x5f, 0x71, 0x67,
5757 0x80, 0x79, 0x7c, 0x80, 0x8f, 0x86, 0x23, 0x10,
5758 0xd9, 0xd9, 0xd3, 0xd9, 0xe0, 0x96, 0x1a, 0x69,
5759 0xe0, 0xda, 0xd4, 0xd1, 0xd2, 0xd4, 0xd5, 0xd4,
5760 0xd5, 0xd6, 0xd7, 0xd7, 0xd9, 0xda, 0xda, 0xdb,
5761 0xdc, 0xdd, 0xde, 0xe0, 0xe2, 0xe4, 0xe5, 0xe6,
5762 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5763 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5764 0xe7, 0xef, 0xcd, 0xd0, 0xe4, 0xd1, 0xca, 0xd5,
5765 0xed, 0xe2, 0xdb, 0xce, 0xdf, 0xf2, 0xdf, 0xde,
5766 0xdc, 0xf2, 0xc8, 0xcb, 0xdb, 0xed, 0xd1, 0xd2,
5767 0xd7, 0xde, 0xb9, 0xe5, 0xc5, 0xb9, 0xef, 0xec,
5768 0xe3, 0xc8, 0xbf, 0xf9, 0xdb, 0xcf, 0xf6, 0x90,
5769 0xc8, 0xfb, 0x95, 0xc3, 0xf1, 0xe7, 0xf4, 0xde,
5770 0xe2, 0xf1, 0xe9, 0xcf, 0xd1, 0xc3, 0xbd, 0xf1,
5771 0x9f, 0x83, 0xa0, 0xad, 0x98, 0x9c, 0xac, 0xbe,
5772 0xed, 0xe7, 0xda, 0xcd, 0xe2, 0xe0, 0xcb, 0xef,
5773 0xeb, 0xf3, 0xef, 0xe1, 0xd2, 0xc5, 0xcd, 0xe2,
5774 0xe6, 0xaa, 0xbc, 0xec, 0xe5, 0xd8, 0xdd, 0xd9,
5775 0xcb, 0xe9, 0xff, 0xd3, 0xef, 0xe6, 0xd3, 0xdb,
5776 0xd7, 0xe6, 0x9b, 0x56, 0x55, 0x56, 0x61, 0x79,
5777 0x81, 0x6a, 0x42, 0x45, 0x71, 0x82, 0x86, 0x9f,
5778 0xbd, 0xbd, 0xb4, 0xc8, 0xaf, 0x6d, 0x53, 0x40,
5779 0x68, 0x5e, 0x5e, 0x60, 0x58, 0x60, 0x86, 0xaa,
5780 0x74, 0x5c, 0x79, 0x60, 0x63, 0x79, 0x47, 0x46,
5781 0x47, 0x46, 0x45, 0x45, 0x46, 0x44, 0x3e, 0x38,
5782 0x28, 0x28, 0x29, 0x2c, 0x32, 0x38, 0x3d, 0x3f,
5783 0x29, 0x1a, 0x3d, 0x6a, 0x96, 0x83, 0x9d, 0xc1,
5784 0x86, 0x73, 0x70, 0x81, 0x85, 0x78, 0x76, 0x82,
5785 0x90, 0x96, 0x93, 0x8e, 0x96, 0x9b, 0x80, 0x5a,
5786 0x6d, 0x6e, 0x68, 0x58, 0x4c, 0x52, 0x6b, 0x81,
5787 0x6b, 0x67, 0x63, 0x64, 0x68, 0x69, 0x66, 0x61,
5788 0x4b, 0x4a, 0x4a, 0x51, 0x58, 0x5a, 0x55, 0x4e,
5789 0x59, 0x5f, 0x59, 0x47, 0x42, 0x51, 0x62, 0x6a,
5790 0x54, 0x5b, 0x5d, 0x58, 0x56, 0x5d, 0x67, 0x6b,
5791 0x6c, 0x5e, 0x47, 0x5c, 0x69, 0x5e, 0x60, 0x54,
5792 0x56, 0x60, 0x66, 0x66, 0x6a, 0x6d, 0x63, 0x53,
5793 0x41, 0x41, 0x3f, 0x3d, 0x38, 0x32, 0x2b, 0x26,
5794 0x1b, 0x58, 0xa3, 0x64, 0x1f, 0x45, 0x47, 0x21,
5795 0xae, 0xa1, 0x2a, 0x53, 0x47, 0x3c, 0x4e, 0x95,
5796 0x7d, 0x58, 0x38, 0x33, 0x35, 0x34, 0x41, 0x56,
5797 0x51, 0x39, 0x35, 0x47, 0x5a, 0x6a, 0x70, 0x69,
5798 0x85, 0x8d, 0x70, 0x5a, 0x74, 0x8c, 0x8d, 0x93,
5799 0x80, 0x9e, 0x66, 0x4e, 0x82, 0x68, 0x53, 0xa6,
5800 0xe2, 0xee, 0x92, 0x29, 0x2f, 0x59, 0x67, 0x76,
5801 0x6d, 0x49, 0x70, 0x7d, 0x77, 0x65, 0x22, 0x0f,
5802 0xd3, 0xd4, 0xd2, 0xd4, 0xe7, 0xa3, 0x2d, 0x8f,
5803 0xe3, 0xdd, 0xd6, 0xd3, 0xd4, 0xd6, 0xd7, 0xd6,
5804 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdb,
5805 0xdd, 0xdd, 0xdf, 0xe0, 0xe2, 0xe3, 0xe5, 0xe5,
5806 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5807 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
5808 0xe4, 0xe7, 0xde, 0xdc, 0xed, 0xe8, 0xcc, 0xc7,
5809 0xdc, 0xe1, 0xe7, 0xda, 0xd9, 0xef, 0xf3, 0xeb,
5810 0xec, 0xf4, 0xdf, 0xc4, 0xd9, 0xd6, 0xc0, 0xc0,
5811 0xe4, 0xdf, 0xc8, 0xf0, 0xc0, 0xcc, 0xf0, 0xde,
5812 0xdc, 0xcd, 0xc7, 0xea, 0xd3, 0xd9, 0xd5, 0xa4,
5813 0xe1, 0x9c, 0xab, 0xee, 0xf2, 0xde, 0xeb, 0xd7,
5814 0xd7, 0xcd, 0xe9, 0xe1, 0xbd, 0xb9, 0xb6, 0xab,
5815 0x95, 0x93, 0x68, 0x63, 0x74, 0x9c, 0xe6, 0xf6,
5816 0xc1, 0xc5, 0xc4, 0xbd, 0xd4, 0xd4, 0xc3, 0xeb,
5817 0xf3, 0xe8, 0xe9, 0xf3, 0xe7, 0xc8, 0xc6, 0xe0,
5818 0xbb, 0xac, 0xee, 0xda, 0xc4, 0xdf, 0xa2, 0x72,
5819 0x25, 0x90, 0xff, 0xff, 0xec, 0xdd, 0xdd, 0xda,
5820 0xad, 0x4e, 0x4c, 0x88, 0x7d, 0x73, 0x8e, 0x86,
5821 0x61, 0x5d, 0x50, 0x60, 0x83, 0x84, 0x7b, 0x8b,
5822 0xbd, 0xaa, 0x98, 0xa2, 0x99, 0x9d, 0xa7, 0x72,
5823 0x6c, 0x8c, 0x80, 0x6b, 0x67, 0x51, 0x60, 0xa7,
5824 0x78, 0x4c, 0x5b, 0x60, 0x50, 0x57, 0x48, 0x2b,
5825 0x41, 0x42, 0x43, 0x42, 0x41, 0x3f, 0x40, 0x41,
5826 0x41, 0x46, 0x44, 0x35, 0x26, 0x2e, 0x4c, 0x69,
5827 0x65, 0x49, 0x34, 0x4c, 0x96, 0x62, 0x3a, 0x4e,
5828 0x6f, 0x67, 0x61, 0x61, 0x66, 0x6b, 0x6e, 0x70,
5829 0x6b, 0x52, 0x53, 0x72, 0x7d, 0x69, 0x62, 0x70,
5830 0x5c, 0x5c, 0x63, 0x71, 0x81, 0x85, 0x7f, 0x76,
5831 0x7e, 0x75, 0x6a, 0x64, 0x65, 0x67, 0x66, 0x64,
5832 0x5d, 0x5b, 0x5c, 0x62, 0x69, 0x6a, 0x65, 0x5e,
5833 0x5f, 0x5d, 0x53, 0x4c, 0x58, 0x6e, 0x75, 0x6f,
5834 0x6b, 0x66, 0x67, 0x6e, 0x70, 0x67, 0x5b, 0x53,
5835 0x5a, 0x61, 0x5d, 0x63, 0x44, 0x28, 0x58, 0x8c,
5836 0x6f, 0x6b, 0x5e, 0x52, 0x55, 0x5f, 0x5e, 0x53,
5837 0x3a, 0x3a, 0x3d, 0x42, 0x44, 0x3e, 0x31, 0x27,
5838 0x19, 0x5f, 0x91, 0x54, 0x2c, 0x3a, 0x28, 0x29,
5839 0xd9, 0x82, 0x27, 0x54, 0x59, 0x35, 0x40, 0x87,
5840 0x99, 0x4c, 0x58, 0x72, 0x4b, 0x55, 0x6b, 0x3b,
5841 0x6b, 0x71, 0x6c, 0x59, 0x58, 0x75, 0x8d, 0x8c,
5842 0x78, 0x92, 0x93, 0x92, 0x9e, 0x8c, 0x6a, 0x61,
5843 0x7c, 0x7a, 0x74, 0x68, 0x47, 0x27, 0x3b, 0x72,
5844 0xc3, 0xe0, 0xbe, 0x85, 0x72, 0x64, 0x6b, 0x95,
5845 0x8d, 0x6f, 0x8b, 0x66, 0x6b, 0x80, 0x19, 0x00,
5846 0xd8, 0xd9, 0xd7, 0xcc, 0xe4, 0x9b, 0x25, 0x9d,
5847 0xe6, 0xe0, 0xd9, 0xd6, 0xd8, 0xda, 0xda, 0xda,
5848 0xd8, 0xd8, 0xd9, 0xd9, 0xda, 0xdb, 0xdb, 0xdb,
5849 0xde, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe4,
5850 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
5851 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
5852 0xe6, 0xe4, 0xe9, 0xce, 0xc5, 0xd4, 0xd0, 0xdb,
5853 0xd1, 0xe1, 0xe8, 0xdc, 0xcc, 0xdc, 0xef, 0xdc,
5854 0xe4, 0xe1, 0xed, 0xc1, 0xdf, 0xd6, 0xc9, 0xd5,
5855 0xef, 0xd2, 0xcf, 0xe9, 0x90, 0xb1, 0xd1, 0xd3,
5856 0xc8, 0xda, 0xda, 0xca, 0xc9, 0xea, 0xbd, 0xa7,
5857 0xa8, 0x88, 0xce, 0xe9, 0xf6, 0xe3, 0xea, 0xe0,
5858 0xdb, 0xe8, 0xe5, 0xdd, 0xe3, 0xbe, 0x9e, 0xcc,
5859 0xd1, 0x94, 0x7e, 0x6b, 0x5b, 0x96, 0xdc, 0xe7,
5860 0xea, 0xf4, 0xf6, 0xe7, 0xec, 0xda, 0xc0, 0xe6,
5861 0xd7, 0xdf, 0xe6, 0xe7, 0xe9, 0xe8, 0xd6, 0xbd,
5862 0xcf, 0xcd, 0xd4, 0xef, 0xe9, 0xd0, 0x9e, 0x3a,
5863 0x34, 0x1b, 0x7c, 0xed, 0xc6, 0xd0, 0xd7, 0x7e,
5864 0x57, 0x4a, 0x6a, 0x88, 0x68, 0x40, 0x51, 0x79,
5865 0x5e, 0x54, 0x42, 0x42, 0x52, 0x58, 0x65, 0x82,
5866 0xcd, 0xba, 0xa8, 0xa7, 0xa1, 0xc2, 0xc1, 0x55,
5867 0x48, 0x62, 0x51, 0x3c, 0x41, 0x36, 0x4f, 0x9b,
5868 0x83, 0x63, 0x6e, 0x93, 0x6d, 0x39, 0x43, 0x46,
5869 0x46, 0x46, 0x40, 0x35, 0x2c, 0x30, 0x3e, 0x4c,
5870 0x54, 0x57, 0x4f, 0x3b, 0x29, 0x30, 0x50, 0x6e,
5871 0x36, 0x47, 0x46, 0x51, 0x9d, 0x7e, 0x5e, 0x6e,
5872 0x65, 0x71, 0x71, 0x68, 0x68, 0x6e, 0x63, 0x4e,
5873 0x48, 0x57, 0x5f, 0x57, 0x4c, 0x4c, 0x54, 0x5b,
5874 0x52, 0x58, 0x6b, 0x8b, 0xa6, 0xaa, 0x96, 0x80,
5875 0x83, 0x82, 0x83, 0x87, 0x89, 0x84, 0x79, 0x70,
5876 0x6f, 0x6b, 0x68, 0x69, 0x6b, 0x68, 0x5f, 0x56,
5877 0x46, 0x48, 0x45, 0x45, 0x54, 0x6a, 0x6f, 0x67,
5878 0x70, 0x59, 0x51, 0x5e, 0x66, 0x5c, 0x56, 0x5b,
5879 0x50, 0x73, 0x74, 0x73, 0x74, 0x78, 0x7b, 0x5c,
5880 0x4d, 0x56, 0x5a, 0x5a, 0x5e, 0x60, 0x54, 0x42,
5881 0x51, 0x4b, 0x41, 0x35, 0x2d, 0x2c, 0x30, 0x35,
5882 0x1f, 0x5d, 0x7b, 0x52, 0x5a, 0x6c, 0x68, 0xa4,
5883 0xcc, 0x6b, 0x5f, 0x53, 0x3b, 0x0d, 0x2e, 0x72,
5884 0x9d, 0x64, 0x53, 0x60, 0x65, 0x7b, 0x8a, 0x77,
5885 0x71, 0x63, 0x67, 0x7a, 0x75, 0x56, 0x4d, 0x5e,
5886 0x6a, 0x78, 0x76, 0x7c, 0x8d, 0x83, 0x7a, 0x8d,
5887 0x76, 0x6c, 0x7f, 0x95, 0x9a, 0x9c, 0x7c, 0x40,
5888 0x5b, 0xa3, 0xca, 0xb4, 0x82, 0x51, 0x5a, 0x93,
5889 0x99, 0x62, 0x83, 0x60, 0x86, 0xb3, 0x38, 0x13,
5890 0xe3, 0xe4, 0xe4, 0xce, 0xe6, 0x8e, 0x19, 0xa1,
5891 0xea, 0xe4, 0xdd, 0xda, 0xdb, 0xdd, 0xde, 0xdd,
5892 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc,
5893 0xdf, 0xdf, 0xe0, 0xe1, 0xe1, 0xe2, 0xe3, 0xe3,
5894 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
5895 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5896 0xe6, 0xe7, 0xf5, 0xe2, 0xc6, 0xcd, 0xd9, 0xe3,
5897 0xd8, 0xed, 0xe7, 0xe2, 0xda, 0xd9, 0xe8, 0xd8,
5898 0xeb, 0xe4, 0xfa, 0xd1, 0xdc, 0xdd, 0xc9, 0xe2,
5899 0xf5, 0xb1, 0xbf, 0xea, 0xa4, 0xd7, 0xc6, 0xb4,
5900 0xb6, 0xe4, 0xe9, 0xab, 0xcb, 0xf5, 0xc4, 0x8e,
5901 0x7e, 0xc9, 0xd5, 0xbd, 0xc4, 0xb5, 0xd4, 0xd8,
5902 0xcd, 0xae, 0xb4, 0xbb, 0xb3, 0xa9, 0xa1, 0xad,
5903 0xc4, 0x73, 0x7c, 0x6e, 0x4f, 0x94, 0xd4, 0xd8,
5904 0xbb, 0xd1, 0xe2, 0xde, 0xe8, 0xd9, 0xc4, 0xef,
5905 0xdc, 0xe4, 0xe2, 0xd2, 0xd7, 0xf4, 0xee, 0xc2,
5906 0xc3, 0xd7, 0xc4, 0xee, 0xd3, 0xa6, 0xd8, 0xc1,
5907 0x59, 0x58, 0x58, 0xc5, 0xdd, 0xe2, 0xd4, 0xc5,
5908 0x5e, 0x64, 0x4d, 0x46, 0x73, 0x68, 0x39, 0x52,
5909 0x69, 0x60, 0x55, 0x50, 0x4e, 0x4f, 0x64, 0x83,
5910 0x97, 0xa1, 0x99, 0xa2, 0xb2, 0xc7, 0xac, 0x41,
5911 0x38, 0x3a, 0x50, 0x6a, 0x6d, 0x69, 0x73, 0x80,
5912 0x62, 0x54, 0x41, 0x5b, 0x6a, 0x4c, 0x43, 0x52,
5913 0x35, 0x47, 0x59, 0x5a, 0x4c, 0x3e, 0x39, 0x3c,
5914 0x44, 0x3a, 0x2e, 0x29, 0x2b, 0x2f, 0x2f, 0x2e,
5915 0x34, 0x4a, 0x72, 0x87, 0xa0, 0x64, 0x45, 0x49,
5916 0x6b, 0x74, 0x6f, 0x60, 0x5f, 0x69, 0x63, 0x51,
5917 0x50, 0x4b, 0x58, 0x76, 0x87, 0x7e, 0x6f, 0x69,
5918 0x6a, 0x71, 0x7a, 0x7e, 0x79, 0x6e, 0x62, 0x5b,
5919 0x76, 0x6e, 0x66, 0x66, 0x6e, 0x77, 0x7e, 0x80,
5920 0x75, 0x6f, 0x68, 0x63, 0x5f, 0x56, 0x49, 0x3e,
5921 0x2f, 0x40, 0x4a, 0x46, 0x48, 0x55, 0x61, 0x63,
5922 0x83, 0x65, 0x58, 0x64, 0x64, 0x52, 0x50, 0x60,
5923 0x7b, 0x51, 0x24, 0x41, 0x64, 0x66, 0x68, 0x58,
5924 0x59, 0x59, 0x4a, 0x34, 0x2f, 0x43, 0x5c, 0x68,
5925 0x5a, 0x64, 0x6d, 0x6c, 0x68, 0x6c, 0x7a, 0x88,
5926 0x96, 0x9e, 0xa0, 0x6f, 0x5b, 0x5c, 0x61, 0xa4,
5927 0x9f, 0x4e, 0x8c, 0x7b, 0xa5, 0xaa, 0x9f, 0x75,
5928 0x7b, 0x7d, 0x6a, 0x71, 0x95, 0x97, 0x84, 0x8b,
5929 0x6d, 0x93, 0x91, 0x6f, 0x6b, 0x7b, 0x7c, 0x74,
5930 0x6d, 0x78, 0x74, 0x75, 0x7c, 0x6b, 0x65, 0x82,
5931 0xa9, 0x99, 0x8a, 0xa1, 0xc5, 0xb8, 0x8b, 0x74,
5932 0xd7, 0xdd, 0xda, 0xd5, 0xd2, 0xca, 0xcb, 0xd9,
5933 0xc1, 0x77, 0xae, 0xb3, 0xcb, 0xa7, 0x00, 0x00,
5934 0xe3, 0xe8, 0xee, 0xdb, 0xf2, 0x8b, 0x25, 0xb5,
5935 0xec, 0xe6, 0xdf, 0xdc, 0xde, 0xe0, 0xe0, 0xe0,
5936 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xdc, 0xdc,
5937 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
5938 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
5939 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
5940 0xe9, 0xe3, 0xe7, 0xf0, 0xdc, 0xd0, 0xde, 0xd4,
5941 0xcd, 0xeb, 0xe1, 0xe3, 0xe7, 0xd4, 0xd9, 0xe5,
5942 0xec, 0xe7, 0xf2, 0xe2, 0xd0, 0xe0, 0xc2, 0xe5,
5943 0xdd, 0xaa, 0xc4, 0xcf, 0xa0, 0xec, 0xd4, 0xc2,
5944 0xbb, 0xdd, 0xde, 0xa6, 0xe0, 0xe8, 0xd2, 0x77,
5945 0x89, 0xe4, 0xee, 0xff, 0xe2, 0xcd, 0xe4, 0xdb,
5946 0xeb, 0xf3, 0xf7, 0xed, 0xfd, 0xff, 0xcd, 0xa6,
5947 0xab, 0x8e, 0x66, 0x65, 0x74, 0xaa, 0xde, 0xb6,
5948 0xcf, 0xe3, 0xf2, 0xe8, 0xea, 0xd3, 0xb7, 0xde,
5949 0xde, 0xdd, 0xf1, 0xf3, 0xd7, 0xca, 0xca, 0xbf,
5950 0xde, 0xd7, 0xdb, 0xd4, 0xd5, 0xda, 0xb2, 0x7e,
5951 0xad, 0xea, 0xd0, 0xea, 0xdc, 0xcc, 0xaa, 0xa1,
5952 0x61, 0x3e, 0x5f, 0x71, 0x5f, 0x49, 0x4b, 0x86,
5953 0x5b, 0x52, 0x54, 0x57, 0x53, 0x5b, 0x7d, 0x9c,
5954 0x9d, 0xbf, 0xa9, 0xaf, 0xc9, 0xb2, 0x7f, 0x45,
5955 0x3a, 0x37, 0x47, 0x5c, 0x5b, 0x50, 0x4f, 0x53,
5956 0x45, 0x67, 0x72, 0x59, 0x54, 0x4e, 0x3c, 0x49,
5957 0x2c, 0x37, 0x3f, 0x3c, 0x34, 0x36, 0x45, 0x54,
5958 0x44, 0x36, 0x2a, 0x2e, 0x38, 0x38, 0x28, 0x16,
5959 0x40, 0x21, 0x1a, 0x36, 0x6c, 0x3e, 0x34, 0x5b,
5960 0x65, 0x66, 0x64, 0x64, 0x6a, 0x72, 0x72, 0x6d,
5961 0x67, 0x5a, 0x66, 0x7f, 0x74, 0x51, 0x54, 0x75,
5962 0x84, 0x88, 0x86, 0x76, 0x61, 0x55, 0x56, 0x5d,
5963 0x6f, 0x63, 0x57, 0x54, 0x5e, 0x6e, 0x7c, 0x83,
5964 0x74, 0x6f, 0x68, 0x65, 0x63, 0x5b, 0x4f, 0x45,
5965 0x45, 0x55, 0x5c, 0x55, 0x53, 0x5d, 0x66, 0x67,
5966 0x6e, 0x43, 0x33, 0x57, 0x77, 0x6d, 0x52, 0x45,
5967 0x68, 0x53, 0x4e, 0x7d, 0x82, 0x59, 0x5d, 0x6e,
5968 0x4a, 0x67, 0x7d, 0x7a, 0x72, 0x79, 0x8a, 0x95,
5969 0x8f, 0x8a, 0x7e, 0x6f, 0x60, 0x55, 0x50, 0x4e,
5970 0x72, 0x5b, 0x80, 0x74, 0x52, 0x60, 0x78, 0xa0,
5971 0x81, 0x62, 0xb9, 0x86, 0x83, 0x84, 0x94, 0x80,
5972 0x54, 0x61, 0x6f, 0x74, 0x70, 0x67, 0x59, 0x4c,
5973 0x77, 0x82, 0x8c, 0x9e, 0x9b, 0x6d, 0x5f, 0x89,
5974 0x96, 0x8a, 0x66, 0x59, 0x69, 0x5c, 0x3f, 0x3c,
5975 0x75, 0x6d, 0x81, 0xab, 0xa5, 0x71, 0x81, 0xd1,
5976 0xba, 0xe8, 0xd0, 0x6e, 0x4c, 0x88, 0x99, 0x63,
5977 0xb3, 0x7c, 0x9e, 0xa4, 0xba, 0x8a, 0x0a, 0x36,
5978 0xdf, 0xe5, 0xec, 0xe1, 0xf1, 0x7b, 0x2e, 0xbd,
5979 0xed, 0xe7, 0xe0, 0xdd, 0xdf, 0xe1, 0xe1, 0xe1,
5980 0xe0, 0xe0, 0xdf, 0xdf, 0xde, 0xdd, 0xdd, 0xdd,
5981 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
5982 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
5983 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
5984 0xed, 0xe5, 0xdb, 0xe8, 0xd8, 0xc9, 0xdd, 0xd7,
5985 0xc2, 0xe6, 0xe5, 0xe2, 0xe4, 0xc7, 0xc4, 0xe7,
5986 0xe8, 0xe3, 0xe2, 0xe4, 0xc6, 0xd7, 0xbd, 0xdb,
5987 0xc6, 0xcc, 0xea, 0xab, 0x86, 0xd0, 0xcd, 0xd1,
5988 0xd3, 0xd2, 0xbf, 0xb9, 0xf2, 0xd2, 0xcb, 0x81,
5989 0xb0, 0xd2, 0xcc, 0xd8, 0xbf, 0xd9, 0xe3, 0xf0,
5990 0xe9, 0xda, 0xf7, 0xf2, 0xdb, 0xf4, 0xf0, 0xc4,
5991 0x82, 0x6e, 0x6e, 0x6d, 0x63, 0x91, 0xd1, 0xd4,
5992 0xd2, 0xe2, 0xec, 0xe4, 0xed, 0xda, 0xbd, 0xe0,
5993 0xcc, 0xd4, 0xec, 0xd6, 0x93, 0x7c, 0x8d, 0x8e,
5994 0x6a, 0xa7, 0xc7, 0xa6, 0x75, 0x74, 0x99, 0xb1,
5995 0x3f, 0x37, 0x51, 0xa1, 0xbe, 0xcd, 0xb9, 0x87,
5996 0x5c, 0x20, 0x4f, 0x69, 0x50, 0x43, 0x42, 0x72,
5997 0x77, 0x63, 0x60, 0x5d, 0x4b, 0x4d, 0x6a, 0x7e,
5998 0x86, 0xb8, 0xaa, 0xbd, 0xde, 0xa8, 0x69, 0x50,
5999 0x56, 0x68, 0x52, 0x40, 0x49, 0x38, 0x3d, 0x77,
6000 0x9d, 0x76, 0x74, 0x76, 0x6a, 0x52, 0x31, 0x2d,
6001 0x3a, 0x41, 0x45, 0x40, 0x34, 0x2c, 0x2c, 0x30,
6002 0x46, 0x43, 0x3d, 0x38, 0x34, 0x31, 0x30, 0x30,
6003 0x2e, 0x51, 0x40, 0x3f, 0x9e, 0x82, 0x54, 0x67,
6004 0x65, 0x5f, 0x61, 0x6d, 0x74, 0x73, 0x71, 0x73,
6005 0x77, 0x75, 0x71, 0x6a, 0x66, 0x68, 0x6f, 0x75,
6006 0x69, 0x69, 0x67, 0x64, 0x60, 0x5f, 0x60, 0x63,
6007 0x63, 0x5d, 0x57, 0x58, 0x60, 0x68, 0x6c, 0x6d,
6008 0x75, 0x71, 0x6f, 0x71, 0x73, 0x71, 0x68, 0x60,
6009 0x60, 0x5f, 0x57, 0x50, 0x59, 0x67, 0x68, 0x5d,
6010 0x61, 0x5e, 0x62, 0x63, 0x4e, 0x34, 0x36, 0x4a,
6011 0x77, 0x65, 0x55, 0x76, 0x7f, 0x65, 0x68, 0x6a,
6012 0x4b, 0x70, 0x90, 0x91, 0x86, 0x85, 0x8d, 0x93,
6013 0x91, 0x7e, 0x6c, 0x6b, 0x77, 0x81, 0x7e, 0x76,
6014 0x50, 0x3e, 0x7e, 0x86, 0x60, 0x6b, 0x75, 0x7d,
6015 0x88, 0x53, 0x61, 0x66, 0x89, 0x91, 0x89, 0x75,
6016 0x5e, 0x7e, 0x83, 0x78, 0x7d, 0x79, 0x73, 0x7c,
6017 0x7e, 0x85, 0x56, 0x3a, 0x6b, 0x90, 0x84, 0x7b,
6018 0x5a, 0xa7, 0xbb, 0x7d, 0x36, 0x0f, 0x1d, 0x4a,
6019 0xa6, 0x8c, 0x8b, 0x91, 0x87, 0x8c, 0x8e, 0x79,
6020 0x8e, 0x35, 0x5b, 0xd2, 0xc3, 0x55, 0x3c, 0x6f,
6021 0x89, 0x94, 0x8f, 0x86, 0xa1, 0x75, 0x1a, 0x25,
6022 0xe3, 0xe5, 0xe7, 0xe0, 0xe6, 0x65, 0x35, 0xbf,
6023 0xed, 0xe7, 0xe0, 0xdd, 0xdf, 0xe1, 0xe1, 0xe0,
6024 0xe2, 0xe1, 0xe1, 0xe0, 0xdf, 0xde, 0xdd, 0xdd,
6025 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6026 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6027 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
6028 0xea, 0xea, 0xec, 0xef, 0xe5, 0xdc, 0xdc, 0xd7,
6029 0xc8, 0xe4, 0xf0, 0xe8, 0xe5, 0xd4, 0xc9, 0xe7,
6030 0xf8, 0xe9, 0xe3, 0xe0, 0xcd, 0xc2, 0xba, 0xc4,
6031 0xb9, 0xd3, 0xf2, 0xac, 0xbd, 0xd9, 0xb4, 0xb3,
6032 0xe5, 0xd7, 0xa7, 0xca, 0xe8, 0xcb, 0xb5, 0xa1,
6033 0xf3, 0xfa, 0xf8, 0xe0, 0xe2, 0xf7, 0xe5, 0xf0,
6034 0xe4, 0xe2, 0xcc, 0xad, 0xb1, 0xb1, 0xac, 0xd0,
6035 0xd3, 0x73, 0x6c, 0x6e, 0x6f, 0xab, 0xd3, 0xe3,
6036 0xdf, 0xe6, 0xe9, 0xe2, 0xf2, 0xe5, 0xc6, 0xe6,
6037 0xdc, 0xc3, 0xaf, 0x7d, 0x3f, 0x4b, 0x72, 0x6e,
6038 0x6b, 0xb3, 0xd1, 0xca, 0x7b, 0x35, 0x62, 0x93,
6039 0x3a, 0x22, 0x28, 0x63, 0xb7, 0x7f, 0x37, 0x4b,
6040 0x39, 0x2d, 0x4c, 0x3a, 0x3e, 0x4e, 0x38, 0x6a,
6041 0x56, 0x49, 0x5d, 0x75, 0x72, 0x7b, 0x93, 0x9a,
6042 0x8e, 0xae, 0x9d, 0xaa, 0xb8, 0x85, 0x4f, 0x2c,
6043 0x50, 0x68, 0x5b, 0x53, 0x60, 0x48, 0x41, 0x71,
6044 0x88, 0x5c, 0x47, 0x6e, 0x63, 0x28, 0x2c, 0x4a,
6045 0x41, 0x3e, 0x3b, 0x3a, 0x3f, 0x49, 0x56, 0x5f,
6046 0x37, 0x3f, 0x41, 0x35, 0x23, 0x1f, 0x2b, 0x3b,
6047 0x31, 0x74, 0x63, 0x40, 0x92, 0x82, 0x5a, 0x69,
6048 0x6d, 0x5e, 0x51, 0x52, 0x58, 0x5d, 0x67, 0x71,
6049 0x5e, 0x6c, 0x7d, 0x82, 0x76, 0x6b, 0x6d, 0x77,
6050 0x76, 0x73, 0x70, 0x70, 0x72, 0x6f, 0x67, 0x60,
6051 0x72, 0x6b, 0x64, 0x65, 0x6e, 0x79, 0x81, 0x83,
6052 0x76, 0x72, 0x6f, 0x70, 0x72, 0x6e, 0x65, 0x5c,
6053 0x5b, 0x57, 0x4a, 0x40, 0x48, 0x59, 0x5e, 0x56,
6054 0x59, 0x47, 0x42, 0x5c, 0x85, 0xa2, 0xaa, 0xa8,
6055 0x9f, 0x58, 0x32, 0x74, 0x99, 0x70, 0x5b, 0x58,
6056 0x70, 0x88, 0x99, 0x94, 0x89, 0x81, 0x7a, 0x71,
6057 0x72, 0x6f, 0x6e, 0x71, 0x74, 0x6d, 0x5d, 0x4e,
6058 0x61, 0x66, 0x8f, 0x80, 0x6f, 0x7b, 0x73, 0x81,
6059 0x61, 0x85, 0x73, 0x84, 0x77, 0x69, 0x53, 0x4e,
6060 0x62, 0x76, 0x70, 0x63, 0x72, 0x89, 0x97, 0xa2,
6061 0x42, 0x2d, 0x09, 0x2b, 0x7b, 0x7c, 0x51, 0x51,
6062 0x3d, 0x7d, 0x99, 0xa5, 0xd7, 0xed, 0xb9, 0x7d,
6063 0xa2, 0x8b, 0x52, 0x34, 0x64, 0xa3, 0xa5, 0x84,
6064 0xd9, 0xb0, 0xbd, 0xf1, 0xff, 0xff, 0x88, 0x00,
6065 0x44, 0x80, 0x77, 0xb9, 0xf5, 0x97, 0x32, 0x0a,
6066 0xe9, 0xe9, 0xe6, 0xe4, 0xe5, 0x61, 0x47, 0xcf,
6067 0xed, 0xe7, 0xe0, 0xdd, 0xde, 0xe0, 0xe1, 0xe0,
6068 0xe3, 0xe2, 0xe1, 0xe1, 0xdf, 0xde, 0xde, 0xdd,
6069 0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0,
6070 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6071 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
6072 0xec, 0xe2, 0xe6, 0xde, 0xe9, 0xf3, 0xd4, 0xc3,
6073 0xbd, 0xcd, 0xe4, 0xdd, 0xdf, 0xe5, 0xd6, 0xe1,
6074 0xee, 0xda, 0xde, 0xd8, 0xe0, 0xc5, 0xd6, 0xd3,
6075 0x90, 0xae, 0xd6, 0xa1, 0xd3, 0xc1, 0x9b, 0xbb,
6076 0xe8, 0xe6, 0xa0, 0xce, 0xd2, 0xd3, 0xa4, 0xba,
6077 0xf8, 0xda, 0xef, 0xe0, 0xde, 0xcd, 0xd8, 0xd7,
6078 0xc6, 0xb4, 0xd7, 0xe9, 0xe2, 0xef, 0xd9, 0xa8,
6079 0xc1, 0xb2, 0x8d, 0x86, 0x8a, 0x9c, 0xcc, 0xe0,
6080 0xe5, 0xe5, 0xe1, 0xd8, 0xec, 0xe0, 0xbf, 0xdb,
6081 0xe6, 0x97, 0x7b, 0x7d, 0x61, 0x57, 0x60, 0x53,
6082 0x5a, 0x3d, 0x68, 0x74, 0x8d, 0x93, 0x57, 0x67,
6083 0x62, 0x50, 0x85, 0xa5, 0xe3, 0xa6, 0x6d, 0x81,
6084 0x62, 0x4d, 0x6a, 0x43, 0x31, 0x46, 0x3b, 0x6f,
6085 0x79, 0x55, 0x4f, 0x56, 0x4f, 0x63, 0x8a, 0x96,
6086 0xad, 0xae, 0x91, 0x97, 0xa6, 0xa6, 0xa3, 0x7d,
6087 0x72, 0x5b, 0x51, 0x56, 0x54, 0x4f, 0x51, 0x56,
6088 0x4e, 0x72, 0x52, 0x88, 0xa9, 0x61, 0x42, 0x2d,
6089 0x33, 0x34, 0x37, 0x3c, 0x3f, 0x3c, 0x35, 0x2e,
6090 0x45, 0x51, 0x57, 0x4e, 0x3d, 0x36, 0x40, 0x4e,
6091 0x52, 0x53, 0x50, 0x61, 0xa1, 0x76, 0x5e, 0x80,
6092 0x63, 0x5b, 0x54, 0x56, 0x5e, 0x69, 0x71, 0x76,
6093 0x79, 0x75, 0x71, 0x75, 0x7f, 0x86, 0x84, 0x7e,
6094 0x6d, 0x6d, 0x6f, 0x6f, 0x6e, 0x6a, 0x66, 0x62,
6095 0x48, 0x4e, 0x5a, 0x6b, 0x79, 0x7d, 0x78, 0x70,
6096 0x77, 0x70, 0x69, 0x64, 0x60, 0x57, 0x49, 0x3e,
6097 0x4f, 0x55, 0x50, 0x3f, 0x3a, 0x49, 0x5b, 0x63,
6098 0x96, 0xa2, 0xa8, 0x9c, 0x8a, 0x80, 0x7e, 0x7f,
6099 0x7f, 0x6b, 0x53, 0x6f, 0x80, 0x6d, 0x60, 0x49,
6100 0x64, 0x6f, 0x76, 0x79, 0x82, 0x8d, 0x8b, 0x81,
6101 0x71, 0x7e, 0x88, 0x84, 0x75, 0x6c, 0x70, 0x79,
6102 0x7e, 0x93, 0x8e, 0x58, 0x5f, 0x72, 0x64, 0x8f,
6103 0xbe, 0xfa, 0x86, 0x72, 0x75, 0xbb, 0xc8, 0xbd,
6104 0xba, 0x63, 0x56, 0x41, 0x11, 0x6b, 0xd4, 0xb5,
6105 0x58, 0x7d, 0x71, 0x65, 0x7a, 0x60, 0x35, 0x3b,
6106 0x1d, 0x59, 0x5f, 0x4d, 0x77, 0x96, 0x60, 0x15,
6107 0x25, 0x50, 0x37, 0x33, 0x4b, 0x12, 0x1f, 0xb1,
6108 0xd4, 0xac, 0xd0, 0xff, 0xf1, 0xce, 0xb5, 0x8f,
6109 0xe6, 0xda, 0x72, 0xc0, 0xf6, 0x61, 0x14, 0x05,
6110 0xe4, 0xe2, 0xd6, 0xe3, 0xdd, 0x44, 0x4c, 0xd6,
6111 0xea, 0xe6, 0xe0, 0xdf, 0xe0, 0xe0, 0xdf, 0xdd,
6112 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf, 0xe0, 0xe0,
6113 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xdf,
6114 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6115 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6116 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6117 0xb1, 0x9e, 0xd6, 0xd1, 0xe7, 0xf2, 0xd6, 0xcc,
6118 0xe9, 0xe9, 0xf2, 0xd3, 0xd6, 0xd3, 0xd8, 0xcb,
6119 0x95, 0xe2, 0xd8, 0xa1, 0xac, 0x8d, 0xa4, 0xd9,
6120 0xd6, 0xe7, 0xa0, 0xad, 0xe7, 0xd0, 0xa8, 0xea,
6121 0xf2, 0xe1, 0xdd, 0xe1, 0xdb, 0xd4, 0xd5, 0xd7,
6122 0xcb, 0xe9, 0xf6, 0xec, 0xce, 0xc6, 0xd3, 0xc5,
6123 0x98, 0xa0, 0x96, 0x53, 0x6b, 0xaa, 0xea, 0xf1,
6124 0xdc, 0xdd, 0xe2, 0xf2, 0xe4, 0xd9, 0xb0, 0xcd,
6125 0xc6, 0xb4, 0xb6, 0x8e, 0x77, 0x90, 0x7d, 0x57,
6126 0x7a, 0x94, 0x75, 0x90, 0x51, 0x83, 0xab, 0xab,
6127 0xac, 0xaa, 0xbe, 0xb8, 0xca, 0x85, 0x59, 0x7c,
6128 0x58, 0x5f, 0x60, 0x59, 0x4f, 0x4b, 0x49, 0x48,
6129 0x6a, 0x48, 0x71, 0x43, 0x69, 0x7e, 0x7e, 0x98,
6130 0xa9, 0xa7, 0xa7, 0xac, 0xb6, 0x8a, 0x4a, 0x4c,
6131 0x44, 0x5e, 0x40, 0x59, 0x75, 0x5a, 0x4f, 0x36,
6132 0x46, 0x6b, 0x59, 0x69, 0x4e, 0x12, 0x3c, 0x6c,
6133 0x65, 0x47, 0x3b, 0x48, 0x48, 0x36, 0x35, 0x45,
6134 0x37, 0x41, 0x48, 0x45, 0x3d, 0x3d, 0x49, 0x56,
6135 0x7a, 0x69, 0x5a, 0x69, 0xa2, 0x6b, 0x4d, 0x6c,
6136 0x65, 0x6a, 0x71, 0x74, 0x72, 0x6f, 0x6f, 0x70,
6137 0x61, 0x52, 0x4f, 0x5c, 0x5d, 0x52, 0x57, 0x69,
6138 0x70, 0x6a, 0x67, 0x6f, 0x7d, 0x86, 0x87, 0x83,
6139 0x6c, 0x7b, 0x8f, 0x98, 0x93, 0x87, 0x7c, 0x76,
6140 0x76, 0x74, 0x71, 0x70, 0x6d, 0x68, 0x61, 0x5b,
6141 0x5b, 0x6d, 0x71, 0x68, 0x74, 0x92, 0x9a, 0x8d,
6142 0x9e, 0x9e, 0x90, 0x8f, 0x9e, 0x94, 0x82, 0x83,
6143 0x8b, 0x70, 0x60, 0x5e, 0x57, 0x68, 0x8a, 0x82,
6144 0x5e, 0x75, 0x8e, 0x8f, 0x8e, 0x83, 0x76, 0x88,
6145 0x8d, 0x80, 0x7a, 0x73, 0x64, 0x9f, 0x87, 0x78,
6146 0x64, 0x75, 0x85, 0x80, 0x7e, 0xa7, 0xbc, 0x96,
6147 0xc4, 0xd5, 0xa5, 0x57, 0x63, 0xaf, 0xb4, 0x74,
6148 0x7a, 0x97, 0x7c, 0x5a, 0x90, 0x85, 0x2d, 0x34,
6149 0x0e, 0x33, 0x63, 0x34, 0x3d, 0x49, 0x57, 0x11,
6150 0x46, 0x7d, 0xa0, 0x8e, 0x37, 0x18, 0x4a, 0x41,
6151 0x2f, 0x20, 0x27, 0x31, 0x61, 0x5c, 0x54, 0xd6,
6152 0xd1, 0x64, 0x81, 0x9a, 0xa6, 0xd5, 0x8f, 0x24,
6153 0x0f, 0x1b, 0x3f, 0x2a, 0x2e, 0x45, 0x18, 0x02,
6154 0xe2, 0xe0, 0xd5, 0xe2, 0xd7, 0x41, 0x51, 0xd6,
6155 0xe8, 0xe3, 0xde, 0xdd, 0xde, 0xdf, 0xdd, 0xdb,
6156 0xdb, 0xdb, 0xdc, 0xdd, 0xdd, 0xde, 0xdf, 0xdf,
6157 0xe0, 0xe0, 0xe0, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6158 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6159 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6160 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
6161 0xe1, 0x9b, 0x8a, 0xcf, 0xe0, 0xf0, 0xdb, 0xb8,
6162 0xd1, 0xe7, 0xe2, 0xd9, 0xe2, 0x9e, 0xad, 0xaf,
6163 0x9f, 0xad, 0xdb, 0xb0, 0xa8, 0x99, 0xbe, 0xd8,
6164 0xb8, 0xe6, 0xb9, 0xc9, 0xe0, 0xb5, 0xc9, 0xec,
6165 0xea, 0xdc, 0xe3, 0xdb, 0xc5, 0xd8, 0xe4, 0xc2,
6166 0xdf, 0xe7, 0xde, 0xd8, 0xdf, 0xe3, 0xde, 0xd7,
6167 0x8d, 0xa4, 0xad, 0x41, 0x3c, 0x9e, 0xdb, 0xcb,
6168 0xe2, 0xea, 0xe3, 0xdc, 0xcf, 0xdf, 0xc8, 0xe4,
6169 0x94, 0x4c, 0x65, 0x78, 0x7f, 0x64, 0x2a, 0x5b,
6170 0x58, 0x7a, 0x47, 0x5d, 0x81, 0x72, 0x8b, 0xe5,
6171 0xb4, 0xb8, 0xb2, 0x67, 0x66, 0x69, 0x58, 0x3f,
6172 0x5c, 0x4b, 0x4c, 0x65, 0x71, 0x64, 0x54, 0x51,
6173 0x96, 0x3c, 0x5e, 0x62, 0x6e, 0x85, 0x75, 0x6e,
6174 0x97, 0xa6, 0xb6, 0xc0, 0xad, 0x87, 0x5e, 0x32,
6175 0x4b, 0x5b, 0x5c, 0x68, 0x4a, 0x48, 0x84, 0x86,
6176 0x4e, 0xa0, 0x8d, 0x66, 0x4d, 0x40, 0x4e, 0x2c,
6177 0x42, 0x41, 0x3f, 0x41, 0x49, 0x50, 0x47, 0x39,
6178 0x29, 0x2f, 0x34, 0x37, 0x38, 0x3c, 0x46, 0x4e,
6179 0x73, 0x6e, 0x5c, 0x5e, 0x9a, 0x72, 0x4f, 0x5c,
6180 0x66, 0x63, 0x5e, 0x58, 0x54, 0x55, 0x59, 0x5c,
6181 0x69, 0x75, 0x77, 0x6a, 0x64, 0x6d, 0x75, 0x74,
6182 0x7a, 0x6b, 0x61, 0x6d, 0x83, 0x8b, 0x7b, 0x66,
6183 0x80, 0x7c, 0x7d, 0x83, 0x86, 0x7c, 0x65, 0x52,
6184 0x3c, 0x4d, 0x62, 0x6d, 0x6e, 0x6a, 0x6a, 0x6c,
6185 0x76, 0x5b, 0x47, 0x51, 0x70, 0x88, 0x8d, 0x88,
6186 0x82, 0x8c, 0x82, 0x6c, 0x70, 0x85, 0x84, 0x70,
6187 0x69, 0x5f, 0x7b, 0x71, 0x78, 0x79, 0x85, 0x6f,
6188 0x56, 0x5c, 0x85, 0x88, 0x6a, 0x73, 0x82, 0x77,
6189 0x68, 0x77, 0x77, 0xa6, 0xeb, 0xf9, 0xc5, 0xc5,
6190 0xc9, 0xc3, 0xa8, 0xcd, 0x98, 0x55, 0x98, 0xa7,
6191 0xa3, 0x7d, 0x7d, 0xad, 0xbf, 0x9d, 0x80, 0x82,
6192 0xae, 0xeb, 0xb4, 0xcd, 0xb1, 0x66, 0x8b, 0x57,
6193 0x4e, 0x3f, 0x34, 0x36, 0x25, 0x2b, 0x2e, 0x2f,
6194 0x37, 0x33, 0x17, 0x3c, 0x69, 0x62, 0x4c, 0x1b,
6195 0x38, 0x4f, 0x29, 0x13, 0x60, 0x62, 0x0a, 0x00,
6196 0x54, 0x80, 0x28, 0x92, 0xff, 0xd3, 0xa7, 0x9f,
6197 0x61, 0x41, 0x55, 0x67, 0x92, 0x9c, 0x3e, 0x02,
6198 0xdf, 0xdc, 0xd3, 0xe0, 0xcc, 0x3c, 0x59, 0xd6,
6199 0xe4, 0xdf, 0xda, 0xd9, 0xdb, 0xdc, 0xda, 0xd8,
6200 0xd9, 0xd9, 0xda, 0xda, 0xdb, 0xdc, 0xdc, 0xdd,
6201 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
6202 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6203 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6204 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
6205 0xf4, 0xd7, 0x99, 0xc8, 0xdb, 0xe9, 0xf1, 0xc8,
6206 0xc7, 0xe1, 0xd6, 0xdc, 0xe5, 0x8e, 0xd3, 0xd5,
6207 0xa7, 0xdb, 0xdf, 0x98, 0xb3, 0xb8, 0xd2, 0xcb,
6208 0xb6, 0xdc, 0xb9, 0xe9, 0xde, 0xaa, 0xe3, 0xd6,
6209 0xda, 0xeb, 0xdc, 0xc4, 0xcd, 0xdb, 0xd1, 0xc4,
6210 0xd0, 0xda, 0xe6, 0xeb, 0xec, 0xd7, 0xca, 0xe5,
6211 0x7e, 0x85, 0xa5, 0x4a, 0x5e, 0xd0, 0xb5, 0x5b,
6212 0xaf, 0xd7, 0xe6, 0xde, 0xcf, 0xe4, 0xca, 0xda,
6213 0xab, 0xa8, 0x7a, 0x7f, 0x87, 0x5e, 0x50, 0x57,
6214 0x91, 0x9c, 0x74, 0x21, 0x1f, 0x7d, 0xf1, 0xef,
6215 0x8c, 0xbc, 0xff, 0xd3, 0xb4, 0x9e, 0x86, 0x60,
6216 0x47, 0x6d, 0x72, 0x4d, 0x42, 0x60, 0x6d, 0x5c,
6217 0x70, 0x5d, 0x6f, 0x48, 0x27, 0x76, 0x7b, 0x69,
6218 0x39, 0x45, 0x5d, 0xa2, 0xb3, 0xb0, 0xb7, 0x71,
6219 0x66, 0x5d, 0x57, 0x68, 0x5e, 0x5c, 0x71, 0x55,
6220 0x2e, 0x4c, 0x47, 0x5f, 0x5c, 0x33, 0x34, 0x2e,
6221 0x3e, 0x63, 0x76, 0x5d, 0x3f, 0x3a, 0x44, 0x4a,
6222 0x66, 0x5b, 0x4e, 0x49, 0x4c, 0x54, 0x5a, 0x5d,
6223 0x64, 0x69, 0x58, 0x53, 0x98, 0x81, 0x5c, 0x58,
6224 0x5d, 0x6a, 0x77, 0x78, 0x70, 0x6b, 0x70, 0x77,
6225 0x72, 0x87, 0x89, 0x71, 0x64, 0x6e, 0x74, 0x6d,
6226 0x6f, 0x6e, 0x6c, 0x69, 0x66, 0x64, 0x64, 0x64,
6227 0x6c, 0x71, 0x76, 0x76, 0x70, 0x68, 0x61, 0x5d,
6228 0x60, 0x69, 0x6e, 0x62, 0x50, 0x4a, 0x54, 0x63,
6229 0x36, 0x3d, 0x4c, 0x62, 0x77, 0x87, 0x95, 0x9e,
6230 0x6e, 0x7b, 0x75, 0x75, 0x7d, 0x6e, 0x6f, 0x94,
6231 0x8a, 0x3d, 0x52, 0x5a, 0x68, 0x52, 0x5b, 0x86,
6232 0x44, 0x67, 0x80, 0xa3, 0xc8, 0xbd, 0xb5, 0xd5,
6233 0xc1, 0xa9, 0xea, 0xc0, 0x78, 0x6a, 0x8b, 0xd0,
6234 0xca, 0xbf, 0xb9, 0xd2, 0xce, 0xbf, 0xaf, 0x6e,
6235 0x42, 0x2b, 0x2d, 0x51, 0x65, 0x57, 0x46, 0x45,
6236 0x40, 0x23, 0x6b, 0xb9, 0x73, 0x1e, 0x3d, 0x71,
6237 0x1c, 0x34, 0x1f, 0x36, 0x1e, 0x2e, 0x14, 0x2c,
6238 0x30, 0x64, 0x49, 0x4a, 0x69, 0x54, 0x36, 0x1a,
6239 0x36, 0x3f, 0x16, 0x1e, 0x56, 0x72, 0x8a, 0x9d,
6240 0x7e, 0xd7, 0xfe, 0xda, 0xe4, 0xdf, 0x6a, 0x01,
6241 0x55, 0x31, 0x3d, 0x3e, 0x54, 0x5c, 0x1f, 0x09,
6242 0xda, 0xd8, 0xd2, 0xdd, 0xbd, 0x35, 0x64, 0xd6,
6243 0xde, 0xda, 0xd5, 0xd4, 0xd6, 0xd8, 0xd7, 0xd5,
6244 0xd6, 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xda,
6245 0xdb, 0xdc, 0xdc, 0xdd, 0xdd, 0xde, 0xde, 0xde,
6246 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6247 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6248 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6249 0xe9, 0xdf, 0x9e, 0x97, 0xdf, 0xe4, 0xf2, 0xe1,
6250 0xa3, 0xb1, 0xcd, 0xe1, 0xdf, 0x96, 0xe3, 0xc7,
6251 0xaf, 0xbf, 0x98, 0xaa, 0xbb, 0xb6, 0xe5, 0xbb,
6252 0xc1, 0xc9, 0xa2, 0xe5, 0xbb, 0xb1, 0xf6, 0xe5,
6253 0xda, 0xec, 0xcf, 0xc0, 0xde, 0xda, 0xc2, 0xd1,
6254 0xdf, 0xd8, 0xd8, 0xd5, 0xe0, 0xe9, 0xd8, 0xd2,
6255 0x7c, 0x60, 0x8b, 0x55, 0x54, 0x8b, 0x60, 0x56,
6256 0x90, 0xb1, 0xc5, 0xd6, 0xdf, 0xf2, 0xb8, 0xaa,
6257 0x90, 0xa0, 0x72, 0x6a, 0x60, 0x3d, 0x45, 0x3c,
6258 0x87, 0xac, 0x8d, 0x74, 0x8a, 0x8f, 0x9b, 0xc8,
6259 0x5e, 0x61, 0xb0, 0xd1, 0xc2, 0x69, 0x48, 0x65,
6260 0x46, 0x56, 0x5a, 0x4f, 0x4c, 0x4d, 0x38, 0x19,
6261 0x88, 0x6e, 0x60, 0x6f, 0x55, 0x5d, 0x31, 0x52,
6262 0x82, 0x70, 0x4a, 0x90, 0xb7, 0xa8, 0xaa, 0x5a,
6263 0x38, 0x51, 0x50, 0x5b, 0x6e, 0x5b, 0x44, 0x41,
6264 0x3b, 0x56, 0x61, 0x73, 0x5a, 0x2c, 0x3a, 0x4e,
6265 0x39, 0x38, 0x39, 0x3f, 0x4c, 0x58, 0x5d, 0x5b,
6266 0x54, 0x3f, 0x29, 0x27, 0x38, 0x4f, 0x5c, 0x5f,
6267 0x59, 0x5f, 0x52, 0x55, 0xa2, 0x8e, 0x69, 0x65,
6268 0x65, 0x6c, 0x72, 0x73, 0x6f, 0x6d, 0x70, 0x74,
6269 0x6d, 0x71, 0x76, 0x79, 0x78, 0x79, 0x80, 0x88,
6270 0x89, 0x76, 0x60, 0x58, 0x5e, 0x67, 0x69, 0x67,
6271 0x68, 0x6e, 0x70, 0x68, 0x5a, 0x50, 0x50, 0x54,
6272 0x4a, 0x56, 0x60, 0x5e, 0x52, 0x4b, 0x4e, 0x55,
6273 0x4c, 0x56, 0x51, 0x46, 0x56, 0x78, 0x81, 0x73,
6274 0x98, 0x8c, 0x8a, 0x7a, 0x6e, 0x90, 0xaa, 0x93,
6275 0x80, 0x6e, 0x90, 0x8a, 0x7b, 0x9b, 0x98, 0xd0,
6276 0xb3, 0x87, 0x85, 0xb7, 0xb2, 0x88, 0x8d, 0xa1,
6277 0x79, 0x67, 0x56, 0x32, 0x85, 0xb2, 0x9e, 0x6b,
6278 0x39, 0x51, 0xb1, 0x59, 0x18, 0x4b, 0x2b, 0x36,
6279 0x1d, 0x3b, 0x3f, 0x35, 0x66, 0xbf, 0xe2, 0xcc,
6280 0x6a, 0x43, 0xb1, 0xb9, 0xdd, 0xfd, 0x4a, 0x00,
6281 0xcc, 0xb9, 0x6b, 0x43, 0x2d, 0x37, 0x18, 0x16,
6282 0x36, 0xe7, 0xe9, 0x6f, 0x51, 0x90, 0x96, 0x33,
6283 0x29, 0x25, 0x16, 0x34, 0x28, 0x3e, 0xc7, 0xff,
6284 0x9d, 0x22, 0x65, 0x64, 0x15, 0x20, 0x21, 0x32,
6285 0x32, 0x2a, 0x3a, 0x1a, 0x19, 0x33, 0x18, 0x16,
6286 0xd5, 0xd3, 0xd0, 0xda, 0xae, 0x2e, 0x70, 0xd6,
6287 0xd8, 0xd4, 0xd0, 0xcf, 0xd2, 0xd3, 0xd3, 0xd1,
6288 0xd2, 0xd3, 0xd3, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6,
6289 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xdd, 0xde,
6290 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6291 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6292 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
6293 0xeb, 0xe2, 0xc0, 0x7d, 0x9b, 0xca, 0xde, 0xcc,
6294 0xcc, 0xb3, 0xcb, 0xd4, 0xd2, 0x95, 0xb9, 0xb7,
6295 0xdf, 0xce, 0x6b, 0x96, 0xb4, 0xc6, 0xe2, 0xd0,
6296 0x9a, 0xba, 0xa9, 0xdd, 0x9f, 0xd1, 0xf3, 0xea,
6297 0xe2, 0xd7, 0xcd, 0xcf, 0xd7, 0xdc, 0xd8, 0xd0,
6298 0xe5, 0xe0, 0xd8, 0xba, 0xb2, 0xd2, 0xbe, 0x73,
6299 0x73, 0x65, 0x5e, 0x1d, 0x4e, 0xb2, 0x74, 0x4e,
6300 0x80, 0xaf, 0xd7, 0xec, 0xda, 0xcb, 0x8a, 0x88,
6301 0x84, 0x64, 0x9c, 0x6a, 0x3b, 0x4c, 0x3a, 0x72,
6302 0xb1, 0x5c, 0x37, 0x9c, 0x9c, 0x7c, 0x50, 0x8b,
6303 0x93, 0x54, 0x68, 0xab, 0xe2, 0x80, 0x35, 0x54,
6304 0x76, 0x78, 0x67, 0x4b, 0x45, 0x4e, 0x48, 0x35,
6305 0x6f, 0x69, 0x5d, 0x63, 0x29, 0x28, 0x31, 0x81,
6306 0xba, 0xb9, 0x61, 0x6f, 0xa4, 0xac, 0xbc, 0x89,
6307 0x7e, 0x84, 0x77, 0x68, 0x71, 0x65, 0x4b, 0x55,
6308 0x4b, 0x46, 0x38, 0x43, 0x5c, 0x6f, 0x70, 0x51,
6309 0x53, 0x4d, 0x47, 0x49, 0x50, 0x54, 0x4f, 0x47,
6310 0x50, 0x3e, 0x2e, 0x33, 0x48, 0x59, 0x5b, 0x56,
6311 0x5f, 0x60, 0x57, 0x62, 0xab, 0x8a, 0x66, 0x6b,
6312 0x66, 0x65, 0x69, 0x74, 0x7f, 0x81, 0x79, 0x6f,
6313 0x69, 0x5c, 0x5e, 0x71, 0x7c, 0x77, 0x77, 0x80,
6314 0x8d, 0x7d, 0x6a, 0x62, 0x66, 0x6f, 0x74, 0x75,
6315 0x7c, 0x73, 0x6b, 0x6c, 0x72, 0x73, 0x6c, 0x64,
6316 0x76, 0x73, 0x6c, 0x63, 0x58, 0x4c, 0x43, 0x3e,
6317 0x4d, 0x5c, 0x58, 0x46, 0x4f, 0x75, 0x91, 0x93,
6318 0x8e, 0x85, 0x82, 0xc0, 0xf6, 0xaf, 0x5a, 0x64,
6319 0x8f, 0x8e, 0x8b, 0x96, 0x90, 0xe3, 0xaa, 0xb7,
6320 0x8c, 0x9f, 0x9e, 0xa1, 0x97, 0x98, 0xa6, 0x86,
6321 0x4f, 0x81, 0x73, 0xa7, 0xd4, 0x63, 0x89, 0xcd,
6322 0x93, 0x3c, 0x72, 0x67, 0x61, 0x71, 0x26, 0x33,
6323 0x39, 0x40, 0x31, 0x17, 0x19, 0x32, 0x34, 0x20,
6324 0x45, 0x9c, 0xea, 0xff, 0xff, 0xc1, 0x75, 0x9d,
6325 0xd6, 0xff, 0xb0, 0x50, 0xce, 0xff, 0xfa, 0xf0,
6326 0xdf, 0xab, 0x62, 0x44, 0x21, 0x16, 0x35, 0x1f,
6327 0x1b, 0x44, 0x34, 0x3e, 0x31, 0x1f, 0x5c, 0x76,
6328 0x41, 0x4e, 0x0d, 0x33, 0x4d, 0x2b, 0x40, 0x1a,
6329 0x20, 0x21, 0x30, 0x13, 0x2a, 0x57, 0x21, 0x00,
6330 0xd0, 0xce, 0xce, 0xd7, 0x9f, 0x27, 0x7b, 0xd7,
6331 0xd3, 0xcf, 0xcb, 0xcb, 0xcd, 0xd0, 0xcf, 0xce,
6332 0xcf, 0xd0, 0xd0, 0xd1, 0xd2, 0xd2, 0xd3, 0xd3,
6333 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdc, 0xdd, 0xdd,
6334 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6335 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6336 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
6337 0xdc, 0xdf, 0xea, 0xa7, 0x50, 0xa3, 0xe1, 0xd9,
6338 0xca, 0xaf, 0xc1, 0xe3, 0xf1, 0x9a, 0x65, 0x96,
6339 0xff, 0xeb, 0x8b, 0x86, 0xc3, 0xea, 0xca, 0xd5,
6340 0x97, 0xcf, 0xb9, 0xb8, 0x9a, 0xef, 0xdf, 0xcc,
6341 0xd7, 0xd4, 0xc9, 0xc7, 0xd8, 0xe6, 0xe1, 0xd4,
6342 0xca, 0xd6, 0xe7, 0xe7, 0xc6, 0xc9, 0xcf, 0x8f,
6343 0x65, 0x75, 0x6d, 0x48, 0x4f, 0x7d, 0x7a, 0xac,
6344 0xaf, 0xd2, 0xe7, 0xec, 0xdb, 0xe5, 0xcf, 0xee,
6345 0xda, 0x78, 0x8e, 0x95, 0x91, 0x8c, 0x49, 0x47,
6346 0x3a, 0x78, 0x7a, 0x9d, 0x84, 0x86, 0x32, 0x52,
6347 0x7b, 0x4e, 0x3d, 0x4e, 0xa6, 0x8e, 0x53, 0x55,
6348 0x32, 0x60, 0x6e, 0x4c, 0x39, 0x46, 0x3e, 0x1f,
6349 0x30, 0x5b, 0x68, 0x41, 0x2b, 0x8b, 0x9c, 0x4b,
6350 0x7c, 0xc2, 0xa1, 0x8e, 0x9e, 0x90, 0x76, 0x40,
6351 0x4f, 0x32, 0x45, 0x43, 0x3b, 0x4f, 0x4e, 0x49,
6352 0x35, 0x30, 0x36, 0x39, 0x30, 0x35, 0x47, 0x4c,
6353 0x5b, 0x61, 0x5d, 0x58, 0x60, 0x68, 0x52, 0x30,
6354 0x22, 0x22, 0x2d, 0x48, 0x67, 0x77, 0x72, 0x67,
6355 0x5e, 0x65, 0x61, 0x69, 0xa7, 0x7e, 0x5a, 0x66,
6356 0x5a, 0x6c, 0x82, 0x8e, 0x8e, 0x8a, 0x88, 0x89,
6357 0x83, 0x7a, 0x75, 0x7c, 0x85, 0x85, 0x7d, 0x74,
6358 0x67, 0x6e, 0x72, 0x6c, 0x61, 0x5d, 0x63, 0x6c,
6359 0x6c, 0x6d, 0x70, 0x76, 0x7c, 0x81, 0x82, 0x81,
6360 0x77, 0x6b, 0x5b, 0x52, 0x50, 0x53, 0x56, 0x57,
6361 0x46, 0x4b, 0x4d, 0x49, 0x4a, 0x63, 0x95, 0xbf,
6362 0x8e, 0xac, 0x85, 0x70, 0x9a, 0x8c, 0x70, 0x95,
6363 0xff, 0xdb, 0x92, 0x81, 0x78, 0xaa, 0x4f, 0x35,
6364 0xa2, 0xd3, 0xcc, 0xe0, 0xe4, 0xb4, 0xb2, 0xbe,
6365 0xb5, 0xbd, 0xb8, 0xb9, 0xc3, 0x78, 0x4a, 0x66,
6366 0x2d, 0x2d, 0x46, 0x6d, 0x40, 0x07, 0x17, 0x1a,
6367 0x27, 0x2e, 0x2a, 0x1c, 0x1f, 0x31, 0x37, 0x2e,
6368 0x3c, 0x3b, 0x0b, 0x4b, 0x84, 0x29, 0x23, 0x97,
6369 0xe4, 0xa4, 0xf7, 0xfc, 0xc6, 0xb9, 0xff, 0xc0,
6370 0x4a, 0x3b, 0x24, 0x23, 0x1c, 0x47, 0x7e, 0x50,
6371 0x33, 0x56, 0x2b, 0x2b, 0x47, 0x16, 0x1b, 0x75,
6372 0xff, 0xc2, 0x3a, 0x1d, 0x4e, 0x3c, 0x20, 0x2d,
6373 0x34, 0x23, 0x25, 0x03, 0x11, 0x39, 0x14, 0x00,
6374 0xcc, 0xcb, 0xcc, 0xd5, 0x94, 0x22, 0x84, 0xd7,
6375 0xcf, 0xcb, 0xc7, 0xc7, 0xca, 0xcc, 0xcc, 0xcb,
6376 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0, 0xd1, 0xd1,
6377 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xdb, 0xdc, 0xdd,
6378 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6379 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6380 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6381 0xec, 0xda, 0xde, 0xdc, 0x6c, 0x67, 0xbc, 0xdd,
6382 0xe4, 0xc8, 0xb9, 0xe7, 0xf7, 0xb5, 0x79, 0xd3,
6383 0xec, 0xa0, 0xa8, 0xba, 0xde, 0xdb, 0xcc, 0xa9,
6384 0xb1, 0xe6, 0xba, 0x88, 0xad, 0xe6, 0xd5, 0xd6,
6385 0xce, 0xc8, 0xb8, 0xc1, 0xdf, 0xe4, 0xd9, 0xde,
6386 0xde, 0xd9, 0xc8, 0xe5, 0xdc, 0xcb, 0xd4, 0x95,
6387 0x6e, 0x82, 0x62, 0x65, 0x70, 0x89, 0x7a, 0x72,
6388 0xbb, 0xd5, 0xde, 0xe7, 0xed, 0xfb, 0xb2, 0x95,
6389 0x63, 0x3e, 0x4f, 0xa6, 0xa3, 0x50, 0x49, 0x6e,
6390 0x7f, 0x84, 0xcb, 0xe0, 0xaf, 0xff, 0xdf, 0x69,
6391 0x4c, 0x65, 0x82, 0x68, 0x87, 0x80, 0x5c, 0x47,
6392 0x67, 0x4c, 0x40, 0x4e, 0x56, 0x4b, 0x43, 0x45,
6393 0x55, 0x75, 0x8d, 0x59, 0x3d, 0x70, 0xb0, 0x88,
6394 0x7f, 0x92, 0x84, 0x66, 0x4b, 0x3a, 0x39, 0x36,
6395 0x3b, 0x36, 0x66, 0x56, 0x2c, 0x2f, 0x2b, 0x38,
6396 0x3a, 0x3c, 0x4e, 0x49, 0x3c, 0x49, 0x4c, 0x3e,
6397 0x30, 0x4d, 0x64, 0x5b, 0x44, 0x36, 0x37, 0x3d,
6398 0x39, 0x3b, 0x43, 0x53, 0x63, 0x67, 0x5d, 0x51,
6399 0x3e, 0x5d, 0x64, 0x60, 0x97, 0x7a, 0x5f, 0x66,
6400 0x64, 0x71, 0x79, 0x71, 0x62, 0x5e, 0x6d, 0x7e,
6401 0x71, 0x73, 0x72, 0x73, 0x7a, 0x80, 0x7a, 0x6e,
6402 0x65, 0x5f, 0x5b, 0x5d, 0x63, 0x61, 0x56, 0x4c,
6403 0x59, 0x64, 0x6f, 0x6f, 0x66, 0x60, 0x63, 0x69,
6404 0x4d, 0x51, 0x55, 0x55, 0x51, 0x4e, 0x4e, 0x50,
6405 0x47, 0x41, 0x48, 0x60, 0x77, 0x76, 0x5f, 0x49,
6406 0x4a, 0x38, 0x91, 0xc1, 0x7b, 0x7c, 0xac, 0x8e,
6407 0x0f, 0x34, 0x2f, 0x17, 0x60, 0xa9, 0x8f, 0x4d,
6408 0x19, 0x54, 0x5d, 0x5c, 0x5f, 0xa1, 0xe4, 0xa6,
6409 0x3a, 0x27, 0x4c, 0x8d, 0xc5, 0xb2, 0x35, 0x1b,
6410 0x21, 0x62, 0x4e, 0x3a, 0x18, 0x2b, 0x74, 0x3c,
6411 0x59, 0x68, 0x57, 0x2b, 0x1d, 0x32, 0x36, 0x22,
6412 0x10, 0x65, 0x71, 0x33, 0x2b, 0x4c, 0x63, 0x7b,
6413 0x3f, 0xe4, 0xfa, 0x90, 0x71, 0x4d, 0x3b, 0x64,
6414 0xff, 0xe9, 0x90, 0x4d, 0x20, 0x2e, 0x80, 0x9e,
6415 0x51, 0x2f, 0x17, 0x13, 0x24, 0x28, 0x5b, 0xd9,
6416 0x9a, 0x86, 0x99, 0x30, 0x4d, 0xff, 0xff, 0xff,
6417 0xa2, 0x4d, 0x2f, 0x23, 0x2e, 0x34, 0x17, 0x30,
6418 0xcb, 0xc9, 0xcc, 0xd4, 0x8d, 0x1f, 0x88, 0xd7,
6419 0xcc, 0xc8, 0xc5, 0xc5, 0xc8, 0xcb, 0xcb, 0xc9,
6420 0xcc, 0xcc, 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0,
6421 0xd3, 0xd4, 0xd5, 0xd7, 0xd9, 0xdb, 0xdc, 0xdd,
6422 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6423 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6424 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6425 0xd5, 0xe6, 0xdc, 0xea, 0xaf, 0x51, 0xb3, 0xeb,
6426 0xdc, 0xc9, 0xaf, 0xe5, 0xe0, 0xc0, 0x9a, 0xe9,
6427 0xe5, 0xc3, 0xca, 0xa7, 0xe1, 0xc4, 0xd8, 0x93,
6428 0x82, 0xd0, 0xc7, 0x9b, 0xea, 0xd7, 0xcd, 0xec,
6429 0xdb, 0xa0, 0xa8, 0xd6, 0xd7, 0xd4, 0xe1, 0xdf,
6430 0xd4, 0xe9, 0xc2, 0xd8, 0xec, 0xe6, 0xd8, 0x6e,
6431 0x7c, 0x86, 0x52, 0x67, 0x68, 0x82, 0x9f, 0x99,
6432 0xae, 0xe2, 0xeb, 0xcd, 0xbc, 0xe8, 0xd8, 0xe0,
6433 0xad, 0x92, 0x6c, 0x4d, 0x5e, 0x67, 0x56, 0x68,
6434 0x5e, 0x7c, 0xa8, 0x73, 0x72, 0xcb, 0xfd, 0xfd,
6435 0xab, 0xb1, 0xc0, 0x74, 0x4a, 0x3b, 0x43, 0x43,
6436 0x58, 0x61, 0x67, 0x62, 0x59, 0x53, 0x4f, 0x4b,
6437 0x42, 0x4b, 0x64, 0x59, 0x60, 0x3a, 0x74, 0x9a,
6438 0x44, 0x1d, 0x48, 0x79, 0x60, 0x39, 0x35, 0x4f,
6439 0x71, 0x61, 0x63, 0x4e, 0x63, 0x68, 0x33, 0x3e,
6440 0x30, 0x24, 0x45, 0x5a, 0x52, 0x4f, 0x45, 0x3c,
6441 0x48, 0x31, 0x30, 0x48, 0x4f, 0x3d, 0x34, 0x3f,
6442 0x4b, 0x45, 0x3e, 0x3e, 0x42, 0x44, 0x42, 0x3e,
6443 0x16, 0x4d, 0x5e, 0x51, 0x8a, 0x80, 0x6d, 0x6f,
6444 0x6f, 0x68, 0x62, 0x62, 0x68, 0x6d, 0x6d, 0x6a,
6445 0x6f, 0x71, 0x73, 0x74, 0x72, 0x6f, 0x6a, 0x66,
6446 0x6c, 0x6f, 0x6f, 0x68, 0x5d, 0x57, 0x5b, 0x60,
6447 0x62, 0x63, 0x68, 0x71, 0x7a, 0x7b, 0x73, 0x6b,
6448 0x71, 0x76, 0x76, 0x69, 0x5a, 0x58, 0x67, 0x77,
6449 0x64, 0x59, 0x3d, 0x31, 0x58, 0x9a, 0xbd, 0xba,
6450 0xc0, 0xca, 0xd7, 0xaa, 0x62, 0x55, 0x45, 0x08,
6451 0x26, 0x14, 0x1a, 0x2f, 0xe5, 0xff, 0xf6, 0x8e,
6452 0x64, 0x5b, 0x19, 0x22, 0x30, 0x1b, 0x2e, 0x22,
6453 0x1a, 0x2d, 0x76, 0xeb, 0x7c, 0x70, 0xa6, 0x1f,
6454 0x25, 0x32, 0x29, 0x27, 0x7b, 0xfe, 0xfa, 0x79,
6455 0x36, 0x38, 0x3c, 0x3b, 0x34, 0x2c, 0x2b, 0x2f,
6456 0x40, 0x30, 0x2a, 0x46, 0x28, 0x10, 0x2e, 0x0e,
6457 0x5d, 0x97, 0xa8, 0xe1, 0xaf, 0x48, 0x31, 0xd2,
6458 0xff, 0xf2, 0x70, 0x1c, 0x2a, 0x3e, 0x3d, 0x1c,
6459 0x3d, 0x00, 0x30, 0x2b, 0x29, 0xa6, 0xf5, 0xf8,
6460 0xf3, 0xff, 0xf8, 0xff, 0xd0, 0x7b, 0xc2, 0xff,
6461 0xf7, 0x4a, 0x0a, 0x42, 0x82, 0x62, 0x04, 0x00,
6462 0xc3, 0xcc, 0xba, 0xd6, 0x77, 0x23, 0x96, 0xd3,
6463 0xc3, 0xc4, 0xc5, 0xc4, 0xc2, 0xc1, 0xc1, 0xc2,
6464 0xce, 0xca, 0xc9, 0xcb, 0xcb, 0xc9, 0xca, 0xcd,
6465 0xd2, 0xd3, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xdd,
6466 0xda, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xde, 0xdf,
6467 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6468 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6469 0xe2, 0xd3, 0xe6, 0xec, 0xd7, 0x79, 0x83, 0xd1,
6470 0xce, 0xcd, 0xb3, 0xd9, 0xe3, 0x9a, 0x86, 0xa3,
6471 0x96, 0xde, 0xce, 0xbe, 0xc5, 0xb8, 0xbe, 0xbd,
6472 0xa9, 0xc7, 0xc9, 0xa2, 0xe7, 0xd2, 0xdd, 0xd4,
6473 0xc7, 0xbf, 0xc5, 0xd6, 0xd8, 0xcd, 0xcd, 0xd7,
6474 0xdc, 0xe0, 0xe4, 0xd5, 0xe3, 0xdb, 0xd1, 0x66,
6475 0x50, 0x61, 0x49, 0x54, 0x55, 0x6d, 0x5d, 0x6e,
6476 0xb3, 0xa0, 0xb7, 0xcd, 0x97, 0x4c, 0x42, 0x60,
6477 0xca, 0xd0, 0xb1, 0xa0, 0x9d, 0x85, 0x61, 0x3c,
6478 0x29, 0x27, 0x29, 0x30, 0x30, 0x2d, 0x2f, 0x37,
6479 0x86, 0xc0, 0xa1, 0x62, 0x68, 0x69, 0x52, 0x58,
6480 0x56, 0x4f, 0x51, 0x55, 0x48, 0x32, 0x2f, 0x3b,
6481 0x5e, 0x5b, 0x8e, 0x56, 0x2e, 0x4b, 0x58, 0xac,
6482 0x4c, 0x2d, 0x4e, 0x77, 0x5c, 0x3f, 0x49, 0x53,
6483 0x65, 0x49, 0x46, 0x37, 0x52, 0x4c, 0x17, 0x42,
6484 0x3e, 0x21, 0x42, 0x57, 0x61, 0x57, 0x2f, 0x42,
6485 0x6c, 0x47, 0x38, 0x4b, 0x51, 0x3a, 0x34, 0x47,
6486 0x46, 0x5c, 0x65, 0x58, 0x37, 0x11, 0x19, 0x45,
6487 0x58, 0x75, 0x69, 0x6a, 0x96, 0x99, 0x73, 0x68,
6488 0x68, 0x60, 0x5a, 0x60, 0x6d, 0x75, 0x73, 0x6c,
6489 0x78, 0x71, 0x6b, 0x6b, 0x72, 0x78, 0x7b, 0x7a,
6490 0x61, 0x67, 0x6b, 0x6a, 0x66, 0x64, 0x68, 0x6e,
6491 0x62, 0x6b, 0x71, 0x69, 0x59, 0x4e, 0x50, 0x57,
6492 0x6d, 0x66, 0x5d, 0x5a, 0x5c, 0x5d, 0x5a, 0x57,
6493 0x45, 0x44, 0x34, 0x70, 0x72, 0x63, 0x31, 0x0c,
6494 0x75, 0xeb, 0xff, 0x98, 0x71, 0x73, 0x4b, 0x3c,
6495 0x4f, 0x5f, 0x53, 0x31, 0x33, 0x64, 0x92, 0xa1,
6496 0xcc, 0xd4, 0xf9, 0x73, 0x4b, 0x3d, 0x20, 0x32,
6497 0x75, 0xb3, 0x3e, 0x3e, 0x36, 0x20, 0x28, 0x35,
6498 0x44, 0x27, 0x65, 0xaa, 0x73, 0xa7, 0xff, 0xc5,
6499 0xae, 0x75, 0x28, 0x32, 0x37, 0x43, 0x75, 0x56,
6500 0x3f, 0x42, 0x2b, 0x22, 0x36, 0x3b, 0x42, 0x60,
6501 0xff, 0x86, 0x75, 0xdb, 0xc6, 0x4b, 0x6f, 0xff,
6502 0xfe, 0x86, 0x1c, 0x0a, 0x24, 0x36, 0x35, 0x2c,
6503 0x39, 0x1a, 0x22, 0x2d, 0x2b, 0x5c, 0x8a, 0x79,
6504 0xa9, 0x9e, 0xd4, 0xdb, 0x95, 0xa1, 0xeb, 0xf9,
6505 0xe6, 0xbd, 0x8b, 0x6c, 0x5e, 0x4b, 0x2a, 0x0e,
6506 0xc3, 0xca, 0xbb, 0xd1, 0x72, 0x27, 0x99, 0xd2,
6507 0xcc, 0xc7, 0xc2, 0xc1, 0xc6, 0xcc, 0xcf, 0xd0,
6508 0xcb, 0xca, 0xca, 0xcd, 0xcf, 0xce, 0xce, 0xce,
6509 0xd2, 0xd3, 0xd4, 0xd6, 0xd8, 0xda, 0xdb, 0xdc,
6510 0xda, 0xda, 0xdb, 0xdb, 0xdc, 0xdd, 0xde, 0xde,
6511 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6512 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
6513 0xe3, 0xe4, 0xde, 0xde, 0xe2, 0xad, 0x7c, 0xc2,
6514 0xe4, 0xd4, 0xbb, 0xce, 0xc6, 0xa9, 0xac, 0x9a,
6515 0xaf, 0xd8, 0xa8, 0xbe, 0xe2, 0xb8, 0xb5, 0xbd,
6516 0xbc, 0xf0, 0xbe, 0xa1, 0xd2, 0xc0, 0xd5, 0xc9,
6517 0xaf, 0xc3, 0xd7, 0xdc, 0xd8, 0xd6, 0xd7, 0xd9,
6518 0xc0, 0xd4, 0xd1, 0xcd, 0xec, 0xcf, 0xbf, 0x90,
6519 0x73, 0x7b, 0x70, 0x71, 0x52, 0x63, 0x6a, 0x7b,
6520 0xb4, 0xf2, 0xf7, 0xa2, 0x54, 0x49, 0x63, 0x77,
6521 0x76, 0x88, 0x89, 0x52, 0x1e, 0x1b, 0x25, 0x2e,
6522 0x4b, 0x43, 0x39, 0x36, 0x3f, 0x45, 0x3a, 0x2a,
6523 0x24, 0x40, 0x33, 0x3e, 0x7a, 0x84, 0x6d, 0x7c,
6524 0x5b, 0x4f, 0x4d, 0x54, 0x4f, 0x3d, 0x38, 0x41,
6525 0x1b, 0x4a, 0x88, 0x7a, 0x45, 0x35, 0x5b, 0xa4,
6526 0x79, 0x55, 0x43, 0x5d, 0x6e, 0x58, 0x4a, 0x5b,
6527 0x3f, 0x4f, 0x5e, 0x33, 0x40, 0x62, 0x32, 0x1e,
6528 0x23, 0x2f, 0x3a, 0x59, 0x77, 0x77, 0x54, 0x23,
6529 0x39, 0x41, 0x33, 0x32, 0x4f, 0x56, 0x41, 0x35,
6530 0x29, 0x20, 0x24, 0x42, 0x69, 0x81, 0x93, 0xa3,
6531 0x8b, 0x85, 0x75, 0x73, 0x7d, 0x79, 0x6f, 0x71,
6532 0x71, 0x70, 0x6f, 0x6c, 0x67, 0x61, 0x5c, 0x59,
6533 0x6c, 0x68, 0x66, 0x68, 0x6c, 0x6c, 0x67, 0x62,
6534 0x66, 0x73, 0x82, 0x86, 0x7d, 0x6e, 0x62, 0x5c,
6535 0x75, 0x7a, 0x7b, 0x6f, 0x60, 0x5b, 0x64, 0x6f,
6536 0x6a, 0x64, 0x5c, 0x55, 0x51, 0x4d, 0x4b, 0x49,
6537 0x4b, 0x46, 0x40, 0x3b, 0x20, 0x1b, 0xbc, 0xef,
6538 0xb3, 0x75, 0x5a, 0xa3, 0xc0, 0x6f, 0x3c, 0x4b,
6539 0x6b, 0x46, 0x54, 0x98, 0xb4, 0x87, 0x55, 0x49,
6540 0x1e, 0x40, 0x4e, 0x19, 0x31, 0x22, 0x1b, 0x87,
6541 0xfe, 0xb6, 0x0e, 0x4e, 0x3e, 0x05, 0x39, 0x44,
6542 0x3f, 0x59, 0xdc, 0xdb, 0x6a, 0x42, 0x3f, 0x4e,
6543 0x8d, 0x3b, 0x0e, 0x3c, 0x71, 0x4a, 0x1e, 0x46,
6544 0x3a, 0x19, 0x1b, 0x29, 0x3d, 0x77, 0x7b, 0x2f,
6545 0x57, 0x20, 0x19, 0x4e, 0x5e, 0x34, 0x21, 0x36,
6546 0x0f, 0x20, 0x16, 0x46, 0x9a, 0x84, 0x4d, 0x61,
6547 0x00, 0x4f, 0xa2, 0x93, 0x3f, 0x1d, 0x39, 0x51,
6548 0x16, 0x4d, 0x77, 0x3a, 0x0b, 0x7a, 0xd7, 0xaa,
6549 0x83, 0x6a, 0x4e, 0x44, 0x44, 0x36, 0x17, 0x00,
6550 0xc1, 0xc8, 0xbc, 0xc8, 0x69, 0x2c, 0x9f, 0xd0,
6551 0xce, 0xc8, 0xc2, 0xc3, 0xc9, 0xcf, 0xcf, 0xcd,
6552 0xca, 0xcc, 0xcd, 0xcf, 0xd2, 0xd3, 0xd2, 0xd0,
6553 0xd2, 0xd3, 0xd4, 0xd5, 0xd7, 0xd9, 0xda, 0xda,
6554 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xdd, 0xde,
6555 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6556 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
6557 0xd4, 0xde, 0xd6, 0xd8, 0xdf, 0xcf, 0x64, 0x6a,
6558 0xe3, 0xbb, 0xb8, 0xe5, 0xcb, 0xa3, 0xab, 0x8d,
6559 0xcd, 0xcb, 0x82, 0xc4, 0xf7, 0xb4, 0xb5, 0xb9,
6560 0xb5, 0xfc, 0x91, 0xa8, 0xd5, 0xcb, 0xdd, 0xc4,
6561 0xa2, 0xca, 0xe6, 0xe2, 0xd9, 0xde, 0xe0, 0xda,
6562 0xc6, 0xc7, 0xcf, 0xc9, 0xc9, 0xc4, 0xd4, 0xb1,
6563 0x79, 0x67, 0x60, 0x6c, 0x5b, 0x75, 0x84, 0x85,
6564 0x73, 0x96, 0x73, 0x36, 0x35, 0x41, 0x38, 0x35,
6565 0x2f, 0x4c, 0x94, 0x6d, 0x34, 0x49, 0x48, 0x45,
6566 0x23, 0x4a, 0x5b, 0x3e, 0x22, 0x26, 0x37, 0x3d,
6567 0x4b, 0x4e, 0x51, 0x82, 0xb7, 0x96, 0x65, 0x71,
6568 0x40, 0x3d, 0x42, 0x47, 0x3a, 0x29, 0x2f, 0x43,
6569 0x48, 0x5e, 0x62, 0x62, 0x3d, 0x25, 0x67, 0xa5,
6570 0x4a, 0x4e, 0x40, 0x4c, 0x65, 0x4b, 0x40, 0x70,
6571 0x73, 0x58, 0x5a, 0x3e, 0x32, 0x4a, 0x40, 0x37,
6572 0x18, 0x3a, 0x45, 0x79, 0x76, 0x49, 0x56, 0x4c,
6573 0x51, 0x75, 0x5e, 0x29, 0x27, 0x40, 0x40, 0x37,
6574 0x67, 0x90, 0x83, 0x72, 0x90, 0x93, 0x7b, 0x81,
6575 0x5d, 0x6a, 0x76, 0x81, 0x7d, 0x66, 0x65, 0x81,
6576 0x6e, 0x6e, 0x6a, 0x5e, 0x55, 0x57, 0x65, 0x73,
6577 0x76, 0x6f, 0x68, 0x6b, 0x77, 0x86, 0x92, 0x97,
6578 0x8e, 0x8b, 0x81, 0x75, 0x6c, 0x6e, 0x7a, 0x85,
6579 0x76, 0x78, 0x74, 0x67, 0x58, 0x57, 0x66, 0x75,
6580 0x77, 0x74, 0x6d, 0x62, 0x56, 0x4f, 0x4e, 0x4f,
6581 0x46, 0x3c, 0x42, 0x45, 0x4c, 0x39, 0x5a, 0x23,
6582 0x14, 0x3d, 0x62, 0xa9, 0x82, 0x33, 0x55, 0x58,
6583 0xab, 0x45, 0x12, 0x3d, 0x58, 0x39, 0x2f, 0x4e,
6584 0x73, 0x46, 0x1f, 0x3c, 0x43, 0x22, 0x0b, 0x47,
6585 0x22, 0x2f, 0x41, 0x38, 0x1b, 0x22, 0x18, 0x5d,
6586 0x46, 0x1a, 0x6a, 0xdc, 0xff, 0x9e, 0x20, 0x2f,
6587 0x65, 0x6c, 0xba, 0x91, 0x55, 0x74, 0x74, 0x77,
6588 0x3d, 0x6d, 0x68, 0x3a, 0x43, 0x72, 0x72, 0x4e,
6589 0x1c, 0x37, 0x3e, 0x2c, 0x2c, 0x3f, 0x3f, 0x29,
6590 0x2d, 0x65, 0x40, 0x13, 0x40, 0x57, 0x3c, 0x3d,
6591 0xe5, 0xeb, 0xf5, 0xef, 0xa9, 0x46, 0x45, 0x99,
6592 0x62, 0x1d, 0x1b, 0x31, 0x1e, 0x32, 0x63, 0x6b,
6593 0x38, 0x2e, 0x28, 0x31, 0x3d, 0x37, 0x1d, 0x04,
6594 0xbf, 0xc4, 0xbd, 0xbd, 0x5c, 0x34, 0xa6, 0xcd,
6595 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc4, 0xc3, 0xc1,
6596 0xc9, 0xcf, 0xd2, 0xcf, 0xce, 0xd2, 0xd4, 0xd2,
6597 0xd3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd8,
6598 0xd8, 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdc, 0xdd,
6599 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6600 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6601 0xe5, 0xdc, 0xde, 0xe0, 0xde, 0xf1, 0xaa, 0x62,
6602 0xba, 0xb9, 0xc4, 0xe7, 0xc7, 0x97, 0x9e, 0x8f,
6603 0xdc, 0xbb, 0x7f, 0xd2, 0xe7, 0xad, 0xcb, 0xb1,
6604 0xc6, 0xff, 0x78, 0xc7, 0xe1, 0xc7, 0xc2, 0xa1,
6605 0xbb, 0xd1, 0xe1, 0xe0, 0xdd, 0xdf, 0xdf, 0xda,
6606 0xd9, 0xc5, 0xd2, 0xd8, 0xc4, 0xc4, 0xd3, 0xb7,
6607 0x87, 0x68, 0x53, 0x55, 0x56, 0x6f, 0x88, 0x93,
6608 0x74, 0x8e, 0x6a, 0x49, 0x5c, 0x55, 0x49, 0x6c,
6609 0x52, 0x4f, 0x99, 0x5e, 0x16, 0x41, 0x41, 0x3c,
6610 0x2b, 0x51, 0x5d, 0x42, 0x3a, 0x53, 0x5e, 0x51,
6611 0x76, 0x71, 0x6b, 0x80, 0x86, 0x4f, 0x24, 0x36,
6612 0x41, 0x4a, 0x58, 0x57, 0x3e, 0x2c, 0x40, 0x63,
6613 0x64, 0x69, 0x73, 0x68, 0x3d, 0x25, 0x53, 0x98,
6614 0x5b, 0x6b, 0x71, 0x77, 0x72, 0x4c, 0x3c, 0x59,
6615 0x50, 0x3a, 0x6b, 0x95, 0x7d, 0x60, 0x46, 0x2b,
6616 0x4f, 0x44, 0x3f, 0x70, 0x80, 0x69, 0x7c, 0x8b,
6617 0x65, 0x27, 0x1b, 0x4e, 0x70, 0x6e, 0x66, 0x61,
6618 0x75, 0x8c, 0x8b, 0x7f, 0x7e, 0x79, 0x8e, 0xbc,
6619 0xc6, 0xae, 0x81, 0x77, 0x92, 0x8c, 0x77, 0x7f,
6620 0x61, 0x61, 0x5f, 0x58, 0x55, 0x5e, 0x71, 0x82,
6621 0x7e, 0x7a, 0x77, 0x76, 0x74, 0x6c, 0x60, 0x56,
6622 0x62, 0x65, 0x66, 0x63, 0x5e, 0x5f, 0x67, 0x6e,
6623 0x6d, 0x6f, 0x69, 0x58, 0x44, 0x3c, 0x44, 0x4f,
6624 0x70, 0x6f, 0x6a, 0x5f, 0x53, 0x4d, 0x4d, 0x50,
6625 0x66, 0x51, 0x3f, 0x37, 0x2e, 0x58, 0x54, 0x96,
6626 0xc3, 0xc5, 0x4c, 0x18, 0x26, 0x80, 0xbf, 0x1b,
6627 0x2c, 0x23, 0x23, 0x2d, 0x31, 0x2f, 0x36, 0x44,
6628 0x2e, 0x1c, 0x20, 0xc0, 0xff, 0xf2, 0x9d, 0x6b,
6629 0x4f, 0x55, 0x13, 0x1e, 0x11, 0x0a, 0x39, 0x0f,
6630 0x83, 0xea, 0xfc, 0xf1, 0xb3, 0x4e, 0x3b, 0x3f,
6631 0x02, 0xb9, 0xe7, 0x6d, 0x62, 0x80, 0x45, 0x37,
6632 0x5f, 0x74, 0x59, 0x6f, 0xec, 0xff, 0xe0, 0x80,
6633 0x34, 0x2d, 0x1f, 0x19, 0x2a, 0x42, 0x43, 0x33,
6634 0x44, 0x43, 0x3f, 0x32, 0x27, 0x31, 0x3b, 0x37,
6635 0x85, 0x9b, 0x61, 0x22, 0x35, 0x45, 0x2d, 0x25,
6636 0x38, 0x28, 0x4c, 0x73, 0x6d, 0x6d, 0x6b, 0x4f,
6637 0x2c, 0x25, 0x21, 0x28, 0x32, 0x30, 0x21, 0x11,
6638 0xbd, 0xc1, 0xbf, 0xb1, 0x4f, 0x3c, 0xae, 0xca,
6639 0xbf, 0xc3, 0xc5, 0xc2, 0xbd, 0xbd, 0xc5, 0xcc,
6640 0xbd, 0xce, 0xd6, 0xcf, 0xc8, 0xcc, 0xd2, 0xd3,
6641 0xd3, 0xd3, 0xd4, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6,
6642 0xd7, 0xd8, 0xd8, 0xd9, 0xda, 0xdb, 0xdb, 0xdc,
6643 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6644 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
6645 0xdd, 0xd1, 0xda, 0xd8, 0xd6, 0xe2, 0xd8, 0x66,
6646 0x92, 0xd7, 0xe7, 0xe8, 0xcc, 0x9b, 0xa5, 0xb9,
6647 0xd9, 0xaf, 0x9e, 0xdc, 0xbf, 0xa9, 0xe3, 0xac,
6648 0xc5, 0xef, 0x78, 0xde, 0xd5, 0xb4, 0xb4, 0xb4,
6649 0xe7, 0xd7, 0xd0, 0xd9, 0xdf, 0xdb, 0xd6, 0xd7,
6650 0xd9, 0xca, 0xbf, 0xc9, 0xd3, 0xd0, 0xbe, 0xc5,
6651 0x70, 0x89, 0x99, 0x8c, 0x7a, 0x6e, 0x95, 0xcf,
6652 0xcb, 0xcf, 0x75, 0x23, 0x3c, 0x54, 0x3f, 0x3a,
6653 0x49, 0x4c, 0xa1, 0x6f, 0x25, 0x47, 0x48, 0x4a,
6654 0x30, 0x56, 0x62, 0x49, 0x42, 0x5b, 0x67, 0x5b,
6655 0x7a, 0x76, 0x65, 0x5f, 0x64, 0x5d, 0x5c, 0x6f,
6656 0x41, 0x3a, 0x3b, 0x3e, 0x34, 0x29, 0x35, 0x4d,
6657 0x2d, 0x43, 0x8d, 0x69, 0x2f, 0x31, 0x53, 0xc1,
6658 0x65, 0x4d, 0x5a, 0x76, 0x78, 0x74, 0x6c, 0x55,
6659 0x62, 0x56, 0x5d, 0x61, 0x4e, 0x65, 0x8a, 0x75,
6660 0x70, 0x75, 0x85, 0x64, 0x4d, 0x5a, 0x64, 0x81,
6661 0x76, 0x4a, 0x62, 0x91, 0x9d, 0xb6, 0xb7, 0x80,
6662 0x81, 0x66, 0x91, 0xc3, 0xa2, 0x84, 0xab, 0xdb,
6663 0x81, 0x92, 0xab, 0xbd, 0xc1, 0xb2, 0x8a, 0x5e,
6664 0x5f, 0x64, 0x6a, 0x6c, 0x6a, 0x66, 0x62, 0x5f,
6665 0x79, 0x6d, 0x5e, 0x57, 0x59, 0x60, 0x66, 0x68,
6666 0x67, 0x67, 0x63, 0x5c, 0x58, 0x5c, 0x68, 0x73,
6667 0x3a, 0x46, 0x52, 0x53, 0x4f, 0x50, 0x5b, 0x67,
6668 0x72, 0x70, 0x6b, 0x65, 0x60, 0x5e, 0x5f, 0x61,
6669 0x55, 0x50, 0x46, 0x48, 0x4c, 0x61, 0x1b, 0x24,
6670 0x2d, 0xb8, 0xcb, 0x97, 0x23, 0x1e, 0x9a, 0x6c,
6671 0x53, 0x9c, 0xde, 0xe3, 0xbf, 0x90, 0x5e, 0x36,
6672 0x8d, 0xfb, 0xe9, 0xff, 0xe7, 0xad, 0x8f, 0xbf,
6673 0x49, 0x39, 0x7e, 0x64, 0x70, 0x73, 0x39, 0x82,
6674 0xff, 0xd0, 0x4f, 0x1a, 0x28, 0x45, 0x58, 0x1b,
6675 0x16, 0x55, 0x45, 0x2d, 0x22, 0x24, 0x6a, 0xa6,
6676 0x35, 0x28, 0x43, 0x60, 0x6e, 0x8d, 0x81, 0x3d,
6677 0x1f, 0x17, 0x23, 0x3c, 0x3b, 0x23, 0x19, 0x24,
6678 0x43, 0x74, 0x95, 0x7a, 0x4a, 0x3c, 0x3d, 0x34,
6679 0x00, 0x55, 0x69, 0x3f, 0x39, 0x3d, 0x43, 0x63,
6680 0x89, 0x8f, 0x7a, 0x36, 0x09, 0x2d, 0x5a, 0x56,
6681 0x44, 0x37, 0x26, 0x1b, 0x18, 0x16, 0x11, 0x0c,
6682 0xbb, 0xbd, 0xc0, 0xa5, 0x43, 0x44, 0xb5, 0xc7,
6683 0xc2, 0xc0, 0xbd, 0xba, 0xbb, 0xc3, 0xcf, 0xd9,
6684 0x9b, 0xbf, 0xda, 0xd5, 0xc7, 0xc8, 0xcf, 0xd2,
6685 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6686 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdb,
6687 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
6688 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
6689 0xd7, 0xdf, 0xe2, 0xdd, 0xe4, 0xd8, 0xe5, 0x87,
6690 0x58, 0x93, 0xba, 0xf1, 0xd3, 0x61, 0x67, 0xbe,
6691 0xd0, 0xac, 0xbd, 0xd4, 0xa6, 0xb1, 0xe0, 0xb3,
6692 0xb3, 0xc5, 0x90, 0xdd, 0xaf, 0xa8, 0xc1, 0xe8,
6693 0xfc, 0xda, 0xc7, 0xd2, 0xde, 0xd7, 0xd0, 0xd3,
6694 0xd2, 0xdb, 0xdc, 0xd1, 0xc6, 0xde, 0xab, 0x77,
6695 0x73, 0x65, 0x54, 0x44, 0x55, 0x3a, 0x3b, 0x51,
6696 0xa4, 0xb1, 0x7a, 0x37, 0x35, 0x44, 0x4b, 0x5b,
6697 0x58, 0x3e, 0x5f, 0x42, 0x21, 0x3d, 0x3c, 0x3c,
6698 0x30, 0x59, 0x6b, 0x51, 0x37, 0x3e, 0x51, 0x58,
6699 0x59, 0x60, 0x5d, 0x5c, 0x6c, 0x7f, 0x7e, 0x71,
6700 0x6f, 0x4f, 0x3b, 0x43, 0x50, 0x4e, 0x4a, 0x4d,
6701 0x4b, 0x4e, 0x92, 0x5f, 0x39, 0x4e, 0x3c, 0x7b,
6702 0x81, 0x62, 0x69, 0x6e, 0x51, 0x54, 0x60, 0x47,
6703 0x6e, 0x76, 0x70, 0x78, 0x68, 0x5f, 0x7a, 0x6c,
6704 0x89, 0x59, 0x63, 0x68, 0x8d, 0xaf, 0x8f, 0x95,
6705 0xca, 0xbb, 0xb6, 0x89, 0x5a, 0x8c, 0xce, 0xc4,
6706 0xf4, 0xd9, 0xa7, 0xa3, 0xcc, 0xc4, 0x96, 0x84,
6707 0x3a, 0x64, 0xb1, 0xbf, 0x8c, 0x86, 0x94, 0x79,
6708 0x6a, 0x6c, 0x6e, 0x6e, 0x6b, 0x66, 0x61, 0x5e,
6709 0x69, 0x67, 0x66, 0x6a, 0x6d, 0x6c, 0x64, 0x5d,
6710 0x5a, 0x62, 0x69, 0x68, 0x5f, 0x56, 0x51, 0x51,
6711 0x5c, 0x67, 0x70, 0x6b, 0x5e, 0x55, 0x58, 0x5f,
6712 0x5c, 0x55, 0x4e, 0x4e, 0x53, 0x57, 0x55, 0x52,
6713 0x54, 0x46, 0x3b, 0x38, 0x3d, 0x12, 0x35, 0x2a,
6714 0x70, 0x76, 0x4f, 0x59, 0x45, 0x31, 0x54, 0x2a,
6715 0x2e, 0x32, 0x40, 0x4b, 0x45, 0x39, 0x42, 0x56,
6716 0x29, 0x79, 0x5e, 0x4d, 0x36, 0x1b, 0x1b, 0x2c,
6717 0x6a, 0x12, 0x2e, 0x89, 0x5c, 0x22, 0xad, 0xe4,
6718 0x6d, 0x26, 0x43, 0x51, 0x3b, 0x33, 0x27, 0x47,
6719 0x26, 0x00, 0x6e, 0xff, 0x96, 0x27, 0x57, 0x2c,
6720 0x57, 0x3c, 0x2f, 0x32, 0x30, 0x33, 0x3f, 0x45,
6721 0x0e, 0x2f, 0x62, 0x84, 0x7f, 0x73, 0x87, 0xab,
6722 0x2b, 0x60, 0x5f, 0x4c, 0x41, 0x17, 0x37, 0xb3,
6723 0xe4, 0x9a, 0x64, 0x7a, 0x8e, 0x65, 0x4f, 0x70,
6724 0x59, 0x28, 0x1d, 0x45, 0x58, 0x4b, 0x51, 0x6b,
6725 0x68, 0x5a, 0x44, 0x2e, 0x1f, 0x18, 0x17, 0x17,
6726 0xb9, 0xbb, 0xc1, 0x9d, 0x39, 0x49, 0xbb, 0xc5,
6727 0xc7, 0xbd, 0xb6, 0xbb, 0xc6, 0xca, 0xc2, 0xb7,
6728 0x6d, 0xa8, 0xdb, 0xe0, 0xcf, 0xca, 0xce, 0xd0,
6729 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
6730 0xd6, 0xd6, 0xd7, 0xd8, 0xd9, 0xd9, 0xda, 0xda,
6731 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6732 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6733 0xd5, 0xdd, 0xd2, 0xd4, 0xd6, 0xd8, 0xe8, 0xc8,
6734 0x7e, 0x90, 0xb6, 0xf9, 0xce, 0x6b, 0x93, 0xf3,
6735 0xce, 0xb2, 0xc6, 0xbb, 0xaf, 0xc2, 0xc0, 0xc6,
6736 0xbb, 0xab, 0xb7, 0xd2, 0x94, 0xb6, 0xc2, 0xda,
6737 0xe9, 0xda, 0xcf, 0xd1, 0xd8, 0xd9, 0xd2, 0xcd,
6738 0xd7, 0xcd, 0xc7, 0xac, 0x95, 0xe8, 0xde, 0xa8,
6739 0x84, 0x62, 0x4e, 0x2f, 0x34, 0x26, 0x51, 0x78,
6740 0xb0, 0x86, 0x70, 0x7f, 0x78, 0x49, 0x2f, 0x3c,
6741 0x2e, 0x1d, 0x2f, 0x4f, 0x67, 0x67, 0x4c, 0x39,
6742 0x5f, 0x59, 0x51, 0x53, 0x5f, 0x69, 0x61, 0x52,
6743 0x59, 0x69, 0x77, 0x73, 0x6a, 0x6d, 0x6a, 0x5b,
6744 0x6b, 0x52, 0x41, 0x42, 0x42, 0x3b, 0x3e, 0x4a,
6745 0x43, 0x4a, 0x6f, 0x6c, 0x88, 0xa8, 0x6e, 0x45,
6746 0x6e, 0x79, 0x84, 0x7b, 0x65, 0x64, 0x73, 0x7b,
6747 0x81, 0xa9, 0x91, 0x90, 0x8b, 0x74, 0x85, 0x7c,
6748 0xad, 0x99, 0xab, 0xc9, 0xc8, 0xb1, 0xb0, 0xd4,
6749 0xe2, 0xb6, 0xb4, 0xd7, 0xba, 0x57, 0x28, 0x44,
6750 0x78, 0xc7, 0xa7, 0x6b, 0x96, 0xc1, 0xca, 0xed,
6751 0xff, 0xff, 0xfa, 0xea, 0xd2, 0xb1, 0x8b, 0x6f,
6752 0x6c, 0x70, 0x6f, 0x67, 0x5f, 0x61, 0x70, 0x7e,
6753 0x93, 0x89, 0x7d, 0x77, 0x79, 0x7d, 0x7e, 0x7e,
6754 0x7e, 0x7b, 0x74, 0x68, 0x5f, 0x60, 0x6b, 0x74,
6755 0x74, 0x7a, 0x7c, 0x71, 0x60, 0x58, 0x5e, 0x67,
6756 0x64, 0x55, 0x49, 0x4c, 0x5b, 0x63, 0x5c, 0x51,
6757 0x48, 0x3f, 0x4c, 0x95, 0xa9, 0x40, 0x4d, 0x46,
6758 0x4e, 0x4a, 0x25, 0x23, 0x41, 0x4f, 0x5d, 0x65,
6759 0x56, 0x2f, 0x1c, 0x27, 0x26, 0x1c, 0x37, 0x65,
6760 0x2f, 0x3d, 0x49, 0x4e, 0x53, 0x38, 0x37, 0x1d,
6761 0x49, 0xce, 0xc5, 0x3a, 0x78, 0x72, 0x36, 0x61,
6762 0x3b, 0x18, 0x31, 0x25, 0x21, 0x3f, 0x32, 0x38,
6763 0x1f, 0x19, 0x13, 0x31, 0x3b, 0x15, 0x06, 0x14,
6764 0x48, 0x4d, 0x32, 0x33, 0x4f, 0x2c, 0x01, 0x14,
6765 0x2f, 0x23, 0x1c, 0x27, 0x37, 0x3d, 0x37, 0x2f,
6766 0x7d, 0x4e, 0x4e, 0xb0, 0xca, 0x51, 0x54, 0xff,
6767 0xd6, 0xc8, 0xa7, 0x60, 0x19, 0x1a, 0x44, 0x59,
6768 0x33, 0x1a, 0x18, 0x46, 0x78, 0x7c, 0x6b, 0x68,
6769 0x60, 0x5c, 0x52, 0x43, 0x32, 0x26, 0x20, 0x1f,
6770 0xb9, 0xb9, 0xc2, 0x98, 0x34, 0x4c, 0xbe, 0xc3,
6771 0xc7, 0xba, 0xb5, 0xc3, 0xd4, 0xcb, 0xa6, 0x82,
6772 0x4a, 0x95, 0xdc, 0xe9, 0xd7, 0xcd, 0xce, 0xcf,
6773 0xd4, 0xd3, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2,
6774 0xd5, 0xd6, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xda,
6775 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6776 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
6777 0xd6, 0xd7, 0xd3, 0xe5, 0xcd, 0xd8, 0xd0, 0xcc,
6778 0x89, 0xa5, 0xa2, 0x80, 0x48, 0x6a, 0xd8, 0xf3,
6779 0xd0, 0xb8, 0xc1, 0xa5, 0xc3, 0xd1, 0x9f, 0xd7,
6780 0xaa, 0x82, 0xbb, 0xc3, 0x9b, 0xe7, 0xd9, 0xc8,
6781 0xcc, 0xd9, 0xdc, 0xd3, 0xd3, 0xdc, 0xd8, 0xc9,
6782 0xd6, 0xc9, 0xc4, 0xd1, 0xca, 0xe0, 0xb1, 0xb2,
6783 0x96, 0x5d, 0x55, 0x4d, 0x5e, 0x57, 0x7b, 0x81,
6784 0x50, 0x51, 0x85, 0xac, 0x73, 0x27, 0x33, 0x70,
6785 0x5e, 0x55, 0x42, 0x52, 0x59, 0x3f, 0x40, 0x54,
6786 0x41, 0x40, 0x46, 0x51, 0x57, 0x57, 0x5d, 0x67,
6787 0x59, 0x66, 0x72, 0x5c, 0x36, 0x37, 0x5f, 0x7d,
6788 0x63, 0x67, 0x6a, 0x5c, 0x39, 0x25, 0x3f, 0x69,
6789 0xa3, 0xad, 0x8d, 0x75, 0x84, 0x96, 0x76, 0x28,
6790 0x69, 0x7e, 0x71, 0x6a, 0x82, 0x76, 0x52, 0x4f,
6791 0x71, 0xdd, 0xab, 0x65, 0x79, 0xb7, 0xe5, 0xbe,
6792 0xab, 0xd1, 0xcd, 0xd1, 0xb5, 0x96, 0xb6, 0xb9,
6793 0xb3, 0xc4, 0xb4, 0xbd, 0xc6, 0x78, 0x48, 0x81,
6794 0x82, 0xa4, 0xdc, 0xed, 0xd1, 0xaf, 0x74, 0x29,
6795 0x0b, 0x29, 0x0f, 0x32, 0x9a, 0x8f, 0x52, 0x6c,
6796 0x64, 0x73, 0x7c, 0x72, 0x60, 0x5d, 0x6e, 0x82,
6797 0x82, 0x7a, 0x71, 0x6c, 0x6b, 0x68, 0x62, 0x5c,
6798 0x5c, 0x69, 0x78, 0x7e, 0x7a, 0x71, 0x6a, 0x68,
6799 0x7b, 0x7d, 0x77, 0x66, 0x54, 0x4e, 0x59, 0x66,
6800 0x69, 0x55, 0x44, 0x49, 0x5d, 0x66, 0x5b, 0x4b,
6801 0x4b, 0x60, 0x2f, 0x70, 0xd8, 0xff, 0xac, 0x51,
6802 0x15, 0x2f, 0x2e, 0x1a, 0x2a, 0x26, 0x1f, 0x5b,
6803 0x23, 0x31, 0x51, 0x6a, 0x59, 0x2e, 0x19, 0x1f,
6804 0x2b, 0x38, 0x46, 0x56, 0xa1, 0x5b, 0x28, 0x2a,
6805 0x40, 0x39, 0x23, 0x15, 0x41, 0x39, 0x63, 0x3e,
6806 0x41, 0x57, 0x4d, 0x69, 0x50, 0x11, 0x25, 0x38,
6807 0x36, 0x7c, 0x96, 0x40, 0x2c, 0x44, 0x39, 0x71,
6808 0x9a, 0x6e, 0x68, 0x7b, 0x79, 0x6c, 0x4b, 0x1a,
6809 0x26, 0x1a, 0x16, 0x20, 0x27, 0x25, 0x25, 0x2b,
6810 0x34, 0x43, 0x6b, 0xa1, 0xc9, 0xcd, 0x9f, 0x64,
6811 0x50, 0x47, 0x68, 0x73, 0x56, 0x61, 0x71, 0x51,
6812 0x29, 0x53, 0x82, 0x95, 0x76, 0x38, 0x21, 0x3b,
6813 0x2d, 0x35, 0x3b, 0x37, 0x2a, 0x1a, 0x0f, 0x0a,
6814 0xc0, 0xba, 0xca, 0x8d, 0x25, 0x6c, 0xbd, 0xc6,
6815 0xc3, 0xbc, 0xcc, 0xd1, 0xc1, 0xab, 0x29, 0x16,
6816 0x1d, 0x0e, 0x3e, 0xb2, 0xc8, 0xce, 0xd8, 0xd1,
6817 0xcd, 0xce, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd2,
6818 0xd2, 0xd3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd7,
6819 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
6820 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
6821 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
6822 0x99, 0x77, 0xb4, 0x5f, 0x34, 0x55, 0x92, 0x6e,
6823 0x82, 0x9e, 0xc2, 0xd7, 0xd2, 0xc1, 0xb7, 0xb8,
6824 0xae, 0x9c, 0xc8, 0xae, 0xd7, 0xde, 0xd7, 0xcf,
6825 0xce, 0xd1, 0xd6, 0xda, 0xda, 0xd8, 0xd4, 0xd1,
6826 0xdd, 0xbe, 0xc0, 0xcd, 0xa4, 0xb1, 0xd9, 0x9e,
6827 0x73, 0x7b, 0x4b, 0x35, 0x43, 0x58, 0x77, 0x76,
6828 0x43, 0x2e, 0x80, 0x6e, 0x3e, 0x5d, 0x5c, 0x67,
6829 0x5b, 0x68, 0x61, 0x60, 0x67, 0x50, 0x46, 0x67,
6830 0x51, 0x69, 0x66, 0x55, 0x53, 0x45, 0x30, 0x31,
6831 0x2c, 0x1a, 0x4e, 0x58, 0x61, 0x7a, 0x50, 0x38,
6832 0x50, 0x6b, 0x5c, 0x35, 0x42, 0x7d, 0xad, 0xc1,
6833 0x97, 0x9b, 0xa3, 0x6e, 0x71, 0xc1, 0xc2, 0x92,
6834 0x34, 0x66, 0x62, 0xa4, 0xc8, 0xbf, 0xe0, 0xb6,
6835 0xad, 0xd4, 0x84, 0x73, 0xd3, 0xd0, 0x8b, 0x7d,
6836 0xc7, 0x66, 0x56, 0xa5, 0xdd, 0xe1, 0xc3, 0x9b,
6837 0xaf, 0x5c, 0x3d, 0x93, 0xaf, 0xc0, 0xff, 0xde,
6838 0x96, 0x80, 0x37, 0x25, 0x27, 0x17, 0x29, 0x2e,
6839 0x36, 0x2c, 0x24, 0x34, 0x2b, 0x25, 0x45, 0x50,
6840 0x70, 0x73, 0x77, 0x78, 0x73, 0x6a, 0x60, 0x5a,
6841 0x6a, 0x6e, 0x6e, 0x67, 0x5d, 0x59, 0x5c, 0x61,
6842 0x5c, 0x64, 0x74, 0x84, 0x8c, 0x83, 0x6f, 0x5f,
6843 0x81, 0x8a, 0x88, 0x74, 0x63, 0x5c, 0x56, 0x4d,
6844 0x5d, 0x57, 0x53, 0x55, 0x5a, 0x58, 0x4d, 0x43,
6845 0x47, 0x40, 0x3e, 0x44, 0x29, 0x2a, 0x65, 0x80,
6846 0x31, 0x26, 0x1b, 0x1e, 0x29, 0x30, 0x2d, 0x26,
6847 0x42, 0x3a, 0x2e, 0x25, 0x22, 0x25, 0x2b, 0x2e,
6848 0x22, 0x4f, 0x8b, 0x72, 0x30, 0x43, 0x55, 0x1a,
6849 0x3b, 0x27, 0x16, 0x23, 0x3a, 0x35, 0x22, 0x20,
6850 0x15, 0x44, 0x4d, 0x3c, 0x31, 0x17, 0x0f, 0x2e,
6851 0x3a, 0x5a, 0x62, 0x3e, 0x21, 0x26, 0x35, 0x38,
6852 0x54, 0x42, 0x4f, 0x72, 0x70, 0x50, 0x51, 0x73,
6853 0x77, 0x99, 0x65, 0x39, 0x5e, 0x58, 0x2e, 0x36,
6854 0x69, 0x5f, 0x4c, 0x36, 0x2a, 0x32, 0x4a, 0x5e,
6855 0x3d, 0x38, 0x3e, 0x4a, 0x4d, 0x4d, 0x5e, 0x74,
6856 0x54, 0x34, 0x21, 0x25, 0x21, 0x1a, 0x30, 0x54,
6857 0x5f, 0x56, 0x61, 0x40, 0x3b, 0x49, 0x1e, 0x0c,
6858 0xbd, 0xbc, 0xcd, 0x92, 0x2e, 0x74, 0xbf, 0xc4,
6859 0xc6, 0xc7, 0xca, 0xc4, 0xc2, 0xc7, 0x91, 0xcb,
6860 0xda, 0xc1, 0x9b, 0xb8, 0xca, 0xdc, 0xd7, 0xc8,
6861 0xcd, 0xcd, 0xce, 0xcf, 0xcf, 0xd0, 0xd1, 0xd1,
6862 0xd2, 0xd2, 0xd3, 0xd4, 0xd4, 0xd5, 0xd6, 0xd6,
6863 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
6864 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
6865 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
6866 0xa4, 0x62, 0xc0, 0x7b, 0x51, 0x9a, 0x8a, 0x64,
6867 0xca, 0xbb, 0xc8, 0xe7, 0xdd, 0xb2, 0xa5, 0xba,
6868 0xb7, 0x76, 0xa7, 0xc1, 0xe1, 0xd6, 0xd8, 0xda,
6869 0xed, 0xda, 0xc7, 0xc5, 0xd1, 0xdd, 0xdc, 0xd7,
6870 0xca, 0xbc, 0xc4, 0xb3, 0xaa, 0xd1, 0xbf, 0x67,
6871 0x58, 0x88, 0x93, 0x64, 0x42, 0x40, 0x4c, 0x61,
6872 0x94, 0x2d, 0x2c, 0x52, 0x4a, 0x4e, 0x5a, 0x5b,
6873 0x42, 0x70, 0x75, 0x5e, 0x5d, 0x52, 0x35, 0x28,
6874 0x64, 0x5c, 0x5c, 0x50, 0x4e, 0x4d, 0x64, 0xb2,
6875 0x9f, 0x57, 0x4e, 0x42, 0x44, 0x61, 0x5c, 0x67,
6876 0x64, 0x60, 0x75, 0x9d, 0xa9, 0x96, 0x9e, 0xc2,
6877 0x70, 0x39, 0x63, 0x9e, 0xb1, 0xb8, 0xc2, 0xec,
6878 0xfd, 0xbb, 0xdf, 0xf1, 0xc4, 0xdb, 0xd9, 0x83,
6879 0x94, 0xad, 0xd5, 0xd6, 0xb3, 0x91, 0x7e, 0x85,
6880 0xb1, 0xaf, 0xd7, 0xe1, 0x9e, 0x76, 0xad, 0xf3,
6881 0x50, 0x23, 0x34, 0x31, 0x46, 0x77, 0x6e, 0x6e,
6882 0x38, 0x3d, 0x1d, 0x17, 0x32, 0x3f, 0x39, 0x27,
6883 0x18, 0x2f, 0x51, 0x5e, 0x64, 0x92, 0xa9, 0x7c,
6884 0x60, 0x76, 0x83, 0x73, 0x54, 0x47, 0x58, 0x70,
6885 0x88, 0x75, 0x5d, 0x4e, 0x4d, 0x52, 0x56, 0x58,
6886 0x6c, 0x69, 0x66, 0x69, 0x6e, 0x6e, 0x68, 0x62,
6887 0x7d, 0x84, 0x7e, 0x6a, 0x5e, 0x5f, 0x62, 0x5f,
6888 0x4e, 0x50, 0x56, 0x60, 0x67, 0x62, 0x53, 0x46,
6889 0x36, 0x3f, 0x2d, 0x2b, 0x2c, 0x2e, 0x44, 0x47,
6890 0x50, 0x57, 0x54, 0x3d, 0x1e, 0x11, 0x1d, 0x2e,
6891 0x75, 0x59, 0x37, 0x27, 0x2d, 0x3a, 0x42, 0x43,
6892 0x35, 0x40, 0x49, 0x4b, 0x51, 0x5b, 0x4a, 0x28,
6893 0x24, 0x3a, 0x21, 0x34, 0x85, 0x91, 0x88, 0xba,
6894 0x4f, 0x47, 0x8d, 0xc8, 0x8d, 0x38, 0x2e, 0x48,
6895 0x32, 0x31, 0x27, 0x1a, 0x1d, 0x31, 0x41, 0x45,
6896 0x48, 0x3e, 0x2b, 0x18, 0x19, 0x38, 0x6c, 0x95,
6897 0x34, 0x3a, 0x27, 0x1e, 0x34, 0x3e, 0x34, 0x34,
6898 0x4a, 0x38, 0x29, 0x2b, 0x37, 0x36, 0x22, 0x0d,
6899 0x98, 0x66, 0x38, 0x2a, 0x2b, 0x34, 0x52, 0x75,
6900 0x66, 0x61, 0x57, 0x45, 0x29, 0x1b, 0x2f, 0x4f,
6901 0x2d, 0x2b, 0x41, 0x2b, 0x2e, 0x40, 0x15, 0x02,
6902 0xbc, 0xbb, 0xc6, 0x87, 0x2b, 0x77, 0xc0, 0xc4,
6903 0xc5, 0xc5, 0xba, 0xbb, 0xca, 0xbf, 0x87, 0xb3,
6904 0xce, 0xbf, 0xa6, 0xcb, 0xd3, 0xcb, 0xc3, 0xcd,
6905 0xcb, 0xcc, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd0,
6906 0xd0, 0xd1, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd5,
6907 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
6908 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
6909 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
6910 0xdc, 0x79, 0xc1, 0x76, 0x39, 0x9f, 0x63, 0x77,
6911 0xd4, 0xbf, 0xc5, 0xe3, 0xe4, 0xc4, 0xb2, 0xbb,
6912 0xa2, 0x6e, 0xb1, 0xe0, 0xe2, 0xcb, 0xd3, 0xd1,
6913 0xd7, 0xd4, 0xd2, 0xd4, 0xd5, 0xd3, 0xcc, 0xc6,
6914 0xc4, 0xab, 0xb7, 0xaf, 0xb5, 0xc3, 0xa0, 0x8e,
6915 0xa1, 0x6a, 0x51, 0x47, 0x58, 0x52, 0x2b, 0x3b,
6916 0x5b, 0x68, 0x39, 0x43, 0x6e, 0x50, 0x47, 0x72,
6917 0x6f, 0x72, 0x67, 0x64, 0x69, 0x57, 0x41, 0x42,
6918 0x48, 0x1a, 0x28, 0x2a, 0x1c, 0x12, 0x50, 0xfa,
6919 0xcd, 0x77, 0x6f, 0x8d, 0xa0, 0xae, 0xaf, 0xc7,
6920 0xe9, 0xce, 0xc0, 0xc0, 0xb1, 0x97, 0x88, 0x87,
6921 0xa2, 0xa5, 0xa9, 0x64, 0x46, 0x7e, 0x85, 0x69,
6922 0x41, 0x65, 0xae, 0xc4, 0xc7, 0xe6, 0xc1, 0x68,
6923 0xbf, 0x9b, 0x6b, 0x15, 0x31, 0x90, 0x94, 0x9b,
6924 0x87, 0x73, 0x84, 0x95, 0x69, 0x2f, 0x24, 0x32,
6925 0x3b, 0x47, 0x6e, 0x49, 0x86, 0xcf, 0x5d, 0x12,
6926 0x47, 0x26, 0x1d, 0x30, 0x42, 0x30, 0x20, 0x44,
6927 0x40, 0x59, 0x44, 0x1e, 0x37, 0x52, 0x4e, 0x63,
6928 0x75, 0x79, 0x77, 0x6a, 0x5b, 0x5d, 0x6f, 0x82,
6929 0x93, 0x80, 0x68, 0x5a, 0x5c, 0x67, 0x71, 0x76,
6930 0x81, 0x78, 0x6e, 0x6b, 0x6e, 0x70, 0x6f, 0x6c,
6931 0x61, 0x66, 0x5f, 0x4c, 0x44, 0x4e, 0x58, 0x5b,
6932 0x63, 0x65, 0x69, 0x6e, 0x6f, 0x68, 0x59, 0x4e,
6933 0x4c, 0x57, 0x33, 0x28, 0x34, 0x26, 0x22, 0x22,
6934 0x3b, 0x38, 0x35, 0x33, 0x30, 0x28, 0x1d, 0x14,
6935 0x3e, 0x41, 0x46, 0x49, 0x4a, 0x4b, 0x4e, 0x50,
6936 0x80, 0x76, 0x40, 0x21, 0x32, 0x31, 0x46, 0x87,
6937 0xed, 0xff, 0xff, 0xe6, 0x6d, 0x47, 0x94, 0xe0,
6938 0xd2, 0x86, 0x93, 0xd6, 0xbf, 0x73, 0x51, 0x51,
6939 0x37, 0x29, 0x20, 0x23, 0x24, 0x1f, 0x1f, 0x24,
6940 0x4a, 0x55, 0x51, 0x36, 0x1b, 0x19, 0x2b, 0x3c,
6941 0x34, 0x1a, 0x1d, 0x2b, 0x28, 0x30, 0x3b, 0x35,
6942 0x33, 0x30, 0x23, 0x13, 0x13, 0x39, 0x7b, 0xae,
6943 0x98, 0xcd, 0xdb, 0xbc, 0xbf, 0xd2, 0x9f, 0x45,
6944 0x24, 0x2f, 0x2e, 0x22, 0x20, 0x2d, 0x3a, 0x3e,
6945 0x30, 0x34, 0x52, 0x44, 0x48, 0x54, 0x22, 0x0a,
6946 0xc7, 0xc6, 0xc5, 0x80, 0x2f, 0x82, 0xcc, 0xd0,
6947 0xba, 0xc2, 0xc4, 0xc6, 0xcd, 0xc2, 0xa0, 0xa7,
6948 0xcb, 0xaf, 0xa1, 0xd5, 0xd5, 0xc8, 0xc5, 0xcd,
6949 0xca, 0xca, 0xcb, 0xcb, 0xcc, 0xcd, 0xce, 0xce,
6950 0xcf, 0xcf, 0xd0, 0xd0, 0xd1, 0xd2, 0xd3, 0xd3,
6951 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
6952 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
6953 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6954 0xd1, 0x9c, 0xbc, 0x9b, 0x6b, 0xad, 0x69, 0xc7,
6955 0xbc, 0xc4, 0xc8, 0xcb, 0xd6, 0xdb, 0xc5, 0xa5,
6956 0x57, 0x81, 0xd1, 0xe6, 0xd7, 0xd3, 0xdc, 0xd3,
6957 0xe7, 0xd8, 0xca, 0xca, 0xd4, 0xd8, 0xcf, 0xc4,
6958 0xbe, 0xb7, 0xb6, 0xb0, 0xb5, 0xa5, 0x86, 0x93,
6959 0x7f, 0x6c, 0x5d, 0x50, 0x60, 0x5f, 0x38, 0x2e,
6960 0x65, 0x96, 0x55, 0x25, 0x61, 0x61, 0x46, 0x7d,
6961 0x53, 0x57, 0x5b, 0x56, 0x3b, 0x1e, 0x2a, 0x51,
6962 0x4e, 0x4f, 0x80, 0x8a, 0xa4, 0xb6, 0xa7, 0xe5,
6963 0xec, 0x80, 0x56, 0x6f, 0x74, 0x66, 0x6c, 0x87,
6964 0x8a, 0x97, 0xa9, 0x9d, 0x81, 0x84, 0x93, 0x8e,
6965 0x5e, 0x7c, 0x8d, 0x39, 0x0e, 0x42, 0x3e, 0x0f,
6966 0xab, 0xaf, 0x5a, 0x72, 0x97, 0x7e, 0x9d, 0x9a,
6967 0x9d, 0x73, 0xa5, 0xb7, 0xda, 0xdd, 0x84, 0x8c,
6968 0x7b, 0x50, 0x32, 0x29, 0x1f, 0x30, 0x76, 0xbe,
6969 0x71, 0x6c, 0x6e, 0x5e, 0x7e, 0x97, 0x60, 0x41,
6970 0x27, 0x3f, 0x64, 0x50, 0x39, 0x32, 0x38, 0x7a,
6971 0x81, 0x76, 0x3e, 0x1b, 0x4e, 0x65, 0x51, 0x77,
6972 0x76, 0x68, 0x59, 0x57, 0x62, 0x70, 0x77, 0x78,
6973 0x78, 0x79, 0x76, 0x6f, 0x67, 0x67, 0x70, 0x79,
6974 0x7b, 0x7a, 0x7a, 0x7f, 0x83, 0x7f, 0x75, 0x6c,
6975 0x76, 0x7e, 0x7a, 0x6a, 0x62, 0x6b, 0x74, 0x75,
6976 0x5e, 0x5b, 0x58, 0x56, 0x55, 0x53, 0x50, 0x4e,
6977 0x3b, 0x3f, 0x26, 0x2a, 0x35, 0x2f, 0x3f, 0x4d,
6978 0x4d, 0x38, 0x22, 0x1d, 0x27, 0x2d, 0x25, 0x1a,
6979 0x1d, 0x21, 0x31, 0x51, 0x71, 0x7d, 0x71, 0x61,
6980 0x6f, 0x60, 0x2c, 0x1f, 0x3e, 0x3c, 0x4a, 0x8d,
6981 0xff, 0x87, 0x87, 0xbc, 0xae, 0xb3, 0x86, 0x00,
6982 0x2e, 0x35, 0x22, 0x18, 0x1f, 0x0f, 0x11, 0x3d,
6983 0x2b, 0x25, 0x2d, 0x3a, 0x2e, 0x1a, 0x26, 0x44,
6984 0x26, 0x32, 0x4e, 0x5c, 0x40, 0x15, 0x0f, 0x26,
6985 0x3a, 0x1c, 0x1d, 0x2f, 0x28, 0x20, 0x2b, 0x33,
6986 0x5b, 0x42, 0x24, 0x13, 0x18, 0x29, 0x39, 0x41,
6987 0x31, 0x9c, 0xbd, 0x6f, 0x45, 0x6e, 0x79, 0x4f,
6988 0x39, 0x39, 0x30, 0x33, 0x5d, 0x8a, 0x82, 0x5c,
6989 0x4c, 0x52, 0x72, 0x61, 0x5e, 0x61, 0x24, 0x06,
6990 0xbc, 0xc1, 0xbc, 0x76, 0x2f, 0x87, 0xc8, 0xc7,
6991 0xc4, 0xb9, 0xb8, 0xc3, 0xd2, 0xd1, 0xaa, 0x55,
6992 0x36, 0x85, 0xb4, 0xd2, 0xbf, 0xc0, 0xc5, 0xc9,
6993 0xc8, 0xc8, 0xc9, 0xca, 0xcb, 0xcb, 0xcc, 0xcc,
6994 0xcd, 0xcd, 0xce, 0xcf, 0xd0, 0xd0, 0xd1, 0xd1,
6995 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
6996 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6997 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
6998 0xd8, 0xc9, 0x79, 0x6e, 0x66, 0x64, 0x41, 0xba,
6999 0xd8, 0xdc, 0xd0, 0xbe, 0xc3, 0xd2, 0xc4, 0xa4,
7000 0x50, 0xb6, 0xdf, 0xd3, 0xc8, 0xd2, 0xcf, 0xcb,
7001 0xcc, 0xd4, 0xda, 0xd7, 0xcd, 0xc7, 0xc8, 0xcc,
7002 0xd6, 0xbf, 0x93, 0x8f, 0x82, 0x59, 0x64, 0x89,
7003 0x6b, 0x6f, 0x4b, 0x3f, 0x49, 0x46, 0x3d, 0x26,
7004 0x47, 0x46, 0x67, 0x45, 0x3e, 0x56, 0x3d, 0x53,
7005 0x5f, 0x65, 0x62, 0x56, 0x61, 0x8c, 0xac, 0xae,
7006 0x9d, 0x95, 0xad, 0xaf, 0xb0, 0x9d, 0x89, 0xc1,
7007 0xff, 0xbc, 0xa4, 0xcc, 0xc6, 0x9c, 0x8f, 0x8a,
7008 0xaa, 0xa8, 0xd2, 0xf2, 0xdd, 0xca, 0xc4, 0xb1,
7009 0xb9, 0xb1, 0xcb, 0xac, 0x8d, 0xa2, 0xa6, 0xa6,
7010 0xa7, 0xff, 0xe4, 0x7f, 0x2e, 0x45, 0xb5, 0xaa,
7011 0x90, 0x66, 0xa9, 0x6b, 0x30, 0x89, 0x8e, 0x5f,
7012 0x29, 0x18, 0x20, 0x4e, 0x74, 0x70, 0x60, 0x60,
7013 0x2a, 0x13, 0x1e, 0x1f, 0x50, 0x91, 0x6d, 0x33,
7014 0x3d, 0x27, 0x25, 0x1e, 0x39, 0x47, 0x24, 0x2e,
7015 0x36, 0x50, 0x77, 0x72, 0x58, 0x6b, 0x85, 0x81,
7016 0x6f, 0x70, 0x6f, 0x6a, 0x65, 0x67, 0x70, 0x78,
7017 0x76, 0x7b, 0x7e, 0x78, 0x6c, 0x63, 0x61, 0x63,
7018 0x69, 0x6c, 0x73, 0x7e, 0x84, 0x81, 0x74, 0x69,
7019 0x6e, 0x79, 0x7a, 0x6c, 0x63, 0x65, 0x65, 0x61,
7020 0x47, 0x49, 0x4b, 0x4d, 0x50, 0x55, 0x5b, 0x60,
7021 0x4a, 0x48, 0x3b, 0x3b, 0x39, 0x48, 0x63, 0x53,
7022 0x24, 0x26, 0x23, 0x1d, 0x24, 0x48, 0x80, 0xac,
7023 0x68, 0x3e, 0x19, 0x20, 0x42, 0x4f, 0x35, 0x12,
7024 0x28, 0x26, 0x23, 0x2a, 0x35, 0x2d, 0x29, 0x38,
7025 0x66, 0x35, 0x17, 0x2b, 0x4d, 0x51, 0x34, 0x16,
7026 0x0d, 0x3c, 0x36, 0x13, 0x17, 0x24, 0x31, 0x4d,
7027 0x58, 0x49, 0x47, 0x4d, 0x3d, 0x23, 0x26, 0x3d,
7028 0x37, 0x33, 0x34, 0x30, 0x20, 0x19, 0x32, 0x56,
7029 0x28, 0x21, 0x1a, 0x25, 0x30, 0x21, 0x22, 0x42,
7030 0x28, 0x29, 0x2d, 0x37, 0x3d, 0x37, 0x26, 0x16,
7031 0x44, 0x30, 0x28, 0x43, 0x68, 0x69, 0x3c, 0x0c,
7032 0x3b, 0x36, 0x23, 0x19, 0x35, 0x54, 0x43, 0x17,
7033 0x37, 0x3d, 0x5d, 0x4e, 0x4d, 0x50, 0x15, 0x00,
7034 0xb4, 0xbe, 0xb8, 0x72, 0x36, 0x8f, 0xc6, 0xc0,
7035 0xc0, 0xc4, 0xc9, 0xbe, 0xb1, 0xba, 0xd3, 0x80,
7036 0x63, 0xcb, 0xd3, 0xc5, 0xc5, 0xce, 0xc0, 0xc3,
7037 0xc6, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xca, 0xcb,
7038 0xcb, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xcf, 0xd0,
7039 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
7040 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
7041 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
7042 0xde, 0xe0, 0x44, 0x3c, 0x75, 0x6d, 0x8c, 0xdc,
7043 0xf0, 0xdc, 0xc8, 0xc1, 0xc2, 0xc5, 0xcc, 0xd4,
7044 0x7e, 0xda, 0xd1, 0xca, 0xcf, 0xdc, 0xd2, 0xda,
7045 0xd2, 0xda, 0xe4, 0xea, 0xea, 0xe3, 0xda, 0xd3,
7046 0xd0, 0x95, 0x49, 0x4c, 0x5d, 0x67, 0x86, 0x7d,
7047 0x5d, 0x7e, 0x83, 0xa5, 0xb7, 0xae, 0xce, 0xe1,
7048 0x6a, 0x7b, 0x9d, 0x53, 0x58, 0xb1, 0xb6, 0xd5,
7049 0xc8, 0xbd, 0xc2, 0xcb, 0xcd, 0xd9, 0xd9, 0xc3,
7050 0xc8, 0xcd, 0xc2, 0xc9, 0xc5, 0x9b, 0x8a, 0x9c,
7051 0x86, 0x6d, 0x62, 0x85, 0x80, 0x69, 0x6d, 0x54,
7052 0xa6, 0xab, 0xc0, 0xa5, 0x6e, 0x86, 0xc2, 0xc8,
7053 0x77, 0x67, 0x79, 0x61, 0x58, 0x87, 0x9d, 0xa4,
7054 0x75, 0x6b, 0x82, 0xac, 0xb3, 0x72, 0x43, 0x68,
7055 0x58, 0x19, 0x3d, 0x3b, 0x21, 0x33, 0x2b, 0x31,
7056 0x47, 0x42, 0x36, 0x35, 0x36, 0x20, 0x16, 0x2a,
7057 0x33, 0x5d, 0xec, 0xff, 0xe9, 0xd7, 0x6a, 0x42,
7058 0x21, 0x26, 0x41, 0x62, 0x79, 0x5f, 0x30, 0x30,
7059 0x45, 0x3b, 0x2a, 0x4f, 0x74, 0x7e, 0x84, 0x64,
7060 0x81, 0x87, 0x89, 0x81, 0x73, 0x6a, 0x6c, 0x71,
7061 0x7d, 0x75, 0x6d, 0x6b, 0x6e, 0x6f, 0x6a, 0x64,
7062 0x70, 0x6e, 0x6d, 0x73, 0x7b, 0x7e, 0x7b, 0x76,
7063 0x6e, 0x7a, 0x7d, 0x6f, 0x64, 0x62, 0x5f, 0x58,
7064 0x4d, 0x55, 0x5e, 0x62, 0x60, 0x5e, 0x5e, 0x60,
7065 0x4c, 0x4d, 0x40, 0x38, 0x38, 0x58, 0x6a, 0x36,
7066 0x32, 0x33, 0x35, 0x39, 0x43, 0x56, 0x6c, 0x7c,
7067 0x4a, 0x4d, 0x4a, 0x3a, 0x26, 0x1c, 0x1f, 0x28,
7068 0x27, 0x22, 0x2a, 0x28, 0x13, 0x13, 0x1d, 0x16,
7069 0x3b, 0x3d, 0x1b, 0x1e, 0x4b, 0x3c, 0x1a, 0x2e,
7070 0x3d, 0x25, 0x26, 0x23, 0x0d, 0x18, 0x28, 0x17,
7071 0x20, 0x1f, 0x34, 0x5e, 0x78, 0x6d, 0x4c, 0x34,
7072 0x17, 0x33, 0x3a, 0x2b, 0x39, 0x67, 0x83, 0x80,
7073 0x2a, 0x31, 0x28, 0x24, 0x2b, 0x20, 0x20, 0x3b,
7074 0x61, 0x6c, 0x6f, 0x5d, 0x42, 0x36, 0x40, 0x51,
7075 0x2b, 0x36, 0x43, 0x42, 0x30, 0x20, 0x23, 0x2f,
7076 0x33, 0x3a, 0x32, 0x1c, 0x0e, 0x12, 0x17, 0x17,
7077 0x1d, 0x22, 0x43, 0x38, 0x3f, 0x4f, 0x1f, 0x08,
7078 0xc1, 0xc8, 0xb3, 0x65, 0x30, 0x94, 0xd1, 0xce,
7079 0xb5, 0xbd, 0xbe, 0xc3, 0xcb, 0xc1, 0xd3, 0x6e,
7080 0x74, 0xd1, 0xcc, 0xbe, 0xbf, 0xbe, 0xb8, 0xd7,
7081 0xc5, 0xc5, 0xc6, 0xc7, 0xc7, 0xc8, 0xc9, 0xc9,
7082 0xca, 0xca, 0xcb, 0xcc, 0xcc, 0xcd, 0xce, 0xce,
7083 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
7084 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
7085 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
7086 0xcb, 0xe6, 0x6e, 0x45, 0x7c, 0x7a, 0xb3, 0x9e,
7087 0xd2, 0xd5, 0xd4, 0xce, 0xc6, 0xc3, 0xc6, 0xcb,
7088 0x9a, 0xef, 0xe1, 0xee, 0xe5, 0xf4, 0xee, 0xeb,
7089 0xee, 0xc2, 0x9a, 0x9f, 0xc6, 0xe2, 0xdb, 0xc5,
7090 0x69, 0x2d, 0x53, 0xa7, 0x98, 0x7c, 0xb2, 0xea,
7091 0xdc, 0xd7, 0xb6, 0xa4, 0xad, 0xb1, 0xab, 0xa3,
7092 0x8b, 0xbd, 0x9b, 0x43, 0x71, 0xa7, 0x68, 0x4f,
7093 0x7d, 0x92, 0xd4, 0xf4, 0xc3, 0x92, 0x91, 0x9a,
7094 0x94, 0xb5, 0x5f, 0x48, 0x89, 0xc4, 0xcf, 0x76,
7095 0xa6, 0xcb, 0xd8, 0xea, 0xd0, 0xb0, 0xa1, 0x59,
7096 0xa5, 0x86, 0x8e, 0x9b, 0xa3, 0xc6, 0xa7, 0x3b,
7097 0x4f, 0x1b, 0x30, 0x42, 0x38, 0x32, 0x28, 0x38,
7098 0x46, 0x39, 0x33, 0x35, 0x3e, 0x2a, 0x0b, 0x16,
7099 0x22, 0x4f, 0x44, 0x11, 0x19, 0x32, 0x30, 0x3e,
7100 0x21, 0x29, 0x21, 0x26, 0x37, 0x2a, 0x20, 0x35,
7101 0x3c, 0x24, 0x7f, 0xe9, 0xff, 0x95, 0x11, 0x1d,
7102 0x53, 0x6e, 0x4e, 0x2f, 0x3f, 0x54, 0x47, 0x1f,
7103 0xb2, 0xb8, 0x49, 0x4a, 0x81, 0x6a, 0x7c, 0x90,
7104 0x87, 0x81, 0x79, 0x76, 0x76, 0x72, 0x6a, 0x63,
7105 0x70, 0x68, 0x5f, 0x5e, 0x65, 0x6b, 0x6c, 0x6a,
7106 0x78, 0x71, 0x69, 0x68, 0x6e, 0x74, 0x75, 0x73,
7107 0x71, 0x7a, 0x78, 0x68, 0x5d, 0x5f, 0x61, 0x5d,
7108 0x58, 0x5e, 0x63, 0x5e, 0x54, 0x4b, 0x49, 0x4b,
7109 0x5b, 0x54, 0x38, 0x30, 0x31, 0x36, 0x42, 0x2d,
7110 0x4a, 0x3c, 0x34, 0x41, 0x58, 0x63, 0x58, 0x49,
7111 0x0b, 0x3e, 0x6b, 0x67, 0x44, 0x3d, 0x66, 0x96,
7112 0x3f, 0x27, 0x26, 0x30, 0x2f, 0x37, 0x3b, 0x2d,
7113 0x34, 0x2a, 0x24, 0x2d, 0x32, 0x29, 0x25, 0x2c,
7114 0x34, 0x24, 0x35, 0x3a, 0x19, 0x1b, 0x40, 0x4e,
7115 0x17, 0x25, 0x3c, 0x59, 0x71, 0x69, 0x38, 0x05,
7116 0x2b, 0x4c, 0x58, 0x4e, 0x5a, 0x72, 0x63, 0x38,
7117 0x5d, 0x5f, 0x6c, 0x66, 0x53, 0x60, 0x76, 0x71,
7118 0x67, 0x54, 0x42, 0x44, 0x53, 0x58, 0x4b, 0x3a,
7119 0x1d, 0x3c, 0x3e, 0x1f, 0x15, 0x2a, 0x2b, 0x14,
7120 0x2d, 0x2b, 0x28, 0x1f, 0x0c, 0x06, 0x21, 0x44,
7121 0x29, 0x29, 0x42, 0x32, 0x3a, 0x51, 0x2a, 0x19,
7122 0xba, 0xb6, 0x8f, 0x35, 0x04, 0x75, 0xc0, 0xc7,
7123 0xb8, 0xc2, 0xb5, 0xb9, 0xcb, 0xb5, 0xd0, 0x80,
7124 0x8a, 0xc6, 0xbe, 0xc1, 0xc7, 0xce, 0xc0, 0xc1,
7125 0xc4, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc8, 0xc9,
7126 0xc9, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xcd, 0xce,
7127 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
7128 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
7129 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
7130 0xd3, 0xf7, 0xb4, 0x57, 0x73, 0x9b, 0xff, 0xc5,
7131 0xb1, 0xe5, 0xfb, 0xdb, 0xc0, 0xbc, 0xa3, 0x7a,
7132 0x4c, 0xac, 0xaa, 0xa7, 0x65, 0x62, 0x52, 0x2c,
7133 0x5d, 0x5f, 0x5a, 0x4d, 0x44, 0x50, 0x6e, 0x89,
7134 0x9d, 0xaa, 0xe1, 0xba, 0x92, 0xd2, 0xc3, 0x59,
7135 0x73, 0x41, 0x45, 0x7a, 0xc3, 0xd5, 0xae, 0xb4,
7136 0x91, 0xba, 0xb3, 0xa8, 0xb5, 0xbb, 0xbd, 0xba,
7137 0x9a, 0x88, 0x87, 0x7f, 0x72, 0x8a, 0x99, 0x7f,
7138 0x7d, 0x9e, 0x65, 0x93, 0xa6, 0x77, 0xa1, 0x99,
7139 0x79, 0xb0, 0xb0, 0xaa, 0x9a, 0xab, 0xce, 0x91,
7140 0x8c, 0x59, 0x67, 0x69, 0x26, 0x27, 0x7e, 0xb4,
7141 0x72, 0x39, 0x39, 0x33, 0x2b, 0x38, 0x31, 0x35,
7142 0x16, 0x1d, 0x2e, 0x45, 0x17, 0x6e, 0xf3, 0x82,
7143 0x62, 0x50, 0x38, 0x2b, 0x18, 0x1f, 0x38, 0x23,
7144 0x2d, 0x32, 0x20, 0x1e, 0x35, 0x2e, 0x24, 0x3b,
7145 0x3d, 0x59, 0x26, 0x52, 0x93, 0x61, 0x36, 0x23,
7146 0x26, 0x51, 0x40, 0x3d, 0x44, 0x37, 0x2e, 0x0c,
7147 0x73, 0xae, 0x49, 0x32, 0x55, 0x62, 0xa4, 0x9a,
7148 0x87, 0x81, 0x7c, 0x7b, 0x7e, 0x81, 0x80, 0x7e,
7149 0x7e, 0x81, 0x80, 0x79, 0x70, 0x6b, 0x6f, 0x75,
7150 0x6a, 0x63, 0x5b, 0x5a, 0x5d, 0x5e, 0x5b, 0x57,
7151 0x73, 0x79, 0x71, 0x5e, 0x55, 0x5d, 0x66, 0x68,
7152 0x64, 0x66, 0x63, 0x59, 0x4f, 0x4c, 0x54, 0x5e,
7153 0x62, 0x53, 0x35, 0x4a, 0x58, 0x43, 0x62, 0x9a,
7154 0xae, 0x99, 0x73, 0x47, 0x2b, 0x2e, 0x4a, 0x65,
7155 0x5c, 0x4f, 0x38, 0x1e, 0x0f, 0x14, 0x28, 0x39,
7156 0x51, 0x51, 0x52, 0x44, 0x21, 0x11, 0x32, 0x5e,
7157 0x6a, 0x46, 0x26, 0x20, 0x23, 0x21, 0x1f, 0x24,
7158 0x30, 0x34, 0x1b, 0x1b, 0x44, 0x46, 0x24, 0x1a,
7159 0x26, 0x36, 0x35, 0x26, 0x28, 0x3a, 0x39, 0x26,
7160 0x36, 0x2a, 0x1f, 0x25, 0x39, 0x46, 0x40, 0x31,
7161 0x16, 0x0f, 0x3c, 0x45, 0x24, 0x54, 0x8a, 0x69,
7162 0x2d, 0x31, 0x33, 0x32, 0x33, 0x3e, 0x52, 0x63,
7163 0x4d, 0x34, 0x1a, 0x0f, 0x17, 0x2a, 0x3f, 0x4d,
7164 0x4b, 0x2c, 0x19, 0x1e, 0x1c, 0x15, 0x2c, 0x51,
7165 0x39, 0x32, 0x41, 0x27, 0x28, 0x3b, 0x15, 0x06,
7166 0xe4, 0xc7, 0x76, 0x25, 0x2f, 0x85, 0xc4, 0xcb,
7167 0xc7, 0xbe, 0xc9, 0xc2, 0xad, 0xb6, 0xa8, 0x6d,
7168 0x8d, 0xcb, 0xce, 0xc8, 0xd0, 0xc2, 0xbd, 0xc1,
7169 0xbd, 0xc8, 0xc8, 0xc8, 0xcd, 0xc4, 0xc0, 0xd0,
7170 0xbf, 0xc9, 0xbf, 0xc2, 0xd6, 0xcb, 0xba, 0xc8,
7171 0xce, 0xc8, 0xd1, 0xc3, 0xc8, 0xd2, 0xc5, 0xd9,
7172 0xd4, 0xd2, 0xd9, 0xd4, 0xc7, 0xd2, 0xda, 0xc9,
7173 0xc6, 0xd7, 0xd1, 0xdd, 0xd6, 0xce, 0xe6, 0xdf,
7174 0xe9, 0xdd, 0xc0, 0x8b, 0x58, 0x56, 0x83, 0xa9,
7175 0x1c, 0x0d, 0x17, 0x3a, 0x4c, 0x53, 0x74, 0xa2,
7176 0x9b, 0x9d, 0x83, 0x9a, 0xd5, 0xc8, 0xb4, 0xe1,
7177 0xcc, 0xcb, 0xbf, 0xb7, 0xc4, 0xc3, 0x8c, 0x47,
7178 0x92, 0xaa, 0xb2, 0x98, 0x6e, 0x4d, 0x36, 0x27,
7179 0xa8, 0x9a, 0xbb, 0xb0, 0x58, 0x4a, 0xa1, 0xe2,
7180 0xe9, 0xb4, 0x7b, 0x7d, 0x78, 0x9a, 0xbc, 0x65,
7181 0x90, 0xb3, 0xaf, 0x9c, 0x9a, 0x8e, 0x95, 0xbf,
7182 0xa4, 0xa9, 0x8a, 0x71, 0x81, 0x79, 0x40, 0x0e,
7183 0x28, 0x13, 0x36, 0x76, 0x67, 0x19, 0x06, 0x32,
7184 0x18, 0x8a, 0xa2, 0x3c, 0x08, 0x3a, 0x4c, 0x1c,
7185 0x40, 0x18, 0x4e, 0xbd, 0xaf, 0x30, 0x00, 0x35,
7186 0x2f, 0x4c, 0x2a, 0x31, 0x32, 0x4e, 0xcd, 0xff,
7187 0xb0, 0x2d, 0x36, 0x42, 0x2f, 0x36, 0x34, 0x66,
7188 0x79, 0x26, 0x1a, 0x37, 0x2a, 0x27, 0x2c, 0x10,
7189 0x39, 0x37, 0x2a, 0x26, 0x45, 0x67, 0x5b, 0x34,
7190 0x36, 0x29, 0x3c, 0x46, 0x32, 0x38, 0x41, 0x28,
7191 0x2a, 0x37, 0x42, 0x39, 0x65, 0xa0, 0x91, 0x77,
7192 0x78, 0x7a, 0x7a, 0x75, 0x71, 0x73, 0x7c, 0x84,
7193 0x87, 0x80, 0x77, 0x75, 0x78, 0x7b, 0x7a, 0x78,
7194 0x8b, 0x8b, 0x89, 0x86, 0x80, 0x78, 0x71, 0x6c,
7195 0x77, 0x75, 0x71, 0x69, 0x61, 0x5c, 0x5b, 0x5d,
7196 0x70, 0x68, 0x5f, 0x5c, 0x5e, 0x61, 0x60, 0x5e,
7197 0x42, 0x46, 0x44, 0x37, 0x4f, 0x96, 0xa2, 0x65,
7198 0x18, 0x43, 0x60, 0x47, 0x14, 0x06, 0x34, 0x6a,
7199 0x59, 0x52, 0x35, 0x17, 0x1f, 0x3f, 0x42, 0x2b,
7200 0x55, 0x3d, 0x2c, 0x2b, 0x28, 0x21, 0x24, 0x31,
7201 0x31, 0x2e, 0x32, 0x3e, 0x47, 0x3f, 0x24, 0x0d,
7202 0x16, 0x29, 0x2c, 0x32, 0x3a, 0x24, 0x11, 0x21,
7203 0x5a, 0x38, 0x37, 0x37, 0x14, 0x0d, 0x2b, 0x3b,
7204 0x20, 0x22, 0x15, 0x1e, 0x3b, 0x30, 0x17, 0x1c,
7205 0x1c, 0x27, 0x24, 0x32, 0x4d, 0x4a, 0x4a, 0x69,
7206 0x83, 0x7d, 0x4e, 0x3f, 0x54, 0x34, 0x1c, 0x46,
7207 0x47, 0x3e, 0x37, 0x34, 0x2c, 0x25, 0x2c, 0x3a,
7208 0x2b, 0x1d, 0x16, 0x19, 0x1b, 0x29, 0x57, 0x88,
7209 0x5d, 0x4a, 0x61, 0x64, 0x6d, 0x64, 0x1f, 0x00,
7210 0xc9, 0xbf, 0x7a, 0x26, 0x30, 0x8a, 0xbe, 0xb2,
7211 0x9f, 0xa0, 0xb8, 0xc0, 0xb7, 0xc8, 0xbd, 0x83,
7212 0x90, 0xc8, 0xc4, 0xb7, 0xbc, 0xb6, 0xbe, 0xca,
7213 0xc4, 0xb6, 0xc5, 0xcc, 0xb8, 0xbb, 0xcd, 0xc9,
7214 0xc6, 0xc3, 0xd6, 0xd7, 0xb6, 0xb3, 0xc9, 0xcd,
7215 0xde, 0xe8, 0xd5, 0xcd, 0xde, 0xdb, 0xce, 0xca,
7216 0xde, 0xd9, 0xe2, 0xe5, 0xda, 0xe1, 0xec, 0xe6,
7217 0xcd, 0xf4, 0xde, 0xa4, 0xa4, 0xaf, 0x9b, 0x96,
7218 0x90, 0x43, 0x56, 0x68, 0x3c, 0x6d, 0xaf, 0x81,
7219 0xbb, 0xc2, 0xe1, 0xf2, 0xbf, 0x77, 0x72, 0x9f,
7220 0x6c, 0xac, 0x87, 0x5e, 0x79, 0x4e, 0x18, 0x43,
7221 0x6e, 0x5f, 0x61, 0x71, 0x75, 0x78, 0x9b, 0xc9,
7222 0xff, 0xbc, 0x87, 0xad, 0xde, 0xc8, 0x7e, 0x46,
7223 0x6a, 0x76, 0x82, 0x9d, 0xc3, 0xc5, 0x9e, 0x7d,
7224 0x78, 0xbb, 0xd7, 0xd4, 0x92, 0x67, 0x7b, 0x56,
7225 0x27, 0x7b, 0xb5, 0xc0, 0xb4, 0x89, 0x76, 0x94,
7226 0x95, 0x5b, 0xb2, 0xdd, 0x6b, 0x5b, 0x92, 0x67,
7227 0x7b, 0x54, 0x35, 0x30, 0x2b, 0x23, 0x31, 0x4d,
7228 0x3a, 0x64, 0x61, 0x2a, 0x16, 0x38, 0x46, 0x30,
7229 0x8a, 0xd0, 0xd3, 0x6e, 0x15, 0x14, 0x35, 0x41,
7230 0x4e, 0x39, 0x32, 0x7f, 0xc8, 0xd5, 0xce, 0xae,
7231 0x3d, 0x1e, 0x55, 0x51, 0x43, 0x60, 0x3e, 0x23,
7232 0x2f, 0x25, 0x3e, 0x51, 0x37, 0x2b, 0x4c, 0x6c,
7233 0x69, 0x5c, 0x66, 0x81, 0x7f, 0x58, 0x39, 0x34,
7234 0x17, 0x54, 0x6a, 0x57, 0x6c, 0xb0, 0xe9, 0xff,
7235 0x63, 0x3a, 0x40, 0x31, 0x2f, 0x73, 0x99, 0x8c,
7236 0x77, 0x6f, 0x69, 0x6e, 0x77, 0x79, 0x71, 0x68,
7237 0x64, 0x65, 0x69, 0x72, 0x7b, 0x7d, 0x78, 0x72,
7238 0x7c, 0x7d, 0x7d, 0x7c, 0x78, 0x73, 0x6d, 0x69,
7239 0x80, 0x79, 0x6c, 0x5f, 0x58, 0x58, 0x5f, 0x64,
7240 0x5d, 0x56, 0x4e, 0x4c, 0x50, 0x53, 0x53, 0x51,
7241 0x56, 0x40, 0x35, 0x3e, 0x55, 0x66, 0x51, 0x27,
7242 0x16, 0x2a, 0x3d, 0x3d, 0x2e, 0x22, 0x25, 0x2e,
7243 0x2e, 0x31, 0x3a, 0x41, 0x3e, 0x33, 0x2e, 0x31,
7244 0x1d, 0x56, 0x7a, 0x5d, 0x28, 0x14, 0x24, 0x38,
7245 0x2a, 0x3e, 0x51, 0x51, 0x40, 0x2d, 0x26, 0x26,
7246 0x2f, 0x43, 0x2b, 0x0c, 0x1d, 0x3a, 0x48, 0x56,
7247 0x55, 0x66, 0x3b, 0x1d, 0x3b, 0x35, 0x17, 0x22,
7248 0x20, 0x32, 0x26, 0x1c, 0x33, 0x42, 0x4b, 0x62,
7249 0x33, 0x20, 0x12, 0x34, 0x5d, 0x43, 0x17, 0x17,
7250 0x18, 0x30, 0x1d, 0x0c, 0x3b, 0x6b, 0x62, 0x47,
7251 0x4b, 0x41, 0x31, 0x1d, 0x0c, 0x0c, 0x20, 0x37,
7252 0x3a, 0x29, 0x1e, 0x1d, 0x19, 0x21, 0x46, 0x70,
7253 0x5a, 0x46, 0x59, 0x58, 0x62, 0x5f, 0x23, 0x0c,
7254 0xb3, 0xbe, 0x83, 0x2b, 0x37, 0x9a, 0xc5, 0xa6,
7255 0xbb, 0xbc, 0xd3, 0xd5, 0xc1, 0xc3, 0xa9, 0x66,
7256 0xa2, 0xcb, 0xc0, 0xb8, 0xc5, 0xc3, 0xc3, 0xbf,
7257 0xc8, 0xc0, 0xb7, 0xbf, 0xd3, 0xde, 0xde, 0xdf,
7258 0xe3, 0xe5, 0xd9, 0xcf, 0xd8, 0xde, 0xda, 0xd8,
7259 0xa7, 0xd2, 0xcc, 0xd3, 0xd6, 0xc8, 0xd4, 0xd0,
7260 0x94, 0x8d, 0x7e, 0x75, 0x6e, 0x5d, 0x5b, 0x71,
7261 0x73, 0x70, 0x74, 0x6a, 0x81, 0x7d, 0x56, 0x78,
7262 0x99, 0x7e, 0xb3, 0xc5, 0x83, 0x91, 0xc0, 0xa0,
7263 0xbc, 0xd2, 0xc1, 0x7b, 0x3f, 0x49, 0x8b, 0xc2,
7264 0xa0, 0xa0, 0xaa, 0x8d, 0x6d, 0x9f, 0xd7, 0xca,
7265 0xfc, 0x9f, 0x58, 0x67, 0x96, 0x9c, 0x7b, 0x5f,
7266 0x1e, 0x7d, 0xc0, 0xb1, 0x96, 0x9c, 0x9d, 0x8a,
7267 0x95, 0xc6, 0xaf, 0x9d, 0xd3, 0xd8, 0x9c, 0x81,
7268 0xa8, 0xbd, 0x86, 0x87, 0xb0, 0xc5, 0xda, 0xc1,
7269 0x96, 0xb3, 0xb6, 0xba, 0xcc, 0xb5, 0x90, 0x91,
7270 0x5a, 0x3a, 0x1f, 0x29, 0x4f, 0x65, 0x5b, 0x49,
7271 0x39, 0x43, 0x45, 0x46, 0x59, 0x6b, 0x59, 0x35,
7272 0x52, 0x46, 0x44, 0x4f, 0x55, 0x44, 0x27, 0x12,
7273 0x0a, 0x36, 0x35, 0x10, 0x23, 0x66, 0x71, 0x45,
7274 0x5a, 0x53, 0x57, 0x3b, 0x2f, 0x3e, 0x3d, 0x4d,
7275 0x41, 0x1d, 0x4a, 0x5f, 0x4f, 0x46, 0x32, 0x3e,
7276 0x27, 0x24, 0x22, 0x3b, 0x57, 0x41, 0x1f, 0x1e,
7277 0x2a, 0x1a, 0x1a, 0x27, 0x20, 0x10, 0x1b, 0x38,
7278 0x27, 0x31, 0x20, 0x44, 0x93, 0x87, 0x4d, 0x4d,
7279 0x34, 0x2b, 0x22, 0x23, 0x57, 0x7f, 0x73, 0x7f,
7280 0x78, 0x7d, 0x82, 0x83, 0x7f, 0x79, 0x73, 0x71,
7281 0x78, 0x70, 0x67, 0x64, 0x68, 0x6c, 0x6d, 0x6c,
7282 0x67, 0x6a, 0x6e, 0x71, 0x72, 0x71, 0x6e, 0x6c,
7283 0x7e, 0x79, 0x72, 0x6b, 0x65, 0x5f, 0x5b, 0x59,
7284 0x63, 0x5d, 0x57, 0x56, 0x59, 0x5c, 0x5a, 0x57,
7285 0x52, 0x40, 0x31, 0x3e, 0x53, 0x4b, 0x3b, 0x3c,
7286 0x53, 0x54, 0x55, 0x54, 0x4d, 0x40, 0x31, 0x27,
7287 0x4f, 0x4c, 0x5c, 0x6d, 0x56, 0x2d, 0x2b, 0x47,
7288 0x5e, 0x39, 0x1d, 0x26, 0x3c, 0x3d, 0x25, 0x0e,
7289 0x39, 0x4a, 0x5a, 0x58, 0x45, 0x34, 0x2e, 0x30,
7290 0x3b, 0x23, 0x10, 0x2b, 0x4e, 0x3f, 0x36, 0x57,
7291 0x5c, 0x42, 0x30, 0x2b, 0x29, 0x2d, 0x2f, 0x25,
7292 0x0a, 0x3d, 0x41, 0x26, 0x2b, 0x36, 0x36, 0x3d,
7293 0x36, 0x2b, 0x31, 0x51, 0x4a, 0x18, 0x38, 0xa5,
7294 0xa2, 0xb2, 0xd0, 0xc4, 0x89, 0x77, 0x9d, 0xbe,
7295 0x21, 0x1e, 0x1c, 0x23, 0x3b, 0x5c, 0x76, 0x82,
7296 0x58, 0x45, 0x37, 0x33, 0x2c, 0x2b, 0x43, 0x65,
7297 0x85, 0x6a, 0x6f, 0x5f, 0x5c, 0x56, 0x21, 0x11,
7298 0x9e, 0xb1, 0x7a, 0x21, 0x33, 0xa1, 0xd2, 0xb0,
7299 0xa8, 0xad, 0xca, 0xd3, 0xc4, 0xc8, 0xaf, 0x6c,
7300 0x95, 0xc4, 0xc4, 0xbd, 0xbf, 0xbe, 0xc9, 0xcb,
7301 0xd0, 0xd7, 0xc5, 0xb9, 0xbb, 0xa0, 0x79, 0x6e,
7302 0x5b, 0x31, 0x5a, 0x95, 0x86, 0x6f, 0x64, 0x42,
7303 0x1d, 0x31, 0x2e, 0x23, 0x19, 0x3b, 0x7a, 0x88,
7304 0x89, 0x79, 0xad, 0xcb, 0x94, 0x85, 0xaf, 0xbc,
7305 0xc1, 0x98, 0xb6, 0xe2, 0xd1, 0x97, 0x84, 0xb7,
7306 0xcb, 0xa9, 0x6a, 0x71, 0xc6, 0xe5, 0xc8, 0xbd,
7307 0x82, 0x65, 0x6d, 0xaf, 0xee, 0xec, 0xb5, 0x83,
7308 0x7b, 0x38, 0x44, 0x6f, 0x86, 0xc4, 0xc7, 0x63,
7309 0x73, 0xa2, 0xb5, 0x94, 0x79, 0x8f, 0xbb, 0xd6,
7310 0xff, 0xac, 0x6f, 0x84, 0x9e, 0x9c, 0xb0, 0xdb,
7311 0xd5, 0xbc, 0x77, 0x60, 0x97, 0xae, 0x84, 0x62,
7312 0x73, 0xae, 0x74, 0x58, 0x6e, 0x66, 0x79, 0x87,
7313 0x61, 0x89, 0x82, 0x5e, 0x4d, 0x49, 0x70, 0xb8,
7314 0xc0, 0x5e, 0x41, 0x81, 0x89, 0x43, 0x39, 0x76,
7315 0x3a, 0x4e, 0x56, 0x51, 0x58, 0x62, 0x4d, 0x28,
7316 0x6c, 0x41, 0x23, 0x29, 0x34, 0x31, 0x32, 0x3c,
7317 0x2c, 0x46, 0x5a, 0x52, 0x38, 0x27, 0x28, 0x2f,
7318 0x34, 0x47, 0x78, 0x52, 0x59, 0x8b, 0x62, 0x52,
7319 0x4a, 0x41, 0x30, 0x25, 0x69, 0xc8, 0xb5, 0x64,
7320 0xb0, 0xa3, 0x5a, 0x28, 0x33, 0x23, 0x16, 0x3d,
7321 0x4e, 0x5b, 0x53, 0x38, 0x32, 0x41, 0x40, 0x2d,
7322 0x4a, 0x5f, 0x32, 0x0f, 0x26, 0x22, 0x28, 0x66,
7323 0x8a, 0x79, 0x8d, 0x6e, 0x40, 0x4f, 0x5b, 0x52,
7324 0x78, 0x80, 0x87, 0x83, 0x77, 0x6f, 0x6f, 0x73,
7325 0x6f, 0x6e, 0x6e, 0x72, 0x76, 0x74, 0x6c, 0x64,
7326 0x88, 0x89, 0x8a, 0x8a, 0x87, 0x81, 0x7c, 0x79,
7327 0x75, 0x70, 0x6b, 0x6a, 0x6f, 0x73, 0x73, 0x72,
7328 0x6b, 0x65, 0x5f, 0x5d, 0x5e, 0x5d, 0x59, 0x54,
7329 0x43, 0x40, 0x2b, 0x2d, 0x45, 0x3f, 0x2e, 0x38,
7330 0x47, 0x49, 0x45, 0x38, 0x29, 0x27, 0x34, 0x41,
7331 0x4d, 0x3f, 0x38, 0x38, 0x30, 0x2a, 0x3e, 0x5d,
7332 0x6c, 0x1c, 0x03, 0x3c, 0x52, 0x29, 0x1e, 0x42,
7333 0x27, 0x23, 0x26, 0x36, 0x49, 0x4e, 0x42, 0x33,
7334 0x0b, 0x28, 0x18, 0x0c, 0x43, 0x7c, 0x7b, 0x67,
7335 0x5d, 0x2d, 0x47, 0x6d, 0x42, 0x1b, 0x2b, 0x3a,
7336 0x59, 0x8f, 0x89, 0x59, 0x51, 0x53, 0x3a, 0x25,
7337 0x6d, 0x63, 0x3c, 0x29, 0x40, 0x57, 0x77, 0xa9,
7338 0xc5, 0xc2, 0xf2, 0xe6, 0x74, 0x49, 0x92, 0xd2,
7339 0xb1, 0x71, 0x2e, 0x2d, 0x6c, 0x97, 0x73, 0x33,
7340 0x40, 0x2c, 0x1f, 0x20, 0x1d, 0x17, 0x25, 0x3e,
7341 0x53, 0x3b, 0x43, 0x35, 0x39, 0x41, 0x1e, 0x1d,
7342 0xb7, 0xbf, 0x85, 0x33, 0x44, 0xa8, 0xd8, 0xc0,
7343 0xb5, 0xb5, 0xcb, 0xcd, 0xb9, 0xbc, 0xa3, 0x61,
7344 0xbb, 0xdb, 0xd3, 0xc7, 0xc1, 0xbe, 0xc4, 0xba,
7345 0x9e, 0x54, 0x43, 0x61, 0x4e, 0x27, 0x2d, 0x47,
7346 0x42, 0x9a, 0x9c, 0x73, 0x8f, 0xa8, 0x93, 0x88,
7347 0xa8, 0xbd, 0xa4, 0x84, 0x9a, 0x91, 0x86, 0xce,
7348 0xb3, 0xb9, 0xa4, 0x87, 0x94, 0xb6, 0xa9, 0x7a,
7349 0x9c, 0xc7, 0xd1, 0xca, 0xbb, 0xb2, 0xa4, 0x74,
7350 0x5d, 0x98, 0x9b, 0x9d, 0xc2, 0xae, 0x91, 0xb6,
7351 0x95, 0x71, 0x95, 0xdf, 0xc5, 0x6f, 0x82, 0xe7,
7352 0x98, 0x95, 0x5f, 0x70, 0xca, 0xc1, 0x8c, 0xa3,
7353 0x67, 0x75, 0x67, 0x3d, 0x2c, 0x45, 0x60, 0x67,
7354 0x18, 0x33, 0x2c, 0x1a, 0x48, 0xa4, 0xca, 0xb3,
7355 0xc6, 0x95, 0x8c, 0x8d, 0x6a, 0x55, 0x55, 0x47,
7356 0x53, 0xa3, 0x72, 0x3a, 0x27, 0x17, 0x4e, 0x87,
7357 0xb5, 0xa2, 0x69, 0x4a, 0x5e, 0x5a, 0x44, 0x4b,
7358 0x3d, 0x2c, 0x3a, 0x68, 0x62, 0x1b, 0x0d, 0x4a,
7359 0x46, 0x43, 0x42, 0x40, 0x38, 0x36, 0x46, 0x5a,
7360 0x1c, 0x2f, 0x45, 0x52, 0x54, 0x4f, 0x46, 0x3e,
7361 0x3e, 0x6a, 0x79, 0x62, 0x62, 0x79, 0x6a, 0x3e,
7362 0x5b, 0x3a, 0x4c, 0x34, 0x3f, 0x5d, 0x30, 0x32,
7363 0x93, 0x5c, 0x45, 0x81, 0x9d, 0x6b, 0x52, 0x5f,
7364 0x9a, 0xff, 0xff, 0xee, 0x9c, 0x2f, 0x00, 0x19,
7365 0xac, 0x98, 0x6b, 0x44, 0x49, 0x64, 0x60, 0x44,
7366 0x63, 0x73, 0x53, 0x29, 0x27, 0x2a, 0x2a, 0x3a,
7367 0x44, 0x5b, 0x2a, 0x23, 0xa7, 0xdb, 0x90, 0x86,
7368 0x95, 0x8a, 0x7f, 0x7d, 0x82, 0x84, 0x7f, 0x79,
7369 0x7c, 0x79, 0x76, 0x75, 0x71, 0x67, 0x58, 0x4d,
7370 0x65, 0x68, 0x6d, 0x72, 0x75, 0x75, 0x74, 0x73,
7371 0x9c, 0x86, 0x6a, 0x5b, 0x5e, 0x6c, 0x7a, 0x81,
7372 0x7a, 0x75, 0x6e, 0x6b, 0x6a, 0x66, 0x5e, 0x57,
7373 0x43, 0x41, 0x31, 0x3a, 0x55, 0x4a, 0x2e, 0x2d,
7374 0x19, 0x1a, 0x1b, 0x1b, 0x1f, 0x2a, 0x3b, 0x48,
7375 0x39, 0x36, 0x29, 0x24, 0x43, 0x78, 0x97, 0x9b,
7376 0x42, 0x24, 0x40, 0x83, 0x7f, 0x3f, 0x37, 0x6b,
7377 0x9e, 0x8e, 0x7a, 0x70, 0x68, 0x58, 0x3e, 0x28,
7378 0x3b, 0x31, 0x2d, 0x45, 0x53, 0x36, 0x39, 0x70,
7379 0x3f, 0x52, 0x5b, 0x74, 0x7b, 0x38, 0x0e, 0x38,
7380 0x67, 0x81, 0x5d, 0x26, 0x2f, 0x44, 0x32, 0x1a,
7381 0x5c, 0x2e, 0x11, 0x3a, 0x65, 0x4c, 0x3c, 0x63,
7382 0x88, 0x87, 0xa4, 0xa3, 0x86, 0x96, 0x87, 0x35,
7383 0x4d, 0xb3, 0xff, 0xef, 0xae, 0x89, 0x8a, 0x91,
7384 0x31, 0x1e, 0x17, 0x22, 0x27, 0x22, 0x28, 0x38,
7385 0x56, 0x3e, 0x45, 0x2f, 0x2a, 0x2f, 0x11, 0x15,
7386 0x36, 0x3b, 0x24, 0x0f, 0x3d, 0x9c, 0xd4, 0xd5,
7387 0xcb, 0xc1, 0xc7, 0xbb, 0xa1, 0xa5, 0x93, 0x56,
7388 0x43, 0x6b, 0x73, 0x68, 0x52, 0x42, 0x44, 0x35,
7389 0x70, 0x8b, 0xa7, 0xaa, 0xa0, 0xa7, 0xba, 0xc4,
7390 0x9d, 0x94, 0x96, 0xa2, 0xb0, 0xbe, 0xbc, 0xa9,
7391 0x81, 0x8e, 0xc2, 0xb2, 0xb4, 0xed, 0xb0, 0x31,
7392 0x66, 0x80, 0x9e, 0xc0, 0xc5, 0x89, 0x55, 0x58,
7393 0x9f, 0xb4, 0x86, 0x77, 0x6e, 0x4d, 0x6d, 0x99,
7394 0x9e, 0x86, 0x8e, 0xb3, 0xce, 0xd2, 0xab, 0x72,
7395 0x8f, 0x74, 0x68, 0x81, 0x9f, 0x94, 0x5e, 0x2a,
7396 0x07, 0x12, 0x29, 0x7b, 0xcc, 0xab, 0x5f, 0x53,
7397 0xa7, 0xb0, 0xc4, 0xc7, 0xa4, 0x83, 0x9a, 0xcc,
7398 0xe5, 0xc3, 0xcb, 0xfa, 0xfc, 0xc2, 0x94, 0x90,
7399 0x67, 0x5d, 0x99, 0xab, 0x54, 0x35, 0x72, 0x9b,
7400 0x52, 0x76, 0x4b, 0x43, 0x4e, 0x3b, 0x32, 0x0a,
7401 0x53, 0x71, 0x64, 0x46, 0x3b, 0x2d, 0x36, 0x63,
7402 0x3c, 0x6a, 0x43, 0x18, 0x54, 0x85, 0x6a, 0x4d,
7403 0x27, 0x1c, 0x2a, 0x47, 0x42, 0x2f, 0x45, 0x75,
7404 0xcc, 0xd7, 0xbc, 0x74, 0x37, 0x24, 0x23, 0x1f,
7405 0x2b, 0x69, 0x7c, 0x50, 0x3f, 0x66, 0x83, 0x7b,
7406 0x4e, 0x2f, 0x43, 0x4f, 0x37, 0x21, 0x44, 0xa4,
7407 0x2c, 0x6b, 0x61, 0x64, 0x7e, 0x90, 0xb3, 0xb4,
7408 0xdf, 0xea, 0xcd, 0xa6, 0xa5, 0xaa, 0xa8, 0xae,
7409 0xc1, 0x73, 0x2c, 0x1e, 0x28, 0x2b, 0x33, 0x42,
7410 0x35, 0x49, 0x51, 0x43, 0x3b, 0x3c, 0x2f, 0x19,
7411 0x25, 0x26, 0x25, 0x11, 0x3b, 0x8d, 0x9e, 0x93,
7412 0x7f, 0x79, 0x71, 0x6c, 0x6c, 0x6e, 0x71, 0x72,
7413 0x87, 0x83, 0x7f, 0x81, 0x86, 0x88, 0x85, 0x81,
7414 0x74, 0x78, 0x7e, 0x85, 0x89, 0x8b, 0x8b, 0x8a,
7415 0x98, 0x82, 0x68, 0x5d, 0x63, 0x6e, 0x74, 0x74,
7416 0x63, 0x5f, 0x5a, 0x59, 0x58, 0x53, 0x49, 0x41,
7417 0x37, 0x34, 0x30, 0x32, 0x31, 0x21, 0x21, 0x36,
7418 0x24, 0x1a, 0x16, 0x24, 0x37, 0x3a, 0x27, 0x12,
7419 0x15, 0x22, 0x22, 0x22, 0x45, 0x74, 0x77, 0x5a,
7420 0x41, 0x33, 0x35, 0x51, 0x6d, 0x6c, 0x54, 0x3e,
7421 0x49, 0x54, 0x5c, 0x54, 0x45, 0x3d, 0x43, 0x4e,
7422 0x67, 0xa2, 0x9f, 0x64, 0x3f, 0x31, 0x27, 0x2a,
7423 0x52, 0x63, 0x5e, 0x56, 0x6c, 0x81, 0x76, 0x61,
7424 0x4c, 0x61, 0x4c, 0x3a, 0x5c, 0x75, 0x64, 0x54,
7425 0x44, 0x57, 0x73, 0x8c, 0x73, 0x2f, 0x36, 0x8a,
7426 0xb4, 0x69, 0x30, 0x2a, 0x47, 0x69, 0x57, 0x1d,
7427 0x16, 0x84, 0xd9, 0xc7, 0x86, 0x58, 0x37, 0x1a,
7428 0x3b, 0x28, 0x26, 0x3a, 0x46, 0x42, 0x41, 0x4a,
7429 0x7e, 0x69, 0x6c, 0x4b, 0x35, 0x2b, 0x06, 0x08,
7430 0x67, 0x57, 0x41, 0x36, 0x3c, 0x47, 0x46, 0x3e,
7431 0x45, 0x3a, 0x43, 0x43, 0x3f, 0x60, 0x6b, 0x3f,
7432 0x80, 0xb7, 0xcf, 0xc0, 0x9a, 0x90, 0xb0, 0xba,
7433 0xc9, 0xa3, 0x85, 0xa6, 0xd6, 0xc2, 0xa0, 0xab,
7434 0xd2, 0xbc, 0x93, 0x90, 0xb5, 0xbd, 0xb3, 0xbd,
7435 0xad, 0xc0, 0x9c, 0x82, 0x9c, 0x8a, 0x7c, 0xb9,
7436 0xd4, 0xba, 0xc8, 0xa6, 0x60, 0x81, 0xa5, 0x68,
7437 0x6e, 0x8b, 0x75, 0x73, 0xb5, 0xde, 0xcd, 0xb1,
7438 0x99, 0x9b, 0x90, 0x75, 0x62, 0x78, 0xb3, 0xe6,
7439 0x8e, 0xbe, 0xc1, 0x91, 0x83, 0xa3, 0xa3, 0x7f,
7440 0x6b, 0x7f, 0xe4, 0xe9, 0x6e, 0x69, 0xcf, 0xec,
7441 0x8b, 0x93, 0xb2, 0xce, 0xc6, 0xaa, 0xae, 0xc9,
7442 0xa1, 0xa0, 0x7c, 0x46, 0x3c, 0x63, 0x83, 0x85,
7443 0x21, 0x15, 0x22, 0x42, 0x5f, 0x7f, 0x99, 0xa1,
7444 0x60, 0x5d, 0x35, 0x37, 0x44, 0x77, 0xc4, 0xb1,
7445 0x6c, 0x63, 0x38, 0x28, 0x44, 0x43, 0x2d, 0x34,
7446 0x68, 0x63, 0xba, 0xff, 0xdc, 0xa8, 0x6e, 0x17,
7447 0x52, 0x32, 0x28, 0x39, 0x39, 0x2a, 0x3c, 0x64,
7448 0x85, 0xa0, 0xa9, 0x8a, 0x61, 0x4b, 0x41, 0x3c,
7449 0xa5, 0x6e, 0x28, 0x0e, 0x33, 0x69, 0x7a, 0x6c,
7450 0x93, 0x65, 0x28, 0x29, 0x34, 0x4c, 0xa2, 0xe3,
7451 0xa2, 0x9e, 0x3d, 0x29, 0x36, 0x23, 0x4b, 0x66,
7452 0x39, 0x28, 0x37, 0x6c, 0xb0, 0xd8, 0xa0, 0x37,
7453 0x9d, 0x75, 0x5b, 0x5e, 0x54, 0x32, 0x18, 0x16,
7454 0x0d, 0x33, 0x38, 0x1b, 0x22, 0x4e, 0x57, 0x39,
7455 0x2b, 0x57, 0x67, 0x3b, 0x32, 0x4b, 0x5c, 0x83,
7456 0x72, 0x79, 0x7f, 0x7a, 0x70, 0x6d, 0x75, 0x7e,
7457 0x78, 0x7b, 0x80, 0x86, 0x85, 0x7a, 0x67, 0x59,
7458 0x6d, 0x6d, 0x6b, 0x67, 0x60, 0x57, 0x4f, 0x4b,
7459 0x60, 0x58, 0x55, 0x61, 0x74, 0x7d, 0x78, 0x6f,
7460 0x61, 0x5f, 0x5e, 0x60, 0x63, 0x60, 0x58, 0x50,
7461 0x59, 0x55, 0x4d, 0x39, 0x2a, 0x39, 0x4e, 0x50,
7462 0x21, 0x1e, 0x20, 0x2a, 0x33, 0x32, 0x23, 0x16,
7463 0x3b, 0x49, 0x57, 0x5e, 0x5f, 0x56, 0x40, 0x2b,
7464 0x2b, 0x3e, 0x43, 0x35, 0x2e, 0x37, 0x3a, 0x32,
7465 0x2f, 0x3a, 0x43, 0x40, 0x37, 0x37, 0x44, 0x53,
7466 0x5b, 0x49, 0x2d, 0x2f, 0x3c, 0x25, 0x15, 0x2c,
7467 0x33, 0x2b, 0x33, 0x1d, 0x13, 0x59, 0x7b, 0x3e,
7468 0x27, 0x43, 0x48, 0x4f, 0x6c, 0x6e, 0x5e, 0x61,
7469 0x28, 0x86, 0x82, 0x25, 0x07, 0x24, 0x27, 0x12,
7470 0x3e, 0x2f, 0x35, 0x68, 0x88, 0x59, 0x25, 0x27,
7471 0x37, 0x75, 0x87, 0x4d, 0x1f, 0x2b, 0x40, 0x3d,
7472 0x28, 0x15, 0x14, 0x2c, 0x3b, 0x34, 0x2b, 0x2d,
7473 0x36, 0x2d, 0x44, 0x35, 0x2c, 0x2e, 0x11, 0x19,
7474 0xe9, 0xd4, 0xce, 0xdb, 0xd5, 0xb0, 0x8d, 0x81,
7475 0xba, 0xa9, 0xaa, 0xa4, 0xa1, 0xc9, 0xdc, 0xb7,
7476 0xca, 0xbf, 0x97, 0x7f, 0x7d, 0x94, 0xb0, 0xa1,
7477 0x82, 0x8a, 0x91, 0x8b, 0x92, 0xb7, 0xc1, 0xa4,
7478 0xa6, 0xa0, 0xb9, 0xbb, 0x88, 0x70, 0x8d, 0xa6,
7479 0xb5, 0x9b, 0x75, 0x80, 0x7f, 0x6f, 0x7c, 0x73,
7480 0x7c, 0x8a, 0x9f, 0xbb, 0xbe, 0x98, 0x83, 0x97,
7481 0xb4, 0xb2, 0xd1, 0xc0, 0x9b, 0x85, 0x77, 0x94,
7482 0xa8, 0xf0, 0xc4, 0x97, 0xb6, 0x80, 0x47, 0x85,
7483 0xa9, 0x8c, 0x99, 0xaa, 0x69, 0x23, 0x68, 0xf3,
7484 0xf8, 0xa3, 0x6a, 0x4c, 0x48, 0x83, 0x91, 0x48,
7485 0x64, 0x58, 0x34, 0x12, 0x16, 0x2b, 0x1f, 0x00,
7486 0x24, 0x12, 0x0e, 0x25, 0x38, 0x2f, 0x18, 0x07,
7487 0x4e, 0x7f, 0x6e, 0x55, 0x76, 0x7a, 0x58, 0x53,
7488 0x44, 0x32, 0x21, 0x37, 0x38, 0x6c, 0xb4, 0x7f,
7489 0x2e, 0x49, 0x48, 0x4c, 0x64, 0x59, 0x44, 0x51,
7490 0x35, 0x54, 0x20, 0x1b, 0x61, 0x41, 0x19, 0x63,
7491 0x3b, 0x21, 0x1d, 0x3a, 0x52, 0x53, 0x54, 0x5e,
7492 0x2c, 0x31, 0x38, 0x38, 0x2f, 0x2b, 0x38, 0x4a,
7493 0x2c, 0x52, 0x53, 0x29, 0x1e, 0x40, 0x4e, 0x3d,
7494 0x07, 0x48, 0x3b, 0x50, 0x6e, 0x80, 0x89, 0x34,
7495 0x6e, 0xfe, 0xd6, 0x6b, 0x27, 0x33, 0xb6, 0xff,
7496 0xff, 0xe7, 0xc9, 0x78, 0x20, 0x34, 0x66, 0x55,
7497 0x20, 0x37, 0x3a, 0x26, 0x22, 0x33, 0x36, 0x28,
7498 0x27, 0x2e, 0x31, 0x2f, 0x26, 0x23, 0x59, 0xa9,
7499 0x97, 0x59, 0x5b, 0x49, 0x2d, 0x60, 0x86, 0x75,
7500 0x73, 0x71, 0x73, 0x79, 0x7f, 0x7f, 0x77, 0x6f,
7501 0x92, 0x8e, 0x8b, 0x8a, 0x87, 0x7f, 0x71, 0x67,
7502 0x68, 0x6a, 0x6e, 0x72, 0x73, 0x71, 0x6f, 0x6d,
7503 0x6e, 0x61, 0x57, 0x5a, 0x65, 0x68, 0x5d, 0x50,
7504 0x60, 0x60, 0x62, 0x68, 0x6e, 0x6e, 0x68, 0x61,
7505 0x53, 0x4b, 0x3e, 0x30, 0x4f, 0x98, 0x9c, 0x57,
7506 0x18, 0x30, 0x47, 0x4c, 0x49, 0x59, 0x80, 0xa3,
7507 0x3b, 0x40, 0x58, 0x6d, 0x58, 0x2a, 0x19, 0x27,
7508 0x2a, 0x3d, 0x5a, 0x66, 0x4c, 0x25, 0x16, 0x20,
7509 0x31, 0x25, 0x1e, 0x27, 0x3b, 0x49, 0x49, 0x43,
7510 0x48, 0x34, 0x1a, 0x42, 0x9b, 0xa9, 0x5a, 0x14,
7511 0x3e, 0x70, 0x72, 0x55, 0x54, 0x4e, 0x38, 0x33,
7512 0x1f, 0x2f, 0x27, 0x1f, 0x23, 0x17, 0x1b, 0x40,
7513 0x32, 0x42, 0x33, 0x22, 0x24, 0x1b, 0x17, 0x2d,
7514 0x15, 0x42, 0x2d, 0x13, 0x33, 0x37, 0x20, 0x2a,
7515 0x2a, 0x4b, 0x4e, 0x35, 0x42, 0x69, 0x5d, 0x2b,
7516 0x2d, 0x19, 0x18, 0x2f, 0x3e, 0x33, 0x25, 0x22,
7517 0x1c, 0x1b, 0x3c, 0x36, 0x32, 0x37, 0x1d, 0x27,
7518 0x60, 0x8c, 0xb9, 0xc2, 0xae, 0x9e, 0xa9, 0xbc,
7519 0x86, 0x9a, 0xaf, 0xb4, 0xac, 0xa6, 0xaa, 0xb1,
7520 0xbe, 0xbf, 0xae, 0x95, 0xad, 0xb0, 0x90, 0xa5,
7521 0xad, 0x92, 0x90, 0xa8, 0x9a, 0xbf, 0xbe, 0x92,
7522 0x9b, 0x97, 0x85, 0x8d, 0x76, 0x96, 0x97, 0x95,
7523 0x89, 0x9c, 0xaa, 0xa4, 0xb1, 0xa3, 0x7f, 0x99,
7524 0xb0, 0x93, 0x95, 0x97, 0x91, 0x84, 0x68, 0x96,
7525 0xa0, 0x83, 0x92, 0xad, 0xb0, 0x80, 0x47, 0x4f,
7526 0x55, 0x93, 0xd4, 0xe3, 0xc4, 0xa7, 0xab, 0xbd,
7527 0xaf, 0xba, 0x77, 0x1c, 0x38, 0xa1, 0xa5, 0x52,
7528 0x6d, 0x4b, 0x60, 0x6f, 0x46, 0x39, 0x3a, 0x16,
7529 0x2a, 0x3f, 0x40, 0x32, 0x3e, 0x60, 0x68, 0x55,
7530 0x5f, 0x6d, 0x54, 0x47, 0x5c, 0x50, 0x37, 0x44,
7531 0x56, 0x79, 0x8c, 0x6c, 0x39, 0x2a, 0x4f, 0x7b,
7532 0x4b, 0x56, 0x63, 0x69, 0x60, 0x4a, 0x31, 0x20,
7533 0x33, 0x28, 0x5b, 0x2e, 0x13, 0x46, 0x48, 0x5f,
7534 0x43, 0x48, 0x24, 0x16, 0x42, 0x5c, 0x5d, 0x71,
7535 0x9b, 0x78, 0x51, 0x32, 0x24, 0x30, 0x3f, 0x3e,
7536 0x2f, 0x37, 0x3c, 0x37, 0x39, 0x52, 0x6c, 0x73,
7537 0x49, 0x42, 0x22, 0x26, 0x50, 0x4f, 0x3d, 0x4e,
7538 0x48, 0x52, 0x44, 0x1f, 0x0b, 0x17, 0x26, 0x29,
7539 0x3a, 0x83, 0x98, 0x2c, 0x12, 0xbf, 0xf3, 0x51,
7540 0xb7, 0xef, 0xff, 0xd4, 0x69, 0x23, 0x29, 0x4b,
7541 0x60, 0x32, 0x14, 0x1c, 0x23, 0x1f, 0x2f, 0x4c,
7542 0x45, 0x42, 0x5a, 0x45, 0x22, 0x26, 0x29, 0x2e,
7543 0x3f, 0x22, 0x34, 0x3b, 0x1d, 0x3b, 0x72, 0x6b,
7544 0x79, 0x73, 0x6e, 0x6f, 0x76, 0x7c, 0x7d, 0x7c,
7545 0x8b, 0x88, 0x83, 0x7f, 0x7b, 0x78, 0x78, 0x77,
7546 0x70, 0x72, 0x74, 0x73, 0x6f, 0x67, 0x5f, 0x5a,
7547 0x67, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
7548 0x64, 0x5f, 0x5b, 0x5d, 0x65, 0x6b, 0x6d, 0x6c,
7549 0x59, 0x31, 0x39, 0x81, 0x73, 0x31, 0x33, 0x37,
7550 0x20, 0x19, 0x31, 0x41, 0x36, 0x45, 0x5d, 0x56,
7551 0x36, 0x1e, 0x1b, 0x2f, 0x32, 0x1d, 0x15, 0x20,
7552 0x2c, 0x56, 0x55, 0x28, 0x21, 0x45, 0x46, 0x21,
7553 0x79, 0x8b, 0x73, 0x64, 0x78, 0x6a, 0x59, 0x74,
7554 0x25, 0x55, 0x6d, 0x59, 0x4b, 0x52, 0x46, 0x28,
7555 0x49, 0x51, 0x45, 0x7a, 0xcd, 0x9e, 0x2e, 0x0c,
7556 0x2a, 0x21, 0x2c, 0x27, 0x0e, 0x1c, 0x3f, 0x48,
7557 0x6c, 0x6d, 0x85, 0x75, 0x41, 0x3f, 0x46, 0x23,
7558 0xac, 0x80, 0x52, 0x46, 0x55, 0x5f, 0x54, 0x42,
7559 0x45, 0x1e, 0x42, 0x4f, 0x2a, 0x54, 0x69, 0x10,
7560 0x32, 0x18, 0x15, 0x31, 0x3f, 0x31, 0x28, 0x2f,
7561 0x23, 0x16, 0x20, 0x3d, 0x3f, 0x20, 0x0a, 0x0a,
7562 0x67, 0x6f, 0x84, 0xa5, 0xc3, 0xce, 0xc4, 0xb6,
7563 0xc0, 0xcf, 0xd4, 0xbe, 0x97, 0x7f, 0x82, 0x8f,
7564 0x95, 0x98, 0x8a, 0x9f, 0xa4, 0x82, 0x62, 0x39,
7565 0x5f, 0xae, 0xb0, 0xb9, 0xb7, 0x9c, 0x77, 0x8b,
7566 0xca, 0xd3, 0x98, 0x8b, 0xa0, 0xb9, 0x94, 0x97,
7567 0xae, 0x8f, 0x85, 0xb8, 0xa4, 0x78, 0x9a, 0xa0,
7568 0x8b, 0x60, 0xa9, 0xb1, 0xac, 0xbf, 0xab, 0xb9,
7569 0x70, 0x60, 0x88, 0x8e, 0x7b, 0x7b, 0x91, 0xd2,
7570 0xca, 0xb0, 0x86, 0x5e, 0x4a, 0x51, 0x6a, 0x80,
7571 0x72, 0x85, 0x6e, 0x3e, 0x44, 0x7a, 0x8b, 0x70,
7572 0x6c, 0x56, 0x4b, 0x34, 0x5f, 0xea, 0xeb, 0x45,
7573 0x12, 0x33, 0x4a, 0x42, 0x3a, 0x4b, 0x6b, 0x81,
7574 0x22, 0x4e, 0x4f, 0x55, 0x6d, 0x51, 0x69, 0xdb,
7575 0x77, 0x77, 0x52, 0x1a, 0x10, 0x32, 0x46, 0x3c,
7576 0x43, 0x39, 0x2a, 0x1d, 0x18, 0x1b, 0x23, 0x28,
7577 0x28, 0x51, 0x26, 0x26, 0x61, 0x46, 0x14, 0x1d,
7578 0x28, 0x2b, 0x54, 0x5a, 0x25, 0x19, 0x3d, 0x4c,
7579 0x23, 0x5e, 0xd8, 0xfb, 0x7d, 0x0f, 0x26, 0x65,
7580 0x85, 0x55, 0x29, 0x0c, 0x1a, 0x56, 0x59, 0x14,
7581 0x24, 0x64, 0x64, 0x29, 0x26, 0x5e, 0x7e, 0x7a,
7582 0x2b, 0x3b, 0x3b, 0x2b, 0x29, 0x39, 0x41, 0x39,
7583 0x31, 0x2c, 0x34, 0x22, 0x1f, 0x62, 0x6d, 0x17,
7584 0x92, 0x6c, 0x35, 0x13, 0x1d, 0x37, 0x38, 0x26,
7585 0x4b, 0x30, 0x34, 0x60, 0x81, 0x7b, 0x6d, 0x6b,
7586 0xa1, 0x69, 0x2a, 0x11, 0x34, 0x3b, 0x21, 0x3d,
7587 0x58, 0x74, 0x72, 0x6c, 0x5d, 0x50, 0x66, 0x7b,
7588 0x6b, 0x6b, 0x70, 0x78, 0x7e, 0x7e, 0x77, 0x6f,
7589 0x68, 0x63, 0x5c, 0x57, 0x58, 0x5f, 0x67, 0x6d,
7590 0x65, 0x68, 0x6d, 0x71, 0x71, 0x6e, 0x6b, 0x68,
7591 0x69, 0x69, 0x69, 0x68, 0x68, 0x68, 0x67, 0x67,
7592 0x63, 0x5d, 0x57, 0x57, 0x5b, 0x5f, 0x5e, 0x5c,
7593 0x3f, 0x3a, 0x4c, 0x4a, 0x2a, 0x1a, 0x2f, 0x52,
7594 0x63, 0x4c, 0x4b, 0x42, 0x26, 0x2c, 0x3f, 0x36,
7595 0x4f, 0x41, 0x2d, 0x23, 0x2a, 0x34, 0x2f, 0x23,
7596 0x56, 0x53, 0x46, 0x43, 0x63, 0x92, 0xa7, 0xa2,
7597 0x9a, 0x65, 0x3c, 0x2b, 0x1e, 0x21, 0x39, 0x4e,
7598 0x9d, 0x7f, 0x54, 0x2f, 0x1a, 0x1d, 0x32, 0x48,
7599 0x43, 0x4b, 0x46, 0x5b, 0x96, 0xaf, 0x86, 0x57,
7600 0x18, 0x13, 0x2a, 0x34, 0x23, 0x27, 0x34, 0x29,
7601 0x4c, 0x45, 0x38, 0x22, 0x19, 0x2c, 0x35, 0x25,
7602 0x30, 0x69, 0x74, 0x45, 0x39, 0x62, 0x6d, 0x4f,
7603 0x17, 0x09, 0x17, 0x2b, 0x35, 0x52, 0x5c, 0x3e,
7604 0x27, 0x36, 0x50, 0x60, 0x54, 0x37, 0x26, 0x26,
7605 0x3f, 0x27, 0x18, 0x1f, 0x29, 0x23, 0x16, 0x0e,
7606 0x95, 0x9b, 0xa5, 0xb0, 0xb3, 0xac, 0x9d, 0x91,
7607 0x8a, 0x97, 0x9b, 0x8b, 0x74, 0x73, 0x8e, 0xab,
7608 0xa4, 0xbb, 0x91, 0x6a, 0x66, 0x7c, 0xa2, 0xa4,
7609 0xc5, 0xb5, 0x8d, 0x85, 0x52, 0x60, 0x93, 0x9e,
7610 0xa2, 0x93, 0x89, 0xb3, 0xc9, 0xca, 0xac, 0xab,
7611 0xc3, 0xa6, 0x9d, 0x96, 0x91, 0xa2, 0xb5, 0xc0,
7612 0xa5, 0x89, 0xa9, 0xaf, 0xd4, 0x8a, 0x52, 0x6c,
7613 0x7d, 0x56, 0xaa, 0xb4, 0x69, 0x53, 0x45, 0x46,
7614 0x5b, 0x2e, 0x01, 0x01, 0x29, 0x51, 0x5f, 0x5b,
7615 0x92, 0x9d, 0x86, 0x43, 0x0a, 0x16, 0x61, 0xa6,
7616 0x7d, 0x38, 0x56, 0xa3, 0xb0, 0xab, 0x95, 0x59,
7617 0xc1, 0x90, 0x60, 0x52, 0x52, 0x4a, 0x3d, 0x36,
7618 0x2f, 0x55, 0x33, 0x40, 0xb9, 0xce, 0x4f, 0x00,
7619 0x26, 0x4b, 0x48, 0x1a, 0x16, 0x41, 0x50, 0x38,
7620 0x40, 0x38, 0x2d, 0x25, 0x25, 0x2d, 0x38, 0x3f,
7621 0x3a, 0x6b, 0x54, 0x64, 0x4f, 0x36, 0x4f, 0x02,
7622 0x29, 0x1f, 0x22, 0x40, 0x9d, 0xfe, 0xb5, 0x00,
7623 0x46, 0xae, 0xff, 0xff, 0x81, 0x74, 0x83, 0x3c,
7624 0x00, 0x2a, 0xa8, 0xfd, 0xbd, 0x54, 0x31, 0x36,
7625 0x39, 0x39, 0x3d, 0x2d, 0x14, 0x1b, 0x30, 0x30,
7626 0x48, 0x58, 0x5e, 0x5b, 0x66, 0x78, 0x74, 0x60,
7627 0x41, 0x25, 0x23, 0x38, 0x3a, 0x32, 0x38, 0x43,
7628 0x30, 0x16, 0x10, 0x1c, 0x13, 0x01, 0x15, 0x3f,
7629 0x49, 0x20, 0x0f, 0x33, 0x60, 0x67, 0x50, 0x3c,
7630 0x3d, 0x5c, 0x94, 0x8d, 0x5c, 0x3a, 0x28, 0x39,
7631 0x3d, 0x31, 0x19, 0x2f, 0x40, 0x54, 0x7f, 0x71,
7632 0x78, 0x74, 0x72, 0x75, 0x7d, 0x82, 0x81, 0x7f,
7633 0x79, 0x7b, 0x7f, 0x82, 0x83, 0x81, 0x7e, 0x7c,
7634 0x72, 0x74, 0x78, 0x7b, 0x7b, 0x7a, 0x78, 0x76,
7635 0x77, 0x76, 0x74, 0x72, 0x70, 0x6e, 0x6c, 0x6b,
7636 0x71, 0x6a, 0x62, 0x5f, 0x61, 0x62, 0x60, 0x5d,
7637 0x50, 0x37, 0x38, 0x31, 0x4a, 0x5a, 0x2f, 0x2a,
7638 0x16, 0x3c, 0x7a, 0x7f, 0x43, 0x2a, 0x3e, 0x45,
7639 0x49, 0x70, 0x85, 0x79, 0x73, 0x7a, 0x6a, 0x4b,
7640 0x7c, 0x5d, 0x4f, 0x67, 0x80, 0x79, 0x60, 0x4e,
7641 0x4a, 0x21, 0x43, 0x73, 0x69, 0x65, 0x62, 0x3c,
7642 0x31, 0x2c, 0x25, 0x1c, 0x18, 0x25, 0x43, 0x5f,
7643 0x28, 0x28, 0x35, 0x42, 0x53, 0x73, 0x72, 0x4a,
7644 0x6c, 0x3f, 0x3a, 0x5f, 0x82, 0x94, 0x75, 0x35,
7645 0x1d, 0x6e, 0x52, 0x1d, 0x32, 0x1b, 0x04, 0x40,
7646 0x16, 0x2e, 0x41, 0x43, 0x43, 0x44, 0x38, 0x27,
7647 0x2d, 0x1a, 0x0f, 0x36, 0x5f, 0x50, 0x4c, 0x7a,
7648 0x4c, 0x39, 0x2d, 0x47, 0x7e, 0xa0, 0x88, 0x5c,
7649 0x33, 0x2c, 0x22, 0x23, 0x35, 0x40, 0x2f, 0x13,
7650 0x75, 0x9c, 0xb8, 0x9e, 0x62, 0x3b, 0x45, 0x61,
7651 0x88, 0x82, 0x79, 0x72, 0x76, 0x8a, 0xa6, 0xba,
7652 0x97, 0x55, 0x61, 0x9a, 0xba, 0xaf, 0xa5, 0xd1,
7653 0xb5, 0xad, 0x89, 0xb4, 0xbc, 0xb9, 0xbc, 0xb6,
7654 0xa5, 0xaf, 0xc5, 0xc9, 0xbb, 0xd6, 0xcf, 0x9a,
7655 0x7c, 0x9b, 0x8e, 0x6b, 0xa2, 0xb2, 0x62, 0x53,
7656 0x94, 0x89, 0x98, 0xa4, 0xa0, 0x4d, 0xa3, 0xc1,
7657 0xaf, 0x94, 0xb1, 0x83, 0x6f, 0xb1, 0xb6, 0xad,
7658 0x61, 0x46, 0x36, 0x4d, 0x7a, 0x92, 0x83, 0x69,
7659 0x50, 0x34, 0x23, 0x43, 0x7e, 0x8d, 0x4e, 0x02,
7660 0x21, 0x53, 0x8d, 0xb3, 0xb6, 0x9f, 0x9a, 0xb0,
7661 0x30, 0x20, 0x28, 0x43, 0x43, 0x29, 0x25, 0x38,
7662 0x34, 0x38, 0x64, 0xb2, 0xcf, 0x94, 0x4e, 0x3b,
7663 0x4b, 0x60, 0x5e, 0x42, 0x33, 0x38, 0x31, 0x1c,
7664 0x10, 0x1b, 0x2b, 0x39, 0x3d, 0x37, 0x2d, 0x25,
7665 0x39, 0x38, 0x48, 0x78, 0x96, 0xe0, 0xe4, 0x36,
7666 0x0b, 0x21, 0x1f, 0x49, 0xba, 0xff, 0xf9, 0xed,
7667 0x8d, 0x5c, 0x7f, 0x75, 0x13, 0x1b, 0x4d, 0x20,
7668 0x74, 0xd8, 0xed, 0x8b, 0x24, 0x07, 0x33, 0x71,
7669 0x86, 0x3c, 0x31, 0x4d, 0x2e, 0x08, 0x1c, 0x40,
7670 0x27, 0x2f, 0x2b, 0x23, 0x2d, 0x40, 0x3b, 0x26,
7671 0x20, 0x38, 0x34, 0x19, 0x07, 0x06, 0x31, 0x71,
7672 0x70, 0x4e, 0x2e, 0x27, 0x30, 0x3a, 0x40, 0x45,
7673 0x4d, 0x57, 0x5d, 0x52, 0x3d, 0x38, 0x53, 0x73,
7674 0x46, 0x5b, 0xae, 0xbc, 0x71, 0x32, 0x1d, 0x2d,
7675 0x46, 0x35, 0x1f, 0x38, 0x3c, 0x50, 0x86, 0x6f,
7676 0x79, 0x73, 0x6d, 0x6e, 0x76, 0x7e, 0x82, 0x83,
7677 0x7b, 0x80, 0x86, 0x87, 0x81, 0x74, 0x66, 0x5c,
7678 0x63, 0x65, 0x68, 0x6c, 0x6f, 0x71, 0x73, 0x73,
7679 0x6d, 0x6b, 0x69, 0x65, 0x62, 0x5e, 0x5b, 0x5a,
7680 0x6a, 0x63, 0x5b, 0x58, 0x59, 0x5a, 0x58, 0x55,
7681 0x4d, 0x38, 0x37, 0x50, 0x79, 0x66, 0x22, 0x18,
7682 0x25, 0x18, 0x32, 0x53, 0x5c, 0x6e, 0x72, 0x56,
7683 0x67, 0x83, 0x85, 0x57, 0x27, 0x1b, 0x26, 0x30,
7684 0x67, 0x44, 0x27, 0x2a, 0x36, 0x35, 0x2e, 0x2a,
7685 0x3b, 0x20, 0x1c, 0x22, 0x29, 0x4a, 0x56, 0x34,
7686 0x1b, 0x4a, 0x60, 0x53, 0x62, 0xa2, 0xda, 0xec,
7687 0xd5, 0xae, 0x86, 0x6b, 0x51, 0x42, 0x55, 0x75,
7688 0x5e, 0x48, 0x51, 0x61, 0x63, 0x75, 0x80, 0x6d,
7689 0x49, 0x59, 0x37, 0x1d, 0x3a, 0x41, 0x2a, 0x28,
7690 0x1f, 0x20, 0x2f, 0x46, 0x4b, 0x3d, 0x32, 0x32,
7691 0x22, 0x41, 0x31, 0x11, 0x24, 0x41, 0x3e, 0x33,
7692 0x2f, 0x45, 0x45, 0x2e, 0x2b, 0x47, 0x5b, 0x59,
7693 0x29, 0x38, 0x37, 0x28, 0x2b, 0x33, 0x1e, 0x00,
7694 0xb5, 0xad, 0xa8, 0xad, 0xb5, 0xb3, 0xa6, 0x98,
7695 0x95, 0x94, 0x9c, 0xaa, 0xad, 0x91, 0x5e, 0x33,
7696 0x55, 0x53, 0x7e, 0x84, 0x8a, 0xb2, 0xa4, 0x79,
7697 0x53, 0xd5, 0xe3, 0xb8, 0x8f, 0xa4, 0xd1, 0xff,
7698 0xcb, 0xbb, 0xb9, 0xaf, 0x9f, 0x92, 0x90, 0x86,
7699 0x89, 0xda, 0xc6, 0xbb, 0xd9, 0xd2, 0xcb, 0xc2,
7700 0x6b, 0x86, 0x8c, 0x7b, 0x78, 0x3a, 0x7b, 0x54,
7701 0x33, 0x6c, 0xa8, 0xab, 0xc4, 0xab, 0x4d, 0x49,
7702 0x24, 0x56, 0xa4, 0xe5, 0xf4, 0xc7, 0x78, 0x3c,
7703 0x36, 0x2f, 0x20, 0x37, 0x8f, 0xdc, 0xc3, 0x78,
7704 0x6d, 0xb0, 0x68, 0x06, 0x19, 0x22, 0x17, 0x44,
7705 0x1b, 0x21, 0x4c, 0x86, 0x8d, 0x5c, 0x2f, 0x22,
7706 0x44, 0xa0, 0xe4, 0x9d, 0x48, 0x97, 0xff, 0xff,
7707 0xa2, 0x5b, 0x26, 0x2e, 0x45, 0x3f, 0x28, 0x1c,
7708 0x1f, 0x21, 0x25, 0x2a, 0x30, 0x35, 0x3a, 0x3c,
7709 0x3f, 0x4d, 0x5a, 0x25, 0x23, 0x47, 0x36, 0x45,
7710 0x2b, 0x43, 0x33, 0x1e, 0x29, 0x47, 0x98, 0xff,
7711 0xa5, 0x19, 0x0d, 0x3c, 0x25, 0x45, 0x7d, 0x5e,
7712 0x38, 0x52, 0x60, 0xb6, 0xff, 0xc4, 0x5c, 0x73,
7713 0xc5, 0x67, 0x2e, 0x3c, 0x48, 0x38, 0x29, 0x25,
7714 0x34, 0x39, 0x2e, 0x1c, 0x22, 0x3d, 0x49, 0x42,
7715 0x31, 0x5b, 0x55, 0x21, 0x04, 0x12, 0x41, 0x77,
7716 0x69, 0x66, 0x3a, 0x0e, 0x31, 0x78, 0x72, 0x33,
7717 0x22, 0x2d, 0x33, 0x2f, 0x2c, 0x33, 0x3d, 0x42,
7718 0x51, 0xb0, 0xbb, 0x4f, 0x2b, 0x53, 0x55, 0x56,
7719 0x71, 0x69, 0x34, 0x31, 0x4c, 0x58, 0x71, 0x78,
7720 0x74, 0x75, 0x79, 0x82, 0x8b, 0x8d, 0x87, 0x81,
7721 0x81, 0x7d, 0x77, 0x6e, 0x65, 0x5c, 0x56, 0x52,
7722 0x62, 0x63, 0x66, 0x6b, 0x71, 0x77, 0x7c, 0x7f,
7723 0x70, 0x6e, 0x6b, 0x68, 0x64, 0x61, 0x5e, 0x5d,
7724 0x69, 0x62, 0x5a, 0x58, 0x5b, 0x5d, 0x5c, 0x59,
7725 0x47, 0x46, 0x31, 0x4a, 0x5b, 0x34, 0x21, 0x29,
7726 0x22, 0x14, 0x2b, 0x48, 0x4d, 0x5a, 0x5c, 0x3e,
7727 0x4d, 0x45, 0x40, 0x3a, 0x27, 0x1b, 0x32, 0x56,
7728 0x2e, 0x31, 0x29, 0x1d, 0x22, 0x36, 0x43, 0x42,
7729 0x48, 0x6f, 0x5b, 0x38, 0x56, 0x77, 0x64, 0x47,
7730 0xbd, 0xcc, 0xb8, 0x87, 0x75, 0x84, 0x7e, 0x62,
7731 0xa6, 0xb8, 0x9d, 0x81, 0x74, 0x41, 0x2f, 0x66,
7732 0x3a, 0x13, 0x11, 0x2e, 0x46, 0x59, 0x48, 0x17,
7733 0x17, 0x20, 0x8a, 0xad, 0x5d, 0x6c, 0x96, 0x58,
7734 0x00, 0x45, 0x63, 0x39, 0x26, 0x51, 0x77, 0x76,
7735 0x40, 0x24, 0x28, 0x33, 0x1d, 0x0f, 0x19, 0x1e,
7736 0x18, 0x2c, 0x31, 0x27, 0x2f, 0x44, 0x42, 0x2b,
7737 0x56, 0x6d, 0x70, 0x56, 0x42, 0x3a, 0x21, 0x00,
7738 0x50, 0x79, 0x9b, 0x90, 0x6a, 0x5e, 0x7f, 0xa7,
7739 0xcb, 0xb1, 0x93, 0x89, 0x92, 0x9e, 0x9e, 0x99,
7740 0x66, 0x89, 0x70, 0x68, 0x7c, 0x76, 0x5f, 0x39,
7741 0x23, 0x23, 0x3e, 0x5f, 0x5b, 0x85, 0x71, 0x33,
7742 0x10, 0x6a, 0xce, 0xb4, 0x77, 0x71, 0xb4, 0xcb,
7743 0xbf, 0x87, 0x97, 0xbf, 0x83, 0x45, 0x74, 0xb5,
7744 0xbe, 0x95, 0x52, 0x17, 0x4a, 0x42, 0x3d, 0x32,
7745 0x98, 0x76, 0x58, 0x36, 0x2b, 0x35, 0x38, 0x43,
7746 0x63, 0x5c, 0x4d, 0x40, 0x4b, 0x78, 0xbb, 0xed,
7747 0xc4, 0xfa, 0xf2, 0x90, 0x36, 0x24, 0x31, 0x32,
7748 0x13, 0x5b, 0x78, 0xb3, 0xed, 0x86, 0x20, 0x54,
7749 0x41, 0x22, 0x1b, 0x40, 0x64, 0x59, 0x26, 0x00,
7750 0x26, 0x62, 0xb6, 0x95, 0x14, 0x0d, 0x91, 0xf9,
7751 0x64, 0x27, 0x12, 0x39, 0x49, 0x29, 0x1a, 0x2e,
7752 0x5a, 0x43, 0x23, 0x0e, 0x12, 0x2e, 0x55, 0x6f,
7753 0x98, 0x3a, 0x68, 0x66, 0x41, 0x3e, 0x16, 0x27,
7754 0x16, 0x21, 0x3e, 0x38, 0x1c, 0x2e, 0x3b, 0x16,
7755 0x3b, 0x21, 0x19, 0x00, 0x1b, 0xaf, 0xeb, 0x82,
7756 0x73, 0xa5, 0x6f, 0x54, 0xc6, 0xff, 0xb7, 0x76,
7757 0x31, 0x2b, 0x3e, 0x7b, 0x82, 0x26, 0x00, 0x35,
7758 0x26, 0x38, 0x37, 0x22, 0x20, 0x3f, 0x5e, 0x6a,
7759 0x47, 0x47, 0x42, 0x2e, 0x1a, 0x24, 0x3c, 0x46,
7760 0x1e, 0x1d, 0x25, 0x2d, 0x28, 0x29, 0x4c, 0x78,
7761 0x5d, 0x53, 0x3b, 0x25, 0x2c, 0x44, 0x4a, 0x3d,
7762 0x58, 0x5d, 0x6e, 0x59, 0x40, 0x37, 0x3e, 0x6b,
7763 0x55, 0x2e, 0x28, 0x2c, 0x32, 0x5c, 0x7e, 0x7c,
7764 0x73, 0x71, 0x72, 0x79, 0x82, 0x87, 0x86, 0x83,
7765 0x8e, 0x8d, 0x8a, 0x85, 0x80, 0x7a, 0x75, 0x72,
7766 0x8a, 0x87, 0x82, 0x7d, 0x7a, 0x79, 0x7a, 0x7b,
7767 0x7f, 0x7e, 0x7c, 0x7a, 0x78, 0x75, 0x74, 0x73,
7768 0x73, 0x6c, 0x65, 0x62, 0x65, 0x67, 0x65, 0x62,
7769 0x53, 0x56, 0x2b, 0x2d, 0x39, 0x32, 0x40, 0x31,
7770 0x20, 0x48, 0x8b, 0x97, 0x62, 0x50, 0x69, 0x73,
7771 0x52, 0x35, 0x30, 0x4a, 0x4f, 0x32, 0x1f, 0x24,
7772 0x1d, 0x34, 0x42, 0x3d, 0x3b, 0x44, 0x46, 0x3e,
7773 0x1b, 0x72, 0x82, 0x6e, 0x87, 0x7b, 0x3d, 0x1f,
7774 0x34, 0x2c, 0x36, 0x5d, 0x7e, 0x73, 0x40, 0x12,
7775 0x53, 0x8e, 0x6c, 0x31, 0x3b, 0x3c, 0x45, 0x81,
7776 0x3a, 0x26, 0x22, 0x1a, 0x13, 0x4c, 0xa6, 0xd3,
7777 0xa4, 0x7b, 0x4e, 0x22, 0x11, 0x36, 0x57, 0x4c,
7778 0x2d, 0x40, 0x39, 0x17, 0x12, 0x34, 0x52, 0x56,
7779 0x48, 0x35, 0x4d, 0x63, 0x47, 0x33, 0x3c, 0x3f,
7780 0x05, 0x16, 0x23, 0x26, 0x2a, 0x2f, 0x29, 0x1d,
7781 0x3a, 0x55, 0x71, 0x7d, 0x78, 0x5d, 0x2d, 0x03,
7782 0xd9, 0xae, 0x8b, 0x94, 0xb8, 0xc4, 0xa5, 0x7f,
7783 0x6b, 0x8f, 0xba, 0xd0, 0xcc, 0xbf, 0xb7, 0xb7,
7784 0xba, 0xdb, 0xca, 0xcd, 0xd1, 0xb1, 0xb3, 0xc8,
7785 0xbe, 0x6d, 0x85, 0xb7, 0x7e, 0x44, 0x13, 0x2d,
7786 0x39, 0x22, 0x3a, 0x33, 0x25, 0x1d, 0x68, 0x9a,
7787 0x46, 0x1e, 0x56, 0x5f, 0x48, 0x69, 0x5e, 0x39,
7788 0x64, 0x31, 0x45, 0x5c, 0x59, 0x4d, 0x44, 0x32,
7789 0x34, 0x35, 0x3f, 0x40, 0x3f, 0x83, 0xa2, 0x45,
7790 0x8a, 0x70, 0x45, 0x1f, 0x1c, 0x49, 0x94, 0xcd,
7791 0xc6, 0x9e, 0x62, 0x30, 0x1b, 0x23, 0x35, 0x41,
7792 0x80, 0x95, 0xa5, 0xb9, 0xb5, 0x77, 0x47, 0x54,
7793 0x43, 0x40, 0x2f, 0x19, 0x14, 0x1d, 0x1e, 0x15,
7794 0x9f, 0xe3, 0xcd, 0xa1, 0xdd, 0xff, 0xdc, 0x95,
7795 0x25, 0x23, 0x38, 0x4f, 0x39, 0x08, 0x00, 0x17,
7796 0x44, 0x39, 0x2a, 0x20, 0x21, 0x2d, 0x3e, 0x4a,
7797 0x47, 0x18, 0x78, 0x82, 0x0c, 0x4d, 0xf2, 0xff,
7798 0x98, 0xb6, 0xfb, 0xf8, 0x84, 0x23, 0x0f, 0x0f,
7799 0x1e, 0x37, 0x42, 0x1c, 0x17, 0x78, 0xbe, 0xa4,
7800 0x50, 0x4f, 0x3a, 0x10, 0x00, 0x18, 0x28, 0x17,
7801 0x34, 0x1b, 0x10, 0x94, 0xff, 0xcd, 0x2a, 0x1b,
7802 0x29, 0x4f, 0x60, 0x48, 0x34, 0x43, 0x64, 0x78,
7803 0x61, 0x50, 0x5d, 0x53, 0x3c, 0x6a, 0x99, 0x80,
7804 0x7f, 0x3a, 0x1f, 0x40, 0x47, 0x30, 0x4d, 0x8f,
7805 0x5b, 0x75, 0x6e, 0x3b, 0x18, 0x28, 0x4b, 0x5e,
7806 0x8b, 0x3b, 0x39, 0x58, 0x6a, 0x73, 0x4f, 0x28,
7807 0x39, 0x2b, 0xa1, 0xa9, 0x4b, 0x5b, 0x81, 0x7a,
7808 0x68, 0x61, 0x5c, 0x5e, 0x68, 0x72, 0x78, 0x7a,
7809 0x81, 0x83, 0x85, 0x85, 0x82, 0x7d, 0x78, 0x74,
7810 0x8d, 0x88, 0x7f, 0x75, 0x6e, 0x6b, 0x6b, 0x6b,
7811 0x74, 0x74, 0x74, 0x74, 0x73, 0x73, 0x73, 0x73,
7812 0x74, 0x6c, 0x63, 0x5e, 0x5e, 0x5d, 0x59, 0x55,
7813 0x4e, 0x50, 0x43, 0x33, 0x31, 0x49, 0x56, 0x3f,
7814 0x2f, 0x1d, 0x25, 0x29, 0x1a, 0x2c, 0x49, 0x45,
7815 0x23, 0x26, 0x2d, 0x30, 0x29, 0x1d, 0x1c, 0x23,
7816 0x3d, 0x23, 0x17, 0x26, 0x3a, 0x48, 0x5e, 0x76,
7817 0x66, 0x72, 0x6f, 0x5b, 0x40, 0x26, 0x27, 0x3d,
7818 0x48, 0x3d, 0x3e, 0x56, 0x69, 0x5e, 0x36, 0x13,
7819 0x25, 0x5a, 0x58, 0x32, 0x28, 0x24, 0x2a, 0x47,
7820 0x4e, 0x2b, 0x1f, 0x1d, 0x14, 0x24, 0x30, 0x1e,
7821 0x4d, 0x79, 0x3b, 0x00, 0x17, 0x2e, 0x4b, 0x9e,
7822 0x6f, 0x36, 0x07, 0x07, 0x18, 0x1b, 0x16, 0x15,
7823 0x6d, 0xfa, 0xff, 0xa7, 0xaa, 0xf6, 0xe1, 0x8a,
7824 0x27, 0x12, 0x21, 0x6d, 0xc1, 0xdc, 0xbb, 0x93,
7825 0x35, 0x23, 0x25, 0x48, 0x61, 0x4d, 0x17, 0x00,
7826 0x67, 0x87, 0x99, 0x7f, 0x4e, 0x3a, 0x55, 0x7a,
7827 0x6b, 0x82, 0x87, 0x5e, 0x27, 0x1a, 0x46, 0x79,
7828 0x5b, 0x18, 0x44, 0x6e, 0x6d, 0x98, 0xa7, 0x83,
7829 0x34, 0x26, 0x6e, 0x6d, 0x26, 0x3b, 0x31, 0x3e,
7830 0x6d, 0x50, 0x28, 0x1e, 0x61, 0x3b, 0x30, 0x58,
7831 0x50, 0x43, 0x30, 0x40, 0x42, 0x37, 0x3e, 0x2f,
7832 0x3c, 0x47, 0x29, 0x3b, 0x42, 0x3f, 0x53, 0x60,
7833 0x60, 0x56, 0x28, 0x35, 0x3e, 0x31, 0x3f, 0x27,
7834 0x3b, 0x37, 0x30, 0x28, 0x25, 0x28, 0x30, 0x37,
7835 0x0f, 0x03, 0x3d, 0xb4, 0xf4, 0xcb, 0x85, 0x64,
7836 0x91, 0x35, 0x16, 0x21, 0x15, 0x2a, 0x4c, 0x40,
7837 0x3c, 0x3c, 0x31, 0x33, 0x58, 0x77, 0x56, 0x1b,
7838 0x62, 0xb9, 0x64, 0x12, 0x5b, 0x57, 0x17, 0x3e,
7839 0x19, 0x0e, 0x0a, 0x17, 0x2d, 0x3a, 0x3d, 0x3c,
7840 0x2d, 0x49, 0x70, 0x8c, 0x8a, 0x6d, 0x44, 0x27,
7841 0x03, 0xaa, 0xff, 0xff, 0xb7, 0xae, 0xed, 0xa8,
7842 0x75, 0xa3, 0x73, 0x17, 0x0e, 0x2d, 0x34, 0x34,
7843 0x69, 0x43, 0x1f, 0x19, 0x3a, 0x63, 0x5a, 0x2e,
7844 0x30, 0x45, 0x85, 0x80, 0x70, 0xe1, 0xff, 0x8b,
7845 0x5d, 0xe4, 0xdf, 0xb8, 0xdc, 0x8e, 0x16, 0x21,
7846 0x3d, 0x71, 0x8e, 0x71, 0x47, 0x42, 0x58, 0x6b,
7847 0x2c, 0x39, 0x5a, 0x33, 0x0b, 0x78, 0xdd, 0xb8,
7848 0xac, 0xc1, 0xb3, 0x8d, 0x8b, 0x9a, 0x74, 0x31,
7849 0x48, 0x30, 0x15, 0x24, 0x67, 0x92, 0x61, 0x0e,
7850 0x24, 0x1f, 0x23, 0x1f, 0x2e, 0x30, 0x21, 0x3e,
7851 0x57, 0x62, 0xe5, 0xd5, 0x6e, 0x61, 0x57, 0x66,
7852 0x6e, 0x6f, 0x72, 0x7b, 0x85, 0x89, 0x87, 0x82,
7853 0x92, 0x8b, 0x80, 0x77, 0x74, 0x77, 0x7d, 0x82,
7854 0x75, 0x73, 0x71, 0x71, 0x74, 0x7b, 0x83, 0x88,
7855 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7a,
7856 0x84, 0x7b, 0x70, 0x68, 0x65, 0x62, 0x5c, 0x57,
7857 0x56, 0x34, 0x3a, 0x2d, 0x37, 0x65, 0x5a, 0x3d,
7858 0x2d, 0x21, 0x2f, 0x31, 0x18, 0x1b, 0x28, 0x1b,
7859 0x56, 0xab, 0xe8, 0xca, 0x84, 0x56, 0x45, 0x3e,
7860 0x57, 0x1d, 0x13, 0x4c, 0x6c, 0x57, 0x4f, 0x65,
7861 0x1a, 0x0e, 0x59, 0x9b, 0x66, 0x28, 0x30, 0x45,
7862 0x39, 0x60, 0x6c, 0x51, 0x45, 0x56, 0x55, 0x3e,
7863 0x32, 0x2b, 0x39, 0x40, 0x2b, 0x2b, 0x59, 0x87,
7864 0x91, 0x62, 0x3f, 0x21, 0x07, 0x19, 0x3a, 0x3c,
7865 0x1b, 0x17, 0x1d, 0x15, 0x0f, 0x39, 0x62, 0x5d,
7866 0x4e, 0x5b, 0x43, 0x14, 0x13, 0x3b, 0x44, 0x2a,
7867 0x74, 0xe4, 0xe0, 0xb5, 0xd7, 0xc4, 0x8b, 0x98,
7868 0x0f, 0x48, 0xaf, 0xff, 0xff, 0xff, 0xe9, 0xed,
7869 0xca, 0x68, 0x15, 0x15, 0x38, 0x3b, 0x21, 0x0c,
7870 0x4c, 0x32, 0x13, 0x31, 0x64, 0x51, 0x3e, 0x66,
7871 0x5f, 0x27, 0x00, 0x24, 0x71, 0x95, 0x6f, 0x36,
7872 0x1f, 0x31, 0x67, 0x9f, 0x93, 0x4a, 0x0f, 0x00,
7873 0x00, 0x3c, 0x60, 0x61, 0x80, 0xb5, 0xb1, 0x82,
7874 0x68, 0xc6, 0x4e, 0x28, 0x63, 0x40, 0x49, 0x68,
7875 0x45, 0x64, 0x4e, 0x3b, 0x52, 0x49, 0x3f, 0x67,
7876 0x7e, 0x5f, 0x3f, 0x3b, 0x52, 0x70, 0x80, 0x84,
7877 0x3a, 0x40, 0x17, 0x0e, 0x2e, 0x11, 0x00, 0x2b,
7878 0x38, 0x36, 0x31, 0x35, 0x46, 0x4e, 0x3b, 0x1f,
7879 0x03, 0x54, 0x84, 0xca, 0xbd, 0x58, 0x39, 0x33,
7880 0x17, 0x42, 0x6c, 0x6f, 0x53, 0x3d, 0x44, 0x56,
7881 0x48, 0x65, 0x2e, 0x2c, 0x8e, 0x8c, 0x55, 0x73,
7882 0x29, 0x3e, 0x3f, 0x44, 0x53, 0x42, 0x25, 0x24,
7883 0x36, 0x1d, 0x39, 0x3c, 0x17, 0x41, 0x7e, 0x6f,
7884 0x41, 0x73, 0x93, 0x6e, 0x28, 0x0f, 0x40, 0x7e,
7885 0x78, 0x49, 0x92, 0xf7, 0xd8, 0x89, 0x62, 0x4a,
7886 0x38, 0x69, 0x6a, 0x2c, 0x0b, 0x20, 0x25, 0x0b,
7887 0x5a, 0x5e, 0x64, 0x68, 0x64, 0x55, 0x40, 0x31,
7888 0x38, 0x2e, 0x73, 0xfc, 0xfb, 0xfc, 0xff, 0x9a,
7889 0xa1, 0x94, 0x5a, 0x40, 0x83, 0xc2, 0x9b, 0x51,
7890 0x30, 0x2b, 0x24, 0x1f, 0x1f, 0x24, 0x2b, 0x30,
7891 0x4e, 0x0b, 0x0d, 0x33, 0x2d, 0x2c, 0x38, 0x2b,
7892 0xb9, 0x84, 0x4b, 0x3a, 0x4a, 0x55, 0x44, 0x2b,
7893 0x31, 0x1a, 0x1f, 0x4b, 0x67, 0x55, 0x33, 0x21,
7894 0x75, 0x79, 0x5d, 0x3e, 0x37, 0x2b, 0x23, 0x2f,
7895 0x35, 0x3a, 0x35, 0x0e, 0x31, 0x6e, 0x66, 0x6b,
7896 0x5c, 0x64, 0x6f, 0x75, 0x76, 0x74, 0x72, 0x71,
7897 0x8c, 0x8d, 0x84, 0x75, 0x72, 0x77, 0x74, 0x6a,
7898 0x6a, 0x73, 0x7f, 0x8a, 0x8f, 0x8c, 0x85, 0x80,
7899 0x76, 0x7b, 0x7e, 0x78, 0x6c, 0x66, 0x69, 0x6e,
7900 0x72, 0x6d, 0x66, 0x60, 0x5e, 0x5f, 0x62, 0x65,
7901 0x47, 0x3a, 0x39, 0x39, 0x2c, 0x27, 0x36, 0x43,
7902 0x3b, 0x49, 0x35, 0x29, 0x75, 0xd9, 0xce, 0x7b,
7903 0xae, 0x8f, 0x77, 0x6c, 0x54, 0x3a, 0x41, 0x5e,
7904 0x55, 0x78, 0x9f, 0x93, 0x6a, 0x5c, 0x45, 0x14,
7905 0x60, 0x7f, 0x80, 0x77, 0x72, 0x52, 0x46, 0x6b,
7906 0x94, 0x76, 0x4f, 0x39, 0x37, 0x3e, 0x42, 0x41,
7907 0x2e, 0x41, 0x53, 0x4c, 0x2b, 0x11, 0x1b, 0x35,
7908 0x0f, 0x36, 0x41, 0x22, 0x11, 0x24, 0x2f, 0x24,
7909 0x1c, 0x39, 0x30, 0x21, 0x2a, 0x1e, 0x19, 0x39,
7910 0x68, 0x4a, 0x29, 0x24, 0x23, 0x1b, 0x49, 0x9e,
7911 0xf1, 0xef, 0xd7, 0xd4, 0xd3, 0xd1, 0xe5, 0xe4,
7912 0xaf, 0xb3, 0xd1, 0xf0, 0xe9, 0xd7, 0xf7, 0xff,
7913 0xf0, 0xcb, 0xd9, 0xb1, 0x6b, 0x28, 0x00, 0x18,
7914 0x6d, 0x96, 0xb8, 0xe5, 0xfc, 0xa8, 0x34, 0x0b,
7915 0x37, 0x3f, 0x4b, 0x5a, 0x6a, 0x79, 0x85, 0x8d,
7916 0x35, 0x42, 0x49, 0x5b, 0x93, 0xc7, 0xba, 0x89,
7917 0x7a, 0x3c, 0x19, 0x3e, 0x6d, 0x68, 0x3b, 0x16,
7918 0x33, 0x66, 0x54, 0x56, 0x5d, 0x40, 0x45, 0x53,
7919 0xae, 0x71, 0x65, 0x67, 0x50, 0x58, 0x54, 0x1c,
7920 0x2c, 0x2e, 0x37, 0x47, 0x53, 0x51, 0x40, 0x30,
7921 0x31, 0x32, 0x2f, 0x1c, 0x15, 0x31, 0x42, 0x31,
7922 0x20, 0x1f, 0x1c, 0x1a, 0x20, 0x2a, 0x2c, 0x29,
7923 0x41, 0x36, 0x5a, 0xab, 0x69, 0x03, 0x37, 0x69,
7924 0x2a, 0x3b, 0x4c, 0x50, 0x45, 0x39, 0x35, 0x36,
7925 0x3e, 0x3e, 0x29, 0x2d, 0x4e, 0x3d, 0x0a, 0x00,
7926 0x26, 0x3b, 0x38, 0x32, 0x39, 0x2c, 0x20, 0x2e,
7927 0x18, 0x40, 0x5c, 0x30, 0x0c, 0x4c, 0x7d, 0x57,
7928 0x2f, 0x33, 0x33, 0x33, 0x47, 0x80, 0xd1, 0xff,
7929 0xe4, 0x78, 0x87, 0xd9, 0xb7, 0x78, 0xa5, 0xf4,
7930 0xa3, 0x5e, 0x38, 0x4b, 0x4d, 0x2a, 0x21, 0x39,
7931 0x33, 0x58, 0x7f, 0x84, 0x63, 0x37, 0x17, 0x0b,
7932 0x13, 0x0a, 0x8b, 0xfc, 0xf8, 0xf7, 0xff, 0xff,
7933 0xff, 0xbd, 0x6e, 0x55, 0x68, 0x65, 0x41, 0x24,
7934 0x1a, 0x26, 0x37, 0x43, 0x42, 0x35, 0x23, 0x16,
7935 0x21, 0x40, 0x3b, 0x31, 0x31, 0x0a, 0x00, 0x1f,
7936 0x95, 0x6d, 0x3f, 0x2b, 0x30, 0x36, 0x2d, 0x1f,
7937 0x1c, 0x26, 0x37, 0x3b, 0x26, 0x25, 0x61, 0xa9,
7938 0x8e, 0x4b, 0x2c, 0x2b, 0x12, 0x06, 0x2a, 0x50,
7939 0x7c, 0x55, 0x5f, 0x4d, 0x3f, 0x65, 0x6d, 0x62,
7940 0x5d, 0x63, 0x6b, 0x70, 0x6f, 0x6b, 0x66, 0x63,
7941 0x7e, 0x82, 0x7d, 0x71, 0x71, 0x7a, 0x7b, 0x73,
7942 0x75, 0x75, 0x75, 0x73, 0x71, 0x6e, 0x6c, 0x6a,
7943 0x80, 0x84, 0x86, 0x81, 0x77, 0x72, 0x74, 0x79,
7944 0x83, 0x7d, 0x72, 0x67, 0x5e, 0x58, 0x56, 0x56,
7945 0x47, 0x49, 0x46, 0x30, 0x1c, 0x2d, 0x46, 0x49,
7946 0x80, 0x4d, 0x45, 0x75, 0x82, 0x54, 0x35, 0x3e,
7947 0x2c, 0x24, 0x1c, 0x34, 0x77, 0xab, 0x94, 0x5c,
7948 0x47, 0x44, 0x52, 0x72, 0x7a, 0x58, 0x42, 0x50,
7949 0x6c, 0x6c, 0x48, 0x35, 0x4a, 0x4f, 0x58, 0x7f,
7950 0x74, 0x5f, 0x46, 0x38, 0x33, 0x2c, 0x1e, 0x10,
7951 0x4e, 0x42, 0x20, 0x05, 0x19, 0x39, 0x29, 0x00,
7952 0x1f, 0x3a, 0x41, 0x31, 0x35, 0x50, 0x57, 0x48,
7953 0x69, 0x28, 0x00, 0x52, 0xff, 0xff, 0x80, 0x00,
7954 0x04, 0x0f, 0x82, 0xf0, 0xa6, 0x16, 0x2d, 0xb4,
7955 0xba, 0xbf, 0xd0, 0xc9, 0xbc, 0xb3, 0xa1, 0xa3,
7956 0x76, 0x78, 0xa6, 0xf1, 0xff, 0xf1, 0xc4, 0xb1,
7957 0xd9, 0x97, 0x98, 0x99, 0x9c, 0x7e, 0x29, 0x1c,
7958 0x76, 0x82, 0x56, 0x33, 0x4a, 0x4d, 0x36, 0x39,
7959 0x43, 0x3b, 0x33, 0x32, 0x35, 0x34, 0x2c, 0x24,
7960 0x49, 0x3b, 0x18, 0x02, 0x23, 0x55, 0x52, 0x2b,
7961 0x0a, 0x2d, 0x3a, 0x2d, 0x38, 0x59, 0x5b, 0x40,
7962 0x2d, 0x1c, 0x4c, 0x4b, 0x34, 0x4c, 0x53, 0x56,
7963 0x62, 0x45, 0x56, 0x56, 0x2d, 0x37, 0x56, 0x43,
7964 0x25, 0x1d, 0x1b, 0x28, 0x3d, 0x49, 0x45, 0x3c,
7965 0x36, 0x0c, 0x32, 0x50, 0x27, 0x2d, 0x44, 0x20,
7966 0x22, 0x1c, 0x21, 0x36, 0x48, 0x45, 0x32, 0x21,
7967 0x32, 0x16, 0x19, 0xad, 0xfc, 0xa8, 0x64, 0x38,
7968 0x78, 0x6d, 0x61, 0x5c, 0x5b, 0x54, 0x44, 0x37,
7969 0x26, 0x17, 0x28, 0x35, 0x26, 0x2a, 0x30, 0x1a,
7970 0x30, 0x42, 0x38, 0x2a, 0x2d, 0x25, 0x25, 0x3d,
7971 0x58, 0x5e, 0x50, 0x27, 0x0c, 0x20, 0x40, 0x48,
7972 0x12, 0x1b, 0x29, 0x33, 0x33, 0x27, 0x15, 0x07,
7973 0x85, 0xa0, 0xd3, 0xbe, 0x53, 0x1c, 0x48, 0x7c,
7974 0x89, 0x37, 0x06, 0x30, 0x71, 0x79, 0x51, 0x2d,
7975 0x1b, 0x0e, 0x16, 0x46, 0x7b, 0x82, 0x50, 0x19,
7976 0x31, 0x5c, 0xe1, 0xda, 0xa9, 0xa4, 0x9b, 0xf2,
7977 0xea, 0x9c, 0x43, 0x13, 0x0f, 0x24, 0x38, 0x3f,
7978 0x3b, 0x35, 0x2d, 0x25, 0x20, 0x21, 0x24, 0x26,
7979 0x58, 0x73, 0x56, 0x36, 0x45, 0x3d, 0x26, 0x32,
7980 0x2e, 0x2f, 0x34, 0x3c, 0x45, 0x4b, 0x4c, 0x4b,
7981 0x75, 0x4b, 0x2b, 0x29, 0x29, 0x23, 0x2d, 0x42,
7982 0x16, 0x1c, 0x40, 0x59, 0x4a, 0x3e, 0x3b, 0x2e,
7983 0x3d, 0x35, 0x2b, 0x1b, 0x41, 0x79, 0x75, 0x6a,
7984 0x65, 0x68, 0x6d, 0x71, 0x70, 0x6b, 0x63, 0x5d,
7985 0x6a, 0x71, 0x71, 0x68, 0x6a, 0x76, 0x7b, 0x77,
7986 0x92, 0x8b, 0x80, 0x77, 0x72, 0x74, 0x78, 0x7c,
7987 0x73, 0x76, 0x77, 0x74, 0x6e, 0x6b, 0x6c, 0x70,
7988 0x65, 0x64, 0x63, 0x62, 0x65, 0x69, 0x6d, 0x70,
7989 0x71, 0x57, 0x4e, 0x3e, 0x19, 0x21, 0x67, 0xa3,
7990 0x51, 0x40, 0x31, 0x38, 0x53, 0x6d, 0x76, 0x73,
7991 0x24, 0x67, 0x87, 0x56, 0x17, 0x16, 0x45, 0x6d,
7992 0x2a, 0x56, 0x5a, 0x5b, 0x5f, 0x2b, 0x20, 0x6b,
7993 0x53, 0x4f, 0x2e, 0x35, 0x76, 0x99, 0x97, 0xa3,
7994 0x7a, 0x7f, 0x8b, 0x97, 0x94, 0x75, 0x43, 0x1d,
7995 0x4b, 0x5c, 0x4f, 0x27, 0x18, 0x2a, 0x2f, 0x1e,
7996 0x50, 0x5c, 0x59, 0x49, 0x48, 0x55, 0x52, 0x41,
7997 0x57, 0x4d, 0x41, 0x82, 0xf7, 0xff, 0xc7, 0x94,
7998 0x8e, 0x9f, 0xd4, 0xe0, 0xc3, 0xde, 0xfb, 0xda,
7999 0xd6, 0xaa, 0xbd, 0xac, 0xc5, 0xef, 0xcd, 0xdd,
8000 0xa4, 0x9a, 0xa7, 0xc9, 0xce, 0xa6, 0x74, 0x59,
8001 0x6f, 0x40, 0x5e, 0x80, 0x9f, 0x83, 0x0c, 0x00,
8002 0x12, 0x46, 0x3a, 0x1c, 0x39, 0x4b, 0x33, 0x25,
8003 0x48, 0x32, 0x23, 0x31, 0x4f, 0x5d, 0x4e, 0x38,
8004 0x1c, 0x0d, 0x19, 0x3b, 0x44, 0x38, 0x46, 0x67,
8005 0x43, 0x73, 0x7a, 0x5d, 0x73, 0xa7, 0x94, 0x4d,
8006 0x3e, 0x27, 0x5a, 0x2c, 0x2b, 0x7a, 0x5c, 0x49,
8007 0xb4, 0xa8, 0x75, 0x7b, 0xb7, 0x94, 0x29, 0x00,
8008 0x2a, 0x41, 0x45, 0x21, 0x03, 0x2a, 0x97, 0xf9,
8009 0x8c, 0x39, 0x3b, 0x53, 0x08, 0x00, 0x62, 0xfa,
8010 0x52, 0x28, 0x10, 0x27, 0x49, 0x4d, 0x3e, 0x33,
8011 0x3b, 0xaf, 0x73, 0x75, 0xbc, 0x5e, 0x07, 0x1f,
8012 0x38, 0x32, 0x30, 0x39, 0x4c, 0x5d, 0x65, 0x66,
8013 0x4a, 0x21, 0x1c, 0x3c, 0x58, 0x64, 0x44, 0x07,
8014 0x41, 0x4c, 0x3d, 0x33, 0x3f, 0x3a, 0x32, 0x42,
8015 0x11, 0x71, 0x82, 0x3b, 0x2a, 0x60, 0x88, 0x89,
8016 0x77, 0x66, 0x45, 0x1f, 0x07, 0x0f, 0x2f, 0x4d,
8017 0xce, 0xb1, 0x6d, 0x1d, 0x0b, 0x3e, 0x5d, 0x48,
8018 0x28, 0x6b, 0x9d, 0x88, 0x53, 0x39, 0x40, 0x4d,
8019 0x50, 0x38, 0x22, 0x25, 0x3c, 0x4c, 0x4a, 0x40,
8020 0xe0, 0xff, 0xd8, 0x5c, 0x56, 0x89, 0x77, 0x90,
8021 0xa0, 0xa5, 0x95, 0x63, 0x4c, 0x70, 0x70, 0x34,
8022 0x00, 0x07, 0x20, 0x36, 0x40, 0x3c, 0x31, 0x28,
8023 0x0d, 0x41, 0x7c, 0x58, 0x05, 0x0d, 0x43, 0x46,
8024 0x28, 0x45, 0x66, 0x71, 0x64, 0x50, 0x46, 0x44,
8025 0x40, 0x28, 0x24, 0x3a, 0x4b, 0x4d, 0x5b, 0x71,
8026 0x90, 0x94, 0x71, 0x53, 0x68, 0x80, 0x7e, 0x7a,
8027 0x5d, 0x6a, 0x5a, 0x49, 0x65, 0x78, 0x71, 0x7d,
8028 0x6c, 0x6d, 0x71, 0x77, 0x7a, 0x77, 0x6e, 0x66,
8029 0x79, 0x83, 0x84, 0x7b, 0x7a, 0x85, 0x8c, 0x8b,
8030 0x83, 0x7d, 0x75, 0x6f, 0x6f, 0x74, 0x7c, 0x82,
8031 0x6c, 0x6f, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88,
8032 0x76, 0x72, 0x6c, 0x64, 0x5d, 0x56, 0x52, 0x50,
8033 0x58, 0x4c, 0x41, 0x2c, 0x32, 0x75, 0x9f, 0x86,
8034 0x33, 0x0f, 0x0c, 0x43, 0x7f, 0x91, 0x84, 0x77,
8035 0xa2, 0x7e, 0x70, 0x82, 0x83, 0x5a, 0x2c, 0x18,
8036 0xb3, 0xd7, 0x96, 0x79, 0xcb, 0xc5, 0x69, 0x52,
8037 0xe2, 0xcc, 0x87, 0x67, 0x90, 0x9b, 0x70, 0x54,
8038 0x4b, 0x50, 0x5f, 0x78, 0x8c, 0x8b, 0x76, 0x62,
8039 0x39, 0x2a, 0x19, 0x19, 0x2d, 0x3c, 0x2f, 0x16,
8040 0x31, 0x3f, 0x45, 0x39, 0x2b, 0x29, 0x2e, 0x32,
8041 0x2e, 0x53, 0x5e, 0x6d, 0x8d, 0x81, 0x64, 0x6e,
8042 0x4f, 0x51, 0x9b, 0xba, 0x91, 0xa7, 0xbc, 0x7c,
8043 0x23, 0x2e, 0x94, 0x75, 0x5d, 0x79, 0x5e, 0xa5,
8044 0x7a, 0x8d, 0x95, 0x77, 0x3b, 0x11, 0x16, 0x31,
8045 0x2d, 0x43, 0xa1, 0xc8, 0xc9, 0x9c, 0x2b, 0x02,
8046 0x63, 0x8b, 0x67, 0x2c, 0x37, 0x4a, 0x45, 0x49,
8047 0x49, 0x48, 0x46, 0x43, 0x3f, 0x3c, 0x3a, 0x39,
8048 0x85, 0x74, 0x7a, 0x8d, 0x7d, 0x51, 0x41, 0x50,
8049 0x48, 0x44, 0x49, 0x51, 0x49, 0x3e, 0x4a, 0x61,
8050 0x68, 0x5d, 0x4c, 0x00, 0x48, 0xb9, 0x58, 0x0c,
8051 0x16, 0x3e, 0x32, 0x24, 0x3a, 0x31, 0x2d, 0x5c,
8052 0x35, 0x28, 0x16, 0x12, 0x30, 0x76, 0xce, 0xff,
8053 0xff, 0x90, 0x1f, 0x5f, 0xb7, 0x80, 0x3a, 0x53,
8054 0x52, 0x31, 0x22, 0x2c, 0x25, 0x0e, 0x12, 0x2b,
8055 0x45, 0xe5, 0xb7, 0x81, 0x85, 0x1e, 0x00, 0x43,
8056 0x37, 0x39, 0x38, 0x2f, 0x26, 0x25, 0x2d, 0x36,
8057 0x2e, 0x38, 0x29, 0x21, 0x31, 0x35, 0x38, 0x4e,
8058 0x42, 0x48, 0x3a, 0x38, 0x4e, 0x48, 0x32, 0x34,
8059 0x46, 0x39, 0x44, 0x74, 0x84, 0x4f, 0x26, 0x33,
8060 0x39, 0x42, 0x4c, 0x4e, 0x47, 0x3f, 0x3a, 0x38,
8061 0x45, 0x22, 0x11, 0x3a, 0x6d, 0x66, 0x3c, 0x25,
8062 0x24, 0x69, 0xb6, 0xc2, 0x89, 0x5f, 0x81, 0xc1,
8063 0x89, 0x5d, 0x2a, 0x14, 0x21, 0x39, 0x47, 0x49,
8064 0xf0, 0xe4, 0x56, 0x53, 0xe4, 0xff, 0x8b, 0x00,
8065 0x00, 0x0d, 0x2f, 0x23, 0x12, 0x42, 0x4f, 0x0c,
8066 0x35, 0x35, 0x34, 0x34, 0x35, 0x36, 0x37, 0x37,
8067 0x0f, 0x14, 0x34, 0x38, 0x28, 0x40, 0x3a, 0x00,
8068 0x42, 0x5a, 0x6f, 0x6a, 0x53, 0x44, 0x4b, 0x58,
8069 0x86, 0x64, 0x4d, 0x50, 0x4f, 0x45, 0x4c, 0x5f,
8070 0x2b, 0x23, 0x28, 0x4e, 0x66, 0x49, 0x3f, 0x66,
8071 0x37, 0x2f, 0x2d, 0x29, 0x2e, 0x5c, 0x79, 0x57,
8072 0x69, 0x68, 0x6b, 0x75, 0x7f, 0x7f, 0x76, 0x6c,
8073 0x72, 0x7e, 0x80, 0x73, 0x6b, 0x72, 0x7a, 0x7b,
8074 0x72, 0x72, 0x71, 0x71, 0x73, 0x76, 0x79, 0x7b,
8075 0x75, 0x71, 0x6b, 0x64, 0x5f, 0x58, 0x52, 0x4e,
8076 0x5a, 0x5b, 0x5c, 0x5c, 0x5c, 0x5b, 0x5a, 0x59,
8077 0x57, 0x3e, 0x4c, 0x4b, 0x1f, 0x1b, 0x3e, 0x48,
8078 0x21, 0x00, 0x00, 0x23, 0x50, 0x56, 0x45, 0x3a,
8079 0x69, 0x5b, 0x62, 0x76, 0x6b, 0x43, 0x2b, 0x2c,
8080 0x00, 0x3d, 0x29, 0x3e, 0xbb, 0xd3, 0x88, 0x77,
8081 0xd8, 0xc2, 0x6f, 0x39, 0x61, 0x8a, 0x81, 0x76,
8082 0xa0, 0x7d, 0x51, 0x36, 0x33, 0x3e, 0x46, 0x49,
8083 0xa6, 0xb6, 0x91, 0x45, 0x27, 0x3d, 0x3b, 0x18,
8084 0x2c, 0x45, 0x61, 0x69, 0x5c, 0x59, 0x76, 0x98,
8085 0x7c, 0x87, 0x6c, 0x59, 0x66, 0x53, 0x37, 0x42,
8086 0x75, 0x1f, 0x1b, 0x22, 0x00, 0x22, 0x97, 0xc4,
8087 0x75, 0x38, 0x61, 0x50, 0x73, 0xa3, 0x52, 0x56,
8088 0x5c, 0x9a, 0xc3, 0x9f, 0x4f, 0x1c, 0x22, 0x3d,
8089 0x00, 0x27, 0x87, 0x93, 0x7f, 0x60, 0x0f, 0x00,
8090 0x46, 0x6f, 0x61, 0x40, 0x42, 0x37, 0x25, 0x34,
8091 0x40, 0x36, 0x37, 0x50, 0x76, 0x90, 0x90, 0x86,
8092 0x58, 0x53, 0x3c, 0x2e, 0x4c, 0x6f, 0x5b, 0x29,
8093 0x18, 0x46, 0x5f, 0x4a, 0x37, 0x5a, 0xa2, 0xd9,
8094 0x85, 0xfa, 0xff, 0x7a, 0x31, 0x63, 0x9a, 0xe0,
8095 0x93, 0x49, 0x2c, 0x24, 0x13, 0x32, 0x4c, 0x29,
8096 0x55, 0x4d, 0x55, 0x7f, 0xb9, 0xe1, 0xe8, 0xdf,
8097 0xd1, 0xba, 0x5a, 0x2e, 0x56, 0x42, 0x19, 0x3a,
8098 0x2b, 0x1a, 0x18, 0x19, 0x03, 0x0b, 0x6e, 0xe5,
8099 0xf9, 0xbc, 0x50, 0x4d, 0x52, 0x30, 0x47, 0x50,
8100 0x20, 0x2a, 0x33, 0x32, 0x2a, 0x26, 0x2c, 0x34,
8101 0x0d, 0x38, 0x43, 0x3c, 0x3f, 0x37, 0x41, 0x6c,
8102 0x34, 0x41, 0x37, 0x34, 0x44, 0x3b, 0x28, 0x2e,
8103 0x3d, 0x34, 0x37, 0x50, 0x73, 0x84, 0x64, 0x30,
8104 0x6a, 0x54, 0x40, 0x44, 0x56, 0x5c, 0x4c, 0x38,
8105 0x3d, 0x60, 0x64, 0x5e, 0x62, 0x4a, 0x32, 0x3f,
8106 0x51, 0x49, 0x30, 0x21, 0x39, 0x58, 0x48, 0x1e,
8107 0x55, 0x26, 0x00, 0x0d, 0x44, 0x6f, 0x70, 0x5d,
8108 0x60, 0x9a, 0x55, 0x5a, 0x60, 0x2e, 0x69, 0x97,
8109 0x97, 0x5a, 0x55, 0x51, 0x23, 0x2f, 0x4d, 0x30,
8110 0x1b, 0x3a, 0x67, 0x85, 0x83, 0x60, 0x30, 0x0e,
8111 0x26, 0x4e, 0x40, 0x29, 0x39, 0x33, 0x23, 0x36,
8112 0x46, 0x47, 0x3f, 0x2c, 0x1f, 0x2e, 0x54, 0x77,
8113 0x4b, 0x39, 0x3b, 0x52, 0x56, 0x3c, 0x28, 0x28,
8114 0x14, 0x05, 0x54, 0xc6, 0xc9, 0x74, 0x30, 0x18,
8115 0x19, 0x17, 0x38, 0x84, 0x8c, 0x5d, 0x59, 0x63,
8116 0x62, 0x5f, 0x61, 0x6d, 0x7b, 0x7e, 0x73, 0x67,
8117 0x7a, 0x88, 0x8a, 0x79, 0x6d, 0x70, 0x78, 0x7a,
8118 0x69, 0x6a, 0x6c, 0x6d, 0x6b, 0x67, 0x62, 0x5f,
8119 0x71, 0x6d, 0x69, 0x6a, 0x6e, 0x6f, 0x6c, 0x68,
8120 0x5a, 0x5c, 0x5e, 0x5e, 0x5d, 0x59, 0x55, 0x53,
8121 0x58, 0x5b, 0x67, 0x45, 0x1d, 0x46, 0x64, 0x36,
8122 0x35, 0x32, 0x2e, 0x2c, 0x34, 0x45, 0x58, 0x65,
8123 0x5c, 0x7d, 0x7c, 0x49, 0x1b, 0x18, 0x27, 0x2c,
8124 0x42, 0x81, 0xa2, 0xb8, 0xc0, 0x7e, 0x5d, 0x98,
8125 0xd1, 0xe6, 0xaf, 0x68, 0x6b, 0x7e, 0x71, 0x67,
8126 0x74, 0x62, 0x52, 0x55, 0x6a, 0x81, 0x8e, 0x90,
8127 0xb1, 0xff, 0xe0, 0x45, 0x00, 0x26, 0x4d, 0x32,
8128 0x2d, 0x32, 0x43, 0x51, 0x46, 0x37, 0x49, 0x6a,
8129 0x6b, 0x7c, 0x67, 0x57, 0x69, 0x67, 0x65, 0x84,
8130 0x87, 0x60, 0x4e, 0x42, 0x54, 0xb0, 0xe2, 0xb1,
8131 0xdb, 0x9d, 0x9b, 0x81, 0x9d, 0xcd, 0xaa, 0xb6,
8132 0x86, 0xa7, 0xae, 0x83, 0x4d, 0x2e, 0x1d, 0x10,
8133 0x93, 0x8e, 0xa6, 0x7f, 0x6b, 0x66, 0x1d, 0x00,
8134 0x55, 0x61, 0x49, 0x3b, 0x48, 0x41, 0x56, 0x99,
8135 0x83, 0x66, 0x4b, 0x4b, 0x5b, 0x5b, 0x41, 0x24,
8136 0x39, 0x34, 0x1e, 0x14, 0x38, 0x64, 0x59, 0x2b,
8137 0x25, 0x3d, 0x2d, 0x19, 0x59, 0xb5, 0xa6, 0x4f,
8138 0x96, 0x96, 0x83, 0x70, 0x44, 0x4b, 0x7e, 0x63,
8139 0x62, 0x6c, 0x9d, 0x8f, 0x36, 0x1d, 0x3e, 0x3c,
8140 0x03, 0x39, 0x6c, 0x6b, 0x47, 0x35, 0x4e, 0x72,
8141 0x0d, 0x1b, 0x18, 0x23, 0x51, 0x6a, 0x4d, 0x28,
8142 0x37, 0x49, 0x83, 0xb1, 0x84, 0x28, 0x10, 0x35,
8143 0x3e, 0x19, 0x07, 0x49, 0x57, 0x4a, 0x61, 0x35,
8144 0x39, 0x35, 0x33, 0x37, 0x38, 0x2d, 0x15, 0x00,
8145 0x3b, 0x24, 0x40, 0x76, 0x90, 0x8d, 0x56, 0x04,
8146 0x2e, 0x4b, 0x49, 0x37, 0x2e, 0x22, 0x2a, 0x4d,
8147 0x37, 0x18, 0x30, 0x43, 0x1e, 0x24, 0x6a, 0x99,
8148 0x28, 0x24, 0x27, 0x3b, 0x58, 0x6e, 0x74, 0x71,
8149 0x54, 0x68, 0x37, 0x12, 0x3e, 0x50, 0x25, 0x09,
8150 0x39, 0x4c, 0x3b, 0x15, 0x25, 0x5e, 0x69, 0x47,
8151 0x1f, 0x2e, 0x39, 0x33, 0x26, 0x2a, 0x42, 0x5a,
8152 0x32, 0x33, 0x2e, 0x4d, 0x4e, 0x21, 0x2d, 0x5e,
8153 0x50, 0x14, 0x2c, 0x49, 0x29, 0x3b, 0x4e, 0x18,
8154 0x16, 0x1f, 0x30, 0x44, 0x56, 0x64, 0x6d, 0x72,
8155 0x6b, 0x44, 0x0f, 0x33, 0x94, 0x97, 0x4e, 0x2b,
8156 0x54, 0x48, 0x32, 0x19, 0x0d, 0x15, 0x2e, 0x43,
8157 0x00, 0x23, 0x59, 0x6c, 0x42, 0x09, 0x02, 0x1e,
8158 0x25, 0x3c, 0x79, 0x8d, 0x4f, 0x20, 0x3e, 0x6f,
8159 0x83, 0xe2, 0xd4, 0x9a, 0x7f, 0x77, 0x7f, 0x72,
8160 0x6a, 0x64, 0x63, 0x6e, 0x7c, 0x7e, 0x70, 0x61,
8161 0x70, 0x80, 0x83, 0x72, 0x63, 0x66, 0x70, 0x74,
8162 0x81, 0x81, 0x82, 0x80, 0x7c, 0x76, 0x70, 0x6c,
8163 0x7c, 0x77, 0x73, 0x76, 0x7d, 0x81, 0x7d, 0x77,
8164 0x60, 0x62, 0x65, 0x66, 0x64, 0x5f, 0x59, 0x55,
8165 0x43, 0x40, 0x65, 0x5c, 0x1f, 0x24, 0x4a, 0x3c,
8166 0x1d, 0x06, 0x1a, 0x4b, 0x4a, 0x1d, 0x19, 0x3f,
8167 0x41, 0x86, 0xad, 0x87, 0x4f, 0x44, 0x5c, 0x71,
8168 0x76, 0x71, 0x78, 0x8c, 0x83, 0x4e, 0x28, 0x2c,
8169 0x34, 0x86, 0x8b, 0x4d, 0x39, 0x3e, 0x37, 0x38,
8170 0x65, 0x5f, 0x5e, 0x6d, 0x83, 0x90, 0x8f, 0x88,
8171 0x96, 0xa1, 0x8e, 0x75, 0x96, 0xd6, 0xdf, 0xba,
8172 0x8c, 0x61, 0x4b, 0x5d, 0x64, 0x4c, 0x36, 0x36,
8173 0x1a, 0x2f, 0x2f, 0x46, 0x76, 0x69, 0x36, 0x26,
8174 0x25, 0x43, 0x7d, 0xa6, 0x9f, 0x81, 0x69, 0x5a,
8175 0x92, 0x58, 0x36, 0x3f, 0x71, 0x8d, 0x67, 0x41,
8176 0x3d, 0x48, 0x43, 0x3e, 0x66, 0xab, 0xd3, 0xd3,
8177 0xc4, 0xae, 0xad, 0x78, 0x6f, 0x78, 0x2b, 0x00,
8178 0x7b, 0x75, 0x5b, 0x5a, 0x67, 0x55, 0x75, 0xd0,
8179 0xb7, 0xcf, 0xd4, 0xa5, 0x5b, 0x2d, 0x31, 0x49,
8180 0x49, 0x3a, 0x43, 0x5c, 0x55, 0x34, 0x2d, 0x42,
8181 0x0f, 0x0e, 0x29, 0x69, 0xa3, 0xa2, 0x64, 0x26,
8182 0x28, 0x42, 0xaf, 0xff, 0x9e, 0x2a, 0x5f, 0x1e,
8183 0x3a, 0x58, 0x34, 0x06, 0x12, 0x2a, 0x68, 0xcc,
8184 0xa7, 0x64, 0x1e, 0x11, 0x31, 0x46, 0x31, 0x10,
8185 0x69, 0x19, 0x15, 0x36, 0x2f, 0x48, 0x66, 0x4d,
8186 0x87, 0x4d, 0x3e, 0x65, 0x65, 0x2e, 0x13, 0x26,
8187 0x2c, 0x57, 0x25, 0x19, 0x36, 0x45, 0x4e, 0x1f,
8188 0x52, 0x43, 0x43, 0x61, 0x86, 0x8b, 0x67, 0x40,
8189 0x21, 0x02, 0x41, 0x59, 0x1d, 0x4b, 0xa8, 0x9f,
8190 0x35, 0x5f, 0x64, 0x41, 0x21, 0x13, 0x36, 0x76,
8191 0x7f, 0x4b, 0x3d, 0x28, 0x0d, 0x4c, 0x88, 0x67,
8192 0x4c, 0x68, 0x7d, 0x70, 0x4d, 0x37, 0x3f, 0x52,
8193 0x2e, 0x1f, 0x05, 0x2e, 0x71, 0x6b, 0x77, 0xcd,
8194 0x5f, 0x28, 0x1b, 0x45, 0x51, 0x2f, 0x27, 0x44,
8195 0x46, 0x3b, 0x2b, 0x20, 0x1c, 0x1d, 0x1e, 0x1f,
8196 0x21, 0x24, 0x73, 0x67, 0x51, 0x55, 0x31, 0x54,
8197 0x32, 0x10, 0x23, 0x1e, 0x0e, 0x61, 0x87, 0x28,
8198 0x4c, 0x3d, 0x28, 0x19, 0x19, 0x29, 0x3e, 0x4d,
8199 0x69, 0x31, 0x63, 0xe2, 0xff, 0xff, 0xb1, 0x41,
8200 0x19, 0x1c, 0x22, 0x2a, 0x32, 0x38, 0x3b, 0x3c,
8201 0x72, 0x4a, 0x37, 0x4b, 0x5a, 0x48, 0x2c, 0x20,
8202 0x37, 0x47, 0x5b, 0x7d, 0x91, 0x74, 0x5e, 0x70,
8203 0x9b, 0x78, 0x65, 0x9a, 0xa6, 0x8b, 0x8f, 0x74,
8204 0x79, 0x71, 0x6d, 0x76, 0x83, 0x82, 0x72, 0x61,
8205 0x77, 0x89, 0x8e, 0x7d, 0x6f, 0x72, 0x7d, 0x83,
8206 0x80, 0x7f, 0x7e, 0x7c, 0x79, 0x76, 0x74, 0x73,
8207 0x71, 0x6b, 0x67, 0x6b, 0x74, 0x78, 0x73, 0x6d,
8208 0x61, 0x65, 0x69, 0x6d, 0x6c, 0x69, 0x63, 0x60,
8209 0x5d, 0x49, 0x51, 0x3a, 0x18, 0x4a, 0x76, 0x4e,
8210 0x21, 0x49, 0x46, 0x28, 0x4e, 0xa0, 0xa7, 0x6d,
8211 0x56, 0x42, 0x3e, 0x50, 0x58, 0x5b, 0x77, 0x9d,
8212 0x61, 0x76, 0x8a, 0x72, 0x4c, 0x50, 0x51, 0x30,
8213 0x00, 0x53, 0x74, 0x41, 0x3a, 0x66, 0x99, 0xc6,
8214 0xa6, 0x84, 0x5b, 0x4c, 0x5e, 0x84, 0xa6, 0xb9,
8215 0x67, 0x4b, 0x77, 0xdf, 0xff, 0xdd, 0xd4, 0xfb,
8216 0xbc, 0x6e, 0x41, 0x65, 0x90, 0x82, 0x55, 0x39,
8217 0x70, 0x8f, 0x7e, 0x55, 0x3c, 0x16, 0x08, 0x29,
8218 0x3a, 0x56, 0x69, 0x65, 0x41, 0x0d, 0x10, 0x45,
8219 0x95, 0x88, 0x5a, 0x3c, 0x25, 0x21, 0x44, 0x52,
8220 0x81, 0x7d, 0x58, 0x2c, 0x33, 0x64, 0x7b, 0x6e,
8221 0x2d, 0x3d, 0x69, 0x54, 0x5c, 0x71, 0x2c, 0x00,
8222 0x47, 0x36, 0x3e, 0x5b, 0x58, 0x36, 0x29, 0x37,
8223 0x88, 0xfb, 0x9b, 0x00, 0x00, 0x37, 0x39, 0x51,
8224 0x00, 0x47, 0xb1, 0xf4, 0xf1, 0xd0, 0xc6, 0xd2,
8225 0xdd, 0x5b, 0x00, 0x12, 0x2f, 0x1d, 0x16, 0x2e,
8226 0x22, 0x1f, 0x46, 0x6d, 0x46, 0x04, 0x1c, 0x6f,
8227 0x60, 0x5b, 0x31, 0x05, 0x25, 0x8c, 0xe2, 0xff,
8228 0x87, 0x5f, 0x82, 0xdf, 0xe3, 0x79, 0x26, 0x1f,
8229 0x5b, 0x30, 0x18, 0x24, 0x2b, 0x23, 0x2e, 0x4a,
8230 0x71, 0x51, 0x27, 0x0e, 0x0f, 0x20, 0x31, 0x3b,
8231 0x2e, 0x43, 0x48, 0x2e, 0x24, 0x49, 0x5f, 0x4d,
8232 0x2d, 0x24, 0x49, 0x4e, 0x60, 0x73, 0x5c, 0x74,
8233 0x37, 0x39, 0x8b, 0xd3, 0xbe, 0x99, 0x74, 0x3c,
8234 0x62, 0x86, 0xac, 0x66, 0x43, 0x67, 0x5c, 0x66,
8235 0x23, 0x2a, 0x2e, 0x2b, 0x28, 0x34, 0x4f, 0x65,
8236 0x7e, 0x62, 0x57, 0x5b, 0x48, 0x2d, 0x3f, 0x6a,
8237 0x0d, 0x03, 0x12, 0x37, 0x4b, 0x40, 0x34, 0x36,
8238 0x00, 0x86, 0x9e, 0x5d, 0x53, 0x29, 0x23, 0x85,
8239 0x46, 0x48, 0x69, 0x95, 0x92, 0x5e, 0x37, 0x32,
8240 0x36, 0x1d, 0x14, 0x22, 0x29, 0x32, 0x61, 0x9b,
8241 0xd1, 0xac, 0x59, 0x7d, 0xe0, 0xff, 0xc0, 0x23,
8242 0x13, 0x4a, 0x13, 0x8d, 0xfb, 0xf2, 0xed, 0x4e,
8243 0x00, 0x20, 0x9d, 0xff, 0xee, 0xa3, 0x5d, 0x1e,
8244 0x15, 0x43, 0x76, 0x89, 0x7b, 0x6a, 0x67, 0x6e,
8245 0x8c, 0x85, 0x40, 0x29, 0x68, 0x75, 0x4d, 0x4c,
8246 0xaf, 0x44, 0x33, 0x72, 0x70, 0x4d, 0x4b, 0x4f,
8247 0x5e, 0x30, 0x6c, 0x96, 0x70, 0x6f, 0x83, 0x82,
8248 0x62, 0x64, 0x6b, 0x75, 0x7e, 0x7d, 0x74, 0x6a,
8249 0x7c, 0x82, 0x87, 0x82, 0x78, 0x74, 0x78, 0x7e,
8250 0x6d, 0x6d, 0x6d, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e,
8251 0x77, 0x7b, 0x7c, 0x76, 0x6d, 0x6b, 0x72, 0x7a,
8252 0x76, 0x72, 0x6f, 0x70, 0x72, 0x6e, 0x65, 0x5c,
8253 0x4e, 0x54, 0x3f, 0x25, 0x45, 0x83, 0x7b, 0x3c,
8254 0x38, 0x4b, 0x9a, 0xab, 0x91, 0x75, 0x63, 0x96,
8255 0x84, 0x6c, 0x69, 0x8e, 0x7a, 0x83, 0xcb, 0xbd,
8256 0x7a, 0x5b, 0xd9, 0xfc, 0x43, 0x00, 0x4e, 0x52,
8257 0x26, 0x30, 0x3f, 0x4d, 0x56, 0x57, 0x54, 0x50,
8258 0x28, 0x19, 0x3a, 0x6d, 0x5a, 0x22, 0x36, 0x80,
8259 0x97, 0x61, 0x90, 0xd6, 0x9b, 0x45, 0x5d, 0xa5,
8260 0xb2, 0x91, 0x6c, 0x5e, 0x66, 0x6e, 0x68, 0x5e,
8261 0x4e, 0x5b, 0x52, 0x37, 0x30, 0x3e, 0x3d, 0x2b,
8262 0x53, 0x59, 0x2d, 0x04, 0x19, 0x40, 0x67, 0x92,
8263 0xb0, 0x86, 0x6b, 0x4a, 0x33, 0x5e, 0x6a, 0x28,
8264 0x2e, 0x42, 0x5a, 0x66, 0x66, 0x65, 0x6b, 0x72,
8265 0x6d, 0x5b, 0x50, 0x5d, 0x6b, 0x5a, 0x25, 0x00,
8266 0x49, 0x46, 0x2e, 0x1a, 0x34, 0x62, 0x64, 0x44,
8267 0x15, 0x5c, 0x48, 0x14, 0x21, 0x32, 0x5e, 0xba,
8268 0xf1, 0xf3, 0xe2, 0xac, 0x63, 0x38, 0x44, 0x63,
8269 0x45, 0x10, 0x08, 0x35, 0x3b, 0x0a, 0x00, 0x10,
8270 0x5d, 0x23, 0x25, 0x81, 0xca, 0xb1, 0x63, 0x2f,
8271 0x21, 0x34, 0x31, 0x1e, 0x32, 0x68, 0x87, 0x83,
8272 0x4c, 0x30, 0x37, 0x59, 0x4b, 0x15, 0x08, 0x26,
8273 0x76, 0x3a, 0x2a, 0x4f, 0x4d, 0x28, 0x40, 0x85,
8274 0x34, 0x53, 0x68, 0x57, 0x30, 0x21, 0x39, 0x5a,
8275 0x6c, 0x57, 0x72, 0x6d, 0x41, 0x62, 0x77, 0x32,
8276 0x62, 0x55, 0xae, 0x8f, 0x3b, 0x78, 0x9f, 0x72,
8277 0x42, 0x75, 0xab, 0x8a, 0x43, 0x4b, 0x64, 0x46,
8278 0x39, 0x7c, 0xaa, 0xa1, 0x67, 0x3d, 0x4b, 0x5f,
8279 0x62, 0x5b, 0x49, 0x31, 0x22, 0x29, 0x43, 0x5b,
8280 0x9e, 0x89, 0x74, 0x64, 0x53, 0x53, 0x72, 0x99,
8281 0x7c, 0x94, 0x5d, 0x09, 0x2f, 0xa7, 0xba, 0x6c,
8282 0xb2, 0xed, 0xbe, 0x3b, 0x18, 0x56, 0x69, 0x40,
8283 0x6a, 0x86, 0xa6, 0xb7, 0xb3, 0x9d, 0x78, 0x59,
8284 0x83, 0x4f, 0x22, 0x37, 0x89, 0xd3, 0xe2, 0xcd,
8285 0xd1, 0xe0, 0xd6, 0xf9, 0xed, 0xb9, 0xc2, 0xb8,
8286 0xfd, 0xf9, 0x7b, 0x6c, 0xb5, 0x9b, 0x7b, 0x7f,
8287 0x92, 0x93, 0x68, 0x5b, 0x8b, 0x99, 0x85, 0x8d,
8288 0x78, 0x76, 0x79, 0x7c, 0x70, 0x66, 0x74, 0x8d,
8289 0x2e, 0x37, 0x3c, 0x5e, 0x8c, 0x84, 0x62, 0x5c,
8290 0x80, 0x61, 0x54, 0x73, 0x5f, 0x29, 0x28, 0x2b,
8291 0x27, 0x30, 0x39, 0x34, 0x44, 0x68, 0x6f, 0x5d,
8292 0x6d, 0x6b, 0x6b, 0x71, 0x79, 0x7d, 0x79, 0x74,
8293 0x75, 0x7a, 0x7e, 0x7a, 0x72, 0x6e, 0x71, 0x77,
8294 0x6b, 0x71, 0x7a, 0x80, 0x7f, 0x77, 0x6d, 0x65,
8295 0x69, 0x6b, 0x6c, 0x6c, 0x6c, 0x6f, 0x76, 0x7c,
8296 0x6f, 0x6b, 0x68, 0x68, 0x6a, 0x66, 0x5c, 0x54,
8297 0x64, 0x5f, 0x82, 0x90, 0x64, 0x48, 0x4d, 0x49,
8298 0x2d, 0x3b, 0x62, 0x4b, 0x46, 0x50, 0x18, 0x00,
8299 0x00, 0x29, 0x2f, 0x3e, 0x4a, 0x6a, 0x85, 0x43,
8300 0x3c, 0x90, 0xfb, 0xeb, 0x70, 0x31, 0x2f, 0x19,
8301 0x43, 0x42, 0x41, 0x44, 0x4b, 0x56, 0x61, 0x68,
8302 0xa0, 0x93, 0x81, 0x6b, 0x53, 0x44, 0x49, 0x57,
8303 0x74, 0x2e, 0x52, 0xa9, 0x91, 0x4a, 0x49, 0x6d,
8304 0x75, 0x5a, 0x37, 0x22, 0x23, 0x31, 0x3f, 0x47,
8305 0x35, 0x3f, 0x45, 0x48, 0x54, 0x69, 0x76, 0x76,
8306 0x84, 0x68, 0x3f, 0x40, 0x5f, 0x66, 0x80, 0xbd,
8307 0x5d, 0x3f, 0x43, 0x4b, 0x28, 0x0c, 0x1e, 0x39,
8308 0x6c, 0x83, 0x6f, 0x7e, 0xba, 0x9e, 0x4c, 0x38,
8309 0x84, 0x6b, 0x54, 0x53, 0x5b, 0x4c, 0x23, 0x00,
8310 0x45, 0x48, 0x3e, 0x3b, 0x5a, 0x72, 0x4b, 0x09,
8311 0x44, 0x3b, 0x33, 0x38, 0x3e, 0x45, 0x78, 0xc0,
8312 0xd8, 0xbf, 0x92, 0x61, 0x40, 0x34, 0x30, 0x2e,
8313 0x58, 0x24, 0x13, 0x33, 0x41, 0x35, 0x48, 0x75,
8314 0xa4, 0x86, 0x75, 0x84, 0x95, 0x89, 0x66, 0x4b,
8315 0x64, 0x76, 0x77, 0x63, 0x58, 0x57, 0x47, 0x2c,
8316 0x7f, 0x7e, 0x72, 0x54, 0x2f, 0x21, 0x38, 0x58,
8317 0xb3, 0x8f, 0xab, 0xe8, 0xc2, 0x55, 0x41, 0x81,
8318 0x3b, 0x38, 0x48, 0x77, 0xaa, 0xbc, 0xa5, 0x86,
8319 0x3e, 0x76, 0xb6, 0xb4, 0x81, 0x6b, 0x66, 0x4f,
8320 0x52, 0x94, 0xc6, 0x65, 0x36, 0x88, 0xa6, 0x9d,
8321 0x61, 0x41, 0x50, 0x61, 0x31, 0x0c, 0x28, 0x4e,
8322 0x4a, 0x5b, 0x4f, 0x80, 0x6f, 0x2c, 0x42, 0x45,
8323 0x5b, 0x51, 0x3d, 0x29, 0x21, 0x2d, 0x49, 0x5f,
8324 0x64, 0x75, 0x73, 0x56, 0x3a, 0x30, 0x2b, 0x23,
8325 0x51, 0x92, 0xb1, 0x8d, 0x6d, 0x78, 0x85, 0x7e,
8326 0x5a, 0x60, 0x7e, 0x62, 0x51, 0xbe, 0xdf, 0x62,
8327 0x58, 0x6b, 0x62, 0x40, 0x3e, 0x5b, 0x62, 0x4d,
8328 0x65, 0x78, 0x7e, 0x81, 0xa7, 0xd4, 0xcb, 0xa1,
8329 0xd0, 0xb3, 0x46, 0x38, 0x91, 0xe9, 0xe3, 0x67,
8330 0xac, 0xde, 0xf1, 0xc2, 0x9b, 0x5b, 0x4f, 0xd3,
8331 0xb1, 0x98, 0x3c, 0x12, 0x63, 0xb0, 0xb7, 0xb3,
8332 0xea, 0xa3, 0x7b, 0xa3, 0xdb, 0xe9, 0xe0, 0xdd,
8333 0x65, 0x2c, 0x22, 0x39, 0x34, 0x36, 0x5b, 0x7a,
8334 0x25, 0x25, 0x43, 0x55, 0x54, 0x59, 0x61, 0x69,
8335 0x4b, 0x53, 0x6c, 0xa3, 0xa5, 0x69, 0x65, 0x94,
8336 0x71, 0x6b, 0x66, 0x69, 0x70, 0x76, 0x77, 0x75,
8337 0x7f, 0x83, 0x85, 0x83, 0x7d, 0x7b, 0x7d, 0x81,
8338 0x82, 0x86, 0x8b, 0x8b, 0x83, 0x75, 0x66, 0x5c,
8339 0x76, 0x71, 0x6c, 0x6a, 0x6d, 0x70, 0x70, 0x6f,
8340 0x69, 0x65, 0x61, 0x61, 0x62, 0x5e, 0x54, 0x4b,
8341 0x44, 0x55, 0x5f, 0x48, 0x26, 0x2a, 0x46, 0x55,
8342 0x1b, 0x2e, 0x4d, 0x21, 0x12, 0x3d, 0x4c, 0x6b,
8343 0xa9, 0xd8, 0xbd, 0x98, 0x4d, 0x00, 0x0c, 0x2e,
8344 0x64, 0x57, 0x2e, 0x30, 0x54, 0x40, 0x37, 0x70,
8345 0x75, 0x68, 0x54, 0x42, 0x39, 0x39, 0x40, 0x45,
8346 0x6a, 0x6a, 0x3a, 0x00, 0x07, 0x53, 0x7c, 0x6f,
8347 0x69, 0x46, 0x46, 0x3c, 0x0e, 0x16, 0x5c, 0x8a,
8348 0x52, 0x4d, 0x43, 0x3c, 0x44, 0x61, 0x8b, 0xaa,
8349 0x26, 0x1c, 0x1a, 0x25, 0x32, 0x3e, 0x53, 0x67,
8350 0x41, 0x5d, 0x98, 0xf1, 0xff, 0xa7, 0x33, 0x16,
8351 0x58, 0x78, 0xb2, 0xe5, 0xc7, 0x5d, 0x2c, 0x51,
8352 0xd5, 0xf3, 0xc2, 0xc3, 0xff, 0xcd, 0x41, 0x1d,
8353 0x2d, 0x22, 0x20, 0x32, 0x49, 0x48, 0x2d, 0x10,
8354 0x2c, 0x03, 0x00, 0x1c, 0x3d, 0x43, 0x4e, 0x66,
8355 0x68, 0x44, 0x45, 0x68, 0x8c, 0xac, 0xa7, 0x7c,
8356 0x9b, 0x88, 0x6f, 0x6e, 0x8f, 0xa2, 0x7e, 0x48,
8357 0x67, 0x2d, 0x14, 0x3e, 0x6c, 0x72, 0x6c, 0x71,
8358 0x39, 0x70, 0x8a, 0x59, 0x16, 0x10, 0x4d, 0x8c,
8359 0x56, 0x57, 0x51, 0x48, 0x49, 0x55, 0x5d, 0x5c,
8360 0x37, 0x58, 0x5d, 0x3d, 0x2c, 0x3c, 0x44, 0x38,
8361 0x6d, 0x74, 0xa3, 0xc8, 0x91, 0x2b, 0x0f, 0x39,
8362 0x59, 0x4d, 0x45, 0x4b, 0x56, 0x51, 0x38, 0x20,
8363 0x5f, 0x8a, 0x57, 0x58, 0xc3, 0xbb, 0x6d, 0x7a,
8364 0xa3, 0x9b, 0x63, 0x00, 0x25, 0x82, 0x5c, 0x2d,
8365 0x33, 0x3c, 0x3d, 0x2c, 0x2c, 0x5a, 0x8e, 0xa1,
8366 0xff, 0xcd, 0x70, 0x63, 0x4f, 0x27, 0x3a, 0x48,
8367 0x2c, 0x2d, 0x2e, 0x2f, 0x32, 0x3a, 0x44, 0x4b,
8368 0x60, 0x71, 0x5d, 0x2b, 0x1e, 0x45, 0x67, 0x6b,
8369 0x7d, 0x5e, 0x6b, 0x97, 0x87, 0x49, 0x3e, 0x68,
8370 0x85, 0x40, 0x5c, 0x76, 0x49, 0x6b, 0xad, 0x95,
8371 0x69, 0x64, 0x49, 0x27, 0x26, 0x47, 0x61, 0x65,
8372 0x53, 0x87, 0xa7, 0x8f, 0x66, 0x54, 0x51, 0x4e,
8373 0x81, 0x4d, 0x00, 0x1b, 0x65, 0x7e, 0x75, 0x2a,
8374 0x58, 0x52, 0x8d, 0x8c, 0x5c, 0x67, 0x9b, 0xd7,
8375 0xff, 0xc8, 0x87, 0x6c, 0x78, 0xc1, 0xe7, 0xbe,
8376 0x6d, 0xa1, 0xe2, 0xe6, 0x93, 0x50, 0x80, 0xe2,
8377 0xdd, 0x59, 0x42, 0x8a, 0xa1, 0x99, 0x85, 0x56,
8378 0x3f, 0x20, 0x58, 0x57, 0x3c, 0x47, 0x4b, 0x73,
8379 0xd1, 0xfa, 0xf6, 0xc6, 0x8a, 0x79, 0x85, 0x6e,
8380 0x80, 0x7c, 0x79, 0x7c, 0x83, 0x87, 0x85, 0x81,
8381 0x79, 0x7a, 0x7b, 0x7a, 0x78, 0x77, 0x78, 0x79,
8382 0x81, 0x7f, 0x7b, 0x79, 0x78, 0x7a, 0x7d, 0x7f,
8383 0x84, 0x7a, 0x70, 0x6f, 0x74, 0x77, 0x73, 0x6d,
8384 0x69, 0x65, 0x60, 0x60, 0x60, 0x5b, 0x51, 0x48,
8385 0x41, 0x4c, 0x31, 0x31, 0x56, 0x42, 0x1d, 0x2d,
8386 0x5f, 0x21, 0x1b, 0x1f, 0x40, 0x68, 0x73, 0xa4,
8387 0xf4, 0xf8, 0xbe, 0xce, 0xda, 0x9c, 0xb0, 0xf4,
8388 0xff, 0xa3, 0x22, 0x13, 0x4e, 0x44, 0x45, 0x93,
8389 0x9b, 0x7d, 0x50, 0x2c, 0x23, 0x36, 0x56, 0x6e,
8390 0x1c, 0x54, 0x6a, 0x53, 0x58, 0x79, 0x6b, 0x38,
8391 0x31, 0x46, 0x4d, 0x1c, 0x00, 0x39, 0x6d, 0x52,
8392 0x16, 0x29, 0x3b, 0x3f, 0x3e, 0x4d, 0x6e, 0x8b,
8393 0x93, 0x7d, 0x71, 0x72, 0x6b, 0x5d, 0x60, 0x70,
8394 0x42, 0x77, 0xa6, 0xda, 0xff, 0xd9, 0x6f, 0x2d,
8395 0x48, 0x5c, 0x4e, 0x4c, 0x61, 0x51, 0x60, 0xac,
8396 0xeb, 0xdf, 0xa1, 0x86, 0xa6, 0x95, 0x65, 0x61,
8397 0x3e, 0x3f, 0x48, 0x5a, 0x64, 0x54, 0x2e, 0x0d,
8398 0x5f, 0x4d, 0x4c, 0x57, 0x4d, 0x3f, 0x5f, 0x94,
8399 0x75, 0x54, 0x6a, 0xa3, 0xb6, 0x9a, 0x54, 0x07,
8400 0x09, 0x15, 0x0e, 0x03, 0x21, 0x57, 0x65, 0x4f,
8401 0x51, 0x2d, 0x1f, 0x3b, 0x5a, 0x5b, 0x4c, 0x43,
8402 0x3f, 0x74, 0xa1, 0x9d, 0x7d, 0x66, 0x5e, 0x5c,
8403 0x7d, 0x68, 0x51, 0x43, 0x3d, 0x3e, 0x4c, 0x5c,
8404 0x65, 0x80, 0x7b, 0x5c, 0x5f, 0x76, 0x5b, 0x21,
8405 0x31, 0x4e, 0x60, 0x4b, 0x2b, 0x28, 0x4a, 0x6e,
8406 0x90, 0x80, 0x64, 0x45, 0x31, 0x32, 0x42, 0x51,
8407 0xaf, 0xcf, 0x94, 0x8f, 0xe9, 0xcf, 0x83, 0xa1,
8408 0xa4, 0x76, 0xb6, 0xaf, 0x81, 0xb7, 0xb7, 0x73,
8409 0x56, 0x88, 0x95, 0x6b, 0x41, 0x3f, 0x60, 0x85,
8410 0x80, 0x41, 0x33, 0x43, 0x78, 0x95, 0x65, 0x4e,
8411 0x71, 0x62, 0x4d, 0x3c, 0x35, 0x37, 0x3c, 0x3f,
8412 0x53, 0x7f, 0x90, 0x75, 0x64, 0x6a, 0x61, 0x46,
8413 0x71, 0x78, 0x79, 0x6c, 0x5a, 0x4d, 0x4a, 0x4c,
8414 0x55, 0x28, 0x3d, 0x6a, 0x46, 0x0b, 0x15, 0x40,
8415 0x6f, 0x63, 0x66, 0x78, 0x78, 0x68, 0x66, 0x73,
8416 0x5c, 0x3f, 0x2b, 0x2e, 0x31, 0x34, 0x49, 0x67,
8417 0x99, 0xc0, 0xb1, 0xa5, 0x70, 0x30, 0x30, 0x16,
8418 0x13, 0x09, 0x09, 0x16, 0x14, 0x5e, 0xca, 0xc5,
8419 0x40, 0x1d, 0x3e, 0x71, 0x6e, 0x6a, 0x66, 0x45,
8420 0x3f, 0x30, 0x3d, 0x61, 0x68, 0x44, 0x22, 0x1a,
8421 0x06, 0x00, 0x62, 0xb2, 0x78, 0x42, 0x5b, 0x74,
8422 0x9f, 0x77, 0x4d, 0x32, 0x2c, 0x2e, 0x35, 0x4b,
8423 0x1d, 0x16, 0x2b, 0x59, 0x6f, 0x74, 0x78, 0x73,
8424 0x6b, 0x6a, 0x6e, 0x75, 0x7c, 0x7a, 0x70, 0x67,
8425 0x79, 0x78, 0x77, 0x78, 0x7a, 0x7b, 0x7a, 0x79,
8426 0x84, 0x7d, 0x74, 0x6d, 0x6e, 0x74, 0x7e, 0x84,
8427 0x78, 0x70, 0x6a, 0x6d, 0x76, 0x7d, 0x7d, 0x79,
8428 0x6f, 0x6a, 0x65, 0x64, 0x64, 0x5e, 0x53, 0x4a,
8429 0x34, 0x3e, 0x2c, 0x3d, 0x74, 0x70, 0x5c, 0x7a,
8430 0x73, 0x3f, 0x45, 0x47, 0x52, 0x53, 0x34, 0x4a,
8431 0xb4, 0xd9, 0xa2, 0x9f, 0xc3, 0xb1, 0xaf, 0xb2,
8432 0xb3, 0xb7, 0xae, 0x84, 0x50, 0x38, 0x2c, 0x1a,
8433 0x1d, 0x26, 0x34, 0x44, 0x53, 0x5e, 0x64, 0x67,
8434 0x34, 0x58, 0x72, 0x69, 0x5d, 0x67, 0x7c, 0x8a,
8435 0x78, 0x5a, 0x62, 0x89, 0xbc, 0xf2, 0xd8, 0x7b,
8436 0x54, 0x71, 0x8f, 0x90, 0x76, 0x59, 0x4c, 0x4c,
8437 0x54, 0x61, 0x77, 0x87, 0x80, 0x64, 0x44, 0x31,
8438 0x3e, 0xa6, 0xca, 0xbc, 0xea, 0xff, 0xa9, 0x36,
8439 0x48, 0x63, 0x5a, 0x57, 0x62, 0x4a, 0x58, 0xa5,
8440 0x76, 0x5e, 0x85, 0xb7, 0xbc, 0xbd, 0x9f, 0x55,
8441 0x4c, 0x4a, 0x4b, 0x4f, 0x4f, 0x41, 0x28, 0x14,
8442 0xdb, 0xff, 0xff, 0xd4, 0x9a, 0x8e, 0x93, 0x90,
8443 0x21, 0x08, 0x21, 0x72, 0x90, 0x5f, 0x53, 0x86,
8444 0x67, 0xa3, 0xa8, 0x5b, 0x1d, 0x28, 0x46, 0x4c,
8445 0x70, 0x80, 0x91, 0x91, 0x7d, 0x69, 0x67, 0x70,
8446 0x92, 0x98, 0xb2, 0xd5, 0xdb, 0xb1, 0x74, 0x4a,
8447 0x4a, 0x3b, 0x3e, 0x55, 0x61, 0x62, 0x71, 0x8a,
8448 0x56, 0x5b, 0x46, 0x2d, 0x3f, 0x60, 0x4e, 0x1c,
8449 0x16, 0x3e, 0x45, 0x1d, 0x0c, 0x2b, 0x4b, 0x4f,
8450 0x49, 0x48, 0x45, 0x47, 0x5c, 0x8d, 0xce, 0xfc,
8451 0xcc, 0xcf, 0xdd, 0xb9, 0x5b, 0x2d, 0x55, 0x87,
8452 0x84, 0x5b, 0x84, 0x6c, 0x2a, 0x33, 0x52, 0x7b,
8453 0x69, 0x4c, 0x27, 0x24, 0x2d, 0x21, 0x48, 0x9f,
8454 0x28, 0x3e, 0x91, 0x9c, 0xa8, 0xa9, 0x4f, 0x2d,
8455 0x31, 0x45, 0x68, 0x8b, 0x9c, 0x91, 0x73, 0x5a,
8456 0x97, 0x99, 0x81, 0x52, 0x2f, 0x2b, 0x33, 0x35,
8457 0x21, 0x5e, 0x8b, 0x7c, 0x53, 0x37, 0x28, 0x1f,
8458 0x41, 0x40, 0x24, 0x21, 0x39, 0x2e, 0x29, 0x50,
8459 0x50, 0x36, 0x35, 0x50, 0x52, 0x3c, 0x3f, 0x5b,
8460 0xa5, 0x6f, 0x4c, 0x53, 0x57, 0x4c, 0x59, 0x78,
8461 0xaa, 0xa2, 0x30, 0x00, 0x06, 0x5f, 0xa7, 0x7a,
8462 0x44, 0x74, 0x5a, 0x4d, 0x63, 0x89, 0xc0, 0xc0,
8463 0x75, 0x70, 0x51, 0x4d, 0x58, 0x38, 0x38, 0x7a,
8464 0x58, 0x5c, 0x61, 0x6a, 0x73, 0x74, 0x66, 0x55,
8465 0x88, 0x4d, 0x47, 0x67, 0x5f, 0x40, 0x2b, 0x1c,
8466 0x1d, 0x24, 0x34, 0xe0, 0xff, 0xa0, 0x8e, 0xc3,
8467 0xff, 0xde, 0xae, 0x72, 0x70, 0x7f, 0x66, 0x6b,
8468 0x6c, 0x6e, 0x73, 0x7c, 0x81, 0x7d, 0x71, 0x66,
8469 0x81, 0x7d, 0x7b, 0x7d, 0x83, 0x85, 0x83, 0x7f,
8470 0x85, 0x83, 0x7e, 0x78, 0x72, 0x6e, 0x6a, 0x69,
8471 0x73, 0x6f, 0x6a, 0x6a, 0x6e, 0x71, 0x72, 0x72,
8472 0x74, 0x6f, 0x69, 0x68, 0x66, 0x60, 0x55, 0x4b,
8473 0x3e, 0x41, 0x4d, 0x47, 0x2e, 0x32, 0x5a, 0x7e,
8474 0x5f, 0x73, 0x92, 0x61, 0x49, 0x68, 0x6a, 0x82,
8475 0x5a, 0x6d, 0x5e, 0x87, 0x9a, 0x83, 0xb0, 0xdb,
8476 0x6d, 0x61, 0xa5, 0xc2, 0x75, 0x4f, 0x53, 0x2e,
8477 0x08, 0x23, 0x4c, 0x6f, 0x7e, 0x77, 0x64, 0x54,
8478 0x2b, 0x47, 0x70, 0x80, 0x59, 0x24, 0x1c, 0x35,
8479 0x47, 0x0d, 0x3f, 0xbc, 0xee, 0xd8, 0xb2, 0x8d,
8480 0x3b, 0x5a, 0x7f, 0x8e, 0x7c, 0x53, 0x29, 0x11,
8481 0x05, 0x47, 0x87, 0xa4, 0xb1, 0xab, 0x7d, 0x46,
8482 0x54, 0xb5, 0xb2, 0x70, 0x8d, 0xc6, 0x93, 0x32,
8483 0x33, 0x3e, 0x55, 0x6f, 0x60, 0x3d, 0x72, 0xe3,
8484 0xd2, 0x68, 0x60, 0x80, 0x7c, 0xb5, 0xd1, 0x81,
8485 0x4c, 0x46, 0x3e, 0x35, 0x2e, 0x28, 0x21, 0x1d,
8486 0x7c, 0x8b, 0x6f, 0x2c, 0x0b, 0x27, 0x4e, 0x5c,
8487 0x56, 0x60, 0x4b, 0x5d, 0x7f, 0x4d, 0x3b, 0x8e,
8488 0x7a, 0xca, 0xe3, 0x9d, 0x65, 0x70, 0x82, 0x76,
8489 0x69, 0x9f, 0xd6, 0xe2, 0xc4, 0x97, 0x6f, 0x59,
8490 0x4d, 0x4f, 0x71, 0x9a, 0x8f, 0x68, 0x71, 0x9e,
8491 0x6d, 0x50, 0x48, 0x56, 0x4e, 0x30, 0x2d, 0x44,
8492 0x3d, 0x46, 0x44, 0x3f, 0x4d, 0x67, 0x70, 0x66,
8493 0x62, 0x74, 0x7c, 0x73, 0x6b, 0x6b, 0x63, 0x56,
8494 0x65, 0x7c, 0x80, 0x53, 0x13, 0x00, 0x14, 0x3d,
8495 0x39, 0x04, 0x21, 0x3a, 0x0e, 0x30, 0x98, 0xc2,
8496 0x45, 0x39, 0x62, 0x9c, 0xe7, 0xd1, 0x5d, 0x48,
8497 0x56, 0x85, 0x7e, 0x7a, 0xb6, 0xc7, 0x84, 0x4b,
8498 0x73, 0xaf, 0xda, 0xa3, 0x4d, 0x28, 0x33, 0x55,
8499 0x8d, 0x7d, 0x6c, 0x68, 0x6e, 0x73, 0x6f, 0x68,
8500 0x57, 0x60, 0x75, 0x84, 0x79, 0x61, 0x5d, 0x6a,
8501 0x71, 0x2f, 0x12, 0x36, 0x4e, 0x33, 0x19, 0x1b,
8502 0x7a, 0xa5, 0x99, 0x7c, 0x87, 0x7b, 0x47, 0x2a,
8503 0x53, 0x3d, 0x26, 0x1d, 0x20, 0x30, 0x4b, 0x63,
8504 0x27, 0x34, 0x42, 0x40, 0x30, 0x2d, 0x48, 0x6a,
8505 0x20, 0x28, 0x30, 0x97, 0xe7, 0xf5, 0xff, 0xfb,
8506 0xb6, 0x7e, 0x67, 0x42, 0x50, 0x6b, 0x3f, 0x34,
8507 0x20, 0x44, 0x41, 0x3d, 0x4c, 0x39, 0x2f, 0x57,
8508 0x3d, 0x6f, 0x79, 0x44, 0x1c, 0x25, 0x2f, 0x24,
8509 0x4f, 0x52, 0x46, 0x4b, 0x63, 0x5f, 0x5a, 0x6e,
8510 0x8f, 0xab, 0x84, 0x5d, 0x4b, 0x6f, 0xd1, 0xf2,
8511 0xee, 0xd7, 0xde, 0x87, 0x57, 0x75, 0x70, 0x96,
8512 0x70, 0x6e, 0x6e, 0x73, 0x78, 0x77, 0x6f, 0x67,
8513 0x77, 0x71, 0x6e, 0x72, 0x7a, 0x7e, 0x7a, 0x75,
8514 0x6a, 0x70, 0x79, 0x80, 0x82, 0x7e, 0x77, 0x72,
8515 0x77, 0x77, 0x74, 0x6f, 0x69, 0x67, 0x6a, 0x6e,
8516 0x73, 0x6e, 0x69, 0x66, 0x65, 0x5e, 0x52, 0x48,
8517 0x57, 0x47, 0x78, 0xa9, 0x88, 0x5e, 0x66, 0x75,
8518 0x80, 0x6f, 0x6d, 0x41, 0x4f, 0x8f, 0x9a, 0xab,
8519 0x8d, 0x41, 0x23, 0x73, 0x6c, 0x23, 0x35, 0x4b,
8520 0x72, 0x29, 0x54, 0x95, 0x5a, 0x1d, 0x1f, 0x19,
8521 0x37, 0x2e, 0x22, 0x19, 0x18, 0x1e, 0x28, 0x2f,
8522 0x2b, 0x29, 0x35, 0x45, 0x43, 0x3e, 0x5a, 0x83,
8523 0x0b, 0x15, 0x79, 0xda, 0xc4, 0x81, 0x5e, 0x4c,
8524 0x17, 0x2c, 0x4f, 0x6f, 0x79, 0x63, 0x39, 0x18,
8525 0x44, 0x8e, 0xb1, 0x9d, 0xaa, 0xd5, 0xc4, 0x85,
8526 0x34, 0x6b, 0x6b, 0x51, 0x66, 0x76, 0x5a, 0x3d,
8527 0x38, 0x3a, 0x60, 0x70, 0x40, 0x21, 0x45, 0x76,
8528 0x8f, 0x50, 0x4f, 0x65, 0x61, 0x7b, 0x80, 0x44,
8529 0xa3, 0xaa, 0xac, 0x9c, 0x77, 0x47, 0x1b, 0x01,
8530 0x83, 0x5f, 0x4a, 0x4e, 0x43, 0x2b, 0x31, 0x4f,
8531 0x63, 0xc0, 0xac, 0x95, 0xd7, 0xb3, 0x47, 0x37,
8532 0x85, 0xa4, 0x8b, 0x44, 0x32, 0x56, 0x4f, 0x1c,
8533 0x70, 0x70, 0x69, 0x61, 0x61, 0x60, 0x4a, 0x2f,
8534 0x63, 0x64, 0x8c, 0xac, 0x7b, 0x39, 0x5e, 0xbe,
8535 0xb3, 0x87, 0x6e, 0x73, 0x65, 0x48, 0x4d, 0x6f,
8536 0xc8, 0xd2, 0xcf, 0xad, 0x77, 0x4a, 0x36, 0x35,
8537 0x64, 0x46, 0x3a, 0x4d, 0x5b, 0x5a, 0x64, 0x78,
8538 0x48, 0x34, 0x35, 0x63, 0xa2, 0xba, 0x9b, 0x71,
8539 0x60, 0x84, 0xce, 0xec, 0xa4, 0x43, 0x21, 0x2c,
8540 0x25, 0x00, 0x5e, 0x92, 0x7b, 0x83, 0x63, 0x34,
8541 0x47, 0x3e, 0x10, 0x0d, 0x3d, 0x42, 0x44, 0x77,
8542 0x6b, 0x65, 0x2e, 0x3b, 0x50, 0x59, 0x83, 0x72,
8543 0x6b, 0x64, 0x61, 0x66, 0x6d, 0x65, 0x4f, 0x3b,
8544 0x5c, 0x52, 0x62, 0x81, 0x80, 0x6b, 0x7a, 0xa2,
8545 0x81, 0x47, 0x22, 0x2a, 0x2d, 0x21, 0x31, 0x55,
8546 0x71, 0x7e, 0x68, 0x3e, 0x3a, 0x5e, 0x82, 0x91,
8547 0x46, 0x55, 0x4b, 0x30, 0x34, 0x56, 0x66, 0x5a,
8548 0xbe, 0xc9, 0xa7, 0x59, 0x23, 0x21, 0x2c, 0x2a,
8549 0xa9, 0xe3, 0xd0, 0xbb, 0xb1, 0xc5, 0xf8, 0xe2,
8550 0x97, 0x35, 0xbb, 0xa8, 0x52, 0x6b, 0x44, 0x61,
8551 0x46, 0x4f, 0x6c, 0x62, 0x3f, 0x53, 0x60, 0x34,
8552 0x4c, 0x86, 0x8e, 0x59, 0x4b, 0x6f, 0x6c, 0x3e,
8553 0x34, 0x5c, 0x3f, 0x1d, 0x39, 0x44, 0x4e, 0x83,
8554 0x4f, 0x44, 0xa3, 0x91, 0x7a, 0xe0, 0xd7, 0x7e,
8555 0x43, 0x3a, 0xb4, 0x95, 0x47, 0x69, 0x68, 0x7e,
8556 0x88, 0x82, 0x7c, 0x7c, 0x81, 0x84, 0x82, 0x7e,
8557 0x7e, 0x78, 0x74, 0x78, 0x82, 0x87, 0x82, 0x7c,
8558 0x67, 0x6e, 0x79, 0x83, 0x86, 0x83, 0x7d, 0x78,
8559 0x6f, 0x74, 0x78, 0x74, 0x6f, 0x6f, 0x78, 0x82,
8560 0x71, 0x6b, 0x66, 0x63, 0x61, 0x5a, 0x4e, 0x45,
8561 0x39, 0x3b, 0x43, 0x5a, 0x88, 0xac, 0x99, 0x69,
8562 0x68, 0x55, 0x69, 0x47, 0x18, 0x09, 0x14, 0x5d,
8563 0x66, 0x78, 0xaa, 0xda, 0x8b, 0x3e, 0x51, 0x39,
8564 0x3a, 0x69, 0xc0, 0xd0, 0x7f, 0x42, 0x29, 0x07,
8565 0x51, 0x62, 0x7a, 0x89, 0x86, 0x72, 0x56, 0x43,
8566 0x27, 0x2c, 0x3a, 0x4e, 0x5a, 0x56, 0x49, 0x40,
8567 0x5a, 0x67, 0x79, 0x5e, 0x35, 0x40, 0x3d, 0x05,
8568 0x38, 0x3c, 0x4d, 0x6a, 0x7d, 0x70, 0x45, 0x1f,
8569 0xd2, 0xff, 0xe0, 0x82, 0x7b, 0xcd, 0xe3, 0xaf,
8570 0x7b, 0x6e, 0x57, 0x57, 0x56, 0x2d, 0x21, 0x4d,
8571 0x34, 0x40, 0x64, 0x5b, 0x37, 0x4e, 0x59, 0x22,
8572 0x18, 0x35, 0x5a, 0x72, 0x77, 0x74, 0x73, 0x75,
8573 0x85, 0xad, 0xdd, 0xec, 0xc6, 0x78, 0x24, 0x00,
8574 0xb5, 0x8c, 0x5e, 0x4d, 0x5f, 0x7b, 0x8c, 0x8f,
8575 0x71, 0x8c, 0xbd, 0xf3, 0xee, 0x96, 0x4e, 0x4d,
8576 0x6c, 0x80, 0x6e, 0x3f, 0x3e, 0x6a, 0x7a, 0x65,
8577 0x4f, 0x39, 0x20, 0x36, 0x8e, 0xd6, 0xbd, 0x75,
8578 0x5f, 0x81, 0x88, 0x57, 0x1c, 0x14, 0x40, 0x6e,
8579 0x8d, 0x5b, 0x1d, 0x06, 0x29, 0x67, 0x91, 0x9e,
8580 0x88, 0xdc, 0xb4, 0x56, 0x5a, 0x6c, 0x5b, 0x61,
8581 0x8c, 0xc6, 0xa3, 0x2a, 0x0d, 0x6c, 0xaa, 0x98,
8582 0x4b, 0x86, 0x8e, 0x99, 0xc7, 0xa1, 0x4a, 0x30,
8583 0x5a, 0xbb, 0xcc, 0x9a, 0x76, 0x4e, 0x59, 0xa8,
8584 0xab, 0xb7, 0xc6, 0xb0, 0x63, 0x27, 0x46, 0x8e,
8585 0x6e, 0x8b, 0x92, 0x66, 0x27, 0x01, 0x00, 0x01,
8586 0x8b, 0x84, 0x7b, 0x5a, 0x56, 0x9b, 0xad, 0x65,
8587 0x3e, 0x66, 0x8c, 0x85, 0x78, 0x88, 0x7d, 0x49,
8588 0x66, 0xff, 0xb5, 0x5e, 0x90, 0x93, 0x89, 0x60,
8589 0x26, 0x2a, 0x45, 0x63, 0x5a, 0x34, 0x20, 0x27,
8590 0x2a, 0x37, 0x1c, 0x1c, 0x36, 0x15, 0x18, 0x6f,
8591 0x4f, 0x65, 0x5b, 0x49, 0x75, 0xb0, 0x91, 0x3e,
8592 0x09, 0x89, 0xc9, 0x89, 0x50, 0x6a, 0x8c, 0x87,
8593 0x8a, 0x84, 0x9e, 0xc4, 0xb3, 0x7d, 0x6c, 0x84,
8594 0x99, 0x63, 0x68, 0x94, 0x6e, 0x1c, 0x36, 0x9d,
8595 0x7c, 0x7c, 0x75, 0x67, 0x59, 0x55, 0x5f, 0x69,
8596 0x75, 0x7f, 0x63, 0x4c, 0x4b, 0x2d, 0x1d, 0x3e,
8597 0x4a, 0x58, 0x63, 0x62, 0x59, 0x5a, 0x69, 0x79,
8598 0x70, 0x6c, 0x69, 0x59, 0x36, 0x14, 0x0d, 0x1d,
8599 0x1d, 0x45, 0x4b, 0x4a, 0x6d, 0x83, 0x79, 0x74,
8600 0x84, 0x7c, 0x74, 0x71, 0x74, 0x75, 0x71, 0x6c,
8601 0x71, 0x74, 0x79, 0x7f, 0x83, 0x86, 0x87, 0x87,
8602 0x7c, 0x7e, 0x81, 0x82, 0x80, 0x7c, 0x78, 0x75,
8603 0x80, 0x7d, 0x79, 0x76, 0x75, 0x77, 0x7a, 0x7c,
8604 0x73, 0x69, 0x5d, 0x59, 0x5d, 0x62, 0x63, 0x62,
8605 0x4e, 0x42, 0x3a, 0x39, 0x71, 0xdc, 0xd7, 0x61,
8606 0x15, 0x12, 0x3e, 0x8c, 0xa9, 0x80, 0x50, 0x41,
8607 0x67, 0xa3, 0x90, 0x51, 0x49, 0x4e, 0x3e, 0x3b,
8608 0x3b, 0x90, 0xb1, 0x64, 0x0a, 0x03, 0x3b, 0x6a,
8609 0xb6, 0xa1, 0x98, 0x74, 0x4f, 0x70, 0x8c, 0x69,
8610 0x29, 0x67, 0x52, 0x31, 0x5b, 0x68, 0x4a, 0x4d,
8611 0x88, 0x73, 0x76, 0x51, 0x1d, 0x40, 0x56, 0x16,
8612 0x8a, 0x5d, 0x62, 0x6f, 0x48, 0x31, 0x42, 0x48,
8613 0x80, 0xbb, 0xa1, 0x63, 0x5a, 0x4f, 0x4a, 0x6e,
8614 0x4c, 0x4c, 0x53, 0x40, 0x26, 0x39, 0x41, 0x19,
8615 0x57, 0x65, 0x50, 0x2c, 0x3b, 0x6a, 0x68, 0x3e,
8616 0x51, 0x69, 0x6a, 0x4e, 0x41, 0x4f, 0x55, 0x4a,
8617 0x8e, 0xa0, 0x96, 0x7d, 0x9b, 0x6e, 0x09, 0x23,
8618 0x8c, 0x6b, 0x48, 0x41, 0x59, 0x7a, 0x90, 0x98,
8619 0x8c, 0x85, 0x7c, 0x80, 0x89, 0x8f, 0xac, 0xd8,
8620 0xfa, 0xe2, 0xac, 0x78, 0x77, 0xaa, 0xdf, 0xf7,
8621 0xbe, 0xd8, 0xc5, 0xa4, 0xcc, 0xff, 0xd5, 0x66,
8622 0x34, 0x66, 0x85, 0x96, 0xcd, 0xff, 0xd6, 0x7d,
8623 0x54, 0x6c, 0x8b, 0x84, 0x46, 0x1a, 0x48, 0x9a,
8624 0x92, 0x8e, 0x46, 0x04, 0x21, 0x5d, 0x70, 0x6f,
8625 0xfa, 0xff, 0xec, 0xca, 0xc5, 0xca, 0xa6, 0x6e,
8626 0x63, 0x68, 0x49, 0x4d, 0x78, 0x5e, 0x2b, 0x31,
8627 0x62, 0xa9, 0x82, 0x38, 0x65, 0xaa, 0xa1, 0x86,
8628 0x59, 0x8e, 0x9e, 0x6c, 0x3f, 0x4a, 0x6a, 0x79,
8629 0x37, 0x4c, 0x40, 0x40, 0xa1, 0xff, 0xe6, 0x6d,
8630 0x79, 0x5c, 0xa1, 0xf7, 0xd9, 0x90, 0x71, 0x68,
8631 0x3e, 0x4c, 0x5e, 0x73, 0x9a, 0xbc, 0x9c, 0x55,
8632 0xa9, 0xbd, 0x44, 0x44, 0x90, 0x70, 0x40, 0x09,
8633 0x0e, 0x20, 0x54, 0x7e, 0x64, 0x29, 0x21, 0x44,
8634 0x56, 0x3a, 0x28, 0x53, 0x83, 0x61, 0x23, 0x14,
8635 0x59, 0xa0, 0xc5, 0x9e, 0x70, 0x67, 0x63, 0x52,
8636 0x46, 0x4e, 0x4a, 0x30, 0x12, 0x0c, 0x25, 0x41,
8637 0x0f, 0x51, 0xb2, 0xf0, 0xe0, 0xa4, 0x7b, 0x76,
8638 0x99, 0x40, 0x19, 0x67, 0xc8, 0xd1, 0x8f, 0x52,
8639 0x21, 0x26, 0x32, 0x43, 0x54, 0x5e, 0x5f, 0x5c,
8640 0x89, 0x3d, 0x09, 0x3d, 0x7b, 0x60, 0x5d, 0xa7,
8641 0x4e, 0x40, 0x3c, 0x52, 0x6f, 0x76, 0x5e, 0x42,
8642 0x82, 0x46, 0x35, 0x25, 0x34, 0x4a, 0x48, 0x75,
8643 0x8f, 0x50, 0x35, 0x51, 0x5f, 0x5a, 0x6d, 0x91,
8644 0x7d, 0x78, 0x75, 0x78, 0x81, 0x86, 0x85, 0x82,
8645 0x6c, 0x6b, 0x6a, 0x6b, 0x70, 0x77, 0x7e, 0x83,
8646 0x7b, 0x7c, 0x7f, 0x80, 0x7e, 0x7b, 0x76, 0x73,
8647 0x6a, 0x69, 0x68, 0x69, 0x6c, 0x71, 0x77, 0x7b,
8648 0x6e, 0x63, 0x57, 0x52, 0x54, 0x58, 0x58, 0x56,
8649 0x4d, 0x4d, 0x68, 0x5f, 0x24, 0x15, 0x29, 0x24,
8650 0x6b, 0x4e, 0x41, 0x4d, 0x50, 0x54, 0x7d, 0xb3,
8651 0x18, 0x3b, 0x31, 0x17, 0x11, 0x00, 0x08, 0x3a,
8652 0x2d, 0x2d, 0x2f, 0x30, 0x2e, 0x39, 0x5c, 0x80,
8653 0x56, 0x50, 0x5f, 0x54, 0x41, 0x6c, 0x8c, 0x68,
8654 0x26, 0x3f, 0x46, 0x7e, 0xd8, 0xd0, 0x8f, 0x81,
8655 0x78, 0x75, 0x95, 0x9d, 0x8e, 0xad, 0xa9, 0x5c,
8656 0x1b, 0x3c, 0x66, 0x52, 0x23, 0x39, 0x61, 0x56,
8657 0x48, 0x38, 0x16, 0x20, 0x3f, 0x2e, 0x42, 0x9a,
8658 0x42, 0x19, 0x3d, 0x65, 0x2a, 0x05, 0x6d, 0xf3,
8659 0x7b, 0x71, 0x5c, 0x4b, 0x52, 0x62, 0x5c, 0x49,
8660 0x3a, 0x31, 0x2e, 0x37, 0x41, 0x44, 0x44, 0x46,
8661 0x97, 0xb0, 0xa3, 0x73, 0x81, 0x61, 0x07, 0x1b,
8662 0x9c, 0xa5, 0xb9, 0xcf, 0xd8, 0xc6, 0xa0, 0x81,
8663 0x76, 0x67, 0x63, 0x7f, 0xb1, 0xcd, 0xa8, 0x69,
8664 0x6f, 0x69, 0x74, 0x89, 0x8a, 0x76, 0x6c, 0x73,
8665 0x8c, 0xd7, 0xdf, 0xa5, 0xb1, 0xec, 0xc2, 0x51,
8666 0x77, 0x6b, 0x80, 0xb5, 0xd3, 0xc0, 0xa0, 0x91,
8667 0x91, 0x8e, 0xbb, 0xf1, 0xd0, 0x75, 0x56, 0x78,
8668 0x6d, 0x45, 0x2f, 0x2a, 0x38, 0x6d, 0x94, 0x89,
8669 0x5f, 0x39, 0x22, 0x27, 0x27, 0x26, 0x46, 0x74,
8670 0x90, 0x51, 0x26, 0x69, 0xca, 0xbf, 0x7c, 0x6c,
8671 0x64, 0x57, 0x2e, 0x39, 0x85, 0x9b, 0x69, 0x45,
8672 0x52, 0x71, 0x6e, 0x41, 0x29, 0x39, 0x46, 0x3f,
8673 0x48, 0x3c, 0x3f, 0x6a, 0xac, 0xcb, 0xa3, 0x68,
8674 0x43, 0x62, 0xa5, 0xb5, 0x81, 0x69, 0x60, 0x3a,
8675 0x4e, 0x4c, 0x40, 0x4c, 0x85, 0xb7, 0xb2, 0x94,
8676 0xc1, 0xad, 0x64, 0x49, 0x1c, 0x00, 0x1e, 0x41,
8677 0x4c, 0x16, 0x19, 0x62, 0x82, 0x57, 0x35, 0x3d,
8678 0x66, 0x58, 0x71, 0x87, 0x6d, 0x5b, 0x66, 0x6c,
8679 0x57, 0x57, 0x4e, 0x3e, 0x35, 0x30, 0x23, 0x12,
8680 0x38, 0x1f, 0x13, 0x27, 0x3d, 0x3b, 0x2a, 0x1d,
8681 0x3a, 0x87, 0xd4, 0xea, 0xe0, 0xd7, 0xd3, 0xcf,
8682 0x6e, 0x47, 0x56, 0x82, 0x60, 0x13, 0x20, 0x73,
8683 0x78, 0x68, 0x5c, 0x61, 0x68, 0x59, 0x32, 0x0f,
8684 0x38, 0x54, 0x58, 0x65, 0x7f, 0x70, 0x64, 0x86,
8685 0x60, 0x56, 0x43, 0x2d, 0x1f, 0x21, 0x2e, 0x3b,
8686 0x6d, 0x7e, 0x6e, 0x6d, 0xe7, 0xd8, 0x3e, 0x59,
8687 0x44, 0x16, 0x24, 0x59, 0x6d, 0x74, 0x74, 0x60,
8688 0x7b, 0x76, 0x72, 0x74, 0x79, 0x7a, 0x76, 0x70,
8689 0x64, 0x67, 0x6d, 0x74, 0x7b, 0x81, 0x85, 0x87,
8690 0x8a, 0x8b, 0x8e, 0x8f, 0x8d, 0x8a, 0x85, 0x82,
8691 0x88, 0x84, 0x7c, 0x73, 0x6d, 0x69, 0x68, 0x68,
8692 0x71, 0x65, 0x58, 0x50, 0x51, 0x52, 0x51, 0x4f,
8693 0x3f, 0x31, 0x61, 0x8c, 0x5e, 0x1f, 0x16, 0x21,
8694 0x3d, 0x38, 0x45, 0x5d, 0x58, 0x33, 0x17, 0x12,
8695 0x43, 0x81, 0xc8, 0xff, 0xf6, 0x84, 0x32, 0x44,
8696 0x4e, 0x21, 0x2b, 0x7c, 0xb2, 0x95, 0x5d, 0x42,
8697 0x57, 0x47, 0x4b, 0x44, 0x49, 0x9c, 0xe7, 0xdf,
8698 0xb8, 0x90, 0x67, 0x7a, 0x91, 0x54, 0x11, 0x14,
8699 0x45, 0x33, 0x36, 0x35, 0x38, 0x63, 0x76, 0x4f,
8700 0x3a, 0x31, 0x39, 0x32, 0x2a, 0x4c, 0x52, 0x1c,
8701 0x11, 0x48, 0x4c, 0x25, 0x10, 0x12, 0x3e, 0x83,
8702 0x4b, 0x00, 0x00, 0x47, 0x8f, 0xb7, 0xc2, 0xb1,
8703 0x4a, 0x35, 0x28, 0x2d, 0x34, 0x31, 0x2e, 0x31,
8704 0x50, 0x34, 0x34, 0x58, 0x67, 0x4e, 0x39, 0x3b,
8705 0xa9, 0xca, 0xb9, 0x69, 0x61, 0x54, 0x0c, 0x14,
8706 0x5f, 0x64, 0x6d, 0x77, 0x7a, 0x71, 0x61, 0x54,
8707 0x90, 0xbc, 0xe2, 0xc1, 0x89, 0x8b, 0x93, 0x72,
8708 0x38, 0x48, 0x8e, 0xe2, 0xe5, 0x96, 0x54, 0x46,
8709 0x00, 0x36, 0x51, 0x37, 0x43, 0x79, 0x7b, 0x4b,
8710 0xa3, 0x6b, 0x59, 0x69, 0x41, 0x00, 0x00, 0x44,
8711 0x8e, 0x8c, 0xb0, 0xd9, 0xba, 0x61, 0x2a, 0x2b,
8712 0x40, 0x36, 0x79, 0x9f, 0x6b, 0x5b, 0x6b, 0x50,
8713 0x50, 0x3c, 0x43, 0x63, 0x68, 0x58, 0x67, 0x8e,
8714 0x48, 0x40, 0x57, 0x7b, 0x62, 0x1f, 0x2c, 0x7c,
8715 0xb9, 0x8b, 0x6d, 0x84, 0x99, 0x7c, 0x5d, 0x61,
8716 0x6a, 0x44, 0x34, 0x40, 0x3c, 0x23, 0x22, 0x39,
8717 0x2d, 0x3a, 0x63, 0x85, 0x6e, 0x38, 0x30, 0x4e,
8718 0x6d, 0x3a, 0x49, 0x64, 0x38, 0x19, 0x35, 0x4d,
8719 0x2b, 0x63, 0x85, 0x97, 0xa5, 0x87, 0x56, 0x47,
8720 0x77, 0x5a, 0x6c, 0x9e, 0xac, 0xcd, 0xea, 0xba,
8721 0x39, 0x1e, 0x33, 0x62, 0x4e, 0x13, 0x20, 0x65,
8722 0x79, 0x64, 0x9d, 0xcf, 0xb9, 0xbc, 0xc0, 0x90,
8723 0x84, 0x74, 0x6d, 0x73, 0x74, 0x6a, 0x64, 0x67,
8724 0x21, 0x2c, 0x22, 0x19, 0x3d, 0x67, 0x4a, 0x09,
8725 0x8f, 0x74, 0x42, 0x2b, 0x55, 0x81, 0x58, 0x07,
8726 0x3f, 0x20, 0x2c, 0x59, 0x56, 0x30, 0x44, 0x84,
8727 0x5e, 0x43, 0x30, 0x42, 0x67, 0x75, 0x5d, 0x3d,
8728 0x35, 0x77, 0x74, 0x43, 0x3d, 0x48, 0x56, 0x74,
8729 0x56, 0x63, 0x69, 0x60, 0x56, 0x63, 0x8a, 0xad,
8730 0x76, 0x55, 0x38, 0x1f, 0x4c, 0x7d, 0x6b, 0x6d,
8731 0x57, 0x2b, 0x33, 0x65, 0x79, 0x74, 0x75, 0x77,
8732 0x65, 0x63, 0x65, 0x6e, 0x79, 0x7e, 0x7c, 0x77,
8733 0x78, 0x80, 0x89, 0x8d, 0x86, 0x76, 0x62, 0x55,
8734 0x62, 0x64, 0x66, 0x67, 0x66, 0x62, 0x5d, 0x5b,
8735 0x4e, 0x50, 0x55, 0x5d, 0x69, 0x76, 0x81, 0x88,
8736 0x7a, 0x6e, 0x5f, 0x57, 0x56, 0x56, 0x54, 0x51,
8737 0x36, 0x2f, 0x41, 0x47, 0x30, 0x3f, 0x84, 0xbc,
8738 0xb9, 0xab, 0xb6, 0xe1, 0xff, 0xe2, 0x93, 0x50,
8739 0x88, 0x98, 0xa7, 0xce, 0xe2, 0xa9, 0x83, 0xa8,
8740 0x96, 0x67, 0x52, 0x73, 0x92, 0x84, 0x60, 0x4b,
8741 0x3d, 0x4a, 0x72, 0x75, 0x58, 0x62, 0x5a, 0x1b,
8742 0x36, 0x2d, 0x24, 0x26, 0x24, 0x1c, 0x35, 0x68,
8743 0x29, 0x32, 0x44, 0x50, 0x5e, 0x8a, 0xba, 0xcb,
8744 0x84, 0x32, 0x21, 0x4f, 0x6b, 0x7e, 0x85, 0x70,
8745 0x5e, 0x96, 0x95, 0x4f, 0x26, 0x42, 0x7c, 0xa5,
8746 0x93, 0xc0, 0xf0, 0xdd, 0xa6, 0x95, 0x78, 0x36,
8747 0x46, 0x48, 0x4a, 0x50, 0x5c, 0x68, 0x6e, 0x6e,
8748 0x69, 0x54, 0x4a, 0x54, 0x5c, 0x5c, 0x69, 0x7e,
8749 0xbf, 0xe0, 0xcc, 0x68, 0x4f, 0x53, 0x1a, 0x15,
8750 0x5d, 0x69, 0x7b, 0x8c, 0x9c, 0xab, 0xba, 0xc3,
8751 0xb5, 0xbb, 0xc5, 0x8b, 0x3d, 0x54, 0x81, 0x67,
8752 0x86, 0x65, 0x66, 0x8a, 0x8f, 0x74, 0x7a, 0x9e,
8753 0xc2, 0xb9, 0xa4, 0x83, 0x5d, 0x47, 0x4b, 0x5a,
8754 0x48, 0x2f, 0x18, 0x1a, 0x31, 0x41, 0x37, 0x24,
8755 0x57, 0x53, 0x5e, 0x7f, 0x9d, 0x9d, 0x82, 0x68,
8756 0x55, 0x4a, 0x8b, 0xac, 0x6e, 0x52, 0x57, 0x34,
8757 0x22, 0x82, 0xd2, 0xc0, 0x74, 0x49, 0x60, 0x88,
8758 0x3c, 0x32, 0x51, 0x65, 0x2f, 0x11, 0x71, 0xf4,
8759 0xe1, 0xc7, 0x8f, 0x4c, 0x3b, 0x68, 0x86, 0x77,
8760 0x4c, 0x25, 0x19, 0x38, 0x4b, 0x43, 0x47, 0x5c,
8761 0x4a, 0x7c, 0x95, 0x81, 0x72, 0x77, 0x69, 0x4a,
8762 0x74, 0x51, 0x56, 0x5d, 0x4d, 0x58, 0x5d, 0x37,
8763 0x45, 0x5c, 0x46, 0x43, 0x72, 0x7b, 0x86, 0xbf,
8764 0x73, 0x36, 0x5d, 0x81, 0x75, 0xab, 0xe5, 0xe1,
8765 0x61, 0x6a, 0x97, 0xbd, 0x96, 0x51, 0x58, 0x95,
8766 0x9a, 0xb5, 0xf2, 0xd0, 0x4b, 0x1d, 0x3c, 0x36,
8767 0x18, 0x56, 0x98, 0x9f, 0x71, 0x58, 0x85, 0xc7,
8768 0xb4, 0xa5, 0x7a, 0x4e, 0x50, 0x70, 0x78, 0x66,
8769 0x00, 0x35, 0x56, 0x3f, 0x2f, 0x40, 0x44, 0x32,
8770 0x4f, 0xd8, 0xff, 0xbb, 0x6f, 0x8a, 0xb6, 0xb6,
8771 0xd2, 0x9d, 0x64, 0x4f, 0x5b, 0x60, 0x4b, 0x30,
8772 0x33, 0x2e, 0x1f, 0x38, 0x5f, 0x4e, 0x46, 0x76,
8773 0x56, 0x5c, 0x74, 0x9c, 0xbc, 0xb8, 0x93, 0x6e,
8774 0x3e, 0x71, 0x5f, 0xa0, 0xff, 0xd5, 0x78, 0x52,
8775 0x00, 0x0c, 0x10, 0x25, 0x5d, 0x80, 0x77, 0x6a,
8776 0x86, 0x81, 0x7e, 0x7f, 0x7f, 0x79, 0x6d, 0x62,
8777 0x5d, 0x67, 0x75, 0x7f, 0x7f, 0x75, 0x66, 0x5c,
8778 0x6c, 0x6e, 0x70, 0x71, 0x6f, 0x6c, 0x67, 0x64,
8779 0x5e, 0x5d, 0x5d, 0x5e, 0x62, 0x68, 0x6f, 0x73,
8780 0x7b, 0x6f, 0x61, 0x58, 0x57, 0x58, 0x56, 0x53,
8781 0x4f, 0x42, 0x4a, 0x70, 0xa5, 0xc6, 0xaa, 0x70,
8782 0x5f, 0x64, 0x7a, 0xa7, 0xd6, 0xde, 0xb0, 0x7b,
8783 0x99, 0xac, 0xab, 0xbd, 0xd2, 0x97, 0x3f, 0x23,
8784 0x3e, 0x5a, 0x5c, 0x36, 0x19, 0x1f, 0x2a, 0x28,
8785 0x36, 0x36, 0x4d, 0x44, 0x29, 0x44, 0x50, 0x20,
8786 0x3f, 0x52, 0x54, 0x2b, 0x04, 0x0f, 0x27, 0x27,
8787 0xca, 0xdb, 0xd4, 0xaa, 0x71, 0x43, 0x46, 0x6a,
8788 0x4c, 0x14, 0x10, 0x22, 0x15, 0x22, 0x54, 0x6d,
8789 0x29, 0x20, 0x5c, 0xc6, 0xfb, 0xeb, 0xca, 0xb7,
8790 0xa1, 0x9d, 0xca, 0xdf, 0x9f, 0x5a, 0x43, 0x38,
8791 0x24, 0x48, 0x53, 0x3e, 0x44, 0x66, 0x6d, 0x55,
8792 0x4c, 0x54, 0x44, 0x23, 0x25, 0x62, 0xb2, 0xe4,
8793 0xcd, 0xdc, 0xc9, 0x6a, 0x4d, 0x5b, 0x2b, 0x1a,
8794 0x57, 0x70, 0x8f, 0xa0, 0xa3, 0xa2, 0xa5, 0xab,
8795 0x3e, 0x07, 0x22, 0x5c, 0x86, 0xdc, 0xff, 0xb6,
8796 0xd7, 0x9d, 0x61, 0x46, 0x4d, 0x74, 0xba, 0xf9,
8797 0xdc, 0xa5, 0x79, 0x63, 0x39, 0x0a, 0x10, 0x3b,
8798 0x8b, 0x68, 0x4c, 0x55, 0x70, 0x7b, 0x6d, 0x5b,
8799 0x9d, 0x7b, 0x52, 0x47, 0x5f, 0x6c, 0x49, 0x19,
8800 0x24, 0x08, 0x05, 0x11, 0x26, 0x58, 0x77, 0x64,
8801 0x3e, 0x8d, 0xa2, 0x52, 0x08, 0x0e, 0x32, 0x40,
8802 0x6b, 0x28, 0x20, 0x38, 0x26, 0x21, 0x46, 0x61,
8803 0xae, 0x61, 0x38, 0x37, 0x38, 0x51, 0x66, 0x56,
8804 0x48, 0x54, 0x47, 0x2b, 0x33, 0x54, 0x57, 0x3d,
8805 0x40, 0x44, 0x4d, 0x4f, 0x3b, 0x22, 0x1d, 0x29,
8806 0x58, 0x72, 0x74, 0x41, 0x3f, 0x96, 0x98, 0x27,
8807 0x45, 0x4d, 0x2c, 0x51, 0xb8, 0xbb, 0x98, 0xc0,
8808 0x9d, 0x23, 0x4e, 0x9d, 0xa7, 0x97, 0x64, 0x50,
8809 0x82, 0x8f, 0xbb, 0xef, 0xf8, 0xce, 0x9d, 0x86,
8810 0x6e, 0x58, 0x4e, 0x44, 0x45, 0x64, 0x67, 0x3c,
8811 0x77, 0x6e, 0x5b, 0x4d, 0x56, 0x71, 0x84, 0x89,
8812 0x99, 0x60, 0x49, 0x5e, 0x53, 0x2e, 0x3d, 0x75,
8813 0x41, 0xa5, 0xe8, 0xb4, 0x47, 0x15, 0x36, 0x69,
8814 0x85, 0x7d, 0x40, 0x00, 0x10, 0x5f, 0x71, 0x46,
8815 0xe1, 0xb2, 0x79, 0x5c, 0x60, 0x6c, 0x6d, 0x67,
8816 0x02, 0x42, 0x5b, 0x5a, 0x67, 0x59, 0x46, 0x58,
8817 0x5a, 0x68, 0x7d, 0x8c, 0x88, 0x6c, 0x44, 0x26,
8818 0x7e, 0x78, 0x8a, 0xba, 0x61, 0x16, 0x5d, 0x61,
8819 0x7a, 0xec, 0xfd, 0xa5, 0x73, 0x76, 0x79, 0x78,
8820 0x70, 0x6f, 0x72, 0x79, 0x7f, 0x7d, 0x73, 0x69,
8821 0x77, 0x77, 0x77, 0x76, 0x74, 0x72, 0x70, 0x6f,
8822 0x76, 0x78, 0x7a, 0x7c, 0x7a, 0x76, 0x72, 0x6f,
8823 0x70, 0x6e, 0x6a, 0x68, 0x68, 0x6a, 0x6d, 0x70,
8824 0x74, 0x69, 0x5b, 0x54, 0x54, 0x56, 0x55, 0x53,
8825 0x3b, 0x3b, 0x54, 0x88, 0xb7, 0xb0, 0x69, 0x1e,
8826 0x2c, 0x6f, 0xb1, 0xc5, 0xc1, 0xb8, 0xa5, 0x8f,
8827 0x7a, 0x7b, 0x5d, 0x5a, 0x79, 0x67, 0x41, 0x44,
8828 0x6c, 0xbf, 0xe3, 0xa4, 0x57, 0x40, 0x43, 0x3e,
8829 0x59, 0x72, 0xab, 0xb7, 0x91, 0x83, 0x5e, 0x0b,
8830 0x68, 0x5a, 0x46, 0x1a, 0x04, 0x38, 0x57, 0x2e,
8831 0x25, 0x76, 0xc2, 0xe8, 0xcf, 0x66, 0x15, 0x19,
8832 0xe1, 0xbd, 0x91, 0x4a, 0x0b, 0x12, 0x19, 0x00,
8833 0x46, 0x14, 0x0b, 0x25, 0x3b, 0x60, 0x7b, 0x6e,
8834 0x9b, 0x86, 0xae, 0xcb, 0x82, 0x32, 0x30, 0x4c,
8835 0x3d, 0x6e, 0x78, 0x50, 0x45, 0x62, 0x61, 0x3e,
8836 0x2d, 0x59, 0x67, 0x47, 0x3c, 0x6e, 0xb0, 0xd4,
8837 0xc5, 0xb6, 0xa7, 0x65, 0x53, 0x62, 0x31, 0x17,
8838 0x80, 0x84, 0x7e, 0x69, 0x53, 0x51, 0x66, 0x7c,
8839 0x9d, 0x67, 0x95, 0xb9, 0x86, 0x9c, 0xd8, 0xc4,
8840 0x68, 0x65, 0x4e, 0x33, 0x3c, 0x65, 0x88, 0x92,
8841 0x39, 0x25, 0x1f, 0x34, 0x4e, 0x62, 0x7c, 0x95,
8842 0x4d, 0x45, 0x55, 0x75, 0x83, 0x8f, 0xc1, 0xfd,
8843 0x84, 0x86, 0x8b, 0x83, 0x61, 0x40, 0x44, 0x5e,
8844 0x48, 0x5f, 0x41, 0x2a, 0x66, 0xb0, 0xc5, 0xc0,
8845 0x91, 0x74, 0x37, 0x14, 0x3c, 0x69, 0x34, 0x00,
8846 0x27, 0x1c, 0x47, 0x5c, 0x32, 0x36, 0x60, 0x61,
8847 0x85, 0x17, 0x23, 0x82, 0x89, 0x60, 0x55, 0x4f,
8848 0x60, 0x72, 0x64, 0x37, 0x25, 0x36, 0x38, 0x24,
8849 0x61, 0x3a, 0x49, 0x76, 0x59, 0x16, 0x36, 0x98,
8850 0x75, 0x35, 0x3d, 0x66, 0x59, 0x51, 0x6f, 0x7f,
8851 0xd7, 0xcc, 0x81, 0x7f, 0xc6, 0x9a, 0x56, 0x83,
8852 0xc2, 0x7c, 0x97, 0x6d, 0x1f, 0x00, 0x00, 0x31,
8853 0x31, 0x63, 0x94, 0xaa, 0xb3, 0xb6, 0xa1, 0x82,
8854 0x27, 0x81, 0xb0, 0xa4, 0x99, 0x86, 0x6c, 0x65,
8855 0x2e, 0x25, 0x0d, 0x12, 0x5c, 0xb2, 0xbb, 0x8e,
8856 0x6f, 0x37, 0x33, 0x67, 0x6b, 0x3c, 0x3b, 0x6d,
8857 0x60, 0x3a, 0x21, 0x2c, 0x40, 0x43, 0x41, 0x45,
8858 0x09, 0x00, 0x2c, 0xb6, 0xff, 0xe9, 0x98, 0x6b,
8859 0x7b, 0x66, 0x49, 0x36, 0x34, 0x3e, 0x4b, 0x54,
8860 0x44, 0xbc, 0xc5, 0x62, 0x39, 0x4e, 0x61, 0x6d,
8861 0x39, 0x54, 0x6e, 0x6c, 0x58, 0x50, 0x61, 0x77,
8862 0x21, 0x3f, 0x39, 0x43, 0x24, 0x09, 0x64, 0xb5,
8863 0xff, 0xdb, 0x9a, 0x68, 0x58, 0x5d, 0x6b, 0x7b,
8864 0x6d, 0x6d, 0x6f, 0x74, 0x77, 0x71, 0x63, 0x57,
8865 0x76, 0x75, 0x75, 0x77, 0x7c, 0x84, 0x8c, 0x91,
8866 0x75, 0x77, 0x79, 0x7a, 0x79, 0x75, 0x71, 0x6e,
8867 0x68, 0x65, 0x61, 0x5e, 0x5d, 0x5f, 0x62, 0x64,
8868 0x73, 0x69, 0x5c, 0x57, 0x59, 0x5d, 0x5e, 0x5c,
8869 0x4b, 0x3c, 0x3c, 0x56, 0x6c, 0x61, 0x46, 0x38,
8870 0x4a, 0x8b, 0xad, 0x89, 0x5b, 0x56, 0x65, 0x6a,
8871 0x9d, 0x8f, 0x73, 0x70, 0x67, 0x30, 0x2e, 0x79,
8872 0x9b, 0xb5, 0xba, 0x8e, 0x53, 0x34, 0x39, 0x46,
8873 0x62, 0x61, 0x77, 0x74, 0x66, 0x92, 0xb0, 0x8b,
8874 0x42, 0x23, 0x31, 0x3a, 0x32, 0x6a, 0xa8, 0xa0,
8875 0xa0, 0x9c, 0x81, 0x92, 0xc1, 0xb1, 0xac, 0xe9,
8876 0xe8, 0xd6, 0xd2, 0xc3, 0xb9, 0xdc, 0xe0, 0xa9,
8877 0x26, 0x2f, 0x3e, 0x1f, 0x09, 0x58, 0xa5, 0x98,
8878 0x5d, 0x4a, 0x5a, 0x65, 0x47, 0x36, 0x2f, 0x17,
8879 0x46, 0x6a, 0x77, 0x5e, 0x4b, 0x4e, 0x4b, 0x3b,
8880 0x2a, 0x4c, 0x69, 0x69, 0x5b, 0x5f, 0x77, 0x8c,
8881 0xab, 0x7b, 0x72, 0x56, 0x56, 0x60, 0x28, 0x09,
8882 0x8f, 0xab, 0xc8, 0xc9, 0xb2, 0x9c, 0x96, 0x9a,
8883 0x99, 0x54, 0x8e, 0xc2, 0x78, 0x5b, 0x72, 0x4e,
8884 0x00, 0x20, 0x39, 0x2d, 0x37, 0x53, 0x46, 0x1c,
8885 0x45, 0x4d, 0x46, 0x3f, 0x57, 0x78, 0x72, 0x51,
8886 0x12, 0x58, 0x74, 0x51, 0x50, 0x88, 0xa6, 0x95,
8887 0x55, 0x1d, 0x19, 0x55, 0x6d, 0x41, 0x1d, 0x22,
8888 0x2d, 0x96, 0x8e, 0x4a, 0x57, 0x60, 0x3e, 0x36,
8889 0x2d, 0x57, 0x6e, 0x65, 0x6f, 0x9b, 0xbf, 0xc6,
8890 0x91, 0x5f, 0x5a, 0x56, 0x40, 0x6b, 0x8e, 0x66,
8891 0x4b, 0x1e, 0x39, 0x5c, 0x48, 0x4f, 0x58, 0x2d,
8892 0x54, 0x41, 0x41, 0x4b, 0x39, 0x1d, 0x2d, 0x57,
8893 0x6e, 0x59, 0x41, 0x32, 0x25, 0x21, 0x30, 0x44,
8894 0x47, 0x40, 0x6d, 0x88, 0x67, 0x64, 0x84, 0x89,
8895 0x96, 0xd7, 0xdc, 0xf9, 0xff, 0xaf, 0x3f, 0x68,
8896 0xa5, 0x76, 0x78, 0x3f, 0x60, 0xa9, 0x71, 0x68,
8897 0x72, 0x62, 0x45, 0x53, 0xaf, 0xff, 0xe7, 0x90,
8898 0x57, 0xc7, 0xd7, 0x9c, 0x7d, 0x4a, 0x1a, 0x27,
8899 0x00, 0x87, 0xf7, 0xc4, 0x5f, 0x3e, 0x48, 0x4b,
8900 0x89, 0x58, 0x22, 0x0b, 0x11, 0x1e, 0x26, 0x2b,
8901 0x2b, 0x10, 0x18, 0x43, 0x58, 0x58, 0x77, 0xab,
8902 0x77, 0x52, 0x34, 0x25, 0x0b, 0x00, 0x2a, 0x6a,
8903 0x49, 0x4b, 0x48, 0x3e, 0x35, 0x36, 0x42, 0x4f,
8904 0x8f, 0xc1, 0xc3, 0xaa, 0x9f, 0x7c, 0x5a, 0x65,
8905 0x24, 0x25, 0x2f, 0x45, 0x58, 0x57, 0x40, 0x2a,
8906 0x59, 0x5e, 0x5d, 0x42, 0x35, 0x75, 0xd4, 0xfd,
8907 0xf3, 0xba, 0x94, 0x7e, 0x68, 0x6e, 0x7a, 0x6d,
8908 0x67, 0x69, 0x70, 0x7b, 0x84, 0x83, 0x78, 0x6e,
8909 0x78, 0x79, 0x7a, 0x7b, 0x7a, 0x77, 0x74, 0x72,
8910 0x6b, 0x6d, 0x6f, 0x70, 0x6f, 0x6b, 0x67, 0x64,
8911 0x6e, 0x6b, 0x68, 0x67, 0x67, 0x6a, 0x6e, 0x71,
8912 0x79, 0x6f, 0x64, 0x60, 0x64, 0x69, 0x6a, 0x69,
8913 0x63, 0x51, 0x3f, 0x41, 0x45, 0x3b, 0x38, 0x47,
8914 0x6b, 0x9b, 0xab, 0x85, 0x67, 0x6f, 0x74, 0x68,
8915 0x67, 0x5d, 0x65, 0x85, 0x67, 0x0a, 0x25, 0xb3,
8916 0x73, 0x71, 0x97, 0xd1, 0xd4, 0x9d, 0x70, 0x69,
8917 0x6a, 0x63, 0x70, 0x65, 0x53, 0x80, 0xa2, 0x7f,
8918 0x3d, 0x3c, 0x94, 0xcd, 0x93, 0x75, 0x9d, 0xae,
8919 0xe3, 0xc6, 0x93, 0xac, 0xe5, 0xad, 0x59, 0x5f,
8920 0x7d, 0x78, 0xa7, 0xb9, 0x78, 0x47, 0x54, 0x63,
8921 0x77, 0x32, 0x2e, 0x3a, 0x19, 0x21, 0x4a, 0x4c,
8922 0x46, 0x24, 0x2c, 0x3c, 0x2f, 0x3a, 0x5f, 0x6b,
8923 0x32, 0x42, 0x56, 0x5b, 0x4b, 0x3a, 0x3b, 0x47,
8924 0x28, 0x19, 0x1a, 0x2c, 0x30, 0x32, 0x55, 0x83,
8925 0x94, 0x4f, 0x49, 0x48, 0x55, 0x5b, 0x1d, 0x00,
8926 0x46, 0x6c, 0xa1, 0xc4, 0xc1, 0x9b, 0x67, 0x43,
8927 0x2f, 0x65, 0xa2, 0xb6, 0xa0, 0x84, 0x7d, 0x84,
8928 0x4f, 0x4c, 0x49, 0x49, 0x4a, 0x4a, 0x48, 0x45,
8929 0x65, 0x92, 0x9c, 0x76, 0x64, 0x70, 0x66, 0x43,
8930 0x80, 0x63, 0x1c, 0x1b, 0x80, 0xb5, 0x7c, 0x3d,
8931 0x09, 0x2b, 0x38, 0x25, 0x1e, 0x31, 0x3b, 0x32,
8932 0x37, 0x78, 0x9e, 0x83, 0x5f, 0x5a, 0x5c, 0x53,
8933 0x63, 0x6e, 0x77, 0x76, 0x73, 0x7b, 0x91, 0xa5,
8934 0x96, 0x6e, 0x52, 0x48, 0x30, 0x1f, 0x49, 0x8b,
8935 0x24, 0x59, 0x3d, 0x11, 0x2b, 0x36, 0x2f, 0x4b,
8936 0x23, 0x40, 0x5f, 0x88, 0xc6, 0xdb, 0x8a, 0x1d,
8937 0x76, 0x2e, 0x1d, 0x14, 0x4e, 0x8e, 0x66, 0x5b,
8938 0x6e, 0xa5, 0x7e, 0x58, 0x97, 0xb7, 0x99, 0x97,
8939 0x9d, 0x9a, 0x64, 0x24, 0x39, 0x81, 0x88, 0x53,
8940 0x45, 0x8e, 0xb0, 0xa4, 0x80, 0x45, 0x5c, 0xc5,
8941 0xd1, 0x85, 0x96, 0xc8, 0xa8, 0x8b, 0x93, 0x8b,
8942 0x71, 0xa7, 0x91, 0x2a, 0x00, 0x26, 0x4b, 0x3e,
8943 0x8b, 0xc8, 0xf5, 0xeb, 0xc9, 0xac, 0x8b, 0x6b,
8944 0xa3, 0xaa, 0x8f, 0x61, 0x5c, 0x72, 0x60, 0x32,
8945 0x2f, 0x76, 0x6d, 0x43, 0x57, 0x6e, 0x73, 0x8e,
8946 0xb8, 0xb5, 0x88, 0x77, 0x7a, 0x37, 0x0b, 0x3c,
8947 0x59, 0x37, 0x2c, 0x45, 0x56, 0x4d, 0x48, 0x50,
8948 0x74, 0x72, 0x5d, 0x70, 0x92, 0x68, 0x40, 0x63,
8949 0x55, 0x33, 0x45, 0x77, 0x64, 0x1b, 0x0e, 0x3f,
8950 0x47, 0x2d, 0x20, 0x2e, 0x2c, 0x1f, 0x59, 0xc3,
8951 0xb8, 0x97, 0x7c, 0x7b, 0x80, 0x7d, 0x7d, 0x84,
8952 0x86, 0x83, 0x7f, 0x7b, 0x79, 0x78, 0x78, 0x78,
8953 0x85, 0x7e, 0x77, 0x75, 0x76, 0x74, 0x6c, 0x65,
8954 0x6d, 0x6e, 0x70, 0x73, 0x76, 0x78, 0x7a, 0x7b,
8955 0x77, 0x6e, 0x68, 0x6c, 0x77, 0x7d, 0x7a, 0x74,
8956 0x79, 0x71, 0x67, 0x64, 0x65, 0x66, 0x63, 0x5f,
8957 0x58, 0x2e, 0x3a, 0x7e, 0x95, 0x66, 0x43, 0x4a,
8958 0x1b, 0x66, 0x84, 0x5c, 0x50, 0x82, 0xa9, 0xa4,
8959 0x81, 0x55, 0x77, 0xa6, 0x79, 0x41, 0x49, 0x5f,
8960 0xb6, 0xf0, 0xeb, 0xcb, 0xcf, 0xb5, 0x7a, 0x61,
8961 0x5b, 0x44, 0x28, 0x23, 0x3b, 0x56, 0x5b, 0x51,
8962 0x05, 0x15, 0x5d, 0xa7, 0x8c, 0x37, 0x2a, 0x5f,
8963 0x19, 0x4f, 0x99, 0xc5, 0xb7, 0x88, 0x61, 0x53,
8964 0xa5, 0x7d, 0x73, 0x81, 0x65, 0x2f, 0x32, 0x62,
8965 0x30, 0x3a, 0x43, 0x43, 0x38, 0x27, 0x17, 0x0e,
8966 0x10, 0x13, 0x37, 0x47, 0x2c, 0x28, 0x2f, 0x1e,
8967 0x3f, 0x10, 0x32, 0x6b, 0x61, 0x59, 0x5e, 0x46,
8968 0x45, 0x22, 0x0e, 0x16, 0x18, 0x15, 0x2c, 0x51,
8969 0x49, 0x40, 0x40, 0x26, 0x33, 0x2e, 0x00, 0x01,
8970 0x5d, 0x61, 0x60, 0x55, 0x4b, 0x52, 0x69, 0x7e,
8971 0x99, 0x7d, 0x5a, 0x45, 0x45, 0x4f, 0x57, 0x5a,
8972 0x45, 0x3b, 0x39, 0x49, 0x63, 0x72, 0x70, 0x66,
8973 0x94, 0x96, 0x62, 0x0d, 0x00, 0x47, 0xaf, 0xe9,
8974 0xff, 0xf6, 0xd1, 0xd1, 0xdb, 0xa7, 0x76, 0x84,
8975 0x5c, 0x74, 0x5f, 0x22, 0x12, 0x3e, 0x5d, 0x57,
8976 0x0a, 0x0d, 0x24, 0x3c, 0x37, 0x36, 0x6b, 0xb2,
8977 0x5d, 0x5b, 0x5f, 0x6c, 0x76, 0x6d, 0x52, 0x3a,
8978 0x54, 0x39, 0x2e, 0x41, 0x53, 0x4e, 0x42, 0x3e,
8979 0x47, 0x6e, 0xa4, 0xa0, 0x54, 0x27, 0x51, 0x8e,
8980 0xac, 0xb9, 0xba, 0xad, 0xa6, 0xa2, 0x8d, 0x72,
8981 0x19, 0x42, 0xa2, 0xb7, 0xd4, 0xf7, 0xc2, 0xb0,
8982 0x9a, 0xaf, 0x82, 0x57, 0x91, 0xdf, 0xe5, 0xc9,
8983 0xbd, 0xa6, 0x7b, 0x5c, 0x62, 0x76, 0x6d, 0x51,
8984 0x28, 0x82, 0xe2, 0xc1, 0x5c, 0x57, 0x7e, 0x6b,
8985 0x93, 0x79, 0x83, 0x78, 0x4c, 0x63, 0x99, 0x9c,
8986 0xa6, 0xa0, 0x7f, 0x58, 0x54, 0x62, 0x4c, 0x21,
8987 0x39, 0x60, 0x75, 0x6a, 0x6f, 0x99, 0xc5, 0xd8,
8988 0x7a, 0xbc, 0xdb, 0xaf, 0x7d, 0x7a, 0x89, 0x8d,
8989 0x94, 0x4e, 0x5d, 0x67, 0x33, 0x57, 0x9e, 0x8d,
8990 0x4d, 0x87, 0x9c, 0xa7, 0xb3, 0x7e, 0x4a, 0x5b,
8991 0xcd, 0x82, 0x3f, 0x30, 0x31, 0x26, 0x21, 0x29,
8992 0x01, 0x10, 0x4d, 0x61, 0x35, 0x32, 0x40, 0x23,
8993 0x48, 0x2b, 0x11, 0x12, 0x28, 0x48, 0x6a, 0x83,
8994 0x9a, 0x75, 0x7e, 0x44, 0x32, 0x79, 0x72, 0x4b,
8995 0x1c, 0x42, 0x63, 0x6c, 0x6e, 0x75, 0x77, 0x71,
8996 0x76, 0x74, 0x71, 0x6f, 0x6d, 0x6c, 0x6b, 0x6b,
8997 0x6b, 0x67, 0x65, 0x6a, 0x73, 0x78, 0x76, 0x72,
8998 0x6d, 0x6d, 0x6d, 0x6c, 0x6c, 0x6b, 0x6b, 0x6b,
8999 0x67, 0x6a, 0x6c, 0x6a, 0x66, 0x61, 0x5e, 0x5e,
9000 0x81, 0x79, 0x6f, 0x6b, 0x6d, 0x6d, 0x6a, 0x66,
9001 0x57, 0x3a, 0x2f, 0x3f, 0x43, 0x34, 0x34, 0x47,
9002 0x4a, 0x2e, 0x12, 0x24, 0x6c, 0xb5, 0xc3, 0xab,
9003 0xe6, 0xd4, 0xed, 0xe8, 0x9a, 0x7b, 0xb3, 0xe7,
9004 0xf8, 0xae, 0x72, 0xaa, 0xff, 0xec, 0xab, 0xad,
9005 0xc6, 0xdc, 0xbd, 0x72, 0x53, 0x69, 0x68, 0x46,
9006 0x6c, 0x38, 0x40, 0x8c, 0xa8, 0x6d, 0x34, 0x2b,
9007 0x59, 0x6a, 0x5f, 0x41, 0x46, 0x68, 0x6d, 0x55,
9008 0x3c, 0x61, 0x7d, 0x7a, 0x6d, 0x64, 0x56, 0x45,
9009 0x09, 0x28, 0x49, 0x51, 0x44, 0x37, 0x3b, 0x45,
9010 0x64, 0x4d, 0x4c, 0x41, 0x26, 0x3a, 0x66, 0x6f,
9011 0xb5, 0x78, 0x5e, 0x67, 0x5d, 0x4e, 0x46, 0x3b,
9012 0x44, 0x2f, 0x29, 0x33, 0x2c, 0x15, 0x11, 0x20,
9013 0x17, 0x1c, 0x30, 0x2a, 0x44, 0x43, 0x09, 0x12,
9014 0x5e, 0x56, 0x4d, 0x4d, 0x56, 0x60, 0x67, 0x69,
9015 0x2b, 0x48, 0x5e, 0x52, 0x3a, 0x41, 0x71, 0xa1,
9016 0x95, 0x83, 0x72, 0x6f, 0x74, 0x71, 0x5f, 0x4d,
9017 0x10, 0x9c, 0xff, 0xf7, 0xa2, 0x8b, 0xc8, 0xff,
9018 0xff, 0xbe, 0x65, 0x4e, 0x63, 0x40, 0x13, 0x1d,
9019 0x98, 0xbc, 0xb4, 0x7a, 0x5a, 0x67, 0x63, 0x45,
9020 0x53, 0x31, 0x3c, 0x84, 0xbd, 0xb4, 0x8f, 0x7b,
9021 0x8e, 0xa3, 0xa7, 0x82, 0x4f, 0x40, 0x62, 0x8d,
9022 0x6d, 0x65, 0x52, 0x47, 0x55, 0x68, 0x5e, 0x45,
9023 0x51, 0x67, 0xc9, 0xd6, 0x51, 0x0d, 0x3b, 0x59,
9024 0x44, 0x3a, 0x54, 0x9c, 0xdb, 0xe9, 0xd4, 0xc0,
9025 0xb6, 0xbd, 0xde, 0xac, 0x92, 0x9b, 0x68, 0x5f,
9026 0x65, 0x63, 0x61, 0x57, 0x6b, 0xa9, 0xaa, 0x64,
9027 0x66, 0x71, 0x95, 0xc5, 0xd5, 0xb8, 0x8d, 0x75,
9028 0x4d, 0x2a, 0x40, 0x59, 0x4b, 0x67, 0x94, 0x90,
9029 0x4d, 0xa3, 0xb0, 0x3e, 0x06, 0x6d, 0xb5, 0x85,
9030 0xc5, 0xb2, 0xaf, 0xb3, 0x8e, 0x49, 0x1f, 0x1d,
9031 0x45, 0x63, 0x7f, 0x97, 0xbd, 0xdd, 0xd1, 0xaf,
9032 0xeb, 0xfc, 0xd5, 0x69, 0x12, 0x16, 0x5d, 0x99,
9033 0x91, 0x59, 0x23, 0x22, 0x30, 0x2e, 0x53, 0x9b,
9034 0xd3, 0xef, 0xe1, 0xc7, 0xc3, 0xb0, 0xa6, 0xc0,
9035 0xe3, 0x97, 0x54, 0x4a, 0x57, 0x5d, 0x67, 0x79,
9036 0x14, 0x6f, 0xd4, 0xb5, 0x40, 0x24, 0x3b, 0x26,
9037 0x5b, 0x53, 0x40, 0x56, 0xb7, 0xff, 0xce, 0x5d,
9038 0x55, 0x55, 0x69, 0xa6, 0xfd, 0xfb, 0xba, 0xbb,
9039 0xc2, 0xb8, 0x9f, 0x86, 0x84, 0x8d, 0x85, 0x72,
9040 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a,
9041 0x73, 0x6d, 0x67, 0x67, 0x6b, 0x6b, 0x65, 0x5f,
9042 0x66, 0x67, 0x68, 0x69, 0x6b, 0x6d, 0x6e, 0x6e,
9043 0x68, 0x6e, 0x6f, 0x64, 0x53, 0x4a, 0x4e, 0x55,
9044 0x69, 0x61, 0x57, 0x52, 0x53, 0x53, 0x50, 0x4b,
9045 0x48, 0x41, 0x35, 0x2b, 0x2b, 0x32, 0x37, 0x36,
9046 0x26, 0x22, 0x38, 0x69, 0x93, 0xa3, 0xa8, 0xad,
9047 0xce, 0xa2, 0xa6, 0xb2, 0x8f, 0x7d, 0x83, 0x77,
9048 0xc5, 0xc1, 0x94, 0x8b, 0xb9, 0xa4, 0x4e, 0x1e,
9049 0x3f, 0x68, 0x81, 0x6f, 0x55, 0x4f, 0x54, 0x55,
9050 0x36, 0x12, 0x1e, 0x5e, 0x7a, 0x59, 0x43, 0x4f,
9051 0x47, 0x6c, 0x67, 0x48, 0x69, 0xab, 0x9e, 0x57,
9052 0x7a, 0x6a, 0x92, 0xd6, 0xcf, 0x8a, 0x79, 0xa2,
9053 0xe6, 0xa1, 0x4a, 0x18, 0x18, 0x2f, 0x41, 0x46,
9054 0x4a, 0x2f, 0x2c, 0x2c, 0x2c, 0x69, 0xbc, 0xde,
9055 0xcc, 0xc1, 0xaa, 0xa2, 0x9a, 0x6d, 0x45, 0x48,
9056 0x83, 0x69, 0x52, 0x47, 0x3a, 0x2b, 0x2e, 0x3e,
9057 0x4a, 0x46, 0x4d, 0x3d, 0x54, 0x56, 0x22, 0x31,
9058 0x4d, 0x4a, 0x5a, 0x86, 0xb2, 0xb7, 0x92, 0x69,
9059 0x55, 0x58, 0x62, 0x70, 0x7a, 0x79, 0x6b, 0x5f,
9060 0x7b, 0x81, 0x82, 0x78, 0x67, 0x5d, 0x5f, 0x65,
9061 0xa4, 0xac, 0xac, 0xa1, 0x96, 0x8f, 0x84, 0x77,
9062 0x5d, 0x91, 0x8f, 0x79, 0x8e, 0x94, 0x7d, 0x76,
9063 0x72, 0x78, 0x6d, 0x4f, 0x3a, 0x3d, 0x4b, 0x53,
9064 0x77, 0x97, 0x95, 0x68, 0x51, 0x6b, 0x8b, 0x94,
9065 0x68, 0x5a, 0x4f, 0x57, 0x65, 0x63, 0x4c, 0x34,
9066 0x57, 0x7b, 0x7a, 0x47, 0x27, 0x30, 0x34, 0x24,
9067 0x64, 0xd2, 0xeb, 0x72, 0x4c, 0xd7, 0xff, 0xae,
9068 0x7e, 0x5a, 0x6a, 0xbc, 0xf4, 0xde, 0xad, 0x94,
9069 0xe5, 0x76, 0x3b, 0x16, 0x38, 0x6e, 0x5f, 0x78,
9070 0x84, 0x73, 0xb7, 0xe9, 0xc1, 0xa8, 0x90, 0x4a,
9071 0x22, 0x4f, 0x8b, 0xb4, 0xbe, 0xad, 0x8d, 0x74,
9072 0x99, 0x5e, 0x08, 0x00, 0x2e, 0x29, 0x2b, 0x69,
9073 0xa8, 0xc4, 0xa9, 0x69, 0x7d, 0xd6, 0xd3, 0x78,
9074 0x66, 0x1f, 0x28, 0x9e, 0xec, 0xd1, 0xa8, 0xa8,
9075 0xc9, 0x90, 0x46, 0x30, 0x6f, 0xc6, 0xe2, 0xcd,
9076 0xd1, 0x96, 0x5d, 0x63, 0x99, 0xb6, 0x8d, 0x51,
9077 0x61, 0x6c, 0x34, 0x1a, 0x3e, 0x34, 0x46, 0xa9,
9078 0xee, 0xd0, 0xb1, 0xab, 0xa6, 0x85, 0x71, 0x7c,
9079 0x64, 0x45, 0x3a, 0x51, 0x68, 0x75, 0x93, 0xb8,
9080 0xf3, 0xec, 0x9c, 0x5f, 0x6f, 0x5c, 0x1a, 0x00,
9081 0x4f, 0x84, 0x91, 0x6f, 0x72, 0x9d, 0x9c, 0x70,
9082 0x55, 0x47, 0x39, 0xaf, 0xf9, 0xf8, 0xff, 0xdd,
9083 0x9d, 0x6c, 0x47, 0x4f, 0x67, 0x6c, 0x62, 0x5a,
9084 0x79, 0x7b, 0x7d, 0x80, 0x80, 0x7f, 0x7d, 0x7c,
9085 0x7b, 0x76, 0x72, 0x74, 0x79, 0x7b, 0x77, 0x72,
9086 0x5c, 0x5f, 0x65, 0x6c, 0x74, 0x7c, 0x81, 0x84,
9087 0x8a, 0x88, 0x80, 0x73, 0x66, 0x62, 0x67, 0x6e,
9088 0x6c, 0x63, 0x58, 0x54, 0x54, 0x53, 0x4f, 0x4a,
9089 0x3c, 0x3a, 0x32, 0x31, 0x3f, 0x4b, 0x3f, 0x29,
9090 0xa4, 0xd9, 0xff, 0xff, 0xe0, 0xbe, 0xbb, 0xc8,
9091 0xc7, 0xa4, 0xbc, 0xca, 0x7d, 0x37, 0x3a, 0x4d,
9092 0x62, 0x7d, 0x43, 0x00, 0x17, 0x3c, 0x3a, 0x39,
9093 0x33, 0x1f, 0x4c, 0x97, 0x89, 0x32, 0x18, 0x44,
9094 0x48, 0x3a, 0x43, 0x5a, 0x4e, 0x2b, 0x2d, 0x4d,
9095 0x51, 0x67, 0x56, 0x2b, 0x2c, 0x4a, 0x37, 0x00,
9096 0x36, 0x3c, 0x38, 0x30, 0x48, 0x88, 0xcf, 0xf9,
9097 0xf9, 0xc1, 0x81, 0x64, 0x69, 0x6e, 0x5d, 0x47,
9098 0x65, 0x4e, 0x50, 0x4e, 0x44, 0x6e, 0xae, 0xc3,
9099 0x7e, 0xae, 0xb0, 0xa3, 0x9c, 0x5a, 0x1d, 0x29,
9100 0x6f, 0x5b, 0x43, 0x33, 0x2b, 0x2b, 0x37, 0x44,
9101 0x46, 0x4e, 0x65, 0x5d, 0x6c, 0x59, 0x0c, 0x0a,
9102 0x4b, 0x53, 0x64, 0x7a, 0x8c, 0x92, 0x8e, 0x87,
9103 0x69, 0x53, 0x3f, 0x42, 0x59, 0x73, 0x80, 0x81,
9104 0x79, 0x97, 0xa8, 0x8d, 0x5a, 0x3e, 0x50, 0x6e,
9105 0x64, 0x4b, 0x47, 0x6d, 0x94, 0x92, 0x68, 0x40,
9106 0x43, 0x7e, 0x8c, 0x8d, 0xb4, 0xbc, 0x96, 0x81,
9107 0x31, 0x28, 0x37, 0x54, 0x54, 0x44, 0x57, 0x7f,
9108 0x88, 0x6d, 0x33, 0x07, 0x21, 0x64, 0x83, 0x78,
9109 0x36, 0x16, 0x05, 0x25, 0x5c, 0x73, 0x55, 0x2c,
9110 0x32, 0x6e, 0x8e, 0x74, 0x55, 0x4a, 0x2e, 0x07,
9111 0x7b, 0xb7, 0x92, 0x47, 0x5f, 0x93, 0x84, 0x5f,
9112 0x90, 0x75, 0x73, 0x8a, 0x8c, 0x88, 0xb4, 0xf5,
9113 0xee, 0x5c, 0x2c, 0x3e, 0x6b, 0x69, 0x2c, 0x41,
9114 0x7a, 0x45, 0x8a, 0xd5, 0x93, 0x4e, 0x59, 0x66,
9115 0x76, 0x9c, 0x8d, 0x41, 0x19, 0x31, 0x43, 0x36,
9116 0x81, 0xd1, 0xc7, 0x82, 0x6e, 0x67, 0x62, 0x7b,
9117 0x42, 0x6d, 0x96, 0x92, 0x5e, 0x38, 0x70, 0xd2,
9118 0xb6, 0x9f, 0xba, 0xe9, 0xc8, 0x77, 0x75, 0xb5,
9119 0xa7, 0xbd, 0xce, 0xdb, 0xec, 0xe5, 0xa7, 0x60,
9120 0x00, 0x2e, 0x8c, 0xad, 0x89, 0x5e, 0x62, 0x80,
9121 0x64, 0x68, 0x9b, 0x8f, 0x4b, 0x70, 0xb4, 0xa0,
9122 0xb2, 0x63, 0x4e, 0x83, 0x9b, 0x80, 0x6c, 0x6e,
9123 0x50, 0x4d, 0x5c, 0x71, 0x74, 0x78, 0xa6, 0xe0,
9124 0xeb, 0xe9, 0xc1, 0xb3, 0xc1, 0x9a, 0x7d, 0xa3,
9125 0x66, 0x78, 0x70, 0x45, 0x21, 0x27, 0x46, 0x5d,
9126 0x20, 0x56, 0x46, 0x45, 0x1d, 0x16, 0x6f, 0x6c,
9127 0x28, 0x28, 0x38, 0x53, 0x61, 0x61, 0x6a, 0x7b,
9128 0x71, 0x75, 0x7b, 0x80, 0x82, 0x81, 0x7e, 0x7c,
9129 0x77, 0x6f, 0x65, 0x60, 0x5e, 0x5a, 0x50, 0x48,
9130 0x55, 0x58, 0x5e, 0x65, 0x6d, 0x74, 0x7a, 0x7d,
9131 0x76, 0x72, 0x6e, 0x6f, 0x70, 0x6d, 0x63, 0x5a,
9132 0x7a, 0x70, 0x65, 0x60, 0x5f, 0x5e, 0x59, 0x54,
9133 0x41, 0x33, 0x26, 0x27, 0x30, 0x35, 0x31, 0x2b,
9134 0x4c, 0x72, 0x7c, 0x6c, 0x84, 0xbb, 0xc5, 0xa6,
9135 0x7a, 0x00, 0x00, 0x33, 0x69, 0x61, 0x52, 0x42,
9136 0x5c, 0x50, 0x48, 0x7f, 0xbb, 0x9b, 0x76, 0x97,
9137 0x58, 0x22, 0x2e, 0x7c, 0x8f, 0x54, 0x3c, 0x5d,
9138 0x61, 0x47, 0x3c, 0x4a, 0x50, 0x43, 0x3a, 0x3e,
9139 0x26, 0x3b, 0x4d, 0x4d, 0x41, 0x3a, 0x3c, 0x40,
9140 0x28, 0x38, 0x32, 0x1b, 0x28, 0x64, 0x9e, 0xb7,
9141 0x9a, 0xbd, 0xd9, 0xcc, 0x9e, 0x79, 0x75, 0x81,
9142 0x90, 0x7a, 0x7b, 0x73, 0x5a, 0x70, 0x9d, 0xa6,
9143 0x94, 0xb8, 0xa7, 0x95, 0xa1, 0x72, 0x2b, 0x20,
9144 0x2a, 0x34, 0x3e, 0x42, 0x45, 0x48, 0x44, 0x3d,
9145 0x1c, 0x4a, 0x98, 0xb8, 0xcb, 0x95, 0x16, 0x00,
9146 0xb5, 0xd2, 0xe2, 0xc3, 0x89, 0x69, 0x76, 0x92,
9147 0x5e, 0x5e, 0x55, 0x41, 0x33, 0x3c, 0x5a, 0x77,
9148 0xc6, 0xdf, 0xeb, 0xcc, 0x97, 0x78, 0x84, 0x9e,
9149 0x63, 0x62, 0x6d, 0x76, 0x6b, 0x6b, 0x9e, 0xde,
9150 0xe4, 0xb8, 0x7d, 0x7c, 0x92, 0x5f, 0x1b, 0x14,
9151 0x29, 0x27, 0x39, 0x4e, 0x3f, 0x1b, 0x14, 0x29,
9152 0x22, 0x3b, 0x6a, 0x84, 0x63, 0x35, 0x42, 0x71,
9153 0x4b, 0x43, 0x3d, 0x45, 0x5c, 0x79, 0x92, 0xa0,
9154 0x5a, 0x62, 0x68, 0x70, 0x83, 0x8c, 0x72, 0x4c,
9155 0x6a, 0x6d, 0x4b, 0x54, 0x71, 0x3f, 0x32, 0x8d,
9156 0xa4, 0x80, 0x5c, 0x4e, 0x4f, 0x64, 0x95, 0xc5,
9157 0x99, 0x54, 0x72, 0x90, 0x93, 0x69, 0x24, 0x43,
9158 0x9c, 0x50, 0x50, 0x7d, 0x64, 0x48, 0x87, 0xde,
9159 0xbd, 0xef, 0xd1, 0x58, 0x0c, 0x20, 0x39, 0x2c,
9160 0x00, 0x1f, 0x6b, 0x82, 0x55, 0x5a, 0x7b, 0x6d,
9161 0x64, 0x6d, 0x4d, 0x44, 0x80, 0xaf, 0xaf, 0xae,
9162 0xaf, 0x7f, 0x69, 0x83, 0x92, 0x78, 0x57, 0x4b,
9163 0x8a, 0xa5, 0x9e, 0x66, 0x39, 0x3d, 0x56, 0x64,
9164 0xb1, 0xa3, 0xa1, 0xa4, 0x90, 0x73, 0x74, 0x8b,
9165 0x52, 0x89, 0xb3, 0x9e, 0x82, 0x96, 0x9f, 0x7e,
9166 0x61, 0x24, 0x2e, 0x6c, 0x7e, 0x77, 0x69, 0x4e,
9167 0x80, 0x73, 0x74, 0x80, 0x81, 0x8a, 0xbd, 0xfa,
9168 0xff, 0x9d, 0x87, 0xb3, 0xb9, 0xb8, 0xb5, 0x96,
9169 0x78, 0x4e, 0x3e, 0x5f, 0x79, 0x66, 0x3f, 0x28,
9170 0x30, 0x3e, 0x2f, 0x19, 0x34, 0x3c, 0x23, 0x3c,
9171 0x51, 0x6e, 0x7d, 0x70, 0x61, 0x60, 0x62, 0x5f,
9172 0x67, 0x6d, 0x77, 0x7f, 0x82, 0x81, 0x7e, 0x7a,
9173 0x6b, 0x68, 0x67, 0x6d, 0x76, 0x7c, 0x7b, 0x78,
9174 0x7b, 0x7c, 0x7d, 0x7e, 0x80, 0x82, 0x83, 0x83,
9175 0x78, 0x7b, 0x85, 0x94, 0x9d, 0x93, 0x79, 0x62,
9176 0x72, 0x69, 0x5d, 0x57, 0x56, 0x54, 0x4f, 0x4a,
9177 0x46, 0x3c, 0x37, 0x33, 0x26, 0x18, 0x1d, 0x2c,
9178 0x26, 0x45, 0x3c, 0x1b, 0x36, 0x70, 0x62, 0x20,
9179 0x82, 0x44, 0x5f, 0xa9, 0xa3, 0x7b, 0x6f, 0x6b,
9180 0x52, 0x65, 0x4e, 0x3a, 0x42, 0x35, 0x3d, 0x76,
9181 0x96, 0x78, 0x47, 0x25, 0x2d, 0x44, 0x3e, 0x24,
9182 0x0d, 0x1c, 0x2f, 0x33, 0x26, 0x1e, 0x2b, 0x3f,
9183 0x44, 0x50, 0x60, 0x60, 0x43, 0x26, 0x2c, 0x45,
9184 0x2f, 0x2c, 0x40, 0x62, 0x6e, 0x70, 0x8e, 0xb9,
9185 0xce, 0xce, 0xbd, 0x91, 0x63, 0x53, 0x69, 0x85,
9186 0x54, 0x3f, 0x42, 0x43, 0x3b, 0x67, 0xa9, 0xbf,
9187 0xa4, 0xac, 0xa2, 0xaf, 0xd7, 0xc8, 0x74, 0x2f,
9188 0x29, 0x39, 0x42, 0x40, 0x49, 0x5b, 0x5f, 0x56,
9189 0x4f, 0x79, 0xbe, 0xd5, 0xe1, 0xa8, 0x26, 0x00,
9190 0x93, 0xa4, 0xac, 0x98, 0x71, 0x54, 0x51, 0x5a,
9191 0x50, 0x39, 0x37, 0x64, 0xa5, 0xc2, 0xa9, 0x83,
9192 0x95, 0x97, 0x9f, 0xb1, 0xc7, 0xd9, 0xe1, 0xe3,
9193 0xc3, 0x85, 0x5c, 0x64, 0x65, 0x4a, 0x3d, 0x49,
9194 0x03, 0x37, 0x60, 0x7f, 0x87, 0x6a, 0x7d, 0xcc,
9195 0xd1, 0xcb, 0x98, 0x47, 0x1f, 0x34, 0x51, 0x56,
9196 0x58, 0x31, 0x2d, 0x5b, 0x78, 0x5e, 0x37, 0x27,
9197 0x42, 0x3d, 0x44, 0x60, 0x7f, 0x85, 0x6d, 0x52,
9198 0x6b, 0x4a, 0x39, 0x4a, 0x64, 0x6e, 0x74, 0x7b,
9199 0x90, 0xbb, 0x87, 0x11, 0x00, 0x3c, 0x71, 0x74,
9200 0x8b, 0x7e, 0x67, 0x5f, 0x75, 0x8d, 0x81, 0x64,
9201 0x69, 0x76, 0xa9, 0x82, 0x5d, 0x5a, 0x3b, 0x55,
9202 0x8c, 0x68, 0x3b, 0x45, 0x76, 0x88, 0x9a, 0xc8,
9203 0xac, 0xeb, 0xfd, 0xba, 0x6d, 0x58, 0x60, 0x64,
9204 0x5f, 0x20, 0x34, 0x64, 0x4a, 0x31, 0x3f, 0x41,
9205 0x3d, 0x77, 0x51, 0x20, 0x68, 0xaf, 0x8d, 0x55,
9206 0x4a, 0x69, 0x7c, 0x83, 0xa0, 0xc7, 0xc8, 0xad,
9207 0x3f, 0x8a, 0xca, 0xd1, 0xbf, 0xb7, 0xae, 0xa1,
9208 0xaf, 0xa7, 0xaf, 0xb4, 0x8f, 0x5e, 0x63, 0x8b,
9209 0x79, 0xa8, 0x84, 0x7a, 0xbb, 0x9c, 0x49, 0x4a,
9210 0x50, 0x80, 0xd3, 0xeb, 0xcb, 0xcc, 0xad, 0x4f,
9211 0x65, 0x3f, 0x31, 0x4d, 0x69, 0x6e, 0x74, 0x83,
9212 0x34, 0x06, 0x05, 0x08, 0x00, 0x40, 0xa8, 0xd0,
9213 0x51, 0x42, 0x44, 0x58, 0x59, 0x4a, 0x4b, 0x5c,
9214 0x4c, 0x24, 0x42, 0x33, 0x3d, 0x83, 0x72, 0x46,
9215 0x3e, 0x51, 0x61, 0x6a, 0x75, 0x77, 0x60, 0x41,
9216 0x53, 0x5a, 0x66, 0x70, 0x75, 0x74, 0x6f, 0x6c,
9217 0x7a, 0x75, 0x70, 0x71, 0x75, 0x77, 0x72, 0x6c,
9218 0x68, 0x68, 0x67, 0x67, 0x66, 0x66, 0x66, 0x65,
9219 0x6e, 0x76, 0x82, 0x8c, 0x8c, 0x82, 0x71, 0x65,
9220 0x75, 0x6b, 0x5f, 0x59, 0x57, 0x55, 0x4f, 0x4a,
9221 0x43, 0x43, 0x44, 0x40, 0x2f, 0x1f, 0x1e, 0x27,
9222 0x02, 0x2b, 0x3d, 0x2d, 0x28, 0x39, 0x37, 0x21,
9223 0x27, 0x2c, 0x66, 0x9f, 0xae, 0xac, 0x76, 0x19,
9224 0x00, 0x72, 0x91, 0x60, 0x50, 0x48, 0x32, 0x30,
9225 0x5b, 0x71, 0x5e, 0x33, 0x40, 0x7e, 0x96, 0x7d,
9226 0x7f, 0xa3, 0xbd, 0xaa, 0x7f, 0x64, 0x67, 0x74,
9227 0x6a, 0x65, 0x4b, 0x31, 0x44, 0x86, 0xc8, 0xe7,
9228 0xc5, 0xea, 0xc7, 0x66, 0x4c, 0x88, 0xa6, 0x8b,
9229 0x89, 0x6d, 0x50, 0x49, 0x55, 0x5c, 0x52, 0x44,
9230 0x35, 0x1b, 0x1a, 0x15, 0x0b, 0x36, 0x79, 0x90,
9231 0x6d, 0x73, 0x89, 0x99, 0xa1, 0xa2, 0x6e, 0x1b,
9232 0x37, 0x42, 0x3a, 0x24, 0x26, 0x41, 0x4c, 0x43,
9233 0x64, 0x6d, 0x83, 0x77, 0x7f, 0x61, 0x09, 0x00,
9234 0x8c, 0x6b, 0x57, 0x75, 0xb6, 0xe9, 0xf3, 0xe8,
9235 0x9e, 0xa2, 0xaf, 0xc2, 0xd0, 0xcd, 0xbb, 0xaa,
9236 0x5a, 0x38, 0x28, 0x4d, 0x90, 0xb6, 0xa5, 0x84,
9237 0x8b, 0x5f, 0x49, 0x4f, 0x3e, 0x21, 0x32, 0x63,
9238 0x17, 0x53, 0x51, 0x2c, 0x3f, 0x70, 0xa8, 0xe3,
9239 0xde, 0xff, 0xd1, 0x55, 0x32, 0x79, 0x9b, 0x79,
9240 0x57, 0x54, 0x41, 0x3c, 0x62, 0x8c, 0x7a, 0x47,
9241 0x36, 0x5f, 0x7a, 0x5f, 0x2a, 0x19, 0x41, 0x72,
9242 0x6c, 0x66, 0x7b, 0x98, 0x89, 0x62, 0x68, 0x8f,
9243 0x6f, 0x47, 0x70, 0x99, 0x72, 0x65, 0x7e, 0x76,
9244 0x3f, 0x72, 0x80, 0x52, 0x29, 0x25, 0x1d, 0x06,
9245 0x41, 0x82, 0xb7, 0x63, 0x47, 0x89, 0x82, 0x7c,
9246 0x52, 0x72, 0x4a, 0x4a, 0xaf, 0xc6, 0x74, 0x41,
9247 0xa3, 0xc8, 0xe0, 0xbf, 0x73, 0x43, 0x58, 0x86,
9248 0x9a, 0xcf, 0xb2, 0x6b, 0x50, 0x31, 0x14, 0x22,
9249 0x62, 0x5b, 0x44, 0x69, 0xa1, 0x69, 0x1a, 0x21,
9250 0x72, 0x80, 0x66, 0x4c, 0x7c, 0xb5, 0x78, 0x00,
9251 0x52, 0x5b, 0x58, 0x55, 0x6d, 0x8c, 0x88, 0x6b,
9252 0xb5, 0xa2, 0xac, 0xc9, 0xba, 0x85, 0x72, 0x86,
9253 0xfb, 0x8f, 0x7c, 0xb5, 0xc0, 0xa6, 0x6b, 0x19,
9254 0x4e, 0xb7, 0xff, 0xcb, 0x87, 0xcc, 0xee, 0x91,
9255 0x73, 0x3b, 0x25, 0x53, 0x7e, 0x67, 0x26, 0x00,
9256 0x59, 0x79, 0x57, 0x3e, 0x72, 0x86, 0x5d, 0x48,
9257 0x65, 0x4c, 0x3b, 0x48, 0x64, 0x70, 0x65, 0x55,
9258 0x5b, 0x4a, 0x30, 0x3a, 0x6c, 0x7f, 0x62, 0x4a,
9259 0x2b, 0x25, 0x38, 0x64, 0x85, 0x84, 0x75, 0x6c,
9260 0x5d, 0x65, 0x72, 0x7d, 0x83, 0x82, 0x7d, 0x79,
9261 0x7d, 0x77, 0x70, 0x70, 0x72, 0x72, 0x6b, 0x65,
9262 0x67, 0x68, 0x6a, 0x6d, 0x70, 0x72, 0x74, 0x75,
9263 0x6f, 0x75, 0x77, 0x70, 0x65, 0x60, 0x66, 0x6e,
9264 0x73, 0x69, 0x5d, 0x56, 0x54, 0x52, 0x4c, 0x46,
9265 0x41, 0x3b, 0x31, 0x2a, 0x2a, 0x2c, 0x2a, 0x25,
9266 0x4d, 0x39, 0x22, 0x16, 0x10, 0x16, 0x2b, 0x42,
9267 0x1f, 0x7f, 0xd4, 0xc2, 0xa0, 0xc9, 0xca, 0x77,
9268 0x9b, 0x8a, 0x6d, 0x86, 0xaf, 0x81, 0x3f, 0x40,
9269 0x4b, 0x69, 0x82, 0x7e, 0x6a, 0x61, 0x65, 0x6c,
9270 0x3c, 0x30, 0x28, 0x38, 0x59, 0x61, 0x36, 0x00,
9271 0x0f, 0x2a, 0x1e, 0x06, 0x3a, 0x9c, 0xba, 0x95,
9272 0x8d, 0x9e, 0x9a, 0x74, 0x49, 0x2c, 0x13, 0x00,
9273 0x23, 0x25, 0x29, 0x30, 0x33, 0x30, 0x26, 0x1f,
9274 0x35, 0x20, 0x24, 0x20, 0x0e, 0x2d, 0x61, 0x6e,
9275 0x8b, 0x8d, 0xa0, 0x7b, 0x36, 0x3c, 0x4f, 0x25,
9276 0x49, 0x62, 0x67, 0x54, 0x4d, 0x53, 0x44, 0x25,
9277 0x39, 0x3e, 0x50, 0x47, 0x5c, 0x54, 0x13, 0x18,
9278 0xb1, 0x9c, 0x8e, 0x9e, 0xc0, 0xd5, 0xcf, 0xc0,
9279 0xe2, 0xc5, 0x9e, 0x81, 0x75, 0x75, 0x77, 0x78,
9280 0x71, 0x93, 0xac, 0x9d, 0x7c, 0x78, 0x9f, 0xcb,
9281 0xb6, 0xc3, 0xad, 0x60, 0x0e, 0x07, 0x55, 0xa8,
9282 0x63, 0x74, 0x90, 0xa8, 0xaa, 0x8d, 0x5f, 0x3c,
9283 0x93, 0x82, 0x75, 0x79, 0x80, 0x73, 0x4e, 0x2d,
9284 0x60, 0x53, 0x4d, 0x5b, 0x6f, 0x6e, 0x53, 0x37,
9285 0x5e, 0x48, 0x50, 0x73, 0x7e, 0x76, 0x90, 0xbf,
9286 0xb2, 0x99, 0x5f, 0x34, 0x55, 0xa7, 0xd3, 0xce,
9287 0xc6, 0xda, 0xdf, 0xbc, 0x7d, 0x49, 0x38, 0x3d,
9288 0x24, 0x29, 0x36, 0x52, 0x7b, 0xae, 0xdc, 0xf7,
9289 0xd6, 0xa4, 0x67, 0x46, 0x42, 0x46, 0x3d, 0x30,
9290 0x13, 0x33, 0x64, 0x94, 0xb1, 0xb4, 0xa6, 0x98,
9291 0x17, 0x46, 0x88, 0xa4, 0x82, 0x60, 0x85, 0xc8,
9292 0xff, 0xc2, 0x78, 0x5a, 0x67, 0x78, 0x6f, 0x5c,
9293 0x8a, 0x4b, 0x77, 0xe6, 0xca, 0x3e, 0x2c, 0x91,
9294 0xc3, 0x74, 0x1a, 0x00, 0x29, 0x5e, 0x6d, 0x5f,
9295 0x19, 0x5d, 0xa0, 0xa6, 0x80, 0x6f, 0x93, 0xc2,
9296 0xe5, 0xd9, 0xca, 0xc0, 0xb6, 0xa6, 0x90, 0x7e,
9297 0x31, 0x5f, 0x7a, 0x7a, 0x8f, 0xb3, 0xa8, 0x7c,
9298 0x4a, 0x6e, 0x99, 0xb5, 0xc8, 0xd6, 0xd9, 0xd3,
9299 0x7e, 0x6f, 0x4f, 0x28, 0x18, 0x35, 0x76, 0xac,
9300 0xc9, 0xc3, 0xc1, 0xc3, 0xbc, 0x9b, 0x67, 0x3d,
9301 0x8d, 0x74, 0x57, 0x4b, 0x51, 0x5a, 0x5c, 0x59,
9302 0x43, 0x2c, 0x39, 0x54, 0x53, 0x48, 0x31, 0x0e,
9303 0x2e, 0x38, 0x48, 0x59, 0x65, 0x6a, 0x6b, 0x6a,
9304 0x5e, 0x6c, 0x7b, 0x82, 0x7d, 0x76, 0x72, 0x72,
9305 0x7a, 0x74, 0x70, 0x73, 0x7a, 0x7e, 0x79, 0x74,
9306 0x6b, 0x6f, 0x76, 0x7a, 0x7c, 0x7a, 0x76, 0x73,
9307 0x87, 0x82, 0x79, 0x70, 0x6a, 0x68, 0x68, 0x68,
9308 0x69, 0x63, 0x5d, 0x5d, 0x60, 0x60, 0x5a, 0x54,
9309 0x54, 0x49, 0x70, 0xba, 0xf1, 0xb7, 0x45, 0x2d,
9310 0x2d, 0x31, 0x36, 0x39, 0x39, 0x36, 0x31, 0x2d,
9311 0x4b, 0x8a, 0x98, 0x73, 0x83, 0xc3, 0xc5, 0x8c,
9312 0x51, 0x1f, 0x1b, 0x49, 0x4d, 0x24, 0x2d, 0x62,
9313 0x88, 0x64, 0x60, 0x7a, 0x6a, 0x2f, 0x16, 0x27,
9314 0x5a, 0xa8, 0xeb, 0xde, 0x9a, 0x77, 0x9d, 0xd5,
9315 0x3a, 0x34, 0x15, 0x07, 0x49, 0xae, 0xd1, 0xb5,
9316 0x8f, 0xbb, 0xe0, 0xb7, 0x4c, 0x1d, 0x82, 0xff,
9317 0xe8, 0x9b, 0x5c, 0x54, 0x53, 0x3f, 0x39, 0x46,
9318 0x26, 0x13, 0x11, 0x23, 0x27, 0x1d, 0x21, 0x33,
9319 0x45, 0x29, 0x1e, 0x2f, 0x3b, 0x32, 0x27, 0x28,
9320 0x3b, 0x5b, 0x77, 0x72, 0x51, 0x34, 0x2f, 0x38,
9321 0x35, 0x3c, 0x42, 0x40, 0x36, 0x2a, 0x22, 0x1f,
9322 0xad, 0x8e, 0x70, 0x71, 0x8e, 0xad, 0xbc, 0xbc,
9323 0x4b, 0x47, 0x60, 0xa4, 0xed, 0xff, 0xde, 0xad,
9324 0xb7, 0xa0, 0x86, 0x7a, 0x7f, 0x88, 0x8a, 0x88,
9325 0xbc, 0xe9, 0xff, 0xff, 0xf2, 0xb1, 0x7c, 0x62,
9326 0x49, 0x65, 0x8f, 0xb2, 0xb8, 0x9d, 0x71, 0x4f,
9327 0x41, 0x69, 0xa8, 0xdc, 0xe5, 0xb9, 0x6e, 0x36,
9328 0x39, 0x68, 0xa8, 0xcf, 0xc8, 0x99, 0x5d, 0x36,
9329 0x67, 0x5f, 0x39, 0x13, 0x24, 0x56, 0x5d, 0x3e,
9330 0x70, 0x7d, 0xa0, 0xcf, 0xea, 0xe4, 0xcf, 0xc0,
9331 0xc5, 0xc4, 0xb3, 0x8a, 0x5d, 0x44, 0x49, 0x58,
9332 0x94, 0x87, 0x78, 0x77, 0x8b, 0xb3, 0xdf, 0xfb,
9333 0xce, 0x97, 0x58, 0x3a, 0x3d, 0x3c, 0x26, 0x0d,
9334 0x91, 0x9a, 0xb1, 0xd0, 0xe5, 0xe0, 0xc3, 0xa8,
9335 0x55, 0x4b, 0x4e, 0x53, 0x3f, 0x27, 0x39, 0x62,
9336 0x6c, 0x4e, 0x31, 0x30, 0x47, 0x58, 0x54, 0x47,
9337 0x1c, 0x2a, 0x46, 0x54, 0x3a, 0x1e, 0x37, 0x69,
9338 0x5f, 0x66, 0x64, 0x63, 0x78, 0x8f, 0x84, 0x65,
9339 0xc0, 0xad, 0x95, 0x89, 0x8e, 0x9d, 0xac, 0xb5,
9340 0xd1, 0xdb, 0xd5, 0xae, 0x79, 0x5c, 0x63, 0x78,
9341 0x8a, 0x85, 0x85, 0x89, 0x85, 0x81, 0x8a, 0x9b,
9342 0x65, 0x3d, 0x50, 0xaf, 0xf4, 0xdc, 0x9a, 0x70,
9343 0xbc, 0x81, 0x38, 0x10, 0x19, 0x3b, 0x58, 0x66,
9344 0x76, 0x53, 0x2b, 0x1d, 0x2c, 0x46, 0x56, 0x5b,
9345 0x37, 0x71, 0xa2, 0x92, 0x5d, 0x4a, 0x74, 0xaa,
9346 0x51, 0x34, 0x2d, 0x3c, 0x3b, 0x2c, 0x26, 0x27,
9347 0x36, 0x3f, 0x4e, 0x5d, 0x67, 0x6b, 0x6a, 0x69,
9348 0x67, 0x72, 0x7d, 0x7e, 0x75, 0x69, 0x63, 0x61,
9349 0x82, 0x7c, 0x78, 0x7b, 0x81, 0x84, 0x80, 0x7a,
9350 0x61, 0x68, 0x72, 0x7c, 0x82, 0x84, 0x83, 0x81,
9351 0x79, 0x79, 0x79, 0x77, 0x73, 0x6d, 0x67, 0x63,
9352 0x61, 0x5b, 0x55, 0x55, 0x58, 0x57, 0x51, 0x4b,
9353 0x46, 0x52, 0x78, 0x96, 0xc0, 0xc5, 0x87, 0x67,
9354 0x63, 0x55, 0x3f, 0x28, 0x18, 0x11, 0x10, 0x12,
9355 0x23, 0x52, 0x88, 0xa3, 0xa6, 0x9f, 0x93, 0x88,
9356 0x30, 0x4c, 0x55, 0x46, 0x41, 0x48, 0x38, 0x19,
9357 0x48, 0x61, 0x7d, 0x78, 0x50, 0x3c, 0x6a, 0xad,
9358 0xe3, 0xf5, 0xf9, 0xd7, 0x9a, 0x65, 0x51, 0x51,
9359 0x48, 0x28, 0x0f, 0x31, 0x8d, 0xd9, 0xd4, 0xa6,
9360 0x92, 0x90, 0x9e, 0xb6, 0xc2, 0xc4, 0xd1, 0xe5,
9361 0xd1, 0xbb, 0xb1, 0xac, 0x87, 0x4f, 0x39, 0x47,
9362 0x0c, 0x57, 0xbe, 0xda, 0x7e, 0x11, 0x10, 0x54,
9363 0x1c, 0x28, 0x26, 0x23, 0x40, 0x5f, 0x49, 0x17,
9364 0x2f, 0x4b, 0x6d, 0x7e, 0x75, 0x5c, 0x43, 0x35,
9365 0x2d, 0x2e, 0x2e, 0x29, 0x21, 0x1a, 0x16, 0x15,
9366 0xd7, 0xaa, 0x6f, 0x4a, 0x45, 0x52, 0x60, 0x66,
9367 0x5f, 0x67, 0x69, 0x59, 0x41, 0x39, 0x45, 0x56,
9368 0x83, 0x84, 0x7a, 0x62, 0x50, 0x5a, 0x7f, 0xa1,
9369 0xfd, 0xc5, 0x7d, 0x4f, 0x45, 0x4a, 0x4b, 0x47,
9370 0x8b, 0x94, 0xa1, 0xae, 0xb8, 0xc0, 0xc5, 0xc8,
9371 0xee, 0xf2, 0xf0, 0xe1, 0xcb, 0xbb, 0xb7, 0xba,
9372 0xd8, 0xde, 0xd0, 0xa1, 0x62, 0x3a, 0x37, 0x44,
9373 0x62, 0x58, 0x3c, 0x34, 0x65, 0x9c, 0x8b, 0x51,
9374 0x0a, 0x0c, 0x3b, 0x82, 0x9e, 0x92, 0xa2, 0xcc,
9375 0xd5, 0xd2, 0xc9, 0xbc, 0xb3, 0xb6, 0xc3, 0xd0,
9376 0x78, 0x70, 0x66, 0x60, 0x65, 0x72, 0x82, 0x8d,
9377 0xb6, 0xa8, 0x95, 0x83, 0x73, 0x60, 0x4b, 0x3c,
9378 0x33, 0x54, 0x86, 0xb4, 0xd1, 0xe0, 0xe7, 0xea,
9379 0x81, 0x48, 0x1f, 0x26, 0x39, 0x3f, 0x4f, 0x66,
9380 0x55, 0x4f, 0x49, 0x46, 0x45, 0x41, 0x3a, 0x33,
9381 0x35, 0x21, 0x29, 0x48, 0x50, 0x5d, 0xab, 0xff,
9382 0x8b, 0x70, 0x74, 0x88, 0x65, 0x20, 0x12, 0x37,
9383 0x76, 0x74, 0x89, 0xbd, 0xef, 0xf4, 0xc7, 0x96,
9384 0x70, 0x52, 0x39, 0x42, 0x5d, 0x61, 0x41, 0x1e,
9385 0x41, 0x2f, 0x49, 0x7d, 0x76, 0x37, 0x15, 0x24,
9386 0x24, 0x32, 0x82, 0xd9, 0xc2, 0x6e, 0x71, 0xbc,
9387 0xff, 0xdc, 0xa1, 0x7f, 0x7e, 0x87, 0x87, 0x82,
9388 0x3f, 0x28, 0x13, 0x15, 0x2c, 0x43, 0x4c, 0x4b,
9389 0x0f, 0x1c, 0x2a, 0x30, 0x2f, 0x31, 0x3a, 0x43,
9390 0x22, 0x30, 0x3e, 0x47, 0x3f, 0x26, 0x26, 0x40,
9391 0x74, 0x78, 0x7d, 0x7e, 0x7a, 0x71, 0x66, 0x5f,
9392 0x6c, 0x76, 0x80, 0x81, 0x78, 0x6e, 0x6a, 0x6a,
9393 0x8c, 0x86, 0x81, 0x83, 0x89, 0x8b, 0x86, 0x80,
9394 0x75, 0x7a, 0x81, 0x86, 0x85, 0x80, 0x78, 0x73,
9395 0x72, 0x81, 0x96, 0xa4, 0xa2, 0x92, 0x7b, 0x6b,
9396 0x6e, 0x68, 0x61, 0x61, 0x63, 0x62, 0x5c, 0x55,
9397 0x44, 0x13, 0x28, 0x59, 0x7b, 0x7d, 0x5d, 0x57,
9398 0x3f, 0x2e, 0x17, 0x06, 0x06, 0x16, 0x2d, 0x3d,
9399 0x41, 0x33, 0x54, 0x8c, 0x88, 0x59, 0x60, 0x96,
9400 0x9d, 0x5f, 0x30, 0x27, 0x15, 0x00, 0x11, 0x42,
9401 0x57, 0x63, 0x5e, 0x4d, 0x5a, 0x8d, 0xbf, 0xd6,
9402 0xae, 0x9b, 0x8e, 0x95, 0xa5, 0xa1, 0x82, 0x64,
9403 0x2b, 0x45, 0x81, 0xc1, 0xd5, 0xbe, 0xa8, 0xa4,
9404 0x7b, 0x8e, 0x91, 0x79, 0x66, 0x69, 0x74, 0x78,
9405 0x71, 0x88, 0xa2, 0x94, 0x53, 0x11, 0x0a, 0x27,
9406 0x9b, 0xa8, 0xaf, 0xad, 0xab, 0x9c, 0x6e, 0x3e,
9407 0x3a, 0x37, 0x35, 0x31, 0x2a, 0x2f, 0x48, 0x62,
9408 0x7c, 0x6a, 0x52, 0x43, 0x40, 0x3f, 0x3d, 0x39,
9409 0x22, 0x24, 0x27, 0x28, 0x25, 0x1d, 0x12, 0x0a,
9410 0xbc, 0x99, 0x65, 0x3a, 0x23, 0x1f, 0x25, 0x2a,
9411 0x08, 0x36, 0x5b, 0x4a, 0x1e, 0x15, 0x45, 0x7b,
9412 0xc8, 0xc6, 0xad, 0x75, 0x3c, 0x2b, 0x49, 0x6f,
9413 0x35, 0x23, 0x17, 0x28, 0x48, 0x5b, 0x52, 0x41,
9414 0x6e, 0x6c, 0x63, 0x51, 0x3f, 0x3a, 0x44, 0x50,
9415 0x34, 0x5a, 0x81, 0x86, 0x6a, 0x47, 0x34, 0x31,
9416 0x1b, 0x2a, 0x39, 0x3b, 0x37, 0x3d, 0x51, 0x65,
9417 0x41, 0x22, 0x30, 0x6f, 0x8d, 0x64, 0x2d, 0x15,
9418 0xa2, 0xa1, 0xab, 0xae, 0x92, 0x72, 0x7d, 0xa0,
9419 0x98, 0x9b, 0x9c, 0x95, 0x84, 0x6d, 0x57, 0x4b,
9420 0xc4, 0xd0, 0xdd, 0xe1, 0xd3, 0xb5, 0x93, 0x7c,
9421 0xa7, 0xb0, 0xae, 0x94, 0x78, 0x7e, 0xa8, 0xd1,
9422 0x9b, 0xa8, 0xa8, 0x90, 0x78, 0x82, 0xb4, 0xe4,
9423 0x7c, 0x44, 0x1e, 0x2b, 0x43, 0x4c, 0x59, 0x6d,
9424 0x16, 0x3a, 0x69, 0x86, 0x84, 0x6d, 0x52, 0x43,
9425 0x40, 0x23, 0x29, 0x56, 0x6b, 0x5f, 0x69, 0x8a,
9426 0x81, 0x6c, 0x56, 0x4d, 0x51, 0x6e, 0xa8, 0xdd,
9427 0xe9, 0xdd, 0xce, 0xc0, 0xa6, 0x74, 0x31, 0x00,
9428 0x4b, 0x21, 0x13, 0x52, 0xb1, 0xd7, 0xa7, 0x64,
9429 0x47, 0x9d, 0xff, 0xff, 0xb8, 0x5c, 0x63, 0xa1,
9430 0xd5, 0x56, 0x1a, 0x71, 0xd4, 0xcb, 0x7e, 0x48,
9431 0x72, 0x7e, 0x81, 0x6c, 0x4b, 0x39, 0x3f, 0x4d,
9432 0xe2, 0xb6, 0x7f, 0x63, 0x6b, 0x86, 0x9b, 0xa5,
9433 0x90, 0xa0, 0x9e, 0x73, 0x36, 0x15, 0x21, 0x3a,
9434 0x46, 0x44, 0x20, 0x01, 0x0d, 0x26, 0x40, 0x5c,
9435 0x68, 0x6d, 0x74, 0x78, 0x77, 0x70, 0x68, 0x62,
9436 0x6b, 0x76, 0x82, 0x87, 0x84, 0x82, 0x84, 0x88,
9437 0x7c, 0x76, 0x71, 0x72, 0x77, 0x79, 0x73, 0x6d,
9438 0x6a, 0x72, 0x7f, 0x89, 0x8e, 0x8b, 0x85, 0x80,
9439 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
9440 0x73, 0x6c, 0x65, 0x64, 0x65, 0x64, 0x5d, 0x56,
9441 0x4d, 0x2d, 0x6f, 0xa5, 0x83, 0x4e, 0x40, 0x62,
9442 0x54, 0x4e, 0x48, 0x4b, 0x5a, 0x73, 0x8e, 0xa0,
9443 0xa9, 0x48, 0x2a, 0x85, 0xd9, 0xd4, 0xb2, 0xac,
9444 0x84, 0x3f, 0x32, 0x63, 0x61, 0x2b, 0x36, 0x79,
9445 0x60, 0x6e, 0x5b, 0x3d, 0x5c, 0xa8, 0xc7, 0xb5,
9446 0x90, 0x71, 0x5b, 0x69, 0x8b, 0x95, 0x78, 0x55,
9447 0x80, 0x40, 0x39, 0x8c, 0xcb, 0xaf, 0x6c, 0x47,
9448 0x4f, 0x6f, 0x79, 0x6a, 0x75, 0x9d, 0xab, 0x9b,
9449 0x5a, 0x77, 0x8f, 0x82, 0x5e, 0x55, 0x7f, 0xb3,
9450 0xa4, 0xac, 0x9b, 0x7a, 0x75, 0x8e, 0x9c, 0x93,
9451 0x4d, 0x24, 0x15, 0x32, 0x49, 0x3f, 0x33, 0x35,
9452 0x40, 0x3c, 0x38, 0x39, 0x3b, 0x39, 0x31, 0x29,
9453 0x28, 0x2b, 0x32, 0x3a, 0x3c, 0x30, 0x1a, 0x09,
9454 0x4a, 0x48, 0x42, 0x39, 0x33, 0x37, 0x42, 0x4c,
9455 0x6d, 0x68, 0x62, 0x60, 0x63, 0x68, 0x6d, 0x70,
9456 0x63, 0x39, 0x10, 0x10, 0x32, 0x50, 0x54, 0x49,
9457 0x34, 0x35, 0x36, 0x34, 0x36, 0x40, 0x53, 0x61,
9458 0x62, 0x82, 0xa5, 0xad, 0x97, 0x7a, 0x6a, 0x66,
9459 0x88, 0x87, 0x77, 0x54, 0x32, 0x2e, 0x4b, 0x69,
9460 0x4e, 0x4e, 0x57, 0x6a, 0x7a, 0x74, 0x59, 0x40,
9461 0x0f, 0x12, 0x40, 0x80, 0x8a, 0x59, 0x36, 0x38,
9462 0x15, 0x63, 0xb0, 0xcc, 0xce, 0xce, 0xc1, 0xac,
9463 0x29, 0x45, 0x6d, 0x8d, 0xa1, 0xb2, 0xc3, 0xcf,
9464 0x62, 0x7e, 0xab, 0xd3, 0xe8, 0xe8, 0xda, 0xcd,
9465 0x5c, 0x6b, 0x7f, 0x90, 0xa1, 0xb8, 0xd5, 0xea,
9466 0xaf, 0xa9, 0x99, 0x7f, 0x61, 0x48, 0x3b, 0x36,
9467 0x18, 0x0b, 0x14, 0x30, 0x38, 0x30, 0x40, 0x5f,
9468 0x51, 0x51, 0x4b, 0x3f, 0x36, 0x39, 0x48, 0x57,
9469 0x2c, 0x35, 0x18, 0x00, 0x38, 0x93, 0x91, 0x4c,
9470 0x37, 0x68, 0x59, 0x24, 0x54, 0xd7, 0xff, 0xe4,
9471 0xd1, 0xb3, 0x94, 0x8a, 0x8a, 0x79, 0x4f, 0x2a,
9472 0x4c, 0x3c, 0x30, 0x38, 0x50, 0x65, 0x6b, 0x68,
9473 0x7e, 0xab, 0xb9, 0x8d, 0x60, 0x55, 0x55, 0x4f,
9474 0x9f, 0x99, 0x8f, 0x80, 0x69, 0x51, 0x42, 0x3e,
9475 0x1b, 0x29, 0x31, 0x28, 0x1a, 0x1e, 0x3a, 0x55,
9476 0xd0, 0xb4, 0x93, 0x84, 0x86, 0x87, 0x7e, 0x72,
9477 0x81, 0x81, 0x84, 0x89, 0x87, 0x78, 0x60, 0x4c,
9478 0x78, 0x63, 0x89, 0xeb, 0xff, 0xc7, 0x6f, 0x53,
9479 0x5a, 0x61, 0x6a, 0x71, 0x74, 0x70, 0x6a, 0x66,
9480 0x6e, 0x77, 0x82, 0x85, 0x83, 0x84, 0x89, 0x8f,
9481 0x82, 0x7b, 0x75, 0x76, 0x7a, 0x7b, 0x75, 0x6e,
9482 0x69, 0x73, 0x81, 0x8e, 0x92, 0x8e, 0x85, 0x7f,
9483 0x76, 0x71, 0x6a, 0x65, 0x67, 0x6e, 0x77, 0x7e,
9484 0x55, 0x4e, 0x47, 0x44, 0x45, 0x43, 0x3b, 0x34,
9485 0x3a, 0x41, 0x73, 0x6b, 0x43, 0x46, 0x49, 0x49,
9486 0x79, 0x78, 0x76, 0x73, 0x6f, 0x6b, 0x68, 0x66,
9487 0x6c, 0x7a, 0x98, 0xb0, 0xa2, 0x78, 0x5a, 0x55,
9488 0x54, 0x59, 0x4b, 0x2f, 0x24, 0x2b, 0x29, 0x1b,
9489 0x1d, 0x65, 0x84, 0x5a, 0x42, 0x6d, 0xa3, 0xb7,
9490 0xaf, 0x99, 0x80, 0x74, 0x71, 0x69, 0x56, 0x44,
9491 0x48, 0x30, 0x2f, 0x3c, 0x26, 0x0f, 0x3d, 0x8b,
9492 0x58, 0x93, 0xb5, 0x9f, 0x84, 0x7b, 0x67, 0x47,
9493 0x8c, 0x8f, 0x7f, 0x5b, 0x41, 0x4a, 0x6b, 0x86,
9494 0x90, 0x4f, 0x43, 0x82, 0xa4, 0x89, 0x7b, 0x92,
9495 0xc0, 0xad, 0x73, 0x2e, 0x18, 0x2e, 0x3a, 0x2f,
9496 0x28, 0x33, 0x40, 0x42, 0x39, 0x2d, 0x24, 0x21,
9497 0x3b, 0x2f, 0x26, 0x27, 0x2f, 0x30, 0x26, 0x1b,
9498 0x2c, 0x3a, 0x47, 0x48, 0x41, 0x42, 0x52, 0x61,
9499 0x37, 0x3a, 0x3d, 0x3f, 0x43, 0x4c, 0x5a, 0x65,
9500 0x83, 0x70, 0x61, 0x6a, 0x84, 0x98, 0x97, 0x8e,
9501 0x90, 0xb4, 0xd1, 0xbf, 0x85, 0x4f, 0x37, 0x37,
9502 0xa1, 0xbf, 0xda, 0xd6, 0xba, 0xa5, 0xa8, 0xb5,
9503 0x87, 0x8c, 0x8a, 0x78, 0x5b, 0x40, 0x31, 0x2d,
9504 0x6f, 0x42, 0x12, 0x06, 0x1f, 0x3f, 0x4b, 0x49,
9505 0x38, 0x6e, 0x91, 0x8f, 0x9c, 0xc2, 0xcf, 0xbd,
9506 0x40, 0x7a, 0x9e, 0x9b, 0xab, 0xd4, 0xdf, 0xc9,
9507 0x5f, 0x70, 0x76, 0x5e, 0x3b, 0x32, 0x4e, 0x70,
9508 0x96, 0x96, 0x94, 0x91, 0x8c, 0x86, 0x80, 0x7d,
9509 0x85, 0x63, 0x4a, 0x61, 0xa0, 0xdd, 0xfa, 0xfe,
9510 0x56, 0x42, 0x40, 0x6a, 0xa3, 0xb9, 0x9c, 0x74,
9511 0x33, 0x40, 0x5e, 0x6d, 0x4b, 0x1a, 0x17, 0x36,
9512 0xa4, 0x7e, 0x48, 0x1d, 0x0f, 0x19, 0x2e, 0x3d,
9513 0x84, 0x61, 0x31, 0x23, 0x48, 0x6a, 0x4f, 0x19,
9514 0x00, 0x00, 0x2f, 0x87, 0xc4, 0xce, 0xcc, 0xd4,
9515 0xe7, 0xa6, 0x6e, 0x76, 0xa6, 0xb3, 0x81, 0x46,
9516 0xad, 0x80, 0x51, 0x4b, 0x77, 0xb8, 0xed, 0xff,
9517 0xbd, 0xcf, 0xb7, 0x7f, 0x70, 0x7d, 0x5d, 0x1e,
9518 0x1d, 0x53, 0x7c, 0x71, 0x4f, 0x3d, 0x39, 0x37,
9519 0x5a, 0x36, 0x13, 0x11, 0x33, 0x5d, 0x78, 0x82,
9520 0x45, 0x51, 0x6b, 0x8a, 0x98, 0x81, 0x4e, 0x23,
9521 0x3e, 0x1c, 0x1c, 0x64, 0xc0, 0xd1, 0x83, 0x2a,
9522 0x2a, 0x69, 0xbd, 0xe8, 0xf1, 0xec, 0xaa, 0x45,
9523 0x5d, 0x63, 0x6d, 0x74, 0x76, 0x73, 0x6c, 0x68,
9524 0x73, 0x79, 0x7e, 0x7b, 0x75, 0x73, 0x77, 0x7d,
9525 0x85, 0x7e, 0x77, 0x77, 0x7b, 0x7a, 0x74, 0x6d,
9526 0x71, 0x7b, 0x88, 0x91, 0x91, 0x87, 0x79, 0x70,
9527 0x63, 0x6a, 0x73, 0x7a, 0x7b, 0x75, 0x6d, 0x67,
9528 0x6a, 0x63, 0x5b, 0x58, 0x58, 0x55, 0x4d, 0x45,
9529 0x3e, 0x36, 0x3a, 0x24, 0x38, 0x74, 0x6e, 0x4f,
9530 0x52, 0x53, 0x52, 0x4d, 0x43, 0x33, 0x24, 0x1b,
9531 0x5e, 0xb9, 0xf1, 0xbe, 0x61, 0x38, 0x4a, 0x65,
9532 0x66, 0x4a, 0x37, 0x37, 0x34, 0x2e, 0x3d, 0x56,
9533 0x2c, 0x4e, 0x5f, 0x51, 0x4c, 0x67, 0x8b, 0x9e,
9534 0xa6, 0x9e, 0x8f, 0x7e, 0x70, 0x6a, 0x6c, 0x70,
9535 0x55, 0x2c, 0x1c, 0x42, 0x71, 0x7e, 0x71, 0x66,
9536 0x4a, 0x7b, 0x9c, 0x87, 0x5c, 0x48, 0x4c, 0x54,
9537 0x62, 0x6f, 0x72, 0x6e, 0x81, 0xa8, 0xbf, 0xbf,
9538 0x7e, 0x47, 0x3a, 0x6a, 0x88, 0x7e, 0x89, 0xae,
9539 0xbc, 0xd6, 0xd4, 0x9b, 0x4b, 0x1d, 0x1f, 0x31,
9540 0x2e, 0x25, 0x19, 0x14, 0x24, 0x50, 0x87, 0xaf,
9541 0xdb, 0xb0, 0x76, 0x4c, 0x38, 0x2d, 0x1e, 0x11,
9542 0x52, 0x5b, 0x5c, 0x4c, 0x3b, 0x41, 0x60, 0x7e,
9543 0x87, 0xae, 0xd7, 0xdf, 0xc2, 0x9d, 0x87, 0x81,
9544 0xe1, 0xe2, 0xd6, 0xb2, 0x7d, 0x4a, 0x2a, 0x1d,
9545 0x50, 0x74, 0x94, 0x91, 0x73, 0x60, 0x6b, 0x7f,
9546 0x90, 0x8f, 0x78, 0x43, 0x0c, 0x00, 0x1e, 0x44,
9547 0x26, 0x21, 0x20, 0x2a, 0x39, 0x41, 0x3d, 0x36,
9548 0x63, 0x4c, 0x2e, 0x1d, 0x21, 0x34, 0x49, 0x56,
9549 0x90, 0xa4, 0xa0, 0x8a, 0x94, 0xb3, 0xab, 0x85,
9550 0x92, 0x83, 0x6d, 0x64, 0x79, 0x9f, 0xba, 0xc2,
9551 0xdc, 0xf5, 0xf2, 0xaf, 0x51, 0x1e, 0x31, 0x5a,
9552 0x56, 0x51, 0x4a, 0x46, 0x46, 0x4a, 0x51, 0x56,
9553 0x21, 0x4e, 0x94, 0xd2, 0xea, 0xd2, 0x9e, 0x76,
9554 0x69, 0x49, 0x2e, 0x38, 0x66, 0x9a, 0xb9, 0xc3,
9555 0xb2, 0xb7, 0xc5, 0xbd, 0x80, 0x34, 0x1b, 0x2c,
9556 0x54, 0x49, 0x46, 0x58, 0x6c, 0x66, 0x43, 0x21,
9557 0x69, 0x50, 0x79, 0xd5, 0xed, 0xae, 0x81, 0x89,
9558 0xc2, 0x94, 0xb2, 0xfe, 0xdf, 0x6a, 0x4b, 0x88,
9559 0xf5, 0xb4, 0x73, 0x6a, 0x90, 0xad, 0xa1, 0x86,
9560 0xc1, 0x7b, 0x2c, 0x0d, 0x21, 0x3b, 0x3b, 0x2d,
9561 0x17, 0x62, 0x96, 0x70, 0x1f, 0x00, 0x1b, 0x49,
9562 0x1a, 0x1b, 0x33, 0x57, 0x60, 0x4b, 0x3e, 0x44,
9563 0x44, 0x2c, 0x17, 0x1b, 0x33, 0x45, 0x43, 0x39,
9564 0x1a, 0x11, 0x0e, 0x1d, 0x33, 0x3b, 0x2f, 0x20,
9565 0x28, 0x33, 0x3f, 0x40, 0x35, 0x27, 0x1f, 0x1c,
9566 0x11, 0x02, 0x67, 0xce, 0xaa, 0x69, 0x56, 0x45,
9567 0x37, 0x41, 0x51, 0x61, 0x6c, 0x71, 0x72, 0x71,
9568 0x71, 0x76, 0x79, 0x76, 0x71, 0x70, 0x77, 0x7e,
9569 0x75, 0x6e, 0x67, 0x66, 0x69, 0x68, 0x61, 0x5a,
9570 0x5c, 0x69, 0x7d, 0x8d, 0x94, 0x8f, 0x84, 0x7c,
9571 0x72, 0x72, 0x72, 0x71, 0x70, 0x6f, 0x6f, 0x6e,
9572 0x60, 0x59, 0x50, 0x4d, 0x4c, 0x49, 0x40, 0x39,
9573 0x2b, 0x2b, 0x3e, 0x48, 0x65, 0x77, 0x63, 0x6d,
9574 0x52, 0x51, 0x4f, 0x51, 0x56, 0x5e, 0x66, 0x6c,
9575 0x59, 0x50, 0x3c, 0x3a, 0x60, 0x84, 0x72, 0x45,
9576 0x27, 0x0f, 0x53, 0xd7, 0xff, 0xca, 0xc2, 0xfa,
9577 0x9f, 0x6d, 0x44, 0x42, 0x4f, 0x57, 0x65, 0x77,
9578 0xaa, 0x96, 0x7a, 0x62, 0x55, 0x4f, 0x4c, 0x4a,
9579 0x4f, 0x85, 0xaf, 0xa7, 0x8f, 0x84, 0x81, 0x7b,
9580 0x4f, 0x2b, 0x11, 0x19, 0x2a, 0x2c, 0x27, 0x27,
9581 0x5d, 0x78, 0x82, 0x79, 0x87, 0xa8, 0xb1, 0xa1,
9582 0x90, 0x5f, 0x2c, 0x30, 0x70, 0xb7, 0xce, 0xc3,
9583 0xac, 0x82, 0x71, 0x85, 0x87, 0x65, 0x49, 0x48,
9584 0x58, 0x41, 0x28, 0x25, 0x42, 0x6f, 0x99, 0xb1,
9585 0xa2, 0x7d, 0x50, 0x38, 0x36, 0x35, 0x28, 0x19,
9586 0x4b, 0x51, 0x4d, 0x3e, 0x39, 0x58, 0x98, 0xcc,
9587 0xc2, 0x86, 0x48, 0x3b, 0x57, 0x67, 0x53, 0x35,
9588 0x37, 0x2c, 0x39, 0x70, 0xb2, 0xcb, 0xac, 0x82,
9589 0x5f, 0x7f, 0xa6, 0xbc, 0xc2, 0xca, 0xde, 0xf0,
9590 0x90, 0xa2, 0xa8, 0x91, 0x74, 0x7b, 0xab, 0xdb,
9591 0x70, 0x49, 0x1f, 0x17, 0x32, 0x56, 0x6b, 0x70,
9592 0x4f, 0x51, 0x47, 0x2d, 0x17, 0x21, 0x49, 0x6f,
9593 0x8c, 0x5e, 0x5c, 0x98, 0xc1, 0xaa, 0x80, 0x6e,
9594 0x54, 0x48, 0x6c, 0xb9, 0xe0, 0xc3, 0x9a, 0x8c,
9595 0x2f, 0x72, 0xa6, 0x89, 0x39, 0x0c, 0x29, 0x5c,
9596 0x0f, 0x1d, 0x33, 0x4a, 0x5b, 0x63, 0x64, 0x63,
9597 0x56, 0x7a, 0x88, 0x5e, 0x23, 0x20, 0x66, 0xb1,
9598 0x9c, 0xcc, 0xf9, 0xf4, 0xc5, 0x9b, 0x94, 0xa0,
9599 0x74, 0x7b, 0x9a, 0xbb, 0xb5, 0x9a, 0x9d, 0xb9,
9600 0x96, 0x5e, 0x22, 0x13, 0x2c, 0x43, 0x3c, 0x29,
9601 0x48, 0x57, 0x61, 0x5a, 0x53, 0x64, 0x8c, 0xaf,
9602 0xba, 0xff, 0xf9, 0x84, 0x36, 0x4e, 0x6f, 0x67,
9603 0x73, 0x96, 0xc3, 0xd8, 0xc8, 0x9b, 0x6b, 0x4c,
9604 0x7a, 0x9a, 0xb9, 0xba, 0xa6, 0xa1, 0xb7, 0xd2,
9605 0xc8, 0x71, 0x3e, 0x66, 0xa3, 0xbc, 0xce, 0xe6,
9606 0xbe, 0x4e, 0x15, 0x47, 0x6a, 0x40, 0x19, 0x1f,
9607 0x6a, 0x93, 0xbf, 0xc8, 0xa9, 0x7d, 0x5e, 0x51,
9608 0xba, 0xbe, 0xcc, 0xe5, 0xf6, 0xec, 0xc9, 0xaa,
9609 0xbe, 0x96, 0x68, 0x5b, 0x79, 0xae, 0xdd, 0xf6,
9610 0xd5, 0x81, 0x6f, 0x64, 0x3c, 0x6e, 0xac, 0x8b,
9611 0x4d, 0x55, 0x62, 0x6d, 0x74, 0x74, 0x71, 0x6f,
9612 0x6a, 0x70, 0x77, 0x79, 0x79, 0x7e, 0x8a, 0x94,
9613 0x8f, 0x87, 0x80, 0x7f, 0x82, 0x81, 0x79, 0x72,
9614 0x65, 0x71, 0x82, 0x8f, 0x90, 0x87, 0x78, 0x6d,
9615 0x6e, 0x72, 0x77, 0x7a, 0x78, 0x72, 0x69, 0x64,
9616 0x69, 0x61, 0x58, 0x54, 0x54, 0x50, 0x47, 0x3f,
9617 0x47, 0x2f, 0x1d, 0x1d, 0x4b, 0x5d, 0x4a, 0x67,
9618 0x64, 0x59, 0x4c, 0x48, 0x53, 0x6c, 0x89, 0x9c,
9619 0x67, 0x6d, 0x76, 0x7d, 0x7a, 0x63, 0x39, 0x16,
9620 0x31, 0x4d, 0x77, 0x9e, 0xb8, 0xc1, 0xbc, 0xb4,
9621 0xe7, 0xb6, 0x89, 0x61, 0x22, 0x00, 0x2d, 0x85,
9622 0x76, 0x55, 0x33, 0x2a, 0x38, 0x44, 0x3e, 0x33,
9623 0xc5, 0xcd, 0xa3, 0x59, 0x41, 0x60, 0x6a, 0x52,
9624 0x4e, 0x58, 0x76, 0x88, 0x66, 0x3a, 0x4a, 0x7d,
9625 0x58, 0x77, 0x7a, 0x5c, 0x54, 0x70, 0x7e, 0x72,
9626 0x72, 0x3d, 0x24, 0x58, 0xad, 0xdd, 0xdb, 0xc9,
9627 0xaf, 0xad, 0xab, 0xb7, 0xcd, 0xc0, 0x74, 0x23,
9628 0x64, 0x45, 0x2b, 0x37, 0x61, 0x8a, 0x99, 0x97,
9629 0xa7, 0x8f, 0x76, 0x6b, 0x67, 0x53, 0x2b, 0x09,
9630 0x37, 0x38, 0x3e, 0x48, 0x57, 0x6a, 0x7a, 0x84,
9631 0xf6, 0xac, 0x5c, 0x42, 0x57, 0x62, 0x46, 0x21,
9632 0x25, 0x2e, 0x52, 0x78, 0x70, 0x4b, 0x47, 0x5f,
9633 0x6b, 0x40, 0x25, 0x47, 0x94, 0xd0, 0xd9, 0xc9,
9634 0x2f, 0x44, 0x68, 0x90, 0xb3, 0xcd, 0xdc, 0xe3,
9635 0x45, 0x43, 0x42, 0x45, 0x4f, 0x5d, 0x6c, 0x75,
9636 0x6d, 0x56, 0x42, 0x48, 0x69, 0x8e, 0xa6, 0xae,
9637 0xeb, 0xbd, 0x94, 0x97, 0xaf, 0xa7, 0x70, 0x37,
9638 0x33, 0x40, 0x49, 0x3e, 0x28, 0x1a, 0x1f, 0x2b,
9639 0x28, 0x55, 0x8f, 0xb2, 0xb0, 0x95, 0x77, 0x65,
9640 0x49, 0x57, 0x36, 0x22, 0x3d, 0x41, 0x41, 0x66,
9641 0x62, 0x51, 0x43, 0x47, 0x55, 0x58, 0x49, 0x38,
9642 0x60, 0x6c, 0x70, 0x69, 0x66, 0x64, 0x55, 0x42,
9643 0x4f, 0x86, 0xc5, 0xdc, 0xc8, 0xab, 0x9e, 0xa0,
9644 0x8b, 0x54, 0x48, 0x81, 0xb0, 0xa2, 0x7f, 0x6f,
9645 0x4f, 0x4a, 0x31, 0x28, 0x65, 0xc7, 0xf8, 0xf2,
9646 0xc5, 0xc2, 0x9b, 0x4b, 0x0b, 0x23, 0x8e, 0xf3,
9647 0x60, 0x68, 0x91, 0xb8, 0xa1, 0x69, 0x5f, 0x7f,
9648 0x7e, 0xa0, 0xc3, 0xcb, 0xbf, 0xba, 0xca, 0xde,
9649 0x95, 0x5d, 0x44, 0x62, 0x7d, 0x7e, 0x8e, 0xaf,
9650 0xd2, 0xa8, 0x7c, 0x71, 0x7e, 0x7f, 0x65, 0x48,
9651 0x88, 0x7c, 0x9a, 0xcd, 0xc7, 0x87, 0x5b, 0x5c,
9652 0x6a, 0x4e, 0x69, 0xc6, 0xff, 0xe7, 0x9d, 0x6d,
9653 0x38, 0x60, 0x93, 0xaf, 0xa8, 0x8b, 0x6e, 0x5d,
9654 0x86, 0x3e, 0x58, 0x47, 0x2e, 0x85, 0xbe, 0xbb,
9655 0xa0, 0x82, 0x68, 0x6d, 0x86, 0x91, 0x80, 0x69,
9656 0x75, 0x7b, 0x85, 0x8d, 0x92, 0x91, 0x8f, 0x8c,
9657 0x79, 0x81, 0x89, 0x8a, 0x81, 0x71, 0x62, 0x59,
9658 0x6d, 0x77, 0x83, 0x86, 0x81, 0x7c, 0x7b, 0x7c,
9659 0x72, 0x6c, 0x62, 0x5b, 0x5b, 0x62, 0x6b, 0x72,
9660 0x6e, 0x66, 0x5c, 0x57, 0x54, 0x4f, 0x45, 0x3d,
9661 0x31, 0x8f, 0xd3, 0xe1, 0xeb, 0xe3, 0xa8, 0x68,
9662 0x2f, 0x5d, 0x94, 0xb6, 0xc2, 0xcb, 0xd9, 0xe4,
9663 0x5d, 0x55, 0x58, 0x4f, 0x22, 0x05, 0x3d, 0x94,
9664 0xe4, 0xca, 0xb2, 0xb5, 0xc6, 0xc8, 0xb1, 0x97,
9665 0xe3, 0x7b, 0x59, 0x9e, 0xb1, 0x5f, 0x20, 0x25,
9666 0x4a, 0x6d, 0x76, 0x59, 0x44, 0x41, 0x2e, 0x0e,
9667 0xaa, 0xe6, 0xf0, 0xa9, 0x68, 0x5c, 0x5c, 0x4d,
9668 0x5b, 0x62, 0x6c, 0x73, 0x70, 0x62, 0x4d, 0x3e,
9669 0x54, 0x59, 0x5e, 0x5e, 0x5c, 0x5b, 0x5d, 0x60,
9670 0x7f, 0x59, 0x46, 0x80, 0xc8, 0xc4, 0xae, 0xc0,
9671 0x8e, 0x92, 0xb4, 0xc0, 0xb2, 0xba, 0xa2, 0x58,
9672 0x35, 0x5c, 0x5f, 0x40, 0x4c, 0x8d, 0xb5, 0xaf,
9673 0x97, 0xa5, 0x92, 0x76, 0x65, 0x3c, 0x16, 0x16,
9674 0x2e, 0x33, 0x3c, 0x49, 0x5b, 0x6d, 0x7d, 0x87,
9675 0x48, 0x31, 0x24, 0x35, 0x54, 0x5b, 0x3f, 0x1e,
9676 0x37, 0x2b, 0x31, 0x3d, 0x2d, 0x12, 0x1f, 0x46,
9677 0x30, 0x3c, 0x4f, 0x60, 0x62, 0x4f, 0x31, 0x19,
9678 0x1d, 0x27, 0x39, 0x4e, 0x61, 0x6f, 0x78, 0x7c,
9679 0x69, 0x60, 0x52, 0x45, 0x3c, 0x3a, 0x3d, 0x3f,
9680 0x29, 0x36, 0x58, 0x8b, 0xbb, 0xd0, 0xc7, 0xb7,
9681 0xe5, 0xb9, 0x85, 0x69, 0x5e, 0x45, 0x15, 0x00,
9682 0x1e, 0x58, 0x8f, 0x8c, 0x5f, 0x42, 0x54, 0x74,
9683 0xda, 0xbb, 0x9b, 0x8f, 0x8c, 0x75, 0x44, 0x1a,
9684 0x3d, 0x4d, 0x2f, 0x1d, 0x36, 0x32, 0x29, 0x47,
9685 0x30, 0x3e, 0x3e, 0x1f, 0x00, 0x07, 0x40, 0x78,
9686 0xac, 0xd1, 0xf8, 0xf5, 0xc6, 0x9e, 0xa6, 0xc7,
9687 0xe8, 0xe2, 0xd8, 0xc9, 0xb1, 0x8d, 0x65, 0x4b,
9688 0x07, 0x5b, 0xb3, 0xd1, 0xba, 0x9c, 0x8e, 0x8c,
9689 0x10, 0x24, 0x51, 0x85, 0x9a, 0x85, 0x5c, 0x41,
9690 0x5a, 0x55, 0x69, 0xa0, 0xd0, 0xc0, 0x72, 0x27,
9691 0x06, 0x79, 0xca, 0xac, 0x6e, 0x65, 0x7f, 0x90,
9692 0xc9, 0xbf, 0xa1, 0x74, 0x4f, 0x4e, 0x71, 0x94,
9693 0x4e, 0x62, 0x5c, 0x49, 0x63, 0x9c, 0xad, 0x96,
9694 0x6c, 0x89, 0x9b, 0x83, 0x59, 0x4e, 0x70, 0x9a,
9695 0x93, 0x8e, 0xb5, 0xf5, 0xf9, 0xb2, 0x68, 0x49,
9696 0x94, 0xab, 0x90, 0x54, 0x4e, 0x6e, 0x55, 0x12,
9697 0x31, 0x68, 0xaa, 0xc9, 0xbb, 0x98, 0x7c, 0x71,
9698 0x37, 0x24, 0x31, 0x20, 0x1c, 0x22, 0x18, 0x40,
9699 0x74, 0x6c, 0x61, 0x59, 0x57, 0x55, 0x52, 0x4f,
9700 0x69, 0x6e, 0x75, 0x7b, 0x7e, 0x7d, 0x7a, 0x77,
9701 0x85, 0x73, 0x63, 0x64, 0x72, 0x7a, 0x74, 0x69,
9702 0x75, 0x7b, 0x82, 0x80, 0x79, 0x73, 0x73, 0x76,
9703 0x89, 0x83, 0x7a, 0x71, 0x6c, 0x6c, 0x6f, 0x71,
9704 0x77, 0x6e, 0x65, 0x60, 0x5e, 0x59, 0x50, 0x47,
9705 0x30, 0x57, 0xa4, 0xc6, 0xc0, 0xd5, 0xc4, 0x73,
9706 0x4a, 0x49, 0x2e, 0x1b, 0x44, 0x8a, 0x96, 0x73,
9707 0xa8, 0x64, 0x41, 0x6d, 0xa8, 0xbd, 0xbf, 0xc6,
9708 0xb2, 0xa6, 0x9b, 0x9a, 0x9f, 0x9e, 0x93, 0x87,
9709 0x48, 0x12, 0x00, 0x48, 0xb8, 0xf7, 0xeb, 0xc9,
9710 0x75, 0x85, 0x73, 0x41, 0x2e, 0x47, 0x5d, 0x5b,
9711 0xcf, 0xdb, 0xc2, 0x90, 0x81, 0x93, 0x88, 0x64,
9712 0x43, 0x3a, 0x32, 0x31, 0x33, 0x30, 0x25, 0x1a,
9713 0x3a, 0x6c, 0x98, 0x92, 0x6d, 0x61, 0x83, 0xae,
9714 0xc2, 0xa4, 0x73, 0x6d, 0x8d, 0x88, 0x73, 0x79,
9715 0x6d, 0x70, 0x99, 0xb8, 0xb7, 0xbc, 0xa9, 0x73,
9716 0x3c, 0x4c, 0x51, 0x42, 0x36, 0x46, 0x6d, 0x8e,
9717 0x99, 0xac, 0xa0, 0x8a, 0x76, 0x43, 0x0f, 0x05,
9718 0x19, 0x25, 0x3a, 0x55, 0x72, 0x8c, 0x9f, 0xaa,
9719 0xa7, 0x94, 0x78, 0x5f, 0x4e, 0x46, 0x43, 0x41,
9720 0x24, 0x3b, 0x73, 0xa6, 0x9c, 0x67, 0x4c, 0x55,
9721 0x12, 0x4d, 0x8b, 0x98, 0x73, 0x4a, 0x3b, 0x40,
9722 0x4a, 0x4f, 0x55, 0x57, 0x52, 0x45, 0x37, 0x2e,
9723 0x40, 0x3f, 0x40, 0x46, 0x52, 0x63, 0x74, 0x7e,
9724 0x8b, 0x79, 0x66, 0x61, 0x66, 0x62, 0x51, 0x3f,
9725 0x00, 0x05, 0x4f, 0x99, 0xcb, 0xd9, 0xcd, 0xbe,
9726 0x62, 0x85, 0x9d, 0x89, 0x5e, 0x51, 0x74, 0x9f,
9727 0x9b, 0xb3, 0xc1, 0xa8, 0x74, 0x49, 0x3e, 0x44,
9728 0x60, 0xab, 0xb9, 0x87, 0x52, 0x28, 0x43, 0x97,
9729 0x95, 0xa6, 0xb4, 0xad, 0x97, 0x85, 0x84, 0x8a,
9730 0xc1, 0xa2, 0x9e, 0xb4, 0xab, 0x8c, 0x99, 0xc6,
9731 0xcc, 0xd6, 0xc9, 0x93, 0x53, 0x3e, 0x5f, 0x89,
9732 0x98, 0x7f, 0x4a, 0x2e, 0x5b, 0x99, 0x89, 0x4a,
9733 0x72, 0x6d, 0x8b, 0xb2, 0x98, 0x4c, 0x24, 0x2d,
9734 0x23, 0x50, 0x6f, 0x50, 0x10, 0x00, 0x0a, 0x35,
9735 0x79, 0xa5, 0xa9, 0x73, 0x4d, 0x55, 0x5c, 0x4f,
9736 0x44, 0x44, 0x3f, 0x33, 0x2f, 0x42, 0x69, 0x89,
9737 0x7d, 0x53, 0x1b, 0x21, 0x8b, 0xff, 0xff, 0xd9,
9738 0xb9, 0xbb, 0xb1, 0x92, 0x6e, 0x5c, 0x63, 0x72,
9739 0xab, 0x6d, 0x3b, 0x3c, 0x58, 0x78, 0xa6, 0xd0,
9740 0xda, 0xc4, 0xa6, 0x83, 0x5e, 0x4c, 0x5d, 0x7b,
9741 0x87, 0xa5, 0xc9, 0xd9, 0xd4, 0xca, 0xc9, 0xcd,
9742 0xf4, 0xbc, 0x6f, 0x29, 0x68, 0xdc, 0xad, 0x33,
9743 0x41, 0x52, 0x66, 0x70, 0x6c, 0x63, 0x5d, 0x5c,
9744 0x76, 0x78, 0x7c, 0x7f, 0x7f, 0x7d, 0x7a, 0x77,
9745 0x98, 0x88, 0x78, 0x77, 0x81, 0x82, 0x75, 0x66,
9746 0x78, 0x7e, 0x83, 0x81, 0x79, 0x73, 0x72, 0x75,
9747 0x70, 0x70, 0x71, 0x72, 0x74, 0x76, 0x78, 0x79,
9748 0x6e, 0x66, 0x5d, 0x59, 0x57, 0x53, 0x4a, 0x42,
9749 0x3d, 0x39, 0x81, 0xb3, 0x77, 0x4b, 0x86, 0xcd,
9750 0xac, 0x9a, 0x51, 0x0b, 0x22, 0x6c, 0x6a, 0x2b,
9751 0x43, 0x0c, 0x00, 0x2a, 0x7e, 0xb8, 0xd7, 0xe8,
9752 0xbe, 0xc2, 0xbf, 0xae, 0x95, 0x84, 0x81, 0x85,
9753 0x95, 0x98, 0x6e, 0x42, 0x6d, 0xbf, 0xb8, 0x6f,
9754 0x2b, 0x80, 0xcd, 0xdd, 0xcc, 0xb0, 0x7d, 0x49,
9755 0x6b, 0x8b, 0x9e, 0x99, 0x94, 0x89, 0x60, 0x2e,
9756 0x6b, 0x65, 0x51, 0x32, 0x22, 0x38, 0x6e, 0x9d,
9757 0x90, 0x9b, 0x9c, 0x87, 0x6c, 0x69, 0x84, 0xa1,
9758 0x9f, 0x94, 0x61, 0x3e, 0x51, 0x65, 0x6b, 0x7b,
9759 0x8c, 0x71, 0x76, 0x86, 0x82, 0x84, 0x8a, 0x80,
9760 0x2f, 0x2a, 0x39, 0x4a, 0x37, 0x26, 0x52, 0x99,
9761 0xb7, 0xc7, 0xb9, 0xa4, 0x93, 0x5f, 0x24, 0x15,
9762 0x55, 0x5f, 0x70, 0x81, 0x90, 0x99, 0x9d, 0x9e,
9763 0x3b, 0x48, 0x50, 0x4d, 0x4d, 0x66, 0x96, 0xbe,
9764 0xce, 0xc8, 0xd2, 0xd7, 0xae, 0x6d, 0x54, 0x62,
9765 0x2c, 0x53, 0x74, 0x6a, 0x43, 0x30, 0x45, 0x64,
9766 0xc1, 0xa6, 0x7a, 0x51, 0x38, 0x32, 0x3a, 0x42,
9767 0x54, 0x4f, 0x47, 0x41, 0x42, 0x48, 0x50, 0x56,
9768 0x87, 0x7e, 0x77, 0x78, 0x75, 0x5d, 0x34, 0x13,
9769 0x5a, 0x78, 0x99, 0xa8, 0xa9, 0xb0, 0xc7, 0xdd,
9770 0xa3, 0x9f, 0x99, 0x96, 0x98, 0x9d, 0xa3, 0xa8,
9771 0x5b, 0x59, 0x5c, 0x6a, 0x76, 0x75, 0x64, 0x53,
9772 0x7b, 0xa9, 0xbb, 0xcf, 0xed, 0xc5, 0x83, 0x77,
9773 0xa9, 0xb4, 0xc4, 0xd2, 0xdc, 0xe3, 0xea, 0xee,
9774 0xe7, 0x87, 0x48, 0x52, 0x51, 0x3b, 0x5c, 0xa2,
9775 0x7e, 0xa3, 0xaf, 0x78, 0x26, 0x08, 0x36, 0x73,
9776 0x91, 0xce, 0xe1, 0x9b, 0x4b, 0x47, 0x81, 0xb7,
9777 0x75, 0x83, 0xa4, 0xb6, 0x99, 0x69, 0x5f, 0x75,
9778 0x99, 0x9b, 0x95, 0x85, 0x7e, 0x97, 0xca, 0xf5,
9779 0xe0, 0xbb, 0xb0, 0xc0, 0xaa, 0x6b, 0x45, 0x48,
9780 0x2d, 0x2e, 0x31, 0x3a, 0x4f, 0x73, 0x9d, 0xb9,
9781 0x69, 0x7d, 0xb2, 0xdd, 0xc4, 0x8b, 0x86, 0xac,
9782 0x9e, 0x7e, 0x5b, 0x50, 0x57, 0x58, 0x47, 0x33,
9783 0x6d, 0x59, 0x43, 0x39, 0x42, 0x67, 0xa5, 0xd9,
9784 0xe1, 0xbf, 0xbd, 0xd2, 0xb9, 0x82, 0x80, 0xab,
9785 0x96, 0x71, 0x4c, 0x48, 0x67, 0x8d, 0xa1, 0xa6,
9786 0xdd, 0xf2, 0xff, 0xdb, 0xaf, 0xb5, 0xae, 0x8d,
9787 0x76, 0x72, 0x6d, 0x6a, 0x6c, 0x72, 0x79, 0x7d,
9788 0x74, 0x74, 0x74, 0x74, 0x73, 0x70, 0x6e, 0x6d,
9789 0x81, 0x80, 0x7b, 0x73, 0x69, 0x61, 0x5c, 0x5b,
9790 0x5d, 0x6a, 0x78, 0x7d, 0x79, 0x71, 0x6c, 0x6c,
9791 0x73, 0x74, 0x74, 0x74, 0x71, 0x6c, 0x68, 0x64,
9792 0x68, 0x60, 0x58, 0x54, 0x54, 0x50, 0x47, 0x40,
9793 0x43, 0x3d, 0x27, 0x3a, 0x52, 0x1f, 0x04, 0x3b,
9794 0x7a, 0x83, 0x75, 0x5c, 0x67, 0x8c, 0x93, 0x7d,
9795 0xaf, 0xc7, 0xc8, 0x92, 0x47, 0x3b, 0x89, 0xe2,
9796 0xc3, 0xd1, 0xd2, 0xb2, 0x81, 0x62, 0x62, 0x70,
9797 0xa4, 0xdf, 0xd1, 0x6d, 0x35, 0x4d, 0x53, 0x2f,
9798 0x6e, 0xa4, 0xc1, 0xaa, 0x98, 0xab, 0xc0, 0xc2,
9799 0x0e, 0x4b, 0x81, 0x7d, 0x4f, 0x26, 0x15, 0x12,
9800 0x5d, 0x67, 0x72, 0x77, 0x72, 0x6b, 0x66, 0x65,
9801 0x96, 0x95, 0x8e, 0x80, 0x6f, 0x64, 0x63, 0x66,
9802 0x7d, 0x75, 0x4a, 0x2a, 0x31, 0x39, 0x49, 0x6e,
9803 0x96, 0x72, 0x63, 0x6a, 0x61, 0x53, 0x5c, 0x6e,
9804 0x64, 0x4f, 0x51, 0x5e, 0x4b, 0x2e, 0x47, 0x7e,
9805 0xa1, 0xad, 0x9d, 0x8c, 0x84, 0x56, 0x1d, 0x0c,
9806 0xaf, 0xb3, 0xb9, 0xb8, 0xae, 0x9d, 0x8a, 0x7e,
9807 0x4f, 0x78, 0xa1, 0xa3, 0x86, 0x6c, 0x6e, 0x7b,
9808 0x76, 0x85, 0xb0, 0xd0, 0xb0, 0x65, 0x38, 0x37,
9809 0x22, 0x2f, 0x42, 0x55, 0x70, 0x97, 0xc4, 0xe4,
9810 0xb9, 0xa4, 0x82, 0x5c, 0x3d, 0x29, 0x20, 0x1d,
9811 0x4b, 0x43, 0x39, 0x2f, 0x2b, 0x2d, 0x32, 0x36,
9812 0x60, 0x4d, 0x39, 0x34, 0x3a, 0x38, 0x29, 0x19,
9813 0x4a, 0x5d, 0x68, 0x5e, 0x52, 0x65, 0x98, 0xc7,
9814 0xa2, 0xb4, 0xd1, 0xef, 0xf9, 0xe5, 0xbd, 0x9e,
9815 0x77, 0x5b, 0x39, 0x29, 0x30, 0x41, 0x4d, 0x52,
9816 0x5c, 0x94, 0x96, 0x6f, 0x49, 0x09, 0x00, 0x07,
9817 0x36, 0x72, 0xaf, 0xb7, 0x92, 0x74, 0x79, 0x8e,
9818 0x76, 0x48, 0x39, 0x44, 0x29, 0x15, 0x65, 0xdd,
9819 0xb8, 0xd4, 0xf2, 0xf2, 0xca, 0x89, 0x48, 0x22,
9820 0x51, 0x42, 0x46, 0x5b, 0x5b, 0x45, 0x41, 0x50,
9821 0x48, 0x69, 0x72, 0x57, 0x4c, 0x6b, 0x91, 0xa2,
9822 0x89, 0x6c, 0x63, 0x90, 0xd8, 0xfe, 0xea, 0xc6,
9823 0xd3, 0xa0, 0x69, 0x3a, 0x0a, 0x0a, 0x6a, 0xdd,
9824 0xd0, 0xa5, 0x6c, 0x46, 0x49, 0x6f, 0xa0, 0xc0,
9825 0x92, 0xaa, 0xdd, 0xf8, 0xc7, 0x7e, 0x76, 0xa0,
9826 0xbd, 0xa7, 0x88, 0x6f, 0x61, 0x55, 0x48, 0x3d,
9827 0x3f, 0x5f, 0x6b, 0x4a, 0x1f, 0x1a, 0x3d, 0x60,
9828 0xc9, 0xdc, 0xc0, 0x7f, 0x62, 0x62, 0x36, 0x00,
9829 0xa7, 0x5b, 0x16, 0x1e, 0x61, 0x92, 0x87, 0x63,
9830 0x1e, 0x82, 0x6f, 0x2b, 0x4a, 0x78, 0x5c, 0x27,
9831 0x5f, 0x61, 0x64, 0x65, 0x67, 0x6d, 0x76, 0x7e,
9832 0x7d, 0x7c, 0x7a, 0x77, 0x76, 0x76, 0x76, 0x76,
9833 0x79, 0x71, 0x63, 0x57, 0x53, 0x5b, 0x69, 0x74,
9834 0x55, 0x6a, 0x86, 0x98, 0x9c, 0x96, 0x90, 0x8d,
9835 0x79, 0x7a, 0x7a, 0x7a, 0x77, 0x72, 0x6e, 0x6b,
9836 0x70, 0x69, 0x61, 0x5e, 0x5e, 0x5b, 0x53, 0x4c,
9837 0x1b, 0x3c, 0x24, 0x3f, 0x8f, 0x69, 0x33, 0x6d,
9838 0x2f, 0x1d, 0x26, 0x47, 0x51, 0x42, 0x48, 0x63,
9839 0xe0, 0x9e, 0x5e, 0x63, 0xa1, 0xc8, 0xa8, 0x70,
9840 0x73, 0x86, 0x90, 0x7c, 0x58, 0x45, 0x4f, 0x61,
9841 0x4d, 0x7e, 0x9a, 0x7d, 0x50, 0x40, 0x48, 0x50,
9842 0x14, 0x75, 0xcb, 0xd6, 0xbf, 0xb1, 0xa1, 0x8c,
9843 0x79, 0x82, 0x80, 0x60, 0x2e, 0x18, 0x3a, 0x69,
9844 0x94, 0x80, 0x77, 0x8c, 0xa5, 0x99, 0x62, 0x2d,
9845 0x3b, 0x68, 0x96, 0x9a, 0x7b, 0x5f, 0x60, 0x6d,
9846 0x55, 0x47, 0x32, 0x39, 0x45, 0x37, 0x47, 0x84,
9847 0x6f, 0x6b, 0x73, 0x87, 0x82, 0x5d, 0x49, 0x56,
9848 0x77, 0x67, 0x5b, 0x5c, 0x5d, 0x5b, 0x60, 0x6b,
9849 0x80, 0x94, 0x94, 0x95, 0x99, 0x6a, 0x24, 0x07,
9850 0x88, 0x99, 0xb1, 0xc7, 0xd1, 0xce, 0xc3, 0xbb,
9851 0xb4, 0xd2, 0xed, 0xeb, 0xd1, 0xbd, 0xc0, 0xcc,
9852 0xce, 0xa3, 0x78, 0x56, 0x27, 0x03, 0x16, 0x44,
9853 0x54, 0x4d, 0x4f, 0x62, 0x7d, 0x8b, 0x84, 0x77,
9854 0xb1, 0x93, 0x64, 0x3a, 0x25, 0x26, 0x36, 0x44,
9855 0x1e, 0x23, 0x2e, 0x42, 0x5d, 0x7c, 0x98, 0xa8,
9856 0xdf, 0xae, 0x6f, 0x45, 0x3b, 0x42, 0x48, 0x4a,
9857 0x09, 0x21, 0x39, 0x3f, 0x3e, 0x4f, 0x76, 0x98,
9858 0xc9, 0xdd, 0xe9, 0xd6, 0xa8, 0x7d, 0x66, 0x61,
9859 0x57, 0x67, 0x6d, 0x56, 0x34, 0x29, 0x40, 0x5c,
9860 0xa2, 0x99, 0x6f, 0x78, 0xba, 0xbf, 0x91, 0x85,
9861 0x7d, 0x9e, 0xc7, 0xda, 0xc2, 0x88, 0x46, 0x1b,
9862 0x32, 0x23, 0x32, 0x52, 0x4e, 0x3b, 0x5a, 0x98,
9863 0xff, 0xe0, 0x84, 0x2d, 0x00, 0x03, 0x2a, 0x4d,
9864 0x8e, 0x63, 0x4c, 0x53, 0x45, 0x31, 0x4f, 0x8a,
9865 0x8a, 0x9b, 0x7e, 0x3c, 0x28, 0x4f, 0x6a, 0x62,
9866 0x30, 0x49, 0x67, 0x78, 0x7c, 0x80, 0x8a, 0x95,
9867 0xa1, 0xcf, 0xe1, 0xc5, 0xb7, 0xc3, 0xb6, 0x94,
9868 0x77, 0x5b, 0x3e, 0x3c, 0x58, 0x81, 0xa0, 0xae,
9869 0xa3, 0x87, 0x4f, 0x30, 0x62, 0xb1, 0xbf, 0x99,
9870 0xe3, 0xa4, 0x62, 0x4e, 0x5b, 0x54, 0x24, 0x00,
9871 0x1a, 0x84, 0xeb, 0xff, 0xd7, 0x9b, 0x5d, 0x2f,
9872 0x45, 0x36, 0x1f, 0x16, 0x31, 0x5a, 0x70, 0x6f,
9873 0xea, 0xb7, 0x97, 0xbb, 0xfc, 0xff, 0xc1, 0x73,
9874 0x27, 0xcf, 0xff, 0xb0, 0x6a, 0x77, 0x7c, 0x35,
9875 0x16, 0x3a, 0x64, 0x78, 0x74, 0x6b, 0x6d, 0x75,
9876 0x8a, 0x87, 0x84, 0x82, 0x82, 0x85, 0x89, 0x8b,
9877 0x89, 0x76, 0x64, 0x63, 0x6e, 0x73, 0x6a, 0x5d,
9878 0x65, 0x74, 0x83, 0x86, 0x7a, 0x67, 0x57, 0x4e,
9879 0x6c, 0x6d, 0x6d, 0x6e, 0x70, 0x73, 0x75, 0x76,
9880 0x6b, 0x64, 0x5c, 0x5a, 0x5b, 0x58, 0x51, 0x4a,
9881 0x4b, 0x57, 0x41, 0x3d, 0x4c, 0x3d, 0x6b, 0xe3,
9882 0x95, 0x4a, 0x2c, 0x52, 0x5f, 0x42, 0x49, 0x78,
9883 0x44, 0x7d, 0x9c, 0x77, 0x3c, 0x1e, 0x1a, 0x19,
9884 0x39, 0x48, 0x59, 0x61, 0x64, 0x6c, 0x7d, 0x8c,
9885 0x6c, 0x53, 0x54, 0x73, 0x76, 0x4f, 0x2e, 0x28,
9886 0x44, 0x9a, 0xdb, 0xd0, 0xb0, 0xb1, 0xc2, 0xc8,
9887 0x97, 0x72, 0x59, 0x59, 0x50, 0x3c, 0x3b, 0x4d,
9888 0x9d, 0xa2, 0xa3, 0x9d, 0x98, 0xa1, 0xb7, 0xcb,
9889 0x85, 0x78, 0x6b, 0x69, 0x70, 0x77, 0x78, 0x75,
9890 0x6e, 0x58, 0x44, 0x52, 0x59, 0x34, 0x33, 0x6b,
9891 0x86, 0x95, 0x94, 0x90, 0x87, 0x60, 0x44, 0x4f,
9892 0x52, 0x51, 0x48, 0x45, 0x5b, 0x78, 0x7a, 0x69,
9893 0x74, 0x90, 0x9f, 0xb2, 0xbe, 0x89, 0x33, 0x08,
9894 0x43, 0x5f, 0x8c, 0xba, 0xdb, 0xeb, 0xec, 0xea,
9895 0xd8, 0xd8, 0xd0, 0xbd, 0xa9, 0xa0, 0xa7, 0xb1,
9896 0x5d, 0x5e, 0x76, 0x8f, 0x7e, 0x55, 0x4f, 0x68,
9897 0x52, 0x57, 0x68, 0x87, 0xa3, 0xa9, 0x96, 0x81,
9898 0x0f, 0x38, 0x71, 0x98, 0x93, 0x63, 0x22, 0x00,
9899 0x51, 0x52, 0x57, 0x62, 0x74, 0x8a, 0x9f, 0xac,
9900 0x6f, 0x67, 0x62, 0x67, 0x6a, 0x5a, 0x38, 0x1b,
9901 0x53, 0x4b, 0x3d, 0x33, 0x3c, 0x61, 0x96, 0xbd,
9902 0xe3, 0xcb, 0x9a, 0x5b, 0x26, 0x11, 0x1d, 0x30,
9903 0x49, 0x45, 0x53, 0x7c, 0xa9, 0xb6, 0x9c, 0x7b,
9904 0x83, 0xd3, 0xfe, 0xff, 0xf7, 0xb9, 0x85, 0x92,
9905 0xd9, 0xa6, 0x80, 0x96, 0xce, 0xe3, 0xbd, 0x8a,
9906 0xa0, 0x8e, 0x85, 0x8b, 0x84, 0x64, 0x3d, 0x27,
9907 0x0d, 0x1b, 0x2c, 0x3a, 0x4e, 0x73, 0xa5, 0xcb,
9908 0xa6, 0x97, 0x8a, 0x83, 0x79, 0x6f, 0x6e, 0x74,
9909 0x82, 0x8f, 0x99, 0x9b, 0x92, 0x76, 0x45, 0x19,
9910 0x10, 0x0e, 0x1a, 0x40, 0x6f, 0x87, 0x81, 0x72,
9911 0xb4, 0xb9, 0xaa, 0xa2, 0xc5, 0xe4, 0xba, 0x6f,
9912 0x0a, 0x0c, 0x23, 0x57, 0x94, 0xbd, 0xc3, 0xba,
9913 0xc0, 0xf1, 0xf8, 0xc1, 0x9c, 0xb0, 0xcf, 0xd5,
9914 0xe2, 0x9a, 0x5c, 0x6b, 0xab, 0xc7, 0x9a, 0x5e,
9915 0x73, 0xa2, 0xc0, 0xc1, 0xcb, 0xd6, 0xb7, 0x83,
9916 0x96, 0x55, 0x31, 0x38, 0x28, 0x14, 0x4c, 0xa7,
9917 0xbb, 0xbb, 0xcb, 0xec, 0xff, 0xde, 0x8f, 0x4d,
9918 0x4a, 0x1a, 0x52, 0xbb, 0x76, 0x15, 0x2c, 0x29,
9919 0x37, 0x4a, 0x60, 0x68, 0x65, 0x64, 0x6d, 0x77,
9920 0x78, 0x75, 0x72, 0x71, 0x74, 0x7a, 0x81, 0x86,
9921 0x7c, 0x72, 0x6d, 0x72, 0x78, 0x6e, 0x53, 0x3a,
9922 0x53, 0x5f, 0x6d, 0x74, 0x75, 0x74, 0x77, 0x7b,
9923 0x81, 0x7b, 0x72, 0x69, 0x64, 0x64, 0x67, 0x69,
9924 0x62, 0x5b, 0x54, 0x52, 0x54, 0x52, 0x4b, 0x44,
9925 0x76, 0x7c, 0x69, 0x51, 0x4e, 0x48, 0x30, 0x1f,
9926 0x49, 0x21, 0x12, 0x25, 0x2f, 0x37, 0x6d, 0xb3,
9927 0x9c, 0xd4, 0xe2, 0xa1, 0x57, 0x3a, 0x36, 0x30,
9928 0x46, 0x43, 0x47, 0x5a, 0x75, 0x88, 0x8c, 0x89,
9929 0x7e, 0x51, 0x3f, 0x5d, 0x73, 0x62, 0x49, 0x42,
9930 0x5b, 0xaa, 0xdc, 0xbf, 0x96, 0x9f, 0xc4, 0xdb,
9931 0xcd, 0xbc, 0xcf, 0xfb, 0xfc, 0xcc, 0xac, 0xb1,
9932 0x46, 0x74, 0xa2, 0xa6, 0x8e, 0x88, 0xa8, 0xcd,
9933 0xce, 0x82, 0x3a, 0x3c, 0x75, 0x99, 0x83, 0x5a,
9934 0x4e, 0x44, 0x31, 0x3b, 0x53, 0x49, 0x49, 0x6e,
9935 0x97, 0xb2, 0x9c, 0x75, 0x6a, 0x54, 0x42, 0x50,
9936 0x45, 0x4c, 0x48, 0x40, 0x4a, 0x5f, 0x62, 0x55,
9937 0x6e, 0x7d, 0x7c, 0x85, 0x93, 0x67, 0x1a, 0x00,
9938 0x5a, 0x72, 0x96, 0xb7, 0xc9, 0xc9, 0xbe, 0xb3,
9939 0xad, 0xb5, 0xbd, 0xba, 0xa3, 0x7b, 0x4f, 0x33,
9940 0x3d, 0x53, 0x8a, 0xbc, 0xb2, 0x7e, 0x64, 0x6e,
9941 0x2b, 0x31, 0x3d, 0x48, 0x4e, 0x4b, 0x41, 0x38,
9942 0x2c, 0x23, 0x17, 0x11, 0x19, 0x2b, 0x41, 0x50,
9943 0x61, 0x5b, 0x52, 0x4c, 0x4b, 0x50, 0x57, 0x5c,
9944 0x61, 0x56, 0x4f, 0x56, 0x61, 0x5e, 0x49, 0x34,
9945 0x21, 0x31, 0x4e, 0x71, 0x92, 0xaa, 0xb8, 0xbe,
9946 0xac, 0x7a, 0x40, 0x26, 0x30, 0x41, 0x43, 0x3c,
9947 0x3c, 0x55, 0x78, 0x97, 0xb2, 0xd0, 0xf3, 0xff,
9948 0xcd, 0xea, 0xc9, 0x8d, 0x68, 0x3b, 0x2d, 0x58,
9949 0x65, 0x50, 0x42, 0x55, 0x79, 0x8a, 0x7c, 0x66,
9950 0x67, 0x8e, 0xa6, 0x92, 0x6e, 0x5f, 0x65, 0x6d,
9951 0x4f, 0x41, 0x4b, 0x84, 0xca, 0xe2, 0xbe, 0x8f,
9952 0x67, 0x6f, 0x65, 0x5d, 0x7e, 0xa7, 0x93, 0x5e,
9953 0x50, 0x32, 0x3f, 0x7f, 0xa6, 0x97, 0x83, 0x85,
9954 0xd4, 0x96, 0x50, 0x39, 0x59, 0x89, 0xa8, 0xb2,
9955 0x6b, 0x52, 0x56, 0x78, 0x83, 0x83, 0xac, 0xe8,
9956 0xb7, 0x9c, 0x87, 0x92, 0xb8, 0xd6, 0xdb, 0xd3,
9957 0x99, 0x8a, 0x8b, 0x8f, 0x6f, 0x55, 0x80, 0xcb,
9958 0xbe, 0xb6, 0xaa, 0x9e, 0x97, 0x98, 0x9e, 0xa2,
9959 0xc3, 0xd3, 0xd5, 0xdc, 0xff, 0xff, 0xca, 0x63,
9960 0x56, 0x80, 0x7b, 0x37, 0x0e, 0x39, 0x89, 0xbb,
9961 0x74, 0x92, 0xb3, 0xba, 0x9f, 0x6e, 0x3f, 0x24,
9962 0x24, 0x14, 0x1a, 0x60, 0x61, 0x41, 0x57, 0x40,
9963 0x34, 0x37, 0x43, 0x5a, 0x73, 0x7f, 0x7c, 0x74,
9964 0x7a, 0x78, 0x75, 0x74, 0x79, 0x82, 0x8b, 0x91,
9965 0x7c, 0x7e, 0x80, 0x7e, 0x79, 0x74, 0x71, 0x71,
9966 0x71, 0x75, 0x76, 0x74, 0x72, 0x77, 0x83, 0x8d,
9967 0x89, 0x82, 0x79, 0x72, 0x72, 0x78, 0x82, 0x89,
9968 0x6b, 0x64, 0x5d, 0x5c, 0x5d, 0x5c, 0x55, 0x4e,
9969 0x4e, 0x4e, 0x44, 0x39, 0x29, 0x1c, 0x39, 0x70,
9970 0x3f, 0x66, 0x7f, 0x68, 0x41, 0x4f, 0xa5, 0xfb,
9971 0xfd, 0xd6, 0x8d, 0x59, 0x6f, 0x9c, 0x89, 0x4f,
9972 0x56, 0x3f, 0x2f, 0x3a, 0x54, 0x5f, 0x4e, 0x38,
9973 0x7a, 0x6f, 0x62, 0x57, 0x52, 0x56, 0x66, 0x77,
9974 0x24, 0x75, 0xa6, 0x85, 0x55, 0x5b, 0x83, 0x9d,
9975 0xa4, 0xaf, 0xd9, 0xfb, 0xdc, 0xa8, 0xb9, 0xf5,
9976 0xa4, 0x82, 0x63, 0x65, 0x7d, 0x89, 0x78, 0x61,
9977 0x5e, 0x49, 0x45, 0x6a, 0x9c, 0xa7, 0x7f, 0x50,
9978 0x5b, 0x58, 0x33, 0x1c, 0x2f, 0x34, 0x2c, 0x36,
9979 0x58, 0x8f, 0x8a, 0x68, 0x69, 0x5f, 0x48, 0x4c,
9980 0x1e, 0x2b, 0x3a, 0x42, 0x4a, 0x58, 0x6b, 0x78,
9981 0x93, 0x8b, 0x6a, 0x5c, 0x69, 0x4f, 0x1a, 0x05,
9982 0xed, 0xed, 0xcb, 0x97, 0x8d, 0xad, 0xc0, 0xb8,
9983 0xcc, 0xc1, 0xaf, 0x9c, 0x89, 0x73, 0x5f, 0x52,
9984 0x9d, 0x8a, 0x6b, 0x4b, 0x35, 0x2b, 0x2b, 0x2d,
9985 0x14, 0x3c, 0x4d, 0x32, 0x1c, 0x23, 0x2d, 0x2a,
9986 0x2a, 0x10, 0x0e, 0x23, 0x26, 0x27, 0x59, 0x9d,
9987 0x3f, 0x3f, 0x6c, 0x9e, 0x82, 0x3d, 0x3c, 0x72,
9988 0x56, 0x5e, 0x54, 0x2d, 0x03, 0x00, 0x29, 0x54,
9989 0x4c, 0x33, 0x38, 0x7e, 0xda, 0xff, 0xd6, 0x9b,
9990 0x35, 0x2f, 0x4c, 0x80, 0x8c, 0x63, 0x3f, 0x38,
9991 0x3c, 0x4e, 0x73, 0xa3, 0xc9, 0xd2, 0xc0, 0xab,
9992 0x62, 0x55, 0x4a, 0x4e, 0x61, 0x75, 0x80, 0x83,
9993 0x3f, 0x25, 0x1f, 0x4d, 0x94, 0xba, 0xa8, 0x85,
9994 0x81, 0x7b, 0x68, 0x45, 0x20, 0x08, 0x04, 0x09,
9995 0x22, 0x8d, 0xf6, 0xfd, 0xb3, 0x78, 0x84, 0xad,
9996 0xc8, 0xc3, 0x98, 0x63, 0x62, 0x86, 0x89, 0x6a,
9997 0x5b, 0x7f, 0x89, 0x6f, 0x65, 0x6d, 0x56, 0x2a,
9998 0x47, 0x24, 0x13, 0x38, 0x77, 0x94, 0x77, 0x4d,
9999 0x1a, 0x5c, 0xa5, 0xbd, 0xab, 0x9e, 0xb2, 0xcf,
10000 0xb4, 0xcd, 0xc0, 0x9e, 0xb2, 0xe2, 0xce, 0x8d,
10001 0xa3, 0xd2, 0xa0, 0x3e, 0x34, 0x5c, 0x6a, 0x6a,
10002 0x79, 0x5d, 0x58, 0x66, 0x57, 0x3c, 0x57, 0x91,
10003 0x97, 0x9f, 0xa3, 0xa0, 0x9d, 0xa9, 0xc4, 0xdb,
10004 0x85, 0x72, 0x59, 0x4a, 0x51, 0x6f, 0x93, 0xac,
10005 0x8b, 0x51, 0x29, 0x49, 0x8f, 0xa5, 0x6e, 0x2b,
10006 0x12, 0x19, 0x63, 0x7f, 0x33, 0x12, 0x40, 0x5f,
10007 0x67, 0x61, 0x60, 0x68, 0x74, 0x78, 0x71, 0x68,
10008 0x61, 0x6b, 0x7a, 0x87, 0x8d, 0x8b, 0x85, 0x80,
10009 0x83, 0x80, 0x7b, 0x75, 0x70, 0x6d, 0x6b, 0x6b,
10010 0x7d, 0x7d, 0x7e, 0x80, 0x81, 0x83, 0x84, 0x85,
10011 0x6d, 0x71, 0x76, 0x79, 0x78, 0x73, 0x6c, 0x67,
10012 0x64, 0x65, 0x65, 0x63, 0x5e, 0x56, 0x4e, 0x4a,
10013 0x56, 0x4b, 0x3c, 0x2f, 0x26, 0x24, 0x2b, 0x34,
10014 0x4b, 0x83, 0xa6, 0x7d, 0x33, 0x24, 0x6c, 0xbf,
10015 0xa5, 0x60, 0x24, 0x1f, 0x31, 0x3c, 0x45, 0x53,
10016 0x2f, 0x29, 0x28, 0x33, 0x49, 0x5f, 0x6e, 0x73,
10017 0x5c, 0x63, 0x5b, 0x67, 0xb0, 0xeb, 0xb9, 0x54,
10018 0x52, 0x8f, 0x9d, 0x6f, 0x62, 0x78, 0x59, 0x12,
10019 0x6f, 0xbd, 0xd5, 0xc8, 0xd6, 0xd2, 0xbd, 0xc3,
10020 0xb1, 0x80, 0x44, 0x25, 0x2a, 0x3f, 0x4d, 0x51,
10021 0x74, 0x66, 0x50, 0x3f, 0x3a, 0x45, 0x58, 0x66,
10022 0x55, 0x56, 0x54, 0x4b, 0x3d, 0x31, 0x29, 0x25,
10023 0x36, 0x37, 0x3a, 0x3d, 0x41, 0x44, 0x47, 0x49,
10024 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
10025 0x67, 0x7d, 0x71, 0x77, 0x89, 0x81, 0x1f, 0x09,
10026 0x9c, 0xa6, 0x95, 0x77, 0x82, 0xb4, 0xd5, 0xd4,
10027 0xc9, 0xbf, 0x9f, 0x6d, 0x47, 0x50, 0x83, 0xb4,
10028 0x88, 0x78, 0x5f, 0x48, 0x3a, 0x38, 0x3e, 0x43,
10029 0x50, 0x5b, 0x4a, 0x1f, 0x0f, 0x25, 0x39, 0x38,
10030 0x58, 0x5e, 0x79, 0x8d, 0x6b, 0x32, 0x24, 0x3d,
10031 0x7c, 0x67, 0x45, 0x34, 0x42, 0x4c, 0x2c, 0x00,
10032 0x1b, 0x3a, 0x62, 0x7c, 0x82, 0x7c, 0x78, 0x77,
10033 0xb1, 0xb7, 0xb9, 0xad, 0x8f, 0x65, 0x3d, 0x25,
10034 0x3f, 0x38, 0x51, 0x7d, 0x81, 0x56, 0x35, 0x33,
10035 0x24, 0x61, 0xaa, 0xce, 0xc4, 0xaa, 0x9c, 0x9a,
10036 0x57, 0x8a, 0xbe, 0xc7, 0xab, 0x93, 0x98, 0xa9,
10037 0x88, 0x8c, 0x9a, 0xab, 0xaf, 0x95, 0x64, 0x3e,
10038 0xa6, 0x84, 0x66, 0x6d, 0x93, 0xb8, 0xc3, 0xbf,
10039 0xde, 0xdf, 0xe5, 0xe8, 0xd8, 0xa8, 0x65, 0x32,
10040 0x3b, 0x52, 0x76, 0x8c, 0x7e, 0x59, 0x3d, 0x33,
10041 0x2d, 0x2d, 0x37, 0x45, 0x46, 0x3a, 0x32, 0x33,
10042 0x3f, 0x12, 0x00, 0x26, 0x83, 0xc7, 0xcc, 0xb5,
10043 0x91, 0xb8, 0xe3, 0xee, 0xdd, 0xcb, 0xcd, 0xd7,
10044 0xe4, 0xcc, 0xc1, 0xbc, 0x99, 0x72, 0x80, 0xaf,
10045 0xd1, 0xcb, 0x9f, 0x96, 0xc9, 0xc8, 0x7b, 0x41,
10046 0x6a, 0x75, 0x68, 0x45, 0x33, 0x44, 0x5d, 0x67,
10047 0x3e, 0x35, 0x24, 0x13, 0x17, 0x3e, 0x7c, 0xab,
10048 0xa7, 0xae, 0xb5, 0xb7, 0xae, 0x9c, 0x88, 0x7a,
10049 0x93, 0x97, 0x99, 0x93, 0x89, 0x84, 0x86, 0x8b,
10050 0x83, 0xaa, 0xa8, 0x7b, 0x59, 0x4f, 0x49, 0x46,
10051 0x68, 0x62, 0x5f, 0x65, 0x70, 0x77, 0x74, 0x6f,
10052 0x70, 0x73, 0x78, 0x7c, 0x7f, 0x80, 0x80, 0x80,
10053 0x73, 0x78, 0x80, 0x84, 0x81, 0x77, 0x6b, 0x63,
10054 0x66, 0x67, 0x68, 0x69, 0x6b, 0x6c, 0x6d, 0x6e,
10055 0x8b, 0x8d, 0x8e, 0x8c, 0x86, 0x7c, 0x73, 0x6d,
10056 0x65, 0x66, 0x66, 0x64, 0x5e, 0x57, 0x4f, 0x4a,
10057 0x55, 0x43, 0x30, 0x2b, 0x31, 0x35, 0x31, 0x2b,
10058 0x3a, 0x37, 0x2f, 0x22, 0x19, 0x1c, 0x2b, 0x39,
10059 0x6b, 0x40, 0x25, 0x32, 0x4b, 0x62, 0x83, 0xa6,
10060 0x92, 0x80, 0x64, 0x48, 0x3a, 0x40, 0x53, 0x64,
10061 0x49, 0x54, 0x55, 0x4c, 0x51, 0x66, 0x6f, 0x6a,
10062 0x26, 0x59, 0x97, 0xa7, 0x78, 0x46, 0x4c, 0x72,
10063 0xb3, 0xd4, 0xc3, 0xbb, 0xed, 0xfa, 0xcd, 0xb1,
10064 0xc9, 0x82, 0x38, 0x28, 0x4d, 0x6c, 0x64, 0x4c,
10065 0x3c, 0x47, 0x5a, 0x6e, 0x72, 0x5f, 0x3c, 0x20,
10066 0x34, 0x39, 0x3e, 0x41, 0x40, 0x3e, 0x3c, 0x3b,
10067 0x24, 0x26, 0x2b, 0x31, 0x38, 0x3e, 0x42, 0x45,
10068 0x50, 0x4f, 0x4d, 0x4a, 0x46, 0x43, 0x41, 0x40,
10069 0x3c, 0x51, 0x4a, 0x55, 0x6e, 0x73, 0x1f, 0x0f,
10070 0x85, 0x9b, 0x98, 0x7d, 0x76, 0x84, 0x7d, 0x62,
10071 0x16, 0x21, 0x2b, 0x29, 0x21, 0x21, 0x2e, 0x3c,
10072 0x5c, 0x50, 0x3d, 0x2e, 0x29, 0x2f, 0x3b, 0x44,
10073 0x72, 0x70, 0x55, 0x36, 0x3d, 0x5f, 0x6a, 0x5b,
10074 0x58, 0x3c, 0x31, 0x46, 0x59, 0x5d, 0x67, 0x7a,
10075 0x67, 0x36, 0x39, 0x6f, 0x71, 0x43, 0x4e, 0x8c,
10076 0x75, 0x6a, 0x56, 0x45, 0x4d, 0x7b, 0xc2, 0xf8,
10077 0xd7, 0xbb, 0xa3, 0xa5, 0xaf, 0x99, 0x60, 0x2b,
10078 0x4e, 0x38, 0x3a, 0x53, 0x56, 0x44, 0x4b, 0x68,
10079 0xe3, 0xea, 0xe7, 0xce, 0xae, 0x9f, 0xaa, 0xba,
10080 0x9a, 0x84, 0x69, 0x5f, 0x69, 0x7d, 0x8e, 0x97,
10081 0x92, 0x94, 0x8f, 0x82, 0x78, 0x80, 0x99, 0xb0,
10082 0xac, 0xb1, 0xa8, 0x8c, 0x75, 0x82, 0xb4, 0xe1,
10083 0xaf, 0xb3, 0x9b, 0x5d, 0x23, 0x29, 0x73, 0xbb,
10084 0xc9, 0xa5, 0x90, 0x83, 0x53, 0x20, 0x32, 0x6e,
10085 0x66, 0x3a, 0x2e, 0x4e, 0x5d, 0x58, 0x79, 0xb0,
10086 0xd1, 0xed, 0xff, 0xff, 0xec, 0xb4, 0x81, 0x63,
10087 0x71, 0x72, 0x74, 0x7a, 0x87, 0x9e, 0xb8, 0xcb,
10088 0xad, 0x96, 0x99, 0x9c, 0x67, 0x37, 0x76, 0xe6,
10089 0xd8, 0xa5, 0x5c, 0x53, 0x7f, 0x77, 0x51, 0x50,
10090 0x4f, 0x66, 0x9d, 0xd1, 0xc5, 0x86, 0x57, 0x4f,
10091 0x87, 0x52, 0x2a, 0x45, 0x8c, 0xb9, 0xac, 0x89,
10092 0x22, 0x1f, 0x1e, 0x24, 0x37, 0x52, 0x6e, 0x80,
10093 0x73, 0x80, 0x8e, 0x92, 0x92, 0x9a, 0xaf, 0xc1,
10094 0xb1, 0xd8, 0xda, 0xd6, 0xe7, 0xcc, 0x91, 0x79,
10095 0x62, 0x63, 0x68, 0x72, 0x7c, 0x7f, 0x7a, 0x74,
10096 0x8e, 0x8a, 0x85, 0x7f, 0x7c, 0x7c, 0x7e, 0x7f,
10097 0x7d, 0x84, 0x8d, 0x94, 0x94, 0x8c, 0x82, 0x7b,
10098 0x6f, 0x70, 0x71, 0x72, 0x74, 0x76, 0x77, 0x77,
10099 0x81, 0x82, 0x81, 0x7f, 0x79, 0x72, 0x6a, 0x66,
10100 0x66, 0x67, 0x67, 0x65, 0x60, 0x58, 0x50, 0x4b,
10101 0x4a, 0x4e, 0x3a, 0x15, 0x0a, 0x1d, 0x28, 0x23,
10102 0x20, 0x24, 0x2c, 0x38, 0x48, 0x56, 0x62, 0x68,
10103 0x69, 0x40, 0x2f, 0x51, 0x7c, 0x92, 0x9f, 0xac,
10104 0x96, 0x9a, 0x92, 0x75, 0x55, 0x49, 0x57, 0x6b,
10105 0x69, 0x51, 0x40, 0x45, 0x50, 0x56, 0x62, 0x71,
10106 0x86, 0x77, 0x46, 0x12, 0x12, 0x36, 0x3e, 0x28,
10107 0x50, 0x9b, 0xab, 0x97, 0xa9, 0xba, 0xc6, 0xe6,
10108 0xab, 0xa6, 0x9b, 0x88, 0x6f, 0x55, 0x41, 0x35,
10109 0x51, 0x43, 0x3b, 0x45, 0x55, 0x54, 0x3c, 0x23,
10110 0x2b, 0x31, 0x3e, 0x4b, 0x57, 0x5d, 0x5e, 0x5d,
10111 0x6c, 0x6b, 0x69, 0x65, 0x62, 0x5f, 0x5c, 0x5b,
10112 0x72, 0x70, 0x6e, 0x6a, 0x66, 0x63, 0x60, 0x5f,
10113 0x4c, 0x59, 0x4d, 0x50, 0x5f, 0x67, 0x1d, 0x0f,
10114 0xac, 0xcc, 0xd4, 0xb5, 0x96, 0x7b, 0x47, 0x0f,
10115 0x4c, 0x57, 0x7c, 0xba, 0xe9, 0xdf, 0x9f, 0x62,
10116 0x5b, 0x50, 0x3f, 0x32, 0x2f, 0x38, 0x45, 0x4f,
10117 0x44, 0x4b, 0x48, 0x4b, 0x6c, 0x90, 0x87, 0x63,
10118 0x54, 0x5f, 0x70, 0x76, 0x61, 0x3f, 0x28, 0x22,
10119 0x37, 0x33, 0x2e, 0x35, 0x49, 0x50, 0x30, 0x07,
10120 0x57, 0x23, 0x00, 0x00, 0x38, 0x75, 0x8f, 0x8e,
10121 0x72, 0x91, 0xa5, 0x8f, 0x5c, 0x36, 0x33, 0x41,
10122 0x47, 0x23, 0x0e, 0x11, 0x10, 0x18, 0x4b, 0x8a,
10123 0xaa, 0x97, 0x90, 0xaa, 0xd1, 0xdd, 0xc2, 0xa1,
10124 0x6b, 0x43, 0x20, 0x27, 0x4b, 0x5f, 0x4e, 0x33,
10125 0x68, 0x7c, 0x96, 0xa5, 0xa8, 0xaa, 0xb1, 0xb9,
10126 0x99, 0x84, 0x6e, 0x6a, 0x79, 0x8f, 0x9d, 0xa2,
10127 0x22, 0x39, 0x54, 0x5e, 0x52, 0x39, 0x21, 0x14,
10128 0x34, 0x24, 0x26, 0x37, 0x35, 0x25, 0x2c, 0x45,
10129 0x29, 0x36, 0x66, 0x9d, 0xa4, 0x79, 0x53, 0x4a,
10130 0x09, 0x47, 0x8f, 0xaf, 0x9f, 0x7f, 0x6f, 0x6e,
10131 0x77, 0x31, 0x00, 0x15, 0x65, 0x93, 0x77, 0x44,
10132 0x6f, 0x8d, 0x97, 0x70, 0x37, 0x17, 0x19, 0x25,
10133 0x2f, 0x2e, 0x1d, 0x32, 0x66, 0x69, 0x5b, 0x6f,
10134 0x48, 0x3c, 0x5f, 0x99, 0x8f, 0x44, 0x1a, 0x27,
10135 0x33, 0x2b, 0x33, 0x53, 0x76, 0x77, 0x52, 0x2c,
10136 0x2f, 0x42, 0x60, 0x7d, 0x8f, 0x93, 0x8e, 0x89,
10137 0x89, 0x7a, 0x6c, 0x6a, 0x6a, 0x5e, 0x43, 0x2b,
10138 0x4c, 0x3c, 0x2d, 0x32, 0x3e, 0x39, 0x2f, 0x2e,
10139 0x39, 0x46, 0x5b, 0x71, 0x81, 0x87, 0x83, 0x7f,
10140 0x7d, 0x7d, 0x7e, 0x80, 0x83, 0x85, 0x87, 0x89,
10141 0x77, 0x76, 0x76, 0x76, 0x77, 0x7a, 0x7d, 0x7e,
10142 0x72, 0x73, 0x74, 0x76, 0x77, 0x79, 0x7a, 0x7a,
10143 0x67, 0x68, 0x6a, 0x6b, 0x6c, 0x6c, 0x6b, 0x6a,
10144 0x68, 0x68, 0x69, 0x67, 0x61, 0x5a, 0x52, 0x4d,
10145 0x32, 0x1e, 0x20, 0x35, 0x30, 0x17, 0x1d, 0x3c,
10146 0x23, 0x2d, 0x38, 0x3d, 0x3b, 0x38, 0x39, 0x3b,
10147 0x23, 0x21, 0x38, 0x5d, 0x67, 0x58, 0x56, 0x65,
10148 0x60, 0x87, 0xaa, 0xa0, 0x6c, 0x36, 0x1c, 0x18,
10149 0x66, 0x4e, 0x36, 0x34, 0x43, 0x49, 0x36, 0x1d,
10150 0x69, 0x58, 0x3b, 0x4e, 0xb6, 0xff, 0xfa, 0x9e,
10151 0x45, 0x62, 0x4c, 0x47, 0x8b, 0xb8, 0xaf, 0xac,
10152 0xa2, 0xa3, 0x90, 0x61, 0x35, 0x30, 0x59, 0x84,
10153 0x5a, 0x30, 0x04, 0x00, 0x0e, 0x26, 0x2b, 0x24,
10154 0x31, 0x27, 0x1c, 0x1c, 0x27, 0x39, 0x47, 0x4e,
10155 0x5e, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x59,
10156 0x60, 0x60, 0x60, 0x60, 0x5f, 0x5f, 0x5f, 0x5f,
10157 0x67, 0x6b, 0x59, 0x53, 0x54, 0x5d, 0x1b, 0x0e,
10158 0xb2, 0xc9, 0xc7, 0xa6, 0x94, 0x93, 0x7c, 0x57,
10159 0x59, 0x59, 0x69, 0x8e, 0xb3, 0xb6, 0x95, 0x72,
10160 0x79, 0x6d, 0x5b, 0x4c, 0x48, 0x4f, 0x5c, 0x65,
10161 0x5c, 0x61, 0x5a, 0x57, 0x72, 0x91, 0x84, 0x5d,
10162 0x29, 0x70, 0xad, 0xa3, 0x6d, 0x49, 0x51, 0x68,
10163 0x4d, 0x6a, 0x76, 0x69, 0x6a, 0x7b, 0x75, 0x5d,
10164 0x36, 0x5e, 0x7e, 0x6e, 0x43, 0x31, 0x4d, 0x73,
10165 0x76, 0x9a, 0xb0, 0x94, 0x59, 0x35, 0x3f, 0x5a,
10166 0xb7, 0xa0, 0x92, 0x8b, 0x70, 0x5a, 0x7a, 0xb2,
10167 0xb4, 0x95, 0x82, 0x99, 0xc2, 0xcb, 0xa5, 0x78,
10168 0x3e, 0x50, 0x66, 0x70, 0x6c, 0x60, 0x55, 0x50,
10169 0xe0, 0xc6, 0xa5, 0x91, 0x8d, 0x91, 0x91, 0x8f,
10170 0x65, 0x5c, 0x54, 0x57, 0x5e, 0x5c, 0x4f, 0x42,
10171 0x5d, 0x36, 0x1a, 0x32, 0x68, 0x83, 0x6c, 0x49,
10172 0x07, 0x15, 0x21, 0x35, 0x58, 0x62, 0x2b, 0x00,
10173 0x11, 0x36, 0x57, 0x6f, 0x9f, 0xdf, 0xff, 0xff,
10174 0xe3, 0x94, 0x36, 0x07, 0x0c, 0x1c, 0x17, 0x07,
10175 0x0f, 0x51, 0x92, 0x9a, 0x7b, 0x77, 0xa7, 0xde,
10176 0xff, 0xe4, 0x89, 0x1e, 0x00, 0x28, 0x3b, 0x24,
10177 0x03, 0x22, 0x27, 0x39, 0x6e, 0x74, 0x4b, 0x37,
10178 0x47, 0x46, 0x3b, 0x31, 0x3f, 0x60, 0x76, 0x7a,
10179 0x27, 0x24, 0x27, 0x32, 0x40, 0x45, 0x3f, 0x36,
10180 0x8f, 0x89, 0x80, 0x77, 0x72, 0x71, 0x72, 0x74,
10181 0x72, 0x84, 0x9a, 0xa5, 0x9c, 0x85, 0x6b, 0x5b,
10182 0x30, 0x3e, 0x3f, 0x34, 0x30, 0x2d, 0x27, 0x23,
10183 0x43, 0x4f, 0x62, 0x76, 0x87, 0x95, 0x9f, 0xa4,
10184 0xa0, 0xa4, 0xa8, 0xa9, 0xa3, 0x98, 0x8c, 0x84,
10185 0x77, 0x76, 0x76, 0x76, 0x77, 0x7a, 0x7d, 0x7e,
10186 0x7b, 0x7b, 0x7c, 0x7e, 0x7f, 0x81, 0x82, 0x83,
10187 0x75, 0x74, 0x74, 0x75, 0x76, 0x79, 0x7b, 0x7c,
10188 0x69, 0x6a, 0x6a, 0x68, 0x63, 0x5b, 0x54, 0x4f,
10189 0x66, 0x6b, 0x61, 0x49, 0x38, 0x35, 0x31, 0x29,
10190 0x36, 0x27, 0x1d, 0x26, 0x35, 0x36, 0x22, 0x0c,
10191 0x5b, 0x80, 0xb0, 0xb6, 0x77, 0x2a, 0x13, 0x28,
10192 0x4f, 0x89, 0xc8, 0xd8, 0xb2, 0x7c, 0x59, 0x4e,
10193 0x5a, 0x72, 0x65, 0x35, 0x25, 0x38, 0x30, 0x0d,
10194 0x30, 0x26, 0x59, 0xb9, 0xda, 0xa6, 0x73, 0x6c,
10195 0x71, 0x7e, 0x56, 0x43, 0x7c, 0x9a, 0x7e, 0x6c,
10196 0xa9, 0x96, 0x87, 0x92, 0xb5, 0xdd, 0xf6, 0xff,
10197 0xe9, 0xda, 0xcf, 0xd4, 0xe2, 0xe3, 0xd2, 0xbf,
10198 0x7a, 0x83, 0x95, 0xa6, 0xaa, 0x97, 0x73, 0x58,
10199 0x63, 0x62, 0x61, 0x5f, 0x5d, 0x5b, 0x5a, 0x59,
10200 0x54, 0x54, 0x53, 0x52, 0x51, 0x51, 0x50, 0x50,
10201 0x47, 0x48, 0x3c, 0x3a, 0x38, 0x4a, 0x18, 0x0d,
10202 0x9a, 0x96, 0x70, 0x3a, 0x31, 0x55, 0x6f, 0x6b,
10203 0x3d, 0x64, 0x85, 0x7a, 0x52, 0x3c, 0x4e, 0x6b,
10204 0x63, 0x58, 0x47, 0x3b, 0x39, 0x42, 0x50, 0x5a,
10205 0x20, 0x2b, 0x2b, 0x2e, 0x59, 0x9d, 0xc2, 0xc2,
10206 0xe1, 0xc7, 0x87, 0x3f, 0x25, 0x3e, 0x5b, 0x63,
10207 0x5c, 0x65, 0x71, 0x61, 0x2b, 0x0b, 0x3a, 0x86,
10208 0xe1, 0xff, 0xff, 0xac, 0x2f, 0x00, 0x1e, 0x62,
10209 0xac, 0xa6, 0xa2, 0xa7, 0xb1, 0xb5, 0xb0, 0xa9,
10210 0xbb, 0xbc, 0xc7, 0xbd, 0x7d, 0x2f, 0x1b, 0x34,
10211 0x84, 0x7f, 0x82, 0x94, 0xb2, 0xcd, 0xde, 0xe3,
10212 0x54, 0x57, 0x69, 0x8d, 0xab, 0xa6, 0x7f, 0x5a,
10213 0x39, 0x55, 0x85, 0xb0, 0xbb, 0x94, 0x50, 0x1b,
10214 0x00, 0x26, 0x4f, 0x5a, 0x4d, 0x45, 0x53, 0x66,
10215 0x75, 0x80, 0x86, 0x7b, 0x67, 0x5c, 0x62, 0x6d,
10216 0x6f, 0x65, 0x48, 0x41, 0x7a, 0xb3, 0x90, 0x3f,
10217 0x56, 0x88, 0xa3, 0x9b, 0xab, 0xd2, 0xcf, 0xa9,
10218 0xe1, 0xa4, 0x6a, 0x6e, 0xaa, 0xe7, 0xff, 0xfc,
10219 0xff, 0xf7, 0xe6, 0xd5, 0xce, 0xd8, 0xee, 0xff,
10220 0xc9, 0xa9, 0x81, 0x6f, 0x77, 0x79, 0x5f, 0x3d,
10221 0x6b, 0x94, 0x82, 0x4d, 0x38, 0x2e, 0x34, 0x55,
10222 0x4e, 0x32, 0x1e, 0x26, 0x3a, 0x4d, 0x65, 0x7a,
10223 0x3f, 0x2c, 0x20, 0x2e, 0x4f, 0x67, 0x69, 0x61,
10224 0x69, 0x76, 0x88, 0x96, 0x99, 0x90, 0x82, 0x78,
10225 0x68, 0x82, 0xa5, 0xb7, 0xaf, 0x91, 0x6f, 0x5a,
10226 0x39, 0x45, 0x32, 0x26, 0x2d, 0x1b, 0x1c, 0x4b,
10227 0x72, 0x73, 0x72, 0x6f, 0x70, 0x79, 0x88, 0x95,
10228 0xa2, 0xa7, 0xae, 0xaf, 0xa8, 0x99, 0x88, 0x7d,
10229 0x7d, 0x84, 0x8d, 0x94, 0x94, 0x8c, 0x82, 0x7b,
10230 0x7f, 0x80, 0x81, 0x82, 0x84, 0x85, 0x87, 0x87,
10231 0x8b, 0x87, 0x81, 0x7c, 0x79, 0x79, 0x7a, 0x7c,
10232 0x6b, 0x6c, 0x6c, 0x6a, 0x65, 0x5d, 0x55, 0x50,
10233 0x8c, 0xc7, 0xd8, 0x97, 0x49, 0x28, 0x24, 0x20,
10234 0x5b, 0x63, 0x6a, 0x69, 0x64, 0x65, 0x70, 0x7a,
10235 0xd2, 0xc2, 0xc6, 0xda, 0xcb, 0x8c, 0x4b, 0x2b,
10236 0x0f, 0x37, 0x67, 0x7d, 0x77, 0x69, 0x65, 0x69,
10237 0x53, 0x69, 0x56, 0x31, 0x4a, 0x8e, 0x99, 0x6d,
10238 0x0f, 0x21, 0x61, 0xac, 0xb5, 0x78, 0x3a, 0x23,
10239 0x2f, 0x61, 0x59, 0x44, 0x63, 0x73, 0x67, 0x6d,
10240 0x33, 0x4d, 0x7c, 0xb3, 0xdb, 0xe3, 0xd1, 0xbd,
10241 0xb5, 0xc0, 0xce, 0xd4, 0xce, 0xc0, 0xb2, 0xa8,
10242 0xab, 0x9c, 0x8c, 0x86, 0x87, 0x81, 0x71, 0x61,
10243 0x6c, 0x6a, 0x65, 0x60, 0x5a, 0x54, 0x50, 0x4e,
10244 0x4f, 0x4d, 0x49, 0x43, 0x3d, 0x38, 0x34, 0x31,
10245 0x32, 0x31, 0x2d, 0x2e, 0x27, 0x3d, 0x12, 0x07,
10246 0x97, 0x92, 0x67, 0x2b, 0x1c, 0x3a, 0x4f, 0x48,
10247 0x6b, 0xac, 0xe0, 0xc3, 0x6e, 0x34, 0x3e, 0x62,
10248 0x47, 0x3f, 0x35, 0x30, 0x37, 0x49, 0x5d, 0x6b,
10249 0xdb, 0xea, 0xde, 0xbb, 0xb3, 0xd2, 0xeb, 0xed,
10250 0xff, 0xdf, 0x8c, 0x46, 0x43, 0x62, 0x5c, 0x37,
10251 0x28, 0x48, 0x2f, 0x00, 0x20, 0x84, 0x95, 0x5a,
10252 0x5d, 0x48, 0x47, 0x75, 0xb8, 0xda, 0xc6, 0xa5,
10253 0x97, 0xb8, 0xcd, 0xb7, 0x8b, 0x79, 0x96, 0xbb,
10254 0xd9, 0xda, 0xe1, 0xcc, 0x7f, 0x2c, 0x1d, 0x3d,
10255 0x79, 0x87, 0xa3, 0xc0, 0xc7, 0xa6, 0x6a, 0x3a,
10256 0x35, 0x26, 0x3a, 0x87, 0xd7, 0xd6, 0x7c, 0x20,
10257 0x1f, 0x39, 0x56, 0x63, 0x5f, 0x5b, 0x61, 0x6a,
10258 0x80, 0x69, 0x57, 0x5f, 0x72, 0x71, 0x54, 0x36,
10259 0x43, 0x4c, 0x57, 0x61, 0x69, 0x73, 0x81, 0x8b,
10260 0xff, 0xec, 0xda, 0xe1, 0xf8, 0xf2, 0xba, 0x7d,
10261 0xf3, 0xed, 0xdb, 0xc6, 0xc3, 0xd2, 0xe0, 0xe4,
10262 0xa8, 0xa8, 0xae, 0xbe, 0xca, 0xc4, 0xac, 0x96,
10263 0x8d, 0x8a, 0x7d, 0x69, 0x61, 0x78, 0xa8, 0xd1,
10264 0xa0, 0x88, 0x76, 0x6c, 0x51, 0x2e, 0x24, 0x31,
10265 0x51, 0x86, 0x98, 0x80, 0x57, 0x32, 0x5d, 0xc1,
10266 0xdc, 0x82, 0x43, 0x44, 0x39, 0x14, 0x1c, 0x4c,
10267 0x2c, 0x45, 0x5d, 0x61, 0x58, 0x5a, 0x6f, 0x85,
10268 0x53, 0x5e, 0x6f, 0x7c, 0x81, 0x7c, 0x73, 0x6b,
10269 0x7e, 0x86, 0x97, 0xaa, 0xaf, 0x97, 0x6a, 0x46,
10270 0x50, 0x39, 0x28, 0x2e, 0x32, 0x20, 0x21, 0x3e,
10271 0x52, 0x58, 0x5c, 0x5a, 0x55, 0x56, 0x60, 0x6a,
10272 0x59, 0x5f, 0x6a, 0x74, 0x7c, 0x7f, 0x7e, 0x7d,
10273 0x73, 0x78, 0x80, 0x84, 0x81, 0x77, 0x6b, 0x63,
10274 0x6f, 0x70, 0x71, 0x72, 0x74, 0x75, 0x76, 0x77,
10275 0x88, 0x83, 0x7c, 0x76, 0x74, 0x76, 0x79, 0x7c,
10276 0x6c, 0x6d, 0x6d, 0x6b, 0x66, 0x5e, 0x56, 0x52,
10277 0x55, 0x75, 0xb5, 0xcf, 0x85, 0x1e, 0x17, 0x53,
10278 0x71, 0x83, 0x8a, 0x72, 0x4f, 0x47, 0x65, 0x88,
10279 0x91, 0x55, 0x39, 0x68, 0xa1, 0x9f, 0x6d, 0x43,
10280 0x44, 0x48, 0x4a, 0x48, 0x45, 0x45, 0x4a, 0x4e,
10281 0x3f, 0x49, 0x4c, 0x5a, 0x92, 0xd3, 0xde, 0xc3,
10282 0x4c, 0x3d, 0x3b, 0x67, 0xa9, 0xae, 0x51, 0x00,
10283 0x1f, 0x28, 0x0d, 0x26, 0x90, 0xbe, 0x87, 0x54,
10284 0x5b, 0x6c, 0x84, 0x98, 0xa5, 0xad, 0xb4, 0xb9,
10285 0x92, 0xa4, 0xae, 0x9e, 0x81, 0x79, 0x8d, 0xa7,
10286 0x92, 0x7c, 0x63, 0x5c, 0x64, 0x6a, 0x65, 0x5b,
10287 0x5c, 0x5d, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6a,
10288 0x64, 0x61, 0x5d, 0x57, 0x50, 0x4b, 0x46, 0x44,
10289 0x43, 0x41, 0x40, 0x40, 0x30, 0x42, 0x18, 0x09,
10290 0xa4, 0xb8, 0xb2, 0x93, 0x87, 0x92, 0x88, 0x6c,
10291 0xab, 0xcb, 0xda, 0xb1, 0x66, 0x30, 0x2d, 0x40,
10292 0x5d, 0x58, 0x54, 0x58, 0x68, 0x81, 0x9b, 0xac,
10293 0xa0, 0xcc, 0xe4, 0xd4, 0xc8, 0xda, 0xec, 0xed,
10294 0xba, 0xf2, 0xfb, 0xb5, 0x73, 0x6f, 0x87, 0x91,
10295 0x7e, 0x81, 0x7a, 0x6d, 0x74, 0x83, 0x7e, 0x6a,
10296 0x9e, 0xc7, 0xf3, 0xfe, 0xea, 0xd3, 0xcc, 0xd1,
10297 0xcc, 0xba, 0xaa, 0xaa, 0xb6, 0xbe, 0xb8, 0xaf,
10298 0xec, 0xdc, 0xc9, 0xa5, 0x61, 0x33, 0x55, 0x99,
10299 0xe5, 0xba, 0x9e, 0xb8, 0xe2, 0xd5, 0x83, 0x31,
10300 0x4f, 0x3c, 0x30, 0x42, 0x6b, 0x8d, 0x97, 0x94,
10301 0xb2, 0xc7, 0xc5, 0x92, 0x4a, 0x2a, 0x44, 0x6c,
10302 0x3a, 0x40, 0x43, 0x3e, 0x38, 0x3d, 0x50, 0x61,
10303 0x4c, 0x59, 0x65, 0x65, 0x5b, 0x53, 0x55, 0x5a,
10304 0x66, 0x54, 0x71, 0xb7, 0xda, 0xc3, 0xac, 0xb0,
10305 0xd1, 0xc0, 0xce, 0xef, 0xdf, 0xa3, 0x7f, 0x83,
10306 0x91, 0x67, 0x43, 0x4c, 0x72, 0x83, 0x6a, 0x47,
10307 0x29, 0x50, 0x7d, 0x8e, 0x83, 0x77, 0x7b, 0x86,
10308 0xa7, 0xbe, 0xbf, 0x8d, 0x41, 0x15, 0x23, 0x44,
10309 0x29, 0x1d, 0x1a, 0x3a, 0x47, 0x22, 0x3f, 0xa6,
10310 0xdb, 0xaf, 0x75, 0x4f, 0x46, 0x4c, 0x4e, 0x4a,
10311 0x75, 0x62, 0x53, 0x57, 0x6b, 0x78, 0x74, 0x69,
10312 0x88, 0x80, 0x74, 0x6b, 0x68, 0x6c, 0x74, 0x7a,
10313 0x6d, 0x7a, 0x89, 0x8d, 0x7f, 0x62, 0x42, 0x2e,
10314 0x3c, 0x23, 0x2d, 0x2f, 0x28, 0x54, 0x60, 0x1f,
10315 0x18, 0x32, 0x54, 0x6d, 0x78, 0x7d, 0x83, 0x89,
10316 0x7c, 0x79, 0x74, 0x6f, 0x6c, 0x6b, 0x6b, 0x6c,
10317 0x83, 0x80, 0x7b, 0x75, 0x70, 0x6d, 0x6b, 0x6b,
10318 0x7b, 0x7c, 0x7d, 0x7e, 0x80, 0x81, 0x82, 0x83,
10319 0x80, 0x7d, 0x79, 0x78, 0x7b, 0x83, 0x8b, 0x91,
10320 0x6d, 0x6e, 0x6e, 0x6c, 0x66, 0x5f, 0x57, 0x52,
10321 0x46, 0x5b, 0x59, 0x3e, 0x37, 0x4c, 0x5a, 0x53,
10322 0x4a, 0x31, 0x1a, 0x1d, 0x38, 0x55, 0x62, 0x63,
10323 0x6c, 0x4d, 0x37, 0x34, 0x2a, 0x18, 0x1b, 0x30,
10324 0x44, 0x3b, 0x31, 0x33, 0x3e, 0x4a, 0x51, 0x52,
10325 0x63, 0x96, 0xd5, 0xf1, 0xe7, 0xdb, 0xef, 0xff,
10326 0xff, 0x5f, 0x00, 0x16, 0x6f, 0x86, 0x7e, 0x84,
10327 0x2d, 0x5a, 0x5d, 0x6a, 0xac, 0xc2, 0x98, 0x7d,
10328 0x70, 0x54, 0x4c, 0x7a, 0xbe, 0xda, 0xba, 0x8c,
10329 0x46, 0x69, 0x81, 0x6e, 0x42, 0x31, 0x4d, 0x72,
10330 0x7b, 0x60, 0x45, 0x41, 0x52, 0x65, 0x6c, 0x69,
10331 0x61, 0x61, 0x60, 0x60, 0x5f, 0x5f, 0x5e, 0x5e,
10332 0x57, 0x56, 0x54, 0x52, 0x50, 0x4e, 0x4c, 0x4b,
10333 0x4b, 0x49, 0x4d, 0x50, 0x3d, 0x4f, 0x27, 0x16,
10334 0x0e, 0x26, 0x3a, 0x36, 0x22, 0x16, 0x21, 0x31,
10335 0x71, 0x80, 0x94, 0x9a, 0x8a, 0x66, 0x3c, 0x20,
10336 0x29, 0x22, 0x1b, 0x20, 0x3a, 0x66, 0x97, 0xb7,
10337 0xd4, 0xc1, 0xb0, 0xb3, 0xc6, 0xd6, 0xd8, 0xd3,
10338 0xba, 0xc9, 0xb5, 0x7b, 0x55, 0x5e, 0x73, 0x79,
10339 0x48, 0x5b, 0x70, 0x76, 0x6e, 0x67, 0x69, 0x70,
10340 0x94, 0xa1, 0xb2, 0xb6, 0xa4, 0x7f, 0x56, 0x3b,
10341 0x5f, 0x7b, 0xa3, 0xc5, 0xd5, 0xd6, 0xd0, 0xcb,
10342 0xda, 0xd9, 0xcd, 0xb2, 0x97, 0x91, 0xa3, 0xb7,
10343 0x6d, 0x7a, 0x8a, 0x93, 0x8b, 0x73, 0x58, 0x45,
10344 0x67, 0x89, 0xad, 0xb6, 0xa3, 0x8d, 0x86, 0x89,
10345 0x83, 0x86, 0x88, 0x85, 0x7b, 0x6b, 0x5b, 0x50,
10346 0x67, 0x7f, 0x90, 0x83, 0x65, 0x54, 0x5f, 0x72,
10347 0x29, 0x21, 0x29, 0x38, 0x2e, 0x1a, 0x28, 0x4a,
10348 0x15, 0x19, 0x30, 0x5d, 0x92, 0xb6, 0xc0, 0xbb,
10349 0xbc, 0xb1, 0x90, 0x5a, 0x2a, 0x1d, 0x38, 0x57,
10350 0x83, 0x5d, 0x72, 0xc1, 0xd7, 0x8f, 0x44, 0x2c,
10351 0x31, 0x66, 0x9d, 0xaa, 0x96, 0x8e, 0xa7, 0xc7,
10352 0xcf, 0xc2, 0xac, 0x8f, 0x70, 0x53, 0x3c, 0x30,
10353 0x3b, 0x38, 0x34, 0x30, 0x2d, 0x2d, 0x2e, 0x2f,
10354 0x0d, 0x13, 0x1e, 0x28, 0x2e, 0x2f, 0x2d, 0x2b,
10355 0x67, 0x68, 0x6b, 0x6f, 0x72, 0x76, 0x79, 0x7a,
10356 0x7d, 0x81, 0x87, 0x89, 0x87, 0x7f, 0x76, 0x70,
10357 0x8b, 0x82, 0x74, 0x64, 0x57, 0x4e, 0x49, 0x48,
10358 0x46, 0x31, 0x1b, 0x1c, 0x3b, 0x6f, 0xa1, 0xbf,
10359 0x7f, 0x6e, 0x5d, 0x5b, 0x6b, 0x7f, 0x8d, 0x92,
10360 0x8a, 0x79, 0x6b, 0x71, 0x84, 0x8d, 0x85, 0x77,
10361 0x67, 0x6a, 0x6f, 0x75, 0x7b, 0x81, 0x86, 0x88,
10362 0x85, 0x84, 0x82, 0x80, 0x7e, 0x7d, 0x7b, 0x7a,
10363 0x6f, 0x6e, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x6a,
10364 0x69, 0x63, 0x5e, 0x5e, 0x5f, 0x59, 0x4c, 0x41,
10365 0x4d, 0x83, 0xa3, 0x84, 0x52, 0x40, 0x4f, 0x60,
10366 0x7d, 0x8e, 0x9a, 0x91, 0x7c, 0x6e, 0x74, 0x80,
10367 0x77, 0x6d, 0x61, 0x5e, 0x6a, 0x83, 0x9f, 0xb1,
10368 0x80, 0x78, 0x67, 0x52, 0x46, 0x4d, 0x65, 0x79,
10369 0xa0, 0xa6, 0xae, 0xb2, 0xb4, 0xb5, 0xb8, 0xba,
10370 0xd8, 0xbf, 0x8d, 0x56, 0x40, 0x69, 0xc0, 0xff,
10371 0xb4, 0x94, 0x71, 0x65, 0x6f, 0x77, 0x71, 0x66,
10372 0x4f, 0x4b, 0x54, 0x72, 0x96, 0xa5, 0x98, 0x84,
10373 0x08, 0x26, 0x5e, 0x80, 0x64, 0x44, 0x6d, 0xb8,
10374 0xa7, 0x96, 0x6e, 0x45, 0x42, 0x5e, 0x70, 0x6e,
10375 0x66, 0x63, 0x61, 0x65, 0x6b, 0x6a, 0x61, 0x59,
10376 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10377 0x48, 0x4d, 0x55, 0x4d, 0x5d, 0x58, 0x1f, 0x07,
10378 0x42, 0x56, 0x76, 0x93, 0x9c, 0x8b, 0x6a, 0x50,
10379 0x71, 0x64, 0x50, 0x3d, 0x31, 0x30, 0x35, 0x39,
10380 0x49, 0x76, 0xa0, 0x9d, 0x7b, 0x68, 0x7b, 0x99,
10381 0x6d, 0x96, 0xc3, 0xd1, 0xc1, 0xb3, 0xb9, 0xc7,
10382 0xc8, 0xd7, 0xc1, 0x81, 0x4d, 0x3f, 0x3a, 0x2e,
10383 0x79, 0x5d, 0x3b, 0x2d, 0x3c, 0x5d, 0x7e, 0x91,
10384 0x9f, 0xa4, 0xa8, 0xa9, 0xa2, 0x94, 0x86, 0x7c,
10385 0x7f, 0x92, 0xaf, 0xc9, 0xd6, 0xd3, 0xc6, 0xbb,
10386 0x5d, 0x81, 0xaa, 0xb6, 0x9f, 0x79, 0x5b, 0x4e,
10387 0x31, 0x57, 0x8d, 0xb6, 0xbc, 0x9d, 0x6e, 0x4c,
10388 0x5e, 0x68, 0x83, 0xad, 0xcf, 0xcd, 0xa9, 0x86,
10389 0xab, 0xb5, 0xbf, 0xb9, 0x9b, 0x6a, 0x37, 0x16,
10390 0x3c, 0x3c, 0x3e, 0x43, 0x49, 0x4f, 0x54, 0x56,
10391 0x5a, 0x3e, 0x2c, 0x2a, 0x24, 0x28, 0x55, 0x8d,
10392 0xd4, 0x8a, 0x37, 0x1e, 0x42, 0x75, 0x8f, 0x92,
10393 0x1e, 0x53, 0x92, 0xb0, 0xa1, 0x7c, 0x5c, 0x4d,
10394 0x59, 0x79, 0xa2, 0xbb, 0xb4, 0x84, 0x3a, 0x00,
10395 0x19, 0x2d, 0x3f, 0x44, 0x4b, 0x6d, 0xa8, 0xd9,
10396 0x90, 0x92, 0x97, 0x9d, 0xa4, 0xab, 0xaf, 0xb2,
10397 0xb8, 0xad, 0x9b, 0x86, 0x72, 0x62, 0x59, 0x54,
10398 0x5d, 0x63, 0x6d, 0x77, 0x7c, 0x7d, 0x7b, 0x79,
10399 0x66, 0x6a, 0x70, 0x79, 0x82, 0x8a, 0x91, 0x94,
10400 0x99, 0x91, 0x85, 0x79, 0x72, 0x70, 0x72, 0x74,
10401 0x74, 0x6d, 0x60, 0x53, 0x48, 0x42, 0x3f, 0x3f,
10402 0x2e, 0x42, 0x60, 0x7d, 0x91, 0x9b, 0x9f, 0x9f,
10403 0x7e, 0x73, 0x69, 0x69, 0x72, 0x7a, 0x7c, 0x7a,
10404 0x7d, 0x72, 0x6c, 0x76, 0x85, 0x87, 0x77, 0x64,
10405 0x91, 0x8f, 0x8b, 0x85, 0x7f, 0x7a, 0x76, 0x74,
10406 0x79, 0x79, 0x78, 0x78, 0x77, 0x77, 0x77, 0x76,
10407 0x73, 0x72, 0x72, 0x72, 0x71, 0x70, 0x70, 0x70,
10408 0x69, 0x63, 0x5d, 0x5c, 0x5d, 0x56, 0x49, 0x3d,
10409 0x83, 0xa9, 0xe2, 0xff, 0xe0, 0x9d, 0x6f, 0x65,
10410 0x6f, 0x77, 0x79, 0x70, 0x64, 0x68, 0x7e, 0x93,
10411 0x7c, 0x65, 0x45, 0x2e, 0x2b, 0x3d, 0x59, 0x6d,
10412 0x31, 0x36, 0x45, 0x60, 0x7b, 0x86, 0x7d, 0x71,
10413 0xe1, 0xd5, 0xb4, 0x83, 0x5f, 0x64, 0x8f, 0xb9,
10414 0x86, 0xb0, 0xce, 0xba, 0x85, 0x68, 0x7a, 0x9a,
10415 0x69, 0x69, 0x67, 0x61, 0x5d, 0x5f, 0x68, 0x71,
10416 0x50, 0x3d, 0x2e, 0x37, 0x53, 0x6b, 0x72, 0x6f,
10417 0x5f, 0x3f, 0x37, 0x4e, 0x55, 0x46, 0x4b, 0x64,
10418 0x66, 0x8c, 0x9e, 0x84, 0x61, 0x5c, 0x6b, 0x77,
10419 0x65, 0x60, 0x5e, 0x61, 0x65, 0x63, 0x59, 0x50,
10420 0x51, 0x4e, 0x4a, 0x46, 0x45, 0x46, 0x48, 0x4a,
10421 0x49, 0x4d, 0x54, 0x4c, 0x5c, 0x57, 0x1f, 0x07,
10422 0xa2, 0x8d, 0x7f, 0x8d, 0xab, 0xb8, 0xa9, 0x92,
10423 0x51, 0x56, 0x5d, 0x60, 0x5c, 0x52, 0x45, 0x3d,
10424 0xa0, 0xa3, 0xae, 0xbd, 0xc1, 0xab, 0x81, 0x5f,
10425 0x62, 0x72, 0x8f, 0xaf, 0xc5, 0xc9, 0xbe, 0xb2,
10426 0xb0, 0xae, 0x84, 0x3d, 0x13, 0x19, 0x26, 0x25,
10427 0x2c, 0x1f, 0x1a, 0x31, 0x57, 0x70, 0x71, 0x66,
10428 0x88, 0x8b, 0x8e, 0x8e, 0x8a, 0x82, 0x79, 0x73,
10429 0x90, 0xaf, 0xcd, 0xcc, 0xb0, 0x98, 0x93, 0x9a,
10430 0x58, 0x65, 0x6e, 0x6a, 0x61, 0x66, 0x7c, 0x91,
10431 0xde, 0xe1, 0xe1, 0xd4, 0xb3, 0x85, 0x57, 0x3a,
10432 0x34, 0x42, 0x66, 0x9f, 0xd4, 0xe8, 0xd7, 0xbe,
10433 0x9a, 0x8d, 0x79, 0x69, 0x64, 0x69, 0x75, 0x7d,
10434 0xae, 0x91, 0x73, 0x6c, 0x73, 0x6e, 0x53, 0x37,
10435 0x35, 0x2f, 0x3d, 0x51, 0x4c, 0x3c, 0x4c, 0x6f,
10436 0x8e, 0x82, 0x91, 0xcd, 0xff, 0xff, 0xb7, 0x6a,
10437 0x00, 0x23, 0x69, 0x98, 0x9e, 0x89, 0x70, 0x61,
10438 0x24, 0x5a, 0xa1, 0xd6, 0xef, 0xf4, 0xea, 0xde,
10439 0xae, 0x96, 0x70, 0x4f, 0x41, 0x4c, 0x65, 0x79,
10440 0x96, 0x95, 0x93, 0x91, 0x8e, 0x8c, 0x8a, 0x89,
10441 0x95, 0x8e, 0x82, 0x77, 0x70, 0x70, 0x73, 0x75,
10442 0x88, 0x8e, 0x97, 0x9f, 0xa4, 0xa4, 0xa1, 0x9f,
10443 0x66, 0x67, 0x6a, 0x6e, 0x73, 0x77, 0x7a, 0x7b,
10444 0x7b, 0x75, 0x6b, 0x62, 0x5e, 0x5f, 0x64, 0x67,
10445 0x62, 0x5c, 0x52, 0x49, 0x42, 0x3f, 0x40, 0x41,
10446 0x4d, 0x5d, 0x69, 0x64, 0x58, 0x5c, 0x74, 0x8d,
10447 0xb2, 0x9d, 0x80, 0x6a, 0x62, 0x64, 0x69, 0x6b,
10448 0x43, 0x44, 0x4f, 0x67, 0x7f, 0x87, 0x7b, 0x6b,
10449 0x7f, 0x7e, 0x7c, 0x79, 0x76, 0x74, 0x72, 0x70,
10450 0x76, 0x78, 0x7a, 0x7d, 0x80, 0x83, 0x85, 0x86,
10451 0x88, 0x86, 0x82, 0x7e, 0x79, 0x74, 0x71, 0x6f,
10452 0x5e, 0x5a, 0x58, 0x5c, 0x61, 0x5f, 0x55, 0x4c,
10453 0x50, 0x4b, 0x59, 0x75, 0x7d, 0x6b, 0x5c, 0x5c,
10454 0x73, 0x89, 0xa2, 0xad, 0xa9, 0x9f, 0x9c, 0x9c,
10455 0x96, 0x84, 0x68, 0x4d, 0x3d, 0x3a, 0x40, 0x46,
10456 0x3d, 0x53, 0x72, 0x89, 0x8e, 0x85, 0x78, 0x70,
10457 0x8e, 0x8b, 0x81, 0x70, 0x64, 0x64, 0x71, 0x7d,
10458 0x6d, 0x86, 0x9c, 0x96, 0x78, 0x5f, 0x59, 0x5e,
10459 0x54, 0x6a, 0x7a, 0x6e, 0x4f, 0x3b, 0x3f, 0x4d,
10460 0x6a, 0x5b, 0x4d, 0x50, 0x63, 0x75, 0x7e, 0x7e,
10461 0x92, 0x72, 0x51, 0x3a, 0x1f, 0x0c, 0x20, 0x44,
10462 0x3c, 0x69, 0x99, 0xab, 0xa4, 0x93, 0x7a, 0x65,
10463 0x66, 0x61, 0x5d, 0x5e, 0x61, 0x5d, 0x52, 0x48,
10464 0x4d, 0x4b, 0x47, 0x43, 0x42, 0x43, 0x45, 0x47,
10465 0x4a, 0x4d, 0x52, 0x49, 0x59, 0x55, 0x1e, 0x08,
10466 0x75, 0x7d, 0x90, 0xa9, 0xb5, 0xa2, 0x76, 0x51,
10467 0x40, 0x3b, 0x34, 0x30, 0x32, 0x3a, 0x44, 0x4a,
10468 0xab, 0xc2, 0xd5, 0xcd, 0xb4, 0xa8, 0xb6, 0xc9,
10469 0x95, 0x6d, 0x3e, 0x27, 0x28, 0x29, 0x1b, 0x0a,
10470 0x27, 0x31, 0x25, 0x0c, 0x18, 0x4b, 0x74, 0x7d,
10471 0x95, 0x95, 0x97, 0x9e, 0xa6, 0xa9, 0xa8, 0xa5,
10472 0x79, 0x7d, 0x82, 0x83, 0x7e, 0x72, 0x65, 0x5c,
10473 0x53, 0x8d, 0xc1, 0xba, 0x8b, 0x73, 0x8f, 0xb9,
10474 0xc5, 0xca, 0xc7, 0xb6, 0xa2, 0xa1, 0xb5, 0xcb,
10475 0xb4, 0xb0, 0xa7, 0x98, 0x85, 0x70, 0x5d, 0x52,
10476 0x68, 0x62, 0x4e, 0x2e, 0x1a, 0x2a, 0x5a, 0x84,
10477 0x89, 0x73, 0x53, 0x3c, 0x3d, 0x56, 0x77, 0x8f,
10478 0xb4, 0x7c, 0x37, 0x11, 0x15, 0x2a, 0x38, 0x3b,
10479 0x54, 0x48, 0x4a, 0x56, 0x4c, 0x3d, 0x51, 0x78,
10480 0xae, 0x8f, 0x75, 0x7d, 0x98, 0x9e, 0x80, 0x5e,
10481 0x56, 0x5b, 0x5d, 0x55, 0x43, 0x30, 0x21, 0x1b,
10482 0x38, 0x16, 0x21, 0x58, 0x64, 0x44, 0x49, 0x74,
10483 0x9f, 0x8c, 0x79, 0x79, 0x86, 0x8c, 0x82, 0x76,
10484 0x9c, 0x9b, 0x98, 0x95, 0x91, 0x8d, 0x8b, 0x89,
10485 0x92, 0x89, 0x7a, 0x6e, 0x6a, 0x6e, 0x76, 0x7c,
10486 0x86, 0x8c, 0x94, 0x9c, 0x9f, 0x9e, 0x9a, 0x97,
10487 0x87, 0x83, 0x7e, 0x76, 0x6e, 0x67, 0x61, 0x5e,
10488 0x63, 0x6a, 0x75, 0x7f, 0x84, 0x84, 0x81, 0x7e,
10489 0x5d, 0x58, 0x51, 0x4a, 0x47, 0x47, 0x4a, 0x4c,
10490 0x67, 0x71, 0x7f, 0x8b, 0x91, 0x91, 0x8d, 0x8a,
10491 0x81, 0x91, 0xaa, 0xc2, 0xcd, 0xc9, 0xbb, 0xb0,
10492 0xa0, 0x99, 0x93, 0x92, 0x8f, 0x83, 0x6c, 0x5a,
10493 0x48, 0x4a, 0x4c, 0x4f, 0x52, 0x55, 0x57, 0x59,
10494 0x5b, 0x5c, 0x60, 0x64, 0x68, 0x6c, 0x6f, 0x71,
10495 0x77, 0x76, 0x74, 0x72, 0x70, 0x6e, 0x6d, 0x6c,
10496 0x6c, 0x67, 0x63, 0x64, 0x66, 0x62, 0x56, 0x4b,
10497 0x3e, 0x3c, 0x33, 0x34, 0x53, 0x7e, 0x8e, 0x84,
10498 0xa2, 0x92, 0x77, 0x59, 0x44, 0x3e, 0x45, 0x4e,
10499 0x6f, 0x73, 0x75, 0x71, 0x62, 0x4d, 0x36, 0x28,
10500 0x1c, 0x46, 0x69, 0x5f, 0x3d, 0x36, 0x5e, 0x8c,
10501 0x83, 0x4f, 0x19, 0x14, 0x3d, 0x6d, 0x82, 0x82,
10502 0x70, 0x48, 0x24, 0x2a, 0x4f, 0x68, 0x5e, 0x48,
10503 0x44, 0x58, 0x6c, 0x6c, 0x5a, 0x46, 0x3d, 0x3d,
10504 0x40, 0x47, 0x55, 0x66, 0x72, 0x74, 0x6c, 0x64,
10505 0x4e, 0x40, 0x2f, 0x22, 0x22, 0x3f, 0x78, 0xab,
10506 0xad, 0xa0, 0x93, 0x94, 0x9f, 0xa0, 0x8c, 0x75,
10507 0x6c, 0x67, 0x62, 0x63, 0x64, 0x5f, 0x54, 0x49,
10508 0x4b, 0x49, 0x45, 0x41, 0x40, 0x41, 0x43, 0x45,
10509 0x4b, 0x4d, 0x50, 0x46, 0x56, 0x53, 0x1e, 0x09,
10510 0x66, 0x89, 0xb1, 0xbb, 0xa2, 0x78, 0x55, 0x44,
10511 0x1d, 0x27, 0x35, 0x40, 0x45, 0x41, 0x39, 0x32,
10512 0x83, 0x95, 0xa2, 0x9a, 0x8a, 0x8f, 0xae, 0xcd,
10513 0xb1, 0xa4, 0x82, 0x4b, 0x1d, 0x15, 0x34, 0x56,
10514 0x3c, 0x70, 0xa2, 0xba, 0xc8, 0xc5, 0x9c, 0x69,
10515 0x63, 0xa2, 0xe7, 0xf4, 0xc1, 0x76, 0x3d, 0x24,
10516 0x31, 0x28, 0x1d, 0x18, 0x1f, 0x31, 0x46, 0x54,
10517 0x4b, 0x41, 0x4b, 0x7b, 0xbb, 0xe2, 0xe0, 0xce,
10518 0xeb, 0xe4, 0xcd, 0xa5, 0x7e, 0x6e, 0x7a, 0x8c,
10519 0x5d, 0x77, 0x9e, 0xbd, 0xc7, 0xb8, 0x9e, 0x8b,
10520 0x35, 0x54, 0x75, 0x80, 0x76, 0x70, 0x7a, 0x89,
10521 0x46, 0x66, 0x94, 0xb6, 0xb9, 0x9d, 0x73, 0x56,
10522 0x48, 0x3f, 0x35, 0x36, 0x44, 0x59, 0x6b, 0x75,
10523 0x5b, 0x58, 0x67, 0x79, 0x6b, 0x4b, 0x4b, 0x64,
10524 0x7c, 0x82, 0x85, 0x7a, 0x61, 0x41, 0x26, 0x18,
10525 0x08, 0x14, 0x2a, 0x44, 0x56, 0x5b, 0x53, 0x49,
10526 0x8c, 0x42, 0x21, 0x42, 0x4b, 0x22, 0x0c, 0x1e,
10527 0x0c, 0x08, 0x16, 0x3f, 0x72, 0x8c, 0x83, 0x70,
10528 0x85, 0x87, 0x8a, 0x8e, 0x92, 0x96, 0x99, 0x9b,
10529 0x94, 0x87, 0x76, 0x68, 0x65, 0x6e, 0x7b, 0x85,
10530 0x88, 0x8d, 0x94, 0x9a, 0x9c, 0x99, 0x95, 0x91,
10531 0xaf, 0xac, 0xa5, 0x9c, 0x93, 0x8a, 0x83, 0x80,
10532 0x5d, 0x64, 0x6f, 0x79, 0x7e, 0x7e, 0x7a, 0x77,
10533 0x55, 0x51, 0x4b, 0x45, 0x43, 0x45, 0x48, 0x4b,
10534 0x4e, 0x66, 0x7c, 0x79, 0x63, 0x54, 0x59, 0x65,
10535 0x84, 0x82, 0x7f, 0x7e, 0x81, 0x8c, 0x99, 0xa3,
10536 0xc8, 0xc6, 0xc6, 0xcd, 0xd7, 0xde, 0xdf, 0xdd,
10537 0xd6, 0xd2, 0xcb, 0xc2, 0xb8, 0xaf, 0xa8, 0xa4,
10538 0xa1, 0x9e, 0x99, 0x92, 0x8b, 0x84, 0x7f, 0x7c,
10539 0x7f, 0x81, 0x84, 0x88, 0x8c, 0x90, 0x93, 0x94,
10540 0x99, 0x91, 0x88, 0x82, 0x7e, 0x73, 0x62, 0x54,
10541 0x4b, 0x53, 0x52, 0x51, 0x65, 0x81, 0x85, 0x76,
10542 0x72, 0x7c, 0x8c, 0x9b, 0xa0, 0x97, 0x85, 0x76,
10543 0x59, 0x64, 0x73, 0x7e, 0x7c, 0x6e, 0x5d, 0x50,
10544 0x67, 0x7f, 0x84, 0x5c, 0x24, 0x13, 0x39, 0x68,
10545 0xa7, 0x6b, 0x29, 0x17, 0x38, 0x62, 0x76, 0x76,
10546 0x6c, 0x47, 0x2e, 0x42, 0x70, 0x80, 0x60, 0x37,
10547 0x12, 0x17, 0x28, 0x47, 0x65, 0x70, 0x65, 0x56,
10548 0x30, 0x3f, 0x53, 0x63, 0x69, 0x69, 0x68, 0x67,
10549 0x6d, 0x47, 0x1f, 0x20, 0x52, 0x8c, 0xa5, 0xa2,
10550 0xad, 0xa0, 0x90, 0x83, 0x7a, 0x76, 0x7b, 0x82,
10551 0x72, 0x6d, 0x69, 0x6a, 0x6d, 0x69, 0x5e, 0x53,
10552 0x4b, 0x49, 0x45, 0x41, 0x40, 0x41, 0x43, 0x45,
10553 0x4c, 0x4c, 0x4e, 0x42, 0x52, 0x51, 0x1e, 0x0a,
10554 0x88, 0xa8, 0xc4, 0xbd, 0x99, 0x7a, 0x73, 0x7b,
10555 0x5e, 0x7e, 0xab, 0xcc, 0xce, 0xb1, 0x87, 0x68,
10556 0x74, 0x73, 0x7b, 0x8f, 0xa5, 0xaa, 0x9b, 0x8b,
10557 0xaa, 0xab, 0xaa, 0xa9, 0xab, 0xb6, 0xc8, 0xd6,
10558 0xfc, 0xe3, 0xa9, 0x71, 0x6f, 0x97, 0xae, 0xa9,
10559 0x4b, 0x75, 0x93, 0x7a, 0x3f, 0x1c, 0x2c, 0x4c,
10560 0x76, 0x5f, 0x43, 0x38, 0x4e, 0x83, 0xbf, 0xe7,
10561 0xb6, 0xe1, 0xf6, 0xc5, 0x6d, 0x3b, 0x4f, 0x79,
10562 0x7b, 0x79, 0x6d, 0x58, 0x48, 0x53, 0x75, 0x94,
10563 0x7a, 0x80, 0x86, 0x86, 0x7b, 0x67, 0x51, 0x43,
10564 0x37, 0x4b, 0x72, 0xa1, 0xb7, 0x9c, 0x5b, 0x25,
10565 0x51, 0x87, 0xd4, 0xff, 0xff, 0xd5, 0x88, 0x52,
10566 0x38, 0x39, 0x39, 0x38, 0x35, 0x2d, 0x22, 0x1b,
10567 0x1c, 0x29, 0x4e, 0x70, 0x64, 0x38, 0x26, 0x32,
10568 0x2a, 0x3e, 0x4c, 0x40, 0x25, 0x17, 0x22, 0x35,
10569 0x51, 0x4a, 0x47, 0x4f, 0x5a, 0x59, 0x48, 0x37,
10570 0x19, 0x1c, 0x35, 0x75, 0xc8, 0xfe, 0xfb, 0xe1,
10571 0x73, 0x5f, 0x4f, 0x55, 0x6a, 0x75, 0x6d, 0x5f,
10572 0x8c, 0x8c, 0x8a, 0x88, 0x87, 0x85, 0x83, 0x83,
10573 0x7e, 0x6f, 0x5a, 0x4b, 0x49, 0x55, 0x67, 0x74,
10574 0x7e, 0x82, 0x89, 0x8e, 0x8e, 0x8a, 0x85, 0x81,
10575 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c,
10576 0x69, 0x62, 0x58, 0x4f, 0x4b, 0x4d, 0x51, 0x54,
10577 0x4d, 0x48, 0x41, 0x3b, 0x37, 0x38, 0x3a, 0x3d,
10578 0x3c, 0x46, 0x47, 0x37, 0x2b, 0x3d, 0x6d, 0x97,
10579 0xb3, 0xb9, 0xbd, 0xbb, 0xb5, 0xb2, 0xb3, 0xb7,
10580 0x9a, 0x95, 0x8c, 0x84, 0x7f, 0x7c, 0x7b, 0x7b,
10581 0x95, 0x98, 0x9d, 0xa3, 0xaa, 0xb1, 0xb6, 0xb9,
10582 0xb6, 0xb7, 0xba, 0xbe, 0xc1, 0xc5, 0xc8, 0xc9,
10583 0xd0, 0xcf, 0xcc, 0xc9, 0xc6, 0xc2, 0xc0, 0xbe,
10584 0x9f, 0x9b, 0x97, 0x9a, 0x9d, 0x9a, 0x8f, 0x84,
10585 0x80, 0x74, 0x78, 0x8f, 0x9a, 0x93, 0x91, 0x9a,
10586 0x9b, 0x82, 0x62, 0x4d, 0x48, 0x48, 0x45, 0x40,
10587 0x6c, 0x6b, 0x6a, 0x6c, 0x72, 0x7c, 0x85, 0x8b,
10588 0x6b, 0x6f, 0x72, 0x74, 0x76, 0x7c, 0x86, 0x8e,
10589 0x67, 0x7b, 0x91, 0x99, 0x8e, 0x7a, 0x68, 0x5f,
10590 0x47, 0x44, 0x40, 0x3c, 0x36, 0x2b, 0x1e, 0x15,
10591 0x29, 0x1d, 0x1c, 0x35, 0x59, 0x6a, 0x5d, 0x49,
10592 0x4f, 0x53, 0x52, 0x4a, 0x43, 0x4b, 0x60, 0x74,
10593 0x9a, 0x9c, 0x87, 0x65, 0x5b, 0x69, 0x6d, 0x61,
10594 0x65, 0x6d, 0x7f, 0x90, 0x8b, 0x78, 0x6f, 0x72,
10595 0x6f, 0x6b, 0x69, 0x6d, 0x72, 0x70, 0x67, 0x5e,
10596 0x4d, 0x4b, 0x47, 0x43, 0x42, 0x43, 0x45, 0x47,
10597 0x4d, 0x4c, 0x4c, 0x3f, 0x4f, 0x4f, 0x1d, 0x0b,
10598 0x3f, 0x6d, 0xaa, 0xd2, 0xce, 0xa5, 0x71, 0x4e,
10599 0x3b, 0x36, 0x2e, 0x28, 0x26, 0x28, 0x2c, 0x2f,
10600 0x41, 0x7d, 0xbd, 0xce, 0xb6, 0xa2, 0xad, 0xc4,
10601 0x9d, 0x8d, 0x85, 0x94, 0xa8, 0xa4, 0x80, 0x5c,
10602 0x45, 0x4f, 0x4d, 0x4b, 0x66, 0x89, 0x83, 0x63,
10603 0x6f, 0x98, 0xbd, 0xb8, 0x94, 0x79, 0x7f, 0x92,
10604 0x6d, 0x63, 0x57, 0x55, 0x63, 0x7f, 0x9e, 0xb3,
10605 0xda, 0x89, 0x44, 0x54, 0x98, 0xad, 0x6f, 0x22,
10606 0x29, 0x49, 0x71, 0x8a, 0x95, 0xa1, 0xb4, 0xc6,
10607 0xdb, 0xc7, 0xa7, 0x86, 0x6c, 0x5e, 0x59, 0x59,
10608 0x63, 0x48, 0x31, 0x3c, 0x66, 0x93, 0xac, 0xb3,
10609 0x9f, 0xad, 0xbd, 0xbf, 0xab, 0x82, 0x55, 0x37,
10610 0x9f, 0x69, 0x29, 0x0b, 0x12, 0x23, 0x26, 0x21,
10611 0x35, 0x1f, 0x17, 0x1d, 0x1c, 0x21, 0x4c, 0x82,
10612 0x8d, 0x94, 0x96, 0x88, 0x6e, 0x57, 0x4a, 0x48,
10613 0x6d, 0x50, 0x32, 0x2e, 0x44, 0x5b, 0x62, 0x5f,
10614 0x39, 0x3a, 0x3e, 0x4b, 0x59, 0x55, 0x35, 0x14,
10615 0x63, 0x50, 0x39, 0x2e, 0x32, 0x3c, 0x43, 0x45,
10616 0x88, 0x8a, 0x8e, 0x92, 0x97, 0x9c, 0x9f, 0xa1,
10617 0xaa, 0x95, 0x75, 0x59, 0x4c, 0x50, 0x5d, 0x68,
10618 0x78, 0x7c, 0x82, 0x86, 0x86, 0x81, 0x7b, 0x76,
10619 0x62, 0x63, 0x65, 0x68, 0x6b, 0x6e, 0x70, 0x72,
10620 0x7d, 0x75, 0x69, 0x5d, 0x56, 0x54, 0x56, 0x58,
10621 0x55, 0x4f, 0x46, 0x3e, 0x38, 0x36, 0x37, 0x39,
10622 0x4c, 0x40, 0x3d, 0x55, 0x79, 0x8c, 0x84, 0x74,
10623 0x8d, 0x99, 0xa5, 0xa6, 0x9d, 0x93, 0x8f, 0x90,
10624 0x97, 0x9d, 0xa5, 0xac, 0xaf, 0xb2, 0xb5, 0xb8,
10625 0xc4, 0xc2, 0xbe, 0xb9, 0xb4, 0xaf, 0xab, 0xa9,
10626 0xab, 0xa9, 0xa4, 0x9e, 0x98, 0x92, 0x8d, 0x8b,
10627 0x80, 0x7d, 0x78, 0x70, 0x68, 0x61, 0x5b, 0x58,
10628 0x5f, 0x5c, 0x5c, 0x63, 0x6b, 0x6d, 0x65, 0x5d,
10629 0x4e, 0x44, 0x50, 0x73, 0x8a, 0x84, 0x79, 0x78,
10630 0x97, 0x8f, 0x8b, 0x94, 0x9e, 0x99, 0x82, 0x6c,
10631 0x6b, 0x63, 0x58, 0x51, 0x53, 0x5c, 0x69, 0x72,
10632 0x6e, 0x68, 0x67, 0x6f, 0x79, 0x77, 0x68, 0x59,
10633 0x5d, 0x7c, 0x9d, 0xa3, 0x92, 0x85, 0x8b, 0x98,
10634 0xa5, 0xa1, 0x95, 0x81, 0x6f, 0x6c, 0x78, 0x85,
10635 0x79, 0x6f, 0x62, 0x5a, 0x5a, 0x5b, 0x5a, 0x58,
10636 0x4f, 0x53, 0x4d, 0x36, 0x1c, 0x15, 0x25, 0x38,
10637 0x43, 0x8f, 0xbd, 0x9a, 0x68, 0x61, 0x73, 0x7c,
10638 0x8b, 0x78, 0x74, 0x86, 0x90, 0x82, 0x70, 0x6b,
10639 0x64, 0x61, 0x61, 0x68, 0x70, 0x71, 0x6a, 0x62,
10640 0x51, 0x4e, 0x4a, 0x46, 0x45, 0x46, 0x48, 0x4a,
10641 0x4e, 0x4c, 0x4a, 0x3c, 0x4c, 0x4d, 0x1d, 0x0c,
10642 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10643 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10644 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10645 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10646 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10647 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10648 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10649 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10650 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10651 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10652 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10653 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10654 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10655 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10656 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10657 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10658 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10659 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10660 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10661 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10662 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10663 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10664 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10665 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10666 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10667 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10668 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10669 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10670 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10671 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10672 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10673 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10674 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10675 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10676 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10677 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10678 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10679 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10680 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10681 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10682 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10683 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10684 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10685 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10686 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10687 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10688 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10689 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10690 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10691 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10692 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10693 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10694 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10695 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10696 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10697 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10698 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10699 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10700 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10701 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10702 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10703 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10704 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10705 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10706 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10707 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10708 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10709 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10710 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10711 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10712 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10713 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10714 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10715 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10716 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10717 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10718 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10719 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10720 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10721 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10722 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10723 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10724 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10725 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10726 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10727 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10728 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10729 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10730 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10731 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10732 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10733 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10734 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10735 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10736 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10737 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10738 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10739 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10740 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10741 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10742 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10743 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10744 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10745 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10746 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10747 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10748 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10749 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10750 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10751 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10752 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10753 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10754 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10755 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10756 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10757 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10758 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10759 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10760 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10761 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10762 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10763 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10764 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10765 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10766 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10767 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10768 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10769 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10770 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10771 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10772 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10773 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10774 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10775 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10776 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10777 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10778 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10779 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10780 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10781 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10782 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10783 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10784 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10785 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10786 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10787 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10788 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10789 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10790 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10791 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10792 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10793 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10794 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10795 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10796 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10797 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10798 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10799 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10800 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10801 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10802 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10803 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10804 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10805 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10806 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10807 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10808 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10809 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10810 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10811 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10812 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10813 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10814 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10815 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10816 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10817 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10818 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10819 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10820 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10821 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10822 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10823 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10824 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10825 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10826 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10827 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10828 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10829 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10830 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10831 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10832 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10833 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10834 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10835 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10836 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10837 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10838 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10839 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10840 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10841 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10842 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10843 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10844 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10845 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10846 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10847 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10848 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10849 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10850 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10851 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10852 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10853 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10854 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10855 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10856 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10857 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10858 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10859 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10860 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10861 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10862 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10863 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10864 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10865 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10866 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10867 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10868 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10869 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10870 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10871 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10872 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10873 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10874 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10875 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10876 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10877 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10878 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10879 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10880 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10881 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10882 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10883 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10884 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10885 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10886 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10887 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10888 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10889 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10890 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10891 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10892 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10893 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10894 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10895 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10896 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10897 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10898 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10899 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10900 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10901 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10902 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10903 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10904 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10905 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10906 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10907 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10908 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10909 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10910 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10911 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10912 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10913 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10914 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10915 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10916 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10917 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10918 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10919 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10920 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10921 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10922 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10923 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10924 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10925 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10926 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10927 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10928 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10929 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10930 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10931 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10932 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10933 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10934 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10935 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10936 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10937 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10938 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10939 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10940 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10941 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10942 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10943 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10944 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10945 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10946 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10947 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10948 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10949 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10950 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10951 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10952 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10953 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10954 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10955 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
10956 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
10957 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
10958 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
10959 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
10960 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
10961 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
10962 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
10963 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
10964 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
10965 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
10966 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
10967 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
10968 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
10969 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
10970 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
10971 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
10972 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
10973 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
10974 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
10975 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
10976 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
10977 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
10978 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
10979 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
10980 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
10981 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
10982 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
10983 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
10984 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
10985 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
10986 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
10987 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
10988 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
10989 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
10990 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
10991 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
10992 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
10993 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
10994 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
10995 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
10996 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
10997 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
10998 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
10999 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11000 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11001 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11002 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11003 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11004 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11005 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11006 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11007 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11008 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11009 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11010 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11011 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11012 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11013 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11014 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11015 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11016 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11017 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11018 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11019 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11020 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11021 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11022 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11023 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11024 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11025 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11026 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11027 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11028 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11029 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11030 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11031 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11032 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11033 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11034 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11035 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11036 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11037 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11038 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11039 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11040 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11041 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11042 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11043 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11044 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11045 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11046 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11047 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11048 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11049 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11050 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11051 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11052 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11053 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11054 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11055 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11056 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11057 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11058 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11059 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11060 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11061 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11062 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11063 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11064 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11065 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11066 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11067 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11068 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11069 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11070 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11071 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11072 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11073 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11074 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11075 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11076 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11077 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11078 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11079 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11080 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11081 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11082 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11083 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11084 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11085 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11086 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11087 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11088 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11089 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11090 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11091 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11092 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11093 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11094 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11095 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11096 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11097 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11098 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11099 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11100 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11101 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11102 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11103 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11104 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11105 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11106 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11107 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11108 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11109 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11110 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11111 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11112 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11113 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11114 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11115 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11116 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11117 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11118 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11119 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11120 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11121 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11122 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11123 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11124 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11125 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11126 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11127 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11128 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11129 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11130 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11131 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11132 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11133 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11134 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11135 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11136 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11137 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11138 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11139 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11140 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11141 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11142 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11143 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11144 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11145 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11146 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11147 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11148 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11149 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11150 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11151 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11152 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11153 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11154 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11155 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11156 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11157 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11158 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11159 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11160 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11161 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11162 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11163 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11164 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11165 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11166 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11167 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11168 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11169 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11170 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11171 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11172 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11173 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11174 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11175 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11176 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11177 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11178 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11179 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11180 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11181 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11182 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11183 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11184 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11185 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11186 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11187 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11188 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11189 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11190 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11191 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11192 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11193 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11194 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11195 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11196 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11197 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11198 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11199 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11200 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11201 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11202 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11203 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11204 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11205 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11206 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11207 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11208 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11209 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11210 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11211 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11212 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11213 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11214 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11215 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11216 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11217 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11218 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11219 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11220 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11221 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11222 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11223 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11224 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11225 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11226 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11227 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11228 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11229 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11230 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11231 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11232 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11233 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11234 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11235 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11236 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11237 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11238 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11239 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11240 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11241 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11242 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11243 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11244 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11245 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11246 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11247 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11248 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11249 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11250 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11251 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11252 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11253 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11254 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11255 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11256 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11257 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11258 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11259 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11260 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11261 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11262 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11263 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11264 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11265 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11266 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11267 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11268 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11269 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11270 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11271 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11272 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11273 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11274 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11275 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11276 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11277 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11278 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11279 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11280 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11281 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11282 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11283 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11284 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11285 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11286 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11287 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11288 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11289 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11290 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11291 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11292 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11293 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11294 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11295 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11296 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11297 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11298 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11299 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11300 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11301 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11302 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11303 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11304 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11305 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11306 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11307 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11308 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11309 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11310 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11311 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11312 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11313 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11314 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11315 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11316 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11317 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11318 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11319 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11320 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11321 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11322 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11323 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11324 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11325 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11326 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11327 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11328 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11329 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11330 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11331 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11332 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11333 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11334 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11335 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11336 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11337 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11338 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11339 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11340 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11341 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11342 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11343 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11344 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11345 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c,
11346 0x29, 0x32, 0x4e, 0x7b, 0x9d, 0x9a, 0x72, 0x4b,
11347 0x3f, 0x3f, 0x3c, 0x39, 0x33, 0x2d, 0x27, 0x24,
11348 0x06, 0x21, 0x4a, 0x70, 0x88, 0x91, 0x90, 0x8d,
11349 0xba, 0xcd, 0xdc, 0xd4, 0xb7, 0x9a, 0x8b, 0x89,
11350 0x5b, 0x6a, 0x72, 0x78, 0x95, 0xae, 0x98, 0x6c,
11351 0xa3, 0xa8, 0xa3, 0x8b, 0x68, 0x4f, 0x48, 0x4c,
11352 0x38, 0x49, 0x60, 0x6c, 0x63, 0x47, 0x24, 0x0c,
11353 0x5a, 0x40, 0x2b, 0x36, 0x56, 0x69, 0x60, 0x4d,
11354 0x6f, 0x63, 0x4a, 0x30, 0x2e, 0x53, 0x94, 0xc7,
11355 0xe4, 0xdd, 0xcc, 0xad, 0x80, 0x4b, 0x1c, 0x00,
11356 0x12, 0x1e, 0x24, 0x1b, 0x11, 0x1d, 0x40, 0x60,
11357 0x45, 0x46, 0x48, 0x4a, 0x4a, 0x49, 0x48, 0x47,
11358 0x34, 0x1c, 0x1d, 0x53, 0x9b, 0xb3, 0x88, 0x52,
11359 0x48, 0x36, 0x34, 0x43, 0x4d, 0x5c, 0x90, 0xcb,
11360 0xd9, 0xb3, 0x81, 0x5e, 0x53, 0x51, 0x4d, 0x47,
11361 0x58, 0x3e, 0x27, 0x2a, 0x42, 0x52, 0x4c, 0x3e,
11362 0x59, 0x34, 0x36, 0x59, 0x4e, 0x1e, 0x1d, 0x49,
11363 0x36, 0x37, 0x3b, 0x44, 0x53, 0x68, 0x7c, 0x89,
11364 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x74,
11365 0x7e, 0x6f, 0x5b, 0x4f, 0x54, 0x6a, 0x86, 0x99,
11366 0x8c, 0x90, 0x96, 0x99, 0x98, 0x93, 0x8c, 0x88,
11367 0x73, 0x72, 0x70, 0x6d, 0x6a, 0x67, 0x65, 0x63,
11368 0x5c, 0x60, 0x66, 0x68, 0x66, 0x5e, 0x56, 0x50,
11369 0x66, 0x60, 0x56, 0x4b, 0x44, 0x40, 0x40, 0x41,
11370 0x26, 0x3a, 0x55, 0x6b, 0x7b, 0x8a, 0x9a, 0xa6,
11371 0xa8, 0xab, 0xaa, 0xa3, 0x9d, 0xa4, 0xb6, 0xc6,
11372 0xc7, 0xcf, 0xd8, 0xd7, 0xcc, 0xbd, 0xb0, 0xaa,
11373 0x9c, 0x99, 0x95, 0x8e, 0x87, 0x81, 0x7c, 0x7a,
11374 0x8f, 0x91, 0x95, 0x99, 0x9e, 0xa3, 0xa6, 0xa8,
11375 0xb1, 0xb2, 0xb4, 0xb7, 0xba, 0xbd, 0xc0, 0xc1,
11376 0xb3, 0xab, 0xa3, 0x9f, 0x9b, 0x91, 0x81, 0x74,
11377 0x66, 0x60, 0x52, 0x53, 0x73, 0x98, 0x9a, 0x85,
11378 0x83, 0x75, 0x6c, 0x78, 0x93, 0xa4, 0xa2, 0x98,
11379 0x89, 0x88, 0x84, 0x7f, 0x78, 0x70, 0x6a, 0x66,
11380 0x6a, 0x73, 0x7a, 0x78, 0x70, 0x6c, 0x71, 0x78,
11381 0x84, 0x80, 0x78, 0x72, 0x73, 0x80, 0x93, 0xa1,
11382 0x8e, 0x81, 0x78, 0x81, 0x94, 0x9c, 0x90, 0x80,
11383 0x98, 0x9f, 0x9c, 0x89, 0x73, 0x74, 0x8e, 0xa9,
11384 0x70, 0x82, 0x8b, 0x78, 0x4f, 0x2c, 0x1f, 0x21,
11385 0x34, 0x79, 0xa7, 0x9b, 0x89, 0x88, 0x77, 0x56,
11386 0x63, 0x51, 0x51, 0x68, 0x73, 0x65, 0x56, 0x55,
11387 0x5a, 0x58, 0x59, 0x62, 0x6c, 0x6f, 0x69, 0x62,
11388 0x53, 0x50, 0x4c, 0x49, 0x47, 0x48, 0x4b, 0x4c,
11389 0x4e, 0x4c, 0x49, 0x3a, 0x4a, 0x4c, 0x1d, 0x0c
11390};
11391
11392
11393/*
11394 Initialization- and return-value-related functions
11395*/
11396
11397void mpeg2_init( void )
11398{
11399 unsigned int i;
11400 unsigned char *p;
11401 volatile char bitmask = 0;
11402
11403 /*
11404 Apply volatile XOR-bitmask to entire input array.
11405 */
11406 p = (unsigned char *) &mpeg2_oldorgframe[ 0 ];
11407 _Pragma( "loopbound min 90112 max 90112" )
11408 for ( i = 0; i < sizeof( mpeg2_oldorgframe ); ++i, ++p )
11409 *p ^= bitmask;
11410}
11411
11412
11413int mpeg2_return( void )
11414{
11415 int checksum = 0;
11416 int i, j, k, l;
11417
11418
11419 _Pragma( "loopbound min 352 max 352" )
11420 for ( i = 0; i < 352; i++ ) {
11421 j = 0;
11422 _Pragma( "loopbound min 2 max 2" )
11423 for ( ; j < 2; j++ ) {
11424 k = 0;
11425 _Pragma( "loopbound min 2 max 2" )
11426 for ( ; k < 2; k++ ) {
11427 l = 0;
11428 _Pragma( "loopbound min 2 max 2" )
11429 for ( ; l < 2; l++ )
11430 checksum += mpeg2_mbinfo[ i ].MV[ j ][ k ][ l ];
11431 }
11432 }
11433 }
11434
11435 return( checksum );
11436}
11437
11438
11439/*
11440 Algorithm core functions
11441*/
11442
11443/*
11444 motion estimation for progressive and interlaced frame pictures
11445
11446 oldorg: source frame for forward prediction (used for P and B frames)
11447 neworg: source frame for backward prediction (B frames only)
11448 oldref: reconstructed frame for forward prediction (P and B frames)
11449 newref: reconstructed frame for backward prediction (B frames only)
11450 cur: current frame (the one for which the prediction is formed)
11451 sxf,syf: forward search window (frame coordinates)
11452 sxb,syb: backward search window (frame coordinates)
11453 mbi: pointer to macroblock info structure
11454
11455 results:
11456 mbi->
11457 mb_type: 0, MB_INTRA, MB_FORWARD, MB_BACKWARD, MB_FORWARD|MB_BACKWARD
11458 MV[][][]: motion vectors (frame format)
11459 mv_field_sel: top/bottom field (for field prediction)
11460 motion_type: MC_FRAME, MC_FIELD
11461
11462 uses global vars: mpeg2_pict_type, frame_pred_dct
11463*/
11464void mpeg2_motion_estimation( unsigned char *oldorg, unsigned char *neworg,
11465 unsigned char *oldref, unsigned char *newref,
11466 unsigned char *cur, unsigned char *curref,
11467 int sxf, int syf, int sxb, int syb,
11468 struct mbinfo *mbi, int secondfield, int ipflag )
11469{
11470 int i, j;
11471
11472
11473 /* loop through all macroblocks of the picture */
11474 _Pragma( "loopbound min 16 max 16" )
11475 for ( j = 0; j < mpeg2_height2; j += 16 ) {
11476 i = 0;
11477 _Pragma( "loopbound min 22 max 22" )
11478 for ( ; i < mpeg2_width; i += 16 ) {
11479 if ( mpeg2_pict_struct == 3 )
11480 mpeg2_frame_ME(
11481 oldorg, neworg, oldref, newref, cur, i, j, sxf, syf, sxb, syb, mbi );
11482 else
11483 mpeg2_field_ME(
11484 oldorg, neworg, oldref, newref, cur, curref, i, j, sxf, syf, sxb, syb,
11485 mbi, secondfield, ipflag );
11486 mbi++;
11487 }
11488 }
11489}
11490
11491
11492void mpeg2_frame_ME( unsigned char *oldorg, unsigned char *neworg,
11493 unsigned char *oldref, unsigned char *newref,
11494 unsigned char *cur, int i, int j, int sxf, int syf,
11495 int sxb, int syb, struct mbinfo *mbi )
11496{
11497 int imin, jmin, iminf, jminf, iminr, jminr;
11498 int imint, jmint, iminb, jminb;
11499 int imintf, jmintf, iminbf, jminbf;
11500 int imintr, jmintr, iminbr, jminbr;
11501 int var, v0;
11502 int dmc, dmcf, dmcr, dmci, vmc, vmcf, vmcr, vmci;
11503 int dmcfield, dmcfieldf, dmcfieldr, dmcfieldi;
11504 int tsel, bsel, tself, bself, tselr, bselr;
11505 unsigned char *mb;
11506 int imins[ 2 ][ 2 ], jmins[ 2 ][ 2 ];
11507 int imindp, jmindp, imindmv, jmindmv, dmc_dp, vmc_dp;
11508
11509
11510 mb = cur + i + mpeg2_width * j;
11511
11512 var = mpeg2_variance( mb, mpeg2_width );
11513
11514 if ( mpeg2_pict_type == 1 )
11515 mbi->mb_type = 1;
11516 else
11517
11518 if ( mpeg2_pict_type == 2 ) {
11519 if ( mpeg2_frame_pred_dct ) {
11520 dmc =
11521 mpeg2_fullsearch(
11522 oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width,
11523 mpeg2_height, &imin, &jmin );
11524 vmc =
11525 mpeg2_dist2(
11526 oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb, mpeg2_width,
11527 imin & 1, jmin & 1, 16 );
11528 mbi->motion_type = 2;
11529 } else {
11530 mpeg2_frame_estimate(
11531 oldorg, oldref, mb, i, j, sxf, syf, &imin, &jmin, &imint, &jmint,
11532 &iminb, &jminb, &dmc, &dmcfield, &tsel, &bsel, imins, jmins );
11533
11534 if ( mpeg2_M == 1 )
11535 mpeg2_dpframe_estimate(
11536 oldref, mb, i, j >> 1, imins, jmins, &imindp, &jmindp, &imindmv,
11537 &jmindmv, &dmc_dp, &vmc_dp );
11538
11539 /* select between dual prime, frame and field prediction */
11540 if ( ( mpeg2_M == 1 ) && ( dmc_dp < dmc ) && ( dmc_dp < dmcfield ) ) {
11541 mbi->motion_type = 3;
11542 dmc = dmc_dp;
11543 vmc = vmc_dp;
11544 } else
11545
11546 if ( dmc <= dmcfield ) {
11547 mbi->motion_type = 2;
11548 vmc =
11549 mpeg2_dist2(
11550 oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb,
11551 mpeg2_width, imin & 1, jmin & 1, 16 );
11552 } else {
11553 mbi->motion_type = 1;
11554 dmc = dmcfield;
11555 vmc =
11556 mpeg2_dist2(
11557 oldref + ( tsel ? mpeg2_width : 0 ) + ( imint >> 1 )
11558 + ( mpeg2_width << 1 ) * ( jmint >> 1 ),
11559 mb, mpeg2_width << 1, imint & 1, jmint & 1, 8 );
11560 vmc +=
11561 mpeg2_dist2(
11562 oldref + ( bsel ? mpeg2_width : 0 ) + ( iminb >> 1 )
11563 + ( mpeg2_width << 1 ) * ( jminb >> 1 ),
11564 mb + mpeg2_width, mpeg2_width << 1, iminb & 1, jminb & 1, 8 );
11565 }
11566 }
11567
11568 /*
11569 select between intra or non-intra coding:
11570
11571 selection is based on intra block variance (var) vs.
11572 prediction error variance (vmc)
11573
11574 blocks with small prediction error are always coded non-intra
11575 even if variance is smaller (is this reasonable?)
11576 */
11577 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
11578 mbi->mb_type = 1;
11579 else {
11580 /*
11581 select between MC / No-MC
11582
11583 use No-MC if var(No-MC) <= 1.25*var(MC)
11584 (i.e slightly biased towards No-MC)
11585
11586 blocks with small prediction error are always coded as No-MC
11587 (requires no motion vectors, allows skipping)
11588 */
11589 v0 =
11590 mpeg2_dist2( oldref + i + mpeg2_width * j, mb, mpeg2_width, 0, 0, 16 );
11591
11592 if ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) {
11593 /* use MC */
11594 var = vmc;
11595 mbi->mb_type = 8;
11596
11597 if ( mbi->motion_type == 2 ) {
11598 mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 );
11599 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 );
11600 } else
11601
11602 if ( mbi->motion_type == 3 ) {
11603 /* these are FRAME vectors */
11604 /* same parity vector */
11605 mbi->MV[ 0 ][ 0 ][ 0 ] = imindp - ( i << 1 );
11606 mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmindp << 1 ) - ( j << 1 );
11607
11608 /* opposite parity vector */
11609 mbi->dmvector[ 0 ] = imindmv;
11610 mbi->dmvector[ 1 ] = jmindmv;
11611 } else {
11612 /* these are FRAME vectors */
11613 mbi->MV[ 0 ][ 0 ][ 0 ] = imint - ( i << 1 );
11614 mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmint << 1 ) - ( j << 1 );
11615 mbi->MV[ 1 ][ 0 ][ 0 ] = iminb - ( i << 1 );
11616 mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminb << 1 ) - ( j << 1 );
11617 mbi->mv_field_sel[ 0 ][ 0 ] = tsel;
11618 mbi->mv_field_sel[ 1 ][ 0 ] = bsel;
11619 }
11620 } else {
11621 /* No-MC */
11622 var = v0;
11623 mbi->mb_type = 0;
11624 mbi->motion_type = 2;
11625 mbi->MV[ 0 ][ 0 ][ 0 ] = 0;
11626 mbi->MV[ 0 ][ 0 ][ 1 ] = 0;
11627 }
11628 }
11629 } else { /* if (mpeg2_pict_type==B_TYPE) */
11630
11631 if ( mpeg2_frame_pred_dct ) {
11632 /* forward */
11633 dmcf =
11634 mpeg2_fullsearch(
11635 oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width,
11636 mpeg2_height, &iminf, &jminf );
11637 vmcf =
11638 mpeg2_dist2(
11639 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb,
11640 mpeg2_width, iminf & 1, jminf & 1, 16 );
11641
11642 /* backward */
11643 dmcr =
11644 mpeg2_fullsearch(
11645 neworg, newref, mb, mpeg2_width, i, j, sxb, syb, 16, mpeg2_width,
11646 mpeg2_height, &iminr, &jminr );
11647 vmcr =
11648 mpeg2_dist2(
11649 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb,
11650 mpeg2_width, iminr & 1, jminr & 1, 16 );
11651
11652 /* interpolated (bidirectional) */
11653 vmci =
11654 mpeg2_bdist2(
11655 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ),
11656 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ),
11657 mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
11658
11659 /* decisions */
11660
11661 /*
11662 select between forward/backward/interpolated prediction:
11663 use the one with smallest mean sqaured prediction error
11664 */
11665 if ( ( vmcf <= vmcr ) && ( vmcf <= vmci ) ) {
11666 vmc = vmcf;
11667 mbi->mb_type = 8;
11668 } else
11669
11670 if ( vmcr <= vmci ) {
11671 vmc = vmcr;
11672 mbi->mb_type = 4;
11673 } else {
11674 vmc = vmci;
11675 mbi->mb_type = 8 | 4;
11676 }
11677
11678 mbi->motion_type = 2;
11679 } else {
11680 /* forward prediction */
11681 mpeg2_frame_estimate(
11682 oldorg, oldref, mb, i, j, sxf, syf, &iminf, &jminf, &imintf, &jmintf,
11683 &iminbf, &jminbf, &dmcf, &dmcfieldf, &tself, &bself, imins, jmins );
11684
11685 /* backward prediction */
11686 mpeg2_frame_estimate(
11687 neworg, newref, mb, i, j, sxb, syb, &iminr, &jminr, &imintr, &jmintr,
11688 &iminbr, &jminbr, &dmcr, &dmcfieldr, &tselr, &bselr, imins, jmins );
11689
11690 /* calculate interpolated distance */
11691 /* frame */
11692 dmci =
11693 mpeg2_bdist1(
11694 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ),
11695 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ),
11696 mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
11697
11698 /* top field */
11699 dmcfieldi =
11700 mpeg2_bdist1(
11701 oldref + ( imintf >> 1 ) + ( tself ? mpeg2_width : 0 )
11702 + ( mpeg2_width << 1 ) * ( jmintf >> 1 ),
11703 newref + ( imintr >> 1 ) + ( tselr ? mpeg2_width : 0 )
11704 + ( mpeg2_width << 1 ) * ( jmintr >> 1 ),
11705 mb, mpeg2_width << 1, imintf & 1, jmintf & 1, imintr & 1, jmintr & 1,
11706 8 );
11707
11708 /* bottom field */
11709 dmcfieldi +=
11710 mpeg2_bdist1(
11711 oldref + ( iminbf >> 1 ) + ( bself ? mpeg2_width : 0 )
11712 + ( mpeg2_width << 1 ) * ( jminbf >> 1 ),
11713 newref + ( iminbr >> 1 ) + ( bselr ? mpeg2_width : 0 )
11714 + ( mpeg2_width << 1 ) * ( jminbr >> 1 ),
11715 mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, iminbr & 1,
11716 jminbr & 1, 8 );
11717
11718 /*
11719 select prediction type of minimum distance from the
11720 six candidates (field/frame * forward/backward/interpolated)
11721 */
11722 if ( ( dmci < dmcfieldi ) && ( dmci < dmcf ) && ( dmci < dmcfieldf ) &&
11723 ( dmci < dmcr ) && ( dmci < dmcfieldr ) ) {
11724 /* frame, interpolated */
11725 mbi->mb_type = 8 | 4;
11726 mbi->motion_type = 2;
11727 vmc =
11728 mpeg2_bdist2(
11729 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ),
11730 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ),
11731 mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
11732 } else
11733
11734 if ( ( dmcfieldi < dmcf ) && ( dmcfieldi < dmcfieldf ) &&
11735 ( dmcfieldi < dmcr ) && ( dmcfieldi < dmcfieldr ) ) {
11736 /* field, interpolated */
11737 mbi->mb_type = 8 | 4;
11738 mbi->motion_type = 1;
11739 vmc =
11740 mpeg2_bdist2(
11741 oldref + ( imintf >> 1 ) + ( tself ? mpeg2_width : 0 )
11742 + ( mpeg2_width << 1 ) * ( jmintf >> 1 ),
11743 newref + ( imintr >> 1 ) + ( tselr ? mpeg2_width : 0 )
11744 + ( mpeg2_width << 1 ) * ( jmintr >> 1 ),
11745 mb, mpeg2_width << 1, imintf & 1, jmintf & 1, imintr & 1, jmintr & 1,
11746 8 );
11747 vmc +=
11748 mpeg2_bdist2(
11749 oldref + ( iminbf >> 1 ) + ( bself ? mpeg2_width : 0 )
11750 + ( mpeg2_width << 1 ) * ( jminbf >> 1 ),
11751 newref + ( iminbr >> 1 ) + ( bselr ? mpeg2_width : 0 )
11752 + ( mpeg2_width << 1 ) * ( jminbr >> 1 ),
11753 mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1,
11754 iminbr & 1, jminbr & 1, 8 );
11755 } else
11756
11757 if ( ( dmcf < dmcfieldf ) && ( dmcf < dmcr ) && ( dmcf < dmcfieldr ) ) {
11758 /* frame, forward */
11759 mbi->mb_type = 8;
11760 mbi->motion_type = 2;
11761 vmc =
11762 mpeg2_dist2(
11763 oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb,
11764 mpeg2_width, iminf & 1, jminf & 1, 16 );
11765 } else
11766
11767 if ( ( dmcfieldf < dmcr ) && ( dmcfieldf < dmcfieldr ) ) {
11768 /* field, forward */
11769 mbi->mb_type = 8;
11770 mbi->motion_type = 1;
11771 vmc =
11772 mpeg2_dist2(
11773 oldref + ( tself ? mpeg2_width : 0 ) + ( imintf >> 1 )
11774 + ( mpeg2_width << 1 ) * ( jmintf >> 1 ),
11775 mb, mpeg2_width << 1, imintf & 1, jmintf & 1, 8 );
11776 vmc +=
11777 mpeg2_dist2(
11778 oldref + ( bself ? mpeg2_width : 0 ) + ( iminbf >> 1 )
11779 + ( mpeg2_width << 1 ) * ( jminbf >> 1 ),
11780 mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, 8 );
11781 } else
11782
11783 if ( dmcr < dmcfieldr ) {
11784 /* frame, backward */
11785 mbi->mb_type = 4;
11786 mbi->motion_type = 2;
11787 vmc =
11788 mpeg2_dist2(
11789 newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb,
11790 mpeg2_width, iminr & 1, jminr & 1, 16 );
11791 } else {
11792 /* field, backward */
11793 mbi->mb_type = 4;
11794 mbi->motion_type = 1;
11795 vmc =
11796 mpeg2_dist2(
11797 newref + ( tselr ? mpeg2_width : 0 ) + ( imintr >> 1 )
11798 + ( mpeg2_width << 1 ) * ( jmintr >> 1 ),
11799 mb, mpeg2_width << 1, imintr & 1, jmintr & 1, 8 );
11800 vmc +=
11801 mpeg2_dist2(
11802 newref + ( bselr ? mpeg2_width : 0 ) + ( iminbr >> 1 )
11803 + ( mpeg2_width << 1 ) * ( jminbr >> 1 ),
11804 mb + mpeg2_width, mpeg2_width << 1, iminbr & 1, jminbr & 1, 8 );
11805 }
11806 }
11807
11808 /*
11809 select between intra or non-intra coding:
11810
11811 selection is based on intra block variance (var) vs.
11812 prediction error variance (vmc)
11813
11814 blocks with small prediction error are always coded non-intra
11815 even if variance is smaller (is this reasonable?)
11816 */
11817 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
11818 mbi->mb_type = 1;
11819 else {
11820 var = vmc;
11821
11822 if ( mbi->motion_type == 2 ) {
11823 /* forward */
11824 mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 );
11825 mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 );
11826 /* backward */
11827 mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 );
11828 mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 );
11829 } else {
11830 /* these are FRAME vectors */
11831 /* forward */
11832 mbi->MV[ 0 ][ 0 ][ 0 ] = imintf - ( i << 1 );
11833 mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmintf << 1 ) - ( j << 1 );
11834 mbi->MV[ 1 ][ 0 ][ 0 ] = iminbf - ( i << 1 );
11835 mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminbf << 1 ) - ( j << 1 );
11836 mbi->mv_field_sel[ 0 ][ 0 ] = tself;
11837 mbi->mv_field_sel[ 1 ][ 0 ] = bself;
11838 /* backward */
11839 mbi->MV[ 0 ][ 1 ][ 0 ] = imintr - ( i << 1 );
11840 mbi->MV[ 0 ][ 1 ][ 1 ] = ( jmintr << 1 ) - ( j << 1 );
11841 mbi->MV[ 1 ][ 1 ][ 0 ] = iminbr - ( i << 1 );
11842 mbi->MV[ 1 ][ 1 ][ 1 ] = ( jminbr << 1 ) - ( j << 1 );
11843 mbi->mv_field_sel[ 0 ][ 1 ] = tselr;
11844 mbi->mv_field_sel[ 1 ][ 1 ] = bselr;
11845 }
11846 }
11847 }
11848
11849 mbi->var = var;
11850}
11851
11852
11853/*
11854 motion estimation for field pictures
11855
11856 oldorg: original frame for forward prediction (P and B frames)
11857 neworg: original frame for backward prediction (B frames only)
11858 oldref: reconstructed frame for forward prediction (P and B frames)
11859 newref: reconstructed frame for backward prediction (B frames only)
11860 cur: current original frame (the one for which the prediction is formed)
11861 curref: current reconstructed frame (to predict second field from first)
11862 sxf,syf: forward search window (frame coordinates)
11863 sxb,syb: backward search window (frame coordinates)
11864 mbi: pointer to macroblock info structure
11865 secondfield: indicates second field of a frame (in P fields this means
11866 that reference field of opposite parity is in curref instead
11867 of oldref)
11868 ipflag: indicates a P type field which is the second field of a frame
11869 in which the first field is I type (this restricts predictions
11870 to be based only on the opposite parity (=I) field)
11871
11872 results:
11873 mbi->
11874 mb_type: 0, MB_INTRA, MB_FORWARD, MB_BACKWARD, MB_FORWARD|MB_BACKWARD
11875 MV[][][]: motion vectors (field format)
11876 mv_field_sel: top/bottom field
11877 motion_type: MC_FIELD, MC_16X8
11878
11879 uses global vars: mpeg2_pict_type, mpeg2_pict_struct
11880*/
11881void mpeg2_field_ME( unsigned char *oldorg, unsigned char *neworg,
11882 unsigned char *oldref, unsigned char *newref,
11883 unsigned char *cur, unsigned char *curref, int i, int j,
11884 int sxf, int syf, int sxb, int syb, struct mbinfo *mbi,
11885 int secondfield, int ipflag )
11886{
11887 int w2;
11888 unsigned char *mb, *toporg, *topref, *botorg, *botref;
11889 int var, vmc, v0, dmcfieldi, dmc8i;
11890 int imin, jmin, imin8u, jmin8u, imin8l, jmin8l, dmcfield, dmc8, sel, sel8u,
11891 sel8l;
11892 int iminf, jminf, imin8uf, jmin8uf, imin8lf, jmin8lf, dmcfieldf, dmc8f, self,
11893 sel8uf, sel8lf;
11894 int iminr, jminr, imin8ur, jmin8ur, imin8lr, jmin8lr, dmcfieldr, dmc8r, selr,
11895 sel8ur, sel8lr;
11896 int imins, jmins, ds, imindmv, jmindmv, vmc_dp, dmc_dp;
11897
11898
11899 w2 = mpeg2_width << 1;
11900 mb = cur + i + w2 * j;
11901
11902 if ( mpeg2_pict_struct == 2 )
11903 mb += mpeg2_width;
11904
11905 var = mpeg2_variance( mb, w2 );
11906
11907 if ( mpeg2_pict_type == 1 )
11908 mbi->mb_type = 1;
11909 else
11910
11911 if ( mpeg2_pict_type == 2 ) {
11912 toporg = oldorg;
11913 topref = oldref;
11914 botorg = oldorg + mpeg2_width;
11915 botref = oldref + mpeg2_width;
11916
11917 if ( secondfield ) {
11918 /* opposite parity field is in same frame */
11919 if ( mpeg2_pict_struct == 1 ) {
11920 /* current is top field */
11921 botorg = cur + mpeg2_width;
11922 botref = curref + mpeg2_width;
11923 } else {
11924 /* current is bottom field */
11925 toporg = cur;
11926 topref = curref;
11927 }
11928 }
11929
11930 mpeg2_field_estimate(
11931 toporg, topref, botorg, botref, mb, i, j, sxf, syf, ipflag, &imin, &jmin,
11932 &imin8u, &jmin8u, &imin8l, &jmin8l, &dmcfield, &dmc8, &sel, &sel8u,
11933 &sel8l, &imins, &jmins, &ds );
11934
11935 if ( ( mpeg2_M == 1 ) && !ipflag )
11936 /* generic condition which permits Dual Prime */
11937 mpeg2_dpfield_estimate(
11938 topref, botref, mb, i, j, imins, jmins, &imindmv, &jmindmv, &dmc_dp,
11939 &vmc_dp );
11940
11941 /* select between dual prime, field and 16x8 prediction */
11942 if ( ( mpeg2_M == 1 ) && !ipflag && ( dmc_dp < dmc8 ) &&
11943 ( dmc_dp < dmcfield ) ) {
11944 /* Dual Prime prediction */
11945 mbi->motion_type = 3;
11946 vmc = vmc_dp; /* we already calculated L2 error for Dual */
11947
11948 } else
11949
11950 if ( dmc8 < dmcfield ) {
11951 /* 16x8 prediction */
11952 mbi->motion_type = 2;
11953 /* upper half block */
11954 vmc =
11955 mpeg2_dist2(
11956 ( sel8u ? botref : topref ) + ( imin8u >> 1 ) + w2 * ( jmin8u >> 1 ),
11957 mb, w2, imin8u & 1, jmin8u & 1, 8 );
11958 /* lower half block */
11959 vmc +=
11960 mpeg2_dist2(
11961 ( sel8l ? botref : topref ) + ( imin8l >> 1 ) + w2 * ( jmin8l >> 1 ),
11962 mb + 8 * w2, w2, imin8l & 1, jmin8l & 1, 8 );
11963 } else {
11964 /* field prediction */
11965 mbi->motion_type = 1;
11966 vmc =
11967 mpeg2_dist2(
11968 ( sel ? botref : topref ) + ( imin >> 1 ) + w2 * ( jmin >> 1 ),
11969 mb, w2, imin & 1, jmin & 1, 16 );
11970 }
11971
11972 /* select between intra and non-intra coding */
11973 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
11974 mbi->mb_type = 1;
11975 else {
11976 /*
11977 zero MV field prediction from same parity ref. field
11978 (not allowed if ipflag is set)
11979 */
11980 if ( !ipflag )
11981 v0 =
11982 mpeg2_dist2(
11983 ( ( mpeg2_pict_struct == 2 ) ? botref : topref ) + i + w2 * j, mb,
11984 w2, 0, 0, 16 );
11985
11986 if ( ipflag || ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) ) {
11987 var = vmc;
11988 mbi->mb_type = 8;
11989
11990 if ( mbi->motion_type == 1 ) {
11991 mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 );
11992 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 );
11993 mbi->mv_field_sel[ 0 ][ 0 ] = sel;
11994 } else
11995
11996 if ( mbi->motion_type == 3 ) {
11997 /* same parity vector */
11998 mbi->MV[ 0 ][ 0 ][ 0 ] = imins - ( i << 1 );
11999 mbi->MV[ 0 ][ 0 ][ 1 ] = jmins - ( j << 1 );
12000
12001 /* opposite parity vector */
12002 mbi->dmvector[ 0 ] = imindmv;
12003 mbi->dmvector[ 1 ] = jmindmv;
12004 } else {
12005 mbi->MV[ 0 ][ 0 ][ 0 ] = imin8u - ( i << 1 );
12006 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8u - ( j << 1 );
12007 mbi->MV[ 1 ][ 0 ][ 0 ] = imin8l - ( i << 1 );
12008 mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8l - ( ( j + 8 ) << 1 );
12009 mbi->mv_field_sel[ 0 ][ 0 ] = sel8u;
12010 mbi->mv_field_sel[ 1 ][ 0 ] = sel8l;
12011 }
12012 } else {
12013 /* No MC */
12014 var = v0;
12015 mbi->mb_type = 0;
12016 mbi->motion_type = 1;
12017 mbi->MV[ 0 ][ 0 ][ 0 ] = 0;
12018 mbi->MV[ 0 ][ 0 ][ 1 ] = 0;
12019 mbi->mv_field_sel[ 0 ][ 0 ] = ( mpeg2_pict_struct == 2 );
12020 }
12021 }
12022 } else { /* if (mpeg2_pict_type==B_TYPE) */
12023 /* forward prediction */
12024 mpeg2_field_estimate(
12025 oldorg, oldref, oldorg + mpeg2_width, oldref + mpeg2_width, mb, i, j, sxf,
12026 syf, 0, &iminf, &jminf, &imin8uf, &jmin8uf, &imin8lf, &jmin8lf,
12027 &dmcfieldf, &dmc8f, &self, &sel8uf, &sel8lf, &imins, &jmins, &ds );
12028
12029 /* backward prediction */
12030 mpeg2_field_estimate(
12031 neworg, newref, neworg + mpeg2_width, newref + mpeg2_width, mb, i, j, sxb,
12032 syb, 0, &iminr, &jminr, &imin8ur, &jmin8ur, &imin8lr, &jmin8lr,
12033 &dmcfieldr, &dmc8r, &selr, &sel8ur, &sel8lr, &imins, &jmins, &ds );
12034
12035 /* calculate distances for bidirectional prediction */
12036 /* field */
12037 dmcfieldi =
12038 mpeg2_bdist1(
12039 oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 )
12040 + w2 * ( jminf >> 1 ),
12041 newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 )
12042 + w2 * ( jminr >> 1 ),
12043 mb, w2, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
12044
12045 /* 16x8 upper half block */
12046 dmc8i =
12047 mpeg2_bdist1(
12048 oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 )
12049 + w2 * ( jmin8uf >> 1 ),
12050 newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 )
12051 + w2 * ( jmin8ur >> 1 ),
12052 mb, w2, imin8uf & 1, jmin8uf & 1, imin8ur & 1, jmin8ur & 1, 8 );
12053
12054 /* 16x8 lower half block */
12055 dmc8i +=
12056 mpeg2_bdist1(
12057 oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 )
12058 + w2 * ( jmin8lf >> 1 ),
12059 newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 )
12060 + w2 * ( jmin8lr >> 1 ),
12061 mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, imin8lr & 1, jmin8lr & 1,
12062 8 );
12063
12064 /* select prediction type of minimum distance */
12065 if ( ( dmcfieldi < dmc8i ) && ( dmcfieldi < dmcfieldf ) &&
12066 ( dmcfieldi < dmc8f ) && ( dmcfieldi < dmcfieldr ) &&
12067 ( dmcfieldi < dmc8r ) ) {
12068 /* field, interpolated */
12069 mbi->mb_type = 8 | 5;
12070 mbi->motion_type = 1;
12071 vmc =
12072 mpeg2_bdist2(
12073 oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 )
12074 + w2 * ( jminf >> 1 ),
12075 newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 )
12076 + w2 * ( jminr >> 1 ),
12077 mb, w2, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 );
12078 } else
12079
12080 if ( ( dmc8i < dmcfieldf ) && ( dmc8i < dmc8f ) && ( dmc8i < dmcfieldr ) &&
12081 ( dmc8i < dmc8r ) ) {
12082 /* 16x8, interpolated */
12083 mbi->mb_type = 8 | 4;
12084 mbi->motion_type = 2;
12085
12086 /* upper half block */
12087 vmc =
12088 mpeg2_bdist2(
12089 oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 )
12090 + w2 * ( jmin8uf >> 1 ),
12091 newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 )
12092 + w2 * ( jmin8ur >> 1 ),
12093 mb, w2, imin8uf & 1, jmin8uf & 1, imin8ur & 1, jmin8ur & 1, 8 );
12094
12095 /* lower half block */
12096 vmc +=
12097 mpeg2_bdist2(
12098 oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 )
12099 + w2 * ( jmin8lf >> 1 ),
12100 newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 )
12101 + w2 * ( jmin8lr >> 1 ),
12102 mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, imin8lr & 1, jmin8lr & 1,
12103 8 );
12104 } else
12105
12106 if ( ( dmcfieldf < dmc8f ) && ( dmcfieldf < dmcfieldr ) &&
12107 ( dmcfieldf < dmc8r ) ) {
12108 /* field, forward */
12109 mbi->mb_type = 8;
12110 mbi->motion_type = 1;
12111 vmc =
12112 mpeg2_dist2(
12113 oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 )
12114 + w2 * ( jminf >> 1 ),
12115 mb, w2, iminf & 1, jminf & 1, 16 );
12116 } else
12117
12118 if ( ( dmc8f < dmcfieldr ) && ( dmc8f < dmc8r ) ) {
12119 /* 16x8, forward */
12120 mbi->mb_type = 8;
12121 mbi->motion_type = 2;
12122
12123 /* upper half block */
12124 vmc =
12125 mpeg2_dist2(
12126 oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 )
12127 + w2 * ( jmin8uf >> 1 ), mb, w2, imin8uf & 1, jmin8uf & 1, 8 );
12128
12129 /* lower half block */
12130 vmc +=
12131 mpeg2_dist2(
12132 oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 )
12133 + w2 * ( jmin8lf >> 1 ),
12134 mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, 8 );
12135 } else
12136
12137 if ( dmcfieldr < dmc8r ) {
12138 /* field, backward */
12139 mbi->mb_type = 4;
12140 mbi->motion_type = 1;
12141 vmc =
12142 mpeg2_dist2(
12143 newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 )
12144 + w2 * ( jminr >> 1 ),
12145 mb, w2, iminr & 1, jminr & 1, 16 );
12146 } else {
12147 /* 16x8, backward */
12148 mbi->mb_type = 4;
12149 mbi->motion_type = 2;
12150
12151 /* upper half block */
12152 vmc =
12153 mpeg2_dist2(
12154 newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 )
12155 + w2 * ( jmin8ur >> 1 ),
12156 mb, w2, imin8ur & 1, jmin8ur & 1, 8 );
12157
12158 /* lower half block */
12159 vmc +=
12160 mpeg2_dist2(
12161 newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 )
12162 + w2 * ( jmin8lr >> 1 ),
12163 mb + 8 * w2, w2, imin8lr & 1, jmin8lr & 1, 8 );
12164 }
12165
12166 /* select between intra and non-intra coding */
12167 if ( ( vmc > var ) && ( vmc >= 9 * 256 ) )
12168 mbi->mb_type = 1;
12169 else {
12170 var = vmc;
12171
12172 if ( mbi->motion_type == 1 ) {
12173 /* forward */
12174 mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 );
12175 mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 );
12176 mbi->mv_field_sel[ 0 ][ 0 ] = self;
12177 /* backward */
12178 mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 );
12179 mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 );
12180 mbi->mv_field_sel[ 0 ][ 1 ] = selr;
12181 } else { /* MC_16X8 */
12182 /* forward */
12183 mbi->MV[ 0 ][ 0 ][ 0 ] = imin8uf - ( i << 1 );
12184 mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8uf - ( j << 1 );
12185 mbi->mv_field_sel[ 0 ][ 0 ] = sel8uf;
12186 mbi->MV[ 1 ][ 0 ][ 0 ] = imin8lf - ( i << 1 );
12187 mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8lf - ( ( j + 8 ) << 1 );
12188 mbi->mv_field_sel[ 1 ][ 0 ] = sel8lf;
12189 /* backward */
12190 mbi->MV[ 0 ][ 1 ][ 0 ] = imin8ur - ( i << 1 );
12191 mbi->MV[ 0 ][ 1 ][ 1 ] = jmin8ur - ( j << 1 );
12192 mbi->mv_field_sel[ 0 ][ 1 ] = sel8ur;
12193 mbi->MV[ 1 ][ 1 ][ 0 ] = imin8lr - ( i << 1 );
12194 mbi->MV[ 1 ][ 1 ][ 1 ] = jmin8lr - ( ( j + 8 ) << 1 );
12195 mbi->mv_field_sel[ 1 ][ 1 ] = sel8lr;
12196 }
12197 }
12198 }
12199
12200 mbi->var = var;
12201}
12202
12203
12204/*
12205 frame picture motion estimation
12206
12207 org: top left pel of source reference frame
12208 ref: top left pel of reconstructed reference frame
12209 mb: macroblock to be matched
12210 i,j: location of mb relative to ref (=center of search window)
12211 sx,sy: half widths of search window
12212 iminp,jminp,dframep: location and value of best frame prediction
12213 imintp,jmintp,tselp: location of best field pred. for top field of mb
12214 iminbp,jminbp,bselp: location of best field pred. for bottom field of mb
12215 dfieldp: value of field prediction
12216*/
12217void mpeg2_frame_estimate( unsigned char *org, unsigned char *ref,
12218 unsigned char *mb, int i, int j, int sx, int sy,
12219 int *iminp, int *jminp, int *imintp, int *jmintp,
12220 int *iminbp, int *jminbp, int *dframep, int *dfieldp,
12221 int *tselp, int *bselp, int imins[ 2 ][ 2 ],
12222 int jmins[ 2 ][ 2 ] )
12223{
12224 int dt, db, dmint, dminb;
12225 int imint, iminb, jmint, jminb;
12226
12227
12228 /* frame prediction */
12229 *dframep =
12230 mpeg2_fullsearch(
12231 org, ref, mb, mpeg2_width, i, j, sx, sy, 16, mpeg2_width, mpeg2_height,
12232 iminp, jminp );
12233
12234 /* predict top field from top field */
12235 dt =
12236 mpeg2_fullsearch(
12237 org, ref, mb, mpeg2_width << 1, i, j>>1, sx, sy >> 1, 8, mpeg2_width,
12238 mpeg2_height >> 1, &imint, &jmint );
12239
12240 /* predict top field from bottom field */
12241 db =
12242 mpeg2_fullsearch(
12243 org + mpeg2_width, ref + mpeg2_width, mb, mpeg2_width << 1, i, j>>1, sx,
12244 sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &iminb, &jminb );
12245
12246 imins[ 0 ][ 0 ] = imint;
12247 jmins[ 0 ][ 0 ] = jmint;
12248 imins[ 1 ][ 0 ] = iminb;
12249 jmins[ 1 ][ 0 ] = jminb;
12250
12251 /* select prediction for top field */
12252 if ( dt <= db ) {
12253 dmint = dt;
12254 *imintp = imint;
12255 *jmintp = jmint;
12256 *tselp = 0;
12257 } else {
12258 dmint = db;
12259 *imintp = iminb;
12260 *jmintp = jminb;
12261 *tselp = 1;
12262 }
12263
12264 /* predict bottom field from top field */
12265 dt =
12266 mpeg2_fullsearch(
12267 org, ref, mb + mpeg2_width, mpeg2_width << 1, i, j>>1, sx, sy >> 1, 8,
12268 mpeg2_width, mpeg2_height >> 1, &imint, &jmint );
12269
12270 /* predict bottom field from bottom field */
12271 db =
12272 mpeg2_fullsearch(
12273 org + mpeg2_width, ref + mpeg2_width, mb + mpeg2_width, mpeg2_width << 1,
12274 i, j>>1, sx, sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &iminb, &jminb );
12275
12276 imins[ 0 ][ 1 ] = imint;
12277 jmins[ 0 ][ 1 ] = jmint;
12278 imins[ 1 ][ 1 ] = iminb;
12279 jmins[ 1 ][ 1 ] = jminb;
12280
12281 /* select prediction for bottom field */
12282 if ( db <= dt ) {
12283 dminb = db;
12284 *iminbp = iminb;
12285 *jminbp = jminb;
12286 *bselp = 1;
12287 } else {
12288 dminb = dt;
12289 *iminbp = imint;
12290 *jminbp = jmint;
12291 *bselp = 0;
12292 }
12293
12294 *dfieldp = dmint + dminb;
12295}
12296
12297
12298/*
12299 field picture motion estimation subroutine
12300
12301 toporg: address of original top reference field
12302 topref: address of reconstructed top reference field
12303 botorg: address of original bottom reference field
12304 botref: address of reconstructed bottom reference field
12305 mb: macroblock to be matched
12306 i,j: location of mb (=center of search window)
12307 sx,sy: half width/height of search window
12308
12309 iminp,jminp,selp,dfieldp: location and distance of best field prediction
12310 imin8up,jmin8up,sel8up: location of best 16x8 pred. for upper half of mb
12311 imin8lp,jmin8lp,sel8lp: location of best 16x8 pred. for lower half of mb
12312 d8p: distance of best 16x8 prediction
12313 iminsp,jminsp,dsp: location and distance of best same parity field
12314 prediction (needed for dual prime, only valid if
12315 ipflag==0)
12316*/
12317void mpeg2_field_estimate( unsigned char *toporg, unsigned char *topref,
12318 unsigned char *botorg, unsigned char *botref,
12319 unsigned char *mb, int i, int j, int sx, int sy,
12320 int ipflag, int *iminp, int *jminp, int *imin8up,
12321 int *jmin8up, int *imin8lp, int *jmin8lp,
12322 int *dfieldp, int *d8p, int *selp, int *sel8up,
12323 int *sel8lp, int *iminsp, int *jminsp, int *dsp )
12324{
12325 int dt, db, imint, jmint, iminb, jminb, notop, nobot;
12326
12327
12328 /* if ipflag is set, predict from field of opposite parity only */
12329 notop = ipflag && ( mpeg2_pict_struct == 1 );
12330 nobot = ipflag && ( mpeg2_pict_struct == 2 );
12331
12332 /* field prediction */
12333
12334 /* predict current field from top field */
12335 if ( notop )
12336 dt = 65536; /* infinity */
12337 else
12338 dt =
12339 mpeg2_fullsearch(
12340 toporg, topref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 16, mpeg2_width,
12341 mpeg2_height >> 1, &imint, &jmint );
12342
12343 /* predict current field from bottom field */
12344 if ( nobot )
12345 db = 65536; /* infinity */
12346 else
12347 db =
12348 mpeg2_fullsearch(
12349 botorg, botref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 16, mpeg2_width,
12350 mpeg2_height >> 1, &iminb, &jminb );
12351
12352 /* same parity prediction (only valid if ipflag==0) */
12353 if ( mpeg2_pict_struct == 1 ) {
12354 *iminsp = imint;
12355 *jminsp = jmint;
12356 *dsp = dt;
12357 } else {
12358 *iminsp = iminb;
12359 *jminsp = jminb;
12360 *dsp = db;
12361 }
12362
12363 /* select field prediction */
12364 if ( dt <= db ) {
12365 *dfieldp = dt;
12366 *iminp = imint;
12367 *jminp = jmint;
12368 *selp = 0;
12369 } else {
12370 *dfieldp = db;
12371 *iminp = iminb;
12372 *jminp = jminb;
12373 *selp = 1;
12374 }
12375
12376
12377 /* 16x8 motion compensation */
12378
12379 /* predict upper half field from top field */
12380 if ( notop )
12381 dt = 65536;
12382 else
12383 dt =
12384 mpeg2_fullsearch(
12385 toporg, topref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 8, mpeg2_width,
12386 mpeg2_height >> 1, &imint, &jmint );
12387
12388 /* predict upper half field from bottom field */
12389 if ( nobot )
12390 db = 65536;
12391 else
12392 db =
12393 mpeg2_fullsearch(
12394 botorg, botref, mb, mpeg2_width << 1, i, j, sx, sy>>1, 8, mpeg2_width,
12395 mpeg2_height >> 1, &iminb, &jminb );
12396
12397 /* select prediction for upper half field */
12398 if ( dt <= db ) {
12399 *d8p = dt;
12400 *imin8up = imint;
12401 *jmin8up = jmint;
12402 *sel8up = 0;
12403 } else {
12404 *d8p = db;
12405 *imin8up = iminb;
12406 *jmin8up = jminb;
12407 *sel8up = 1;
12408 }
12409
12410 /* predict lower half field from top field */
12411 if ( notop )
12412 dt = 65536;
12413 else
12414 dt =
12415 mpeg2_fullsearch(
12416 toporg, topref, mb + ( mpeg2_width << 4 ), mpeg2_width << 1, i, j + 8,
12417 sx, sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &imint, &jmint );
12418
12419 /* predict lower half field from bottom field */
12420 if ( nobot )
12421 db = 65536;
12422 else
12423 db =
12424 mpeg2_fullsearch(
12425 botorg, botref, mb + ( mpeg2_width << 4 ), mpeg2_width << 1, i, j + 8,
12426 sx, sy >> 1, 8, mpeg2_width, mpeg2_height >> 1, &iminb, &jminb );
12427
12428 /* select prediction for lower half field */
12429 if ( dt <= db ) {
12430 *d8p += dt;
12431 *imin8lp = imint;
12432 *jmin8lp = jmint;
12433 *sel8lp = 0;
12434 } else {
12435 *d8p += db;
12436 *imin8lp = iminb;
12437 *jmin8lp = jminb;
12438 *sel8lp = 1;
12439 }
12440}
12441
12442
12443void mpeg2_dpframe_estimate( unsigned char *ref, unsigned char *mb, int i,
12444 int j, int iminf[ 2 ][ 2 ], int jminf[ 2 ][ 2 ],
12445 int *iminp, int *jminp, int *imindmvp,
12446 int *jmindmvp, int *dmcp, int *vmcp )
12447{
12448 int pref, ppred, delta_x, delta_y;
12449 int is, js, it, jt, ib, jb, it0, jt0, ib0, jb0;
12450 int imins, jmins, imint, jmint, iminb, jminb, imindmv, jmindmv;
12451 int vmc, local_dist;
12452
12453
12454 /*
12455 Calculate Dual Prime distortions for 9 delta candidates
12456 for each of the four minimum field vectors
12457 Note: only for P pictures!
12458 */
12459
12460 /* initialize minimum dual prime distortion to large value */
12461 vmc = 1 << 30;
12462
12463 _Pragma( "loopbound min 2 max 2" )
12464 for ( pref = 0; pref < 2; pref++ ) {
12465 ppred = 0;
12466 _Pragma( "loopbound min 2 max 2" )
12467 for ( ; ppred < 2; ppred++ ) {
12468 /*
12469 convert Cartesian absolute to relative motion vector
12470 values (wrt current macroblock address (i,j)
12471 */
12472 is = iminf[ pref ][ ppred ] - ( i << 1 );
12473 js = jminf[ pref ][ ppred ] - ( j << 1 );
12474
12475 if ( pref != ppred ) {
12476 /* vertical field shift adjustment */
12477 if ( ppred == 0 )
12478 js++;
12479 else
12480 js--;
12481
12482 /* mvxs and mvys scaling*/
12483 is <<= 1;
12484 js <<= 1;
12485 if ( mpeg2_topfirst == ppred ) {
12486 /* second field: scale by 1/3 */
12487 is = ( is >= 0 ) ? ( is + 1 ) / 3 : -( ( -is + 1 ) / 3 );
12488 js = ( js >= 0 ) ? ( js + 1 ) / 3 : -( ( -js + 1 ) / 3 );
12489 } else
12490 continue;
12491 }
12492
12493 /* vector for prediction from field of opposite 'parity' */
12494 if ( mpeg2_topfirst ) {
12495 /* vector for prediction of top field from bottom field */
12496 it0 = ( ( is + ( is > 0 ) ) >> 1 );
12497 jt0 = ( ( js + ( js > 0 ) ) >> 1 ) - 1;
12498
12499 /* vector for prediction of bottom field from top field */
12500 ib0 = ( ( 3 * is + ( is > 0 ) ) >> 1 );
12501 jb0 = ( ( 3 * js + ( js > 0 ) ) >> 1 ) + 1;
12502 } else {
12503 /* vector for prediction of top field from bottom field */
12504 it0 = ( ( 3 * is + ( is > 0 ) ) >> 1 );
12505 jt0 = ( ( 3 * js + ( js > 0 ) ) >> 1 ) - 1;
12506
12507 /* vector for prediction of bottom field from top field */
12508 ib0 = ( ( is + ( is > 0 ) ) >> 1 );
12509 jb0 = ( ( js + ( js > 0 ) ) >> 1 ) + 1;
12510 }
12511
12512 /* convert back to absolute half-pel field picture coordinates */
12513 is += i << 1;
12514 js += j << 1;
12515 it0 += i << 1;
12516 jt0 += j << 1;
12517 ib0 += i << 1;
12518 jb0 += j << 1;
12519
12520 if ( ( is >= 0 ) && ( is <= ( mpeg2_width - 16 ) << 1 ) &&
12521 ( js >= 0 ) && ( js <= ( mpeg2_height - 16 ) ) ) {
12522 _Pragma( "loopbound min 3 max 3" )
12523 for ( delta_y = -1; delta_y <= 1; delta_y++ ) {
12524 delta_x = -1;
12525 _Pragma( "loopbound min 3 max 3" )
12526 for ( ; delta_x <= 1; delta_x++ ) {
12527 /* opposite field coordinates */
12528 it = it0 + delta_x;
12529 jt = jt0 + delta_y;
12530 ib = ib0 + delta_x;
12531 jb = jb0 + delta_y;
12532
12533 if ( ( it >= 0 ) && ( it <= ( mpeg2_width - 16 ) << 1 ) &&
12534 ( jt >= 0 ) && ( jt <= ( mpeg2_height - 16 ) ) &&
12535 ( ib >= 0 ) && ( ib <= ( mpeg2_width - 16 ) << 1 ) &&
12536 ( jb >= 0 ) && ( jb <= ( mpeg2_height - 16 ) ) ) {
12537 /* compute prediction error */
12538 local_dist =
12539 mpeg2_bdist2(
12540 ref + ( is >> 1 ) + ( mpeg2_width << 1 ) * ( js >> 1 ),
12541 ref + mpeg2_width + ( it >> 1 )
12542 + ( mpeg2_width << 1 ) * ( jt >> 1 ),
12543 mb, /* current mb location */
12544 mpeg2_width << 1, /* adjacent line distance */
12545 is & 1, js & 1, it & 1, jt & 1, /* half-pel flags */
12546 8 ); /* block height */
12547 local_dist +=
12548 mpeg2_bdist2(
12549 ref + mpeg2_width + ( is >> 1 )
12550 + ( mpeg2_width << 1 ) * ( js >> 1 ),
12551 ref + ( ib >> 1 ) + ( mpeg2_width << 1 ) * ( jb >> 1 ),
12552 mb + mpeg2_width, /* current mb location */
12553 mpeg2_width << 1, /* adjacent line distance */
12554 is & 1, js & 1, ib & 1, jb & 1, /* half-pel flags */
12555 8 ); /* block height */
12556
12557 /* update delta with least distortion vector */
12558 if ( local_dist < vmc ) {
12559 imins = is;
12560 jmins = js;
12561 imint = it;
12562 jmint = jt;
12563 iminb = ib;
12564 jminb = jb;
12565 imindmv = delta_x;
12566 jmindmv = delta_y;
12567 vmc = local_dist;
12568 }
12569 }
12570 } /* end delta x loop */
12571 } /* end delta y loop */
12572 }
12573 }
12574 }
12575
12576 /* Compute L1 error for decision purposes */
12577 local_dist =
12578 mpeg2_bdist1(
12579 ref + ( imins >> 1 ) + ( mpeg2_width << 1 ) * ( jmins >> 1 ),
12580 ref + mpeg2_width + ( imint >> 1 )
12581 + ( mpeg2_width << 1 ) * ( jmint >> 1 ),
12582 mb, mpeg2_width << 1, imins & 1, jmins & 1, imint & 1, jmint & 1, 8 );
12583 local_dist +=
12584 mpeg2_bdist1(
12585 ref + mpeg2_width + ( imins >> 1 )
12586 + ( mpeg2_width << 1 ) * ( jmins >> 1 ),
12587 ref + ( iminb >> 1 ) + ( mpeg2_width << 1 ) * ( jminb >> 1 ),
12588 mb + mpeg2_width, mpeg2_width << 1, imins & 1, jmins & 1, iminb & 1,
12589 jminb & 1, 8 );
12590
12591 *dmcp = local_dist;
12592 *iminp = imins;
12593 *jminp = jmins;
12594 *imindmvp = imindmv;
12595 *jmindmvp = jmindmv;
12596 *vmcp = vmc;
12597}
12598
12599
12600void mpeg2_dpfield_estimate( unsigned char *topref, unsigned char *botref,
12601 unsigned char *mb, int i, int j, int imins,
12602 int jmins, int *imindmvp, int *jmindmvp, int *dmcp,
12603 int *vmcp )
12604{
12605 unsigned char *sameref, *oppref;
12606 int io0, jo0, io, jo, delta_x, delta_y, mvxs, mvys, mvxo0, mvyo0;
12607 int imino, jmino, imindmv, jmindmv, vmc_dp, local_dist;
12608
12609
12610 /* Calculate Dual Prime distortions for 9 delta candidates */
12611 /* Note: only for P pictures! */
12612
12613 /* Assign opposite and same reference pointer */
12614 if ( mpeg2_pict_struct == 1 ) {
12615 sameref = topref;
12616 oppref = botref;
12617 } else {
12618 sameref = botref;
12619 oppref = topref;
12620 }
12621
12622 /*
12623 convert Cartesian absolute to relative motion vector
12624 values (wrt current macroblock address (i,j)
12625 */
12626 mvxs = imins - ( i << 1 );
12627 mvys = jmins - ( j << 1 );
12628
12629 /* vector for prediction from field of opposite 'parity' */
12630 mvxo0 = ( mvxs + ( mvxs > 0 ) ) >> 1; /* mvxs // 2 */
12631 mvyo0 = ( mvys + ( mvys > 0 ) ) >> 1; /* mvys // 2 */
12632
12633 /* vertical field shift correction */
12634 if ( mpeg2_pict_struct == 1 )
12635 mvyo0--;
12636 else
12637 mvyo0++;
12638
12639 /* convert back to absolute coordinates */
12640 io0 = mvxo0 + ( i << 1 );
12641 jo0 = mvyo0 + ( j << 1 );
12642
12643 /* initialize minimum dual prime distortion to large value */
12644 vmc_dp = 1 << 30;
12645
12646 _Pragma( "loopbound min 3 max 3" )
12647 for ( delta_y = -1; delta_y <= 1; delta_y++ ) {
12648 delta_x = -1;
12649 _Pragma( "loopbound min 3 max 3" )
12650 for ( ; delta_x <= 1; delta_x++ ) {
12651 /* opposite field coordinates */
12652 io = io0 + delta_x;
12653 jo = jo0 + delta_y;
12654
12655 if ( ( io >= 0 ) && ( io <= ( mpeg2_width - 16 ) << 1 ) &&
12656 ( jo >= 0 ) && ( jo <= ( mpeg2_height2 - 16 ) << 1 ) ) {
12657 /* compute prediction error */
12658 local_dist =
12659 mpeg2_bdist2(
12660 sameref + ( imins >> 1 ) + mpeg2_width2 * ( jmins >> 1 ),
12661 oppref + ( io >> 1 ) + mpeg2_width2 * ( jo >> 1 ),
12662 mb, /* current mb location */
12663 mpeg2_width2, /* adjacent line distance */
12664 imins & 1, jmins & 1, io & 1, jo & 1, /* half-pel flags */
12665 16 ); /* block height */
12666
12667 /* update delta with least distortion vector */
12668 if ( local_dist < vmc_dp ) {
12669 imino = io;
12670 jmino = jo;
12671 imindmv = delta_x;
12672 jmindmv = delta_y;
12673 vmc_dp = local_dist;
12674 }
12675 }
12676 } /* end delta x loop */
12677 } /* end delta y loop */
12678
12679 /* Compute L1 error for decision purposes */
12680 *dmcp =
12681 mpeg2_bdist1(
12682 sameref + ( imins >> 1 ) + mpeg2_width2 * ( jmins >> 1 ),
12683 oppref + ( imino >> 1 ) + mpeg2_width2 * ( jmino >> 1 ),
12684 mb, /* current mb location */
12685 mpeg2_width2, /* adjacent line distance */
12686 imins & 1, jmins & 1, imino & 1, jmino & 1, /* half-pel flags */
12687 16 ); /* block height */
12688
12689 *imindmvp = imindmv;
12690 *jmindmvp = jmindmv;
12691 *vmcp = vmc_dp;
12692}
12693
12694
12695/*
12696 full search block matching
12697
12698 blk: top left pel of (16*h) block
12699 h: height of block
12700 lx: distance (in bytes) of vertically adjacent pels in ref,blk
12701 org: top left pel of source reference picture
12702 ref: top left pel of reconstructed reference picture
12703 i0,j0: center of search window
12704 sx,sy: half widths of search window
12705 xmax,ymax: right/bottom limits of search area
12706 iminp,jminp: pointers to where the result is stored
12707 result is given as half pel offset from ref(0,0)
12708 i.e. NOT relative to (i0,j0)
12709*/
12710int mpeg2_fullsearch( unsigned char *org, unsigned char *ref,
12711 unsigned char *blk, int lx, int i0, int j0, int sx,
12712 int sy, int h, int xmax, int ymax, int *iminp,
12713 int *jminp )
12714{
12715 int i, j, imin, jmin, ilow, ihigh, jlow, jhigh;
12716 int d, dmin;
12717 int k, l, sxy;
12718
12719
12720 ilow = i0 - sx;
12721 ihigh = i0 + sx;
12722
12723 if ( ilow < 0 )
12724 ilow = 0;
12725
12726 if ( ihigh > xmax - 16 )
12727 ihigh = xmax - 16;
12728
12729 jlow = j0 - sy;
12730 jhigh = j0 + sy;
12731
12732 if ( jlow < 0 )
12733 jlow = 0;
12734
12735 if ( jhigh > ymax - h )
12736 jhigh = ymax - h;
12737
12738 /* full pel search, spiraling outwards */
12739
12740 imin = i0;
12741 jmin = j0;
12742 dmin = mpeg2_dist1( org + imin + lx * jmin, blk, lx, 0, 0, h, 65536 );
12743
12744 sxy = ( sx > sy ) ? sx : sy;
12745
12746 _Pragma( "loopbound min 3 max 7" )
12747 for ( l = 1; l <= sxy; l++ ) {
12748 i = i0 - l;
12749 j = j0 - l;
12750 _Pragma( "loopbound min 8 max 56" )
12751 for ( k = 0; k < 8 * l; k++ ) {
12752 if ( ( i >= ilow ) && ( i <= ihigh ) && ( j >= jlow ) &&
12753 ( j <= jhigh ) ) {
12754 d = mpeg2_dist1( org + i + lx * j, blk, lx, 0, 0, h, dmin );
12755
12756 if ( d < dmin ) {
12757 dmin = d;
12758 imin = i;
12759 jmin = j;
12760 }
12761 }
12762
12763 if ( k < 2 * l )
12764 i++;
12765 else
12766
12767 if ( k < 4 * l )
12768 j++;
12769 else
12770
12771 if ( k < 6 * l )
12772 i--;
12773 else
12774 j--;
12775 }
12776 }
12777
12778 /* half pel */
12779 dmin = 65536;
12780 imin <<= 1;
12781 jmin <<= 1;
12782 ilow = imin - ( imin > 0 );
12783 ihigh = imin + ( imin < ( ( xmax - 16 ) << 1 ) );
12784 jlow = jmin - ( jmin > 0 );
12785 jhigh = jmin + ( jmin < ( ( ymax - h ) << 1 ) );
12786
12787 _Pragma( "loopbound min 2 max 3" )
12788 for ( j = jlow; j <= jhigh; j++ ) {
12789 i = ilow;
12790 _Pragma( "loopbound min 2 max 3" )
12791 for ( ; i <= ihigh; i++ ) {
12792 d =
12793 mpeg2_dist1(
12794 ref + ( i >> 1 ) + lx * ( j >> 1 ), blk, lx, i & 1, j & 1, h, dmin );
12795
12796 if ( d < dmin ) {
12797 dmin = d;
12798 imin = i;
12799 jmin = j;
12800 }
12801 }
12802 }
12803
12804 *iminp = imin;
12805 *jminp = jmin;
12806
12807 return( dmin );
12808}
12809
12810
12811/*
12812 total absolute difference between two (16*h) blocks
12813 including optional half pel interpolation of blk1 (hx,hy)
12814 blk1,blk2: addresses of top left pels of both blocks
12815 lx: distance (in bytes) of vertically adjacent pels
12816 hx,hy: flags for horizontal and/or vertical interpolation
12817 h: height of block (usually 8 or 16)
12818 distlim: bail out if sum exceeds this value
12819*/
12820int mpeg2_dist1( unsigned char *blk1, unsigned char *blk2, int lx, int hx,
12821 int hy, int h, int distlim )
12822{
12823 unsigned char *p1, *p1a, *p2;
12824 int i, j;
12825 int s, v;
12826
12827
12828 s = 0;
12829 p1 = blk1;
12830 p2 = blk2;
12831
12832 if ( !hx && !hy ) {
12833 _Pragma( "loopbound min 1 max 16" )
12834 for ( j = 0; j < h; j++ ) {
12835 if ( ( v = p1[ 0 ] - p2[ 0 ] ) < 0 )
12836 v = -v;
12837 s += v;
12838
12839 if ( ( v = p1[ 1 ] - p2[ 1 ] ) < 0 )
12840 v = -v;
12841 s += v;
12842
12843 if ( ( v = p1[ 2 ] - p2[ 2 ] ) < 0 )
12844 v = -v;
12845 s += v;
12846
12847 if ( ( v = p1[ 3 ] - p2[ 3 ] ) < 0 )
12848 v = -v;
12849 s += v;
12850
12851 if ( ( v = p1[ 4 ] - p2[ 4 ] ) < 0 )
12852 v = -v;
12853 s += v;
12854
12855 if ( ( v = p1[ 5 ] - p2[ 5 ] ) < 0 )
12856 v = -v;
12857 s += v;
12858
12859 if ( ( v = p1[ 6 ] - p2[ 6 ] ) < 0 )
12860 v = -v;
12861 s += v;
12862
12863 if ( ( v = p1[ 7 ] - p2[ 7 ] ) < 0 )
12864 v = -v;
12865 s += v;
12866
12867 if ( ( v = p1[ 8 ] - p2[ 8 ] ) < 0 )
12868 v = -v;
12869 s += v;
12870
12871 if ( ( v = p1[ 9 ] - p2[ 9 ] ) < 0 )
12872 v = -v;
12873 s += v;
12874
12875 if ( ( v = p1[ 10 ] - p2[ 10 ] ) < 0 )
12876 v = -v;
12877 s += v;
12878
12879 if ( ( v = p1[ 11 ] - p2[ 11 ] ) < 0 )
12880 v = -v;
12881 s += v;
12882
12883 if ( ( v = p1[ 12 ] - p2[ 12 ] ) < 0 )
12884 v = -v;
12885 s += v;
12886
12887 if ( ( v = p1[ 13 ] - p2[ 13 ] ) < 0 )
12888 v = -v;
12889 s += v;
12890
12891 if ( ( v = p1[ 14 ] - p2[ 14 ] ) < 0 )
12892 v = -v;
12893 s += v;
12894
12895 if ( ( v = p1[ 15 ] - p2[ 15 ] ) < 0 )
12896 v = -v;
12897 s += v;
12898
12899 if ( s >= distlim )
12900 break;
12901
12902 p1 += lx;
12903 p2 += lx;
12904 }
12905 } else
12906
12907 if ( hx && !hy ) {
12908 _Pragma( "loopbound min 8 max 16" )
12909 for ( j = 0; j < h; j++ ) {
12910 i = 0;
12911 _Pragma( "loopbound min 16 max 16" )
12912 for ( ; i < 16; i++ ) {
12913 v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ];
12914 if ( v >= 0 )
12915 s += v;
12916 else
12917 s -= v;
12918 }
12919 p1 += lx;
12920 p2 += lx;
12921 }
12922 } else
12923
12924 if ( !hx && hy ) {
12925 p1a = p1 + lx;
12926 _Pragma( "loopbound min 8 max 16" )
12927 for ( j = 0; j < h; j++ ) {
12928 i = 0;
12929 _Pragma( "loopbound min 16 max 16" )
12930 for ( ; i < 16; i++ ) {
12931 v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ];
12932 if ( v >= 0 )
12933 s += v;
12934 else
12935 s -= v;
12936 }
12937 p1 = p1a;
12938 p1a += lx;
12939 p2 += lx;
12940 }
12941 } else { /* if (hx && hy) */
12942 p1a = p1 + lx;
12943 _Pragma( "loopbound min 8 max 16" )
12944 for ( j = 0; j < h; j++ ) {
12945 i = 0;
12946 _Pragma( "loopbound min 16 max 16" )
12947 for ( ; i < 16; i++ ) {
12948 v =
12949 ( ( unsigned int )
12950 ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) -
12951 p2[ i ];
12952 if ( v >= 0 )
12953 s += v;
12954 else
12955 s -= v;
12956 }
12957 p1 = p1a;
12958 p1a += lx;
12959 p2 += lx;
12960 }
12961 }
12962
12963 return( s );
12964}
12965
12966
12967/*
12968 total squared difference between two (16*h) blocks
12969 including optional half pel interpolation of blk1 (hx,hy)
12970 blk1,blk2: addresses of top left pels of both blocks
12971 lx: distance (in bytes) of vertically adjacent pels
12972 hx,hy: flags for horizontal and/or vertical interpolation
12973 h: height of block (usually 8 or 16)
12974*/
12975int mpeg2_dist2( unsigned char *blk1, unsigned char *blk2, int lx, int hx,
12976 int hy, int h )
12977{
12978 unsigned char *p1, *p1a, *p2;
12979 int i, j;
12980 int s, v;
12981
12982
12983 s = 0;
12984 p1 = blk1;
12985 p2 = blk2;
12986
12987 if ( !hx && !hy ) {
12988 _Pragma( "loopbound min 8 max 16" )
12989 for ( j = 0; j < h; j++ ) {
12990 i = 0;
12991 _Pragma( "loopbound min 16 max 16" )
12992 for ( ; i < 16; i++ ) {
12993 v = p1[ i ] - p2[ i ];
12994 s += v * v;
12995 }
12996 p1 += lx;
12997 p2 += lx;
12998 }
12999 } else
13000
13001 if ( hx && !hy ) {
13002 _Pragma( "loopbound min 8 max 16" )
13003 for ( j = 0; j < h; j++ ) {
13004 i = 0;
13005 _Pragma( "loopbound min 16 max 16" )
13006 for ( ; i < 16; i++ ) {
13007 v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ];
13008 s += v * v;
13009 }
13010 p1 += lx;
13011 p2 += lx;
13012 }
13013 } else
13014
13015 if ( !hx && hy ) {
13016 p1a = p1 + lx;
13017 _Pragma( "loopbound min 8 max 16" )
13018 for ( j = 0; j < h; j++ ) {
13019 i = 0;
13020 _Pragma( "loopbound min 16 max 16" )
13021 for ( ; i < 16; i++ ) {
13022 v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ];
13023 s += v * v;
13024 }
13025 p1 = p1a;
13026 p1a += lx;
13027 p2 += lx;
13028 }
13029 } else { /* if (hx && hy) */
13030 p1a = p1 + lx;
13031 _Pragma( "loopbound min 8 max 16" )
13032 for ( j = 0; j < h; j++ ) {
13033 i = 0;
13034 _Pragma( "loopbound min 16 max 16" )
13035 for ( ; i < 16; i++ ) {
13036 v =
13037 ( ( unsigned int )
13038 ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) -
13039 p2[ i ];
13040 s += v * v;
13041 }
13042 p1 = p1a;
13043 p1a += lx;
13044 p2 += lx;
13045 }
13046 }
13047
13048 return( s );
13049}
13050
13051
13052/*
13053 absolute difference error between a (16*h) block and a bidirectional
13054 prediction
13055
13056 p2: address of top left pel of block
13057 pf,hxf,hyf: address and half pel flags of forward ref. block
13058 pb,hxb,hyb: address and half pel flags of backward ref. block
13059 h: height of block
13060 lx: distance (in bytes) of vertically adjacent pels in p2,pf,pb
13061*/
13062int mpeg2_bdist1( unsigned char *pf, unsigned char *pb, unsigned char *p2,
13063 int lx, int hxf, int hyf, int hxb, int hyb, int h )
13064{
13065 unsigned char *pfa, *pfb, *pfc, *pba, *pbb, *pbc;
13066 int i, j;
13067 int s, v;
13068
13069
13070 pfa = pf + hxf;
13071 pfb = pf + lx * hyf;
13072 pfc = pfb + hxf;
13073
13074 pba = pb + hxb;
13075 pbb = pb + lx * hyb;
13076 pbc = pbb + hxb;
13077
13078 s = 0;
13079
13080 _Pragma( "loopbound min 8 max 16" )
13081 for ( j = 0; j < h; j++ ) {
13082 i = 0;
13083 _Pragma( "loopbound min 16 max 16" )
13084 for ( ; i < 16; i++ ) {
13085 v =
13086 ( ( ( ( unsigned int )( *pf++ + *pfa++ + *pfb++ + *pfc++ + 2 ) >> 2 ) +
13087 ( ( unsigned int )( *pb++ + *pba++ + *pbb++ + *pbc++ + 2 ) >> 2 ) +
13088 1 ) >> 1 ) -
13089 *p2++;
13090 if ( v >= 0 )
13091 s += v;
13092 else
13093 s -= v;
13094 }
13095 p2 += lx - 16;
13096 pf += lx - 16;
13097 pfa += lx - 16;
13098 pfb += lx - 16;
13099 pfc += lx - 16;
13100 pb += lx - 16;
13101 pba += lx - 16;
13102 pbb += lx - 16;
13103 pbc += lx - 16;
13104 }
13105
13106 return( s );
13107}
13108
13109
13110/*
13111 squared error between a (16*h) block and a bidirectional
13112 prediction
13113
13114 p2: address of top left pel of block
13115 pf,hxf,hyf: address and half pel flags of forward ref. block
13116 pb,hxb,hyb: address and half pel flags of backward ref. block
13117 h: height of block
13118 lx: distance (in bytes) of vertically adjacent pels in p2,pf,pb
13119*/
13120int mpeg2_bdist2( unsigned char *pf, unsigned char *pb, unsigned char *p2,
13121 int lx, int hxf, int hyf, int hxb, int hyb, int h )
13122{
13123 unsigned char *pfa, *pfb, *pfc, *pba, *pbb, *pbc;
13124 int i, j;
13125 int s, v;
13126
13127
13128 pfa = pf + hxf;
13129 pfb = pf + lx * hyf;
13130 pfc = pfb + hxf;
13131
13132 pba = pb + hxb;
13133 pbb = pb + lx * hyb;
13134 pbc = pbb + hxb;
13135
13136 s = 0;
13137
13138 _Pragma( "loopbound min 8 max 16" )
13139 for ( j = 0; j < h; j++ ) {
13140 i = 0;
13141 _Pragma( "loopbound min 16 max 16" )
13142 for ( ; i < 16; i++ ) {
13143 v =
13144 ( ( ( ( unsigned int )( *pf++ + *pfa++ + *pfb++ + *pfc++ + 2 ) >> 2 ) +
13145 ( ( unsigned int )( *pb++ + *pba++ + *pbb++ + *pbc++ + 2 ) >> 2 ) +
13146 1 ) >> 1 ) -
13147 *p2++;
13148 s += v * v;
13149 }
13150 p2 += lx - 16;
13151 pf += lx - 16;
13152 pfa += lx - 16;
13153 pfb += lx - 16;
13154 pfc += lx - 16;
13155 pb += lx - 16;
13156 pba += lx - 16;
13157 pbb += lx - 16;
13158 pbc += lx - 16;
13159 }
13160
13161 return( s );
13162}
13163
13164
13165/*
13166 variance of a (16*16) block, multiplied by 256
13167 p: address of top left pel of block
13168 lx: distance (in bytes) of vertically adjacent pels
13169*/
13170int mpeg2_variance( unsigned char *p, int lx )
13171{
13172 int i, j;
13173 unsigned int v, s, s2;
13174
13175
13176 s = s2 = 0;
13177
13178 _Pragma( "loopbound min 16 max 16" )
13179 for ( j = 0; j < 16; j++ ) {
13180 i = 0;
13181 _Pragma( "loopbound min 16 max 16" )
13182 for ( ; i < 16; i++ ) {
13183 v = *p++;
13184 s += v;
13185 s2 += v * v;
13186 }
13187 p += lx - 16;
13188 }
13189
13190 return( s2 - ( s * s ) / 256 );
13191}
13192
13193
13194/*
13195 Main functions
13196*/
13197
13198void _Pragma ( "entrypoint" ) mpeg2_main( void )
13199{
13200 mpeg2_motion_estimation(
13201 mpeg2_oldorgframe, mpeg2_oldorgframe, mpeg2_oldorgframe, mpeg2_oldorgframe,
13202 mpeg2_oldorgframe, mpeg2_oldorgframe, 7, 7, 3, 3, mpeg2_mbinfo, 0, 0 );
13203}
13204
13205
13206int main( int argc, char **argv )
13207{
13208 SET_UP
13209 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
13210 START_LOOP
13211 mpeg2_init();
13212 mpeg2_main();
13213 STOP_LOOP
13214 }
13215 WRITE_TO_FILE
13216
13217 return( mpeg2_return() - (-116) != 0 );
13218}
diff --git a/baseline/source/ndes/ChangeLog.txt b/baseline/source/ndes/ChangeLog.txt
new file mode 100644
index 0000000..ae9c168
--- /dev/null
+++ b/baseline/source/ndes/ChangeLog.txt
@@ -0,0 +1,20 @@
1File: ndes.c
2Original provenience:
3
42017-04-18:
5- Annotated ndes_main as entry-point for timing analysis
6
72015-10-21:
8- Remove comment on line 1
9- Added generic TACLeBench header to line 1
10- Renamed functions to {name} to ndes_{name}
11- Renamed globale variables to {name} to ndes_{name}
12- Renamed structs to {name} to ndes_{name}
13- Removed the profiling code
14- Added forward decleration of functions
15- Added ndes_main function
16- Added ndes_init function
17- Initialize ndes_ipc1 and ndes_ipc2 in ndes_init function
18- int main variables to global variables for the ndes_init function
19- Applied Code Style
20
diff --git a/baseline/source/ndes/ndes.c b/baseline/source/ndes/ndes.c
new file mode 100644
index 0000000..e56906f
--- /dev/null
+++ b/baseline/source/ndes/ndes.c
@@ -0,0 +1,378 @@
1/*
2 This program is part of the TACLeBench benchmark suite.
3 Version V 1.x
4
5 Name: ndes
6
7 Author: unknown
8
9 Function: A lot of bit manipulation, shifts, array and matrix calculations.
10
11 Source:
12
13 Changes: no major functional changes
14
15 License: May be used, modified, and re-distributed freely.
16
17*/
18
19/* A read from this address will result in an known value of 1 */
20#include "../extra.h"
21#define KNOWN_VALUE 1
22#define NDES_WORSTCASE 1
23/*
24 Declaration of global variables
25*/
26
27typedef struct NDES_IMMENSE {
28 unsigned long l, r;
29} ndes_immense;
30typedef struct NDES_GREAT {
31 unsigned long l, c, r;
32} ndes_great;
33
34unsigned long ndes_bit[33];
35ndes_immense ndes_inp, ndes_key, ndes_out;
36int ndes_newkey, ndes_isw;
37
38static ndes_immense ndes_icd;
39static char ndes_ipc1[57];
40static char ndes_ipc2[49];
41
42
43#ifdef NDES_WORSTCASE
44int ndes_value = 1;
45#else
46int ndes_value = 0;
47#endif
48
49/* Forward funtion prototypes */
50
51void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw,
52 ndes_immense *out );
53void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout );
54unsigned long ndes_getbit( ndes_immense source, int bitno, int nbits );
55void ndes_ks( /*immense key, */int n, ndes_great *kn );
56void ndes_init( void );
57int ndes_return( void );
58void ndes_main( void );
59//int main( void );
60
61/*
62 Initialization
63*/
64void ndes_init()
65{
66 unsigned int i;
67 volatile char ndes_ipc1_tmp[57] = {
68 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50,
69 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60,
70 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38,
71 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
72 };
73 volatile char ndes_ipc2_tmp[49] = {
74 0, 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21,
75 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31,
76 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34,
77 53, 46, 42, 50, 36, 29, 32
78 };
79 for ( i = 0; i < 57; i++ )
80 ndes_ipc1[i] = ndes_ipc1_tmp[i];
81 for ( i = 0; i < 49; i++ )
82 ndes_ipc2[i] = ndes_ipc2_tmp[i];
83
84 ndes_inp.l = KNOWN_VALUE * 35;
85 ndes_inp.r = KNOWN_VALUE * 26;
86 ndes_key.l = KNOWN_VALUE * 2;
87 ndes_key.r = KNOWN_VALUE * 16;
88
89 ndes_newkey = ndes_value;
90 ndes_isw = ndes_value;
91}
92/*
93 Arithmetic functions
94*/
95void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw,
96 ndes_immense *out )
97{
98 volatile char ip[65] = {
99 0, 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36,
100 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40,
101 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35,
102 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39,
103 31, 23, 15, 7
104 };
105
106 volatile char ipm[65] = {
107 0, 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15,
108 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13,
109 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11,
110 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9,
111 49, 17, 57, 25
112 };
113 static ndes_great kns[17];
114
115 #ifdef NDES_WORSTCASE
116 static int initflag = 1;
117 #else
118 static int initflag = 0;
119 #endif
120
121 int ii, i, j, k;
122 unsigned long ic, shifter;
123 ndes_immense itmp;
124 ndes_great pg;
125
126 if ( initflag ) {
127 initflag = 0;
128 ndes_bit[1] = shifter = 1L;
129
130 _Pragma( "loopbound min 31 max 31" )
131 for ( j = 2; j <= 32; j++ )
132 ndes_bit[j] = ( shifter <<= 1 );
133 }
134
135 if ( *newkey ) {
136 *newkey = 0;
137 ndes_icd.r = ndes_icd.l = 0L;
138
139 _Pragma( "loopbound min 28 max 28" )
140 for ( j = 28, k = 56; j >= 1; j--, k-- ) {
141 ndes_icd.r = ( ndes_icd.r << 1 ) | ndes_getbit( key, ndes_ipc1[j], 32 );
142 ndes_icd.l = ndes_icd.l << 1;
143 ndes_icd.l = ( ndes_icd.l ) | ndes_getbit( key, ndes_ipc1[k], 32 );
144 }
145
146 _Pragma( "loopbound min 16 max 16" )
147 for ( i = 1; i <= 16; i++ ) {
148 pg = kns[i];
149 ndes_ks( /* key,*/ i, &pg );
150 kns[i] = pg;
151 }
152 }
153
154 itmp.r = itmp.l = 0L;
155
156 _Pragma( "loopbound min 32 max 32" )
157 for ( j = 32, k = 64; j >= 1; j--, k-- ) {
158 itmp.r = itmp.r << 1;
159 itmp.r = ( itmp.r ) | ndes_getbit( inp, ip[j], 32 );
160 itmp.l = itmp.l << 1;
161 itmp.l = ( itmp.l ) | ndes_getbit( inp, ip[k], 32 );
162 }
163 _Pragma( "loopbound min 16 max 16" )
164 for ( i = 1; i <= 16; i++ ) {
165 ii = ( isw == 1 ? 17 - i : i );
166 ndes_cyfun( itmp.l, kns[ii], &ic );
167 ic ^= itmp.r;
168 itmp.r = itmp.l;
169 itmp.l = ic;
170 }
171
172 ic = itmp.r;
173 itmp.r = itmp.l;
174 itmp.l = ic;
175 ( *out ).r = ( *out ).l = 0L;
176
177 _Pragma( "loopbound min 32 max 32" )
178 for ( j = 32, k = 64; j >= 1; j--, k-- ) {
179 ( *out ).r = ( *out ).r << 1;
180 ( *out ).r = ( ( *out ).r ) | ndes_getbit( itmp, ipm[j], 32 );
181 ( *out ).l = ( *out ).l << 1;
182 ( *out ).l = ( ( *out ).l ) | ndes_getbit( itmp, ipm[k], 32 );
183 }
184}
185
186
187void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout )
188{
189 volatile long iet[49] = {0, 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9,
190 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19,
191 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29,
192 28, 29, 30, 31, 32, 1
193 };
194 volatile long ipp[33] = {0, 16, 7, 20, 21, 29, 12, 28, 17, 1, 15,
195 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13,
196 30, 6, 22, 11, 4, 25
197 };
198 volatile long is[16][4][9] = {{{ 0 , 14 , 15 , 10 , 7 , 2 , 12 , 4 , 13 },
199 { 0 , 0 , 3 , 13 , 13 , 14 , 10 , 13 , 1 },
200 { 0 , 4 , 0 , 13 , 10 , 4 , 9 , 1 , 7 },
201 { 0 , 15 , 13 , 1 , 3 , 11 , 4 , 6 , 2 }},
202 {{ 0 , 4 , 1 , 0 , 13 , 12 , 1 , 11 , 2 },
203 { 0 , 15 , 13 , 7 , 8 , 11 , 15 , 0 , 15 },
204 { 0 , 1 , 14 , 6 , 6 , 2 , 14 , 4 , 11 },
205 { 0 , 12 , 8 , 10 , 15 , 8 , 3 , 11 , 1 }},
206 {{ 0 , 13 , 8 , 9 , 14 , 4 , 10 , 2 , 8 },
207 { 0 , 7 , 4 , 0 , 11 , 2 , 4 , 11 , 13 },
208 { 0 , 14 , 7 , 4 , 9 , 1 , 15 , 11 , 4 },
209 { 0 , 8 , 10 , 13 , 0 , 12 , 2 , 13 , 14 }},
210 {{ 0 , 1 , 14 , 14 , 3 , 1 , 15 , 14 , 4 },
211 { 0 , 4 , 7 , 9 , 5 , 12 , 2 , 7 , 8 },
212 { 0 , 8 , 11 , 9 , 0 , 11 , 5 , 13 , 1 },
213 { 0 , 2 , 1 , 0 , 6 , 7 , 12 , 8 , 7 }},
214 {{ 0 , 2 , 6 , 6 , 0 , 7 , 9 , 15 , 6 },
215 { 0 , 14 , 15 , 3 , 6 , 4 , 7 , 4 , 10 },
216 { 0 , 13 , 10 , 8 , 12 , 10 , 2 , 12 , 9 },
217 { 0 , 4 , 3 , 6 , 10 , 1 , 9 , 1 , 4 }},
218 {{ 0 , 15 , 11 , 3 , 6 , 10 , 2 , 0 , 15 },
219 { 0 , 2 , 2 , 4 , 15 , 7 , 12 , 9 , 3 },
220 { 0 , 6 , 4 , 15 , 11 , 13 , 8 , 3 , 12 },
221 { 0 , 9 , 15 , 9 , 1 , 14 , 5 , 4 , 10 }},
222 {{ 0 , 11 , 3 , 15 , 9 , 11 , 6 , 8 , 11 },
223 { 0 , 13 , 8 , 6 , 0 , 13 , 9 , 1 , 7 },
224 { 0 , 2 , 13 , 3 , 7 , 7 , 12 , 7 , 14 },
225 { 0 , 1 , 4 , 8 , 13 , 2 , 15 , 10 , 8 }},
226 {{ 0 , 8 , 4 , 5 , 10 , 6 , 8 , 13 , 1 },
227 { 0 , 1 , 14 , 10 , 3 , 1 , 5 , 10 , 4 },
228 { 0 , 11 , 1 , 0 , 13 , 8 , 3 , 14 , 2 },
229 { 0 , 7 , 2 , 7 , 8 , 13 , 10 , 7 , 13 }},
230 {{ 0 , 3 , 9 , 1 , 1 , 8 , 0 , 3 , 10 },
231 { 0 , 10 , 12 , 2 , 4 , 5 , 6 , 14 , 12 },
232 { 0 , 15 , 5 , 11 , 15 , 15 , 7 , 10 , 0 },
233 { 0 , 5 , 11 , 4 , 9 , 6 , 11 , 9 , 15 }},
234 {{ 0 , 10 , 7 , 13 , 2 , 5 , 13 , 12 , 9 },
235 { 0 , 6 , 0 , 8 , 7 , 0 , 1 , 3 , 5 },
236 { 0 , 12 , 8 , 1 , 1 , 9 , 0 , 15 , 6 },
237 { 0 , 11 , 6 , 15 , 4 , 15 , 14 , 5 , 12 }},
238 {{ 0 , 6 , 2 , 12 , 8 , 3 , 3 , 9 , 3 },
239 { 0 , 12 , 1 , 5 , 2 , 15 , 13 , 5 , 6 },
240 { 0 , 9 , 12 , 2 , 3 , 12 , 4 , 6 , 10 },
241 { 0 , 3 , 7 , 14 , 5 , 0 , 1 , 0 , 9 }},
242 {{ 0 , 12 , 13 , 7 , 5 , 15 , 4 , 7 , 14 },
243 { 0 , 11 , 10 , 14 , 12 , 10 , 14 , 12 , 11 },
244 { 0 , 7 , 6 , 12 , 14 , 5 , 10 , 8 , 13 },
245 { 0 , 14 , 12 , 3 , 11 , 9 , 7 , 15 , 0 }},
246 {{ 0 , 5 , 12 , 11 , 11 , 13 , 14 , 5 , 5 },
247 { 0 , 9 , 6 , 12 , 1 , 3 , 0 , 2 , 0 },
248 { 0 , 3 , 9 , 5 , 5 , 6 , 1 , 0 , 15 },
249 { 0 , 10 , 0 , 11 , 12 , 10 , 6 , 14 , 3 }},
250 {{ 0 , 9 , 0 , 4 , 12 , 0 , 7 , 10 , 0 },
251 { 0 , 5 , 9 , 11 , 10 , 9 , 11 , 15 , 14 },
252 { 0 , 10 , 3 , 10 , 2 , 3 , 13 , 5 , 3 },
253 { 0 , 0 , 5 , 5 , 7 , 4 , 0 , 2 , 5 }},
254 {{ 0 , 0 , 5 , 2 , 4 , 14 , 5 , 6 , 12 },
255 { 0 , 3 , 11 , 15 , 14 , 8 , 3 , 8 , 9 },
256 { 0 , 5 , 2 , 14 , 8 , 0 , 11 , 9 , 5 },
257 { 0 , 6 , 14 , 2 , 2 , 5 , 8 , 3 , 6 }},
258 {{ 0 , 7 , 10 , 8 , 15 , 9 , 11 , 1 , 7 },
259 { 0 , 8 , 5 , 1 , 9 , 6 , 8 , 6 , 2 },
260 { 0 , 0 , 15 , 7 , 4 , 14 , 6 , 2 , 8 },
261 { 0 , 13 , 9 , 12 , 14 , 3 , 13 , 12 , 11 }}};
262
263 volatile char ibin[16] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15};
264 ndes_great ie;
265 unsigned long itmp, ietmp1, ietmp2;
266 char iec[9];
267 int irow, icol, iss, l, m;
268 int volatile j, jj;
269 unsigned long *p;
270
271 p = ndes_bit;
272 ie.r = ie.c = ie.l = 0;
273
274 _Pragma( "loopbound min 16 max 16" )
275 for ( j = 16, l = 32, m = 48; j >= 1; j--, l--, m-- ) {
276 ie.r = ( ie.r << 1 ) | ( p[iet[j]] & ir ? 1 : 0 );
277 ie.c = ( ie.c << 1 ) | ( p[iet[l]] & ir ? 1 : 0 );
278 ie.l = ( ie.l << 1 ) | ( p[iet[m]] & ir ? 1 : 0 );
279 }
280 ie.r ^= k.r;
281 ie.c ^= k.c;
282 ie.l ^= k.l;
283 ietmp1 = ( ( unsigned long ) ie.c << 16 ) + ( unsigned long ) ie.r;
284 ietmp2 = ( ( unsigned long ) ie.l << 8 ) + ( ( unsigned long ) ie.c >> 8 );
285
286 _Pragma( "loopbound min 4 max 4" )
287 for ( j = 1, m = 5; j <= 4; j++, m++ ) {
288 iec[j] = ietmp1 & 0x3fL;
289 iec[m] = ietmp2 & 0x3fL;
290 ietmp1 >>= 6;
291 ietmp2 >>= 6;
292 }
293
294 itmp = 0L;
295
296 _Pragma( "loopbound min 8 max 8" )
297 for ( jj = 8; jj >= 1; jj-- ) {
298 j = iec[jj];
299 irow = ( ( j & 0x1 ) << 1 ) + ( ( j & 0x20 ) >> 5 );
300 icol = ( ( j & 0x2 ) << 2 ) + ( j & 0x4 )
301 + ( ( j & 0x8 ) >> 2 ) + ( ( j & 0x10 ) >> 4 );
302 iss = is[icol][irow][jj];
303 itmp = ( itmp << 4 ) | ibin[iss];
304 }
305
306 *iout = 0L;
307 p = ndes_bit;
308
309 _Pragma( "loopbound min 32 max 32" )
310 for ( j = 32; j >= 1; j-- )
311 *iout = ( *iout << 1 );
312 *iout |= ( p[ipp[j]] & itmp ? 1 : 0 );
313}
314
315unsigned long ndes_getbit( ndes_immense source, int bitno, int nbits )
316{
317 if ( bitno <= nbits )
318 return ndes_bit[bitno] & source.r ? 1L : 0L;
319 else
320 return ndes_bit[bitno - nbits] & source.l ? 1L : 0L;
321}
322
323void ndes_ks( /*ndes_immense key, */int n, ndes_great *kn )
324{
325 int i, j, k, l;
326
327 if ( n == 1 || n == 2 || n == 9 || n == 16 ) {
328 ndes_icd.r = ( ndes_icd.r | ( ( ndes_icd.r & 1L ) << 28 ) ) >> 1;
329 ndes_icd.l = ( ndes_icd.l | ( ( ndes_icd.l & 1L ) << 28 ) ) >> 1;
330 } else {
331 _Pragma( "loopbound min 2 max 2" )
332 for ( i = 1; i <= 2; i++ ) {
333 ndes_icd.r = ( ndes_icd.r | ( ( ndes_icd.r & 1L ) << 28 ) ) >> 1;
334 ndes_icd.l = ( ndes_icd.l | ( ( ndes_icd.l & 1L ) << 28 ) ) >> 1;
335 }
336 }
337
338 ( *kn ).r = ( *kn ).c = ( *kn ).l = 0;
339
340 _Pragma( "loopbound min 16 max 16" )
341 for ( j = 16, k = 32, l = 48; j >= 1; j--, k--, l-- ) {
342 ( *kn ).r = ( *kn ).r << 1;
343 ( *kn ).r = ( ( *kn ).r ) | ( unsigned short )
344 ndes_getbit( ndes_icd, ndes_ipc2[j], 28 );
345 ( *kn ).c = ( *kn ).c << 1;
346 ( *kn ).c = ( ( *kn ).c ) | ( unsigned short )
347 ndes_getbit( ndes_icd, ndes_ipc2[k], 28 );
348 ( *kn ).l = ( *kn ).l << 1;
349 ( *kn ).l = ( ( *kn ).l ) | ( unsigned short )
350 ndes_getbit( ndes_icd, ndes_ipc2[l], 28 );
351 }
352}
353
354int ndes_return()
355{
356 return (ndes_icd.r+ndes_icd.l + (-8390656) ) != 0 ;
357}
358
359void _Pragma( "entrypoint" ) ndes_main()
360{
361 ndes_des( ndes_inp, ndes_key, &ndes_newkey, ndes_isw, &ndes_out );
362}
363
364/* main function */
365
366int main( int argc, char **argv )
367{
368 SET_UP
369 for(jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
370 START_LOOP
371 ndes_init();
372 ndes_main();
373 STOP_LOOP
374 }
375 WRITE_TO_FILE
376
377 return ( ndes_return() );
378}
diff --git a/baseline/source/petrinet/ChangeLog.txt b/baseline/source/petrinet/ChangeLog.txt
new file mode 100644
index 0000000..3a02ec7
--- /dev/null
+++ b/baseline/source/petrinet/ChangeLog.txt
@@ -0,0 +1,63 @@
1File: petrinet.c
2Original provenience: Mälardalen benchmark suite,
3http://www.mrtc.mdh.se/projects/wcet/wcet_bench/nsichneu/nsichneu.c
4
52016-02-02:
6- Added generic TACLeBench header.
7- Removed old file header (keep some information in TACLeBench
8 header).
9- Renamed global variables:
10 - main_iters_dummy_i -> petrinet_main_iters_dummy_i
11 - main_min_dummy_i -> petrinet_main_min_dummy_i
12 - main_max_dummy_i -> petrinet_main_max_dummy_i
13 - P1_is_marked -> petrinet_P1_is_marked
14 - P1_marking_member_0 -> petrinet_P1_marking_member_0
15 - P2_is_marked -> petrinet_P2_is_marked
16 - P2_marking_member_0 -> petrinet_P2_marking_member_0
17 - P3_is_marked -> petrinet_P3_is_marked
18 - P3_marking_member_0 -> petrinet_P3_marking_member_0
19- Renamed main function to petrinet_main, set as entrypoint.
20- Implemented new function main according to TACLeBench guidelines.
21- Implemented function petrinet_return, calculates checksum over
22 petrinet_P3_marking_member_0.
23- Applied code formatting according to the following rules
24 - Lines shall not be wider than 80 characters; whenever possible, appropriate
25 line breaks shall be inserted to keep lines below 80 characters
26 - Indentation is done using whitespaces only, no tabs. Code is indented by
27 two whitespaces
28 - Two empty lines are put between any two functions
29 - In non-empty lists or index expressions, opening '(' and '[' are followed by
30 one whitespace, closing ')' and ']' are preceded by one whitespace
31 - In comma- or colon-separated argument lists, one whitespace is put after
32 each comma/colon
33 - Names of functions and global variables all start with a benchmark-specific
34 prefix (here: bs_) followed by lowercase letter (e.g., bs_square)
35 - For pointer types, one whitespace is put before the '*'
36 - Operators within expressions shall be preceded and followed by one
37 whitespace
38 - Code of then- and else-parts of if-then-else statements shall be put in
39 separate lines, not in the same lines as the if-condition or the keyword
40 "else"
41 - Opening braces '{' denoting the beginning of code for some if-else or loop
42 body shall be put at the end of the same line where the keywords "if",
43 "else", "for", "while" etc. occur
44 - In non-empty lists or index expressions, opening '(' and '[' are followed by
45 one whitespace, closing ')' and ']' are preceded by one whitespace
46 - Operators within expressions shall be preceded and followed by one
47 whitespace
48
492016-04-05:
50- Return '0' on success
51
522016-04-06:
53- Fixed generation of return value
54
552016-06-01:
56- Changed all prefixes to lower-case
57
582016-06-08:
59- Prefix
60- removed return from petrinet_main
61
622016-06-13:
63- introduced function petrinet_init
diff --git a/baseline/source/petrinet/petrinet.c b/baseline/source/petrinet/petrinet.c
new file mode 100644
index 0000000..7c9e1a0
--- /dev/null
+++ b/baseline/source/petrinet/petrinet.c
@@ -0,0 +1,990 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: Petrinet
7
8 Author: Friedhelm Stappert, C-LAB, Paderborn, Germany
9
10 Function: Simulate an extended Petri Net
11 Automatically generated code containing large amounts of
12 if-statements (more than 250)
13
14 Source: Mälardalen benchmark suite
15
16 Changes: no major functional changes
17
18 License: may be used, modified, and re-distributed freely
19
20*/
21
22/* Remove the following #define for actual WCET analyses! */
23/*
24 #define PROFILING
25*/
26
27
28#include "../extra.h"
29
30#ifdef PROFILING
31#include <stdio.h>
32#endif
33
34#ifdef PROFILING
35/* Profiling variables. Remove for actual WCET analyses. */
36int petrinet_main_iters_dummy_i = 0,
37 petrinet_main_min_dummy_i = 100000,
38 petrinet_main_max_dummy_i = 0;
39#endif
40
41/*
42 Forward declaration of functions
43*/
44void petrinet_init( void );
45int petrinet_return( void );
46void petrinet_main( void );
47//int main( void );
48
49
50volatile int petrinet_P1_is_marked;
51volatile long petrinet_P1_marking_member_0[ 3 ];
52volatile int petrinet_P2_is_marked;
53volatile long petrinet_P2_marking_member_0[ 5 ];
54volatile int petrinet_P3_is_marked;
55volatile long petrinet_P3_marking_member_0[ 6 ];
56
57const long petrinet_CHECKSUM = 0;
58
59void _Pragma ( "entrypoint" ) petrinet_main( void )
60{
61 int dummy_i;
62 /* dummy_i = 17; Takes too much time */
63 dummy_i = 2;
64
65 #ifdef PROFILING
66 main_iters_dummy_i = 0;
67 #endif
68 _Pragma( "loopbound min 2 max 2" )
69 while ( dummy_i > 0 ) {
70 #ifdef PROFILING
71 main_iters_dummy_i++;
72 #endif
73
74 dummy_i--;
75 /* Permutation for Place P1 : 0, 1, 2 */
76 /* Transition T1 */
77 if ( ( petrinet_P1_is_marked >= 3 ) &&
78 ( petrinet_P3_is_marked + 3 <= 6 ) &&
79 ( petrinet_P1_marking_member_0[ 1 ]
80 == petrinet_P1_marking_member_0[ 2 ] ) ) {
81
82 long x;
83 long y;
84 long z;
85
86 x = petrinet_P1_marking_member_0[ 0 ];
87 y = petrinet_P1_marking_member_0[ 1 ];
88
89 /* Transition condition */
90 if ( x < y ) {
91
92 /* demarking of input places */
93 petrinet_P1_is_marked -= 3;
94
95 /* preaction */
96 z = x - y;
97
98 /* marking of output places */
99 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
100 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
101 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
102 petrinet_P3_is_marked += 3;
103
104 } /* end of if (Transition condition) */
105 }
106
107 /* Permutation for Place petrinet_P1 : 0, 2, 1 */
108 /* Transition T1 */
109 if ( ( petrinet_P1_is_marked >= 3 ) &&
110 ( petrinet_P3_is_marked + 3 <= 6 ) &&
111 ( petrinet_P1_marking_member_0[ 2 ]
112 == petrinet_P1_marking_member_0[ 1 ] ) ) {
113
114 long x;
115 long y;
116 long z;
117
118 x = petrinet_P1_marking_member_0[ 0 ];
119 y = petrinet_P1_marking_member_0[ 2 ];
120
121 /* Transition condition */
122 if ( ( x < y ) ) {
123
124 /* demarking of input places */
125 petrinet_P1_is_marked -= 3;
126
127 /* preaction */
128 z = x - y;
129
130 /* marking of output places */
131 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
132 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
133 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
134 petrinet_P3_is_marked += 3;
135
136 } /* end of if (Transition condition) */
137 }
138
139 /* Permutation for Place petrinet_P1 : 1, 0, 2 */
140 /* Transition T1 */
141 if ( ( petrinet_P1_is_marked >= 3 ) &&
142 ( petrinet_P3_is_marked + 3 <= 6 ) &&
143 ( petrinet_P1_marking_member_0[ 0 ]
144 == petrinet_P1_marking_member_0[ 2 ] ) ) {
145
146 long x;
147 long y;
148 long z;
149
150 x = petrinet_P1_marking_member_0[ 1 ];
151 y = petrinet_P1_marking_member_0[ 0 ];
152
153 /* Transition condition */
154 if ( x < y ) {
155
156 /* demarking of input places */
157 petrinet_P1_is_marked -= 3;
158
159 /* preaction */
160 z = x - y;
161
162 /* marking of output places */
163 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
164 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
165 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
166 petrinet_P3_is_marked += 3;
167
168 } /* end of if (Transition condition) */
169 }
170
171 /* Permutation for Place petrinet_P1 : 1, 2, 0 */
172 /* Transition T1 */
173 if ( ( petrinet_P1_is_marked >= 3 ) &&
174 ( petrinet_P3_is_marked + 3 <= 6 ) &&
175 ( petrinet_P1_marking_member_0[ 2 ]
176 == petrinet_P1_marking_member_0[ 0 ] ) ) {
177
178 long x;
179 long y;
180 long z;
181
182 x = petrinet_P1_marking_member_0[ 1 ];
183 y = petrinet_P1_marking_member_0[ 2 ];
184
185 /* Transition condition */
186 if ( ( x < y ) ) {
187
188 /* demarking of input places */
189 petrinet_P1_is_marked -= 3;
190
191 /* preaction */
192 z = x - y;
193
194 /* marking of output places */
195 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
196 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
197 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
198 petrinet_P3_is_marked += 3;
199
200 } /* end of if (Transition condition) */
201 }
202
203 /* Permutation for Place petrinet_P1 : 2, 0, 1 */
204 /* Transition T1 */
205 if ( ( petrinet_P1_is_marked >= 3 ) &&
206 ( petrinet_P3_is_marked + 3 <= 6 ) &&
207 ( petrinet_P1_marking_member_0[ 0 ]
208 == petrinet_P1_marking_member_0[ 1 ] ) ) {
209 long x;
210 long y;
211 long z;
212
213 x = petrinet_P1_marking_member_0[ 2 ];
214 y = petrinet_P1_marking_member_0[ 0 ];
215
216 /* Transition condition */
217 if ( ( x < y ) ) {
218
219 /* demarking of input places */
220 petrinet_P1_is_marked -= 3;
221
222 /* preaction */
223 z = x - y;
224
225 /* marking of output places */
226 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
227 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
228 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
229 petrinet_P3_is_marked += 3;
230
231 } /* end of if (Transition condition) */
232 }
233
234 /* Permutation for Place petrinet_P1 : 2, 1, 0 */
235 /* Transition T1 */
236 if ( ( petrinet_P1_is_marked >= 3 ) &&
237 ( petrinet_P3_is_marked + 3 <= 6 ) &&
238 ( petrinet_P1_marking_member_0[ 1 ]
239 == petrinet_P1_marking_member_0[ 0 ] ) ) {
240 long x;
241 long y;
242 long z;
243
244 x = petrinet_P1_marking_member_0[ 2 ];
245 y = petrinet_P1_marking_member_0[ 1 ];
246
247 /* Transition condition */
248 if ( ( x < y ) ) {
249
250 /* demarking of input places */
251 petrinet_P1_is_marked -= 3;
252
253 /* preaction */
254 z = x - y;
255
256 /* marking of output places */
257 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
258 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
259 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
260 petrinet_P3_is_marked += 3;
261
262 } /* end of if (Transition condition) */
263 }
264
265 /* Permutation for Place P2 : 0, 1, 2, 3 */
266 /* Transition T2 */
267 if ( ( petrinet_P2_is_marked >= 4 ) &&
268 ( ( ( petrinet_P3_is_marked + 3 ) <= 6 ) ) &&
269 ( ( ( petrinet_P2_marking_member_0[ 1 ]
270 == petrinet_P2_marking_member_0[ 2 ] ) ) &&
271 ( ( petrinet_P2_marking_member_0[ 1 ]
272 == petrinet_P2_marking_member_0[ 3 ] ) ) ) ) {
273 long a;
274 long b;
275 long c;
276
277 a = petrinet_P2_marking_member_0[ 0 ];
278 b = petrinet_P2_marking_member_0[ 1 ];
279
280 /* Transition condition */
281 if ( ( b > a ) ) {
282
283 /* demarking of input places */
284 petrinet_P2_is_marked -= 4;
285
286 /* preaction */
287 c = a + b;
288
289 /* marking of output places */
290 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
291 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
292 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
293 petrinet_P3_is_marked += 3;
294
295 } /* end of if (Transition condition) */
296 }
297
298 /* Permutation for Place petrinet_P2 : 0, 1, 3, 2 */
299 /* Transition T2 */
300 if ( ( petrinet_P2_is_marked >= 4 ) &&
301 ( ( ( petrinet_P3_is_marked + 3 ) <= 6 ) ) &&
302 ( ( petrinet_P2_marking_member_0[ 1 ]
303 == petrinet_P2_marking_member_0[ 3 ] ) &&
304 ( petrinet_P2_marking_member_0[ 1 ]
305 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
306 long a;
307 long b;
308 long c;
309
310 a = petrinet_P2_marking_member_0[ 0 ];
311 b = petrinet_P2_marking_member_0[ 1 ];
312
313 /* Transition condition */
314 if ( ( b > a ) ) {
315
316 /* demarking of input places */
317 petrinet_P2_is_marked -= 4;
318
319 /* preaction */
320 c = a + b;
321
322 /* marking of output places */
323 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
324 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
325 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
326 petrinet_P3_is_marked += 3;
327
328 } /* end of if (Transition condition) */
329 }
330
331 /* Permutation for Place petrinet_P2 : 0, 2, 1, 3 */
332 /* Transition T2 */
333 if ( ( petrinet_P2_is_marked >= 4 ) &&
334 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
335 ( ( petrinet_P2_marking_member_0[ 2 ]
336 == petrinet_P2_marking_member_0[ 1 ] ) &&
337 ( petrinet_P2_marking_member_0[ 2 ]
338 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
339 long a;
340 long b;
341 long c;
342
343 a = petrinet_P2_marking_member_0[ 0 ];
344 b = petrinet_P2_marking_member_0[ 2 ];
345
346 /* Transition condition */
347 if ( ( b > a ) ) {
348
349 /* demarking of input places */
350 petrinet_P2_is_marked -= 4;
351
352 /* preaction */
353 c = a + b;
354
355 /* marking of output places */
356 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
357 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
358 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
359 petrinet_P3_is_marked += 3;
360
361 } /* end of if (Transition condition) */
362 }
363
364 /* Permutation for Place petrinet_P2 : 0, 2, 3, 1 */
365 /* Transition T2 */
366 if ( ( petrinet_P2_is_marked >= 4 ) &&
367 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
368 ( ( petrinet_P2_marking_member_0[ 2 ]
369 == petrinet_P2_marking_member_0[ 3 ] ) &&
370 ( petrinet_P2_marking_member_0[ 2 ]
371 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
372 long a;
373 long b;
374 long c;
375
376 a = petrinet_P2_marking_member_0[ 0 ];
377 b = petrinet_P2_marking_member_0[ 2 ];
378
379 /* Transition condition */
380 if ( ( b > a ) ) {
381
382 /* demarking of input places */
383 petrinet_P2_is_marked -= 4;
384
385 /* preaction */
386 c = a + b;
387
388 /* marking of output places */
389 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
390 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
391 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
392 petrinet_P3_is_marked += 3;
393
394 } /* end of if (Transition condition) */
395 }
396
397 /* Permutation for Place petrinet_P2 : 0, 3, 1, 2 */
398 /* Transition T2 */
399 if ( ( petrinet_P2_is_marked >= 4 ) &&
400 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
401 ( ( petrinet_P2_marking_member_0[ 3 ]
402 == petrinet_P2_marking_member_0[ 1 ] ) &&
403 ( petrinet_P2_marking_member_0[ 3 ]
404 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
405 long a;
406 long b;
407 long c;
408
409 a = petrinet_P2_marking_member_0[ 0 ];
410 b = petrinet_P2_marking_member_0[ 3 ];
411
412 /* Transition condition */
413 if ( ( b > a ) ) {
414
415 /* demarking of input places */
416 petrinet_P2_is_marked -= 4;
417
418 /* preaction */
419 c = a + b;
420
421 /* marking of output places */
422 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
423 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
424 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
425 petrinet_P3_is_marked += 3;
426
427 } /* end of if (Transition condition) */
428 }
429
430 /* Permutation for Place petrinet_P2 : 0, 3, 2, 1 */
431 /* Transition T2 */
432 if ( ( petrinet_P2_is_marked >= 4 ) &&
433 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
434 ( ( petrinet_P2_marking_member_0[ 3 ]
435 == petrinet_P2_marking_member_0[ 2 ] ) &&
436 ( petrinet_P2_marking_member_0[ 3 ]
437 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
438 long a;
439 long b;
440 long c;
441
442 a = petrinet_P2_marking_member_0[ 0 ];
443 b = petrinet_P2_marking_member_0[ 3 ];
444
445 /* Transition condition */
446 if ( ( b > a ) ) {
447
448 /* demarking of input places */
449 petrinet_P2_is_marked -= 4;
450
451 /* preaction */
452 c = a + b;
453
454 /* marking of output places */
455 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
456 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
457 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
458 petrinet_P3_is_marked += 3;
459
460 } /* end of if (Transition condition) */
461 }
462
463 /* Permutation for Place petrinet_P2 : 1, 0, 2, 3 */
464 /* Transition T2 */
465 if ( ( petrinet_P2_is_marked >= 4 ) &&
466 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
467 ( ( petrinet_P2_marking_member_0[ 0 ]
468 == petrinet_P2_marking_member_0[ 2 ] ) &&
469 ( petrinet_P2_marking_member_0[ 0 ]
470 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
471 long a;
472 long b;
473 long c;
474
475 a = petrinet_P2_marking_member_0[ 1 ];
476 b = petrinet_P2_marking_member_0[ 0 ];
477
478 /* Transition condition */
479 if ( ( b > a ) ) {
480
481 /* demarking of input places */
482 petrinet_P2_is_marked -= 4;
483
484 /* preaction */
485 c = a + b;
486
487 /* marking of output places */
488 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
489 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
490 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
491 petrinet_P3_is_marked += 3;
492
493 } /* end of if (Transition condition) */
494 }
495
496 /* Permutation for Place petrinet_P2 : 1, 0, 3, 2 */
497 /* Transition T2 */
498 if ( ( petrinet_P2_is_marked >= 4 ) &&
499 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
500 ( ( petrinet_P2_marking_member_0[ 0 ]
501 == petrinet_P2_marking_member_0[ 3 ] ) &&
502 ( petrinet_P2_marking_member_0[ 0 ]
503 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
504 long a;
505 long b;
506 long c;
507
508 a = petrinet_P2_marking_member_0[ 1 ];
509 b = petrinet_P2_marking_member_0[ 0 ];
510
511 /* Transition condition */
512 if ( ( b > a ) ) {
513
514 /* demarking of input places */
515 petrinet_P2_is_marked -= 4;
516
517 /* preaction */
518 c = a + b;
519
520 /* marking of output places */
521 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
522 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
523 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
524 petrinet_P3_is_marked += 3;
525
526 } /* end of if (Transition condition) */
527 }
528
529 /* Permutation for Place petrinet_P2 : 1, 2, 0, 3 */
530 /* Transition T2 */
531 if ( ( petrinet_P2_is_marked >= 4 ) &&
532 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
533 ( ( petrinet_P2_marking_member_0[ 2 ]
534 == petrinet_P2_marking_member_0[ 0 ] ) &&
535 ( petrinet_P2_marking_member_0[ 2 ]
536 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
537 long a;
538 long b;
539 long c;
540
541 a = petrinet_P2_marking_member_0[ 1 ];
542 b = petrinet_P2_marking_member_0[ 2 ];
543
544 /* Transition condition */
545 if ( ( b > a ) ) {
546
547 /* demarking of input places */
548 petrinet_P2_is_marked -= 4;
549
550 /* preaction */
551 c = a + b;
552
553 /* marking of output places */
554 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
555 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
556 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
557 petrinet_P3_is_marked += 3;
558
559 } /* end of if (Transition condition) */
560 }
561
562 /* Permutation for Place petrinet_P2 : 1, 2, 3, 0 */
563 /* Transition T2 */
564 if ( ( petrinet_P2_is_marked >= 4 ) &&
565 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
566 ( ( petrinet_P2_marking_member_0[ 2 ]
567 == petrinet_P2_marking_member_0[ 3 ] ) &&
568 ( petrinet_P2_marking_member_0[ 2 ]
569 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
570 long a;
571 long b;
572 long c;
573
574 a = petrinet_P2_marking_member_0[ 1 ];
575 b = petrinet_P2_marking_member_0[ 2 ];
576
577 /* Transition condition */
578 if ( ( b > a ) ) {
579 /* demarking of input places */
580 petrinet_P2_is_marked -= 4;
581
582 /* preaction */
583 c = a + b;
584
585 /* marking of output places */
586 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
587 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
588 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
589 petrinet_P3_is_marked += 3;
590
591 } /* end of if (Transition condition) */
592 }
593
594 /* Permutation for Place petrinet_P2 : 1, 3, 0, 2 */
595 /* Transition T2 */
596 if ( ( petrinet_P2_is_marked >= 4 ) &&
597 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
598 ( ( petrinet_P2_marking_member_0[ 3 ]
599 == petrinet_P2_marking_member_0[ 0 ] ) &&
600 ( petrinet_P2_marking_member_0[ 3 ]
601 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
602 long a;
603 long b;
604 long c;
605
606 a = petrinet_P2_marking_member_0[ 1 ];
607 b = petrinet_P2_marking_member_0[ 3 ];
608
609 /* Transition condition */
610 if ( ( b > a ) ) {
611 /* demarking of input places */
612 petrinet_P2_is_marked -= 4;
613
614 /* preaction */
615 c = a + b;
616
617 /* marking of output places */
618 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
619 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
620 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
621 petrinet_P3_is_marked += 3;
622
623 } /* end of if (Transition condition) */
624 }
625
626
627 /* Permutation for Place petrinet_P2 : 1, 3, 2, 0 */
628 /* Transition T2 */
629 if ( ( petrinet_P2_is_marked >= 4 ) &&
630 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
631 ( ( petrinet_P2_marking_member_0[ 3 ]
632 == petrinet_P2_marking_member_0[ 2 ] ) &&
633 ( petrinet_P2_marking_member_0[ 3 ]
634 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
635 long a;
636 long b;
637 long c;
638
639 a = petrinet_P2_marking_member_0[ 1 ];
640 b = petrinet_P2_marking_member_0[ 3 ];
641
642 /* Transition condition */
643 if ( ( b > a ) ) {
644
645 /* demarking of input places */
646 petrinet_P2_is_marked -= 4;
647
648 /* preaction */
649 c = a + b;
650
651 /* marking of output places */
652 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
653 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
654 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
655 petrinet_P3_is_marked += 3;
656
657 } /* end of if (Transition condition) */
658 }
659
660
661 /* Permutation for Place petrinet_P2 : 2, 0, 1, 3 */
662 /* Transition T2 */
663 if ( ( petrinet_P2_is_marked >= 4 ) &&
664 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
665 ( ( petrinet_P2_marking_member_0[ 0 ]
666 == petrinet_P2_marking_member_0[ 1 ] ) &&
667 ( petrinet_P2_marking_member_0[ 0 ]
668 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
669 long a;
670 long b;
671 long c;
672
673 a = petrinet_P2_marking_member_0[ 2 ];
674 b = petrinet_P2_marking_member_0[ 0 ];
675
676 /* Transition condition */
677 if ( ( b > a ) ) {
678 /* demarking of input places */
679 petrinet_P2_is_marked -= 4;
680
681 /* preaction */
682 c = a + b;
683
684 /* marking of output places */
685 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
686 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
687 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
688 petrinet_P3_is_marked += 3;
689
690 } /* end of if (Transition condition) */
691 }
692
693 /* Permutation for Place petrinet_P2 : 2, 0, 3, 1 */
694 /* Transition T2 */
695 if ( ( petrinet_P2_is_marked >= 4 ) &&
696 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
697 ( ( petrinet_P2_marking_member_0[ 0 ]
698 == petrinet_P2_marking_member_0[ 3 ] ) &&
699 ( petrinet_P2_marking_member_0[ 0 ]
700 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
701 long a;
702 long b;
703 long c;
704
705 a = petrinet_P2_marking_member_0[ 2 ];
706 b = petrinet_P2_marking_member_0[ 0 ];
707
708 /* Transition condition */
709 if ( ( b > a ) ) {
710 /* demarking of input places */
711 petrinet_P2_is_marked -= 4;
712
713 /* preaction */
714 c = a + b;
715
716 /* marking of output places */
717 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
718 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
719 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
720 petrinet_P3_is_marked += 3;
721
722 } /* end of if (Transition condition) */
723 }
724
725 /* Permutation for Place petrinet_P2 : 2, 1, 0, 3 */
726 /* Transition T2 */
727 if ( ( petrinet_P2_is_marked >= 4 ) &&
728 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
729 ( ( petrinet_P2_marking_member_0[ 1 ]
730 == petrinet_P2_marking_member_0[ 0 ] ) &&
731 ( petrinet_P2_marking_member_0[ 1 ]
732 == petrinet_P2_marking_member_0[ 3 ] ) ) ) {
733 long a;
734 long b;
735 long c;
736
737 a = petrinet_P2_marking_member_0[ 2 ];
738 b = petrinet_P2_marking_member_0[ 1 ];
739
740 /* Transition condition */
741 if ( ( b > a ) ) {
742 /* demarking of input places */
743 petrinet_P2_is_marked -= 4;
744
745 /* preaction */
746 c = a + b;
747
748 /* marking of output places */
749 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
750 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
751 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
752 petrinet_P3_is_marked += 3;
753
754 } /* end of if (Transition condition) */
755 }
756
757 /* Permutation for Place petrinet_P2 : 2, 1, 3, 0 */
758 /* Transition T2 */
759 if ( ( petrinet_P2_is_marked >= 4 ) &&
760 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
761 ( ( petrinet_P2_marking_member_0[ 1 ]
762 == petrinet_P2_marking_member_0[ 3 ] ) &&
763 ( petrinet_P2_marking_member_0[ 1 ]
764 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
765 long a;
766 long b;
767 long c;
768
769 a = petrinet_P2_marking_member_0[ 2 ];
770 b = petrinet_P2_marking_member_0[ 1 ];
771
772 /* Transition condition */
773 if ( ( b > a ) ) {
774 /* demarking of input places */
775 petrinet_P2_is_marked -= 4;
776
777 /* preaction */
778 c = a + b;
779
780 /* marking of output places */
781 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
782 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
783 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
784 petrinet_P3_is_marked += 3;
785
786 } /* end of if (Transition condition) */
787 }
788
789 /* Permutation for Place petrinet_P2 : 2, 3, 0, 1 */
790 /* Transition T2 */
791 if ( ( petrinet_P2_is_marked >= 4 ) &&
792 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
793 ( ( petrinet_P2_marking_member_0[ 3 ]
794 == petrinet_P2_marking_member_0[ 0 ] ) &&
795 ( petrinet_P2_marking_member_0[ 3 ]
796 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
797 long a;
798 long b;
799 long c;
800
801 a = petrinet_P2_marking_member_0[ 2 ];
802 b = petrinet_P2_marking_member_0[ 3 ];
803
804 /* Transition condition */
805 if ( ( b > a ) ) {
806 /* demarking of input places */
807 petrinet_P2_is_marked -= 4;
808
809 /* preaction */
810 c = a + b;
811
812 /* marking of output places */
813 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
814 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
815 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
816 petrinet_P3_is_marked += 3;
817
818 } /* end of if (Transition condition) */
819 }
820
821 /* Permutation for Place petrinet_P2 : 2, 3, 1, 0 */
822 /* Transition T2 */
823 if ( ( petrinet_P2_is_marked >= 4 ) &&
824 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
825 ( ( petrinet_P2_marking_member_0[ 3 ]
826 == petrinet_P2_marking_member_0[ 1 ] ) &&
827 ( petrinet_P2_marking_member_0[ 3 ]
828 == petrinet_P2_marking_member_0[ 0 ] ) ) ) {
829 long a;
830 long b;
831 long c;
832
833 a = petrinet_P2_marking_member_0[ 2 ];
834 b = petrinet_P2_marking_member_0[ 3 ];
835
836 /* Transition condition */
837 if ( ( b > a ) ) {
838 /* demarking of input places */
839 petrinet_P2_is_marked -= 4;
840
841 /* preaction */
842 c = a + b;
843
844 /* marking of output places */
845 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
846 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
847 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
848 petrinet_P3_is_marked += 3;
849
850 } /* end of if (Transition condition) */
851 }
852
853 /* Permutation for Place petrinet_P2 : 3, 0, 1, 2 */
854 /* Transition T2 */
855 if ( ( petrinet_P2_is_marked >= 4 ) &&
856 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
857 ( ( petrinet_P2_marking_member_0[ 0 ]
858 == petrinet_P2_marking_member_0[ 1 ] ) &&
859 ( petrinet_P2_marking_member_0[ 0 ]
860 == petrinet_P2_marking_member_0[ 2 ] ) ) ) {
861 long a;
862 long b;
863 long c;
864
865 a = petrinet_P2_marking_member_0[ 3 ];
866 b = petrinet_P2_marking_member_0[ 0 ];
867
868 /* Transition condition */
869 if ( ( b > a ) ) {
870
871 /* demarking of input places */
872 petrinet_P2_is_marked -= 4;
873
874 /* preaction */
875 c = a + b;
876
877 /* marking of output places */
878 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
879 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
880 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
881 petrinet_P3_is_marked += 3;
882
883 } /* end of if (Transition condition) */
884 }
885
886
887 /* Permutation for Place petrinet_P2 : 3, 0, 2, 1 */
888 /* Transition T2 */
889 if ( ( petrinet_P2_is_marked >= 4 ) &&
890 ( ( petrinet_P3_is_marked + 3 ) <= 6 ) &&
891 ( ( petrinet_P2_marking_member_0[ 0 ]
892 == petrinet_P2_marking_member_0[ 2 ] ) &&
893 ( petrinet_P2_marking_member_0[ 0 ]
894 == petrinet_P2_marking_member_0[ 1 ] ) ) ) {
895
896 long a;
897 long b;
898 long c;
899
900 a = petrinet_P2_marking_member_0[ 3 ];
901 b = petrinet_P2_marking_member_0[ 0 ];
902
903 /* Transition condition */
904 if ( ( b > a ) ) {
905
906 /* demarking of input places */
907 petrinet_P2_is_marked -= 4;
908
909 /* preaction */
910 c = a + b;
911
912 /* marking of output places */
913 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = a;
914 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = b;
915 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = c;
916 petrinet_P3_is_marked += 3;
917
918 } /* end of if (Transition condition) */
919 }
920 }
921 #ifdef PROFILING
922 if ( main_iters_dummy_i < main_min_dummy_i )
923 main_min_dummy_i = main_iters_dummy_i;
924 if ( main_iters_dummy_i > main_max_dummy_i )
925 main_max_dummy_i = main_iters_dummy_i;
926 #endif
927
928 #ifdef PROFILING
929 printf( "main::dummy_i-loop: [%d, %d]\n",
930 main_min_dummy_i, main_max_dummy_i );
931 #endif
932
933 //dummy_i = 77;
934 // TODO: not a good return value
935 //return dummy_i;
936}
937
938
939void petrinet_init( void )
940{
941 petrinet_P1_is_marked = 3;
942 petrinet_P2_is_marked = 5;
943 petrinet_P3_is_marked = 0;
944
945 /*
946 Maybe we should also initialise these arrays, as they may be read
947 in the petrinet_main() function before being written.
948 */
949 /*
950 volatile long petrinet_P1_marking_member_0[ 3 ];
951 volatile long petrinet_P2_marking_member_0[ 5 ];
952 volatile long petrinet_P3_marking_member_0[ 6 ];
953 */
954}
955
956
957int petrinet_return( void )
958{
959 // TODO: use something from the Px_... arrays
960 int checksum = 0;
961 int i;
962
963 for ( i = 0; i < 3; ++i )
964 checksum += petrinet_P1_marking_member_0[i];
965
966 for ( i = 0; i < 5; ++i )
967 checksum += petrinet_P2_marking_member_0[i];
968
969 for ( i = 0; i < 6; ++i )
970 checksum += petrinet_P3_marking_member_0[i];
971
972 return ( ( checksum == petrinet_CHECKSUM ) ? 0 : -1 );
973}
974
975
976int main( int argc, char **argv )
977{
978 SET_UP
979
980 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
981
982 START_LOOP
983 petrinet_main();
984 STOP_LOOP
985 }
986 WRITE_TO_FILE
987
988 return ( petrinet_return() );
989}
990
diff --git a/baseline/source/rijndael_dec/ChangeLog.txt b/baseline/source/rijndael_dec/ChangeLog.txt
new file mode 100644
index 0000000..75e26a8
--- /dev/null
+++ b/baseline/source/rijndael_dec/ChangeLog.txt
@@ -0,0 +1,58 @@
1File: rijndael_decoder.c
2Source: security section of MiBench
3
4- Prefix library functions with rijndael_dec
5- Move functionality from function main into functions
6 rijndael_enc_init, rijndael_enc_main, and rijndael_enc_return
7 (reusing code from rijndael_enc benchmark)
8- Added general TACLeBench header to beginning of source code
9- Applied code formatting with astyle as in the example
10- Rename to rijndael_dec.c
11- Make loop counter in rijndael_dec_init unsigned
12- Remove dead code in rijndael_dec_decfile
13
14File: aes.h
15Source: security section of MiBench
16
172016-04-20:
18- Replace with file aes.h from rijndael_enc benchmark
19- Declare prototype for rijndael_enc_decrypt instead of rijndael_enc_encrypt
20
21File: aes.c
22Source: security section of MiBench
23
242016-04-20:
25- Replace with file aes.h from rijndael_enc benchmark, using prefix
26 rijndael_dec
27- Replace implementation for rijndael_enc_encrypt with implementation
28 for rijndael_enc_decrypt
29- Applied code formatting with astyle as in the example
30- Remove unused macros s, ff_poly, ff_hi, m1, m2, m3, FFmulX,
31 fwd_mcol, fwd_var, inv_var, si, so, fwd_rnd, inv_rnd, fwd_lrnd,
32 inv_lrnd, locals, l_copy, state_in, state_out, round
33
342016-06-14:
35- Added cast to make C++ compiler happy
36
37File: aestab.h
38Source: security section of MiBench
39
402016-04-20:
41- Replace with file aestab.h from rijndael_enc benchmark, using prefix
42 rijndael_dec
43- Remove unused arrays rijndael_dec_s_box, rijndael_dec_inv_s_box,
44 rijndael_dec_ft_tab
45
46Files: glibc_common.c, my_file.c, glibc_common.h, my_file.h
47Source: security section of MiBench
48
492016-04-20:
50- Replace with files rijndael_enc_libc.c and rijndael_enc_libc.h from
51 rijndael_enc benchmark (renamed to rijndael_dec_libc.c and
52 rijndael_dec_libc.h, using prefix rijndael_dec)
53
54File: input_small_enc.c
55Source: security section of MiBench
56
572016-02-26:
58- Prefix input array with rijndael_dec
diff --git a/baseline/source/rijndael_dec/aes.c b/baseline/source/rijndael_dec/aes.c
new file mode 100644
index 0000000..f47adfd
--- /dev/null
+++ b/baseline/source/rijndael_dec/aes.c
@@ -0,0 +1,406 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of 128,
23 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27*/
28
29#include "aes.h"
30
31#include "aestab.h"
32
33#define four_tables(x,tab,vf,rf,c) ( tab[0][bval(vf(x,0,c),rf(0,c))] ^ \
34 tab[1][bval(vf(x,1,c),rf(1,c))] ^ \
35 tab[2][bval(vf(x,2,c),rf(2,c))] ^ \
36 tab[3][bval(vf(x,3,c),rf(3,c))] )
37
38#define vf1(x,r,c) (x)
39#define rf1(r,c) (r)
40#define rf2(r,c) ((r-c)&3)
41
42#define ls_box(x,c) four_tables(x,rijndael_dec_fl_tab,vf1,rf2,c)
43
44#define inv_mcol(x) four_tables(x,rijndael_dec_im_tab,vf1,rf1,0)
45
46/*
47 Subroutine to set the block size (if variable) in bytes, legal
48 values being 16, 24 and 32.
49*/
50
51#define nc (Ncol)
52
53/*
54 Initialise the key schedule from the user supplied key. The key
55 length is now specified in bytes - 16, 24 or 32 as appropriate.
56 This corresponds to bit lengths of 128, 192 and 256 bits, and
57 to Nk values of 4, 6 and 8 respectively.
58*/
59
60#define mx(t,f) (*t++ = inv_mcol(*f),f++)
61#define cp(t,f) *t++ = *f++
62
63#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0)
64#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0)
65
66aes_ret rijndael_dec_set_key( byte in_key[], const word n_bytes,
67 const enum aes_key f, struct aes *cx )
68{
69 word *kf, *kt, rci;
70
71 if ( ( n_bytes & 7 ) || n_bytes < 16 || n_bytes > 32 || ( !( f & 1 ) &&
72 !( f & 2 ) ) )
73 return ( n_bytes ? cx->mode &= ~0x03, aes_bad : ( aes_ret )( cx->Nkey << 2 ) );
74
75 cx->mode = ( cx->mode & ~0x03 ) | ( ( byte )f & 0x03 );
76 cx->Nkey = n_bytes >> 2;
77 cx->Nrnd = Nr( cx->Nkey, ( word )nc );
78
79 cx->e_key[0] = word_in( in_key );
80 cx->e_key[1] = word_in( in_key + 4 );
81 cx->e_key[2] = word_in( in_key + 8 );
82 cx->e_key[3] = word_in( in_key + 12 );
83
84 kf = cx->e_key;
85 kt = kf + nc * ( cx->Nrnd + 1 ) - cx->Nkey;
86 rci = 0;
87
88 switch ( cx->Nkey ) {
89 case 4:
90 _Pragma( "loopbound min 0 max 0" )
91 do {
92 kf[4] = kf[0] ^ ls_box( kf[3], 3 ) ^ rijndael_dec_rcon_tab[rci++];
93 kf[5] = kf[1] ^ kf[4];
94 kf[6] = kf[2] ^ kf[5];
95 kf[7] = kf[3] ^ kf[6];
96 kf += 4;
97 } while ( kf < kt );
98 break;
99
100 case 6:
101 cx->e_key[4] = word_in( in_key + 16 );
102 cx->e_key[5] = word_in( in_key + 20 );
103 _Pragma( "loopbound min 0 max 0" )
104 do {
105 kf[ 6] = kf[0] ^ ls_box( kf[5], 3 ) ^ rijndael_dec_rcon_tab[rci++];
106 kf[ 7] = kf[1] ^ kf[ 6];
107 kf[ 8] = kf[2] ^ kf[ 7];
108 kf[ 9] = kf[3] ^ kf[ 8];
109 kf[10] = kf[4] ^ kf[ 9];
110 kf[11] = kf[5] ^ kf[10];
111 kf += 6;
112 } while ( kf < kt );
113 break;
114
115 case 8:
116 cx->e_key[4] = word_in( in_key + 16 );
117 cx->e_key[5] = word_in( in_key + 20 );
118 cx->e_key[6] = word_in( in_key + 24 );
119 cx->e_key[7] = word_in( in_key + 28 );
120 _Pragma( "loopbound min 7 max 7" )
121 do {
122 kf[ 8] = kf[0] ^ ls_box( kf[7], 3 ) ^ rijndael_dec_rcon_tab[rci++];
123 kf[ 9] = kf[1] ^ kf[ 8];
124 kf[10] = kf[2] ^ kf[ 9];
125 kf[11] = kf[3] ^ kf[10];
126 kf[12] = kf[4] ^ ls_box( kf[11], 0 );
127 kf[13] = kf[5] ^ kf[12];
128 kf[14] = kf[6] ^ kf[13];
129 kf[15] = kf[7] ^ kf[14];
130 kf += 8;
131 } while ( kf < kt );
132 break;
133 }
134
135 if ( ( cx->mode & 3 ) != enc ) {
136 word i;
137
138 kt = cx->d_key + nc * cx->Nrnd;
139 kf = cx->e_key;
140
141 cpy( kt, kf );
142 kt -= 2 * nc;
143
144 _Pragma( "loopbound min 0 max 0" )
145 for ( i = 1; i < cx->Nrnd; ++i ) {
146 mix( kt, kf );
147 kt -= 2 * nc;
148 }
149
150 cpy( kt, kf );
151 }
152
153 return aes_good;
154}
155
156short rijndael_dec_decrypt( const unsigned char in_blk[],
157 unsigned char out_blk[], const struct aes *cx )
158{
159 const unsigned long *kp = cx->d_key;
160 if ( !( cx->mode & 2 ) )
161 return 0;
162 unsigned long b0[4];
163 b0[0] = *( unsigned long * )in_blk ^ kp[0];
164 b0[1] = *( unsigned long * )( in_blk + 4 )^kp[1];
165 b0[2] = *( unsigned long * )( in_blk + 8 )^kp[2];
166 b0[3] = *( unsigned long * )( in_blk + 12 )^kp[3];
167 kp += 4;
168 unsigned long b1[4];
169 switch ( cx->Nrnd ) {
170 case 14:
171 b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
172 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
173 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
174 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
175 b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
176 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
177 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
178 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
179 b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
180 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
181 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
182 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
183 b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
184 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
185 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
186 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
187 b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
188 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
189 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
190 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
191 b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
192 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
193 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
194 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
195 b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
196 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
197 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
198 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
199 b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
200 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
201 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
202 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
203 kp += 8;
204 case 12:
205 b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
206 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
207 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
208 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
209 b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
210 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
211 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
212 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
213 b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
214 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
215 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
216 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
217 b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
218 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
219 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
220 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
221 b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
222 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
223 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
224 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
225 b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
226 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
227 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
228 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
229 b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
230 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
231 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
232 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
233 b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
234 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
235 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
236 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
237 kp += 8;
238 case 10:
239 b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
240 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
241 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
242 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
243 b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
244 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
245 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
246 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
247 b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
248 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
249 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
250 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
251 b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
252 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
253 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
254 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
255 b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
256 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
257 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
258 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
259 b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
260 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
261 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
262 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
263 b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
264 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
265 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
266 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
267 b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
268 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
269 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
270 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
271 b1[0] = ( kp + 8 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
272 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
273 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
274 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
275 b1[1] = ( kp + 8 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
276 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
277 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
278 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
279 b1[2] = ( kp + 8 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
280 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
281 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
282 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
283 b1[3] = ( kp + 8 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
284 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
285 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
286 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
287 b0[0] = ( kp + 12 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
288 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
289 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
290 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
291 b0[1] = ( kp + 12 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
292 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
293 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
294 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
295 b0[2] = ( kp + 12 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
296 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
297 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
298 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
299 b0[3] = ( kp + 12 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
300 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
301 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
302 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
303 b1[0] = ( kp + 16 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
304 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
305 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
306 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
307 b1[1] = ( kp + 16 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
308 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
309 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
310 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
311 b1[2] = ( kp + 16 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
312 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
313 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
314 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
315 b1[3] = ( kp + 16 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
316 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
317 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
318 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
319 b0[0] = ( kp + 20 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
320 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
321 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
322 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
323 b0[1] = ( kp + 20 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
324 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
325 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
326 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
327 b0[2] = ( kp + 20 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
328 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
329 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
330 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
331 b0[3] = ( kp + 20 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
332 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
333 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
334 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
335 b1[0] = ( kp + 24 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
336 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
337 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
338 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
339 b1[1] = ( kp + 24 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
340 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
341 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
342 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
343 b1[2] = ( kp + 24 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
344 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
345 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
346 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
347 b1[3] = ( kp + 24 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
348 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
349 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
350 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
351 b0[0] = ( kp + 28 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^
352 rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
353 rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
354 rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
355 b0[1] = ( kp + 28 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^
356 rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
357 rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
358 rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
359 b0[2] = ( kp + 28 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^
360 rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
361 rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
362 rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
363 b0[3] = ( kp + 28 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^
364 rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
365 rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
366 rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
367 b1[0] = ( kp + 32 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^
368 rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
369 rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
370 rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
371 b1[1] = ( kp + 32 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^
372 rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
373 rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
374 rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
375 b1[2] = ( kp + 32 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^
376 rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
377 rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
378 rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
379 b1[3] = ( kp + 32 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^
380 rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
381 rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
382 rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
383 b0[0] = ( kp + 36 )[0] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[0] )] ^
384 rijndael_dec_il_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
385 rijndael_dec_il_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
386 rijndael_dec_il_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
387 b0[1] = ( kp + 36 )[1] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[1] )] ^
388 rijndael_dec_il_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
389 rijndael_dec_il_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
390 rijndael_dec_il_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
391 b0[2] = ( kp + 36 )[2] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[2] )] ^
392 rijndael_dec_il_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
393 rijndael_dec_il_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
394 rijndael_dec_il_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
395 b0[3] = ( kp + 36 )[3] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[3] )] ^
396 rijndael_dec_il_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
397 rijndael_dec_il_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
398 rijndael_dec_il_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
399 }
400 *( unsigned long * )out_blk = ( b0[0] );
401 *( unsigned long * )( out_blk + 4 ) = ( b0[1] );
402 *( unsigned long * )( out_blk + 8 ) = ( b0[2] );
403 *( unsigned long * )( out_blk + 12 ) = ( b0[3] );
404 return aes_good;
405}
406
diff --git a/baseline/source/rijndael_dec/aes.h b/baseline/source/rijndael_dec/aes.h
new file mode 100644
index 0000000..69bf3d3
--- /dev/null
+++ b/baseline/source/rijndael_dec/aes.h
@@ -0,0 +1,165 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 1. FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of
23 128 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27
28 2. THE CIPHER INTERFACE
29
30 byte (an unsigned 8-bit type)
31 word (an unsigned 32-bit type)
32 aes_ret: (a signed 16 bit type for function return values)
33 aes_good (value != 0, a good return)
34 aes_bad (value == 0, an error return)
35 enum aes_key: (encryption direction)
36 enc (set key for encryption)
37 dec (set key for decryption)
38 both (set key for both)
39 class or struct aes (structure for context)
40
41 C subroutine calls:
42
43 aes_ret set_blk(const word block_length, aes *cx) (variable block size)
44 aes_ret set_key(const byte key[], const word key_length,
45 const enum aes_key direction, aes *cx)
46 aes_ret encrypt(const byte input_blk[], byte output_blk[], const aes *cx)
47 aes_ret decrypt(const byte input_blk[], byte output_blk[], const aes *cx)
48
49 IMPORTANT NOTE: If you are using this C interface and your compiler does
50 not set the memory used for objects to zero before use, you will need to
51 ensure that cx.mode is set to zero before using the C subroutine calls.
52
53 The block length inputs to set_block and set_key are in numbers of
54 BYTES, not bits. The calls to subroutines must be made in the above
55 order but multiple calls can be made without repeating earlier calls
56 if their parameters have not changed. If the cipher block length is
57 variable but set_blk has not been called before cipher operations a
58 value of 16 is assumed (that is, the AES block size). In contrast to
59 earlier versions the block and key length parameters are now checked
60 for correctness and the encryption and decryption routines check to
61 ensure that an appropriate key has been set before they are called.
62
63*/
64
65#ifndef _AES_H
66#define _AES_H
67
68/* The only supported block size for the benchmark is 16 */
69#define BLOCK_SIZE 16
70
71/*
72 The number of key schedule words for different block and key lengths
73 (allowing for the method of computation which requires the length to
74 be a multiple of the key length):
75
76 Key Schedule key length (bytes)
77 Length 16 20 24 28 32
78 ---------------------
79 block 16 | 44 60 54 56 64
80 length 20 | 60 60 66 70 80
81 (bytes) 24 | 80 80 78 84 96
82 28 | 100 100 102 98 112
83 32 | 120 120 120 126 120
84
85 Rcon Table key length (bytes)
86 Length 16 20 24 28 32
87 ---------------------
88 block 16 | 10 9 8 7 7
89 length 20 | 14 11 10 9 9
90 (bytes) 24 | 19 15 12 11 11
91 28 | 24 19 16 13 13
92 32 | 29 23 19 17 14
93
94 The following values assume that the key length will be variable and may
95 be of maximum length (32 bytes).
96
97 Nk = number_of_key_bytes / 4
98 Nc = number_of_columns_in_state / 4
99 Nr = number of encryption/decryption rounds
100 Rc = number of elements in rcon table
101 Ks = number of 32-bit words in key schedule
102*/
103
104#define Nr(Nk,Nc) ((Nk > Nc ? Nk : Nc) + 6)
105#define Rc(Nk,Nc) ((Nb * (Nr(Nk,Nc) + 1) - 1) / Nk)
106#define Ks(Nk,Nc) (Nk * (Rc(Nk,Nc) + 1))
107
108#define RC_LENGTH 5 * BLOCK_SIZE / 4 - (BLOCK_SIZE == 16 ? 10 : 11)
109#define KS_LENGTH 4 * BLOCK_SIZE
110
111/* End of configuration options, but see also aes.c */
112
113typedef unsigned char byte; /* must be an 8-bit storage unit */
114typedef unsigned long word; /* must be a 32-bit storage unit */
115typedef short aes_ret; /* function return value */
116
117#define aes_bad 0
118#define aes_good 1
119
120/*
121 upr(x,n): rotates bytes within words by n positions, moving bytes
122 to higher index positions with wrap around into low positions
123 ups(x,n): moves bytes by n positions to higher index positions in
124 words but without wrap around
125 bval(x,n): extracts a byte from a word
126*/
127
128#define upr(x,n) (((x) << 8 * (n)) | ((x) >> (32 - 8 * (n))))
129#define ups(x,n) ((x) << 8 * (n))
130#define bval(x,n) ((byte)((x) >> 8 * (n)))
131#define byte_swap(x) (upr(x,1) & 0x00ff00ff | upr(x,3) & 0xff00ff00)
132#define bytes2word(b0, b1, b2, b3) ((word)(b3) << 24 | (word)(b2) << 16 | \
133 (word)(b1) << 8 | (b0))
134
135#define word_in(x) *(word*)(x)
136#define word_out(x,v) *(word*)(x) = (v)
137
138enum aes_const { Nrow = 4, /* the number of rows in the cipher state */
139 Mcol = 8, /* maximum number of columns in the state */
140 Ncol = BLOCK_SIZE / 4,
141 Shr0 = 0, /* the cyclic shift values for rows 0, 1, 2 & 3 */
142 Shr1 = 1,
143 Shr2 = BLOCK_SIZE == 32 ? 3 : 2,
144 Shr3 = BLOCK_SIZE == 32 ? 4 : 3
145 };
146
147enum aes_key { enc = 1, /* set if encryption is needed */
148 dec = 2, /* set if decryption is needed */
149 both = 3 /* set if both are needed */
150 };
151
152struct aes {
153 word Nkey; /* the number of words in the key input block */
154 word Nrnd; /* the number of cipher rounds */
155 word e_key[KS_LENGTH]; /* the encryption key schedule */
156 word d_key[KS_LENGTH]; /* the decryption key schedule */
157 byte mode; /* encrypt, decrypt or both */
158};
159
160aes_ret rijndael_dec_set_key( byte key[], const word n_bytes,
161 const enum aes_key f, struct aes *cx );
162aes_ret rijndael_dec_decrypt( const byte in_blk[], byte out_blk[],
163 const struct aes *cx );
164
165#endif
diff --git a/baseline/source/rijndael_dec/aestab.h b/baseline/source/rijndael_dec/aestab.h
new file mode 100644
index 0000000..c42702b
--- /dev/null
+++ b/baseline/source/rijndael_dec/aestab.h
@@ -0,0 +1,379 @@
1
2/*
3 -----------------------------------------------------------------------
4 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
5
6 TERMS
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions
10 are met:
11 1. Redistributions of source code must retain the above copyright
12 notice, this list of conditions and the following disclaimer.
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
16
17 This software is provided 'as is' with no guarantees of correctness or
18 fitness for purpose.
19 -----------------------------------------------------------------------
20*/
21
22/*
23 Used to ensure table is generated in the right format
24 depending on the internal byte order required.
25*/
26
27#define w0(p) 0x000000##p
28
29/*
30 Number of elements required in this table for different
31 block and key lengths is:
32
33 Rcon Table key length (bytes)
34 Length 16 20 24 28 32
35 ---------------------
36 block 16 | 10 9 8 7 7
37 length 20 | 14 11 10 9 9
38 (bytes) 24 | 19 15 12 11 11
39 28 | 24 19 16 13 13
40 32 | 29 23 19 17 14
41
42 this table can be a table of bytes if the key schedule
43 code is adjusted accordingly
44*/
45
46const word rijndael_dec_rcon_tab[29] = {
47 w0( 01 ), w0( 02 ), w0( 04 ), w0( 08 ),
48 w0( 10 ), w0( 20 ), w0( 40 ), w0( 80 ),
49 w0( 1b ), w0( 36 ), w0( 6c ), w0( d8 ),
50 w0( ab ), w0( 4d ), w0( 9a ), w0( 2f ),
51 w0( 5e ), w0( bc ), w0( 63 ), w0( c6 ),
52 w0( 97 ), w0( 35 ), w0( 6a ), w0( d4 ),
53 w0( b3 ), w0( 7d ), w0( fa ), w0( ef ),
54 w0( c5 )
55};
56
57#undef w0
58
59/*
60 used to ensure table is generated in the right format
61 depending on the internal byte order required
62*/
63
64#define r0(p,q,r,s) 0x##p##q##r##s
65#define r1(p,q,r,s) 0x##q##r##s##p
66#define r2(p,q,r,s) 0x##r##s##p##q
67#define r3(p,q,r,s) 0x##s##p##q##r
68#define w0(p) 0x000000##p
69#define w1(p) 0x0000##p##00
70#define w2(p) 0x00##p##0000
71#define w3(p) 0x##p##000000
72
73/*
74 used to ensure table is generated in the right format
75 depending on the internal byte order required
76*/
77
78/* data for forward tables (other than last round) */
79
80#define f_table \
81 r(a5,63,63,c6), r(84,7c,7c,f8), r(99,77,77,ee), r(8d,7b,7b,f6), \
82 r(0d,f2,f2,ff), r(bd,6b,6b,d6), r(b1,6f,6f,de), r(54,c5,c5,91), \
83 r(50,30,30,60), r(03,01,01,02), r(a9,67,67,ce), r(7d,2b,2b,56), \
84 r(19,fe,fe,e7), r(62,d7,d7,b5), r(e6,ab,ab,4d), r(9a,76,76,ec), \
85 r(45,ca,ca,8f), r(9d,82,82,1f), r(40,c9,c9,89), r(87,7d,7d,fa), \
86 r(15,fa,fa,ef), r(eb,59,59,b2), r(c9,47,47,8e), r(0b,f0,f0,fb), \
87 r(ec,ad,ad,41), r(67,d4,d4,b3), r(fd,a2,a2,5f), r(ea,af,af,45), \
88 r(bf,9c,9c,23), r(f7,a4,a4,53), r(96,72,72,e4), r(5b,c0,c0,9b), \
89 r(c2,b7,b7,75), r(1c,fd,fd,e1), r(ae,93,93,3d), r(6a,26,26,4c), \
90 r(5a,36,36,6c), r(41,3f,3f,7e), r(02,f7,f7,f5), r(4f,cc,cc,83), \
91 r(5c,34,34,68), r(f4,a5,a5,51), r(34,e5,e5,d1), r(08,f1,f1,f9), \
92 r(93,71,71,e2), r(73,d8,d8,ab), r(53,31,31,62), r(3f,15,15,2a), \
93 r(0c,04,04,08), r(52,c7,c7,95), r(65,23,23,46), r(5e,c3,c3,9d), \
94 r(28,18,18,30), r(a1,96,96,37), r(0f,05,05,0a), r(b5,9a,9a,2f), \
95 r(09,07,07,0e), r(36,12,12,24), r(9b,80,80,1b), r(3d,e2,e2,df), \
96 r(26,eb,eb,cd), r(69,27,27,4e), r(cd,b2,b2,7f), r(9f,75,75,ea), \
97 r(1b,09,09,12), r(9e,83,83,1d), r(74,2c,2c,58), r(2e,1a,1a,34), \
98 r(2d,1b,1b,36), r(b2,6e,6e,dc), r(ee,5a,5a,b4), r(fb,a0,a0,5b), \
99 r(f6,52,52,a4), r(4d,3b,3b,76), r(61,d6,d6,b7), r(ce,b3,b3,7d), \
100 r(7b,29,29,52), r(3e,e3,e3,dd), r(71,2f,2f,5e), r(97,84,84,13), \
101 r(f5,53,53,a6), r(68,d1,d1,b9), r(00,00,00,00), r(2c,ed,ed,c1), \
102 r(60,20,20,40), r(1f,fc,fc,e3), r(c8,b1,b1,79), r(ed,5b,5b,b6), \
103 r(be,6a,6a,d4), r(46,cb,cb,8d), r(d9,be,be,67), r(4b,39,39,72), \
104 r(de,4a,4a,94), r(d4,4c,4c,98), r(e8,58,58,b0), r(4a,cf,cf,85), \
105 r(6b,d0,d0,bb), r(2a,ef,ef,c5), r(e5,aa,aa,4f), r(16,fb,fb,ed), \
106 r(c5,43,43,86), r(d7,4d,4d,9a), r(55,33,33,66), r(94,85,85,11), \
107 r(cf,45,45,8a), r(10,f9,f9,e9), r(06,02,02,04), r(81,7f,7f,fe), \
108 r(f0,50,50,a0), r(44,3c,3c,78), r(ba,9f,9f,25), r(e3,a8,a8,4b), \
109 r(f3,51,51,a2), r(fe,a3,a3,5d), r(c0,40,40,80), r(8a,8f,8f,05), \
110 r(ad,92,92,3f), r(bc,9d,9d,21), r(48,38,38,70), r(04,f5,f5,f1), \
111 r(df,bc,bc,63), r(c1,b6,b6,77), r(75,da,da,af), r(63,21,21,42), \
112 r(30,10,10,20), r(1a,ff,ff,e5), r(0e,f3,f3,fd), r(6d,d2,d2,bf), \
113 r(4c,cd,cd,81), r(14,0c,0c,18), r(35,13,13,26), r(2f,ec,ec,c3), \
114 r(e1,5f,5f,be), r(a2,97,97,35), r(cc,44,44,88), r(39,17,17,2e), \
115 r(57,c4,c4,93), r(f2,a7,a7,55), r(82,7e,7e,fc), r(47,3d,3d,7a), \
116 r(ac,64,64,c8), r(e7,5d,5d,ba), r(2b,19,19,32), r(95,73,73,e6), \
117 r(a0,60,60,c0), r(98,81,81,19), r(d1,4f,4f,9e), r(7f,dc,dc,a3), \
118 r(66,22,22,44), r(7e,2a,2a,54), r(ab,90,90,3b), r(83,88,88,0b), \
119 r(ca,46,46,8c), r(29,ee,ee,c7), r(d3,b8,b8,6b), r(3c,14,14,28), \
120 r(79,de,de,a7), r(e2,5e,5e,bc), r(1d,0b,0b,16), r(76,db,db,ad), \
121 r(3b,e0,e0,db), r(56,32,32,64), r(4e,3a,3a,74), r(1e,0a,0a,14), \
122 r(db,49,49,92), r(0a,06,06,0c), r(6c,24,24,48), r(e4,5c,5c,b8), \
123 r(5d,c2,c2,9f), r(6e,d3,d3,bd), r(ef,ac,ac,43), r(a6,62,62,c4), \
124 r(a8,91,91,39), r(a4,95,95,31), r(37,e4,e4,d3), r(8b,79,79,f2), \
125 r(32,e7,e7,d5), r(43,c8,c8,8b), r(59,37,37,6e), r(b7,6d,6d,da), \
126 r(8c,8d,8d,01), r(64,d5,d5,b1), r(d2,4e,4e,9c), r(e0,a9,a9,49), \
127 r(b4,6c,6c,d8), r(fa,56,56,ac), r(07,f4,f4,f3), r(25,ea,ea,cf), \
128 r(af,65,65,ca), r(8e,7a,7a,f4), r(e9,ae,ae,47), r(18,08,08,10), \
129 r(d5,ba,ba,6f), r(88,78,78,f0), r(6f,25,25,4a), r(72,2e,2e,5c), \
130 r(24,1c,1c,38), r(f1,a6,a6,57), r(c7,b4,b4,73), r(51,c6,c6,97), \
131 r(23,e8,e8,cb), r(7c,dd,dd,a1), r(9c,74,74,e8), r(21,1f,1f,3e), \
132 r(dd,4b,4b,96), r(dc,bd,bd,61), r(86,8b,8b,0d), r(85,8a,8a,0f), \
133 r(90,70,70,e0), r(42,3e,3e,7c), r(c4,b5,b5,71), r(aa,66,66,cc), \
134 r(d8,48,48,90), r(05,03,03,06), r(01,f6,f6,f7), r(12,0e,0e,1c), \
135 r(a3,61,61,c2), r(5f,35,35,6a), r(f9,57,57,ae), r(d0,b9,b9,69), \
136 r(91,86,86,17), r(58,c1,c1,99), r(27,1d,1d,3a), r(b9,9e,9e,27), \
137 r(38,e1,e1,d9), r(13,f8,f8,eb), r(b3,98,98,2b), r(33,11,11,22), \
138 r(bb,69,69,d2), r(70,d9,d9,a9), r(89,8e,8e,07), r(a7,94,94,33), \
139 r(b6,9b,9b,2d), r(22,1e,1e,3c), r(92,87,87,15), r(20,e9,e9,c9), \
140 r(49,ce,ce,87), r(ff,55,55,aa), r(78,28,28,50), r(7a,df,df,a5), \
141 r(8f,8c,8c,03), r(f8,a1,a1,59), r(80,89,89,09), r(17,0d,0d,1a), \
142 r(da,bf,bf,65), r(31,e6,e6,d7), r(c6,42,42,84), r(b8,68,68,d0), \
143 r(c3,41,41,82), r(b0,99,99,29), r(77,2d,2d,5a), r(11,0f,0f,1e), \
144 r(cb,b0,b0,7b), r(fc,54,54,a8), r(d6,bb,bb,6d), r(3a,16,16,2c)
145
146/* data for inverse tables (other than last round) */
147
148#define i_table \
149 r(50,a7,f4,51), r(53,65,41,7e), r(c3,a4,17,1a), r(96,5e,27,3a), \
150 r(cb,6b,ab,3b), r(f1,45,9d,1f), r(ab,58,fa,ac), r(93,03,e3,4b), \
151 r(55,fa,30,20), r(f6,6d,76,ad), r(91,76,cc,88), r(25,4c,02,f5), \
152 r(fc,d7,e5,4f), r(d7,cb,2a,c5), r(80,44,35,26), r(8f,a3,62,b5), \
153 r(49,5a,b1,de), r(67,1b,ba,25), r(98,0e,ea,45), r(e1,c0,fe,5d), \
154 r(02,75,2f,c3), r(12,f0,4c,81), r(a3,97,46,8d), r(c6,f9,d3,6b), \
155 r(e7,5f,8f,03), r(95,9c,92,15), r(eb,7a,6d,bf), r(da,59,52,95), \
156 r(2d,83,be,d4), r(d3,21,74,58), r(29,69,e0,49), r(44,c8,c9,8e), \
157 r(6a,89,c2,75), r(78,79,8e,f4), r(6b,3e,58,99), r(dd,71,b9,27), \
158 r(b6,4f,e1,be), r(17,ad,88,f0), r(66,ac,20,c9), r(b4,3a,ce,7d), \
159 r(18,4a,df,63), r(82,31,1a,e5), r(60,33,51,97), r(45,7f,53,62), \
160 r(e0,77,64,b1), r(84,ae,6b,bb), r(1c,a0,81,fe), r(94,2b,08,f9), \
161 r(58,68,48,70), r(19,fd,45,8f), r(87,6c,de,94), r(b7,f8,7b,52), \
162 r(23,d3,73,ab), r(e2,02,4b,72), r(57,8f,1f,e3), r(2a,ab,55,66), \
163 r(07,28,eb,b2), r(03,c2,b5,2f), r(9a,7b,c5,86), r(a5,08,37,d3), \
164 r(f2,87,28,30), r(b2,a5,bf,23), r(ba,6a,03,02), r(5c,82,16,ed), \
165 r(2b,1c,cf,8a), r(92,b4,79,a7), r(f0,f2,07,f3), r(a1,e2,69,4e), \
166 r(cd,f4,da,65), r(d5,be,05,06), r(1f,62,34,d1), r(8a,fe,a6,c4), \
167 r(9d,53,2e,34), r(a0,55,f3,a2), r(32,e1,8a,05), r(75,eb,f6,a4), \
168 r(39,ec,83,0b), r(aa,ef,60,40), r(06,9f,71,5e), r(51,10,6e,bd), \
169 r(f9,8a,21,3e), r(3d,06,dd,96), r(ae,05,3e,dd), r(46,bd,e6,4d), \
170 r(b5,8d,54,91), r(05,5d,c4,71), r(6f,d4,06,04), r(ff,15,50,60), \
171 r(24,fb,98,19), r(97,e9,bd,d6), r(cc,43,40,89), r(77,9e,d9,67), \
172 r(bd,42,e8,b0), r(88,8b,89,07), r(38,5b,19,e7), r(db,ee,c8,79), \
173 r(47,0a,7c,a1), r(e9,0f,42,7c), r(c9,1e,84,f8), r(00,00,00,00), \
174 r(83,86,80,09), r(48,ed,2b,32), r(ac,70,11,1e), r(4e,72,5a,6c), \
175 r(fb,ff,0e,fd), r(56,38,85,0f), r(1e,d5,ae,3d), r(27,39,2d,36), \
176 r(64,d9,0f,0a), r(21,a6,5c,68), r(d1,54,5b,9b), r(3a,2e,36,24), \
177 r(b1,67,0a,0c), r(0f,e7,57,93), r(d2,96,ee,b4), r(9e,91,9b,1b), \
178 r(4f,c5,c0,80), r(a2,20,dc,61), r(69,4b,77,5a), r(16,1a,12,1c), \
179 r(0a,ba,93,e2), r(e5,2a,a0,c0), r(43,e0,22,3c), r(1d,17,1b,12), \
180 r(0b,0d,09,0e), r(ad,c7,8b,f2), r(b9,a8,b6,2d), r(c8,a9,1e,14), \
181 r(85,19,f1,57), r(4c,07,75,af), r(bb,dd,99,ee), r(fd,60,7f,a3), \
182 r(9f,26,01,f7), r(bc,f5,72,5c), r(c5,3b,66,44), r(34,7e,fb,5b), \
183 r(76,29,43,8b), r(dc,c6,23,cb), r(68,fc,ed,b6), r(63,f1,e4,b8), \
184 r(ca,dc,31,d7), r(10,85,63,42), r(40,22,97,13), r(20,11,c6,84), \
185 r(7d,24,4a,85), r(f8,3d,bb,d2), r(11,32,f9,ae), r(6d,a1,29,c7), \
186 r(4b,2f,9e,1d), r(f3,30,b2,dc), r(ec,52,86,0d), r(d0,e3,c1,77), \
187 r(6c,16,b3,2b), r(99,b9,70,a9), r(fa,48,94,11), r(22,64,e9,47), \
188 r(c4,8c,fc,a8), r(1a,3f,f0,a0), r(d8,2c,7d,56), r(ef,90,33,22), \
189 r(c7,4e,49,87), r(c1,d1,38,d9), r(fe,a2,ca,8c), r(36,0b,d4,98), \
190 r(cf,81,f5,a6), r(28,de,7a,a5), r(26,8e,b7,da), r(a4,bf,ad,3f), \
191 r(e4,9d,3a,2c), r(0d,92,78,50), r(9b,cc,5f,6a), r(62,46,7e,54), \
192 r(c2,13,8d,f6), r(e8,b8,d8,90), r(5e,f7,39,2e), r(f5,af,c3,82), \
193 r(be,80,5d,9f), r(7c,93,d0,69), r(a9,2d,d5,6f), r(b3,12,25,cf), \
194 r(3b,99,ac,c8), r(a7,7d,18,10), r(6e,63,9c,e8), r(7b,bb,3b,db), \
195 r(09,78,26,cd), r(f4,18,59,6e), r(01,b7,9a,ec), r(a8,9a,4f,83), \
196 r(65,6e,95,e6), r(7e,e6,ff,aa), r(08,cf,bc,21), r(e6,e8,15,ef), \
197 r(d9,9b,e7,ba), r(ce,36,6f,4a), r(d4,09,9f,ea), r(d6,7c,b0,29), \
198 r(af,b2,a4,31), r(31,23,3f,2a), r(30,94,a5,c6), r(c0,66,a2,35), \
199 r(37,bc,4e,74), r(a6,ca,82,fc), r(b0,d0,90,e0), r(15,d8,a7,33), \
200 r(4a,98,04,f1), r(f7,da,ec,41), r(0e,50,cd,7f), r(2f,f6,91,17), \
201 r(8d,d6,4d,76), r(4d,b0,ef,43), r(54,4d,aa,cc), r(df,04,96,e4), \
202 r(e3,b5,d1,9e), r(1b,88,6a,4c), r(b8,1f,2c,c1), r(7f,51,65,46), \
203 r(04,ea,5e,9d), r(5d,35,8c,01), r(73,74,87,fa), r(2e,41,0b,fb), \
204 r(5a,1d,67,b3), r(52,d2,db,92), r(33,56,10,e9), r(13,47,d6,6d), \
205 r(8c,61,d7,9a), r(7a,0c,a1,37), r(8e,14,f8,59), r(89,3c,13,eb), \
206 r(ee,27,a9,ce), r(35,c9,61,b7), r(ed,e5,1c,e1), r(3c,b1,47,7a), \
207 r(59,df,d2,9c), r(3f,73,f2,55), r(79,ce,14,18), r(bf,37,c7,73), \
208 r(ea,cd,f7,53), r(5b,aa,fd,5f), r(14,6f,3d,df), r(86,db,44,78), \
209 r(81,f3,af,ca), r(3e,c4,68,b9), r(2c,34,24,38), r(5f,40,a3,c2), \
210 r(72,c3,1d,16), r(0c,25,e2,bc), r(8b,49,3c,28), r(41,95,0d,ff), \
211 r(71,01,a8,39), r(de,b3,0c,08), r(9c,e4,b4,d8), r(90,c1,56,64), \
212 r(61,84,cb,7b), r(70,b6,32,d5), r(74,5c,6c,48), r(42,57,b8,d0)
213
214/* generate the required tables in the desired endian format */
215
216#undef r
217#define r r0
218const word rijndael_dec_it_tab[4][256] = {
219 { i_table },
220#undef r
221#define r r1
222 { i_table },
223#undef r
224#define r r2
225 { i_table },
226#undef r
227#define r r3
228 { i_table }
229};
230
231/* data for inverse tables (last round) */
232
233#define li_table \
234 w(52), w(09), w(6a), w(d5), w(30), w(36), w(a5), w(38), \
235 w(bf), w(40), w(a3), w(9e), w(81), w(f3), w(d7), w(fb), \
236 w(7c), w(e3), w(39), w(82), w(9b), w(2f), w(ff), w(87), \
237 w(34), w(8e), w(43), w(44), w(c4), w(de), w(e9), w(cb), \
238 w(54), w(7b), w(94), w(32), w(a6), w(c2), w(23), w(3d), \
239 w(ee), w(4c), w(95), w(0b), w(42), w(fa), w(c3), w(4e), \
240 w(08), w(2e), w(a1), w(66), w(28), w(d9), w(24), w(b2), \
241 w(76), w(5b), w(a2), w(49), w(6d), w(8b), w(d1), w(25), \
242 w(72), w(f8), w(f6), w(64), w(86), w(68), w(98), w(16), \
243 w(d4), w(a4), w(5c), w(cc), w(5d), w(65), w(b6), w(92), \
244 w(6c), w(70), w(48), w(50), w(fd), w(ed), w(b9), w(da), \
245 w(5e), w(15), w(46), w(57), w(a7), w(8d), w(9d), w(84), \
246 w(90), w(d8), w(ab), w(00), w(8c), w(bc), w(d3), w(0a), \
247 w(f7), w(e4), w(58), w(05), w(b8), w(b3), w(45), w(06), \
248 w(d0), w(2c), w(1e), w(8f), w(ca), w(3f), w(0f), w(02), \
249 w(c1), w(af), w(bd), w(03), w(01), w(13), w(8a), w(6b), \
250 w(3a), w(91), w(11), w(41), w(4f), w(67), w(dc), w(ea), \
251 w(97), w(f2), w(cf), w(ce), w(f0), w(b4), w(e6), w(73), \
252 w(96), w(ac), w(74), w(22), w(e7), w(ad), w(35), w(85), \
253 w(e2), w(f9), w(37), w(e8), w(1c), w(75), w(df), w(6e), \
254 w(47), w(f1), w(1a), w(71), w(1d), w(29), w(c5), w(89), \
255 w(6f), w(b7), w(62), w(0e), w(aa), w(18), w(be), w(1b), \
256 w(fc), w(56), w(3e), w(4b), w(c6), w(d2), w(79), w(20), \
257 w(9a), w(db), w(c0), w(fe), w(78), w(cd), w(5a), w(f4), \
258 w(1f), w(dd), w(a8), w(33), w(88), w(07), w(c7), w(31), \
259 w(b1), w(12), w(10), w(59), w(27), w(80), w(ec), w(5f), \
260 w(60), w(51), w(7f), w(a9), w(19), w(b5), w(4a), w(0d), \
261 w(2d), w(e5), w(7a), w(9f), w(93), w(c9), w(9c), w(ef), \
262 w(a0), w(e0), w(3b), w(4d), w(ae), w(2a), w(f5), w(b0), \
263 w(c8), w(eb), w(bb), w(3c), w(83), w(53), w(99), w(61), \
264 w(17), w(2b), w(04), w(7e), w(ba), w(77), w(d6), w(26), \
265 w(e1), w(69), w(14), w(63), w(55), w(21), w(0c), w(7d),
266
267/* generate the required tables in the desired endian format */
268
269#undef r
270#define r(p,q,r,s) w0(q)
271const word rijndael_dec_fl_tab[4][256] = {
272 { f_table },
273#undef r
274#define r(p,q,r,s) w1(q)
275 { f_table },
276#undef r
277#define r(p,q,r,s) w2(q)
278 { f_table },
279#undef r
280#define r(p,q,r,s) w3(q)
281 { f_table }
282};
283
284#undef w
285#define w w0
286const word rijndael_dec_il_tab[4][256] = {
287 { li_table },
288#undef w
289#define w w1
290 { li_table },
291#undef w
292#define w w2
293 { li_table },
294#undef w
295#define w w3
296 { li_table }
297};
298
299#define m_table \
300 r(00,00,00,00), r(0b,0d,09,0e), r(16,1a,12,1c), r(1d,17,1b,12), \
301 r(2c,34,24,38), r(27,39,2d,36), r(3a,2e,36,24), r(31,23,3f,2a), \
302 r(58,68,48,70), r(53,65,41,7e), r(4e,72,5a,6c), r(45,7f,53,62), \
303 r(74,5c,6c,48), r(7f,51,65,46), r(62,46,7e,54), r(69,4b,77,5a), \
304 r(b0,d0,90,e0), r(bb,dd,99,ee), r(a6,ca,82,fc), r(ad,c7,8b,f2), \
305 r(9c,e4,b4,d8), r(97,e9,bd,d6), r(8a,fe,a6,c4), r(81,f3,af,ca), \
306 r(e8,b8,d8,90), r(e3,b5,d1,9e), r(fe,a2,ca,8c), r(f5,af,c3,82), \
307 r(c4,8c,fc,a8), r(cf,81,f5,a6), r(d2,96,ee,b4), r(d9,9b,e7,ba), \
308 r(7b,bb,3b,db), r(70,b6,32,d5), r(6d,a1,29,c7), r(66,ac,20,c9), \
309 r(57,8f,1f,e3), r(5c,82,16,ed), r(41,95,0d,ff), r(4a,98,04,f1), \
310 r(23,d3,73,ab), r(28,de,7a,a5), r(35,c9,61,b7), r(3e,c4,68,b9), \
311 r(0f,e7,57,93), r(04,ea,5e,9d), r(19,fd,45,8f), r(12,f0,4c,81), \
312 r(cb,6b,ab,3b), r(c0,66,a2,35), r(dd,71,b9,27), r(d6,7c,b0,29), \
313 r(e7,5f,8f,03), r(ec,52,86,0d), r(f1,45,9d,1f), r(fa,48,94,11), \
314 r(93,03,e3,4b), r(98,0e,ea,45), r(85,19,f1,57), r(8e,14,f8,59), \
315 r(bf,37,c7,73), r(b4,3a,ce,7d), r(a9,2d,d5,6f), r(a2,20,dc,61), \
316 r(f6,6d,76,ad), r(fd,60,7f,a3), r(e0,77,64,b1), r(eb,7a,6d,bf), \
317 r(da,59,52,95), r(d1,54,5b,9b), r(cc,43,40,89), r(c7,4e,49,87), \
318 r(ae,05,3e,dd), r(a5,08,37,d3), r(b8,1f,2c,c1), r(b3,12,25,cf), \
319 r(82,31,1a,e5), r(89,3c,13,eb), r(94,2b,08,f9), r(9f,26,01,f7), \
320 r(46,bd,e6,4d), r(4d,b0,ef,43), r(50,a7,f4,51), r(5b,aa,fd,5f), \
321 r(6a,89,c2,75), r(61,84,cb,7b), r(7c,93,d0,69), r(77,9e,d9,67), \
322 r(1e,d5,ae,3d), r(15,d8,a7,33), r(08,cf,bc,21), r(03,c2,b5,2f), \
323 r(32,e1,8a,05), r(39,ec,83,0b), r(24,fb,98,19), r(2f,f6,91,17), \
324 r(8d,d6,4d,76), r(86,db,44,78), r(9b,cc,5f,6a), r(90,c1,56,64), \
325 r(a1,e2,69,4e), r(aa,ef,60,40), r(b7,f8,7b,52), r(bc,f5,72,5c), \
326 r(d5,be,05,06), r(de,b3,0c,08), r(c3,a4,17,1a), r(c8,a9,1e,14), \
327 r(f9,8a,21,3e), r(f2,87,28,30), r(ef,90,33,22), r(e4,9d,3a,2c), \
328 r(3d,06,dd,96), r(36,0b,d4,98), r(2b,1c,cf,8a), r(20,11,c6,84), \
329 r(11,32,f9,ae), r(1a,3f,f0,a0), r(07,28,eb,b2), r(0c,25,e2,bc), \
330 r(65,6e,95,e6), r(6e,63,9c,e8), r(73,74,87,fa), r(78,79,8e,f4), \
331 r(49,5a,b1,de), r(42,57,b8,d0), r(5f,40,a3,c2), r(54,4d,aa,cc), \
332 r(f7,da,ec,41), r(fc,d7,e5,4f), r(e1,c0,fe,5d), r(ea,cd,f7,53), \
333 r(db,ee,c8,79), r(d0,e3,c1,77), r(cd,f4,da,65), r(c6,f9,d3,6b), \
334 r(af,b2,a4,31), r(a4,bf,ad,3f), r(b9,a8,b6,2d), r(b2,a5,bf,23), \
335 r(83,86,80,09), r(88,8b,89,07), r(95,9c,92,15), r(9e,91,9b,1b), \
336 r(47,0a,7c,a1), r(4c,07,75,af), r(51,10,6e,bd), r(5a,1d,67,b3), \
337 r(6b,3e,58,99), r(60,33,51,97), r(7d,24,4a,85), r(76,29,43,8b), \
338 r(1f,62,34,d1), r(14,6f,3d,df), r(09,78,26,cd), r(02,75,2f,c3), \
339 r(33,56,10,e9), r(38,5b,19,e7), r(25,4c,02,f5), r(2e,41,0b,fb), \
340 r(8c,61,d7,9a), r(87,6c,de,94), r(9a,7b,c5,86), r(91,76,cc,88), \
341 r(a0,55,f3,a2), r(ab,58,fa,ac), r(b6,4f,e1,be), r(bd,42,e8,b0), \
342 r(d4,09,9f,ea), r(df,04,96,e4), r(c2,13,8d,f6), r(c9,1e,84,f8), \
343 r(f8,3d,bb,d2), r(f3,30,b2,dc), r(ee,27,a9,ce), r(e5,2a,a0,c0), \
344 r(3c,b1,47,7a), r(37,bc,4e,74), r(2a,ab,55,66), r(21,a6,5c,68), \
345 r(10,85,63,42), r(1b,88,6a,4c), r(06,9f,71,5e), r(0d,92,78,50), \
346 r(64,d9,0f,0a), r(6f,d4,06,04), r(72,c3,1d,16), r(79,ce,14,18), \
347 r(48,ed,2b,32), r(43,e0,22,3c), r(5e,f7,39,2e), r(55,fa,30,20), \
348 r(01,b7,9a,ec), r(0a,ba,93,e2), r(17,ad,88,f0), r(1c,a0,81,fe), \
349 r(2d,83,be,d4), r(26,8e,b7,da), r(3b,99,ac,c8), r(30,94,a5,c6), \
350 r(59,df,d2,9c), r(52,d2,db,92), r(4f,c5,c0,80), r(44,c8,c9,8e), \
351 r(75,eb,f6,a4), r(7e,e6,ff,aa), r(63,f1,e4,b8), r(68,fc,ed,b6), \
352 r(b1,67,0a,0c), r(ba,6a,03,02), r(a7,7d,18,10), r(ac,70,11,1e), \
353 r(9d,53,2e,34), r(96,5e,27,3a), r(8b,49,3c,28), r(80,44,35,26), \
354 r(e9,0f,42,7c), r(e2,02,4b,72), r(ff,15,50,60), r(f4,18,59,6e), \
355 r(c5,3b,66,44), r(ce,36,6f,4a), r(d3,21,74,58), r(d8,2c,7d,56), \
356 r(7a,0c,a1,37), r(71,01,a8,39), r(6c,16,b3,2b), r(67,1b,ba,25), \
357 r(56,38,85,0f), r(5d,35,8c,01), r(40,22,97,13), r(4b,2f,9e,1d), \
358 r(22,64,e9,47), r(29,69,e0,49), r(34,7e,fb,5b), r(3f,73,f2,55), \
359 r(0e,50,cd,7f), r(05,5d,c4,71), r(18,4a,df,63), r(13,47,d6,6d), \
360 r(ca,dc,31,d7), r(c1,d1,38,d9), r(dc,c6,23,cb), r(d7,cb,2a,c5), \
361 r(e6,e8,15,ef), r(ed,e5,1c,e1), r(f0,f2,07,f3), r(fb,ff,0e,fd), \
362 r(92,b4,79,a7), r(99,b9,70,a9), r(84,ae,6b,bb), r(8f,a3,62,b5), \
363 r(be,80,5d,9f), r(b5,8d,54,91), r(a8,9a,4f,83), r(a3,97,46,8d)
364
365#undef r
366#define r r0
367
368const word rijndael_dec_im_tab[4][256] = {
369 { m_table },
370#undef r
371#define r r1
372 { m_table },
373#undef r
374#define r r2
375 { m_table },
376#undef r
377#define r r3
378 { m_table }
379};
diff --git a/baseline/source/rijndael_dec/input_small_enc.c b/baseline/source/rijndael_dec/input_small_enc.c
new file mode 100644
index 0000000..2a881a9
--- /dev/null
+++ b/baseline/source/rijndael_dec/input_small_enc.c
@@ -0,0 +1,2051 @@
1unsigned char rijndael_dec_data[] = {
2 96, 83, 127, 28, 212, 92, 146, 102, 38, 17, 193, 142, 95, 217, 184, 105,
3 79, 112, 144, 112, 44, 202, 141, 48, 181, 177, 82, 92, 208, 250, 216, 152,
4 41, 208, 7, 232, 238, 116, 134, 238, 230, 190, 239, 195, 235, 80, 125, 51,
5 251, 39, 7, 100, 213, 190, 189, 81, 241, 49, 215, 254, 253, 203, 13, 164,
6 175, 244, 25, 111, 226, 225, 176, 96, 58, 165, 32, 243, 68, 205, 209, 242,
7 186, 229, 167, 155, 238, 105, 120, 173, 246, 72, 29, 96, 71, 169, 83, 154,
8 226, 129, 236, 52, 243, 159, 61, 71, 20, 119, 245, 196, 25, 203, 11, 10,
9 37, 163, 139, 180, 250, 191, 138, 99, 78, 192, 73, 186, 22, 12, 119, 151,
10 185, 155, 195, 54, 73, 207, 108, 170, 112, 237, 100, 165, 219, 223, 23, 179,
11 124, 172, 52, 22, 143, 57, 132, 60, 176, 218, 11, 86, 89, 59, 254, 84,
12 180, 76, 120, 174, 17, 214, 88, 48, 240, 12, 56, 93, 136, 156, 75, 176,
13 30, 43, 4, 107, 30, 210, 26, 183, 235, 39, 35, 205, 139, 80, 249, 182,
14 15, 91, 210, 234, 47, 67, 64, 234, 148, 108, 240, 242, 32, 11, 48, 199,
15 117, 31, 149, 30, 97, 149, 241, 50, 177, 166, 127, 31, 135, 115, 240, 77,
16 198, 88, 108, 246, 108, 148, 158, 89, 173, 233, 252, 95, 51, 42, 218, 54,
17 28, 143, 203, 164, 74, 147, 55, 108, 225, 222, 87, 161, 243, 35, 179, 130,
18 29, 70, 225, 178, 148, 152, 247, 167, 21, 245, 84, 139, 3, 228, 221, 25,
19 53, 36, 121, 29, 204, 35, 1, 46, 26, 8, 237, 102, 231, 252, 176, 88,
20 24, 110, 255, 163, 86, 64, 117, 68, 178, 73, 219, 201, 24, 155, 76, 255,
21 253, 199, 165, 95, 246, 179, 15, 47, 203, 81, 92, 231, 246, 247, 111, 58,
22 82, 222, 193, 24, 37, 164, 161, 8, 169, 172, 223, 111, 186, 72, 160, 116,
23 242, 8, 192, 178, 224, 177, 228, 42, 102, 206, 237, 52, 143, 16, 150, 143,
24 108, 3, 88, 81, 199, 49, 110, 220, 5, 89, 244, 227, 27, 226, 101, 9,
25 238, 0, 206, 228, 254, 19, 189, 240, 159, 29, 46, 2, 206, 184, 205, 228,
26 144, 241, 88, 78, 156, 23, 44, 200, 99, 146, 179, 96, 1, 143, 87, 57,
27 39, 75, 174, 32, 190, 125, 152, 183, 46, 39, 136, 88, 240, 110, 104, 70,
28 253, 29, 110, 113, 235, 123, 56, 60, 243, 238, 246, 113, 11, 18, 246, 108,
29 95, 238, 177, 43, 3, 112, 121, 161, 196, 204, 211, 171, 197, 41, 249, 71,
30 194, 153, 82, 28, 10, 28, 12, 241, 212, 90, 124, 236, 171, 54, 35, 226,
31 152, 246, 241, 74, 139, 133, 241, 76, 183, 197, 232, 250, 54, 202, 11, 10,
32 203, 30, 169, 138, 110, 252, 62, 172, 6, 241, 81, 181, 87, 177, 128, 221,
33 111, 133, 94, 251, 184, 54, 92, 242, 28, 112, 138, 116, 32, 164, 158, 59,
34 51, 30, 155, 126, 196, 117, 233, 117, 92, 74, 4, 72, 19, 237, 248, 142,
35 184, 175, 126, 203, 4, 210, 70, 40, 105, 16, 36, 42, 118, 110, 4, 180,
36 208, 52, 232, 230, 107, 154, 233, 61, 176, 170, 32, 59, 60, 47, 43, 70,
37 71, 3, 58, 24, 166, 22, 165, 154, 255, 166, 12, 81, 63, 116, 146, 12,
38 5, 6, 133, 240, 110, 253, 209, 15, 71, 179, 93, 203, 58, 138, 5, 90,
39 111, 140, 19, 186, 191, 68, 230, 121, 95, 166, 219, 107, 233, 156, 18, 145,
40 239, 150, 234, 191, 91, 233, 114, 5, 215, 85, 30, 66, 33, 152, 117, 128,
41 236, 189, 201, 203, 10, 184, 198, 249, 61, 27, 144, 102, 246, 191, 54, 129,
42 86, 8, 197, 98, 231, 234, 222, 164, 161, 40, 150, 253, 208, 82, 92, 225,
43 85, 206, 59, 1, 170, 5, 255, 219, 89, 204, 122, 169, 78, 8, 5, 70,
44 75, 128, 80, 176, 16, 214, 253, 176, 255, 191, 91, 89, 126, 155, 128, 195,
45 56, 150, 101, 131, 255, 234, 241, 250, 61, 210, 85, 19, 21, 23, 122, 180,
46 34, 100, 102, 166, 128, 21, 177, 11, 86, 110, 112, 179, 126, 36, 152, 196,
47 62, 185, 186, 20, 91, 35, 85, 148, 168, 68, 145, 245, 170, 25, 190, 237,
48 192, 125, 186, 182, 22, 188, 161, 122, 194, 21, 14, 102, 206, 60, 129, 156,
49 173, 176, 37, 112, 129, 145, 177, 101, 206, 179, 35, 221, 107, 228, 181, 212,
50 52, 253, 241, 145, 121, 128, 68, 118, 78, 66, 166, 78, 176, 62, 217, 243,
51 193, 1, 254, 200, 35, 67, 226, 77, 55, 72, 6, 144, 22, 85, 252, 209,
52 142, 65, 226, 158, 126, 168, 175, 179, 219, 116, 235, 227, 42, 49, 126, 126,
53 215, 200, 126, 0, 39, 247, 161, 217, 26, 228, 232, 113, 53, 151, 34, 223,
54 91, 242, 155, 156, 144, 229, 237, 127, 227, 49, 239, 71, 102, 115, 74, 135,
55 103, 13, 3, 108, 101, 211, 36, 59, 146, 143, 230, 44, 212, 145, 229, 53,
56 108, 175, 42, 131, 113, 123, 30, 28, 149, 153, 117, 233, 76, 33, 148, 110,
57 19, 83, 125, 135, 44, 202, 2, 155, 4, 240, 167, 7, 13, 115, 243, 216,
58 73, 248, 216, 82, 230, 153, 48, 234, 157, 2, 130, 99, 147, 2, 244, 19,
59 125, 30, 39, 148, 49, 134, 140, 240, 128, 230, 171, 24, 53, 245, 54, 72,
60 111, 230, 192, 165, 199, 47, 186, 238, 121, 95, 220, 76, 229, 253, 157, 47,
61 34, 47, 39, 77, 199, 203, 163, 148, 172, 56, 204, 96, 69, 235, 215, 96,
62 92, 139, 92, 49, 73, 228, 70, 221, 18, 84, 167, 179, 201, 239, 71, 64,
63 29, 247, 84, 56, 148, 36, 169, 144, 192, 60, 153, 171, 89, 125, 48, 98,
64 201, 56, 230, 154, 146, 46, 184, 202, 3, 39, 113, 90, 249, 163, 0, 188,
65 233, 10, 216, 17, 159, 42, 134, 57, 70, 24, 33, 63, 8, 67, 85, 7,
66 133, 180, 127, 12, 234, 121, 183, 38, 131, 154, 241, 236, 69, 67, 116, 54,
67 40, 225, 6, 220, 22, 251, 1, 100, 110, 165, 114, 12, 170, 21, 190, 103,
68 242, 171, 216, 66, 30, 3, 214, 137, 231, 172, 61, 8, 249, 198, 113, 181,
69 171, 13, 159, 21, 147, 67, 249, 94, 189, 174, 15, 2, 62, 254, 29, 32,
70 209, 169, 184, 119, 220, 98, 248, 163, 171, 22, 62, 125, 155, 100, 186, 97,
71 163, 245, 70, 216, 246, 1, 11, 83, 41, 100, 64, 52, 99, 184, 151, 99,
72 46, 100, 168, 158, 210, 150, 38, 231, 27, 255, 59, 141, 232, 127, 56, 39,
73 194, 104, 178, 151, 15, 25, 219, 221, 81, 119, 178, 153, 94, 173, 64, 215,
74 128, 132, 163, 159, 214, 254, 181, 194, 113, 144, 141, 103, 17, 108, 178, 59,
75 62, 205, 117, 57, 183, 97, 18, 210, 87, 163, 231, 213, 233, 251, 94, 136,
76 217, 168, 69, 48, 55, 68, 144, 203, 187, 51, 211, 151, 1, 194, 118, 181,
77 154, 103, 186, 87, 43, 128, 215, 79, 101, 175, 60, 221, 158, 189, 94, 194,
78 87, 73, 72, 162, 252, 26, 40, 142, 86, 228, 82, 255, 122, 192, 167, 78,
79 177, 40, 249, 195, 100, 188, 31, 208, 124, 123, 31, 121, 244, 4, 82, 3,
80 132, 15, 2, 29, 186, 76, 106, 109, 158, 114, 25, 212, 74, 64, 255, 43,
81 40, 146, 159, 225, 39, 65, 85, 37, 60, 160, 123, 116, 127, 134, 45, 177,
82 191, 49, 136, 211, 167, 218, 197, 15, 96, 45, 55, 11, 237, 103, 118, 207,
83 0, 211, 25, 143, 19, 93, 114, 90, 105, 253, 88, 140, 207, 56, 150, 0,
84 136, 159, 134, 63, 75, 142, 177, 0, 107, 105, 78, 148, 214, 248, 70, 72,
85 125, 220, 156, 220, 222, 102, 202, 176, 12, 58, 24, 39, 254, 170, 130, 77,
86 203, 193, 162, 56, 162, 57, 76, 153, 170, 112, 94, 0, 220, 58, 58, 40,
87 173, 2, 193, 164, 168, 127, 225, 238, 10, 194, 112, 213, 181, 126, 222, 152,
88 12, 57, 14, 146, 137, 154, 203, 179, 45, 133, 70, 204, 66, 249, 32, 136,
89 145, 0, 221, 224, 10, 1, 202, 139, 145, 247, 72, 254, 32, 169, 121, 167,
90 114, 198, 244, 251, 243, 8, 114, 188, 178, 173, 25, 243, 122, 220, 45, 98,
91 7, 168, 66, 58, 225, 217, 152, 81, 89, 39, 167, 146, 181, 138, 253, 196,
92 145, 4, 72, 9, 14, 137, 155, 32, 217, 64, 4, 173, 220, 66, 114, 21,
93 137, 118, 87, 163, 217, 204, 74, 236, 45, 170, 60, 141, 216, 234, 182, 79,
94 74, 73, 94, 63, 89, 134, 88, 64, 32, 241, 9, 114, 253, 164, 108, 31,
95 27, 42, 172, 7, 102, 213, 153, 83, 1, 152, 136, 224, 248, 70, 112, 15,
96 211, 194, 216, 16, 255, 62, 83, 147, 173, 192, 239, 55, 18, 223, 34, 152,
97 25, 163, 229, 4, 55, 219, 235, 187, 51, 116, 12, 202, 198, 116, 188, 217,
98 91, 30, 11, 9, 13, 222, 120, 16, 93, 99, 56, 129, 27, 133, 155, 120,
99 124, 112, 101, 42, 222, 122, 124, 59, 84, 228, 202, 189, 13, 11, 10, 44,
100 220, 97, 67, 53, 246, 47, 230, 131, 192, 1, 247, 137, 90, 77, 243, 131,
101 2, 130, 93, 183, 117, 102, 69, 191, 27, 87, 103, 218, 157, 124, 17, 209,
102 135, 92, 78, 211, 141, 25, 157, 53, 17, 249, 209, 206, 84, 19, 135, 253,
103 57, 36, 38, 112, 184, 61, 76, 5, 203, 155, 7, 9, 179, 167, 38, 136,
104 189, 40, 19, 183, 132, 81, 135, 167, 48, 74, 186, 249, 144, 193, 150, 73,
105 10, 192, 191, 160, 74, 246, 12, 38, 107, 3, 66, 122, 184, 168, 218, 233,
106 78, 216, 11, 57, 124, 104, 167, 0, 187, 2, 214, 136, 252, 60, 85, 128,
107 128, 31, 70, 197, 211, 180, 216, 75, 212, 163, 168, 15, 174, 44, 194, 231,
108 24, 181, 154, 161, 241, 95, 197, 227, 146, 195, 187, 69, 127, 154, 145, 176,
109 180, 157, 13, 225, 107, 60, 29, 14, 223, 93, 214, 248, 107, 65, 168, 251,
110 231, 46, 34, 203, 76, 20, 206, 125, 80, 25, 196, 60, 213, 51, 238, 73,
111 17, 223, 151, 44, 60, 213, 164, 117, 188, 66, 195, 170, 190, 117, 110, 21,
112 27, 78, 244, 124, 224, 142, 182, 10, 122, 135, 121, 143, 240, 124, 6, 8,
113 22, 15, 3, 137, 12, 19, 11, 62, 212, 205, 3, 202, 189, 157, 141, 68,
114 171, 142, 106, 69, 207, 8, 116, 194, 6, 200, 96, 220, 248, 132, 46, 171,
115 57, 234, 31, 3, 112, 108, 15, 139, 243, 34, 181, 250, 10, 86, 71, 162,
116 167, 85, 177, 57, 166, 80, 41, 253, 128, 28, 127, 220, 149, 27, 29, 41,
117 201, 116, 211, 236, 34, 200, 100, 157, 130, 223, 4, 162, 108, 181, 40, 255,
118 96, 18, 77, 36, 217, 17, 225, 142, 124, 17, 91, 227, 13, 224, 213, 37,
119 115, 216, 93, 149, 103, 105, 152, 190, 207, 54, 74, 226, 78, 133, 200, 252,
120 157, 152, 39, 0, 173, 168, 132, 142, 17, 66, 241, 137, 12, 106, 42, 81,
121 239, 78, 31, 131, 49, 243, 122, 178, 212, 137, 160, 104, 15, 145, 15, 116,
122 103, 141, 94, 40, 127, 180, 174, 96, 222, 182, 226, 168, 174, 113, 228, 156,
123 10, 18, 231, 122, 150, 178, 17, 200, 254, 96, 42, 243, 225, 58, 235, 64,
124 159, 73, 162, 72, 46, 160, 33, 191, 99, 73, 130, 32, 135, 84, 29, 100,
125 232, 75, 110, 180, 226, 11, 143, 127, 79, 246, 48, 148, 229, 211, 204, 72,
126 18, 89, 22, 251, 202, 8, 10, 2, 130, 230, 219, 71, 66, 142, 149, 47,
127 12, 117, 202, 224, 248, 35, 75, 242, 87, 125, 230, 66, 38, 160, 62, 248,
128 213, 32, 166, 83, 220, 230, 0, 1, 147, 51, 128, 110, 20, 16, 43, 142,
129 90, 0, 2, 104, 111, 232, 38, 29, 181, 243, 130, 121, 105, 177, 168, 113,
130 126, 191, 59, 205, 27, 180, 49, 128, 160, 225, 23, 173, 193, 155, 123, 12,
131 173, 72, 139, 63, 23, 232, 138, 235, 39, 179, 158, 95, 103, 192, 13, 242,
132 11, 127, 239, 91, 13, 119, 19, 185, 105, 87, 195, 168, 145, 15, 53, 146,
133 35, 227, 101, 234, 198, 247, 19, 29, 134, 126, 211, 133, 78, 186, 127, 129,
134 181, 115, 133, 62, 166, 133, 128, 225, 101, 98, 146, 175, 110, 113, 171, 117,
135 4, 130, 190, 186, 216, 17, 201, 29, 62, 77, 74, 189, 50, 155, 188, 93,
136 237, 26, 100, 225, 91, 120, 229, 163, 16, 210, 167, 138, 241, 147, 36, 56,
137 12, 100, 33, 55, 232, 200, 118, 3, 222, 31, 72, 167, 91, 45, 133, 62,
138 184, 64, 120, 116, 249, 12, 15, 243, 98, 145, 234, 253, 71, 194, 61, 4,
139 102, 112, 35, 27, 75, 13, 1, 4, 128, 238, 170, 187, 80, 147, 216, 165,
140 147, 248, 250, 241, 69, 106, 233, 227, 22, 153, 120, 138, 113, 83, 104, 154,
141 50, 99, 153, 188, 69, 252, 171, 177, 49, 74, 134, 219, 247, 255, 191, 202,
142 165, 239, 179, 147, 91, 215, 195, 157, 68, 21, 180, 112, 187, 51, 66, 80,
143 205, 100, 35, 78, 59, 92, 175, 87, 224, 170, 237, 223, 224, 83, 182, 199,
144 47, 95, 111, 42, 197, 22, 21, 143, 123, 173, 69, 247, 31, 205, 69, 136,
145 137, 136, 241, 233, 67, 7, 225, 112, 102, 92, 180, 211, 254, 29, 129, 29,
146 21, 188, 44, 95, 57, 122, 17, 196, 213, 33, 56, 23, 88, 236, 185, 35,
147 17, 156, 165, 93, 108, 157, 198, 5, 124, 225, 150, 156, 146, 116, 88, 116,
148 181, 207, 90, 85, 145, 228, 231, 91, 116, 79, 6, 119, 6, 207, 190, 102,
149 72, 242, 2, 253, 79, 92, 88, 189, 28, 57, 28, 101, 199, 134, 124, 215,
150 59, 37, 222, 54, 194, 151, 252, 185, 74, 101, 193, 43, 186, 184, 255, 158,
151 129, 183, 83, 176, 249, 134, 58, 15, 49, 213, 127, 162, 179, 56, 53, 4,
152 114, 112, 29, 84, 246, 109, 46, 153, 97, 30, 208, 98, 234, 155, 104, 158,
153 93, 9, 53, 175, 49, 54, 160, 238, 150, 117, 145, 202, 210, 37, 15, 3,
154 100, 20, 116, 153, 90, 23, 2, 146, 58, 182, 199, 197, 122, 89, 30, 152,
155 241, 105, 97, 115, 131, 111, 4, 235, 217, 213, 144, 218, 217, 201, 141, 113,
156 21, 237, 254, 184, 181, 135, 177, 86, 215, 248, 169, 55, 231, 229, 60, 133,
157 12, 194, 206, 112, 206, 175, 216, 131, 181, 41, 154, 235, 76, 152, 58, 118,
158 111, 32, 220, 219, 253, 198, 18, 227, 71, 129, 197, 227, 96, 155, 66, 0,
159 51, 132, 150, 208, 177, 188, 149, 100, 236, 23, 49, 45, 236, 131, 225, 206,
160 77, 77, 94, 12, 244, 159, 85, 247, 189, 109, 141, 217, 80, 115, 44, 171,
161 138, 68, 128, 147, 244, 213, 43, 187, 135, 126, 156, 158, 199, 61, 180, 112,
162 130, 230, 146, 100, 106, 56, 70, 71, 234, 3, 202, 1, 45, 20, 136, 149,
163 112, 178, 25, 110, 160, 221, 57, 191, 78, 9, 250, 233, 4, 144, 28, 219,
164 200, 203, 227, 218, 229, 108, 59, 221, 141, 0, 122, 121, 65, 156, 204, 19,
165 152, 215, 64, 164, 15, 77, 26, 113, 82, 229, 23, 103, 204, 151, 118, 104,
166 171, 115, 72, 191, 5, 159, 133, 83, 221, 228, 120, 127, 46, 233, 14, 27,
167 216, 31, 63, 179, 224, 226, 121, 29, 62, 47, 199, 67, 60, 240, 85, 175,
168 242, 113, 168, 160, 93, 147, 205, 103, 67, 110, 237, 143, 148, 65, 209, 31,
169 100, 252, 166, 254, 170, 52, 203, 222, 75, 219, 77, 217, 202, 18, 117, 253,
170 92, 29, 205, 115, 53, 255, 251, 150, 164, 72, 146, 6, 101, 161, 127, 50,
171 73, 152, 194, 180, 11, 121, 11, 229, 147, 151, 143, 226, 196, 238, 131, 141,
172 173, 153, 189, 114, 16, 82, 1, 70, 239, 22, 85, 108, 113, 21, 231, 43,
173 6, 228, 54, 94, 200, 186, 190, 143, 117, 156, 22, 30, 9, 64, 25, 8,
174 116, 27, 240, 24, 150, 146, 224, 73, 97, 95, 183, 151, 185, 178, 16, 82,
175 243, 208, 160, 186, 246, 234, 223, 35, 6, 166, 7, 105, 224, 246, 14, 208,
176 1, 70, 244, 221, 238, 235, 86, 81, 136, 40, 99, 104, 89, 22, 194, 40,
177 36, 45, 126, 138, 174, 22, 206, 228, 146, 114, 162, 4, 211, 213, 163, 224,
178 91, 3, 85, 140, 140, 202, 204, 23, 194, 108, 166, 123, 1, 36, 191, 161,
179 38, 228, 65, 249, 235, 26, 156, 83, 68, 199, 239, 109, 1, 203, 198, 25,
180 22, 128, 165, 15, 125, 139, 190, 100, 184, 159, 16, 194, 244, 228, 18, 215,
181 103, 169, 32, 208, 12, 104, 94, 71, 209, 193, 160, 161, 73, 38, 35, 49,
182 202, 29, 193, 120, 100, 98, 219, 44, 27, 224, 222, 226, 105, 153, 17, 252,
183 120, 143, 190, 173, 176, 89, 205, 149, 11, 99, 31, 107, 102, 187, 100, 107,
184 200, 1, 130, 89, 75, 71, 196, 150, 89, 231, 28, 213, 173, 229, 173, 104,
185 156, 123, 227, 163, 65, 230, 167, 67, 242, 143, 224, 224, 161, 249, 205, 140,
186 149, 156, 2, 138, 177, 193, 136, 225, 177, 34, 246, 27, 179, 108, 116, 169,
187 0, 183, 169, 12, 239, 230, 127, 169, 170, 144, 151, 36, 111, 52, 132, 2,
188 15, 237, 209, 133, 254, 241, 184, 232, 116, 11, 221, 210, 64, 96, 18, 30,
189 245, 95, 142, 84, 218, 92, 151, 20, 155, 101, 201, 153, 82, 163, 43, 168,
190 152, 90, 224, 18, 112, 161, 123, 115, 129, 136, 198, 50, 186, 239, 28, 80,
191 91, 20, 73, 6, 150, 187, 56, 54, 200, 67, 26, 62, 0, 229, 42, 210,
192 107, 245, 83, 172, 233, 195, 140, 31, 24, 205, 202, 128, 145, 242, 73, 113,
193 92, 176, 3, 146, 170, 21, 106, 67, 53, 254, 192, 212, 194, 6, 52, 81,
194 163, 236, 63, 95, 164, 91, 60, 20, 9, 201, 74, 143, 55, 110, 76, 61,
195 115, 177, 84, 105, 191, 199, 248, 51, 89, 35, 91, 44, 199, 13, 254, 130,
196 142, 136, 64, 111, 128, 229, 171, 208, 183, 242, 195, 251, 72, 168, 31, 76,
197 89, 102, 122, 181, 57, 110, 17, 196, 31, 136, 185, 196, 118, 100, 188, 100,
198 21, 239, 206, 77, 97, 238, 78, 215, 224, 113, 210, 122, 141, 190, 103, 135,
199 12, 41, 206, 157, 154, 10, 167, 133, 183, 60, 230, 235, 109, 33, 95, 121,
200 34, 206, 1, 149, 114, 4, 252, 42, 17, 93, 191, 144, 133, 226, 101, 215,
201 124, 88, 163, 27, 29, 189, 35, 51, 182, 112, 242, 94, 56, 196, 99, 242,
202 77, 95, 123, 219, 81, 71, 229, 138, 101, 8, 77, 79, 2, 166, 195, 239,
203 148, 221, 188, 20, 170, 26, 215, 139, 42, 171, 153, 219, 107, 191, 90, 185,
204 241, 37, 84, 41, 232, 27, 123, 36, 86, 113, 255, 25, 245, 187, 21, 110,
205 13, 17, 43, 99, 91, 182, 243, 239, 194, 150, 187, 111, 30, 83, 28, 111,
206 249, 159, 212, 187, 184, 177, 12, 234, 107, 211, 32, 118, 132, 10, 145, 19,
207 150, 206, 230, 158, 80, 101, 41, 67, 38, 79, 57, 164, 80, 147, 64, 207,
208 231, 229, 162, 5, 185, 40, 164, 17, 84, 156, 1, 52, 181, 67, 63, 182,
209 25, 68, 55, 167, 230, 125, 225, 234, 125, 79, 102, 35, 54, 2, 12, 145,
210 67, 6, 252, 218, 231, 14, 58, 221, 248, 171, 23, 93, 14, 51, 76, 155,
211 97, 239, 11, 95, 245, 154, 209, 127, 208, 19, 209, 158, 67, 164, 1, 123,
212 230, 90, 236, 148, 77, 210, 240, 27, 154, 16, 146, 19, 107, 106, 141, 94,
213 144, 28, 24, 130, 111, 164, 46, 108, 89, 171, 52, 192, 121, 188, 166, 207,
214 164, 98, 57, 189, 54, 190, 18, 4, 120, 181, 18, 216, 162, 19, 111, 254,
215 71, 171, 194, 79, 73, 122, 9, 115, 63, 61, 88, 117, 234, 203, 250, 167,
216 102, 98, 101, 177, 5, 13, 228, 205, 115, 107, 219, 215, 33, 150, 13, 242,
217 180, 71, 27, 0, 250, 228, 50, 129, 215, 93, 174, 169, 167, 125, 14, 89,
218 130, 195, 127, 158, 250, 249, 142, 213, 5, 1, 250, 31, 122, 171, 62, 142,
219 38, 84, 165, 95, 237, 144, 145, 189, 193, 248, 121, 112, 22, 11, 26, 192,
220 90, 76, 117, 89, 160, 228, 152, 24, 129, 235, 37, 24, 66, 68, 161, 126,
221 147, 44, 172, 137, 134, 203, 162, 152, 255, 161, 135, 6, 31, 72, 69, 9,
222 228, 3, 80, 28, 50, 240, 176, 66, 255, 231, 21, 233, 149, 55, 211, 15,
223 182, 116, 165, 211, 190, 28, 69, 40, 3, 164, 172, 212, 150, 181, 213, 32,
224 174, 216, 8, 243, 29, 152, 124, 7, 111, 140, 53, 157, 158, 233, 175, 60,
225 191, 179, 131, 248, 252, 50, 171, 165, 5, 51, 69, 215, 168, 222, 57, 221,
226 164, 56, 193, 114, 18, 89, 219, 222, 198, 163, 200, 233, 28, 51, 190, 25,
227 206, 243, 63, 51, 44, 10, 57, 71, 252, 230, 161, 141, 79, 31, 30, 150,
228 101, 168, 23, 70, 216, 216, 160, 241, 192, 106, 92, 194, 141, 81, 100, 222,
229 165, 180, 27, 70, 201, 219, 31, 177, 189, 114, 30, 74, 6, 184, 114, 208,
230 189, 246, 83, 107, 229, 153, 69, 66, 201, 253, 183, 5, 134, 156, 200, 132,
231 187, 73, 175, 213, 178, 14, 66, 101, 13, 224, 49, 205, 244, 124, 231, 18,
232 71, 94, 246, 29, 78, 201, 138, 60, 97, 54, 156, 123, 144, 143, 6, 191,
233 113, 140, 251, 203, 125, 196, 135, 169, 197, 34, 215, 77, 138, 218, 63, 56,
234 145, 74, 225, 15, 227, 112, 113, 160, 165, 122, 85, 179, 97, 146, 5, 221,
235 133, 236, 170, 2, 236, 128, 19, 252, 238, 120, 0, 192, 55, 5, 138, 161,
236 222, 148, 189, 130, 53, 250, 36, 153, 248, 210, 197, 167, 236, 128, 191, 37,
237 251, 151, 163, 190, 155, 38, 27, 164, 166, 238, 185, 11, 214, 212, 122, 206,
238 212, 255, 103, 255, 69, 146, 54, 182, 52, 54, 169, 121, 244, 205, 244, 168,
239 96, 163, 220, 75, 194, 10, 133, 204, 105, 10, 228, 139, 62, 39, 254, 131,
240 5, 243, 54, 14, 158, 107, 118, 143, 81, 55, 251, 151, 226, 29, 54, 218,
241 99, 187, 76, 178, 61, 206, 20, 170, 229, 190, 77, 215, 47, 104, 244, 87,
242 101, 82, 50, 41, 255, 56, 6, 226, 22, 153, 19, 72, 227, 63, 224, 79,
243 3, 130, 220, 135, 116, 39, 25, 98, 107, 50, 214, 183, 120, 215, 26, 160,
244 247, 26, 190, 119, 146, 181, 147, 36, 15, 75, 109, 71, 72, 44, 14, 9,
245 61, 201, 200, 222, 53, 246, 57, 69, 63, 108, 133, 140, 150, 33, 233, 46,
246 84, 102, 150, 204, 129, 195, 97, 4, 69, 176, 166, 182, 10, 237, 141, 33,
247 70, 200, 98, 101, 157, 9, 70, 227, 108, 195, 241, 72, 105, 86, 67, 5,
248 242, 199, 149, 33, 43, 105, 206, 122, 20, 13, 28, 158, 131, 47, 202, 70,
249 9, 92, 32, 10, 251, 103, 49, 185, 35, 242, 168, 151, 234, 237, 212, 91,
250 81, 113, 133, 247, 204, 23, 4, 9, 226, 14, 29, 117, 236, 101, 250, 46,
251 161, 149, 131, 98, 141, 228, 72, 18, 164, 252, 56, 7, 160, 217, 183, 125,
252 121, 154, 169, 152, 211, 114, 24, 190, 141, 135, 41, 173, 250, 50, 54, 197,
253 65, 67, 117, 246, 235, 130, 142, 138, 62, 216, 51, 193, 247, 30, 164, 235,
254 209, 157, 138, 4, 147, 6, 253, 187, 34, 124, 1, 143, 60, 95, 168, 72,
255 167, 72, 72, 13, 142, 35, 185, 107, 29, 51, 189, 48, 141, 194, 33, 77,
256 118, 17, 80, 88, 204, 147, 148, 143, 103, 246, 97, 180, 153, 160, 112, 81,
257 196, 2, 222, 148, 126, 240, 27, 61, 128, 155, 184, 106, 89, 36, 136, 230,
258 128, 84, 217, 130, 139, 104, 115, 225, 73, 77, 7, 49, 183, 4, 250, 124,
259 196, 34, 183, 209, 17, 136, 92, 16, 94, 51, 78, 174, 185, 117, 243, 69,
260 11, 214, 132, 72, 86, 212, 4, 193, 253, 125, 45, 148, 97, 87, 6, 101,
261 195, 169, 86, 115, 218, 254, 40, 59, 255, 137, 135, 183, 253, 117, 170, 29,
262 191, 138, 247, 117, 125, 234, 30, 40, 92, 8, 180, 240, 136, 142, 111, 239,
263 66, 225, 196, 151, 93, 130, 126, 255, 195, 34, 252, 17, 101, 179, 120, 76,
264 4, 227, 13, 12, 66, 205, 235, 177, 29, 187, 25, 114, 68, 119, 114, 158,
265 213, 149, 210, 5, 104, 71, 181, 126, 211, 32, 99, 60, 51, 75, 85, 138,
266 138, 68, 115, 81, 37, 17, 101, 36, 117, 236, 182, 77, 98, 113, 198, 195,
267 73, 79, 215, 116, 248, 45, 244, 60, 205, 35, 95, 228, 38, 180, 250, 246,
268 63, 211, 44, 197, 162, 24, 195, 61, 136, 142, 91, 141, 62, 34, 139, 60,
269 142, 238, 67, 148, 54, 132, 41, 115, 241, 219, 192, 121, 9, 45, 75, 183,
270 223, 213, 165, 161, 219, 181, 161, 27, 36, 158, 163, 12, 12, 141, 83, 105,
271 157, 118, 168, 244, 204, 32, 52, 131, 88, 246, 230, 121, 21, 58, 91, 217,
272 138, 27, 251, 174, 150, 51, 240, 201, 30, 66, 19, 148, 185, 122, 53, 15,
273 176, 144, 148, 3, 238, 59, 211, 155, 77, 83, 81, 245, 186, 169, 217, 201,
274 103, 109, 137, 119, 146, 100, 18, 200, 185, 212, 202, 17, 88, 146, 234, 49,
275 190, 19, 139, 43, 1, 48, 21, 64, 235, 89, 191, 74, 89, 85, 16, 64,
276 203, 99, 152, 255, 61, 159, 36, 5, 199, 49, 94, 229, 163, 192, 41, 165,
277 20, 203, 176, 149, 18, 152, 61, 216, 188, 203, 180, 103, 202, 176, 177, 210,
278 255, 26, 254, 70, 43, 214, 95, 208, 73, 148, 124, 19, 215, 68, 123, 10,
279 179, 88, 167, 224, 23, 246, 150, 201, 51, 157, 139, 187, 103, 187, 198, 189,
280 204, 126, 74, 124, 23, 150, 108, 116, 196, 130, 92, 0, 211, 151, 19, 58,
281 249, 50, 186, 54, 102, 164, 122, 228, 71, 163, 163, 117, 78, 234, 197, 70,
282 96, 79, 4, 88, 242, 219, 120, 28, 178, 165, 136, 178, 129, 125, 79, 140,
283 65, 62, 78, 237, 104, 11, 45, 191, 163, 145, 174, 23, 34, 240, 43, 137,
284 102, 189, 140, 137, 4, 222, 55, 6, 84, 194, 51, 164, 107, 234, 39, 216,
285 15, 12, 44, 86, 170, 121, 46, 4, 220, 200, 42, 53, 11, 228, 110, 187,
286 116, 182, 242, 42, 93, 109, 47, 109, 180, 155, 31, 99, 60, 107, 114, 82,
287 196, 146, 45, 224, 90, 205, 34, 200, 42, 173, 113, 37, 26, 154, 74, 18,
288 165, 45, 22, 141, 1, 244, 64, 159, 164, 162, 100, 6, 67, 145, 199, 205,
289 254, 149, 56, 138, 15, 172, 205, 203, 191, 253, 126, 238, 167, 210, 103, 33,
290 143, 85, 161, 150, 99, 12, 207, 238, 110, 157, 190, 52, 249, 121, 139, 188,
291 0, 74, 92, 106, 101, 254, 190, 251, 213, 167, 78, 36, 224, 24, 6, 195,
292 128, 24, 21, 35, 66, 223, 204, 84, 177, 109, 226, 215, 79, 19, 236, 73,
293 74, 244, 146, 57, 228, 254, 223, 158, 42, 83, 29, 181, 14, 147, 60, 4,
294 147, 107, 95, 220, 180, 130, 140, 28, 118, 179, 39, 179, 250, 184, 27, 209,
295 199, 151, 154, 121, 105, 81, 215, 143, 46, 91, 217, 94, 230, 250, 165, 21,
296 240, 234, 93, 0, 176, 20, 127, 181, 36, 127, 49, 36, 79, 233, 229, 57,
297 241, 56, 119, 151, 222, 239, 203, 217, 74, 164, 88, 47, 25, 43, 58, 136,
298 61, 233, 70, 133, 181, 122, 250, 169, 249, 38, 36, 40, 182, 201, 40, 64,
299 218, 145, 63, 209, 126, 248, 65, 23, 142, 147, 3, 241, 200, 87, 132, 93,
300 31, 22, 90, 86, 244, 47, 235, 53, 187, 96, 165, 221, 185, 118, 134, 129,
301 94, 64, 188, 132, 216, 198, 131, 74, 193, 32, 41, 194, 69, 201, 64, 31,
302 6, 235, 95, 181, 207, 187, 60, 250, 24, 233, 127, 4, 5, 190, 242, 168,
303 239, 185, 172, 78, 136, 121, 180, 191, 84, 54, 252, 83, 202, 111, 32, 100,
304 213, 7, 178, 225, 71, 68, 244, 36, 141, 242, 199, 185, 71, 55, 244, 166,
305 113, 41, 66, 177, 55, 251, 179, 251, 194, 2, 54, 20, 100, 241, 82, 213,
306 236, 45, 196, 119, 134, 167, 163, 134, 61, 218, 207, 200, 118, 143, 249, 165,
307 105, 78, 208, 213, 206, 72, 76, 123, 47, 31, 9, 234, 18, 125, 95, 170,
308 199, 123, 139, 158, 244, 171, 6, 202, 240, 214, 94, 46, 60, 109, 185, 175,
309 204, 176, 229, 110, 139, 249, 234, 3, 202, 231, 25, 195, 150, 136, 186, 246,
310 72, 242, 133, 249, 229, 58, 112, 28, 228, 121, 85, 115, 90, 95, 32, 141,
311 135, 217, 12, 187, 50, 229, 66, 103, 204, 0, 93, 86, 245, 59, 173, 28,
312 71, 131, 135, 118, 125, 113, 12, 13, 202, 242, 205, 255, 152, 243, 160, 243,
313 148, 10, 28, 106, 56, 17, 93, 234, 204, 102, 53, 22, 48, 188, 15, 255,
314 14, 3, 117, 190, 211, 116, 55, 77, 205, 171, 228, 120, 244, 1, 169, 51,
315 241, 150, 206, 99, 20, 68, 119, 137, 180, 44, 113, 85, 242, 143, 148, 97,
316 149, 75, 20, 228, 89, 226, 122, 102, 13, 195, 58, 111, 178, 82, 226, 144,
317 82, 237, 27, 94, 244, 29, 102, 32, 162, 80, 228, 66, 203, 107, 211, 171,
318 4, 56, 62, 184, 63, 137, 5, 179, 231, 185, 172, 102, 190, 42, 80, 164,
319 123, 68, 20, 36, 135, 97, 102, 156, 133, 165, 202, 240, 84, 168, 30, 95,
320 57, 3, 182, 224, 10, 84, 60, 88, 191, 0, 126, 190, 240, 202, 141, 89,
321 238, 212, 101, 213, 129, 15, 245, 94, 24, 49, 72, 59, 237, 121, 241, 199,
322 28, 106, 113, 237, 82, 144, 150, 112, 79, 90, 255, 166, 230, 71, 132, 24,
323 6, 82, 143, 150, 194, 236, 253, 46, 158, 143, 5, 31, 243, 156, 4, 19,
324 89, 81, 94, 94, 39, 9, 199, 6, 44, 35, 4, 143, 18, 62, 27, 165,
325 177, 162, 53, 121, 146, 74, 181, 252, 27, 207, 17, 102, 196, 172, 75, 4,
326 17, 215, 20, 96, 9, 42, 199, 99, 206, 94, 78, 121, 37, 11, 152, 125,
327 249, 107, 153, 180, 85, 155, 220, 68, 223, 87, 204, 175, 117, 147, 217, 71,
328 6, 190, 132, 99, 227, 5, 180, 168, 249, 126, 202, 102, 42, 26, 175, 198,
329 185, 211, 206, 154, 60, 24, 183, 24, 203, 46, 21, 176, 194, 116, 116, 210,
330 162, 214, 215, 79, 87, 159, 16, 55, 12, 248, 51, 17, 79, 183, 145, 23,
331 209, 58, 225, 84, 21, 237, 102, 250, 93, 222, 87, 87, 203, 4, 138, 196,
332 6, 28, 143, 45, 68, 77, 211, 180, 47, 198, 5, 170, 166, 221, 107, 202,
333 67, 220, 178, 156, 39, 2, 87, 147, 234, 85, 199, 97, 10, 151, 240, 121,
334 229, 132, 230, 249, 244, 57, 77, 29, 123, 149, 121, 81, 245, 37, 106, 157,
335 39, 185, 31, 175, 102, 187, 37, 149, 27, 215, 151, 155, 94, 160, 180, 59,
336 95, 200, 149, 42, 178, 85, 171, 41, 31, 20, 16, 199, 14, 202, 230, 42,
337 59, 83, 239, 155, 65, 63, 237, 89, 133, 62, 23, 112, 236, 226, 34, 250,
338 134, 14, 234, 2, 212, 41, 135, 189, 114, 60, 147, 49, 19, 193, 169, 157,
339 41, 62, 36, 42, 2, 172, 237, 250, 86, 252, 199, 80, 194, 195, 182, 136,
340 209, 90, 80, 9, 121, 164, 168, 99, 235, 131, 129, 59, 26, 41, 124, 194,
341 110, 143, 183, 126, 91, 50, 168, 211, 43, 177, 95, 196, 94, 206, 214, 173,
342 89, 152, 173, 39, 53, 190, 186, 193, 75, 23, 181, 65, 153, 57, 142, 215,
343 155, 147, 241, 110, 230, 102, 176, 152, 227, 83, 87, 110, 243, 143, 254, 127,
344 254, 117, 117, 173, 106, 80, 127, 231, 39, 220, 178, 44, 95, 30, 60, 222,
345 212, 72, 169, 84, 194, 40, 164, 156, 145, 182, 127, 51, 64, 108, 144, 124,
346 136, 238, 4, 113, 14, 68, 106, 158, 20, 231, 109, 99, 70, 214, 68, 29,
347 240, 154, 95, 206, 188, 136, 180, 41, 220, 228, 198, 82, 51, 118, 65, 20,
348 198, 187, 22, 8, 134, 252, 86, 227, 110, 105, 198, 242, 48, 8, 192, 165,
349 80, 210, 1, 175, 188, 99, 252, 178, 7, 70, 27, 249, 175, 145, 131, 228,
350 86, 229, 81, 93, 203, 194, 226, 110, 250, 134, 235, 195, 170, 107, 131, 185,
351 81, 99, 168, 124, 215, 108, 40, 198, 193, 117, 88, 136, 134, 114, 145, 239,
352 9, 0, 184, 106, 111, 63, 6, 92, 30, 3, 116, 7, 232, 182, 184, 60,
353 32, 161, 183, 167, 163, 185, 114, 43, 77, 134, 29, 164, 135, 3, 155, 255,
354 83, 254, 203, 1, 243, 167, 236, 162, 77, 140, 250, 224, 25, 246, 81, 147,
355 207, 0, 127, 115, 127, 151, 191, 179, 128, 77, 142, 203, 171, 153, 47, 244,
356 165, 235, 20, 64, 36, 99, 201, 190, 83, 244, 125, 112, 49, 26, 95, 125,
357 254, 140, 85, 142, 112, 170, 225, 4, 126, 243, 224, 180, 137, 152, 102, 9,
358 92, 67, 247, 20, 189, 58, 88, 74, 183, 201, 43, 1, 2, 123, 228, 211,
359 79, 91, 20, 64, 111, 238, 60, 76, 207, 91, 90, 130, 169, 238, 254, 208,
360 125, 140, 7, 94, 63, 18, 46, 124, 16, 253, 228, 238, 179, 99, 129, 40,
361 89, 12, 40, 42, 94, 237, 111, 112, 22, 162, 64, 25, 89, 102, 56, 25,
362 245, 128, 221, 86, 146, 138, 242, 67, 166, 114, 204, 38, 89, 77, 127, 64,
363 36, 183, 161, 254, 185, 76, 91, 10, 28, 146, 154, 254, 118, 200, 206, 95,
364 6, 182, 35, 178, 179, 114, 87, 60, 208, 88, 180, 161, 171, 39, 156, 131,
365 2, 83, 124, 11, 223, 57, 190, 18, 79, 245, 198, 11, 55, 131, 197, 28,
366 74, 32, 223, 144, 231, 227, 25, 237, 243, 145, 64, 183, 62, 163, 33, 93,
367 155, 82, 228, 206, 69, 77, 101, 8, 240, 3, 135, 0, 181, 153, 174, 82,
368 29, 129, 40, 83, 235, 83, 98, 105, 235, 210, 121, 239, 78, 240, 217, 144,
369 230, 225, 3, 157, 14, 118, 64, 228, 29, 110, 230, 247, 153, 117, 3, 81,
370 24, 23, 169, 2, 247, 238, 144, 137, 241, 140, 192, 185, 165, 13, 122, 48,
371 180, 254, 54, 128, 134, 247, 87, 42, 219, 166, 7, 248, 91, 39, 226, 245,
372 44, 152, 30, 71, 125, 129, 102, 72, 16, 66, 119, 15, 189, 250, 70, 112,
373 168, 7, 5, 181, 15, 114, 73, 112, 16, 184, 65, 192, 54, 51, 31, 202,
374 38, 11, 170, 149, 37, 107, 44, 241, 30, 35, 23, 176, 99, 82, 230, 60,
375 206, 39, 249, 227, 114, 152, 133, 233, 60, 188, 79, 52, 241, 191, 208, 160,
376 213, 159, 219, 188, 222, 47, 235, 187, 9, 186, 112, 78, 101, 229, 115, 152,
377 216, 196, 88, 228, 189, 226, 214, 40, 163, 155, 193, 238, 224, 72, 64, 199,
378 4, 182, 248, 143, 219, 170, 227, 55, 215, 135, 92, 117, 56, 225, 220, 129,
379 74, 226, 55, 132, 73, 213, 81, 93, 107, 49, 29, 155, 62, 141, 48, 190,
380 242, 221, 95, 61, 179, 165, 213, 49, 125, 245, 106, 35, 24, 57, 103, 140,
381 79, 172, 38, 29, 170, 145, 151, 204, 114, 161, 117, 2, 199, 145, 210, 184,
382 71, 80, 251, 182, 67, 220, 3, 2, 210, 28, 17, 104, 68, 150, 255, 174,
383 34, 206, 245, 97, 173, 8, 92, 160, 144, 149, 54, 57, 114, 145, 215, 115,
384 186, 145, 165, 186, 207, 107, 14, 255, 88, 145, 225, 110, 190, 78, 93, 147,
385 225, 247, 122, 52, 135, 147, 89, 3, 10, 119, 43, 154, 29, 186, 68, 50,
386 125, 152, 205, 242, 113, 106, 80, 68, 21, 45, 147, 212, 5, 1, 27, 39,
387 51, 221, 25, 38, 102, 67, 194, 250, 121, 51, 66, 76, 155, 205, 199, 54,
388 177, 202, 0, 249, 225, 231, 179, 69, 52, 22, 87, 77, 193, 35, 88, 3,
389 238, 62, 12, 159, 221, 203, 230, 122, 92, 71, 26, 218, 41, 218, 75, 21,
390 201, 166, 224, 173, 110, 185, 97, 161, 227, 9, 43, 108, 162, 62, 228, 201,
391 32, 178, 191, 115, 35, 118, 59, 165, 223, 135, 132, 230, 110, 213, 96, 68,
392 190, 237, 213, 146, 85, 179, 242, 155, 122, 217, 7, 105, 70, 123, 10, 5,
393 122, 153, 202, 218, 195, 207, 73, 175, 161, 31, 200, 47, 237, 64, 34, 227,
394 34, 66, 58, 29, 28, 166, 242, 128, 33, 79, 32, 125, 60, 207, 222, 195,
395 180, 137, 78, 177, 132, 249, 147, 38, 64, 247, 181, 81, 96, 155, 167, 113,
396 95, 197, 30, 83, 18, 128, 93, 131, 242, 197, 50, 146, 106, 143, 56, 216,
397 80, 80, 159, 164, 154, 220, 248, 193, 58, 253, 63, 219, 91, 140, 170, 71,
398 152, 8, 69, 37, 138, 179, 223, 54, 98, 229, 181, 107, 50, 174, 6, 20,
399 69, 101, 50, 57, 102, 61, 123, 218, 226, 77, 25, 129, 188, 103, 22, 81,
400 66, 232, 19, 88, 103, 184, 87, 252, 109, 31, 242, 40, 37, 238, 237, 20,
401 232, 170, 115, 36, 83, 127, 65, 208, 85, 56, 192, 120, 116, 153, 200, 116,
402 108, 243, 110, 8, 9, 162, 206, 172, 25, 0, 103, 79, 239, 8, 184, 142,
403 87, 86, 95, 139, 223, 180, 6, 205, 39, 76, 25, 62, 32, 244, 171, 152,
404 146, 48, 224, 20, 23, 219, 250, 115, 159, 131, 14, 91, 5, 27, 26, 60,
405 239, 5, 41, 159, 226, 103, 177, 43, 224, 51, 123, 129, 148, 18, 241, 66,
406 192, 199, 151, 94, 207, 238, 120, 34, 234, 75, 193, 65, 66, 243, 125, 21,
407 57, 113, 143, 44, 49, 153, 168, 129, 102, 21, 17, 101, 182, 217, 216, 17,
408 7, 70, 99, 194, 34, 47, 49, 241, 25, 242, 163, 251, 28, 172, 167, 4,
409 96, 213, 236, 60, 223, 52, 150, 216, 168, 157, 5, 56, 126, 50, 228, 130,
410 166, 54, 196, 85, 86, 162, 154, 82, 84, 34, 228, 235, 157, 230, 47, 77,
411 151, 127, 226, 82, 145, 205, 201, 40, 49, 178, 228, 77, 132, 208, 93, 4,
412 2, 73, 46, 69, 188, 60, 130, 217, 1, 97, 177, 240, 18, 26, 141, 97,
413 5, 170, 82, 56, 218, 83, 3, 29, 228, 13, 179, 232, 154, 50, 152, 40,
414 58, 0, 202, 195, 36, 91, 104, 37, 10, 89, 0, 250, 146, 45, 248, 68,
415 37, 180, 129, 46, 138, 43, 98, 40, 122, 174, 147, 85, 94, 255, 76, 129,
416 245, 135, 198, 206, 144, 189, 190, 207, 253, 191, 104, 163, 141, 116, 1, 192,
417 200, 193, 205, 196, 151, 231, 254, 190, 17, 172, 254, 196, 243, 72, 234, 236,
418 92, 108, 153, 184, 39, 201, 109, 233, 38, 178, 163, 46, 150, 153, 170, 238,
419 84, 196, 155, 171, 31, 3, 186, 55, 87, 100, 179, 61, 163, 119, 82, 75,
420 107, 173, 8, 145, 135, 226, 243, 8, 38, 102, 123, 120, 169, 215, 177, 132,
421 111, 26, 242, 205, 150, 143, 197, 152, 137, 193, 174, 171, 234, 183, 221, 189,
422 40, 212, 191, 137, 47, 153, 85, 76, 59, 255, 16, 51, 186, 105, 224, 14,
423 73, 41, 84, 42, 12, 186, 198, 133, 82, 8, 161, 173, 130, 25, 26, 22,
424 152, 132, 221, 182, 68, 126, 160, 248, 183, 112, 129, 83, 181, 55, 17, 145,
425 18, 220, 143, 17, 49, 18, 15, 191, 104, 40, 67, 139, 127, 106, 56, 65,
426 4, 120, 100, 5, 88, 44, 82, 240, 138, 64, 42, 158, 24, 130, 133, 237,
427 235, 112, 115, 164, 249, 247, 233, 173, 116, 245, 23, 37, 216, 180, 118, 183,
428 58, 246, 254, 103, 93, 55, 36, 213, 76, 134, 122, 116, 164, 15, 11, 115,
429 168, 185, 226, 79, 250, 236, 172, 24, 226, 48, 150, 67, 128, 63, 211, 235,
430 219, 120, 216, 18, 31, 82, 136, 105, 151, 118, 193, 43, 33, 155, 55, 8,
431 17, 3, 211, 110, 115, 27, 122, 3, 195, 97, 1, 227, 22, 124, 213, 59,
432 89, 13, 253, 221, 207, 229, 25, 72, 200, 144, 209, 147, 185, 68, 132, 104,
433 7, 34, 237, 45, 2, 17, 209, 87, 170, 227, 60, 230, 53, 186, 59, 39,
434 254, 57, 191, 201, 59, 202, 119, 144, 163, 255, 78, 199, 9, 59, 129, 64,
435 232, 31, 20, 110, 63, 172, 85, 239, 97, 216, 252, 158, 76, 64, 55, 133,
436 43, 101, 22, 4, 27, 134, 210, 9, 120, 44, 255, 105, 142, 83, 6, 238,
437 61, 226, 118, 111, 217, 234, 153, 48, 9, 193, 133, 172, 20, 121, 210, 40,
438 243, 49, 13, 184, 152, 126, 248, 100, 37, 187, 216, 15, 250, 86, 178, 24,
439 30, 174, 216, 151, 139, 27, 166, 190, 200, 228, 25, 152, 212, 70, 7, 45,
440 141, 54, 143, 106, 206, 49, 170, 195, 61, 24, 81, 20, 116, 147, 95, 49,
441 245, 179, 223, 237, 184, 110, 49, 158, 190, 211, 132, 30, 22, 195, 234, 167,
442 143, 4, 26, 9, 215, 48, 100, 53, 221, 177, 172, 132, 184, 229, 165, 207,
443 213, 192, 26, 58, 211, 227, 65, 148, 198, 5, 248, 169, 32, 121, 24, 164,
444 193, 137, 218, 218, 105, 42, 136, 146, 91, 72, 238, 231, 24, 17, 108, 194,
445 206, 5, 180, 101, 199, 161, 172, 130, 78, 110, 255, 62, 158, 111, 204, 223,
446 33, 183, 43, 10, 93, 253, 249, 193, 149, 89, 21, 51, 198, 186, 91, 142,
447 121, 157, 35, 254, 21, 55, 2, 7, 119, 32, 175, 107, 199, 86, 174, 37,
448 144, 192, 13, 234, 244, 152, 150, 77, 69, 91, 174, 141, 211, 71, 85, 190,
449 231, 124, 80, 80, 137, 195, 5, 196, 21, 239, 110, 92, 99, 158, 247, 229,
450 178, 99, 156, 222, 135, 119, 197, 242, 98, 58, 0, 134, 97, 197, 30, 113,
451 164, 183, 9, 1, 97, 166, 94, 117, 183, 103, 45, 147, 215, 137, 8, 64,
452 9, 149, 66, 130, 166, 94, 72, 48, 181, 156, 233, 167, 116, 59, 10, 117,
453 203, 53, 110, 133, 3, 97, 84, 60, 179, 90, 47, 45, 78, 41, 89, 191,
454 234, 81, 129, 69, 179, 76, 221, 176, 171, 58, 158, 151, 251, 79, 189, 124,
455 159, 40, 189, 229, 126, 168, 24, 141, 209, 215, 105, 170, 166, 181, 113, 36,
456 4, 172, 90, 123, 232, 154, 150, 224, 87, 249, 134, 136, 14, 28, 23, 67,
457 78, 187, 209, 55, 157, 95, 36, 136, 83, 103, 54, 236, 62, 81, 66, 44,
458 85, 120, 219, 178, 62, 126, 203, 193, 229, 146, 25, 187, 254, 141, 147, 185,
459 158, 103, 216, 216, 38, 34, 245, 43, 169, 200, 129, 130, 7, 239, 207, 155,
460 250, 89, 209, 238, 20, 74, 133, 100, 67, 149, 41, 187, 72, 9, 135, 165,
461 140, 14, 90, 51, 241, 216, 7, 176, 238, 254, 84, 53, 231, 87, 12, 51,
462 222, 54, 70, 163, 101, 130, 63, 37, 120, 180, 219, 161, 69, 213, 233, 130,
463 199, 124, 2, 36, 224, 140, 95, 201, 23, 72, 219, 222, 181, 237, 134, 11,
464 103, 94, 246, 251, 215, 218, 228, 90, 36, 54, 237, 49, 204, 13, 194, 221,
465 18, 186, 35, 144, 179, 2, 98, 90, 110, 165, 66, 38, 152, 206, 0, 121,
466 90, 25, 94, 145, 133, 58, 143, 138, 175, 80, 233, 110, 78, 84, 0, 207,
467 87, 78, 27, 243, 160, 231, 241, 83, 173, 163, 191, 205, 184, 216, 232, 36,
468 194, 52, 5, 72, 249, 42, 103, 254, 213, 41, 159, 209, 56, 222, 40, 224,
469 177, 195, 214, 11, 84, 221, 245, 137, 131, 23, 220, 251, 167, 17, 34, 214,
470 41, 102, 226, 223, 79, 53, 119, 84, 17, 219, 19, 80, 90, 132, 19, 176,
471 73, 145, 38, 28, 198, 176, 141, 92, 242, 69, 174, 63, 244, 44, 152, 102,
472 120, 151, 167, 115, 67, 110, 119, 159, 56, 63, 29, 70, 253, 118, 119, 220,
473 181, 71, 193, 167, 77, 178, 236, 187, 193, 236, 147, 231, 209, 56, 168, 202,
474 7, 198, 208, 17, 20, 31, 42, 70, 237, 148, 162, 161, 128, 135, 88, 37,
475 219, 56, 83, 248, 116, 20, 44, 17, 231, 156, 187, 251, 237, 165, 123, 165,
476 181, 166, 212, 99, 132, 26, 122, 240, 223, 130, 235, 248, 239, 11, 161, 32,
477 109, 210, 97, 173, 12, 251, 94, 118, 7, 107, 206, 105, 158, 16, 4, 245,
478 159, 67, 150, 226, 53, 42, 241, 249, 146, 107, 111, 75, 147, 136, 141, 97,
479 49, 101, 233, 168, 197, 72, 95, 138, 162, 103, 154, 162, 192, 78, 41, 102,
480 52, 207, 165, 48, 93, 41, 104, 136, 91, 169, 167, 51, 217, 197, 25, 238,
481 3, 4, 35, 64, 146, 153, 32, 107, 66, 225, 249, 148, 225, 130, 197, 194,
482 34, 100, 235, 200, 204, 39, 230, 37, 103, 219, 139, 8, 232, 63, 95, 154,
483 76, 195, 226, 187, 206, 116, 21, 40, 98, 177, 244, 9, 114, 148, 22, 185,
484 243, 93, 8, 84, 137, 114, 217, 240, 69, 185, 123, 1, 225, 160, 221, 183,
485 81, 159, 31, 66, 221, 201, 197, 113, 137, 181, 249, 211, 211, 226, 62, 12,
486 116, 111, 130, 197, 99, 85, 29, 191, 94, 14, 166, 137, 147, 14, 133, 58,
487 230, 148, 144, 87, 48, 117, 252, 64, 114, 18, 185, 63, 164, 159, 26, 79,
488 188, 242, 126, 223, 213, 245, 195, 144, 19, 68, 175, 73, 15, 90, 45, 245,
489 111, 212, 15, 108, 108, 199, 180, 231, 92, 251, 69, 251, 100, 179, 160, 125,
490 250, 42, 79, 118, 101, 195, 108, 15, 243, 124, 76, 248, 137, 80, 49, 16,
491 233, 89, 247, 188, 102, 212, 82, 111, 184, 67, 70, 110, 79, 241, 15, 157,
492 225, 66, 87, 81, 35, 200, 210, 21, 243, 196, 86, 48, 46, 152, 150, 236,
493 76, 45, 178, 131, 90, 85, 147, 107, 25, 194, 182, 106, 191, 161, 71, 94,
494 211, 172, 93, 128, 17, 188, 240, 127, 4, 18, 124, 199, 122, 163, 140, 228,
495 91, 163, 59, 197, 191, 231, 162, 77, 248, 24, 168, 119, 182, 169, 140, 55,
496 207, 105, 70, 81, 32, 79, 212, 1, 59, 11, 55, 145, 61, 90, 134, 202,
497 49, 105, 117, 158, 91, 86, 139, 55, 90, 171, 167, 237, 141, 1, 184, 49,
498 63, 7, 226, 53, 153, 200, 188, 224, 234, 104, 101, 118, 238, 93, 34, 252,
499 120, 251, 177, 103, 213, 173, 184, 231, 225, 111, 186, 210, 40, 111, 65, 4,
500 60, 124, 221, 67, 201, 210, 65, 90, 74, 36, 39, 88, 233, 64, 172, 179,
501 18, 59, 182, 82, 152, 192, 154, 220, 209, 184, 218, 210, 172, 250, 155, 199,
502 175, 246, 218, 45, 211, 204, 131, 204, 73, 107, 246, 52, 133, 102, 103, 135,
503 5, 46, 175, 63, 204, 92, 108, 126, 126, 194, 208, 178, 166, 198, 191, 240,
504 128, 5, 203, 189, 102, 148, 65, 29, 146, 2, 24, 21, 201, 147, 145, 248,
505 85, 77, 63, 245, 176, 199, 198, 237, 34, 101, 159, 144, 166, 29, 102, 175,
506 121, 78, 75, 196, 204, 80, 156, 236, 198, 232, 117, 112, 135, 61, 63, 63,
507 82, 2, 65, 139, 70, 69, 78, 64, 48, 154, 15, 250, 79, 190, 251, 94,
508 205, 252, 236, 241, 2, 171, 232, 118, 128, 71, 18, 55, 49, 13, 27, 36,
509 149, 220, 149, 150, 55, 200, 192, 151, 47, 218, 134, 205, 93, 7, 206, 44,
510 229, 208, 62, 208, 55, 55, 239, 63, 45, 154, 171, 70, 223, 144, 78, 251,
511 5, 138, 224, 21, 184, 87, 55, 69, 224, 231, 37, 65, 87, 114, 78, 216,
512 41, 49, 143, 233, 182, 214, 84, 20, 20, 156, 17, 12, 173, 172, 80, 151,
513 37, 28, 191, 69, 146, 102, 65, 15, 152, 143, 198, 45, 204, 4, 140, 90,
514 149, 45, 157, 190, 119, 196, 121, 199, 176, 122, 198, 141, 161, 31, 24, 149,
515 96, 231, 70, 122, 160, 19, 100, 75, 112, 141, 18, 175, 109, 98, 19, 110,
516 237, 1, 5, 171, 153, 19, 251, 61, 180, 249, 9, 187, 196, 248, 127, 13,
517 21, 244, 224, 42, 97, 40, 236, 190, 18, 123, 133, 26, 235, 9, 150, 90,
518 21, 189, 189, 101, 226, 190, 82, 18, 45, 3, 172, 187, 72, 74, 244, 211,
519 76, 2, 70, 168, 41, 195, 165, 178, 139, 5, 155, 100, 199, 0, 227, 72,
520 247, 186, 33, 169, 34, 104, 196, 3, 253, 202, 19, 140, 100, 122, 144, 125,
521 201, 202, 194, 245, 180, 27, 10, 207, 180, 31, 25, 152, 243, 143, 51, 90,
522 33, 74, 147, 127, 66, 47, 10, 65, 99, 71, 243, 241, 221, 219, 32, 213,
523 98, 67, 119, 130, 254, 11, 149, 64, 73, 168, 73, 237, 110, 18, 243, 21,
524 177, 53, 109, 2, 242, 89, 136, 34, 36, 135, 12, 12, 125, 251, 104, 137,
525 128, 152, 41, 70, 163, 184, 237, 137, 249, 63, 56, 133, 39, 0, 243, 248,
526 80, 184, 48, 238, 155, 193, 21, 137, 95, 144, 146, 209, 151, 197, 199, 122,
527 60, 48, 250, 1, 79, 162, 58, 78, 225, 184, 199, 35, 186, 225, 19, 68,
528 31, 199, 150, 85, 197, 76, 246, 150, 47, 63, 55, 196, 200, 10, 163, 170,
529 246, 34, 196, 87, 0, 45, 18, 6, 168, 248, 130, 184, 5, 197, 97, 56,
530 128, 254, 236, 32, 10, 182, 198, 139, 255, 43, 41, 159, 119, 253, 81, 248,
531 251, 253, 184, 98, 229, 6, 8, 64, 48, 190, 105, 125, 168, 191, 43, 93,
532 156, 39, 244, 220, 138, 197, 117, 27, 152, 145, 254, 233, 211, 33, 234, 5,
533 72, 247, 49, 221, 35, 188, 210, 20, 231, 90, 255, 37, 30, 126, 209, 65,
534 137, 123, 126, 191, 158, 227, 201, 129, 19, 164, 51, 232, 188, 185, 96, 67,
535 24, 190, 56, 16, 229, 34, 219, 150, 137, 226, 59, 58, 3, 147, 232, 35,
536 99, 207, 101, 173, 217, 18, 139, 1, 94, 123, 4, 232, 147, 243, 13, 193,
537 193, 187, 232, 100, 187, 119, 105, 72, 86, 30, 165, 20, 192, 19, 157, 67,
538 253, 204, 246, 133, 85, 252, 109, 169, 106, 203, 83, 72, 51, 217, 172, 7,
539 212, 104, 170, 166, 21, 181, 11, 14, 145, 33, 175, 235, 169, 66, 203, 78,
540 108, 209, 100, 131, 93, 192, 70, 157, 186, 224, 174, 173, 22, 167, 87, 244,
541 227, 218, 96, 98, 186, 24, 205, 62, 66, 79, 198, 254, 160, 37, 127, 16,
542 95, 171, 47, 34, 80, 43, 26, 111, 65, 207, 29, 139, 135, 69, 13, 110,
543 133, 110, 65, 140, 61, 207, 117, 98, 106, 29, 166, 224, 78, 208, 252, 194,
544 91, 4, 38, 0, 61, 133, 180, 168, 149, 211, 7, 80, 227, 135, 51, 11,
545 249, 228, 26, 198, 244, 2, 47, 226, 93, 147, 222, 125, 200, 205, 166, 154,
546 234, 80, 39, 70, 84, 98, 209, 1, 6, 219, 17, 11, 253, 126, 145, 231,
547 131, 14, 163, 107, 200, 195, 167, 64, 6, 101, 209, 255, 116, 179, 69, 164,
548 133, 23, 78, 98, 105, 182, 236, 34, 246, 58, 81, 183, 100, 30, 44, 187,
549 164, 91, 239, 132, 51, 154, 9, 2, 215, 186, 191, 79, 237, 179, 141, 169,
550 237, 206, 190, 201, 64, 223, 143, 60, 173, 108, 96, 216, 183, 70, 110, 5,
551 59, 230, 206, 194, 40, 211, 109, 146, 1, 102, 194, 212, 90, 214, 43, 111,
552 134, 122, 146, 9, 220, 198, 72, 196, 68, 19, 214, 220, 11, 173, 243, 15,
553 254, 158, 193, 211, 191, 55, 163, 212, 18, 20, 42, 199, 191, 74, 238, 191,
554 113, 173, 125, 203, 48, 1, 119, 32, 224, 8, 178, 179, 0, 67, 153, 62,
555 227, 25, 254, 126, 23, 87, 67, 43, 45, 250, 42, 214, 118, 179, 111, 189,
556 103, 133, 35, 196, 54, 23, 203, 218, 59, 177, 194, 55, 210, 153, 78, 207,
557 145, 157, 229, 119, 218, 173, 20, 104, 251, 48, 204, 245, 166, 251, 123, 82,
558 175, 239, 215, 158, 200, 1, 174, 40, 200, 32, 108, 184, 0, 137, 90, 81,
559 159, 128, 165, 10, 233, 210, 52, 48, 74, 164, 246, 199, 240, 154, 12, 254,
560 70, 37, 106, 44, 85, 123, 151, 119, 153, 170, 48, 144, 241, 114, 64, 115,
561 120, 159, 13, 49, 211, 182, 99, 124, 25, 70, 73, 196, 179, 201, 219, 124,
562 22, 137, 229, 160, 155, 10, 158, 234, 132, 203, 208, 76, 81, 98, 30, 142,
563 154, 68, 158, 92, 107, 252, 4, 22, 218, 2, 167, 190, 152, 141, 251, 137,
564 236, 87, 186, 235, 90, 0, 132, 68, 232, 66, 63, 0, 41, 235, 157, 45,
565 68, 194, 45, 18, 249, 254, 60, 33, 10, 86, 183, 45, 5, 253, 253, 212,
566 44, 94, 203, 41, 53, 146, 101, 148, 123, 198, 92, 14, 181, 87, 49, 229,
567 177, 249, 216, 8, 12, 37, 108, 220, 236, 13, 72, 122, 48, 235, 219, 74,
568 220, 187, 130, 66, 249, 41, 184, 140, 101, 1, 203, 110, 22, 62, 23, 118,
569 199, 32, 191, 162, 140, 187, 157, 80, 144, 59, 112, 238, 32, 101, 238, 47,
570 225, 69, 99, 178, 246, 49, 76, 81, 101, 187, 71, 59, 140, 229, 81, 253,
571 42, 204, 158, 74, 184, 237, 197, 14, 91, 81, 34, 115, 123, 224, 167, 15,
572 112, 84, 225, 104, 103, 208, 236, 183, 185, 142, 175, 147, 237, 188, 159, 125,
573 142, 253, 121, 87, 239, 78, 57, 179, 13, 123, 74, 148, 197, 74, 227, 110,
574 48, 248, 165, 248, 249, 43, 249, 0, 69, 7, 183, 68, 167, 181, 39, 54,
575 144, 39, 212, 36, 40, 171, 48, 106, 76, 50, 201, 111, 254, 86, 240, 39,
576 14, 59, 58, 110, 54, 155, 2, 6, 205, 190, 237, 126, 58, 204, 112, 159,
577 145, 188, 208, 196, 197, 52, 54, 94, 84, 127, 46, 56, 93, 152, 190, 133,
578 120, 166, 75, 52, 6, 112, 112, 71, 119, 143, 218, 19, 242, 174, 48, 246,
579 29, 243, 137, 94, 127, 95, 76, 49, 20, 149, 159, 251, 59, 146, 102, 242,
580 222, 157, 162, 124, 154, 25, 47, 246, 135, 38, 177, 165, 246, 224, 202, 4,
581 177, 255, 203, 245, 58, 172, 164, 33, 155, 179, 56, 41, 202, 39, 145, 176,
582 130, 171, 30, 77, 177, 64, 203, 70, 230, 242, 240, 118, 145, 30, 89, 184,
583 11, 123, 157, 212, 156, 28, 5, 200, 96, 157, 102, 126, 212, 149, 137, 144,
584 169, 39, 211, 159, 193, 254, 65, 201, 154, 165, 37, 129, 14, 242, 28, 37,
585 17, 130, 202, 227, 241, 49, 191, 213, 179, 72, 243, 118, 52, 133, 149, 8,
586 156, 231, 94, 215, 15, 21, 118, 194, 254, 107, 249, 40, 153, 69, 95, 141,
587 97, 37, 224, 82, 146, 71, 35, 26, 88, 127, 137, 247, 242, 243, 135, 113,
588 189, 155, 56, 98, 99, 90, 108, 186, 118, 178, 253, 50, 44, 30, 43, 223,
589 171, 186, 44, 120, 215, 128, 45, 65, 178, 142, 159, 39, 70, 37, 168, 62,
590 127, 219, 111, 40, 239, 134, 47, 114, 69, 45, 87, 15, 234, 100, 9, 90,
591 220, 203, 241, 40, 150, 239, 164, 39, 164, 196, 117, 156, 132, 143, 87, 146,
592 190, 130, 168, 244, 193, 101, 110, 158, 231, 57, 146, 235, 227, 8, 12, 208,
593 209, 203, 35, 38, 242, 45, 43, 118, 252, 201, 244, 130, 42, 18, 133, 66,
594 129, 209, 77, 208, 69, 236, 138, 254, 255, 245, 112, 236, 86, 171, 1, 111,
595 107, 69, 213, 222, 232, 199, 49, 193, 174, 198, 100, 170, 183, 150, 10, 233,
596 28, 210, 219, 123, 233, 126, 105, 75, 222, 231, 13, 137, 242, 177, 41, 137,
597 60, 202, 92, 16, 131, 226, 193, 152, 79, 95, 235, 105, 227, 172, 7, 160,
598 180, 146, 190, 243, 34, 19, 186, 215, 106, 95, 152, 49, 90, 68, 71, 90,
599 222, 240, 72, 16, 153, 69, 114, 193, 215, 175, 165, 224, 198, 154, 70, 104,
600 79, 97, 153, 54, 153, 179, 2, 207, 197, 243, 12, 159, 76, 168, 136, 217,
601 116, 79, 104, 21, 215, 72, 199, 35, 153, 67, 50, 145, 11, 253, 62, 254,
602 121, 1, 8, 147, 39, 20, 94, 155, 80, 41, 135, 135, 45, 85, 61, 140,
603 26, 195, 80, 187, 252, 175, 253, 152, 170, 169, 118, 235, 158, 134, 82, 188,
604 86, 52, 70, 32, 239, 212, 157, 115, 137, 28, 191, 156, 197, 136, 226, 171,
605 17, 231, 181, 79, 246, 232, 178, 242, 233, 113, 210, 230, 35, 201, 213, 28,
606 72, 27, 183, 26, 106, 240, 111, 111, 255, 122, 128, 234, 179, 201, 66, 165,
607 245, 198, 201, 138, 20, 212, 139, 159, 200, 91, 150, 175, 209, 203, 255, 81,
608 30, 27, 83, 216, 119, 36, 48, 112, 237, 229, 175, 204, 149, 192, 183, 184,
609 165, 176, 231, 176, 223, 81, 214, 225, 145, 107, 248, 225, 213, 6, 99, 59,
610 197, 183, 125, 208, 26, 19, 178, 146, 154, 242, 71, 189, 11, 246, 48, 8,
611 7, 28, 105, 208, 20, 13, 236, 77, 244, 218, 101, 217, 125, 199, 153, 77,
612 193, 214, 233, 91, 48, 201, 209, 6, 155, 87, 208, 221, 9, 73, 76, 191,
613 23, 249, 237, 146, 189, 177, 55, 8, 68, 192, 111, 204, 19, 164, 189, 223,
614 83, 220, 156, 79, 12, 82, 178, 149, 102, 94, 120, 229, 198, 77, 136, 244,
615 84, 33, 90, 66, 193, 45, 252, 160, 151, 66, 240, 135, 232, 147, 235, 107,
616 173, 30, 184, 103, 131, 168, 55, 195, 111, 16, 202, 227, 203, 16, 14, 226,
617 104, 220, 126, 121, 163, 5, 26, 253, 35, 196, 13, 90, 196, 32, 157, 28,
618 152, 70, 205, 236, 101, 142, 207, 126, 230, 67, 194, 143, 67, 77, 91, 97,
619 71, 135, 244, 40, 104, 120, 39, 169, 91, 124, 162, 111, 121, 9, 118, 146,
620 215, 112, 120, 157, 22, 198, 241, 196, 32, 176, 60, 244, 197, 37, 210, 215,
621 125, 122, 143, 253, 175, 101, 92, 205, 43, 170, 70, 183, 173, 162, 130, 226,
622 41, 122, 158, 130, 183, 223, 162, 212, 194, 38, 133, 252, 57, 245, 187, 168,
623 165, 204, 119, 8, 249, 174, 10, 206, 251, 55, 212, 118, 212, 74, 226, 227,
624 141, 138, 122, 204, 83, 14, 175, 248, 18, 159, 79, 79, 100, 56, 37, 229,
625 209, 221, 238, 197, 164, 42, 159, 203, 67, 31, 8, 195, 72, 251, 142, 229,
626 60, 24, 254, 97, 124, 219, 201, 255, 232, 60, 77, 19, 220, 239, 10, 158,
627 62, 117, 245, 167, 63, 38, 216, 169, 209, 29, 245, 17, 4, 241, 218, 83,
628 72, 48, 214, 228, 85, 103, 116, 248, 133, 200, 75, 81, 220, 207, 59, 226,
629 102, 50, 238, 138, 44, 120, 162, 220, 105, 5, 120, 11, 153, 98, 144, 4,
630 197, 217, 39, 235, 141, 148, 123, 51, 213, 255, 144, 17, 189, 144, 214, 246,
631 45, 95, 229, 127, 107, 19, 164, 143, 48, 210, 29, 249, 66, 11, 171, 191,
632 73, 99, 161, 114, 190, 80, 31, 215, 67, 16, 187, 246, 47, 110, 157, 33,
633 208, 151, 122, 2, 228, 161, 51, 9, 215, 33, 246, 67, 44, 19, 41, 29,
634 10, 42, 130, 244, 95, 45, 199, 156, 251, 151, 210, 121, 198, 52, 44, 87,
635 214, 126, 214, 93, 242, 201, 31, 44, 250, 139, 78, 59, 95, 116, 45, 100,
636 187, 97, 206, 143, 158, 54, 98, 113, 30, 101, 151, 56, 187, 116, 199, 157,
637 108, 136, 90, 36, 85, 253, 171, 140, 253, 14, 229, 238, 65, 220, 56, 162,
638 194, 138, 46, 251, 90, 92, 121, 202, 202, 98, 133, 78, 229, 87, 31, 158,
639 12, 175, 122, 17, 65, 10, 163, 51, 163, 95, 143, 208, 9, 192, 58, 29,
640 130, 4, 237, 194, 246, 82, 11, 20, 49, 26, 177, 34, 202, 180, 210, 111,
641 234, 151, 37, 27, 225, 7, 205, 35, 242, 176, 98, 232, 60, 89, 99, 33,
642 233, 106, 236, 96, 248, 71, 101, 133, 44, 190, 241, 76, 113, 146, 181, 106,
643 191, 130, 100, 127, 206, 138, 118, 124, 159, 138, 215, 82, 22, 224, 17, 114,
644 127, 109, 203, 60, 33, 67, 126, 145, 25, 199, 88, 97, 150, 40, 68, 185,
645 144, 218, 230, 81, 203, 223, 45, 209, 250, 22, 234, 12, 153, 49, 19, 107,
646 97, 79, 126, 100, 128, 16, 12, 83, 74, 94, 23, 159, 192, 193, 74, 153,
647 246, 12, 157, 248, 106, 34, 35, 64, 99, 184, 137, 91, 26, 154, 127, 155,
648 218, 36, 185, 64, 26, 41, 236, 232, 223, 159, 10, 29, 165, 12, 244, 214,
649 231, 231, 212, 154, 169, 66, 39, 153, 129, 38, 40, 46, 140, 140, 172, 0,
650 251, 41, 244, 153, 56, 180, 67, 22, 40, 33, 9, 111, 79, 11, 215, 49,
651 66, 195, 45, 113, 22, 41, 109, 39, 124, 178, 49, 173, 25, 245, 157, 190,
652 63, 116, 79, 213, 200, 171, 85, 121, 185, 198, 99, 92, 235, 127, 157, 18,
653 45, 201, 187, 193, 140, 79, 33, 65, 24, 11, 175, 105, 233, 47, 242, 36,
654 139, 254, 195, 48, 31, 146, 32, 0, 150, 237, 52, 165, 4, 174, 230, 81,
655 72, 146, 101, 241, 206, 146, 151, 105, 106, 255, 165, 127, 196, 69, 250, 155,
656 248, 177, 254, 232, 30, 109, 169, 33, 76, 112, 72, 214, 254, 113, 170, 234,
657 191, 76, 20, 132, 209, 243, 152, 241, 107, 12, 107, 31, 16, 149, 129, 8,
658 160, 7, 54, 31, 219, 58, 93, 76, 50, 143, 210, 73, 131, 59, 34, 38,
659 88, 9, 217, 193, 206, 147, 54, 244, 11, 240, 180, 243, 123, 68, 124, 81,
660 153, 132, 49, 38, 33, 220, 125, 164, 236, 162, 128, 202, 246, 183, 178, 35,
661 242, 109, 76, 7, 215, 92, 149, 32, 117, 34, 174, 122, 34, 101, 5, 67,
662 79, 24, 48, 75, 194, 8, 12, 98, 113, 36, 13, 79, 16, 94, 249, 110,
663 147, 212, 105, 205, 39, 31, 127, 182, 213, 97, 28, 226, 105, 217, 245, 84,
664 138, 119, 58, 136, 137, 79, 193, 116, 226, 72, 101, 0, 142, 171, 59, 40,
665 203, 158, 100, 187, 137, 8, 9, 125, 233, 16, 241, 192, 135, 4, 72, 132,
666 89, 126, 34, 0, 197, 80, 159, 101, 77, 18, 52, 179, 249, 169, 95, 125,
667 120, 18, 56, 177, 106, 6, 100, 99, 197, 197, 111, 104, 120, 211, 163, 86,
668 224, 106, 157, 48, 112, 84, 232, 171, 172, 220, 107, 136, 118, 170, 105, 16,
669 133, 223, 77, 65, 61, 41, 184, 88, 67, 98, 175, 216, 139, 56, 140, 26,
670 18, 179, 212, 180, 218, 235, 78, 180, 154, 144, 195, 188, 126, 205, 37, 58,
671 203, 223, 248, 156, 87, 139, 176, 77, 244, 117, 77, 148, 85, 187, 142, 119,
672 144, 113, 128, 217, 33, 5, 107, 247, 10, 178, 66, 206, 128, 187, 155, 161,
673 150, 166, 9, 194, 18, 87, 82, 5, 42, 74, 250, 215, 83, 145, 8, 158,
674 182, 156, 82, 161, 19, 87, 92, 77, 14, 7, 208, 23, 8, 13, 59, 57,
675 167, 252, 236, 167, 68, 206, 208, 173, 237, 84, 141, 14, 118, 250, 194, 37,
676 131, 146, 23, 17, 37, 228, 42, 134, 130, 193, 34, 83, 151, 107, 227, 133,
677 189, 157, 96, 73, 176, 115, 205, 111, 159, 89, 182, 43, 180, 27, 36, 57,
678 30, 151, 83, 181, 2, 2, 53, 17, 231, 175, 92, 52, 97, 124, 25, 172,
679 17, 206, 83, 37, 79, 60, 174, 47, 181, 207, 115, 216, 0, 59, 178, 186,
680 222, 154, 48, 10, 203, 237, 168, 102, 67, 97, 12, 80, 164, 196, 36, 102,
681 249, 198, 223, 40, 139, 247, 238, 100, 167, 179, 209, 170, 131, 198, 166, 105,
682 139, 118, 164, 153, 86, 75, 187, 187, 197, 160, 68, 198, 18, 67, 72, 85,
683 158, 8, 198, 13, 38, 133, 227, 47, 6, 64, 250, 136, 178, 128, 108, 116,
684 81, 186, 206, 233, 159, 179, 60, 114, 136, 222, 26, 198, 221, 9, 223, 32,
685 123, 35, 23, 188, 146, 155, 213, 76, 159, 32, 252, 211, 185, 1, 157, 178,
686 135, 227, 248, 103, 157, 213, 189, 148, 107, 135, 236, 254, 236, 112, 211, 216,
687 133, 146, 65, 193, 156, 12, 68, 129, 130, 145, 203, 140, 174, 99, 164, 145,
688 36, 252, 41, 175, 206, 147, 115, 196, 4, 174, 108, 17, 122, 230, 134, 147,
689 226, 163, 123, 125, 195, 16, 122, 59, 157, 243, 224, 222, 35, 75, 158, 165,
690 183, 96, 220, 251, 154, 155, 140, 144, 238, 87, 118, 32, 40, 120, 50, 237,
691 231, 139, 167, 105, 32, 225, 232, 86, 220, 154, 75, 196, 71, 65, 93, 220,
692 61, 119, 51, 177, 246, 221, 145, 96, 123, 19, 25, 236, 101, 58, 161, 73,
693 84, 176, 133, 105, 196, 134, 172, 27, 162, 226, 224, 55, 16, 137, 168, 193,
694 190, 36, 174, 21, 216, 214, 118, 104, 129, 255, 68, 151, 108, 167, 109, 82,
695 66, 183, 246, 156, 70, 234, 152, 129, 21, 156, 244, 102, 179, 68, 253, 171,
696 86, 189, 188, 191, 254, 81, 210, 173, 115, 204, 35, 164, 144, 108, 236, 225,
697 100, 49, 60, 210, 38, 90, 187, 49, 180, 192, 94, 27, 241, 255, 99, 158,
698 7, 237, 83, 24, 236, 15, 188, 123, 165, 197, 98, 230, 62, 46, 224, 117,
699 139, 102, 180, 131, 227, 218, 54, 126, 52, 152, 148, 252, 217, 93, 32, 154,
700 96, 161, 242, 40, 170, 26, 56, 74, 254, 10, 15, 19, 201, 213, 81, 46,
701 158, 233, 148, 163, 223, 116, 67, 170, 168, 17, 52, 115, 222, 60, 24, 251,
702 6, 74, 89, 86, 242, 245, 45, 128, 182, 3, 195, 154, 20, 179, 113, 153,
703 44, 242, 180, 83, 26, 92, 220, 87, 99, 40, 234, 36, 47, 104, 5, 216,
704 15, 75, 28, 250, 13, 84, 199, 155, 151, 61, 58, 214, 142, 173, 215, 72,
705 185, 60, 233, 73, 102, 177, 181, 170, 7, 48, 166, 110, 32, 227, 24, 254,
706 43, 157, 97, 119, 1, 125, 154, 244, 80, 196, 119, 70, 137, 163, 29, 157,
707 21, 96, 40, 77, 149, 43, 89, 115, 78, 66, 67, 78, 130, 122, 141, 108,
708 245, 94, 13, 91, 233, 28, 99, 104, 150, 29, 104, 122, 221, 186, 150, 126,
709 164, 59, 147, 132, 74, 1, 84, 129, 134, 199, 184, 19, 164, 172, 218, 226,
710 69, 96, 187, 3, 219, 55, 20, 36, 43, 220, 131, 166, 139, 173, 189, 7,
711 95, 213, 220, 66, 112, 32, 44, 231, 163, 42, 23, 106, 253, 98, 142, 233,
712 108, 164, 242, 111, 223, 130, 113, 101, 180, 103, 69, 79, 3, 212, 134, 113,
713 14, 252, 41, 247, 87, 188, 147, 176, 171, 218, 249, 176, 197, 157, 118, 13,
714 73, 246, 206, 106, 50, 120, 17, 148, 147, 164, 185, 70, 144, 158, 116, 214,
715 92, 246, 184, 68, 85, 100, 240, 154, 2, 156, 164, 212, 110, 241, 153, 129,
716 7, 222, 203, 157, 48, 94, 103, 89, 110, 197, 102, 10, 76, 234, 22, 12,
717 104, 202, 167, 57, 56, 178, 52, 73, 40, 212, 95, 196, 212, 166, 85, 15,
718 41, 81, 141, 124, 130, 100, 79, 100, 175, 126, 225, 151, 102, 116, 43, 17,
719 190, 116, 116, 79, 51, 59, 243, 149, 11, 121, 3, 234, 103, 221, 234, 201,
720 245, 5, 11, 20, 29, 181, 138, 67, 190, 119, 205, 66, 225, 155, 66, 14,
721 205, 68, 114, 207, 7, 180, 117, 185, 176, 204, 9, 9, 126, 205, 58, 142,
722 28, 136, 232, 53, 149, 237, 169, 44, 185, 78, 143, 99, 153, 143, 187, 157,
723 87, 106, 201, 63, 2, 205, 96, 226, 4, 28, 208, 81, 197, 98, 126, 168,
724 170, 63, 29, 15, 228, 23, 82, 12, 109, 204, 227, 231, 228, 87, 196, 63,
725 117, 68, 31, 206, 19, 177, 225, 66, 233, 244, 58, 185, 208, 188, 153, 253,
726 0, 60, 122, 11, 36, 193, 235, 90, 21, 89, 103, 232, 187, 68, 214, 232,
727 180, 13, 143, 157, 99, 180, 232, 213, 90, 113, 194, 193, 194, 230, 242, 45,
728 135, 51, 201, 80, 171, 128, 144, 150, 184, 193, 211, 22, 74, 186, 176, 237,
729 133, 181, 83, 216, 250, 76, 28, 144, 255, 76, 29, 64, 27, 25, 54, 88,
730 161, 132, 38, 34, 236, 32, 77, 106, 157, 6, 74, 120, 64, 211, 237, 173,
731 164, 29, 22, 107, 236, 9, 67, 136, 70, 87, 153, 52, 245, 162, 52, 213,
732 109, 66, 123, 116, 19, 54, 210, 216, 16, 72, 192, 249, 183, 108, 193, 60,
733 242, 120, 186, 160, 200, 137, 184, 180, 97, 15, 95, 167, 169, 87, 146, 151,
734 83, 244, 178, 11, 114, 231, 59, 246, 175, 29, 229, 95, 166, 199, 244, 74,
735 6, 79, 7, 15, 150, 53, 55, 148, 10, 214, 117, 214, 214, 18, 111, 23,
736 77, 192, 122, 193, 255, 196, 114, 120, 89, 233, 200, 20, 133, 140, 132, 162,
737 136, 45, 10, 216, 110, 169, 138, 221, 15, 114, 80, 66, 207, 159, 89, 31,
738 183, 6, 112, 209, 114, 85, 57, 171, 99, 14, 83, 218, 19, 240, 133, 147,
739 208, 50, 112, 209, 213, 114, 113, 128, 67, 115, 171, 57, 184, 202, 111, 119,
740 128, 8, 204, 133, 137, 179, 216, 142, 74, 57, 86, 75, 192, 237, 228, 108,
741 69, 105, 193, 141, 250, 76, 204, 128, 155, 26, 66, 172, 237, 250, 179, 186,
742 199, 211, 152, 65, 6, 152, 201, 105, 251, 78, 186, 157, 66, 69, 101, 190,
743 17, 230, 96, 168, 156, 29, 7, 59, 250, 141, 145, 141, 234, 100, 149, 39,
744 172, 205, 57, 39, 61, 6, 218, 254, 181, 184, 94, 155, 251, 236, 8, 17,
745 252, 132, 153, 56, 164, 230, 249, 203, 60, 78, 227, 136, 118, 97, 69, 247,
746 170, 83, 230, 125, 104, 85, 239, 19, 220, 15, 148, 251, 249, 196, 138, 38,
747 81, 209, 15, 231, 239, 183, 73, 121, 87, 157, 191, 171, 0, 99, 100, 105,
748 105, 223, 226, 113, 198, 179, 200, 75, 136, 55, 190, 194, 166, 94, 142, 224,
749 39, 193, 163, 138, 3, 203, 220, 34, 118, 216, 34, 142, 111, 227, 241, 205,
750 154, 220, 162, 107, 200, 100, 217, 194, 122, 207, 234, 161, 104, 119, 201, 84,
751 46, 37, 159, 130, 76, 136, 147, 250, 29, 209, 151, 145, 92, 189, 105, 79,
752 101, 117, 4, 209, 229, 171, 22, 168, 11, 210, 160, 120, 158, 218, 39, 129,
753 95, 30, 254, 37, 160, 17, 226, 65, 38, 155, 129, 122, 222, 170, 133, 113,
754 134, 168, 135, 212, 57, 200, 248, 226, 62, 62, 200, 159, 127, 42, 51, 90,
755 49, 28, 134, 6, 226, 227, 159, 163, 142, 179, 173, 151, 168, 47, 106, 150,
756 43, 205, 20, 245, 181, 82, 210, 73, 173, 93, 73, 132, 69, 71, 195, 129,
757 214, 106, 151, 117, 135, 138, 224, 126, 167, 48, 83, 34, 36, 200, 13, 29,
758 239, 80, 11, 224, 146, 30, 165, 79, 231, 209, 119, 168, 138, 217, 100, 202,
759 154, 132, 206, 54, 71, 170, 74, 126, 11, 105, 96, 94, 176, 133, 105, 167,
760 60, 81, 127, 80, 238, 86, 126, 54, 147, 16, 117, 54, 230, 12, 76, 196,
761 8, 177, 11, 61, 177, 113, 30, 40, 18, 26, 18, 55, 37, 74, 94, 243,
762 222, 250, 144, 1, 67, 236, 61, 94, 204, 49, 44, 63, 128, 123, 253, 163,
763 36, 31, 168, 42, 144, 198, 132, 53, 212, 183, 1, 234, 164, 254, 55, 113,
764 19, 28, 184, 210, 113, 4, 95, 146, 92, 164, 152, 120, 176, 218, 237, 134,
765 193, 243, 109, 2, 35, 253, 94, 25, 192, 246, 118, 186, 220, 218, 81, 217,
766 36, 126, 215, 24, 86, 127, 114, 69, 176, 237, 20, 52, 239, 1, 82, 149,
767 90, 227, 216, 108, 176, 100, 41, 68, 64, 97, 13, 13, 10, 132, 104, 252,
768 194, 30, 134, 21, 234, 121, 133, 137, 238, 55, 1, 233, 41, 41, 165, 24,
769 135, 243, 206, 15, 65, 184, 175, 222, 34, 216, 2, 143, 84, 207, 136, 195,
770 96, 7, 114, 230, 244, 158, 69, 30, 62, 183, 157, 58, 157, 248, 35, 163,
771 89, 27, 18, 44, 149, 74, 255, 140, 216, 203, 58, 102, 75, 24, 123, 11,
772 79, 224, 186, 187, 55, 178, 22, 170, 74, 65, 248, 185, 88, 174, 100, 179,
773 42, 147, 165, 94, 149, 106, 1, 14, 49, 135, 110, 240, 201, 36, 145, 118,
774 151, 62, 220, 245, 246, 188, 254, 207, 98, 231, 47, 67, 38, 225, 110, 86,
775 50, 168, 160, 3, 188, 233, 152, 13, 199, 93, 171, 72, 152, 181, 223, 144,
776 105, 206, 64, 198, 51, 125, 118, 168, 107, 110, 42, 87, 126, 137, 100, 52,
777 139, 187, 84, 78, 109, 68, 157, 242, 105, 42, 192, 199, 227, 229, 167, 149,
778 115, 222, 117, 64, 146, 168, 86, 69, 160, 37, 91, 184, 75, 172, 107, 178,
779 205, 113, 109, 197, 143, 177, 69, 241, 131, 191, 103, 112, 145, 194, 234, 152,
780 191, 196, 121, 189, 118, 85, 248, 218, 129, 113, 247, 58, 112, 168, 212, 15,
781 226, 249, 121, 7, 193, 119, 219, 153, 152, 134, 87, 50, 53, 1, 122, 228,
782 133, 70, 218, 235, 176, 226, 181, 228, 247, 171, 237, 208, 93, 219, 210, 204,
783 99, 81, 35, 94, 213, 244, 214, 133, 87, 38, 157, 220, 76, 241, 250, 9,
784 174, 94, 200, 220, 42, 33, 84, 33, 20, 6, 86, 165, 70, 17, 23, 147,
785 58, 74, 222, 31, 41, 174, 132, 226, 158, 2, 97, 151, 118, 118, 199, 237,
786 251, 181, 137, 122, 134, 180, 206, 25, 127, 6, 28, 88, 227, 99, 230, 21,
787 51, 19, 201, 179, 147, 131, 49, 170, 49, 104, 15, 138, 137, 169, 120, 94,
788 205, 80, 43, 230, 239, 124, 165, 225, 36, 228, 209, 108, 204, 135, 125, 157,
789 94, 203, 116, 141, 29, 156, 97, 146, 225, 80, 43, 254, 51, 120, 58, 221,
790 11, 176, 165, 179, 174, 53, 216, 195, 110, 24, 177, 125, 101, 171, 86, 108,
791 182, 14, 91, 146, 246, 127, 249, 192, 221, 143, 211, 90, 9, 12, 130, 246,
792 170, 107, 193, 134, 28, 49, 35, 254, 131, 137, 125, 207, 196, 72, 80, 90,
793 30, 174, 143, 172, 226, 50, 12, 236, 58, 235, 205, 251, 234, 171, 14, 201,
794 232, 131, 230, 212, 162, 143, 189, 179, 44, 100, 224, 49, 15, 155, 170, 228,
795 158, 151, 239, 19, 0, 232, 204, 216, 76, 21, 149, 130, 142, 63, 146, 152,
796 124, 136, 129, 14, 182, 212, 29, 8, 244, 12, 36, 28, 134, 52, 216, 106,
797 229, 107, 150, 8, 223, 247, 117, 229, 251, 216, 158, 228, 97, 240, 148, 228,
798 49, 138, 80, 34, 204, 52, 237, 43, 105, 142, 231, 20, 32, 70, 44, 180,
799 212, 121, 229, 177, 50, 152, 238, 72, 51, 116, 111, 18, 27, 211, 40, 211,
800 97, 226, 18, 155, 21, 216, 166, 165, 37, 234, 56, 121, 165, 159, 197, 87,
801 203, 146, 69, 137, 25, 148, 143, 246, 247, 131, 100, 91, 45, 25, 127, 103,
802 35, 219, 32, 31, 237, 93, 92, 167, 194, 64, 255, 188, 64, 139, 118, 135,
803 212, 56, 216, 167, 102, 36, 220, 109, 21, 147, 92, 78, 8, 65, 213, 179,
804 11, 40, 227, 83, 207, 175, 56, 75, 193, 105, 239, 145, 193, 107, 234, 101,
805 50, 97, 123, 246, 137, 30, 180, 149, 18, 62, 162, 163, 16, 192, 79, 61,
806 222, 25, 35, 181, 13, 10, 90, 25, 216, 76, 219, 117, 100, 244, 159, 172,
807 223, 106, 19, 1, 176, 180, 154, 222, 182, 202, 241, 217, 150, 203, 244, 213,
808 94, 178, 158, 130, 166, 105, 167, 118, 194, 153, 142, 60, 134, 216, 142, 216,
809 254, 2, 7, 54, 26, 197, 25, 138, 74, 39, 101, 107, 168, 110, 24, 58,
810 191, 136, 25, 40, 26, 79, 96, 4, 25, 32, 134, 180, 69, 19, 198, 208,
811 254, 197, 133, 72, 242, 66, 107, 23, 157, 143, 117, 50, 224, 198, 246, 8,
812 19, 49, 213, 159, 9, 201, 160, 158, 200, 59, 145, 119, 110, 58, 190, 132,
813 168, 220, 64, 171, 103, 140, 202, 167, 130, 190, 195, 57, 194, 90, 11, 214,
814 19, 53, 68, 88, 89, 14, 235, 20, 50, 249, 248, 100, 241, 10, 149, 35,
815 93, 4, 84, 62, 75, 41, 223, 81, 56, 18, 14, 101, 224, 40, 118, 53,
816 252, 72, 194, 185, 15, 235, 120, 170, 171, 237, 242, 201, 96, 157, 93, 248,
817 227, 156, 239, 249, 190, 10, 177, 147, 77, 18, 157, 53, 114, 233, 168, 14,
818 28, 80, 50, 89, 248, 127, 156, 98, 193, 111, 202, 38, 248, 60, 243, 240,
819 198, 122, 227, 160, 117, 138, 247, 171, 235, 47, 23, 245, 177, 12, 24, 213,
820 214, 117, 210, 86, 85, 55, 153, 25, 16, 53, 195, 81, 247, 217, 104, 109,
821 170, 63, 79, 169, 38, 150, 42, 167, 206, 230, 51, 109, 62, 202, 205, 164,
822 28, 240, 90, 82, 119, 57, 222, 95, 195, 106, 193, 197, 180, 73, 24, 108,
823 143, 114, 54, 29, 100, 255, 124, 30, 143, 120, 147, 84, 110, 157, 53, 226,
824 104, 117, 65, 60, 187, 173, 94, 59, 132, 121, 145, 188, 220, 105, 4, 48,
825 89, 130, 82, 236, 212, 138, 179, 197, 182, 115, 6, 83, 196, 132, 184, 148,
826 183, 101, 141, 92, 84, 153, 147, 133, 212, 8, 250, 226, 167, 209, 22, 95,
827 44, 103, 243, 27, 111, 105, 128, 110, 88, 110, 190, 229, 81, 26, 219, 229,
828 83, 247, 16, 17, 158, 228, 197, 32, 193, 223, 184, 178, 89, 21, 43, 254,
829 124, 144, 200, 131, 138, 5, 107, 98, 139, 16, 184, 127, 244, 51, 141, 88,
830 178, 132, 205, 239, 123, 14, 34, 2, 244, 238, 154, 230, 146, 87, 15, 20,
831 164, 174, 159, 28, 211, 81, 230, 227, 158, 16, 168, 8, 18, 105, 177, 68,
832 50, 127, 64, 73, 123, 233, 44, 34, 159, 133, 66, 100, 163, 184, 244, 171,
833 240, 235, 230, 160, 137, 131, 200, 230, 189, 136, 137, 240, 110, 253, 0, 250,
834 52, 126, 123, 209, 83, 189, 61, 243, 153, 60, 36, 157, 156, 141, 175, 212,
835 219, 217, 33, 144, 133, 126, 7, 41, 228, 77, 247, 47, 162, 47, 3, 157,
836 32, 219, 149, 138, 51, 181, 65, 242, 51, 76, 185, 51, 5, 188, 216, 33,
837 31, 179, 247, 93, 55, 241, 103, 253, 14, 6, 32, 17, 137, 194, 126, 235,
838 132, 115, 93, 167, 187, 190, 147, 190, 255, 120, 166, 38, 118, 241, 129, 163,
839 37, 39, 155, 142, 37, 147, 134, 221, 136, 99, 114, 152, 250, 143, 53, 104,
840 103, 7, 37, 178, 195, 124, 200, 196, 34, 8, 247, 255, 156, 141, 29, 202,
841 239, 70, 189, 144, 0, 167, 182, 105, 57, 205, 218, 54, 151, 29, 7, 76,
842 7, 84, 20, 246, 185, 216, 93, 21, 96, 25, 115, 176, 38, 180, 177, 224,
843 112, 104, 92, 17, 152, 55, 211, 21, 210, 98, 249, 201, 21, 85, 84, 185,
844 53, 59, 147, 198, 1, 251, 185, 235, 132, 73, 67, 194, 220, 120, 191, 206,
845 73, 53, 158, 237, 102, 41, 23, 133, 14, 81, 47, 204, 9, 142, 124, 180,
846 115, 236, 180, 190, 218, 68, 92, 113, 54, 250, 174, 99, 126, 1, 186, 88,
847 231, 96, 51, 147, 236, 164, 135, 210, 75, 242, 196, 53, 104, 101, 233, 0,
848 129, 173, 53, 118, 42, 188, 139, 187, 251, 143, 37, 222, 198, 168, 194, 103,
849 107, 56, 240, 213, 98, 0, 65, 112, 187, 230, 203, 207, 104, 124, 78, 130,
850 66, 156, 214, 95, 22, 46, 181, 254, 15, 201, 138, 160, 138, 171, 202, 3,
851 169, 187, 110, 58, 43, 218, 62, 112, 49, 206, 186, 161, 31, 140, 183, 84,
852 143, 250, 217, 123, 9, 210, 87, 1, 208, 77, 143, 33, 6, 237, 173, 108,
853 187, 137, 131, 148, 145, 22, 123, 142, 146, 156, 223, 61, 124, 151, 57, 17,
854 88, 139, 56, 8, 26, 205, 163, 193, 72, 201, 209, 220, 215, 97, 172, 73,
855 99, 139, 111, 125, 94, 196, 78, 235, 224, 103, 38, 237, 9, 142, 131, 229,
856 45, 247, 172, 219, 29, 102, 67, 124, 171, 113, 2, 85, 148, 56, 150, 227,
857 45, 147, 200, 171, 42, 244, 128, 106, 2, 47, 245, 211, 163, 240, 41, 86,
858 50, 70, 44, 91, 166, 247, 110, 234, 138, 152, 4, 100, 49, 248, 198, 51,
859 124, 253, 126, 122, 30, 165, 0, 183, 248, 65, 30, 156, 161, 52, 164, 76,
860 44, 198, 99, 20, 24, 97, 93, 232, 104, 51, 200, 0, 153, 67, 93, 172,
861 94, 217, 127, 34, 29, 64, 149, 41, 78, 211, 63, 188, 61, 102, 2, 127,
862 166, 194, 5, 59, 203, 5, 224, 68, 250, 58, 202, 236, 218, 235, 168, 0,
863 205, 82, 53, 99, 51, 144, 0, 140, 45, 46, 213, 207, 17, 221, 47, 85,
864 211, 87, 2, 35, 167, 236, 191, 70, 147, 201, 200, 69, 1, 228, 136, 243,
865 122, 253, 34, 201, 92, 90, 194, 8, 119, 197, 197, 178, 157, 207, 170, 147,
866 232, 5, 200, 241, 6, 27, 120, 242, 232, 163, 26, 234, 230, 50, 214, 194,
867 125, 135, 62, 28, 118, 24, 155, 39, 166, 250, 204, 189, 169, 94, 110, 81,
868 222, 81, 127, 71, 49, 176, 178, 37, 63, 219, 72, 0, 100, 255, 201, 70,
869 177, 208, 81, 101, 177, 31, 130, 187, 196, 119, 161, 217, 207, 216, 59, 106,
870 15, 56, 134, 229, 99, 68, 73, 215, 9, 25, 119, 82, 88, 19, 184, 42,
871 38, 40, 176, 6, 34, 167, 249, 143, 6, 216, 128, 139, 75, 3, 229, 126,
872 121, 187, 68, 219, 187, 99, 154, 175, 240, 86, 75, 40, 133, 146, 223, 105,
873 220, 83, 126, 90, 206, 136, 102, 199, 36, 217, 56, 78, 226, 138, 59, 142,
874 223, 68, 175, 191, 83, 224, 208, 195, 2, 102, 168, 194, 158, 231, 143, 162,
875 83, 92, 93, 238, 12, 231, 142, 41, 106, 66, 178, 68, 83, 155, 24, 102,
876 150, 112, 1, 27, 175, 239, 85, 175, 61, 75, 157, 245, 121, 62, 171, 217,
877 55, 218, 86, 45, 10, 228, 203, 193, 216, 90, 142, 109, 232, 168, 17, 149,
878 145, 169, 199, 134, 194, 110, 104, 66, 130, 215, 179, 205, 6, 183, 93, 47,
879 131, 8, 104, 12, 169, 92, 69, 43, 193, 77, 223, 238, 36, 15, 59, 136,
880 95, 87, 196, 169, 35, 118, 252, 19, 6, 247, 172, 219, 159, 109, 118, 154,
881 10, 199, 227, 164, 36, 85, 27, 37, 52, 149, 85, 107, 134, 203, 39, 112,
882 63, 235, 229, 225, 141, 127, 46, 188, 125, 48, 183, 137, 79, 157, 251, 128,
883 214, 29, 60, 192, 43, 20, 22, 77, 62, 5, 229, 201, 61, 217, 181, 68,
884 161, 232, 220, 189, 206, 170, 48, 199, 251, 10, 93, 153, 112, 35, 81, 174,
885 17, 220, 54, 183, 4, 229, 14, 231, 33, 14, 63, 121, 125, 205, 101, 110,
886 255, 145, 55, 130, 56, 4, 236, 171, 27, 10, 130, 188, 115, 125, 104, 178,
887 41, 100, 48, 200, 231, 41, 156, 32, 125, 22, 167, 209, 221, 201, 63, 165,
888 210, 15, 14, 83, 162, 45, 176, 131, 195, 34, 145, 120, 155, 67, 82, 254,
889 231, 179, 149, 97, 4, 84, 30, 62, 140, 39, 235, 91, 145, 92, 89, 87,
890 96, 144, 96, 223, 153, 0, 28, 117, 238, 168, 40, 11, 140, 197, 162, 172,
891 72, 23, 120, 153, 147, 195, 6, 39, 36, 54, 174, 202, 182, 74, 232, 30,
892 240, 10, 130, 188, 127, 2, 48, 68, 9, 191, 245, 176, 249, 169, 19, 21,
893 154, 45, 249, 114, 137, 223, 190, 252, 87, 36, 85, 242, 96, 21, 234, 18,
894 157, 108, 86, 179, 103, 87, 149, 121, 231, 19, 111, 157, 154, 171, 158, 128,
895 68, 253, 157, 146, 9, 11, 82, 101, 218, 181, 37, 73, 31, 19, 122, 211,
896 104, 102, 172, 244, 119, 94, 235, 143, 241, 113, 24, 211, 132, 227, 169, 254,
897 60, 118, 45, 122, 177, 97, 161, 170, 233, 212, 139, 23, 179, 61, 117, 175,
898 126, 18, 119, 242, 14, 67, 254, 147, 62, 61, 58, 54, 42, 75, 134, 163,
899 134, 56, 20, 222, 1, 199, 168, 38, 142, 114, 14, 84, 106, 218, 24, 245,
900 129, 59, 86, 217, 80, 79, 119, 218, 53, 136, 124, 63, 90, 179, 205, 112,
901 192, 116, 186, 223, 65, 52, 109, 169, 196, 209, 73, 239, 124, 224, 15, 78,
902 134, 164, 65, 189, 58, 22, 166, 57, 64, 104, 185, 101, 43, 231, 254, 145,
903 156, 74, 38, 201, 121, 28, 25, 221, 129, 82, 26, 14, 36, 32, 158, 208,
904 70, 2, 201, 70, 190, 208, 246, 54, 239, 158, 140, 212, 225, 209, 177, 86,
905 31, 32, 45, 93, 207, 255, 12, 176, 154, 217, 193, 166, 61, 241, 53, 80,
906 37, 214, 34, 65, 207, 114, 163, 132, 116, 133, 63, 217, 234, 5, 111, 188,
907 79, 1, 110, 88, 156, 17, 242, 1, 138, 105, 144, 213, 123, 212, 7, 164,
908 200, 175, 161, 145, 108, 104, 174, 202, 202, 35, 153, 88, 138, 105, 58, 143,
909 57, 227, 90, 38, 189, 38, 66, 80, 222, 174, 7, 202, 57, 236, 239, 104,
910 51, 26, 252, 140, 2, 74, 4, 163, 211, 199, 202, 185, 65, 203, 13, 210,
911 69, 228, 115, 31, 100, 143, 189, 100, 228, 209, 107, 55, 72, 150, 255, 144,
912 232, 155, 15, 42, 18, 149, 49, 207, 32, 148, 178, 112, 254, 67, 51, 14,
913 217, 41, 203, 217, 205, 101, 223, 161, 148, 33, 92, 164, 250, 91, 80, 251,
914 104, 157, 225, 172, 18, 245, 5, 54, 30, 8, 254, 109, 3, 202, 215, 179,
915 161, 236, 147, 104, 254, 232, 217, 124, 178, 1, 206, 38, 168, 77, 8, 112,
916 234, 154, 162, 94, 3, 90, 94, 114, 137, 115, 42, 98, 202, 0, 214, 202,
917 65, 93, 52, 179, 123, 74, 86, 10, 171, 211, 171, 44, 226, 56, 13, 163,
918 7, 146, 57, 253, 115, 93, 156, 132, 119, 146, 107, 98, 218, 19, 195, 5,
919 195, 190, 231, 218, 143, 48, 65, 102, 92, 0, 244, 108, 148, 144, 214, 99,
920 128, 208, 85, 124, 5, 75, 38, 131, 93, 38, 21, 170, 24, 105, 170, 135,
921 152, 21, 38, 191, 251, 88, 178, 62, 84, 177, 239, 61, 156, 63, 47, 195,
922 117, 159, 198, 182, 126, 216, 103, 165, 158, 51, 70, 34, 33, 241, 216, 11,
923 50, 152, 157, 100, 30, 66, 147, 88, 38, 17, 251, 19, 182, 71, 65, 199,
924 150, 215, 188, 188, 80, 83, 2, 83, 73, 183, 251, 85, 101, 25, 173, 50,
925 243, 138, 194, 98, 209, 104, 219, 25, 45, 111, 172, 115, 238, 149, 4, 205,
926 123, 112, 218, 192, 247, 102, 191, 30, 225, 230, 36, 188, 219, 220, 19, 213,
927 127, 226, 227, 17, 90, 216, 88, 129, 249, 230, 91, 42, 111, 102, 45, 42,
928 175, 161, 188, 195, 184, 238, 57, 69, 88, 168, 167, 23, 64, 47, 201, 51,
929 79, 65, 117, 254, 146, 100, 8, 30, 209, 42, 138, 132, 209, 241, 66, 249,
930 228, 192, 48, 21, 75, 202, 123, 99, 76, 87, 34, 99, 32, 224, 140, 94,
931 90, 178, 47, 165, 23, 227, 92, 218, 45, 44, 104, 9, 23, 94, 254, 195,
932 16, 12, 105, 135, 48, 225, 7, 139, 148, 199, 157, 139, 243, 71, 254, 15,
933 64, 143, 140, 3, 221, 218, 117, 118, 34, 177, 156, 50, 220, 99, 219, 4,
934 247, 244, 16, 100, 51, 73, 85, 181, 24, 127, 102, 173, 238, 205, 143, 68,
935 63, 44, 197, 106, 165, 150, 11, 244, 198, 36, 101, 10, 79, 207, 183, 214,
936 228, 226, 226, 235, 77, 11, 175, 80, 90, 197, 35, 99, 7, 121, 208, 236,
937 141, 171, 176, 158, 219, 162, 166, 168, 147, 2, 131, 180, 57, 229, 106, 63,
938 194, 250, 21, 63, 152, 16, 109, 20, 208, 227, 225, 10, 22, 2, 223, 128,
939 89, 100, 47, 101, 165, 0, 147, 198, 47, 109, 94, 113, 183, 101, 113, 248,
940 79, 21, 26, 141, 176, 52, 118, 71, 143, 174, 194, 248, 199, 194, 245, 105,
941 112, 92, 180, 22, 184, 218, 78, 192, 41, 17, 171, 143, 203, 2, 81, 178,
942 177, 138, 101, 113, 190, 77, 70, 73, 85, 228, 194, 2, 70, 191, 54, 43,
943 188, 233, 27, 135, 140, 127, 10, 59, 38, 86, 226, 127, 166, 132, 69, 21,
944 200, 107, 33, 89, 24, 152, 88, 90, 75, 144, 236, 44, 10, 121, 139, 169,
945 113, 127, 104, 227, 164, 145, 69, 196, 233, 237, 127, 132, 204, 244, 178, 247,
946 191, 207, 63, 135, 214, 135, 213, 151, 44, 43, 190, 32, 241, 221, 118, 81,
947 145, 43, 29, 244, 239, 78, 245, 115, 229, 178, 255, 147, 16, 149, 255, 154,
948 217, 226, 234, 99, 247, 146, 209, 42, 9, 74, 220, 199, 178, 165, 246, 188,
949 22, 51, 136, 38, 63, 125, 45, 108, 190, 111, 72, 248, 57, 16, 107, 120,
950 245, 158, 215, 136, 9, 25, 61, 162, 148, 109, 112, 193, 56, 81, 121, 143,
951 208, 225, 20, 130, 245, 12, 81, 156, 189, 102, 23, 51, 135, 76, 205, 59,
952 197, 152, 35, 80, 127, 168, 223, 48, 20, 104, 57, 69, 132, 53, 72, 220,
953 161, 178, 219, 33, 37, 245, 58, 199, 17, 246, 39, 2, 84, 251, 20, 62,
954 21, 56, 209, 143, 149, 24, 68, 59, 17, 240, 215, 95, 195, 188, 231, 97,
955 41, 32, 98, 57, 107, 172, 90, 159, 132, 150, 226, 75, 151, 144, 12, 111,
956 6, 253, 112, 213, 28, 179, 232, 233, 73, 139, 84, 232, 204, 0, 148, 77,
957 48, 183, 37, 213, 67, 195, 211, 206, 12, 110, 212, 180, 201, 229, 77, 7,
958 48, 221, 44, 102, 23, 168, 145, 200, 77, 103, 7, 173, 247, 84, 110, 123,
959 23, 5, 145, 154, 124, 95, 103, 89, 78, 136, 74, 47, 136, 86, 135, 250,
960 60, 228, 64, 78, 228, 172, 111, 204, 89, 144, 119, 8, 248, 81, 70, 113,
961 89, 113, 50, 70, 124, 182, 58, 179, 77, 197, 160, 136, 41, 195, 19, 163,
962 222, 23, 34, 70, 203, 156, 137, 209, 146, 213, 112, 210, 203, 138, 236, 36,
963 24, 57, 106, 75, 115, 112, 43, 229, 239, 154, 133, 160, 211, 36, 241, 229,
964 94, 110, 224, 182, 162, 85, 189, 20, 125, 9, 26, 137, 185, 177, 14, 138,
965 5, 225, 132, 174, 244, 209, 187, 92, 140, 29, 158, 111, 150, 8, 32, 99,
966 99, 142, 213, 19, 101, 164, 64, 190, 61, 219, 198, 118, 246, 217, 110, 173,
967 248, 24, 100, 216, 190, 118, 198, 209, 64, 238, 205, 176, 46, 116, 131, 103,
968 243, 148, 123, 69, 136, 144, 46, 112, 112, 162, 219, 21, 205, 136, 193, 152,
969 96, 134, 16, 22, 146, 190, 194, 19, 119, 47, 44, 67, 131, 166, 109, 215,
970 159, 90, 88, 212, 11, 71, 235, 55, 31, 4, 113, 172, 187, 169, 10, 144,
971 169, 108, 79, 145, 7, 29, 24, 221, 230, 28, 113, 32, 190, 160, 67, 40,
972 43, 107, 222, 221, 175, 180, 200, 217, 15, 128, 253, 206, 203, 106, 167, 163,
973 89, 29, 28, 247, 240, 14, 121, 133, 218, 154, 167, 77, 98, 149, 151, 145,
974 4, 78, 232, 135, 195, 121, 157, 216, 178, 211, 243, 201, 71, 220, 150, 119,
975 74, 71, 110, 200, 234, 100, 105, 248, 47, 25, 35, 1, 241, 166, 6, 88,
976 41, 246, 176, 181, 21, 75, 150, 20, 227, 19, 64, 226, 209, 194, 121, 174,
977 240, 219, 133, 253, 161, 146, 230, 69, 122, 42, 165, 82, 78, 45, 185, 61,
978 12, 14, 148, 13, 119, 155, 157, 28, 90, 226, 119, 9, 201, 199, 64, 93,
979 120, 115, 138, 156, 235, 123, 52, 111, 149, 48, 73, 181, 204, 181, 10, 157,
980 16, 55, 100, 243, 10, 29, 159, 139, 88, 16, 1, 31, 201, 242, 2, 237,
981 186, 181, 217, 139, 102, 205, 119, 197, 201, 221, 108, 205, 171, 54, 109, 31,
982 76, 199, 28, 160, 214, 14, 201, 25, 211, 189, 144, 44, 69, 70, 205, 79,
983 150, 149, 108, 23, 8, 171, 60, 18, 127, 161, 41, 71, 239, 168, 89, 140,
984 49, 149, 157, 109, 232, 141, 227, 239, 247, 114, 174, 129, 19, 252, 130, 74,
985 202, 224, 73, 122, 246, 47, 147, 8, 37, 60, 253, 101, 11, 171, 160, 39,
986 92, 180, 183, 40, 254, 233, 117, 200, 139, 37, 140, 28, 35, 8, 10, 40,
987 167, 247, 248, 84, 215, 58, 170, 2, 7, 1, 69, 214, 10, 7, 233, 209,
988 181, 212, 34, 68, 46, 141, 198, 137, 248, 45, 130, 97, 123, 104, 141, 17,
989 126, 7, 199, 55, 194, 160, 69, 39, 13, 70, 41, 63, 205, 99, 1, 69,
990 46, 92, 77, 56, 20, 247, 224, 226, 60, 153, 81, 180, 91, 159, 156, 27,
991 119, 114, 126, 210, 26, 123, 165, 204, 237, 81, 75, 130, 45, 60, 0, 155,
992 11, 125, 27, 202, 35, 230, 101, 164, 86, 117, 226, 23, 171, 253, 222, 223,
993 38, 104, 224, 124, 92, 251, 110, 145, 247, 198, 158, 25, 172, 84, 49, 87,
994 1, 168, 95, 124, 146, 5, 46, 179, 198, 235, 69, 200, 63, 212, 59, 110,
995 52, 195, 54, 71, 169, 234, 189, 58, 180, 149, 194, 10, 118, 99, 66, 66,
996 123, 192, 248, 51, 237, 129, 10, 143, 94, 55, 135, 247, 56, 163, 40, 139,
997 150, 192, 142, 64, 169, 90, 42, 116, 228, 62, 67, 130, 212, 212, 23, 210,
998 182, 95, 109, 224, 185, 255, 156, 102, 184, 171, 42, 98, 217, 218, 27, 80,
999 171, 125, 49, 233, 16, 238, 42, 102, 61, 95, 180, 49, 192, 67, 112, 143,
1000 106, 145, 185, 239, 180, 181, 120, 24, 127, 215, 233, 123, 235, 104, 228, 248,
1001 223, 90, 211, 211, 76, 179, 198, 253, 220, 171, 247, 171, 11, 237, 17, 249,
1002 81, 122, 111, 255, 213, 120, 167, 192, 149, 102, 7, 204, 86, 107, 156, 83,
1003 174, 18, 237, 143, 85, 76, 245, 189, 86, 90, 118, 69, 100, 140, 121, 17,
1004 255, 17, 209, 144, 90, 3, 191, 201, 134, 108, 0, 196, 133, 153, 39, 248,
1005 138, 215, 73, 18, 21, 140, 172, 178, 154, 194, 170, 45, 112, 113, 213, 36,
1006 155, 0, 30, 213, 186, 39, 6, 241, 92, 111, 139, 52, 84, 58, 218, 187,
1007 60, 123, 113, 190, 185, 89, 242, 248, 221, 238, 173, 145, 214, 237, 133, 101,
1008 6, 143, 188, 116, 13, 189, 205, 203, 147, 140, 215, 175, 38, 99, 77, 54,
1009 98, 146, 54, 101, 40, 206, 175, 26, 195, 33, 63, 20, 210, 96, 227, 125,
1010 108, 230, 179, 123, 81, 135, 183, 132, 216, 56, 223, 197, 141, 158, 114, 228,
1011 67, 172, 95, 76, 69, 212, 188, 244, 12, 16, 158, 119, 106, 44, 39, 36,
1012 38, 164, 173, 182, 172, 210, 176, 19, 125, 6, 36, 138, 77, 65, 219, 30,
1013 45, 167, 21, 125, 49, 69, 173, 23, 242, 246, 25, 155, 194, 161, 140, 125,
1014 97, 153, 68, 120, 114, 23, 243, 242, 192, 129, 68, 88, 43, 161, 33, 152,
1015 130, 232, 179, 70, 156, 219, 198, 1, 135, 3, 178, 49, 92, 30, 125, 185,
1016 39, 185, 69, 143, 30, 180, 113, 109, 233, 156, 101, 82, 239, 142, 58, 234,
1017 151, 67, 2, 140, 198, 7, 180, 167, 33, 168, 131, 213, 157, 139, 43, 208,
1018 27, 217, 245, 115, 0, 59, 155, 69, 236, 209, 101, 139, 211, 247, 2, 41,
1019 113, 222, 7, 2, 109, 61, 232, 215, 145, 18, 202, 158, 187, 136, 54, 190,
1020 169, 13, 59, 204, 117, 37, 160, 6, 121, 200, 9, 189, 31, 0, 251, 78,
1021 223, 43, 122, 5, 42, 24, 74, 247, 241, 68, 42, 49, 28, 153, 3, 40,
1022 166, 47, 55, 83, 186, 236, 69, 132, 91, 115, 132, 26, 214, 160, 51, 161,
1023 232, 147, 172, 175, 144, 53, 58, 241, 1, 245, 53, 126, 211, 121, 98, 228,
1024 65, 166, 9, 186, 93, 111, 249, 87, 109, 85, 218, 177, 160, 225, 99, 131,
1025 167, 173, 36, 10, 121, 121, 98, 249, 99, 68, 128, 159, 217, 207, 65, 52,
1026 247, 53, 58, 135, 11, 76, 238, 101, 162, 166, 100, 126, 136, 157, 43, 172,
1027 186, 157, 138, 2, 132, 141, 165, 152, 92, 234, 3, 92, 81, 111, 83, 239,
1028 234, 204, 152, 240, 74, 198, 42, 56, 131, 104, 96, 83, 207, 109, 30, 185,
1029 45, 242, 2, 155, 47, 18, 111, 119, 57, 239, 7, 88, 45, 86, 239, 10,
1030 178, 146, 58, 248, 96, 166, 234, 253, 202, 224, 111, 120, 216, 70, 205, 29,
1031 154, 232, 216, 165, 222, 76, 153, 46, 5, 143, 71, 197, 175, 198, 127, 231,
1032 119, 110, 47, 128, 61, 134, 41, 115, 101, 3, 35, 127, 201, 12, 152, 1,
1033 163, 41, 91, 233, 10, 230, 150, 44, 140, 234, 164, 184, 214, 218, 114, 23,
1034 221, 163, 57, 2, 5, 147, 66, 223, 90, 238, 136, 95, 138, 116, 27, 91,
1035 223, 52, 243, 246, 183, 215, 166, 170, 169, 8, 140, 91, 173, 160, 160, 105,
1036 69, 241, 31, 33, 33, 148, 215, 67, 130, 181, 1, 114, 104, 206, 192, 195,
1037 247, 229, 99, 84, 29, 2, 132, 146, 191, 243, 37, 36, 46, 176, 164, 68,
1038 84, 121, 159, 6, 160, 195, 170, 43, 128, 130, 165, 44, 157, 83, 173, 182,
1039 93, 90, 202, 227, 133, 140, 39, 203, 202, 2, 49, 96, 178, 190, 147, 15,
1040 99, 71, 216, 166, 97, 130, 87, 4, 149, 23, 107, 246, 216, 213, 222, 64,
1041 41, 215, 37, 211, 21, 53, 90, 130, 165, 181, 188, 87, 70, 8, 53, 114,
1042 227, 18, 192, 19, 200, 195, 83, 228, 1, 171, 202, 229, 92, 92, 227, 48,
1043 251, 31, 198, 59, 162, 119, 9, 75, 115, 30, 127, 8, 89, 99, 249, 86,
1044 152, 198, 53, 207, 82, 251, 68, 82, 247, 21, 214, 18, 246, 118, 81, 94,
1045 240, 34, 174, 233, 205, 204, 71, 0, 254, 24, 178, 166, 248, 12, 70, 187,
1046 163, 168, 95, 23, 108, 156, 210, 244, 198, 216, 54, 32, 83, 158, 121, 26,
1047 116, 252, 122, 73, 188, 134, 154, 180, 229, 139, 102, 2, 8, 171, 201, 5,
1048 187, 57, 35, 254, 35, 19, 161, 16, 88, 215, 158, 148, 249, 201, 65, 177,
1049 144, 69, 138, 161, 220, 255, 190, 223, 43, 181, 11, 158, 103, 193, 14, 21,
1050 49, 16, 40, 223, 155, 12, 164, 23, 31, 15, 20, 238, 131, 85, 181, 80,
1051 149, 128, 196, 123, 155, 236, 9, 94, 252, 182, 54, 62, 215, 115, 115, 224,
1052 242, 141, 137, 238, 115, 101, 107, 65, 202, 79, 79, 27, 239, 29, 154, 19,
1053 18, 4, 185, 144, 191, 107, 92, 29, 38, 248, 142, 81, 109, 64, 161, 23,
1054 73, 93, 31, 114, 51, 81, 98, 209, 69, 27, 43, 22, 4, 168, 88, 60,
1055 149, 89, 100, 82, 122, 95, 21, 38, 97, 185, 87, 66, 82, 16, 242, 109,
1056 100, 94, 164, 6, 73, 130, 76, 137, 218, 226, 166, 35, 21, 156, 72, 253,
1057 148, 228, 142, 134, 41, 145, 15, 144, 215, 187, 120, 239, 195, 203, 44, 250,
1058 46, 72, 181, 43, 255, 81, 247, 100, 195, 248, 208, 115, 141, 32, 190, 131,
1059 77, 230, 220, 54, 197, 60, 22, 115, 177, 116, 250, 0, 60, 144, 128, 68,
1060 245, 231, 199, 216, 17, 216, 227, 120, 221, 68, 233, 236, 202, 121, 189, 237,
1061 149, 60, 244, 130, 250, 169, 70, 101, 147, 8, 49, 248, 61, 207, 202, 148,
1062 228, 87, 234, 117, 238, 52, 92, 118, 148, 203, 206, 175, 75, 64, 215, 57,
1063 70, 196, 52, 62, 29, 116, 241, 185, 96, 131, 201, 219, 16, 3, 188, 159,
1064 129, 134, 11, 138, 13, 3, 72, 193, 183, 236, 91, 171, 161, 52, 166, 23,
1065 254, 118, 238, 180, 55, 215, 165, 163, 154, 202, 27, 61, 150, 31, 12, 1,
1066 249, 0, 12, 29, 132, 213, 168, 105, 53, 112, 54, 2, 236, 131, 230, 3,
1067 211, 69, 243, 233, 173, 145, 105, 27, 18, 252, 224, 5, 46, 18, 233, 96,
1068 237, 143, 52, 67, 158, 30, 242, 151, 98, 148, 208, 60, 143, 14, 245, 250,
1069 185, 151, 111, 147, 145, 197, 165, 233, 18, 178, 240, 83, 228, 213, 237, 58,
1070 20, 152, 249, 241, 250, 204, 15, 167, 97, 242, 6, 228, 117, 133, 2, 199,
1071 220, 212, 239, 206, 104, 231, 145, 33, 17, 150, 223, 126, 173, 223, 148, 21,
1072 228, 41, 63, 37, 19, 102, 73, 95, 196, 40, 151, 2, 19, 239, 182, 22,
1073 178, 165, 242, 159, 208, 226, 72, 179, 201, 109, 157, 18, 230, 130, 221, 89,
1074 173, 242, 170, 11, 146, 20, 135, 112, 2, 202, 30, 25, 106, 151, 52, 223,
1075 1, 3, 18, 151, 74, 113, 49, 186, 112, 160, 121, 38, 233, 155, 188, 237,
1076 251, 178, 8, 200, 120, 134, 152, 22, 232, 250, 219, 237, 157, 23, 134, 158,
1077 122, 202, 120, 89, 248, 68, 46, 184, 180, 93, 84, 85, 177, 236, 62, 50,
1078 103, 62, 81, 105, 33, 15, 97, 203, 192, 132, 219, 70, 203, 104, 162, 98,
1079 179, 224, 44, 101, 221, 84, 176, 97, 77, 84, 45, 255, 227, 80, 107, 45,
1080 70, 106, 68, 206, 134, 182, 205, 255, 235, 44, 131, 81, 126, 142, 30, 130,
1081 87, 133, 227, 15, 200, 194, 5, 230, 230, 169, 65, 116, 104, 193, 196, 214,
1082 18, 199, 56, 114, 5, 7, 189, 158, 32, 119, 53, 93, 169, 172, 141, 223,
1083 71, 194, 204, 221, 237, 118, 16, 198, 169, 10, 38, 156, 152, 76, 185, 73,
1084 15, 227, 118, 57, 149, 160, 14, 158, 18, 139, 117, 249, 142, 12, 175, 252,
1085 9, 202, 65, 196, 23, 211, 174, 169, 85, 244, 154, 239, 28, 199, 196, 171,
1086 241, 27, 140, 222, 54, 25, 229, 69, 102, 134, 125, 235, 246, 156, 41, 75,
1087 212, 225, 169, 207, 88, 246, 136, 176, 27, 40, 205, 228, 239, 24, 217, 42,
1088 212, 63, 187, 75, 60, 197, 97, 245, 3, 35, 243, 128, 36, 129, 145, 31,
1089 27, 193, 20, 122, 116, 143, 130, 159, 80, 203, 253, 233, 66, 118, 92, 177,
1090 83, 55, 141, 189, 115, 240, 125, 107, 8, 221, 237, 171, 24, 183, 220, 174,
1091 149, 51, 81, 221, 187, 233, 21, 116, 37, 88, 123, 20, 208, 201, 141, 155,
1092 136, 148, 64, 14, 102, 204, 248, 173, 249, 61, 75, 253, 199, 46, 192, 138,
1093 79, 83, 161, 127, 235, 140, 173, 158, 127, 232, 77, 17, 45, 207, 154, 51,
1094 79, 57, 184, 22, 220, 225, 61, 233, 188, 119, 221, 254, 87, 105, 151, 29,
1095 156, 162, 18, 202, 244, 36, 105, 24, 240, 195, 198, 39, 31, 155, 135, 62,
1096 220, 180, 53, 70, 121, 254, 234, 194, 79, 177, 181, 75, 23, 20, 217, 209,
1097 107, 100, 175, 83, 25, 212, 62, 11, 108, 33, 144, 17, 150, 176, 225, 86,
1098 54, 190, 8, 82, 150, 219, 80, 72, 75, 100, 197, 72, 95, 174, 189, 158,
1099 109, 146, 103, 67, 101, 165, 191, 178, 148, 32, 173, 147, 195, 145, 27, 119,
1100 126, 46, 186, 120, 226, 41, 209, 51, 171, 29, 4, 244, 184, 209, 92, 159,
1101 221, 122, 163, 30, 246, 68, 8, 190, 146, 143, 159, 116, 211, 83, 247, 90,
1102 241, 193, 10, 58, 250, 60, 69, 182, 204, 181, 207, 107, 37, 104, 150, 14,
1103 69, 55, 20, 7, 158, 96, 202, 248, 68, 220, 209, 132, 133, 164, 58, 175,
1104 103, 166, 1, 174, 0, 32, 182, 13, 199, 83, 48, 148, 52, 198, 19, 135,
1105 58, 46, 109, 164, 49, 199, 26, 109, 132, 19, 46, 118, 59, 27, 202, 73,
1106 4, 1, 22, 183, 163, 247, 45, 96, 206, 43, 239, 186, 131, 5, 61, 198,
1107 46, 99, 31, 89, 194, 241, 207, 170, 80, 250, 72, 225, 89, 154, 151, 165,
1108 171, 42, 59, 58, 68, 73, 178, 88, 153, 111, 247, 233, 19, 130, 51, 194,
1109 18, 142, 129, 52, 252, 167, 183, 238, 99, 198, 85, 134, 20, 114, 94, 90,
1110 7, 223, 147, 178, 135, 156, 216, 69, 14, 42, 181, 232, 203, 63, 239, 213,
1111 42, 225, 189, 223, 15, 238, 219, 62, 218, 15, 210, 141, 184, 226, 11, 228,
1112 9, 40, 37, 118, 26, 194, 213, 220, 99, 247, 7, 137, 187, 61, 64, 56,
1113 86, 169, 143, 224, 135, 166, 4, 28, 55, 87, 216, 45, 56, 39, 37, 181,
1114 234, 38, 4, 241, 184, 43, 134, 108, 245, 247, 230, 99, 162, 95, 214, 92,
1115 191, 83, 38, 152, 241, 38, 33, 32, 38, 92, 222, 228, 138, 11, 143, 135,
1116 83, 181, 140, 99, 9, 252, 123, 215, 212, 81, 108, 71, 2, 159, 246, 82,
1117 118, 186, 48, 69, 212, 147, 218, 61, 183, 170, 130, 233, 227, 145, 101, 156,
1118 20, 106, 128, 214, 238, 12, 163, 59, 152, 250, 112, 173, 42, 5, 1, 68,
1119 35, 52, 13, 198, 121, 11, 117, 16, 126, 143, 54, 184, 205, 44, 238, 47,
1120 218, 75, 112, 228, 183, 55, 22, 189, 35, 146, 27, 44, 229, 190, 241, 110,
1121 42, 152, 12, 141, 131, 183, 84, 31, 40, 185, 108, 176, 173, 247, 217, 214,
1122 155, 108, 176, 152, 201, 201, 185, 7, 227, 187, 87, 71, 45, 98, 224, 159,
1123 125, 230, 132, 19, 233, 98, 174, 93, 80, 245, 32, 94, 253, 35, 150, 68,
1124 176, 83, 50, 127, 196, 149, 176, 191, 136, 194, 84, 228, 106, 238, 47, 206,
1125 110, 204, 9, 116, 136, 230, 249, 90, 215, 160, 51, 151, 61, 92, 187, 82,
1126 129, 101, 75, 238, 22, 166, 132, 86, 183, 113, 149, 215, 39, 242, 214, 148,
1127 71, 168, 236, 20, 105, 249, 219, 23, 101, 63, 92, 173, 40, 126, 253, 145,
1128 161, 9, 72, 60, 215, 59, 155, 228, 255, 201, 193, 60, 129, 51, 29, 207,
1129 237, 43, 145, 161, 41, 115, 98, 19, 138, 253, 66, 232, 233, 186, 79, 114,
1130 1, 164, 184, 14, 61, 151, 198, 60, 247, 115, 5, 176, 132, 201, 245, 60,
1131 21, 238, 60, 133, 186, 18, 154, 89, 170, 23, 102, 2, 111, 147, 25, 208,
1132 152, 173, 13, 58, 125, 181, 115, 218, 196, 107, 173, 192, 60, 94, 140, 254,
1133 83, 80, 214, 220, 245, 254, 250, 39, 202, 132, 142, 84, 16, 199, 20, 129,
1134 159, 24, 18, 123, 143, 157, 176, 199, 173, 56, 169, 222, 252, 63, 27, 242,
1135 137, 138, 253, 143, 4, 209, 124, 86, 243, 170, 152, 121, 231, 24, 238, 35,
1136 113, 27, 205, 59, 153, 161, 234, 65, 153, 237, 97, 197, 98, 216, 129, 30,
1137 174, 211, 193, 167, 102, 229, 240, 198, 85, 193, 253, 73, 118, 185, 63, 3,
1138 227, 165, 139, 38, 109, 214, 108, 253, 48, 227, 253, 219, 1, 226, 89, 47,
1139 145, 86, 8, 234, 146, 159, 230, 108, 212, 111, 112, 129, 121, 28, 164, 105,
1140 138, 143, 106, 132, 254, 202, 177, 171, 123, 38, 162, 112, 97, 88, 221, 95,
1141 5, 161, 222, 76, 234, 253, 239, 231, 13, 62, 243, 80, 164, 204, 67, 229,
1142 43, 103, 152, 30, 131, 240, 218, 184, 149, 161, 234, 124, 238, 126, 33, 234,
1143 133, 1, 201, 113, 176, 190, 231, 215, 99, 64, 219, 224, 29, 217, 23, 232,
1144 185, 215, 56, 14, 128, 31, 227, 227, 80, 213, 239, 224, 36, 144, 26, 243,
1145 36, 181, 129, 69, 104, 55, 42, 212, 27, 252, 74, 173, 196, 255, 96, 153,
1146 53, 3, 99, 13, 167, 244, 183, 92, 231, 140, 210, 116, 98, 36, 187, 126,
1147 84, 77, 144, 109, 126, 138, 53, 237, 100, 96, 209, 68, 204, 61, 104, 246,
1148 64, 35, 98, 99, 82, 152, 68, 118, 51, 82, 101, 136, 76, 149, 234, 135,
1149 110, 37, 167, 154, 17, 145, 150, 148, 89, 184, 123, 108, 255, 2, 49, 98,
1150 101, 125, 88, 110, 2, 146, 130, 120, 212, 249, 21, 164, 164, 161, 47, 201,
1151 70, 114, 46, 149, 0, 88, 142, 60, 228, 58, 181, 175, 207, 222, 199, 81,
1152 135, 121, 200, 205, 143, 132, 31, 93, 179, 202, 132, 84, 3, 19, 40, 190,
1153 99, 120, 38, 42, 165, 159, 18, 153, 99, 212, 120, 4, 237, 237, 8, 57,
1154 69, 228, 186, 220, 183, 121, 139, 113, 179, 200, 21, 166, 75, 19, 149, 135,
1155 138, 170, 149, 14, 166, 110, 94, 129, 233, 66, 187, 163, 213, 96, 172, 4,
1156 145, 205, 41, 25, 97, 26, 66, 99, 104, 172, 227, 73, 193, 35, 142, 228,
1157 202, 85, 209, 10, 77, 47, 21, 8, 14, 215, 104, 211, 62, 186, 19, 226,
1158 180, 187, 81, 140, 101, 188, 252, 173, 1, 242, 9, 66, 177, 73, 5, 79,
1159 230, 53, 67, 28, 207, 98, 199, 52, 27, 66, 153, 200, 135, 247, 246, 210,
1160 128, 156, 173, 249, 92, 165, 93, 112, 247, 110, 0, 133, 56, 64, 199, 71,
1161 135, 104, 242, 50, 218, 28, 242, 216, 223, 229, 92, 19, 39, 36, 161, 233,
1162 104, 205, 56, 92, 20, 44, 81, 244, 215, 85, 116, 79, 44, 104, 236, 197,
1163 72, 17, 157, 105, 213, 76, 90, 85, 9, 54, 76, 248, 27, 39, 175, 107,
1164 79, 142, 31, 140, 48, 194, 73, 214, 79, 131, 65, 191, 175, 211, 154, 225,
1165 182, 226, 90, 169, 178, 95, 71, 89, 3, 4, 83, 27, 152, 218, 67, 67,
1166 225, 90, 159, 244, 215, 227, 41, 53, 214, 40, 178, 86, 46, 92, 27, 200,
1167 104, 126, 203, 185, 150, 90, 220, 210, 140, 33, 238, 113, 54, 31, 121, 4,
1168 49, 132, 62, 250, 9, 180, 120, 241, 248, 86, 67, 254, 57, 166, 141, 34,
1169 165, 218, 73, 167, 166, 85, 50, 191, 136, 177, 212, 175, 133, 8, 30, 106,
1170 201, 100, 208, 40, 119, 107, 182, 231, 27, 237, 58, 22, 225, 63, 21, 160,
1171 176, 7, 223, 124, 229, 53, 246, 170, 155, 70, 75, 68, 204, 221, 146, 48,
1172 109, 153, 25, 0, 157, 54, 208, 220, 240, 216, 113, 30, 230, 30, 46, 139,
1173 116, 215, 222, 10, 247, 103, 24, 86, 125, 8, 77, 202, 39, 152, 10, 225,
1174 131, 18, 117, 227, 249, 127, 160, 143, 86, 128, 207, 99, 207, 224, 42, 110,
1175 232, 36, 86, 179, 249, 138, 84, 121, 50, 5, 149, 93, 7, 200, 115, 209,
1176 110, 152, 124, 77, 52, 79, 221, 157, 195, 140, 54, 19, 60, 205, 158, 199,
1177 127, 207, 7, 117, 11, 227, 197, 72, 199, 187, 184, 43, 95, 0, 61, 143,
1178 176, 207, 65, 130, 87, 82, 140, 181, 182, 184, 223, 238, 244, 209, 170, 7,
1179 11, 100, 83, 5, 98, 125, 26, 188, 40, 137, 242, 22, 249, 227, 184, 80,
1180 44, 145, 32, 143, 254, 218, 115, 107, 76, 139, 212, 87, 253, 12, 11, 121,
1181 216, 159, 121, 87, 182, 101, 205, 151, 5, 0, 126, 150, 6, 166, 115, 36,
1182 14, 128, 159, 126, 200, 42, 189, 146, 192, 223, 186, 35, 71, 224, 63, 33,
1183 211, 207, 93, 66, 201, 31, 66, 220, 66, 97, 107, 95, 157, 213, 92, 81,
1184 217, 125, 242, 101, 243, 184, 255, 155, 2, 165, 9, 143, 103, 243, 133, 173,
1185 202, 202, 40, 221, 73, 177, 248, 57, 243, 125, 130, 127, 102, 47, 3, 227,
1186 27, 203, 33, 179, 249, 117, 28, 112, 157, 0, 210, 139, 43, 15, 192, 47,
1187 202, 45, 132, 10, 26, 163, 47, 220, 65, 169, 225, 235, 120, 57, 25, 176,
1188 206, 16, 38, 110, 84, 145, 28, 43, 63, 35, 144, 234, 249, 59, 22, 152,
1189 16, 175, 248, 2, 6, 109, 55, 92, 124, 77, 237, 166, 207, 82, 238, 140,
1190 22, 30, 214, 144, 177, 182, 229, 27, 180, 150, 186, 187, 231, 184, 242, 23,
1191 178, 119, 36, 24, 165, 82, 15, 195, 55, 147, 107, 45, 198, 133, 194, 95,
1192 20, 146, 8, 222, 235, 67, 80, 119, 234, 48, 223, 163, 51, 60, 217, 228,
1193 171, 195, 231, 250, 46, 111, 138, 143, 1, 48, 174, 116, 197, 186, 40, 61,
1194 177, 53, 65, 225, 171, 95, 186, 209, 199, 254, 152, 98, 179, 71, 140, 127,
1195 193, 177, 171, 61, 227, 117, 130, 92, 148, 43, 199, 156, 176, 219, 52, 218,
1196 133, 160, 123, 11, 221, 104, 254, 253, 144, 156, 245, 5, 156, 246, 226, 198,
1197 222, 172, 246, 13, 35, 210, 51, 99, 203, 213, 159, 248, 139, 71, 77, 120,
1198 75, 195, 89, 11, 122, 125, 43, 57, 30, 233, 45, 10, 87, 102, 171, 47,
1199 21, 167, 175, 143, 207, 121, 98, 48, 220, 247, 72, 184, 97, 83, 152, 72,
1200 51, 136, 17, 52, 249, 169, 8, 140, 219, 152, 5, 221, 132, 225, 17, 117,
1201 28, 72, 220, 69, 199, 108, 140, 175, 206, 165, 41, 39, 77, 194, 249, 154,
1202 121, 23, 85, 205, 128, 34, 118, 49, 220, 85, 5, 240, 181, 26, 210, 29,
1203 177, 24, 132, 91, 57, 218, 74, 217, 135, 225, 148, 82, 95, 98, 54, 127,
1204 58, 1, 85, 12, 122, 2, 58, 81, 16, 32, 168, 153, 186, 97, 214, 81,
1205 176, 244, 134, 168, 111, 127, 21, 251, 227, 215, 141, 191, 141, 90, 21, 177,
1206 142, 172, 29, 212, 128, 163, 54, 172, 20, 35, 174, 1, 225, 232, 74, 73,
1207 226, 154, 236, 45, 211, 64, 28, 142, 90, 175, 147, 230, 243, 66, 160, 207,
1208 186, 212, 201, 34, 58, 202, 236, 9, 218, 10, 226, 189, 74, 106, 75, 43,
1209 93, 1, 5, 162, 36, 42, 54, 86, 83, 35, 242, 114, 165, 93, 76, 8,
1210 94, 21, 110, 101, 241, 119, 219, 78, 115, 182, 5, 105, 116, 73, 50, 193,
1211 102, 254, 43, 197, 64, 236, 6, 105, 84, 206, 79, 127, 195, 151, 106, 76,
1212 122, 173, 234, 203, 34, 20, 204, 34, 195, 244, 209, 60, 32, 112, 157, 150,
1213 185, 49, 35, 11, 41, 230, 21, 63, 137, 1, 127, 147, 193, 77, 136, 174,
1214 109, 122, 243, 119, 160, 26, 5, 187, 191, 90, 83, 26, 214, 237, 162, 198,
1215 184, 179, 204, 246, 113, 43, 145, 228, 4, 250, 28, 187, 22, 149, 121, 67,
1216 94, 202, 229, 64, 35, 204, 174, 106, 180, 40, 224, 146, 117, 146, 217, 9,
1217 29, 22, 202, 177, 96, 25, 165, 0, 97, 146, 120, 15, 29, 230, 203, 30,
1218 181, 73, 37, 59, 38, 156, 8, 123, 215, 252, 229, 157, 240, 58, 91, 78,
1219 3, 189, 39, 232, 28, 175, 195, 69, 94, 127, 176, 218, 32, 40, 236, 113,
1220 175, 110, 241, 181, 238, 15, 46, 106, 58, 170, 48, 58, 254, 253, 190, 204,
1221 172, 214, 31, 202, 150, 134, 97, 230, 224, 255, 121, 206, 110, 102, 224, 49,
1222 94, 248, 23, 109, 243, 23, 208, 50, 120, 155, 166, 16, 193, 8, 111, 212,
1223 88, 114, 163, 247, 255, 144, 18, 87, 92, 47, 60, 250, 35, 102, 101, 150,
1224 228, 34, 28, 18, 59, 175, 136, 120, 186, 193, 15, 151, 143, 76, 54, 96,
1225 157, 183, 62, 4, 245, 231, 132, 94, 131, 139, 192, 253, 72, 194, 242, 7,
1226 202, 19, 20, 245, 122, 114, 177, 101, 133, 107, 109, 109, 112, 151, 71, 239,
1227 115, 43, 157, 185, 57, 149, 27, 82, 191, 118, 114, 80, 96, 115, 166, 79,
1228 166, 59, 23, 91, 223, 159, 217, 68, 63, 155, 173, 200, 73, 32, 199, 233,
1229 241, 206, 133, 125, 89, 87, 71, 172, 91, 56, 219, 233, 115, 26, 63, 53,
1230 98, 209, 57, 151, 243, 141, 54, 139, 107, 120, 252, 89, 249, 133, 67, 85,
1231 144, 135, 86, 238, 9, 133, 115, 95, 92, 97, 212, 81, 117, 70, 225, 199,
1232 123, 49, 84, 16, 84, 19, 134, 156, 33, 78, 195, 79, 191, 112, 44, 206,
1233 81, 249, 191, 4, 106, 159, 152, 246, 185, 246, 125, 7, 186, 106, 239, 25,
1234 144, 121, 78, 194, 199, 195, 218, 118, 189, 66, 2, 220, 105, 0, 77, 65,
1235 137, 55, 169, 82, 156, 126, 146, 139, 71, 44, 247, 210, 45, 171, 110, 252,
1236 221, 51, 80, 157, 164, 99, 10, 241, 175, 65, 32, 180, 254, 187, 89, 223,
1237 231, 227, 216, 197, 99, 217, 65, 187, 235, 152, 63, 74, 176, 36, 170, 236,
1238 134, 46, 98, 13, 108, 160, 126, 185, 245, 100, 96, 40, 240, 69, 171, 10,
1239 2, 141, 57, 105, 56, 82, 168, 46, 126, 161, 5, 219, 126, 1, 1, 165,
1240 92, 219, 81, 202, 86, 78, 174, 209, 195, 7, 142, 244, 119, 255, 115, 242,
1241 220, 11, 168, 135, 5, 71, 145, 137, 108, 10, 17, 30, 178, 142, 202, 147,
1242 24, 141, 161, 192, 79, 54, 62, 142, 239, 66, 209, 248, 101, 134, 83, 10,
1243 119, 121, 22, 240, 25, 227, 60, 180, 18, 46, 164, 105, 89, 30, 196, 167,
1244 206, 32, 32, 76, 54, 35, 10, 210, 170, 114, 127, 0, 216, 28, 71, 6,
1245 216, 15, 56, 201, 194, 246, 115, 182, 231, 202, 62, 218, 93, 252, 151, 125,
1246 48, 231, 133, 89, 67, 175, 88, 80, 25, 208, 80, 251, 226, 12, 4, 225,
1247 125, 37, 78, 202, 227, 212, 179, 219, 234, 223, 207, 188, 126, 214, 22, 59,
1248 134, 161, 108, 10, 115, 65, 40, 68, 211, 192, 129, 64, 163, 178, 183, 164,
1249 98, 212, 20, 146, 25, 16, 154, 29, 176, 107, 3, 15, 62, 226, 67, 119,
1250 189, 45, 123, 187, 83, 222, 206, 56, 135, 242, 121, 61, 220, 133, 171, 150,
1251 139, 221, 69, 112, 13, 183, 180, 76, 97, 122, 168, 79, 203, 136, 62, 161,
1252 138, 40, 253, 182, 3, 51, 229, 58, 195, 79, 191, 203, 248, 191, 180, 101,
1253 40, 189, 22, 127, 67, 139, 219, 213, 78, 11, 67, 215, 82, 41, 107, 54,
1254 143, 72, 223, 89, 246, 156, 91, 11, 157, 16, 225, 237, 213, 148, 187, 201,
1255 233, 101, 70, 211, 201, 113, 164, 185, 140, 169, 130, 42, 1, 222, 92, 59,
1256 66, 17, 108, 67, 197, 192, 251, 55, 203, 109, 189, 230, 131, 237, 215, 241,
1257 65, 148, 253, 241, 39, 141, 155, 148, 156, 244, 12, 68, 71, 109, 235, 241,
1258 4, 161, 177, 218, 114, 173, 113, 146, 11, 3, 219, 33, 141, 215, 62, 45,
1259 215, 184, 196, 97, 162, 250, 218, 110, 1, 190, 8, 67, 241, 94, 82, 196,
1260 64, 85, 118, 139, 240, 71, 67, 49, 241, 49, 129, 247, 44, 211, 46, 227,
1261 115, 140, 123, 192, 63, 82, 9, 155, 83, 167, 250, 70, 61, 66, 186, 217,
1262 46, 155, 128, 255, 232, 56, 224, 32, 254, 12, 204, 2, 85, 173, 20, 75,
1263 214, 73, 229, 18, 247, 145, 83, 241, 20, 245, 155, 15, 92, 111, 180, 101,
1264 179, 246, 5, 243, 112, 196, 44, 146, 16, 128, 155, 80, 106, 147, 110, 87,
1265 96, 17, 243, 247, 21, 87, 149, 78, 248, 20, 153, 249, 196, 11, 177, 96,
1266 227, 185, 136, 7, 244, 54, 177, 91, 192, 193, 111, 21, 159, 105, 143, 236,
1267 167, 215, 244, 121, 207, 245, 202, 161, 215, 45, 233, 32, 123, 220, 57, 34,
1268 171, 115, 37, 163, 75, 253, 140, 232, 51, 143, 204, 252, 146, 168, 85, 148,
1269 201, 161, 181, 231, 125, 44, 172, 79, 210, 12, 147, 82, 38, 254, 157, 225,
1270 167, 230, 182, 123, 63, 141, 146, 152, 136, 190, 80, 156, 163, 231, 33, 184,
1271 58, 200, 134, 28, 70, 202, 88, 195, 39, 224, 159, 154, 206, 183, 11, 96,
1272 102, 136, 26, 238, 179, 189, 226, 18, 30, 188, 148, 25, 3, 252, 154, 142,
1273 147, 145, 126, 11, 55, 1, 3, 108, 144, 55, 251, 167, 54, 127, 180, 216,
1274 77, 70, 138, 95, 166, 90, 48, 2, 211, 236, 235, 131, 107, 251, 91, 238,
1275 255, 0, 113, 41, 243, 14, 241, 252, 163, 99, 74, 25, 172, 87, 125, 36,
1276 203, 96, 189, 125, 222, 165, 138, 25, 76, 136, 67, 137, 161, 22, 232, 31,
1277 5, 96, 146, 214, 146, 21, 181, 198, 199, 34, 190, 63, 191, 201, 104, 116,
1278 123, 201, 64, 128, 84, 139, 86, 102, 244, 241, 162, 126, 4, 9, 132, 2,
1279 53, 113, 21, 1, 95, 7, 212, 123, 252, 100, 87, 78, 71, 28, 131, 135,
1280 183, 72, 196, 33, 66, 237, 12, 135, 58, 102, 69, 234, 214, 244, 57, 44,
1281 181, 120, 156, 218, 99, 146, 97, 15, 77, 113, 179, 142, 113, 226, 38, 72,
1282 128, 211, 160, 95, 52, 181, 30, 200, 64, 234, 8, 229, 150, 219, 225, 30,
1283 162, 223, 52, 242, 29, 31, 226, 91, 102, 235, 127, 213, 105, 123, 11, 172,
1284 190, 152, 59, 69, 1, 253, 126, 19, 145, 99, 33, 26, 198, 80, 74, 47,
1285 59, 77, 158, 60, 231, 51, 65, 145, 210, 232, 71, 100, 73, 71, 176, 239,
1286 42, 124, 176, 31, 254, 64, 223, 51, 195, 108, 165, 78, 202, 174, 212, 32,
1287 157, 58, 145, 133, 84, 230, 17, 206, 107, 72, 89, 129, 240, 179, 56, 231,
1288 218, 55, 236, 231, 122, 137, 50, 245, 171, 107, 223, 86, 17, 155, 68, 241,
1289 220, 120, 38, 95, 74, 110, 214, 202, 223, 60, 35, 120, 33, 79, 32, 58,
1290 77, 28, 121, 180, 99, 64, 201, 81, 156, 37, 28, 254, 219, 153, 74, 200,
1291 178, 70, 252, 140, 137, 127, 195, 238, 103, 228, 44, 96, 216, 12, 198, 246,
1292 206, 130, 67, 71, 129, 114, 145, 168, 64, 145, 128, 169, 169, 11, 28, 145,
1293 64, 144, 92, 206, 171, 135, 128, 121, 84, 142, 75, 37, 199, 208, 97, 243,
1294 114, 58, 152, 244, 201, 119, 76, 178, 3, 128, 185, 252, 146, 38, 165, 53,
1295 186, 175, 102, 81, 233, 115, 190, 227, 19, 31, 134, 132, 114, 24, 2, 21,
1296 249, 228, 128, 74, 119, 144, 74, 43, 168, 201, 131, 175, 254, 42, 103, 23,
1297 94, 138, 61, 40, 129, 252, 51, 80, 150, 135, 133, 55, 54, 122, 187, 93,
1298 42, 9, 154, 50, 93, 143, 241, 26, 80, 108, 7, 51, 144, 218, 129, 48,
1299 168, 66, 150, 108, 86, 127, 156, 232, 5, 54, 7, 182, 73, 210, 46, 115,
1300 84, 145, 113, 254, 195, 166, 106, 119, 116, 233, 154, 170, 185, 255, 99, 223,
1301 133, 115, 122, 10, 210, 76, 123, 92, 28, 159, 138, 133, 70, 126, 240, 215,
1302 36, 119, 180, 221, 156, 46, 89, 71, 1, 175, 247, 102, 107, 67, 136, 62,
1303 142, 197, 212, 50, 159, 107, 254, 44, 30, 59, 234, 51, 55, 35, 103, 170,
1304 231, 41, 111, 178, 14, 27, 77, 40, 43, 88, 199, 148, 211, 140, 17, 59,
1305 84, 182, 195, 92, 230, 109, 218, 165, 117, 39, 234, 195, 94, 70, 151, 202,
1306 167, 17, 179, 205, 213, 68, 102, 11, 120, 210, 150, 47, 150, 115, 186, 81,
1307 137, 53, 132, 36, 224, 107, 115, 100, 143, 118, 212, 239, 176, 139, 243, 36,
1308 235, 189, 48, 43, 25, 130, 143, 2, 165, 117, 173, 63, 189, 86, 180, 83,
1309 22, 204, 226, 141, 78, 199, 226, 195, 94, 183, 88, 103, 180, 205, 96, 254,
1310 235, 65, 144, 231, 11, 193, 111, 52, 129, 110, 125, 68, 42, 234, 138, 118,
1311 112, 69, 178, 191, 213, 115, 230, 221, 222, 97, 60, 187, 154, 161, 24, 25,
1312 147, 205, 69, 47, 45, 241, 84, 238, 249, 129, 6, 107, 126, 245, 187, 62,
1313 247, 159, 178, 6, 100, 80, 244, 229, 53, 83, 186, 208, 116, 164, 83, 217,
1314 76, 21, 191, 207, 44, 19, 21, 253, 153, 84, 92, 96, 41, 9, 10, 187,
1315 82, 155, 222, 146, 71, 130, 217, 44, 75, 51, 56, 119, 4, 77, 141, 46,
1316 0, 97, 157, 176, 42, 30, 102, 41, 39, 48, 191, 201, 226, 156, 80, 24,
1317 28, 109, 150, 215, 254, 211, 17, 87, 114, 111, 250, 7, 60, 233, 55, 121,
1318 139, 121, 167, 213, 0, 106, 85, 183, 122, 254, 65, 52, 95, 129, 197, 156,
1319 125, 235, 47, 46, 191, 44, 139, 244, 217, 239, 216, 228, 14, 234, 216, 19,
1320 13, 124, 221, 166, 60, 124, 187, 83, 242, 154, 57, 182, 125, 172, 123, 100,
1321 165, 156, 196, 254, 19, 73, 234, 83, 209, 242, 17, 54, 12, 115, 163, 148,
1322 32, 146, 41, 86, 171, 11, 77, 71, 162, 203, 42, 153, 71, 217, 254, 31,
1323 214, 184, 58, 41, 245, 132, 249, 54, 172, 163, 225, 203, 205, 52, 64, 105,
1324 110, 128, 162, 176, 118, 243, 173, 173, 69, 11, 98, 19, 183, 83, 247, 5,
1325 137, 91, 192, 122, 15, 151, 125, 192, 220, 207, 6, 118, 84, 8, 86, 196,
1326 88, 59, 246, 8, 250, 10, 27, 7, 233, 225, 220, 213, 222, 239, 138, 177,
1327 173, 63, 58, 16, 68, 113, 218, 216, 24, 25, 147, 176, 232, 249, 135, 194,
1328 5, 26, 37, 110, 251, 13, 178, 55, 28, 116, 84, 162, 145, 153, 117, 194,
1329 41, 16, 179, 64, 121, 52, 127, 232, 232, 53, 135, 212, 72, 122, 32, 112,
1330 152, 10, 241, 217, 107, 3, 99, 91, 115, 88, 107, 146, 120, 22, 156, 153,
1331 68, 104, 212, 39, 76, 144, 54, 58, 61, 91, 212, 96, 139, 35, 184, 37,
1332 17, 55, 223, 15, 75, 18, 55, 124, 232, 21, 10, 147, 24, 221, 23, 87,
1333 186, 27, 152, 51, 247, 112, 63, 56, 89, 180, 195, 67, 89, 105, 236, 102,
1334 235, 57, 17, 45, 151, 91, 186, 224, 171, 11, 149, 111, 102, 149, 50, 144,
1335 250, 243, 179, 20, 251, 203, 229, 228, 190, 33, 209, 254, 237, 112, 60, 222,
1336 179, 19, 224, 4, 78, 246, 239, 248, 80, 169, 180, 71, 190, 29, 178, 253,
1337 130, 207, 77, 202, 16, 108, 142, 201, 238, 135, 247, 155, 237, 187, 243, 139,
1338 247, 21, 141, 125, 213, 34, 106, 183, 4, 125, 40, 8, 104, 128, 73, 121,
1339 163, 122, 190, 121, 152, 45, 174, 52, 181, 139, 254, 242, 146, 36, 163, 183,
1340 147, 27, 234, 160, 222, 93, 232, 251, 153, 185, 158, 215, 9, 86, 49, 72,
1341 87, 154, 88, 169, 82, 186, 198, 240, 104, 92, 129, 217, 12, 124, 113, 206,
1342 117, 116, 149, 159, 149, 124, 219, 138, 96, 50, 177, 145, 244, 8, 232, 218,
1343 158, 22, 70, 31, 52, 226, 90, 7, 187, 135, 66, 35, 193, 62, 122, 72,
1344 201, 100, 66, 137, 236, 158, 187, 195, 107, 234, 27, 155, 187, 221, 131, 2,
1345 167, 165, 18, 225, 67, 72, 190, 63, 136, 69, 32, 185, 181, 234, 159, 57,
1346 4, 101, 127, 121, 3, 2, 235, 220, 44, 245, 160, 71, 64, 175, 55, 135,
1347 83, 250, 217, 239, 121, 81, 181, 160, 151, 70, 56, 101, 74, 169, 142, 167,
1348 10, 179, 233, 140, 156, 203, 110, 15, 95, 15, 8, 169, 164, 40, 43, 50,
1349 148, 216, 167, 161, 36, 142, 145, 126, 236, 167, 154, 120, 110, 239, 138, 53,
1350 152, 233, 115, 33, 203, 253, 249, 174, 176, 43, 0, 178, 120, 133, 211, 252,
1351 95, 221, 221, 185, 36, 145, 53, 15, 125, 26, 232, 42, 249, 86, 8, 205,
1352 183, 114, 81, 62, 187, 162, 4, 251, 26, 79, 159, 156, 42, 7, 83, 97,
1353 14, 124, 38, 252, 215, 34, 141, 252, 226, 61, 237, 252, 114, 117, 187, 21,
1354 53, 236, 151, 9, 147, 40, 68, 63, 10, 166, 84, 236, 0, 169, 196, 239,
1355 107, 214, 32, 53, 142, 172, 22, 245, 22, 154, 150, 105, 223, 5, 178, 48,
1356 151, 191, 251, 63, 50, 255, 54, 206, 221, 49, 249, 35, 133, 197, 248, 47,
1357 155, 185, 108, 172, 179, 104, 121, 72, 25, 83, 78, 205, 136, 136, 250, 47,
1358 68, 179, 166, 229, 237, 212, 214, 104, 191, 88, 159, 43, 30, 168, 89, 25,
1359 137, 79, 142, 7, 237, 19, 230, 87, 255, 20, 182, 27, 217, 197, 80, 45,
1360 119, 115, 241, 181, 96, 155, 160, 62, 57, 162, 103, 171, 196, 214, 243, 194,
1361 41, 223, 187, 22, 4, 157, 139, 4, 98, 193, 171, 27, 217, 8, 27, 100,
1362 222, 30, 235, 4, 127, 97, 243, 231, 102, 37, 47, 237, 58, 79, 189, 143,
1363 193, 144, 0, 150, 183, 0, 100, 29, 130, 166, 233, 150, 241, 61, 175, 23,
1364 56, 239, 24, 59, 143, 79, 27, 23, 124, 4, 9, 207, 73, 21, 181, 227,
1365 80, 149, 79, 226, 85, 110, 255, 126, 11, 66, 167, 203, 91, 50, 255, 189,
1366 91, 50, 79, 115, 160, 201, 112, 13, 25, 100, 68, 8, 218, 253, 185, 90,
1367 85, 79, 74, 27, 123, 23, 229, 57, 97, 91, 127, 106, 189, 186, 213, 74,
1368 233, 11, 137, 181, 51, 79, 108, 16, 145, 67, 82, 93, 245, 199, 182, 112,
1369 114, 208, 100, 151, 117, 222, 34, 187, 232, 137, 114, 251, 117, 217, 153, 37,
1370 215, 22, 113, 249, 198, 21, 184, 245, 107, 107, 27, 224, 2, 158, 165, 155,
1371 155, 104, 108, 215, 105, 154, 76, 171, 175, 245, 245, 206, 227, 85, 231, 208,
1372 127, 196, 191, 48, 150, 44, 38, 194, 191, 59, 10, 10, 175, 148, 162, 163,
1373 122, 167, 207, 145, 105, 234, 57, 199, 40, 112, 205, 98, 242, 238, 38, 68,
1374 192, 158, 91, 141, 80, 54, 12, 193, 215, 8, 201, 136, 185, 229, 109, 175,
1375 25, 245, 209, 147, 197, 233, 17, 80, 189, 150, 49, 218, 246, 78, 30, 112,
1376 64, 212, 109, 75, 232, 228, 171, 102, 239, 219, 152, 158, 217, 121, 43, 174,
1377 99, 82, 7, 113, 222, 107, 164, 30, 205, 236, 152, 19, 157, 60, 82, 165,
1378 34, 117, 23, 166, 185, 209, 212, 7, 250, 32, 167, 172, 234, 117, 139, 110,
1379 191, 14, 44, 158, 95, 115, 126, 115, 234, 209, 174, 95, 163, 117, 243, 203,
1380 182, 113, 182, 4, 33, 100, 143, 45, 225, 128, 69, 73, 183, 246, 91, 28,
1381 57, 20, 1, 175, 125, 128, 38, 4, 54, 93, 255, 28, 106, 122, 42, 104,
1382 35, 79, 242, 117, 75, 237, 149, 28, 178, 84, 224, 183, 116, 254, 120, 3,
1383 70, 154, 8, 57, 132, 86, 14, 119, 4, 130, 3, 155, 233, 177, 27, 28,
1384 233, 148, 205, 109, 29, 39, 33, 0, 160, 214, 129, 207, 180, 227, 131, 109,
1385 29, 136, 60, 47, 234, 99, 52, 57, 228, 87, 114, 138, 185, 19, 148, 152,
1386 114, 48, 12, 231, 182, 67, 228, 94, 253, 199, 34, 171, 238, 77, 59, 83,
1387 128, 137, 52, 74, 35, 236, 38, 181, 165, 106, 161, 12, 100, 76, 100, 237,
1388 69, 13, 211, 210, 117, 185, 178, 17, 231, 85, 134, 101, 66, 9, 71, 42,
1389 88, 125, 183, 106, 217, 38, 175, 131, 139, 75, 163, 134, 149, 70, 120, 146,
1390 156, 196, 151, 154, 242, 232, 163, 33, 206, 179, 123, 102, 249, 28, 11, 115,
1391 88, 20, 192, 244, 74, 33, 165, 176, 215, 142, 87, 229, 188, 139, 225, 192,
1392 111, 203, 55, 25, 241, 218, 22, 119, 121, 89, 69, 116, 214, 254, 94, 137,
1393 253, 168, 156, 155, 34, 150, 56, 126, 229, 79, 49, 150, 109, 99, 194, 179,
1394 40, 114, 63, 220, 161, 254, 73, 154, 211, 245, 21, 255, 63, 209, 45, 135,
1395 86, 234, 184, 213, 95, 28, 28, 244, 42, 66, 200, 83, 190, 81, 247, 24,
1396 153, 129, 180, 45, 159, 132, 4, 187, 171, 88, 178, 140, 143, 60, 212, 187,
1397 102, 125, 212, 66, 85, 133, 248, 58, 240, 126, 196, 7, 68, 71, 137, 202,
1398 116, 79, 137, 229, 156, 122, 69, 94, 146, 226, 198, 191, 116, 96, 33, 50,
1399 189, 32, 4, 5, 92, 116, 29, 122, 137, 140, 42, 199, 138, 59, 38, 48,
1400 178, 115, 216, 201, 225, 170, 183, 55, 248, 151, 58, 187, 184, 152, 106, 130,
1401 176, 52, 36, 73, 99, 77, 12, 166, 238, 52, 231, 86, 144, 91, 2, 248,
1402 246, 127, 5, 182, 201, 149, 205, 246, 73, 158, 98, 4, 20, 138, 51, 176,
1403 71, 169, 209, 237, 230, 100, 244, 243, 107, 80, 113, 246, 233, 115, 26, 175,
1404 72, 11, 38, 165, 68, 108, 163, 27, 38, 43, 246, 18, 153, 208, 118, 235,
1405 201, 225, 235, 17, 65, 53, 173, 72, 230, 232, 105, 215, 41, 180, 191, 61,
1406 31, 28, 214, 219, 29, 209, 90, 206, 232, 80, 22, 101, 237, 61, 105, 128,
1407 249, 224, 23, 242, 8, 250, 190, 130, 207, 148, 102, 166, 241, 67, 58, 8,
1408 61, 43, 58, 21, 148, 188, 40, 139, 116, 11, 79, 186, 85, 9, 240, 164,
1409 117, 238, 157, 59, 244, 184, 250, 69, 143, 88, 147, 126, 237, 37, 6, 159,
1410 130, 18, 72, 138, 251, 58, 136, 155, 92, 42, 173, 253, 171, 166, 57, 160,
1411 162, 211, 173, 241, 66, 121, 37, 176, 180, 140, 117, 240, 132, 181, 16, 234,
1412 173, 59, 98, 9, 123, 31, 18, 165, 45, 182, 89, 112, 130, 79, 53, 10,
1413 120, 252, 52, 114, 58, 57, 146, 87, 222, 154, 231, 215, 219, 84, 246, 85,
1414 57, 206, 180, 66, 125, 212, 226, 45, 212, 74, 132, 27, 185, 34, 150, 235,
1415 119, 218, 77, 70, 235, 171, 112, 123, 174, 87, 160, 89, 86, 219, 3, 47,
1416 39, 240, 116, 102, 70, 107, 31, 55, 102, 167, 4, 101, 119, 146, 176, 237,
1417 168, 123, 84, 118, 218, 112, 118, 52, 18, 56, 120, 216, 66, 187, 31, 12,
1418 205, 53, 119, 26, 225, 215, 195, 226, 2, 201, 75, 105, 65, 81, 45, 239,
1419 114, 182, 155, 135, 95, 153, 240, 143, 109, 109, 219, 218, 224, 26, 175, 35,
1420 86, 128, 209, 255, 71, 26, 86, 115, 22, 70, 167, 3, 105, 128, 160, 142,
1421 163, 149, 168, 112, 8, 12, 14, 119, 65, 43, 183, 105, 197, 156, 207, 226,
1422 231, 239, 48, 62, 4, 49, 169, 234, 123, 26, 164, 98, 119, 33, 170, 43,
1423 39, 6, 128, 15, 217, 209, 229, 109, 240, 180, 150, 169, 252, 118, 242, 240,
1424 108, 204, 24, 107, 199, 108, 184, 110, 208, 52, 175, 245, 241, 123, 90, 123,
1425 150, 211, 56, 75, 247, 140, 187, 53, 172, 174, 90, 223, 117, 128, 254, 97,
1426 235, 170, 193, 190, 34, 215, 109, 18, 109, 13, 118, 134, 45, 22, 100, 73,
1427 141, 199, 203, 124, 169, 191, 102, 108, 250, 201, 188, 39, 236, 74, 154, 159,
1428 170, 137, 69, 63, 82, 44, 177, 240, 178, 157, 53, 89, 6, 99, 5, 13,
1429 134, 169, 195, 121, 229, 179, 212, 123, 198, 131, 96, 250, 187, 94, 106, 51,
1430 219, 16, 147, 227, 108, 124, 240, 237, 172, 43, 83, 157, 124, 246, 118, 249,
1431 175, 43, 235, 221, 18, 24, 166, 127, 255, 210, 199, 57, 134, 73, 141, 254,
1432 219, 209, 19, 217, 36, 25, 104, 225, 133, 24, 3, 130, 62, 103, 148, 212,
1433 243, 122, 52, 213, 102, 26, 144, 227, 189, 143, 151, 230, 98, 87, 214, 147,
1434 110, 31, 43, 248, 142, 126, 199, 95, 170, 186, 67, 225, 208, 49, 50, 159,
1435 108, 174, 152, 118, 43, 193, 187, 13, 63, 141, 94, 118, 113, 200, 75, 165,
1436 117, 247, 53, 209, 151, 163, 241, 24, 23, 252, 149, 18, 16, 77, 69, 208,
1437 219, 254, 159, 220, 62, 99, 26, 31, 231, 88, 150, 219, 168, 151, 178, 181,
1438 234, 141, 124, 130, 37, 1, 21, 195, 96, 139, 179, 136, 145, 29, 159, 213,
1439 248, 10, 174, 213, 22, 180, 250, 251, 30, 42, 228, 139, 178, 90, 19, 228,
1440 100, 120, 205, 54, 6, 189, 213, 203, 193, 43, 218, 211, 27, 93, 76, 181,
1441 127, 159, 43, 96, 233, 249, 118, 252, 127, 59, 67, 82, 65, 48, 100, 170,
1442 227, 197, 141, 49, 153, 31, 189, 176, 102, 14, 101, 152, 242, 25, 251, 47,
1443 242, 67, 114, 61, 184, 29, 60, 163, 186, 19, 17, 36, 42, 76, 31, 246,
1444 195, 224, 206, 221, 89, 69, 218, 112, 148, 98, 60, 154, 28, 199, 206, 59,
1445 157, 199, 18, 214, 53, 217, 211, 254, 128, 220, 189, 96, 134, 57, 73, 152,
1446 41, 52, 0, 93, 23, 215, 124, 209, 63, 252, 134, 64, 224, 183, 197, 94,
1447 46, 214, 214, 233, 202, 211, 155, 236, 31, 238, 220, 132, 54, 88, 122, 140,
1448 146, 11, 88, 164, 238, 156, 72, 239, 225, 82, 157, 144, 27, 240, 5, 231,
1449 89, 25, 63, 50, 227, 219, 3, 5, 218, 125, 13, 151, 59, 40, 162, 211,
1450 79, 33, 157, 76, 245, 55, 229, 140, 88, 50, 221, 42, 52, 162, 106, 212,
1451 125, 187, 254, 0, 126, 156, 98, 149, 35, 94, 247, 215, 131, 86, 116, 176,
1452 3, 56, 30, 26, 138, 113, 71, 255, 77, 143, 52, 111, 20, 113, 47, 88,
1453 104, 110, 225, 164, 226, 8, 74, 180, 182, 183, 206, 215, 84, 12, 46, 61,
1454 177, 168, 102, 244, 93, 199, 243, 247, 214, 227, 131, 185, 103, 131, 49, 3,
1455 49, 18, 74, 111, 249, 150, 2, 113, 165, 221, 7, 93, 110, 59, 242, 246,
1456 243, 168, 45, 182, 45, 140, 19, 41, 72, 10, 164, 190, 17, 174, 216, 36,
1457 216, 3, 1, 198, 230, 150, 19, 0, 114, 10, 75, 166, 138, 161, 0, 113,
1458 132, 128, 116, 201, 147, 42, 63, 211, 56, 195, 45, 125, 69, 55, 177, 149,
1459 228, 7, 78, 217, 133, 35, 108, 182, 210, 185, 124, 187, 167, 95, 246, 202,
1460 121, 167, 61, 61, 239, 37, 153, 143, 109, 126, 42, 69, 174, 253, 132, 161,
1461 118, 14, 10, 7, 141, 92, 188, 60, 81, 174, 93, 28, 58, 223, 217, 119,
1462 84, 213, 230, 132, 248, 31, 47, 141, 88, 249, 28, 205, 19, 5, 183, 167,
1463 88, 177, 66, 242, 50, 66, 255, 31, 218, 182, 209, 12, 246, 151, 87, 252,
1464 211, 231, 32, 120, 95, 76, 180, 20, 124, 238, 190, 60, 165, 239, 207, 37,
1465 221, 115, 145, 126, 61, 51, 141, 54, 64, 219, 247, 164, 74, 19, 7, 93,
1466 27, 150, 115, 224, 228, 172, 232, 113, 6, 148, 40, 229, 228, 32, 17, 92,
1467 215, 75, 64, 50, 235, 127, 109, 127, 152, 99, 73, 55, 210, 245, 55, 37,
1468 236, 244, 136, 154, 177, 231, 119, 30, 187, 225, 83, 240, 237, 183, 80, 245,
1469 10, 129, 181, 156, 137, 27, 79, 97, 145, 78, 100, 127, 79, 224, 218, 244,
1470 49, 70, 225, 131, 138, 102, 32, 110, 123, 110, 49, 161, 246, 27, 99, 115,
1471 171, 159, 45, 44, 15, 108, 51, 173, 24, 4, 170, 76, 255, 41, 27, 0,
1472 27, 35, 61, 145, 246, 241, 138, 152, 47, 51, 2, 153, 171, 79, 81, 176,
1473 123, 63, 192, 74, 27, 243, 22, 51, 86, 243, 48, 24, 129, 162, 69, 218,
1474 102, 143, 135, 107, 52, 182, 189, 25, 142, 206, 227, 144, 140, 57, 124, 252,
1475 97, 157, 61, 55, 43, 76, 52, 197, 146, 154, 83, 0, 150, 16, 85, 76,
1476 230, 32, 23, 86, 31, 241, 251, 88, 183, 195, 242, 192, 181, 160, 229, 185,
1477 229, 186, 72, 219, 249, 142, 111, 178, 42, 163, 117, 93, 31, 171, 161, 227,
1478 194, 51, 36, 53, 116, 0, 233, 37, 150, 128, 144, 8, 168, 198, 68, 35,
1479 57, 148, 64, 207, 148, 64, 213, 174, 223, 174, 129, 171, 81, 132, 1, 90,
1480 208, 100, 105, 209, 10, 209, 228, 138, 169, 82, 197, 37, 172, 32, 222, 70,
1481 180, 78, 59, 234, 106, 250, 76, 237, 59, 173, 178, 212, 151, 107, 131, 245,
1482 14, 218, 71, 56, 187, 138, 74, 101, 15, 32, 18, 131, 21, 57, 6, 32,
1483 115, 75, 244, 119, 168, 158, 154, 147, 72, 143, 232, 51, 49, 181, 115, 27,
1484 96, 141, 93, 202, 36, 38, 23, 61, 150, 171, 239, 66, 13, 183, 126, 24,
1485 99, 175, 110, 189, 88, 170, 252, 139, 127, 179, 106, 243, 140, 208, 243, 110,
1486 145, 64, 161, 4, 191, 209, 211, 72, 135, 24, 121, 210, 109, 42, 134, 9,
1487 160, 241, 186, 161, 203, 85, 212, 3, 23, 228, 75, 147, 133, 9, 100, 65,
1488 195, 165, 252, 229, 177, 199, 170, 63, 194, 247, 76, 171, 66, 203, 193, 3,
1489 74, 91, 86, 31, 85, 185, 52, 27, 175, 175, 84, 137, 51, 233, 26, 52,
1490 16, 75, 185, 95, 35, 167, 251, 67, 83, 217, 9, 241, 43, 252, 76, 242,
1491 101, 115, 133, 173, 154, 251, 33, 116, 118, 243, 152, 63, 173, 153, 63, 75,
1492 90, 106, 203, 197, 141, 149, 127, 9, 133, 218, 223, 193, 62, 19, 48, 231,
1493 45, 146, 21, 164, 1, 42, 43, 187, 75, 88, 20, 39, 233, 165, 20, 76,
1494 26, 145, 226, 155, 106, 187, 26, 195, 23, 212, 49, 60, 145, 149, 37, 167,
1495 73, 106, 203, 228, 185, 223, 108, 12, 187, 239, 88, 126, 27, 154, 235, 203,
1496 207, 187, 1, 114, 12, 112, 238, 17, 185, 120, 227, 177, 242, 191, 10, 18,
1497 241, 143, 21, 239, 31, 150, 102, 60, 15, 167, 209, 64, 117, 237, 45, 45,
1498 217, 147, 32, 28, 98, 221, 12, 20, 2, 176, 213, 147, 95, 31, 176, 64,
1499 237, 55, 53, 44, 105, 249, 43, 111, 73, 162, 180, 4, 62, 66, 118, 36,
1500 215, 254, 183, 249, 170, 39, 21, 69, 147, 65, 105, 136, 232, 160, 174, 141,
1501 84, 222, 189, 33, 250, 197, 226, 170, 246, 127, 87, 25, 10, 181, 46, 151,
1502 216, 250, 227, 131, 115, 64, 217, 11, 190, 199, 122, 148, 242, 221, 46, 169,
1503 45, 54, 9, 90, 251, 94, 61, 211, 30, 67, 199, 115, 204, 4, 199, 203,
1504 109, 137, 60, 223, 206, 3, 144, 170, 215, 224, 72, 247, 128, 64, 147, 140,
1505 223, 125, 20, 67, 248, 253, 206, 5, 44, 72, 160, 33, 20, 166, 80, 123,
1506 194, 220, 16, 134, 206, 24, 66, 217, 177, 231, 223, 66, 251, 253, 235, 180,
1507 36, 205, 107, 173, 198, 108, 83, 120, 82, 128, 120, 245, 67, 23, 248, 203,
1508 28, 14, 75, 235, 117, 111, 34, 127, 39, 52, 169, 101, 28, 144, 123, 20,
1509 197, 116, 96, 141, 201, 246, 61, 101, 132, 127, 98, 178, 186, 139, 226, 132,
1510 55, 229, 116, 75, 43, 241, 119, 139, 104, 169, 215, 199, 226, 113, 178, 214,
1511 153, 159, 139, 208, 106, 136, 77, 149, 72, 248, 49, 179, 98, 110, 192, 105,
1512 128, 27, 245, 36, 215, 210, 187, 98, 45, 92, 51, 238, 57, 153, 113, 21,
1513 86, 147, 122, 138, 3, 70, 66, 84, 135, 96, 199, 23, 123, 105, 226, 81,
1514 171, 23, 228, 73, 234, 240, 50, 135, 108, 143, 140, 247, 26, 245, 43, 94,
1515 183, 180, 240, 235, 159, 127, 57, 119, 6, 34, 58, 112, 170, 62, 37, 57,
1516 171, 56, 223, 147, 98, 204, 183, 146, 154, 85, 172, 49, 76, 84, 231, 138,
1517 117, 46, 81, 57, 240, 43, 102, 130, 234, 208, 237, 88, 164, 124, 128, 104,
1518 167, 38, 88, 73, 7, 131, 234, 67, 4, 213, 8, 211, 84, 81, 197, 133,
1519 123, 247, 254, 101, 230, 68, 245, 220, 193, 152, 208, 91, 63, 109, 228, 184,
1520 117, 28, 114, 146, 98, 142, 195, 4, 139, 48, 186, 242, 211, 124, 175, 224,
1521 69, 38, 35, 14, 253, 245, 242, 184, 138, 4, 206, 221, 15, 125, 189, 97,
1522 127, 46, 212, 10, 55, 1, 69, 56, 31, 180, 245, 93, 175, 58, 220, 3,
1523 164, 88, 22, 74, 157, 113, 246, 189, 65, 97, 235, 189, 126, 106, 50, 120,
1524 180, 71, 120, 11, 200, 48, 19, 57, 236, 64, 234, 180, 243, 32, 228, 127,
1525 228, 253, 42, 20, 238, 109, 161, 67, 73, 52, 35, 126, 197, 5, 117, 12,
1526 86, 215, 168, 60, 159, 4, 74, 193, 92, 104, 190, 30, 185, 187, 153, 208,
1527 87, 245, 62, 200, 16, 204, 189, 141, 188, 226, 187, 144, 101, 51, 86, 204,
1528 26, 22, 246, 230, 176, 81, 195, 19, 126, 58, 91, 30, 204, 178, 248, 217,
1529 81, 155, 68, 145, 42, 9, 22, 68, 22, 107, 25, 86, 153, 225, 224, 143,
1530 128, 94, 164, 65, 168, 173, 178, 181, 97, 100, 159, 212, 164, 213, 75, 25,
1531 35, 225, 133, 5, 243, 65, 39, 158, 155, 153, 3, 81, 53, 165, 153, 52,
1532 237, 226, 122, 245, 248, 255, 60, 13, 2, 41, 202, 232, 184, 57, 152, 133,
1533 105, 159, 33, 220, 49, 135, 76, 198, 212, 70, 168, 43, 233, 168, 180, 88,
1534 139, 246, 219, 120, 12, 161, 238, 88, 228, 9, 77, 236, 129, 227, 73, 91,
1535 104, 222, 104, 205, 28, 140, 205, 167, 178, 222, 150, 197, 139, 205, 66, 245,
1536 48, 241, 80, 225, 218, 27, 159, 205, 64, 148, 107, 54, 46, 190, 61, 0,
1537 161, 228, 124, 123, 18, 170, 35, 46, 53, 61, 171, 154, 121, 253, 187, 158,
1538 102, 194, 132, 94, 49, 239, 86, 57, 205, 129, 185, 234, 50, 56, 219, 36,
1539 56, 77, 247, 160, 75, 239, 154, 122, 34, 34, 143, 66, 53, 20, 212, 246,
1540 3, 79, 229, 119, 50, 132, 221, 187, 208, 82, 149, 183, 151, 200, 181, 97,
1541 12, 4, 136, 233, 171, 247, 128, 211, 234, 122, 152, 140, 221, 82, 83, 98,
1542 185, 95, 122, 23, 120, 124, 112, 240, 39, 16, 49, 140, 225, 135, 88, 69,
1543 96, 125, 246, 99, 224, 165, 148, 178, 35, 63, 192, 217, 39, 153, 63, 32,
1544 109, 142, 224, 12, 132, 10, 55, 49, 140, 217, 141, 113, 10, 72, 92, 37,
1545 121, 96, 72, 35, 184, 70, 156, 225, 140, 110, 150, 24, 95, 209, 172, 140,
1546 187, 10, 154, 58, 113, 215, 254, 36, 101, 155, 5, 46, 249, 59, 238, 164,
1547 25, 212, 35, 5, 87, 45, 183, 124, 174, 6, 182, 241, 206, 128, 118, 190,
1548 239, 160, 140, 2, 149, 90, 185, 125, 192, 8, 75, 105, 184, 51, 2, 11,
1549 198, 85, 249, 100, 88, 73, 229, 189, 80, 81, 244, 167, 62, 110, 52, 13,
1550 254, 122, 144, 170, 206, 64, 239, 191, 0, 73, 235, 143, 120, 81, 33, 87,
1551 83, 154, 156, 163, 31, 172, 104, 196, 78, 144, 100, 3, 54, 202, 67, 177,
1552 217, 80, 207, 235, 48, 12, 127, 78, 116, 96, 238, 226, 97, 154, 97, 120,
1553 19, 33, 89, 14, 160, 149, 243, 246, 196, 219, 74, 113, 225, 92, 32, 216,
1554 10, 50, 176, 127, 113, 63, 157, 143, 190, 245, 94, 244, 103, 85, 143, 162,
1555 61, 177, 203, 240, 204, 55, 183, 226, 251, 205, 53, 25, 19, 197, 160, 34,
1556 42, 128, 169, 80, 11, 210, 133, 105, 128, 175, 107, 72, 222, 130, 95, 209,
1557 93, 161, 16, 35, 244, 178, 236, 100, 20, 129, 190, 118, 246, 108, 68, 206,
1558 105, 58, 91, 90, 149, 0, 168, 95, 115, 63, 54, 240, 7, 164, 186, 100,
1559 76, 81, 225, 58, 178, 14, 46, 79, 31, 226, 180, 34, 164, 191, 84, 22,
1560 244, 90, 105, 13, 83, 133, 230, 81, 45, 49, 157, 84, 22, 168, 167, 205,
1561 219, 123, 209, 80, 87, 205, 180, 152, 162, 225, 229, 142, 72, 250, 240, 134,
1562 185, 145, 112, 149, 25, 185, 198, 174, 213, 83, 145, 151, 228, 138, 96, 152,
1563 242, 251, 227, 53, 229, 136, 37, 147, 184, 141, 104, 221, 51, 219, 21, 93,
1564 42, 253, 183, 57, 203, 92, 7, 240, 82, 171, 103, 167, 115, 233, 175, 142,
1565 8, 112, 10, 56, 44, 192, 231, 79, 18, 8, 68, 128, 106, 121, 225, 149,
1566 30, 210, 173, 86, 240, 30, 138, 197, 89, 213, 63, 161, 106, 65, 141, 57,
1567 96, 102, 191, 28, 56, 9, 201, 3, 248, 113, 118, 51, 121, 247, 83, 135,
1568 51, 54, 14, 19, 49, 175, 59, 206, 112, 172, 155, 243, 75, 19, 154, 102,
1569 188, 11, 76, 198, 136, 11, 44, 154, 139, 48, 34, 194, 116, 170, 198, 127,
1570 132, 231, 200, 44, 61, 210, 93, 20, 159, 201, 183, 39, 78, 178, 225, 112,
1571 50, 254, 198, 200, 207, 18, 196, 209, 222, 252, 67, 56, 186, 71, 24, 210,
1572 30, 105, 32, 102, 99, 239, 195, 191, 131, 246, 65, 121, 91, 66, 112, 28,
1573 170, 67, 28, 144, 187, 46, 117, 97, 187, 240, 250, 118, 249, 68, 151, 248,
1574 219, 208, 103, 242, 166, 122, 220, 59, 50, 215, 90, 160, 15, 15, 96, 89,
1575 167, 87, 22, 253, 137, 202, 126, 145, 162, 171, 97, 181, 102, 50, 107, 230,
1576 31, 183, 133, 105, 23, 233, 228, 13, 247, 169, 79, 53, 76, 138, 29, 51,
1577 53, 221, 126, 199, 47, 153, 184, 183, 198, 109, 192, 203, 178, 26, 115, 177,
1578 118, 158, 181, 43, 48, 174, 195, 253, 43, 18, 172, 171, 101, 129, 255, 63,
1579 41, 49, 160, 15, 86, 108, 235, 87, 115, 36, 93, 46, 164, 152, 49, 31,
1580 137, 125, 174, 115, 196, 240, 117, 226, 183, 151, 73, 30, 75, 59, 61, 160,
1581 96, 157, 215, 246, 160, 136, 82, 95, 181, 13, 207, 158, 106, 81, 18, 27,
1582 182, 35, 249, 72, 148, 128, 15, 82, 68, 197, 0, 159, 149, 239, 34, 250,
1583 171, 70, 200, 219, 214, 18, 134, 14, 71, 69, 219, 145, 208, 125, 65, 232,
1584 201, 212, 148, 39, 208, 142, 54, 38, 32, 154, 124, 35, 76, 173, 240, 232,
1585 23, 74, 183, 118, 137, 244, 180, 149, 195, 198, 105, 25, 246, 236, 155, 88,
1586 230, 134, 32, 126, 183, 72, 127, 129, 139, 161, 224, 222, 127, 107, 201, 78,
1587 227, 207, 10, 48, 9, 199, 240, 176, 49, 165, 95, 200, 101, 89, 40, 229,
1588 28, 8, 41, 193, 173, 218, 63, 229, 216, 170, 82, 90, 162, 243, 0, 125,
1589 248, 79, 186, 228, 44, 197, 178, 58, 196, 251, 85, 19, 254, 130, 110, 78,
1590 91, 217, 146, 16, 90, 221, 6, 129, 173, 73, 56, 77, 72, 19, 8, 14,
1591 129, 84, 19, 88, 146, 252, 137, 165, 222, 7, 199, 107, 135, 13, 253, 137,
1592 180, 184, 240, 37, 238, 133, 135, 80, 170, 172, 60, 80, 94, 130, 246, 166,
1593 63, 181, 30, 103, 97, 138, 193, 148, 96, 82, 61, 47, 188, 230, 118, 65,
1594 74, 28, 123, 50, 73, 12, 187, 123, 129, 19, 95, 213, 61, 153, 85, 243,
1595 44, 195, 249, 250, 121, 175, 42, 187, 154, 233, 91, 217, 49, 130, 129, 172,
1596 250, 182, 203, 30, 93, 213, 217, 24, 28, 198, 4, 208, 61, 207, 108, 120,
1597 22, 39, 136, 252, 123, 15, 188, 34, 35, 177, 35, 134, 178, 221, 217, 22,
1598 51, 18, 22, 215, 47, 68, 120, 130, 0, 192, 242, 170, 170, 202, 220, 179,
1599 185, 81, 204, 10, 115, 181, 231, 246, 172, 38, 43, 145, 56, 171, 219, 34,
1600 17, 96, 165, 209, 53, 44, 68, 74, 236, 249, 192, 35, 204, 123, 56, 118,
1601 174, 172, 151, 249, 36, 21, 133, 119, 237, 232, 61, 125, 6, 124, 200, 62,
1602 68, 67, 40, 196, 202, 84, 213, 160, 237, 85, 249, 125, 41, 187, 126, 48,
1603 152, 124, 104, 211, 127, 96, 167, 184, 23, 161, 68, 106, 119, 224, 226, 148,
1604 234, 54, 155, 168, 186, 193, 167, 15, 242, 100, 82, 15, 205, 247, 34, 24,
1605 134, 152, 115, 132, 114, 196, 0, 136, 242, 73, 91, 35, 90, 4, 161, 138,
1606 163, 21, 16, 244, 60, 158, 199, 246, 233, 150, 10, 142, 248, 196, 224, 129,
1607 8, 158, 81, 11, 92, 96, 197, 23, 45, 104, 235, 250, 9, 31, 47, 153,
1608 116, 22, 170, 186, 150, 46, 214, 246, 75, 116, 4, 242, 147, 168, 177, 134,
1609 143, 149, 36, 139, 224, 127, 143, 167, 208, 115, 158, 250, 132, 4, 124, 204,
1610 99, 217, 239, 97, 5, 38, 50, 17, 176, 171, 96, 92, 88, 219, 195, 184,
1611 160, 158, 175, 10, 175, 33, 245, 28, 55, 56, 207, 47, 46, 114, 108, 196,
1612 101, 93, 39, 227, 183, 40, 40, 109, 121, 123, 90, 85, 162, 165, 227, 200,
1613 238, 136, 223, 36, 77, 179, 45, 156, 51, 95, 33, 15, 219, 71, 37, 98,
1614 141, 150, 179, 78, 217, 221, 130, 186, 155, 84, 146, 217, 210, 202, 91, 212,
1615 50, 129, 188, 203, 28, 213, 10, 230, 40, 47, 215, 77, 161, 88, 71, 56,
1616 82, 124, 130, 249, 70, 139, 142, 23, 78, 139, 252, 32, 223, 90, 214, 27,
1617 94, 23, 12, 240, 77, 145, 71, 172, 75, 235, 141, 83, 145, 50, 101, 166,
1618 87, 154, 179, 203, 27, 233, 169, 45, 28, 41, 211, 46, 144, 123, 62, 62,
1619 205, 178, 180, 89, 32, 194, 238, 151, 217, 164, 214, 241, 164, 96, 215, 46,
1620 141, 189, 86, 97, 143, 4, 227, 73, 20, 221, 238, 66, 3, 132, 135, 229,
1621 22, 60, 152, 102, 211, 20, 250, 225, 36, 212, 131, 182, 212, 216, 84, 141,
1622 133, 86, 163, 136, 107, 219, 8, 100, 189, 138, 217, 60, 131, 237, 64, 37,
1623 241, 85, 140, 47, 54, 75, 58, 76, 66, 104, 245, 201, 199, 236, 188, 71,
1624 30, 171, 233, 190, 81, 120, 166, 63, 237, 249, 233, 192, 5, 24, 231, 193,
1625 39, 99, 101, 108, 92, 109, 156, 211, 111, 87, 157, 130, 16, 58, 113, 47,
1626 101, 152, 60, 183, 37, 227, 52, 255, 213, 16, 112, 234, 223, 197, 101, 73,
1627 120, 94, 60, 158, 82, 227, 131, 13, 4, 167, 78, 126, 120, 154, 26, 246,
1628 35, 145, 40, 150, 7, 208, 243, 100, 68, 89, 200, 139, 138, 121, 37, 28,
1629 35, 197, 227, 79, 19, 130, 171, 91, 116, 57, 153, 140, 217, 236, 7, 180,
1630 221, 226, 163, 199, 158, 131, 200, 37, 48, 41, 157, 175, 139, 71, 53, 172,
1631 113, 159, 133, 47, 139, 113, 157, 40, 88, 44, 115, 105, 104, 219, 211, 18,
1632 164, 170, 127, 5, 178, 115, 181, 143, 30, 173, 6, 186, 183, 45, 56, 94,
1633 252, 210, 171, 154, 10, 17, 34, 153, 4, 11, 176, 85, 144, 114, 36, 247,
1634 34, 67, 187, 69, 164, 168, 120, 82, 186, 46, 15, 147, 105, 48, 76, 235,
1635 15, 218, 86, 160, 19, 220, 119, 241, 103, 252, 196, 58, 74, 131, 214, 109,
1636 17, 175, 75, 203, 167, 17, 60, 52, 251, 130, 55, 184, 165, 83, 225, 231,
1637 184, 208, 196, 88, 70, 8, 3, 43, 78, 107, 158, 180, 130, 248, 194, 16,
1638 46, 54, 100, 98, 121, 67, 185, 17, 181, 210, 5, 15, 178, 196, 80, 220,
1639 28, 103, 220, 231, 167, 10, 122, 225, 194, 118, 157, 192, 195, 205, 130, 253,
1640 94, 246, 177, 74, 149, 90, 120, 188, 230, 48, 77, 168, 50, 76, 130, 136,
1641 200, 219, 209, 192, 20, 10, 193, 97, 205, 136, 98, 117, 128, 170, 198, 220,
1642 218, 180, 178, 186, 150, 227, 196, 161, 4, 244, 124, 31, 85, 243, 34, 78,
1643 187, 226, 164, 167, 122, 56, 114, 232, 140, 189, 160, 19, 184, 223, 165, 202,
1644 86, 210, 102, 183, 50, 30, 109, 134, 23, 102, 171, 130, 93, 106, 2, 117,
1645 80, 82, 197, 193, 247, 137, 255, 255, 127, 38, 13, 82, 103, 51, 179, 220,
1646 133, 247, 104, 152, 160, 229, 160, 214, 152, 157, 87, 183, 82, 43, 36, 19,
1647 80, 192, 122, 186, 201, 116, 190, 220, 131, 228, 153, 197, 212, 112, 233, 124,
1648 114, 212, 106, 195, 129, 141, 204, 238, 98, 247, 90, 244, 23, 118, 2, 168,
1649 71, 48, 223, 253, 187, 16, 204, 230, 46, 221, 30, 243, 27, 129, 155, 210,
1650 159, 84, 56, 212, 197, 131, 174, 59, 85, 108, 80, 36, 31, 210, 71, 228,
1651 254, 171, 67, 129, 154, 175, 245, 140, 11, 167, 43, 69, 231, 227, 91, 183,
1652 133, 108, 4, 151, 128, 64, 243, 215, 74, 160, 186, 217, 38, 28, 186, 75,
1653 178, 151, 214, 5, 49, 158, 242, 126, 91, 249, 88, 156, 110, 124, 205, 125,
1654 227, 19, 235, 172, 103, 200, 190, 121, 169, 140, 118, 156, 21, 152, 34, 31,
1655 235, 46, 191, 107, 37, 109, 135, 112, 195, 9, 245, 43, 96, 232, 74, 8,
1656 193, 131, 70, 140, 180, 204, 219, 243, 72, 70, 16, 11, 227, 0, 27, 252,
1657 142, 183, 199, 103, 114, 149, 221, 235, 69, 92, 245, 9, 227, 43, 173, 139,
1658 119, 85, 104, 214, 84, 126, 244, 243, 122, 14, 164, 185, 104, 176, 55, 133,
1659 44, 28, 208, 232, 50, 71, 32, 78, 200, 95, 153, 70, 82, 243, 91, 164,
1660 64, 159, 173, 244, 103, 78, 29, 218, 209, 124, 118, 153, 42, 69, 240, 237,
1661 228, 33, 155, 17, 61, 27, 233, 171, 6, 240, 48, 113, 243, 134, 207, 120,
1662 216, 61, 188, 247, 231, 185, 163, 43, 140, 138, 235, 132, 219, 47, 38, 93,
1663 205, 6, 247, 195, 200, 79, 87, 111, 210, 54, 222, 179, 108, 163, 253, 22,
1664 22, 101, 180, 6, 61, 41, 91, 95, 237, 186, 166, 110, 225, 139, 205, 146,
1665 41, 133, 153, 114, 63, 48, 110, 208, 168, 38, 233, 141, 23, 136, 236, 22,
1666 220, 14, 62, 224, 46, 20, 193, 181, 107, 14, 234, 156, 234, 108, 30, 112,
1667 235, 126, 237, 189, 252, 240, 240, 3, 175, 210, 85, 35, 230, 115, 219, 184,
1668 173, 48, 84, 250, 52, 113, 44, 187, 173, 253, 153, 177, 32, 127, 98, 100,
1669 180, 211, 71, 146, 82, 1, 69, 200, 165, 198, 121, 133, 232, 0, 237, 157,
1670 169, 31, 134, 106, 243, 245, 16, 228, 53, 133, 143, 255, 123, 175, 19, 10,
1671 98, 117, 180, 38, 50, 190, 63, 70, 106, 8, 221, 78, 66, 129, 190, 181,
1672 165, 119, 242, 101, 19, 18, 181, 91, 223, 30, 93, 253, 74, 242, 112, 139,
1673 30, 121, 25, 100, 144, 32, 212, 143, 3, 96, 134, 113, 193, 190, 51, 8,
1674 60, 108, 88, 168, 142, 47, 217, 173, 44, 207, 174, 161, 237, 179, 147, 4,
1675 30, 5, 177, 202, 43, 239, 15, 135, 44, 216, 10, 183, 63, 27, 159, 195,
1676 56, 238, 95, 213, 45, 44, 252, 4, 101, 233, 38, 88, 66, 126, 149, 196,
1677 87, 211, 55, 38, 17, 92, 26, 76, 156, 183, 136, 154, 166, 219, 125, 10,
1678 88, 240, 97, 14, 86, 67, 4, 74, 236, 71, 72, 10, 49, 18, 158, 148,
1679 128, 15, 241, 17, 9, 236, 243, 22, 116, 160, 65, 166, 34, 113, 76, 41,
1680 100, 153, 184, 22, 62, 252, 220, 47, 180, 124, 103, 242, 104, 13, 244, 136,
1681 33, 146, 33, 176, 31, 159, 235, 29, 221, 255, 182, 90, 183, 158, 186, 155,
1682 85, 137, 173, 129, 71, 91, 147, 17, 30, 240, 214, 110, 79, 64, 21, 129,
1683 97, 109, 253, 198, 203, 116, 235, 89, 166, 151, 116, 106, 194, 27, 51, 177,
1684 23, 119, 199, 227, 50, 143, 129, 234, 188, 217, 9, 136, 48, 115, 5, 252,
1685 241, 195, 116, 239, 68, 176, 55, 121, 2, 38, 229, 224, 94, 204, 200, 115,
1686 84, 235, 131, 172, 242, 56, 208, 41, 21, 36, 113, 156, 137, 6, 225, 132,
1687 4, 181, 193, 84, 10, 213, 155, 150, 72, 127, 23, 107, 255, 105, 250, 61,
1688 234, 211, 225, 169, 93, 63, 138, 95, 201, 74, 208, 99, 119, 184, 219, 62,
1689 86, 163, 142, 35, 24, 86, 92, 224, 53, 84, 57, 101, 113, 76, 26, 78,
1690 174, 49, 28, 234, 153, 240, 27, 114, 87, 133, 130, 78, 66, 144, 205, 152,
1691 171, 169, 136, 219, 142, 223, 145, 149, 196, 6, 167, 109, 52, 188, 0, 98,
1692 242, 254, 184, 129, 250, 63, 244, 10, 97, 188, 7, 137, 183, 165, 68, 91,
1693 26, 188, 230, 246, 227, 12, 217, 170, 224, 119, 135, 243, 149, 88, 67, 23,
1694 117, 173, 130, 164, 233, 244, 251, 11, 123, 57, 80, 111, 249, 146, 231, 213,
1695 158, 26, 236, 250, 213, 228, 117, 251, 101, 128, 8, 241, 251, 36, 40, 149,
1696 148, 60, 146, 48, 104, 121, 163, 233, 2, 24, 10, 21, 93, 137, 124, 8,
1697 115, 220, 255, 107, 153, 105, 6, 255, 32, 160, 96, 74, 84, 184, 31, 155,
1698 118, 206, 58, 131, 111, 150, 137, 145, 22, 45, 138, 211, 118, 151, 248, 189,
1699 64, 82, 222, 9, 137, 114, 59, 89, 77, 249, 245, 195, 146, 198, 43, 209,
1700 186, 151, 121, 136, 170, 81, 53, 43, 126, 15, 62, 88, 171, 206, 232, 34,
1701 99, 52, 6, 22, 126, 140, 32, 181, 122, 253, 230, 127, 211, 254, 61, 254,
1702 108, 114, 38, 214, 164, 244, 87, 243, 187, 185, 57, 105, 24, 244, 59, 254,
1703 92, 143, 235, 38, 70, 177, 126, 123, 61, 243, 45, 127, 76, 127, 39, 45,
1704 254, 239, 67, 221, 24, 81, 24, 130, 247, 106, 239, 93, 18, 57, 242, 4,
1705 223, 131, 86, 249, 241, 81, 149, 230, 154, 17, 14, 179, 194, 234, 17, 85,
1706 188, 33, 162, 62, 73, 157, 253, 248, 111, 97, 205, 47, 74, 223, 192, 185,
1707 212, 153, 240, 156, 104, 64, 46, 209, 146, 56, 27, 21, 184, 95, 107, 95,
1708 101, 243, 133, 146, 194, 240, 51, 109, 158, 225, 18, 80, 66, 4, 79, 252,
1709 174, 187, 55, 230, 54, 51, 42, 87, 34, 159, 155, 184, 118, 167, 150, 46,
1710 32, 156, 244, 124, 222, 84, 247, 12, 231, 119, 237, 135, 225, 227, 97, 178,
1711 37, 208, 112, 126, 32, 227, 60, 239, 194, 183, 169, 208, 221, 250, 180, 56,
1712 137, 67, 153, 170, 242, 54, 55, 48, 219, 79, 106, 249, 250, 56, 130, 184,
1713 43, 56, 114, 175, 122, 249, 107, 188, 63, 169, 25, 43, 68, 61, 246, 47,
1714 191, 117, 150, 7, 163, 144, 42, 186, 5, 195, 11, 68, 215, 219, 87, 213,
1715 42, 84, 99, 37, 29, 78, 34, 180, 131, 15, 171, 186, 225, 163, 204, 225,
1716 72, 198, 227, 122, 245, 4, 133, 40, 134, 17, 61, 112, 55, 159, 37, 118,
1717 112, 173, 210, 126, 9, 23, 209, 65, 14, 109, 16, 247, 254, 45, 170, 33,
1718 143, 35, 107, 134, 51, 132, 135, 226, 40, 112, 156, 122, 5, 31, 37, 113,
1719 24, 1, 153, 3, 180, 227, 249, 172, 93, 20, 79, 126, 42, 254, 100, 80,
1720 86, 180, 123, 71, 213, 32, 178, 28, 63, 75, 177, 246, 25, 119, 33, 236,
1721 194, 31, 94, 169, 97, 96, 42, 29, 165, 234, 199, 12, 76, 8, 242, 229,
1722 160, 130, 169, 76, 120, 159, 25, 18, 36, 182, 222, 210, 105, 251, 2, 40,
1723 111, 212, 249, 119, 48, 137, 50, 71, 146, 216, 47, 18, 60, 194, 18, 119,
1724 197, 216, 84, 170, 143, 241, 61, 207, 206, 238, 51, 39, 145, 171, 81, 108,
1725 64, 0, 229, 83, 190, 81, 149, 27, 77, 44, 34, 134, 178, 250, 9, 244,
1726 128, 175, 124, 28, 41, 116, 254, 30, 162, 88, 207, 231, 222, 155, 224, 234,
1727 201, 56, 119, 191, 190, 158, 195, 16, 153, 152, 99, 244, 60, 207, 205, 133,
1728 34, 101, 0, 104, 144, 141, 121, 168, 44, 40, 234, 49, 35, 136, 39, 242,
1729 14, 198, 188, 124, 161, 135, 113, 180, 68, 218, 10, 47, 223, 190, 0, 238,
1730 109, 149, 149, 25, 14, 218, 109, 85, 106, 125, 45, 29, 63, 122, 74, 184,
1731 39, 153, 72, 81, 69, 212, 62, 80, 161, 110, 103, 56, 254, 7, 198, 201,
1732 47, 202, 145, 147, 115, 7, 252, 21, 157, 211, 102, 40, 117, 116, 41, 110,
1733 189, 45, 41, 128, 46, 18, 40, 228, 43, 159, 202, 90, 114, 78, 193, 9,
1734 237, 172, 59, 89, 50, 218, 47, 142, 139, 118, 146, 201, 8, 158, 116, 71,
1735 133, 105, 177, 199, 24, 202, 219, 64, 136, 101, 162, 11, 225, 13, 60, 217,
1736 13, 125, 9, 38, 224, 90, 78, 166, 145, 101, 167, 132, 24, 58, 73, 19,
1737 2, 185, 83, 148, 110, 133, 191, 76, 71, 18, 168, 103, 0, 123, 195, 39,
1738 41, 243, 215, 62, 38, 156, 101, 42, 144, 43, 125, 154, 46, 152, 74, 242,
1739 251, 158, 180, 189, 228, 165, 64, 75, 220, 184, 160, 9, 23, 57, 138, 16,
1740 88, 240, 5, 234, 106, 188, 171, 120, 55, 203, 43, 72, 33, 67, 129, 26,
1741 242, 128, 89, 144, 226, 129, 58, 143, 110, 185, 216, 158, 238, 175, 34, 121,
1742 59, 49, 76, 178, 81, 88, 181, 23, 219, 66, 1, 228, 34, 143, 250, 41,
1743 77, 7, 245, 65, 3, 203, 53, 144, 140, 194, 71, 27, 10, 175, 218, 149,
1744 242, 213, 150, 9, 199, 22, 202, 155, 5, 44, 23, 111, 102, 5, 150, 32,
1745 62, 31, 220, 1, 129, 151, 109, 27, 215, 54, 235, 104, 157, 123, 8, 89,
1746 94, 161, 197, 0, 163, 75, 124, 41, 240, 192, 109, 9, 202, 124, 25, 82,
1747 95, 243, 170, 63, 91, 248, 4, 63, 47, 208, 243, 61, 85, 62, 107, 32,
1748 87, 19, 208, 87, 120, 234, 108, 244, 44, 158, 238, 91, 185, 219, 105, 13,
1749 254, 85, 208, 93, 148, 144, 160, 98, 237, 72, 27, 59, 119, 22, 99, 52,
1750 193, 190, 57, 171, 46, 247, 180, 126, 30, 16, 200, 88, 35, 212, 215, 253,
1751 218, 25, 96, 40, 44, 53, 29, 129, 153, 154, 197, 238, 84, 201, 244, 106,
1752 184, 178, 127, 54, 198, 60, 160, 98, 4, 229, 110, 220, 225, 26, 254, 238,
1753 123, 69, 248, 222, 43, 122, 207, 63, 166, 246, 171, 129, 231, 7, 89, 132,
1754 245, 76, 55, 174, 184, 93, 139, 221, 250, 11, 86, 239, 248, 14, 98, 226,
1755 66, 146, 45, 59, 106, 78, 6, 253, 6, 128, 53, 174, 7, 36, 100, 130,
1756 22, 47, 157, 147, 27, 31, 15, 97, 122, 46, 137, 84, 126, 104, 48, 217,
1757 236, 131, 51, 253, 147, 23, 35, 133, 43, 183, 124, 197, 150, 85, 170, 39,
1758 96, 227, 44, 130, 51, 83, 224, 22, 177, 39, 65, 125, 98, 28, 162, 56,
1759 25, 112, 81, 50, 28, 118, 184, 45, 236, 226, 87, 117, 111, 219, 157, 34,
1760 224, 77, 68, 59, 91, 80, 177, 178, 188, 203, 247, 133, 130, 15, 61, 125,
1761 252, 18, 201, 87, 157, 158, 47, 5, 151, 104, 231, 127, 161, 154, 172, 224,
1762 74, 95, 195, 121, 175, 200, 18, 26, 240, 194, 222, 85, 189, 238, 106, 136,
1763 195, 28, 170, 10, 115, 25, 236, 203, 127, 254, 103, 79, 175, 57, 159, 102,
1764 193, 106, 136, 130, 195, 16, 19, 14, 240, 130, 74, 217, 154, 5, 217, 88,
1765 21, 113, 205, 138, 241, 209, 39, 255, 182, 100, 41, 243, 199, 191, 7, 123,
1766 185, 7, 186, 28, 32, 71, 236, 16, 220, 222, 5, 122, 74, 55, 95, 19,
1767 230, 127, 201, 130, 180, 143, 142, 149, 229, 43, 81, 95, 32, 138, 165, 42,
1768 136, 231, 106, 34, 90, 135, 60, 60, 105, 191, 50, 195, 62, 230, 189, 100,
1769 41, 110, 61, 204, 139, 237, 185, 208, 136, 61, 249, 12, 20, 230, 48, 141,
1770 65, 17, 204, 126, 215, 73, 77, 129, 49, 230, 39, 247, 222, 109, 50, 151,
1771 255, 246, 141, 254, 233, 117, 156, 172, 113, 74, 72, 133, 218, 227, 4, 192,
1772 27, 185, 21, 99, 61, 34, 52, 112, 74, 18, 149, 38, 195, 43, 154, 8,
1773 16, 189, 142, 139, 167, 137, 2, 155, 165, 1, 255, 158, 107, 131, 141, 112,
1774 87, 102, 97, 12, 228, 30, 143, 60, 14, 238, 183, 145, 88, 116, 187, 64,
1775 138, 136, 138, 24, 16, 241, 126, 37, 103, 99, 203, 164, 198, 129, 140, 189,
1776 18, 178, 241, 154, 7, 81, 8, 75, 196, 131, 121, 19, 52, 90, 125, 71,
1777 179, 8, 102, 149, 117, 88, 2, 58, 115, 41, 254, 118, 205, 28, 244, 153,
1778 79, 179, 136, 194, 59, 55, 233, 48, 87, 218, 151, 218, 172, 109, 72, 156,
1779 112, 175, 129, 111, 124, 151, 112, 69, 175, 237, 175, 208, 35, 15, 70, 189,
1780 245, 118, 229, 51, 121, 237, 106, 57, 190, 157, 42, 37, 107, 108, 240, 142,
1781 180, 123, 58, 243, 99, 76, 153, 94, 235, 148, 3, 146, 198, 250, 3, 176,
1782 73, 105, 64, 3, 129, 155, 69, 66, 114, 55, 53, 31, 200, 171, 9, 127,
1783 227, 81, 238, 0, 29, 54, 79, 184, 213, 44, 21, 21, 106, 118, 193, 193,
1784 132, 216, 89, 39, 107, 40, 29, 198, 229, 184, 123, 32, 225, 148, 78, 40,
1785 236, 108, 100, 112, 139, 33, 176, 201, 41, 56, 180, 87, 100, 161, 247, 181,
1786 48, 215, 32, 88, 3, 2, 69, 189, 162, 185, 155, 129, 131, 151, 170, 201,
1787 203, 192, 141, 27, 38, 21, 174, 100, 48, 138, 216, 113, 123, 137, 161, 92,
1788 153, 129, 184, 21, 205, 18, 190, 184, 189, 57, 130, 168, 67, 161, 16, 207,
1789 223, 35, 254, 40, 169, 65, 104, 178, 164, 88, 198, 40, 58, 221, 211, 96,
1790 91, 98, 147, 157, 193, 121, 211, 28, 185, 217, 84, 58, 236, 70, 181, 35,
1791 58, 27, 111, 52, 213, 103, 93, 154, 18, 60, 201, 180, 29, 28, 85, 126,
1792 170, 190, 231, 64, 27, 191, 83, 158, 125, 124, 43, 172, 198, 25, 151, 108,
1793 116, 7, 164, 114, 92, 215, 197, 222, 31, 231, 41, 112, 42, 172, 207, 164,
1794 87, 123, 138, 156, 78, 44, 131, 127, 155, 114, 138, 219, 52, 223, 150, 230,
1795 94, 165, 103, 45, 139, 238, 161, 208, 117, 178, 225, 67, 90, 90, 110, 176,
1796 20, 110, 4, 189, 194, 138, 12, 168, 150, 181, 139, 54, 241, 243, 87, 19,
1797 136, 251, 68, 1, 239, 85, 161, 139, 67, 117, 239, 162, 214, 96, 205, 66,
1798 79, 13, 47, 16, 72, 171, 33, 246, 93, 197, 65, 115, 108, 87, 83, 116,
1799 49, 66, 34, 18, 101, 65, 24, 178, 147, 34, 61, 242, 51, 246, 191, 249,
1800 164, 200, 210, 150, 146, 46, 157, 137, 147, 161, 25, 101, 217, 142, 125, 241,
1801 73, 115, 83, 86, 208, 167, 233, 77, 109, 89, 197, 219, 108, 206, 54, 99,
1802 113, 101, 77, 41, 251, 24, 203, 179, 28, 109, 62, 248, 113, 197, 82, 35,
1803 89, 132, 11, 184, 194, 237, 142, 71, 81, 173, 36, 220, 103, 66, 254, 78,
1804 252, 105, 211, 89, 149, 132, 218, 43, 45, 77, 64, 137, 248, 238, 145, 172,
1805 64, 78, 123, 225, 161, 166, 202, 94, 210, 227, 36, 254, 153, 230, 23, 21,
1806 82, 125, 167, 115, 10, 25, 141, 144, 226, 25, 151, 22, 157, 162, 2, 250,
1807 16, 161, 48, 111, 121, 9, 191, 229, 41, 136, 83, 163, 165, 10, 195, 34,
1808 56, 145, 166, 99, 184, 180, 180, 159, 95, 110, 17, 46, 227, 245, 97, 207,
1809 27, 113, 121, 55, 196, 29, 248, 171, 108, 250, 236, 1, 31, 108, 15, 34,
1810 233, 32, 250, 127, 67, 159, 151, 145, 5, 171, 219, 102, 159, 137, 231, 130,
1811 229, 177, 209, 253, 150, 217, 76, 62, 111, 42, 25, 152, 169, 83, 245, 164,
1812 127, 61, 128, 35, 234, 8, 69, 152, 103, 107, 18, 98, 101, 214, 205, 136,
1813 68, 165, 54, 48, 189, 59, 29, 254, 128, 255, 249, 46, 23, 246, 29, 131,
1814 185, 27, 160, 235, 16, 52, 232, 247, 100, 230, 137, 91, 111, 48, 202, 31,
1815 126, 167, 162, 45, 159, 66, 215, 176, 32, 5, 255, 82, 108, 31, 184, 89,
1816 6, 73, 8, 209, 86, 202, 122, 111, 132, 39, 140, 160, 74, 148, 254, 21,
1817 33, 80, 180, 165, 241, 182, 74, 205, 243, 194, 17, 216, 113, 8, 239, 190,
1818 34, 158, 31, 58, 223, 249, 51, 74, 174, 191, 157, 185, 12, 98, 190, 135,
1819 91, 198, 25, 221, 76, 118, 88, 240, 184, 188, 70, 92, 36, 208, 124, 43,
1820 228, 200, 86, 193, 178, 251, 115, 233, 240, 11, 134, 91, 230, 141, 195, 161,
1821 255, 12, 103, 85, 187, 84, 129, 202, 48, 85, 155, 242, 226, 185, 109, 126,
1822 2, 8, 174, 221, 203, 67, 182, 52, 114, 243, 219, 32, 89, 183, 125, 18,
1823 209, 200, 99, 116, 123, 185, 17, 250, 250, 223, 129, 221, 147, 249, 142, 238,
1824 25, 230, 85, 85, 141, 248, 144, 13, 241, 3, 10, 253, 74, 96, 82, 115,
1825 210, 221, 17, 79, 213, 119, 27, 192, 55, 41, 161, 125, 167, 87, 45, 10,
1826 246, 22, 76, 245, 83, 4, 160, 242, 62, 221, 89, 206, 80, 235, 33, 34,
1827 81, 125, 28, 117, 233, 167, 89, 6, 132, 138, 130, 88, 227, 245, 44, 138,
1828 180, 42, 215, 4, 177, 9, 167, 135, 173, 234, 185, 119, 100, 108, 4, 237,
1829 145, 52, 227, 61, 231, 130, 77, 97, 204, 175, 136, 225, 27, 29, 36, 142,
1830 151, 129, 170, 105, 233, 88, 57, 122, 219, 60, 16, 70, 253, 218, 123, 188,
1831 49, 210, 121, 115, 150, 249, 213, 246, 76, 2, 197, 196, 24, 169, 143, 175,
1832 230, 138, 32, 81, 191, 13, 166, 211, 252, 110, 84, 221, 244, 13, 45, 116,
1833 242, 123, 18, 153, 163, 187, 46, 33, 28, 160, 219, 179, 85, 166, 2, 125,
1834 92, 99, 147, 61, 4, 200, 245, 135, 172, 187, 4, 101, 102, 85, 79, 168,
1835 53, 222, 129, 150, 252, 253, 252, 45, 39, 64, 33, 104, 69, 239, 180, 71,
1836 234, 177, 245, 185, 59, 238, 88, 65, 58, 156, 84, 238, 150, 46, 236, 65,
1837 229, 33, 221, 168, 102, 249, 163, 155, 36, 189, 54, 211, 154, 247, 69, 45,
1838 47, 140, 119, 63, 143, 129, 163, 38, 120, 88, 216, 66, 117, 118, 176, 93,
1839 153, 42, 129, 198, 45, 203, 26, 150, 43, 17, 53, 104, 196, 82, 234, 59,
1840 129, 81, 14, 104, 229, 8, 204, 187, 8, 168, 112, 18, 211, 154, 195, 181,
1841 87, 241, 234, 148, 68, 229, 231, 23, 134, 14, 97, 119, 22, 48, 123, 17,
1842 115, 105, 180, 124, 135, 51, 177, 104, 187, 23, 210, 76, 161, 8, 36, 57,
1843 218, 252, 142, 236, 154, 178, 119, 129, 189, 255, 208, 56, 25, 70, 68, 50,
1844 57, 172, 77, 154, 163, 80, 33, 180, 118, 57, 105, 97, 5, 50, 158, 185,
1845 226, 119, 237, 163, 47, 79, 233, 114, 160, 246, 93, 238, 197, 217, 240, 55,
1846 121, 37, 138, 104, 245, 181, 30, 133, 129, 94, 97, 31, 188, 121, 119, 74,
1847 227, 167, 196, 194, 108, 185, 63, 242, 0, 224, 8, 162, 49, 173, 57, 250,
1848 12, 113, 238, 241, 0, 180, 180, 198, 57, 180, 248, 243, 214, 122, 103, 81,
1849 205, 243, 232, 213, 39, 122, 142, 107, 4, 63, 123, 147, 22, 78, 174, 200,
1850 33, 27, 16, 76, 139, 230, 32, 101, 246, 228, 246, 89, 15, 30, 11, 87,
1851 174, 70, 195, 104, 14, 26, 209, 149, 19, 254, 121, 62, 186, 224, 56, 247,
1852 10, 237, 102, 83, 215, 211, 22, 123, 161, 52, 251, 122, 142, 228, 191, 93,
1853 151, 174, 176, 166, 64, 184, 254, 113, 140, 214, 109, 159, 126, 201, 95, 245,
1854 167, 180, 165, 106, 61, 83, 143, 239, 68, 254, 0, 201, 237, 162, 231, 108,
1855 152, 131, 248, 39, 149, 131, 80, 224, 41, 14, 157, 96, 16, 251, 139, 15,
1856 153, 45, 29, 84, 116, 154, 221, 234, 127, 39, 10, 244, 3, 92, 154, 93,
1857 125, 209, 252, 144, 73, 139, 47, 93, 98, 78, 7, 61, 173, 117, 46, 155,
1858 73, 76, 127, 202, 5, 223, 113, 215, 86, 54, 82, 0, 105, 16, 52, 226,
1859 140, 232, 53, 23, 76, 117, 212, 139, 183, 112, 95, 162, 174, 153, 104, 4,
1860 241, 133, 159, 188, 4, 147, 92, 125, 133, 104, 26, 241, 130, 13, 239, 96,
1861 235, 36, 195, 74, 193, 126, 54, 27, 55, 190, 97, 44, 26, 106, 31, 76,
1862 244, 174, 179, 1, 97, 168, 114, 14, 65, 60, 199, 182, 133, 130, 65, 175,
1863 95, 224, 125, 74, 157, 34, 99, 26, 135, 160, 188, 244, 114, 175, 211, 194,
1864 74, 97, 182, 244, 93, 3, 219, 223, 154, 204, 10, 132, 233, 165, 23, 204,
1865 187, 163, 179, 23, 72, 137, 22, 40, 123, 77, 216, 95, 44, 20, 55, 213,
1866 165, 125, 17, 237, 77, 140, 2, 146, 193, 104, 9, 83, 40, 126, 177, 137,
1867 53, 89, 59, 23, 49, 80, 240, 168, 70, 97, 250, 36, 161, 17, 228, 161,
1868 136, 213, 43, 118, 106, 198, 251, 68, 223, 34, 79, 123, 118, 91, 222, 236,
1869 73, 236, 175, 255, 248, 249, 96, 53, 245, 248, 238, 12, 106, 127, 183, 1,
1870 31, 193, 14, 126, 7, 19, 252, 102, 191, 74, 208, 115, 140, 76, 133, 179,
1871 82, 5, 83, 122, 154, 82, 37, 19, 171, 190, 177, 177, 233, 248, 175, 214,
1872 93, 17, 121, 167, 249, 165, 149, 191, 145, 188, 218, 99, 154, 55, 109, 202,
1873 12, 17, 56, 107, 124, 137, 156, 233, 85, 18, 237, 207, 9, 72, 10, 218,
1874 98, 58, 70, 254, 207, 179, 61, 201, 250, 163, 135, 215, 130, 182, 47, 93,
1875 123, 14, 251, 252, 34, 240, 172, 151, 111, 127, 19, 6, 165, 96, 254, 15,
1876 32, 153, 247, 91, 200, 78, 169, 160, 28, 70, 146, 251, 174, 49, 54, 98,
1877 93, 161, 19, 105, 195, 62, 196, 38, 84, 53, 122, 177, 158, 179, 113, 93,
1878 91, 102, 90, 119, 52, 120, 247, 208, 228, 233, 97, 240, 187, 205, 14, 194,
1879 35, 134, 229, 241, 16, 152, 130, 206, 63, 93, 110, 21, 52, 170, 67, 99,
1880 214, 121, 230, 201, 133, 173, 143, 225, 81, 184, 139, 105, 226, 58, 237, 106,
1881 16, 91, 163, 15, 4, 63, 94, 186, 80, 219, 85, 209, 183, 129, 122, 39,
1882 8, 140, 180, 203, 167, 223, 148, 74, 147, 29, 237, 108, 105, 143, 229, 254,
1883 104, 243, 111, 210, 11, 185, 158, 151, 90, 47, 43, 233, 91, 18, 119, 144,
1884 184, 63, 64, 3, 244, 225, 30, 134, 198, 210, 41, 103, 2, 31, 221, 74,
1885 26, 54, 18, 23, 242, 104, 39, 31, 167, 183, 209, 105, 192, 88, 219, 25,
1886 134, 228, 8, 222, 149, 25, 195, 141, 61, 33, 114, 213, 93, 6, 58, 12,
1887 191, 113, 216, 153, 39, 235, 173, 146, 34, 139, 210, 13, 59, 240, 88, 10,
1888 71, 72, 27, 225, 32, 70, 92, 182, 120, 151, 82, 246, 248, 93, 119, 13,
1889 199, 161, 48, 202, 84, 88, 226, 198, 249, 152, 165, 34, 183, 109, 9, 196,
1890 232, 168, 236, 241, 85, 100, 181, 81, 235, 85, 247, 85, 173, 57, 141, 145,
1891 116, 254, 146, 249, 161, 133, 245, 17, 117, 141, 208, 49, 245, 121, 181, 158,
1892 144, 197, 200, 63, 202, 119, 158, 107, 112, 56, 178, 227, 29, 87, 48, 151,
1893 228, 55, 194, 130, 52, 12, 35, 245, 171, 149, 90, 206, 151, 205, 184, 221,
1894 45, 57, 126, 64, 203, 244, 167, 172, 134, 141, 5, 145, 101, 29, 33, 133,
1895 90, 17, 64, 127, 152, 209, 78, 10, 131, 151, 157, 204, 231, 255, 164, 122,
1896 16, 78, 220, 245, 161, 229, 90, 203, 12, 205, 95, 8, 47, 51, 92, 23,
1897 118, 95, 211, 124, 116, 147, 74, 79, 10, 192, 217, 74, 80, 127, 17, 105,
1898 56, 248, 144, 72, 197, 159, 230, 19, 147, 31, 50, 239, 236, 92, 237, 131,
1899 159, 88, 99, 171, 76, 209, 41, 181, 194, 28, 3, 242, 137, 227, 20, 198,
1900 120, 6, 12, 97, 45, 210, 143, 177, 60, 83, 61, 135, 132, 187, 54, 61,
1901 82, 149, 193, 23, 45, 6, 95, 28, 167, 0, 67, 27, 17, 93, 241, 43,
1902 221, 109, 102, 179, 204, 80, 198, 60, 229, 38, 47, 100, 235, 50, 166, 193,
1903 79, 255, 71, 207, 116, 216, 201, 255, 134, 194, 201, 34, 169, 250, 28, 217,
1904 198, 176, 10, 203, 193, 197, 125, 80, 116, 149, 108, 224, 10, 195, 68, 228,
1905 218, 85, 146, 119, 67, 73, 118, 186, 171, 162, 86, 198, 176, 73, 41, 162,
1906 237, 196, 130, 32, 231, 70, 197, 139, 140, 182, 151, 221, 55, 95, 183, 58,
1907 43, 141, 160, 148, 193, 197, 162, 189, 62, 36, 226, 255, 214, 75, 166, 163,
1908 78, 30, 253, 52, 8, 190, 55, 241, 60, 187, 226, 34, 177, 102, 155, 56,
1909 165, 51, 183, 2, 181, 247, 125, 53, 36, 206, 73, 32, 19, 20, 204, 228,
1910 105, 254, 34, 201, 161, 175, 232, 223, 216, 103, 247, 13, 68, 49, 206, 172,
1911 122, 11, 17, 3, 55, 101, 94, 39, 18, 183, 214, 16, 149, 252, 137, 39,
1912 205, 84, 114, 80, 101, 246, 222, 173, 145, 229, 199, 73, 91, 219, 123, 235,
1913 45, 190, 39, 241, 146, 209, 124, 178, 151, 30, 19, 26, 112, 150, 192, 183,
1914 237, 124, 253, 165, 28, 130, 132, 161, 157, 140, 159, 163, 87, 181, 211, 166,
1915 233, 0, 180, 87, 125, 229, 173, 128, 90, 23, 38, 235, 143, 31, 117, 66,
1916 203, 76, 150, 249, 19, 23, 45, 184, 56, 249, 220, 114, 205, 1, 215, 169,
1917 205, 173, 58, 188, 128, 116, 122, 184, 48, 114, 95, 167, 3, 191, 136, 238,
1918 124, 245, 166, 82, 191, 16, 212, 149, 183, 166, 14, 212, 255, 67, 106, 50,
1919 159, 172, 211, 101, 207, 198, 242, 179, 40, 1, 73, 20, 64, 185, 29, 21,
1920 216, 246, 154, 104, 156, 214, 231, 192, 137, 220, 150, 215, 4, 80, 110, 164,
1921 185, 68, 114, 110, 234, 45, 143, 171, 196, 148, 151, 237, 16, 251, 68, 221,
1922 100, 18, 212, 110, 59, 147, 113, 217, 152, 28, 83, 198, 211, 231, 35, 39,
1923 198, 19, 163, 67, 40, 24, 124, 52, 138, 161, 254, 233, 90, 24, 214, 222,
1924 121, 189, 95, 180, 77, 147, 21, 187, 111, 9, 184, 75, 209, 250, 81, 110,
1925 34, 97, 198, 132, 182, 229, 192, 208, 67, 98, 124, 108, 141, 89, 37, 124,
1926 11, 5, 128, 76, 13, 220, 167, 201, 182, 151, 45, 235, 37, 142, 35, 192,
1927 28, 209, 254, 40, 15, 22, 183, 181, 138, 144, 72, 21, 48, 9, 133, 127,
1928 74, 187, 19, 170, 88, 209, 119, 194, 230, 243, 237, 156, 184, 156, 46, 118,
1929 58, 7, 139, 163, 157, 167, 65, 249, 102, 228, 201, 27, 255, 189, 54, 151,
1930 168, 108, 129, 113, 106, 245, 244, 158, 176, 247, 193, 161, 94, 248, 190, 38,
1931 208, 177, 246, 108, 158, 199, 56, 37, 141, 101, 102, 44, 109, 144, 23, 214,
1932 235, 251, 210, 184, 103, 145, 248, 118, 162, 139, 84, 61, 146, 29, 70, 170,
1933 80, 30, 145, 156, 202, 185, 222, 87, 247, 137, 153, 98, 166, 61, 173, 200,
1934 164, 40, 2, 137, 226, 66, 162, 24, 172, 46, 203, 80, 176, 156, 93, 26,
1935 48, 69, 130, 192, 129, 84, 70, 15, 25, 224, 175, 31, 161, 110, 61, 220,
1936 214, 220, 152, 22, 41, 51, 57, 114, 182, 139, 129, 159, 194, 169, 133, 246,
1937 37, 23, 79, 90, 88, 231, 6, 252, 101, 241, 250, 168, 71, 149, 252, 196,
1938 126, 2, 29, 177, 70, 218, 120, 203, 72, 243, 46, 45, 149, 57, 108, 37,
1939 198, 38, 177, 210, 32, 252, 227, 160, 77, 174, 211, 207, 212, 82, 139, 189,
1940 79, 198, 116, 165, 185, 49, 188, 43, 116, 230, 182, 34, 224, 138, 216, 93,
1941 93, 94, 175, 10, 217, 41, 209, 177, 36, 142, 205, 241, 34, 129, 8, 91,
1942 78, 210, 231, 166, 188, 18, 77, 139, 201, 203, 3, 154, 131, 8, 193, 207,
1943 255, 98, 166, 192, 215, 206, 236, 217, 9, 19, 78, 227, 105, 146, 56, 50,
1944 60, 114, 20, 239, 186, 119, 113, 183, 79, 186, 126, 223, 131, 30, 217, 249,
1945 82, 10, 188, 238, 161, 46, 174, 96, 6, 187, 251, 234, 62, 163, 213, 55,
1946 71, 253, 25, 193, 26, 176, 111, 20, 167, 220, 240, 78, 243, 42, 104, 194,
1947 0, 62, 53, 119, 199, 9, 202, 20, 164, 55, 155, 204, 107, 120, 180, 6,
1948 20, 114, 122, 130, 143, 124, 89, 130, 66, 140, 43, 183, 203, 216, 78, 86,
1949 178, 16, 226, 159, 192, 205, 105, 113, 138, 165, 108, 18, 214, 100, 154, 71,
1950 150, 46, 70, 178, 181, 68, 68, 160, 253, 18, 19, 220, 253, 207, 87, 105,
1951 32, 239, 229, 137, 155, 176, 139, 168, 248, 143, 86, 67, 224, 146, 17, 80,
1952 147, 87, 30, 168, 125, 169, 91, 59, 55, 169, 142, 226, 71, 181, 114, 40,
1953 231, 229, 155, 27, 31, 144, 166, 96, 9, 85, 90, 152, 25, 83, 113, 15,
1954 65, 106, 162, 151, 74, 7, 27, 188, 221, 150, 108, 96, 102, 233, 174, 208,
1955 9, 170, 159, 239, 67, 230, 187, 93, 141, 102, 218, 191, 48, 22, 53, 124,
1956 84, 96, 110, 43, 28, 126, 26, 32, 104, 104, 65, 99, 112, 207, 167, 54,
1957 175, 165, 152, 105, 234, 18, 138, 148, 101, 9, 87, 32, 155, 192, 7, 100,
1958 101, 72, 133, 203, 170, 248, 222, 190, 243, 0, 75, 100, 38, 52, 98, 125,
1959 66, 185, 104, 255, 8, 184, 116, 195, 32, 239, 213, 54, 28, 185, 96, 177,
1960 233, 30, 210, 25, 155, 28, 128, 53, 88, 101, 146, 68, 52, 60, 55, 183,
1961 171, 157, 207, 128, 53, 60, 22, 100, 53, 121, 124, 205, 163, 55, 82, 162,
1962 96, 99, 71, 184, 243, 169, 137, 77, 191, 16, 55, 59, 220, 197, 20, 4,
1963 61, 89, 4, 157, 96, 171, 145, 91, 145, 19, 36, 195, 42, 132, 152, 83,
1964 255, 137, 64, 37, 72, 190, 82, 29, 181, 41, 175, 144, 46, 229, 236, 217,
1965 105, 194, 7, 118, 19, 47, 151, 238, 222, 255, 183, 236, 181, 175, 135, 91,
1966 55, 163, 4, 156, 190, 18, 153, 21, 178, 51, 102, 36, 62, 253, 228, 12,
1967 102, 230, 138, 183, 182, 253, 54, 170, 251, 50, 107, 223, 180, 177, 74, 169,
1968 231, 208, 76, 47, 146, 158, 251, 181, 9, 219, 240, 169, 72, 250, 241, 125,
1969 86, 200, 125, 166, 137, 65, 115, 18, 68, 241, 124, 51, 128, 223, 113, 239,
1970 201, 221, 152, 21, 114, 127, 79, 101, 44, 48, 241, 21, 221, 91, 240, 214,
1971 166, 119, 140, 21, 143, 155, 172, 26, 207, 233, 0, 128, 118, 45, 22, 6,
1972 222, 75, 90, 99, 173, 214, 121, 53, 71, 183, 253, 19, 95, 71, 66, 16,
1973 41, 35, 195, 9, 93, 247, 42, 150, 49, 46, 229, 73, 220, 12, 230, 51,
1974 109, 147, 108, 124, 102, 83, 78, 75, 67, 141, 55, 246, 155, 195, 190, 56,
1975 116, 59, 185, 237, 104, 78, 66, 173, 165, 178, 32, 93, 14, 10, 46, 30,
1976 229, 108, 50, 52, 188, 2, 244, 142, 201, 8, 245, 53, 210, 132, 15, 184,
1977 82, 85, 156, 142, 35, 49, 39, 183, 58, 61, 96, 143, 60, 190, 41, 152,
1978 9, 183, 127, 90, 157, 109, 196, 76, 36, 177, 244, 173, 63, 233, 1, 16,
1979 110, 216, 203, 94, 245, 195, 71, 55, 161, 149, 230, 122, 159, 133, 143, 180,
1980 129, 6, 111, 56, 211, 30, 13, 142, 216, 122, 87, 69, 91, 233, 254, 4,
1981 232, 207, 157, 32, 113, 50, 227, 233, 158, 171, 38, 228, 191, 121, 56, 165,
1982 222, 22, 180, 217, 111, 104, 112, 134, 12, 22, 244, 44, 234, 34, 253, 217,
1983 212, 140, 93, 235, 36, 54, 4, 129, 32, 91, 197, 163, 24, 71, 133, 161,
1984 111, 114, 29, 19, 45, 100, 10, 207, 139, 158, 219, 206, 160, 248, 94, 12,
1985 241, 58, 118, 141, 115, 166, 177, 78, 173, 59, 85, 81, 97, 240, 154, 231,
1986 79, 200, 199, 195, 205, 98, 245, 129, 246, 217, 97, 209, 249, 194, 28, 179,
1987 49, 248, 14, 6, 128, 61, 178, 15, 190, 32, 251, 111, 225, 148, 0, 11,
1988 227, 246, 146, 46, 41, 231, 24, 80, 43, 174, 228, 166, 171, 206, 72, 142,
1989 253, 96, 242, 181, 31, 207, 95, 66, 88, 152, 165, 67, 7, 238, 23, 114,
1990 50, 224, 212, 241, 202, 224, 247, 70, 215, 162, 8, 237, 121, 169, 254, 191,
1991 30, 19, 72, 252, 3, 109, 5, 206, 105, 130, 69, 250, 250, 232, 135, 203,
1992 253, 77, 102, 203, 40, 72, 128, 223, 60, 59, 83, 103, 162, 117, 47, 200,
1993 65, 88, 43, 168, 168, 255, 46, 166, 86, 193, 231, 227, 92, 222, 186, 44,
1994 20, 166, 136, 123, 193, 88, 155, 166, 185, 73, 85, 124, 253, 80, 43, 176,
1995 173, 191, 2, 10, 50, 101, 143, 17, 129, 56, 191, 83, 103, 183, 143, 247,
1996 253, 161, 1, 76, 161, 76, 127, 194, 108, 88, 138, 152, 147, 164, 65, 147,
1997 61, 160, 192, 44, 56, 103, 144, 51, 153, 224, 38, 97, 173, 128, 34, 85,
1998 89, 143, 17, 239, 200, 47, 160, 2, 151, 249, 219, 208, 116, 71, 205, 72,
1999 210, 178, 205, 184, 207, 19, 37, 127, 183, 21, 229, 176, 91, 196, 203, 225,
2000 67, 189, 94, 214, 180, 203, 140, 186, 39, 250, 66, 3, 128, 35, 206, 43,
2001 67, 244, 207, 157, 165, 188, 201, 173, 43, 47, 210, 139, 254, 144, 218, 62,
2002 55, 6, 187, 32, 128, 206, 56, 74, 66, 42, 159, 171, 108, 56, 220, 246,
2003 127, 127, 32, 221, 190, 33, 91, 93, 88, 36, 51, 115, 93, 47, 203, 133,
2004 155, 166, 13, 124, 118, 56, 182, 202, 55, 224, 226, 36, 233, 9, 200, 217,
2005 249, 22, 252, 209, 179, 66, 32, 30, 129, 48, 186, 232, 66, 248, 197, 120,
2006 168, 191, 124, 16, 232, 117, 44, 125, 188, 157, 71, 35, 245, 219, 17, 111,
2007 41, 159, 96, 44, 233, 3, 105, 109, 199, 182, 42, 34, 87, 218, 48, 142,
2008 196, 99, 37, 89, 44, 173, 184, 160, 104, 203, 224, 230, 58, 60, 213, 132,
2009 9, 9, 253, 251, 72, 75, 235, 224, 20, 198, 208, 178, 42, 253, 126, 105,
2010 227, 171, 89, 93, 42, 222, 185, 232, 8, 248, 83, 78, 132, 37, 38, 173,
2011 67, 116, 185, 216, 47, 192, 196, 221, 172, 26, 5, 191, 41, 33, 114, 40,
2012 139, 22, 147, 173, 234, 41, 252, 118, 244, 73, 73, 237, 42, 6, 123, 228,
2013 213, 210, 202, 65, 195, 253, 112, 57, 202, 85, 247, 15, 160, 237, 138, 76,
2014 70, 94, 230, 163, 112, 217, 134, 78, 213, 55, 68, 198, 29, 195, 16, 138,
2015 162, 19, 34, 158, 144, 131, 64, 244, 80, 85, 63, 175, 47, 63, 233, 175,
2016 168, 190, 39, 4, 47, 200, 9, 161, 248, 198, 182, 166, 56, 23, 5, 121,
2017 188, 46, 90, 56, 216, 72, 203, 107, 212, 171, 110, 134, 255, 24, 243, 30,
2018 188, 55, 111, 8, 238, 198, 201, 180, 150, 230, 191, 248, 10, 82, 178, 247,
2019 114, 216, 83, 183, 24, 188, 131, 26, 246, 210, 42, 30, 111, 181, 215, 129,
2020 41, 21, 207, 15, 83, 86, 252, 169, 220, 246, 117, 114, 254, 143, 193, 60,
2021 123, 226, 202, 18, 77, 221, 135, 84, 180, 229, 79, 143, 241, 219, 217, 85,
2022 158, 63, 5, 245, 134, 63, 102, 68, 145, 100, 35, 13, 127, 241, 76, 211,
2023 204, 45, 125, 175, 128, 142, 244, 189, 203, 138, 63, 249, 2, 174, 167, 171,
2024 32, 131, 12, 250, 248, 198, 245, 3, 98, 4, 111, 244, 226, 122, 136, 58,
2025 189, 234, 244, 106, 117, 92, 97, 191, 247, 95, 114, 20, 151, 51, 67, 174,
2026 236, 109, 252, 215, 107, 183, 174, 254, 59, 22, 158, 203, 152, 194, 135, 200,
2027 61, 193, 249, 199, 24, 167, 119, 223, 205, 135, 112, 51, 118, 120, 253, 75,
2028 61, 101, 172, 213, 36, 226, 135, 54, 229, 214, 151, 9, 2, 197, 84, 22,
2029 207, 55, 182, 191, 53, 243, 63, 53, 13, 93, 121, 44, 174, 237, 192, 138,
2030 116, 208, 200, 134, 94, 34, 122, 110, 157, 231, 169, 177, 180, 203, 167, 125,
2031 73, 44, 57, 104, 204, 174, 36, 172, 47, 21, 36, 220, 92, 62, 191, 77,
2032 113, 5, 32, 8, 115, 61, 235, 237, 27, 76, 69, 187, 117, 72, 26, 49,
2033 217, 249, 130, 134, 139, 27, 229, 183, 146, 80, 3, 154, 25, 26, 52, 175,
2034 157, 1, 91, 126, 165, 6, 168, 134, 60, 32, 227, 68, 161, 126, 207, 247,
2035 160, 103, 105, 156, 129, 211, 220, 155, 222, 60, 184, 255, 149, 9, 116, 201,
2036 151, 42, 126, 0, 36, 167, 178, 40, 160, 5, 115, 82, 176, 207, 38, 10,
2037 213, 132, 57, 255, 138, 4, 204, 32, 33, 128, 174, 99, 94, 161, 237, 0,
2038 230, 209, 198, 89, 167, 80, 193, 116, 195, 111, 204, 241, 169, 46, 117, 108,
2039 244, 247, 12, 216, 106, 50, 242, 209, 61, 42, 214, 33, 25, 38, 138, 217,
2040 225, 105, 76, 244, 126, 252, 253, 57, 238, 107, 166, 158, 250, 132, 105, 91,
2041 184, 209, 217, 5, 202, 84, 254, 51, 233, 58, 2, 141, 130, 47, 97, 125,
2042 244, 95, 177, 68, 9, 213, 115, 118, 215, 70, 9, 64, 113, 139, 19, 165,
2043 231, 204, 191, 129, 15, 235, 143, 225, 241, 75, 168, 227, 126, 58, 201, 98,
2044 16, 227, 27, 148, 166, 1, 34, 110, 84, 120, 11, 181, 150, 111, 167, 184,
2045 49, 244, 231, 192, 44, 59, 41, 122, 58, 12, 185, 180, 54, 122, 106, 201,
2046 2, 65, 118, 129, 149, 139, 31, 201, 205, 90, 96, 76, 23, 43, 218, 15,
2047 233, 202, 103, 84, 18, 122, 25, 218, 38, 252, 222, 104, 172, 96, 30, 57,
2048 205, 130, 106, 183, 189, 230, 67, 63, 162, 142, 46, 199, 45, 244, 3, 26,
2049 208, 119, 15, 16, 29, 196, 178, 90, 41, 94, 193, 64, 51, 205, 136, 157
2050};
2051
diff --git a/baseline/source/rijndael_dec/rijndael_dec.c b/baseline/source/rijndael_dec/rijndael_dec.c
new file mode 100644
index 0000000..4082eff
--- /dev/null
+++ b/baseline/source/rijndael_dec/rijndael_dec.c
@@ -0,0 +1,195 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: rijndael_enc
7
8 Author: Dr Brian Gladman
9
10 Function: rijndael_dec is an implementation of the AES decryption
11 algorithm (Rijndael).
12
13 Source: security section of MiBench
14
15 Changes: Add computation of a checksum, refactoring
16
17 License: see below
18
19*/
20
21/*
22 -----------------------------------------------------------------------
23 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
24
25 TERMS
26
27 Redistribution and use in source and binary forms, with or without
28 modification, are permitted provided that the following conditions
29 are met:
30 1. Redistributions of source code must retain the above copyright
31 notice, this list of conditions and the following disclaimer.
32 2. Redistributions in binary form must reproduce the above copyright
33 notice, this list of conditions and the following disclaimer in the
34 documentation and/or other materials provided with the distribution.
35
36 This software is provided 'as is' with no guarantees of correctness or
37 fitness for purpose.
38 -----------------------------------------------------------------------
39*/
40
41#include "../extra.h"
42#include "aes.h"
43#include "rijndael_dec_libc.h"
44
45/*
46 Global variable definitions
47*/
48unsigned char rijndael_dec_key[32];
49int rijndael_dec_key_len;
50
51extern unsigned char rijndael_dec_data[];
52struct rijndael_dec_FILE rijndael_dec_fin;
53
54int rijndael_dec_checksum = 0;
55
56/*
57 Forward declaration of functions
58*/
59void rijndael_dec_init( void );
60int rijndael_dec_return( void );
61void rijndael_dec_fillrand( unsigned char *buf, int len );
62void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx );
63void rijndael_dec_main( void );
64
65void rijndael_dec_init( void )
66{
67 /* create a pseudo-file for the input*/
68 rijndael_dec_fin.data = rijndael_dec_data;
69 rijndael_dec_fin.size = 32768;
70 rijndael_dec_fin.cur_pos = 0;
71
72 unsigned i;
73 volatile int x = 0;
74 rijndael_dec_fin.size ^= x;
75 _Pragma( "loopbound min 32768 max 32768" )
76 for ( i = 0; i < rijndael_dec_fin.size; i++ )
77 rijndael_dec_fin.data[i] ^= x;
78
79 /* this is a pointer to the hexadecimal key digits */
80 const volatile char *cp =
81 "1234567890abcdeffedcba09876543211234567890abcdeffedcba0987654321";
82 char ch;
83 int by = 0;
84
85 i = 0; /* this is a count for the input digits processed */
86 _Pragma( "loopbound min 64 max 64" )
87 while ( i < 64 && *cp ) { /* the maximum key length is 32 bytes and */
88 /* hence at most 64 hexadecimal digits */
89 ch = rijndael_dec_toupper( *cp++ ); /* process a hexadecimal digit */
90 if ( ch >= '0' && ch <= '9' )
91 by = ( by << 4 ) + ch - '0';
92 else
93 if ( ch >= 'A' && ch <= 'F' )
94 by = ( by << 4 ) + ch - 'A' + 10;
95 else { /* error if not hexadecimal */
96 rijndael_dec_checksum = -2;
97 return;
98 }
99
100 /* store a key byte for each pair of hexadecimal digits */
101 if ( i++ & 1 )
102 rijndael_dec_key[i / 2 - 1] = by & 0xff;
103 }
104
105 if ( *cp ) {
106 rijndael_dec_checksum = -3;
107 return;
108 } else
109 if ( i < 32 || ( i & 15 ) ) {
110 rijndael_dec_checksum = -4;
111 return;
112 }
113
114 rijndael_dec_key_len = i / 2;
115}
116
117int rijndael_dec_return( void )
118{
119 return ( ( rijndael_dec_checksum == ( int )262180 ) ? 0 : -1 );
120}
121
122void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx )
123{
124 unsigned char inbuf1[16], inbuf2[16], outbuf[16], *bp1, *bp2, *tp;
125 int i;
126
127
128 rijndael_dec_fread( inbuf1, 1, 16, fin );
129
130 i = rijndael_dec_fread( inbuf2, 1, 16,
131 fin ); /* read 1st encrypted file block */
132
133 if ( i && i != 16 ) {
134 rijndael_dec_checksum = -10;
135 return;
136 }
137
138 rijndael_dec_decrypt( inbuf2, outbuf,
139 ctx ); /* decrypt it */
140
141 rijndael_dec_checksum += outbuf[15];
142
143 _Pragma( "loopbound min 16 max 16" )
144 for ( i = 0; i < 16; ++i ) /* xor with previous input */
145 outbuf[i] ^= inbuf1[i];
146
147 bp1 = inbuf1; /* set up pointers to two input buffers */
148 bp2 = inbuf2;
149
150 /* TODO: this is necessarily an input-dependent loop bound */
151 _Pragma( "loopbound min 19491 max 91491" )
152 while ( 1 ) {
153 i = rijndael_dec_fread( bp1, 1, 16, fin ); /* read next encrypted block */
154 /* to first input buffer */
155 if ( i != 16 ) /* no more bytes in input - the decrypted */
156 break; /* partial final buffer needs to be output */
157
158 /* if a block has been read the previous block must have been */
159 /* full lnegth so we can now write it out */
160
161 rijndael_dec_decrypt( bp1, outbuf, ctx ); /* decrypt the new input block and */
162
163 rijndael_dec_checksum += outbuf[15];
164
165 _Pragma( "loopbound min 16 max 16" )
166 for ( i = 0; i < 16; ++i ) /* xor it with previous input block */
167 outbuf[i] ^= bp2[i];
168
169 /* swap buffer pointers */
170 tp = bp1, bp1 = bp2, bp2 = tp;
171 }
172}
173
174void _Pragma( "entrypoint" ) rijndael_dec_main( void )
175{
176 struct aes ctx[1];
177
178 /* decryption in Cipher Block Chaining mode */
179 rijndael_dec_set_key( rijndael_dec_key, rijndael_dec_key_len, dec, ctx );
180 rijndael_dec_decfile( &rijndael_dec_fin, ctx );
181}
182
183int main(int argc, char** argv)
184{
185 SET_UP
186 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
187 START_LOOP
188 rijndael_dec_init();
189 rijndael_dec_main();
190 STOP_LOOP
191 }
192 WRITE_TO_FILE
193 return ( rijndael_dec_return() );
194}
195
diff --git a/baseline/source/rijndael_dec/rijndael_dec_libc.c b/baseline/source/rijndael_dec/rijndael_dec_libc.c
new file mode 100644
index 0000000..00390df
--- /dev/null
+++ b/baseline/source/rijndael_dec/rijndael_dec_libc.c
@@ -0,0 +1,66 @@
1#include "rijndael_dec_libc.h"
2
3int rijndael_dec_toupper( int c )
4{
5 if ( ( c >= 'a' ) && ( c <= 'z' ) )
6 return c - 'a' + 'A';
7 return c;
8}
9
10unsigned long rijndael_dec_fread( void *ptr, unsigned long size,
11 unsigned long count, struct rijndael_dec_FILE *stream )
12{
13 unsigned i = stream->cur_pos, i2 = 0;
14 unsigned long number_of_chars_to_read =
15 stream->size - stream->cur_pos >= size * count ?
16 size * count : stream->size - stream->cur_pos;
17 _Pragma( "loopbound min 10 max 16" )
18 while ( i < stream->cur_pos + number_of_chars_to_read )
19 ( ( unsigned char * )ptr )[i2++] = stream->data[i++];
20 stream->cur_pos += number_of_chars_to_read;
21 return number_of_chars_to_read;
22}
23
24unsigned long rijndael_dec_fwrite( const void *ptr, unsigned long size,
25 unsigned long count, struct rijndael_dec_FILE *stream )
26{
27 unsigned i = stream->cur_pos, i2 = 0;
28 unsigned long number_of_chars_to_write =
29 stream->size - stream->cur_pos >= size * count ?
30 size * count : stream->size - stream->cur_pos;
31 _Pragma( "loopbound min 0 max 0" )
32 while ( i < stream->cur_pos + number_of_chars_to_write )
33 stream->data[i++] = ( ( unsigned char * )ptr )[i2++];
34 stream->cur_pos += number_of_chars_to_write;
35 return number_of_chars_to_write;
36}
37
38int rijndael_dec_fseek( struct rijndael_dec_FILE *stream, long int offset,
39 Origin origin )
40{
41 if ( origin == RIJNDAEL_DEC_SEEK_SET ) {
42 stream->cur_pos = offset;
43 return 0;
44 } else
45 if ( origin == RIJNDAEL_DEC_SEEK_CUR ) {
46 stream->cur_pos += offset;
47 return 0;
48 } else
49 if ( origin == RIJNDAEL_DEC_SEEK_END ) {
50 stream->cur_pos = stream->size + offset;
51 return 0;
52 }
53 return -1;
54}
55
56int rijndael_dec_fgetpos( struct rijndael_dec_FILE *stream,
57 unsigned *position )
58{
59 *position = stream->cur_pos;
60 return 0;
61}
62
63int rijndael_dec_feof( struct rijndael_dec_FILE *stream )
64{
65 return stream->cur_pos == stream->size ? 1 : 0;
66}
diff --git a/baseline/source/rijndael_dec/rijndael_dec_libc.h b/baseline/source/rijndael_dec/rijndael_dec_libc.h
new file mode 100644
index 0000000..eb7b8d6
--- /dev/null
+++ b/baseline/source/rijndael_dec/rijndael_dec_libc.h
@@ -0,0 +1,24 @@
1#ifndef RIJNDAEL_DEC_LIBC_H
2#define RIJNDAEL_DEC_LIBC_H
3
4int rijndael_dec_toupper ( int c );
5
6enum _Origin_ { RIJNDAEL_DEC_SEEK_SET, RIJNDAEL_DEC_SEEK_CUR, RIJNDAEL_DEC_SEEK_END };
7typedef enum _Origin_ Origin;
8struct rijndael_dec_FILE {
9 unsigned char *data;
10 unsigned long size;
11 unsigned cur_pos;
12};
13
14unsigned long rijndael_dec_fread ( void *ptr, unsigned long size,
15 unsigned long count, struct rijndael_dec_FILE *stream );
16unsigned long rijndael_dec_fwrite ( const void *ptr, unsigned long size,
17 unsigned long count, struct rijndael_dec_FILE *stream );
18int rijndael_dec_fseek ( struct rijndael_dec_FILE *stream, long int offset,
19 Origin origin );
20int rijndael_dec_fgetpos( struct rijndael_dec_FILE *stream,
21 unsigned *position );
22int rijndael_dec_feof ( struct rijndael_dec_FILE *stream );
23
24#endif // RIJNDAEL_DEC_LIBC_H
diff --git a/baseline/source/rijndael_enc/ChangeLog.txt b/baseline/source/rijndael_enc/ChangeLog.txt
new file mode 100644
index 0000000..6ea9ed4
--- /dev/null
+++ b/baseline/source/rijndael_enc/ChangeLog.txt
@@ -0,0 +1,98 @@
1File: rijndael_encoder.c
2Source: security section of MiBench
3
42016-02-26:
5- Remove commented-out code
6- Prefix functions with "rijndael_enc"
7- Compute a checksum and return it from main
8- Change return type of rijndael_enc_encfile to void
9- Move functionality from function main into functions
10 rijndael_enc_init, rijndael_enc_main, and rijndael_enc_return
11- Reordered functions in source code: initialization- and
12 return-value-related functions first, followed by algorithm core
13 functions, followed by main functions
14- Added function prototypes
15- Applied code formatting with astyle as in the example
16- Added general TACLeBench header to beginning of source code
17- Rename to rijndael_enc.c
18
192016-03-15:
20- Return 0 if checksum is as expected, -1 otherwise
21- Add entrypoint pragma
22- Make inputs volatile (or touch them with a volatile) to rule out
23 optimizations
24
252016-04-20:
26- Cast "expected" return value to int for comparison
27- Make loop counter in rijndael_enc_init unsigned
28
29Files: aes.c, aes.h, aestab.h
30Source: security section of MiBench
31
322016-02-26:
33- Remove unused defines UNROLL, PARTIAL_UNROLL
34- Remove defines FIXED_TABLES, FF_TABLES, ARRAYS, FOUR_TABLES,
35 FOUR_LR_TABLES, FOUR_IM_TABLES
36- Remove (undefined) define ONE_TABLE, ONE_LR_TABLE , ONE_IM_TABLE
37- Assume BLOCK_SIZE is always 16
38- Remove unused define "unused"
39- Remove INTERNAL_BYTE_ORDER, EXTERNAL_BYTE_ORDER, AES_BIG_ENDIAN,
40 AES_LITTLE_ENDIAN (assume internal == external == little endian)
41- Remove defines AES_DLL and AES_IN_CPP
42- Remove "#if defined(__cplusplus)"
43- Replace macros c_name and cf_dec with their definition
44- Remove some stale comments
45- Remove defines no_table and one_table
46- Remove prototypes for unusedfunctions decrypt and set_blk
47- Prefix all functions and global variables with "rijndael_enc"
48- Break lines in overly long macros
49- Protect macros
50- Applied code formatting with astyle as in the example
51
522016-04-20:
53- Remove unused macros s, ff_poly, ff_hi, m1, m2, m3, FFmulX,
54 fwd_mcol, fwd_var, inv_var, si, so, fwd_rnd, inv_rnd, fwd_lrnd,
55 inv_lrnd, locals, l_copy, state_in, state_out, round, i_table,
56 li_table
57- Remove unused arrays rijndael_enc_s_box, rijndael_enc_inv_s_box,
58 rijndael_enc_it_tab, rijndael_enc_il_tab
59
602016-06-14:
61- Added cast to make C++ compiler happy
62
63Files: glibc_common.h, my_file.h
64Source: security section of MiBench
65
662016-02-26:
67- Merge into file rijndael_enc_libc.h
68
69File: rijndael_enc_libc.h
70
712016-02-26:
72- Replace size_x with unsigned long
73- Remove defines LITTLE_ENDIAN and NULL
74- Prefix all functions with "rijndael_enc" (instead of "my_")
75- Prefix definitions that clash with the standard library with
76 "rijndael_enc" (instead of "my_")
77- Applied code formatting with astyle as in the example
78
79Files: glibc_common.c, my_file.c
80Source: security section of MiBench
81
822016-02-26:
83- Merge into file rijndael_enc_libc.c
84
85File: rijndael_enc_libc.c
86
872016-02-26:
88- Replace size_x with unsigned long
89- Prefix all functions with "rijndael_enc" (instead of "my_")
90- Prefix definitions that clash with the standard library with
91 "rijndael_enc" (instead of "my_")
92- Applied code formatting with astyle as in the example
93
94File: input_small.c
95Source: security section of MiBench
96
972016-02-26:
98- Break long lines
diff --git a/baseline/source/rijndael_enc/aes.c b/baseline/source/rijndael_enc/aes.c
new file mode 100644
index 0000000..c1282a7
--- /dev/null
+++ b/baseline/source/rijndael_enc/aes.c
@@ -0,0 +1,406 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of 128,
23 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27*/
28
29#include "aes.h"
30
31#include "aestab.h"
32
33#define four_tables(x,tab,vf,rf,c) ( tab[0][bval(vf(x,0,c),rf(0,c))] ^ \
34 tab[1][bval(vf(x,1,c),rf(1,c))] ^ \
35 tab[2][bval(vf(x,2,c),rf(2,c))] ^ \
36 tab[3][bval(vf(x,3,c),rf(3,c))] )
37
38#define vf1(x,r,c) (x)
39#define rf1(r,c) (r)
40#define rf2(r,c) ((r-c)&3)
41
42#define ls_box(x,c) four_tables(x,rijndael_enc_fl_tab,vf1,rf2,c)
43
44#define inv_mcol(x) four_tables(x,rijndael_enc_im_tab,vf1,rf1,0)
45
46/*
47 Subroutine to set the block size (if variable) in bytes, legal
48 values being 16, 24 and 32.
49*/
50
51#define nc (Ncol)
52
53/*
54 Initialise the key schedule from the user supplied key. The key
55 length is now specified in bytes - 16, 24 or 32 as appropriate.
56 This corresponds to bit lengths of 128, 192 and 256 bits, and
57 to Nk values of 4, 6 and 8 respectively.
58*/
59
60#define mx(t,f) (*t++ = inv_mcol(*f),f++)
61#define cp(t,f) *t++ = *f++
62
63#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0)
64#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0)
65
66aes_ret rijndael_enc_set_key( byte in_key[], const word n_bytes,
67 const enum aes_key f, struct aes *cx )
68{
69 word *kf, *kt, rci;
70
71 if ( ( n_bytes & 7 ) || n_bytes < 16 || n_bytes > 32 || ( !( f & 1 ) &&
72 !( f & 2 ) ) )
73 return ( n_bytes ? cx->mode &= ~0x03, aes_bad : ( aes_ret )( cx->Nkey << 2 ) );
74
75 cx->mode = ( cx->mode & ~0x03 ) | ( ( byte )f & 0x03 );
76 cx->Nkey = n_bytes >> 2;
77 cx->Nrnd = Nr( cx->Nkey, ( word )nc );
78
79 cx->e_key[0] = word_in( in_key );
80 cx->e_key[1] = word_in( in_key + 4 );
81 cx->e_key[2] = word_in( in_key + 8 );
82 cx->e_key[3] = word_in( in_key + 12 );
83
84 kf = cx->e_key;
85 kt = kf + nc * ( cx->Nrnd + 1 ) - cx->Nkey;
86 rci = 0;
87
88 switch ( cx->Nkey ) {
89 case 4:
90 _Pragma( "loopbound min 0 max 0" )
91 do {
92 kf[4] = kf[0] ^ ls_box( kf[3], 3 ) ^ rijndael_enc_rcon_tab[rci++];
93 kf[5] = kf[1] ^ kf[4];
94 kf[6] = kf[2] ^ kf[5];
95 kf[7] = kf[3] ^ kf[6];
96 kf += 4;
97 } while ( kf < kt );
98 break;
99
100 case 6:
101 cx->e_key[4] = word_in( in_key + 16 );
102 cx->e_key[5] = word_in( in_key + 20 );
103 _Pragma( "loopbound min 0 max 0" )
104 do {
105 kf[ 6] = kf[0] ^ ls_box( kf[5], 3 ) ^ rijndael_enc_rcon_tab[rci++];
106 kf[ 7] = kf[1] ^ kf[ 6];
107 kf[ 8] = kf[2] ^ kf[ 7];
108 kf[ 9] = kf[3] ^ kf[ 8];
109 kf[10] = kf[4] ^ kf[ 9];
110 kf[11] = kf[5] ^ kf[10];
111 kf += 6;
112 } while ( kf < kt );
113 break;
114
115 case 8:
116 cx->e_key[4] = word_in( in_key + 16 );
117 cx->e_key[5] = word_in( in_key + 20 );
118 cx->e_key[6] = word_in( in_key + 24 );
119 cx->e_key[7] = word_in( in_key + 28 );
120 _Pragma( "loopbound min 7 max 7" )
121 do {
122 kf[ 8] = kf[0] ^ ls_box( kf[7], 3 ) ^ rijndael_enc_rcon_tab[rci++];
123 kf[ 9] = kf[1] ^ kf[ 8];
124 kf[10] = kf[2] ^ kf[ 9];
125 kf[11] = kf[3] ^ kf[10];
126 kf[12] = kf[4] ^ ls_box( kf[11], 0 );
127 kf[13] = kf[5] ^ kf[12];
128 kf[14] = kf[6] ^ kf[13];
129 kf[15] = kf[7] ^ kf[14];
130 kf += 8;
131 } while ( kf < kt );
132 break;
133 }
134
135 if ( ( cx->mode & 3 ) != enc ) {
136 word i;
137
138 kt = cx->d_key + nc * cx->Nrnd;
139 kf = cx->e_key;
140
141 cpy( kt, kf );
142 kt -= 2 * nc;
143
144 _Pragma( "loopbound min 0 max 0" )
145 for ( i = 1; i < cx->Nrnd; ++i ) {
146 mix( kt, kf );
147 kt -= 2 * nc;
148 }
149
150 cpy( kt, kf );
151 }
152
153 return aes_good;
154}
155
156short rijndael_enc_encrypt( unsigned char in_blk[], unsigned char out_blk[],
157 const struct aes *cx )
158{
159 const unsigned long *kp = cx->e_key;
160 if ( !( cx->mode & 1 ) )
161 return 0;
162 unsigned long b0[4];
163 b0[0] = *( unsigned long * )in_blk ^ kp[0];
164 b0[1] = *( unsigned long * )( in_blk + 4 )^kp[1];
165 b0[2] = *( unsigned long * )( in_blk + 8 )^kp[2];
166 b0[3] = *( unsigned long * )( in_blk + 12 )^kp[3];
167 kp += 4;
168 unsigned long b1[4];
169 switch ( cx->Nrnd ) {
170 case 14:
171 b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
172 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
173 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
174 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
175 b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
176 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
177 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
178 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
179 b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
180 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
181 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
182 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
183 b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
184 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
185 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
186 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
187 b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
188 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
189 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
190 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
191 b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
192 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
193 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
194 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
195 b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
196 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
197 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
198 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
199 b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
200 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
201 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
202 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
203 kp += 8;
204 case 12:
205 b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
206 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
207 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
208 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
209 b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
210 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
211 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
212 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
213 b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
214 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
215 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
216 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
217 b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
218 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
219 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
220 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
221 b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
222 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
223 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
224 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
225 b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
226 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
227 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
228 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
229 b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
230 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
231 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
232 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
233 b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
234 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
235 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
236 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
237 kp += 8;
238 case 10:
239 b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
240 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
241 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
242 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
243 b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
244 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
245 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
246 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
247 b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
248 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
249 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
250 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
251 b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
252 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
253 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
254 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
255 b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
256 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
257 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
258 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
259 b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
260 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
261 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
262 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
263 b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
264 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
265 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
266 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
267 b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
268 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
269 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
270 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
271 b1[0] = ( kp + 8 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
272 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
273 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
274 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
275 b1[1] = ( kp + 8 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
276 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
277 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
278 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
279 b1[2] = ( kp + 8 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
280 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
281 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
282 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
283 b1[3] = ( kp + 8 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
284 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
285 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
286 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
287 b0[0] = ( kp + 12 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
288 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
289 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
290 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
291 b0[1] = ( kp + 12 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
292 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
293 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
294 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
295 b0[2] = ( kp + 12 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
296 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
297 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
298 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
299 b0[3] = ( kp + 12 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
300 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
301 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
302 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
303 b1[0] = ( kp + 16 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
304 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
305 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
306 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
307 b1[1] = ( kp + 16 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
308 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
309 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
310 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
311 b1[2] = ( kp + 16 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
312 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
313 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
314 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
315 b1[3] = ( kp + 16 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
316 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
317 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
318 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
319 b0[0] = ( kp + 20 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
320 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
321 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
322 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
323 b0[1] = ( kp + 20 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
324 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
325 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
326 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
327 b0[2] = ( kp + 20 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
328 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
329 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
330 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
331 b0[3] = ( kp + 20 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
332 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
333 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
334 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
335 b1[0] = ( kp + 24 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
336 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
337 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
338 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
339 b1[1] = ( kp + 24 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
340 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
341 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
342 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
343 b1[2] = ( kp + 24 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
344 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
345 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
346 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
347 b1[3] = ( kp + 24 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
348 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
349 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
350 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
351 b0[0] = ( kp + 28 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
352 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
353 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
354 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
355 b0[1] = ( kp + 28 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
356 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
357 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
358 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
359 b0[2] = ( kp + 28 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
360 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
361 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
362 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
363 b0[3] = ( kp + 28 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
364 rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
365 rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
366 rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
367 b1[0] = ( kp + 32 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
368 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
369 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
370 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
371 b1[1] = ( kp + 32 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
372 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
373 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
374 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
375 b1[2] = ( kp + 32 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
376 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
377 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
378 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
379 b1[3] = ( kp + 32 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
380 rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
381 rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
382 rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
383 b0[0] = ( kp + 36 )[0] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[0] )] ^
384 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
385 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
386 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
387 b0[1] = ( kp + 36 )[1] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[1] )] ^
388 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
389 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
390 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
391 b0[2] = ( kp + 36 )[2] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[2] )] ^
392 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
393 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
394 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
395 b0[3] = ( kp + 36 )[3] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[3] )] ^
396 rijndael_enc_fl_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
397 rijndael_enc_fl_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
398 rijndael_enc_fl_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
399 }
400 *( unsigned long * )out_blk = ( b0[0] );
401 *( unsigned long * )( out_blk + 4 ) = ( b0[1] );
402 *( unsigned long * )( out_blk + 8 ) = ( b0[2] );
403 *( unsigned long * )( out_blk + 12 ) = ( b0[3] );
404 return aes_good;
405}
406
diff --git a/baseline/source/rijndael_enc/aes.h b/baseline/source/rijndael_enc/aes.h
new file mode 100644
index 0000000..908f95f
--- /dev/null
+++ b/baseline/source/rijndael_enc/aes.h
@@ -0,0 +1,165 @@
1/*
2 -----------------------------------------------------------------------
3 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
4
5 TERMS
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 This software is provided 'as is' with no guarantees of correctness or
17 fitness for purpose.
18 -----------------------------------------------------------------------
19
20 1. FUNCTION
21
22 The AES algorithm Rijndael implemented for block and key sizes of
23 128 bits (16 bytes) by Brian Gladman.
24
25 This is an implementation of the AES encryption algorithm (Rijndael)
26 designed by Joan Daemen and Vincent Rijmen.
27
28 2. THE CIPHER INTERFACE
29
30 byte (an unsigned 8-bit type)
31 word (an unsigned 32-bit type)
32 aes_ret: (a signed 16 bit type for function return values)
33 aes_good (value != 0, a good return)
34 aes_bad (value == 0, an error return)
35 enum aes_key: (encryption direction)
36 enc (set key for encryption)
37 dec (set key for decryption)
38 both (set key for both)
39 class or struct aes (structure for context)
40
41 C subroutine calls:
42
43 aes_ret set_blk(const word block_length, aes *cx) (variable block size)
44 aes_ret set_key(const byte key[], const word key_length,
45 const enum aes_key direction, aes *cx)
46 aes_ret encrypt(const byte input_blk[], byte output_blk[], const aes *cx)
47 aes_ret decrypt(const byte input_blk[], byte output_blk[], const aes *cx)
48
49 IMPORTANT NOTE: If you are using this C interface and your compiler does
50 not set the memory used for objects to zero before use, you will need to
51 ensure that cx.mode is set to zero before using the C subroutine calls.
52
53 The block length inputs to set_block and set_key are in numbers of
54 BYTES, not bits. The calls to subroutines must be made in the above
55 order but multiple calls can be made without repeating earlier calls
56 if their parameters have not changed. If the cipher block length is
57 variable but set_blk has not been called before cipher operations a
58 value of 16 is assumed (that is, the AES block size). In contrast to
59 earlier versions the block and key length parameters are now checked
60 for correctness and the encryption and decryption routines check to
61 ensure that an appropriate key has been set before they are called.
62
63*/
64
65#ifndef _AES_H
66#define _AES_H
67
68/* The only supported block size for the benchmark is 16 */
69#define BLOCK_SIZE 16
70
71/*
72 The number of key schedule words for different block and key lengths
73 (allowing for the method of computation which requires the length to
74 be a multiple of the key length):
75
76 Key Schedule key length (bytes)
77 Length 16 20 24 28 32
78 ---------------------
79 block 16 | 44 60 54 56 64
80 length 20 | 60 60 66 70 80
81 (bytes) 24 | 80 80 78 84 96
82 28 | 100 100 102 98 112
83 32 | 120 120 120 126 120
84
85 Rcon Table key length (bytes)
86 Length 16 20 24 28 32
87 ---------------------
88 block 16 | 10 9 8 7 7
89 length 20 | 14 11 10 9 9
90 (bytes) 24 | 19 15 12 11 11
91 28 | 24 19 16 13 13
92 32 | 29 23 19 17 14
93
94 The following values assume that the key length will be variable and may
95 be of maximum length (32 bytes).
96
97 Nk = number_of_key_bytes / 4
98 Nc = number_of_columns_in_state / 4
99 Nr = number of encryption/decryption rounds
100 Rc = number of elements in rcon table
101 Ks = number of 32-bit words in key schedule
102*/
103
104#define Nr(Nk,Nc) ((Nk > Nc ? Nk : Nc) + 6)
105#define Rc(Nk,Nc) ((Nb * (Nr(Nk,Nc) + 1) - 1) / Nk)
106#define Ks(Nk,Nc) (Nk * (Rc(Nk,Nc) + 1))
107
108#define RC_LENGTH 5 * BLOCK_SIZE / 4 - (BLOCK_SIZE == 16 ? 10 : 11)
109#define KS_LENGTH 4 * BLOCK_SIZE
110
111/* End of configuration options, but see also aes.c */
112
113typedef unsigned char byte; /* must be an 8-bit storage unit */
114typedef unsigned long word; /* must be a 32-bit storage unit */
115typedef short aes_ret; /* function return value */
116
117#define aes_bad 0
118#define aes_good 1
119
120/*
121 upr(x,n): rotates bytes within words by n positions, moving bytes
122 to higher index positions with wrap around into low positions
123 ups(x,n): moves bytes by n positions to higher index positions in
124 words but without wrap around
125 bval(x,n): extracts a byte from a word
126*/
127
128#define upr(x,n) (((x) << 8 * (n)) | ((x) >> (32 - 8 * (n))))
129#define ups(x,n) ((x) << 8 * (n))
130#define bval(x,n) ((byte)((x) >> 8 * (n)))
131#define byte_swap(x) (upr(x,1) & 0x00ff00ff | upr(x,3) & 0xff00ff00)
132#define bytes2word(b0, b1, b2, b3) ((word)(b3) << 24 | (word)(b2) << 16 | \
133 (word)(b1) << 8 | (b0))
134
135#define word_in(x) *(word*)(x)
136#define word_out(x,v) *(word*)(x) = (v)
137
138enum aes_const { Nrow = 4, /* the number of rows in the cipher state */
139 Mcol = 8, /* maximum number of columns in the state */
140 Ncol = BLOCK_SIZE / 4,
141 Shr0 = 0, /* the cyclic shift values for rows 0, 1, 2 & 3 */
142 Shr1 = 1,
143 Shr2 = BLOCK_SIZE == 32 ? 3 : 2,
144 Shr3 = BLOCK_SIZE == 32 ? 4 : 3
145 };
146
147enum aes_key { enc = 1, /* set if encryption is needed */
148 dec = 2, /* set if decryption is needed */
149 both = 3 /* set if both are needed */
150 };
151
152struct aes {
153 word Nkey; /* the number of words in the key input block */
154 word Nrnd; /* the number of cipher rounds */
155 word e_key[KS_LENGTH]; /* the encryption key schedule */
156 word d_key[KS_LENGTH]; /* the decryption key schedule */
157 byte mode; /* encrypt, decrypt or both */
158};
159
160aes_ret rijndael_enc_set_key( byte key[], const word n_bytes,
161 const enum aes_key f, struct aes *cx );
162aes_ret rijndael_enc_encrypt( byte in_blk[], byte out_blk[],
163 const struct aes *cx );
164
165#endif
diff --git a/baseline/source/rijndael_enc/aestab.h b/baseline/source/rijndael_enc/aestab.h
new file mode 100644
index 0000000..9d347bc
--- /dev/null
+++ b/baseline/source/rijndael_enc/aestab.h
@@ -0,0 +1,261 @@
1
2/*
3 -----------------------------------------------------------------------
4 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
5
6 TERMS
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions
10 are met:
11 1. Redistributions of source code must retain the above copyright
12 notice, this list of conditions and the following disclaimer.
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
16
17 This software is provided 'as is' with no guarantees of correctness or
18 fitness for purpose.
19 -----------------------------------------------------------------------
20*/
21
22/*
23 Used to ensure table is generated in the right format
24 depending on the internal byte order required.
25*/
26
27#define w0(p) 0x000000##p
28
29/*
30 Number of elements required in this table for different
31 block and key lengths is:
32
33 Rcon Table key length (bytes)
34 Length 16 20 24 28 32
35 ---------------------
36 block 16 | 10 9 8 7 7
37 length 20 | 14 11 10 9 9
38 (bytes) 24 | 19 15 12 11 11
39 28 | 24 19 16 13 13
40 32 | 29 23 19 17 14
41
42 this table can be a table of bytes if the key schedule
43 code is adjusted accordingly
44*/
45
46const word rijndael_enc_rcon_tab[29] = {
47 w0( 01 ), w0( 02 ), w0( 04 ), w0( 08 ),
48 w0( 10 ), w0( 20 ), w0( 40 ), w0( 80 ),
49 w0( 1b ), w0( 36 ), w0( 6c ), w0( d8 ),
50 w0( ab ), w0( 4d ), w0( 9a ), w0( 2f ),
51 w0( 5e ), w0( bc ), w0( 63 ), w0( c6 ),
52 w0( 97 ), w0( 35 ), w0( 6a ), w0( d4 ),
53 w0( b3 ), w0( 7d ), w0( fa ), w0( ef ),
54 w0( c5 )
55};
56
57#undef w0
58
59/*
60 used to ensure table is generated in the right format
61 depending on the internal byte order required
62*/
63
64#define r0(p,q,r,s) 0x##p##q##r##s
65#define r1(p,q,r,s) 0x##q##r##s##p
66#define r2(p,q,r,s) 0x##r##s##p##q
67#define r3(p,q,r,s) 0x##s##p##q##r
68#define w0(p) 0x000000##p
69#define w1(p) 0x0000##p##00
70#define w2(p) 0x00##p##0000
71#define w3(p) 0x##p##000000
72
73/*
74 used to ensure table is generated in the right format
75 depending on the internal byte order required
76*/
77
78/* data for forward tables (other than last round) */
79
80#define f_table \
81 r(a5,63,63,c6), r(84,7c,7c,f8), r(99,77,77,ee), r(8d,7b,7b,f6), \
82 r(0d,f2,f2,ff), r(bd,6b,6b,d6), r(b1,6f,6f,de), r(54,c5,c5,91), \
83 r(50,30,30,60), r(03,01,01,02), r(a9,67,67,ce), r(7d,2b,2b,56), \
84 r(19,fe,fe,e7), r(62,d7,d7,b5), r(e6,ab,ab,4d), r(9a,76,76,ec), \
85 r(45,ca,ca,8f), r(9d,82,82,1f), r(40,c9,c9,89), r(87,7d,7d,fa), \
86 r(15,fa,fa,ef), r(eb,59,59,b2), r(c9,47,47,8e), r(0b,f0,f0,fb), \
87 r(ec,ad,ad,41), r(67,d4,d4,b3), r(fd,a2,a2,5f), r(ea,af,af,45), \
88 r(bf,9c,9c,23), r(f7,a4,a4,53), r(96,72,72,e4), r(5b,c0,c0,9b), \
89 r(c2,b7,b7,75), r(1c,fd,fd,e1), r(ae,93,93,3d), r(6a,26,26,4c), \
90 r(5a,36,36,6c), r(41,3f,3f,7e), r(02,f7,f7,f5), r(4f,cc,cc,83), \
91 r(5c,34,34,68), r(f4,a5,a5,51), r(34,e5,e5,d1), r(08,f1,f1,f9), \
92 r(93,71,71,e2), r(73,d8,d8,ab), r(53,31,31,62), r(3f,15,15,2a), \
93 r(0c,04,04,08), r(52,c7,c7,95), r(65,23,23,46), r(5e,c3,c3,9d), \
94 r(28,18,18,30), r(a1,96,96,37), r(0f,05,05,0a), r(b5,9a,9a,2f), \
95 r(09,07,07,0e), r(36,12,12,24), r(9b,80,80,1b), r(3d,e2,e2,df), \
96 r(26,eb,eb,cd), r(69,27,27,4e), r(cd,b2,b2,7f), r(9f,75,75,ea), \
97 r(1b,09,09,12), r(9e,83,83,1d), r(74,2c,2c,58), r(2e,1a,1a,34), \
98 r(2d,1b,1b,36), r(b2,6e,6e,dc), r(ee,5a,5a,b4), r(fb,a0,a0,5b), \
99 r(f6,52,52,a4), r(4d,3b,3b,76), r(61,d6,d6,b7), r(ce,b3,b3,7d), \
100 r(7b,29,29,52), r(3e,e3,e3,dd), r(71,2f,2f,5e), r(97,84,84,13), \
101 r(f5,53,53,a6), r(68,d1,d1,b9), r(00,00,00,00), r(2c,ed,ed,c1), \
102 r(60,20,20,40), r(1f,fc,fc,e3), r(c8,b1,b1,79), r(ed,5b,5b,b6), \
103 r(be,6a,6a,d4), r(46,cb,cb,8d), r(d9,be,be,67), r(4b,39,39,72), \
104 r(de,4a,4a,94), r(d4,4c,4c,98), r(e8,58,58,b0), r(4a,cf,cf,85), \
105 r(6b,d0,d0,bb), r(2a,ef,ef,c5), r(e5,aa,aa,4f), r(16,fb,fb,ed), \
106 r(c5,43,43,86), r(d7,4d,4d,9a), r(55,33,33,66), r(94,85,85,11), \
107 r(cf,45,45,8a), r(10,f9,f9,e9), r(06,02,02,04), r(81,7f,7f,fe), \
108 r(f0,50,50,a0), r(44,3c,3c,78), r(ba,9f,9f,25), r(e3,a8,a8,4b), \
109 r(f3,51,51,a2), r(fe,a3,a3,5d), r(c0,40,40,80), r(8a,8f,8f,05), \
110 r(ad,92,92,3f), r(bc,9d,9d,21), r(48,38,38,70), r(04,f5,f5,f1), \
111 r(df,bc,bc,63), r(c1,b6,b6,77), r(75,da,da,af), r(63,21,21,42), \
112 r(30,10,10,20), r(1a,ff,ff,e5), r(0e,f3,f3,fd), r(6d,d2,d2,bf), \
113 r(4c,cd,cd,81), r(14,0c,0c,18), r(35,13,13,26), r(2f,ec,ec,c3), \
114 r(e1,5f,5f,be), r(a2,97,97,35), r(cc,44,44,88), r(39,17,17,2e), \
115 r(57,c4,c4,93), r(f2,a7,a7,55), r(82,7e,7e,fc), r(47,3d,3d,7a), \
116 r(ac,64,64,c8), r(e7,5d,5d,ba), r(2b,19,19,32), r(95,73,73,e6), \
117 r(a0,60,60,c0), r(98,81,81,19), r(d1,4f,4f,9e), r(7f,dc,dc,a3), \
118 r(66,22,22,44), r(7e,2a,2a,54), r(ab,90,90,3b), r(83,88,88,0b), \
119 r(ca,46,46,8c), r(29,ee,ee,c7), r(d3,b8,b8,6b), r(3c,14,14,28), \
120 r(79,de,de,a7), r(e2,5e,5e,bc), r(1d,0b,0b,16), r(76,db,db,ad), \
121 r(3b,e0,e0,db), r(56,32,32,64), r(4e,3a,3a,74), r(1e,0a,0a,14), \
122 r(db,49,49,92), r(0a,06,06,0c), r(6c,24,24,48), r(e4,5c,5c,b8), \
123 r(5d,c2,c2,9f), r(6e,d3,d3,bd), r(ef,ac,ac,43), r(a6,62,62,c4), \
124 r(a8,91,91,39), r(a4,95,95,31), r(37,e4,e4,d3), r(8b,79,79,f2), \
125 r(32,e7,e7,d5), r(43,c8,c8,8b), r(59,37,37,6e), r(b7,6d,6d,da), \
126 r(8c,8d,8d,01), r(64,d5,d5,b1), r(d2,4e,4e,9c), r(e0,a9,a9,49), \
127 r(b4,6c,6c,d8), r(fa,56,56,ac), r(07,f4,f4,f3), r(25,ea,ea,cf), \
128 r(af,65,65,ca), r(8e,7a,7a,f4), r(e9,ae,ae,47), r(18,08,08,10), \
129 r(d5,ba,ba,6f), r(88,78,78,f0), r(6f,25,25,4a), r(72,2e,2e,5c), \
130 r(24,1c,1c,38), r(f1,a6,a6,57), r(c7,b4,b4,73), r(51,c6,c6,97), \
131 r(23,e8,e8,cb), r(7c,dd,dd,a1), r(9c,74,74,e8), r(21,1f,1f,3e), \
132 r(dd,4b,4b,96), r(dc,bd,bd,61), r(86,8b,8b,0d), r(85,8a,8a,0f), \
133 r(90,70,70,e0), r(42,3e,3e,7c), r(c4,b5,b5,71), r(aa,66,66,cc), \
134 r(d8,48,48,90), r(05,03,03,06), r(01,f6,f6,f7), r(12,0e,0e,1c), \
135 r(a3,61,61,c2), r(5f,35,35,6a), r(f9,57,57,ae), r(d0,b9,b9,69), \
136 r(91,86,86,17), r(58,c1,c1,99), r(27,1d,1d,3a), r(b9,9e,9e,27), \
137 r(38,e1,e1,d9), r(13,f8,f8,eb), r(b3,98,98,2b), r(33,11,11,22), \
138 r(bb,69,69,d2), r(70,d9,d9,a9), r(89,8e,8e,07), r(a7,94,94,33), \
139 r(b6,9b,9b,2d), r(22,1e,1e,3c), r(92,87,87,15), r(20,e9,e9,c9), \
140 r(49,ce,ce,87), r(ff,55,55,aa), r(78,28,28,50), r(7a,df,df,a5), \
141 r(8f,8c,8c,03), r(f8,a1,a1,59), r(80,89,89,09), r(17,0d,0d,1a), \
142 r(da,bf,bf,65), r(31,e6,e6,d7), r(c6,42,42,84), r(b8,68,68,d0), \
143 r(c3,41,41,82), r(b0,99,99,29), r(77,2d,2d,5a), r(11,0f,0f,1e), \
144 r(cb,b0,b0,7b), r(fc,54,54,a8), r(d6,bb,bb,6d), r(3a,16,16,2c)
145
146/* generate the required tables in the desired endian format */
147
148#undef r
149#define r r0
150
151const word rijndael_enc_ft_tab[4][256] = {
152 { f_table },
153#undef r
154#define r r1
155 { f_table },
156#undef r
157#define r r2
158 { f_table },
159#undef r
160#define r r3
161 { f_table }
162};
163
164/* generate the required tables in the desired endian format */
165
166#undef r
167#define r(p,q,r,s) w0(q)
168const word rijndael_enc_fl_tab[4][256] = {
169 { f_table },
170#undef r
171#define r(p,q,r,s) w1(q)
172 { f_table },
173#undef r
174#define r(p,q,r,s) w2(q)
175 { f_table },
176#undef r
177#define r(p,q,r,s) w3(q)
178 { f_table }
179};
180
181#define m_table \
182 r(00,00,00,00), r(0b,0d,09,0e), r(16,1a,12,1c), r(1d,17,1b,12), \
183 r(2c,34,24,38), r(27,39,2d,36), r(3a,2e,36,24), r(31,23,3f,2a), \
184 r(58,68,48,70), r(53,65,41,7e), r(4e,72,5a,6c), r(45,7f,53,62), \
185 r(74,5c,6c,48), r(7f,51,65,46), r(62,46,7e,54), r(69,4b,77,5a), \
186 r(b0,d0,90,e0), r(bb,dd,99,ee), r(a6,ca,82,fc), r(ad,c7,8b,f2), \
187 r(9c,e4,b4,d8), r(97,e9,bd,d6), r(8a,fe,a6,c4), r(81,f3,af,ca), \
188 r(e8,b8,d8,90), r(e3,b5,d1,9e), r(fe,a2,ca,8c), r(f5,af,c3,82), \
189 r(c4,8c,fc,a8), r(cf,81,f5,a6), r(d2,96,ee,b4), r(d9,9b,e7,ba), \
190 r(7b,bb,3b,db), r(70,b6,32,d5), r(6d,a1,29,c7), r(66,ac,20,c9), \
191 r(57,8f,1f,e3), r(5c,82,16,ed), r(41,95,0d,ff), r(4a,98,04,f1), \
192 r(23,d3,73,ab), r(28,de,7a,a5), r(35,c9,61,b7), r(3e,c4,68,b9), \
193 r(0f,e7,57,93), r(04,ea,5e,9d), r(19,fd,45,8f), r(12,f0,4c,81), \
194 r(cb,6b,ab,3b), r(c0,66,a2,35), r(dd,71,b9,27), r(d6,7c,b0,29), \
195 r(e7,5f,8f,03), r(ec,52,86,0d), r(f1,45,9d,1f), r(fa,48,94,11), \
196 r(93,03,e3,4b), r(98,0e,ea,45), r(85,19,f1,57), r(8e,14,f8,59), \
197 r(bf,37,c7,73), r(b4,3a,ce,7d), r(a9,2d,d5,6f), r(a2,20,dc,61), \
198 r(f6,6d,76,ad), r(fd,60,7f,a3), r(e0,77,64,b1), r(eb,7a,6d,bf), \
199 r(da,59,52,95), r(d1,54,5b,9b), r(cc,43,40,89), r(c7,4e,49,87), \
200 r(ae,05,3e,dd), r(a5,08,37,d3), r(b8,1f,2c,c1), r(b3,12,25,cf), \
201 r(82,31,1a,e5), r(89,3c,13,eb), r(94,2b,08,f9), r(9f,26,01,f7), \
202 r(46,bd,e6,4d), r(4d,b0,ef,43), r(50,a7,f4,51), r(5b,aa,fd,5f), \
203 r(6a,89,c2,75), r(61,84,cb,7b), r(7c,93,d0,69), r(77,9e,d9,67), \
204 r(1e,d5,ae,3d), r(15,d8,a7,33), r(08,cf,bc,21), r(03,c2,b5,2f), \
205 r(32,e1,8a,05), r(39,ec,83,0b), r(24,fb,98,19), r(2f,f6,91,17), \
206 r(8d,d6,4d,76), r(86,db,44,78), r(9b,cc,5f,6a), r(90,c1,56,64), \
207 r(a1,e2,69,4e), r(aa,ef,60,40), r(b7,f8,7b,52), r(bc,f5,72,5c), \
208 r(d5,be,05,06), r(de,b3,0c,08), r(c3,a4,17,1a), r(c8,a9,1e,14), \
209 r(f9,8a,21,3e), r(f2,87,28,30), r(ef,90,33,22), r(e4,9d,3a,2c), \
210 r(3d,06,dd,96), r(36,0b,d4,98), r(2b,1c,cf,8a), r(20,11,c6,84), \
211 r(11,32,f9,ae), r(1a,3f,f0,a0), r(07,28,eb,b2), r(0c,25,e2,bc), \
212 r(65,6e,95,e6), r(6e,63,9c,e8), r(73,74,87,fa), r(78,79,8e,f4), \
213 r(49,5a,b1,de), r(42,57,b8,d0), r(5f,40,a3,c2), r(54,4d,aa,cc), \
214 r(f7,da,ec,41), r(fc,d7,e5,4f), r(e1,c0,fe,5d), r(ea,cd,f7,53), \
215 r(db,ee,c8,79), r(d0,e3,c1,77), r(cd,f4,da,65), r(c6,f9,d3,6b), \
216 r(af,b2,a4,31), r(a4,bf,ad,3f), r(b9,a8,b6,2d), r(b2,a5,bf,23), \
217 r(83,86,80,09), r(88,8b,89,07), r(95,9c,92,15), r(9e,91,9b,1b), \
218 r(47,0a,7c,a1), r(4c,07,75,af), r(51,10,6e,bd), r(5a,1d,67,b3), \
219 r(6b,3e,58,99), r(60,33,51,97), r(7d,24,4a,85), r(76,29,43,8b), \
220 r(1f,62,34,d1), r(14,6f,3d,df), r(09,78,26,cd), r(02,75,2f,c3), \
221 r(33,56,10,e9), r(38,5b,19,e7), r(25,4c,02,f5), r(2e,41,0b,fb), \
222 r(8c,61,d7,9a), r(87,6c,de,94), r(9a,7b,c5,86), r(91,76,cc,88), \
223 r(a0,55,f3,a2), r(ab,58,fa,ac), r(b6,4f,e1,be), r(bd,42,e8,b0), \
224 r(d4,09,9f,ea), r(df,04,96,e4), r(c2,13,8d,f6), r(c9,1e,84,f8), \
225 r(f8,3d,bb,d2), r(f3,30,b2,dc), r(ee,27,a9,ce), r(e5,2a,a0,c0), \
226 r(3c,b1,47,7a), r(37,bc,4e,74), r(2a,ab,55,66), r(21,a6,5c,68), \
227 r(10,85,63,42), r(1b,88,6a,4c), r(06,9f,71,5e), r(0d,92,78,50), \
228 r(64,d9,0f,0a), r(6f,d4,06,04), r(72,c3,1d,16), r(79,ce,14,18), \
229 r(48,ed,2b,32), r(43,e0,22,3c), r(5e,f7,39,2e), r(55,fa,30,20), \
230 r(01,b7,9a,ec), r(0a,ba,93,e2), r(17,ad,88,f0), r(1c,a0,81,fe), \
231 r(2d,83,be,d4), r(26,8e,b7,da), r(3b,99,ac,c8), r(30,94,a5,c6), \
232 r(59,df,d2,9c), r(52,d2,db,92), r(4f,c5,c0,80), r(44,c8,c9,8e), \
233 r(75,eb,f6,a4), r(7e,e6,ff,aa), r(63,f1,e4,b8), r(68,fc,ed,b6), \
234 r(b1,67,0a,0c), r(ba,6a,03,02), r(a7,7d,18,10), r(ac,70,11,1e), \
235 r(9d,53,2e,34), r(96,5e,27,3a), r(8b,49,3c,28), r(80,44,35,26), \
236 r(e9,0f,42,7c), r(e2,02,4b,72), r(ff,15,50,60), r(f4,18,59,6e), \
237 r(c5,3b,66,44), r(ce,36,6f,4a), r(d3,21,74,58), r(d8,2c,7d,56), \
238 r(7a,0c,a1,37), r(71,01,a8,39), r(6c,16,b3,2b), r(67,1b,ba,25), \
239 r(56,38,85,0f), r(5d,35,8c,01), r(40,22,97,13), r(4b,2f,9e,1d), \
240 r(22,64,e9,47), r(29,69,e0,49), r(34,7e,fb,5b), r(3f,73,f2,55), \
241 r(0e,50,cd,7f), r(05,5d,c4,71), r(18,4a,df,63), r(13,47,d6,6d), \
242 r(ca,dc,31,d7), r(c1,d1,38,d9), r(dc,c6,23,cb), r(d7,cb,2a,c5), \
243 r(e6,e8,15,ef), r(ed,e5,1c,e1), r(f0,f2,07,f3), r(fb,ff,0e,fd), \
244 r(92,b4,79,a7), r(99,b9,70,a9), r(84,ae,6b,bb), r(8f,a3,62,b5), \
245 r(be,80,5d,9f), r(b5,8d,54,91), r(a8,9a,4f,83), r(a3,97,46,8d)
246
247#undef r
248#define r r0
249
250const word rijndael_enc_im_tab[4][256] = {
251 { m_table },
252#undef r
253#define r r1
254 { m_table },
255#undef r
256#define r r2
257 { m_table },
258#undef r
259#define r r3
260 { m_table }
261};
diff --git a/baseline/source/rijndael_enc/input_small.c b/baseline/source/rijndael_enc/input_small.c
new file mode 100644
index 0000000..b3eee55
--- /dev/null
+++ b/baseline/source/rijndael_enc/input_small.c
@@ -0,0 +1,1963 @@
1unsigned char rijndael_enc_data[] = {
2 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
3 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
4 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
5 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
6 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
7 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
8 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
9 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
10 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
11 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
12 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
13 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
14 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
15 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
16 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
17 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
18 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
19 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
20 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
21 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
22 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
23 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
24 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
25 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
26 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
27 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
28 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
29 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
30 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
31 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
32 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
33 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
34 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
35 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
36 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
37 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
38 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
39 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
40 't','K','u','r','t','V','o','n','n','e','g','u','K','u','r','t',
41 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
42 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
43 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
44 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
45 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
46 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
47 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
48 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
49 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
50 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
51 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
52 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
53 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
54 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
55 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
56 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
57 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
58 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
59 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
60 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
61 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
62 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
63 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
64 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
65 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
66 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
67 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
68 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
69 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
70 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
71 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
72 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
73 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
74 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
75 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
76 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
77 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
78 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
79 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
80 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
81 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
82 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
83 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
84 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
85 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
86 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
87 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
88 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
89 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
90 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
91 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
92 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
93 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
94 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
95 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
96 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
97 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
98 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
99 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
100 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
101 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
102 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
103 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
104 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
105 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
106 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
107 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
108 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
109 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
110 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
111 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
112 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
113 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
114 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
115 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
116 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
117 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
118 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
119 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
120 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
121 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
122 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
123 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
124 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
125 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
126 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
127 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
128 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
129 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
130 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
131 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
132 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
133 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
134 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
135 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
136 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
137 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
138 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
139 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
140 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
141 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
142 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
143 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
144 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
145 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
146 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
147 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
148 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
149 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
150 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
151 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
152 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
153 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
154 'o','r','r','y','K','u','r','t','V','o','n','n','e','g','u','t',
155 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
156 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
157 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
158 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
159 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
160 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
161 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
162 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
163 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
164 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
165 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
166 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
167 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
168 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
169 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
170 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
171 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
172 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
173 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
174 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
175 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
176 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
177 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
178 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
179 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
180 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
181 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
182 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
183 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
184 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
185 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
186 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
187 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
188 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
189 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
190 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
191 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
192 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
193 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
194 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
195 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
196 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
197 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
198 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
199 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
200 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
201 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
202 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
203 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
204 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
205 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
206 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
207 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
208 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
209 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
210 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
211 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
212 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
213 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
214 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
215 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
216 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
217 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
218 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
219 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
220 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
221 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
222 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
223 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
224 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
225 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
226 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
227 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
228 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
229 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
230 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
231 't','K','u','r','t','V','o','n','n','e','g','u','t','s','C','o',
232 'm','m','e','n','c','e','m','e','n','t','A','d','d','r','e','s',
233 's','a','t','M','I','T','L','a','d','i','e','s','a','n','d','g',
234 'e','n','t','l','e','m','e','n','o','f','t','h','e','c','l','a',
235 's','s','o','f','9','7','W','e','a','r','s','u','n','s','c','r',
236 'e','e','n','I','f','I','c','o','u','l','d','o','f','f','e','r',
237 'y','o','u','o','n','l','y','o','n','e','t','i','p','f','o','r',
238 't','h','e','f','u','t','u','r','e','s','u','n','s','c','r','e',
239 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o',
240 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f',
241 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e',
242 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i',
243 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s',
244 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o',
245 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l',
246 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e',
247 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w',
248 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a',
249 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e',
250 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
251 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r',
252 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n',
253 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r',
254 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
255 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f',
256 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n',
257 '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k',
258 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o',
259 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i',
260 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s',
261 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i',
262 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y',
263 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s',
264 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y',
265 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y',
266 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r',
267 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e',
268 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h',
269 'a','t','K','u','r','t','V','o','n','n','e','g','u','t','s','C',
270 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e',
271 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d',
272 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l',
273 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c',
274 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e',
275 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o',
276 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r',
277 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l',
278 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o',
279 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e',
280 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t',
281 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e',
282 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n',
283 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b',
284 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d',
285 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I',
286 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s',
287 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h',
288 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
289 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e',
290 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u',
291 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e',
292 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
293 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e',
294 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i',
295 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o',
296 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y',
297 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l',
298 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a',
299 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s',
300 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e',
301 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u',
302 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d',
303 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s',
304 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o',
305 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r',
306 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t',
307 'h','a','t','t','s','C','o','m','m','e','n','c','e','m','e','n',
308 't','A','d','d','r','e','s','s','a','t','M','I','T','L','a','d',
309 'i','e','s','a','n','d','g','e','n','t','l','e','m','e','n','o',
310 'f','t','h','e','c','l','a','s','s','o','f','9','7','W','e','a',
311 'r','s','u','n','s','c','r','e','e','n','I','f','I','c','o','u',
312 'l','d','o','f','f','e','r','y','o','u','o','n','l','y','o','n',
313 'e','t','i','p','f','o','r','t','h','e','f','u','t','u','r','e',
314 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
315 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
316 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
317 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
318 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
319 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
320 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
321 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
322 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
323 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
324 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
325 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
326 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
327 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
328 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
329 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
330 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
331 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
332 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
333 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
334 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
335 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
336 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
337 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
338 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
339 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
340 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
341 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
342 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
343 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
344 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
345 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
346 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
347 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
348 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
349 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
350 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
351 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
352 't','K','u','r','t','V','o','n','n','e','g','u','t','s','C','o',
353 'm','m','e','n','c','e','m','e','n','t','A','d','d','r','e','s',
354 's','a','t','M','I','T','L','a','d','i','e','s','a','n','d','g',
355 'e','n','t','l','e','m','e','n','o','f','t','h','e','c','l','a',
356 's','s','o','f','9','7','W','e','a','r','s','u','n','s','c','r',
357 'e','e','n','I','f','I','c','o','u','l','d','o','f','f','e','r',
358 'y','o','u','o','n','l','y','o','n','e','t','i','p','f','o','r',
359 't','h','e','f','u','t','u','r','e','s','u','n','s','c','r','e',
360 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o',
361 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f',
362 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e',
363 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i',
364 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s',
365 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o',
366 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l',
367 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e',
368 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w',
369 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a',
370 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e',
371 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
372 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r',
373 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n',
374 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r',
375 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
376 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f',
377 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n',
378 '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k',
379 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o',
380 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i',
381 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s',
382 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i',
383 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y',
384 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s',
385 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y',
386 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y',
387 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r',
388 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e',
389 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h',
390 'a','t','K','u','r','t','V','o','n','n','e','g','u','t','s','C',
391 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e',
392 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d',
393 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l',
394 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c',
395 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e',
396 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o',
397 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r',
398 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l',
399 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o',
400 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e',
401 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t',
402 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e',
403 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n',
404 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b',
405 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d',
406 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I',
407 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s',
408 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h',
409 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
410 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e',
411 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u',
412 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e',
413 'r','a','K','u','r','t','V','o','n','n','e','g','u','t','s','C',
414 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e',
415 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d',
416 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l',
417 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c',
418 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e',
419 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o',
420 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r',
421 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l',
422 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o',
423 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e',
424 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t',
425 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e',
426 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n',
427 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b',
428 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d',
429 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I',
430 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s',
431 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h',
432 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
433 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e',
434 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u',
435 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e',
436 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
437 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e',
438 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i',
439 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o',
440 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y',
441 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l',
442 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a',
443 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s',
444 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e',
445 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u',
446 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d',
447 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s',
448 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o',
449 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r',
450 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t',
451 'h','a','t','K','u','r','t','V','o','n','n','e','g','u','K','u',
452 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
453 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
454 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
455 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
456 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
457 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
458 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
459 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
460 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
461 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
462 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
463 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
464 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
465 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
466 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
467 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
468 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
469 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
470 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
471 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
472 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
473 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
474 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
475 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
476 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
477 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
478 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
479 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
480 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
481 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
482 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
483 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
484 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
485 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
486 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
487 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
488 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
489 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','K',
490 'u','r','t','V','o','n','n','e','g','u','t','s','C','o','m','m',
491 'e','n','c','e','m','e','n','t','A','d','d','r','e','s','s','a',
492 't','M','I','T','L','a','d','i','e','s','a','n','d','g','e','n',
493 't','l','e','m','e','n','o','f','t','h','e','c','l','a','s','s',
494 'o','f','9','7','W','e','a','r','s','u','n','s','c','r','e','e',
495 'n','I','f','I','c','o','u','l','d','o','f','f','e','r','y','o',
496 'u','o','n','l','y','o','n','e','t','i','p','f','o','r','t','h',
497 'e','f','u','t','u','r','e','s','u','n','s','c','r','e','e','n',
498 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
499 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
500 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
501 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
502 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
503 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
504 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
505 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
506 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
507 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
508 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
509 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
510 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
511 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
512 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
513 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
514 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
515 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
516 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
517 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
518 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
519 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
520 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
521 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
522 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
523 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
524 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
525 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
526 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
527 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
528 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
529 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
530 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
531 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
532 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
533 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
534 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
535 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
536 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
537 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
538 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
539 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
540 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
541 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
542 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
543 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
544 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
545 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
546 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
547 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
548 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
549 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
550 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
551 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
552 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
553 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
554 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
555 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
556 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
557 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
558 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
559 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
560 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
561 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
562 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
563 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
564 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
565 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
566 't','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
567 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
568 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
569 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
570 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
571 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
572 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','K','u',
573 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
574 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
575 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
576 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
577 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
578 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
579 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
580 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
581 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
582 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
583 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
584 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
585 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
586 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
587 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
588 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
589 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
590 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
591 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
592 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
593 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
594 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
595 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
596 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
597 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
598 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
599 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
600 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
601 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
602 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
603 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
604 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
605 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
606 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
607 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
608 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
609 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
610 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','K',
611 'u','r','t','V','o','n','n','e','g','u','t','s','C','o','m','m',
612 'e','n','c','e','m','e','n','t','A','d','d','r','e','s','s','a',
613 't','M','I','T','L','a','d','i','e','s','a','n','d','g','e','n',
614 't','l','e','m','e','n','o','f','t','h','e','c','l','a','s','s',
615 'o','f','9','7','W','e','a','r','s','u','n','s','c','r','e','e',
616 'n','I','f','I','c','o','u','l','d','o','f','f','e','r','y','o',
617 'u','o','n','l','y','o','n','e','t','i','p','f','o','r','t','h',
618 'e','f','u','t','u','r','e','s','u','n','s','c','r','e','e','n',
619 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
620 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
621 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
622 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
623 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
624 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
625 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
626 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
627 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
628 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
629 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
630 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
631 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
632 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
633 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
634 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
635 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
636 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
637 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
638 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
639 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
640 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
641 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
642 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
643 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
644 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
645 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
646 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
647 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
648 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
649 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
650 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
651 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
652 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
653 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
654 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
655 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
656 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
657 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
658 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
659 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
660 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
661 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
662 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
663 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
664 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
665 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
666 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
667 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
668 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
669 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
670 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
671 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
672 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m',
673 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s',
674 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e',
675 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s',
676 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e',
677 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y',
678 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t',
679 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e',
680 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n',
681 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s',
682 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n',
683 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s',
684 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t',
685 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b',
686 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e',
687 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r',
688 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i',
689 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d',
690 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p',
691 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
692 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m',
693 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d',
694 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a',
695 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
696 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a',
697 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2',
698 '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b',
699 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u',
700 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n',
701 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p',
702 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b',
703 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o',
704 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y',
705 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o',
706 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o',
707 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r',
708 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O',
709 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a',
710 't','K','u','r','t','V','o','n','n','e','g','u','K','u','r','t',
711 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
712 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
713 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
714 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
715 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
716 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
717 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
718 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
719 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
720 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
721 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
722 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
723 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
724 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
725 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
726 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
727 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
728 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
729 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
730 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
731 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
732 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
733 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
734 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
735 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
736 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
737 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
738 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
739 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
740 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
741 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
742 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
743 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
744 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
745 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
746 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
747 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
748 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
749 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
750 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
751 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
752 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
753 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
754 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
755 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
756 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
757 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
758 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
759 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
760 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
761 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
762 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
763 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
764 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
765 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
766 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
767 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
768 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
769 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
770 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
771 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
772 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
773 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
774 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
775 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
776 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
777 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
778 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
779 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
780 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
781 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
782 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
783 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
784 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
785 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
786 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
787 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
788 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
789 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
790 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
791 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
792 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
793 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
794 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
795 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
796 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
797 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
798 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
799 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
800 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
801 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
802 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
803 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
804 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
805 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
806 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
807 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
808 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
809 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
810 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
811 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
812 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
813 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
814 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
815 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
816 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
817 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
818 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
819 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
820 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
821 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
822 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
823 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
824 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','t',
825 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
826 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
827 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
828 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
829 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
830 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
831 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
832 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
833 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
834 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
835 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
836 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
837 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
838 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
839 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
840 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
841 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
842 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
843 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
844 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
845 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
846 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
847 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
848 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
849 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
850 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
851 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
852 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
853 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
854 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
855 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
856 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
857 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
858 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
859 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
860 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
861 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
862 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
863 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
864 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
865 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
866 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
867 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
868 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
869 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
870 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
871 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
872 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
873 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
874 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
875 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
876 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
877 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
878 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
879 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
880 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
881 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
882 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
883 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
884 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
885 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
886 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
887 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
888 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
889 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
890 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
891 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
892 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
893 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
894 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
895 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
896 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
897 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
898 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
899 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
900 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
901 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
902 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
903 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
904 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
905 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
906 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
907 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
908 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
909 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
910 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
911 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
912 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
913 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
914 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
915 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
916 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
917 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
918 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
919 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
920 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
921 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
922 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
923 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
924 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
925 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
926 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
927 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
928 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
929 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
930 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
931 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
932 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
933 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
934 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
935 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
936 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
937 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
938 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
939 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
940 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
941 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
942 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
943 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
944 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
945 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
946 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
947 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
948 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
949 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
950 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
951 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
952 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
953 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
954 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
955 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
956 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
957 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
958 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
959 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
960 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
961 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
962 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
963 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
964 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
965 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
966 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
967 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
968 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
969 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
970 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
971 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
972 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
973 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
974 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
975 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
976 'k','n','o','w','t','h','a','t','n','d','b','e','a','u','t','y',
977 'o','f','y','o','u','r','y','o','u','t','h','u','n','t','i','l',
978 't','h','e','y','v','e','f','a','d','e','d','B','u','t','t','r',
979 'u','s','t','m','e','i','n','2','0','y','e','a','r','s','y','o',
980 'u','l','l','l','o','o','k','b','a','c','k','a','t','p','h','o',
981 't','o','s','o','f','y','o','u','r','s','e','l','f','a','n','d',
982 'r','e','c','a','l','l','i','n','a','w','a','y','y','o','u','c',
983 'a','n','t','g','r','a','s','p','n','o','w','h','o','w','m','u',
984 'c','h','p','o','s','s','i','b','i','l','i','t','y','l','a','y',
985 'b','e','f','o','r','e','y','o','u','a','n','d','h','o','w','f',
986 'a','b','u','l','o','u','s','y','o','u','r','e','a','l','l','y',
987 'l','o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a',
988 's','f','a','t','a','s','y','o','u','i','m','a','g','i','n','e',
989 'D','o','n','t','w','o','r','r','y','a','b','o','u','t','t','h',
990 'e','f','u','t','u','r','e','O','r','w','o','r','r','y','b','u',
991 't','k','n','o','w','t','h','a','t','s','u','n','s','c','r','e',
992 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o',
993 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f',
994 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e',
995 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i',
996 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s',
997 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o',
998 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l',
999 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e',
1000 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w',
1001 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a',
1002 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e',
1003 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1004 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r',
1005 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n',
1006 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r',
1007 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1008 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f',
1009 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n',
1010 '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k',
1011 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o',
1012 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i',
1013 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s',
1014 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i',
1015 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y',
1016 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s',
1017 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y',
1018 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y',
1019 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r',
1020 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e',
1021 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h',
1022 'a','t','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1023 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e',
1024 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i',
1025 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o',
1026 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y',
1027 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l',
1028 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a',
1029 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s',
1030 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e',
1031 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u',
1032 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d',
1033 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s',
1034 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o',
1035 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r',
1036 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t',
1037 'h','a','t','s','u','n','s','c','r','e','e','n','w','o','u','l',
1038 'd','b','e','i','t','T','h','e','l','o','n','g','t','e','r','m',
1039 'b','e','n','e','f','i','t','s','o','f','s','u','n','s','c','r',
1040 'e','e','n','h','a','v','e','b','e','e','n','p','r','o','v','e',
1041 'd','b','y','s','c','i','e','n','t','i','s','t','s','w','h','e',
1042 'r','e','a','s','t','h','e','r','e','s','t','o','f','m','y','a',
1043 'd','v','i','c','e','h','a','s','n','o','b','a','s','i','s','m',
1044 'o','r','e','r','e','l','i','a','b','l','e','t','h','a','n','m',
1045 'y','o','w','n','m','e','a','n','d','e','r','i','n','g','e','x',
1046 'p','e','r','i','e','n','c','e','I','w','i','l','l','d','i','s',
1047 'p','e','n','s','e','t','h','i','s','a','d','v','i','c','e','n',
1048 'o','w','E','n','j','o','y','t','h','e','p','o','w','e','r','a',
1049 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o',
1050 'u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y','o',
1051 'u','w','i','l','l','n','o','t','u','n','d','e','r','s','t','a',
1052 'n','d','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1053 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','u','n',
1054 't','i','l','t','h','e','y','v','e','f','a','d','e','d','B','u',
1055 't','t','r','u','s','t','m','e','i','n','2','0','y','e','a','r',
1056 's','y','o','u','l','l','l','o','o','k','b','a','c','k','a','t',
1057 'p','h','o','t','o','s','o','f','y','o','u','r','s','e','l','f',
1058 'a','n','d','r','e','c','a','l','l','i','n','a','w','a','y','y',
1059 'o','u','c','a','n','t','g','r','a','s','p','n','o','w','h','o',
1060 'w','m','u','c','h','p','o','s','s','i','b','i','l','i','t','y',
1061 'l','a','y','b','e','f','o','r','e','y','o','u','a','n','d','h',
1062 'o','w','f','a','b','u','l','o','u','s','y','o','u','r','e','a',
1063 'l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e','n',
1064 'o','t','a','s','f','a','t','a','s','y','o','u','i','m','a','g',
1065 'i','n','e','D','o','n','t','w','o','r','r','y','a','b','o','u',
1066 't','t','h','e','f','u','t','u','r','e','O','r','w','o','r','r',
1067 'y','b','u','t','k','n','o','w','t','h','a','t','b','u','t','k',
1068 'n','o','w','t','h','a','t','t','s','C','o','m','m','e','n','c',
1069 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1070 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1071 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1072 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1073 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1074 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1075 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t',
1076 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
1077 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
1078 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
1079 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1080 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1081 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1082 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
1083 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
1084 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
1085 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
1086 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
1087 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
1088 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
1089 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
1090 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
1091 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
1092 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
1093 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
1094 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
1095 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
1096 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
1097 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
1098 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1099 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
1100 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
1101 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
1102 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
1103 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
1104 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
1105 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
1106 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
1107 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
1108 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
1109 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
1110 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
1111 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
1112 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
1113 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
1114 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d',
1115 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s',
1116 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h',
1117 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u',
1118 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o',
1119 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i',
1120 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n',
1121 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T',
1122 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i',
1123 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v',
1124 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i',
1125 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h',
1126 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h',
1127 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l',
1128 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e',
1129 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n',
1130 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t',
1131 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o',
1132 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u',
1133 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n',
1134 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n',
1135 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p',
1136 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
1137 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e',
1138 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t',
1139 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l',
1140 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s',
1141 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c',
1142 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t',
1143 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p',
1144 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f',
1145 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u',
1146 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o',
1147 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a',
1148 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n',
1149 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u',
1150 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n',
1151 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g',
1152 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
1153 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
1154 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
1155 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
1156 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
1157 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
1158 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u',
1159 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t',
1160 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f',
1161 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a',
1162 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c',
1163 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t',
1164 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e',
1165 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e',
1166 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m',
1167 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e',
1168 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e',
1169 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j',
1170 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1171 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h',
1172 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l',
1173 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e',
1174 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1175 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h',
1176 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s',
1177 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l',
1178 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o',
1179 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e',
1180 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n',
1181 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h',
1182 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e',
1183 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b',
1184 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o',
1185 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f',
1186 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o',
1187 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f',
1188 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k',
1189 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n',
1190 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
1191 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
1192 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
1193 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
1194 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
1195 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
1196 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
1197 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
1198 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
1199 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
1200 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
1201 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1202 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
1203 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
1204 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
1205 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
1206 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
1207 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
1208 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
1209 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
1210 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
1211 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
1212 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
1213 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
1214 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
1215 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
1216 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
1217 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
1218 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
1219 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
1220 '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1221 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1222 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1223 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
1224 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
1225 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1226 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1227 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1228 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1229 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1230 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1231 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
1232 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
1233 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
1234 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
1235 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
1236 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
1237 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
1238 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
1239 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
1240 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
1241 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
1242 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
1243 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1244 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
1245 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
1246 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
1247 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
1248 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
1249 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
1250 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
1251 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
1252 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
1253 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
1254 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
1255 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
1256 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
1257 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
1258 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
1259 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
1260 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
1261 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
1262 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
1263 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
1264 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
1265 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
1266 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
1267 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
1268 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
1269 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
1270 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
1271 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
1272 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
1273 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
1274 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
1275 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
1276 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
1277 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
1278 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
1279 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
1280 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
1281 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1282 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
1283 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
1284 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
1285 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
1286 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
1287 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
1288 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
1289 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
1290 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
1291 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
1292 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
1293 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
1294 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
1295 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
1296 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
1297 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
1298 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
1299 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
1300 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
1301 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
1302 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
1303 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
1304 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
1305 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
1306 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
1307 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
1308 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
1309 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
1310 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
1311 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
1312 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
1313 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
1314 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
1315 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
1316 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
1317 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
1318 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
1319 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
1320 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
1321 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
1322 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
1323 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
1324 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
1325 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
1326 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
1327 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
1328 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
1329 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
1330 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
1331 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
1332 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
1333 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
1334 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
1335 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
1336 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
1337 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
1338 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
1339 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
1340 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
1341 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
1342 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
1343 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
1344 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
1345 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
1346 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
1347 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
1348 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
1349 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
1350 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
1351 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
1352 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
1353 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
1354 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
1355 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
1356 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
1357 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
1358 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
1359 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
1360 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
1361 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
1362 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
1363 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
1364 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
1365 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
1366 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
1367 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
1368 'k','n','o','w','t','h','a','t','\n', 'l','a','s','s','o','f','9',
1369 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1370 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1371 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1372 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t',
1373 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
1374 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
1375 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
1376 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1377 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1378 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1379 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
1380 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
1381 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
1382 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
1383 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
1384 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
1385 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
1386 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
1387 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
1388 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
1389 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
1390 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
1391 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
1392 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
1393 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
1394 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
1395 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1396 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
1397 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
1398 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
1399 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
1400 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
1401 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
1402 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
1403 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
1404 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
1405 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
1406 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
1407 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
1408 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
1409 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
1410 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
1411 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d',
1412 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s',
1413 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h',
1414 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u',
1415 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o',
1416 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i',
1417 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n',
1418 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T',
1419 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i',
1420 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v',
1421 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i',
1422 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h',
1423 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h',
1424 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l',
1425 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e',
1426 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n',
1427 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t',
1428 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o',
1429 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u',
1430 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n',
1431 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n',
1432 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p',
1433 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
1434 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e',
1435 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t',
1436 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l',
1437 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s',
1438 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c',
1439 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t',
1440 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p',
1441 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f',
1442 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u',
1443 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o',
1444 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a',
1445 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n',
1446 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u',
1447 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n',
1448 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g',
1449 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
1450 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
1451 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
1452 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
1453 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
1454 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
1455 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u',
1456 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t',
1457 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f',
1458 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a',
1459 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c',
1460 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t',
1461 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e',
1462 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e',
1463 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m',
1464 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e',
1465 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e',
1466 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j',
1467 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1468 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h',
1469 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l',
1470 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e',
1471 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1472 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h',
1473 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s',
1474 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l',
1475 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o',
1476 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e',
1477 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n',
1478 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h',
1479 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e',
1480 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b',
1481 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o',
1482 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f',
1483 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o',
1484 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f',
1485 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k',
1486 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n',
1487 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
1488 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
1489 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
1490 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
1491 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
1492 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
1493 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
1494 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
1495 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
1496 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
1497 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
1498 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1499 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
1500 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
1501 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
1502 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
1503 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
1504 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
1505 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
1506 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
1507 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
1508 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
1509 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
1510 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
1511 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
1512 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
1513 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
1514 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
1515 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
1516 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
1517 '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1518 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1519 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1520 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
1521 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
1522 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1523 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1524 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1525 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1526 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1527 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1528 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
1529 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
1530 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
1531 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
1532 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
1533 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
1534 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
1535 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
1536 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
1537 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
1538 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
1539 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
1540 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1541 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
1542 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
1543 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
1544 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
1545 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
1546 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
1547 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
1548 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
1549 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
1550 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
1551 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
1552 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
1553 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
1554 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
1555 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
1556 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
1557 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
1558 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
1559 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
1560 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
1561 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
1562 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
1563 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
1564 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
1565 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
1566 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
1567 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
1568 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
1569 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
1570 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
1571 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
1572 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
1573 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
1574 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
1575 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
1576 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
1577 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
1578 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1579 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
1580 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
1581 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
1582 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
1583 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
1584 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
1585 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
1586 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
1587 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
1588 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
1589 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
1590 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
1591 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
1592 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
1593 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
1594 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
1595 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
1596 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
1597 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
1598 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
1599 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
1600 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
1601 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
1602 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
1603 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
1604 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
1605 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
1606 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
1607 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
1608 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
1609 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
1610 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
1611 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
1612 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
1613 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
1614 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
1615 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
1616 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
1617 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
1618 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
1619 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
1620 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
1621 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
1622 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
1623 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
1624 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
1625 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
1626 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
1627 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
1628 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
1629 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
1630 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
1631 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
1632 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
1633 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
1634 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
1635 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
1636 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
1637 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
1638 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
1639 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
1640 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
1641 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
1642 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
1643 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
1644 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
1645 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
1646 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
1647 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
1648 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
1649 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
1650 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
1651 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
1652 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
1653 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
1654 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
1655 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
1656 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
1657 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
1658 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
1659 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
1660 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
1661 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
1662 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
1663 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
1664 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
1665 'k','n','o','w','t','h','a','t','\n', 'l','a','s','s','o','f','9',
1666 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1667 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1668 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1669 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t',
1670 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d',
1671 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a',
1672 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e',
1673 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1674 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1675 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1676 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s',
1677 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h',
1678 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t',
1679 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e',
1680 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e',
1681 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e',
1682 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a',
1683 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i',
1684 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a',
1685 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c',
1686 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h',
1687 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y',
1688 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t',
1689 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e',
1690 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o',
1691 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o',
1692 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1693 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y',
1694 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m',
1695 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l',
1696 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o',
1697 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a',
1698 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g',
1699 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o',
1700 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o',
1701 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l',
1702 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k',
1703 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t',
1704 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t',
1705 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t',
1706 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o',
1707 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u',
1708 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d',
1709 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s',
1710 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h',
1711 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u',
1712 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o',
1713 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i',
1714 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n',
1715 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T',
1716 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i',
1717 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v',
1718 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i',
1719 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h',
1720 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h',
1721 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l',
1722 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e',
1723 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n',
1724 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t',
1725 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o',
1726 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u',
1727 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n',
1728 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n',
1729 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p',
1730 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y',
1731 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e',
1732 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t',
1733 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l',
1734 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s',
1735 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c',
1736 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t',
1737 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p',
1738 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f',
1739 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u',
1740 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o',
1741 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a',
1742 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n',
1743 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u',
1744 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n',
1745 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g',
1746 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A',
1747 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e',
1748 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t',
1749 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s',
1750 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d',
1751 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t',
1752 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u',
1753 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t',
1754 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f',
1755 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a',
1756 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c',
1757 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t',
1758 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e',
1759 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e',
1760 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m',
1761 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e',
1762 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e',
1763 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j',
1764 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a',
1765 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h',
1766 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l',
1767 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e',
1768 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f',
1769 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h',
1770 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s',
1771 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l',
1772 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o',
1773 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e',
1774 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n',
1775 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h',
1776 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e',
1777 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b',
1778 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o',
1779 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f',
1780 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o',
1781 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f',
1782 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k',
1783 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n',
1784 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g',
1785 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u',
1786 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p',
1787 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t',
1788 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o',
1789 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a',
1790 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t',
1791 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i',
1792 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l',
1793 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v',
1794 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o',
1795 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o',
1796 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i',
1797 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e',
1798 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n',
1799 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u',
1800 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d',
1801 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0',
1802 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a',
1803 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r',
1804 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a',
1805 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n',
1806 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i',
1807 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u',
1808 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o',
1809 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u',
1810 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u',
1811 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y',
1812 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r',
1813 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t',
1814 '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n',
1815 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f',
1816 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p',
1817 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t',
1818 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c',
1819 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I',
1820 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e',
1821 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9',
1822 '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f',
1823 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n',
1824 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u',
1825 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u',
1826 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r',
1827 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c',
1828 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v',
1829 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h',
1830 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y',
1831 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s',
1832 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n',
1833 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e',
1834 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i',
1835 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e',
1836 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r',
1837 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y',
1838 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y',
1839 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t',
1840 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e',
1841 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u',
1842 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B',
1843 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a',
1844 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a',
1845 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l',
1846 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y',
1847 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h',
1848 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t',
1849 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d',
1850 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e',
1851 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e',
1852 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a',
1853 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o',
1854 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r',
1855 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r',
1856 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n',
1857 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M',
1858 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l',
1859 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f',
1860 '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I',
1861 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o',
1862 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f',
1863 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o',
1864 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e',
1865 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s',
1866 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o',
1867 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w',
1868 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m',
1869 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i',
1870 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a',
1871 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g',
1872 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d',
1873 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c',
1874 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e',
1875 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r',
1876 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d',
1877 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s',
1878 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b',
1879 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h',
1880 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d',
1881 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e',
1882 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k',
1883 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e',
1884 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a',
1885 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w',
1886 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i',
1887 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n',
1888 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r',
1889 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r',
1890 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m',
1891 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b',
1892 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o',
1893 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u',
1894 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e',
1895 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t',
1896 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t',
1897 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o',
1898 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n',
1899 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u',
1900 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e',
1901 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w',
1902 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t',
1903 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n',
1904 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r',
1905 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s',
1906 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f',
1907 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s',
1908 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h',
1909 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n',
1910 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l',
1911 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i',
1912 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w',
1913 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u',
1914 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n',
1915 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r',
1916 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d',
1917 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t',
1918 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e',
1919 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y',
1920 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c',
1921 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s',
1922 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w',
1923 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o',
1924 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l',
1925 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a',
1926 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u',
1927 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a',
1928 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i',
1929 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a',
1930 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w',
1931 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s',
1932 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i',
1933 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e',
1934 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h',
1935 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s',
1936 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s',
1937 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c',
1938 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r',
1939 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n',
1940 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i',
1941 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s',
1942 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n',
1943 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e',
1944 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O',
1945 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l',
1946 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h',
1947 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o',
1948 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t',
1949 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u',
1950 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u',
1951 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t',
1952 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r',
1953 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a',
1954 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c',
1955 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b',
1956 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a',
1957 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l',
1958 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s',
1959 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D',
1960 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e',
1961 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t',
1962 'k','n','o','w','t','h','a','t','\n'
1963};
diff --git a/baseline/source/rijndael_enc/rijndael_enc.c b/baseline/source/rijndael_enc/rijndael_enc.c
new file mode 100644
index 0000000..f74d595
--- /dev/null
+++ b/baseline/source/rijndael_enc/rijndael_enc.c
@@ -0,0 +1,238 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: rijndael_enc
7
8 Author: Dr Brian Gladman
9
10 Function: rijndael_enc is an implementation of the AES encryption
11 algorithm (Rijndael).
12
13 Source: security section of MiBench
14
15 Changes: Add computation of a checksum, refactoring
16
17 License: see below
18
19*/
20
21/*
22 -----------------------------------------------------------------------
23 Copyright (c) 2001 Dr Brian Gladman <brg@gladman.uk.net>, Worcester, UK
24
25 TERMS
26
27 Redistribution and use in source and binary forms, with or without
28 modification, are permitted provided that the following conditions
29 are met:
30 1. Redistributions of source code must retain the above copyright
31 notice, this list of conditions and the following disclaimer.
32 2. Redistributions in binary form must reproduce the above copyright
33 notice, this list of conditions and the following disclaimer in the
34 documentation and/or other materials provided with the distribution.
35
36 This software is provided 'as is' with no guarantees of correctness or
37 fitness for purpose.
38 -----------------------------------------------------------------------
39*/
40
41#include "../extra.h"
42#include "aes.h"
43#include "rijndael_enc_libc.h"
44
45/*
46 Global variable definitions
47*/
48unsigned char rijndael_enc_key[32];
49int rijndael_enc_key_len;
50
51extern unsigned char rijndael_enc_data[];
52struct rijndael_enc_FILE rijndael_enc_fin;
53
54int rijndael_enc_checksum = 0;
55
56/*
57 Forward declaration of functions
58*/
59void rijndael_enc_init( void );
60int rijndael_enc_return( void );
61void rijndael_enc_fillrand( unsigned char *buf, int len );
62void rijndael_enc_encfile( struct rijndael_enc_FILE *fin, struct aes *ctx );
63void rijndael_enc_main( void );
64
65void rijndael_enc_init( void )
66{
67 /* create a pseudo-file for the input*/
68 rijndael_enc_fin.data = rijndael_enc_data;
69 rijndael_enc_fin.size = 31369;
70 rijndael_enc_fin.cur_pos = 0;
71
72 unsigned i;
73 volatile int x = 0;
74 rijndael_enc_fin.size ^= x;
75 _Pragma( "loopbound min 31369 max 31369" )
76 for ( i = 0; i < rijndael_enc_fin.size; i++ )
77 rijndael_enc_fin.data[i] ^= x;
78
79 /* this is a pointer to the hexadecimal key digits */
80 const volatile char *cp =
81 "1234567890abcdeffedcba09876543211234567890abcdeffedcba0987654321";
82 char ch;
83 int by = 0;
84
85 i = 0; /* this is a count for the input digits processed */
86 _Pragma( "loopbound min 64 max 64" )
87 while ( i < 64 && *cp ) { /* the maximum key length is 32 bytes and */
88 /* hence at most 64 hexadecimal digits */
89 ch = rijndael_enc_toupper( *cp++ ); /* process a hexadecimal digit */
90 if ( ch >= '0' && ch <= '9' )
91 by = ( by << 4 ) + ch - '0';
92 else
93 if ( ch >= 'A' && ch <= 'F' )
94 by = ( by << 4 ) + ch - 'A' + 10;
95 else { /* error if not hexadecimal */
96 rijndael_enc_checksum = -2;
97 return;
98 }
99
100 /* store a key byte for each pair of hexadecimal digits */
101 if ( i++ & 1 )
102 rijndael_enc_key[i / 2 - 1] = by & 0xff;
103 }
104
105 if ( *cp ) {
106 rijndael_enc_checksum = -3;
107 return;
108 } else
109 if ( i < 32 || ( i & 15 ) ) {
110 rijndael_enc_checksum = -4;
111 return;
112 }
113
114 rijndael_enc_key_len = i / 2;
115}
116
117int rijndael_enc_return( void )
118{
119 return ( ( rijndael_enc_checksum == ( int )249509 ) ? 0 : -1 );
120}
121
122/* A Pseudo Random Number Generator (PRNG) used for the */
123/* Initialisation Vector. The PRNG is George Marsaglia's */
124/* Multiply-With-Carry (MWC) PRNG that concatenates two */
125/* 16-bit MWC generators: */
126/* x(n)=36969 * x(n-1) + carry mod 2^16 */
127/* y(n)=18000 * y(n-1) + carry mod 2^16 */
128/* to produce a combined PRNG with a period of about 2^60. */
129
130#define RAND(a,b) (((a = 36969 * (a & 65535) + (a >> 16)) << 16) + (b = 18000 * (b & 65535) + (b >> 16)) )
131
132void rijndael_enc_fillrand( unsigned char *buf, int len )
133{
134 static unsigned long a[2], mt = 1, count = 4;
135 static char r[4];
136 int i;
137
138 if ( mt ) {
139 mt = 0;
140 a[0] = 0xeaf3;
141 a[1] = 0x35fe;
142 }
143
144 _Pragma( "loopbound min 1 max 16" )
145 for ( i = 0; i < len; ++i ) {
146 if ( count == 4 ) {
147 *( unsigned long * )r = RAND( a[0], a[1] );
148 count = 0;
149 }
150
151 buf[i] = r[count++];
152 }
153}
154
155void rijndael_enc_encfile( struct rijndael_enc_FILE *fin, struct aes *ctx )
156{
157 unsigned char inbuf[16], outbuf[16];
158 long int flen;
159 unsigned long i = 0, l = 0;
160
161 rijndael_enc_fillrand( outbuf,
162 16 ); /* set an IV for CBC mode */
163 flen = fin->size;
164
165 rijndael_enc_fillrand( inbuf,
166 1 ); /* make top 4 bits of a byte random */
167 l = 15; /* and store the length of the last */
168 /* block in the lower 4 bits */
169 inbuf[0] = ( ( char )flen & 15 ) | ( inbuf[0] & ~15 );
170
171 /* TODO: this is necessarily an input-dependent loop bound */
172 _Pragma( "loopbound min 1961 max 1961" )
173 while ( !rijndael_enc_feof(
174 fin ) ) { /* loop to encrypt the input file */
175 /* input 1st 16 bytes to buf[1..16] */
176 i = rijndael_enc_fread( inbuf + 16 - l, 1, l, fin ); /* on 1st round byte[0] */
177 /* is the length code */
178 if ( i < l ) break; /* if end of the input file reached */
179
180 _Pragma( "loopbound min 16 max 16" )
181 for ( i = 0; i < 16; ++i ) /* xor in previous cipher text */
182 inbuf[i] ^= outbuf[i];
183
184 rijndael_enc_encrypt( inbuf, outbuf,
185 ctx ); /* and do the encryption */
186
187 rijndael_enc_checksum += outbuf[15];
188
189 /* in all but first round read 16 */
190 l = 16; /* bytes into the buffer */
191 }
192
193 /* except for files of length less than two blocks we now have one */
194 /* byte from the previous block and 'i' bytes from the current one */
195 /* to encrypt and 15 - i empty buffer positions. For files of less */
196 /* than two blocks (0 or 1) we have i + 1 bytes and 14 - i empty */
197 /* buffer position to set to zero since the 'count' byte is extra */
198
199 if ( l == 15 ) /* adjust for extra byte in the */
200 ++i; /* in the first block */
201
202 if ( i ) { /* if bytes remain to be output */
203 _Pragma( "loopbound min 6 max 6" )
204 while ( i < 16 ) /* clear empty buffer positions */
205 inbuf[i++] = 0;
206
207 _Pragma( "loopbound min 16 max 16" )
208 for ( i = 0; i < 16; ++i ) /* xor in previous cipher text */
209 inbuf[i] ^= outbuf[i];
210
211 rijndael_enc_encrypt( inbuf, outbuf, ctx ); /* encrypt and output it */
212
213 rijndael_enc_checksum += outbuf[15];
214 }
215}
216
217void _Pragma( "entrypoint" ) rijndael_enc_main( void )
218{
219 struct aes ctx[1];
220
221 /* encryption in Cipher Block Chaining mode */
222 rijndael_enc_set_key( rijndael_enc_key, rijndael_enc_key_len, enc, ctx );
223 rijndael_enc_encfile( &rijndael_enc_fin, ctx );
224}
225
226int main( int argc, char** argv )
227{
228 SET_UP
229 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
230 START_LOOP
231 rijndael_enc_init();
232 rijndael_enc_main();
233 STOP_LOOP
234 }
235 WRITE_TO_FILE
236 return ( rijndael_enc_return() );
237}
238
diff --git a/baseline/source/rijndael_enc/rijndael_enc_libc.c b/baseline/source/rijndael_enc/rijndael_enc_libc.c
new file mode 100644
index 0000000..921af68
--- /dev/null
+++ b/baseline/source/rijndael_enc/rijndael_enc_libc.c
@@ -0,0 +1,66 @@
1#include "rijndael_enc_libc.h"
2
3int rijndael_enc_toupper( int c )
4{
5 if ( ( c >= 'a' ) && ( c <= 'z' ) )
6 return c - 'a' + 'A';
7 return c;
8}
9
10unsigned long rijndael_enc_fread( void *ptr, unsigned long size,
11 unsigned long count, struct rijndael_enc_FILE *stream )
12{
13 unsigned i = stream->cur_pos, i2 = 0;
14 unsigned long number_of_chars_to_read =
15 stream->size - stream->cur_pos >= size * count ?
16 size * count : stream->size - stream->cur_pos;
17 _Pragma( "loopbound min 10 max 16" )
18 while ( i < stream->cur_pos + number_of_chars_to_read )
19 ( ( unsigned char * )ptr )[i2++] = stream->data[i++];
20 stream->cur_pos += number_of_chars_to_read;
21 return number_of_chars_to_read;
22}
23
24unsigned long rijndael_enc_fwrite( const void *ptr, unsigned long size,
25 unsigned long count, struct rijndael_enc_FILE *stream )
26{
27 unsigned i = stream->cur_pos, i2 = 0;
28 unsigned long number_of_chars_to_write =
29 stream->size - stream->cur_pos >= size * count ?
30 size * count : stream->size - stream->cur_pos;
31 _Pragma( "loopbound min 0 max 0" )
32 while ( i < stream->cur_pos + number_of_chars_to_write )
33 stream->data[i++] = ( ( unsigned char * )ptr )[i2++];
34 stream->cur_pos += number_of_chars_to_write;
35 return number_of_chars_to_write;
36}
37
38int rijndael_enc_fseek( struct rijndael_enc_FILE *stream, long int offset,
39 Origin origin )
40{
41 if ( origin == RIJNDAEL_ENC_SEEK_SET ) {
42 stream->cur_pos = offset;
43 return 0;
44 } else
45 if ( origin == RIJNDAEL_ENC_SEEK_CUR ) {
46 stream->cur_pos += offset;
47 return 0;
48 } else
49 if ( origin == RIJNDAEL_ENC_SEEK_END ) {
50 stream->cur_pos = stream->size + offset;
51 return 0;
52 }
53 return -1;
54}
55
56int rijndael_enc_fgetpos( struct rijndael_enc_FILE *stream,
57 unsigned *position )
58{
59 *position = stream->cur_pos;
60 return 0;
61}
62
63int rijndael_enc_feof( struct rijndael_enc_FILE *stream )
64{
65 return stream->cur_pos == stream->size ? 1 : 0;
66}
diff --git a/baseline/source/rijndael_enc/rijndael_enc_libc.h b/baseline/source/rijndael_enc/rijndael_enc_libc.h
new file mode 100644
index 0000000..6a01397
--- /dev/null
+++ b/baseline/source/rijndael_enc/rijndael_enc_libc.h
@@ -0,0 +1,24 @@
1#ifndef RIJNDAEL_ENC_LIBC_H
2#define RIJNDAEL_ENC_LIBC_H
3
4int rijndael_enc_toupper ( int c );
5
6enum _Origin_ { RIJNDAEL_ENC_SEEK_SET, RIJNDAEL_ENC_SEEK_CUR, RIJNDAEL_ENC_SEEK_END };
7typedef enum _Origin_ Origin;
8struct rijndael_enc_FILE {
9 unsigned char *data;
10 unsigned long size;
11 unsigned cur_pos;
12};
13
14unsigned long rijndael_enc_fread ( void *ptr, unsigned long size,
15 unsigned long count, struct rijndael_enc_FILE *stream );
16unsigned long rijndael_enc_fwrite ( const void *ptr, unsigned long size,
17 unsigned long count, struct rijndael_enc_FILE *stream );
18int rijndael_enc_fseek ( struct rijndael_enc_FILE *stream, long int offset,
19 Origin origin );
20int rijndael_enc_fgetpos( struct rijndael_enc_FILE *stream,
21 unsigned *position );
22int rijndael_enc_feof ( struct rijndael_enc_FILE *stream );
23
24#endif // RIJNDAEL_ENC_LIBC_H
diff --git a/baseline/source/statemate/ChangeLog.txt b/baseline/source/statemate/ChangeLog.txt
new file mode 100644
index 0000000..bce75dc
--- /dev/null
+++ b/baseline/source/statemate/ChangeLog.txt
@@ -0,0 +1,60 @@
1File: statemate.c
2Original provenience: Mälardalen benchmark suite,
3 http://www.mrtc.mdh.se/projects/wcet/benchmarks.html
4
52016-02-02:
6- Removed original header comment, replaced by TACLeBench header.
7- Removed macro '#define float int' and replaced each 'float' by 'int' (8 in
8 total)
9- Removed unused macro
10 - #define entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_copy_IDX 1
11- Removed unused variables
12 - int FH_TUERMODUL_CTRL__N_copy;
13 - int BLOCK_ERKENNUNG_CTRL__I_EIN_MAX_copy;
14 - int BLOCK_ERKENNUNG_CTRL__N_copy;
15 - char FH_TUERMODUL_CTRL__FT;
16 - char FH_TUERMODUL__COM_OPEN;
17 - char FH_TUERMODUL__COM_CLOSE;
18 - char FH_DU__S_FH_TMBFAUFCAN_copy;
19 - char FH_DU__S_FH_TMBFZUCAN_copy;
20- Moved around all the following so that they are in the given order just after
21the header
22 - macro definitions
23 - forward declarations of fuctions
24 - declarations of global variables
25- Reordered functions in source code: initialization-related functions first,
26 followed by algorithm core functions, followed by main functions
27- Added a new main function that first calls init function then the old main
28 function sans init
29- Annotated statemate_main() as the entry point of the analysis
30- Removed seemingly unnecessary empty lines
31- Changed remaining floating number literals, all being used for time related
32 comparisons, to integer literals by multiplying them by 1000 so that the
33 code is totally floating number free. E.g:
34 changed 'time - sc_FH_TUERMODUL_CTRL_2375_2 >= 0.5f'
35 to 'time - sc_FH_TUERMODUL_CTRL_2375_2 >= 500'
36 Info: All time related variables were already converted to 'unsigned long'
37- Applied code formatting according to the following rules
38 - Lines shall not be wider than 80 characters; whenever possible, appropriate
39 line breaks shall be inserted to keep lines below 80 characters
40 - Indentation is done using whitespaces only, no tabs. Code is indented by
41 two whitespaces
42 - Two empty lines are put between any two functions
43 - In non-empty lists or index expressions, opening '(' and '[' are followed by
44 one whitespace, closing ')' and ']' are preceded by one whitespace
45 - In comma- or colon-separated argument lists, one whitespace is put after
46 each comma/colon
47 - Names of functions and global variables all start with a benchmark-specific
48 prefix (here: statemate_) followed by lowercase letter
49 - For pointer types, one whitespace is put before the '*'
50 - Operators within expressions shall be preceded and followed by one
51 whitespace
52 - Code of then- and else-parts of if-then-else statements shall be put in
53 separate lines, not in the same lines as the if-condition or the keyword
54 "else"
55 - Opening braces '{' denoting the beginning of code for some if-else or loop
56 body shall be put at the end of the same line where the keywords "if",
57 "else", "for", "while" etc. occur
58
59 2016-10-10:
60 - added statemate_return() function
diff --git a/baseline/source/statemate/statemate.c b/baseline/source/statemate/statemate.c
new file mode 100644
index 0000000..379366a
--- /dev/null
+++ b/baseline/source/statemate/statemate.c
@@ -0,0 +1,1286 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: statemate
7
8 Author: Friedhelm Stappert, C-LAB, Paderborn, Germany
9
10 Function: This code was automatically generated by
11 the STAtechart Real-time-Code generator STARC
12 which was developed at C-LAB.
13
14 The original StateChart specifies an experimental
15 car window lift control.
16
17 Source: MRTC
18 http://www.mrtc.mdh.se/projects/wcet/wcet_bench/statemate/statemate.c
19
20 Changes: no major functional changes
21
22 License: may be used, modified, and re-distributed freely
23
24*/
25
26/*
27 Macro definitions
28*/
29
30#include "../extra.h"
31
32#define SYS_bit_get(a,b) (a)[(b)]
33#define SYS_bit_clr(a,b) (a)[(b)] = 0
34#define SYS_bit_set(a,b) (a)[(b)] = 1
35#define SYS_bit_cpy(a1,i1,a2,i2) (a1)[(i1)] = (a2)[(i2)]
36
37#define active_KINDERSICHERUNG_CTRL_IDX 10
38#define active_KINDERSICHERUNG_CTRL_copy_IDX 11
39#define active_KINDERSICHERUNG_CTRL_old_IDX 12
40#define active_FH_TUERMODUL_CTRL_IDX 13
41#define active_FH_TUERMODUL_CTRL_copy_IDX 14
42#define active_FH_TUERMODUL_CTRL_old_IDX 15
43#define active_EINKLEMMSCHUTZ_CTRL_IDX 16
44#define active_EINKLEMMSCHUTZ_CTRL_copy_IDX 17
45#define active_EINKLEMMSCHUTZ_CTRL_old_IDX 18
46#define active_BLOCK_ERKENNUNG_CTRL_IDX 19
47#define active_BLOCK_ERKENNUNG_CTRL_copy_IDX 20
48#define active_BLOCK_ERKENNUNG_CTRL_old_IDX 21
49#define entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX 0
50
51#define entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX 4
52#define entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX 5
53#define exited_BEREIT_FH_TUERMODUL_CTRL_IDX 6
54#define exited_BEREIT_FH_TUERMODUL_CTRL_copy_IDX 7
55
56#define FH_TUERMODUL_CTRL__END_REVERS_IDX 22
57#define FH_TUERMODUL_CTRL__END_REVERS_copy_IDX 23
58#define FH_TUERMODUL__EINKLEMMUNG_IDX 24
59
60
61/*
62 Forward declaration of functions
63*/
64
65void statemate_init( void );
66void statemate_interface( void );
67void statemate_generic_KINDERSICHERUNG_CTRL( void );
68void statemate_generic_FH_TUERMODUL_CTRL( void );
69void statemate_generic_EINKLEMMSCHUTZ_CTRL( void );
70void statemate_generic_BLOCK_ERKENNUNG_CTRL( void );
71void statemate_FH_DU( void );
72void statemate_main( void );
73int statemate_return ( void );
74
75
76/*
77 Declaration of global variables
78*/
79
80static char statemate_bitlist[64];
81unsigned long
82statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy;
83unsigned long
84statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL;
85unsigned long statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL;
86unsigned long statemate_sc_FH_TUERMODUL_CTRL_2375_2;
87unsigned long statemate_sc_FH_TUERMODUL_CTRL_2352_1;
88unsigned long statemate_sc_FH_TUERMODUL_CTRL_2329_1;
89int statemate_FH_TUERMODUL_CTRL__N;
90int statemate_FH_TUERMODUL_CTRL__N_old;
91unsigned long statemate_sc_FH_TUERMODUL_CTRL_1781_10;
92unsigned long statemate_sc_FH_TUERMODUL_CTRL_1739_10;
93int statemate_FH_TUERMODUL__POSITION;
94int statemate_FH_TUERMODUL__I_EIN;
95int statemate_FH_TUERMODUL__I_EIN_old;
96int statemate_FH_DU__MFH;
97int statemate_FH_DU__MFH_copy;
98int statemate_FH_DU__POSITION;
99int statemate_FH_DU__I_EIN;
100int statemate_FH_DU__I_EIN_old;
101int statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX;
102int statemate_BLOCK_ERKENNUNG_CTRL__N;
103int statemate_BLOCK_ERKENNUNG_CTRL__N_old;
104char statemate_FH_TUERMODUL_CTRL__INREVERS2;
105char statemate_FH_TUERMODUL_CTRL__INREVERS2_copy;
106char statemate_FH_TUERMODUL_CTRL__INREVERS1;
107char statemate_FH_TUERMODUL_CTRL__INREVERS1_copy;
108char statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
109char statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old;
110char statemate_FH_TUERMODUL__SFHZ_MEC;
111char statemate_FH_TUERMODUL__SFHZ_MEC_old;
112char statemate_FH_TUERMODUL__SFHA_ZENTRAL;
113char statemate_FH_TUERMODUL__SFHA_ZENTRAL_old;
114char statemate_FH_TUERMODUL__SFHA_MEC;
115char statemate_FH_TUERMODUL__SFHA_MEC_old;
116char statemate_FH_TUERMODUL__KL_50;
117char statemate_FH_TUERMODUL__BLOCK;
118char statemate_FH_TUERMODUL__BLOCK_copy;
119char statemate_FH_TUERMODUL__BLOCK_old;
120char statemate_FH_TUERMODUL__FT;
121char statemate_FH_TUERMODUL__SFHZ;
122char statemate_FH_TUERMODUL__SFHZ_copy;
123char statemate_FH_TUERMODUL__SFHZ_old;
124char statemate_FH_TUERMODUL__SFHA;
125char statemate_FH_TUERMODUL__SFHA_copy;
126char statemate_FH_TUERMODUL__SFHA_old;
127char statemate_FH_TUERMODUL__MFHZ;
128char statemate_FH_TUERMODUL__MFHZ_copy;
129char statemate_FH_TUERMODUL__MFHZ_old;
130char statemate_FH_TUERMODUL__MFHA;
131char statemate_FH_TUERMODUL__MFHA_copy;
132char statemate_FH_TUERMODUL__MFHA_old;
133char statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
134char statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old;
135char statemate_FH_DU__KL_50;
136char statemate_FH_DU__S_FH_FTZU;
137char statemate_FH_DU__S_FH_FTAUF;
138char statemate_FH_DU__FT;
139char statemate_FH_DU__EKS_LEISTE_AKTIV;
140char statemate_FH_DU__EKS_LEISTE_AKTIV_old;
141char statemate_FH_DU__S_FH_TMBFAUFCAN;
142char statemate_FH_DU__S_FH_TMBFAUFCAN_old;
143char statemate_FH_DU__S_FH_TMBFZUCAN;
144char statemate_FH_DU__S_FH_TMBFZUCAN_old;
145char statemate_FH_DU__S_FH_TMBFZUDISC;
146char statemate_FH_DU__S_FH_TMBFZUDISC_old;
147char statemate_FH_DU__S_FH_TMBFAUFDISC;
148char statemate_FH_DU__S_FH_TMBFAUFDISC_old;
149char statemate_FH_DU__S_FH_ZUDISC;
150char statemate_FH_DU__S_FH_AUFDISC;
151char statemate_FH_DU__DOOR_ID;
152char statemate_FH_DU__BLOCK;
153char statemate_FH_DU__BLOCK_copy;
154char statemate_FH_DU__BLOCK_old;
155char statemate_FH_DU__MFHZ;
156char statemate_FH_DU__MFHZ_copy;
157char statemate_FH_DU__MFHZ_old;
158char statemate_FH_DU__MFHA;
159char statemate_FH_DU__MFHA_copy;
160char statemate_FH_DU__MFHA_old;
161
162unsigned long statemate_time;
163char statemate_stable;
164char statemate_step;
165
166char
167statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state; /** 2 bits **/
168char
169statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state; /** 1 bits **/
170char statemate_MEC_KINDERSICHERUNG_CTRL_next_state; /** 1 bits **/
171char
172statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state; /** 2 bits **/
173char statemate_B_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
174char statemate_A_FH_TUERMODUL_CTRL_next_state; /** 1 bits **/
175char
176statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state; /** 1 bits **/
177char
178statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
179char
180statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
181char
182statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
183char statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
184char
185statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state; /** 2 bits **/
186char
187statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state; /** 2 bits **/
188char
189statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state; /** 2 bits **/
190char
191statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state; /** 2 bits **/
192char
193statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state; /** 2 bits **/
194
195
196/*
197 Initialization-related functions
198*/
199
200void statemate_init( void )
201{
202 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
203 = 0;
204 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
205 = 0;
206 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL = 0;
207 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 0;
208 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 0;
209 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 0;
210 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 0;
211 statemate_B_FH_TUERMODUL_CTRL_next_state = 0;
212 statemate_A_FH_TUERMODUL_CTRL_next_state = 0;
213 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 0;
214 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 0;
215 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
216 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
217 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 0;
218 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
219 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 0;
220 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 0;
221 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 0;
222 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 0;
223
224 statemate_interface();
225} /** statemate_init **/
226
227
228void statemate_interface( void )
229{
230 if ( SYS_bit_get( statemate_bitlist,
231 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX ) )
232 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL = statemate_time;
233 if ( SYS_bit_get( statemate_bitlist,
234 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX ) ||
235 SYS_bit_get( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_IDX ) )
236 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
237 = statemate_time;
238 if ( ( statemate_sc_FH_TUERMODUL_CTRL_2375_2 != 0 ) &&
239 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_2375_2 >= 500 ) ) {
240 statemate_FH_TUERMODUL__MFHA_copy = 0;
241 statemate_sc_FH_TUERMODUL_CTRL_2375_2 = 0;
242 }
243 if ( ( statemate_sc_FH_TUERMODUL_CTRL_2352_1 != 0 ) &&
244 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_2352_1 >= 500 ) ) {
245 statemate_FH_TUERMODUL__MFHZ_copy = 0;
246 statemate_sc_FH_TUERMODUL_CTRL_2352_1 = 0;
247 }
248 if ( ( statemate_sc_FH_TUERMODUL_CTRL_2329_1 != 0 ) &&
249 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_2329_1 >= 500 ) ) {
250 statemate_FH_TUERMODUL__MFHZ_copy = 0;
251 statemate_sc_FH_TUERMODUL_CTRL_2329_1 = 0;
252 }
253 if ( ( statemate_sc_FH_TUERMODUL_CTRL_1781_10 != 0 ) &&
254 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_1781_10 >= 500 ) )
255 statemate_sc_FH_TUERMODUL_CTRL_1781_10 = 0;
256
257 if ( ( statemate_sc_FH_TUERMODUL_CTRL_1739_10 != 0 ) &&
258 ( statemate_time - statemate_sc_FH_TUERMODUL_CTRL_1739_10 >= 500 ) )
259 statemate_sc_FH_TUERMODUL_CTRL_1739_10 = 0;
260
261 if ( ( SYS_bit_get( statemate_bitlist,
262 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX ) ||
263 statemate_BLOCK_ERKENNUNG_CTRL__N != statemate_BLOCK_ERKENNUNG_CTRL__N_old ) )
264 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
265 = statemate_time;
266} /** statemate_interface **/
267
268
269/*
270 Algorithm core functions
271*/
272
273void statemate_generic_KINDERSICHERUNG_CTRL( void )
274{
275 if ( SYS_bit_get( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX ) ) {
276 switch ( statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state ) {
277 case 1: { /** state ZENTRAL in chart KINDERSICHERUNG_CTRL **/
278 if ( !( statemate_FH_TUERMODUL__SFHA_ZENTRAL ||
279 statemate_FH_TUERMODUL__SFHZ_ZENTRAL ) ) {
280 statemate_stable = 0;
281 statemate_FH_TUERMODUL__SFHZ_copy = 0;
282 statemate_FH_TUERMODUL__SFHA_copy = 0;
283
284 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
285 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 0;
286 break;
287 }
288 switch ( statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state ) {
289 case 1: { /** state IN_ZENTRAL in chart KINDERSICHERUNG_CTRL **/
290 if ( ( statemate_FH_TUERMODUL__SFHA_ZENTRAL &&
291 !( statemate_FH_TUERMODUL__SFHA_ZENTRAL_old ) ) ) {
292 statemate_stable = 0;
293 statemate_FH_TUERMODUL__SFHA_copy = 1;
294
295 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
296 break;
297 }
298 if ( ( statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
299 !( statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old ) ) ) {
300 statemate_stable = 0;
301 statemate_FH_TUERMODUL__SFHZ_copy = 1;
302
303 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
304 break;
305 }
306 if ( ( !( statemate_FH_TUERMODUL__SFHA_ZENTRAL ) &&
307 statemate_FH_TUERMODUL__SFHA_ZENTRAL_old ) ) {
308 statemate_stable = 0;
309 statemate_FH_TUERMODUL__SFHA_copy = 0;
310
311 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
312 break;
313 }
314 if ( ( !( statemate_FH_TUERMODUL__SFHZ_ZENTRAL ) &&
315 statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old ) ) {
316 statemate_stable = 0;
317 statemate_FH_TUERMODUL__SFHZ_copy = 0;
318
319 statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state = 1;
320 break;
321 }
322 break;
323 }
324 default: {
325 statemate_stable = 0;
326 break;
327 }
328 } /** switch statemate_ZENTRAL_KINDERSICHERUNG_CTRL_next_state **/
329 break;
330 }
331 case 2: { /** state MEC in chart KINDERSICHERUNG_CTRL **/
332 if ( !( statemate_FH_TUERMODUL__SFHA_MEC ||
333 statemate_FH_TUERMODUL__SFHZ_MEC ) ) {
334 statemate_stable = 0;
335 statemate_FH_TUERMODUL__SFHZ_copy = 0;
336 statemate_FH_TUERMODUL__SFHA_copy = 0;
337
338 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
339 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 0;
340 break;
341 }
342 switch ( statemate_MEC_KINDERSICHERUNG_CTRL_next_state ) {
343 case 1: { /** state INMEC in chart KINDERSICHERUNG_CTRL **/
344 if ( ( statemate_FH_TUERMODUL__SFHA_MEC &&
345 !( statemate_FH_TUERMODUL__SFHA_MEC_old ) ) ) {
346 statemate_stable = 0;
347 statemate_FH_TUERMODUL__SFHA_copy = 1;
348
349 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
350 break;
351 }
352 if ( ( statemate_FH_TUERMODUL__SFHZ_MEC &&
353 !( statemate_FH_TUERMODUL__SFHZ_MEC_old ) ) ) {
354 statemate_stable = 0;
355 statemate_FH_TUERMODUL__SFHZ_copy = 1;
356
357 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
358 break;
359 }
360 if ( ( !( statemate_FH_TUERMODUL__SFHA_MEC ) &&
361 statemate_FH_TUERMODUL__SFHA_MEC_old ) ) {
362 statemate_stable = 0;
363 statemate_FH_TUERMODUL__SFHA_copy = 0;
364
365 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
366 break;
367 }
368 if ( ( !( statemate_FH_TUERMODUL__SFHZ_MEC ) &&
369 statemate_FH_TUERMODUL__SFHZ_MEC_old ) ) {
370 statemate_stable = 0;
371 statemate_FH_TUERMODUL__SFHZ_copy = 0;
372
373 statemate_MEC_KINDERSICHERUNG_CTRL_next_state = 1;
374 break;
375 }
376 break;
377 }
378 default: {
379 statemate_stable = 0;
380 break;
381 }
382 } /** switch statemate_MEC_KINDERSICHERUNG_CTRL_next_state **/
383 break;
384 }
385 case 3: { /** state WAITING in chart KINDERSICHERUNG_CTRL **/
386 if ( ( !statemate_FH_TUERMODUL__KL_50 ) && ( statemate_FH_TUERMODUL__SFHZ_MEC &&
387 statemate_FH_TUERMODUL__SFHA_MEC ) ) {
388 statemate_stable = 0;
389 statemate_FH_TUERMODUL__SFHZ_copy = 1;
390 statemate_FH_TUERMODUL__SFHA_copy = 1;
391
392 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 2;
393 break;
394 }
395 if ( ( !statemate_FH_TUERMODUL__KL_50 ) && ( statemate_FH_TUERMODUL__SFHZ_MEC &&
396 !statemate_FH_TUERMODUL__SFHA_MEC ) ) {
397 statemate_stable = 0;
398 statemate_FH_TUERMODUL__SFHZ_copy = 1;
399
400 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 2;
401 break;
402 }
403 if ( ( !statemate_FH_TUERMODUL__KL_50 ) &&
404 ( !statemate_FH_TUERMODUL__SFHZ_MEC &&
405 statemate_FH_TUERMODUL__SFHA_MEC ) ) {
406 statemate_stable = 0;
407 statemate_FH_TUERMODUL__SFHA_copy = 1;
408
409 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 2;
410 break;
411 }
412 if ( ( !statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
413 statemate_FH_TUERMODUL__SFHA_ZENTRAL &&
414 !statemate_FH_TUERMODUL__KL_50 ) ) {
415 statemate_stable = 0;
416 statemate_FH_TUERMODUL__SFHA_copy = 1;
417
418 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 1;
419 break;
420 }
421 if ( ( statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
422 statemate_FH_TUERMODUL__SFHA_ZENTRAL ) ) {
423 statemate_stable = 0;
424 statemate_FH_TUERMODUL__SFHA_copy = 1;
425 statemate_FH_TUERMODUL__SFHZ_copy = 1;
426
427 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 1;
428 break;
429 }
430 if ( ( statemate_FH_TUERMODUL__SFHZ_ZENTRAL &&
431 !statemate_FH_TUERMODUL__SFHA_ZENTRAL &&
432 !statemate_FH_TUERMODUL__KL_50 ) ) {
433 statemate_stable = 0;
434 statemate_FH_TUERMODUL__SFHZ_copy = 1;
435
436 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 1;
437 break;
438 }
439 break;
440 }
441 default: {
442 statemate_stable = 0;
443 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
444 break;
445 }
446 } /** switch statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state **/
447 }
448}
449
450
451void statemate_generic_FH_TUERMODUL_CTRL( void )
452{
453 if ( !SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX ) &&
454 SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_old_IDX ) &&
455 !SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX ) ) {
456 SYS_bit_clr( statemate_bitlist, entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX );
457 SYS_bit_clr( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_IDX );
458 }
459 if ( SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX ) ) {
460 if ( !SYS_bit_get( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX ) )
461 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
462 SYS_bit_clr( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
463 if ( !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) ) {
464 SYS_bit_clr( statemate_bitlist,
465 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
466 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
467 }
468 SYS_bit_clr( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
469 SYS_bit_set( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
470 SYS_bit_set( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
471 switch ( statemate_B_FH_TUERMODUL_CTRL_next_state ) {
472 case 1: { /** state ZAEHLER_WHSP_ZU_HOCH in chart FH_TUERMODUL_CTRL **/
473 if ( ( statemate_FH_TUERMODUL_CTRL__N == 59 &&
474 !( statemate_FH_TUERMODUL_CTRL__N_old == 59 ) ) ) {
475 statemate_stable = 0;
476
477 statemate_B_FH_TUERMODUL_CTRL_next_state = 3;
478 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
479 break;
480 }
481 break;
482 }
483 case 2: { /** state NICHT_INITIALISIERT in chart FH_TUERMODUL_CTRL **/
484 if ( ( ( statemate_FH_TUERMODUL__BLOCK &&
485 !( statemate_FH_TUERMODUL__BLOCK_old ) ) ) &&
486 ( ( statemate_FH_TUERMODUL__MFHZ ) ) ) {
487 statemate_stable = 0;
488 statemate_FH_TUERMODUL__MFHZ_copy = 0;
489 statemate_sc_FH_TUERMODUL_CTRL_2329_1 = statemate_time;
490
491 statemate_B_FH_TUERMODUL_CTRL_next_state = 3;
492 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
493 break;
494 }
495 switch ( statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state ) {
496 case 1: { /** state SCHLIESSEN in chart NICHT_INITIALISIERT **/
497 if ( !( statemate_FH_TUERMODUL__SFHZ ) ) {
498 statemate_stable = 0;
499 statemate_FH_TUERMODUL__MFHZ_copy = 0;
500
501 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
502 break;
503 }
504 break;
505 }
506 case 2: { /** state OEFFNEN in chart NICHT_INITIALISIERT **/
507 if ( !( statemate_FH_TUERMODUL__SFHA ) ) {
508 statemate_stable = 0;
509 statemate_FH_TUERMODUL__MFHA_copy = 0;
510
511 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
512 break;
513 }
514 break;
515 }
516 case 3: { /** state BEREIT in chart NICHT_INITIALISIERT **/
517 if ( ( statemate_FH_TUERMODUL__SFHA ) ) {
518 statemate_stable = 0;
519 statemate_FH_TUERMODUL__MFHA_copy = 1;
520
521 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 2;
522 break;
523 }
524 if ( ( statemate_FH_TUERMODUL__SFHZ ) ) {
525 statemate_stable = 0;
526 statemate_FH_TUERMODUL__MFHZ_copy = 1;
527
528 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 1;
529 break;
530 }
531 break;
532 }
533 default: {
534 statemate_stable = 0;
535 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
536 break;
537 }
538 } /** switch statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state **/
539 break;
540 }
541 case 3: { /** state INITIALISIERT in chart FH_TUERMODUL_CTRL **/
542 if ( ( ( statemate_FH_TUERMODUL_CTRL__N > 60 &&
543 !( statemate_FH_TUERMODUL_CTRL__N_old > 60 ) ) ) &&
544 ( ( !( statemate_FH_TUERMODUL_CTRL__INREVERS1 ||
545 statemate_FH_TUERMODUL_CTRL__INREVERS2 ) ) ) ) {
546 statemate_stable = 0;
547 statemate_FH_TUERMODUL__MFHZ_copy = 0;
548 statemate_FH_TUERMODUL__MFHA_copy = 0;
549
550 statemate_B_FH_TUERMODUL_CTRL_next_state = 1;
551 break;
552 }
553 if ( ( ( statemate_FH_TUERMODUL__BLOCK &&
554 !( statemate_FH_TUERMODUL__BLOCK_old ) ) ) &&
555 ( ( statemate_FH_TUERMODUL__MFHA ) ) ) {
556 statemate_stable = 0;
557 statemate_FH_TUERMODUL__MFHA_copy = 0;
558 statemate_sc_FH_TUERMODUL_CTRL_2375_2 = statemate_time;
559
560 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
561 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
562 break;
563 }
564 if ( ( ( statemate_FH_TUERMODUL__BLOCK &&
565 !( statemate_FH_TUERMODUL__BLOCK_old ) ) ) &&
566 ( ( statemate_FH_TUERMODUL__MFHZ ) ) ) {
567 statemate_stable = 0;
568 statemate_FH_TUERMODUL__MFHZ_copy = 0;
569 statemate_sc_FH_TUERMODUL_CTRL_2352_1 = statemate_time;
570
571 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
572 statemate_NICHT_INITIALISIERT_NICHT_INITIALISIERT_next_state = 3;
573 break;
574 }
575 switch ( statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state ) {
576 case 1: { /** state OEFFNEN in chart FH_TUERMODUL_CTRL **/
577 if ( ( statemate_FH_TUERMODUL__POSITION >= 405 ) ) {
578 statemate_stable = 0;
579 statemate_FH_TUERMODUL__MFHA_copy = 0;
580
581 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
582 break;
583 }
584 switch ( statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state ) {
585 case 1: { /** state TIPP_OEFFNEN in chart FH_TUERMODUL_CTRL **/
586 if ( ( statemate_FH_TUERMODUL__SFHZ &&
587 !( statemate_FH_TUERMODUL__SFHZ_old ) ) ||
588 ( statemate_FH_TUERMODUL__SFHA && !( statemate_FH_TUERMODUL__SFHA_old ) ) ) {
589 statemate_stable = 0;
590 statemate_FH_TUERMODUL__MFHA_copy = 0;
591
592 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
593 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 0;
594 break;
595 }
596 break;
597 }
598 case 2: { /** state MAN_OEFFNEN in chart FH_TUERMODUL_CTRL **/
599 if ( ( statemate_FH_TUERMODUL__SFHZ &&
600 !( statemate_FH_TUERMODUL__SFHZ_old ) ) ) {
601 statemate_stable = 0;
602
603 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 1;
604 break;
605 }
606 if ( ( !( statemate_FH_TUERMODUL__SFHA ) &&
607 statemate_FH_TUERMODUL__SFHA_old ) ) {
608 statemate_stable = 0;
609 statemate_FH_TUERMODUL__MFHA_copy = 0;
610
611 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
612 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 0;
613 break;
614 }
615 break;
616 }
617 default: {
618 statemate_stable = 0;
619 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 2;
620 break;
621 }
622 } /** switch statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state **/
623 break;
624 }
625 case 2: { /** state SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
626 if ( ( statemate_FH_TUERMODUL__POSITION <= 0 ) ) {
627 statemate_stable = 0;
628 statemate_FH_TUERMODUL__MFHZ_copy = 0;
629
630 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
631 break;
632 }
633 switch ( statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state ) {
634 case 1: { /** state TIPP_SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
635 if ( ( statemate_FH_TUERMODUL__SFHA &&
636 !( statemate_FH_TUERMODUL__SFHA_old ) ) ||
637 ( statemate_FH_TUERMODUL__SFHZ && !( statemate_FH_TUERMODUL__SFHZ_old ) ) ) {
638 statemate_stable = 0;
639 statemate_FH_TUERMODUL__MFHZ_copy = 0;
640
641 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
642 break;
643 }
644 switch ( statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state ) {
645 case 1: { /** state REVERSIEREN2 in chart FH_TUERMODUL_CTRL **/
646 SYS_bit_clr( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
647 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_IDX ) ) {
648 statemate_stable = 0;
649 statemate_FH_TUERMODUL__MFHZ_copy = 1;
650 statemate_FH_TUERMODUL_CTRL__INREVERS2_copy = 0;
651
652 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
653 statemate_FH_TUERMODUL__MFHA_copy = 0;
654
655 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
656 break;
657 }
658 break;
659 }
660 case 2: { /** state TIPP_SCHLIESSEN1 in chart FH_TUERMODUL_CTRL **/
661 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX ) ) {
662 statemate_stable = 0;
663 statemate_FH_TUERMODUL_CTRL__INREVERS2_copy = 1;
664
665 SYS_bit_set( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
666 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 1;
667 SYS_bit_clr( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
668 statemate_FH_TUERMODUL__MFHZ_copy = 0;
669
670 statemate_sc_FH_TUERMODUL_CTRL_1781_10 = statemate_time;
671 statemate_FH_TUERMODUL__MFHA_copy = 1;
672 break;
673 }
674 break;
675 }
676 default: {
677 statemate_stable = 0;
678 statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
679 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
680 break;
681 }
682 } /** switch statemate_TIPP_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state **/
683 break;
684 }
685 case 2: { /** state MANUELL_SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
686 if ( ( !( statemate_FH_TUERMODUL__SFHZ ) &&
687 statemate_FH_TUERMODUL__SFHZ_old ) ) {
688 statemate_stable = 0;
689 statemate_FH_TUERMODUL__MFHZ_copy = 0;
690
691 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
692 break;
693 }
694 switch ( statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state ) {
695 case 1: { /** state REVERSIEREN1 in chart FH_TUERMODUL_CTRL **/
696 SYS_bit_clr( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
697 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_IDX ) ) {
698 statemate_stable = 0;
699 statemate_FH_TUERMODUL_CTRL__INREVERS1_copy = 0;
700
701 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
702 statemate_FH_TUERMODUL__MFHA_copy = 0;
703
704 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
705 statemate_FH_TUERMODUL__MFHZ_copy = 1;
706 break;
707 }
708 break;
709 }
710 case 2: { /** state MAN_SCHLIESSEN in chart FH_TUERMODUL_CTRL **/
711 if ( SYS_bit_get( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX ) ) {
712 statemate_stable = 0;
713 statemate_FH_TUERMODUL__MFHZ_copy = 0;
714 statemate_FH_TUERMODUL_CTRL__INREVERS1_copy = 1;
715
716 SYS_bit_set( statemate_bitlist, FH_TUERMODUL_CTRL__END_REVERS_copy_IDX );
717 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 1;
718 SYS_bit_clr( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
719
720 statemate_sc_FH_TUERMODUL_CTRL_1739_10 = statemate_time;
721 statemate_FH_TUERMODUL__MFHA_copy = 1;
722 break;
723 }
724 if ( ( statemate_FH_TUERMODUL__SFHA &&
725 !( statemate_FH_TUERMODUL__SFHA_old ) ) ) {
726 statemate_stable = 0;
727
728 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 1;
729 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 0;
730 break;
731 }
732 break;
733 }
734 default: {
735 statemate_stable = 0;
736 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
737 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
738 statemate_FH_TUERMODUL__MFHZ_copy = 1;
739 break;
740 }
741 } /** switch statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state **/
742 break;
743 }
744 default: {
745 statemate_stable = 0;
746 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
747 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
748 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
749 statemate_FH_TUERMODUL__MFHZ_copy = 1;
750 break;
751 }
752 } /** switch statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state **/
753 break;
754 }
755 case 3: { /** state BEREIT in chart FH_TUERMODUL_CTRL **/
756 if ( ( ( statemate_FH_TUERMODUL__SFHZ &&
757 !( statemate_FH_TUERMODUL__SFHZ_old ) ) ) &&
758 ( ( statemate_FH_TUERMODUL__POSITION > 0 ) ) ) {
759 statemate_stable = 0;
760
761 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 2;
762 statemate_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
763 statemate_MANUELL_SCHLIESSEN_FH_TUERMODUL_CTRL_next_state = 2;
764 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
765 statemate_FH_TUERMODUL__MFHZ_copy = 1;
766 break;
767 }
768 if ( ( ( statemate_FH_TUERMODUL__SFHA &&
769 !( statemate_FH_TUERMODUL__SFHA_old ) ) ) &&
770 ( ( statemate_FH_TUERMODUL__POSITION < 405 ) ) ) {
771 statemate_stable = 0;
772 statemate_FH_TUERMODUL__MFHA_copy = 1;
773
774 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 1;
775 statemate_OEFFNEN_FH_TUERMODUL_CTRL_next_state = 2;
776 break;
777 }
778 break;
779 }
780 default: {
781 statemate_stable = 0;
782 statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state = 3;
783 break;
784 }
785 } /** switch statemate_INITIALISIERT_FH_TUERMODUL_CTRL_next_state **/
786 break;
787 }
788 default: {
789 statemate_stable = 0;
790 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
791 break;
792 }
793 } /** switch statemate_B_FH_TUERMODUL_CTRL_next_state **/
794 switch ( statemate_A_FH_TUERMODUL_CTRL_next_state ) {
795 case 1: { /** state WIEDERHOLSPERRE in chart FH_TUERMODUL_CTRL **/
796 SYS_bit_clr( statemate_bitlist,
797 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
798 if ( ( statemate_step == 1 &&
799 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
800 != 0
801 && ( statemate_time -
802 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRLexited_BEREIT_FH_TUERMODUL_CTRL
803 ==
804 1 ) ) && ( ( statemate_FH_TUERMODUL__MFHZ ||
805 statemate_FH_TUERMODUL__MFHA ) ) ) {
806 statemate_stable = 0;
807 statemate_FH_TUERMODUL_CTRL__N = statemate_FH_TUERMODUL_CTRL__N + 1;
808
809 statemate_A_FH_TUERMODUL_CTRL_next_state = 1;
810 SYS_bit_set( statemate_bitlist,
811 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
812 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
813 break;
814 }
815 switch ( statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state ) {
816 case 1: { /** state WDHSP in chart FH_TUERMODUL_CTRL **/
817 if ( ( statemate_step == 1 &&
818 statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL != 0 &&
819 ( statemate_time - statemate_tm_entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL ==
820 3 ) ) &&
821 ( ( ( !( statemate_FH_TUERMODUL__MFHZ || statemate_FH_TUERMODUL__MFHA ) ) &&
822 statemate_FH_TUERMODUL_CTRL__N > 0 ) ) ) {
823 statemate_stable = 0;
824 statemate_FH_TUERMODUL_CTRL__N = statemate_FH_TUERMODUL_CTRL__N - 1;
825
826 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
827 break;
828 }
829 break;
830 }
831 default: {
832 statemate_stable = 0;
833 SYS_bit_set( statemate_bitlist,
834 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
835 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
836 break;
837 }
838 } /** switch statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state **/
839 break;
840 }
841 default: {
842 statemate_stable = 0;
843 statemate_FH_TUERMODUL_CTRL__N = 0;
844 statemate_A_FH_TUERMODUL_CTRL_next_state = 1;
845 SYS_bit_set( statemate_bitlist,
846 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
847 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
848 break;
849 }
850 } /** switch statemate_A_FH_TUERMODUL_CTRL_next_state **/
851 SYS_bit_cpy( statemate_bitlist,
852 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX,
853 statemate_bitlist, entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX );
854 SYS_bit_cpy( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_copy_IDX,
855 statemate_bitlist,
856 exited_BEREIT_FH_TUERMODUL_CTRL_IDX );
857 }
858}
859
860
861void statemate_generic_EINKLEMMSCHUTZ_CTRL( void )
862{
863 if ( SYS_bit_get( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_IDX ) ) {
864 switch ( statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state ) {
865 case 1: { /** state NORMALBETRIEB in chart EINKLEMMSCHUTZ_CTRL **/
866 if ( ( ( statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV &&
867 !( statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old ) ) ) &&
868 ( ( !( statemate_FH_TUERMODUL__SFHZ &&
869 statemate_FH_TUERMODUL__SFHA ) ) ) ) {
870 statemate_stable = 0;
871
872 SYS_bit_set( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX );
873 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 2;
874 break;
875 }
876 break;
877 }
878 case 2: { /** state EINKLEMMUNG in chart EINKLEMMSCHUTZ_CTRL **/
879 SYS_bit_clr( statemate_bitlist, FH_TUERMODUL__EINKLEMMUNG_IDX );
880 if ( ( !( statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV ) &&
881 statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old ) ) {
882 statemate_stable = 0;
883
884 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 1;
885 break;
886 }
887 break;
888 }
889 default: {
890 statemate_stable = 0;
891 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 1;
892 break;
893 }
894 } /** switch statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state **/
895 }
896}
897
898
899void statemate_generic_BLOCK_ERKENNUNG_CTRL( void )
900{
901 if ( !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) &&
902 SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_old_IDX ) &&
903 !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX ) )
904 SYS_bit_clr( statemate_bitlist,
905 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
906 if ( SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) ) {
907 switch ( statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state ) {
908 case 1: { /** state KEINE_BEWEGUNG in chart BLOCK_ERKENNUNG_CTRL **/
909 if ( ( statemate_FH_TUERMODUL__I_EIN != statemate_FH_TUERMODUL__I_EIN_old ) &&
910 ( ( statemate_FH_TUERMODUL__I_EIN > 0 ) ) ) {
911 statemate_stable = 0;
912 statemate_FH_TUERMODUL__BLOCK_copy = 0;
913
914 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 2;
915 statemate_BLOCK_ERKENNUNG_CTRL__N = 0;
916 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX = 2;
917 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 3;
918 SYS_bit_set( statemate_bitlist,
919 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
920 break;
921 }
922 break;
923 }
924 case 2: { /** state BEWEGUNG in chart BLOCK_ERKENNUNG_CTRL **/
925 if ( ( !( statemate_FH_TUERMODUL__MFHA ) &&
926 statemate_FH_TUERMODUL__MFHA_old ) ||
927 ( !( statemate_FH_TUERMODUL__MFHZ ) && statemate_FH_TUERMODUL__MFHZ_old ) ) {
928 statemate_stable = 0;
929
930 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
931 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 0;
932 break;
933 }
934 switch ( statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state ) {
935 case 1: { /** state FENSTER_BLOCKIERT in chart BLOCK_ERKENNUNG_CTRL **/
936 break;
937 }
938 case 2: { /** state FENSTER_BEWEGT_SICH in chart BLOCK_ERKENNUNG_CTRL **/
939 if ( ( statemate_FH_TUERMODUL__I_EIN >
940 ( statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX - 2 ) ) ) {
941 statemate_stable = 0;
942 statemate_FH_TUERMODUL__BLOCK_copy = 1;
943
944 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 1;
945 break;
946 }
947 break;
948 }
949 case 3: { /** state EINSCHALTSTROM_MESSEN in chart BLOCK_ERKENNUNG_CTRL **/
950 SYS_bit_clr( statemate_bitlist,
951 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
952 if ( ( statemate_BLOCK_ERKENNUNG_CTRL__N == 11 &&
953 !( statemate_BLOCK_ERKENNUNG_CTRL__N_old == 11 ) ) ) {
954 statemate_stable = 0;
955
956 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 2;
957 break;
958 }
959 /** static reactions: **/
960 if ( statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state == 3 ) {
961 if ( statemate_step == 1 &&
962 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
963 != 0 && ( statemate_time -
964 statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy
965 == 2 ) ) {
966 statemate_BLOCK_ERKENNUNG_CTRL__N = statemate_BLOCK_ERKENNUNG_CTRL__N + 1;
967 if ( ( statemate_FH_TUERMODUL__I_EIN >
968 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX ) )
969 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX = statemate_FH_TUERMODUL__I_EIN;
970
971 }
972 }
973 /** end static reactions **/
974 break;
975 }
976 default: {
977 statemate_stable = 0;
978 statemate_BLOCK_ERKENNUNG_CTRL__N = 0;
979 statemate_BLOCK_ERKENNUNG_CTRL__I_EIN_MAX = 2;
980 statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state = 3;
981 SYS_bit_set( statemate_bitlist,
982 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
983 break;
984 }
985 } /** switch statemate_BEWEGUNG_BLOCK_ERKENNUNG_CTRL_next_state **/
986 break;
987 }
988 default: {
989 statemate_stable = 0;
990 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
991 break;
992 }
993 } /** switch statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state **/
994 }
995}
996
997
998void statemate_FH_DU( void )
999{
1000 statemate_time = 1; /**SYS_get_clock()**/
1001 statemate_stable = 0;
1002 statemate_step = 0;
1003 // patched for wcet: replacing while statement by for
1004 //while (!statemate_stable)
1005 int i;
1006 _Pragma( "loopbound min 100 max 100" )
1007 for ( i = 0; i < 100; i++ ) {
1008 statemate_stable = 1;
1009 statemate_step++;
1010 {
1011 switch ( statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state ) {
1012 case 1: { /** state SCHLIESSEN in chart FH_STEUERUNG_DUMMY **/
1013 if ( ( !( statemate_FH_DU__MFHZ ) && statemate_FH_DU__MFHZ_old ) ) {
1014 statemate_stable = 0;
1015 statemate_FH_DU__MFH = 0;
1016
1017 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 2;
1018 break;
1019 }
1020 break;
1021 }
1022 case 2: { /** state BEREIT in chart FH_STEUERUNG_DUMMY **/
1023 if ( ( statemate_FH_DU__MFHZ && !( statemate_FH_DU__MFHZ_old ) ) ) {
1024 statemate_stable = 0;
1025 statemate_FH_DU__MFH = -100;
1026
1027 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 1;
1028 break;
1029 }
1030 if ( ( statemate_FH_DU__MFHA && !( statemate_FH_DU__MFHA_old ) ) ) {
1031 statemate_stable = 0;
1032 statemate_FH_DU__MFH = 100;
1033
1034 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 3;
1035 break;
1036 }
1037 break;
1038 }
1039 case 3: { /** state OEFFNEN in chart FH_STEUERUNG_DUMMY **/
1040 if ( ( !( statemate_FH_DU__MFHA ) && statemate_FH_DU__MFHA_old ) ) {
1041 statemate_stable = 0;
1042 statemate_FH_DU__MFH = 0;
1043
1044 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 2;
1045 break;
1046 }
1047 break;
1048 }
1049 default: {
1050 statemate_stable = 0;
1051 statemate_FH_DU__MFH = 0;
1052 statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state = 2;
1053 break;
1054 }
1055 } /** switch statemate_FH_STEUERUNG_DUMMY_FH_STEUERUNG_DUMMY_next_state **/
1056 }
1057 {
1058 {
1059 if ( !SYS_bit_get( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX ) )
1060 statemate_KINDERSICHERUNG_CTRL_KINDERSICHERUNG_CTRL_next_state = 3;
1061 SYS_bit_clr( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
1062 if ( !SYS_bit_get( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_IDX ) )
1063 statemate_EINKLEMMSCHUTZ_CTRL_EINKLEMMSCHUTZ_CTRL_next_state = 1;
1064 SYS_bit_clr( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
1065 if ( !SYS_bit_get( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX ) ) {
1066 SYS_bit_clr( statemate_bitlist,
1067 entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRL_IDX );
1068 statemate_BLOCK_ERKENNUNG_CTRL_BLOCK_ERKENNUNG_CTRL_next_state = 1;
1069 }
1070 SYS_bit_clr( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
1071 if ( !SYS_bit_get( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX ) ) {
1072 SYS_bit_clr( statemate_bitlist, entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_IDX );
1073 SYS_bit_clr( statemate_bitlist, exited_BEREIT_FH_TUERMODUL_CTRL_IDX );
1074 statemate_B_FH_TUERMODUL_CTRL_next_state = 2;
1075 statemate_FH_TUERMODUL_CTRL__N = 0;
1076 statemate_A_FH_TUERMODUL_CTRL_next_state = 1;
1077 SYS_bit_set( statemate_bitlist,
1078 entered_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_copy_IDX );
1079 statemate_WIEDERHOLSPERRE_FH_TUERMODUL_CTRL_next_state = 1;
1080 }
1081 SYS_bit_clr( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX );
1082 SYS_bit_set( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX );
1083 SYS_bit_set( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX );
1084 SYS_bit_set( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX );
1085 SYS_bit_set( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX );
1086 /** static reactions: **/
1087 if ( statemate_FH_DU__S_FH_TMBFZUCAN != statemate_FH_DU__S_FH_TMBFZUCAN_old ) {
1088 if ( ( !statemate_FH_DU__DOOR_ID ) )
1089 statemate_FH_DU__S_FH_FTZU = statemate_FH_DU__S_FH_TMBFZUCAN;
1090
1091 }
1092 if ( statemate_FH_DU__S_FH_TMBFZUDISC !=
1093 statemate_FH_DU__S_FH_TMBFZUDISC_old ) {
1094 if ( statemate_FH_DU__DOOR_ID )
1095 statemate_FH_DU__S_FH_TMBFZUCAN = statemate_FH_DU__S_FH_TMBFZUDISC;
1096
1097 }
1098 if ( statemate_FH_DU__S_FH_TMBFAUFCAN !=
1099 statemate_FH_DU__S_FH_TMBFAUFCAN_old ) {
1100 if ( ( !statemate_FH_DU__DOOR_ID ) )
1101 statemate_FH_DU__S_FH_FTAUF = statemate_FH_DU__S_FH_TMBFAUFCAN;
1102
1103 }
1104 if ( statemate_FH_DU__S_FH_TMBFAUFDISC !=
1105 statemate_FH_DU__S_FH_TMBFAUFDISC_old ) {
1106 if ( statemate_FH_DU__DOOR_ID )
1107 statemate_FH_DU__S_FH_TMBFAUFCAN = statemate_FH_DU__S_FH_TMBFAUFDISC;
1108
1109 }
1110 /** end static reactions **/
1111 }
1112 }
1113 SYS_bit_cpy( statemate_bitlist, active_KINDERSICHERUNG_CTRL_IDX,
1114 statemate_bitlist,
1115 active_KINDERSICHERUNG_CTRL_old_IDX );
1116 SYS_bit_cpy( statemate_bitlist, active_FH_TUERMODUL_CTRL_IDX, statemate_bitlist,
1117 active_FH_TUERMODUL_CTRL_old_IDX );
1118 SYS_bit_cpy( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_IDX,
1119 statemate_bitlist,
1120 active_EINKLEMMSCHUTZ_CTRL_old_IDX );
1121 SYS_bit_cpy( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_IDX,
1122 statemate_bitlist,
1123 active_BLOCK_ERKENNUNG_CTRL_old_IDX );
1124 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1125 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1126 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1127 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1128
1129 statemate_generic_KINDERSICHERUNG_CTRL();
1130
1131 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1132 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1133 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1134 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1135 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1136 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1137 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1138 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1139 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1140 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1141 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1142 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1143
1144 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1145 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1146 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1147 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1148
1149 statemate_generic_FH_TUERMODUL_CTRL();
1150
1151 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1152 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1153 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1154 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1155 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1156 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1157 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1158 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1159 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1160 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1161 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1162 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1163
1164 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1165 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1166 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1167 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1168
1169 statemate_generic_EINKLEMMSCHUTZ_CTRL();
1170
1171 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1172 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1173 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1174 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1175 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1176 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1177 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1178 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1179 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1180 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1181 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1182 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1183
1184 statemate_FH_TUERMODUL__SFHA_MEC = statemate_FH_DU__S_FH_AUFDISC;
1185 statemate_FH_TUERMODUL__SFHA_ZENTRAL = statemate_FH_DU__S_FH_FTAUF;
1186 statemate_FH_TUERMODUL__SFHZ_MEC = statemate_FH_DU__S_FH_ZUDISC;
1187 statemate_FH_TUERMODUL__SFHZ_ZENTRAL = statemate_FH_DU__S_FH_FTZU;
1188
1189 statemate_generic_BLOCK_ERKENNUNG_CTRL();
1190
1191 statemate_FH_DU__MFHA = statemate_FH_TUERMODUL__MFHA;
1192 statemate_FH_DU__MFHZ = statemate_FH_TUERMODUL__MFHZ;
1193 statemate_FH_DU__I_EIN = statemate_FH_TUERMODUL__I_EIN;
1194 statemate_FH_DU__EKS_LEISTE_AKTIV = statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1195 statemate_FH_DU__POSITION = statemate_FH_TUERMODUL__POSITION;
1196 statemate_FH_DU__FT = statemate_FH_TUERMODUL__FT;
1197 statemate_FH_DU__S_FH_AUFDISC = statemate_FH_TUERMODUL__SFHA_MEC;
1198 statemate_FH_DU__S_FH_FTAUF = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1199 statemate_FH_DU__S_FH_ZUDISC = statemate_FH_TUERMODUL__SFHZ_MEC;
1200 statemate_FH_DU__S_FH_FTZU = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1201 statemate_FH_DU__KL_50 = statemate_FH_TUERMODUL__KL_50;
1202 statemate_FH_DU__BLOCK = statemate_FH_TUERMODUL__BLOCK;
1203
1204 SYS_bit_cpy( statemate_bitlist, active_KINDERSICHERUNG_CTRL_copy_IDX,
1205 statemate_bitlist,
1206 active_KINDERSICHERUNG_CTRL_IDX );
1207 SYS_bit_cpy( statemate_bitlist, active_FH_TUERMODUL_CTRL_copy_IDX,
1208 statemate_bitlist,
1209 active_FH_TUERMODUL_CTRL_IDX );
1210 SYS_bit_cpy( statemate_bitlist, active_EINKLEMMSCHUTZ_CTRL_copy_IDX,
1211 statemate_bitlist,
1212 active_EINKLEMMSCHUTZ_CTRL_IDX );
1213 SYS_bit_cpy( statemate_bitlist, active_BLOCK_ERKENNUNG_CTRL_copy_IDX,
1214 statemate_bitlist,
1215 active_BLOCK_ERKENNUNG_CTRL_IDX );
1216 statemate_FH_TUERMODUL_CTRL__N_old = statemate_FH_TUERMODUL_CTRL__N;
1217 statemate_FH_TUERMODUL__I_EIN_old = statemate_FH_TUERMODUL__I_EIN;
1218 statemate_FH_DU__MFH = statemate_FH_DU__MFH_copy;
1219 statemate_FH_DU__I_EIN_old = statemate_FH_DU__I_EIN;
1220 statemate_BLOCK_ERKENNUNG_CTRL__N_old = statemate_BLOCK_ERKENNUNG_CTRL__N;
1221 statemate_FH_TUERMODUL__SFHZ_ZENTRAL_old = statemate_FH_TUERMODUL__SFHZ_ZENTRAL;
1222 statemate_FH_TUERMODUL__SFHZ_MEC_old = statemate_FH_TUERMODUL__SFHZ_MEC;
1223 statemate_FH_TUERMODUL__SFHA_ZENTRAL_old = statemate_FH_TUERMODUL__SFHA_ZENTRAL;
1224 statemate_FH_TUERMODUL__SFHA_MEC_old = statemate_FH_TUERMODUL__SFHA_MEC;
1225 statemate_FH_TUERMODUL__BLOCK = statemate_FH_TUERMODUL__BLOCK_copy;
1226 statemate_FH_TUERMODUL__BLOCK_old = statemate_FH_TUERMODUL__BLOCK;
1227 statemate_FH_TUERMODUL__SFHZ = statemate_FH_TUERMODUL__SFHZ_copy;
1228 statemate_FH_TUERMODUL__SFHZ_old = statemate_FH_TUERMODUL__SFHZ;
1229 statemate_FH_TUERMODUL__SFHA = statemate_FH_TUERMODUL__SFHA_copy;
1230 statemate_FH_TUERMODUL__SFHA_old = statemate_FH_TUERMODUL__SFHA;
1231 statemate_FH_TUERMODUL__MFHZ = statemate_FH_TUERMODUL__MFHZ_copy;
1232 statemate_FH_TUERMODUL__MFHZ_old = statemate_FH_TUERMODUL__MFHZ;
1233 statemate_FH_TUERMODUL__MFHA = statemate_FH_TUERMODUL__MFHA_copy;
1234 statemate_FH_TUERMODUL__MFHA_old = statemate_FH_TUERMODUL__MFHA;
1235 statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV_old =
1236 statemate_FH_TUERMODUL__EKS_LEISTE_AKTIV;
1237 statemate_FH_DU__EKS_LEISTE_AKTIV_old = statemate_FH_DU__EKS_LEISTE_AKTIV;
1238 statemate_FH_DU__S_FH_TMBFAUFCAN_old = statemate_FH_DU__S_FH_TMBFAUFCAN;
1239 statemate_FH_DU__S_FH_TMBFZUCAN_old = statemate_FH_DU__S_FH_TMBFZUCAN;
1240 statemate_FH_DU__S_FH_TMBFZUDISC_old = statemate_FH_DU__S_FH_TMBFZUDISC;
1241 statemate_FH_DU__S_FH_TMBFAUFDISC_old = statemate_FH_DU__S_FH_TMBFAUFDISC;
1242 statemate_FH_DU__BLOCK = statemate_FH_DU__BLOCK_copy;
1243 statemate_FH_DU__BLOCK_old = statemate_FH_DU__BLOCK;
1244 statemate_FH_DU__MFHZ = statemate_FH_DU__MFHZ_copy;
1245 statemate_FH_DU__MFHZ_old = statemate_FH_DU__MFHZ;
1246 statemate_FH_DU__MFHA = statemate_FH_DU__MFHA_copy;
1247 statemate_FH_DU__MFHA_old = statemate_FH_DU__MFHA;
1248
1249 } /** while(!statemate_stable) **/
1250
1251} /** statemate_FH_DU **/
1252
1253
1254/*
1255 Main functions
1256*/
1257
1258int statemate_return()
1259{
1260 unsigned long int checksum = 0;
1261 int index;
1262 for ( index=63 ; index>=0 ; index-- ){
1263 checksum += (unsigned long) (statemate_bitlist[index] << index);
1264 }
1265 return(checksum == 18446744073709551614ul);
1266}
1267
1268void _Pragma ( "entrypoint" ) statemate_main( void )
1269{
1270 statemate_FH_DU();
1271}
1272
1273
1274int main ( int argc, char **argv )
1275{
1276 SET_UP
1277 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
1278 START_LOOP
1279 statemate_init();
1280 statemate_main();
1281 STOP_LOOP
1282 }
1283 WRITE_TO_FILE
1284
1285 return statemate_return();
1286}
diff --git a/baseline/source/susan/ChangeLog.txt b/baseline/source/susan/ChangeLog.txt
new file mode 100644
index 0000000..bb603df
--- /dev/null
+++ b/baseline/source/susan/ChangeLog.txt
@@ -0,0 +1,11 @@
12017-07-04
2 - Removed self-assignment to avoid clangs self-assign warning.
3 - Introduced susan_initm susan_main and susan_return.
4 - Fix possible division by zero to please tacle-lint.
5 - Removed unused variables.
6 - Added prefix 'susan_'.
7 - Removed exit_on_error function.
8 - Removed PowerPC specific typedef.
9
102017-08-18:
11 - Give explicit name to former anonymous struct to silence g++ warnings.
diff --git a/baseline/source/susan/LICENSE b/baseline/source/susan/LICENSE
new file mode 100644
index 0000000..18d5124
--- /dev/null
+++ b/baseline/source/susan/LICENSE
@@ -0,0 +1,14 @@
1This code is issued for research purposes only and remains the
2property of the UK Secretary of State for Defence. This code must
3not be passed on without this header information being kept
4intact. This code must not be sold.
5
6A UK patent has been granted: "Method for digitally processing
7images to determine the position of edges and/or corners therein for
8guidance of unmanned vehicle", UK Patent 2272285. Proprietor:
9Secretary of State for Defence, UK. 15 January 1997
10
11
12Source Code obtained from:
13
14http://www.fmrib.ox.ac.uk/~steve/susan/index.html
diff --git a/baseline/source/susan/input.c b/baseline/source/susan/input.c
new file mode 100644
index 0000000..4e6ba40
--- /dev/null
+++ b/baseline/source/susan/input.c
@@ -0,0 +1,7292 @@
1char susan_input[7292] = { 80,
253,
310,
435,
532,
667,
782,
869,
965,
1084,
1179,
1282,
1358,
1432,
1588,
1686,
1732,
1886,
19101,
20114,
21115,
22105,
23111,
24110,
2532,
2651,
2746,
2849,
2948,
3097,
3132,
3232,
3382,
34101,
35118,
3658,
3732,
3849,
3950,
4047,
4150,
4257,
4347,
4457,
4552,
4632,
4740,
4880,
4978,
5071,
5132,
52112,
5397,
54116,
5599,
56104,
5732,
5849,
5946,
6050,
6141,
6210,
6355,
6454,
6532,
6657,
6753,
6810,
6950,
7053,
7153,
7210,
7335,
7436,
7536,
7636,
7736,
7838,
7938,
8036,
8137,
8237,
8337,
8438,
8538,
8636,
8734,
8838,
8940,
9041,
9142,
9240,
9338,
9436,
9536,
9635,
9736,
9835,
9932,
10035,
10138,
10242,
10342,
10438,
10536,
10636,
10736,
10837,
10936,
11035,
11133,
11233,
11333,
11432,
11531,
11633,
11736,
11839,
11940,
12036,
12136,
12234,
12334,
12436,
12538,
12639,
12737,
12836,
12936,
13035,
13136,
13239,
13339,
13437,
13537,
13639,
13737,
13838,
13939,
14040,
14138,
14237,
14337,
14433,
14533,
14632,
14733,
14834,
14935,
15035,
15136,
15236,
15336,
15437,
15538,
15637,
15738,
15838,
15939,
16041,
16141,
16240,
16340,
16443,
16542,
16641,
16740,
16839,
16938,
17035,
17133,
17235,
17335,
17437,
17539,
17638,
17737,
17836,
17938,
18036,
18136,
18234,
18334,
18438,
18539,
18639,
18737,
18836,
18936,
19034,
19133,
19234,
19333,
19435,
19533,
19636,
19735,
19835,
19936,
20036,
20137,
20233,
20332,
20436,
20538,
20638,
20738,
20839,
20939,
21038,
21139,
21237,
21335,
21436,
21534,
21635,
21736,
21837,
21939,
22038,
22137,
22234,
22331,
22434,
22535,
22635,
22735,
22835,
22936,
23038,
23139,
23239,
23337,
23438,
23538,
23640,
23739,
23840,
23941,
24043,
24144,
24242,
24340,
24439,
24538,
24642,
24742,
24839,
24939,
25036,
25133,
25233,
25334,
25436,
25536,
25635,
25733,
25833,
25935,
26037,
26136,
26234,
26334,
26431,
26530,
26632,
26736,
26842,
26943,
27043,
27140,
27236,
27336,
27436,
27535,
27634,
27735,
27833,
27933,
28030,
28132,
28234,
28335,
28435,
28535,
28636,
28735,
28837,
28934,
29034,
29135,
29236,
29337,
29437,
29535,
29636,
29737,
29839,
29939,
30038,
30135,
30235,
30335,
30435,
30535,
30636,
30738,
30837,
30938,
31038,
31136,
31235,
31335,
31436,
31535,
31635,
31735,
31835,
31934,
32034,
32136,
32236,
32338,
32440,
32538,
32637,
32736,
32834,
32934,
33035,
33135,
33236,
33337,
33437,
33538,
33638,
33739,
33839,
33936,
34035,
34136,
34235,
34337,
34436,
34538,
34639,
34737,
34838,
34934,
35033,
35132,
35233,
35332,
35428,
35534,
35640,
35745,
35844,
35940,
36038,
36134,
36230,
36330,
36433,
36540,
36645,
36743,
36841,
36937,
37037,
37137,
37236,
37333,
37431,
37532,
37631,
37735,
37835,
37935,
38035,
38135,
38238,
38339,
38439,
38540,
38639,
38737,
38837,
38937,
39035,
39135,
39237,
39337,
39436,
39537,
39637,
39737,
39838,
39937,
40038,
40137,
40237,
40335,
40435,
40534,
40635,
40735,
40835,
40936,
41039,
41145,
41243,
41338,
41439,
41538,
41636,
41736,
41836,
41935,
42037,
42139,
42238,
42337,
42437,
42537,
42639,
42738,
42837,
42937,
43035,
43134,
43234,
43337,
43439,
43536,
43637,
43738,
43839,
43940,
44041,
44139,
44236,
44338,
44439,
44539,
44639,
44736,
44833,
44932,
45030,
45130,
45231,
45335,
45435,
45535,
45635,
45735,
45839,
45940,
46038,
46137,
46240,
46339,
46438,
46539,
46639,
46739,
46838,
46939,
47039,
47140,
47240,
47339,
47441,
47539,
47641,
47739,
47838,
47939,
48038,
48138,
48236,
48335,
48436,
48535,
48637,
48738,
48838,
48938,
49040,
49138,
49239,
49339,
49436,
49536,
49633,
49734,
49836,
49935,
50037,
50138,
50239,
50339,
50438,
50536,
50632,
50732,
50835,
50938,
51038,
51139,
51238,
51335,
51435,
51534,
51637,
51739,
51838,
51936,
52035,
52135,
52233,
52331,
52430,
52532,
52636,
52737,
52838,
52935,
53035,
53135,
53235,
53335,
53439,
53541,
53642,
53738,
53833,
53931,
54033,
54137,
54236,
54337,
54438,
54537,
54637,
54738,
54839,
54938,
55038,
55138,
55238,
55337,
55438,
55538,
55639,
55741,
55841,
55937,
56039,
56140,
56242,
56344,
56443,
56539,
56642,
56748,
56845,
56941,
57039,
57138,
57238,
57338,
57438,
57536,
57637,
57738,
57839,
57939,
58039,
58143,
58241,
58338,
58437,
58537,
58638,
58736,
58834,
58934,
59034,
59138,
59241,
59341,
59438,
59535,
59635,
59734,
59835,
59932,
60030,
60131,
60233,
60334,
60435,
60535,
60635,
60735,
60835,
60935,
61039,
61136,
61235,
61338,
61441,
61538,
61632,
61734,
61838,
61934,
62038,
62140,
62239,
62339,
62436,
62536,
62639,
62738,
62839,
62937,
63038,
63138,
63236,
63336,
63435,
63537,
63638,
63739,
63838,
63936,
64038,
64137,
64235,
64331,
64435,
64537,
64640,
64739,
64835,
64935,
65036,
65134,
65236,
65336,
65438,
65537,
65638,
65737,
65837,
65936,
66037,
66138,
66237,
66336,
66435,
66534,
66634,
66734,
66837,
66936,
67037,
67136,
67234,
67336,
67436,
67534,
67631,
67730,
67833,
67932,
68033,
68135,
68235,
68335,
68435,
68534,
68627,
68733,
68839,
68942,
69041,
69142,
69244,
69345,
69442,
69539,
69641,
69741,
69842,
69943,
70042,
70141,
70240,
70338,
70437,
70535,
70637,
70736,
70836,
70936,
71037,
71136,
71236,
71337,
71437,
71539,
71643,
71743,
71843,
71942,
72039,
72139,
72239,
72339,
72440,
72539,
72638,
72735,
72834,
72936,
73037,
73136,
73237,
73338,
73438,
73537,
73636,
73735,
73835,
73933,
74035,
74138,
74238,
74339,
74441,
74539,
74638,
74737,
74838,
74938,
75036,
75137,
75236,
75337,
75437,
75536,
75636,
75735,
75835,
75935,
76035,
76136,
76242,
76340,
76441,
76543,
76642,
76739,
76837,
76937,
77037,
77137,
77239,
77339,
77438,
77537,
77635,
77737,
77836,
77935,
78036,
78136,
78239,
78339,
78436,
78536,
78634,
78737,
78840,
78940,
79040,
79139,
79241,
79340,
79439,
79539,
79639,
79740,
79838,
79936,
80034,
80135,
80237,
80334,
80436,
80535,
80635,
80734,
80833,
80936,
81036,
81138,
81239,
81338,
81437,
81534,
81634,
81733,
81834,
81935,
82036,
82136,
82235,
82336,
82435,
82538,
82639,
82739,
82840,
82938,
83037,
83136,
83236,
83335,
83435,
83535,
83635,
83736,
83836,
83942,
84045,
84144,
84243,
84340,
84438,
84537,
84636,
84737,
84837,
84938,
85038,
85138,
85238,
85336,
85435,
85535,
85634,
85734,
85836,
85938,
86036,
86135,
86238,
86337,
86437,
86538,
86638,
86737,
86838,
86936,
87033,
87135,
87237,
87337,
87438,
87538,
87641,
87741,
87841,
87938,
88035,
88133,
88230,
88329,
88432,
88537,
88639,
88739,
88838,
88939,
89038,
89135,
89234,
89335,
89435,
89535,
89635,
89734,
89835,
89936,
90036,
90137,
90238,
90338,
90438,
90536,
90635,
90733,
90834,
90935,
91035,
91135,
91235,
91336,
91436,
91532,
91633,
91736,
91838,
91940,
92042,
92142,
92239,
92340,
92441,
92543,
92642,
92736,
92833,
92932,
93033,
93132,
93235,
93337,
93441,
93541,
93639,
93740,
93837,
93936,
94038,
94139,
94241,
94340,
94440,
94541,
94639,
94737,
94837,
94936,
95037,
95137,
95236,
95335,
95437,
95537,
95639,
95741,
95841,
95943,
96041,
96140,
96240,
96337,
96437,
96538,
96638,
96738,
96838,
96938,
97036,
97138,
97237,
97336,
97439,
97541,
97641,
97742,
97841,
97939,
98038,
98138,
98236,
98337,
98437,
98535,
98635,
98735,
98836,
98936,
99033,
99135,
99237,
99334,
99435,
99535,
99635,
99739,
99838,
99939,
100041,
100143,
100243,
100343,
100442,
100539,
100638,
100739,
100837,
100937,
101038,
101137,
101236,
101338,
101438,
101540,
101638,
101739,
101839,
101936,
102035,
102134,
102233,
102334,
102436,
102537,
102638,
102737,
102837,
102937,
103036,
103134,
103234,
103333,
103434,
103535,
103638,
103741,
103838,
103936,
104037,
104137,
104237,
104337,
104439,
104541,
104640,
104741,
104842,
104941,
105040,
105141,
105241,
105339,
105440,
105540,
105639,
105737,
105837,
105936,
106038,
106135,
106235,
106335,
106436,
106537,
106645,
106742,
106840,
106944,
107045,
107142,
107243,
107342,
107442,
107545,
107647,
107749,
107851,
107950,
108051,
108150,
108249,
108345,
108445,
108545,
108643,
108742,
108842,
108943,
109041,
109139,
109240,
109340,
109440,
109539,
109638,
109740,
109840,
109939,
110039,
110139,
110238,
110335,
110433,
110537,
110641,
110742,
110839,
110937,
111037,
111137,
111238,
111338,
111436,
111537,
111635,
111733,
111832,
111933,
112034,
112135,
112235,
112338,
112439,
112537,
112638,
112736,
112835,
112937,
113038,
113139,
113242,
113341,
113438,
113536,
113634,
113735,
113835,
113935,
114035,
114136,
114239,
114338,
114436,
114537,
114637,
114737,
114836,
114940,
115042,
115143,
115247,
115349,
115448,
115547,
115644,
115743,
115847,
115952,
116055,
116152,
116247,
116344,
116442,
116542,
116642,
116740,
116840,
116939,
117038,
117137,
117237,
117339,
117438,
117538,
117638,
117736,
117833,
117931,
118034,
118135,
118238,
118339,
118438,
118537,
118638,
118738,
118837,
118938,
119037,
119142,
119246,
119345,
119442,
119539,
119639,
119738,
119834,
119936,
120039,
120139,
120237,
120335,
120436,
120534,
120637,
120737,
120836,
120936,
121039,
121141,
121242,
121335,
121435,
121535,
121635,
121736,
121840,
121940,
122038,
122139,
122239,
122336,
122436,
122538,
122639,
122742,
122846,
122949,
123050,
123152,
123252,
123351,
123451,
123552,
123654,
123751,
123850,
123951,
124052,
124151,
124247,
124347,
124446,
124547,
124645,
124743,
124843,
124943,
125043,
125143,
125242,
125341,
125441,
125540,
125640,
125742,
125846,
125944,
126041,
126137,
126236,
126337,
126439,
126539,
126638,
126738,
126839,
126938,
127038,
127139,
127237,
127335,
127435,
127538,
127638,
127738,
127836,
127935,
128035,
128137,
128235,
128336,
128438,
128536,
128638,
128738,
128839,
128935,
129035,
129135,
129236,
129336,
129439,
129539,
129640,
129740,
129839,
129937,
130038,
130141,
130239,
130343,
130446,
130547,
130649,
130749,
130849,
130948,
131048,
131151,
131252,
131352,
131453,
131553,
131652,
131751,
131852,
131950,
132048,
132149,
132248,
132346,
132447,
132547,
132644,
132742,
132843,
132944,
133043,
133145,
133248,
133346,
133445,
133544,
133642,
133743,
133846,
133945,
134044,
134142,
134241,
134338,
134439,
134538,
134637,
134736,
134835,
134937,
135035,
135137,
135236,
135333,
135431,
135532,
135638,
135743,
135842,
135941,
136039,
136137,
136238,
136337,
136437,
136535,
136635,
136736,
136836,
136936,
137038,
137138,
137236,
137337,
137439,
137538,
137639,
137738,
137839,
137942,
138047,
138149,
138246,
138346,
138447,
138547,
138646,
138747,
138849,
138948,
139048,
139149,
139251,
139350,
139449,
139550,
139651,
139748,
139846,
139946,
140047,
140148,
140247,
140345,
140443,
140542,
140644,
140745,
140847,
140949,
141051,
141151,
141251,
141349,
141447,
141548,
141647,
141749,
141846,
141944,
142040,
142139,
142240,
142340,
142439,
142538,
142640,
142738,
142839,
142940,
143039,
143137,
143236,
143335,
143433,
143535,
143634,
143732,
143833,
143934,
144038,
144135,
144236,
144336,
144436,
144536,
144635,
144736,
144838,
144936,
145037,
145137,
145237,
145338,
145438,
145539,
145643,
145746,
145851,
145952,
146050,
146150,
146248,
146350,
146449,
146549,
146650,
146748,
146850,
146950,
147049,
147149,
147251,
147354,
147454,
147551,
147651,
147749,
147847,
147948,
148052,
148153,
148251,
148349,
148446,
148546,
148643,
148746,
148845,
148947,
149050,
149149,
149247,
149347,
149446,
149545,
149648,
149748,
149845,
149943,
150044,
150143,
150243,
150342,
150441,
150539,
150639,
150739,
150837,
150937,
151034,
151134,
151232,
151333,
151435,
151536,
151639,
151735,
151836,
151936,
152036,
152136,
152240,
152339,
152436,
152536,
152635,
152734,
152833,
152932,
153037,
153143,
153251,
153356,
153454,
153555,
153656,
153755,
153852,
153950,
154049,
154146,
154246,
154345,
154447,
154549,
154651,
154754,
154854,
154951,
155049,
155150,
155250,
155348,
155447,
155545,
155646,
155747,
155850,
155950,
156048,
156143,
156242,
156342,
156443,
156545,
156647,
156747,
156848,
156950,
157049,
157147,
157247,
157348,
157449,
157547,
157648,
157748,
157847,
157947,
158045,
158144,
158242,
158339,
158438,
158538,
158638,
158742,
158841,
158941,
159039,
159136,
159235,
159335,
159435,
159536,
159636,
159736,
159834,
159937,
160037,
160135,
160236,
160336,
160435,
160536,
160637,
160738,
160841,
160950,
161067,
161182,
161284,
161380,
161480,
161576,
161675,
161774,
161871,
161964,
162061,
162158,
162254,
162353,
162454,
162556,
162656,
162753,
162851,
162951,
163049,
163147,
163249,
163349,
163448,
163548,
163647,
163747,
163848,
163948,
164047,
164145,
164246,
164347,
164446,
164546,
164645,
164741,
164842,
164944,
165044,
165145,
165245,
165348,
165447,
165544,
165642,
165737,
165835,
165934,
166032,
166133,
166237,
166340,
166437,
166537,
166636,
166736,
166837,
166935,
167035,
167136,
167236,
167336,
167437,
167535,
167637,
167737,
167837,
167935,
168035,
168135,
168237,
168340,
168441,
168546,
168658,
168785,
1688119,
1689-119,
1690-123,
1691123,
1692115,
1693109,
1694110,
1695109,
1696107,
1697102,
169895,
169993,
170088,
170186,
170286,
170386,
170486,
170583,
170677,
170768,
170864,
170959,
171058,
171161,
171261,
171361,
171458,
171556,
171651,
171749,
171851,
171951,
172050,
172150,
172245,
172337,
172441,
172547,
172650,
172750,
172853,
172952,
173049,
173148,
173245,
173343,
173442,
173539,
173638,
173736,
173838,
173939,
174039,
174139,
174238,
174337,
174436,
174535,
174635,
174735,
174836,
174936,
175034,
175136,
175236,
175338,
175439,
175538,
175637,
175739,
175841,
175943,
176047,
176156,
176279,
1763121,
1764-106,
1765-110,
1766-108,
1767-99,
1768-102,
1769-100,
1770-99,
1771-101,
1772-103,
1773-102,
1774-106,
1775-108,
1776-110,
1777-111,
1778-111,
1779-115,
1780-117,
1781-120,
1782-123,
1783-123,
1784-125,
1785-128,
1786127,
1787124,
1788118,
1789114,
1790119,
1791113,
1792104,
179399,
1794100,
1795100,
179697,
179789,
179883,
179979,
180076,
180173,
180269,
180360,
180452,
180548,
180647,
180745,
180846,
180940,
181037,
181138,
181238,
181342,
181445,
181543,
181642,
181742,
181839,
181938,
182039,
182135,
182235,
182336,
182436,
182536,
182637,
182737,
182840,
182942,
183042,
183140,
183239,
183338,
183440,
183543,
183649,
183760,
183883,
1839126,
1840-105,
1841-98,
1842-93,
1843-97,
1844-94,
1845-93,
1846-90,
1847-88,
1848-91,
1849-94,
1850-91,
1851-90,
1852-93,
1853-94,
1854-94,
1855-96,
1856-94,
1857-94,
1858-96,
1859-95,
1860-93,
1861-96,
1862-100,
1863-104,
1864-104,
1865-105,
1866-108,
1867-110,
1868-115,
1869-119,
1870-120,
1871-122,
1872-125,
1873127,
1874122,
1875118,
1876115,
1877118,
1878113,
187997,
188078,
188159,
188245,
188348,
188446,
188540,
188638,
188738,
188837,
188938,
189038,
189135,
189237,
189337,
189434,
189532,
189632,
189735,
189836,
189936,
190036,
190136,
190238,
190339,
190438,
190537,
190638,
190735,
190834,
190936,
191035,
191137,
191241,
191351,
191477,
1915120,
1916-100,
1917-91,
1918-96,
1919-95,
1920-93,
1921-92,
1922-89,
1923-90,
1924-92,
1925-92,
1926-93,
1927-93,
1928-91,
1929-90,
1930-91,
1931-94,
1932-94,
1933-94,
1934-93,
1935-92,
1936-93,
1937-95,
1938-95,
1939-93,
1940-94,
1941-94,
1942-91,
1943-92,
1944-94,
1945-93,
1946-91,
1947-92,
1948-91,
1949-92,
1950-96,
1951-97,
1952-99,
1953-105,
1954-112,
1955126,
195695,
195763,
195843,
195947,
196042,
196138,
196238,
196336,
196436,
196536,
196638,
196737,
196837,
196937,
197036,
197137,
197238,
197335,
197436,
197536,
197636,
197736,
197839,
197939,
198039,
198141,
198238,
198333,
198435,
198537,
198639,
198745,
198851,
198958,
199080,
1991121,
1992-104,
1993-94,
1994-93,
1995-92,
1996-94,
1997-94,
1998-91,
1999-89,
2000-89,
2001-88,
2002-86,
2003-86,
2004-88,
2005-87,
2006-88,
2007-90,
2008-90,
2009-91,
2010-91,
2011-89,
2012-87,
2013-90,
2014-92,
2015-92,
2016-90,
2017-91,
2018-91,
2019-89,
2020-89,
2021-90,
2022-92,
2023-93,
2024-91,
2025-90,
2026-91,
2027-90,
2028-91,
2029-91,
2030-100,
2031-128,
203288,
203354,
203444,
203547,
203648,
203746,
203843,
203941,
204036,
204137,
204240,
204338,
204440,
204538,
204638,
204737,
204839,
204935,
205036,
205136,
205236,
205336,
205438,
205541,
205639,
205737,
205835,
205932,
206034,
206136,
206238,
206342,
206447,
206557,
206682,
2067118,
2068-105,
2069-88,
2070-86,
2071-84,
2072-88,
2073-91,
2074-91,
2075-91,
2076-92,
2077-91,
2078-89,
2079-90,
2080-89,
2081-87,
2082-88,
2083-88,
2084-89,
2085-89,
2086-91,
2087-91,
2088-91,
2089-92,
2090-93,
2091-92,
2092-93,
2093-97,
2094-93,
2095-93,
2096-93,
2097-92,
2098-92,
2099-94,
2100-94,
2101-92,
2102-94,
2103-94,
2104-91,
2105-91,
2106-98,
2107-122,
210896,
210963,
211053,
211149,
211244,
211342,
211442,
211541,
211638,
211736,
211837,
211936,
212037,
212138,
212239,
212338,
212440,
212535,
212636,
212736,
212836,
212936,
213034,
213136,
213235,
213337,
213439,
213540,
213643,
213741,
213841,
213944,
214048,
214156,
214283,
2143-127,
2144-99,
2145-89,
2146-88,
2147-87,
2148-88,
2149-89,
2150-87,
2151-89,
2152-90,
2153-90,
2154-89,
2155-91,
2156-91,
2157-89,
2158-87,
2159-88,
2160-87,
2161-89,
2162-88,
2163-89,
2164-88,
2165-90,
2166-89,
2167-87,
2168-88,
2169-92,
2170-91,
2171-88,
2172-89,
2173-88,
2174-87,
2175-89,
2176-91,
2177-93,
2178-95,
2179-97,
2180-94,
2181-93,
2182-99,
2183-125,
218491,
218559,
218645,
218745,
218847,
218943,
219042,
219139,
219236,
219336,
219436,
219540,
219638,
219739,
219839,
219937,
220036,
220136,
220236,
220336,
220436,
220536,
220634,
220737,
220838,
220939,
221040,
221143,
221243,
221343,
221443,
221540,
221643,
221756,
221887,
2219-127,
2220-100,
2221-94,
2222-95,
2223-91,
2224-88,
2225-90,
2226-89,
2227-90,
2228-92,
2229-88,
2230-88,
2231-90,
2232-88,
2233-90,
2234-90,
2235-89,
2236-89,
2237-91,
2238-91,
2239-92,
2240-92,
2241-91,
2242-90,
2243-89,
2244-89,
2245-92,
2246-90,
2247-90,
2248-92,
2249-91,
2250-89,
2251-90,
2252-91,
2253-91,
2254-95,
2255-94,
2256-92,
2257-93,
2258-99,
2259-124,
226092,
226161,
226248,
226347,
226449,
226545,
226644,
226741,
226838,
226937,
227037,
227138,
227234,
227335,
227435,
227535,
227635,
227736,
227836,
227936,
228036,
228136,
228240,
228339,
228436,
228534,
228635,
228735,
228837,
228937,
229040,
229149,
229256,
229362,
229489,
2295-124,
2296-99,
2297-93,
2298-88,
2299-88,
2300-92,
2301-90,
2302-87,
2303-88,
2304-89,
2305-87,
2306-88,
2307-89,
2308-88,
2309-87,
2310-88,
2311-89,
2312-89,
2313-87,
2314-88,
2315-88,
2316-87,
2317-89,
2318-92,
2319-91,
2320-92,
2321-92,
2322-91,
2323-91,
2324-90,
2325-89,
2326-89,
2327-89,
2328-90,
2329-92,
2330-93,
2331-91,
2332-87,
2333-86,
2334-96,
2335-127,
233690,
233760,
233845,
233944,
234043,
234136,
234236,
234337,
234439,
234538,
234640,
234740,
234837,
234936,
235036,
235133,
235235,
235336,
235436,
235536,
235636,
235736,
235834,
235934,
236034,
236133,
236234,
236334,
236435,
236537,
236640,
236742,
236841,
236950,
237080,
2371-127,
2372-96,
2373-92,
2374-89,
2375-85,
2376-88,
2377-91,
2378-88,
2379-88,
2380-89,
2381-87,
2382-90,
2383-90,
2384-89,
2385-89,
2386-90,
2387-91,
2388-90,
2389-89,
2390-87,
2391-86,
2392-87,
2393-89,
2394-90,
2395-91,
2396-93,
2397-93,
2398-93,
2399-91,
2400-91,
2401-90,
2402-90,
2403-91,
2404-92,
2405-91,
2406-92,
2407-89,
2408-87,
2409-88,
2410-96,
2411-123,
241296,
241365,
241448,
241547,
241645,
241738,
241837,
241937,
242037,
242137,
242239,
242339,
242437,
242538,
242636,
242735,
242835,
242936,
243036,
243136,
243236,
243336,
243440,
243541,
243640,
243741,
243842,
243942,
244041,
244139,
244239,
244345,
244453,
244566,
2446100,
2447-111,
2448-86,
2449-86,
2450-87,
2451-80,
2452-86,
2453-92,
2454-88,
2455-86,
2456-87,
2457-84,
2458-83,
2459-86,
2460-86,
2461-85,
2462-85,
2463-86,
2464-84,
2465-84,
2466-88,
2467-90,
2468-87,
2469-88,
2470-88,
2471-88,
2472-88,
2473-90,
2474-89,
2475-89,
2476-89,
2477-89,
2478-89,
2479-88,
2480-87,
2481-88,
2482-90,
2483-87,
2484-88,
2485-90,
2486-98,
2487-127,
248893,
248969,
249050,
249150,
249251,
249343,
249444,
249543,
249641,
249737,
249837,
249940,
250038,
250138,
250237,
250336,
250438,
250536,
250636,
250736,
250836,
250936,
251036,
251138,
251239,
251340,
251439,
251540,
251639,
251742,
251846,
251949,
252052,
252162,
252290,
2523-123,
2524-101,
2525-100,
2526-98,
2527-94,
2528-90,
2529-88,
2530-87,
2531-89,
2532-90,
2533-89,
2534-88,
2535-88,
2536-87,
2537-86,
2538-87,
2539-86,
2540-86,
2541-87,
2542-85,
2543-85,
2544-88,
2545-89,
2546-88,
2547-89,
2548-88,
2549-89,
2550-90,
2551-89,
2552-90,
2553-90,
2554-91,
2555-90,
2556-89,
2557-91,
2558-91,
2559-91,
2560-90,
2561-92,
2562-99,
2563-126,
256493,
256561,
256645,
256749,
256848,
256943,
257041,
257138,
257237,
257336,
257438,
257538,
257637,
257736,
257835,
257935,
258039,
258136,
258236,
258336,
258436,
258537,
258641,
258742,
258840,
258941,
259041,
259138,
259240,
259342,
259442,
259545,
259650,
259761,
259891,
2599-121,
2600-94,
2601-93,
2602-96,
2603-94,
2604-94,
2605-93,
2606-91,
2607-91,
2608-93,
2609-90,
2610-88,
2611-92,
2612-90,
2613-87,
2614-87,
2615-89,
2616-88,
2617-87,
2618-89,
2619-89,
2620-90,
2621-93,
2622-96,
2623-94,
2624-91,
2625-89,
2626-88,
2627-88,
2628-90,
2629-90,
2630-89,
2631-91,
2632-92,
2633-93,
2634-91,
2635-91,
2636-92,
2637-91,
2638-101,
2639122,
264084,
264160,
264248,
264352,
264446,
264534,
264636,
264736,
264837,
264934,
265034,
265137,
265234,
265332,
265433,
265534,
265637,
265736,
265836,
265936,
266037,
266137,
266236,
266339,
266439,
266541,
266640,
266741,
266840,
266939,
267042,
267144,
267249,
267362,
267492,
2675-124,
2676-96,
2677-84,
2678-81,
2679-86,
2680-87,
2681-89,
2682-90,
2683-91,
2684-92,
2685-90,
2686-88,
2687-89,
2688-91,
2689-90,
2690-89,
2691-89,
2692-89,
2693-90,
2694-89,
2695-86,
2696-88,
2697-89,
2698-89,
2699-90,
2700-88,
2701-90,
2702-91,
2703-91,
2704-92,
2705-92,
2706-92,
2707-91,
2708-91,
2709-93,
2710-95,
2711-94,
2712-93,
2713-93,
2714-101,
2715125,
271686,
271761,
271847,
271947,
272049,
272145,
272244,
272344,
272443,
272544,
272645,
272744,
272842,
272941,
273038,
273135,
273238,
273337,
273437,
273537,
273637,
273737,
273839,
273940,
274040,
274142,
274244,
274342,
274443,
274547,
274645,
274744,
274850,
274966,
275099,
2751-111,
2752-93,
2753-97,
2754-96,
2755-92,
2756-89,
2757-89,
2758-89,
2759-87,
2760-88,
2761-86,
2762-87,
2763-90,
2764-88,
2765-88,
2766-88,
2767-87,
2768-87,
2769-88,
2770-91,
2771-93,
2772-91,
2773-92,
2774-89,
2775-86,
2776-84,
2777-83,
2778-83,
2779-87,
2780-90,
2781-91,
2782-90,
2783-91,
2784-92,
2785-93,
2786-94,
2787-97,
2788-96,
2789-97,
2790-107,
2791119,
279279,
279353,
279439,
279539,
279638,
279737,
279840,
279938,
280038,
280137,
280238,
280340,
280441,
280539,
280638,
280736,
280836,
280937,
281037,
281137,
281237,
281337,
281440,
281539,
281640,
281740,
281840,
281940,
282038,
282139,
282243,
282344,
282448,
282559,
282695,
2827-121,
2828-103,
2829-96,
2830-95,
2831-97,
2832-94,
2833-92,
2834-90,
2835-90,
2836-90,
2837-88,
2838-85,
2839-88,
2840-89,
2841-88,
2842-89,
2843-91,
2844-92,
2845-92,
2846-91,
2847-90,
2848-88,
2849-88,
2850-88,
2851-90,
2852-91,
2853-92,
2854-91,
2855-89,
2856-93,
2857-93,
2858-92,
2859-92,
2860-91,
2861-93,
2862-94,
2863-94,
2864-94,
2865-93,
2866-105,
2867118,
286879,
286952,
287038,
287136,
287240,
287341,
287441,
287542,
287639,
287738,
287840,
287940,
288039,
288139,
288239,
288337,
288438,
288537,
288637,
288737,
288837,
288937,
289041,
289142,
289240,
289341,
289443,
289543,
289645,
289743,
289842,
289943,
290047,
290162,
290295,
2903-120,
2904-93,
2905-92,
2906-96,
2907-92,
2908-94,
2909-92,
2910-91,
2911-88,
2912-88,
2913-89,
2914-90,
2915-91,
2916-88,
2917-88,
2918-89,
2919-88,
2920-91,
2921-93,
2922-92,
2923-91,
2924-90,
2925-89,
2926-90,
2927-89,
2928-91,
2929-90,
2930-90,
2931-94,
2932-95,
2933-95,
2934-94,
2935-91,
2936-87,
2937-83,
2938-87,
2939-88,
2940-89,
2941-94,
2942-106,
2943117,
294479,
294560,
294651,
294745,
294840,
294937,
295038,
295138,
295236,
295334,
295433,
295534,
295634,
295733,
295835,
295937,
296036,
296137,
296237,
296337,
296437,
296537,
296636,
296740,
296838,
296939,
297040,
297141,
297238,
297340,
297443,
297548,
297652,
297762,
297896,
2979-120,
2980-103,
2981-99,
2982-94,
2983-95,
2984-93,
2985-92,
2986-90,
2987-89,
2988-90,
2989-91,
2990-90,
2991-92,
2992-95,
2993-95,
2994-94,
2995-94,
2996-92,
2997-92,
2998-93,
2999-93,
3000-92,
3001-91,
3002-90,
3003-92,
3004-94,
3005-93,
3006-92,
3007-89,
3008-91,
3009-89,
3010-87,
3011-88,
3012-91,
3013-97,
3014-98,
3015-95,
3016-94,
3017-94,
3018-104,
3019123,
302086,
302161,
302248,
302346,
302447,
302540,
302638,
302737,
302834,
302936,
303035,
303139,
303241,
303340,
303439,
303537,
303637,
303737,
303837,
303937,
304037,
304137,
304239,
304339,
304440,
304539,
304640,
304742,
304841,
304940,
305043,
305142,
305243,
305352,
305485,
3055125,
3056-106,
3057-92,
3058-98,
3059-96,
3060-84,
3061-82,
3062-87,
3063-86,
3064-85,
3065-86,
3066-86,
3067-90,
3068-88,
3069-88,
3070-87,
3071-87,
3072-92,
3073-93,
3074-93,
3075-93,
3076-90,
3077-91,
3078-92,
3079-89,
3080-89,
3081-89,
3082-89,
3083-91,
3084-91,
3085-93,
3086-93,
3087-94,
3088-93,
3089-92,
3090-94,
3091-94,
3092-91,
3093-92,
3094-100,
3095123,
309679,
309757,
309847,
309945,
310047,
310140,
310237,
310336,
310435,
310538,
310637,
310739,
310840,
310938,
311039,
311136,
311235,
311337,
311437,
311537,
311637,
311737,
311841,
311938,
312033,
312131,
312237,
312344,
312444,
312544,
312646,
312748,
312852,
312964,
313096,
3131-117,
3132-98,
3133-103,
3134-99,
3135-97,
3136-96,
3137-97,
3138-97,
3139-94,
3140-89,
3141-85,
3142-90,
3143-91,
3144-89,
3145-89,
3146-89,
3147-88,
3148-87,
3149-86,
3150-90,
3151-92,
3152-91,
3153-93,
3154-91,
3155-92,
3156-92,
3157-91,
3158-93,
3159-92,
3160-92,
3161-92,
3162-91,
3163-94,
3164-94,
3165-94,
3166-95,
3167-93,
3168-98,
3169-102,
3170-110,
3171117,
317283,
317355,
317440,
317546,
317648,
317744,
317842,
317939,
318040,
318137,
318239,
318340,
318438,
318538,
318638,
318739,
318842,
318937,
319037,
319137,
319237,
319338,
319439,
319540,
319641,
319741,
319841,
319941,
320040,
320142,
320246,
320347,
320452,
320565,
3206102,
3207-114,
3208-102,
3209-97,
3210-100,
3211-95,
3212-83,
3213-88,
3214-91,
3215-89,
3216-91,
3217-91,
3218-89,
3219-89,
3220-88,
3221-90,
3222-89,
3223-88,
3224-88,
3225-88,
3226-89,
3227-92,
3228-90,
3229-90,
3230-90,
3231-90,
3232-92,
3233-94,
3234-95,
3235-94,
3236-93,
3237-92,
3238-90,
3239-90,
3240-92,
3241-92,
3242-94,
3243-92,
3244-92,
3245-96,
3246-108,
3247116,
324876,
324957,
325050,
325147,
325242,
325338,
325441,
325542,
325641,
325737,
325836,
325937,
326036,
326136,
326237,
326335,
326435,
326537,
326637,
326737,
326837,
326938,
327039,
327140,
327241,
327339,
327441,
327540,
327636,
327734,
327837,
327939,
328042,
328161,
3282100,
3283-113,
3284-90,
3285-97,
3286-96,
3287-90,
3288-87,
3289-88,
3290-90,
3291-91,
3292-93,
3293-89,
3294-91,
3295-91,
3296-90,
3297-90,
3298-91,
3299-91,
3300-89,
3301-87,
3302-90,
3303-91,
3304-89,
3305-90,
3306-89,
3307-90,
3308-90,
3309-92,
3310-92,
3311-92,
3312-91,
3313-91,
3314-89,
3315-90,
3316-92,
3317-90,
3318-92,
3319-93,
3320-93,
3321-96,
3322-107,
3323119,
332481,
332548,
332637,
332740,
332844,
332945,
333041,
333140,
333238,
333336,
333437,
333538,
333637,
333737,
333837,
333936,
334035,
334137,
334237,
334337,
334437,
334539,
334647,
334750,
334845,
334940,
335041,
335140,
335241,
335342,
335444,
335548,
335653,
335764,
335898,
3359-116,
3360-95,
3361-96,
3362-97,
3363-87,
3364-83,
3365-87,
3366-87,
3367-88,
3368-87,
3369-86,
3370-86,
3371-87,
3372-91,
3373-95,
3374-94,
3375-92,
3376-88,
3377-89,
3378-90,
3379-90,
3380-88,
3381-87,
3382-88,
3383-90,
3384-94,
3385-92,
3386-93,
3387-91,
3388-89,
3389-89,
3390-87,
3391-86,
3392-87,
3393-90,
3394-92,
3395-92,
3396-91,
3397-92,
3398-100,
3399125,
340079,
340152,
340251,
340354,
340450,
340547,
340647,
340747,
340846,
340945,
341046,
341144,
341240,
341336,
341434,
341534,
341634,
341737,
341837,
341937,
342037,
342138,
342241,
342342,
342442,
342539,
342639,
342737,
342835,
342939,
343046,
343152,
343253,
343368,
3434101,
3435-119,
3436-101,
3437-101,
3438-101,
3439-93,
3440-90,
3441-89,
3442-88,
3443-88,
3444-88,
3445-85,
3446-89,
3447-90,
3448-89,
3449-91,
3450-93,
3451-92,
3452-90,
3453-90,
3454-90,
3455-91,
3456-91,
3457-90,
3458-91,
3459-93,
3460-91,
3461-92,
3462-92,
3463-89,
3464-90,
3465-91,
3466-92,
3467-95,
3468-95,
3469-94,
3470-95,
3471-95,
3472-96,
3473-97,
3474-110,
3475116,
347681,
347754,
347848,
347952,
348051,
348149,
348245,
348347,
348446,
348543,
348644,
348743,
348838,
348935,
349035,
349134,
349236,
349337,
349437,
349537,
349637,
349739,
349843,
349943,
350041,
350140,
350242,
350341,
350441,
350540,
350640,
350744,
350850,
350968,
3510106,
3511-112,
3512-93,
3513-93,
3514-95,
3515-92,
3516-94,
3517-93,
3518-90,
3519-89,
3520-90,
3521-88,
3522-90,
3523-89,
3524-88,
3525-89,
3526-89,
3527-89,
3528-86,
3529-88,
3530-91,
3531-92,
3532-92,
3533-91,
3534-92,
3535-91,
3536-91,
3537-92,
3538-91,
3539-92,
3540-90,
3541-90,
3542-91,
3543-88,
3544-87,
3545-90,
3546-92,
3547-91,
3548-91,
3549-92,
3550-104,
3551121,
355280,
355354,
355443,
355545,
355646,
355741,
355841,
355940,
356038,
356138,
356238,
356337,
356437,
356537,
356637,
356739,
356840,
356937,
357037,
357137,
357237,
357337,
357439,
357539,
357640,
357738,
357840,
357941,
358040,
358141,
358243,
358346,
358452,
358569,
3586105,
3587-112,
3588-92,
3589-95,
3590-94,
3591-90,
3592-94,
3593-94,
3594-92,
3595-91,
3596-90,
3597-91,
3598-90,
3599-90,
3600-90,
3601-90,
3602-89,
3603-88,
3604-89,
3605-90,
3606-90,
3607-93,
3608-94,
3609-93,
3610-92,
3611-91,
3612-91,
3613-92,
3614-94,
3615-91,
3616-91,
3617-89,
3618-89,
3619-93,
3620-95,
3621-96,
3622-97,
3623-96,
3624-96,
3625-96,
3626-106,
3627121,
362886,
362954,
363047,
363153,
363250,
363348,
363443,
363540,
363639,
363737,
363840,
363940,
364038,
364138,
364236,
364337,
364437,
364537,
364637,
364737,
364837,
364937,
365039,
365138,
365238,
365338,
365438,
365537,
365637,
365739,
365841,
365942,
366045,
366162,
3662104,
3663-112,
3664-93,
3665-87,
3666-91,
3667-92,
3668-92,
3669-91,
3670-89,
3671-91,
3672-89,
3673-90,
3674-88,
3675-86,
3676-88,
3677-90,
3678-91,
3679-91,
3680-90,
3681-91,
3682-91,
3683-91,
3684-90,
3685-89,
3686-90,
3687-89,
3688-90,
3689-93,
3690-91,
3691-92,
3692-92,
3693-91,
3694-92,
3695-91,
3696-91,
3697-94,
3698-94,
3699-92,
3700-93,
3701-92,
3702-103,
3703124,
370492,
370565,
370649,
370747,
370845,
370939,
371040,
371140,
371240,
371337,
371437,
371537,
371637,
371741,
371841,
371938,
372038,
372137,
372237,
372337,
372437,
372538,
372646,
372742,
372842,
372940,
373041,
373141,
373237,
373339,
373443,
373549,
373659,
373778,
3738112,
3739-105,
3740-88,
3741-94,
3742-93,
3743-96,
3744-95,
3745-92,
3746-90,
3747-88,
3748-90,
3749-91,
3750-90,
3751-88,
3752-89,
3753-90,
3754-89,
3755-90,
3756-91,
3757-90,
3758-91,
3759-93,
3760-93,
3761-92,
3762-92,
3763-91,
3764-91,
3765-90,
3766-92,
3767-92,
3768-92,
3769-93,
3770-92,
3771-92,
3772-92,
3773-94,
3774-94,
3775-94,
3776-94,
3777-93,
3778-107,
3779116,
378077,
378148,
378243,
378347,
378443,
378541,
378640,
378739,
378838,
378938,
379042,
379140,
379238,
379337,
379434,
379534,
379634,
379736,
379837,
379937,
380037,
380137,
380241,
380341,
380438,
380538,
380639,
380740,
380839,
380939,
381040,
381140,
381245,
381363,
3814102,
3815-117,
3816-98,
3817-92,
3818-88,
3819-87,
3820-91,
3821-90,
3822-89,
3823-90,
3824-91,
3825-93,
3826-90,
3827-83,
3828-85,
3829-87,
3830-88,
3831-90,
3832-91,
3833-93,
3834-92,
3835-93,
3836-91,
3837-89,
3838-89,
3839-89,
3840-91,
3841-94,
3842-92,
3843-91,
3844-90,
3845-92,
3846-92,
3847-92,
3848-93,
3849-91,
3850-89,
3851-90,
3852-89,
3853-87,
3854-99,
3855126,
385686,
385754,
385843,
385945,
386046,
386142,
386240,
386338,
386436,
386534,
386634,
386736,
386834,
386935,
387034,
387135,
387236,
387336,
387437,
387537,
387637,
387738,
387843,
387940,
388038,
388138,
388240,
388341,
388440,
388541,
388641,
388742,
388850,
388974,
3890113,
3891-113,
3892-98,
3893-95,
3894-88,
3895-88,
3896-90,
3897-91,
3898-90,
3899-90,
3900-92,
3901-91,
3902-88,
3903-86,
3904-87,
3905-86,
3906-86,
3907-89,
3908-91,
3909-92,
3910-92,
3911-91,
3912-88,
3913-90,
3914-93,
3915-95,
3916-97,
3917-97,
3918-95,
3919-94,
3920-93,
3921-92,
3922-92,
3923-92,
3924-93,
3925-94,
3926-94,
3927-96,
3928-95,
3929-96,
3930-111,
3931111,
393273,
393342,
393439,
393550,
393645,
393741,
393840,
393938,
394038,
394139,
394241,
394338,
394435,
394535,
394633,
394730,
394828,
394936,
395037,
395137,
395237,
395337,
395437,
395540,
395638,
395740,
395841,
395941,
396043,
396142,
396240,
396342,
396449,
396574,
3966119,
3967-100,
3968-88,
3969-94,
3970-93,
3971-90,
3972-94,
3973-94,
3974-91,
3975-89,
3976-89,
3977-90,
3978-89,
3979-88,
3980-93,
3981-94,
3982-91,
3983-89,
3984-87,
3985-90,
3986-96,
3987-98,
3988-96,
3989-94,
3990-94,
3991-92,
3992-92,
3993-92,
3994-89,
3995-88,
3996-89,
3997-91,
3998-90,
3999-89,
4000-88,
4001-86,
4002-87,
4003-90,
4004-93,
4005-95,
4006-110,
4007113,
400879,
400959,
401052,
401143,
401238,
401338,
401438,
401541,
401641,
401739,
401841,
401942,
402041,
402140,
402240,
402340,
402439,
402537,
402637,
402737,
402837,
402937,
403039,
403138,
403240,
403340,
403442,
403540,
403641,
403743,
403847,
403950,
404053,
404174,
4042112,
4043-114,
4044-99,
4045-95,
4046-92,
4047-94,
4048-95,
4049-95,
4050-92,
4051-90,
4052-91,
4053-88,
4054-85,
4055-89,
4056-88,
4057-87,
4058-88,
4059-89,
4060-89,
4061-91,
4062-91,
4063-90,
4064-88,
4065-91,
4066-94,
4067-93,
4068-93,
4069-93,
4070-94,
4071-93,
4072-91,
4073-90,
4074-90,
4075-92,
4076-93,
4077-94,
4078-92,
4079-94,
4080-94,
4081-95,
4082-110,
4083113,
408478,
408552,
408646,
408749,
408845,
408943,
409042,
409143,
409241,
409339,
409441,
409540,
409638,
409738,
409835,
409937,
410039,
410137,
410237,
410337,
410437,
410537,
410635,
410738,
410838,
410941,
411042,
411139,
411242,
411343,
411444,
411546,
411655,
411780,
4118119,
4119-108,
4120-99,
4121-95,
4122-91,
4123-90,
4124-95,
4125-95,
4126-92,
4127-90,
4128-94,
4129-94,
4130-89,
4131-88,
4132-92,
4133-91,
4134-91,
4135-93,
4136-93,
4137-93,
4138-93,
4139-91,
4140-89,
4141-90,
4142-93,
4143-91,
4144-89,
4145-88,
4146-89,
4147-88,
4148-89,
4149-92,
4150-93,
4151-93,
4152-93,
4153-92,
4154-92,
4155-95,
4156-95,
4157-97,
4158-113,
4159108,
416067,
416148,
416246,
416341,
416441,
416542,
416639,
416739,
416837,
416936,
417038,
417138,
417236,
417337,
417439,
417538,
417639,
417737,
417837,
417937,
418037,
418136,
418232,
418334,
418436,
418538,
418638,
418738,
418838,
418941,
419042,
419144,
419250,
419367,
4194115,
4195-98,
4196-89,
4197-94,
4198-93,
4199-87,
4200-86,
4201-91,
4202-90,
4203-92,
4204-93,
4205-92,
4206-89,
4207-91,
4208-92,
4209-90,
4210-92,
4211-92,
4212-91,
4213-90,
4214-90,
4215-89,
4216-87,
4217-90,
4218-93,
4219-92,
4220-92,
4221-95,
4222-94,
4223-94,
4224-93,
4225-91,
4226-92,
4227-94,
4228-95,
4229-96,
4230-93,
4231-93,
4232-92,
4233-95,
4234-112,
4235107,
423673,
423756,
423845,
423945,
424044,
424141,
424241,
424339,
424438,
424537,
424639,
424739,
424837,
424938,
425037,
425139,
425241,
425337,
425437,
425537,
425637,
425737,
425840,
425939,
426041,
426142,
426242,
426339,
426439,
426543,
426647,
426749,
426856,
426976,
4270112,
4271-112,
4272-102,
4273-90,
4274-78,
4275-88,
4276-93,
4277-92,
4278-92,
4279-90,
4280-89,
4281-91,
4282-88,
4283-86,
4284-90,
4285-88,
4286-87,
4287-89,
4288-91,
4289-90,
4290-90,
4291-89,
4292-90,
4293-90,
4294-88,
4295-90,
4296-89,
4297-89,
4298-89,
4299-87,
4300-90,
4301-91,
4302-90,
4303-90,
4304-88,
4305-90,
4306-92,
4307-93,
4308-93,
4309-97,
4310-112,
4311108,
431271,
431352,
431448,
431551,
431648,
431745,
431840,
431940,
432041,
432142,
432242,
432341,
432439,
432541,
432642,
432739,
432837,
432937,
433037,
433137,
433237,
433337,
433438,
433539,
433640,
433740,
433840,
433940,
434042,
434145,
434246,
434345,
434451,
434572,
4346121,
4347-98,
4348-99,
4349-100,
4350-95,
4351-93,
4352-96,
4353-95,
4354-93,
4355-90,
4356-90,
4357-87,
4358-89,
4359-89,
4360-90,
4361-89,
4362-90,
4363-90,
4364-89,
4365-92,
4366-94,
4367-90,
4368-91,
4369-91,
4370-91,
4371-90,
4372-89,
4373-90,
4374-88,
4375-90,
4376-92,
4377-91,
4378-92,
4379-93,
4380-94,
4381-96,
4382-94,
4383-94,
4384-95,
4385-97,
4386-113,
4387106,
438871,
438952,
439048,
439146,
439245,
439345,
439441,
439537,
439633,
439733,
439835,
439935,
440037,
440138,
440237,
440336,
440435,
440537,
440637,
440737,
440837,
440937,
441037,
441137,
441238,
441339,
441439,
441539,
441640,
441742,
441840,
441942,
442050,
442173,
4422114,
4423-107,
4424-96,
4425-100,
4426-97,
4427-100,
4428-103,
4429-101,
4430-97,
4431-92,
4432-89,
4433-89,
4434-87,
4435-85,
4436-88,
4437-89,
4438-87,
4439-87,
4440-88,
4441-88,
4442-89,
4443-91,
4444-92,
4445-89,
4446-86,
4447-86,
4448-84,
4449-86,
4450-86,
4451-90,
4452-94,
4453-94,
4454-93,
4455-93,
4456-94,
4457-94,
4458-93,
4459-92,
4460-94,
4461-99,
4462-115,
4463106,
446472,
446560,
446659,
446757,
446855,
446948,
447042,
447139,
447237,
447337,
447439,
447537,
447637,
447738,
447837,
447935,
448033,
448137,
448237,
448337,
448437,
448538,
448645,
448743,
448842,
448939,
449036,
449135,
449234,
449338,
449440,
449542,
449650,
449776,
4498115,
4499-110,
4500-97,
4501-89,
4502-88,
4503-92,
4504-95,
4505-94,
4506-91,
4507-90,
4508-88,
4509-86,
4510-87,
4511-88,
4512-87,
4513-86,
4514-88,
4515-88,
4516-88,
4517-91,
4518-90,
4519-89,
4520-90,
4521-89,
4522-89,
4523-91,
4524-90,
4525-91,
4526-90,
4527-91,
4528-93,
4529-93,
4530-93,
4531-95,
4532-97,
4533-96,
4534-92,
4535-94,
4536-97,
4537-100,
4538-118,
4539106,
454072,
454154,
454250,
454348,
454447,
454546,
454644,
454740,
454836,
454938,
455040,
455142,
455241,
455340,
455438,
455536,
455638,
455737,
455837,
455937,
456037,
456137,
456239,
456341,
456441,
456541,
456640,
456741,
456845,
456947,
457047,
457146,
457253,
457377,
4574119,
4575-102,
4576-90,
4577-94,
4578-89,
4579-88,
4580-94,
4581-90,
4582-87,
4583-86,
4584-85,
4585-87,
4586-87,
4587-85,
4588-86,
4589-86,
4590-87,
4591-88,
4592-90,
4593-90,
4594-91,
4595-91,
4596-91,
4597-93,
4598-91,
4599-91,
4600-92,
4601-93,
4602-93,
4603-92,
4604-94,
4605-93,
4606-90,
4607-91,
4608-92,
4609-92,
4610-91,
4611-94,
4612-96,
4613-95,
4614-105,
4615114,
461674,
461757,
461851,
461950,
462053,
462147,
462242,
462339,
462437,
462541,
462646,
462746,
462843,
462940,
463035,
463131,
463229,
463337,
463437,
463537,
463637,
463738,
463839,
463937,
464038,
464139,
464240,
464341,
464440,
464543,
464646,
464748,
464857,
464989,
4650-126,
4651-102,
4652-97,
4653-96,
4654-93,
4655-96,
4656-92,
4657-89,
4658-89,
4659-91,
4660-94,
4661-90,
4662-91,
4663-90,
4664-88,
4665-88,
4666-90,
4667-90,
4668-90,
4669-92,
4670-93,
4671-93,
4672-92,
4673-90,
4674-89,
4675-90,
4676-89,
4677-91,
4678-93,
4679-91,
4680-92,
4681-93,
4682-92,
4683-94,
4684-95,
4685-92,
4686-92,
4687-95,
4688-99,
4689-100,
4690-116,
4691103,
469270,
469354,
469452,
469554,
469649,
469746,
469843,
469940,
470036,
470135,
470239,
470341,
470437,
470538,
470638,
470738,
470837,
470937,
471037,
471137,
471238,
471338,
471442,
471543,
471641,
471741,
471841,
471945,
472045,
472144,
472244,
472346,
472456,
472586,
4726119,
4727-113,
4728-96,
4729-91,
4730-78,
4731-83,
4732-90,
4733-90,
4734-90,
4735-89,
4736-91,
4737-92,
4738-92,
4739-90,
4740-88,
4741-89,
4742-91,
4743-91,
4744-90,
4745-89,
4746-89,
4747-88,
4748-88,
4749-90,
4750-90,
4751-92,
4752-92,
4753-92,
4754-90,
4755-90,
4756-94,
4757-93,
4758-91,
4759-91,
4760-92,
4761-94,
4762-91,
4763-90,
4764-95,
4765-100,
4766-121,
476791,
476858,
476949,
477049,
477147,
477245,
477344,
477444,
477543,
477641,
477740,
477840,
477937,
478035,
478135,
478236,
478335,
478434,
478537,
478637,
478738,
478838,
478938,
479042,
479138,
479237,
479338,
479437,
479537,
479640,
479745,
479845,
479944,
480054,
480184,
4802123,
4803-106,
4804-96,
4805-95,
4806-96,
4807-99,
4808-97,
4809-96,
4810-92,
4811-91,
4812-92,
4813-91,
4814-92,
4815-95,
4816-94,
4817-93,
4818-92,
4819-91,
4820-89,
4821-91,
4822-92,
4823-91,
4824-91,
4825-92,
4826-94,
4827-92,
4828-88,
4829-89,
4830-91,
4831-91,
4832-93,
4833-94,
4834-92,
4835-93,
4836-92,
4837-93,
4838-92,
4839-94,
4840-95,
4841-97,
4842-118,
484395,
484455,
484533,
484634,
484737,
484837,
484934,
485033,
485133,
485231,
485334,
485436,
485536,
485634,
485735,
485836,
485937,
486038,
486137,
486237,
486338,
486438,
486538,
486640,
486740,
486842,
486943,
487043,
487141,
487241,
487340,
487443,
487543,
487650,
487777,
4878116,
4879-110,
4880-84,
4881-81,
4882-87,
4883-91,
4884-94,
4885-91,
4886-88,
4887-88,
4888-89,
4889-88,
4890-88,
4891-88,
4892-85,
4893-88,
4894-89,
4895-88,
4896-88,
4897-89,
4898-92,
4899-91,
4900-93,
4901-92,
4902-92,
4903-94,
4904-94,
4905-93,
4906-93,
4907-94,
4908-96,
4909-95,
4910-91,
4911-89,
4912-88,
4913-91,
4914-92,
4915-94,
4916-98,
4917-100,
4918-122,
491991,
492057,
492143,
492246,
492341,
492433,
492536,
492636,
492738,
492839,
492939,
493038,
493133,
493233,
493334,
493434,
493534,
493635,
493737,
493838,
493938,
494038,
494139,
494244,
494343,
494444,
494545,
494644,
494740,
494840,
494942,
495040,
495146,
495260,
495393,
4954-127,
4955-103,
4956-88,
4957-87,
4958-94,
4959-93,
4960-96,
4961-97,
4962-94,
4963-89,
4964-90,
4965-89,
4966-88,
4967-90,
4968-90,
4969-91,
4970-92,
4971-90,
4972-90,
4973-91,
4974-93,
4975-94,
4976-94,
4977-94,
4978-94,
4979-93,
4980-91,
4981-94,
4982-96,
4983-95,
4984-98,
4985-97,
4986-94,
4987-94,
4988-95,
4989-99,
4990-98,
4991-95,
4992-95,
4993-101,
4994-121,
499595,
499658,
499742,
499839,
499944,
500044,
500139,
500237,
500341,
500442,
500541,
500641,
500737,
500833,
500933,
501032,
501133,
501233,
501337,
501438,
501538,
501638,
501738,
501839,
501941,
502044,
502144,
502247,
502346,
502444,
502541,
502639,
502740,
502852,
502985,
5030127,
5031-102,
5032-88,
5033-82,
5034-87,
5035-92,
5036-94,
5037-91,
5038-90,
5039-91,
5040-92,
5041-91,
5042-89,
5043-91,
5044-92,
5045-91,
5046-89,
5047-87,
5048-86,
5049-89,
5050-91,
5051-92,
5052-93,
5053-93,
5054-92,
5055-95,
5056-98,
5057-95,
5058-90,
5059-87,
5060-90,
5061-92,
5062-93,
5063-94,
5064-98,
5065-99,
5066-97,
5067-97,
5068-96,
5069-98,
5070-114,
5071106,
507265,
507340,
507442,
507541,
507639,
507741,
507841,
507943,
508046,
508145,
508243,
508340,
508438,
508539,
508640,
508740,
508839,
508937,
509038,
509138,
509238,
509338,
509434,
509537,
509639,
509742,
509842,
509941,
510042,
510141,
510242,
510344,
510458,
510588,
5106124,
5107-109,
5108-98,
5109-95,
5110-96,
5111-97,
5112-95,
5113-95,
5114-95,
5115-96,
5116-94,
5117-91,
5118-90,
5119-92,
5120-91,
5121-90,
5122-90,
5123-89,
5124-87,
5125-89,
5126-92,
5127-94,
5128-95,
5129-96,
5130-95,
5131-94,
5132-94,
5133-97,
5134-98,
5135-97,
5136-97,
5137-96,
5138-95,
5139-96,
5140-95,
5141-98,
5142-99,
5143-98,
5144-97,
5145-100,
5146-121,
514790,
514852,
514937,
515036,
515139,
515241,
515339,
515439,
515540,
515638,
515735,
515833,
515934,
516035,
516134,
516236,
516336,
516435,
516537,
516638,
516738,
516838,
516938,
517040,
517139,
517240,
517339,
517440,
517544,
517646,
517749,
517853,
517953,
518053,
518173,
5182108,
5183-114,
5184-96,
5185-96,
5186-99,
5187-100,
5188-99,
5189-96,
5190-94,
5191-95,
5192-93,
5193-89,
5194-84,
5195-88,
5196-91,
5197-91,
5198-93,
5199-97,
5200-97,
5201-98,
5202-97,
5203-93,
5204-92,
5205-92,
5206-92,
5207-95,
5208-95,
5209-94,
5210-92,
5211-91,
5212-94,
5213-96,
5214-96,
5215-94,
5216-94,
5217-94,
5218-92,
5219-93,
5220-94,
5221-96,
5222-115,
5223103,
522464,
522536,
522638,
522745,
522842,
522944,
523041,
523141,
523241,
523337,
523438,
523542,
523645,
523746,
523843,
523939,
524033,
524137,
524238,
524338,
524438,
524538,
524642,
524742,
524838,
524936,
525035,
525134,
525236,
525340,
525439,
525539,
525649,
525782,
5258-123,
5259-95,
5260-91,
5261-87,
5262-89,
5263-93,
5264-94,
5265-95,
5266-94,
5267-95,
5268-94,
5269-91,
5270-92,
5271-93,
5272-92,
5273-92,
5274-94,
5275-95,
5276-95,
5277-96,
5278-94,
5279-94,
5280-94,
5281-93,
5282-94,
5283-92,
5284-90,
5285-92,
5286-90,
5287-91,
5288-93,
5289-92,
5290-92,
5291-91,
5292-91,
5293-93,
5294-93,
5295-93,
5296-93,
5297-98,
5298-122,
529990,
530054,
530140,
530240,
530341,
530440,
530538,
530636,
530736,
530836,
530939,
531042,
531143,
531241,
531338,
531438,
531536,
531636,
531737,
531838,
531938,
532038,
532138,
532241,
532340,
532437,
532536,
532638,
532742,
532842,
532941,
533044,
533141,
533248,
533373,
5334116,
5335-103,
5336-88,
5337-87,
5338-92,
5339-96,
5340-95,
5341-93,
5342-91,
5343-87,
5344-85,
5345-88,
5346-85,
5347-89,
5348-93,
5349-91,
5350-88,
5351-87,
5352-85,
5353-87,
5354-89,
5355-91,
5356-93,
5357-92,
5358-92,
5359-92,
5360-91,
5361-94,
5362-90,
5363-91,
5364-93,
5365-93,
5366-94,
5367-92,
5368-92,
5369-95,
5370-93,
5371-92,
5372-93,
5373-96,
5374-116,
5375104,
537666,
537740,
537839,
537937,
538039,
538142,
538243,
538343,
538440,
538538,
538637,
538736,
538836,
538934,
539034,
539135,
539235,
539337,
539438,
539538,
539638,
539738,
539841,
539941,
540038,
540137,
540236,
540335,
540437,
540542,
540644,
540746,
540858,
540991,
5410-120,
5411-98,
5412-99,
5413-94,
5414-89,
5415-93,
5416-92,
5417-92,
5418-93,
5419-93,
5420-93,
5421-91,
5422-89,
5423-88,
5424-85,
5425-86,
5426-88,
5427-89,
5428-87,
5429-89,
5430-88,
5431-90,
5432-94,
5433-93,
5434-94,
5435-94,
5436-91,
5437-90,
5438-86,
5439-90,
5440-94,
5441-94,
5442-96,
5443-95,
5444-95,
5445-94,
5446-93,
5447-92,
5448-91,
5449-97,
5450-123,
545191,
545258,
545348,
545452,
545548,
545644,
545743,
545843,
545941,
546036,
546138,
546242,
546343,
546439,
546537,
546634,
546731,
546832,
546937,
547038,
547138,
547238,
547338,
547441,
547540,
547637,
547741,
547842,
547941,
548043,
548141,
548239,
548345,
548460,
548592,
5486-123,
5487-102,
5488-102,
5489-99,
5490-99,
5491-97,
5492-92,
5493-93,
5494-93,
5495-94,
5496-94,
5497-96,
5498-93,
5499-89,
5500-92,
5501-91,
5502-90,
5503-89,
5504-90,
5505-88,
5506-90,
5507-90,
5508-91,
5509-92,
5510-92,
5511-92,
5512-92,
5513-94,
5514-90,
5515-90,
5516-90,
5517-91,
5518-91,
5519-91,
5520-93,
5521-94,
5522-91,
5523-92,
5524-95,
5525-103,
5526-127,
552792,
552859,
552949,
553056,
553153,
553255,
553351,
553450,
553548,
553643,
553739,
553836,
553935,
554035,
554134,
554233,
554334,
554437,
554537,
554638,
554738,
554838,
554938,
555038,
555139,
555238,
555340,
555441,
555540,
555642,
555745,
555845,
555947,
556064,
5561100,
5562-118,
5563-104,
5564-102,
5565-93,
5566-95,
5567-92,
5568-96,
5569-97,
5570-96,
5571-96,
5572-94,
5573-92,
5574-89,
5575-90,
5576-93,
5577-93,
5578-96,
5579-97,
5580-94,
5581-96,
5582-96,
5583-97,
5584-98,
5585-97,
5586-96,
5587-94,
5588-94,
5589-95,
5590-92,
5591-95,
5592-94,
5593-94,
5594-95,
5595-94,
5596-95,
5597-96,
5598-95,
5599-94,
5600-94,
5601-97,
5602-118,
5603102,
560470,
560553,
560653,
560755,
560852,
560954,
561052,
561147,
561241,
561338,
561439,
561540,
561636,
561737,
561837,
561935,
562036,
562137,
562238,
562338,
562438,
562538,
562640,
562739,
562840,
562941,
563039,
563133,
563233,
563336,
563440,
563551,
563664,
563784,
5638125,
5639-102,
5640-87,
5641-81,
5642-92,
5643-98,
5644-101,
5645-98,
5646-97,
5647-95,
5648-95,
5649-95,
5650-94,
5651-94,
5652-98,
5653-97,
5654-94,
5655-93,
5656-93,
5657-93,
5658-92,
5659-91,
5660-92,
5661-93,
5662-93,
5663-93,
5664-93,
5665-95,
5666-94,
5667-94,
5668-96,
5669-94,
5670-91,
5671-91,
5672-95,
5673-94,
5674-95,
5675-98,
5676-98,
5677-102,
5678-119,
5679101,
568071,
568155,
568247,
568347,
568448,
568551,
568652,
568745,
568838,
568934,
569030,
569134,
569234,
569332,
569434,
569534,
569637,
569737,
569837,
569938,
570038,
570138,
570241,
570342,
570441,
570539,
570641,
570739,
570837,
570937,
571037,
571144,
571266,
5713105,
5714-118,
5715-105,
5716-107,
5717-106,
5718-102,
5719-101,
5720-102,
5721-100,
5722-101,
5723-101,
5724-99,
5725-98,
5726-96,
5727-96,
5728-98,
5729-94,
5730-94,
5731-95,
5732-94,
5733-96,
5734-97,
5735-97,
5736-96,
5737-96,
5738-95,
5739-96,
5740-94,
5741-96,
5742-99,
5743-95,
5744-96,
5745-98,
5746-100,
5747-98,
5748-97,
5749-97,
5750-94,
5751-93,
5752-97,
5753-107,
5754123,
575583,
575654,
575741,
575845,
575948,
576045,
576146,
576244,
576343,
576440,
576536,
576639,
576736,
576837,
576938,
577040,
577141,
577240,
577337,
577437,
577538,
577638,
577738,
577840,
577940,
578043,
578143,
578241,
578340,
578442,
578542,
578640,
578744,
578861,
578990,
5790121,
5791-122,
5792-121,
5793-117,
5794-113,
5795-111,
5796-108,
5797-104,
5798-104,
5799-105,
5800-106,
5801-106,
5802-102,
5803-103,
5804-106,
5805-106,
5806-107,
5807-106,
5808-106,
5809-104,
5810-103,
5811-101,
5812-100,
5813-99,
5814-98,
5815-99,
5816-100,
5817-101,
5818-98,
5819-95,
5820-94,
5821-94,
5822-93,
5823-95,
5824-95,
5825-97,
5826-97,
5827-98,
5828-97,
5829-97,
5830-115,
583198,
583258,
583340,
583442,
583546,
583646,
583747,
583848,
583945,
584043,
584142,
584240,
584339,
584436,
584534,
584635,
584736,
584838,
584937,
585037,
585137,
585238,
585338,
585437,
585541,
585641,
585742,
585843,
585940,
586041,
586140,
586240,
586342,
586451,
586568,
586678,
586781,
586881,
586981,
587085,
587185,
587287,
587388,
587489,
587593,
587696,
587797,
5878100,
587998,
5880101,
5881105,
5882109,
5883110,
5884113,
5885116,
5886116,
5887117,
5888118,
5889119,
5890120,
5891121,
5892126,
5893-126,
5894-126,
5895-123,
5896-120,
5897-118,
5898-117,
5899-115,
5900-114,
5901-113,
5902-110,
5903-106,
5904-108,
5905-115,
5906117,
590781,
590852,
590940,
591042,
591147,
591248,
591348,
591445,
591542,
591638,
591734,
591837,
591934,
592036,
592137,
592239,
592339,
592438,
592537,
592637,
592737,
592838,
592938,
593038,
593137,
593239,
593341,
593439,
593542,
593642,
593740,
593841,
593943,
594053,
594169,
594271,
594366,
594465,
594561,
594657,
594757,
594858,
594960,
595062,
595165,
595264,
595368,
595476,
595571,
595667,
595768,
595869,
595975,
596082,
596187,
596285,
596385,
596486,
596587,
596692,
596794,
596894,
596996,
597090,
597191,
597295,
5973101,
5974109,
5975109,
5976114,
5977115,
5978119,
5979123,
5980121,
5981117,
5982104,
598377,
598450,
598537,
598632,
598730,
598824,
598927,
599035,
599139,
599239,
599336,
599438,
599536,
599637,
599736,
599834,
599933,
600032,
600137,
600237,
600337,
600437,
600538,
600637,
600741,
600840,
600941,
601043,
601141,
601239,
601338,
601440,
601543,
601649,
601753,
601852,
601950,
602050,
602151,
602251,
602352,
602454,
602549,
602646,
602750,
602848,
602947,
603051,
603151,
603250,
603348,
603450,
603550,
603650,
603750,
603850,
603951,
604051,
604152,
604252,
604356,
604457,
604558,
604659,
604757,
604856,
604956,
605055,
605152,
605253,
605356,
605459,
605560,
605661,
605762,
605859,
605954,
606054,
606151,
606247,
606350,
606447,
606545,
606644,
606743,
606840,
606937,
607037,
607137,
607239,
607343,
607445,
607543,
607639,
607736,
607837,
607937,
608037,
608139,
608246,
608341,
608438,
608540,
608640,
608739,
608840,
608940,
609038,
609143,
609249,
609354,
609454,
609552,
609652,
609749,
609847,
609947,
610050,
610148,
610249,
610352,
610449,
610550,
610651,
610748,
610848,
610949,
611049,
611149,
611251,
611350,
611446,
611546,
611650,
611749,
611852,
611952,
612047,
612148,
612251,
612352,
612448,
612550,
612652,
612747,
612845,
612946,
613045,
613148,
613249,
613350,
613448,
613544,
613645,
613748,
613850,
613947,
614043,
614144,
614244,
614344,
614443,
614543,
614643,
614741,
614841,
614941,
615038,
615136,
615236,
615336,
615437,
615537,
615637,
615737,
615841,
615941,
616039,
616138,
616238,
616336,
616436,
616537,
616639,
616744,
616848,
616950,
617050,
617150,
617252,
617352,
617452,
617552,
617653,
617750,
617846,
617946,
618046,
618142,
618243,
618346,
618445,
618544,
618646,
618746,
618845,
618943,
619045,
619146,
619250,
619351,
619450,
619551,
619650,
619749,
619851,
619951,
620050,
620151,
620250,
620349,
620447,
620549,
620649,
620750,
620852,
620950,
621048,
621145,
621246,
621347,
621447,
621548,
621647,
621745,
621844,
621945,
622042,
622138,
622237,
622335,
622431,
622529,
622631,
622733,
622835,
622936,
623036,
623137,
623237,
623337,
623439,
623539,
623640,
623741,
623842,
623939,
624037,
624137,
624236,
624340,
624444,
624548,
624647,
624745,
624846,
624949,
625049,
625149,
625250,
625347,
625448,
625549,
625648,
625745,
625847,
625947,
626049,
626151,
626253,
626351,
626449,
626548,
626646,
626744,
626844,
626943,
627044,
627146,
627248,
627349,
627451,
627551,
627650,
627749,
627849,
627948,
628050,
628154,
628256,
628349,
628444,
628543,
628644,
628744,
628845,
628945,
629044,
629145,
629242,
629340,
629441,
629542,
629641,
629738,
629836,
629937,
630041,
630146,
630243,
630340,
630437,
630536,
630636,
630737,
630837,
630937,
631040,
631141,
631240,
631339,
631439,
631536,
631635,
631737,
631838,
631941,
632043,
632145,
632246,
632346,
632446,
632547,
632645,
632741,
632845,
632946,
633047,
633148,
633247,
633345,
633444,
633545,
633647,
633746,
633846,
633946,
634045,
634146,
634245,
634343,
634444,
634544,
634646,
634751,
634851,
634947,
635049,
635146,
635244,
635343,
635439,
635539,
635642,
635746,
635846,
635946,
636044,
636143,
636242,
636342,
636444,
636544,
636646,
636746,
636847,
636945,
637040,
637137,
637233,
637335,
637440,
637545,
637642,
637742,
637842,
637938,
638036,
638136,
638236,
638336,
638437,
638538,
638642,
638742,
638840,
638939,
639038,
639138,
639239,
639340,
639439,
639538,
639640,
639740,
639838,
639937,
640038,
640140,
640240,
640338,
640439,
640539,
640640,
640739,
640836,
640934,
641037,
641140,
641240,
641341,
641440,
641538,
641635,
641736,
641840,
641939,
642038,
642136,
642236,
642337,
642439,
642540,
642640,
642740,
642841,
642942,
643042,
643142,
643242,
643340,
643441,
643541,
643642,
643745,
643845,
643942,
644042,
644140,
644242,
644346,
644446,
644544,
644643,
644741,
644839,
644937,
645040,
645141,
645237,
645335,
645432,
645530,
645631,
645736,
645836,
645936,
646036,
646137,
646240,
646340,
646440,
646539,
646639,
646738,
646839,
646941,
647042,
647140,
647242,
647342,
647441,
647538,
647638,
647742,
647839,
647937,
648039,
648137,
648234,
648335,
648436,
648539,
648639,
648741,
648841,
648939,
649039,
649136,
649235,
649335,
649437,
649541,
649645,
649748,
649847,
649948,
650045,
650142,
650244,
650341,
650441,
650542,
650643,
650742,
650841,
650940,
651039,
651137,
651237,
651337,
651438,
651538,
651640,
651741,
651842,
651940,
652041,
652140,
652239,
652340,
652438,
652537,
652639,
652741,
652840,
652937,
653035,
653132,
653233,
653336,
653436,
653536,
653636,
653736,
653838,
653939,
654038,
654137,
654238,
654337,
654437,
654540,
654639,
654743,
654848,
654948,
655044,
655139,
655238,
655340,
655441,
655541,
655641,
655742,
655842,
655939,
656036,
656135,
656235,
656334,
656435,
656536,
656638,
656738,
656837,
656939,
657038,
657136,
657236,
657337,
657439,
657540,
657640,
657738,
657838,
657937,
658035,
658136,
658233,
658334,
658437,
658536,
658639,
658739,
658838,
658937,
659033,
659130,
659232,
659333,
659433,
659535,
659636,
659736,
659836,
659937,
660035,
660137,
660239,
660340,
660436,
660535,
660637,
660736,
660835,
660936,
661036,
661136,
661236,
661335,
661431,
661534,
661635,
661737,
661838,
661937,
662036,
662139,
662242,
662341,
662441,
662540,
662638,
662736,
662837,
662938,
663039,
663140,
663240,
663337,
663434,
663534,
663635,
663737,
663837,
663939,
664039,
664138,
664240,
664339,
664441,
664543,
664643,
664743,
664840,
664939,
665041,
665141,
665239,
665335,
665433,
665534,
665633,
665736,
665838,
665940,
666040,
666139,
666240,
666337,
666439,
666537,
666634,
666733,
666834,
666935,
667035,
667135,
667235,
667333,
667435,
667534,
667633,
667734,
667836,
667937,
668036,
668135,
668235,
668334,
668435,
668536,
668636,
668736,
668836,
668936,
669038,
669139,
669240,
669340,
669442,
669541,
669640,
669743,
669842,
669939,
670038,
670135,
670235,
670334,
670435,
670537,
670637,
670737,
670837,
670938,
671037,
671135,
671234,
671336,
671439,
671540,
671639,
671740,
671841,
671940,
672036,
672137,
672238,
672334,
672435,
672536,
672637,
672739,
672840,
672937,
673037,
673137,
673234,
673334,
673435,
673535,
673637,
673737,
673838,
673939,
674042,
674144,
674242,
674340,
674441,
674540,
674638,
674735,
674834,
674934,
675036,
675136,
675237,
675339,
675438,
675540,
675640,
675738,
675836,
675933,
676031,
676136,
676236,
676336,
676436,
676536,
676636,
676736,
676839,
676941,
677042,
677141,
677240,
677338,
677438,
677537,
677637,
677741,
677840,
677939,
678039,
678137,
678239,
678338,
678439,
678537,
678635,
678735,
678835,
678936,
679039,
679138,
679238,
679338,
679438,
679539,
679639,
679739,
679838,
679938,
680039,
680140,
680241,
680341,
680441,
680538,
680638,
680737,
680837,
680936,
681038,
681140,
681239,
681337,
681435,
681537,
681635,
681733,
681834,
681935,
682038,
682136,
682236,
682338,
682434,
682533,
682635,
682736,
682835,
682937,
683039,
683138,
683238,
683338,
683437,
683534,
683631,
683736,
683836,
683936,
684036,
684136,
684237,
684341,
684441,
684539,
684640,
684739,
684840,
684941,
685042,
685140,
685235,
685335,
685436,
685534,
685636,
685738,
685838,
685939,
686039,
686139,
686239,
686338,
686437,
686538,
686638,
686736,
686834,
686935,
687040,
687144,
687243,
687346,
687447,
687540,
687635,
687736,
687836,
687937,
688037,
688135,
688236,
688337,
688435,
688536,
688638,
688738,
688839,
688939,
689039,
689140,
689240,
689338,
689433,
689532,
689635,
689736,
689835,
689932,
690031,
690132,
690234,
690334,
690435,
690538,
690639,
690738,
690837,
690935,
691036,
691136,
691233,
691336,
691436,
691536,
691636,
691736,
691835,
691931,
692033,
692136,
692236,
692337,
692437,
692537,
692638,
692738,
692839,
692941,
693039,
693136,
693236,
693336,
693435,
693537,
693634,
693734,
693832,
693932,
694034,
694135,
694239,
694338,
694438,
694539,
694638,
694738,
694838,
694938,
695036,
695133,
695234,
695333,
695434,
695534,
695637,
695740,
695840,
695940,
696037,
696135,
696237,
696338,
696437,
696535,
696635,
696736,
696837,
696938,
697041,
697143,
697242,
697337,
697436,
697540,
697639,
697741,
697843,
697941,
698036,
698132,
698233,
698336,
698437,
698540,
698639,
698736,
698833,
698936,
699036,
699136,
699236,
699337,
699442,
699542,
699639,
699735,
699835,
699935,
700037,
700137,
700238,
700339,
700438,
700540,
700640,
700739,
700844,
700944,
701039,
701140,
701240,
701342,
701444,
701542,
701638,
701738,
701836,
701935,
702035,
702135,
702238,
702338,
702435,
702533,
702636,
702735,
702835,
702937,
703038,
703139,
703238,
703338,
703438,
703537,
703636,
703733,
703833,
703933,
704034,
704137,
704238,
704339,
704440,
704536,
704631,
704733,
704836,
704934,
705037,
705135,
705234,
705336,
705437,
705538,
705638,
705737,
705837,
705935,
706033,
706135,
706239,
706336,
706434,
706536,
706636,
706736,
706836,
706936,
707036,
707135,
707236,
707336,
707437,
707535,
707637,
707738,
707838,
707940,
708041,
708142,
708240,
708341,
708444,
708542,
708642,
708740,
708838,
708939,
709037,
709136,
709235,
709335,
709434,
709533,
709634,
709735,
709836,
709936,
710038,
710137,
710237,
710336,
710434,
710536,
710639,
710740,
710839,
710938,
711039,
711137,
711237,
711336,
711439,
711540,
711639,
711739,
711835,
711937,
712037,
712136,
712240,
712341,
712440,
712537,
712635,
712736,
712836,
712937,
713035,
713135,
713234,
713332,
713436,
713534,
713632,
713731,
713830,
713931,
714033,
714136,
714236,
714336,
714436,
714537,
714637,
714737,
714836,
714935,
715038,
715139,
715241,
715340,
715435,
715536,
715635,
715735,
715834,
715934,
716038,
716138,
716239,
716340,
716436,
716535,
716636,
716735,
716836,
716936,
717038,
717136,
717239,
717341,
717442,
717541,
717641,
717740,
717841,
717941,
718039,
718138,
718236,
718337,
718437,
718535,
718637,
718740,
718839,
718937,
719037,
719137,
719238,
719339,
719443,
719544,
719641,
719739,
719839,
719942,
720040,
720136,
720238,
720334,
720433,
720536,
720637,
720741,
720841,
720941,
721041,
721141,
721240,
721340,
721444,
721541,
721638,
721736,
721836,
721936,
722037,
722137,
722238,
722339,
722439,
722538,
722638,
722737,
722840,
722940,
723037,
723138,
723238,
723337,
723436,
723536,
723636,
723735,
723839,
723939,
724038,
724141,
724238,
724337,
724438,
724539,
724641,
724740,
724840,
724941,
725041,
725141,
725240,
725337,
725439,
725540,
725640,
725739,
725839,
725936,
726035,
726135,
726235,
726335,
726435,
726534,
726636,
726735,
726837,
726940,
727040,
727140,
727238,
727336,
727436,
727535,
727637,
727736,
727837,
727938,
728038,
728138,
728237,
728337,
728434,
728531,
728633,
728732,
728833,
728933,
729033,
729135,
729236};
diff --git a/baseline/source/susan/math_private.h b/baseline/source/susan/math_private.h
new file mode 100644
index 0000000..58d4354
--- /dev/null
+++ b/baseline/source/susan/math_private.h
@@ -0,0 +1,178 @@
1/*
2 * ====================================================
3 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
4 *
5 * Developed at SunPro, a Sun Microsystems, Inc. business.
6 * Permission to use, copy, modify, and distribute this
7 * software is freely granted, provided that this notice
8 * is preserved.
9 * ====================================================
10 */
11
12/*
13 * from: @(#)fdlibm.h 5.1 93/09/24
14 */
15
16#ifndef _MATH_PRIVATE_H_
17#define _MATH_PRIVATE_H_
18
19#include "wcclibm.h"
20
21//#include <endian.h>
22//#include <sys/types.h>
23
24/* A representation of a double as a union. */
25union ieee754_double
26{
27 double d;
28
29 /* This is the IEEE 754 double-precision format. */
30 struct {
31 /* Together these comprise the mantissa. */
32 unsigned int mantissa1:32;
33 unsigned int mantissa0:20;
34 unsigned int exponent:11;
35 unsigned int negative:1;
36 } ieee;
37
38 /* This format makes it easier to see if a NaN is a signalling NaN. */
39 struct {
40 /* Together these comprise the mantissa. */
41 unsigned int mantissa1:32;
42 unsigned int mantissa0:19;
43 unsigned int quiet_nan:1;
44 unsigned int exponent:11;
45 unsigned int negative:1;
46 } ieee_nan;
47};
48
49/* The original fdlibm code used statements like:
50 n0 = ((*(int*)&one)>>29)^1; * index of high word *
51 ix0 = *(n0+(int*)&x); * high word of x *
52 ix1 = *((1-n0)+(int*)&x); * low word of x *
53 to dig two 32 bit words out of the 64 bit IEEE floating point
54 value. That is non-ANSI, and, moreover, the gcc instruction
55 scheduler gets it wrong. We instead use the following macros.
56 Unlike the original code, we determine the endianness at compile
57 time, not at run time; I don't see much benefit to selecting
58 endianness at run time. */
59
60/* A union which permits us to convert between a double and two 32 bit
61 ints. */
62
63/* #if __FLOAT_WORD_ORDER == BIG_ENDIAN */
64/* #warning USING Big Endian float word order */
65/* typedef union */
66/* { */
67/* double value; */
68/* struct */
69/* { */
70/* u_int16_t msw; */
71/* u_int16_t lsw; */
72/* } parts; */
73/* } ieeeDoubleShapeType; */
74
75/* #endif */
76
77/* #if __FLOAT_WORD_ORDER == LITTLE_ENDIAN */
78/* #warning USING Little Endian float word order */
79
80typedef union
81{
82 double value;
83 struct
84 {
85 u_int16_t lsw;
86 u_int16_t msw;
87 } parts;
88} ieeeDoubleShapeType;
89
90/* #endif */
91
92/* Get two 32 bit ints from a double. */
93
94#define EXTRACT_WORDS(ix0,ix1,d) \
95{ \
96 ieeeDoubleShapeType ew_u; \
97 ew_u.value = (d); \
98 (ix0) = ew_u.parts.msw; \
99 (ix1) = ew_u.parts.lsw; \
100}
101
102/* Get the more significant 32 bit int from a double. */
103
104#define GET_HIGH_WORD(i,d) \
105{ \
106 ieeeDoubleShapeType gh_u; \
107 gh_u.value = (d); \
108 (i) = gh_u.parts.msw; \
109}
110
111/* Get the less significant 32 bit int from a double. */
112
113#define GET_LOW_WORD(i,d) \
114{ \
115 ieeeDoubleShapeType gl_u; \
116 gl_u.value = (d); \
117 (i) = gl_u.parts.lsw; \
118}
119
120/* Set a double from two 32 bit ints. */
121
122#define INSERT_WORDS(d,ix0,ix1) \
123{ \
124 ieeeDoubleShapeType iw_u; \
125 iw_u.parts.msw = (ix0); \
126 iw_u.parts.lsw = (ix1); \
127 (d) = iw_u.value; \
128}
129
130/* Set the more significant 32 bits of a double from an int. */
131
132#define SET_HIGH_WORD(d,v) \
133{ \
134 ieeeDoubleShapeType sh_u; \
135 sh_u.value = (d); \
136 sh_u.parts.msw = (v); \
137 (d) = sh_u.value; \
138}
139
140/* Set the less significant 32 bits of a double from an int. */
141
142#define SET_LOW_WORD(d,v) \
143{ \
144 ieeeDoubleShapeType sl_u; \
145 sl_u.value = (d); \
146 sl_u.parts.lsw = (v); \
147 (d) = sl_u.value; \
148}
149
150/* A union which permits us to convert between a float and a 32 bit
151 int. */
152
153typedef union
154{
155 float value;
156 u_int32_t word;
157} ieee_float_shape_type;
158
159/* Get a 32 bit int from a float. */
160
161#define GET_FLOAT_WORD(i,d) \
162{ \
163 ieee_float_shape_type gf_u; \
164 gf_u.value = (d); \
165 (i) = gf_u.word; \
166}
167
168/* Set a float from a 32 bit int. */
169
170#define SET_FLOAT_WORD(d,i) \
171{ \
172 ieee_float_shape_type sf_u; \
173 sf_u.word = (i); \
174 (d) = sf_u.value; \
175}
176
177
178#endif /* _MATH_PRIVATE_H_ */
diff --git a/baseline/source/susan/susan.c b/baseline/source/susan/susan.c
new file mode 100644
index 0000000..fb990b1
--- /dev/null
+++ b/baseline/source/susan/susan.c
@@ -0,0 +1,2014 @@
1/**********************************************************************\
2
3 SUSAN Version 2l by Stephen Smith
4 Oxford Centre for Functional Magnetic Resonance Imaging of the Brain,
5 Department of Clinical Neurology, Oxford University, Oxford, UK
6 (Previously in Computer Vision and Image Processing Group - now
7 Computer Vision and Electro Optics Group - DERA Chertsey, UK)
8 Email: steve@fmrib.ox.ac.uk
9 WWW: http://www.fmrib.ox.ac.uk/~steve
10
11 (C) Crown Copyright (1995-1999), Defence Evaluation and Research Agency,
12 Farnborough, Hampshire, GU14 6TD, UK
13 DERA WWW site:
14 http://www.dera.gov.uk/
15 DERA Computer Vision and Electro Optics Group WWW site:
16 http://www.dera.gov.uk/imageprocessing/dera/group_home.html
17 DERA Computer Vision and Electro Optics Group point of contact:
18 Dr. John Savage, jtsavage@dera.gov.uk, +44 1344 633203
19
20 A UK patent has been granted: "Method for digitally processing
21 images to determine the position of edges and/or corners therein for
22 guidance of unmanned vehicle", UK Patent 2272285. Proprietor:
23 Secretary of State for Defence, UK. 15 January 1997
24
25 This code is issued for research purposes only and remains the
26 property of the UK Secretary of State for Defence. This code must
27 not be passed on without this header information being kept
28 intact. This code must not be sold.
29
30\**********************************************************************/
31
32/**********************************************************************\
33
34 SUSAN Version 2l
35 SUSAN = Smallest Univalue Segment Assimilating Nucleus
36
37 Email: steve@fmrib.ox.ac.uk
38 WWW: http://www.fmrib.ox.ac.uk/~steve
39
40 Related paper:
41 @article{Smith97,
42 author = "Smith, S.M. and Brady, J.M.",
43 title = "{SUSAN} - A New Approach to Low Level Image Processing",
44 journal = "Int. Journal of Computer Vision",
45 pages = "45--78",
46 volume = "23",
47 number = "1",
48 month = "May",
49 year = 1997}
50
51 To be registered for automatic (bug) updates of SUSAN, send an email.
52
53 Compile with:
54 gcc -O4 -o susan susan2l.c -lm
55
56 See following section for different machine information. Please
57 report any bugs (and fixes). There are a few optional changes that
58 can be made in the "defines" section which follows shortly.
59
60 Usage: type "susan" to get usage. Only PGM format files can be input
61 and output. Utilities such as the netpbm package and XV can be used
62 to convert to and from other formats. Any size of image can be
63 processed.
64
65 This code is written using an emacs folding mode, making moving
66 around the different sections very easy. This is why there are
67 various marks within comments and why comments are indented.
68
69
70 SUSAN QUICK:
71
72 This version of the SUSAN corner finder does not do all the
73 false-corner suppression and thus is faster and produced some false
74 positives, particularly on strong edges. However, because there are
75 less stages involving thresholds etc., the corners that are
76 correctly reported are usually more stable than those reported with
77 the full algorithm. Thus I recommend at least TRYING this algorithm
78 for applications where stability is important, e.g., tracking.
79
80 THRESHOLDS:
81
82 There are two thresholds which can be set at run-time. These are the
83 brightness threshold (t) and the distance threshold (d).
84
85 SPATIAL CONTROL: d
86
87 In SUSAN smoothing d controls the size of the Gaussian mask; its
88 default is 4.0. Increasing d gives more smoothing. In edge finding,
89 a fixed flat mask is used, either 37 pixels arranged in a "circle"
90 (default), or a 3 by 3 mask which gives finer detail. In corner
91 finding, only the larger 37 pixel mask is used; d is not
92 variable. In smoothing, the flat 3 by 3 mask can be used instead of
93 a larger Gaussian mask; this gives low smoothing and fast operation.
94
95 BRIGHTNESS CONTROL: t
96
97 In all three algorithms, t can be varied (default=20); this is the
98 main threshold to be varied. It determines the maximum difference in
99 greylevels between two pixels which allows them to be considered
100 part of the same "region" in the image. Thus it can be reduced to
101 give more edges or corners, i.e. to be more sensitive, and vice
102 versa. In smoothing, reducing t gives less smoothing, and vice
103 versa. Set t=10 for the test image available from the SUSAN web
104 page.
105
106 ITERATIONS:
107
108 With SUSAN smoothing, more smoothing can also be obtained by
109 iterating the algorithm several times. This has a different effect
110 from varying d or t.
111
112 FIXED MASKS:
113
114 37 pixel mask: ooo 3 by 3 mask: ooo
115 ooooo ooo
116 ooooooo ooo
117 ooooooo
118 ooooooo
119 ooooo
120 ooo
121
122 CORNER ATTRIBUTES dx, dy and I
123 (Only read this if you are interested in the C implementation or in
124 using corner attributes, e.g., for corner matching)
125
126 Corners reported in the corner list have attributes associated with
127 them as well as positions. This is useful, for example, when
128 attempting to match corners from one image to another, as these
129 attributes can often be fairly unchanged between images. The
130 attributes are dx, dy and I. I is the value of image brightness at
131 the position of the corner. In the case of susan_corners_quick, dx
132 and dy are the first order derivatives (differentials) of the image
133 brightness in the x and y directions respectively, at the position
134 of the corner. In the case of normal susan corner finding, dx and dy
135 are scaled versions of the position of the centre of gravity of the
136 USAN with respect to the centre pixel (nucleus).
137
138 BRIGHTNESS FUNCTION LUT IMPLEMENTATION:
139 (Only read this if you are interested in the C implementation)
140
141 The SUSAN brightness function is implemented as a LUT
142 (Look-Up-Table) for speed. The resulting pointer-based code is a
143 little hard to follow, so here is a brief explanation. In
144 setup_brightness_lut() the LUT is setup. This mallocs enough space
145 for *bp and then repositions the pointer to the centre of the
146 malloced space. The SUSAN function e^-(x^6) or e^-(x^2) is
147 calculated and converted to a uchar in the range 0-100, for all
148 possible image brightness differences (including negative
149 ones). Thus bp[23] is the output for a brightness difference of 23
150 greylevels. In the SUSAN algorithms this LUT is used as follows:
151
152 p=in + (i-3)*x_size + j - 1;
153 p points to the first image pixel in the circular mask surrounding
154 point (x,y).
155
156 cp=bp + in[i*x_size+j];
157 cp points to a position in the LUT corresponding to the brightness
158 of the centre pixel (x,y).
159
160 now for every pixel within the mask surrounding (x,y),
161 n+=*(cp-*p++);
162 the brightness difference function is found by moving the cp pointer
163 down by an amount equal to the value of the pixel pointed to by p,
164 thus subtracting the two brightness values and performing the
165 exponential function. This value is added to n, the running USAN
166 area.
167
168 in SUSAN smoothing, the variable height mask is implemented by
169 multiplying the above by the moving mask pointer, reset for each new
170 centre pixel.
171 tmp = *dpt++ * *(cp-brightness);
172
173\**********************************************************************/
174
175/**********************************************************************\
176
177 Success has been reported with the following:
178
179 MACHINE OS COMPILER
180
181 Sun 4.1.4 bundled C, gcc
182
183 Next
184
185 SGI IRIX SGI cc
186
187 DEC Unix V3.2+
188
189 IBM RISC AIX gcc
190
191 PC Borland 5.0
192
193 PC Linux gcc-2.6.3
194
195 PC Win32 Visual C++ 4.0 (Console Application)
196
197 PC Win95 Visual C++ 5.0 (Console Application)
198 Thanks to Niu Yongsheng <niuysbit@163.net>:
199 Use the FOPENB option below
200
201 PC DOS djgpp gnu C
202 Thanks to Mark Pettovello <mpettove@umdsun2.umd.umich.edu>:
203 Use the FOPENB option below
204
205 HP HP-UX bundled cc
206 Thanks to Brian Dixon <briand@hpcvsgen.cv.hp.com>:
207 in ksh:
208 export CCOPTS="-Aa -D_HPUX_SOURCE | -lM"
209 cc -O3 -o susan susan2l.c
210
211\**********************************************************************/
212
213/**********************************************************************\
214
215 SUSAN Version 2l, 12/2/99
216 Changed GNUDOS option to FOPENB.
217 (Thanks to Niu Yongsheng <niuysbit@163.net>.)
218 Took out redundant "sq=sq/2;".
219
220 SUSAN Version 2k, 19/8/98:
221 In corner finding:
222 Changed if(yy<sq) {...} else if(xx<sq) {...} to
223 if(yy<xx) {...} else {...}
224 (Thanks to adq@cim.mcgill.edu - Alain Domercq.)
225
226 SUSAN Version 2j, 22/10/97:
227 Fixed (mask_size>x_size) etc. tests in smoothing.
228 Added a couple of free() calls for cgx and cgy.
229 (Thanks to geoffb@ucs.ed.ac.uk - Geoff Browitt.)
230
231 SUSAN Version 2i, 21/7/97:
232 Added information about corner attributes.
233
234 SUSAN Version 2h, 16/12/96:
235 Added principle (initial enhancement) option.
236
237 SUSAN Version 2g, 2/7/96:
238 Minor superficial changes to code.
239
240 SUSAN Version 2f, 16/1/96:
241 Added GNUDOS option (now called FOPENB; see options below).
242
243 SUSAN Version 2e, 9/1/96:
244 Added -b option.
245 Fixed 1 pixel horizontal offset error for drawing edges.
246
247 SUSAN Version 2d, 27/11/95:
248 Fixed loading of certain PGM files in get_image (again!)
249
250 SUSAN Version 2c, 22/11/95:
251 Fixed loading of certain PGM files in get_image.
252 (Thanks to qu@San-Jose.ate.slb.com - Gongyuan Qu.)
253
254 SUSAN Version 2b, 9/11/95:
255 removed "z==" error in edges routines.
256
257 SUSAN Version 2a, 6/11/95:
258 Removed a few unnecessary variable declarations.
259 Added different machine information.
260 Changed "header" in get_image to char.
261
262 SUSAN Version 2, 1/11/95: first combined version able to take any
263 image sizes.
264
265 SUSAN "Versions 1", circa 1992: the various SUSAN algorithms were
266 developed during my doctorate within different programs and for
267 fixed image sizes. The algorithms themselves are virtually unaltered
268 between "versions 1" and the combined program, version 2.
269
270\**********************************************************************/
271
272#include "../extra.h"
273#include "wcclibm.h"
274#include "wccfile.h"
275#include "wccmalloc.h"
276
277#define EXP_A 184
278#define EXP_C 16249
279
280float susan_expf(float y)
281{
282 union
283 {
284 float d;
285 struct
286 {
287#ifdef LITTLE_ENDIAN
288 short j, i;
289#else
290 short i, j;
291#endif
292 } n;
293 } eco;
294 eco.n.i = EXP_A*(y) + (EXP_C);
295 eco.n.j = 0;
296 return eco.d;
297}
298
299float susan_sqrtf(float val)
300{
301 float x = val/10;
302
303 float dx;
304
305 float diff;
306 float min_tol = 0.00001f;
307
308 int i, flag;
309
310
311 flag = 0;
312 if (val == 0 ) x = 0;
313 else {
314 for (i=1;i<20;i++)
315 {
316 if (!flag) {
317 dx = (val - (x*x)) / (2.0f * x);
318 x = x + dx;
319 diff = val - (x*x);
320 if (fabs(diff) <= min_tol) flag = 1;
321 }
322 }
323 }
324 return (x);
325}
326
327/* ********** Optional settings */
328
329typedef int TOTAL_TYPE;
330
331#define SEVEN_SUPP /* size for non-max corner suppression; SEVEN_SUPP or FIVE_SUPP */
332#define MAX_CORNERS 15000 /* max corners per frame */
333
334#define FTOI(a) ( (a) < 0 ? ((int)(a-0.5)) : ((int)(a+0.5)) )
335#define abs(a) ( (a) < 0 ? -a : a )
336typedef unsigned char uchar;
337typedef struct {int x,y,info, dx, dy, I;} corner_rep;
338typedef corner_rep CORNER_LIST[MAX_CORNERS];
339
340extern char susan_input[7292];
341struct wccFILE susan_file;
342float susan_dt;
343int susan_bt;
344int susan_principle_conf;
345int susan_thin_post_proc;
346int susan_three_by_three;
347int susan_drawing_mode;
348int susan_susan_quick;
349int susan_max_no_corners;
350int susan_max_no_edges;
351
352int susan_getint( struct wccFILE *fd )
353{
354 int c, i;
355 char dummy[10000];
356
357 c = susan_wccfgetc(fd);
358 _Pragma( "loopbound min 1 max 4" )
359 while (1) { /* find next integer */
360 if (c=='#') /* if we're at a comment, read to end of line */
361 susan_wccfgets(dummy,9000,fd);
362 if (c==EOFX) {
363 /* "Image is not binary PGM." */
364 }
365 if (c>='0' && c<='9')
366 break; /* found what we were looking for */
367 c = susan_wccfgetc(fd);
368 }
369
370 /* we're at the start of a number, continue until we hit a non-number */
371 i = 0;
372 _Pragma( "loopbound min 2 max 3" )
373 while (1) {
374 i = (i*10) + (c - '0');
375 c = susan_wccfgetc(fd);
376 if (c==EOFX) return (i);
377 if (c<'0' || c>'9') break;
378 }
379
380 return (i);
381}
382
383
384void susan_get_image( struct wccFILE *fd,
385 unsigned char **in, int *x_size, int *y_size )
386{
387 char header [100];
388
389 susan_wccfseek( fd, 0, WCCSEEK_SET );
390
391 /* {{{ read header */
392
393 header[0]=susan_wccfgetc( fd );
394 header[1]=susan_wccfgetc( fd );
395 if(!(header[0]=='P' && header[1]=='5')) {
396 /* "Image does not have binary PGM header." */
397 }
398
399 *x_size = susan_getint(fd);
400 *y_size = susan_getint(fd);
401 // dummy read
402 susan_getint(fd);
403
404/* }}} */
405
406 *in = (uchar *) susan_wccmalloc(*x_size * *y_size);
407
408 if (susan_wccfread(*in,1,*x_size * *y_size,fd) == 0) {
409 /* "Image is wrong size.\n" */
410 }
411}
412
413
414void susan_put_image( int x_size, int y_size )
415{
416 int i;
417 _Pragma( "loopbound min 7220 max 7220" )
418 for ( i = 0; i < x_size*y_size; i++ ) {
419 ;
420 }
421}
422
423
424void susan_int_to_uchar( char *r, uchar *in, int size )
425{
426 int i, max_r=r[0], min_r=r[0];
427
428 _Pragma( "loopbound min 0 max 0" )
429 for (i=0; i<size; i++) {
430 if ( r[i] > max_r )
431 max_r=r[i];
432 if ( r[i] < min_r )
433 min_r=r[i];
434 }
435
436 if (max_r == min_r) {
437 /* Should not occur in TACLeBench. */
438 _Pragma( "loopbound min 0 max 0" )
439 for (i=0; i<size; i++) {
440 in[i] = (uchar)(0);
441 }
442
443 return;
444 }
445 max_r-=min_r;
446
447 _Pragma( "loopbound min 0 max 0" )
448 for (i=0; i<size; i++) {
449 in[i] = (uchar)((int)((int)(r[i]-min_r)*255)/max_r);
450 }
451}
452
453
454void susan_setup_brightness_lut( uchar **bp, int thresh, int form )
455{
456 int k;
457 float temp;
458
459 *bp=(unsigned char *)susan_wccmalloc(516);
460 *bp=*bp+258;
461
462 _Pragma( "loopbound min 513 max 513" )
463 for(k=-256;k<257;k++) {
464 temp=((float)k)/((float)thresh);
465 temp=temp*temp;
466 if (form==6)
467 temp=temp*temp*temp;
468 temp=100.0*susan_expf(-temp);
469 *(*bp+k)= (uchar)temp;
470 }
471}
472
473
474void susan_principle( uchar *in, char *r, uchar *bp,
475 int max_no, int x_size, int y_size )
476{
477 int i, j, n;
478 uchar *p,*cp;
479
480 susan_wccmemset(r,0,x_size * y_size * sizeof(int));
481
482 _Pragma( "loopbound min 0 max 0" )
483 for (i=3;i<y_size-3;i++) {
484 _Pragma( "loopbound min 0 max 0" )
485 for (j=3;j<x_size-3;j++) {
486 n=100;
487 p=in + (i-3)*x_size + j - 1;
488 cp=bp + in[i*x_size+j];
489
490 n+=*(cp-*p++);
491 n+=*(cp-*p++);
492 n+=*(cp-*p);
493 p+=x_size-3;
494
495 n+=*(cp-*p++);
496 n+=*(cp-*p++);
497 n+=*(cp-*p++);
498 n+=*(cp-*p++);
499 n+=*(cp-*p);
500 p+=x_size-5;
501
502 n+=*(cp-*p++);
503 n+=*(cp-*p++);
504 n+=*(cp-*p++);
505 n+=*(cp-*p++);
506 n+=*(cp-*p++);
507 n+=*(cp-*p++);
508 n+=*(cp-*p);
509 p+=x_size-6;
510
511 n+=*(cp-*p++);
512 n+=*(cp-*p++);
513 n+=*(cp-*p);
514 p+=2;
515 n+=*(cp-*p++);
516 n+=*(cp-*p++);
517 n+=*(cp-*p);
518 p+=x_size-6;
519
520 n+=*(cp-*p++);
521 n+=*(cp-*p++);
522 n+=*(cp-*p++);
523 n+=*(cp-*p++);
524 n+=*(cp-*p++);
525 n+=*(cp-*p++);
526 n+=*(cp-*p);
527 p+=x_size-5;
528
529 n+=*(cp-*p++);
530 n+=*(cp-*p++);
531 n+=*(cp-*p++);
532 n+=*(cp-*p++);
533 n+=*(cp-*p);
534 p+=x_size-3;
535
536 n+=*(cp-*p++);
537 n+=*(cp-*p++);
538 n+=*(cp-*p);
539
540 if (n<=max_no)
541 r[i*x_size+j] = max_no - n;
542 }
543 }
544}
545
546
547void susan_principle_small( uchar *in, char *r, uchar *bp,
548 int max_no, int x_size, int y_size )
549{
550 int i, j, n;
551 uchar *p,*cp;
552
553 susan_wccmemset(r,0,x_size * y_size * sizeof(int));
554
555 _Pragma( "loopbound min 0 max 0" )
556 for (i=1;i<y_size-1;i++) {
557 _Pragma( "loopbound min 0 max 0" )
558 for (j=1;j<x_size-1;j++) {
559 n=100;
560 p=in + (i-1)*x_size + j - 1;
561 cp=bp + in[i*x_size+j];
562
563 n+=*(cp-*p++);
564 n+=*(cp-*p++);
565 n+=*(cp-*p);
566 p+=x_size-2;
567
568 n+=*(cp-*p);
569 p+=2;
570 n+=*(cp-*p);
571 p+=x_size-2;
572
573 n+=*(cp-*p++);
574 n+=*(cp-*p++);
575 n+=*(cp-*p);
576
577 if (n<=max_no)
578 r[i*x_size+j] = max_no - n;
579 }
580 }
581}
582
583
584uchar susan_median( uchar *in, int i, int j, int x_size )
585{
586 int p[8],k,l,tmp;
587
588 p[0]=in[(i-1)*x_size+j-1];
589 p[1]=in[(i-1)*x_size+j ];
590 p[2]=in[(i-1)*x_size+j+1];
591 p[3]=in[(i )*x_size+j-1];
592 p[4]=in[(i )*x_size+j+1];
593 p[5]=in[(i+1)*x_size+j-1];
594 p[6]=in[(i+1)*x_size+j ];
595 p[7]=in[(i+1)*x_size+j+1];
596
597 _Pragma( "loopbound min 0 max 0" )
598 for(k=0; k<7; k++) {
599 _Pragma( "loopbound min 0 max 0" )
600 for(l=0; l<(7-k); l++) {
601 if (p[l]>p[l+1]) {
602 tmp=p[l];
603 p[l]=p[l+1];
604 p[l+1]=tmp;
605 }
606 }
607 }
608
609 return( (p[3]+p[4]) / 2 );
610}
611
612
613/* this enlarges "in" so that borders can be dealt with easily */
614void susan_enlarge( uchar **in, uchar *tmp_image,
615 int *x_size, int *y_size, int border )
616{
617 int i, j;
618
619 _Pragma( "loopbound min 95 max 95" )
620 for(i=0; i<*y_size; i++) { /* copy *in into tmp_image */
621 susan_wccmemcpy( tmp_image+(i+border)*(*x_size+2*border)+border,
622 *in+i* *x_size, *x_size);
623 }
624
625 _Pragma( "loopbound min 7 max 7" )
626 for(i=0; i<border; i++) { /* copy top and bottom rows; invert as many as necessary */
627 susan_wccmemcpy( tmp_image+(border-1-i)*(*x_size+2*border)+border,
628 *in+i* *x_size,*x_size);
629 susan_wccmemcpy( tmp_image+(*y_size+border+i)*(*x_size+2*border)+border,
630 *in+(*y_size-i-1)* *x_size,*x_size);
631 }
632
633 _Pragma( "loopbound min 7 max 7" )
634 for(i=0; i<border; i++) { /* copy left and right columns */
635 _Pragma( "loopbound min 109 max 109" )
636 for(j=0; j<*y_size+2*border; j++) {
637 tmp_image[j*(*x_size+2*border)+border-1-i]=tmp_image[j*(*x_size+2*border)+border+i];
638 tmp_image[j*(*x_size+2*border)+ *x_size+border+i]=tmp_image[j*(*x_size+2*border)+ *x_size+border-1-i];
639 }
640 }
641
642 *x_size+=2*border; /* alter image size */
643 *y_size+=2*border;
644 *in=tmp_image; /* repoint in */
645}
646
647
648void susan_smoothing( int three_by_three, uchar *in, float dt,
649 int x_size, int y_size, uchar *bp )
650{
651 float temp;
652 int n_max, increment, mask_size,
653 i,j,x,y,area,brightness,tmp,centre;
654 uchar *ip, *dp, *dpt, *cp, *out=in,
655 *tmp_image;
656 TOTAL_TYPE total;
657
658 /* {{{ setup larger image and border sizes */
659
660 if (three_by_three==0)
661 mask_size = ((int)(1.5 * dt)) + 1;
662 else
663 mask_size = 1;
664
665 if ( dt>15 ) {
666 /* "Distance_thresh too big for integer arithmetic." */
667 // Either reduce it to <=15 or recompile with variable "total"
668 // as a float: see top "defines" section.
669 }
670
671 if ( (2*mask_size+1>x_size) || (2*mask_size+1>y_size) ) {
672 /* "Mask size too big for image." */
673 }
674
675 tmp_image = (uchar *)susan_wccmalloc( (x_size+mask_size*2) * (y_size+mask_size*2) );
676 susan_enlarge(&in,tmp_image,&x_size,&y_size,mask_size);
677
678 if (three_by_three==0) {
679 /* large Gaussian masks */
680 /* {{{ setup distance lut */
681
682 n_max = (mask_size*2) + 1;
683
684 increment = x_size - n_max;
685
686 dp = (unsigned char *)susan_wccmalloc(n_max*n_max);
687 dpt = dp;
688 temp = -(dt*dt);
689
690 _Pragma( "loopbound min 15 max 15" )
691 for(i=-mask_size; i<=mask_size; i++) {
692 _Pragma( "loopbound min 15 max 15" )
693 for(j=-mask_size; j<=mask_size; j++) {
694 x = (int) (100.0 * susan_expf( ((float)((i*i)+(j*j))) / temp ));
695 *dpt++ = (unsigned char)x;
696 }
697 }
698
699 /* {{{ main section */
700
701 _Pragma( "loopbound min 95 max 95" )
702 for (i=mask_size;i<y_size-mask_size;i++) {
703 _Pragma( "loopbound min 76 max 76" )
704 for (j=mask_size;j<x_size-mask_size;j++) {
705 area = 0;
706 total = 0;
707 dpt = dp;
708 ip = in + ((i-mask_size)*x_size) + j - mask_size;
709 centre = in[i*x_size+j];
710 cp = bp + centre;
711 _Pragma( "loopbound min 15 max 15" )
712 for(y=-mask_size; y<=mask_size; y++) {
713 _Pragma( "loopbound min 15 max 15" )
714 for(x=-mask_size; x<=mask_size; x++) {
715 brightness = *ip++;
716 tmp = *dpt++ * *(cp-brightness);
717 area += tmp;
718 total += tmp * brightness;
719 }
720 ip += increment;
721 }
722 tmp = area-10000;
723 if (tmp==0)
724 *out++=susan_median(in,i,j,x_size);
725 else
726 *out++=((total-(centre*10000))/tmp);
727 }
728 }
729 } else {
730 /* 3x3 constant mask */
731
732 /* {{{ main section */
733
734 _Pragma( "loopbound min 15 max 15" )
735 for (i=1;i<y_size-1;i++) {
736 _Pragma( "loopbound min 15 max 15" )
737 for (j=1;j<x_size-1;j++) {
738 area = 0;
739 total = 0;
740 ip = in + ((i-1)*x_size) + j - 1;
741 centre = in[i*x_size+j];
742 cp = bp + centre;
743
744 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
745 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
746 brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
747 ip += x_size-2;
748 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
749 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
750 brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
751 ip += x_size-2;
752 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
753 brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
754 brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness;
755
756 tmp = area-100;
757 if (tmp==0)
758 *out++=susan_median(in,i,j,x_size);
759 else
760 *out++=(total-(centre*100))/tmp;
761 }
762 }
763 }
764}
765
766
767void susan_edge_draw( uchar *in, uchar *mid,
768 int x_size, int y_size, int drawing_mode )
769{
770 int i;
771 uchar *inp, *midp;
772
773 if (drawing_mode==0) {
774 /* mark 3x3 white block around each edge point */
775 midp=mid;
776 _Pragma( "loopbound min 7220 max 7220" )
777 for (i=0; i<x_size*y_size; i++) {
778 if (*midp<8) {
779 inp = in + (midp - mid) - x_size - 1;
780 *inp++=255; *inp++=255; *inp=255; inp+=x_size-2;
781 *inp++=255; inp++; *inp=255; inp+=x_size-2;
782 *inp++=255; *inp++=255; *inp=255;
783 }
784 midp++;
785 }
786 }
787
788 /* now mark 1 black pixel at each edge point */
789 midp=mid;
790 _Pragma( "loopbound min 7220 max 7220" )
791 for (i=0; i<x_size*y_size; i++) {
792 if (*midp<8)
793 *(in + (midp - mid)) = 0;
794 midp++;
795 }
796}
797
798
799void susan_thin( char *r, uchar *mid, int x_size, int y_size )
800{
801 int l[9], centre,
802 b01, b12, b21, b10,
803 p1, p2, p3, p4,
804 b00, b02, b20, b22,
805 m, n, a, b, x, y, i, j;
806 uchar *mp;
807
808 _Pragma( "loopbound min 87 max 87" )
809 for (i=4;i<y_size-4;i++) {
810 _Pragma( "loopbound min 68 max 68" )
811 for (j=4;j<x_size-4;j++) {
812 if (mid[i*x_size+j]<8) {
813 centre = r[i*x_size+j];
814 /* {{{ count number of neighbours */
815
816 mp=mid + (i-1)*x_size + j-1;
817
818 n = (*mp<8) +
819 (*(mp+1)<8) +
820 (*(mp+2)<8) +
821 (*(mp+x_size)<8) +
822 (*(mp+x_size+2)<8) +
823 (*(mp+x_size+x_size)<8) +
824 (*(mp+x_size+x_size+1)<8) +
825 (*(mp+x_size+x_size+2)<8);
826
827 /* {{{ n==0 no neighbours - remove point */
828
829 if (n==0)
830 mid[i*x_size+j]=100;
831
832 /* {{{ n==1 - extend line if I can */
833
834 /* extension is only allowed a few times - the value of mid is used to control this */
835
836 if ( (n==1) && (mid[i*x_size+j]<6) ) {
837 /* find maximum neighbour weighted in direction opposite the
838 neighbour already present. e.g.
839 have: O O O weight r by 0 2 3
840 X X O 0 0 4
841 O O O 0 2 3 */
842
843 l[0]=r[(i-1)*x_size+j-1]; l[1]=r[(i-1)*x_size+j]; l[2]=r[(i-1)*x_size+j+1];
844 l[3]=r[(i )*x_size+j-1]; l[4]=0; l[5]=r[(i )*x_size+j+1];
845 l[6]=r[(i+1)*x_size+j-1]; l[7]=r[(i+1)*x_size+j]; l[8]=r[(i+1)*x_size+j+1];
846
847 if (mid[(i-1)*x_size+j-1]<8) { l[0]=0; l[1]=0; l[3]=0; l[2]*=2;
848 l[6]*=2; l[5]*=3; l[7]*=3; l[8]*=4; }
849 else { if (mid[(i-1)*x_size+j]<8) { l[1]=0; l[0]=0; l[2]=0; l[3]*=2;
850 l[5]*=2; l[6]*=3; l[8]*=3; l[7]*=4; }
851 else { if (mid[(i-1)*x_size+j+1]<8) { l[2]=0; l[1]=0; l[5]=0; l[0]*=2;
852 l[8]*=2; l[3]*=3; l[7]*=3; l[6]*=4; }
853 else { if (mid[(i)*x_size+j-1]<8) { l[3]=0; l[0]=0; l[6]=0; l[1]*=2;
854 l[7]*=2; l[2]*=3; l[8]*=3; l[5]*=4; }
855 else { if (mid[(i)*x_size+j+1]<8) { l[5]=0; l[2]=0; l[8]=0; l[1]*=2;
856 l[7]*=2; l[0]*=3; l[6]*=3; l[3]*=4; }
857 else { if (mid[(i+1)*x_size+j-1]<8) { l[6]=0; l[3]=0; l[7]=0; l[0]*=2;
858 l[8]*=2; l[1]*=3; l[5]*=3; l[2]*=4; }
859 else { if (mid[(i+1)*x_size+j]<8) { l[7]=0; l[6]=0; l[8]=0; l[3]*=2;
860 l[5]*=2; l[0]*=3; l[2]*=3; l[1]*=4; }
861 else { if (mid[(i+1)*x_size+j+1]<8) { l[8]=0; l[5]=0; l[7]=0; l[6]*=2;
862 l[2]*=2; l[1]*=3; l[3]*=3; l[0]*=4; } }}}}}}}
863
864 m=0; /* find the highest point */
865 _Pragma( "loopbound min 3 max 3" )
866 for(y=0; y<3; y++)
867 _Pragma( "loopbound min 3 max 3" )
868 for(x=0; x<3; x++)
869 if (l[y+y+y+x]>m) { m=l[y+y+y+x]; a=y; b=x; }
870
871 if (m>0) {
872 if (mid[i*x_size+j]<4)
873 mid[(i+a-1)*x_size+j+b-1] = 4;
874 else
875 mid[(i+a-1)*x_size+j+b-1] = mid[i*x_size+j]+1;
876 if ( (a+a+b) < 3 ) { /* need to jump back in image */
877 i+=a-1;
878 j+=b-2;
879 if (i<4) i=4;
880 if (j<4) j=4;
881 }
882 }
883 }
884
885 /* {{{ n==2 */
886
887 if (n==2) {
888 /* put in a bit here to straighten edges */
889 b00 = mid[(i-1)*x_size+j-1]<8; /* corners of 3x3 */
890 b02 = mid[(i-1)*x_size+j+1]<8;
891 b20 = mid[(i+1)*x_size+j-1]<8;
892 b22 = mid[(i+1)*x_size+j+1]<8;
893 if ( ((b00+b02+b20+b22)==2) && ((b00|b22)&(b02|b20))) {
894 /* case: move a point back into line.
895 e.g. X O X CAN become X X X
896 O X O O O O
897 O O O O O O */
898 if (b00) {
899 if (b02) { x=0; y=-1; }
900 else { x=-1; y=0; }
901 } else {
902 if (b02) { x=1; y=0; }
903 else { x=0; y=1; }
904 }
905 if (((float)r[(i+y)*x_size+j+x]/(float)centre) > 0.7) {
906 if ( ( (x==0) && (mid[(i+(2*y))*x_size+j]>7) && (mid[(i+(2*y))*x_size+j-1]>7) && (mid[(i+(2*y))*x_size+j+1]>7) ) ||
907 ( (y==0) && (mid[(i)*x_size+j+(2*x)]>7) && (mid[(i+1)*x_size+j+(2*x)]>7) && (mid[(i-1)*x_size+j+(2*x)]>7) ) ) {
908 mid[(i)*x_size+j]=100;
909 mid[(i+y)*x_size+j+x]=3; /* no jumping needed */
910 }
911 }
912 } else {
913 b01 = mid[(i-1)*x_size+j ]<8;
914 b12 = mid[(i )*x_size+j+1]<8;
915 b21 = mid[(i+1)*x_size+j ]<8;
916 b10 = mid[(i )*x_size+j-1]<8;
917 /* {{{ right angle ends - not currently used */
918
919#ifdef IGNORETHIS
920 if ( (b00&b01)|(b00&b10)|(b02&b01)|(b02&b12)|(b20&b10)|(b20&b21)|(b22&b21)|(b22&b12) ) {
921 /* case; right angle ends. clean up.
922 e.g.; X X O CAN become X X O
923 O X O O O O
924 O O O O O O */
925 if ( ((b01)&(mid[(i-2)*x_size+j-1]>7)&(mid[(i-2)*x_size+j]>7)&(mid[(i-2)*x_size+j+1]>7)&
926 ((b00&((2*r[(i-1)*x_size+j+1])>centre))|(b02&((2*r[(i-1)*x_size+j-1])>centre)))) |
927 ((b10)&(mid[(i-1)*x_size+j-2]>7)&(mid[(i)*x_size+j-2]>7)&(mid[(i+1)*x_size+j-2]>7)&
928 ((b00&((2*r[(i+1)*x_size+j-1])>centre))|(b20&((2*r[(i-1)*x_size+j-1])>centre)))) |
929 ((b12)&(mid[(i-1)*x_size+j+2]>7)&(mid[(i)*x_size+j+2]>7)&(mid[(i+1)*x_size+j+2]>7)&
930 ((b02&((2*r[(i+1)*x_size+j+1])>centre))|(b22&((2*r[(i-1)*x_size+j+1])>centre)))) |
931 ((b21)&(mid[(i+2)*x_size+j-1]>7)&(mid[(i+2)*x_size+j]>7)&(mid[(i+2)*x_size+j+1]>7)&
932 ((b20&((2*r[(i+1)*x_size+j+1])>centre))|(b22&((2*r[(i+1)*x_size+j-1])>centre)))) ) {
933 mid[(i)*x_size+j]=100;
934 if (b10&b20) j-=2;
935 if (b00|b01|b02) { i--; j-=2; }
936 }
937 }
938#endif
939
940 if ( ((b01+b12+b21+b10)==2) && ((b10|b12)&(b01|b21)) &&
941 ((b01&((mid[(i-2)*x_size+j-1]<8)|(mid[(i-2)*x_size+j+1]<8)))|(b10&((mid[(i-1)*x_size+j-2]<8)|(mid[(i+1)*x_size+j-2]<8)))|
942 (b12&((mid[(i-1)*x_size+j+2]<8)|(mid[(i+1)*x_size+j+2]<8)))|(b21&((mid[(i+2)*x_size+j-1]<8)|(mid[(i+2)*x_size+j+1]<8)))) ) {
943 /* case; clears odd right angles.
944 e.g.; O O O becomes O O O
945 X X O X O O
946 O X O O X O */
947 mid[(i)*x_size+j]=100;
948 i--; /* jump back */
949 j-=2;
950 if (i<4) i=4;
951 if (j<4) j=4;
952 }
953 }
954 }
955
956 /* {{{ n>2 the thinning is done here without breaking connectivity */
957
958 if (n>2) {
959 b01 = mid[(i-1)*x_size+j ]<8;
960 b12 = mid[(i )*x_size+j+1]<8;
961 b21 = mid[(i+1)*x_size+j ]<8;
962 b10 = mid[(i )*x_size+j-1]<8;
963 if((b01+b12+b21+b10)>1) {
964 b00 = mid[(i-1)*x_size+j-1]<8;
965 b02 = mid[(i-1)*x_size+j+1]<8;
966 b20 = mid[(i+1)*x_size+j-1]<8;
967 b22 = mid[(i+1)*x_size+j+1]<8;
968 p1 = b00 | b01;
969 p2 = b02 | b12;
970 p3 = b22 | b21;
971 p4 = b20 | b10;
972
973 if( ((p1 + p2 + p3 + p4) - ((b01 & p2)+(b12 & p3)+(b21 & p4)+(b10 & p1))) < 2) {
974 mid[(i)*x_size+j]=100;
975 i--;
976 j-=2;
977 if (i<4) i=4;
978 if (j<4) j=4;
979 }
980 }
981 }
982 }
983 }
984 }
985}
986
987
988void susan_edges( uchar *in, char *r, uchar *mid, uchar *bp,
989 int max_no, int x_size, int y_size )
990{
991 float z;
992 int do_symmetry, i, j, m, n, a, b, x, y, w;
993 uchar c,*p,*cp;
994
995 susan_wccmemset(r,0,x_size * y_size);
996
997 _Pragma( "loopbound min 89 max 89" )
998 for (i=3;i<y_size-3;i++) {
999 _Pragma( "loopbound min 70 max 70" )
1000 for (j=3;j<x_size-3;j++) {
1001 n=100;
1002 p=in + (i-3)*x_size + j - 1;
1003 cp=bp + in[i*x_size+j];
1004
1005 n+=*(cp-*p++);
1006 n+=*(cp-*p++);
1007 n+=*(cp-*p);
1008 p+=x_size-3;
1009
1010 n+=*(cp-*p++);
1011 n+=*(cp-*p++);
1012 n+=*(cp-*p++);
1013 n+=*(cp-*p++);
1014 n+=*(cp-*p);
1015 p+=x_size-5;
1016
1017 n+=*(cp-*p++);
1018 n+=*(cp-*p++);
1019 n+=*(cp-*p++);
1020 n+=*(cp-*p++);
1021 n+=*(cp-*p++);
1022 n+=*(cp-*p++);
1023 n+=*(cp-*p);
1024 p+=x_size-6;
1025
1026 n+=*(cp-*p++);
1027 n+=*(cp-*p++);
1028 n+=*(cp-*p);
1029 p+=2;
1030 n+=*(cp-*p++);
1031 n+=*(cp-*p++);
1032 n+=*(cp-*p);
1033 p+=x_size-6;
1034
1035 n+=*(cp-*p++);
1036 n+=*(cp-*p++);
1037 n+=*(cp-*p++);
1038 n+=*(cp-*p++);
1039 n+=*(cp-*p++);
1040 n+=*(cp-*p++);
1041 n+=*(cp-*p);
1042 p+=x_size-5;
1043
1044 n+=*(cp-*p++);
1045 n+=*(cp-*p++);
1046 n+=*(cp-*p++);
1047 n+=*(cp-*p++);
1048 n+=*(cp-*p);
1049 p+=x_size-3;
1050
1051 n+=*(cp-*p++);
1052 n+=*(cp-*p++);
1053 n+=*(cp-*p);
1054
1055 if (n<=max_no)
1056 r[i*x_size+j] = max_no - n;
1057 }
1058 }
1059
1060 _Pragma( "loopbound min 87 max 87" )
1061 for (i=4;i<y_size-4;i++) {
1062 _Pragma( "loopbound min 68 max 68" )
1063 for (j=4;j<x_size-4;j++) {
1064 if (r[i*x_size+j]>0) {
1065 m=r[i*x_size+j];
1066 n=max_no - m;
1067 cp=bp + in[i*x_size+j];
1068
1069 if (n>600) {
1070 p=in + (i-3)*x_size + j - 1;
1071 x=0;y=0;
1072
1073 c=*(cp-*p++);x-=c;y-=3*c;
1074 c=*(cp-*p++);y-=3*c;
1075 c=*(cp-*p);x+=c;y-=3*c;
1076 p+=x_size-3;
1077
1078 c=*(cp-*p++);x-=2*c;y-=2*c;
1079 c=*(cp-*p++);x-=c;y-=2*c;
1080 c=*(cp-*p++);y-=2*c;
1081 c=*(cp-*p++);x+=c;y-=2*c;
1082 c=*(cp-*p);x+=2*c;y-=2*c;
1083 p+=x_size-5;
1084
1085 c=*(cp-*p++);x-=3*c;y-=c;
1086 c=*(cp-*p++);x-=2*c;y-=c;
1087 c=*(cp-*p++);x-=c;y-=c;
1088 c=*(cp-*p++);y-=c;
1089 c=*(cp-*p++);x+=c;y-=c;
1090 c=*(cp-*p++);x+=2*c;y-=c;
1091 c=*(cp-*p);x+=3*c;y-=c;
1092 p+=x_size-6;
1093
1094 c=*(cp-*p++);x-=3*c;
1095 c=*(cp-*p++);x-=2*c;
1096 c=*(cp-*p);x-=c;
1097 p+=2;
1098 c=*(cp-*p++);x+=c;
1099 c=*(cp-*p++);x+=2*c;
1100 c=*(cp-*p);x+=3*c;
1101 p+=x_size-6;
1102
1103 c=*(cp-*p++);x-=3*c;y+=c;
1104 c=*(cp-*p++);x-=2*c;y+=c;
1105 c=*(cp-*p++);x-=c;y+=c;
1106 c=*(cp-*p++);y+=c;
1107 c=*(cp-*p++);x+=c;y+=c;
1108 c=*(cp-*p++);x+=2*c;y+=c;
1109 c=*(cp-*p);x+=3*c;y+=c;
1110 p+=x_size-5;
1111
1112 c=*(cp-*p++);x-=2*c;y+=2*c;
1113 c=*(cp-*p++);x-=c;y+=2*c;
1114 c=*(cp-*p++);y+=2*c;
1115 c=*(cp-*p++);x+=c;y+=2*c;
1116 c=*(cp-*p);x+=2*c;y+=2*c;
1117 p+=x_size-3;
1118
1119 c=*(cp-*p++);x-=c;y+=3*c;
1120 c=*(cp-*p++);y+=3*c;
1121 c=*(cp-*p);x+=c;y+=3*c;
1122
1123 z = susan_sqrtf((float)((x*x) + (y*y)));
1124 if (z > (0.9*(float)n)) { /* 0.5 */
1125 do_symmetry=0;
1126 if (x==0)
1127 z=1000000.0;
1128 else
1129 z=((float)y) / ((float)x);
1130 if (z < 0) { z=-z; w=-1; }
1131 else w=1;
1132 if (z < 0.5) { /* vert_edge */ a=0; b=1; }
1133 else { if (z > 2.0) { /* hor_edge */ a=1; b=0; }
1134 else { /* diag_edge */ if (w>0) { a=1; b=1; }
1135 else { a=-1; b=1; }}}
1136 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) &&
1137 (m > r[(i+(2*a))*x_size+j+(2*b)]) && (m >= r[(i-(2*a))*x_size+j-(2*b)]) )
1138 mid[i*x_size+j] = 1;
1139 } else {
1140 do_symmetry=1;
1141 }
1142 } else {
1143 do_symmetry=1;
1144 }
1145
1146 if (do_symmetry==1) {
1147 p=in + (i-3)*x_size + j - 1;
1148 x=0; y=0; w=0;
1149
1150 /* | \
1151 y -x- w
1152 | \ */
1153
1154 c=*(cp-*p++);x+=c;y+=9*c;w+=3*c;
1155 c=*(cp-*p++);y+=9*c;
1156 c=*(cp-*p);x+=c;y+=9*c;w-=3*c;
1157 p+=x_size-3;
1158
1159 c=*(cp-*p++);x+=4*c;y+=4*c;w+=4*c;
1160 c=*(cp-*p++);x+=c;y+=4*c;w+=2*c;
1161 c=*(cp-*p++);y+=4*c;
1162 c=*(cp-*p++);x+=c;y+=4*c;w-=2*c;
1163 c=*(cp-*p);x+=4*c;y+=4*c;w-=4*c;
1164 p+=x_size-5;
1165
1166 c=*(cp-*p++);x+=9*c;y+=c;w+=3*c;
1167 c=*(cp-*p++);x+=4*c;y+=c;w+=2*c;
1168 c=*(cp-*p++);x+=c;y+=c;w+=c;
1169 c=*(cp-*p++);y+=c;
1170 c=*(cp-*p++);x+=c;y+=c;w-=c;
1171 c=*(cp-*p++);x+=4*c;y+=c;w-=2*c;
1172 c=*(cp-*p);x+=9*c;y+=c;w-=3*c;
1173 p+=x_size-6;
1174
1175 c=*(cp-*p++);x+=9*c;
1176 c=*(cp-*p++);x+=4*c;
1177 c=*(cp-*p);x+=c;
1178 p+=2;
1179 c=*(cp-*p++);x+=c;
1180 c=*(cp-*p++);x+=4*c;
1181 c=*(cp-*p);x+=9*c;
1182 p+=x_size-6;
1183
1184 c=*(cp-*p++);x+=9*c;y+=c;w-=3*c;
1185 c=*(cp-*p++);x+=4*c;y+=c;w-=2*c;
1186 c=*(cp-*p++);x+=c;y+=c;w-=c;
1187 c=*(cp-*p++);y+=c;
1188 c=*(cp-*p++);x+=c;y+=c;w+=c;
1189 c=*(cp-*p++);x+=4*c;y+=c;w+=2*c;
1190 c=*(cp-*p);x+=9*c;y+=c;w+=3*c;
1191 p+=x_size-5;
1192
1193 c=*(cp-*p++);x+=4*c;y+=4*c;w-=4*c;
1194 c=*(cp-*p++);x+=c;y+=4*c;w-=2*c;
1195 c=*(cp-*p++);y+=4*c;
1196 c=*(cp-*p++);x+=c;y+=4*c;w+=2*c;
1197 c=*(cp-*p);x+=4*c;y+=4*c;w+=4*c;
1198 p+=x_size-3;
1199
1200 c=*(cp-*p++);x+=c;y+=9*c;w-=3*c;
1201 c=*(cp-*p++);y+=9*c;
1202 c=*(cp-*p);x+=c;y+=9*c;w+=3*c;
1203
1204 if (y==0)
1205 z = 1000000.0;
1206 else
1207 z = ((float)x) / ((float)y);
1208 if (z < 0.5) { /* vertical */ a=0; b=1; }
1209 else { if (z > 2.0) { /* horizontal */ a=1; b=0; }
1210 else { /* diagonal */ if (w>0) { a=-1; b=1; }
1211 else { a=1; b=1; }}}
1212 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) &&
1213 (m > r[(i+(2*a))*x_size+j+(2*b)]) && (m >= r[(i-(2*a))*x_size+j-(2*b)]) )
1214 mid[i*x_size+j] = 2;
1215 }
1216 }
1217 }
1218 }
1219}
1220
1221
1222void susan_edges_small( uchar *in, char *r, uchar *mid, uchar *bp,
1223 int max_no, int x_size, int y_size )
1224{
1225 float z;
1226 int do_symmetry, i, j, m, n, a, b, x, y, w;
1227 uchar c,*p,*cp;
1228
1229 susan_wccmemset(r,0,x_size * y_size);
1230
1231 _Pragma( "loopbound min 0 max 0" )
1232 for (i=1;i<y_size-1;i++) {
1233 _Pragma( "loopbound min 0 max 0" )
1234 for (j=1;j<x_size-1;j++) {
1235 n=100;
1236 p=in + (i-1)*x_size + j - 1;
1237 cp=bp + in[i*x_size+j];
1238
1239 n+=*(cp-*p++);
1240 n+=*(cp-*p++);
1241 n+=*(cp-*p);
1242 p+=x_size-2;
1243
1244 n+=*(cp-*p);
1245 p+=2;
1246 n+=*(cp-*p);
1247 p+=x_size-2;
1248
1249 n+=*(cp-*p++);
1250 n+=*(cp-*p++);
1251 n+=*(cp-*p);
1252
1253 if (n<=max_no) {
1254 r[i*x_size+j] = max_no - n;
1255 }
1256 }
1257 }
1258
1259 _Pragma( "loopbound min 0 max 0" )
1260 for (i=2;i<y_size-2;i++) {
1261 _Pragma( "loopbound min 0 max 0" )
1262 for (j=2;j<x_size-2;j++) {
1263 if (r[i*x_size+j]>0) {
1264 m=r[i*x_size+j];
1265 n=max_no - m;
1266 cp=bp + in[i*x_size+j];
1267
1268 if (n>250) {
1269 p=in + (i-1)*x_size + j - 1;
1270 x=0;y=0;
1271
1272 c=*(cp-*p++);x-=c;y-=c;
1273 c=*(cp-*p++);y-=c;
1274 c=*(cp-*p);x+=c;y-=c;
1275 p+=x_size-2;
1276
1277 c=*(cp-*p);x-=c;
1278 p+=2;
1279 c=*(cp-*p);x+=c;
1280 p+=x_size-2;
1281
1282 c=*(cp-*p++);x-=c;y+=c;
1283 c=*(cp-*p++);y+=c;
1284 c=*(cp-*p);x+=c;y+=c;
1285
1286 z = susan_sqrtf((float)((x*x) + (y*y)));
1287 if (z > (0.4*(float)n)) { /* 0.6 */
1288 do_symmetry=0;
1289 if (x==0)
1290 z=1000000.0;
1291 else
1292 z=((float)y) / ((float)x);
1293 if (z < 0) { z=-z; w=-1; }
1294 else w=1;
1295 if (z < 0.5) { /* vert_edge */ a=0; b=1; }
1296 else { if (z > 2.0) { /* hor_edge */ a=1; b=0; }
1297 else { /* diag_edge */ if (w>0) { a=1; b=1; }
1298 else { a=-1; b=1; }
1299 }
1300 }
1301 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) ) {
1302 mid[i*x_size+j] = 1;
1303 }
1304 } else {
1305 do_symmetry=1;
1306 }
1307 } else {
1308 do_symmetry=1;
1309 }
1310
1311 if (do_symmetry==1) {
1312 p=in + (i-1)*x_size + j - 1;
1313 x=0; y=0; w=0;
1314
1315 /* | \
1316 y -x- w
1317 | \ */
1318
1319 c=*(cp-*p++);x+=c;y+=c;w+=c;
1320 c=*(cp-*p++);y+=c;
1321 c=*(cp-*p);x+=c;y+=c;w-=c;
1322 p+=x_size-2;
1323
1324 c=*(cp-*p);x+=c;
1325 p+=2;
1326 c=*(cp-*p);x+=c;
1327 p+=x_size-2;
1328
1329 c=*(cp-*p++);x+=c;y+=c;w-=c;
1330 c=*(cp-*p++);y+=c;
1331 c=*(cp-*p);x+=c;y+=c;w+=c;
1332
1333 if (y==0)
1334 z = 1000000.0;
1335 else
1336 z = ((float)x) / ((float)y);
1337 if (z < 0.5) { /* vertical */ a=0; b=1; }
1338 else { if (z > 2.0) { /* horizontal */ a=1; b=0; }
1339 else { /* diagonal */ if (w>0) { a=-1; b=1; }
1340 else { a=1; b=1; }
1341 }
1342 }
1343 if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) ) {
1344 mid[i*x_size+j] = 2;
1345 }
1346 }
1347 }
1348 }
1349 }
1350}
1351
1352
1353void susan_corner_draw( uchar *in, CORNER_LIST corner_list,
1354 int x_size, int drawing_mode)
1355{
1356 uchar *p;
1357 int n=0;
1358
1359 _Pragma( "loopbound min 0 max 0" )
1360 while(corner_list[n].info != 7) {
1361 if (drawing_mode==0) {
1362 p = in + (corner_list[n].y-1)*x_size + corner_list[n].x - 1;
1363 *p++=255; *p++=255; *p=255; p+=x_size-2;
1364 *p++=255; *p++=0; *p=255; p+=x_size-2;
1365 *p++=255; *p++=255; *p=255;
1366 n++;
1367 } else {
1368 p = in + corner_list[n].y*x_size + corner_list[n].x;
1369 *p=0;
1370 n++;
1371 }
1372 }
1373}
1374
1375
1376void susan_corners( uchar *in, char *r, uchar *bp,
1377 int max_no, CORNER_LIST corner_list, int x_size, int y_size)
1378{
1379 int n,x,y,sq,xx,yy,
1380 i,j;
1381 float divide;
1382 uchar c,*p,*cp;
1383 char *cgx,*cgy;
1384
1385 susan_wccmemset(r,0,x_size * y_size);
1386
1387 cgx=(char *)susan_wccmalloc(x_size*y_size);
1388 cgy=(char *)susan_wccmalloc(x_size*y_size);
1389
1390 _Pragma( "loopbound min 85 max 85" )
1391 for (i=5;i<y_size-5;i++) {
1392 _Pragma( "loopbound min 66 max 66" )
1393 for (j=5;j<x_size-5;j++) {
1394 n=100;
1395 p=in + (i-3)*x_size + j - 1;
1396 cp=bp + in[i*x_size+j];
1397
1398 n+=*(cp-*p++);
1399 n+=*(cp-*p++);
1400 n+=*(cp-*p);
1401 p+=x_size-3;
1402
1403 n+=*(cp-*p++);
1404 n+=*(cp-*p++);
1405 n+=*(cp-*p++);
1406 n+=*(cp-*p++);
1407 n+=*(cp-*p);
1408 p+=x_size-5;
1409
1410 n+=*(cp-*p++);
1411 n+=*(cp-*p++);
1412 n+=*(cp-*p++);
1413 n+=*(cp-*p++);
1414 n+=*(cp-*p++);
1415 n+=*(cp-*p++);
1416 n+=*(cp-*p);
1417 p+=x_size-6;
1418
1419 n+=*(cp-*p++);
1420 n+=*(cp-*p++);
1421 n+=*(cp-*p);
1422 if (n<max_no){ /* do this test early and often ONLY to save wasted computation */
1423 p+=2;
1424 n+=*(cp-*p++);
1425 if (n<max_no){
1426 n+=*(cp-*p++);
1427 if (n<max_no){
1428 n+=*(cp-*p);
1429 if (n<max_no){
1430 p+=x_size-6;
1431
1432 n+=*(cp-*p++);
1433 if (n<max_no){
1434 n+=*(cp-*p++);
1435 if (n<max_no){
1436 n+=*(cp-*p++);
1437 if (n<max_no){
1438 n+=*(cp-*p++);
1439 if (n<max_no){
1440 n+=*(cp-*p++);
1441 if (n<max_no){
1442 n+=*(cp-*p++);
1443 if (n<max_no){
1444 n+=*(cp-*p);
1445 if (n<max_no){
1446 p+=x_size-5;
1447
1448 n+=*(cp-*p++);
1449 if (n<max_no){
1450 n+=*(cp-*p++);
1451 if (n<max_no){
1452 n+=*(cp-*p++);
1453 if (n<max_no){
1454 n+=*(cp-*p++);
1455 if (n<max_no){
1456 n+=*(cp-*p);
1457 if (n<max_no){
1458 p+=x_size-3;
1459
1460 n+=*(cp-*p++);
1461 if (n<max_no){
1462 n+=*(cp-*p++);
1463 if (n<max_no){
1464 n+=*(cp-*p);
1465
1466 if (n<max_no) {
1467 x=0;y=0;
1468 p=in + (i-3)*x_size + j - 1;
1469
1470 c=*(cp-*p++);x-=c;y-=3*c;
1471 c=*(cp-*p++);y-=3*c;
1472 c=*(cp-*p);x+=c;y-=3*c;
1473 p+=x_size-3;
1474
1475 c=*(cp-*p++);x-=2*c;y-=2*c;
1476 c=*(cp-*p++);x-=c;y-=2*c;
1477 c=*(cp-*p++);y-=2*c;
1478 c=*(cp-*p++);x+=c;y-=2*c;
1479 c=*(cp-*p);x+=2*c;y-=2*c;
1480 p+=x_size-5;
1481
1482 c=*(cp-*p++);x-=3*c;y-=c;
1483 c=*(cp-*p++);x-=2*c;y-=c;
1484 c=*(cp-*p++);x-=c;y-=c;
1485 c=*(cp-*p++);y-=c;
1486 c=*(cp-*p++);x+=c;y-=c;
1487 c=*(cp-*p++);x+=2*c;y-=c;
1488 c=*(cp-*p);x+=3*c;y-=c;
1489 p+=x_size-6;
1490
1491 c=*(cp-*p++);x-=3*c;
1492 c=*(cp-*p++);x-=2*c;
1493 c=*(cp-*p);x-=c;
1494 p+=2;
1495 c=*(cp-*p++);x+=c;
1496 c=*(cp-*p++);x+=2*c;
1497 c=*(cp-*p);x+=3*c;
1498 p+=x_size-6;
1499
1500 c=*(cp-*p++);x-=3*c;y+=c;
1501 c=*(cp-*p++);x-=2*c;y+=c;
1502 c=*(cp-*p++);x-=c;y+=c;
1503 c=*(cp-*p++);y+=c;
1504 c=*(cp-*p++);x+=c;y+=c;
1505 c=*(cp-*p++);x+=2*c;y+=c;
1506 c=*(cp-*p);x+=3*c;y+=c;
1507 p+=x_size-5;
1508
1509 c=*(cp-*p++);x-=2*c;y+=2*c;
1510 c=*(cp-*p++);x-=c;y+=2*c;
1511 c=*(cp-*p++);y+=2*c;
1512 c=*(cp-*p++);x+=c;y+=2*c;
1513 c=*(cp-*p);x+=2*c;y+=2*c;
1514 p+=x_size-3;
1515
1516 c=*(cp-*p++);x-=c;y+=3*c;
1517 c=*(cp-*p++);y+=3*c;
1518 c=*(cp-*p);x+=c;y+=3*c;
1519
1520 xx=x*x;
1521 yy=y*y;
1522 sq=xx+yy;
1523 if ( sq > ((n*n)/2) ) {
1524 if(yy<xx) {
1525 divide=(float)y/(float)abs(x);
1526 sq=abs(x)/x;
1527 sq=*(cp-in[(i+FTOI(divide))*x_size+j+sq]) +
1528 *(cp-in[(i+FTOI(2*divide))*x_size+j+2*sq]) +
1529 *(cp-in[(i+FTOI(3*divide))*x_size+j+3*sq]);
1530 } else {
1531 divide=(float)x/(float)abs(y);
1532 sq=abs(y)/y;
1533 sq=*(cp-in[(i+sq)*x_size+j+FTOI(divide)]) +
1534 *(cp-in[(i+2*sq)*x_size+j+FTOI(2*divide)]) +
1535 *(cp-in[(i+3*sq)*x_size+j+FTOI(3*divide)]);
1536 }
1537
1538 if(sq>290){
1539 r[i*x_size+j] = max_no-n;
1540 cgx[i*x_size+j] = (51*x)/n;
1541 cgy[i*x_size+j] = (51*y)/n;
1542 }
1543 }
1544 }
1545 }}}}}}}}}}}}}}}}}}
1546 }
1547 }
1548
1549 /* to locate the local maxima */
1550 n=0;
1551 _Pragma( "loopbound min 85 max 85" )
1552 for (i=5;i<y_size-5;i++) {
1553 _Pragma( "loopbound min 66 max 66" )
1554 for (j=5;j<x_size-5;j++) {
1555 x = r[i*x_size+j];
1556 if (x>0) {
1557 /* 5x5 mask */
1558 #ifdef FIVE_SUPP
1559 if ((x>r[(i-1)*x_size+j+2]) &&
1560 (x>r[(i )*x_size+j+1]) &&
1561 (x>r[(i )*x_size+j+2]) &&
1562 (x>r[(i+1)*x_size+j-1]) &&
1563 (x>r[(i+1)*x_size+j ]) &&
1564 (x>r[(i+1)*x_size+j+1]) &&
1565 (x>r[(i+1)*x_size+j+2]) &&
1566 (x>r[(i+2)*x_size+j-2]) &&
1567 (x>r[(i+2)*x_size+j-1]) &&
1568 (x>r[(i+2)*x_size+j ]) &&
1569 (x>r[(i+2)*x_size+j+1]) &&
1570 (x>r[(i+2)*x_size+j+2]) &&
1571 (x>=r[(i-2)*x_size+j-2]) &&
1572 (x>=r[(i-2)*x_size+j-1]) &&
1573 (x>=r[(i-2)*x_size+j ]) &&
1574 (x>=r[(i-2)*x_size+j+1]) &&
1575 (x>=r[(i-2)*x_size+j+2]) &&
1576 (x>=r[(i-1)*x_size+j-2]) &&
1577 (x>=r[(i-1)*x_size+j-1]) &&
1578 (x>=r[(i-1)*x_size+j ]) &&
1579 (x>=r[(i-1)*x_size+j+1]) &&
1580 (x>=r[(i )*x_size+j-2]) &&
1581 (x>=r[(i )*x_size+j-1]) &&
1582 (x>=r[(i+1)*x_size+j-2]) )
1583 #endif
1584 #ifdef SEVEN_SUPP
1585 if ((x>r[(i-3)*x_size+j-3]) &&
1586 (x>r[(i-3)*x_size+j-2]) &&
1587 (x>r[(i-3)*x_size+j-1]) &&
1588 (x>r[(i-3)*x_size+j ]) &&
1589 (x>r[(i-3)*x_size+j+1]) &&
1590 (x>r[(i-3)*x_size+j+2]) &&
1591 (x>r[(i-3)*x_size+j+3]) &&
1592
1593 (x>r[(i-2)*x_size+j-3]) &&
1594 (x>r[(i-2)*x_size+j-2]) &&
1595 (x>r[(i-2)*x_size+j-1]) &&
1596 (x>r[(i-2)*x_size+j ]) &&
1597 (x>r[(i-2)*x_size+j+1]) &&
1598 (x>r[(i-2)*x_size+j+2]) &&
1599 (x>r[(i-2)*x_size+j+3]) &&
1600
1601 (x>r[(i-1)*x_size+j-3]) &&
1602 (x>r[(i-1)*x_size+j-2]) &&
1603 (x>r[(i-1)*x_size+j-1]) &&
1604 (x>r[(i-1)*x_size+j ]) &&
1605 (x>r[(i-1)*x_size+j+1]) &&
1606 (x>r[(i-1)*x_size+j+2]) &&
1607 (x>r[(i-1)*x_size+j+3]) &&
1608
1609 (x>r[(i)*x_size+j-3]) &&
1610 (x>r[(i)*x_size+j-2]) &&
1611 (x>r[(i)*x_size+j-1]) &&
1612 (x>=r[(i)*x_size+j+1]) &&
1613 (x>=r[(i)*x_size+j+2]) &&
1614 (x>=r[(i)*x_size+j+3]) &&
1615
1616 (x>=r[(i+1)*x_size+j-3]) &&
1617 (x>=r[(i+1)*x_size+j-2]) &&
1618 (x>=r[(i+1)*x_size+j-1]) &&
1619 (x>=r[(i+1)*x_size+j ]) &&
1620 (x>=r[(i+1)*x_size+j+1]) &&
1621 (x>=r[(i+1)*x_size+j+2]) &&
1622 (x>=r[(i+1)*x_size+j+3]) &&
1623
1624 (x>=r[(i+2)*x_size+j-3]) &&
1625 (x>=r[(i+2)*x_size+j-2]) &&
1626 (x>=r[(i+2)*x_size+j-1]) &&
1627 (x>=r[(i+2)*x_size+j ]) &&
1628 (x>=r[(i+2)*x_size+j+1]) &&
1629 (x>=r[(i+2)*x_size+j+2]) &&
1630 (x>=r[(i+2)*x_size+j+3]) &&
1631
1632 (x>=r[(i+3)*x_size+j-3]) &&
1633 (x>=r[(i+3)*x_size+j-2]) &&
1634 (x>=r[(i+3)*x_size+j-1]) &&
1635 (x>=r[(i+3)*x_size+j ]) &&
1636 (x>=r[(i+3)*x_size+j+1]) &&
1637 (x>=r[(i+3)*x_size+j+2]) &&
1638 (x>=r[(i+3)*x_size+j+3]) )
1639 #endif
1640 {
1641 corner_list[n].info=0;
1642 corner_list[n].x=j;
1643 corner_list[n].y=i;
1644 corner_list[n].dx=cgx[i*x_size+j];
1645 corner_list[n].dy=cgy[i*x_size+j];
1646 corner_list[n].I=in[i*x_size+j];
1647 n++;
1648 if(n==MAX_CORNERS){
1649 /* "Too many corners." */
1650 }
1651 }
1652 }
1653 }
1654 }
1655 corner_list[n].info=7;
1656}
1657
1658
1659void susan_corners_quick( uchar *in, char *r, uchar *bp,
1660 int max_no, CORNER_LIST corner_list, int x_size, int y_size )
1661{
1662 int n,x,y,i,j;
1663 uchar *p,*cp;
1664
1665 susan_wccmemset(r,0,x_size * y_size);
1666
1667 _Pragma( "loopbound min 0 max 0" )
1668 for (i=7;i<y_size-7;i++) {
1669 _Pragma( "loopbound min 0 max 0" )
1670 for (j=7;j<x_size-7;j++) {
1671 n=100;
1672 p=in + (i-3)*x_size + j - 1;
1673 cp=bp + in[i*x_size+j];
1674
1675 n+=*(cp-*p++);
1676 n+=*(cp-*p++);
1677 n+=*(cp-*p);
1678 p+=x_size-3;
1679
1680 n+=*(cp-*p++);
1681 n+=*(cp-*p++);
1682 n+=*(cp-*p++);
1683 n+=*(cp-*p++);
1684 n+=*(cp-*p);
1685 p+=x_size-5;
1686
1687 n+=*(cp-*p++);
1688 n+=*(cp-*p++);
1689 n+=*(cp-*p++);
1690 n+=*(cp-*p++);
1691 n+=*(cp-*p++);
1692 n+=*(cp-*p++);
1693 n+=*(cp-*p);
1694 p+=x_size-6;
1695
1696 n+=*(cp-*p++);
1697 n+=*(cp-*p++);
1698 n+=*(cp-*p);
1699 if (n<max_no){
1700 p+=2;
1701 n+=*(cp-*p++);
1702 if (n<max_no){
1703 n+=*(cp-*p++);
1704 if (n<max_no){
1705 n+=*(cp-*p);
1706 if (n<max_no){
1707 p+=x_size-6;
1708
1709 n+=*(cp-*p++);
1710 if (n<max_no){
1711 n+=*(cp-*p++);
1712 if (n<max_no){
1713 n+=*(cp-*p++);
1714 if (n<max_no){
1715 n+=*(cp-*p++);
1716 if (n<max_no){
1717 n+=*(cp-*p++);
1718 if (n<max_no){
1719 n+=*(cp-*p++);
1720 if (n<max_no){
1721 n+=*(cp-*p);
1722 if (n<max_no){
1723 p+=x_size-5;
1724
1725 n+=*(cp-*p++);
1726 if (n<max_no){
1727 n+=*(cp-*p++);
1728 if (n<max_no){
1729 n+=*(cp-*p++);
1730 if (n<max_no){
1731 n+=*(cp-*p++);
1732 if (n<max_no){
1733 n+=*(cp-*p);
1734 if (n<max_no){
1735 p+=x_size-3;
1736
1737 n+=*(cp-*p++);
1738 if (n<max_no){
1739 n+=*(cp-*p++);
1740 if (n<max_no){
1741 n+=*(cp-*p);
1742
1743 if (n<max_no) {
1744 r[i*x_size+j] = max_no-n;
1745 }
1746 }}}}}}}}}}}}}}}}}}
1747 }
1748 }
1749
1750 /* to locate the local maxima */
1751 n=0;
1752 _Pragma( "loopbound min 0 max 0" )
1753 for (i=7;i<y_size-7;i++) {
1754 _Pragma( "loopbound min 0 max 0" )
1755 for (j=7;j<x_size-7;j++) {
1756 x = r[i*x_size+j];
1757 if (x>0) {
1758 /* 5x5 mask */
1759 #ifdef FIVE_SUPP
1760 if ((x>r[(i-1)*x_size+j+2]) &&
1761 (x>r[(i )*x_size+j+1]) &&
1762 (x>r[(i )*x_size+j+2]) &&
1763 (x>r[(i+1)*x_size+j-1]) &&
1764 (x>r[(i+1)*x_size+j ]) &&
1765 (x>r[(i+1)*x_size+j+1]) &&
1766 (x>r[(i+1)*x_size+j+2]) &&
1767 (x>r[(i+2)*x_size+j-2]) &&
1768 (x>r[(i+2)*x_size+j-1]) &&
1769 (x>r[(i+2)*x_size+j ]) &&
1770 (x>r[(i+2)*x_size+j+1]) &&
1771 (x>r[(i+2)*x_size+j+2]) &&
1772 (x>=r[(i-2)*x_size+j-2]) &&
1773 (x>=r[(i-2)*x_size+j-1]) &&
1774 (x>=r[(i-2)*x_size+j ]) &&
1775 (x>=r[(i-2)*x_size+j+1]) &&
1776 (x>=r[(i-2)*x_size+j+2]) &&
1777 (x>=r[(i-1)*x_size+j-2]) &&
1778 (x>=r[(i-1)*x_size+j-1]) &&
1779 (x>=r[(i-1)*x_size+j ]) &&
1780 (x>=r[(i-1)*x_size+j+1]) &&
1781 (x>=r[(i )*x_size+j-2]) &&
1782 (x>=r[(i )*x_size+j-1]) &&
1783 (x>=r[(i+1)*x_size+j-2]) )
1784 #endif
1785 #ifdef SEVEN_SUPP
1786 if ((x>r[(i-3)*x_size+j-3]) &&
1787 (x>r[(i-3)*x_size+j-2]) &&
1788 (x>r[(i-3)*x_size+j-1]) &&
1789 (x>r[(i-3)*x_size+j ]) &&
1790 (x>r[(i-3)*x_size+j+1]) &&
1791 (x>r[(i-3)*x_size+j+2]) &&
1792 (x>r[(i-3)*x_size+j+3]) &&
1793
1794 (x>r[(i-2)*x_size+j-3]) &&
1795 (x>r[(i-2)*x_size+j-2]) &&
1796 (x>r[(i-2)*x_size+j-1]) &&
1797 (x>r[(i-2)*x_size+j ]) &&
1798 (x>r[(i-2)*x_size+j+1]) &&
1799 (x>r[(i-2)*x_size+j+2]) &&
1800 (x>r[(i-2)*x_size+j+3]) &&
1801
1802 (x>r[(i-1)*x_size+j-3]) &&
1803 (x>r[(i-1)*x_size+j-2]) &&
1804 (x>r[(i-1)*x_size+j-1]) &&
1805 (x>r[(i-1)*x_size+j ]) &&
1806 (x>r[(i-1)*x_size+j+1]) &&
1807 (x>r[(i-1)*x_size+j+2]) &&
1808 (x>r[(i-1)*x_size+j+3]) &&
1809
1810 (x>r[(i)*x_size+j-3]) &&
1811 (x>r[(i)*x_size+j-2]) &&
1812 (x>r[(i)*x_size+j-1]) &&
1813 (x>=r[(i)*x_size+j+1]) &&
1814 (x>=r[(i)*x_size+j+2]) &&
1815 (x>=r[(i)*x_size+j+3]) &&
1816
1817 (x>=r[(i+1)*x_size+j-3]) &&
1818 (x>=r[(i+1)*x_size+j-2]) &&
1819 (x>=r[(i+1)*x_size+j-1]) &&
1820 (x>=r[(i+1)*x_size+j ]) &&
1821 (x>=r[(i+1)*x_size+j+1]) &&
1822 (x>=r[(i+1)*x_size+j+2]) &&
1823 (x>=r[(i+1)*x_size+j+3]) &&
1824
1825 (x>=r[(i+2)*x_size+j-3]) &&
1826 (x>=r[(i+2)*x_size+j-2]) &&
1827 (x>=r[(i+2)*x_size+j-1]) &&
1828 (x>=r[(i+2)*x_size+j ]) &&
1829 (x>=r[(i+2)*x_size+j+1]) &&
1830 (x>=r[(i+2)*x_size+j+2]) &&
1831 (x>=r[(i+2)*x_size+j+3]) &&
1832
1833 (x>=r[(i+3)*x_size+j-3]) &&
1834 (x>=r[(i+3)*x_size+j-2]) &&
1835 (x>=r[(i+3)*x_size+j-1]) &&
1836 (x>=r[(i+3)*x_size+j ]) &&
1837 (x>=r[(i+3)*x_size+j+1]) &&
1838 (x>=r[(i+3)*x_size+j+2]) &&
1839 (x>=r[(i+3)*x_size+j+3]) )
1840 #endif
1841 {
1842 corner_list[n].info=0;
1843 corner_list[n].x=j;
1844 corner_list[n].y=i;
1845 x = in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2] +
1846 in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2] +
1847 in[(i )*x_size+j-2] + in[(i )*x_size+j-1] + in[(i )*x_size+j] + in[(i )*x_size+j+1] + in[(i )*x_size+j+2] +
1848 in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] +
1849 in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2];
1850
1851 corner_list[n].I=x/25;
1852 /*corner_list[n].I=in[i*x_size+j];*/
1853 x = in[(i-2)*x_size+j+2] + in[(i-1)*x_size+j+2] + in[(i)*x_size+j+2] + in[(i+1)*x_size+j+2] + in[(i+2)*x_size+j+2] -
1854 (in[(i-2)*x_size+j-2] + in[(i-1)*x_size+j-2] + in[(i)*x_size+j-2] + in[(i+1)*x_size+j-2] + in[(i+2)*x_size+j-2]);
1855 x += x + in[(i-2)*x_size+j+1] + in[(i-1)*x_size+j+1] + in[(i)*x_size+j+1] + in[(i+1)*x_size+j+1] + in[(i+2)*x_size+j+1] -
1856 (in[(i-2)*x_size+j-1] + in[(i-1)*x_size+j-1] + in[(i)*x_size+j-1] + in[(i+1)*x_size+j-1] + in[(i+2)*x_size+j-1]);
1857
1858 y = in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2] -
1859 (in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2]);
1860 y += y + in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] -
1861 (in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2]);
1862 corner_list[n].dx=x/15;
1863 corner_list[n].dy=y/15;
1864 n++;
1865 if(n==MAX_CORNERS){
1866 /* "Too many corners." */
1867 }
1868 }
1869 }
1870 }
1871 }
1872 corner_list[n].info=7;
1873}
1874
1875
1876void susan_call_susan( struct wccFILE *inputFile, int mode )
1877{
1878 uchar *in, *bp, *mid;
1879 int x_size, y_size;
1880 char *r;
1881 CORNER_LIST corner_list;
1882
1883 susan_get_image( inputFile, &in, &x_size, &y_size );
1884
1885 if (susan_dt<0) susan_three_by_three=1;
1886 if ( (susan_principle_conf==1) && (mode==0) )
1887 mode=1;
1888
1889 switch (mode) {
1890 case 0:
1891 /* {{{ smoothing */
1892
1893 susan_setup_brightness_lut(&bp,susan_bt,2);
1894 susan_smoothing(susan_three_by_three,in,susan_dt,x_size,y_size,bp);
1895
1896 break;
1897 case 1:
1898 /* {{{ edges */
1899
1900 r = (char *) susan_wccmalloc(x_size * y_size);
1901 susan_setup_brightness_lut(&bp,susan_bt,6);
1902
1903 if (susan_principle_conf) {
1904 if (susan_three_by_three)
1905 susan_principle_small(in,r,bp,susan_max_no_edges,x_size,y_size);
1906 else
1907 susan_principle(in,r,bp,susan_max_no_edges,x_size,y_size);
1908 susan_int_to_uchar(r,in,x_size*y_size);
1909 } else {
1910 mid = (uchar *)susan_wccmalloc(x_size*y_size);
1911 susan_wccmemset(mid,100,x_size * y_size); /* note not set to zero */
1912
1913 if (susan_three_by_three)
1914 susan_edges_small(in,r,mid,bp,susan_max_no_edges,x_size,y_size);
1915 else
1916 susan_edges(in,r,mid,bp,susan_max_no_edges,x_size,y_size);
1917 if(susan_thin_post_proc)
1918 susan_thin(r,mid,x_size,y_size);
1919 susan_edge_draw(in,mid,x_size,y_size,susan_drawing_mode);
1920 }
1921
1922 break;
1923 case 2:
1924 /* {{{ corners */
1925
1926 r = (char *) susan_wccmalloc(x_size * y_size);
1927 susan_setup_brightness_lut(&bp,susan_bt,6);
1928
1929 if (susan_principle_conf) {
1930 susan_principle(in,r,bp,susan_max_no_corners,x_size,y_size);
1931 susan_int_to_uchar(r,in,x_size*y_size);
1932 } else {
1933 if(susan_susan_quick)
1934 susan_corners_quick(in,r,bp,susan_max_no_corners,corner_list,x_size,y_size);
1935 else
1936 susan_corners(in,r,bp,susan_max_no_corners,corner_list,x_size,y_size);
1937 susan_corner_draw(in,corner_list,x_size,susan_drawing_mode);
1938 }
1939
1940 break;
1941 }
1942
1943 susan_put_image(x_size,y_size);
1944}
1945
1946void susan_init( void )
1947{
1948 volatile int a = 0;
1949 susan_file.data = susan_input;
1950 susan_file.size = 7292;
1951 susan_file.size += a;
1952 susan_file.cur_pos = 0;
1953 susan_file.cur_pos += a;
1954
1955 susan_dt = 4.0;
1956 susan_dt += a;
1957 susan_bt = 20;
1958 susan_bt += a;
1959 susan_principle_conf = 0;
1960 susan_principle_conf += a;
1961 susan_thin_post_proc = 1;
1962 susan_thin_post_proc += a;
1963 susan_three_by_three = 0;
1964 susan_three_by_three += a;
1965 susan_drawing_mode = 0;
1966 susan_drawing_mode += a;
1967 susan_susan_quick = 0;
1968 susan_susan_quick += a;
1969 susan_max_no_corners = 50;
1970 susan_max_no_corners += a;
1971 susan_max_no_edges = 50;
1972 susan_max_no_edges += a;
1973
1974 // mode=0; /* Smoothing mode */
1975 // mode=1; /* Edges mode */
1976 // mode=2; /* Corners mode */
1977
1978 // principle=1; /* Output initial enhancement image only; corners or edges mode (default is edges mode) */
1979 // thin_post_proc=0; /* No post-processing on the binary edge map (runs much faster); edges mode */
1980 // drawing_mode=1; /* Mark corners/edges with single black points instead of black with white border; corners or edges mode */
1981 // three_by_three=1; /* Use flat 3x3 mask, edges or smoothing mode */
1982 // susan_quick=1; /* Use faster (and usually stabler) corner mode; edge-like corner suppression not carried out; corners mode */
1983 // dt=10.0; /* Distance threshold, smoothing mode, (default=4) */
1984 // bt=50; /* Brightness threshold, all modes, (default=20) */
1985}
1986
1987void susan_main( void )
1988{
1989 susan_call_susan( &susan_file, 0 );
1990 susan_wccfreeall();
1991 susan_call_susan( &susan_file, 1 );
1992 susan_wccfreeall();
1993 susan_call_susan( &susan_file, 2 );
1994 susan_wccfreeall();
1995}
1996
1997int susan_return( void )
1998{
1999 return 0;
2000}
2001
2002int main( int argc, char **argv )
2003{
2004 SET_UP
2005 for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
2006 START_LOOP
2007 susan_init();
2008 susan_main();
2009 STOP_LOOP
2010 }
2011 WRITE_TO_FILE
2012
2013 return susan_return();
2014}
diff --git a/baseline/source/susan/wccfile.c b/baseline/source/susan/wccfile.c
new file mode 100644
index 0000000..42db3db
--- /dev/null
+++ b/baseline/source/susan/wccfile.c
@@ -0,0 +1,79 @@
1#include "wccfile.h"
2#define EOFX -1
3
4size_x susan_wccfread(void* ptr, size_x size, size_x count, struct wccFILE* stream)
5{
6 if ( susan_wccfeof( stream ) ) {
7 return EOFX;
8 }
9
10 unsigned i = stream->cur_pos, i2 = 0;
11 size_x number_of_chars_to_read =
12 stream->size - stream->cur_pos >= size * count ?
13 size * count : stream->size - stream->cur_pos;
14 _Pragma( "loopbound min 7220 max 7220" )
15 while (i < stream->cur_pos + number_of_chars_to_read) {
16 ((unsigned char*)ptr)[i2++] = stream->data[i++];
17 }
18 stream->cur_pos += number_of_chars_to_read;
19 return number_of_chars_to_read;
20}
21
22int susan_wccfgetc(struct wccFILE *stream)
23{
24 if ( susan_wccfeof( stream ) ) {
25 return EOFX;
26 } else {
27 return stream->data[stream->cur_pos++];
28 }
29}
30
31char *susan_wccfgets(char *str, int num, struct wccFILE *stream )
32{
33 if ( !stream || susan_wccfeof( stream ) || !str || num <= 0 ) {
34 return 0;
35 }
36
37 int pos = 0;
38 _Pragma( "loopbound min 58 max 58" )
39 while ( pos < num - 1 && !susan_wccfeof( stream ) ) {
40 str[pos] = stream->data[stream->cur_pos];
41 if ( str[pos] == '\n' ) {
42 break;
43 }
44
45 stream->cur_pos++;
46 pos++;
47 }
48 str[pos++] = '\0';
49
50 return str;
51}
52
53int susan_wccfseek(struct wccFILE* stream, long int offset, enum _Origin_ origin)
54{
55 if (origin == WCCSEEK_SET) {
56 stream->cur_pos = offset;
57 return 0;
58 } else if (origin == WCCSEEK_CUR) {
59 stream->cur_pos += offset;
60 return 0;
61 } else if (origin == WCCSEEK_END) {
62 stream->cur_pos = stream->size + offset;
63 return 0;
64 }
65 return -1;
66}
67
68
69int susan_wccfgetpos(struct wccFILE* stream, unsigned* position)
70{
71 *position = stream->cur_pos;
72 return 0;
73}
74
75
76int susan_wccfeof(struct wccFILE* stream)
77{
78 return stream->cur_pos == stream->size ? 1 : 0;
79}
diff --git a/baseline/source/susan/wccfile.h b/baseline/source/susan/wccfile.h
new file mode 100644
index 0000000..9314361
--- /dev/null
+++ b/baseline/source/susan/wccfile.h
@@ -0,0 +1,24 @@
1#ifndef WCC_FILE_H
2#define WCC_FILE_H
3
4enum _Origin_ { WCCSEEK_SET, WCCSEEK_CUR, WCCSEEK_END };
5typedef enum _Origin_ Origin;
6typedef unsigned int size_x;
7
8#define EOFX -1
9
10struct wccFILE {
11 char* data;
12 size_x size;
13 unsigned cur_pos;
14};
15
16size_x susan_wccfread (void* ptr, size_x size, size_x count, struct wccFILE* stream);
17int susan_wccfseek (struct wccFILE* stream, long int offset, Origin origin);
18int susan_wccfgetpos (struct wccFILE* stream, unsigned* position);
19int susan_wccfeof (struct wccFILE* stream);
20int susan_wccfgetc (struct wccFILE *stream);
21char *susan_wccfgets (char *str, int num, struct wccFILE *stream );
22
23#endif
24
diff --git a/baseline/source/susan/wcclibm.c b/baseline/source/susan/wcclibm.c
new file mode 100644
index 0000000..bca8907
--- /dev/null
+++ b/baseline/source/susan/wcclibm.c
@@ -0,0 +1,444 @@
1#include "math_private.h"
2#include "wcclibm.h"
3
4
5
6/* e_rem_pio2f.c -- float version of e_rem_pio2.c
7 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
8 */
9
10/*
11 * ====================================================
12 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
13 *
14 * Developed at SunPro, a Sun Microsystems, Inc. business.
15 * Permission to use, copy, modify, and distribute this
16 * software is freely granted, provided that this notice
17 * is preserved.
18 * ====================================================
19 */
20
21#if defined(LIBM_SCCS) && !defined(lint)
22static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $";
23#endif
24
25/* __ieee754_rem_pio2f(x,y)
26 *
27 * return the remainder of x rem pi/2 in y[0]+y[1]
28 * use __kernel_rem_pio2f()
29 */
30
31/* This array is like the one in e_rem_pio2.c, but the numbers are
32 single precision and the last 8 bits are forced to 0. */
33static const int32_t susan_npio2_hw[] = {
340x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00,
350x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00,
360x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100,
370x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00,
380x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00,
390x4242c700, 0x42490f00
40};
41
42/*
43 * invpio2: 24 bits of 2/pi
44 * pio2_1: first 17 bit of pi/2
45 * pio2_1t: pi/2 - pio2_1
46 * pio2_2: second 17 bit of pi/2
47 * pio2_2t: pi/2 - (pio2_1+pio2_2)
48 * pio2_3: third 17 bit of pi/2
49 * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
50 */
51
52static const float
53/* zero = 0.0000000000e+00f, /\* 0x00000000 *\/ */
54/* half = 5.0000000000e-01f, /\* 0x3f000000 *\/ */
55/* two8 = 2.5600000000e+02f, /\* 0x43800000 *\/ */
56susan_invpio2 = 6.3661980629e-01f, /* 0x3f22f984 */
57susan_pio2_1 = 1.5707855225e+00f, /* 0x3fc90f80 */
58susan_pio2_1t = 1.0804334124e-05f, /* 0x37354443 */
59susan_pio2_2 = 1.0804273188e-05f, /* 0x37354400 */
60susan_pio2_2t = 6.0770999344e-11f, /* 0x2e85a308 */
61susan_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */
62susan_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */
63
64int32_t susan___ieee754_rem_pio2f(float x, float *y)
65{
66 float z,w,t,r,fn;
67 int32_t i,j,n,ix,hx;
68
69 GET_FLOAT_WORD(hx,x);
70 ix = hx&0x7fffffff;
71 if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */
72 {y[0] = x; y[1] = 0; return 0;}
73 if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */
74 if(hx>0) {
75 z = x - susan_pio2_1;
76 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
77 y[0] = z - susan_pio2_1t;
78 y[1] = (z-y[0])-susan_pio2_1t;
79 } else { /* near pi/2, use 24+24+24 bit pi */
80 z -= susan_pio2_2;
81 y[0] = z - susan_pio2_2t;
82 y[1] = (z-y[0])-susan_pio2_2t;
83 }
84 return 1;
85 } else { /* negative x */
86 z = x + susan_pio2_1;
87 if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */
88 y[0] = z + susan_pio2_1t;
89 y[1] = (z-y[0])+susan_pio2_1t;
90 } else { /* near pi/2, use 24+24+24 bit pi */
91 z += susan_pio2_2;
92 y[0] = z + susan_pio2_2t;
93 y[1] = (z-y[0])+susan_pio2_2t;
94 }
95 return -1;
96 }
97 }
98 if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */
99 t = fabsf(x);
100 n = (int32_t) (t*susan_invpio2+susan_half);
101 fn = (float)n;
102 r = t-fn*susan_pio2_1;
103 w = fn*susan_pio2_1t; /* 1st round good to 40 bit */
104 if(n<32&&(int32_t)(ix&0xffffff00)!=susan_npio2_hw[n-1]) {
105 y[0] = r-w; /* quick check no cancellation */
106 } else {
107 u_int32_t high;
108 j = ix>>23;
109 y[0] = r-w;
110 GET_FLOAT_WORD(high,y[0]);
111 i = j-((high>>23)&0xff);
112 if(i>8) { /* 2nd iteration needed, good to 57 */
113 t = r;
114 w = fn*susan_pio2_2;
115 r = t-w;
116 w = fn*susan_pio2_2t-((t-r)-w);
117 y[0] = r-w;
118 GET_FLOAT_WORD(high,y[0]);
119 i = j-((high>>23)&0xff);
120 if(i>25) { /* 3rd iteration need, 74 bits acc */
121 t = r; /* will cover all possible cases */
122 w = fn*susan_pio2_3;
123 r = t-w;
124 w = fn*susan_pio2_3t-((t-r)-w);
125 y[0] = r-w;
126 }
127 }
128 }
129 y[1] = (r-y[0])-w;
130 if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
131 else return n;
132 }
133 /*
134 * all other (large) arguments
135 */
136 if(ix>=0x7f800000) { /* x is inf or NaN */
137 y[0]=y[1]=x-x; return 0;
138 }
139
140 y[0]=y[1]=x-x; return 0; /* dummy initialisation */
141 return 0; /* doesn't happen for our input */
142}
143
144/* k_cosf.c -- float version of k_cos.c
145 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
146 */
147
148/*
149 * ====================================================
150 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
151 *
152 * Developed at SunPro, a Sun Microsystems, Inc. business.
153 * Permission to use, copy, modify, and distribute this
154 * software is freely granted, provided that this notice
155 * is preserved.
156 * ====================================================
157 */
158
159#if defined(LIBM_SCCS) && !defined(lint)
160static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $";
161#endif
162
163
164static const float
165/* one = 1.0000000000e+00, /\* 0x3f800000 *\/ */
166susan_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */
167susan_C2 = -1.3888889225e-03f, /* 0xbab60b61 */
168susan_C3 = 2.4801587642e-05f, /* 0x37d00d01 */
169susan_C4 = -2.7557314297e-07f, /* 0xb493f27c */
170susan_C5 = 2.0875723372e-09f, /* 0x310f74f6 */
171susan_C6 = -1.1359647598e-11f; /* 0xad47d74e */
172
173float susan___kernel_cosf(float x, float y)
174{
175 float a,hz,z,r,qx;
176 int32_t ix;
177 GET_FLOAT_WORD(ix,x);
178 ix &= 0x7fffffff; /* ix = |x|'s high word*/
179 if(ix<0x32000000) { /* if x < 2**27 */
180 if(((int)x)==0) return susan_one; /* generate inexact */
181 }
182 z = x*x;
183 r = z*(susan_C1+z*(susan_C2+z*(susan_C3+z*(susan_C4+z*(susan_C5+z*susan_C6)))));
184 if(ix < 0x3e99999a) /* if |x| < 0.3 */
185 return susan_one - ((float)0.5f*z - (z*r - x*y));
186 else {
187 if(ix > 0x3f480000) { /* x > 0.78125 */
188 qx = (float)0.28125f;
189 } else {
190 SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */
191 }
192 hz = (float)0.5f*z-qx;
193 a = susan_one-qx;
194 return a - (hz - (z*r-x*y));
195 }
196}
197
198/* k_sinf.c -- float version of k_sin.c
199 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
200 */
201
202/*
203 * ====================================================
204 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
205 *
206 * Developed at SunPro, a Sun Microsystems, Inc. business.
207 * Permission to use, copy, modify, and distribute this
208 * software is freely granted, provided that this notice
209 * is preserved.
210 * ====================================================
211 */
212
213#if defined(LIBM_SCCS) && !defined(lint)
214static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $";
215#endif
216
217
218static const float
219/* half = 5.0000000000e-01f,/\* 0x3f000000 *\/ */
220susan_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */
221susan_S2 = 8.3333337680e-03f, /* 0x3c088889 */
222susan_S3 = -1.9841270114e-04f, /* 0xb9500d01 */
223susan_S4 = 2.7557314297e-06f, /* 0x3638ef1b */
224susan_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */
225susan_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */
226
227float susan___kernel_sinf(float x, float y, int iy)
228{
229 float z,r,v;
230 int32_t ix;
231 GET_FLOAT_WORD(ix,x);
232 ix &= 0x7fffffff; /* high word of x */
233 if(ix<0x32000000) /* |x| < 2**-27 */
234 {if((int)x==0) return x;} /* generate inexact */
235 z = x*x;
236 v = z*x;
237 r = susan_S2+z*(susan_S3+z*(susan_S4+z*(susan_S5+z*susan_S6)));
238 if(iy==0) return x+v*(susan_S1+z*r);
239 else return x-((z*(susan_half*y-v*r)-y)-v*susan_S1);
240}
241/* s_atanf.c -- float version of s_atan.c.
242 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
243 */
244
245/*
246 * ====================================================
247 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
248 *
249 * Developed at SunPro, a Sun Microsystems, Inc. business.
250 * Permission to use, copy, modify, and distribute this
251 * software is freely granted, provided that this notice
252 * is preserved.
253 * ====================================================
254 */
255
256#if defined(LIBM_SCCS) && !defined(lint)
257static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $";
258#endif
259
260
261static const float susan_atanhi[] = {
262 4.6364760399e-01f, /* atan(0.5)hi 0x3eed6338 */
263 7.8539812565e-01f, /* atan(1.0)hi 0x3f490fda */
264 9.8279368877e-01f, /* atan(1.5)hi 0x3f7b985e */
265 1.5707962513e+00f, /* atan(inf)hi 0x3fc90fda */
266};
267
268static const float susan_atanlo[] = {
269 5.0121582440e-09f, /* atan(0.5)lo 0x31ac3769 */
270 3.7748947079e-08f, /* atan(1.0)lo 0x33222168 */
271 3.4473217170e-08f, /* atan(1.5)lo 0x33140fb4 */
272 7.5497894159e-08f, /* atan(inf)lo 0x33a22168 */
273};
274
275static const float susan_aT[] = {
276 3.3333334327e-01f, /* 0x3eaaaaaa */
277 -2.0000000298e-01f, /* 0xbe4ccccd */
278 1.4285714924e-01f, /* 0x3e124925 */
279 -1.1111110449e-01f, /* 0xbde38e38 */
280 9.0908870101e-02f, /* 0x3dba2e6e */
281 -7.6918758452e-02f, /* 0xbd9d8795 */
282 6.6610731184e-02f, /* 0x3d886b35 */
283 -5.8335702866e-02f, /* 0xbd6ef16b */
284 4.9768779427e-02f, /* 0x3d4bda59 */
285 -3.6531571299e-02f, /* 0xbd15a221 */
286 1.6285819933e-02f, /* 0x3c8569d7 */
287};
288
289float susan___atanf(float x)
290{
291 float w,s1,s2,z;
292 int32_t ix,hx,id;
293
294 GET_FLOAT_WORD(hx,x);
295 ix = hx&0x7fffffff;
296 if(ix>=0x50800000) { /* if |x| >= 2^34 */
297 if(ix>0x7f800000)
298 return x+x; /* NaN */
299 if(hx>0) return susan_atanhi[3]+susan_atanlo[3];
300 else return -susan_atanhi[3]-susan_atanlo[3];
301 } if (ix < 0x3ee00000) { /* |x| < 0.4375 */
302 if (ix < 0x31000000) { /* |x| < 2^-29 */
303 if(susan_huge+x>susan_one) return x; /* raise inexact */
304 }
305 id = -1;
306 } else {
307 x = fabsf(x);
308 if (ix < 0x3f980000) { /* |x| < 1.1875 */
309 if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */
310 id = 0; x = ((float)2.0f*x-susan_one)/((float)2.0f+x);
311 } else { /* 11/16<=|x|< 19/16 */
312 id = 1; x = (x-susan_one)/(x+susan_one);
313 }
314 } else {
315 if (ix < 0x401c0000) { /* |x| < 2.4375 */
316 id = 2; x = (x-(float)1.5f)/(susan_one+(float)1.5f*x);
317 } else { /* 2.4375 <= |x| < 2^66 */
318 id = 3; x = -(float)1.0f/x;
319 }
320 }}
321 /* end of argument reduction */
322 z = x*x;
323 w = z*z;
324 /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
325 s1 = z*(susan_aT[0]+w*(susan_aT[2]+w*(susan_aT[4]+w*(susan_aT[6]+w*(susan_aT[8]+w*susan_aT[10])))));
326 s2 = w*(susan_aT[1]+w*(susan_aT[3]+w*(susan_aT[5]+w*(susan_aT[7]+w*susan_aT[9]))));
327 if (id<0) return x - x*(s1+s2);
328 else {
329 z = susan_atanhi[id] - ((x*(s1+s2) - susan_atanlo[id]) - x);
330 return (hx<0)? -z:z;
331 }
332}
333
334/* s_cosf.c -- float version of s_cos.c.
335 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
336 */
337
338/*
339 * ====================================================
340 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
341 *
342 * Developed at SunPro, a Sun Microsystems, Inc. business.
343 * Permission to use, copy, modify, and distribute this
344 * software is freely granted, provided that this notice
345 * is preserved.
346 * ====================================================
347 */
348
349float susan___cosf(float x)
350{
351 float y[2],z=0.0f;
352 int32_t n,ix;
353
354 GET_FLOAT_WORD(ix,x);
355
356 /* |x| ~< pi/4 */
357 ix &= 0x7fffffff;
358 if(ix <= 0x3f490fd8) return susan___kernel_cosf(x,z);
359
360 /* cos(Inf or NaN) is NaN */
361 else if (ix>=0x7f800000) return x-x;
362
363 /* argument reduction needed */
364 else {
365 n = susan___ieee754_rem_pio2f(x,y);
366 switch(n&3) {
367 case 0: return susan___kernel_cosf(y[0],y[1]);
368 case 1: return -susan___kernel_sinf(y[0],y[1],1);
369 case 2: return -susan___kernel_cosf(y[0],y[1]);
370 default:
371 return susan___kernel_sinf(y[0],y[1],1);
372 }
373 }
374}
375
376/* s_sinf.c -- float version of s_sin.c.
377 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
378 */
379
380/*
381 * ====================================================
382 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
383 *
384 * Developed at SunPro, a Sun Microsystems, Inc. business.
385 * Permission to use, copy, modify, and distribute this
386 * software is freely granted, provided that this notice
387 * is preserved.
388 * ====================================================
389 */
390
391float susan___sinf(float x)
392{
393 float y[2],z=0.0;
394 int32_t n, ix;
395
396 GET_FLOAT_WORD(ix,x);
397
398 /* |x| ~< pi/4 */
399 ix &= 0x7fffffff;
400 if(ix <= 0x3f490fd8) return susan___kernel_sinf(x,z,0);
401
402 /* sin(Inf or NaN) is NaN */
403 else if (ix>=0x7f800000) return x-x;
404
405 /* argument reduction needed */
406 else {
407 n = susan___ieee754_rem_pio2f(x,y);
408 switch(n&3) {
409 case 0: return susan___kernel_sinf(y[0],y[1],1);
410 case 1: return susan___kernel_cosf(y[0],y[1]);
411 case 2: return -susan___kernel_sinf(y[0],y[1],1);
412 default:
413 return -susan___kernel_cosf(y[0],y[1]);
414 }
415 }
416}
417
418/* s_fabsf.c -- float version of s_fabs.c.
419 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
420 */
421
422/*
423 * ====================================================
424 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
425 *
426 * Developed at SunPro, a Sun Microsystems, Inc. business.
427 * Permission to use, copy, modify, and distribute this
428 * software is freely granted, provided that this notice
429 * is preserved.
430 * ====================================================
431 */
432
433/*
434 * fabsf(x) returns the absolute value of x.
435 */
436
437
438float susan___fabsf(float x)
439{
440 u_int32_t ix;
441 GET_FLOAT_WORD(ix,x);
442 SET_FLOAT_WORD(x,ix&0x7fffffff);
443 return x;
444}
diff --git a/baseline/source/susan/wcclibm.h b/baseline/source/susan/wcclibm.h
new file mode 100644
index 0000000..bcf4c65
--- /dev/null
+++ b/baseline/source/susan/wcclibm.h
@@ -0,0 +1,53 @@
1#ifndef _WCCLIBM
2#define _WCCLIBM
3
4#define int32_t int
5#define uint32_t unsigned int
6#define u_int16_t unsigned short
7#define u_int32_t unsigned int
8
9// Often used variables/consts
10#ifdef __STDC__
11static const float
12#else
13static float
14#endif
15susan_one = 1.0f,
16susan_half = 5.0000000000e-01f, /* 0x3f000000 */
17susan_zero = 0.0f,
18susan_huge = 1.0e30,
19susan_two8 = 2.5600000000e+02f, /* 0x43800000 */
20susan_twon8 = 3.9062500000e-03f; /* 0x3b800000 */
21
22// The following defines map the math functions to specialized calls
23#define acos susan___ieee754_acosf
24#define atan susan___atanf
25#define cos susan___cosf
26#define fabs susan___fabsf
27#define fabsf susan___fabsf
28#define isinf susan___isinff
29#define pow susan___ieee754_powf
30#define sqrt susan___ieee754_sqrtf
31#define log10 susan___ieee754_log10f
32#define log susan___ieee754_logf
33#define sin susan___sinf
34
35float susan___atanf(float x);
36float susan___copysignf(float x, float y);
37float susan___cosf(float x);
38float susan___fabsf(float x);
39float susan___floorf(float x);
40float susan___ieee754_acosf(float x);
41float susan___ieee754_powf(float x, float y);
42int32_t susan___ieee754_rem_pio2f(float x, float *y);
43float susan___ieee754_sqrtf(float x);
44int susan___isinff (float x);
45float susan___kernel_cosf(float x, float y);
46float susan___kernel_sinf(float x, float y, int iy);
47int susan___kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2);
48float susan___scalbnf (float x, int n);
49float susan___ieee754_logf(float x);
50float susan___ieee754_log10f(float x);
51float susan___sinf(float x);
52
53#endif // _WCCLIBM
diff --git a/baseline/source/susan/wccmalloc.c b/baseline/source/susan/wccmalloc.c
new file mode 100644
index 0000000..edf01cc
--- /dev/null
+++ b/baseline/source/susan/wccmalloc.c
@@ -0,0 +1,51 @@
1#include "wccmalloc.h"
2
3// This must be redefined for each new benchmark
4#define HEAP_SIZE 30000
5
6char susan_simulated_heap[HEAP_SIZE];
7unsigned int susan_freeHeapPos;
8
9void* susan_wccmalloc( unsigned int numberOfBytes )
10{
11 // Get a 4-byte adress for alignment purposes
12 unsigned int offset = ( (unsigned long)susan_simulated_heap + susan_freeHeapPos ) % 4;
13 if ( offset ) {
14 susan_freeHeapPos += 4 - offset;
15 }
16 void* currentPos = (void*)&susan_simulated_heap[susan_freeHeapPos];
17 susan_freeHeapPos += numberOfBytes;
18 return currentPos;
19}
20void susan_wccfreeall( void )
21{
22 susan_freeHeapPos = 0;
23}
24
25void* susan_wccmemcpy(void* dstpp, const void* srcpp, unsigned int len)
26{
27 unsigned long int dstp = (long int) dstpp;
28 unsigned long int srcp = (long int) srcpp;
29
30 _Pragma("loopbound min 76 max 76")
31 while (len > 0) {
32 char __x = ((char *) srcp)[0];
33 srcp += 1;
34 len -= 1;
35 ((char *) dstp)[0] = __x;
36 dstp += 1;
37 }
38
39 return dstpp;
40}
41
42void susan_wccmemset( void *p, int value, unsigned int num )
43{
44 unsigned long i;
45 char *char_ptr = (char*)p;
46
47 _Pragma( "loopbound min 7220 max 28880" )
48 for ( i = 0; i < num; ++i ) {
49 *char_ptr++ = (unsigned char)value;
50 }
51}
diff --git a/baseline/source/susan/wccmalloc.h b/baseline/source/susan/wccmalloc.h
new file mode 100644
index 0000000..dbb2ada
--- /dev/null
+++ b/baseline/source/susan/wccmalloc.h
@@ -0,0 +1,10 @@
1#ifndef _WCCMALLOC_H
2#define _WCCMALLOC_H
3
4void* susan_wccmalloc( unsigned int numberOfBytes );
5//! Frees ALL allocated memory space
6void susan_wccfreeall( void );
7void *susan_wccmemcpy( void* dstpp, const void* srcpp, unsigned int len );
8void susan_wccmemset( void *p, int value, unsigned int num );
9
10#endif
diff --git a/baseline/tacleNames.txt b/baseline/tacleNames.txt
new file mode 100644
index 0000000..8f4845a
--- /dev/null
+++ b/baseline/tacleNames.txt
@@ -0,0 +1,19 @@
1petrinet
2ndes
3statemate
4adpcm_dec
5cjpeg_wrbmp
6adpcm_enc
7cjpeg_transupp
8dijkstra
9epic
10fmref
11gsm_dec
12h264_dec
13huff_enc
14rijndael_enc
15rijndael_dec
16gsm_enc
17susan
18ammunition
19mpeg2
diff --git a/run_everything.sh b/run_everything.sh
new file mode 100755
index 0000000..8d46ad7
--- /dev/null
+++ b/run_everything.sh
@@ -0,0 +1,21 @@
1#!/bin/bash
2
3maxJobs=$1
4runID=$2
5
6if [ $# -lt 2 ]; then
7 echo "Usage $0 <number of iterations> <run ID>"
8 exit
9fi
10
11date
12cd baseline
13make all
14../interference-benchmark/deactivateCoresSMT.bash
15./run_baseline.sh 15 $maxJobs $runID
16date
17cd ../all_pairs
18../../interference-benchmark/activateCores.bash
19make all
20./run_all_pairs.sh 15 31 $maxJobs $runID
21date